diff options
| author | Rat <none@none> | 2010-01-19 11:36:05 +0100 | 
|---|---|---|
| committer | Rat <none@none> | 2010-01-19 11:36:05 +0100 | 
| commit | 0cc053ea4d42ce405a915857f75ee00f0f65666b (patch) | |
| tree | 7c25955ee5db618deee963f515ba061fbb1e1e8c /src/scripts/eastern_kingdoms/westfall.cpp | |
| parent | f5dea61b66a616110cfc82ff640ec448b1efa702 (diff) | |
*Integrate Script system to Core
-added ScriptMgr for loading scripts
-removed bindings
-moved script system to src/game
-moved scripts to src/scripts
-VC project files updated
-cmakes updated (not 100% done yet)
NOTE to Devs:
-file locations changed
-precompiled renamed to ScriptedPch
-ecsort_ai renamed to ScriptedEscortAI
-follower_ai renamed to ScriptedFollowerAI
-guard_ai renamed to ScriptedGuardAI
-simple_ai renamed to ScriptedSimpleAI
-sc_creature renamed to ScriptedCreature
-sc_gossip renamed to ScriptedGossip
-sc_instance  renamed to ScriptedInstance
*use the new headers in scripts, thank you
NOTE to ALL:
cmake not fully tested, please report any errors with it
could make creashes, incompability
USE AT YOUR OWN RISK before further tests!!
--HG--
branch : trunk
Diffstat (limited to 'src/scripts/eastern_kingdoms/westfall.cpp')
| -rw-r--r-- | src/scripts/eastern_kingdoms/westfall.cpp | 263 | 
1 files changed, 263 insertions, 0 deletions
diff --git a/src/scripts/eastern_kingdoms/westfall.cpp b/src/scripts/eastern_kingdoms/westfall.cpp new file mode 100644 index 00000000000..06861a4975d --- /dev/null +++ b/src/scripts/eastern_kingdoms/westfall.cpp @@ -0,0 +1,263 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> + * 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: Westfall +SD%Complete: 90 +SDComment: Quest support: 155, 1651 +SDCategory: Westfall +EndScriptData */ + +/* ContentData +npc_daphne_stilwell +npc_defias_traitor +EndContentData */ + +#include "ScriptedPch.h" +#include "ScriptedEscortAI.h" + +/*###### +## npc_daphne_stilwell +######*/ + +enum eEnums +{ +    SAY_DS_START        = -1000402, +    SAY_DS_DOWN_1       = -1000403, +    SAY_DS_DOWN_2       = -1000404, +    SAY_DS_DOWN_3       = -1000405, +    SAY_DS_PROLOGUE     = -1000406, + +    SPELL_SHOOT         = 6660, +    QUEST_TOME_VALOR    = 1651, +    NPC_DEFIAS_RAIDER   = 6180, +    EQUIP_ID_RIFLE      = 2511 +}; + +struct TRINITY_DLL_DECL npc_daphne_stilwellAI : public npc_escortAI +{ +    npc_daphne_stilwellAI(Creature* pCreature) : npc_escortAI(pCreature) {} + +    uint32 uiWPHolder; +    uint32 uiShootTimer; + +    void Reset() +    { +        if (HasEscortState(STATE_ESCORT_ESCORTING)) +        { +            switch(uiWPHolder) +            { +                case 7: DoScriptText(SAY_DS_DOWN_1, m_creature); break; +                case 8: DoScriptText(SAY_DS_DOWN_2, m_creature); break; +                case 9: DoScriptText(SAY_DS_DOWN_3, m_creature); break; +            } +        } +        else +            uiWPHolder = 0; + +        uiShootTimer = 0; +    } + +    void WaypointReached(uint32 uiPoint) +    { +        Player* pPlayer = GetPlayerForEscort(); + +        if (!pPlayer) +            return; + +        uiWPHolder = uiPoint; + +        switch(uiPoint) +        { +            case 4: +                SetEquipmentSlots(false, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE, EQUIP_ID_RIFLE); +                m_creature->SetSheath(SHEATH_STATE_RANGED); +                m_creature->HandleEmoteCommand(EMOTE_STATE_USESTANDING_NOSHEATHE); +                break; +            case 7: +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836, 1569.755, 54.267, 4.230, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697, 1569.124, 54.421, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237, 1568.307, 54.620, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                break; +            case 8: +                m_creature->SetSheath(SHEATH_STATE_RANGED); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836, 1569.755, 54.267, 4.230, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697, 1569.124, 54.421, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237, 1568.307, 54.620, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11448.037, 1570.213, 54.961, 4.283, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                break; +            case 9: +                m_creature->SetSheath(SHEATH_STATE_RANGED); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11450.836, 1569.755, 54.267, 4.230, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11449.697, 1569.124, 54.421, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11448.237, 1568.307, 54.620, 4.206, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11448.037, 1570.213, 54.961, 4.283, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                m_creature->SummonCreature(NPC_DEFIAS_RAIDER, -11449.018, 1570.738, 54.828, 4.220, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +                break; +            case 10: +                SetRun(false); +                break; +            case 11: +                DoScriptText(SAY_DS_PROLOGUE, m_creature); +                break; +            case 13: +                SetEquipmentSlots(true); +                m_creature->SetSheath(SHEATH_STATE_UNARMED); +                m_creature->HandleEmoteCommand(EMOTE_STATE_USESTANDING_NOSHEATHE); +                break; +            case 17: +                pPlayer->GroupEventHappens(QUEST_TOME_VALOR, m_creature); +                break; +        } +    } + +    void AttackStart(Unit* pWho) +    { +        if (!pWho) +            return; + +        if (m_creature->Attack(pWho, false)) +        { +            m_creature->AddThreat(pWho, 0.0f); +            m_creature->SetInCombatWith(pWho); +            pWho->SetInCombatWith(m_creature); + +            m_creature->GetMotionMaster()->MoveChase(pWho, 30.0f); +        } +    } + +    void JustSummoned(Creature* pSummoned) +    { +        pSummoned->AI()->AttackStart(m_creature); +    } + +    void Update(const uint32 diff) +    { +        npc_escortAI::UpdateAI(diff); + +        if (!UpdateVictim()) +            return; + +        if (uiShootTimer <= diff) +        { +            uiShootTimer = 1500; + +            if (!m_creature->IsWithinDist(m_creature->getVictim(), ATTACK_DISTANCE)) +                DoCast(m_creature->getVictim(), SPELL_SHOOT); +        } else uiShootTimer -= diff; +    } +}; + +bool QuestAccept_npc_daphne_stilwell(Player* pPlayer, Creature* pCreature, const Quest* pQuest) +{ +    if (pQuest->GetQuestId() == QUEST_TOME_VALOR) +    { +        DoScriptText(SAY_DS_START, pCreature); + +        if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwellAI, pCreature->AI())) +            pEscortAI->Start(true, true, pPlayer->GetGUID()); +    } + +    return true; +} + +CreatureAI* GetAI_npc_daphne_stilwell(Creature* pCreature) +{ +    return new npc_daphne_stilwellAI(pCreature); +} + +/*###### +## npc_defias_traitor +######*/ + +#define SAY_START                   -1000101 +#define SAY_PROGRESS                -1000102 +#define SAY_END                     -1000103 +#define SAY_AGGRO_1                 -1000104 +#define SAY_AGGRO_2                 -1000105 + +#define QUEST_DEFIAS_BROTHERHOOD    155 + +struct TRINITY_DLL_DECL npc_defias_traitorAI : public npc_escortAI +{ +    npc_defias_traitorAI(Creature *c) : npc_escortAI(c) { Reset(); } + +    void WaypointReached(uint32 i) +    { +        Player* pPlayer = GetPlayerForEscort(); + +        if (!pPlayer) +            return; + +        switch (i) +        { +            case 35: +                SetRun(false); +                break; +            case 36: +                DoScriptText(SAY_PROGRESS, m_creature, pPlayer); +                break; +            case 44: +                DoScriptText(SAY_END, m_creature, pPlayer); +                { +                    if (pPlayer) +                        pPlayer->GroupEventHappens(QUEST_DEFIAS_BROTHERHOOD,m_creature); +                } +                break; +        } +    } +    void EnterCombat(Unit* who) +    { +        DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2), m_creature, who); +    } + +    void Reset() {} +}; + +bool QuestAccept_npc_defias_traitor(Player* pPlayer, Creature* pCreature, Quest const* quest) +{ +    if (quest->GetQuestId() == QUEST_DEFIAS_BROTHERHOOD) +    { +        if (npc_escortAI* pEscortAI = CAST_AI(npc_defias_traitorAI, pCreature->AI())) +            pEscortAI->Start(true, true, pPlayer->GetGUID()); + +        DoScriptText(SAY_START, pCreature, pPlayer); +    } + +    return true; +} + +CreatureAI* GetAI_npc_defias_traitor(Creature* pCreature) +{ +    return new npc_defias_traitorAI(pCreature); +} + +void AddSC_westfall() +{ +    Script *newscript; + +    newscript = new Script; +    newscript->Name = "npc_daphne_stilwell"; +    newscript->GetAI = &GetAI_npc_daphne_stilwell; +    newscript->pQuestAccept = &QuestAccept_npc_daphne_stilwell; +    newscript->RegisterSelf(); + +    newscript = new Script; +    newscript->Name = "npc_defias_traitor"; +    newscript->GetAI = &GetAI_npc_defias_traitor; +    newscript->pQuestAccept = &QuestAccept_npc_defias_traitor; +    newscript->RegisterSelf(); +}  | 
