aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-05-11 12:32:22 +0200
committerShauren <shauren.trinity@gmail.com>2021-05-11 12:32:22 +0200
commit2ffedf30a9f177ba848bb74c1b41375ac6d734a9 (patch)
tree45855399d45a515b6791fe57a2ce8de4c7e64302 /src
parent254d5af7c2970620ae3bcecea4b7f1d65597f8b6 (diff)
Core/Quests: Implemented QUEST_OBJECTIVE_FLAG_KILL_PLAYERS_SAME_FACTION
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/KillRewarder.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.cpp9
-rw-r--r--src/server/game/Entities/Player/Player.h2
3 files changed, 9 insertions, 4 deletions
diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp
index b0df18e1c5a..35e3b892e01 100644
--- a/src/server/game/Entities/Player/KillRewarder.cpp
+++ b/src/server/game/Entities/Player/KillRewarder.cpp
@@ -193,7 +193,7 @@ void KillRewarder::_RewardPlayer(Player* player, bool isDungeon)
_RewardHonor(player);
// 4.1.1 Send player killcredit for quests with PlayerSlain
if (_victim->GetTypeId() == TYPEID_PLAYER)
- player->KilledPlayerCredit();
+ player->KilledPlayerCredit(_victim->GetGUID());
}
// Give XP only in PvE or in battlegrounds.
// Give reputation and kill credit only in PvE.
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3ed8b3ef4a6..5c2e0ebfe10 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16804,9 +16804,9 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_MONSTER, entry, 1, guid);
}
-void Player::KilledPlayerCredit()
+void Player::KilledPlayerCredit(ObjectGuid victimGuid)
{
- UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_PLAYERKILLS, 0, 1);
+ UpdateQuestObjectiveProgress(QUEST_OBJECTIVE_PLAYERKILLS, 0, 1, victimGuid);
}
void Player::KillCreditGO(uint32 entry, ObjectGuid guid)
@@ -16867,6 +16867,11 @@ void Player::UpdateQuestObjectiveProgress(QuestObjectiveType objectiveType, int3
bool objectiveIsNowComplete = false;
if (objective.IsStoringValue())
{
+ if (objectiveType == QUEST_OBJECTIVE_PLAYERKILLS && objective.Flags & QUEST_OBJECTIVE_FLAG_KILL_PLAYERS_SAME_FACTION)
+ if (Player const* victim = ObjectAccessor::GetPlayer(GetMap(), victimGuid))
+ if (victim->GetTeam() != GetTeam())
+ continue;
+
int32 currentProgress = GetQuestSlotObjectiveData(logSlot, objective);
if (addCount > 0 ? (currentProgress < objective.Amount) : (currentProgress > 0))
{
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index f8b18c5e826..2f0e03a0193 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1532,7 +1532,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void ItemRemovedQuestCheck(uint32 entry, uint32 count);
void KilledMonster(CreatureTemplate const* cInfo, ObjectGuid guid);
void KilledMonsterCredit(uint32 entry, ObjectGuid guid = ObjectGuid::Empty);
- void KilledPlayerCredit();
+ void KilledPlayerCredit(ObjectGuid victimGuid);
void KillCreditGO(uint32 entry, ObjectGuid guid = ObjectGuid::Empty);
void TalkedToCreature(uint32 entry, ObjectGuid guid);
void KillCreditCriteriaTreeObjective(QuestObjective const& questObjective);