Продуманная синхронизация времени в онлайн играх.

Discussion in 'PHP' started by PEPSICOLA, 29 Sep 2008.

Thread Status:
Not open for further replies.
  1. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Кто знает - SOS! :confused:

    Допустим расчитано что виртуальный день - четыре реальных минуты.

    Как, определяясь этой формулой - создать пассивный скрипт выполнения заданного пользователем действия? Причем не однократно.

    Для обработки данных в mysql с помощью функий действия, написанные в php.
     
    #1 PEPSICOLA, 29 Sep 2008
    Last edited: 30 Sep 2008
    4 people like this.
  2. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Недостаточно исходных данных.
     
    1 person likes this.
  3. etc

    etc Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    113
    Likes Received:
    175
    Reputations:
    1
    Берешь точку отсчета и сопоставляешь ее с реальной датой. далее тупо мат. операции.
     
    1 person likes this.
  4. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Ну так это понятно. А как технически, этот процесс более лучше проработать?
    В плане что бы меньше нагрузки на скрипты и базу.
     
  5. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    И надо что бы скрипт выполнялся пассивно, вне зависимости от пользователя.

    то есть то что он нажимает - должно выполняться вне зависимости от виртуального дня, а какие то параметры, должны восстанавливаться, автоматически высчитываясь от других параметров ( то есть без вмешательство на это действие, пользователя, например заданный период ежедневно должен выполняться сам и постоянно изменять какое то значение, за которое отвечает этот скрипт )
     
    1 person likes this.
  6. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Вот, отличный пример для реализации синхронизации виртуального времени:

    С аккаунта игрока, каждые 4-е минуты, должны вычитаться и добавляться определённые значения для параметров.

    Например надо сделать, что бы с аккаунта каждый виртуальный день, надо переводить деньги на другой аккаунт.
    А кроме того, если функция выбрана, то к аккаунту должен прибавляться параметр здоровья по +5 в один виртуальный день, пока не достигнет максимального значения, заданное для этого параметра здоровья.

    Вот еси кому не трудно - подкиньте ссылок по этому вопросу, или может кто скажет что то из личного опыта.
     
  7. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Получается что скрипту придётся пробегать каждую учётную запись в базе данных каждые 4-е минуты?

    Это ведь большая нагрузка на сервер.
     
  8. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    Вот придумаешь же всякую х**ню ;)
     
  9. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Это серьёзно. К примеру, limpompo, знает о чём я. :p :D
     
  10. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Помню были архивы сайтов целиком, такие как территория, комбатс и подобные - сейчас бы достать пару движков - посмотреть систему временной работы каждой, отметить плюсы и минусы в каждой системе и сравнить.

    Может у кого есть движки? Кто может зальет на rapidshare?
     
  11. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    1 UPDATE запрос и БД каждые 4 минуты при pconnect'e займет меньше времени, чем перезагрузка странички игрока :)

    имхо это самый быстрый и простой способ.
     
    2 people like this.
  12. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Ajax, PEPSI, ajax
     
    1 person likes this.
  13. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Какой нафиг аякс? Причем тут исполнение у клиента, когда время должно идти на серванте?
     
  14. etc

    etc Elder - Старейшина

    Joined:
    16 Feb 2008
    Messages:
    113
    Likes Received:
    175
    Reputations:
    1
    Т.е. насколько я понимаю, все-равно в базе будет какая-то запись о снятии/пополнении параметров, не от балды же они пополняются, либо, если они глобально у всех пополняются, бери, как я говорил, точку отсчета и просто дели количество прошедшего времени на 4 - получишь столько единиц пополнения/вычитания параметров. Либо от времени записи данных в базе. Можно так-же актуальность действия прописать, т.е., например:

    timestamp - с какого времени будет действовать правило
    pid (playerid) - для какого пользователя
    endtimestamp - до какого времени (по time(), скажем) будет действовать правило.

    Тут от задачи, для каждого отдельного элемента в игре нужно по разному брать исходные данные и применять результат вычислений.

    Отпиши аську, чем смогу, помогу, сам кодил раньше броузерку :)
     
    1 person likes this.
  15. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    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);
    Скрипт запускаем на серве и он будет висеть и обновлять пока есть соединение с сервером
     
    _________________________
    #15 Gifts, 30 Sep 2008
    Last edited: 30 Sep 2008
    1 person likes this.
  16. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Имеет смысл обновлять данные не каждые n минут, а только тогда, когда они понадобятся - в этом случае нужно хранить время последнего обновления. У такого метода есть преимущество - будет довольно просто организовать кеш.
     
    2 people like this.
  17. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    ChaaK, когда конечный ответ в теме будет, я тебе матом скажу, ок?Умник :)
     
  18. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    https://forum.antichat.ru/threadnav37239-1-40.html
     
  19. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    При чём тут Ajax?
     
    1 person likes this.
  20. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Вот именно - будет присутствовать база актуальности действия.
    То есть там всё строго со временем, карта перемещения, распределение свободного времени и т.п.

    Сама проблема в том - что я не знаю как заставить скрипт работать самому и к тому же управлять базой данных, в зависимости от этих временных едениц. :rolleyes:

    Я так - более глобально подумал, неужели база данных, на обычном хостинге, выдержит такую нагрузку? То есть каждые 1-3-5 секунд, выполнять такой тяжелый механизм просчёта для каждого пользователя?

    Представьте что их около 1000 (для начала) это надо пробежать по всей таблице действий из базы данных и ориентируясь на них - изменять значения из других таблиц.
     
Thread Status:
Not open for further replies.