Code
class boss_test_mob : public CreatureScript
{
public:
boss_test_mob() : CreatureScript("boss_test_mob") { }
CreatureAI* GetAI(Creature* creature) const
{
return new boss_test_mobAI (creature);
}
struct boss_test_mobAI : public ScriptedAI
{
boss_test_mobAI(Creature* creature) : ScriptedAI(creature) { }
void Reset() {}
void hasUseGO()
{
me->MonsterSay("player has used Game Object", LANG_UNIVERSAL, NULL);
}
void UpdateAI(cinst uint32 diff) {}
};
};
class go_test_object : public GameObjectScript
{
public:
go_test_object() : GameObjectScript("go_test_object") { }
uint64 mobGUID;
if (Creature* mob = GetClosestCreatureWithEntry(*go, MOB_ID, 1000.0f))
mobGUID = mob->GetGUID();
bool OnGossipHello(Player* player, GameObject* go)
{
if (Creature* testMob = Unit::GetCreature(*go, mobGUID)
if (testMob->isAlive())
if (boss_test_mob::boss_test_mobAI* mobAI = dynamic_cast<boss_test_mob::boss_test_mobAI*>(testMob->AI())
mobAI->hasUseGO();
return false;
}
};
Частое применение у программистов имеет каст(dynamic_cast, static_cast, const_cast и пр). Об этом рассказывать не буду, т.к. мало кому будет понятно да и вообще нужно -)
Сначала инициализируем АИ моба(об этом писалось в другом мануале)
В ней можно сделать что угодно, но главное - воидная ф-ция "hasUseGO()"
В ней опишем действие: сказать "Игрок использовал Игровой Объект"
На этом моб закончен.
Теперь расскажу о ГО:
Во-первых он должен инициализировать ПОСЛЕ моба, иначе компилятор выдаст вам уйму ошибок и будет ругаться на то, что "boss_test_mobAI - неопознанный идентификатор"...
Пишем структуру ГО. Она схожа с АИ структурой мобов.
Так же, как и в первом варианте ищем моба. Делаем те же првоерки.
И теперь добавляем еще проверку:
Code
if (boss_test_mob::boss_test_mobAI* mobAI = dynamic_cast<boss_test_mob::boss_test_mobAI*>(testMob->AI())
Проверка: имеет ли моб АИ структуру.
Так как АИ у нас явно не вынесена, то придется ее найти путем класса
Поэтому пишем так: boss_test_mob::boss_test_mobAI
И из этого делаем ссылку на переменную mobAI
mobAI->hasUseGO();
Выполняем уже от лица моба воидную функцию. В итоге моб говорит о том, что игрок использовал ГО.