Core/Achievements: Minor fixes
Port From (https://github.com/TrinityCore/TrinityCore/commit/3e833739071a689dc34e33f7a511d8cc50e00b94)
This commit is contained in:
@@ -296,6 +296,7 @@ namespace Game.Achievements
|
||||
CriteriaProgress progress = new CriteriaProgress();
|
||||
progress.Counter = counter;
|
||||
progress.Date = date;
|
||||
progress.PlayerGUID = _owner.GetGUID();
|
||||
progress.Changed = false;
|
||||
|
||||
_criteriaProgress[id] = progress;
|
||||
@@ -391,6 +392,7 @@ namespace Game.Achievements
|
||||
|
||||
public override void SendAllData(Player receiver)
|
||||
{
|
||||
AllAccountCriteria allAccountCriteria = new AllAccountCriteria();
|
||||
AllAchievementData achievementData = new AllAchievementData();
|
||||
|
||||
foreach (var pair in _completedAchievements)
|
||||
@@ -412,6 +414,8 @@ namespace Game.Achievements
|
||||
|
||||
foreach (var pair in _criteriaProgress)
|
||||
{
|
||||
Criteria criteria = Global.CriteriaMgr.GetCriteria(pair.Key);
|
||||
|
||||
CriteriaProgressPkt progress = new CriteriaProgressPkt();
|
||||
progress.Id = pair.Key;
|
||||
progress.Quantity = pair.Value.Counter;
|
||||
@@ -421,8 +425,24 @@ namespace Game.Achievements
|
||||
progress.TimeFromStart = 0;
|
||||
progress.TimeFromCreate = 0;
|
||||
achievementData.Data.Progress.Add(progress);
|
||||
|
||||
if (criteria.FlagsCu.HasAnyFlag(CriteriaFlagsCu.Account))
|
||||
{
|
||||
CriteriaProgressPkt accountProgress = new CriteriaProgressPkt();
|
||||
accountProgress.Id = pair.Key;
|
||||
accountProgress.Quantity = pair.Value.Counter;
|
||||
accountProgress.Player = _owner.GetSession().GetBattlenetAccountGUID();
|
||||
accountProgress.Flags = 0;
|
||||
accountProgress.Date = pair.Value.Date;
|
||||
accountProgress.TimeFromStart = 0;
|
||||
accountProgress.TimeFromCreate = 0;
|
||||
allAccountCriteria.Progress.Add(accountProgress);
|
||||
}
|
||||
}
|
||||
|
||||
if (!allAccountCriteria.Progress.Empty())
|
||||
SendPacket(allAccountCriteria);
|
||||
|
||||
SendPacket(achievementData);
|
||||
}
|
||||
|
||||
@@ -576,20 +596,38 @@ namespace Game.Achievements
|
||||
|
||||
public override void SendCriteriaUpdate(Criteria criteria, CriteriaProgress progress, uint timeElapsed, bool timedCompleted)
|
||||
{
|
||||
CriteriaUpdate criteriaUpdate = new CriteriaUpdate();
|
||||
if (criteria.FlagsCu.HasAnyFlag(CriteriaFlagsCu.Account))
|
||||
{
|
||||
AccountCriteriaUpdate criteriaUpdate = new AccountCriteriaUpdate();
|
||||
criteriaUpdate.Progress.Id = criteria.Id;
|
||||
criteriaUpdate.Progress.Quantity = progress.Counter;
|
||||
criteriaUpdate.Progress.Player = _owner.GetSession().GetBattlenetAccountGUID();
|
||||
criteriaUpdate.Progress.Flags = 0;
|
||||
if (criteria.Entry.StartTimer != 0)
|
||||
criteriaUpdate.Progress.Flags = timedCompleted ? 1 : 0u; // 1 is for keeping the counter at 0 in client
|
||||
|
||||
criteriaUpdate.CriteriaID = criteria.Id;
|
||||
criteriaUpdate.Quantity = progress.Counter;
|
||||
criteriaUpdate.PlayerGUID = _owner.GetGUID();
|
||||
criteriaUpdate.Flags = 0;
|
||||
if (criteria.Entry.StartTimer != 0)
|
||||
criteriaUpdate.Flags = timedCompleted ? 1 : 0u; // 1 is for keeping the counter at 0 in client
|
||||
criteriaUpdate.Progress.Date = progress.Date;
|
||||
criteriaUpdate.Progress.TimeFromStart = timeElapsed;
|
||||
criteriaUpdate.Progress.TimeFromCreate = 0;
|
||||
SendPacket(criteriaUpdate);
|
||||
}
|
||||
else
|
||||
{
|
||||
CriteriaUpdate criteriaUpdate = new CriteriaUpdate();
|
||||
|
||||
criteriaUpdate.CurrentTime = progress.Date;
|
||||
criteriaUpdate.ElapsedTime = timeElapsed;
|
||||
criteriaUpdate.CreationTime = 0;
|
||||
criteriaUpdate.CriteriaID = criteria.Id;
|
||||
criteriaUpdate.Quantity = progress.Counter;
|
||||
criteriaUpdate.PlayerGUID = _owner.GetGUID();
|
||||
criteriaUpdate.Flags = 0;
|
||||
if (criteria.Entry.StartTimer != 0)
|
||||
criteriaUpdate.Flags = timedCompleted ? 1 : 0u; // 1 is for keeping the counter at 0 in client
|
||||
|
||||
SendPacket(criteriaUpdate);
|
||||
criteriaUpdate.CurrentTime = progress.Date;
|
||||
criteriaUpdate.ElapsedTime = timeElapsed;
|
||||
criteriaUpdate.CreationTime = 0;
|
||||
|
||||
SendPacket(criteriaUpdate);
|
||||
}
|
||||
}
|
||||
|
||||
public override void SendCriteriaProgressRemoved(uint criteriaId)
|
||||
|
||||
@@ -1596,6 +1596,7 @@ namespace Game.Achievements
|
||||
return false;
|
||||
break;
|
||||
case CriteriaAdditionalCondition.HasAchievement: // 86
|
||||
case CriteriaAdditionalCondition.HasAchievementOnCharacter: // 87
|
||||
if (!referencePlayer.HasAchieved(reqValue))
|
||||
return false;
|
||||
break;
|
||||
@@ -2498,12 +2499,9 @@ namespace Game.Achievements
|
||||
// Build tree
|
||||
foreach (var treeNode in _criteriaModifiers.Values)
|
||||
{
|
||||
if (treeNode.Entry.Parent == 0)
|
||||
continue;
|
||||
|
||||
var parent = _criteriaModifiers.LookupByKey(treeNode.Entry.Parent);
|
||||
if (parent != null)
|
||||
parent.Children.Add(treeNode);
|
||||
ModifierTreeNode parentNode = _criteriaModifiers.LookupByKey(treeNode.Entry.Parent);
|
||||
if (parentNode != null)
|
||||
parentNode.Children.Add(treeNode);
|
||||
}
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} criteria modifiers in {1} ms", _criteriaModifiers.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
@@ -2535,12 +2533,6 @@ namespace Game.Achievements
|
||||
{
|
||||
uint oldMSTime = Time.GetMSTime();
|
||||
|
||||
if (CliDB.CriteriaTreeStorage.Empty())
|
||||
{
|
||||
Log.outError(LogFilter.ServerLoading, "Loaded 0 criteria.");
|
||||
return;
|
||||
}
|
||||
|
||||
Dictionary<uint /*criteriaTreeID*/, AchievementRecord> achievementCriteriaTreeIds = new Dictionary<uint, AchievementRecord>();
|
||||
foreach (AchievementRecord achievement in CliDB.AchievementStorage.Values)
|
||||
if (achievement.CriteriaTree != 0)
|
||||
@@ -2589,25 +2581,11 @@ namespace Game.Achievements
|
||||
// Build tree
|
||||
foreach (var pair in _criteriaTrees)
|
||||
{
|
||||
if (pair.Value.Entry.Parent == 0)
|
||||
continue;
|
||||
|
||||
var parent = _criteriaTrees.LookupByKey(pair.Value.Entry.Parent);
|
||||
CriteriaTree parent = _criteriaTrees.LookupByKey(pair.Value.Entry.Parent);
|
||||
if (parent != null)
|
||||
{
|
||||
parent.Children.Add(pair.Value);
|
||||
while (parent != null)
|
||||
{
|
||||
var cur = parent;
|
||||
parent = _criteriaTrees.LookupByKey(parent.Entry.Parent);
|
||||
if (parent == null)
|
||||
{
|
||||
if (CliDB.CriteriaStorage.ContainsKey(pair.Value.Entry.CriteriaID))
|
||||
_criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (CliDB.CriteriaStorage.ContainsKey(pair.Value.Entry.CriteriaID))
|
||||
|
||||
if (CliDB.CriteriaStorage.HasRecord(pair.Value.Entry.CriteriaID))
|
||||
_criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, pair.Value);
|
||||
}
|
||||
|
||||
@@ -2633,14 +2611,14 @@ namespace Game.Achievements
|
||||
Criteria criteria = new Criteria();
|
||||
criteria.Id = criteriaEntry.Id;
|
||||
criteria.Entry = criteriaEntry;
|
||||
var mod = _criteriaModifiers.LookupByKey(criteriaEntry.ModifierTreeId);
|
||||
if (mod != null)
|
||||
criteria.Modifier = mod;
|
||||
criteria.Modifier = _criteriaModifiers.LookupByKey(criteriaEntry.ModifierTreeId);
|
||||
|
||||
_criteria[criteria.Id] = criteria;
|
||||
|
||||
foreach (CriteriaTree tree in treeList)
|
||||
{
|
||||
tree.Criteria = criteria;
|
||||
|
||||
AchievementRecord achievement = tree.Achievement;
|
||||
if (achievement != null)
|
||||
{
|
||||
@@ -2688,9 +2666,6 @@ namespace Game.Achievements
|
||||
_criteriasByFailEvent[criteriaEntry.FailEvent].Add((int)criteriaEntry.FailAsset, criteria);
|
||||
}
|
||||
|
||||
foreach (var p in _criteriaTrees)
|
||||
p.Value.Criteria = GetCriteria(p.Value.Entry.CriteriaID);
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, $"Loaded {criterias} criteria, {guildCriterias} guild criteria, {scenarioCriterias} scenario criteria and {questObjectiveCriterias} quest objective criteria in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,20 @@ namespace Game.Network.Packets
|
||||
public AllAchievements Data = new AllAchievements();
|
||||
}
|
||||
|
||||
class AllAccountCriteria : ServerPacket
|
||||
{
|
||||
public AllAccountCriteria() : base(ServerOpcodes.AllAccountCriteria, ConnectionType.Instance) { }
|
||||
|
||||
public override void Write()
|
||||
{
|
||||
_worldPacket.WriteInt32(Progress.Count);
|
||||
foreach (var progress in Progress)
|
||||
progress.Write(_worldPacket);
|
||||
}
|
||||
|
||||
public List<CriteriaProgressPkt> Progress = new List<CriteriaProgressPkt>();
|
||||
}
|
||||
|
||||
public class RespondInspectAchievements : ServerPacket
|
||||
{
|
||||
public RespondInspectAchievements() : base(ServerOpcodes.RespondInspectAchievements, ConnectionType.Instance) { }
|
||||
@@ -62,6 +76,11 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WritePackedTime(CurrentTime);
|
||||
_worldPacket.WriteUInt32(ElapsedTime);
|
||||
_worldPacket.WriteUInt32(CreationTime);
|
||||
_worldPacket.WriteBit(RafAcceptanceID.HasValue);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
if (RafAcceptanceID.HasValue)
|
||||
_worldPacket.WriteUInt64(RafAcceptanceID.Value);
|
||||
}
|
||||
|
||||
public uint CriteriaID;
|
||||
@@ -71,8 +90,21 @@ namespace Game.Network.Packets
|
||||
public long CurrentTime;
|
||||
public uint ElapsedTime;
|
||||
public uint CreationTime;
|
||||
public Optional<ulong> RafAcceptanceID;
|
||||
}
|
||||
|
||||
class AccountCriteriaUpdate : ServerPacket
|
||||
{
|
||||
public AccountCriteriaUpdate() : base(ServerOpcodes.AccountCriteriaUpdate) { }
|
||||
|
||||
public override void Write()
|
||||
{
|
||||
Progress.Write(_worldPacket);
|
||||
}
|
||||
|
||||
public CriteriaProgressPkt Progress;
|
||||
}
|
||||
|
||||
public class CriteriaDeleted : ServerPacket
|
||||
{
|
||||
public CriteriaDeleted() : base(ServerOpcodes.CriteriaDeleted, ConnectionType.Instance) { }
|
||||
|
||||
Reference in New Issue
Block a user