Форумы онлайн-игры "Сфера Миров"
http://sow.flybb.ru/

Вопросы по написанию триггеров
http://sow.flybb.ru/topic66.html
Страница 3 из 5

Автор:  Мекор [ 25-10, 00:33 ]
Заголовок сообщения: 

Ну в моем примере функция StoneCurseCast не определена (не путать с _KERNEL bool CastStoneCurse( const CSpell* spell, int power, CastType castType, const char* args )), а так это и есть рабочий пример ) Скопипастено из файла )

Автор:  Серб [ 25-10, 01:48 ]
Заголовок сообщения: 

Мекор писал(а):
Ну в моем примере функция StoneCurseCast не определена (не путать с _KERNEL bool CastStoneCurse( const CSpell* spell, int power, CastType castType, const char* args )), а так это и есть рабочий пример ) Скопипастено из файла )


Да я всю логику заменил на вывод логов, что бы узнать что отрабатывает, но вывод ничего не вывел.
Боюсь у меня где-то в настройках проекта проблема. Мне бы маленький проект с работающей переопределенной логикой у мобов создаваемых репопом.

Автор:  Roko [ 25-10, 11:27 ]
Заголовок сообщения: 

Вообще вся проблемма с созданием динамического моба в том, что за ним нужно следить самому (освобождать динамическую память).

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

Автор:  Roko [ 25-10, 11:28 ]
Заголовок сообщения: 

Серб писал(а):
Мне бы маленький проект с работающей переопределенной логикой у мобов создаваемых репопом.

Поищу, вышли мыло приватом по форуму.

Автор:  Серб [ 25-10, 12:04 ]
Заголовок сообщения: 

Насчет создания моба с переопределенным AI у меня тут догадка появилась.
Время появится - попробую проверить.
Суть в том, что для нормальной работы переопределенных функций свой класс мобов надо делать не от базового класса а от класса уже существующего, и что бы его тип совпадал в описании зоны и в dll зоны.
Когда проверял пример у меня тип другой был. :)

Это конечно не есть хорошо, так как проблематично сделать полностью новый тип (ну что бы и в описании зоны ставить новый тип), но по крайней мере будет работать.

А насчет удаления. Так это можно было бы логами (или еще как) выяснить для мобов с нормальным репопом и сделать так же для мобов созданных вручную.

Насчет памяти. Меня смущает отсутствие виртуальных деструкторов. В linux gcc от этого память начинает терять а здесь?

Автор:  Roko [ 25-10, 13:01 ]
Заголовок сообщения: 

Походу деструктор для мобов не переопределяется, то есть тут проблеммы быть не должно. Что касается проблеммы памяти, то тут все зависит от реализации менеджера памяти. Скорее всего проблеммы быть не должно, т.к. менеджер ничего не знает о типе указателя. То есть менеджер хранит указатель на область выделеной памяти и размер этой области.

А на счет виртуального деструктора ты все же не прав, деструктор у мобов виртуальный:
Код:
virtual ~CChar();

Автор:  Серб [ 25-10, 16:22 ]
Заголовок сообщения: 

Roko писал(а):
А на счет виртуального деструктора ты все же не прав, деструктор у мобов виртуальный:
Код:
virtual ~CChar();


Да, был не прав. Не туда посмотрел.

Просто как-то пытался измененные заголовочники подсунуть:).
Не мог понять почему функция Send переопределяется а какая-то другая - не хочет.
Очевидно проблема с несоответсвием класса моба в описании и класса в dll у меня выливалась и в неработу некоторых переопределяемых функций.

Автор:  Roko [ 26-10, 10:51 ]
Заголовок сообщения: 

Я дома посмотрел:
простое наследование класса CharMob и переопределение фабрики должно работать правильно. Пришлешь мыло, вышлю пример на почту.

Вообще на изучение заголовков уходит слишком много времени. И чем больше их изучаешь, тем больше хочется все поменять =)
Я бы даже свой код уже 10 раз поменял бы =)

Автор:  Серб [ 26-10, 17:41 ]
Заголовок сообщения: 

Roko писал(а):
Я дома посмотрел:
простое наследование класса CharMob и переопределение фабрики должно работать правильно. Пришлешь мыло, вышлю пример на почту.

Вообще на изучение заголовков уходит слишком много времени. И чем больше их изучаешь, тем больше хочется все поменять =)
Я бы даже свой код уже 10 раз поменял бы =)


Мыло:
serb[злобана собака]mail.ru

Автор:  Roko [ 27-10, 11:23 ]
Заголовок сообщения: 

ok, вечером вышлю

Автор:  Xizmedar [ 01-12, 00:50 ]
Заголовок сообщения: 

Объясни плиз как сделать, чтобы моб отвечал на фразу игрока?

Автор:  Альтанер [ 01-12, 02:32 ]
Заголовок сообщения: 

MTRG_SPEAK посмотри в хидерах

Автор:  Alz [ 01-12, 18:35 ]
Заголовок сообщения: 

А планируется ли написание/подключение скриптового языка? Решило бы многие проблемы.

Автор:  Xizmedar [ 01-12, 21:14 ]
Заголовок сообщения: 

Код:
int MobTrigger_103010(CMobTriggerData* data)
{
   if(data->m_type==MTRG_SPEAK)
   {
      CSpeakMobTriggerData* cData = (CSpeakMobTriggerData*)data;
      if( cData->m_text == привет)
      {
        cData->m_mob->ExecCmd("г Даров...\n");
       
         cData->m_mob->GiveAwardMoney(500, cData->m_char);
      } 
    }   
   return 0;
}       


Плод рысканья по MTRG_SPEAK, проблема - моб не отвечает на фразу.
Мб я не понимаю структуру создания трига из данного в хидерах?
Как мне правильно написать триг из этого описания?
Код:
// Данные тригера моба MTRG_SPEAK
class CSpeakMobTriggerData : public CMobTriggerData
{
 public : // Конструктор

   CSpeakMobTriggerData( CCharMob* mob, CCharPlayer* c, const char* text ) :
     CMobTriggerData( MTRG_SPEAK, mob ),
     m_char( c ),
     m_text( text )
   {}

 public : // Даннные
 
   CCharPlayer* m_char;  // Персонаж, сказавший фразу
   CString m_text; // Фраза
};

Автор:  Roko [ 01-12, 21:30 ]
Заголовок сообщения: 

Требуется указать какие события обрабатывает триггер, когда ты его подключаешь.

Подключается триггер в методе LoadTriggers(), например так:
g_trgMng.LoadMobTrigger(103010, MTRG_SPEAK, MobTrigger_103010);

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