using TableConfig; using System.Text; using System.Collections.Generic; using LitJson; using System; using UnityEngine; namespace Snxxz.UI { public class TreasureEffectModel : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk { public List treasureAddAtklist { get; private set; } public List treasureIdlist { get; private set; } public Dictionary> treasureSignDict { get; private set; } TreasureModel m_Model; TreasureModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } SignInModel signInModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { FuncConfigConfig addExp = Config.Instance.Get("VIPAddAtkEXP"); int[] addExpIds = ConfigParse.GetMultipleStr(addExp.Numerical2); treasureAddAtklist = new List(); for(int i = 0; i < addExpIds.Length;i++) { treasureAddAtklist.Add(addExpIds[i]); } FuncConfigConfig MWSignDayAttr = Config.Instance.Get("MWSignDayAttr"); int treasureId = int.Parse(MWSignDayAttr.Numerical2); JsonData signAttrData = JsonMapper.ToObject(MWSignDayAttr.Numerical1); treasureSignDict = new Dictionary>(); Dictionary attrDict = new Dictionary(); treasureSignDict.Add(treasureId,attrDict); foreach (var id in signAttrData.Keys) { attrDict.Add(int.Parse(id),int.Parse(signAttrData[id].ToString())); } treasureIdlist = Config.Instance.GetAllKeys(); } public void OnBeforePlayerDataInitialize() { treasureId = 0; vipLv = 0; showType = 0; killNpcAtk = 0; effectDesSB.Length = 0; } public void OnAfterPlayerDataInitialize() { } public void OnPlayerLoginOk() { } public override void UnInit() { } public bool CheckIsTreasure(int id) { if (treasureIdlist.Contains(id.ToString())) { return true; } return false; } public int treasureId { get; private set;} public int vipLv { get; private set;} public StringBuilder effectDesSB = new StringBuilder(); public int killNpcAtk { get; private set; } public int showType; public void SetTreasureID(int id, int vipLv = 0) { this.treasureId = id; this.vipLv = vipLv; SetTreasureEffectDes(out showType); if (!WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Open(); } } /// /// type 1 Vip杀怪等级 2 每日签到 3 获得经验 /// /// public void SetTreasureEffectDes(out int type) { type = 0; effectDesSB.Length = 0; killNpcAtk = 0; TreasureConfig treasureConfig = Config.Instance.Get(treasureId); if (treasureAddAtklist.Contains(treasureId)) { type = 1; var killConfig = Config.Instance.Get(Mathf.Max(model.vipKillNPCTreasure.level, 1)); if (killConfig != null) { killNpcAtk = killConfig.MaxAtk; } string des = treasureConfig.Verse[0].Replace("{0}",killNpcAtk.ToString()); effectDesSB.Append(des); return; } if(treasureSignDict.ContainsKey(treasureId)) { Dictionary attrDict = treasureSignDict[treasureId]; Treasure treasure; model.TryGetTreasure(treasureId, out treasure); bool isHaveTreasure = false; if (treasure != null) { if (treasure.state == TreasureState.Collected) { isHaveTreasure = true; } } foreach (var id in attrDict.Keys) { PlayerPropertyConfig propertyConfig = Config.Instance.Get(id); string des = string.Format(treasureConfig.Verse[0], GetProValueTypeStr(propertyConfig, attrDict[id]), propertyConfig.Name); effectDesSB.Append(des); if (signInModel.SumSignNum > 0) { des = string.Format(treasureConfig.Verse[1], signInModel.SumSignNum); effectDesSB.Append(StringUtility.Contact("\n", des)); int addAtk = signInModel.SumSignNum * attrDict[id]; if (isHaveTreasure) { des = string.Format(treasureConfig.Verse[2], Language.Get("TreasureEffect105", GetProValueTypeStr(propertyConfig, addAtk))); } else { des = string.Format(treasureConfig.Verse[2], Language.Get("TreasureEffect104", GetProValueTypeStr(propertyConfig, addAtk))); } effectDesSB.Append(StringUtility.Contact("\n", des)); } } return; } if(effectDesSB.Length <= 0) { type = 3; effectDesSB.Append(treasureConfig.Verse[0]); } } public string GetProValueTypeStr(PlayerPropertyConfig playerproModel, int value) { string s = ""; if (playerproModel.ISPercentage == 0) { s = value.ToString(); } else if (playerproModel.ISPercentage == 1) { s = (float)Math.Round(value / 100f, 1) + "%"; } else if (playerproModel.ISPercentage == 2) { s = ((float)Math.Round(value / 100f, 1)).ToString(); } return s; } Dictionary atkDict = new Dictionary(); public int GetTreasureFight() { int fight = model.GetTreasureFightPower(treasureId); switch (showType) { case 1: var killConfig = Config.Instance.Get(1); if (killConfig != null) { atkDict.Clear(); atkDict.Add(67,killConfig.MinAtk); atkDict.Add(68,killConfig.MaxAtk); fight += UIHelper.GetFightPower(atkDict); } break; case 2: fight += UIHelper.GetFightPower(treasureSignDict[treasureId]); break; case 3: break; default: break; } return fight; } public int GetFightPower(int _treasureId, int _type, int _value) { Treasure _treasure; model.TryGetTreasure(_treasureId, out _treasure); var _fight = model.GetTreasureFightPower(_treasureId); switch (_type) { case 1: var killConfig = Config.Instance.Get(Mathf.Max(_value, 1)); if (killConfig != null) { var _propertyDict = new Dictionary(); _propertyDict.Add(67, killConfig.MinAtk); _propertyDict.Add(68, killConfig.MaxAtk); _fight += UIHelper.GetFightPower(_propertyDict); } break; case 2: if (_treasure.treasureStages[0].unlockType == TreasureStageUnlock.Property) { _fight += UIHelper.GetFightPower(_treasure.treasureStages[0].propertyDict); } break; } return _fight; } } }