using Cal.DataTable; using ET.EventType; using ET; using FairyGUI; using System; using System.Collections.Generic; using UnityEngine; using System.Linq; using System.Text; using Sirenix.Utilities; namespace ET { public class GMUIAwakeSyatem: AwakeSystem { public override void Awake(GMUI self) { self.Awake(); } } public class GMUIDestroySyatem: DestroySystem { public override void Destroy(GMUI self) { self.Destroy(); } } public class GMUI: Entity { public FUI_GMUI ui; private Dictionary dic; private bool canSend; private GMConfig gMConfig; private ItemType itemType; private bool isSearchUid; private StringBuilder sb; private Scene zoneScene; private List _needClearIndex = new List(); private DoubleDictionary ItemDic { get; }= new DoubleDictionary(); private long userId; private int delIndex=-1; public void Awake() { sb = new StringBuilder(); canSend = false; isSearchUid = false; AwakeAsync().Coroutine(); } private async ETVoid AwakeAsync() { zoneScene = this.ZoneScene(); ui = GetParent(); ui.m_comType.self.selectedIndex = 0; Register(); Load(); await ETTask.CompletedTask; } private void Register() { ui.m_inpUid.onSubmit.Set(() => { GetCharacter().Coroutine(); }); ui.m_btnUid.self.onClick.Set(() => { GetCharacter().Coroutine(); }); ui.m_comType.self.onChanged.Set(Load); ui.m_comOp.self.onChanged.Set(() => { ShowOptionExampleText(ui.m_comOp.self.value); }); //发送 ui.m_btnSend.self.onClick.Set(async () => { if (!ui.m_inpCmd.text.IsNullOrEmpty()) { M2C_SendGMCMD ret_ = await zoneScene.GetComponent() .Call(new C2M_SendGMCMD { cmd = ui.m_inpCmd.text }); if (!ret_.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret_.Message); return; } return; } if (!canSend) return; if (gMConfig == null) return; if (gMConfig.ParamCount == 1) { if (ui.m_inpParam1.text.IsNullOrEmpty()) return; } else if (gMConfig.ParamCount == 2) { if (ui.m_inpParam1.text.IsNullOrEmpty()) return; if (ui.m_inpParam2.text.IsNullOrEmpty()) return; } string cmd = null; if (ui.m_comType.self.value == "othercmd") { cmd = $"othercmd/{ui.m_inpUid.text}/{ui.m_comOp.self.value}/{ui.m_inpParam1.text}/{ui.m_inpParam2.text}"; } else { cmd = $"cmd/{ui.m_comOp.self.value}/{ui.m_inpParam1.text}/{ui.m_inpParam2.text}"; } canSend = false; M2C_SendGMCMD ret = await zoneScene.GetComponent().Call(new C2M_SendGMCMD { cmd = cmd }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } }); ui.m_btnCheck.self.onClick.Set(() => { ShowResult(); }); ui.m_comItemType.self.onChanged.Set(() => { if (int.TryParse(ui.m_comItemType.self.value, out int index)) { if (index == 4) { isSearchUid = true; return; } isSearchUid = false; itemType = (ItemType) index; } }); ui.m_btnSearch.self.onClick.Set(async () => { if (ui.m_inpSearch.text.IsNullOrEmpty()) return; String itemName = ui.m_inpSearch.text; sb.Clear(); if (isSearchUid) { var ret = await this.zoneScene.GetComponent() .Call(new C2M_GetUIDByName() { name = itemName }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } foreach (KV_string_int32 kv in ret.map) { sb.Append($"{kv.key} {kv.value}\n"); } ui.m_inpSearchRet.text = this.sb.ToString(); return; } switch (itemType) { case ItemType.NoneItem: break; case ItemType.EquipItem: foreach (EquipBase item in EquipBaseCategory.Instance.GetByName(itemName)) { sb.Append($"{item.Name} {item.Id}\n"); } ui.m_inpSearchRet.text = sb.ToString(); break; case ItemType.GoodsItem: foreach (GoodsBase item in GoodsBaseCategory.Instance.GetByName(itemName)) { sb.Append($"{item.Name} {item.Id}\n"); } ui.m_inpSearchRet.text = sb.ToString(); break; case ItemType.MaterialsItem: foreach (MaterialBase item in MaterialBaseCategory.Instance.GetByName(itemName)) { sb.Append($"{item.Name} {item.Id}\n"); } ui.m_inpSearchRet.text = sb.ToString(); break; default: break; } }); GetOtherBagEvent(); } private void GetOtherBagEvent() { this.ui.m_btnDel.self.onClick.Set(async() => { if (this.userId == 0 || this.delIndex == -1) { return; } M2C_GMDelOtherUserBag ret = await zoneScene.GetComponent() .Call(new C2M_GMDelOtherUserBag() { userId = userId ,index = this.delIndex}); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } }); this.ui.m_btnCheckBag.self.onClick.Set(async () => { if (!long.TryParse(ui.m_inpUid.text, out userId)) { return; } M2C_GetOtherUserBag ret = await zoneScene.GetComponent() .Call(new C2M_GetOtherUserBag() { userId = userId }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } UpdateBagSlot(ret.BagMapList); }); for (int i = 0; i < this.ui.m_listBag.numItems; i++) { GButton btn = this.ui.m_listBag.GetChildAt(i).asButton; int temp = i; TabHelper.SetTab(btn,() => { if (ItemDic.TryGetValueByKey1(temp, out ClientItemData data)) { TabHelper.OpenUI(zoneScene,data); } }); btn.onClick.Set(() => { if (ItemDic.TryGetValueByKey1(temp, out ClientItemData data)) { this.ui.m_txtBagItemInfo.text = $"{BagHelper.GetIconName(data.ItemId).Item1}"; this.delIndex = temp; } else { this.ui.m_txtBagItemInfo.text = null; this.delIndex = -1; } }); } } private void UpdateBagSlot(List retBagMapList) { int totalCount = ui.m_listBag.numItems; _needClearIndex.Clear(); for (int i = 0; i < totalCount; i++) { _needClearIndex.Add(i); } var bagMapList = retBagMapList; if (bagMapList != null) { foreach (BagMap bagMap in bagMapList) { int index = bagMap.Index; _needClearIndex.Remove(index); NetItem item = bagMap.NetItem; //!添加数据 var bagDic = ItemDic; if (!bagDic.TryGetValueByKey1(index, out ClientItemData data)) { data = EntityFactory.CreateWithParent(this.ui.Domain); } else { bagDic.Remove(index, data.ItemId, data); } //!更新物品Id bagDic.Add(index, item.ItemId, data); data.ItemId = item.ItemId; data.ItemType = item.ItemType; data.Count = item.Count; data.IsLock = item.IsLock; data.getSource = item.GetSource; if (data.ItemType == ItemType.EquipItem) { //!装备赋值 if (bagMap.EquipTransMessage == null) { data.Equip = new Equip { EquipId = data.ItemId }; } else data.Equip = new Equip(bagMap.EquipTransMessage); } } } foreach (var kp in ItemDic) { int index = kp.Key.Key; GButton btn = ui.m_listBag.GetChildAt(index).asButton; ClientItemData data = kp.Value; //!显示 switch (data.ItemType) { default: btn.icon = null; btn.title = null; break; case ItemType.EquipItem: EquipBase equipBase = DataTableHelper.Get(data.ItemId); btn.icon = UIPackage.GetItemURL(FUIPackage.Bag, equipBase.IconName); btn.title = data.Count.ToString(); break; case ItemType.GoodsItem: GoodsBase goodsBase = DataTableHelper.Get(data.ItemId); btn.icon = UIPackage.GetItemURL(FUIPackage.Bag, goodsBase.IconName); btn.title = data.Count.ToString(); break; case ItemType.MaterialsItem: MaterialBase materialBase = DataTableHelper.Get(data.ItemId); btn.icon = UIPackage.GetItemURL(FUIPackage.Bag, materialBase.IconName); btn.title = data.Count.ToString(); break; } } //!对后面的格子进行处理 foreach (int index in _needClearIndex) { //!数据 var bagDic = ItemDic; if (!bagDic.TryGetValueByKey1(index, out ClientItemData data)) { data = EntityFactory.CreateWithParent(this.ui.Domain); } else { bagDic.Remove(index, data.ItemId, data); } bagDic.Add(index, 0, data); data.ItemType = ItemType.NoneItem; data.ItemId = 0; //!显示 GButton realbtn = ui.m_listBag.GetChildAt(index).asButton; realbtn.icon = null; realbtn.title = null; } } private void Load() { dic = GMConfigCategory.Instance.configByTypeDic[ui.m_comType.self.value]; string[] arr = dic.Keys.ToArray(); ui.m_comOp.self.values = arr; for (int i = 0; i < arr.Length; i++) { string item = arr[i]; long id = dic[item]; GMConfig gMConfig = GMConfigCategory.Instance.Get(id); arr[i] = gMConfig.Name; } ui.m_comOp.self.items = arr; ShowOptionExampleText(ui.m_comOp.self.value); } private void ShowResult() { if (gMConfig == null) return; canSend = true; string ret = gMConfig.Result; switch (ui.m_comOp.self.value) { default: break; case "sys": ret = ret.Replace("{1}", ui.m_inpParam1.text); break; case "addItem": { if (!int.TryParse(ui.m_inpParam1.text, out int itemId)) return; if (!int.TryParse(ui.m_inpParam2.text, out int count)) return; ret = ret.Replace("{1}", BagHelper.GetIconName(itemId).Item1); ret = ret.Replace("{2}", count.ToString()); } break; case "addLevel": ret = ret.Replace("{1}", ui.m_inpParam1.text); break; case "addAllItem": { if (!int.TryParse(ui.m_inpParam1.text, out int itemId)) return; if (!int.TryParse(ui.m_inpParam2.text, out int count)) return; ret = ret.Replace("{1}", BagHelper.GetIconName(itemId).Item1); ret = ret.Replace("{2}", count.ToString()); } break; case "modifyPwd": { ret = ret.Replace("{1}", ui.m_inpParam1.text); ret = ret.Replace("{2}", ui.m_inpParam2.text); } break; case "TransLevel": ret.Replace("{1}", ui.m_inpParam1.text); break; case "passLevel": { if (!int.TryParse(ui.m_inpParam1.text, out int mapId)) return; int sceneId = mapId / 100; Sys_Scene sys_Scene = Sys_SceneCategory.Instance.Get(sceneId); if (sys_Scene == null) return; int layer = mapId % 100; if (layer > sys_Scene.Layers) return; ret = ret.Replace("{1}", sceneId.ToString()); ret = ret.Replace("{2}", layer.ToString()); } break; case "transJob": if (int.TryParse(ui.m_inpParam1.text, out int job)) { ret = ret.Replace("{1}", TabHelper.GetStrJob(job)); } break; } if (ui.m_comType.self.value == "othercmd") { ret = "发给玩家:\n" + ui.m_txtInfo.text + "\n\n" + ret; } ui.m_txtResult.text = ret; } private async ETVoid GetCharacter() { if (!int.TryParse(ui.m_inpUid.text, out int id)) { return; } M2C_GetUserInfo ret = await zoneScene.GetComponent().Call(new C2M_GetUserInfo { Id = id }); if (!ret.Message.IsNullOrEmpty()) { TipHelper.OpenUI(ret.Message); return; } ui.m_txtInfo.text = $"uid:{id} 昵称:{ret.Name} 等级:{ret.Level} 职业:{CharacterHelper.GetJobTypeById(ret.JobId)}"; } private void ShowOptionExampleText(string value) { if (!dic.TryGetValue(value, out long id)) { ui.m_txtOp.text = $"未找到配置:{value}"; } gMConfig = GMConfigCategory.Instance.Get(id); ui.m_txtOp.text = gMConfig.Example; ui.m_txtTip1.text = gMConfig.Param1Tip; ui.m_txtTip.text = gMConfig.Param2Tip; } public void Destroy() { } } }