CTT/Server/Hotfix/Module/Numeric/NumericWatcher_Level.cs

51 lines
2.0 KiB
C#
Raw Normal View History

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-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;
UserComponent.Instance.Save(user).Coroutine();
//!属性变化
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;
}
}
}