using Snxxz.UI; using System; using System.Collections.Generic; using TableConfig; using UnityEngine; public class RichTableEvent : TRichTextEvent { ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } EquipWashModel m_EquipWashModel; EquipWashModel equipWashModel { get { return m_EquipWashModel ?? (m_EquipWashModel = ModelCenter.Instance.GetModel()); } } PlayerSuitModel _suitModel; PlayerSuitModel suitModel { get { return _suitModel ?? (_suitModel = ModelCenter.Instance.GetModel()); } } public RichTableEvent() { RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.TABLE, this); RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.SHOWITEM, this); } public override bool Execute(RichTextEventEnum type, RichTextMgr.HrefInfo href) { switch (type) { case RichTextEventEnum.SHOWITEM: { ItemConfig cfg = Config.Instance.Get(href.mSplits["showitem"]); if (cfg != null) { OnSingleClickItemCell(cfg.ID, href); } } break; } return false; } public override string GetDisplay(RichTextEventEnum type, Dictionary _dict) { switch (type) { case RichTextEventEnum.TABLE: { if (_dict.ContainsKey("info")) { string info = _dict["info"]; switch (info) { case "richtextmsgreplace": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { return RichTextMsgReplaceConfig.GetRichReplace(_dict["name"], id); } } break; case "item": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { ItemConfig cfg = Config.Instance.Get(id); if (cfg != null) { var _itemColor = cfg.ItemColor; if (cfg.Type == 111)//翅膀 { Dictionary> userdatadic = null; if (_dict.ContainsKey("userdata")) { string userdata = _dict["userdata"]; userdatadic = ConfigParse.Analysis(userdata); _itemColor = ModelCenter.Instance.GetModel().GetItemQuality(cfg.ID, userdatadic); } } var itemName = cfg.ItemName; if (_dict != null && _dict.ContainsKey("chatsend")) { itemName = StringUtility.Contact("[", itemName, "]"); } if (_dict != null && _dict.ContainsKey("count")) { var count = 0; int.TryParse(_dict["count"], out count); if (count > 0) { itemName = StringUtility.Contact(itemName, "x", count); } } return GetTextColorByItemColor(itemName, _itemColor, _dict); } else { DebugEx.LogError(string.Format("物品表里没有ID{0}对应的物品", id)); } } } break; case "npc": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { NPCConfig cfg = Config.Instance.Get(id); if (cfg != null) { return cfg.charName; } } } break; case "map": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { MapConfig cfg = Config.Instance.Get(id); if (cfg != null) { return cfg.Name; } } } break; case "skill": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { SkillConfig cfg = Config.Instance.Get(id); if (cfg != null) { return cfg.SkillName; } } } break; case "fairyquestion": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { QuestionBankConfig cfg = Config.Instance.Get(id); if (cfg != null) { return cfg.question; } } } break; case "runetower": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { RuneTowerConfig cfg = Config.Instance.Get(id); if (cfg != null) { return cfg.TowerName; } } } break; case "realm": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { RealmConfig _cfg = Config.Instance.Get(id); if (_cfg != null) { var text = RichTextMgr.Inst.presentRichText; int colorType = 0; if (text != null) { colorType = text.colorType == RichText.ColorType.Dark ? 0 : 1; } return UIHelper.GetRealmName(id, colorType == 1); } } } break; case "pet": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { PetInfoConfig _cfg = Config.Instance.Get(id); if (_cfg != null) { return GetTextColorByItemColor(_cfg.Name, _cfg.Quality, _dict); } } } break; case "alchemy": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { AlchemyConfig _cfg = Config.Instance.Get(id); if (_cfg != null) { return _cfg.AlchemName; } } } break; case "treasure": { int id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out id)) { TreasureConfig _cfg = Config.Instance.Get(id); if (_cfg != null) { return _cfg.Name; } } } break; case "godweapon": { var _type = 0; if (_dict.ContainsKey("type") && int.TryParse(_dict["type"], out _type)) { var _cfg = GodWeaponConfig.GetGodWeaponCfgByTypeLv(_type, 1); if (_cfg != null) { return _cfg.Name; } } } break; case "buffdesc": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return _cfg.BuffDescription; } } } break; case "property": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return _cfg.Name; } } } break; case "mount": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return GetTextColorByItemColor(_cfg.Name, _cfg.Quality, _dict); } } } break; case "success": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return _cfg.Describe; } } } break; case "osredenvelope": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return _cfg.typeName; } } } break; case "treasureprivilege": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var _cfg = Config.Instance.Get(_id); if (_cfg != null) { return _cfg.Name; } } } break; case "towernewrune": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var config = Config.Instance.Get(_id + 1); if (config != null) { var itemConfig = Config.Instance.Get(config.ProductRune); return itemConfig.ItemName; } var towerFloor = Config.Instance.Get(_id * 100 + 8); if (config != null) { var itemConfig = Config.Instance.Get(towerFloor.UnLockCompose); return itemConfig.ItemName; } } } break; case "runetowerfloor": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var config = Config.Instance.Get(_id); if (config != null) { var towerConfig = Config.Instance.Get(config.TowerId); return StringUtility.Contact(towerConfig.TowerName, config.FloorName); } } } break; case "coloritem": { var _id = 0; if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id)) { var config = Config.Instance.Get(_id); if (config != null) { return StringUtility.Contact(GetItemColorChs(config.ItemColor), GetTextColorByItemColor(config.ItemName, config.ItemColor, _dict)); } } } break; } } } break; } return string.Empty; } private void OnSingleClickItemCell(int itemId, RichTextMgr.HrefInfo hrefInfo) { uint[] stone = null; if (hrefInfo.mSplits.ContainsKey("stone")) { try { stone = LitJson.JsonMapper.ToObject(hrefInfo.mSplits["stone"]); } catch (Exception e) { DebugEx.Log(e.Message); } } int itemCount = 0; if (hrefInfo.mSplits.ContainsKey("itemcnt")) { itemCount = int.Parse(hrefInfo.mSplits["itemcnt"]); } int isBind = 0; if (hrefInfo.mSplits.ContainsKey("isbind")) { isBind = int.Parse(hrefInfo.mSplits["isbind"]); } int strengthenLv = 0; if (hrefInfo.mSplits.ContainsKey("strengthenlv")) { strengthenLv = int.Parse(hrefInfo.mSplits["strengthenlv"]); } int index = 0; if (hrefInfo.mSplits.ContainsKey("place")) { index = int.Parse(hrefInfo.mSplits["place"]); } equipSuitList.Clear(); suitCountDict.Clear(); if (hrefInfo.mSplits.ContainsKey("equippartsuite") && hrefInfo.mSplits["equippartsuite"] != string.Empty) { LitJson.JsonData _json = null; try { _json = LitJson.JsonMapper.ToObject(hrefInfo.mSplits["equippartsuite"]); } catch (Exception e) { DebugEx.Log(e.Message); } if (_json != null) { foreach (var _key in _json.Keys) { var _index = int.Parse(_key); RoleParticularModel.EquipSuit _suit = new RoleParticularModel.EquipSuit() { Index = _index, suitDict = new Dictionary() }; foreach (var _subKey in _json[_key].Keys) { var _type = int.Parse(_subKey); var _val = int.Parse(_json[_key][_subKey].ToJson()); _suit.Add(_type, _val); } equipSuitList.Add(_suit); } for (int i = 0; i < equipSuitList.Count; i++) { var _suit = equipSuitList[i]; Dictionary _dict = new Dictionary(); suitCountDict.Add(_suit.Index, _dict); if (_suit.suitDict.ContainsKey((int)SuitType.HighSuit)) { _dict.Add(SuitType.HighSuit, GetEquipSuitCount(SuitType.HighSuit, _suit.Index, _suit.suitDict[(int)SuitType.HighSuit])); } if (_suit.suitDict.ContainsKey((int)SuitType.LowSuit)) { _dict.Add(SuitType.LowSuit, GetEquipSuitCount(SuitType.LowSuit, _suit.Index, _suit.suitDict[(int)SuitType.LowSuit])); } } } } equipItems = null; if (hrefInfo.mSplits.ContainsKey("equipitems") && hrefInfo.mSplits["equipitems"] != string.Empty) { try { equipItems = LitJson.JsonMapper.ToObject(hrefInfo.mSplits["equipitems"]); } catch (Exception e) { DebugEx.Log(e.Message); } } RoleParticularModel.EquipWash _equipWash = default(RoleParticularModel.EquipWash); if (hrefInfo.mSplits.ContainsKey("equipwash") && hrefInfo.mSplits["equipwash"] != string.Empty) { try { _equipWash = LitJson.JsonMapper.ToObject(hrefInfo.mSplits["equipwash"]); } catch (Exception e) { DebugEx.Log(e.Message); } } Dictionary> userdatadic = null; if (hrefInfo.mSplits.ContainsKey("userdata")) { string userdata = hrefInfo.mSplits["userdata"]; userdatadic = ConfigParse.Analysis(userdata); } Dictionary suitLvDict = null; if (hrefInfo.mSplits.ContainsKey("suitlv")) { suitLvDict = new Dictionary(); string suitLvData = hrefInfo.mSplits["suitlv"]; string[] split_data = suitLvData.Split('\''); for (int i = 0; i < split_data.Length; i++) { string[] split_value = split_data[i].Split('_'); if (split_value.Length == 2) { int key = int.Parse(split_value[0]); suitLvDict.Add(key, int.Parse(split_value[1])); } } } Dictionary suitCntDict = null; if (hrefInfo.mSplits.ContainsKey("suitcnt")) { suitCntDict = new Dictionary(); string suitCntData = hrefInfo.mSplits["suitcnt"]; string[] split_data = suitCntData.Split('\''); for (int i = 0; i < split_data.Length; i++) { string[] split_value = split_data[i].Split('_'); if (split_value.Length == 2) { int key = int.Parse(split_value[0]); suitCntDict.Add((SuitType)key, int.Parse(split_value[1])); } } } ItemAttrData attrData = new ItemAttrData(itemId, false, (ulong)itemCount, -1, isBind, false, PackType.rptDeleted, "", userdatadic); attrData.SetGemModel(stone); attrData.SetStrengthData(strengthenLv, GetStrengthenType(itemId)); if (equipSuitList.Count != 0) { var _suit = equipSuitList.Find((x) => { return x.Index == index; }); if (!_suit.Equals(default(RoleParticularModel.EquipSuit))) { attrData.SetOtherSuitData(itemId, index, _suit.suitDict, suitCountDict.ContainsKey(index) ? suitCountDict[index] : null); } } else { attrData.SetOtherSuitData(itemId, index, suitLvDict, suitCntDict); } if (!_equipWash.Equals(default(RoleParticularModel.EquipWash))) { attrData.SetWashModel(equipWashModel.OnGetWashType(index), _equipWash.LV, _equipWash.Value); } itemTipsModel.SetItemTipsModel(attrData); } List equipSuitList = new List(); Dictionary> suitCountDict = new Dictionary>(); int[][] equipItems = null; public int GetItem(int _index) { if (equipItems != null) { for (int i = 0; i < equipItems.Length; i++) { int[] _itemData = equipItems[i]; if (_itemData != null && _itemData.Length > 1) { if (_itemData[0] == _index) { return _itemData[1]; } } } } return 0; } public string GetItemColorChs(int _itemColor) { switch (_itemColor) { case 2: return Language.Get("EquipSuitBlue"); case 3: return Language.Get("EquipSuitPurple"); case 4: return Language.Get("EquipSuitOrange"); case 5: return Language.Get("EquipSuitRed"); default: return Language.Get("EquipSuitWhite"); } } public int GetEquipSuitCount(SuitType _type, int _index, int suitLv) { var _count = 0; for (int i = 0; i < equipSuitList.Count; i++) { var _suit = equipSuitList[i]; if (suitModel.GetGroupType(_suit.Index) == suitModel.GetGroupType(_index)) { if (_suit.suitDict.ContainsKey((int)_type) && _suit.suitDict[(int)_type] > 0) { var _suitLv = _suit.suitDict[(int)_type]; int _item = GetItem(_suit.Index); var _itemCfg = Config.Instance.Get(_item); if (_itemCfg == null) { continue; } if (suitModel.IsMakerSuit(_type, _itemCfg.ItemColor, _itemCfg.StarLevel)) { if (_itemCfg.LV < _suit.suitDict[(int)_type]) { _suitLv = _itemCfg.LV; } } else { _suitLv = 0; } if (_suitLv == suitLv) { _count++; } } } } return _count; } public static int GetStrengthenType(int _id) { var _itemCfg = Config.Instance.Get(_id); var _type = ModelCenter.Instance.GetModel().GameDefineIndex(_itemCfg.EquipPlace); return _type; } private static string GetTextColorByItemColor(string info, int _itemColor, Dictionary dic) { if (dic.ContainsKey("col")) { if (int.Parse(dic["col"]) == 0) { return info; } } var text = RichTextMgr.Inst.presentRichText; int colorType = 0; if (text != null) { colorType = text.colorType == RichText.ColorType.Dark ? 0 : 1; } return UIHelper.GetTextColorByItemColor(_itemColor, info, colorType == 1); } }