using System; using System.Collections.Generic; using System.Linq; using Cal.DataTable; namespace ET; static class CDKComponentSystem { class CDKComponentAwakeSystem: AwakeSystem { public override void Awake(CDKComponent self) { self.Awake(); } } class CDKComponentLoadSystem: LoadSystem { public override void Load(CDKComponent self) { self.Load(); } } private static void Awake(this CDKComponent self) { self.Id = 0; self.Load(); } private static void Load(this CDKComponent self) { self.LoadAsync().Coroutine(); } private static async ETVoid LoadAsync(this CDKComponent self) { using CDKComponent cdkInDatabase = await UnitHelper.Query(self.DomainZone(), 0); Dictionary toAddDictionary = null; HashSet gotList = null; if (cdkInDatabase != null) { toAddDictionary = cdkInDatabase.nameList; gotList = cdkInDatabase.gotList; } var cdkConfigs = DataTableHelper.GetAll().ToArray(); self.nameList.Clear(); if (toAddDictionary != null) { foreach (var keyValuePair in toAddDictionary) { self.nameList.Add(keyValuePair.Key, keyValuePair.Value); } } foreach (CdkConfig cdkConfig in cdkConfigs) { if ( gotList!=null && gotList.Contains(cdkConfig.Cdk)) { continue; } bool add = self.nameList.TryAdd(cdkConfig.Cdk, cdkConfig.Id); if (!add) { Log.Error($"config's cdk is already in set where id is {cdkConfig.Id}"); self.nameList.Clear(); return; } } self.Save(); } private static void Save(this CDKComponent self) { UnitHelper.SaveComponenet(self.DomainZone(), self); } public static async ETTask GetCDKReward(this CDKComponent self, Unit unit, string cdk) { if (string.IsNullOrWhiteSpace(cdk)) { return "cdk 为空"; } if (!self.nameList.TryGetValue(cdk, out var id)) { return "cdk 无效"; } CdkConfig cdkConfig = DataTableHelper.Get(id); if (cdkConfig == null) { return "cdk 系统错误"; } try { foreach (CdkConfig.Reward reward in cdkConfig.RewardArr) { await MailHelper.AddItem(unit.Id, reward._Id, reward.Count, true, getSource: "CDK获取", "GM邮件", "CDK获取的物品。", "CDK"); } } catch (Exception e) { Log.Error(e); return "cdk 获取物品错误"; } self.nameList.Remove(cdk); self.gotList.Add(cdk); self.Save(); return "获取物品成功"; } }