Кто знает - SOS! Допустим расчитано что виртуальный день - четыре реальных минуты. Как, определяясь этой формулой - создать пассивный скрипт выполнения заданного пользователем действия? Причем не однократно. Для обработки данных в mysql с помощью функий действия, написанные в php.
Ну так это понятно. А как технически, этот процесс более лучше проработать? В плане что бы меньше нагрузки на скрипты и базу.
И надо что бы скрипт выполнялся пассивно, вне зависимости от пользователя. то есть то что он нажимает - должно выполняться вне зависимости от виртуального дня, а какие то параметры, должны восстанавливаться, автоматически высчитываясь от других параметров ( то есть без вмешательство на это действие, пользователя, например заданный период ежедневно должен выполняться сам и постоянно изменять какое то значение, за которое отвечает этот скрипт )
Вот, отличный пример для реализации синхронизации виртуального времени: С аккаунта игрока, каждые 4-е минуты, должны вычитаться и добавляться определённые значения для параметров. Например надо сделать, что бы с аккаунта каждый виртуальный день, надо переводить деньги на другой аккаунт. А кроме того, если функция выбрана, то к аккаунту должен прибавляться параметр здоровья по +5 в один виртуальный день, пока не достигнет максимального значения, заданное для этого параметра здоровья. Вот еси кому не трудно - подкиньте ссылок по этому вопросу, или может кто скажет что то из личного опыта.
Получается что скрипту придётся пробегать каждую учётную запись в базе данных каждые 4-е минуты? Это ведь большая нагрузка на сервер.
Помню были архивы сайтов целиком, такие как территория, комбатс и подобные - сейчас бы достать пару движков - посмотреть систему временной работы каждой, отметить плюсы и минусы в каждой системе и сравнить. Может у кого есть движки? Кто может зальет на rapidshare?
1 UPDATE запрос и БД каждые 4 минуты при pconnect'e займет меньше времени, чем перезагрузка странички игрока имхо это самый быстрый и простой способ.
Т.е. насколько я понимаю, все-равно в базе будет какая-то запись о снятии/пополнении параметров, не от балды же они пополняются, либо, если они глобально у всех пополняются, бери, как я говорил, точку отсчета и просто дели количество прошедшего времени на 4 - получишь столько единиц пополнения/вычитания параметров. Либо от времени записи данных в базе. Можно так-же актуальность действия прописать, т.е., например: timestamp - с какого времени будет действовать правило pid (playerid) - для какого пользователя endtimestamp - до какого времени (по time(), скажем) будет действовать правило. Тут от задачи, для каждого отдельного элемента в игре нужно по разному брать исходные данные и применять результат вычислений. Отпиши аську, чем смогу, помогу, сам кодил раньше броузерку
PEPSICOLA, а если так PHP: @set_time_limit(0); @ini_set("max_execution_time", 0); @ini_set("mysql.connect_timeout", -1); @ignore_user_abort(1); $link=mysql_pconnect('server','user',password); while (mysql_ping($link)) { sleep(240); mysql_query('UPDATE characters SET characters.hp=characters.hp+characters.hp_tick WHERE characters.incombat=0 AND characters.online>0'); // Раз в 240 секунд увеличиваем всем персонажам ХП на величину hp_tick (которая может быть и отрицательная), если они не в бое и онлайн } mysql_close($link); Скрипт запускаем на серве и он будет висеть и обновлять пока есть соединение с сервером
Имеет смысл обновлять данные не каждые n минут, а только тогда, когда они понадобятся - в этом случае нужно хранить время последнего обновления. У такого метода есть преимущество - будет довольно просто организовать кеш.
Вот именно - будет присутствовать база актуальности действия. То есть там всё строго со временем, карта перемещения, распределение свободного времени и т.п. Сама проблема в том - что я не знаю как заставить скрипт работать самому и к тому же управлять базой данных, в зависимости от этих временных едениц. Я так - более глобально подумал, неужели база данных, на обычном хостинге, выдержит такую нагрузку? То есть каждые 1-3-5 секунд, выполнять такой тяжелый механизм просчёта для каждого пользователя? Представьте что их около 1000 (для начала) это надо пробежать по всей таблице действий из базы данных и ориентируясь на них - изменять значения из других таблиц.