using UnityEngine; using System; using System.Xml; using System.Text; using System.Collections; using System.Collections.Generic; public class Pack : SkillRoot { #region 变量 #region 配置 protected int MinUseLv; protected int MaxUseLv; protected float Person; protected float SkillCD; protected float UseAmt; protected float CoinOnce; protected float CoinPerson; protected float DiamondOnce; protected float Plus; protected float PersonBuff; protected float SkillCdBuff; protected string Desc; protected string Label; protected string Anim; protected string Flower; protected Current UseCur; #endregion public SkillStatus _ItemStatus; public SkillStatus ItemStatus { get { return _ItemStatus; } set { _ItemStatus = value; if (_ItemStatus == SkillStatus.Buy) { ItemBtn.interactable = true; ItemBtnLab.text = string.Format("{0}\n{1}{2}", Language.GetStr("UI", "Fe_BtnLab3"), UseCur, UseAmt); } else if (_ItemStatus == SkillStatus.Lock) { ItemBtn.interactable = false; ItemBtnLab.text = string.Format("{0}\n{1}{2}-{3}", Language.GetStr("UI", "Fe_BtnLab5"), Language.GetStr("UI", "Fe_BtnLab4"), MinUseLv, MaxUseLv); } else { throw new Exception(_ItemStatus.ToString()); } } } #endregion public Pack(XmlAttributeCollection attributes) { #region 配置 ID = int.Parse(attributes[0].Value); Icon = attributes[14].Value; Desc = Language.GetStr("SkillDescription", "Pack" + ID); Anim = attributes[15].Value; Label = attributes[16].Value; Name = Language.GetStr("SkillName", "Pack" + ID); Flower = attributes[9].Value; ClassID = IntParse(attributes[3].Value); UseAmt = FloatParse(attributes[12].Value); CoinOnce = FloatParse(attributes[7].Value); DiamondOnce = FloatParse(attributes[8].Value); SkillTab = SkillClassParse(attributes[2].Value); UseCur = CurrentParse(attributes[11].Value); MinUseLv = MinLevelParse(attributes[10].Value); MaxUseLv = MaxLevelParse(attributes[10].Value); ValueBuffParse(out Person, out PersonBuff, attributes[5].Value); ValueBuffParse(out SkillCD, out SkillCdBuff, attributes[6].Value); ValueBuffParse(out CoinPerson, out Plus, attributes[4].Value); #endregion SkillType = SkillType.Pack; } public override void RegistValue(float elapse, List> ffList) { ItemTit.text = Name; ItemLab.text = Description(0); ItemBtn.onClick.AddListener(OnClick); for (int i = 0; i < Level; i++) { ManaDebug.Log(string.Format("初始化{0} 等级 : {1}", Name, Level)); UsePerma(); } } public override void UpdateStatus() { if (MaxUseLv == MinUseLv) { ItemStatus = SkillStatus.Buy; } else { if (ManaData.Level > MaxUseLv || ManaData.Level < MinUseLv) { ItemStatus = SkillStatus.Lock; } else { ItemStatus = SkillStatus.Buy; } } } protected void OnClick() { if (ManaData.Connect == false) { ManaReso.Get("Fg_Reconnect").TweenForCG(); return; } ManaReso.Get("Fe_Info").TweenForCG(); ManaReso.SetText("Fe_Tit", Name); if (MinUseLv != MaxUseLv) { ManaReso.SetText("Fe_Lab0", string.Format("{0}-{1}级可用", MinUseLv, MaxUseLv)); ManaReso.SetActive("Fe_Lab0", true); } else { ManaReso.SetActive("Fe_Lab0", false); } if (ItemStatus == SkillStatus.Buy) { ManaReso.SetText("Fe_Lab1", Description(0)); ManaReso.SetText("Fe_BtnLab", string.Format("{0}({1}{2})", Language.GetStr("UI", "Fe_BtnLab3"), UseCur, UseAmt)); ManaReso.SetButtonEvent ( "Fe_Btn", () => { Buy(); ManaReso.Get("Fe_Info").TweenBacCG(); } ); } else { throw new Exception(); } } protected virtual void Buy() { if (ManaData.Pay(UseAmt, UseCur)) { #region 调试输出 StringBuilder strb = new StringBuilder(); strb.AppendFormat("使用技能 : {0}", Name); if (Math.Abs(Plus) > 0.0005f) { strb.AppendFormat(" 收入加成+{0}%", Plus * 100); } if (Math.Abs(Person) > 0.0005f) { strb.AppendFormat(" 参观人次+{0}", Person); } if (Math.Abs(PersonBuff) > 0.0005f) { strb.AppendFormat(" 参观人次+{0}%", PersonBuff * 100); } if (Math.Abs(CoinPerson) > 0.0005f) { strb.AppendFormat(" 每次金币+{0}", CoinPerson); } if (Math.Abs(SkillCD) > 0.0005f) { strb.AppendFormat(" 减少冷却上限{0}", SkillCD); } if (Math.Abs(SkillCdBuff) > 0.0005f) { strb.AppendFormat(" 减少冷却上限{0}%", SkillCdBuff * 100); } if (Math.Abs(CoinOnce) > 0.0005f) { strb.AppendFormat(" 获得金币{0}", CoinOnce); } if (Math.Abs(DiamondOnce) > 0.0005f) { strb.AppendFormat(" 获得钻石{0}", DiamondOnce); } if (!string.IsNullOrEmpty(Flower)) { string[] strings = Flower.Split(' '); for (int i = 0; i < strings.Length; i++) { strb.AppendFormat(" 获得{0}", ManaGarden.FlowerInfoDic[int.Parse(strings[i])].Name); } } strb.Append(" 永久有效"); ManaDebug.Log(strb.ToString()); #endregion UsePerma(); UseImmed(); Level++; } } protected void UsePerma() { if (!string.IsNullOrEmpty(Flower)) { string[] strings = Flower.Split(' '); for (int i = 0; i < strings.Length; i++) { FlowerInfo flowerInfo = ManaGarden.FlowerInfoDic[int.Parse(strings[i])]; if (flowerInfo.Unlock == false) { flowerInfo.Unlock = true; } } } ManaData.SkillPlus += Plus; ManaData.SkillPerson += Person; ManaData.SkillPersonBuff += PersonBuff; ManaData.SkillCoinPerson += CoinPerson; if (Math.Abs(SkillCD) > 0.0005f) { for (int i = 0; i < ManaData.SkillList.Count; i++) { ManaData.SkillList[i].ReceiveCool(SkillCD, false, false); } } if (Math.Abs(SkillCdBuff) > 0.0005f) { for (int i = 0; i < ManaData.SkillList.Count; i++) { ManaData.SkillList[i].ReceiveCool(SkillCdBuff, false, true); } } } protected void UseImmed() { ManaData.Coin += CoinOnce; ManaData.Diamond += DiamondOnce; } #region 解读器 protected int MinLevelParse(string str) { if (string.IsNullOrEmpty(str)) { return 0; } else { return IntParse(str.Split(',')[0]); } } protected int MaxLevelParse(string str) { if (string.IsNullOrEmpty(str)) { return 0; } else { return IntParse(str.Split(',')[1]); } } protected string Description(int offset) { string[] strings = Desc.Split('[', ']'); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < strings.Length; i++) { if (strings[i].Contains("lv")) { } else if (strings[i].Contains("&coin&")) { #region MyRegion if (Math.Abs(CoinOnce) > 0.0005f) { stringBuilder.Append(CoinOnce); } #endregion } else if (strings[i].Contains("&flower&")) { #region MyRegion if (!string.IsNullOrEmpty(Flower)) { string[] strings1 = Flower.Split(' '); for (int j = 0; j < strings1.Length; j++) { stringBuilder.Append(Language.GetStr("FlowerName", "Flower" + strings1[j])); if (j != strings1.Length - 1) { stringBuilder.Append(","); } } } #endregion } else if (strings[i].Contains("&diamond&")) { #region MyRegion if (Math.Abs(DiamondOnce) > 0.0005f) { stringBuilder.Append(DiamondOnce); } #endregion } else if (strings[i].Contains("&coin_person&")) { #region MyRegion if (Math.Abs(Plus) > 0.0005f) { stringBuilder.Append(string.Format("{0}%", Plus*100)); } else if (Math.Abs(CoinPerson) > 0.0005f) { stringBuilder.Append(CoinPerson); } #endregion } else { stringBuilder.Append(strings[i]); } } return stringBuilder.ToString(); } #endregion }