internal void SetPlayerClass(string player, SpellClass theClass, double currentTime) { if (!PlayerToClass.TryGetValue(player, out SpellClassCounter counter)) { lock (PlayerToClass) { counter = new SpellClassCounter { ClassCounts = new Dictionary <SpellClass, long>() }; PlayerToClass.TryAdd(player, counter); AddVerifiedPlayer(player, currentTime); } } lock (counter) { if (!theClass.Equals(counter.CurrentClass) && counter.CurrentMax != 1000000) { counter.CurrentClass = theClass; counter.ClassCounts[theClass] = 1000000; counter.CurrentMax = 1000000; LOG.Debug("Assigning " + player + " as " + theClass.ToString() + " from class specific action"); } } }
internal void UpdatePlayerClassFromSpell(SpellCast cast, SpellClass theClass, double currentTime) { if (!PlayerToClass.TryGetValue(cast.Caster, out SpellClassCounter counter)) { lock (PlayerToClass) { counter = new SpellClassCounter { ClassCounts = new Dictionary <SpellClass, long>() }; PlayerToClass.TryAdd(cast.Caster, counter); } } lock (counter) { long newValue = 1; if (cast.SpellData.Rank > 1) { newValue = 10; AddVerifiedPlayer(cast.Caster, currentTime); } if (counter.ClassCounts.TryGetValue(theClass, out long value)) { newValue += value; } counter.ClassCounts[theClass] = newValue; if (newValue > counter.CurrentMax) { counter.CurrentMax = newValue; if (!theClass.Equals(counter.CurrentClass)) { if (LOG.IsDebugEnabled) { LOG.Debug("Assigning " + cast.Caster + " as " + theClass.ToString() + " from " + cast.Spell); } } counter.CurrentClass = theClass; } } }