diff --git a/sql/updates/3466_world_scripts_(wintergrasp).sql b/sql/updates/3466_world_scripts_(wintergrasp).sql
new file mode 100644
index 00000000000..ac757d126de
--- /dev/null
+++ b/sql/updates/3466_world_scripts_(wintergrasp).sql
@@ -0,0 +1,19 @@
+DELETE FROM `spell_script_target` WHERE entry IN
+(56575,56661,56663,56665,56667,56669,61408);
+INSERT INTO `spell_script_target` (`entry`, `type`, `targetEntry`) VALUES
+(56575, 1, 27852),
+(56661, 1, 27852),
+(56663, 1, 27852),
+(56665, 1, 27852),
+(56667, 1, 27852),
+(56669, 1, 27852),
+(61408, 1, 27852);
+
+
+update creature_template set maxhealth = 133525, minhealth = 133525, maxmana = 51360, minmana = 51360, spell1 = 53114, spell2 = 53112, spell3=53110 where entry = 28670;
+update creature_template set maxhealth = 30000, minhealth = 30000, speed = 2, spell1=50025, spell2=50989, VehicleId = 36 where entry = 27881;
+update creature_template set maxhealth = 50000, minhealth = 50000, speed = 1.6, spell1=50896, spell2=50652, VehicleId = 106 where entry = 28094;
+update creature_template set maxhealth = 75000, minhealth = 75000, speed = 1, spell1=51678, VehicleId = 117 where entry IN (28312,32627);
+update creature_template set maxhealth = 50000, minhealth = 50000, spell1=51362, VehicleId = 116 where entry IN (28319,32629);
+
+update creature_template set scriptname = "npc_demolisher_engineerer" where entry in (30400,30499);
\ No newline at end of file
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt
index 8d1ade57b4a..b89344f2b9d 100644
--- a/src/bindings/scripts/CMakeLists.txt
+++ b/src/bindings/scripts/CMakeLists.txt
@@ -477,6 +477,7 @@ SET(trinityscript_LIB_SRCS
scripts/zone/vault_of_archavon/instance_vault_of_archavon.cpp
scripts/zone/vault_of_archavon/boss_archavon.cpp
scripts/zone/vault_of_archavon/def_vault_of_archavon.h
+ scripts/zone/wintergrasp/wintergrasp.cpp
system.cpp
)
diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp
index 9ba94eb4ac6..e98ea3395cb 100644
--- a/src/bindings/scripts/ScriptMgr.cpp
+++ b/src/bindings/scripts/ScriptMgr.cpp
@@ -628,6 +628,9 @@ extern void AddSC_zulaman();
//Vault of Archavon
extern void AddSC_boss_archavon();
+//Region
+extern void AddSC_wintergrasp();
+
// -------------------
void LoadDatabase()
{
@@ -1510,6 +1513,9 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf")
//Vault of Archavon
AddSC_boss_archavon();
+ //Region
+ AddSC_wintergrasp();
+
// -------------------
outstring_log(">> Loaded %i C++ Scripts.", num_sc_scripts);
diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
index 9ec9a72ec99..1a39f5b3947 100644
--- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj
@@ -458,14 +458,14 @@
RelativePath="..\scripts\npc\npc_professions.cpp"
>
+
+
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
index b92dd51a0d7..cfcbcc54059 100644
--- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj
+++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj
@@ -457,14 +457,14 @@
RelativePath="..\scripts\npc\npc_professions.cpp"
>
+
+
-
-
+ >
+
+
+ * 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
+ */
+
+#include "precompiled.h"
+#include "Wintergrasp.h"
+
+bool GossipHello_npc_demolisher_engineerer(Player *player, Creature *_creature)
+{
+ if(_creature->isQuestGiver())
+ player->PrepareQuestMenu(_creature->GetGUID());
+
+ if(player->HasAura(SPELL_CORPORAL))
+ player->ADD_GOSSIP_ITEM(0, "Build catapult.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ else if(player->HasAura(SPELL_LIEUTENANT))
+ {
+ player->ADD_GOSSIP_ITEM(0, "Build catapult.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ player->ADD_GOSSIP_ITEM(0, "Build demolisher.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ player->ADD_GOSSIP_ITEM(0, "Build siege engine.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ }
+
+ player->SEND_GOSSIP_MENU(_creature->GetNpcTextId(), _creature->GetGUID());
+ return true;
+}
+
+bool GossipSelect_npc_demolisher_engineerer(Player* player, Creature* me, uint32 uiSender, uint32 uiAction)
+{
+ player->CLOSE_GOSSIP_MENU();
+ switch(uiAction - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 0: player->CastSpell(player, 56663, false); break;
+ case 1: player->CastSpell(player, 56575, false); break;
+ case 2: player->CastSpell(player, TEAM_ID(player->GetTeam()) ? 61408 : 56661, false); break;
+ }
+
+ return true;
+}
+
+void AddSC_wintergrasp()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ newscript->Name = "npc_demolisher_engineerer";
+ newscript->pGossipHello = &GossipHello_npc_demolisher_engineerer;
+ newscript->pGossipSelect = &GossipSelect_npc_demolisher_engineerer;
+ newscript->RegisterSelf();
+}
\ No newline at end of file
diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt
index 89a9e460968..44e692b71ba 100644
--- a/src/game/CMakeLists.txt
+++ b/src/game/CMakeLists.txt
@@ -293,6 +293,9 @@ SET(game_STAT_SRCS
GroupReference.cpp
GroupReference.h
GroupRefManager.h
+ OutdoorPvPImpl.h
+ Wintergrasp.h
+ Wintergrasp.cpp
)
add_library(game STATIC ${game_STAT_SRCS})
diff --git a/src/game/CreatureAIImpl.h b/src/game/CreatureAIImpl.h
index f404f0d954f..95a16d0ac5b 100644
--- a/src/game/CreatureAIImpl.h
+++ b/src/game/CreatureAIImpl.h
@@ -1,6 +1,4 @@
/*
- * Copyright (C) 2005-2009 MaNGOS
- *
* Copyright (C) 2008-2009 Trinity
*
* This program is free software; you can redistribute it and/or modify
diff --git a/src/game/OutdoorPvP.cpp b/src/game/OutdoorPvP.cpp
index 97acf08ce8c..0bfc8a6e084 100644
--- a/src/game/OutdoorPvP.cpp
+++ b/src/game/OutdoorPvP.cpp
@@ -17,6 +17,7 @@
*/
#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
#include "OutdoorPvPMgr.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
@@ -776,3 +777,7 @@ bool OutdoorPvP::HandleAreaTrigger(Player *plr, uint32 trigger)
return false;
}
+void OutdoorPvP::RegisterZone(uint32 zoneId)
+{
+ sOutdoorPvPMgr.AddZone(zoneId, this);
+}
diff --git a/src/game/OutdoorPvP.h b/src/game/OutdoorPvP.h
index c1c39c1ff65..48a478b5549 100644
--- a/src/game/OutdoorPvP.h
+++ b/src/game/OutdoorPvP.h
@@ -26,23 +26,15 @@
#define OPVP_TRIGGER_CREATURE_ENTRY 12999
-enum ObjectiveStates{
- OBJECTIVESTATE_NEUTRAL = 0,
- OBJECTIVESTATE_ALLIANCE = 1,
- OBJECTIVESTATE_HORDE = 2,
- OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE = 3,
- OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE = 4,
- OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE = 5,
- OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE = 6
-};
-
-enum OutdoorPvPTypes{
+enum OutdoorPvPTypes
+{
OUTDOOR_PVP_HP = 1,
- OUTDOOR_PVP_NA = 2,
- OUTDOOR_PVP_TF = 3,
- OUTDOOR_PVP_ZM = 4,
- OUTDOOR_PVP_SI = 5,
- OUTDOOR_PVP_EP = 6
+ OUTDOOR_PVP_NA,
+ OUTDOOR_PVP_TF,
+ OUTDOOR_PVP_ZM,
+ OUTDOOR_PVP_SI,
+ OUTDOOR_PVP_EP,
+ OPVP_WINTERGRASP,
};
// struct for go spawning
@@ -220,6 +212,8 @@ protected:
// players in the zones of this outdoorpvp, 0 - alliance, 1 - horde
std::set m_PlayerGuids[2];
uint32 m_TypeId;
+
+ void RegisterZone(uint32 zoneid);
};
#endif /*OUTDOOR_PVP_H_*/
diff --git a/src/game/OutdoorPvPEP.cpp b/src/game/OutdoorPvPEP.cpp
index fc688314e0c..4eddab08a40 100644
--- a/src/game/OutdoorPvPEP.cpp
+++ b/src/game/OutdoorPvPEP.cpp
@@ -789,7 +789,7 @@ OutdoorPvPEP::OutdoorPvPEP()
bool OutdoorPvPEP::SetupOutdoorPvP()
{
for(int i = 0; i < EPBuffZonesNum; ++i)
- sOutdoorPvPMgr.AddZone(EPBuffZones[i],this);
+ RegisterZone(EPBuffZones[i]);
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_EWT(this));
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveEP_PWT(this));
diff --git a/src/game/OutdoorPvPEP.h b/src/game/OutdoorPvPEP.h
index 08d31de5cf5..f6199ac5a3b 100644
--- a/src/game/OutdoorPvPEP.h
+++ b/src/game/OutdoorPvPEP.h
@@ -19,7 +19,7 @@
#ifndef OUTDOOR_PVP_EP_
#define OUTDOOR_PVP_EP_
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
#include "DBCStructure.h"
diff --git a/src/game/OutdoorPvPHP.cpp b/src/game/OutdoorPvPHP.cpp
index 6058b82c102..60ceb7f4e3c 100644
--- a/src/game/OutdoorPvPHP.cpp
+++ b/src/game/OutdoorPvPHP.cpp
@@ -70,7 +70,7 @@ bool OutdoorPvPHP::SetupOutdoorPvP()
m_HordeTowersControlled = 0;
// add the zones affected by the pvp buff
for(int i = 0; i < OutdoorPvPHPBuffZonesNum; ++i)
- sOutdoorPvPMgr.AddZone(OutdoorPvPHPBuffZones[i],this);
+ RegisterZone(OutdoorPvPHPBuffZones[i]);
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveHP(this,HP_TOWER_BROKEN_HILL));
diff --git a/src/game/OutdoorPvPHP.h b/src/game/OutdoorPvPHP.h
index a538f82b216..7ccccd2fa61 100644
--- a/src/game/OutdoorPvPHP.h
+++ b/src/game/OutdoorPvPHP.h
@@ -19,7 +19,7 @@
#ifndef OUTDOOR_PVP_HP_
#define OUTDOOR_PVP_HP_
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
#define OutdoorPvPHPBuffZonesNum 6
// HP, citadel, ramparts, blood furnace, shattered halls, mag's lair
diff --git a/src/game/OutdoorPvPImpl.h b/src/game/OutdoorPvPImpl.h
new file mode 100644
index 00000000000..17602b07388
--- /dev/null
+++ b/src/game/OutdoorPvPImpl.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008-2009 Trinity
+ *
+ * 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
+ */
+#ifndef OUTDOORPVP_IMPL_H
+#define OUTDOORPVP_IMPL_H
+
+#include "SharedDefines.h"
+#include "OutdoorPvP.h"
+#include "Player.h"
+
+#define TEAM_ID(a) (a == ALLIANCE ? 0 : 1)
+
+enum ObjectiveStates
+{
+ OBJECTIVESTATE_NEUTRAL = 0,
+ OBJECTIVESTATE_ALLIANCE,
+ OBJECTIVESTATE_HORDE,
+ OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE,
+ OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE,
+ OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE,
+ OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE,
+};
+
+#endif
diff --git a/src/game/OutdoorPvPMgr.cpp b/src/game/OutdoorPvPMgr.cpp
index 2050a6c11f7..4016b84a73a 100644
--- a/src/game/OutdoorPvPMgr.cpp
+++ b/src/game/OutdoorPvPMgr.cpp
@@ -23,6 +23,7 @@
#include "OutdoorPvPZM.h"
#include "OutdoorPvPSI.h"
#include "OutdoorPvPEP.h"
+#include "Wintergrasp.h"
#include "Player.h"
#include "Policies/SingletonImp.h"
@@ -125,6 +126,19 @@ void OutdoorPvPMgr::InitOutdoorPvP()
m_OutdoorPvPSet.push_back(pOP);
sLog.outDebug("OutdoorPvP : EP successfully initiated.");
}
+
+ pOP = new OPvPWintergrasp;
+ // respawn, init variables
+ if(!pOP->SetupOutdoorPvP())
+ {
+ sLog.outDebug("OutdoorPvP : Wintergrasp init failed.");
+ delete pOP;
+ }
+ else
+ {
+ m_OutdoorPvPSet.push_back(pOP);
+ sLog.outDebug("OutdoorPvP : Wintergrasp successfully initiated.");
+ }
}
void OutdoorPvPMgr::AddZone(uint32 zoneid, OutdoorPvP *handle)
diff --git a/src/game/OutdoorPvPNA.cpp b/src/game/OutdoorPvPNA.cpp
index 9030337f2cd..c46c92a6404 100644
--- a/src/game/OutdoorPvPNA.cpp
+++ b/src/game/OutdoorPvPNA.cpp
@@ -256,7 +256,7 @@ bool OutdoorPvPNA::SetupOutdoorPvP()
{
// m_TypeId = OUTDOOR_PVP_NA; _MUST_ be set in ctor, because of spawns cleanup
// add the zones affected by the pvp buff
- sOutdoorPvPMgr.AddZone(NA_BUFF_ZONE,this);
+ RegisterZone(NA_BUFF_ZONE);
// halaa
m_obj = new OutdoorPvPObjectiveNA(this);
diff --git a/src/game/OutdoorPvPNA.h b/src/game/OutdoorPvPNA.h
index 92e0b9dcbbb..15b314d4e06 100644
--- a/src/game/OutdoorPvPNA.h
+++ b/src/game/OutdoorPvPNA.h
@@ -21,7 +21,7 @@
// TODO: "sometimes" set to neutral
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
// kill credit for pks
const uint32 NA_CREDIT_MARKER = 24867;
diff --git a/src/game/OutdoorPvPObjectiveAI.cpp b/src/game/OutdoorPvPObjectiveAI.cpp
index 233fffd6b2f..35247d81210 100644
--- a/src/game/OutdoorPvPObjectiveAI.cpp
+++ b/src/game/OutdoorPvPObjectiveAI.cpp
@@ -21,6 +21,7 @@
#include "Player.h"
#include "Unit.h"
#include "OutdoorPvPMgr.h"
+#include "OutdoorPvPImpl.h"
#include "World.h"
#define MAX_OUTDOOR_PVP_DISTANCE 200 // the max value in capture point type go data0 is 100 currently, so use twice that much to handle leaving as well
diff --git a/src/game/OutdoorPvPSI.cpp b/src/game/OutdoorPvPSI.cpp
index 366c5923351..0f61e6c3fed 100644
--- a/src/game/OutdoorPvPSI.cpp
+++ b/src/game/OutdoorPvPSI.cpp
@@ -58,7 +58,7 @@ void OutdoorPvPSI::UpdateWorldState()
bool OutdoorPvPSI::SetupOutdoorPvP()
{
for(int i = 0; i < OutdoorPvPSIBuffZonesNum; ++i)
- sOutdoorPvPMgr.AddZone(OutdoorPvPSIBuffZones[i],this);
+ RegisterZone(OutdoorPvPSIBuffZones[i]);
return true;
}
diff --git a/src/game/OutdoorPvPSI.h b/src/game/OutdoorPvPSI.h
index 1f2331b4251..3b60cb525e3 100644
--- a/src/game/OutdoorPvPSI.h
+++ b/src/game/OutdoorPvPSI.h
@@ -19,7 +19,7 @@
#ifndef OUTDOOR_PVP_SI_
#define OUTDOOR_PVP_SI_
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
const uint32 SI_SILITHYST_FLAG_GO_SPELL = 29518;
diff --git a/src/game/OutdoorPvPTF.cpp b/src/game/OutdoorPvPTF.cpp
index 01b224cffa9..5c4ed9dd7d4 100644
--- a/src/game/OutdoorPvPTF.cpp
+++ b/src/game/OutdoorPvPTF.cpp
@@ -276,7 +276,7 @@ bool OutdoorPvPTF::SetupOutdoorPvP()
// add the zones affected by the pvp buff
for(int i = 0; i < OutdoorPvPTFBuffZonesNum; ++i)
- sOutdoorPvPMgr.AddZone(OutdoorPvPTFBuffZones[i],this);
+ RegisterZone(OutdoorPvPTFBuffZones[i]);
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_NW));
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveTF(this,TF_TOWER_N));
diff --git a/src/game/OutdoorPvPTF.h b/src/game/OutdoorPvPTF.h
index 255ddb1fda9..2d99a93c7cf 100644
--- a/src/game/OutdoorPvPTF.h
+++ b/src/game/OutdoorPvPTF.h
@@ -1,7 +1,7 @@
#ifndef OUTDOOR_PVP_TF_
#define OUTDOOR_PVP_TF_
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
const uint32 OutdoorPvPTFBuffZonesNum = 5;
diff --git a/src/game/OutdoorPvPZM.cpp b/src/game/OutdoorPvPZM.cpp
index 6077a0ba66f..15625177393 100644
--- a/src/game/OutdoorPvPZM.cpp
+++ b/src/game/OutdoorPvPZM.cpp
@@ -203,7 +203,7 @@ bool OutdoorPvPZM::SetupOutdoorPvP()
// add the zones affected by the pvp buff
for(int i = 0; i < OutdoorPvPZMBuffZonesNum; ++i)
- sOutdoorPvPMgr.AddZone(OutdoorPvPZMBuffZones[i],this);
+ RegisterZone(OutdoorPvPZMBuffZones[i]);
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_WEST));
m_OutdoorPvPObjectives.push_back(new OutdoorPvPObjectiveZM_Beacon(this,ZM_BEACON_EAST));
diff --git a/src/game/OutdoorPvPZM.h b/src/game/OutdoorPvPZM.h
index 405c0133b5c..f4a60f8c8f4 100644
--- a/src/game/OutdoorPvPZM.h
+++ b/src/game/OutdoorPvPZM.h
@@ -19,7 +19,7 @@
#ifndef OUTDOOR_PVP_ZM_
#define OUTDOOR_PVP_ZM_
-#include "OutdoorPvP.h"
+#include "OutdoorPvPImpl.h"
#include "Language.h"
const uint32 OutdoorPvPZMBuffZonesNum = 5;
diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp
index 9dd36895d56..d05c7085bff 100644
--- a/src/game/Vehicle.cpp
+++ b/src/game/Vehicle.cpp
@@ -45,10 +45,11 @@ void Vehicle::AddToWorld()
AIM_Initialize();
switch(GetEntry())
{
- case 27850:InstallAccessory(27905,1);break;
- case 28312:InstallAccessory(28319,7);break;
- case 32627:InstallAccessory(32629,7);break;
+ case 27850:InstallAccessory(27905,1);break;
+ case 28312:InstallAccessory(28319,7);break;
+ case 32627:InstallAccessory(32629,7);break;
}
+ //setPowerType(POWER_ENERGY);SetMaxPower(POWER_ENERGY, 100);
}
}
@@ -84,6 +85,9 @@ void Vehicle::setDeathState(DeathState s) // overwrite vir
void Vehicle::Update(uint32 diff)
{
Creature::Update(diff);
+ //310
+ //if(getPowerType() == POWER_ENERGY)
+ // ModifyPower(POWER_ENERGY, 1);
}
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 phaseMask, uint32 Entry, uint32 vehicleId, uint32 team)
diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp
new file mode 100644
index 00000000000..a2cbb3d7cf5
--- /dev/null
+++ b/src/game/Wintergrasp.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2008-2009 Trinity
+ *
+ * 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
+ */
+
+#include "Wintergrasp.h"
+#include "SpellAuras.h"
+#include "Vehicle.h"
+
+bool OPvPWintergrasp::SetupOutdoorPvP()
+{
+ RegisterZone(ZONE_WINTERGRASP);
+ return true;
+}
+
+void OPvPWintergrasp::HandlePlayerEnterZone(Player * plr, uint32 zone)
+{
+ if(!plr->HasAura(SPELL_RECRUIT) && !plr->HasAura(SPELL_CORPORAL)
+ && !plr->HasAura(SPELL_LIEUTENANT))
+ plr->CastSpell(plr, SPELL_RECRUIT, true);
+ OutdoorPvP::HandlePlayerEnterZone(plr, zone);
+}
+
+void OPvPWintergrasp::HandlePlayerLeaveZone(Player * plr, uint32 zone)
+{
+ if(plr->m_Vehicle)
+ plr->m_Vehicle->Dismiss();
+ OutdoorPvP::HandlePlayerLeaveZone(plr, zone);
+}
+
+void OPvPWintergrasp::HandleKill(Player *killer, Unit *victim)
+{
+ if(victim->GetTypeId() == TYPEID_PLAYER)
+ {
+ // We handle promotion here because player should not get promotion if he has buff but do the kill outside the zone
+ if(victim->getLevel() >= 70)
+ {
+ if(Aura *aur = killer->GetAura(SPELL_RECRUIT))
+ {
+ if(aur->GetStackAmount() >= 5)
+ {
+ killer->RemoveAura(SPELL_RECRUIT);
+ killer->CastSpell(killer, SPELL_CORPORAL, true);
+ }
+ else
+ killer->CastSpell(killer, SPELL_RECRUIT, true);
+ }
+ else if(Aura *aur = killer->GetAura(SPELL_CORPORAL))
+ {
+ if(aur->GetStackAmount() >= 5)
+ {
+ killer->RemoveAura(SPELL_CORPORAL);
+ killer->CastSpell(killer, SPELL_LIEUTENANT, true);
+ }
+ else
+ killer->CastSpell(killer, SPELL_CORPORAL, true);
+ }
+ else if(killer->HasAura(SPELL_LIEUTENANT))
+ killer->CastSpell(killer, SPELL_LIEUTENANT, true);
+ }
+ }
+}
diff --git a/src/game/Wintergrasp.h b/src/game/Wintergrasp.h
new file mode 100644
index 00000000000..1a698c4c1cf
--- /dev/null
+++ b/src/game/Wintergrasp.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008-2009 Trinity
+ *
+ * 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
+ */
+
+#ifndef TRINITY_WINTERGRASP_H
+#define TRINITY_WINTERGRASP_H
+
+#include "OutdoorPvPImpl.h"
+
+#define ZONE_WINTERGRASP 4197
+
+#define SPELL_RECRUIT 37795
+#define SPELL_CORPORAL 33280
+#define SPELL_LIEUTENANT 55629
+
+#define SPELL_TENICITY 58549
+#define SPELL_TENICITY_VEHICLE 59911
+
+class OPvPWintergrasp : public OutdoorPvP
+{
+ public:
+ bool SetupOutdoorPvP();
+ void HandlePlayerEnterZone(Player *plr, uint32 zone);
+ void HandlePlayerLeaveZone(Player *plr, uint32 zone);
+ void HandleKill(Player *killer, Unit *victim);
+};
+
+#endif
diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj
index 002b5e7fb2d..9b37bb359d5 100644
--- a/win/VC80/game.vcproj
+++ b/win/VC80/game.vcproj
@@ -841,70 +841,6 @@
RelativePath="..\..\src\game\ObjectGridLoader.h"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1690,6 +1626,86 @@
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj
index 15fc293a02c..ebe03efaab5 100644
--- a/win/VC90/game.vcproj
+++ b/win/VC90/game.vcproj
@@ -842,70 +842,6 @@
RelativePath="..\..\src\game\ObjectGridLoader.h"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1691,6 +1627,86 @@
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+