using Cal.DataTable; using ET.EventType; using System; using System.Collections.Generic; using System.Text; namespace ET { public class PlayerDataAwakeSystem: AwakeSystem { public override void Awake(PlayerData self) { self.familyBossKeys = 2; self.questAnswerCard = 1; self.buyEnergyCount = 0; self.currManulEquipMapLayer = 0; self.manulEquipMakeCount = 4; self.personalScord = 0; self.personalPvpCount = 0; self.epicManulMakeCount = 0; self.bossEnergy = 10; self.mapCoinCount = 10; self.petEatCount = 10; self.petActive = 10; self.travelVoucher = 10; self.trialCopyMostLayer = 01_01_01; self.trialAndBossLayer = 01_01_01_01; self.petActionIndexFlag = 00_00_00; self.hasReceiveTrialCopyReword = false; } } public class PlayerDataDestroySystem: DestroySystem { public override void Destroy(PlayerData self) { self.BattleExpSpeed = 1f; self.IdleExpSpeed = 1f; self.buyEnergyCount = 0; self.MainStoryRecordId = 0; self.epicManulMakeCount = 0; self.trialAndBossLayer = 1_01_01_01; self.trialCopyMostLayer = 1_01_01; self.trialLayer = 1_01_01; self.petActionIndexFlag = 00_00_00; self.MarketLeastTime = 0L; self.MarketDiscount = 0f; self.MarketPeriod = 0; self.ForbidExp = false; self.IsBattleIdle = false; self.hasReceiveTrialCopyReword = false; self.LastOnlineTime = 0L; self.OnlineTime = 0; self.OnlineRewardId = 0; self.CharacterPointKV = default; self.SkillPointKV = default; self.hpAutoFullCapatial = default; self.mpAutoFullCapatial = default; self.mainstoryAITime = 0L; self.mainstoryVIPAITime = 0L; } } public static class PlayerDataSystem { public class UpdatePer1DayOfMonthEvent_UpdateData: AEvent { public override async ETTask Run(UpdatePer1DayOfMonth args) { Log.Info("刷新PlayerData"); List list = await DBComponent.Instance.QueryJson("{}"); for (int i = 0; i < list.Count; i++) { try { PlayerData data = list[i]; Unit unit = MapUnitComponent.Instance.Get(data.Id); if ((bool) unit) { PlayerData _data = unit.GetComponent(); if (!_data) { _data = data; unit.RemoveComponent(); unit.AddComponent(data); } data = _data; } InitData(data); await DBComponent.Instance.Save(data); } catch (Exception e) { Log.Error(e); } } await ETTask.CompletedTask; } } public static void InitData(this PlayerData data) { data.familyBossKeys = 2; data.questAnswerCard = 1; data.buyEnergyCount = 0; data.manulEquipMakeCount = 4; data.bossEnergy = 10; data.mapCoinCount = 10; data.trialLayer = 1_01_01; data.trialAndBossLayer = 1_01_01_01; data.petActionIndexFlag = 00_00_00; data.OnlineTime = 0; data.OnlineRewardId = 0; data.petEatCount = 10; data.petActive = 10; data.travelVoucher = 10; data.hasReceiveTrialCopyReword = false; System.DayOfWeek today = DateTime.Now.DayOfWeek; if (today is System.DayOfWeek.Saturday or System.DayOfWeek.Sunday) data.mainstoryAITime += 4 * 60 * 60 * 1000; else data.mainstoryAITime += 2 * 60 * 60 * 1000; } public static bool HasMainstoryAITime(this PlayerData self) { return self.mainstoryAITime >= 2000; } public static bool HasMainstoryVIPAITime(this PlayerData self) { return self.mainstoryVIPAITime >= 2000; } public static void UpdateMinstoryRecord(this PlayerData self, int sceneId) { self.MainStoryRecordId = sceneId; } public static bool CanEnterMianStory(this PlayerData self, int sceneId) { if (sceneId - self.MainStoryRecordId > 1) { return false; } return true; } public static string GetTrialLayer(this PlayerData self, int sceneId, out int mapId) { mapId = 80; List listByLevel = TrialCopyCategory.Instance.GetListByLevel(sceneId); if (listByLevel == null) { return "系统错误"; } switch (sceneId) { case Sys_SceneId.Scene_Challenge: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 0, 2); break; case Sys_SceneId.Scene_Challenge_Middle: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 1, 2); break; case Sys_SceneId.Scene_Challenge_Hard: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 2, 2); break; case Sys_SceneId.Scene_PersonalBoss: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 3, 2); break; } if (mapId >= listByLevel.Count) { return "已通关,明日再来"; } mapId = listByLevel[mapId - 1].MapId; return null; } public static async ETTask UpdateTrialCopy(this PlayerData self, int sceneId) { ChangeMap a; try { List list = TrialCopyCategory.Instance.GetListByLevel(sceneId); UnitScene unitScene2 = self.Parent.GetComponent(); int mapId = 0; bool isError = false; switch (sceneId) { case Sys_SceneId.Scene_Challenge: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 0, 2); mapId++; if (unitScene2.MapId != list[mapId - 2].MapId) { isError = true; Log.Error($"【严重错误】玩家 Id={self.Id} {mapId} {unitScene2.MapId}通过记录增加数大于1 "); mapId = list.Count; } IntFlagHelper.SetFlagValue(ref self.trialAndBossLayer, 0, mapId, 2); if (!isError) { int willMostLayer = self.trialCopyMostLayer; IntFlagHelper.SetFlagValue(ref willMostLayer, 0, mapId, 2); if (willMostLayer > self.trialCopyMostLayer) self.trialCopyMostLayer = willMostLayer; } break; case Sys_SceneId.Scene_Challenge_Middle: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 1, 2); mapId++; if (unitScene2.MapId != list[mapId - 2].MapId) { isError = true; Log.Error($"【严重错误】玩家 Id={self.Id} {mapId} {unitScene2.MapId}通过记录增加数大于1 "); mapId = list.Count; } IntFlagHelper.SetFlagValue(ref self.trialAndBossLayer, 1, mapId, 2); if (!isError) { int willMostLayer = self.trialCopyMostLayer; IntFlagHelper.SetFlagValue(ref willMostLayer, 1, mapId, 2); if (willMostLayer > self.trialCopyMostLayer) self.trialCopyMostLayer = willMostLayer; } break; case Sys_SceneId.Scene_Challenge_Hard: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 2, 2); mapId++; if (unitScene2.MapId != list[mapId - 2].MapId) { isError = true; Log.Error($"【严重错误】玩家 Id={self.Id} {mapId} {unitScene2.MapId}通过记录增加数大于1 "); mapId = list.Count; } IntFlagHelper.SetFlagValue(ref self.trialAndBossLayer, 2, mapId, 2); if (!isError) { int willMostLayer = self.trialCopyMostLayer; IntFlagHelper.SetFlagValue(ref willMostLayer, 2, mapId, 2); if (willMostLayer > self.trialCopyMostLayer) self.trialCopyMostLayer = willMostLayer; } break; case Sys_SceneId.Scene_PersonalBoss: mapId = IntFlagHelper.GetFlag(self.trialAndBossLayer, 3, 2); mapId++; if (unitScene2.MapId != list[mapId - 2].MapId) { isError = true; Log.Error($"【严重错误】玩家 Id={self.Id} {mapId} {unitScene2.MapId}通过记录增加数大于1 "); mapId = list.Count; } IntFlagHelper.SetFlagValue(ref self.trialAndBossLayer, 3, mapId, 2); break; } if (isError || mapId == list.Count) { await Game.EventSystem.Publish(new BackMainCity { unit = self.GetParent(), isForce = true }); } else { EventSystem eventSystem = Game.EventSystem; a = new ChangeMap { unit = self.GetParent(), mapId = unitScene2.MapId + 1 }; await eventSystem.Publish(a); } } catch (Exception e) { Log.Error(e); UnitScene unitScene = self.Parent.GetComponent(); EventSystem eventSystem2 = Game.EventSystem; a = new ChangeMap { unit = self.GetParent(), mapId = unitScene.MapId + 1 }; await eventSystem2.Publish(a); } } public static async ETTask GetAllTrialCopyExp(this PlayerData self) { if (self.hasReceiveTrialCopyReword) return "今日已经领取过了"; int trialAndBossLayerTemp = self.trialAndBossLayer; self.trialAndBossLayer = self.trialCopyMostLayer * 100 + self.trialAndBossLayer % 100; self.hasReceiveTrialCopyReword = true; UnitHelper.SaveComponenet(self).Coroutine(); Unit unit = self.GetParent(); long now = TimeHelper.ClientNow(); if (self.BattleExpSpeed > 1 && self.battleExpSpeedLeastTime < now) { self.BattleExpSpeed = 1; UnitHelper.Save(unit).Coroutine(); } try { int oldLayer = IntFlagHelper.GetFlag(trialAndBossLayerTemp, 0, 2); int layer = IntFlagHelper.GetFlag(self.trialCopyMostLayer, 0, 2); var list = TrialCopyCategory.Instance.GetListByLevel(Sys_SceneId.Scene_Challenge); for (int i = oldLayer; i < layer; i++) { TrialCopy trialCopy = list[i - 1]; using UnOrderMultiMapComponent rewordMapComponent = UnOrderMultiMapComponent.Create(); MonsterBase monsterBase = MonsterBaseCategory.Instance.Get(trialCopy.MonsterId); if (monsterBase == null) { Log.ErrorDetail($"{unit.Id.GetPlayerFormatName()} MonsterId = {trialCopy.MonsterId}"); continue; } await TrialCopyHelper.GetReword(unit, monsterBase, rewordMapComponent.MultiMap); } } catch (Exception e) { Log.Error(e); } try { int oldLayer = IntFlagHelper.GetFlag(trialAndBossLayerTemp, 1, 2); int layer = IntFlagHelper.GetFlag(self.trialCopyMostLayer, 1, 2); var list = TrialCopyCategory.Instance.GetListByLevel(Sys_SceneId.Scene_Challenge_Middle); for (int i = oldLayer; i < layer; i++) { TrialCopy trialCopy = list[i - 1]; using UnOrderMultiMapComponent rewordMapComponent = UnOrderMultiMapComponent.Create(); MonsterBase monsterBase = MonsterBaseCategory.Instance.Get(trialCopy.MonsterId); if (monsterBase == null) { Log.ErrorDetail($"{unit.Id.GetPlayerFormatName()} MonsterId = {trialCopy.MonsterId}"); continue; } await TrialCopyHelper.GetReword(unit, monsterBase, rewordMapComponent.MultiMap); } } catch (Exception e) { Log.Error(e); } try { int oldLayer = IntFlagHelper.GetFlag(trialAndBossLayerTemp, 2, 2); int layer = IntFlagHelper.GetFlag(self.trialCopyMostLayer, 2, 2); var list = TrialCopyCategory.Instance.GetListByLevel(Sys_SceneId.Scene_Challenge_Hard); for (int i = oldLayer; i < layer; i++) { TrialCopy trialCopy = list[i - 1]; using UnOrderMultiMapComponent rewordMapComponent = UnOrderMultiMapComponent.Create(); MonsterBase monsterBase = MonsterBaseCategory.Instance.Get(trialCopy.MonsterId); if (monsterBase == null) { Log.ErrorDetail($"{unit.Id.GetPlayerFormatName()} MonsterId = {trialCopy.MonsterId}"); continue; } await TrialCopyHelper.GetReword(unit, monsterBase, rewordMapComponent.MultiMap); } } catch (Exception e) { Log.Error(e); } return null; } public static int UpdateDrop(this PlayerData self, int id) { try { if (!self.dropDic.TryGetValue(id, out KeyValuePair value)) { SonAdvancedSet sonAdvancedSet = SonAdvancedSetCategory.Instance.Get(id, canError: false); if (sonAdvancedSet == null) { return id; } int value2 = RandomHelper.RandomNumber(sonAdvancedSet.MinAdCount, sonAdvancedSet.MaxAdCount + 1); value = (self.dropDic[id] = KeyValuePair.Create(0, value2)); return id; } value.Deconstruct(out int key, out int value3); key++; if (key >= value3) { self.dropDic.Remove(id); SonAdvancedSet sonAdvancedSet2 = SonAdvancedSetCategory.Instance.Get(id, canError: false); if (sonAdvancedSet2 != null) { id = sonAdvancedSet2.Adsubset; } } else { self.dropDic[id] = KeyValuePair.Create(key, value3); } UnitHelper.SaveComponenet(self).Coroutine(); } catch (Exception e) { Log.Error(e); } return id; } public static bool UpdateEpicManulCount(this PlayerData self) { if (self.epicManulMakeCount == 0) { GenerateEpicManulCount(self); } self.epicManulMakeCount--; if (self.epicManulMakeCount <= 0) { GenerateEpicManulCount(self); return true; } return false; } public static void GenerateEpicManulCount(this PlayerData self) { self.epicManulMakeCount = ConstDefine.EpicMaxManulCountArr.RandomArray_Len2(); } public static void UpdateOnlineTime(this PlayerData self, long now) { self.OnlineTime += 60000; self.GetOnlineReward(now).Coroutine(); } private static async ETVoid GetOnlineReward(this PlayerData self, long now) { int id = OnlineRewardComponent.instance.GetRewardTime(TimeSpan.FromMilliseconds(self.OnlineTime)); if (id == 0) { Log.Error("id == 0 when get the reward of onlineTime"); } else if (id > self.OnlineRewardId) { self.OnlineRewardId = id; OnlineRewardBase onlineRewardBase = DataTableHelper.Get(id); Unit unit = self.GetParent(); for (int i = onlineRewardBase.OnlineRewardsArr.Length - 1; i >= 0; i--) { OnlineRewardBase.OnlineRewards reward = onlineRewardBase.OnlineRewardsArr[i]; Mail mail = new() { Id = Game.IdGenerater.GenerateId(), Content = "在线拿大奖咯!", RemainTime = now + (long) TimeSpan.FromDays(1.0).TotalMilliseconds, SenderName = "系统", State = MailState.UnReceive, Title = "在线奖励" }; mail.RewordArr.Add(new MailItem { ItemId = reward.OnlineRewards_Id, Count = reward.OnlineRewards_Count, IsHasItem = false, IsLock = true }); await MailComponent.Instance.AddMail(unit.Id, mail); } } } } }