Skip to content

Commit

Permalink
Handle unit kill inside outdoor pvp area
Browse files Browse the repository at this point in the history
Signed-off-by: Xfurry <xfurry.cmangos@outlook.com>
  • Loading branch information
xfurry committed Jan 7, 2018
1 parent 63cf8b0 commit 7f25dd2
Show file tree
Hide file tree
Showing 9 changed files with 19 additions and 13 deletions.
6 changes: 6 additions & 0 deletions src/game/Entities/Unit.cpp
Expand Up @@ -1133,10 +1133,16 @@ void Unit::JustKilledCreature(Creature* victim, Player* responsiblePlayer)
if (responsiblePlayer) // killedby Player, inform BG
if (BattleGround* bg = responsiblePlayer->GetBattleGround())
bg->HandleKillUnit(victim, responsiblePlayer);

// Notify the outdoor pvp script
if (OutdoorPvP* outdoorPvP = sOutdoorPvPMgr.GetScript(responsiblePlayer ? responsiblePlayer->GetCachedZoneId() : GetZoneId()))
{
outdoorPvP->HandleCreatureDeath(victim);

if (responsiblePlayer) // killed by Player; inform outdoorPvP
outdoorPvP->HandlePlayerKill(responsiblePlayer, victim);
}

// Start creature death script
GetMap()->ScriptsStart(sCreatureDeathScripts, victim->GetEntry(), victim, responsiblePlayer ? responsiblePlayer : this);

Expand Down
10 changes: 5 additions & 5 deletions src/game/OutdoorPvP/OutdoorPvP.cpp
Expand Up @@ -95,12 +95,12 @@ void OutdoorPvP::HandleGameObjectRemove(GameObject* go)
}

/**
Function that handles player kills in the main outdoor pvp zones
Function that handles kills in the main outdoor pvp zones
@param player who killed another player
@param player who killed another unit
@param victim who was killed
*/
void OutdoorPvP::HandlePlayerKill(Player* killer, Player* victim)
void OutdoorPvP::HandlePlayerKill(Player* killer, Unit* victim)
{
if (Group* group = killer->GetGroup())
{
Expand All @@ -118,14 +118,14 @@ void OutdoorPvP::HandlePlayerKill(Player* killer, Player* victim)
// creature kills must be notified, even if not inside objective / not outdoor pvp active
// player kills only count if active and inside objective
if (groupMember->CanUseCapturePoint())
HandlePlayerKillInsideArea(groupMember);
HandlePlayerKillInsideArea(groupMember, victim);
}
}
else
{
// creature kills must be notified, even if not inside objective / not outdoor pvp active
if (killer && killer->CanUseCapturePoint())
HandlePlayerKillInsideArea(killer);
HandlePlayerKillInsideArea(killer, victim);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/game/OutdoorPvP/OutdoorPvP.h
Expand Up @@ -87,7 +87,7 @@ class OutdoorPvP
virtual void Update(uint32 /*diff*/) {}

// Handle player kill
void HandlePlayerKill(Player* killer, Player* victim);
void HandlePlayerKill(Player* killer, Unit* victim);

// Handle script condition fulfillment
virtual bool IsConditionFulfilled(Player const* /*source*/, uint32 /*conditionId*/, WorldObject const* /*conditionSource*/, uint32 /*conditionSourceType*/) { return false; }
Expand All @@ -105,7 +105,7 @@ class OutdoorPvP
virtual void SendRemoveWorldStates(Player* /*player*/) {}

// handle npc/player kill
virtual void HandlePlayerKillInsideArea(Player* /*killer*/) {}
virtual void HandlePlayerKillInsideArea(Player* /*killer*/, Unit* /*victim*/) {}

// send world state update to all players present
void SendUpdateWorldState(uint32 field, uint32 value);
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPHP.cpp
Expand Up @@ -143,7 +143,7 @@ void OutdoorPvPHP::HandleObjectiveComplete(uint32 eventId, const std::list<Playe
}

// Cast player spell on opponent kill
void OutdoorPvPHP::HandlePlayerKillInsideArea(Player* player)
void OutdoorPvPHP::HandlePlayerKillInsideArea(Player* player, Unit* victim)
{
for (uint8 i = 0; i < MAX_HP_TOWERS; ++i)
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPHP.h
Expand Up @@ -159,7 +159,7 @@ class OutdoorPvPHP : public OutdoorPvP
void HandleObjectiveComplete(uint32 eventId, const std::list<Player*>& players, Team team) override;

void HandleGameObjectCreate(GameObject* go) override;
void HandlePlayerKillInsideArea(Player* player) override;
void HandlePlayerKillInsideArea(Player* player, Unit* /*victim*/) override;

private:
// process capture events
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPNA.cpp
Expand Up @@ -96,7 +96,7 @@ void OutdoorPvPNA::HandleObjectiveComplete(uint32 eventId, const std::list<Playe
}

// Cast player spell on opponent kill
void OutdoorPvPNA::HandlePlayerKillInsideArea(Player* player)
void OutdoorPvPNA::HandlePlayerKillInsideArea(Player* player, Unit* victim)
{
if (GameObject* capturePoint = player->GetMap()->GetGameObject(m_capturePoint))
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPNA.h
Expand Up @@ -170,7 +170,7 @@ class OutdoorPvPNA : public OutdoorPvP
void HandleGameObjectCreate(GameObject* go) override;
void HandleCreatureDeath(Creature* creature) override;

void HandlePlayerKillInsideArea(Player* player) override;
void HandlePlayerKillInsideArea(Player* player, Unit* /*victim*/) override;
bool HandleGameObjectUse(Player* player, GameObject* go) override;
void Update(uint32 diff) override;

Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPZM.cpp
Expand Up @@ -146,7 +146,7 @@ void OutdoorPvPZM::HandleGameObjectCreate(GameObject* go)
}

// Cast player spell on opponent kill
void OutdoorPvPZM::HandlePlayerKillInsideArea(Player* player)
void OutdoorPvPZM::HandlePlayerKillInsideArea(Player* player, Unit* victim)
{
for (uint8 i = 0; i < MAX_ZM_TOWERS; ++i)
{
Expand Down
2 changes: 1 addition & 1 deletion src/game/OutdoorPvP/OutdoorPvPZM.h
Expand Up @@ -148,7 +148,7 @@ class OutdoorPvPZM : public OutdoorPvP
void HandleCreatureCreate(Creature* creature) override;
void HandleGameObjectCreate(GameObject* go) override;

void HandlePlayerKillInsideArea(Player* player) override;
void HandlePlayerKillInsideArea(Player* player, Unit* /*victim*/) override;
bool HandleGameObjectUse(Player* player, GameObject* go) override;

bool IsConditionFulfilled(Player const* source, uint32 conditionId, WorldObject const* conditionSource, uint32 conditionSourceType) override;
Expand Down

0 comments on commit 7f25dd2

Please sign in to comment.