www.mudconnector.su
https://forum.mudconnector.su/

Рассылка сообщений
https://forum.mudconnector.su/viewtopic.php?f=14&t=30
Страница 1 из 2

Автор:  andrej_andreev [ Пт июн 13, 2008 7:21 pm ]
Заголовок сообщения:  Рассылка сообщений

В игре есть много сообщений, которые надо рассылать. Под сообщениями подразумевается некоторая информация, выдаваемая клиенту.
Эти сообщения простые очень по идее: кто-то зашел в комнату -- надо всем видящим это создание об этом сказать (и тем кто видел, как ушел, и тем кто видел, как пришел). То же про вещи (взять/надеть/бросить/снять), про социалы и команды (смотреть на вещь/создание), про бой тоже. Можно миллион придумать.
Первый вариант, который я сделал -- тупой. Например, если персонаж берет предмет, то в том же методе Creature#take(item) рассылаются сообщения всем, кто находится в той же комнате. Это отстой потому, что надо делать проверки. Отстой потому, что по сути создание, проверяет, кому сказать в этйо комнате о своем действии. Смешно даже.
Пусть лучше, думаю, каждый будет сам думать, принять ли ему во внимание действие или нет.

Говоря короче, при поднятии предмета у всех созданий в комнате (или во всем мире), у самой комнаты (или всем комнатам), а также у вещей (-||-) вызывать метод типа #taken(actor, what). В общем случае там будет отсылка мессаджа клиенту (у персонажей) или ничего (у вещей, монстров и комнат), но эти методы можно определить в модуле (типа триггера получится). Эти методы содержат в себе реакцию объекта на какое-то действие. Действия (акции) симметричны с реакциями.

Проще всего, конечно, реализовать все эти методы на общем уровне Главного объекта MObject. От него наследуются Zone, Room, Creature, Item. В главное объекте делаем болванки методов, переопределяемые в каждом классе отдельно. Реакции делятся на три группы по признаку причин и момента их появления:
1. реакции на действия после их совершения: MObject#after_tell, #after_spell, #after_drop
2. реакции перед действием: #before_tell, #before_attack -- вызывается перед чьим-нибудь нападением, #before_spell, #before_drop -- если, например, надо поймать вещь налету.
3. реакции на тикеры: #on_tick (в начале тика), #after_round (после совершения удара руками).
По умолчанию у игрока (класс Player < Creature) стоит в методах отсылка сообщения клиенту (#send "вася бросил меч"), у монстра и вещи вообще пусто.

В том числе это ответ на вопрос, что доступно билдеру.
Интересно мнение кодеров на такую реализацию рассылки сообщений вместе с реакциями.

Автор:  Дворак [ Пт июн 13, 2008 8:41 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

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

Ньюнсы однако есть -
1. Так как мобов и объектов много - то для каждого писать скрипт на каждое из событий запаришся...
Поэтому у меня есть общие (базовые) скрипты для мобов и объектов, которые выполняются по
умолчанию. Если какому-то мобу нужно поступить на событие по другому - ему пишется свой
скрипт на это событие

2. Последовательность запуска скриптов - т.е. чьи скрипты на событие будут запускаться первыми ?
Мобов, чаров или может игроков ?

Автор:  andrej_andreev [ Пт июн 13, 2008 8:56 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

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

Прочитал про "скрипты" и понял, что ООП рулит.

Автор:  Дворак [ Пн июн 16, 2008 5:57 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

andrej_andreev писал(а):
Логично будет делать для созданий и вещей по порядку расположения в комнатах.


Это тоже вариант. Просто тот, кто обрабатывается первым, получает приемущество -право "первого удара". Поэтому все не так просто. Но попробовать стоит.

andrej_andreev писал(а):
Прочитал про "скрипты" и понял, что ООП рулит.


Где и что ты прочитал про скрипты ? :)

Автор:  D-RectX [ Чт апр 22, 2010 6:48 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

Тема двухлетней давности, но я тут думал и надумал более удобный вариант с сообщениями, который мог бы комбинировать как общение, так и действия персонажей. Вся технология завязывается на Jabber. Вместе с игровым сервером можно использовать сервер Jabber а в клиенте к игре по тихому сделать и клиент жабы но сделанный для нужд игры. В чем идея. Жаба как известно поддерживает так называемые конференции, что есть ни что иное как комнаты чатов. Что ж :) все легко :) приватные сообщения могут быть как сообщения из ростера. А уже для каждой игровой комнаты к примеру можно сделать отдельную конференцию. Зашел в комнату, одновременно зашел в соответствующую конференцию. Ну и соответственно вышел из конференции комнаты откуда ушел. Таким образом простые сообщения можно посылать в эту комнату и будут их слышать только те кто там находится. Простые действия так же могут быть обработаны как /me. И здесь определение кому отсылать сообщения будет идти автоматом как бы. Главное клиенту следить куда отсылать сообщение, в какую комнату, и так далее. И это лучше чем нагружать сервер такими вещами, как определение кто находится в комнате, и рассылать каждому игроку. Пускай этим занимается Jabber сервер. :)

Автор:  KadVar [ Пт апр 23, 2010 10:40 am ]
Заголовок сообщения:  Re: Рассылка сообщений

Я верно понял, что решения о том, что увидят другие игроки будет принимать клиент одного из игроков :) ?

Автор:  D-RectX [ Пт апр 23, 2010 4:56 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

Отчасти и да и нет :) подробнее думаю стоит описать :) предложенное решение как уже понятно исключает вообще использование старых и так скажем классических клиентов и протоколов мада :) следовательно и клиенты нужны будут :) по сути решать будет клиент :) так будет удобнее :) но здесь контакт с джаббером не будет очевидным именно для игрока. То есть не предполагается сделать в клиенте к игре еще один квип или пси. Клиент тихо сам должен работать с сервером, основываясь на действиях игрока. То есть игрок в процессе игры перешел с одной комнаты в другую, то и клиент тихо, без участия игрока выходит из конференции для одной комнаты, и заходит в конференцию другой комнаты куда зашел игрок :) то есть тут как бы и клиент решает, и он одновременно не решает что увидят другие игроки :) я предлагаю именно подстроить технологию джаббера для построения именно части коммуникации в игре. Как то вот так это :) а игрок на деле не будет как бы знать, что это все на джаббере, что личные сообщения это ростер, при переходе по комнатам он ходит по конференциям, что к примеру торговый чат, чаты клана и глобальный и системный это не чаты, а тоже конференции на сервере джаббера. То есть это внутри клиента все :) а игроку предлагаются окна чатов или переговоров к примеру :) плюс можно и различные статусы, и настроения протокола использовать и в игре :) найти им применение :) как бы поле деятельности готово, широко и мощно :) главное им воспользоваться, и написать честный клиент и продумать как это будет работать с сервером :) тут может возникнуть лишь одна проблема. :) если исходные клиента открыты будут, лишь бы этим не воспользовались кривые руки, которым охота что нить там изменить :) но это тоже можно в принципе решить :) ибо как мне кажется и сервер игры будет доводиться до нужд, и вместе с ним и клиент каждой отдельной муд на этом сервере игровом тоже для соответствия нуждам :) вот такие вот мысли :)

Автор:  D-RectX [ Пт апр 23, 2010 4:59 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

И еще повторюсь :) я предлагаю джаббер использовать ТОЛЬКО ДЛЯ ОБЩЕНИЯ В ИГРЕ и упрощения решения задачи, так как в сервер игры не нужно будет еще добавлять сервер мгновенных сообщений. Этот подход я предлагаю использовать лишь для общения игроков, но не для остальной игровой механики.

Автор:  KadVar [ Пт апр 23, 2010 6:23 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

D-RectX писал(а):
И еще повторюсь :) я предлагаю джаббер использовать ТОЛЬКО ДЛЯ ОБЩЕНИЯ В ИГРЕ и упрощения решения задачи, так как в сервер игры не нужно будет еще добавлять сервер мгновенных сообщений. Этот подход я предлагаю использовать лишь для общения игроков, но не для остальной игровой механики.


Я не вижу существенного преимущества.
Интеграция всего этого весьма вероятно займет больше времени, чем реализация точно того, что требуется.
Безопасность решения тоже мягко говоря "под угрозой".
А главное непонятно "ради чего сыр-бор" ?

Автор:  D-RectX [ Пт апр 23, 2010 9:04 pm ]
Заголовок сообщения:  Re: Рассылка сообщений

Ну интеграция не так сложна. Библиотеки благо есть и их много. xmpp.org/libraries.html :) во вторых часть функций если не все по отправке сообщений и коммуникации между игроками будет перенесена в отдельный сервер. Это гораздо упростит код логического сервера игры. То есть там будет реализована именно логика игры, а не логика в перемешку с вопросами об отправке приеме сообщений, определении тех кто в комнате находится куда зашел игрок, кому отправлять надо, кому не надо. Короче решение таких задач мало того что можно решить гораздо проще и заодно перенести часть нагрузки на клиент, ибо нагрузка не очень высокая, но также это может позволить не засорять код движка игры различными задачами коммуникации и сообщения между игроками. То есть вот игровой сервер. Вот джаббер сервер. Вот они вместе и работают на благость игрокам. А клиент взаимодействует с ними обоими по мере надобности. Некое разделяй и властвуй :)

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/