mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 10:30:27 +00:00
fix(DB/Gossip): go_wind_stone to use db gossip and conditions (#8953)
This commit is contained in:
@@ -36,6 +36,8 @@ EndContentData */
|
||||
#include "ScriptMgr.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "GameObject.h"
|
||||
#include "GameObjectAI.h"
|
||||
|
||||
/*####
|
||||
# quest_a_pawn_on_the_eternal_board (Defines)
|
||||
@@ -958,374 +960,203 @@ public:
|
||||
## go_wind_stone
|
||||
###*/
|
||||
|
||||
enum WSSpells
|
||||
enum WindStone
|
||||
{
|
||||
SPELL_PUNISHMENT = 24803,
|
||||
SPELL_SPAWN_IN = 25035,
|
||||
|
||||
AURA_TWILIGHT_SET = 24746,
|
||||
AURA_MEDALLION = 24748,
|
||||
AURA_RING = 24782,
|
||||
|
||||
AURA_TWILIGHT_SET = 24746,
|
||||
AURA_MEDALLION = 24748,
|
||||
AURA_RING = 24782,
|
||||
SPELL_PUNISHMENT = 24803,
|
||||
SPELL_SPAWN_IN = 25035,
|
||||
SPELL_TEMPLAR_RANDOM = 24745,
|
||||
SPELL_TEMPLAR_FIRE = 24747,
|
||||
SPELL_TEMPLAR_AIR = 24757,
|
||||
SPELL_TEMPLAR_EARTH = 24759,
|
||||
SPELL_TEMPLAR_WATER = 24761,
|
||||
|
||||
SPELL_DUKE_RANDOM = 24762,
|
||||
SPELL_DUKE_FIRE = 24766,
|
||||
SPELL_DUKE_AIR = 24769,
|
||||
SPELL_DUKE_EARTH = 24771,
|
||||
SPELL_DUKE_WATER = 24773,
|
||||
|
||||
SPELL_ROYAL_RANDOM = 24785,
|
||||
SPELL_ROYAL_FIRE = 24787,
|
||||
SPELL_ROYAL_AIR = 24791,
|
||||
SPELL_ROYAL_EARTH = 24792,
|
||||
SPELL_ROYAL_WATER = 24793
|
||||
SPELL_TEMPLAR_FIRE = 24747,
|
||||
SPELL_TEMPLAR_AIR = 24757,
|
||||
SPELL_TEMPLAR_EARTH = 24759,
|
||||
SPELL_TEMPLAR_WATER = 24761,
|
||||
SPELL_DUKE_RANDOM = 24762,
|
||||
SPELL_DUKE_FIRE = 24766,
|
||||
SPELL_DUKE_AIR = 24769,
|
||||
SPELL_DUKE_EARTH = 24771,
|
||||
SPELL_DUKE_WATER = 24773,
|
||||
SPELL_ROYAL_RANDOM = 24785,
|
||||
SPELL_ROYAL_FIRE = 24787,
|
||||
SPELL_ROYAL_AIR = 24791,
|
||||
SPELL_ROYAL_EARTH = 24792,
|
||||
SPELL_ROYAL_WATER = 24793,
|
||||
GOSSIPID_LESSER_WS = 6540,
|
||||
GOSSIPID_WS = 6542,
|
||||
GOSSIPID_GREATER_WS = 6543,
|
||||
NPC_TEMPLAR_FIRE = 15209,
|
||||
NPC_TEMPLAR_WATER = 15211,
|
||||
NPC_TEMPLAR_AIR = 15212,
|
||||
NPC_TEMPLAR_EARTH = 15307,
|
||||
NPC_DUKE_FIRE = 15206,
|
||||
NPC_DUKE_WATER = 15207,
|
||||
NPC_DUKE_EARTH = 15208,
|
||||
NPC_DUKE_AIR = 15220,
|
||||
NPC_ROYAL_FIRE = 15203,
|
||||
NPC_ROYAL_AIR = 15204,
|
||||
NPC_ROYAL_EARTH = 15205,
|
||||
NPC_ROYAL_WATER = 15305,
|
||||
SAY_ON_SPAWN_IN = 0
|
||||
};
|
||||
|
||||
enum WSGossip
|
||||
{
|
||||
GOSSIPID_LESSER_WS = 6540,
|
||||
GOSSIPID_WS = 6542,
|
||||
GOSSIPID_GREATER_WS = 6543
|
||||
};
|
||||
|
||||
enum WSCreatures
|
||||
{
|
||||
NPC_TEMPLAR_FIRE = 15209,
|
||||
NPC_TEMPLAR_WATER = 15211,
|
||||
NPC_TEMPLAR_AIR = 15212,
|
||||
NPC_TEMPLAR_EARTH = 15307,
|
||||
|
||||
NPC_DUKE_FIRE = 15206,
|
||||
NPC_DUKE_WATER = 15207,
|
||||
NPC_DUKE_EARTH = 15208,
|
||||
NPC_DUKE_AIR = 15220,
|
||||
|
||||
NPC_ROYAL_FIRE = 15203,
|
||||
NPC_ROYAL_AIR = 15204,
|
||||
NPC_ROYAL_EARTH = 15205,
|
||||
NPC_ROYAL_WATER = 15305
|
||||
};
|
||||
|
||||
enum WSItems
|
||||
{
|
||||
ITEM_TEMPLAR_FIRE = 20416,
|
||||
ITEM_TEMPLAR_EARTH = 20419,
|
||||
ITEM_TEMPLAR_WATER = 20420,
|
||||
ITEM_TEMPLAR_AIR = 20418,
|
||||
|
||||
ITEM_DUKE_FIRE = 20432,
|
||||
ITEM_DUKE_EARTH = 20435,
|
||||
ITEM_DUKE_WATER = 20436,
|
||||
ITEM_DUKE_AIR = 20433,
|
||||
|
||||
ITEM_ROYAL_FIRE = 20447,
|
||||
ITEM_ROYAL_EARTH = 20449,
|
||||
ITEM_ROYAL_WATER = 20450,
|
||||
ITEM_ROYAL_AIR = 20448,
|
||||
};
|
||||
|
||||
enum WS
|
||||
{
|
||||
TEMPLAR = 0,
|
||||
DUKE = 1,
|
||||
ROYAL = 2,
|
||||
|
||||
FIRE = 0x1,
|
||||
WATER = 0x2,
|
||||
EARTH = 0x4,
|
||||
AIR = 0x8
|
||||
};
|
||||
|
||||
enum WSTexts
|
||||
{
|
||||
SAY_TEMPLAR_AGGRO = 0,
|
||||
SAY_DUKE_AGGRO = 0,
|
||||
YELL_ROYAL_AGGRO = 0
|
||||
};
|
||||
|
||||
#define GOSSIP_TEMPLAR_RANDOM "I am no cultist, you monster! Come to me and face your destruction!"
|
||||
#define GOSSIP_TEMPLAR_FIRE "Crimson Templar! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_TEMPLAR_EARTH "Earthen Templar! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_TEMPLAR_AIR "Hoary Templar! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_TEMPLAR_WATER "Azure Templar! I hold your signet! Heed my call!"
|
||||
|
||||
#define GOSSIP_DUKE_RANDOM "You will listen to this, vile duke! I am not your Twilight's Hammer lapdog! I am here to challenge you! Come! Come, and meet your death..."
|
||||
#define GOSSIP_DUKE_FIRE "Duke of Cynders! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_DUKE_EARTH "The Duke of Shards! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_DUKE_AIR "The Duke of Zephyrs! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_DUKE_WATER "The Duke of Fathoms! I hold your signet! Heed my call!"
|
||||
|
||||
#define GOSSIP_ROYAL_RANDOM "The day of the judgement has come, fiend! I challenge you to battle!"
|
||||
#define GOSSIP_ROYAL_FIRE "Prince Skaldrenox! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_ROYAL_EARTH "Baron Kazum! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_ROYAL_AIR "High Marshal Whirlaxis! I hold your signet! Heed my call!"
|
||||
#define GOSSIP_ROYAL_WATER "Lord Skwol! I hold your signet! Heed my call!"
|
||||
|
||||
class go_wind_stone : public GameObjectScript
|
||||
{
|
||||
public:
|
||||
go_wind_stone() : GameObjectScript("go_wind_stone") { }
|
||||
go_wind_stone() : GameObjectScript("go_wind_stone") {}
|
||||
|
||||
private:
|
||||
uint8 GetPlayerRank(Player* player) // For random summoning
|
||||
struct go_wind_stoneAI : public GameObjectAI
|
||||
{
|
||||
bool setAura = player->HasAura(AURA_TWILIGHT_SET, player->GetGUID());
|
||||
bool medallionAura = player->HasAura(AURA_MEDALLION, player->GetGUID());
|
||||
bool ringAura = player->HasAura(AURA_RING, player->GetGUID());
|
||||
go_wind_stoneAI(GameObject* go) : GameObjectAI(go) {}
|
||||
|
||||
if (setAura && medallionAura && ringAura)
|
||||
return 3;
|
||||
else if (setAura && medallionAura)
|
||||
return 2;
|
||||
else if (setAura)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8 GetItems(Player* player, WS type)
|
||||
{
|
||||
uint8 result = 0x0;
|
||||
|
||||
switch (type)
|
||||
bool GossipHello(Player* player, bool reportUse) override
|
||||
{
|
||||
case TEMPLAR:
|
||||
{
|
||||
if (player->HasItemCount(ITEM_TEMPLAR_FIRE))
|
||||
result |= FIRE;
|
||||
if (player->HasItemCount(ITEM_TEMPLAR_WATER))
|
||||
result |= WATER;
|
||||
if (player->HasItemCount(ITEM_TEMPLAR_EARTH))
|
||||
result |= EARTH;
|
||||
if (player->HasItemCount(ITEM_TEMPLAR_AIR))
|
||||
result |= AIR;
|
||||
break;
|
||||
}
|
||||
case DUKE:
|
||||
{
|
||||
if (player->HasItemCount(ITEM_DUKE_FIRE))
|
||||
result |= FIRE;
|
||||
if (player->HasItemCount(ITEM_DUKE_WATER))
|
||||
result |= WATER;
|
||||
if (player->HasItemCount(ITEM_DUKE_EARTH))
|
||||
result |= EARTH;
|
||||
if (player->HasItemCount(ITEM_DUKE_AIR))
|
||||
result |= AIR;
|
||||
break;
|
||||
}
|
||||
case ROYAL:
|
||||
{
|
||||
if (player->HasItemCount(ITEM_ROYAL_FIRE))
|
||||
result |= FIRE;
|
||||
if (player->HasItemCount(ITEM_ROYAL_WATER))
|
||||
result |= WATER;
|
||||
if (player->HasItemCount(ITEM_ROYAL_EARTH))
|
||||
result |= EARTH;
|
||||
if (player->HasItemCount(ITEM_ROYAL_AIR))
|
||||
result |= AIR;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spellId)
|
||||
{
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
|
||||
if (!spellInfo)
|
||||
return;
|
||||
SpellInfo const* spellInfoTrigger = sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell);
|
||||
if (!spellInfoTrigger)
|
||||
return;
|
||||
Spell* spell = new Spell(player, spellInfoTrigger, TRIGGERED_NONE);
|
||||
SpellCastResult result = spell->CheckCast(true);
|
||||
delete spell;
|
||||
if (result != SPELL_CAST_OK)
|
||||
{
|
||||
if (result == SPELL_FAILED_REAGENTS)
|
||||
if (reportUse)
|
||||
{
|
||||
std::string accountName;
|
||||
AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName);
|
||||
sBan->BanAccount(accountName, "0s", "Wind Stone exploit", "Server");
|
||||
uint32 gossipId = go->GetGOInfo()->GetGossipMenuId();
|
||||
bool _twilightSetAura = (player->HasAura(AURA_TWILIGHT_SET, player->GetGUID()) ? true : false);
|
||||
bool _medallionAura = (player->HasAura(AURA_MEDALLION, player->GetGUID()) ? true : false);
|
||||
bool _ringAura = (player->HasAura(AURA_RING, player->GetGUID()) ? true : false);
|
||||
|
||||
switch (gossipId)
|
||||
{
|
||||
case GOSSIPID_LESSER_WS:
|
||||
{
|
||||
if (!_twilightSetAura)
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
case GOSSIPID_WS:
|
||||
{
|
||||
if (!_twilightSetAura || !_medallionAura)
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
case GOSSIPID_GREATER_WS:
|
||||
{
|
||||
if (!_twilightSetAura || !_medallionAura || !_ringAura)
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
player->CastSpell(player, spellInfoTrigger->Id, false);
|
||||
TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - M_PI, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
|
||||
summons->CastSpell(summons, SPELL_SPAWN_IN, false);
|
||||
switch (summons->GetEntry())
|
||||
|
||||
bool GossipSelect(Player* player, uint32 sender, uint32 action) override
|
||||
{
|
||||
case NPC_TEMPLAR_FIRE:
|
||||
case NPC_TEMPLAR_WATER:
|
||||
case NPC_TEMPLAR_AIR:
|
||||
case NPC_TEMPLAR_EARTH:
|
||||
summons->AI()->Talk(SAY_TEMPLAR_AGGRO);
|
||||
break;
|
||||
player->PlayerTalkClass->SendCloseGossip();
|
||||
|
||||
case NPC_DUKE_FIRE:
|
||||
case NPC_DUKE_WATER:
|
||||
case NPC_DUKE_EARTH:
|
||||
case NPC_DUKE_AIR:
|
||||
summons->AI()->Talk(SAY_DUKE_AGGRO);
|
||||
break;
|
||||
case NPC_ROYAL_FIRE:
|
||||
case NPC_ROYAL_AIR:
|
||||
case NPC_ROYAL_EARTH:
|
||||
case NPC_ROYAL_WATER:
|
||||
summons->AI()->Talk(YELL_ROYAL_AGGRO);
|
||||
break;
|
||||
if (sender == GOSSIPID_LESSER_WS)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case 0:
|
||||
SummonNPC(go, player, RAND(NPC_TEMPLAR_WATER, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_AIR), SPELL_TEMPLAR_RANDOM);
|
||||
break;
|
||||
case 1:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_FIRE, SPELL_TEMPLAR_FIRE);
|
||||
break;
|
||||
case 2:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_WATER, SPELL_TEMPLAR_WATER);
|
||||
break;
|
||||
case 3:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_EARTH, SPELL_TEMPLAR_EARTH);
|
||||
break;
|
||||
case 4:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_AIR, SPELL_TEMPLAR_AIR);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (sender == GOSSIPID_WS)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case 0:
|
||||
SummonNPC(go, player, RAND(NPC_DUKE_WATER, NPC_DUKE_FIRE, NPC_DUKE_EARTH, NPC_DUKE_AIR), SPELL_DUKE_RANDOM);
|
||||
break;
|
||||
case 1:
|
||||
SummonNPC(go, player, NPC_DUKE_FIRE, SPELL_DUKE_FIRE);
|
||||
break;
|
||||
case 2:
|
||||
SummonNPC(go, player, NPC_DUKE_WATER, SPELL_DUKE_WATER);
|
||||
break;
|
||||
case 3:
|
||||
SummonNPC(go, player, NPC_DUKE_EARTH, SPELL_DUKE_EARTH);
|
||||
break;
|
||||
case 4:
|
||||
SummonNPC(go, player, NPC_DUKE_AIR, SPELL_DUKE_AIR);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (sender == GOSSIPID_GREATER_WS)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case 0:
|
||||
SummonNPC(go, player, RAND(NPC_ROYAL_WATER, NPC_ROYAL_FIRE, NPC_ROYAL_EARTH, NPC_ROYAL_AIR), SPELL_ROYAL_RANDOM);
|
||||
break;
|
||||
case 1:
|
||||
SummonNPC(go, player, NPC_ROYAL_FIRE, SPELL_ROYAL_FIRE);
|
||||
break;
|
||||
case 2:
|
||||
SummonNPC(go, player, NPC_ROYAL_WATER, SPELL_ROYAL_WATER);
|
||||
break;
|
||||
case 3:
|
||||
SummonNPC(go, player, NPC_ROYAL_EARTH, SPELL_ROYAL_EARTH);
|
||||
break;
|
||||
case 4:
|
||||
SummonNPC(go, player, NPC_ROYAL_AIR, SPELL_ROYAL_AIR);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
summons->SendMeleeAttackStart(player);
|
||||
summons->CombatStart(player);
|
||||
}
|
||||
|
||||
public:
|
||||
bool OnGossipHello(Player* player, GameObject* go) override
|
||||
void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spellId)
|
||||
{
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
|
||||
if (!spellInfo)
|
||||
return;
|
||||
SpellInfo const* spellInfoTrigger = sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell);
|
||||
if (!spellInfoTrigger)
|
||||
return;
|
||||
Spell* spell = new Spell(player, spellInfoTrigger, TRIGGERED_NONE);
|
||||
SpellCastResult result = spell->CheckCast(true);
|
||||
delete spell;
|
||||
if (result != SPELL_CAST_OK)
|
||||
{
|
||||
if (result == SPELL_FAILED_REAGENTS)
|
||||
{
|
||||
std::string accountName;
|
||||
AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName);
|
||||
sBan->BanAccount(accountName, "0s", "Wind Stone exploit", "Server");
|
||||
}
|
||||
return;
|
||||
}
|
||||
player->CastSpell(player, spellInfoTrigger->Id, false);
|
||||
TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - M_PI, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
|
||||
summons->CastSpell(summons, SPELL_SPAWN_IN, false);
|
||||
summons->AI()->Talk(SAY_ON_SPAWN_IN);
|
||||
summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
summons->SendMeleeAttackStart(player);
|
||||
summons->CombatStart(player);
|
||||
}
|
||||
};
|
||||
|
||||
GameObjectAI* GetAI(GameObject* go) const
|
||||
{
|
||||
uint8 rank = GetPlayerRank(player);
|
||||
|
||||
uint32 gossipId = go->GetGOInfo()->GetGossipMenuId();
|
||||
switch (gossipId)
|
||||
{
|
||||
case GOSSIPID_LESSER_WS:
|
||||
{
|
||||
if (rank >= 1) // 1 or 2 or 3
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
else
|
||||
{
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
|
||||
uint8 item = GetItems(player, TEMPLAR);
|
||||
if (item & FIRE)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
|
||||
if (item & WATER)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
|
||||
if (item & EARTH)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
|
||||
if (item & AIR)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
|
||||
break;
|
||||
}
|
||||
case GOSSIPID_WS:
|
||||
{
|
||||
if (rank >= 2) // 2 or 3
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_DUKE_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
|
||||
else
|
||||
{
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
|
||||
uint8 item = GetItems(player, DUKE);
|
||||
if (item & FIRE)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_DUKE_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
|
||||
if (item & WATER)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_DUKE_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
|
||||
if (item & EARTH)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_DUKE_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
|
||||
if (item & AIR)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_DUKE_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
|
||||
break;
|
||||
}
|
||||
case GOSSIPID_GREATER_WS:
|
||||
{
|
||||
if (rank == 3) // 3
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ROYAL_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
|
||||
else
|
||||
{
|
||||
go->CastSpell(player, SPELL_PUNISHMENT);
|
||||
break;
|
||||
}
|
||||
|
||||
uint8 item = GetItems(player, ROYAL);
|
||||
if (item & FIRE)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ROYAL_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
|
||||
if (item & WATER)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ROYAL_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
|
||||
if (item & EARTH)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ROYAL_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
|
||||
if (item & AIR)
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ROYAL_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(gossipId, go), go->GetGUID());
|
||||
return true;
|
||||
return new go_wind_stoneAI(go);
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
|
||||
{
|
||||
ClearGossipMenuFor(player);
|
||||
player->PlayerTalkClass->SendCloseGossip();
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case GOSSIP_ACTION_INFO_DEF + 1:
|
||||
SummonNPC(go, player, RAND(NPC_TEMPLAR_WATER, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_AIR), SPELL_TEMPLAR_RANDOM);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 2:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_FIRE, SPELL_TEMPLAR_FIRE);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 3:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_WATER, SPELL_TEMPLAR_WATER);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 4:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_EARTH, SPELL_TEMPLAR_EARTH);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 5:
|
||||
SummonNPC(go, player, NPC_TEMPLAR_AIR, SPELL_TEMPLAR_AIR);
|
||||
break;
|
||||
|
||||
case GOSSIP_ACTION_INFO_DEF + 6:
|
||||
SummonNPC(go, player, RAND(NPC_DUKE_FIRE, NPC_DUKE_WATER, NPC_DUKE_EARTH, NPC_DUKE_AIR), SPELL_DUKE_RANDOM);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 7:
|
||||
SummonNPC(go, player, NPC_DUKE_FIRE, SPELL_DUKE_FIRE);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 8:
|
||||
SummonNPC(go, player, NPC_DUKE_WATER, SPELL_DUKE_WATER);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 9:
|
||||
SummonNPC(go, player, NPC_DUKE_EARTH, SPELL_DUKE_EARTH);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 10:
|
||||
SummonNPC(go, player, NPC_DUKE_AIR, SPELL_DUKE_AIR);
|
||||
break;
|
||||
|
||||
case GOSSIP_ACTION_INFO_DEF + 11:
|
||||
SummonNPC(go, player, RAND(NPC_ROYAL_FIRE, NPC_ROYAL_AIR, NPC_ROYAL_EARTH, NPC_ROYAL_WATER), SPELL_ROYAL_RANDOM);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 12:
|
||||
SummonNPC(go, player, NPC_ROYAL_FIRE, SPELL_ROYAL_FIRE);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 13:
|
||||
SummonNPC(go, player, NPC_ROYAL_WATER, SPELL_ROYAL_WATER);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 14:
|
||||
SummonNPC(go, player, NPC_ROYAL_EARTH, SPELL_ROYAL_EARTH);
|
||||
break;
|
||||
case GOSSIP_ACTION_INFO_DEF + 15:
|
||||
SummonNPC(go, player, NPC_ROYAL_AIR, SPELL_ROYAL_AIR);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_silithus()
|
||||
|
||||
Reference in New Issue
Block a user