www.mudconnector.su https://forum.mudconnector.su/ |
|
Триггеры и прочие специальные действия https://forum.mudconnector.su/viewtopic.php?f=14&t=23 |
Страница 1 из 3 |
Автор: | andrej_andreev [ Сб июн 07, 2008 1:48 pm ] |
Заголовок сообщения: | Триггеры и прочие специальные действия |
Иногда хочется, чтобы монстры были устроены чуть сложнее, чем мешок с песком. Для добавления нового поведения я использую модули, подключаемые при необходимости. Выглядит это примерно так: в описании прототипа монстра: Код: 4: :long_name: Часовой следит за путниками [...] :special_module: Agressive А в модели монстра написано примерно вот так: Код: class Monster < Creature def initialize(hash) super(hash) if sm = hash[:special_module] self.extend eval("#{sm}") end end [...] То есть при создании нового монстра из прототипа, к нему подмешивается модуль. А в самом модуле (в данном случае: Agressive) вот что: Код: module Agressive def on_say(who, what) say "Молчать!!!" attack(who) end end А есть еще такой, более дружелюбный вид: Код: module Greeting def on_say(who, what) if what=~/^привет/ say "Привет, #{who.name}. Не желаешь ли чего-нибудь купить?" end end end Кроме того, при отправке сообщений всем в комнате командой say(str) у каждого, кто это видит, вызывается on_say (если есть). Таким образом можно создавать практически любое поведение. Главное, написать при каждом событии, которое имеет отношение к монстру, метод-реакцию. Так же можно сложно описать поведение в бою или использование умений: подмешивать их при наличии. Или разные флаги типа лутер или агро. |
Автор: | KadVar [ Сб июн 07, 2008 1:53 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
Немножко непонятно кто где и как что подмешивает. В частности на какие события и как могут реагировать билдеры. |
Автор: | andrej_andreev [ Сб июн 07, 2008 2:05 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
Из файла прототипа вынимается хэш с данными монстра: имя, пол, статсы -- все. После чего в базу, хранящуюся в памяти сервера, добавляется вот такой объект: Monster.new(hash). Есть в этом хэше есть указание на специальный модуль, то он подключается и все его методы "встраиваются" в этого монстра. Билдер пишет модуль, в котором может использовать заранее известный набор методов. Этот модуль он может прикреплять к монстру, вещи или даже комнате -- не важно. При взаимодействии двух объектов любой природы, у того, над которым производится действие (создание над комнатой, создание над вещью, создание над созданием), вызывается соотвествующий метод on_действие. Вошли люди в комнату, у нее вызвался метод on_enter(who), а тем, кто в этой комнате был и видел, как вошла группа, не только отправили сообщение, но и вызвали тот же метод on_enter(who). Просто у некоторых объектов он определен (модулем), но у большинства -- нет. Сообщать можно и предметам, в принципе, если надо. "Заранее известный набор методов" описан в движке. В общем говоря, на каждый метод акции (сказать, войти, взять и т.д.) есть метод реакции. P.s.: для ознакомления с руби вот книжка хорошая: http://www.ruby-doc.org/docs/ProgrammingRuby/ |
Автор: | KadVar [ Сб июн 07, 2008 2:23 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
В чем эээ революционность ? Мне казалось в предыдущем поколении все именно так и организованно... |
Автор: | andrej_andreev [ Сб июн 07, 2008 2:29 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
Была претензия на революционность? ![]() Писать, по-моему, несколько удобней. Может, плохо искал, но в циркле где-то триггеры спрятаны, неочевидны. Не подскажете, как они цепляются к монстру? |
Автор: | KadVar [ Сб июн 07, 2008 2:49 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
andrej_andreev писал(а): Была претензия на революционность? ![]() Писать, по-моему, несколько удобней. Может, плохо искал, но в циркле где-то триггеры спрятаны, неочевидны. Не подскажете, как они цепляются к монстру? В том варианте что я видел в монстре указаны номера всех триггеров к этому монстру. Они хранятся отдельно в отдельном файле. К каждому триггеру указано на что он срабатывает и что делает. |
Автор: | andrej_andreev [ Сб июн 07, 2008 2:55 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
А на каком языке это написано? Как вызываются эти функции? |
Автор: | KadVar [ Сб июн 07, 2008 3:04 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
andrej_andreev писал(а): А на каком языке это написано? Как вызываются эти функции? Мы пользуемся DG scripts http://www.a-mud.ru/builder/Script_Russian/index.htm |
Автор: | andrej_andreev [ Сб июн 07, 2008 3:12 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
спасибо, изучаю |
Автор: | Дворак [ Сб июн 07, 2008 3:47 pm ] |
Заголовок сообщения: | Re: Триггеры и прочие специальные действия |
ну что же ... вполне нормально... есть слабое место ... скрипт, которое описывает какое-то стандартное поведение моба... его нужно писать для всех мобов или есть что-то типа библиотеки скриптов ? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |