diff options
-rw-r--r-- | sql/scripts/world_scripts_full.sql | 2 | ||||
-rw-r--r-- | sql/updates/world/2011_07_05_03_world_go_script_names.sql | 1 | ||||
-rw-r--r-- | sql/updates/world/2011_07_05_03_world_misc.sql | 85 | ||||
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 22 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/silithus.cpp | 356 |
5 files changed, 466 insertions, 0 deletions
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index 02b59566830..e045235d83f 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -99,6 +99,8 @@ UPDATE `gameobject_template` SET `ScriptName`='go_dragonflayer_cage' WHERE entry UPDATE `gameobject_template` SET `ScriptName`='go_black_cage' WHERE `entry`=195310; UPDATE `gameobject_template` SET `ScriptName`='go_massive_seaforium_charge' WHERE `entry`=190752; UPDATE `gameobject_template` SET `ScriptName`='go_harpoon_launcher' WHERE `entry` IN (192175,192176,192177); +UPDATE `gameobject_template` SET `ScriptName`='go_wind_stone' WHERE `entry` IN (180456,180461,180466,180518,180529,180534,180539,180544,180549,180554,180559,180564); + /* GUARD */ UPDATE `creature_template` SET `ScriptName`='guard_generic' WHERE `entry` IN (68,1976,3218,3296,3502,4624,9460,11190,15184); diff --git a/sql/updates/world/2011_07_05_03_world_go_script_names.sql b/sql/updates/world/2011_07_05_03_world_go_script_names.sql new file mode 100644 index 00000000000..154b886c2f0 --- /dev/null +++ b/sql/updates/world/2011_07_05_03_world_go_script_names.sql @@ -0,0 +1 @@ +UPDATE `gameobject_template` SET `ScriptName`='go_wind_stone' WHERE `entry` IN (180456,180461,180466,180518,180529,180534,180539,180544,180549,180554,180559,180564); diff --git a/sql/updates/world/2011_07_05_03_world_misc.sql b/sql/updates/world/2011_07_05_03_world_misc.sql new file mode 100644 index 00000000000..ab7b6669f83 --- /dev/null +++ b/sql/updates/world/2011_07_05_03_world_misc.sql @@ -0,0 +1,85 @@ +DELETE FROM `gossip_menu` WHERE `entry` IN (6543,6540,6542) AND `text_id` IN (7771,7772,7773,7776); +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES +(6540,7771), +(6542,7772), +(6543,7776); + +DELETE FROM `creature_text` WHERE `entry` IN (15209,15211,15212,15307,15206,15207,15208,15220,15203,15204,15205,15305); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(15209,0,0, 'The Abyssal Council does not tolerate deceit! Feel our wrath, little human!',12,0,100,0,0,0, 'Crimson Templar - SAY_TEMPLAR_AGGRO'), +(15211,0,0, 'The Abyssal Council does not tolerate deceit! Feel our wrath, little human!',12,0,100,0,0,0, 'Azure Templar - SAY_TEMPLAR_AGGRO'), +(15212,0,0, 'The Abyssal Council does not tolerate deceit! Feel our wrath, little human!',12,0,100,0,0,0, 'Hoary Templar - SAY_TEMPLAR_AGGRO'), +(15307,0,0, 'The Abyssal Council does not tolerate deceit! Feel our wrath, little human!',12,0,100,0,0,0, 'Earthen Templar - SAY_TEMPLAR_AGGRO'), +(15206,0,0, 'What? Such a small, frail thing beckons me? This will not do unpunished!',12,0,100,0,0,0, 'The Duke of Cynders - SAY_DUKE_AGGRO'), +(15207,0,0, 'What? Such a small, frail thing beckons me? This will not do unpunished!',12,0,100,0,0,0, 'The Duke of Fathoms - SAY_DUKE_AGGRO'), +(15208,0,0, 'What? Such a small, frail thing beckons me? This will not do unpunished!',12,0,100,0,0,0, 'The Duke of Shards - SAY_DUKE_AGGRO'), +(15220,0,0, 'What? Such a small, frail thing beckons me? This will not do unpunished!',12,0,100,0,0,0, 'The Duke of Zephyrs - SAY_DUKE_AGGRO'), +(15203,0,0, 'Your treachery only speeds your doom. This world will fall to darkness!',14,0,100,0,0,0, 'Prince Skaldrenox - YELL_ROYAL_AGGRO'), +(15204,0,0, 'Your treachery only speeds your doom. This world will fall to darkness!',14,0,100,0,0,0, 'High Marshal Whirlaxis - YELL_ROYAL_AGGRO'), +(15205,0,0, 'Your treachery only speeds your doom. This world will fall to darkness!',14,0,100,0,0,0, 'Baron Kazum - YELL_ROYAL_AGGRO'), +(15305,0,0, 'Your treachery only speeds your doom. This world will fall to darkness!',14,0,100,0,0,0, 'Lord Skwol - YELL_ROYAL_AGGRO'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (24734,24744,24756,24758,24760,24763,24765,24768,24770,24772,24784,24786,24788,24789,24790); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`, `Comment`) VALUES +(13,0,24734,0,18,0,180529,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24734,0,18,0,180456,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24734,0,18,0,180518,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24734,0,18,0,180544,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24734,0,18,0,180549,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24734,0,18,0,180564,0,0, '', 'Summon Templar Random - Lesser Wind Stone'), +(13,0,24744,0,18,0,180529,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24744,0,18,0,180456,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24744,0,18,0,180518,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24744,0,18,0,180544,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24744,0,18,0,180549,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24744,0,18,0,180564,0,0, '', 'Summon Templar Fire - Lesser Wind Stone'), +(13,0,24756,0,18,0,180529,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24756,0,18,0,180456,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24756,0,18,0,180518,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24756,0,18,0,180544,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24756,0,18,0,180549,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24756,0,18,0,180564,0,0, '', 'Summon Templar Air - Lesser Wind Stone'), +(13,0,24758,0,18,0,180529,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24758,0,18,0,180456,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24758,0,18,0,180518,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24758,0,18,0,180544,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24758,0,18,0,180549,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24758,0,18,0,180564,0,0, '', 'Summon Templar Earth - Lesser Wind Stone'), +(13,0,24760,0,18,0,180529,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +(13,0,24760,0,18,0,180456,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +(13,0,24760,0,18,0,180518,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +(13,0,24760,0,18,0,180544,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +(13,0,24760,0,18,0,180549,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +(13,0,24760,0,18,0,180564,0,0, '', 'Summon Templar Water - Lesser Wind Stone'), +-- +(13,0,24763,0,18,0,180534,0,0, '', 'Summon Duke Random - Wind Stone'), +(13,0,24763,0,18,0,180461,0,0, '', 'Summon Duke Random - Wind Stone'), +(13,0,24763,0,18,0,180554,0,0, '', 'Summon Duke Random - Wind Stone'), +(13,0,24765,0,18,0,180534,0,0, '', 'Summon Duke Fire - Wind Stone'), +(13,0,24765,0,18,0,180461,0,0, '', 'Summon Duke Fire - Wind Stone'), +(13,0,24765,0,18,0,180554,0,0, '', 'Summon Duke Fire - Wind Stone'), +(13,0,24768,0,18,0,180534,0,0, '', 'Summon Duke Air - Wind Stone'), +(13,0,24768,0,18,0,180461,0,0, '', 'Summon Duke Air - Wind Stone'), +(13,0,24768,0,18,0,180554,0,0, '', 'Summon Duke Air - Wind Stone'), +(13,0,24770,0,18,0,180534,0,0, '', 'Summon Duke Earth - Wind Stone'), +(13,0,24770,0,18,0,180461,0,0, '', 'Summon Duke Earth - Wind Stone'), +(13,0,24770,0,18,0,180554,0,0, '', 'Summon Duke Earth - Wind Stone'), +(13,0,24772,0,18,0,180534,0,0, '', 'Summon Duke Water - Wind Stone'), +(13,0,24772,0,18,0,180461,0,0, '', 'Summon Duke Water - Wind Stone'), +(13,0,24772,0,18,0,180554,0,0, '', 'Summon Duke Water - Wind Stone'), +-- +(13,0,24784,0,18,0,180466,0,0, '', 'Summon Royal Random - Greater Wind Stone'), +(13,0,24784,0,18,0,180539,0,0, '', 'Summon Royal Random - Greater Wind Stone'), +(13,0,24784,0,18,0,180559,0,0, '', 'Summon Royal Random - Greater Wind Stone'), +(13,0,24786,0,18,0,180466,0,0, '', 'Summon Royal Fire - Greater Wind Stone'), +(13,0,24786,0,18,0,180539,0,0, '', 'Summon Royal Fire - Greater Wind Stone'), +(13,0,24786,0,18,0,180559,0,0, '', 'Summon Royal Fire - Greater Wind Stone'), +(13,0,24788,0,18,0,180466,0,0, '', 'Summon Royal Air - Greater Wind Stone'), +(13,0,24788,0,18,0,180539,0,0, '', 'Summon Royal Air - Greater Wind Stone'), +(13,0,24788,0,18,0,180559,0,0, '', 'Summon Royal Air - Greater Wind Stone'), +(13,0,24789,0,18,0,180466,0,0, '', 'Summon Royal Earth - Greater Wind Stone'), +(13,0,24789,0,18,0,180539,0,0, '', 'Summon Royal Earth - Greater Wind Stone'), +(13,0,24789,0,18,0,180559,0,0, '', 'Summon Royal Earth - Greater Wind Stone'), +(13,0,24790,0,18,0,180466,0,0, '', 'Summon Royal Water - Greater Wind Stone'), +(13,0,24790,0,18,0,180539,0,0, '', 'Summon Royal Water - Greater Wind Stone'), +(13,0,24790,0,18,0,180559,0,0, '', 'Summon Royal Water - Greater Wind Stone'); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index e61781a2747..e2cdad9f266 100755 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6016,6 +6016,28 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) caster->CastSpell(target, triggerSpellId, true, NULL, NULL, caster->GetGUID()); return; } + case 24745: // Summon Templar, Trigger + case 24747: // Summon Templar Fire, Trigger + case 24757: // Summon Templar Air, Trigger + case 24759: // Summon Templar Earth, Trigger + case 24761: // Summon Templar Water, Trigger + case 24762: // Summon Duke, Trigger + case 24766: // Summon Duke Fire, Trigger + case 24769: // Summon Duke Air, Trigger + case 24771: // Summon Duke Earth, Trigger + case 24773: // Summon Duke Water, Trigger + case 24785: // Summon Royal, Trigger + case 24787: // Summon Royal Fire, Trigger + case 24791: // Summon Royal Air, Trigger + case 24792: // Summon Royal Earth, Trigger + case 24793: // Summon Royal Water, Trigger + { + // All this spells trigger a spell that requires reagents; if the + // triggered spell is cast as "triggered", reagents are not consumed + if (caster) + caster->CastSpell(target, triggerSpellId, false); + return; + } } } diff --git a/src/server/scripts/Kalimdor/silithus.cpp b/src/server/scripts/Kalimdor/silithus.cpp index 7baa2603b10..51fc3438387 100644 --- a/src/server/scripts/Kalimdor/silithus.cpp +++ b/src/server/scripts/Kalimdor/silithus.cpp @@ -1136,6 +1136,361 @@ public: }; +/*### +## go_wind_stone +###*/ + +enum WSSpells +{ + SPELL_PUNISHMENT = 24803, + SPELL_SPAWN_IN = 25035, + + AURA_TWILIGHT_SET = 24746, + AURA_MEDALLION = 24748, + AURA_RING = 24782, + + 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 +}; + +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") { } + + private: + uint8 GetPlayerRank(Player* player) // For random summoning + { + bool setAura = player->HasAura(AURA_TWILIGHT_SET); + bool medallionAura = player->HasAura(AURA_MEDALLION); + bool ringAura = player->HasAura(AURA_RING); + + 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) + { + case TEMPLAR: + { + if (player->HasItemCount(ITEM_TEMPLAR_FIRE, 1)) + result |= FIRE; + if (player->HasItemCount(ITEM_TEMPLAR_WATER, 1)) + result |= WATER; + if (player->HasItemCount(ITEM_TEMPLAR_EARTH, 1)) + result |= EARTH; + if (player->HasItemCount(ITEM_TEMPLAR_AIR, 1)) + result |= AIR; + break; + } + case DUKE: + { + if (player->HasItemCount(ITEM_DUKE_FIRE, 1)) + result |= FIRE; + if (player->HasItemCount(ITEM_DUKE_WATER, 1)) + result |= WATER; + if (player->HasItemCount(ITEM_DUKE_EARTH, 1)) + result |= EARTH; + if (player->HasItemCount(ITEM_DUKE_AIR, 1)) + result |= AIR; + break; + } + case ROYAL: + { + if (player->HasItemCount(ITEM_ROYAL_FIRE, 1)) + result |= FIRE; + if (player->HasItemCount(ITEM_ROYAL_WATER, 1)) + result |= WATER; + if (player->HasItemCount(ITEM_ROYAL_EARTH, 1)) + result |= EARTH; + if (player->HasItemCount(ITEM_ROYAL_AIR, 1)) + result |= AIR; + break; + } + default: + break; + } + return result; + } + + void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spell) + { + go->CastSpell(player, spell); + 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()) + { + case NPC_TEMPLAR_FIRE: + case NPC_TEMPLAR_WATER: + case NPC_TEMPLAR_AIR: + case NPC_TEMPLAR_EARTH: + summons->AI()->Talk(SAY_TEMPLAR_AGGRO); + break; + + 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; + } + summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summons->SendMeleeAttackStart(player); + summons->CombatStart(player); + } + + public: + bool OnGossipHello(Player* player, GameObject* go) + { + uint8 rank = GetPlayerRank(player); + + uint32 gossipId = go->GetGOInfo()->GetGossipMenuId(); + switch (gossipId) + { + case GOSSIPID_LESSER_WS: + { + if (rank >= 1) // 1 or 2 or 3 + player->ADD_GOSSIP_ITEM(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) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + if (item & WATER) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + if (item & EARTH) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + if (item & AIR) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEMPLAR_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + break; + } + case GOSSIPID_WS: + { + if (rank >= 2) // 2 or 3 + player->ADD_GOSSIP_ITEM(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) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DUKE_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + if (item & WATER) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DUKE_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + if (item & EARTH) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DUKE_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + if (item & AIR) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DUKE_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + break; + } + case GOSSIPID_GREATER_WS: + { + if (rank == 3) // 3 + player->ADD_GOSSIP_ITEM(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) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ROYAL_FIRE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + if (item & WATER) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ROYAL_WATER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + if (item & EARTH) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ROYAL_EARTH, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14); + if (item & AIR) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ROYAL_AIR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); + break; + } + default: + break; + } + + player->SEND_GOSSIP_MENU(player->GetGossipTextId(gossipId), go->GetGUID()); + return true; + } + + bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) + { + player->PlayerTalkClass->ClearMenus(); + 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() { new go_crystalline_tear(); @@ -1144,4 +1499,5 @@ void AddSC_silithus() new mob_qiraj_war_spawn(); new npc_highlord_demitrian(); new npcs_rutgar_and_frankal(); + new go_wind_stone(); } |