mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
Scripts/ICC/Teleporter: moved gossips to db
(cherry picked from commit ea38a7d95b)
This commit is contained in:
@@ -115,7 +115,7 @@ enum DataTypes
|
||||
DATA_ARTHAS_PLATFORM = 38,
|
||||
DATA_TERENAS_MENETHIL = 39,
|
||||
DATA_ENEMY_GUNSHIP = 40,
|
||||
DATA_UPPERSPIRE_TELE_ACT = 41,
|
||||
DATA_UPPERSPIRE_TELE_ACT = 41, /// also used by conditions
|
||||
DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42
|
||||
};
|
||||
|
||||
@@ -569,14 +569,10 @@ class spell_trigger_spell_from_caster : public SpellScriptLoader
|
||||
TriggerCastFlags _triggerFlags;
|
||||
};
|
||||
|
||||
template<class AI>
|
||||
CreatureAI* GetIcecrownCitadelAI(Creature* creature)
|
||||
template<class AI, class T>
|
||||
inline AI* GetIcecrownCitadelAI(T* obj)
|
||||
{
|
||||
if (InstanceMap* instance = creature->GetMap()->ToInstanceMap())
|
||||
if (instance->GetInstanceScript())
|
||||
if (instance->GetScriptId() == sObjectMgr->GetScriptId(ICCScriptName))
|
||||
return new AI(creature);
|
||||
return NULL;
|
||||
return GetInstanceAI<AI>(obj, ICCScriptName);
|
||||
}
|
||||
|
||||
#endif // ICECROWN_CITADEL_H_
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "GameObjectAI.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedGossip.h"
|
||||
@@ -22,57 +23,55 @@
|
||||
#include "Spell.h"
|
||||
#include "icecrown_citadel.h"
|
||||
|
||||
#define GOSSIP_SENDER_ICC_PORT 631
|
||||
static std::vector<uint32> const TeleportSpells =
|
||||
{
|
||||
LIGHT_S_HAMMER_TELEPORT, // 0
|
||||
ORATORY_OF_THE_DAMNED_TELEPORT, // 1
|
||||
0, // 2
|
||||
RAMPART_OF_SKULLS_TELEPORT, // 3
|
||||
DEATHBRINGER_S_RISE_TELEPORT, // 4
|
||||
UPPER_SPIRE_TELEPORT, // 5
|
||||
SINDRAGOSA_S_LAIR_TELEPORT // 6
|
||||
};
|
||||
|
||||
class icecrown_citadel_teleport : public GameObjectScript
|
||||
{
|
||||
static_assert(DATA_UPPERSPIRE_TELE_ACT == 41, "icecrown_citadel.h DATA_UPPERSPIRE_TELE_ACT set to value != 41, gossip condition of the teleporters won't work as intended.");
|
||||
|
||||
public:
|
||||
icecrown_citadel_teleport() : GameObjectScript("icecrown_citadel_teleport") { }
|
||||
|
||||
bool OnGossipHello(Player* player, GameObject* go) override
|
||||
struct icecrown_citadel_teleportAI : public GameObjectAI
|
||||
{
|
||||
if (InstanceScript* instance = go->GetInstanceScript())
|
||||
icecrown_citadel_teleportAI(GameObject* go) : GameObjectAI(go)
|
||||
{
|
||||
if (instance->GetBossState(DATA_LORD_MARROWGAR) == DONE)
|
||||
{
|
||||
if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_LIGHTSHAMMER)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Light's Hammer.", GOSSIP_SENDER_ICC_PORT, LIGHT_S_HAMMER_TELEPORT);
|
||||
if (go->GetEntry() != GO_SCOURGE_TRANSPORTER_ORATORY)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Oratory of the Damned.", GOSSIP_SENDER_ICC_PORT, ORATORY_OF_THE_DAMNED_TELEPORT);
|
||||
}
|
||||
if (instance->GetBossState(DATA_LADY_DEATHWHISPER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_RAMPART)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Rampart of Skulls.", GOSSIP_SENDER_ICC_PORT, RAMPART_OF_SKULLS_TELEPORT);
|
||||
if (instance->GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_DEATHBRINGER)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Deathbringer's Rise.", GOSSIP_SENDER_ICC_PORT, DEATHBRINGER_S_RISE_TELEPORT);
|
||||
if (instance->GetData(DATA_UPPERSPIRE_TELE_ACT) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_UPPERSPIRE)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to the Upper Spire.", GOSSIP_SENDER_ICC_PORT, UPPER_SPIRE_TELEPORT);
|
||||
/// @todo Gauntlet event before Sindragosa
|
||||
if (instance->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE && go->GetEntry() != GO_SCOURGE_TRANSPORTER_SINDRAGOSA)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Teleport to Sindragosa's Lair", GOSSIP_SENDER_ICC_PORT, SINDRAGOSA_S_LAIR_TELEPORT);
|
||||
}
|
||||
|
||||
player->SEND_GOSSIP_MENU(player->GetGossipTextId(go), go->GetGUID());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, GameObject* /*go*/, uint32 sender, uint32 action) override
|
||||
{
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
SpellInfo const* spell = sSpellMgr->GetSpellInfo(action);
|
||||
if (!spell)
|
||||
return false;
|
||||
|
||||
if (player->IsInCombat())
|
||||
bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
|
||||
{
|
||||
Spell::SendCastResult(player, spell, 0, SPELL_FAILED_AFFECTING_COMBAT);
|
||||
if (gossipListId >= TeleportSpells.size())
|
||||
return false;
|
||||
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
SpellInfo const* spell = sSpellMgr->GetSpellInfo(TeleportSpells[gossipListId]);
|
||||
if (!spell)
|
||||
return false;
|
||||
|
||||
if (player->IsInCombat())
|
||||
{
|
||||
Spell::SendCastResult(player, spell, 0, SPELL_FAILED_AFFECTING_COMBAT);
|
||||
return true;
|
||||
}
|
||||
|
||||
player->CastSpell(player, spell, true);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
if (sender == GOSSIP_SENDER_ICC_PORT)
|
||||
player->CastSpell(player, spell, true);
|
||||
|
||||
return true;
|
||||
GameObjectAI* GetAI(GameObject* go) const override
|
||||
{
|
||||
return GetIcecrownCitadelAI<icecrown_citadel_teleportAI>(go);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user