/* This file is part of the ScriptDev2 Project. See AUTHORS file for Copyright information * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ScriptData SDName: GO_Scripts SD%Complete: 100 SDComment: Quest support: 5097, 5098, Barov_journal->Teaches spell 26089 SDCategory: Game Objects EndScriptData */ /* ContentData go_barov_journal go_ethereum_prison go_ethereum_stasis go_andorhal_tower EndContentData */ #include "precompiled.h" /*###### ## go_barov_journal ######*/ enum { SPELL_TAILOR_FELCLOTH_BAG = 26086, SPELL_LEARN_FELCLOTH_BAG = 26095 }; bool GOUse_go_barov_journal(Player* pPlayer, GameObject* /*pGo*/) { if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !pPlayer->HasSpell(SPELL_TAILOR_FELCLOTH_BAG)) { pPlayer->CastSpell(pPlayer, SPELL_LEARN_FELCLOTH_BAG, false); } return true; } /*###### ## go_ethereum_prison ######*/ enum { FACTION_LC = 1011, FACTION_SHAT = 935, FACTION_CE = 942, FACTION_CON = 933, FACTION_KT = 989, FACTION_SPOR = 970, SPELL_REP_LC = 39456, SPELL_REP_SHAT = 39457, SPELL_REP_CE = 39460, SPELL_REP_CON = 39474, SPELL_REP_KT = 39475, SPELL_REP_SPOR = 39476 }; const uint32 uiNpcPrisonEntry[] = { 22810, 22811, 22812, 22813, 22814, 22815, // good guys 20783, 20784, 20785, 20786, 20788, 20789, 20790 // bad guys }; bool GOUse_go_ethereum_prison(Player* pPlayer, GameObject* pGo) { uint8 uiRandom = urand(0, countof(uiNpcPrisonEntry) - 1); if (Creature* pCreature = pPlayer->SummonCreature(uiNpcPrisonEntry[uiRandom], pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), TEMPSUMMON_TIMED_OOC_DESPAWN, 30000)) { if (!pCreature->IsHostileTo(pPlayer)) { uint32 uiSpell = 0; if (FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry()) { switch (pFaction->faction) { case FACTION_LC: uiSpell = SPELL_REP_LC; break; case FACTION_SHAT: uiSpell = SPELL_REP_SHAT; break; case FACTION_CE: uiSpell = SPELL_REP_CE; break; case FACTION_CON: uiSpell = SPELL_REP_CON; break; case FACTION_KT: uiSpell = SPELL_REP_KT; break; case FACTION_SPOR: uiSpell = SPELL_REP_SPOR; break; } if (uiSpell) pCreature->CastSpell(pPlayer, uiSpell, false); else script_error_log("go_ethereum_prison summoned creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction()); } } } return false; } /*###### ## go_ethereum_stasis ######*/ const uint32 uiNpcStasisEntry[] = { 22825, 20888, 22827, 22826, 22828 }; bool GOUse_go_ethereum_stasis(Player* pPlayer, GameObject* pGo) { uint8 uiRandom = urand(0, countof(uiNpcStasisEntry) - 1); pPlayer->SummonCreature(uiNpcStasisEntry[uiRandom], pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), TEMPSUMMON_TIMED_OOC_DESPAWN, 30000); return false; } /*###### ## go_jump_a_tron ######*/ enum { SPELL_JUMP_A_TRON = 33382, NPC_JUMP_A_TRON = 19041 }; bool GOUse_go_jump_a_tron(Player* pPlayer, GameObject* pGo) { if (Creature* pCreature = GetClosestCreatureWithEntry(pGo, NPC_JUMP_A_TRON, INTERACTION_DISTANCE)) pCreature->CastSpell(pPlayer, SPELL_JUMP_A_TRON, false); return false; } /*###### ## go_andorhal_tower ######*/ enum { QUEST_ALL_ALONG_THE_WATCHTOWERS_ALLIANCE = 5097, QUEST_ALL_ALONG_THE_WATCHTOWERS_HORDE = 5098, NPC_ANDORHAL_TOWER_1 = 10902, NPC_ANDORHAL_TOWER_2 = 10903, NPC_ANDORHAL_TOWER_3 = 10904, NPC_ANDORHAL_TOWER_4 = 10905, GO_ANDORHAL_TOWER_1 = 176094, GO_ANDORHAL_TOWER_2 = 176095, GO_ANDORHAL_TOWER_3 = 176096, GO_ANDORHAL_TOWER_4 = 176097 }; bool GOUse_go_andorhal_tower(Player* pPlayer, GameObject* pGo) { if (pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_ALLIANCE) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_ALL_ALONG_THE_WATCHTOWERS_HORDE) == QUEST_STATUS_INCOMPLETE) { uint32 uiKillCredit = 0; switch (pGo->GetEntry()) { case GO_ANDORHAL_TOWER_1: uiKillCredit = NPC_ANDORHAL_TOWER_1; break; case GO_ANDORHAL_TOWER_2: uiKillCredit = NPC_ANDORHAL_TOWER_2; break; case GO_ANDORHAL_TOWER_3: uiKillCredit = NPC_ANDORHAL_TOWER_3; break; case GO_ANDORHAL_TOWER_4: uiKillCredit = NPC_ANDORHAL_TOWER_4; break; } if (uiKillCredit) pPlayer->KilledMonsterCredit(uiKillCredit); } return true; } void AddSC_go_scripts() { Script* pNewScript; pNewScript = new Script; pNewScript->Name = "go_barov_journal"; pNewScript->pGOUse = &GOUse_go_barov_journal; pNewScript->RegisterSelf(); pNewScript = new Script; pNewScript->Name = "go_ethereum_prison"; pNewScript->pGOUse = &GOUse_go_ethereum_prison; pNewScript->RegisterSelf(); pNewScript = new Script; pNewScript->Name = "go_ethereum_stasis"; pNewScript->pGOUse = &GOUse_go_ethereum_stasis; pNewScript->RegisterSelf(); pNewScript = new Script; pNewScript->Name = "go_jump_a_tron"; pNewScript->pGOUse = &GOUse_go_jump_a_tron; pNewScript->RegisterSelf(); pNewScript = new Script; pNewScript->Name = "go_andorhal_tower"; pNewScript->pGOUse = &GOUse_go_andorhal_tower; pNewScript->RegisterSelf(); pNewScript = new Script; pNewScript->Name = "go_andorhal_tower"; pNewScript->pGOUse = &GOUse_go_andorhal_tower; pNewScript->RegisterSelf(); }