Core/Battleground: Rework BattlegroundScore
Port From (https://github.com/TrinityCore/TrinityCore/commit/da0ec4f830c4428a17fd4e52124dca6c63e25961)
This commit is contained in:
@@ -4,15 +4,41 @@
|
||||
using Framework.Constants;
|
||||
using Game.Entities;
|
||||
using Game.Networking.Packets;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.BattleGrounds
|
||||
{
|
||||
public class BattlegroundScore
|
||||
{
|
||||
public BattlegroundScore(ObjectGuid playerGuid, Team team)
|
||||
public ObjectGuid PlayerGuid;
|
||||
public byte TeamId; // PvPTeamId
|
||||
|
||||
// Default score, present in every type
|
||||
public uint KillingBlows;
|
||||
public uint Deaths;
|
||||
public uint HonorableKills;
|
||||
public uint BonusHonor;
|
||||
public uint DamageDone;
|
||||
public uint HealingDone;
|
||||
|
||||
public uint PreMatchRating;
|
||||
public uint PreMatchMMR;
|
||||
public uint PostMatchRating;
|
||||
public uint PostMatchMMR;
|
||||
|
||||
public Dictionary<uint /*pvpStatID*/, uint /*value*/> PvpStats = new();
|
||||
|
||||
List<uint> _validPvpStatIds;
|
||||
|
||||
public BattlegroundScore(ObjectGuid playerGuid, Team team, List<uint> pvpStatIds)
|
||||
{
|
||||
PlayerGuid = playerGuid;
|
||||
TeamId = (int)(team == Team.Alliance ? PvPTeamId.Alliance : PvPTeamId.Horde);
|
||||
TeamId = (byte)(team == Team.Alliance ? PvPTeamId.Alliance : PvPTeamId.Horde);
|
||||
_validPvpStatIds = pvpStatIds;
|
||||
|
||||
if (_validPvpStatIds != null)
|
||||
foreach (uint pvpStatId in _validPvpStatIds)
|
||||
PvpStats[pvpStatId] = 0;
|
||||
}
|
||||
|
||||
public virtual void UpdateScore(ScoreType type, uint value)
|
||||
@@ -43,12 +69,34 @@ namespace Game.BattleGrounds
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdatePvpStat(uint pvpStatID, uint value)
|
||||
{
|
||||
if (_validPvpStatIds == null)
|
||||
return;
|
||||
|
||||
if (!_validPvpStatIds.Contains(pvpStatID))
|
||||
{
|
||||
Log.outWarn(LogFilter.Battleground, $"Tried updating PvpStat {pvpStatID} but this stat is not allowed on this map");
|
||||
return;
|
||||
}
|
||||
|
||||
PvpStats[pvpStatID] += value;
|
||||
Player player = Global.ObjAccessor.FindConnectedPlayer(PlayerGuid);
|
||||
if (player != null)
|
||||
player.UpdateCriteria(CriteriaType.TrackedWorldStateUIModified, pvpStatID);
|
||||
}
|
||||
|
||||
public uint GetAttr(byte index)
|
||||
{
|
||||
return PvpStats.LookupByKey(index);
|
||||
}
|
||||
|
||||
public virtual void BuildPvPLogPlayerDataPacket(out PVPMatchStatistics.PVPMatchPlayerStatistics playerData)
|
||||
{
|
||||
playerData = new PVPMatchStatistics.PVPMatchPlayerStatistics();
|
||||
playerData.PlayerGUID = PlayerGuid;
|
||||
playerData.Kills = KillingBlows;
|
||||
playerData.Faction = (byte)TeamId;
|
||||
playerData.Faction = TeamId;
|
||||
if (HonorableKills != 0 || Deaths != 0 || BonusHonor != 0)
|
||||
{
|
||||
PVPMatchStatistics.HonorData playerDataHonor = new();
|
||||
@@ -60,23 +108,33 @@ namespace Game.BattleGrounds
|
||||
|
||||
playerData.DamageDone = DamageDone;
|
||||
playerData.HealingDone = HealingDone;
|
||||
|
||||
if (PreMatchRating != 0)
|
||||
playerData.PreMatchRating = PreMatchRating;
|
||||
|
||||
if (PostMatchRating != PreMatchRating)
|
||||
playerData.RatingChange = (int)(PostMatchRating - PreMatchRating);
|
||||
|
||||
if (PreMatchMMR != 0)
|
||||
playerData.PreMatchMMR = PreMatchMMR;
|
||||
|
||||
if (PostMatchMMR != PreMatchMMR)
|
||||
playerData.MmrChange = (int)(PostMatchMMR - PreMatchMMR);
|
||||
|
||||
foreach (var (pvpStatID, value) in PvpStats)
|
||||
playerData.Stats.Add(new PVPMatchStatistics.PVPMatchPlayerPVPStat((int)pvpStatID, value));
|
||||
}
|
||||
|
||||
public virtual uint GetAttr1() { return 0; }
|
||||
public virtual uint GetAttr2() { return 0; }
|
||||
public virtual uint GetAttr3() { return 0; }
|
||||
public virtual uint GetAttr4() { return 0; }
|
||||
public virtual uint GetAttr5() { return 0; }
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Damage done: {DamageDone}, Healing done: {HealingDone}, Killing blows: {KillingBlows}, PreMatchRating: {PreMatchRating}, PreMatchMMR: {PreMatchMMR}, PostMatchRating: {PostMatchRating}, PostMatchMMR: {PostMatchMMR}";
|
||||
}
|
||||
|
||||
public ObjectGuid PlayerGuid;
|
||||
public int TeamId;
|
||||
|
||||
// Default score, present in every type
|
||||
public uint KillingBlows;
|
||||
public uint Deaths;
|
||||
public uint HonorableKills;
|
||||
public uint BonusHonor;
|
||||
public uint DamageDone;
|
||||
public uint HealingDone;
|
||||
public uint GetKillingBlows() { return KillingBlows; }
|
||||
public uint GetDeaths() { return Deaths; }
|
||||
public uint GetHonorableKills() { return HonorableKills; }
|
||||
public uint GetBonusHonor() { return BonusHonor; }
|
||||
public uint GetDamageDone() { return DamageDone; }
|
||||
public uint GetHealingDone() { return HealingDone; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user