Files
JJBB/Assets/Project/Script/GUI/Equip/EquipFrenzy.cs
2024-08-23 15:49:34 +08:00

450 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<GameItem>();
// 每次开始显示,激活装备容器
_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<GameItem> 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<GameItem> defaultSelect = new List<GameItem>();
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>(
(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<int> equipLvs = new List<int>();
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
}