www.mudconnector.su

Национальный мадконнектор.
Текущее время: Сб апр 27, 2024 10:48 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Сб июн 07, 2008 1:48 pm 
Не в сети

Зарегистрирован: Пт май 30, 2008 10:38 pm
Сообщений: 80
Откуда: спб
Иногда хочется, чтобы монстры были устроены чуть сложнее, чем мешок с песком.
Для добавления нового поведения я использую модули, подключаемые при необходимости. Выглядит это примерно так:
в описании прототипа монстра:
Код:
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 (если есть). Таким образом можно создавать практически любое поведение. Главное, написать при каждом событии, которое имеет отношение к монстру, метод-реакцию. Так же можно сложно описать поведение в бою или использование умений: подмешивать их при наличии. Или разные флаги типа лутер или агро.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 1:53 pm 
Не в сети
Site Admin

Зарегистрирован: Пт май 16, 2008 4:14 pm
Сообщений: 1416
Немножко непонятно кто где и как что подмешивает.
В частности на какие события и как могут реагировать билдеры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 2:05 pm 
Не в сети

Зарегистрирован: Пт май 30, 2008 10:38 pm
Сообщений: 80
Откуда: спб
Из файла прототипа вынимается хэш с данными монстра: имя, пол, статсы -- все. После чего в базу, хранящуюся в памяти сервера, добавляется вот такой объект: Monster.new(hash). Есть в этом хэше есть указание на специальный модуль, то он подключается и все его методы "встраиваются" в этого монстра.

Билдер пишет модуль, в котором может использовать заранее известный набор методов. Этот модуль он может прикреплять к монстру, вещи или даже комнате -- не важно.

При взаимодействии двух объектов любой природы, у того, над которым производится действие (создание над комнатой, создание над вещью, создание над созданием), вызывается соотвествующий метод on_действие. Вошли люди в комнату, у нее вызвался метод on_enter(who), а тем, кто в этой комнате был и видел, как вошла группа, не только отправили сообщение, но и вызвали тот же метод on_enter(who). Просто у некоторых объектов он определен (модулем), но у большинства -- нет. Сообщать можно и предметам, в принципе, если надо.

"Заранее известный набор методов" описан в движке. В общем говоря, на каждый метод акции (сказать, войти, взять и т.д.) есть метод реакции.

P.s.: для ознакомления с руби вот книжка хорошая: http://www.ruby-doc.org/docs/ProgrammingRuby/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 2:23 pm 
Не в сети
Site Admin

Зарегистрирован: Пт май 16, 2008 4:14 pm
Сообщений: 1416
В чем эээ революционность ? Мне казалось в предыдущем поколении все именно так и организованно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 2:29 pm 
Не в сети

Зарегистрирован: Пт май 30, 2008 10:38 pm
Сообщений: 80
Откуда: спб
Была претензия на революционность? :)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 2:49 pm 
Не в сети
Site Admin

Зарегистрирован: Пт май 16, 2008 4:14 pm
Сообщений: 1416
andrej_andreev писал(а):
Была претензия на революционность? :)

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


В том варианте что я видел в монстре указаны номера всех триггеров к этому монстру.
Они хранятся отдельно в отдельном файле. К каждому триггеру указано на что он
срабатывает и что делает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 2:55 pm 
Не в сети

Зарегистрирован: Пт май 30, 2008 10:38 pm
Сообщений: 80
Откуда: спб
А на каком языке это написано? Как вызываются эти функции?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 3:04 pm 
Не в сети
Site Admin

Зарегистрирован: Пт май 16, 2008 4:14 pm
Сообщений: 1416
andrej_andreev писал(а):
А на каком языке это написано? Как вызываются эти функции?

Мы пользуемся DG scripts
http://www.a-mud.ru/builder/Script_Russian/index.htm


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 3:12 pm 
Не в сети

Зарегистрирован: Пт май 30, 2008 10:38 pm
Сообщений: 80
Откуда: спб
спасибо, изучаю


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Сб июн 07, 2008 3:47 pm 
Не в сети

Зарегистрирован: Вт май 27, 2008 1:06 pm
Сообщений: 60
Откуда: Питер
ну что же ... вполне нормально...
есть слабое место ...
скрипт, которое описывает какое-то стандартное поведение моба...
его нужно писать для всех мобов или есть что-то типа библиотеки скриптов ?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron