2021-04-08 20:09:59 +08:00
|
|
|
|
namespace ET
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 监视hp数值变化,改变血条值
|
|
|
|
|
/// </summary>
|
|
|
|
|
[NumericWatcher(NumericType.Level)]
|
|
|
|
|
public class NumericWatcher_Level : INumericWatcher
|
|
|
|
|
{
|
|
|
|
|
public async ETTask Run(Entity entity, float old, float value)
|
|
|
|
|
{
|
2021-04-18 15:54:51 +08:00
|
|
|
|
if (!entity) return;
|
2021-04-11 19:50:39 +08:00
|
|
|
|
Unit unit = entity.As<Unit>();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
if (unit.UnitType != UnitType.Player) return;
|
|
|
|
|
int oldLevel = MathHelper.RoundToInt(old);
|
|
|
|
|
int level = MathHelper.RoundToInt(value);
|
|
|
|
|
if (oldLevel == level) return;
|
2021-04-11 19:50:39 +08:00
|
|
|
|
NumericComponent num = unit.GetComponent<NumericComponent>();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
//!账户信息变化
|
|
|
|
|
User user = await UserComponent.Instance.Query(unit.Id);
|
|
|
|
|
user.Level = level;
|
2021-06-29 11:28:15 +08:00
|
|
|
|
UserComponent.Instance.Save(user);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
//!属性变化
|
2021-04-11 19:50:39 +08:00
|
|
|
|
PlayerData data = unit.GetComponent<PlayerData>();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
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<LevelLog>(unit.Id);
|
|
|
|
|
if (levelLog == null)
|
|
|
|
|
{
|
|
|
|
|
levelLog = Entity.Create(typeof(LevelLog), false).As<LevelLog>();
|
|
|
|
|
levelLog.Id = unit.Id;
|
|
|
|
|
levelLog.levelList = new System.Collections.Generic.LinkedList<int>();
|
|
|
|
|
}
|
|
|
|
|
levelLog.levelList.AddLast(MathHelper.RoundToInt(value));
|
|
|
|
|
if (levelLog.levelList.Count > 20)
|
|
|
|
|
{
|
|
|
|
|
levelLog.levelList.RemoveFirst();
|
|
|
|
|
}
|
|
|
|
|
await DBComponent.Instance.Save(levelLog);
|
|
|
|
|
await ETTask.CompletedTask;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|