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 8a5b3d70cd4..bd79302f368 100644
--- a/src/server/game/Battlegrounds/Battleground.h
+++ b/src/server/game/Battlegrounds/Battleground.h
@@ -407,7 +407,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 af1055bd08f..fb7778e3030 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -64,12 +64,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])
@@ -139,10 +142,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 ebae8a84a14..8a630fc6999 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -1666,7 +1666,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 ae27e2f4eb4..c7cd9bc61d4 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -361,7 +361,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;
@@ -381,7 +381,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 58cc337a991..f05a2566e07 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -974,7 +974,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 fd637569a1f..90289b240cb 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -587,11 +587,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)
{
- UpdatePlayerScore(killer, SCORE_DESTROYED_DEMOLISHER, 1);
+ if (Player* killerPlayer = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
+ UpdatePlayerScore(killerPlayer, SCORE_DESTROYED_DEMOLISHER, 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 2c84420ad3b..d112feb1b54 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -587,7 +587,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 a4b6d67eab2..ba70399266f 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10907,14 +10907,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);
+ }
}
}