Core/Battlefield: attempt to fix vehicle counter when vehicle is killed. finish correcting alliance/horde siege engine

This commit is contained in:
Kandera
2012-08-20 13:52:00 -04:00
parent 81ba249c79
commit 483f0a6a4e
3 changed files with 47 additions and 22 deletions
@@ -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)
{
@@ -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);
+4 -4
View File
@@ -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;
}