Вторник, 19 Ноября 2024, 11:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выполнение скрипта на сервере
shahidДата: Понедельник, 23 Августа 2010, 17:24 | Сообщение # 1
был не раз
Сейчас нет на сайте
Начал разрабатывать движок для браузерки, столкнулся с такой проблемой:

допустим пользователь запустил скрипт битвы против другого юзера.
если один из них выйдет с сайта (по любой причине) - вместо него запуститься генерация ходов автоматом.
как быть, если выйдет второй пользователь?
как записать в таком случае изменения в базу данных?
возможно ли выполнение скрипта, если оба участника битвы оффлан?

Возможно кто-то сталкивался с подобным траблом при разработке?
Хотелось бы услышать аргументированые решения...

lvovandДата: Понедельник, 23 Августа 2010, 18:04 | Сообщение # 2
старожил
Сейчас нет на сайте
все в твоих руках в принципе, где-то тут уже обсуждалось - на каждое действие игрока обновляй для него текущее время в таблице, периодически сверяешь текущее время с временем из таблицы (например через крон скриптом), если разница больше определенного числа, то по ситуации либо автомат запускаешь если один ничего не делал, если два, то выкидываешь обоих

Разработка и продвижение сайтов. Дизайн
shahidДата: Понедельник, 23 Августа 2010, 18:16 | Сообщение # 3
был не раз
Сейчас нет на сайте
ну выкинуть, я их предположим выкину, а вот как корректно закончить работу скрипта (записать в базу результат) я не знаю.
дело же не в отслеживании активности, а в том, что скрипт не будет работать, если клиент не вызывает его. Каждый раз задавать работы крону? а если несколько дисконнектов? тогда как?
lvovandДата: Понедельник, 23 Августа 2010, 18:29 | Сообщение # 4
старожил
Сейчас нет на сайте
что-то я не понял, если у тебя написан свой сервер и клиент, которые держат коннект между собой, то если коннект оборвался, сервер об этом может узнать и выполнить действия, которые ты задашь, если у тебя просто выполняется тот же php например, то скрипт выполняется при обращении к нему, отдает ответ если надо браузеру и завершает работу независимо от того закрыл человек браузер или в онлайне, поэтому и обновляют текущее время для игрока. Один из вариантов кроном вызывать скрипт скажем каждые 10 минут, сравнивать текущее время с временем игрока в таблице, если например пеосонаж в бою, а активности не было 10 минут, то выполняешь уже действия необходимые тебе, что надо в базу пишешь, если надо автоматом бой закончить, то вызываешь функции автоматического ведения боя для этого игрока.

Разработка и продвижение сайтов. Дизайн
1nfernoДата: Понедельник, 23 Августа 2010, 18:52 | Сообщение # 5
был не раз
Сейчас нет на сайте
Всем привет.
этот вопрос уже обсуждался

http://gcup.ru/forum/51-1972-6

В итоге похоже, что есть только два варианта:
1.запускать скрипт по крону, чтобы он проверял есть ли не завершенные бои или нет, и заверщал бы их
2.написать приложение (демон), которому бы передовалось сообщение о том что такой то бой начался, и он бы следил за этим боем и в случае оффлайна обоих игроков дописывал окончание боя.

shahidДата: Понедельник, 23 Августа 2010, 19:30 | Сообщение # 6
был не раз
Сейчас нет на сайте
Quote (1nferno)
этот вопрос уже обсуждался http://gcup.ru/forum/51-1972-6

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

BydlocoderДата: Вторник, 31 Августа 2010, 17:30 | Сообщение # 7
был не раз
Сейчас нет на сайте
Можно сделать кнопочку, которая появляется через 5 минут после того, как игрок нажал атаковать, если не последовало ответа оппонента.

Кнопочка запускает скрипт, проверяющий, когда поступило последнее действие от оппонента.

Если действительно прошло 5 минут, скрипт отвечает сам за этого игрока простой атакой, например.

Либо аякс скрипт сам проверяет каждыe n времени.

bumДата: Вторник, 31 Августа 2010, 18:20 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Bydlocoder, главное только не забыть проконтролировать ситуацию на сервере, а то читеры появятся очень скоро.
1nfernoДата: Вторник, 31 Августа 2010, 19:40 | Сообщение # 9
был не раз
Сейчас нет на сайте
Bydlocoder,
Quote
Можно сделать кнопочку

да, и посадить китайца , чтобы нажимал эту кнопочку =)))
какой аякс скрипт.... компьютеры игроков выключены, запускать скрипты некому и нечему...
NeZnayuДата: Вторник, 31 Августа 2010, 19:41 | Сообщение # 10
__танцуй!__
Сейчас нет на сайте
Quote (1nferno)
запускать скрипты некому и нечему...

Сервер на что?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
bumДата: Вторник, 31 Августа 2010, 20:20 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Quote (NeZnayu)
Сервер на что?

Он прав, дело в том, что сервер (здесь имеется ввиду серверная часть приложения) не может инициировать событие без участия клиента. Он может что-то делать только получив запрос от клиента.

У нас была в чем-то похожая ситуация. У нас просто раз в сутки на сервере по крону запускается скрипт прибивающий неактивные бои. Если же кто-то из учасников такого боя зайдет в игру, то бой будет прибит сразу же в этот момент. Если же в оффлайн во время боя вывалится только один игрок, то проверку инициирует автоматически клиент противника, поскольку на нем тоже тикает таймер. Для защиты от читерства сервер все такие запросы перепроверяет.

Сообщение отредактировал bum - Вторник, 31 Августа 2010, 20:21
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг