CTT/Server/Hotfix/Game/Event/UpdatePer1MinuteEvent.cs

110 lines
4.0 KiB
C#
Executable File

using Cal.DataTable;
using ET.EventType;
using System;
using System.Collections.Generic;
using System.Linq;
namespace ET
{
public class UnitOnlineTimeEvent : AEvent<EventType.UpdatePer1MinuteOfDay>
{
public override async ETTask Run(UpdatePer1MinuteOfDay args)
{
long now = args.now;
foreach (Unit unit in MapUnitComponent.Instance.GetAll())
{
try
{
if (!unit) continue;
if (unit.UnitType != UnitType.Player)
continue;
if (unit.IsOffline)
{
if(AppConfig.inst.isTest)
Log.Warning($"离线:{unit.Id.GetPlayerFormatName()}");
continue;
}
PlayerData data = unit.GetComponent<PlayerData>();
if (!data)
{
Log.Error($"data is invalid isNull = {data == null}");
continue;
}
data.UpdateOnlineTime(now);
UnitScene unitScene = unit.GetComponent<UnitScene>();
if (unitScene == null) continue;
if (unitScene.MapId/100 == Sys_SceneId.Scene_MainCity)
{
int maxSceneId = data.MainStoryRecordId;
if (maxSceneId > Sys_SceneId.Scene_MainStory16)
maxSceneId = Sys_SceneId.Scene_MainStory16;
MainStoryExp mainStoryExp = MainStoryExpCategory.Instance.Get(maxSceneId);
CharacterHelper.AddExp(unit, MathHelper.RoundToLong(mainStoryExp.Exp/10f));
}
TimeSpan time = TimeSpan.FromMilliseconds(data.OnlineTime);
}
catch (Exception e)
{
Log.Error(e);
}
}
await ETTask.CompletedTask;
}
}
public class UnitSaveEvent : AEvent<EventType.UpdatePer1MinuteOfDay>
{
public override async ETTask Run(UpdatePer1MinuteOfDay args)
{
long now = args.now;
//!dTime =59s
//long dTime = TimeSpan.TicksPerMinute / 10000 - 1000;
Unit[] arr = MapUnitComponent.Instance.GetAll().ToArray();
for (int i = 0; i < arr.Length; i++)
{
try
{
Unit unit = arr[i];
if (!unit) continue;
if (unit.UnitType != UnitType.Player)
continue;
Team team = TeamComponent.Instance.Get(unit.Id);
if (team?.TeamState != TeamState.Fight)
{
UnitHelper.Save<PlayerData>(unit);
UnitHelper.Save<NumericComponent>(unit);
UnitHelper.Save<Character>(unit);
UnitHelper.Save<Bag>(unit);
UnitHelper.Save<StarSoulBag>(unit);
UnitHelper.Save<UnitTask>(unit);
UnitHelper.Save<UnitScene>(unit);
UnitHelper.Save<UserSetting>(unit);
UnitHelper.Save<UnitSkillComponent>(unit);
UnitHelper.Save<Pet>(unit);
}
}
catch (Exception e)
{
Log.Error(e);
}
}
User[] userArr = UserComponent.Instance.GetAll().ToArray();
for (int i = 0; i < userArr.Length; i++)
{
try
{
User user = userArr[i];
UserComponent.Instance.Save(user);
}
catch (Exception e)
{
Log.Error(e);
}
}
await ETTask.CompletedTask;
}
}
}