Не работает скрипт.
Всем привет. Недавно написал скрипт ( при использовании госсип меню, нпц начинает идти по точкам ), вроде бы везде зарегистрировал, в самом нпц прописал, но толку 0. Что еще делать - не знаю. Вот сам скрипт:
Код
class npc_move : public CreatureScript { public: npc_move() : CreatureScript("npc_move") {} bool OnGossipHello(Player *player, Creature *creature) { if (player->IsInCombat()) return false; player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Start", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->PlayerTalkClass->SendGossipMenu(1, creature->GetGUID()); return true; } bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 actions) { player->PlayerTalkClass->ClearMenus(); if (sender != GOSSIP_SENDER_MAIN) return false; switch (actions) { case GOSSIP_ACTION_INFO_DEF+1: (CAST_AI(npc_move::npc_moveAI, creature->AI()))->canMove = true; break; } return true; } struct npc_moveAI : public ScriptedAI { npc_moveAI(Creature *c) : ScriptedAI(c) {} bool canMove; int moveCount; void Reset() { canMove = false; moveCount = 0; me->SetSpeed(MOVE_RUN, 1.0f, true); } void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; moveCount++; } void UpdateAI(const uint32 diff) { if (canMove) { switch (moveCount) { case 0: me->GetMotionMaster()->MovePoint(1, 5459.8012f, -2685.8188f, 1456.6988f); me->MonsterYell("Go", LANG_UNIVERSAL, 0); break; case 1: me->GetMotionMaster()->MovePoint(2, 5457.4658f, -2726.5480f, 1454.8999f); break; case 2: me->GetMotionMaster()->MovePoint(3, 5442.1821f, -2760.8371f, 1458.3656f); break; case 3: me->GetMotionMaster()->MovePoint(4, 5431.3808f, -2797.8142f, 1462.6180f); me->MonsterYell("Here", LANG_UNIVERSAL, 0); break; } } ScriptedAI::UpdateAI(diff); } }; CreatureAI * GetAI(Creature * pCreature) const { return new npc_moveAI(pCreature); } }; void AddSC_npc_move() { new npc_move; }
Надеюсь, что кто-нибудь поможет.
Сообщение #
1 написано 18.06.2014 в 23:30
Можно вопрос? А где строчка с Entry ID моба который должен выполнять скрипт??
Сообщение #
2 написано 18.06.2014 в 23:47
Цитата Taktick (
)
А где строчка с Entry ID моба который должен выполнять скрипт??
ОМГ Цитата animu (
)
npc_move() : CreatureScript("npc_move") {}
А вот это для чего?
Сообщение #
3 написано 18.06.2014 в 23:50
Сообщение #
4 написано 18.06.2014 в 23:51
Есть у кого какие предположения?
Сообщение #
5 написано 19.06.2014 в 01:27
animu , можно подробности? у моба госсип есть? при открытии диалога или нету?
Сообщение #
6 написано 19.06.2014 в 12:59
При нажатии на моба вообще ничего не происходит. Т.е. даже окно с диалогом не открывается.
Сообщение #
7 написано 19.06.2014 в 13:08
Я давно не занимаюсь ядром забыл уже всё) но я так посмотрел.. при нажатии на госсип canMove делается в true . Код
void UpdateAI(const uint32 diff) { if (canMove) // возможно тут нужно сделать вот так if (canMove == true) { switch (moveCount) { case 0:
попробуй. еще раз повторю, что давно не занимаюсь в этой сфере)
Сообщение #
8 отредактировано
admiirall -
Четверг, 19.06.2014, 13:09
Т.е. с мобом фактически взаимодействовать никак нельзя, только если в таргет взять
Сообщение #
9 отредактировано
animu -
Четверг, 19.06.2014, 13:12
animu , а флаг стоит? у моба? что он имеет госсип.
Сообщение #
10 написано 19.06.2014 в 18:47
Всё должно работать, если с нпс нельзя взаимодействовать, то как уже сказали, выстави флаг UPDATE `creature_template` SET `npcflag`=1 WHERE `ScriptName`='npc_move'; Код только замудрённый, нпс будет нонстопом спамить бег и фразы с момента запуска евента до его окончания. Еще во время выполнения евента нпс'у снять бы флаг, дабы не получить повторный запуск.
Сообщение #
11 написано 19.06.2014 в 20:15