![]() |
Продуманная синхронизация времени в онлайн играх.
Кто знает - SOS! :confused:
Допустим расчитано что виртуальный день - четыре реальных минуты. Как, определяясь этой формулой - создать пассивный скрипт выполнения заданного пользователем действия? Причем не однократно. Для обработки данных в mysql с помощью функий действия, написанные в php. |
Недостаточно исходных данных.
|
Берешь точку отсчета и сопоставляешь ее с реальной датой. далее тупо мат. операции.
|
Цитата:
В плане что бы меньше нагрузки на скрипты и базу. |
Цитата:
то есть то что он нажимает - должно выполняться вне зависимости от виртуального дня, а какие то параметры, должны восстанавливаться, автоматически высчитываясь от других параметров ( то есть без вмешательство на это действие, пользователя, например заданный период ежедневно должен выполняться сам и постоянно изменять какое то значение, за которое отвечает этот скрипт ) |
Вот, отличный пример для реализации синхронизации виртуального времени:
С аккаунта игрока, каждые 4-е минуты, должны вычитаться и добавляться определённые значения для параметров. Например надо сделать, что бы с аккаунта каждый виртуальный день, надо переводить деньги на другой аккаунт. А кроме того, если функция выбрана, то к аккаунту должен прибавляться параметр здоровья по +5 в один виртуальный день, пока не достигнет максимального значения, заданное для этого параметра здоровья. Вот еси кому не трудно - подкиньте ссылок по этому вопросу, или может кто скажет что то из личного опыта. |
Получается что скрипту придётся пробегать каждую учётную запись в базе данных каждые 4-е минуты?
Это ведь большая нагрузка на сервер. |
Вот придумаешь же всякую х**ню ;)
|
Цитата:
|
Помню были архивы сайтов целиком, такие как территория, комбатс и подобные - сейчас бы достать пару движков - посмотреть систему временной работы каждой, отметить плюсы и минусы в каждой системе и сравнить.
Может у кого есть движки? Кто может зальет на rapidshare? |
1 UPDATE запрос и БД каждые 4 минуты при pconnect'e займет меньше времени, чем перезагрузка странички игрока :)
имхо это самый быстрый и простой способ. |
Ajax, PEPSI, ajax
|
Цитата:
|
Цитата:
timestamp - с какого времени будет действовать правило pid (playerid) - для какого пользователя endtimestamp - до какого времени (по time(), скажем) будет действовать правило. Тут от задачи, для каждого отдельного элемента в игре нужно по разному брать исходные данные и применять результат вычислений. Отпиши аську, чем смогу, помогу, сам кодил раньше броузерку :) |
PEPSICOLA, а если так
PHP код:
|
Имеет смысл обновлять данные не каждые n минут, а только тогда, когда они понадобятся - в этом случае нужно хранить время последнего обновления. У такого метода есть преимущество - будет довольно просто организовать кеш.
|
ChaaK, когда конечный ответ в теме будет, я тебе матом скажу, ок?Умник :)
|
Цитата:
|
Цитата:
|
Вот именно - будет присутствовать база актуальности действия.
То есть там всё строго со временем, карта перемещения, распределение свободного времени и т.п. Сама проблема в том - что я не знаю как заставить скрипт работать самому и к тому же управлять базой данных, в зависимости от этих временных едениц. :rolleyes: Я так - более глобально подумал, неужели база данных, на обычном хостинге, выдержит такую нагрузку? То есть каждые 1-3-5 секунд, выполнять такой тяжелый механизм просчёта для каждого пользователя? Представьте что их около 1000 (для начала) это надо пробежать по всей таблице действий из базы данных и ориентируясь на них - изменять значения из других таблиц. |
поэтому браузерные игры ставят на выделеный серв ...
|
Блин... что ж у меня не получается нормально выразиться то :))) Как дерьмово когда не знаешь что хочешь :)))
Эммм.. как создать этот ориентир времени, относительно которого, будут производиться зависящие от него действия? :) Этот таймер, должен каждую секунду (в лучшем случае), пробежать всю таблицу "действий", найти уже просроченное действие, а именно, то что сказал постом выше etc: Цитата:
|
Пришел в голову анальный вариант:
При каждом обновлении страницы у юзера обновляюца, например, кукисы, а точнее timestamp в них. Сравнивать timestamp юзера со stamp'ом в момент подгрузки страницы и мат. формулой рассчитывать тот же рост хп или что там нужно :) И, между прочим, это можно реализовать на том же аяксе, как мне думаеца) upd: Ещё можно в кроне или любом другом менеджере задач запускать скриптец, который прогоняет бд и изменяет заданные параметры (ну т.е. восстановление хп, например) |
n0ne, так куки смогут подделывать. Это ещё хуже, что бы какие то значения переменных напрямую брались из кук :)
имхо |
PEPSICOLA, смотри, скажем, есть таблица, в которой это все содержиться. В нее пишутся, скажем, эффекты воздействия над тем или иным параметром, как я уже писал - время начала и конца действия + привязка к игроку.
date - тек. дата start - начало действия end - конец действия time - число, соотв. игровому времени (соотношение игрового времени с реальным). eff - единица эффекта, на 1 ед. time :D 1. Извелкаем данные 2.1. Смотрим дату начала действия 2.2. Смотрим текущую дату, если она превышает конец действия то нам нужно вычислить результат воздействия следующим образом: Цитата:
Цитата:
2.3.1. обновляем timestamp с целью того, чтобы после обновления страницы эффект добавился с последнего обновления, а не с первой записи. 2.4. добавляем полученные единицы к статам (скажем, просто обновляем таблицу).. ппц нах) |
пепсик, не надо каждые 4 минуы обновлять - храни последнюю дату обновления, а когда инфа потребуется - по запросу обновляй у данного как выполненное (t2-t1)/4 раз.
|
Pepsicola, а не надо в открытом виде хранить :) Это всё можно грамотно закриптовать)) И ещё есть вариант с кроном, он, имхо, лучше)
|
А во ,создай отдельную таблицу где будешь отсчитывать время , и ориентируйся на эту таблицу(допустим
если время там по 0 то когда пользователь забросит её то выполняется какой то код else ещо непрошло определённое кол-во времени) |
Цитата:
|
Цитата:
|
| Время: 12:43 |