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 а в клиенте к игре по тихому сделать и клиент жабы но сделанный для нужд игры. В чем идея. Жаба как известно поддерживает так называемые конференции, что есть ни что иное как комнаты чатов. Что ж ![]() ![]() ![]() |
Автор: | 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/ |