1346 lines
45 KiB
C#
1346 lines
45 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Runtime.Remoting.Lifetime;
|
||
using Games.GlobeDefine;
|
||
using Games.LogicObj;
|
||
using Games.SkillModle;
|
||
using GCGame;
|
||
using GCGame.Table;
|
||
using Module.Log;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using System.Collections;
|
||
using Games.Item;
|
||
|
||
public class SkillRootLogic : MonoBehaviour
|
||
{
|
||
public static int MAX_SKILL_LEARN_LEVEL = 40;
|
||
|
||
public static bool canDrag = false;
|
||
|
||
private static SkillRootLogic m_Instance = null;
|
||
public static SkillRootLogic Instance()
|
||
{
|
||
return m_Instance;
|
||
}
|
||
|
||
private void Awake()
|
||
{
|
||
_PreSkillNotEnough.SetActive(false);
|
||
_PreSkillNotEnoughText.text = StrDictionary.GetClientDictionaryString("#{4762}");
|
||
}
|
||
|
||
void OnEnable()
|
||
{
|
||
m_Instance = this;
|
||
ShowTagPage(0);
|
||
InitSkillInfos();
|
||
UIManager.ShowUI(UIInfo.MoneyInfoPanel);
|
||
GUIData.delMoneyChanged += UpdateSkillCost;
|
||
|
||
UpdateRedTips();
|
||
_DragIcon.gameObject.SetActive(false);
|
||
}
|
||
|
||
void OnDisable()
|
||
{
|
||
m_Instance = null;
|
||
UIManager.CloseUI(UIInfo.MoneyInfoPanel);
|
||
GUIData.delMoneyChanged -= UpdateSkillCost;
|
||
}
|
||
|
||
public void CloseWindow()
|
||
{
|
||
SaveSkillPage();
|
||
UIManager.CloseUI(UIInfo.SkillInfo);
|
||
}
|
||
|
||
public void OnShowPage(int page)
|
||
{
|
||
switch (page)
|
||
{
|
||
case 0:
|
||
InitSkillInfos();
|
||
break;
|
||
case 1:
|
||
//InitChangeInfo();
|
||
ReqUnLockPageCount();
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void ReqUnLockPageCount()
|
||
{
|
||
ReqUnLockSkillCombine req = new ReqUnLockSkillCombine();
|
||
req._Flag = 1;
|
||
req.SendMsg();
|
||
}
|
||
|
||
public void UpdateSkillLvUpInfo()
|
||
{
|
||
LogModule.DebugLog("UpdateSkillLvUpInfo");
|
||
InitSkillItems();
|
||
|
||
OnSkillClassPage(_SkillClasses.SelectedSub1);
|
||
|
||
UpdateSkillCost();
|
||
AdjustLvUpBtn();
|
||
}
|
||
|
||
public void UpdateXiuwei()
|
||
{
|
||
_Xiuwei.text = StrDictionary.GetClientDictionaryString("#{2829}", GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Xiewei.ToString());
|
||
//_Xiuwei.text = StrDictionary.GetClientDictionaryString("#{10405}") + GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Xiewei.ToString();
|
||
}
|
||
|
||
public void ShowHelpMessage(int messageID)
|
||
{
|
||
MessageHelpLogic.ShowHelpMessage(messageID);
|
||
}
|
||
|
||
public void ShowTagPage(int page)
|
||
{
|
||
if (page > 1)
|
||
return;
|
||
|
||
_TagPanel.ShowPage(page);
|
||
}
|
||
|
||
#region skill icons
|
||
|
||
public UITagPanel _TagPanel;
|
||
public UISubScollMenu _SkillClasses;
|
||
public SkillRootPage _SkillInfoPage;
|
||
|
||
private Dictionary<string, List<SkillRootItem.SkillShowInfo>> _MySkillInfos;
|
||
public Dictionary<string, List<SkillRootItem.SkillShowInfo>> MySkillInfos
|
||
{
|
||
get
|
||
{
|
||
return _MySkillInfos;
|
||
}
|
||
}
|
||
|
||
private SkillRootItem.SkillShowInfo _SelectedSkillShow;
|
||
|
||
private void InitSkillInfos()
|
||
{
|
||
InitSkillItems();
|
||
|
||
_SkillClasses.Clear();
|
||
foreach (var skillClass in _MySkillInfos)
|
||
{
|
||
_SkillClasses.PushMenu(skillClass.Key);
|
||
for (int i = 0; i < skillClass.Value.Count; ++i)
|
||
{
|
||
if (CanSkillItemLvUp(skillClass.Value[i]))
|
||
{
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
|
||
int idx = 0;
|
||
if (UserConfigData._CurSkillPage != null)
|
||
{
|
||
idx = UserConfigData._CurSkillPage.PageIdx;
|
||
}
|
||
idx = Mathf.Max(0, idx);
|
||
InitSkillPage(idx);
|
||
_SkillClasses.ShowDefaultFirst();
|
||
_SkillInfoPage.SelectItem(_SelectedSkillShow);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 整理和包装玩家所有可学的技能信息,并在_MySkillInfos分类存储
|
||
/// </summary>
|
||
///
|
||
private void InitSkillItems()
|
||
{
|
||
// 全部可学技能列表,为未分类
|
||
var totleList = new List<SkillRootItem.SkillShowInfo>();
|
||
// 分类过后的全部技能列表
|
||
_MySkillInfos = new Dictionary<string, List<SkillRootItem.SkillShowInfo>>();
|
||
|
||
var skillActives = TableManager.GetSkillActive().Values;
|
||
var skillCount = 0;
|
||
foreach (var skill in skillActives)
|
||
{
|
||
if (skill.Profession == Singleton<ObjManager>.GetInstance().MainPlayer.Profession)
|
||
skillCount++;
|
||
}
|
||
// 保存玩家已经学的技能
|
||
for(int i = 0; i < Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo.Length; ++i)
|
||
{
|
||
//if (skillInfo.SkillLevelTable == null)
|
||
// continue;
|
||
|
||
//潜规则,这两个位置默认存放试用技能
|
||
if (i == skillCount - 1 || i == skillCount - 2)
|
||
continue;
|
||
|
||
var skillInfo = Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo[i];
|
||
|
||
var showInfo = new SkillRootItem.SkillShowInfo();
|
||
showInfo.SkillExTab = skillInfo.SkillExTable;
|
||
if (showInfo.SkillExTab == null)
|
||
continue;
|
||
|
||
showInfo.SkillBase = skillInfo.SkillBaseTable;
|
||
Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(skillInfo.SkillExTable.NextSkillId, 0);
|
||
showInfo.SkillLevelUp = skillnext;
|
||
totleList.Add(showInfo);
|
||
}
|
||
|
||
// 获得所有可学技能列表
|
||
var learnList = TableManager.GetSkillLearn().Values;
|
||
foreach (var tabAct in learnList)
|
||
{
|
||
if (tabAct.Profession != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession)
|
||
continue;
|
||
|
||
// 获取每个技能相关信息
|
||
Tab_SkillEx skillEx = TableManager.GetSkillExByID(tabAct.SkillId, 0);
|
||
Tab_SkillBase skillBase = TableManager.GetSkillBaseByID(skillEx.BaseId, 0);
|
||
|
||
var skillInfo = totleList.Find((showInfo) =>
|
||
{
|
||
if (showInfo.SkillBase.Id == skillEx.BaseId)
|
||
{
|
||
return true;
|
||
}
|
||
return false;
|
||
});
|
||
|
||
if (skillInfo != null)
|
||
{
|
||
skillInfo.SkillLearn = tabAct;
|
||
}
|
||
else
|
||
{
|
||
SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo();
|
||
showInfo.SkillLearn = tabAct;
|
||
showInfo.SkillBase = skillBase;
|
||
showInfo.SkillLevelUp = TableManager.GetSkillLevelUpByID(skillEx.SkillExID, 0);
|
||
totleList.Add(showInfo);
|
||
}
|
||
}
|
||
|
||
// 将已学和没学的技能,按照类型存入字典
|
||
foreach (var showInfo in totleList)
|
||
{
|
||
if (showInfo.SkillLearn == null)
|
||
continue;
|
||
|
||
if (_MySkillInfos.ContainsKey(showInfo.SkillLearn.Class))
|
||
{
|
||
_MySkillInfos[showInfo.SkillLearn.Class].Add(showInfo);
|
||
}
|
||
else
|
||
{
|
||
List<SkillRootItem.SkillShowInfo> showList = new List<SkillRootItem.SkillShowInfo>();
|
||
showList.Add(showInfo);
|
||
_MySkillInfos.Add(showInfo.SkillLearn.Class, showList);
|
||
}
|
||
}
|
||
CanAnySkillLvUp();
|
||
}
|
||
|
||
public void OnSkillClassPage(object paramObj)
|
||
{
|
||
LogModule.DebugLog("OnSkillClassPage:" + paramObj);
|
||
string skillClass = paramObj as string;
|
||
if (_MySkillInfos.ContainsKey(skillClass))
|
||
{
|
||
_SkillInfoPage.InitContainer(_MySkillInfos[skillClass], OnSkillItemClick);
|
||
if (_TagPanel.GetShowingPage() != 1)
|
||
_SkillInfoPage.SelectItem(_SelectedSkillShow);
|
||
}
|
||
}
|
||
|
||
public void OnShowSkillItem(int skillBaseId)
|
||
{
|
||
string pageName = "";
|
||
SkillRootItem.SkillShowInfo selectedItem = null;
|
||
foreach (var skillPage in _MySkillInfos)
|
||
{
|
||
foreach (var skillShowInfo in skillPage.Value)
|
||
{
|
||
if (skillShowInfo.SkillBase.Id == skillBaseId)
|
||
{
|
||
pageName = skillPage.Key;
|
||
selectedItem = skillShowInfo;
|
||
}
|
||
}
|
||
}
|
||
_SkillClasses.ShowMenu(pageName);
|
||
//OnSkillClassPage(pageName);
|
||
_SkillInfoPage.SelectItem(selectedItem);
|
||
}
|
||
|
||
public void OnSkillItemClick(object skillItem)
|
||
{
|
||
SkillRootItem.SkillShowInfo skillShowInfo = skillItem as SkillRootItem.SkillShowInfo;
|
||
if (skillShowInfo == null)
|
||
return;
|
||
|
||
_SelectedSkillShow = skillShowInfo;
|
||
if (_TagPanel.GetShowingPage() == 0)
|
||
{
|
||
InitSkillInfo(skillShowInfo);
|
||
}
|
||
else
|
||
{
|
||
if (skillShowInfo.SkillExTab != null)
|
||
{
|
||
var ownSkill = GameManager.gameManager.PlayerDataPool.GetOwnSkillInfo(skillShowInfo.SkillBase.Id);
|
||
var newskillEx = TableManager.GetSkillExByID(skillShowInfo.SkillExTab.SkillExID + ownSkill.exSkillLevel, 0);
|
||
SkillTooltipsLogic.ShowSkillToolTips(newskillEx.SkillExID, new Vector3(114, -35, 0));
|
||
}
|
||
else
|
||
{
|
||
SkillTooltipsLogic.ShowSkillToolTips(skillShowInfo.SkillLearn.SkillId, new Vector3(114, -35, 0));
|
||
}
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region skill lv UP
|
||
|
||
public Text _SkillName;
|
||
public Text _SkillCurDesc;
|
||
public Text _SkillCurLevel;
|
||
public Text _SkillNextDesc;
|
||
public Text _LeardNeedLv;
|
||
public Text _LeardNeedPreSkill;
|
||
public Text _Xiuwei;
|
||
public GameObject _NextLvPanel;
|
||
|
||
public Image[] _DamageTypes;
|
||
|
||
public UICurrencyItem _LvCost1;
|
||
public UICurrencyItem _LvOwn1;
|
||
public UICurrencyItem _LvCost2;
|
||
public UICurrencyItem _LvOwn2;
|
||
public GameObject _MoneyCostPanel;
|
||
public GameObject _ItemCostPanel;
|
||
public CommonItemMaterialSlot _ItemCostSlot;
|
||
public GameObject _PreSkillNotEnough;
|
||
public Text _PreSkillNotEnoughText;
|
||
public GameObject _ResEnough;
|
||
|
||
public GameObject _ResLack;
|
||
public GameObject _ResLackMoney;
|
||
public GameObject _ResLackEXP;
|
||
|
||
public GameObject _LvUpPanel;
|
||
public GameObject _LearnPanel;
|
||
public GameObject _MaxLvPanel;
|
||
public GameObject _LearnItemPanel;
|
||
public GameObject _CantLearnPanel;
|
||
public Button _BtnLearn;
|
||
public Button _BtnLvUp;
|
||
public Text _NextXiuwei;
|
||
|
||
public CommonItemMaterialSlot _LearnItemSlot;
|
||
|
||
private SkillRootItem.SkillShowInfo _SelectedSkill;
|
||
private bool _IsCanLevelUpSkill = true;
|
||
private long _ReplaceExpConsume;
|
||
private long _ReplaceMoneyConsume;
|
||
|
||
public void InitSkillInfo(SkillRootItem.SkillShowInfo skillShowInfo)
|
||
{
|
||
_SelectedSkill = skillShowInfo;
|
||
_IsCanLevelUpSkill = true;
|
||
_SkillName.text = skillShowInfo.SkillBase.Name;
|
||
|
||
string[] skillDamageType = skillShowInfo.SkillLearn.SkillType.Split(';');
|
||
for (int i = 0; i < _DamageTypes.Length; ++i)
|
||
{
|
||
_DamageTypes[i].gameObject.SetActive(false);
|
||
}
|
||
for (int i = 0; i < skillDamageType.Length; ++i)
|
||
{
|
||
int index = int.Parse(skillDamageType[i]);
|
||
_DamageTypes[index].gameObject.SetActive(true);
|
||
}
|
||
|
||
ShowLevelSkillCondition(skillShowInfo);
|
||
|
||
ShowLevelSkillCost(skillShowInfo);
|
||
|
||
AdjustLvUpBtn();
|
||
|
||
_Xiuwei.text = StrDictionary.GetClientDictionaryString("#{2829}", GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Xiewei.ToString());
|
||
|
||
}
|
||
|
||
private void ShowLevelSkillCost(SkillRootItem.SkillShowInfo skillShowInfo)
|
||
{
|
||
OwnSkillData ownSkillData = GameManager.gameManager.PlayerDataPool.GetOwnSkillInfo(skillShowInfo.SkillBase.Id);
|
||
|
||
if (skillShowInfo.SkillExTab == null)
|
||
{
|
||
_LvUpPanel.SetActive(false);
|
||
_LearnPanel.SetActive(true);
|
||
_MaxLvPanel.SetActive(false);
|
||
|
||
_SkillCurDesc.gameObject.SetActive(false);
|
||
_SkillCurLevel.text = "1";
|
||
|
||
if (skillShowInfo.SkillLevelUp.Level > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level
|
||
|| !skillShowInfo.IsNeedSkillLearned())
|
||
{
|
||
_LearnItemPanel.SetActive(false);
|
||
_CantLearnPanel.SetActive(true);
|
||
|
||
_BtnLearn.interactable = false;
|
||
}
|
||
else
|
||
{
|
||
_LearnItemPanel.SetActive(true);
|
||
_CantLearnPanel.SetActive(false);
|
||
|
||
int needItem = -1;
|
||
int needItemCount = -1;
|
||
for (int i = 0; i < skillShowInfo.SkillLevelUp.getConsumIdCount(); ++i)
|
||
{
|
||
if (skillShowInfo.SkillLevelUp.GetConsumTypebyIndex(i) == (int)CONSUM_TYPE.ITEM)
|
||
{
|
||
needItem = skillShowInfo.SkillLevelUp.GetConsumIdbyIndex(i);
|
||
needItemCount = skillShowInfo.SkillLevelUp.GetConsumValbyIndex(i);
|
||
}
|
||
}
|
||
if (needItem > 0)
|
||
{
|
||
//Tab_CommonItem needItem = TableManager.GetCommonItemByID(skillShowInfo.SkillActive.NeedItem, 0);
|
||
var itemCount = GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(needItem);
|
||
|
||
_LearnItemSlot.InitMaterial(needItem, 1);
|
||
if (itemCount > 0)
|
||
{
|
||
_BtnLearn.interactable = true;
|
||
}
|
||
else
|
||
{
|
||
_BtnLearn.interactable = false;
|
||
}
|
||
|
||
_ReplaceExpConsume = 0;
|
||
_ReplaceMoneyConsume = 0;
|
||
}
|
||
}
|
||
}
|
||
else if (skillShowInfo.SkillLevelUp == null || skillShowInfo.SkillLevelUp.IsMaxLevel > 0)
|
||
{
|
||
_LvUpPanel.SetActive(false);
|
||
_LearnPanel.SetActive(false);
|
||
_MaxLvPanel.SetActive(true);
|
||
|
||
_SkillCurDesc.gameObject.SetActive(true);
|
||
_SkillCurDesc.text = ownSkillData.BaseExTableFinal.SkillDesc;
|
||
_SkillCurLevel.text = ownSkillData.BaseExTableFinal.Level.ToString();
|
||
}
|
||
else
|
||
{
|
||
_LvUpPanel.SetActive(true);
|
||
_LearnPanel.SetActive(false);
|
||
_MaxLvPanel.SetActive(false);
|
||
|
||
_SkillCurDesc.gameObject.SetActive(true);
|
||
_SkillCurDesc.text = ownSkillData.BaseExTableFinal.SkillDesc;
|
||
_SkillCurLevel.text = ownSkillData.BaseExTableFinal.Level.ToString();
|
||
|
||
UpdateSkillCost();
|
||
}
|
||
}
|
||
|
||
public void UpdateSkillCost()
|
||
{
|
||
//if (!_LvCost1.gameObject.activeInHierarchy)
|
||
// return;
|
||
|
||
UpdateRedTips();
|
||
|
||
if (CONSUM_TYPE.ITEM == (CONSUM_TYPE)_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(0))
|
||
{
|
||
_ReplaceMoneyConsume = 0;
|
||
_ReplaceExpConsume = 0;
|
||
_MoneyCostPanel.SetActive(false);
|
||
_ItemCostPanel.SetActive(true);
|
||
_ItemCostSlot.InitMaterial(_SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0));
|
||
if (_ItemCostSlot.IsMaterialEnough())
|
||
{
|
||
if (alreadyLearnNeedSkill == true)
|
||
{
|
||
_PreSkillNotEnough.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
_PreSkillNotEnough.SetActive(true);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_PreSkillNotEnough.SetActive(false);
|
||
_IsCanLevelUpSkill &= false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_MoneyCostPanel.SetActive(true);
|
||
_ItemCostPanel.SetActive(false);
|
||
|
||
//通过类型和ID返回角色自身已经拥有的数量
|
||
long ownValue = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.SkillExp;
|
||
|
||
if (ownValue > 0)
|
||
{
|
||
_LvCost1.ShowCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0));
|
||
|
||
if (ownValue < _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0))
|
||
{
|
||
_LvOwn1.SetColor("<color=red>");
|
||
}
|
||
_LvOwn1.ShowCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(0), ownValue);
|
||
}
|
||
else
|
||
{
|
||
_LvCost1.ShowReplaceOwnCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0));
|
||
_LvOwn1.ShowReplaceOwnCurrencyCompare(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(0), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0));
|
||
}
|
||
|
||
long ownValue2 = GameManager.gameManager.PlayerDataPool.GetLongPropty(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(1));
|
||
if (ownValue2 > 0)
|
||
{
|
||
_LvCost2.ShowCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(1));
|
||
|
||
if (ownValue2 < _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(1))
|
||
{
|
||
_LvOwn2.SetColor("<color=red>");
|
||
}
|
||
_LvOwn2.ShowCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(1), ownValue2);
|
||
}
|
||
else
|
||
{
|
||
_LvCost2.ShowReplaceOwnCurrency(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(1));
|
||
_LvOwn2.ShowReplaceOwnCurrencyCompare(_SelectedSkill.SkillLevelUp.GetConsumTypebyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumIdbyIndex(1), _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(1));
|
||
}
|
||
|
||
_ReplaceExpConsume = (ownValue - _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(0));
|
||
_ReplaceMoneyConsume = (ownValue2 - _SelectedSkill.SkillLevelUp.GetConsumValbyIndex(1));
|
||
|
||
bool isExpEnough = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Exp + _ReplaceExpConsume >= 0;
|
||
bool isMoneyEnough = GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType(MONEYTYPE.MONEYTYPE_COIN) + _ReplaceMoneyConsume >= 0;
|
||
|
||
// 替代后不满足
|
||
if (!isExpEnough || !isMoneyEnough)
|
||
{
|
||
_IsCanLevelUpSkill &= false; //是否可以升级技能 默认为true
|
||
_ResLack.SetActive(true);
|
||
_ResEnough.SetActive(false);
|
||
_ResLackMoney.SetActive(false);
|
||
_ResLackEXP.SetActive(false);
|
||
_PreSkillNotEnough.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
if (!_IsCanLevelUpSkill && alreadyLearnNeedSkill == false)
|
||
{
|
||
_PreSkillNotEnough.SetActive(true);
|
||
_ResLack.SetActive(false);
|
||
_ResEnough.SetActive(false);
|
||
_ResLackMoney.SetActive(false);
|
||
_ResLackEXP.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
_PreSkillNotEnough.SetActive(false);
|
||
//两者都消耗
|
||
if ((_ReplaceExpConsume < 0 && isExpEnough) && (_ReplaceMoneyConsume < 0 && isMoneyEnough))
|
||
{
|
||
_ResLack.SetActive(false);
|
||
_ResEnough.SetActive(true);
|
||
_ResLackMoney.SetActive(false);
|
||
_ResLackEXP.SetActive(false);
|
||
}
|
||
//只消耗银票
|
||
else if (_ReplaceMoneyConsume < 0 && isMoneyEnough)
|
||
{
|
||
_ResLack.SetActive(false);
|
||
_ResEnough.SetActive(false);
|
||
_ResLackMoney.SetActive(true);
|
||
_ResLackEXP.SetActive(false);
|
||
}
|
||
//只消耗经验
|
||
else if (_ReplaceExpConsume < 0 && isExpEnough)
|
||
{
|
||
_ResLack.SetActive(false);
|
||
_ResEnough.SetActive(false);
|
||
_ResLackMoney.SetActive(false);
|
||
_ResLackEXP.SetActive(true);
|
||
}
|
||
//不替代就满足
|
||
else if (_ReplaceExpConsume >= 0 && _ReplaceMoneyConsume >= 0)
|
||
{
|
||
_ResLack.SetActive(false);
|
||
_ResEnough.SetActive(false);
|
||
_ResLackMoney.SetActive(false);
|
||
_ResLackEXP.SetActive(false);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
AdjustLvUpBtn();
|
||
}
|
||
|
||
private bool alreadyLearnNeedSkill = false;
|
||
private void ShowLevelSkillCondition(SkillRootItem.SkillShowInfo skillShowInfo)
|
||
{
|
||
int exLv = 0;
|
||
OwnSkillData ownSkill = GameManager.gameManager.PlayerDataPool.GetOwnSkillInfo(skillShowInfo.SkillBase.Id);
|
||
if(ownSkill != null)
|
||
{
|
||
exLv = ownSkill.exSkillLevel;
|
||
}
|
||
|
||
if(skillShowInfo.SkillLevelUp == null)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var levelUpNextSkill = TableManager.GetSkillExByID(skillShowInfo.SkillLevelUp.Id + exLv, 0);
|
||
if (levelUpNextSkill == null)
|
||
return;
|
||
|
||
if (levelUpNextSkill != null)
|
||
{
|
||
_SkillNextDesc.text = levelUpNextSkill.SkillDesc;
|
||
_NextXiuwei.text = StrDictionary.GetClientDictionaryString("#{2829}", Utils.GetColorEnableGreen()+ levelUpNextSkill.CombatValue.ToString() + "</color>");
|
||
}
|
||
|
||
if (skillShowInfo.SkillLevelUp.IsMaxLevel > 0)
|
||
{
|
||
_NextLvPanel.SetActive(false);
|
||
_SkillNextDesc.gameObject.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
_NextLvPanel.SetActive(true);
|
||
_SkillNextDesc.gameObject.SetActive(true);
|
||
}
|
||
|
||
if (skillShowInfo.SkillLevelUp.Level > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level)
|
||
{
|
||
_LeardNeedLv.text = Utils.GetColorDisableRed() + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>";
|
||
_IsCanLevelUpSkill &= false;
|
||
}
|
||
else
|
||
{
|
||
_LeardNeedLv.text = Utils.GetColorEnableGreen() + skillShowInfo.SkillLevelUp.Level.ToString() + "</color>";
|
||
}
|
||
|
||
var needSkill = skillShowInfo.GetNeedSkillLvUp();
|
||
if (needSkill == null)
|
||
{
|
||
_LeardNeedPreSkill.gameObject.SetActive(false);
|
||
alreadyLearnNeedSkill = true;
|
||
}
|
||
else
|
||
{
|
||
_LeardNeedPreSkill.gameObject.SetActive(true);
|
||
alreadyLearnNeedSkill = false;
|
||
var skillBase = TableManager.GetSkillBaseByID(needSkill.BaseId, 0);
|
||
foreach (var skillInfo in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo)
|
||
{
|
||
var skillEx = skillInfo.SkillExTable;
|
||
if (skillEx == null)
|
||
continue;
|
||
|
||
if (skillEx.BaseId == needSkill.BaseId && skillEx.Level >= needSkill.Level)
|
||
{
|
||
alreadyLearnNeedSkill = true;
|
||
}
|
||
}
|
||
|
||
string skillName = skillBase.Name + needSkill.Level + StrDictionary.GetClientDictionaryString("#{5120}");
|
||
if (!alreadyLearnNeedSkill)
|
||
{
|
||
_LeardNeedPreSkill.text = Utils.GetColorDisableRed() + skillName + "</color>";
|
||
_IsCanLevelUpSkill = false;
|
||
}
|
||
else
|
||
{
|
||
_LeardNeedPreSkill.text = Utils.GetColorEnableGreen() + skillName + "</color>";
|
||
}
|
||
}
|
||
}
|
||
|
||
void OnLvUpClick()
|
||
{
|
||
string tips = "";
|
||
if ((GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.SkillExp != 0 && _ReplaceExpConsume < 0 )
|
||
&& (GameManager.gameManager.PlayerDataPool.Money.GetMoney_CoinBind() != 0 && _ReplaceMoneyConsume < 0))
|
||
{
|
||
tips = StrDictionary.GetClientDictionaryString("#{4744}", -_ReplaceExpConsume, -_ReplaceMoneyConsume);
|
||
}
|
||
else if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.SkillExp != 0 && _ReplaceExpConsume < 0)
|
||
{
|
||
tips = StrDictionary.GetClientDictionaryString("#{4745}", -_ReplaceExpConsume);
|
||
}
|
||
else if (GameManager.gameManager.PlayerDataPool.Money.GetMoney_CoinBind() != 0 && _ReplaceMoneyConsume < 0)
|
||
{
|
||
tips = StrDictionary.GetClientDictionaryString("#{4746}", -_ReplaceMoneyConsume);
|
||
}
|
||
else
|
||
{
|
||
OnLvUpClickOK();
|
||
return;
|
||
}
|
||
MessageBoxLogic.OpenOKCancelBox(tips, "", OnLvUpClickOK);
|
||
}
|
||
|
||
void OnLvUpClickOK()
|
||
{
|
||
_ReplaceExpConsume = 0;
|
||
_ReplaceMoneyConsume = 0;
|
||
if (_IsCanLevelUpSkill)
|
||
{
|
||
DoLevelUp();
|
||
//升级完毕判断下一级是否能升级
|
||
|
||
}
|
||
|
||
//if (_SelectedSkill.SkillLevelUp.SkillLevel == 1)
|
||
//{
|
||
// GlobalEffectMgr.PlayerNormalEffect("TX_ui_jihuochenggong");
|
||
//}
|
||
//else
|
||
//{
|
||
// GlobalEffectMgr.PlayerNormalEffect("TX_ui_shenjichenggong");
|
||
//}
|
||
}
|
||
|
||
public void LevelUp()
|
||
{
|
||
if (_SelectedSkill.SkillLevelUp.SkillLevel == 1)
|
||
{
|
||
GlobalEffectMgr.PlayerNormalEffect("TX_ui_jihuochenggong");
|
||
}
|
||
else
|
||
{
|
||
GlobalEffectMgr.PlayerNormalEffect("TX_ui_shenjichenggong");
|
||
}
|
||
|
||
AdjustLvUpBtn();
|
||
}
|
||
|
||
void AdjustLvUpBtn()
|
||
{
|
||
if (_IsCanLevelUpSkill)
|
||
{
|
||
_BtnLvUp.interactable = true;
|
||
}
|
||
else
|
||
{
|
||
_BtnLvUp.interactable = false;
|
||
}
|
||
}
|
||
|
||
void DoLevelUp()
|
||
{
|
||
//发包
|
||
CG_ASK_LEVELUPSKILL packet = (CG_ASK_LEVELUPSKILL)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_LEVELUPSKILL);
|
||
packet.SetSkillId(_SelectedSkill.SkillLevelUp.Id);
|
||
packet.SendPacket();
|
||
}
|
||
|
||
public void OnHelpClick()
|
||
{
|
||
|
||
}
|
||
#endregion
|
||
|
||
#region Skill Use
|
||
|
||
public const string TALENT_PAGE_LOCK_STR = "Locked";
|
||
|
||
public UISubScollMenu _TalentPageContainer; // 技能页菜单容器
|
||
public UIContainerBase _TalentContainer;
|
||
public Text _TalentPageName;
|
||
public SkillBarItem[] _SkillBarItems;
|
||
public GameObject _PageOpenPanel;
|
||
public GameObject _PageLockPanel;
|
||
public UIContainerBase _PageConditionContainer;
|
||
|
||
public Image _DragIcon;
|
||
public int _DragSkillOwnIdx { get; set; }
|
||
public SkillBarItem _DragSkillBar { get; set; }
|
||
|
||
private List<string> _TalentPageStrs;
|
||
public UserConfigData.SkillSavePage _CurSkillPage;
|
||
|
||
// 显示技能组合面板
|
||
public void InitChangeInfo(int pageCount)
|
||
{
|
||
// 显示技能组合面板左侧菜单
|
||
if (_TalentPageStrs == null)
|
||
{
|
||
_TalentPageStrs = new List<string>();
|
||
_TalentPageStrs.Add(StrDictionary.GetClientDictionaryString("#{4720}"));
|
||
_TalentPageStrs.Add(StrDictionary.GetClientDictionaryString("#{4721}"));
|
||
_TalentPageStrs.Add(StrDictionary.GetClientDictionaryString("#{4722}"));
|
||
_TalentPageStrs.Add(StrDictionary.GetClientDictionaryString("#{4723}"));
|
||
_TalentPageStrs.Add(StrDictionary.GetClientDictionaryString("#{4724}"));
|
||
}
|
||
|
||
// 获取开启技能页数
|
||
//int pageCount = GetActiveTalentPageCount();
|
||
|
||
_TalentPageContainer.Clear();
|
||
|
||
// 先显示已被使用的页面
|
||
for (int i = 0; i < pageCount; ++i)
|
||
{
|
||
_TalentPageContainer.PushMenu(_TalentPageStrs[i]);
|
||
}
|
||
|
||
// 未被开启的给与提示
|
||
for (int i = pageCount; i < _TalentPageStrs.Count; ++i)
|
||
{
|
||
_TalentPageContainer.PushMenu(TALENT_PAGE_LOCK_STR);
|
||
}
|
||
|
||
UserConfigData.LoadAllSkillPage(GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid.ToString());
|
||
if (UserConfigData._CurSkillPage == null)
|
||
{
|
||
_TalentPageContainer.ShowDefaultFirst();
|
||
}
|
||
else
|
||
{
|
||
_TalentPageContainer.ShowMenu(_TalentPageStrs[UserConfigData._CurSkillPage.PageIdx]);
|
||
}
|
||
|
||
//OnTalentPageSelect(_TalentPageStrs[0]);
|
||
}
|
||
|
||
// 选中技能组合页面按钮回调
|
||
public void OnTalentPageSelect(object selectPage)
|
||
{
|
||
string pageName = selectPage as string;
|
||
|
||
// 显示被锁界面
|
||
if (pageName == TALENT_PAGE_LOCK_STR)
|
||
{
|
||
_PageOpenPanel.SetActive(false);
|
||
_PageLockPanel.SetActive(true);
|
||
|
||
_PageConditionContainer.InitContentItem(TableManager.GetSkillBoxOpen().Values);
|
||
}
|
||
else
|
||
{
|
||
// 更具页面索引,显示玩家具体组合页面的技能
|
||
_PageOpenPanel.SetActive(true);
|
||
_PageLockPanel.SetActive(false);
|
||
|
||
int idx = _TalentPageStrs.IndexOf(pageName);
|
||
|
||
InitSkillPage(idx);
|
||
|
||
// 显示技能图标
|
||
for (int i = 0; i < _CurSkillPage.SkillIdxs.Length; ++i)
|
||
{
|
||
if (i < _SkillBarItems.Length)
|
||
{
|
||
_SkillBarItems[i].InitSkillBar(_CurSkillPage.SkillIdxs[i], i);
|
||
}
|
||
}
|
||
|
||
UserConfigData._CurSkillPage = _CurSkillPage;
|
||
}
|
||
}
|
||
|
||
public void InitSkillPage(int idx)
|
||
{
|
||
if (UserConfigData._SkillPages == null)
|
||
return;
|
||
|
||
if (_CurSkillPage != null)
|
||
{
|
||
_CurSkillPage.IsUsing = 0;
|
||
_CurSkillPage = null;
|
||
}
|
||
|
||
foreach (var skillPage in UserConfigData._SkillPages)
|
||
{
|
||
if (skillPage.RoleGuid == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid
|
||
&& skillPage.PageIdx == idx)
|
||
{
|
||
_CurSkillPage = skillPage;
|
||
_CurSkillPage.IsUsing = 1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 当玩家没有使用任一种组合,制定一套基础的代替
|
||
if (_CurSkillPage == null)
|
||
{
|
||
_TalentPageName.text = StrDictionary.GetClientDictionaryString("#{4726}");
|
||
_CurSkillPage = new UserConfigData.SkillSavePage();
|
||
_CurSkillPage.RoleGuid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid;
|
||
_CurSkillPage.PageIdx = idx;
|
||
_CurSkillPage.PageName = _TalentPageName.text;
|
||
_CurSkillPage.IsUsing = 1;
|
||
|
||
_CurSkillPage.SkillIdxs = new int[UserConfigData.SkillSavePage.PAGE_SKILL_NUM]
|
||
{
|
||
-1,-1,-1,-1
|
||
};
|
||
|
||
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
|
||
LogModule.WarningLog("OnTalentPageSelect : " + Time.realtimeSinceStartup);
|
||
for (int _skillIndex = 0; _skillIndex < mainPlayer.OwnSkillInfo.Length; _skillIndex++)
|
||
{
|
||
if (mainPlayer.OwnSkillInfo[_skillIndex].SkillBaseTable == null)
|
||
continue;
|
||
|
||
if ((mainPlayer.OwnSkillInfo[_skillIndex].SkillBaseTable.SkillClass & (int)SKILLCLASS.SIMPLEATTACK) != 0)
|
||
continue;
|
||
|
||
if ((mainPlayer.OwnSkillInfo[_skillIndex].SkillBaseTable.SkillClass & (int)SKILLCLASS.AUTOREPEAT) == 0 &&
|
||
(mainPlayer.OwnSkillInfo[_skillIndex].SkillBaseTable.SkillClass & (int)SKILLCLASS.XP) == 0)
|
||
{
|
||
for (int _skillBarIndex = 0; _skillBarIndex < _CurSkillPage.SkillIdxs.Length; _skillBarIndex++)
|
||
{
|
||
if (_CurSkillPage.SkillIdxs[_skillBarIndex] < 0)
|
||
{
|
||
_CurSkillPage.SkillIdxs[_skillBarIndex] = _skillIndex;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
UserConfigData._SkillPages.Add(_CurSkillPage);
|
||
}
|
||
else
|
||
{
|
||
_TalentPageName.text = _CurSkillPage.PageName;
|
||
}
|
||
|
||
_SkillInfoPage.RefreshEquipedTag();
|
||
}
|
||
|
||
public void OnTalentPageNameChange()
|
||
{
|
||
InputBoxLogic.ShowInputBoxStatic(StrDictionary.GetClientDictionaryString("#{4725}"), "", OnTalentPageNameChangeReturn, 7);
|
||
}
|
||
|
||
private void OnTalentPageNameChangeReturn(string changeName)
|
||
{
|
||
if (string.IsNullOrEmpty(changeName))
|
||
return;
|
||
_TalentPageName.text = changeName;
|
||
_CurSkillPage.PageName = changeName;
|
||
}
|
||
|
||
private void SaveSkillPage()
|
||
{
|
||
if(_CurSkillPage!=null)
|
||
{
|
||
UserConfigData._CurSkillPage = _CurSkillPage;
|
||
UserConfigData.SaveSkillPages();
|
||
}
|
||
if(SkillBarLogic.Instance() != null)
|
||
SkillBarLogic.Instance().RefreshSkillBarInfo();
|
||
}
|
||
|
||
public bool CanDragSkillItem()
|
||
{
|
||
if (_TagPanel.GetShowingPage() == 1)
|
||
return true;
|
||
return false;
|
||
}
|
||
|
||
public void SetDragSkillIdx(SkillRootItem.SkillShowInfo showInfo)
|
||
{
|
||
if (showInfo == null || showInfo.SkillExTab == null)
|
||
{
|
||
_DragSkillOwnIdx = -1;
|
||
return;
|
||
}
|
||
|
||
for (int i = 0; i < Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo.Length; ++i)
|
||
{
|
||
if (showInfo.SkillExTab.SkillExID == Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo[i].SkillId)
|
||
{
|
||
_DragSkillOwnIdx = i;
|
||
|
||
return;
|
||
}
|
||
}
|
||
_DragSkillOwnIdx = -1;
|
||
}
|
||
|
||
public void ChangeSkillBar(int skillItemIdx)
|
||
{
|
||
|
||
if (_DragSkillOwnIdx < 0)
|
||
return;
|
||
|
||
if (skillItemIdx >= _CurSkillPage.SkillIdxs.Length)
|
||
return;
|
||
|
||
//SYK修改
|
||
for (int index = 0; index < _CurSkillPage.SkillIdxs.Length; index++)
|
||
{
|
||
//技能已经存在的情况
|
||
if (_CurSkillPage.SkillIdxs[index] == _DragSkillOwnIdx)
|
||
{
|
||
//index 技能存在位置下标
|
||
|
||
//目标位置ID与拖拽过来的技能ID相同
|
||
if (_CurSkillPage.SkillIdxs[skillItemIdx] == _DragSkillOwnIdx)
|
||
{
|
||
//不做操作 直接返回
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
//目标位置技能ID置为拖拽过来的ID
|
||
_CurSkillPage.SkillIdxs[skillItemIdx] = _DragSkillOwnIdx;
|
||
|
||
//将存在技能的ID置为-1
|
||
_CurSkillPage.SkillIdxs[index] = -1;
|
||
}
|
||
|
||
//刷新界面
|
||
for (int i = 0; i < _CurSkillPage.SkillIdxs.Length; ++i)
|
||
{
|
||
if (i < _SkillBarItems.Length)
|
||
{
|
||
_SkillBarItems[index].InitSkillBar(_CurSkillPage.SkillIdxs[index], index);
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
_CurSkillPage.SkillIdxs[skillItemIdx] = _DragSkillOwnIdx;
|
||
|
||
_SkillInfoPage.RefreshEquipedTag();
|
||
}
|
||
|
||
public void ExChangeSkillBar(int skillItemIdx)
|
||
{
|
||
if (_DragSkillOwnIdx < 0)
|
||
return;
|
||
|
||
if (skillItemIdx >= _CurSkillPage.SkillIdxs.Length)
|
||
return;
|
||
|
||
if (_DragSkillBar != null)
|
||
{
|
||
int tempIdx = _CurSkillPage.SkillIdxs[skillItemIdx];
|
||
_CurSkillPage.SkillIdxs[skillItemIdx] = _CurSkillPage.SkillIdxs[_DragSkillBar.SkillItemIdx];
|
||
_CurSkillPage.SkillIdxs[_DragSkillBar.SkillItemIdx] = tempIdx;
|
||
}
|
||
}
|
||
|
||
public void ClearSkillBar(int skillItemIdx)
|
||
{
|
||
if (skillItemIdx >= _CurSkillPage.SkillIdxs.Length)
|
||
return;
|
||
|
||
_CurSkillPage.SkillIdxs[skillItemIdx] = -1;
|
||
_SkillInfoPage.RefreshEquipedTag();
|
||
}
|
||
#endregion
|
||
|
||
#region 红点
|
||
|
||
public GameObject RedTips;
|
||
|
||
public void UpdateRedTips()
|
||
{
|
||
if (CanAnySkillLvUp())
|
||
{
|
||
RedTips.SetActive(true);
|
||
foreach (var subItem in _SkillClasses.SubBtns)
|
||
{
|
||
((UISkillSubMenu)subItem.Key).UpdateTips();
|
||
}
|
||
|
||
foreach (var skillItem in _SkillInfoPage.SkillItems)
|
||
{
|
||
skillItem.UpdateRedTips();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
RedTips.SetActive(false);
|
||
foreach (var subItem in _SkillClasses.SubBtns)
|
||
{
|
||
((UISkillSubMenu)subItem.Key).UpdateTips();
|
||
}
|
||
|
||
foreach (var skillItem in _SkillInfoPage.SkillItems)
|
||
{
|
||
skillItem.UpdateRedTips();
|
||
}
|
||
}
|
||
}
|
||
|
||
private static List<SkillRootItem.SkillShowInfo> totleList = null;
|
||
public static List<SkillRootItem.SkillShowInfo> GetAllSkillList()
|
||
{
|
||
// 全部可学技能列表,为未分类
|
||
totleList = new List<SkillRootItem.SkillShowInfo>();
|
||
// 保存玩家已经学的技能
|
||
var _MainPlayerOwnSkillInfo = Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo;
|
||
for (int index = 0; index < _MainPlayerOwnSkillInfo.Length; index++)
|
||
{
|
||
var showInfo = new SkillRootItem.SkillShowInfo();
|
||
showInfo.SkillExTab = _MainPlayerOwnSkillInfo[index].SkillExTable;
|
||
if (showInfo.SkillExTab == null)
|
||
continue;
|
||
|
||
showInfo.SkillBase = _MainPlayerOwnSkillInfo[index].SkillBaseTable;
|
||
Tab_SkillLevelUp skillnext = TableManager.GetSkillLevelUpByID(_MainPlayerOwnSkillInfo[index].SkillExTable.NextSkillId, 0);
|
||
showInfo.SkillLevelUp = skillnext;
|
||
if (!IsSimpleAttack(skillnext)) //脑残普攻
|
||
totleList.Add(showInfo);
|
||
}
|
||
|
||
// 获得所有可学技能列表
|
||
var learnList = TableManager.GetSkillLearn().Values;
|
||
foreach (var tabAct in learnList)
|
||
{
|
||
if (tabAct.Profession != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Profession)
|
||
continue;
|
||
|
||
// 获取每个技能相关信息
|
||
Tab_SkillEx skillEx = TableManager.GetSkillExByID(tabAct.SkillId, 0);
|
||
Tab_SkillBase skillBase = TableManager.GetSkillBaseByID(skillEx.BaseId, 0);
|
||
|
||
var skillInfo = totleList.Find((showInfo) =>
|
||
{
|
||
if (showInfo.SkillBase.Id == skillEx.BaseId)
|
||
{
|
||
return true;
|
||
}
|
||
return false;
|
||
});
|
||
|
||
if (skillInfo != null)
|
||
{
|
||
skillInfo.SkillLearn = tabAct;
|
||
}
|
||
else
|
||
{
|
||
SkillRootItem.SkillShowInfo showInfo = new SkillRootItem.SkillShowInfo();
|
||
showInfo.SkillLearn = tabAct;
|
||
showInfo.SkillBase = skillBase;
|
||
showInfo.SkillLevelUp = TableManager.GetSkillLevelUpByID(skillEx.SkillExID, 0);
|
||
totleList.Add(showInfo);
|
||
}
|
||
}
|
||
|
||
return totleList;
|
||
}
|
||
|
||
public static bool CanAnySkillLvUp()
|
||
{
|
||
//Debug.LogError("Count : " + GetAllSkillList().Count);
|
||
for(int i = 0; i < GetAllSkillList().Count; i++)
|
||
{
|
||
var skillInfo = SkillRootLogic.totleList[i];
|
||
var _IsOwnSkill = false;
|
||
var skillnext = skillInfo.SkillLevelUp;
|
||
|
||
if (skillnext == null)
|
||
continue;
|
||
|
||
if (IsSimpleAttack(skillnext))
|
||
continue;
|
||
|
||
if (!IsAlreadyHaveNeedSkill(skillnext, skillInfo.SkillBase))
|
||
continue;
|
||
|
||
if (skillnext == null)
|
||
continue;
|
||
|
||
if (skillnext.IsMaxLevel > 0)
|
||
continue;
|
||
|
||
if (skillnext.Level > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level)
|
||
continue;
|
||
|
||
var isItemEnough = true;
|
||
var isMoneyEnough = true;
|
||
var isExpEnough = true;
|
||
for (int index = 0; index < skillnext.getConsumTypeCount(); index++)
|
||
{
|
||
var type = skillnext.GetConsumTypebyIndex(index);
|
||
if (type != -1)
|
||
{
|
||
switch (type)
|
||
{
|
||
case (int)CONSUM_TYPE.PROPVAL:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.SkillExp < skillnext.GetConsumValbyIndex(0))
|
||
isExpEnough = false;
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.PROPPER:
|
||
{
|
||
//没配
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.ITEM:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(skillnext.GetConsumIdbyIndex(index)) < skillnext.GetConsumValbyIndex(index))
|
||
isItemEnough = false;
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.MONEY:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType(MONEYTYPE.MONEYTYPE_COIN_BIND) < skillnext.GetConsumValbyIndex(1))
|
||
isMoneyEnough = false;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (isExpEnough && isItemEnough && isMoneyEnough)
|
||
{
|
||
UpdateFunctionTips(true);
|
||
return true;
|
||
}
|
||
}
|
||
UpdateFunctionTips(false);
|
||
return false;
|
||
}
|
||
|
||
static bool IsSimpleAttack(Tab_SkillLevelUp skillTab)
|
||
{
|
||
if (skillTab == null)
|
||
return false;
|
||
|
||
if (skillTab.IsMaxLevel == 1)
|
||
return false;
|
||
|
||
for(int index = 0; index < skillTab.getConsumValCount(); index++)
|
||
{
|
||
if (skillTab.GetConsumValbyIndex(index) != -1)
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
public static void UpdateFunctionTips(bool state)
|
||
{
|
||
RedTipPoint.RedPointStateChange(RedTipPoint.PointType.Skill, state);
|
||
}
|
||
|
||
public static bool IsAlreadyHaveNeedSkill(Tab_SkillLevelUp skillNext, Tab_SkillBase skillBase)
|
||
{
|
||
var alreadyHaveSkill = true;
|
||
var isOwnSkill = false;
|
||
for(int index = 0; index < skillNext.getNeedSkillIdCount(); index++)
|
||
{
|
||
if(skillNext.GetNeedSkillIdbyIndex(index) != -1)
|
||
{
|
||
var needSkill = TableManager.GetSkillExByID(skillNext.GetNeedSkillIdbyIndex(index), 0);
|
||
if (needSkill == null)
|
||
continue;
|
||
if (needSkill.BaseId != skillBase.Id) //2级需要判断有1级,这个是不用判断的,必然有1级技能已经学会才能升级为2级
|
||
{
|
||
foreach (var ownSkill in Singleton<ObjManager>.GetInstance().MainPlayer.OwnSkillInfo)
|
||
{
|
||
var skillEx = ownSkill.SkillExTable;
|
||
if (skillEx == null)
|
||
continue;
|
||
|
||
if (needSkill.BaseId == skillEx.BaseId)
|
||
isOwnSkill = true;
|
||
|
||
if (needSkill.BaseId == skillEx.BaseId && skillEx.Level < needSkill.Level)
|
||
{
|
||
alreadyHaveSkill = false;
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
if (!isOwnSkill)
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
return alreadyHaveSkill;
|
||
}
|
||
|
||
public static bool CanSkillItemLvUp(SkillRootItem.SkillShowInfo skillShowInfo)
|
||
{
|
||
Tab_SkillLevelUp skillnext = skillShowInfo.SkillLevelUp;
|
||
|
||
if (skillnext == null)
|
||
return false;
|
||
|
||
if (skillnext.IsMaxLevel > 0)
|
||
return false;
|
||
|
||
if (IsSimpleAttack(skillnext))
|
||
return false;
|
||
|
||
if (!IsAlreadyHaveNeedSkill(skillnext, skillShowInfo.SkillBase))
|
||
return false;
|
||
|
||
if (skillnext.Level > GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level)
|
||
return false;
|
||
|
||
for (int index = 0; index < skillnext.getConsumTypeCount(); index++)
|
||
{
|
||
var type = skillnext.GetConsumTypebyIndex(index);
|
||
if (type != -1)
|
||
{
|
||
switch (type)
|
||
{
|
||
case (int)CONSUM_TYPE.PROPVAL:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.SkillExp < skillnext.GetConsumValbyIndex(0))
|
||
return false;
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.PROPPER:
|
||
{
|
||
//没配
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.ITEM:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.BackPack.GetItemCountByDataId(skillnext.GetConsumIdbyIndex(index)) < skillnext.GetConsumValbyIndex(index))
|
||
return false;
|
||
}
|
||
break;
|
||
case (int)CONSUM_TYPE.MONEY:
|
||
{
|
||
if (GameManager.gameManager.PlayerDataPool.Money.GetMoneyByType(MONEYTYPE.MONEYTYPE_COIN_BIND) < skillnext.GetConsumValbyIndex(index))
|
||
return false;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
#endregion
|
||
}
|