diff options
author | Kandera <KanderaDev@gmail.com> | 2012-03-28 11:32:57 -0400 |
---|---|---|
committer | Kandera <KanderaDev@gmail.com> | 2012-08-20 13:52:00 -0400 |
commit | 483f0a6a4e4bf30a567987e81ab17ec8201f29bc (patch) | |
tree | 5aa78ead6f02ff60a17e2e2f1807774a5b2b23d4 /src | |
parent | 81ba249c790362e76e32a692bde794c2ff7bfb02 (diff) |
Core/Battlefield: attempt to fix vehicle counter when vehicle is killed. finish correcting alliance/horde siege engine
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 54 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.h | 7 | ||||
-rw-r--r-- | src/server/scripts/Northrend/wintergrasp.cpp | 8 |
3 files changed, 47 insertions, 22 deletions
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index ce215590822..6dbedf1aceb 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -518,8 +518,8 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) { switch (creature->GetEntry()) { - case NPC_WINTERGRASP_SIEGE_ENGINE_1: - case NPC_WINTERGRASP_SIEGE_ENGINE_2: + case NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE: + case NPC_WINTERGRASP_SIEGE_ENGINE_HORDE: case NPC_WINTERGRASP_CATAPULT: case NPC_WINTERGRASP_DEMOLISHER: { @@ -573,12 +573,13 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) void BattlefieldWG::OnCreatureRemove(Creature* creature) { +/* possibly can be used later if (IsWarTime()) { switch (creature->GetEntry()) { - case NPC_WINTERGRASP_SIEGE_ENGINE_1: - case NPC_WINTERGRASP_SIEGE_ENGINE_2: + case NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE: + case NPC_WINTERGRASP_SIEGE_ENGINE_HORDE: case NPC_WINTERGRASP_CATAPULT: case NPC_WINTERGRASP_DEMOLISHER: { @@ -600,7 +601,7 @@ void BattlefieldWG::OnCreatureRemove(Creature* creature) break; } } - } + }*/ } void BattlefieldWG::OnGameObjectCreate(GameObject* go) @@ -656,23 +657,19 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) return; bool again = false; + TeamId killerTeam = killer->GetTeamId(); + if (victim->GetTypeId() == TYPEID_PLAYER) { - for (GuidSet::const_iterator itr = m_PlayersInWar[killer->GetTeamId()].begin(); itr != m_PlayersInWar[killer->GetTeamId()].end(); ++itr) + for (GuidSet::const_iterator itr = m_PlayersInWar[killerTeam].begin(); itr != m_PlayersInWar[killerTeam].end(); ++itr) if (Player* player = sObjectAccessor->FindPlayer(*itr)) if (player->GetDistance2d(killer) < 40) PromotePlayer(player); return; - } + } - for (GuidSet::const_iterator itr = m_vehicles[GetOtherTeam(killer->GetTeamId())].begin(); itr != m_vehicles[GetOtherTeam(killer->GetTeamId())].end(); ++itr) - if (Unit* unit = sObjectAccessor->FindUnit(*itr)) - if (Creature* creature = unit->ToCreature()) - if (victim->GetEntry() == creature->GetEntry() && !again) - again = true; - - for (GuidSet::const_iterator itr = KeepCreature[GetOtherTeam(killer->GetTeamId())].begin(); - itr != KeepCreature[GetOtherTeam(killer->GetTeamId())].end(); ++itr) + for (GuidSet::const_iterator itr = KeepCreature[GetOtherTeam(killerTeam)].begin(); + itr != KeepCreature[GetOtherTeam(killerTeam)].end(); ++itr) { if (Unit* unit = sObjectAccessor->FindUnit(*itr)) { @@ -681,7 +678,7 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) if (victim->GetEntry() == creature->GetEntry() && !again) { again = true; - for (GuidSet::const_iterator iter = m_PlayersInWar[killer->GetTeamId()].begin(); iter != m_PlayersInWar[killer->GetTeamId()].end(); ++iter) + for (GuidSet::const_iterator iter = m_PlayersInWar[killerTeam].begin(); iter != m_PlayersInWar[killerTeam].end(); ++iter) if (Player* player = sObjectAccessor->FindPlayer(*iter)) if (player->GetDistance2d(killer) < 40.0f) PromotePlayer(player); @@ -692,6 +689,31 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) // TODO:Recent PvP activity worldstate } +bool BattlefieldWG::FindAndRemoveVehicleFromList(Unit* vehicle) +{ + for (uint32 itr = 0; itr < 2; ++itr) + { + if (m_vehicles[itr].find(vehicle->GetGUID()) != m_vehicles[itr].end()) + { + m_vehicles[itr].erase(vehicle->GetGUID()); + if (itr == WintergraspFaction[TEAM_HORDE]) + UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_H,-1); + else + UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_A,-1); + return true; + } + } + return false; +} + +void BattlefieldWG::OnUnitDeath(Unit* unit) +{ + if (IsWarTime()) + if (unit->IsVehicle()) + if (FindAndRemoveVehicleFromList(unit)) + UpdateVehicleCountWG(); +} + // Update rank for player void BattlefieldWG::PromotePlayer(Player* killer) { diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index c711010bafd..f62d2d962f8 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -212,8 +212,8 @@ enum WintergraspNpcs NPC_DWARVEN_SPIRIT_GUIDE = 31842, // Alliance spirit guide for Wintergrasp NPC_TOWER_CANNON = 28366, - NPC_WINTERGRASP_SIEGE_ENGINE_1 = 28312, - NPC_WINTERGRASP_SIEGE_ENGINE_2 = 32627, + NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE = 28312, + NPC_WINTERGRASP_SIEGE_ENGINE_HORDE = 32627, NPC_WINTERGRASP_CATAPULT = 27881, NPC_WINTERGRASP_DEMOLISHER = 28094, NPC_WINTERGRASP_TOWER_CANNON = 28366, @@ -400,11 +400,14 @@ class BattlefieldWG : public Battlefield void SendInitWorldStatesToAll(); void HandleKill(Player* killer, Unit* victim); + void OnUnitDeath(Unit* unit); void PromotePlayer(Player* killer); void UpdateTenacity(); void ProcessEvent(WorldObject *obj, uint32 eventId); + bool FindAndRemoveVehicleFromList(Unit* vehicle); + // returns the graveyardId in the specified area. uint8 GetSpiritGraveyardId(uint32 areaId); diff --git a/src/server/scripts/Northrend/wintergrasp.cpp b/src/server/scripts/Northrend/wintergrasp.cpp index d4cc8519dab..db10e00f13d 100644 --- a/src/server/scripts/Northrend/wintergrasp.cpp +++ b/src/server/scripts/Northrend/wintergrasp.cpp @@ -99,8 +99,8 @@ uint8 const MAX_WINTERGRASP_VEHICLES = 4; uint32 const vehiclesList[MAX_WINTERGRASP_VEHICLES] = { NPC_WINTERGRASP_CATAPULT, NPC_WINTERGRASP_DEMOLISHER, - NPC_WINTERGRASP_SIEGE_ENGINE_1, - NPC_WINTERGRASP_SIEGE_ENGINE_2 + NPC_WINTERGRASP_SIEGE_ENGINE_ALLIANCE, + NPC_WINTERGRASP_SIEGE_ENGINE_HORDE }; class npc_wg_demolisher_engineer : public CreatureScript @@ -468,8 +468,8 @@ class spell_wintergrasp_force_building : public SpellScriptLoader { if (!sSpellMgr->GetSpellInfo(SPELL_BUILD_CATAPULT_FORCE) || !sSpellMgr->GetSpellInfo(SPELL_BUILD_DEMOLISHER_FORCE) - || !sSpellMgr->GetSpellInfo(SPELL_BUILD_SIEGE_VEHICLE_FORCE_1) - || !sSpellMgr->GetSpellInfo(SPELL_BUILD_SIEGE_VEHICLE_FORCE_2)) + || !sSpellMgr->GetSpellInfo(SPELL_BUILD_SIEGE_VEHICLE_FORCE_HORDE) + || !sSpellMgr->GetSpellInfo(SPELL_BUILD_SIEGE_VEHICLE_FORCE_ALLIANCE)) return false; return true; } |