aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Battlegrounds/Battleground.h2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp13
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.h2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp6
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.h2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp5
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp15
8 files changed, 28 insertions, 19 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h
index d712d4f46fd..31593798616 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -413,7 +413,7 @@ class TC_GAME_API Battleground : public ZoneScript
virtual void HandleAreaTrigger(Player* /*player*/, uint32 /*trigger*/, bool /*entered*/);
// must be implemented in BG subclass if need AND call base class generic code
virtual void HandleKillPlayer(Player* player, Player* killer);
- virtual void HandleKillUnit(Creature* /*creature*/, Player* /*killer*/) { }
+ virtual void HandleKillUnit(Creature* /*creature*/, Unit* /*killer*/) { }
// Battleground events
virtual void EventPlayerDroppedFlag(Player* /*player*/) { }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 4ad5f8685bf..5c9e5ef48c5 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -73,12 +73,15 @@ void BattlegroundAV::HandleKillPlayer(Player* player, Player* killer)
UpdateScore(GetPlayerTeam(player->GetGUID()), -1);
}
-void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
+void BattlegroundAV::HandleKillUnit(Creature* unit, Unit* killer)
{
TC_LOG_DEBUG("bg.battleground", "bg_av HandleKillUnit {}", unit->GetEntry());
if (GetStatus() != STATUS_IN_PROGRESS)
return;
+
uint32 entry = unit->GetEntry();
+ Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself();
+
/*
uint32 triggerSpawnID = 0;
if (creature->GetEntry() == BG_AV_CreatureInfo[AV_NPC_A_CAPTAIN][0])
@@ -148,10 +151,10 @@ void BattlegroundAV::HandleKillUnit(Creature* unit, Player* killer)
if (Creature* herold = GetBGCreature(AV_CPLACE_HERALD))
herold->AI()->Talk(TEXT_FROSTWOLF_GENERAL_DEAD);
}
- else if (entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_H_4])
- ChangeMineOwner(AV_NORTH_MINE, GetPlayerTeam(killer->GetGUID()));
- else if (entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_H_4])
- ChangeMineOwner(AV_SOUTH_MINE, GetPlayerTeam(killer->GetGUID()));
+ else if ((entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_N_MINE_H_4]) && killerPlayer)
+ ChangeMineOwner(AV_NORTH_MINE, GetPlayerTeam(killerPlayer->GetGUID()));
+ else if ((entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_N_4] || entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_A_4] || entry == BG_AV_CreatureInfo[AV_NPC_S_MINE_H_4]) && killerPlayer)
+ ChangeMineOwner(AV_SOUTH_MINE, GetPlayerTeam(killerPlayer->GetGUID()));
}
void BattlegroundAV::HandleQuestComplete(uint32 questid, Player* player)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
index d55d86be096..f93cd770178 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -1599,7 +1599,7 @@ class BattlegroundAV : public Battleground
/*handlestuff*/ //these are functions which get called from extern
void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj) override;
void HandleKillPlayer(Player* player, Player* killer) override;
- void HandleKillUnit(Creature* unit, Player* killer) override;
+ void HandleKillUnit(Creature* unit, Unit* killer) override;
void HandleQuestComplete(uint32 questid, Player* player) override;
bool CanActivateGO(int32 GOId, uint32 team) const override;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index 0f6c9a9d622..f604f83dc0c 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -364,7 +364,7 @@ bool BattlegroundIC::SetupBattleground()
return true;
}
-void BattlegroundIC::HandleKillUnit(Creature* unit, Player* killer)
+void BattlegroundIC::HandleKillUnit(Creature* unit, Unit* killer)
{
if (GetStatus() != STATUS_IN_PROGRESS)
return;
@@ -384,7 +384,9 @@ void BattlegroundIC::HandleKillUnit(Creature* unit, Player* killer)
//Achievement Mowed Down
// TO-DO: This should be done on the script of each vehicle of the BG.
if (unit->IsVehicle())
- killer->CastSpell(killer, SPELL_DESTROYED_VEHICLE_ACHIEVEMENT, true);
+ {
+ if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
+ killerPlayer->CastSpell(killerPlayer, SPELL_DESTROYED_VEHICLE_ACHIEVEMENT, true);
}
void BattlegroundIC::HandleKillPlayer(Player* player, Player* killer)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
index cecf59e4607..a72a2b39d2c 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -929,7 +929,7 @@ class BattlegroundIC : public Battleground
void HandleAreaTrigger(Player* player, uint32 trigger, bool entered) override;
bool SetupBattleground() override;
void SpawnLeader(uint32 teamid);
- void HandleKillUnit(Creature* unit, Player* killer) override;
+ void HandleKillUnit(Creature* unit, Unit* killer) override;
void HandleKillPlayer(Player* player, Player* killer) override;
void EventPlayerClickedOnFlag(Player* source, GameObject* /*target_obj*/) override;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 51d96a39363..7f15b69cbd9 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -592,11 +592,12 @@ void BattlegroundSA::ProcessEvent(WorldObject* obj, uint32 eventId, WorldObject*
}
}
-void BattlegroundSA::HandleKillUnit(Creature* creature, Player* killer)
+void BattlegroundSA::HandleKillUnit(Creature* creature, Unit* killer)
{
if (creature->GetEntry() == NPC_DEMOLISHER_SA)
{
- UpdatePvpStat(killer, PVP_STAT_DEMOLISHERS_DESTROYED, 1);
+ if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
+ UpdatePvpStat(killerPlayer, PVP_STAT_DEMOLISHERS_DESTROYED, 1);
int32 worldStateId = Attackers == TEAM_HORDE ? BG_SA_DESTROYED_HORDE_VEHICLES : BG_SA_DESTROYED_ALLIANCE_VEHICLES;
int32 currentDestroyedVehicles = sWorldStateMgr->GetValue(worldStateId, GetBgMap());
UpdateWorldState(worldStateId, currentDestroyedVehicles + 1);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
index 4e8c48b301c..097df5a4e22 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -542,7 +542,7 @@ class BattlegroundSA : public Battleground
bool SetupBattleground() override;
void Reset() override;
/// Called when a player kill a unit in bg
- void HandleKillUnit(Creature* creature, Player* killer) override;
+ void HandleKillUnit(Creature* creature, Unit* killer) override;
/// Return the nearest graveyard where player can respawn
WorldSafeLocsEntry const* GetClosestGraveyard(Player* player) override;
/// Called when someone activates an event
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c805ba9025e..a930d11acd5 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10950,14 +10950,17 @@ void Unit::SetMeleeAnimKitId(uint16 animKitId)
// pvp->HandlePlayerActivityChangedpVictim->ToPlayer();
// battleground things (do this at the end, so the death state flag will be properly set to handle in the bg->handlekill)
- if (player && player->InBattleground())
+ if (attacker)
{
- if (Battleground* bg = player->GetBattleground())
+ if (BattlegroundMap* bgMap = victim->GetMap()->ToBattlegroundMap())
{
- if (Player* playerVictim = victim->ToPlayer())
- bg->HandleKillPlayer(playerVictim, player);
- else
- bg->HandleKillUnit(victim->ToCreature(), player);
+ if (Battleground* bg = bgMap->GetBG())
+ {
+ if (Player* playerVictim = victim->ToPlayer())
+ bg->HandleKillPlayer(playerVictim, player);
+ else
+ bg->HandleKillUnit(victim->ToCreature(), attacker);
+ }
}
}