namespace ET { /// /// 监视hp数值变化,改变血条值 /// [NumericWatcher(NumericType.Level)] public class NumericWatcher_Level : INumericWatcher { public async ETTask Run(Entity entity, float old, float value) { if (!entity) return; Unit unit = entity.As(); if (unit.UnitType != UnitType.Player) return; int oldLevel = MathHelper.RoundToInt(old); int level = MathHelper.RoundToInt(value); if (oldLevel == level) return; NumericComponent num = unit.GetComponent(); //!账户信息变化 User user = await UserComponent.Instance.Query(unit.Id); user.Level = level; UserComponent.Instance.Save(user).Coroutine(); //!属性变化 PlayerData data = unit.GetComponent(); CharacterHelper.AddAutoCharacterPoint(num, data, oldLevel, level); CharacterHelper.AddSkillPoint(data, level); //!任务 await Game.EventSystem.Publish(new EventType.UpdateTaskState { unit = unit, type = TaskTargetType.LevelTask, value = level }); DelaySendSyncAttributeComponent.instance.Add(unit, NumericType.Level, value); LevelLog levelLog = await DBComponent.Instance.Query(unit.Id); if (levelLog == null) { levelLog = Entity.Create(typeof(LevelLog), false).As(); levelLog.Id = unit.Id; levelLog.levelList = new System.Collections.Generic.LinkedList(); } levelLog.levelList.AddLast(MathHelper.RoundToInt(value)); if (levelLog.levelList.Count > 20) { levelLog.levelList.RemoveFirst(); } await DBComponent.Instance.Save(levelLog); await ETTask.CompletedTask; } } }