fix(DB/Gossip): go_wind_stone to use db gossip and conditions (#8953)
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1636050414423889017');
|
||||||
|
|
||||||
|
-- Condition for Wind Stone Gossip menu option
|
||||||
|
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (6540,6542,6543) AND `SourceEntry` IN (0,1,2,3,4) AND `SourceId`=0;
|
||||||
|
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||||
|
(15, 6540, 0, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6540, 1, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6540, 1, 0, 0, 2, 0, 20416, 1, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 1 if player has 1 of Crest of Beckoning: Fire. Item cannot be in bank.'),
|
||||||
|
(15, 6540, 2, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6540, 2, 0, 0, 2, 0, 20420, 1, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 2 if player has 1 of Crest of Beckoning: Water. Item cannot be in bank.'),
|
||||||
|
(15, 6540, 3, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6540, 3, 0, 0, 2, 0, 20419, 1, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 3 if player has 1 of Crest of Beckoning: Earth. Item cannot be in bank.'),
|
||||||
|
(15, 6540, 4, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6540, 4, 0, 0, 2, 0, 20418, 1, 0, 0, 0, 0, '', 'Show gossip menu 6540 option id 4 if player has 1 of Crest of Beckoning: Thunder. Item cannot be in bank.'),
|
||||||
|
(15, 6542, 0, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 0, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 1, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 1, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 1, 0, 0, 2, 0, 20432, 1, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 1 if player has 1 of Signet of Beckoning: Fire. Item cannot be in bank.'),
|
||||||
|
(15, 6542, 2, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 2, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 2, 0, 0, 2, 0, 20436, 1, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 2 if player has 1 of Signet of Beckoning: Water. Item cannot be in bank.'),
|
||||||
|
(15, 6542, 3, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 3, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 3, 0, 0, 2, 0, 20435, 1, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 3 if player has 1 of Signet of Beckoning: Earth. Item cannot be in bank.'),
|
||||||
|
(15, 6542, 4, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 4, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6542, 4, 0, 0, 2, 0, 20433, 1, 0, 0, 0, 0, '', 'Show gossip menu 6542 option id 4 if player has 1 of Signet of Beckoning: Thunder. Item cannot be in bank.'),
|
||||||
|
(15, 6543, 0, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 0, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 0, 0, 0, 1, 0, 24782, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 0 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 1, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 1, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 1, 0, 0, 1, 0, 24782, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 1 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 1, 0, 0, 2, 0, 20447, 1, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 1 if player has 1 of Scepter of Beckoning: Fire. Item cannot be in bank.'),
|
||||||
|
(15, 6543, 2, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 2, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 2, 0, 0, 1, 0, 24782, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 2 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 2, 0, 0, 2, 0, 20450, 1, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 2 if player has 1 of Scepter of Beckoning: Water. Item cannot be in bank.'),
|
||||||
|
(15, 6543, 3, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 3, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 3, 0, 0, 1, 0, 24782, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 3 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 3, 0, 0, 2, 0, 20449, 1, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 3 if player has 1 of Scepter of Beckoning: Earth. Item cannot be in bank.'),
|
||||||
|
(15, 6543, 4, 0, 0, 1, 0, 24746, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 4, 0, 0, 1, 0, 24748, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 4, 0, 0, 1, 0, 24782, 0, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 4 if target has aura Twilight Cultist Disguise (effect 0).'),
|
||||||
|
(15, 6543, 4, 0, 0, 2, 0, 20448, 1, 0, 0, 0, 0, '', 'Show gossip menu 6543 option id 4 if player has 1 of Scepter of Beckoning: Thunder. Item cannot be in bank.');
|
||||||
@@ -36,6 +36,8 @@ EndContentData */
|
|||||||
#include "ScriptMgr.h"
|
#include "ScriptMgr.h"
|
||||||
#include "Spell.h"
|
#include "Spell.h"
|
||||||
#include "SpellInfo.h"
|
#include "SpellInfo.h"
|
||||||
|
#include "GameObject.h"
|
||||||
|
#include "GameObjectAI.h"
|
||||||
|
|
||||||
/*####
|
/*####
|
||||||
# quest_a_pawn_on_the_eternal_board (Defines)
|
# quest_a_pawn_on_the_eternal_board (Defines)
|
||||||
@@ -958,374 +960,203 @@ public:
|
|||||||
## go_wind_stone
|
## go_wind_stone
|
||||||
###*/
|
###*/
|
||||||
|
|
||||||
enum WSSpells
|
enum WindStone
|
||||||
{
|
{
|
||||||
SPELL_PUNISHMENT = 24803,
|
AURA_TWILIGHT_SET = 24746,
|
||||||
SPELL_SPAWN_IN = 25035,
|
AURA_MEDALLION = 24748,
|
||||||
|
AURA_RING = 24782,
|
||||||
AURA_TWILIGHT_SET = 24746,
|
SPELL_PUNISHMENT = 24803,
|
||||||
AURA_MEDALLION = 24748,
|
SPELL_SPAWN_IN = 25035,
|
||||||
AURA_RING = 24782,
|
|
||||||
|
|
||||||
SPELL_TEMPLAR_RANDOM = 24745,
|
SPELL_TEMPLAR_RANDOM = 24745,
|
||||||
SPELL_TEMPLAR_FIRE = 24747,
|
SPELL_TEMPLAR_FIRE = 24747,
|
||||||
SPELL_TEMPLAR_AIR = 24757,
|
SPELL_TEMPLAR_AIR = 24757,
|
||||||
SPELL_TEMPLAR_EARTH = 24759,
|
SPELL_TEMPLAR_EARTH = 24759,
|
||||||
SPELL_TEMPLAR_WATER = 24761,
|
SPELL_TEMPLAR_WATER = 24761,
|
||||||
|
SPELL_DUKE_RANDOM = 24762,
|
||||||
SPELL_DUKE_RANDOM = 24762,
|
SPELL_DUKE_FIRE = 24766,
|
||||||
SPELL_DUKE_FIRE = 24766,
|
SPELL_DUKE_AIR = 24769,
|
||||||
SPELL_DUKE_AIR = 24769,
|
SPELL_DUKE_EARTH = 24771,
|
||||||
SPELL_DUKE_EARTH = 24771,
|
SPELL_DUKE_WATER = 24773,
|
||||||
SPELL_DUKE_WATER = 24773,
|
SPELL_ROYAL_RANDOM = 24785,
|
||||||
|
SPELL_ROYAL_FIRE = 24787,
|
||||||
SPELL_ROYAL_RANDOM = 24785,
|
SPELL_ROYAL_AIR = 24791,
|
||||||
SPELL_ROYAL_FIRE = 24787,
|
SPELL_ROYAL_EARTH = 24792,
|
||||||
SPELL_ROYAL_AIR = 24791,
|
SPELL_ROYAL_WATER = 24793,
|
||||||
SPELL_ROYAL_EARTH = 24792,
|
GOSSIPID_LESSER_WS = 6540,
|
||||||
SPELL_ROYAL_WATER = 24793
|
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
|
class go_wind_stone : public GameObjectScript
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
go_wind_stone() : GameObjectScript("go_wind_stone") { }
|
go_wind_stone() : GameObjectScript("go_wind_stone") {}
|
||||||
|
|
||||||
private:
|
struct go_wind_stoneAI : public GameObjectAI
|
||||||
uint8 GetPlayerRank(Player* player) // For random summoning
|
|
||||||
{
|
{
|
||||||
bool setAura = player->HasAura(AURA_TWILIGHT_SET, player->GetGUID());
|
go_wind_stoneAI(GameObject* go) : GameObjectAI(go) {}
|
||||||
bool medallionAura = player->HasAura(AURA_MEDALLION, player->GetGUID());
|
|
||||||
bool ringAura = player->HasAura(AURA_RING, player->GetGUID());
|
|
||||||
|
|
||||||
if (setAura && medallionAura && ringAura)
|
bool GossipHello(Player* player, bool reportUse) override
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
case TEMPLAR:
|
if (reportUse)
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
std::string accountName;
|
uint32 gossipId = go->GetGOInfo()->GetGossipMenuId();
|
||||||
AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName);
|
bool _twilightSetAura = (player->HasAura(AURA_TWILIGHT_SET, player->GetGUID()) ? true : false);
|
||||||
sBan->BanAccount(accountName, "0s", "Wind Stone exploit", "Server");
|
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);
|
bool GossipSelect(Player* player, uint32 sender, uint32 action) override
|
||||||
summons->CastSpell(summons, SPELL_SPAWN_IN, false);
|
|
||||||
switch (summons->GetEntry())
|
|
||||||
{
|
{
|
||||||
case NPC_TEMPLAR_FIRE:
|
player->PlayerTalkClass->SendCloseGossip();
|
||||||
case NPC_TEMPLAR_WATER:
|
|
||||||
case NPC_TEMPLAR_AIR:
|
|
||||||
case NPC_TEMPLAR_EARTH:
|
|
||||||
summons->AI()->Talk(SAY_TEMPLAR_AGGRO);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NPC_DUKE_FIRE:
|
if (sender == GOSSIPID_LESSER_WS)
|
||||||
case NPC_DUKE_WATER:
|
{
|
||||||
case NPC_DUKE_EARTH:
|
switch (action)
|
||||||
case NPC_DUKE_AIR:
|
{
|
||||||
summons->AI()->Talk(SAY_DUKE_AGGRO);
|
case 0:
|
||||||
break;
|
SummonNPC(go, player, RAND(NPC_TEMPLAR_WATER, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_AIR), SPELL_TEMPLAR_RANDOM);
|
||||||
case NPC_ROYAL_FIRE:
|
break;
|
||||||
case NPC_ROYAL_AIR:
|
case 1:
|
||||||
case NPC_ROYAL_EARTH:
|
SummonNPC(go, player, NPC_TEMPLAR_FIRE, SPELL_TEMPLAR_FIRE);
|
||||||
case NPC_ROYAL_WATER:
|
break;
|
||||||
summons->AI()->Talk(YELL_ROYAL_AGGRO);
|
case 2:
|
||||||
break;
|
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:
|
void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spellId)
|
||||||
bool OnGossipHello(Player* player, GameObject* go) override
|
{
|
||||||
|
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);
|
return new go_wind_stoneAI(go);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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()
|
void AddSC_silithus()
|
||||||
|
|||||||
Reference in New Issue
Block a user