*Apply tenacity buff on vehicles of wintergrasp.
*Fix the bug that tenacity is not applied on horde players. --HG-- branch : trunk
This commit is contained in:
@@ -40,9 +40,9 @@ bool GossipSelect_npc_demolisher_engineerer(Player* player, Creature* me, uint32
|
|||||||
player->CLOSE_GOSSIP_MENU();
|
player->CLOSE_GOSSIP_MENU();
|
||||||
switch(uiAction - GOSSIP_ACTION_INFO_DEF)
|
switch(uiAction - GOSSIP_ACTION_INFO_DEF)
|
||||||
{
|
{
|
||||||
case 0: player->CastSpell(player, 56663, false); break;
|
case 0: player->CastSpell(player, 56663, false, NULL, NULL, me->GetGUID()); break;
|
||||||
case 1: player->CastSpell(player, 56575, false); break;
|
case 1: player->CastSpell(player, 56575, false, NULL, NULL, me->GetGUID()); break;
|
||||||
case 2: player->CastSpell(player, player->GetTeamId() ? 61408 : 56661, false); break;
|
case 2: player->CastSpell(player, player->GetTeamId() ? 61408 : 56661, false, NULL, NULL, me->GetGUID()); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -3295,7 +3295,8 @@ void Spell::EffectSummonType(uint32 i)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//vehicle->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, m_caster->GetGUID());
|
//vehicle->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, m_caster->GetGUID());
|
||||||
vehicle->setFaction(m_caster->getFaction());
|
if(m_originalCaster)
|
||||||
|
vehicle->setFaction(m_originalCaster->getFaction());
|
||||||
vehicle->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
|
vehicle->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "Chat.h"
|
#include "Chat.h"
|
||||||
#include "CreatureAI.h"
|
#include "CreatureAI.h"
|
||||||
|
#include "ZoneScript.h"
|
||||||
|
|
||||||
Vehicle::Vehicle() : Creature(), m_vehicleInfo(NULL), m_usableSeatNum(0)
|
Vehicle::Vehicle() : Creature(), m_vehicleInfo(NULL), m_usableSeatNum(0)
|
||||||
{
|
{
|
||||||
@@ -41,6 +42,8 @@ void Vehicle::AddToWorld()
|
|||||||
{
|
{
|
||||||
if(!IsInWorld())
|
if(!IsInWorld())
|
||||||
{
|
{
|
||||||
|
if(m_zoneScript)
|
||||||
|
m_zoneScript->OnCreatureCreate(this, true);
|
||||||
ObjectAccessor::Instance().AddObject(this);
|
ObjectAccessor::Instance().AddObject(this);
|
||||||
Unit::AddToWorld();
|
Unit::AddToWorld();
|
||||||
AIM_Initialize();
|
AIM_Initialize();
|
||||||
@@ -58,6 +61,8 @@ void Vehicle::RemoveFromWorld()
|
|||||||
{
|
{
|
||||||
if(IsInWorld())
|
if(IsInWorld())
|
||||||
{
|
{
|
||||||
|
if(m_zoneScript)
|
||||||
|
m_zoneScript->OnCreatureCreate(this, false);
|
||||||
RemoveAllPassengers();
|
RemoveAllPassengers();
|
||||||
///- Don't call the function for Creature, normal mobs + totems go in a different storage
|
///- Don't call the function for Creature, normal mobs + totems go in a different storage
|
||||||
Unit::RemoveFromWorld();
|
Unit::RemoveFromWorld();
|
||||||
|
|||||||
@@ -171,7 +171,43 @@ uint32 OPvPWintergrasp::GetCreatureEntry(uint32 guidlow, const CreatureData *dat
|
|||||||
|
|
||||||
void OPvPWintergrasp::OnCreatureCreate(Creature *creature, bool add)
|
void OPvPWintergrasp::OnCreatureCreate(Creature *creature, bool add)
|
||||||
{
|
{
|
||||||
if(m_creEntryPair.find(creature->GetEntry()) != m_creEntryPair.end())
|
if(creature->isVehicle())
|
||||||
|
{
|
||||||
|
TeamId team;
|
||||||
|
if(creature->getFaction() == WintergraspFaction[TEAM_ALLIANCE])
|
||||||
|
team = TEAM_ALLIANCE;
|
||||||
|
else if(creature->getFaction() == WintergraspFaction[TEAM_HORDE])
|
||||||
|
team = TEAM_HORDE;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch(creature->GetEntry())
|
||||||
|
{
|
||||||
|
case 27881:
|
||||||
|
case 28094:
|
||||||
|
case 28312:
|
||||||
|
case 32627:
|
||||||
|
//case 28366: tower
|
||||||
|
if(add)
|
||||||
|
{
|
||||||
|
m_vehicles[team].insert((Vehicle*)creature);
|
||||||
|
if(m_tenacityStack > 0)
|
||||||
|
{
|
||||||
|
if(team == TEAM_ALLIANCE)
|
||||||
|
creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, m_tenacityStack);
|
||||||
|
}
|
||||||
|
else if(m_tenacityStack < 0)
|
||||||
|
{
|
||||||
|
if(team == TEAM_HORDE)
|
||||||
|
creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, -m_tenacityStack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_vehicles[team].erase((Vehicle*)creature);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(m_creEntryPair.find(creature->GetEntry()) != m_creEntryPair.end())
|
||||||
{
|
{
|
||||||
if(add) m_creatures.insert(creature);
|
if(add) m_creatures.insert(creature);
|
||||||
else m_creatures.erase(creature);
|
else m_creatures.erase(creature);
|
||||||
@@ -367,12 +403,18 @@ void OPvPWintergrasp::UpdateTenacityStack()
|
|||||||
if(m_tenacityStack > 0)
|
if(m_tenacityStack > 0)
|
||||||
{
|
{
|
||||||
if(newStack <= 0)
|
if(newStack <= 0)
|
||||||
|
{
|
||||||
TeamCastSpell(TEAM_ALLIANCE, -SPELL_TENACITY);
|
TeamCastSpell(TEAM_ALLIANCE, -SPELL_TENACITY);
|
||||||
|
VehicleCastSpell(TEAM_ALLIANCE, -SPELL_TENACITY_VEHICLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(m_tenacityStack < 0)
|
else if(m_tenacityStack < 0)
|
||||||
{
|
{
|
||||||
if(newStack >= 0)
|
if(newStack >= 0)
|
||||||
|
{
|
||||||
TeamCastSpell(TEAM_HORDE, -SPELL_TENACITY);
|
TeamCastSpell(TEAM_HORDE, -SPELL_TENACITY);
|
||||||
|
VehicleCastSpell(TEAM_HORDE, -SPELL_TENACITY_VEHICLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_tenacityStack = newStack;
|
m_tenacityStack = newStack;
|
||||||
|
|
||||||
@@ -380,11 +422,24 @@ void OPvPWintergrasp::UpdateTenacityStack()
|
|||||||
if(newStack)
|
if(newStack)
|
||||||
{
|
{
|
||||||
TeamId team = newStack > 0 ? TEAM_ALLIANCE : TEAM_HORDE;
|
TeamId team = newStack > 0 ? TEAM_ALLIANCE : TEAM_HORDE;
|
||||||
|
if(newStack < 0) newStack = -newStack;
|
||||||
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
||||||
(*itr)->SetAuraStack(SPELL_TENACITY, *itr, newStack);
|
(*itr)->SetAuraStack(SPELL_TENACITY, *itr, newStack);
|
||||||
|
for(VehicleSet::iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
|
||||||
|
(*itr)->SetAuraStack(SPELL_TENACITY_VEHICLE, *itr, newStack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OPvPWintergrasp::VehicleCastSpell(TeamId team, int32 spellId)
|
||||||
|
{
|
||||||
|
if(spellId > 0)
|
||||||
|
for(VehicleSet::iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
|
||||||
|
(*itr)->CastSpell(*itr, (uint32)spellId, true);
|
||||||
|
else
|
||||||
|
for(VehicleSet::iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr)
|
||||||
|
(*itr)->RemoveAura((uint32)-spellId); // by stack?
|
||||||
|
}
|
||||||
|
|
||||||
bool OPvPWintergrasp::Update(uint32 diff)
|
bool OPvPWintergrasp::Update(uint32 diff)
|
||||||
{
|
{
|
||||||
if(m_timer > diff)
|
if(m_timer > diff)
|
||||||
@@ -393,8 +448,6 @@ bool OPvPWintergrasp::Update(uint32 diff)
|
|||||||
{
|
{
|
||||||
if(m_wartime)
|
if(m_wartime)
|
||||||
{
|
{
|
||||||
m_wartime = false;
|
|
||||||
m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_INTERVAL) * MINUTE * IN_MILISECONDS;
|
|
||||||
if(m_defender == TEAM_ALLIANCE)
|
if(m_defender == TEAM_ALLIANCE)
|
||||||
sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has successfully defended the fortress!");
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has successfully defended the fortress!");
|
||||||
else
|
else
|
||||||
@@ -404,8 +457,6 @@ bool OPvPWintergrasp::Update(uint32 diff)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_wartime = true;
|
|
||||||
m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_BATTLE_TIME) * MINUTE * IN_MILISECONDS;
|
|
||||||
sWorld.SendZoneText(ZONE_WINTERGRASP, "Battle begins!");
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Battle begins!");
|
||||||
UpdateAllWorldObject();
|
UpdateAllWorldObject();
|
||||||
StartBattle();
|
StartBattle();
|
||||||
@@ -416,9 +467,6 @@ bool OPvPWintergrasp::Update(uint32 diff)
|
|||||||
|
|
||||||
void OPvPWintergrasp::ChangeDefender()
|
void OPvPWintergrasp::ChangeDefender()
|
||||||
{
|
{
|
||||||
m_wartime = false;
|
|
||||||
m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_INTERVAL) * MINUTE * IN_MILISECONDS;
|
|
||||||
|
|
||||||
m_defender = OTHER_TEAM(m_defender);
|
m_defender = OTHER_TEAM(m_defender);
|
||||||
if(m_defender == TEAM_ALLIANCE)
|
if(m_defender == TEAM_ALLIANCE)
|
||||||
sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has taken over the fortress!");
|
sWorld.SendZoneText(ZONE_WINTERGRASP, "Alliance has taken over the fortress!");
|
||||||
@@ -440,6 +488,9 @@ void OPvPWintergrasp::GiveReward()
|
|||||||
|
|
||||||
void OPvPWintergrasp::StartBattle()
|
void OPvPWintergrasp::StartBattle()
|
||||||
{
|
{
|
||||||
|
m_wartime = true;
|
||||||
|
m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_BATTLE_TIME) * MINUTE * IN_MILISECONDS;
|
||||||
|
|
||||||
for(uint32 team = 0; team < 2; ++team)
|
for(uint32 team = 0; team < 2; ++team)
|
||||||
{
|
{
|
||||||
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
||||||
@@ -454,8 +505,13 @@ void OPvPWintergrasp::StartBattle()
|
|||||||
|
|
||||||
void OPvPWintergrasp::EndBattle()
|
void OPvPWintergrasp::EndBattle()
|
||||||
{
|
{
|
||||||
|
m_wartime = false;
|
||||||
|
m_timer = sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_INTERVAL) * MINUTE * IN_MILISECONDS;
|
||||||
|
|
||||||
for(uint32 team = 0; team < 2; ++team)
|
for(uint32 team = 0; team < 2; ++team)
|
||||||
{
|
{
|
||||||
|
VehicleCastSpell(TeamId(team), SPELL_SHUTDOWN_VEHICLE);
|
||||||
|
|
||||||
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
for(PlayerSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr)
|
||||||
{
|
{
|
||||||
(*itr)->RemoveAura(SPELL_RECRUIT);
|
(*itr)->RemoveAura(SPELL_RECRUIT);
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ const uint32 WintergraspFaction[2] = {1732, 1735};
|
|||||||
#define SPELL_VICTORY_REWARD 56902
|
#define SPELL_VICTORY_REWARD 56902
|
||||||
#define SPELL_DEFEAT_REWARD 58494
|
#define SPELL_DEFEAT_REWARD 58494
|
||||||
|
|
||||||
|
#define SPELL_SHUTDOWN_VEHICLE 21247
|
||||||
|
|
||||||
const uint32 WG_KEEP_CM = 0; //Need data
|
const uint32 WG_KEEP_CM = 0; //Need data
|
||||||
const uint32 WG_RULERS_BUFF = 52108;
|
const uint32 WG_RULERS_BUFF = 52108;
|
||||||
//some cosmetics :D
|
//some cosmetics :D
|
||||||
const uint32 WG_VICTORY_AURA = 60044;
|
const uint32 WG_VICTORY_AURA = 60044;
|
||||||
|
|
||||||
const uint32 WG_SHUTDOWN_CAST = 21247;
|
|
||||||
|
|
||||||
enum OutdoorPvP_WG_Sounds
|
enum OutdoorPvP_WG_Sounds
|
||||||
{
|
{
|
||||||
/*TODO OutdoorPvP_WG_SOUND_KEEP_CLAIMED = 8192,
|
/*TODO OutdoorPvP_WG_SOUND_KEEP_CLAIMED = 8192,
|
||||||
@@ -107,6 +107,7 @@ class OPvPWintergrasp : public OutdoorPvP
|
|||||||
protected:
|
protected:
|
||||||
typedef std::map<uint32, BuildingState *> BuildingStateMap;
|
typedef std::map<uint32, BuildingState *> BuildingStateMap;
|
||||||
typedef std::set<Creature*> CreatureSet;
|
typedef std::set<Creature*> CreatureSet;
|
||||||
|
typedef std::set<Vehicle*> VehicleSet;
|
||||||
typedef std::set<GameObject*> GameObjectSet;
|
typedef std::set<GameObject*> GameObjectSet;
|
||||||
public:
|
public:
|
||||||
explicit OPvPWintergrasp() : m_tenacityStack(0) {}
|
explicit OPvPWintergrasp() : m_tenacityStack(0) {}
|
||||||
@@ -134,6 +135,7 @@ class OPvPWintergrasp : public OutdoorPvP
|
|||||||
BuildingStateMap m_buildingStates;
|
BuildingStateMap m_buildingStates;
|
||||||
|
|
||||||
CreatureSet m_creatures;
|
CreatureSet m_creatures;
|
||||||
|
VehicleSet m_vehicles[2];
|
||||||
GameObjectSet m_gobjects;
|
GameObjectSet m_gobjects;
|
||||||
|
|
||||||
TeamPairMap m_creEntryPair, m_goDisplayPair;
|
TeamPairMap m_creEntryPair, m_goDisplayPair;
|
||||||
@@ -152,6 +154,8 @@ class OPvPWintergrasp : public OutdoorPvP
|
|||||||
void StartBattle();
|
void StartBattle();
|
||||||
void EndBattle();
|
void EndBattle();
|
||||||
void GiveReward();
|
void GiveReward();
|
||||||
|
|
||||||
|
void VehicleCastSpell(TeamId team, int32 spellId);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user