Core/Scripts: Fix menu clearing in onGossipSelect()-sections for some scripts (including examples) - patch/fix by Paradox

Closes issue 4524

--HG--
branch : trunk
This commit is contained in:
click
2010-10-21 20:12:33 +02:00
parent 168a085723
commit 34eed2de3f
9 changed files with 55 additions and 45 deletions

View File

@@ -258,27 +258,28 @@ class example_creature : public CreatureScript
}
};
CreatureAI* GetAI(Creature* creature) const
CreatureAI* GetAI(Creature* pCreature) const
{
return new example_creatureAI(creature);
return new example_creatureAI(pCreature);
}
bool OnGossipHello(Player* player, Creature* creature)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->SEND_GOSSIP_MENU(907, creature->GetGUID());
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
pPlayer->SEND_GOSSIP_MENU(907, pCreature->GetGUID());
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (action == GOSSIP_ACTION_INFO_DEF+1)
pPlayer->PlayerTalkClass->ClearMenus();
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
player->CLOSE_GOSSIP_MENU();
pPlayer->CLOSE_GOSSIP_MENU();
//Set our faction to hostile towards all
creature->setFaction(FACTION_WORGEN);
creature->AI()->AttackStart(player);
pCreature->setFaction(FACTION_WORGEN);
pCreature->AI()->AttackStart(pPlayer);
}
return true;

View File

@@ -178,48 +178,49 @@ class example_escort : public CreatureScript
}
};
CreatureAI* GetAI(Creature* creature) const
CreatureAI* GetAI(Creature* pCreature) const
{
return new example_escortAI(creature);
return new example_escortAI(pCreature);
}
bool OnGossipHello(Player* player, Creature* creature)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
player->TalkedToCreature(creature->GetEntry(), creature->GetGUID());
player->PrepareGossipMenu(creature, 0);
pPlayer->TalkedToCreature(pCreature->GetEntry(), pCreature->GetGUID());
pPlayer->PrepareGossipMenu(pCreature, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
player->SendPreparedGossip(creature);
pPlayer->SendPreparedGossip(pCreature);
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
npc_escortAI* pEscortAI = CAST_AI(example_escort::example_escortAI, creature->AI());
pPlayer->PlayerTalkClass->ClearMenus();
npc_escortAI* pEscortAI = CAST_AI(example_escort::example_escortAI, pCreature->AI());
switch(action)
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->CLOSE_GOSSIP_MENU();
pPlayer->CLOSE_GOSSIP_MENU();
if (pEscortAI)
pEscortAI->Start(true, true, player->GetGUID());
pEscortAI->Start(true, true, pPlayer->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
player->CLOSE_GOSSIP_MENU();
pPlayer->CLOSE_GOSSIP_MENU();
if (pEscortAI)
pEscortAI->Start(false, false, player->GetGUID());
pEscortAI->Start(false, false, pPlayer->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
player->CLOSE_GOSSIP_MENU();
pPlayer->CLOSE_GOSSIP_MENU();
if (pEscortAI)
pEscortAI->Start(false, true, player->GetGUID());
pEscortAI->Start(false, true, pPlayer->GetGUID());
break;
default:
return false; // nothing defined -> trinity core handling

View File

@@ -48,45 +48,47 @@ class example_gossip_codebox : public CreatureScript
{
}
bool OnGossipHello(Player* player, Creature* creature)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (action == GOSSIP_ACTION_INFO_DEF+2)
pPlayer->PlayerTalkClass->ClearMenus();
if (uiAction == GOSSIP_ACTION_INFO_DEF+2)
{
DoScriptText(SAY_NOT_INTERESTED, creature);
player->CLOSE_GOSSIP_MENU();
DoScriptText(SAY_NOT_INTERESTED, pCreature);
pPlayer->CLOSE_GOSSIP_MENU();
}
return true;
}
bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code)
bool OnGossipSelectCode(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction, const char* code)
{
if (sender == GOSSIP_SENDER_MAIN)
pPlayer->PlayerTalkClass->ClearMenus();
if (uiSender == GOSSIP_SENDER_MAIN)
{
switch (action)
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
if (std::strcmp(code, player->GetName()) != 0)
if (std::strcmp(code, pPlayer->GetName()) != 0)
{
DoScriptText(SAY_WRONG, creature);
creature->CastSpell(player, SPELL_POLYMORPH, true);
DoScriptText(SAY_WRONG, pCreature);
pCreature->CastSpell(pPlayer, SPELL_POLYMORPH, true);
}
else
{
DoScriptText(SAY_CORRECT, creature);
creature->CastSpell(player, SPELL_MARK_OF_THE_WILD, true);
DoScriptText(SAY_CORRECT, pCreature);
pCreature->CastSpell(pPlayer, SPELL_MARK_OF_THE_WILD, true);
}
player->CLOSE_GOSSIP_MENU();
pPlayer->CLOSE_GOSSIP_MENU();
return true;
}