|
Архив - только для чтения |
| Модератор форума: andycrowz |
| Форум Корзина форума Корзина Gossip menu |
| Gossip menu |
Всем привет. Может ли кто-нибудь немножко пролить свет на gossip menu?
Совсем недавно решил написать кастомного нпц, но столкнулся с такой проблемой: Хочу сделать, что бы он двигался по вейпоинтам после того, как игрок "поговорит с ним" ( заюзает госсип меню ). Движение я написал, а вот как прикрепить туда госсип - пока не знаю. Может кто помочь с данным вопросом? Если нужно, вот код, который уже есть: |
animu, попробуй такой вариант (скорее всего я где-нибудь напутал с синтаксисом):
Код class npc_move : public CreatureScript { public: npc_move() : CreatureScript("npc_move") {} struct npc_moveAI : public ScriptedAI { npc_moveAI(Creature * c) : ScriptedAI(c) {} int moveCount; bool moveOnGossip; void Reset() { moveCount = 0; moveOnGossip = false; me->SetSpeed(MOVE_RUN, 1.0f, true); } void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; moveCount++; } bool OnGossipHello(Player *pPlayer) { pPlayer->ADD_GOSSIP_ITEM(0, "[PH] Start Moving", GOSSIP_SENDER_MAIN, START_MOVING); return true; } bool OnGossipSelect(Player *pPlayer, uint32 sender, uint32 action) { if (sender != GOSSIP_SENDER_MAIN) return true; if (!pPlayer->getAttackers().empty()) return true; switch(action) { case START_MOVING: moveOnGossip = true; break; } return true; } void UpdateAI(uint32 const diff) { if (moveOnGossip) { switch (moveCount) { case 0: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text", LANG_IUNIVERSAL, me->GetGUID()); break; case 1: me->GetMotionMaster()->MovePoint(....................); break; case 2: me->GetMotionMaster()->MovePoint(....................); break; case 4: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text2", LANG_IUNIVERSAL, me->GetGUID()); break; } } } }; CreatureAI * GetAI(Creature * pCreature) const { return new npc_moveAI(pCreature) } }; |
staford11
В структуре вроде бы не работает госсип, если только юзать sGossipHello (вроде бы так) Код #define ACTION_START_MOVING 1 class npc_move : public CreatureScript { public: npc_move() : CreatureScript("npc_move") {} bool moveOnGossip = false; bool OnGossipHello(Player* player, Creature* creature) { player->ADD_GOSSIP_ITEM(0, "[PH] Start Moving", GOSSIP_SENDER_MAIN, ACTION_START_MOVING); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); return true; } bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 uiAction) { if (sender == GOSSIP_SENDER_MAIN) { player->PlayerTalkClass->ClearMenus(); switch(uiAction) { case ACTION_START_MOVING: moveOnGossip = true; player->CLOSE_GOSSIP_MENU(); break; default: break; } } return true; } struct npc_moveAI : public ScriptedAI { npc_moveAI(Creature * c) : ScriptedAI(c) {} int moveCount; void Reset() { moveCount = 0; me->SetSpeed(MOVE_RUN, 1.0f, true); } void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; moveCount++; } void UpdateAI(uint32 const diff) { if (moveOnGossip) switch (moveCount) { case 0: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text", LANG_IUNIVERSAL, me->GetGUID()); break; case 1: me->GetMotionMaster()->MovePoint(....................); break; case 2: me->GetMotionMaster()->MovePoint(....................); break; case 4: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text2", LANG_IUNIVERSAL, me->GetGUID()); break; } } }; CreatureAI * GetAI(Creature * pCreature) const { return new npc_moveAI(pCreature) } }; void AddSC_move() { new npc_move; } animu Так попробуй. Добавлено (02.06.2014, 14:58) --------------------------------------------- Если не получится, то так. Код #define ACTION_START_MOVING 1 class npc_move : public CreatureScript { public: npc_move() : CreatureScript("npc_move") {} bool OnGossipHello(Player* player, Creature* creature) { player->ADD_GOSSIP_ITEM(0, "[PH] Start Moving", GOSSIP_SENDER_MAIN, ACTION_START_MOVING); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); return true; } bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 uiAction) { if (sender == GOSSIP_SENDER_MAIN) { player->PlayerTalkClass->ClearMenus(); switch(uiAction) { case ACTION_START_MOVING: creature->AI()->DoAction(ACTION_START_MOVING); player->CLOSE_GOSSIP_MENU(); break; default: break; } } return true; } struct npc_moveAI : public ScriptedAI { npc_moveAI(Creature * c) : ScriptedAI(c) {} bool moveOnGossip; int moveCount; void Reset() { moveCount = 0; moveOnGossip = false; me->SetSpeed(MOVE_RUN, 1.0f, true); } void DoAction(int32 actions) { switch (actions) { case ACTION_START_MOVING: moveOnGossip = true; break; } } void MovementInform(uint32 type, uint32 id) { if (type != POINT_MOTION_TYPE) return; moveCount++; } void UpdateAI(uint32 const diff) { if (moveOnGossip) switch (moveCount) { case 0: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text", LANG_IUNIVERSAL, me->GetGUID()); break; case 1: me->GetMotionMaster()->MovePoint(....................); break; case 2: me->GetMotionMaster()->MovePoint(....................); break; case 4: me->GetMotionMaster()->MovePoint(....................); me->MonsterYell("Text2", LANG_IUNIVERSAL, me->GetGUID()); break; } } }; CreatureAI * GetAI(Creature * pCreature) const { return new npc_moveAI(pCreature) } }; void AddSC_move() { new npc_move; } |
| |||
| |||
