using System.Collections; using System.Collections.Generic; using UnityEngine; using Games.Item; using Module.Log; using UnityEngine.UI; using GCGame.Table; // 装备狂化 //5811 按钮下提醒 //5801 装备狂化前缀 //5803 字体颜色-品质狂化 //5804 道具提示字体颜色-品质狂化稀有 //5805 字体颜色-品质狂化稀有 //5806 无可狂化装备提示 //5807 强化百分比提升后缀(强化) //5808 狂化百分比提升后缀(狂化) //5809 装备属性强化加成百分比(非Tips) //5416 无装备左侧 //5417 tip中狂化提升颜色 //5418 非tip中狂化提升颜色 public class EquipFrenzy : MonoBehaviour { public static int EquipFrenzyEffectID = 8001; private static bool hasAnyFrenzy = false; public static bool HasAnyFrenzy { private set { hasAnyFrenzy = value; } get { return hasAnyFrenzy; } } private static EquipFrenzy instance; public static EquipFrenzy Instance { get { return instance; } } public EquipEnhanceRoot _EquipEnhanceRoot; public CommonItemMaterialSlot frenzyMat; public GameItem _SelectedEquip; public FrenzyInfoItem normalItem; public FrenzyInfoItem afterItem; public GameObject frenzyPanel; public GameObject hasFrenzyPanel; public Text hasFrenzyTip; public Button frenzyBtn; public Text noneEquipTip; public Text btnTip; public Image[] arrows; public Sprite blueSprite; public Sprite yellowSprite; public Button tipBtn; public GameObject redTip; public Text _CantCrazyTip; private void Awake() { if(instance == null) { instance = this; frenzyBtn.onClick.AddListener(OnFrenzyClick); btnTip.text = StrDictionary.GetClientDictionaryString("#{5811}"); noneEquipTip.text = StrDictionary.GetClientDictionaryString("#{5806}"); hasFrenzyTip.text = StrDictionary.GetClientDictionaryString("#{5416}"); tipBtn.onClick.AddListener(() => { MessageHelpLogic.ShowHelpMessage(50); }); } } private void OnDestroy() { instance = null; } private void UpdateRedTip() { redTip.SetActive(HasAnyFrenzy); } private void OnEnable() { //UpdateRedTip(); ShowArrows(false); var lastSelects = _EquipEnhanceRoot._EquipContainer.GetSelecteds(); // 每次开始显示,激活装备容器 _EquipEnhanceRoot._EquipContainer.gameObject.SetActive(true); // 初始化装备列表 _EquipEnhanceRoot.InitAllEquipList(); _EquipEnhanceRoot._EquipContainer._IsMultiSelect = false; if (_EquipEnhanceRoot._AllEquipList.Count == 0) { _EquipEnhanceRoot._EquipContainer.InitSelectContent(_EquipEnhanceRoot._AllEquipList, null); noneEquipTip.gameObject.SetActive(true); normalItem.ShowNothing(); afterItem.ShowNothing(); frenzyPanel.SetActive(false); hasFrenzyPanel.SetActive(false); return; } int minLv = GetMinLvRequired(); // 目标装备为 橙装 List targetEquip; targetEquip = _EquipEnhanceRoot._AllEquipList; //targetEquip = _EquipEnhanceRoot._AllEquipList.FindAll((equipItem) => //{ // if (equipItem.GetQuality() >= ItemQuality.QUALITY_PINK && equipItem.GetMinLevelRequire() >= minLv) // { // return true; // } // return false; //}); if (targetEquip.Count <= 0) { _EquipEnhanceRoot._EquipContainer.gameObject.SetActive(false); noneEquipTip.gameObject.SetActive(true); normalItem.ShowNothing(); afterItem.ShowNothing(); frenzyPanel.SetActive(false); hasFrenzyPanel.SetActive(false); } else { noneEquipTip.gameObject.SetActive(false); List defaultSelect = new List(); if (EquipEnhanceRoot._DefaultSelectedItem != null && EquipEnhanceRoot._DefaultSelectedPage == 1) { defaultSelect.Add(EquipEnhanceRoot._DefaultSelectedItem); EquipEnhanceRoot._DefaultSelectedPage = -1; EquipEnhanceRoot._DefaultSelectedItem = null; } else if (lastSelects.Count > 0) { for (int i = 0; i < lastSelects.Count; ++i) { if (targetEquip.Contains(lastSelects[i])) { defaultSelect.Add(lastSelects[i]); break; } } } if(defaultSelect.Count <= 0) { defaultSelect.Add(targetEquip[0]); } Hashtable hash = new Hashtable(); hash.Add("KuanghuaTips", true); _EquipEnhanceRoot._EquipContainer.InitSelectContent(targetEquip, defaultSelect, OnSelectEquip, null, hash); } } private int GetMinLvRequired() { int result = int.MaxValue; var tabs = TableManager.GetEquipFrenzy().Values; foreach(var item in tabs) { if (result > item.EquipLevelMin) { result = item.EquipLevelMin; } } return result; } public void OnEquipUpdate() { if(EquipFrenzy.instance.gameObject.activeInHierarchy) { _EquipEnhanceRoot._EquipContainer.ForeachActiveItem( (EquipEnhanceItem item) => { if(item._EquipItem.Guid == _SelectedEquip.Guid) { item.RefreshEqupItem(); } }); OnSelectEquip(_SelectedEquip); } } private void ShowArrows(bool isShow) { if(isShow) { Tab_EquipAttr tabItem = TableManager.GetEquipAttrByID(_SelectedEquip.DataID, 0); for(int i = 0; i < arrows.Length; ++i) { if (_SelectedEquip.BaseAttrs.Count <= i) { arrows[i].gameObject.SetActive(false); continue; } else { arrows[i].gameObject.SetActive(true); if (tabItem.GetIsEnchanceAddbyIndex(i) > 0) { arrows[i].sprite = yellowSprite; } else { arrows[i].sprite = blueSprite; } } } } else { foreach (Image i in arrows) { i.gameObject.SetActive(false); } } } private void OnSelectEquip(object item) { GameItem tempSelect = item as GameItem; if(tempSelect == null) { LogModule.WarningLog("Wrong select type in equip frenzy"); normalItem.ShowNothing(); afterItem.ShowNothing(); frenzyPanel.SetActive(false); hasFrenzyPanel.SetActive(false); } else { _SelectedEquip = tempSelect; Tab_CommonItem itemTab = TableManager.GetCommonItemByID(_SelectedEquip.DataID, 0); var tab = TableManager.GetEquipFrenzy().Values; bool hasFound = false; foreach(var kv in tab) { if ((int)_SelectedEquip.GetQuality() == kv.Quality && itemTab.MinLevelRequire >= kv.EquipLevelMin && itemTab.MinLevelRequire <= kv.EquipLevelMax) { hasFound = true; frenzyMat.InitMaterial(kv.FrenzyConsumeSubType, kv.FrenzyConsumeNum); break; } } frenzyMat.gameObject.SetActive(hasFound); ShowArrows(true); GameItem equipItem = SimulationAttr(_SelectedEquip); if (_SelectedEquip.IsFrenzy) { normalItem.Show(equipItem, hasFound); afterItem.Show(_SelectedEquip, hasFound); frenzyPanel.SetActive(false); hasFrenzyPanel.SetActive(true); } else { normalItem.Show(_SelectedEquip, hasFound); afterItem.Show(equipItem, hasFound); frenzyPanel.SetActive(true); hasFrenzyPanel.SetActive(false); } if (hasFound) { _CantCrazyTip.text = ""; } else { GUIData.AddNotifyData("#{5811}"); _CantCrazyTip.text = StrDictionary.GetClientDictionaryString("#{5811}"); } } } // 虚拟狂化前或者狂化后的属性 // affect 影响结果 -1 求当前装备狂化前;1 求装备狂化后 private GameItem SimulationAttr(GameItem equip) { GameItem resultEquip = (GameItem)equip.Clone(); resultEquip.IsFrenzy = !equip.IsFrenzy; //float percentage = (equip.GetStrengthVal() + equip.GetFrenzyVal()) / 100.0f + 1.0f; //float enhancePer = equip.GetStrengthVal() / 100.0f + 1.0f; //if (!equip.IsFrenzy) //{ // for (int i = 0; i < resultEquip.BaseAttrs.Count; ++i) // { // float baseValue = resultEquip.BaseAttrs[i]._Value1 / enhancePer; // resultEquip.BaseAttrs[i]._Value1 = (int)(baseValue * percentage); // } //} //else //{ // for (int i = 0; i < resultEquip.BaseAttrs.Count; ++i) // { // float baseValue = resultEquip.BaseAttrs[i]._Value1 / percentage; // resultEquip.BaseAttrs[i]._Value1 = (int)(baseValue * enhancePer); // } //} resultEquip.EnchanceScore = CombatValue.CalculateEquipSingle(resultEquip); resultEquip.BaseCombat = CombatValue.CalculateBaseAttr(resultEquip); resultEquip.BaseCombat += CombatValue.CalculateXilian(resultEquip.ExAttrs, resultEquip.DataID); resultEquip.BaseCombat += CombatValue.CalculateGemOpen(resultEquip); if (resultEquip.IsFrenzy) { //Debug.LogError(equip._NormalGemSuit+"...........宝石全部等级"); int combat = 0; if (equip._GemSuit1 > 0) { var normalSuitTab = TableManager.GetGemSuitByID(equip._GemSuit1); combat += normalSuitTab.CombatValue; } if (equip._GemSuit2 > 0) { var eliteSuitTab = TableManager.GetGemSuitByID(equip._GemSuit2); combat += eliteSuitTab.CombatValue; } if (equip._GemSuit3 > 0) { var eliteSuitTab = TableManager.GetGemSuitByID(equip._GemSuit3); combat += eliteSuitTab.CombatValue; } resultEquip.EnchanceScore += combat; //Debug.LogError(combat + "...........石之灵战力值"); } return resultEquip; } private void OnFrenzyClick() { if (!string.IsNullOrEmpty(_CantCrazyTip.text)) { GUIData.AddNotifyData("#{5811}"); return; } if(!_SelectedEquip.IsFrenzy) { ReqEquipFrenzy req = new ReqEquipFrenzy(); if (_SelectedEquip.IsPlayerEquiped()) { req.packtype = (int)GameItemContainer.Type.TYPE_EQUIPPACK; } else { req.packtype = (int)GameItemContainer.Type.TYPE_BACKPACK; } req.equipguid = (long)_SelectedEquip.Guid; req.SendMsg(); } } #region 红点相关 public static void CheckAnyFrenzy() { HasAnyFrenzy = false; Tab_FunctionOpen tab = TableManager.GetFunctionOpenByID(16, 0); if (tab == null || GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level < tab.OpenLevel) { return; } List equipLvs = new List(); int tempLv = 0; var equipList = GameManager.gameManager.PlayerDataPool.EquipPack.GetList(); foreach (var equipItem in equipList) { tempLv = equipItem.GetMinLevelRequire(); if (equipItem.IsValid() && EquipEnhanceRoot.CanEquipFrenzy(equipItem) && !equipItem.IsFrenzy) { if (equipLvs.Contains(tempLv) == false) { equipLvs.Add(tempLv); } } } //var backPackItems = GameManager.gameManager.PlayerDataPool.BackPack.GetList(); //foreach (var backPackItem in backPackItems) //{ // tempLv = backPackItem.GetMinLevelRequire(); // if (backPackItem.IsValid() && backPackItem.IsEquipMent() // && backPackItem.GetQuality() >= ItemQuality.QUALITY_PINK // && tempLv >= 60 // && !backPackItem.IsFrenzy) // { // if (equipLvs.Contains(tempLv) == false) // { // equipLvs.Add(tempLv); // } // } //} var tabs = TableManager.GetEquipFrenzy().Values; HasAnyFrenzy = false; foreach (var equipLv in equipLvs) { if (HasAnyFrenzy == true) { break; } foreach (var kv in tabs) { if (equipLv >= kv.EquipLevelMin && equipLv <= kv.EquipLevelMax) { if (GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(kv.FrenzyConsumeSubType) >= kv.FrenzyConsumeNum) { HasAnyFrenzy = true; break; } } } } if (ExtraFunTipRoot.Instance() != null) { ExtraFunTipRoot.Instance().UpdateFrenzy(); } } #endregion }