From eba494f9a050178f2f71f7bf2173a00a6fa32130 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期三, 17 十月 2018 15:53:45 +0800
Subject: [PATCH] 3687 【1.2.0】天赋功能
---
Core/GameEngine/Model/ConfigManager.cs | 2
Core/NetworkPackage/ServerPack/H03_MainCharacter/H0311_tagDeleteSkill.cs | 34
System/Skill/TalentModel.cs | 491 ++++++++++++++
System/Skill/TalentTreeScriptable.cs.meta | 12
Utility/EnumHelper.cs | 1
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs | 16
System/Skill/TalentModel.cs.meta | 12
System/Skill/TalentWin.cs.meta | 12
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs.meta | 6
Core/GameEngine/Model/Config/TalentConfig.cs.meta | 12
Core/GameEngine/Model/Config/SkillConfig.cs | 433 ++++++------
Core/GameEngine/DataToCtl/PackageRegedit.cs | 1
System/Skill/TalentSkillBehaviour.cs.meta | 12
Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs | 1
System/Skill/TalentWin.cs | 502 ++++++++++++++
System/Skill/TalentTreeScriptable.cs | 201 +++++
System/Skill/TalentSkillBehaviour.cs | 80 ++
System/Skill/TalentSeriesBehaviour.cs.meta | 12
Core/GameEngine/Model/Config/TalentConfig.cs | 47 +
System/Skill/TalentSeriesBehaviour.cs | 77 ++
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs | 37
System/Skill/SkillPanel.cs | 15
Core/GameEngine/Model/Player/PlayerDatas.cs | 3
Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs | 2
System/WindowBase/ModelCenter.cs | 1
Core/GameEngine/Model/Config/SkillConfig.cs.meta | 2
Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs.meta | 12
27 files changed, 1,786 insertions(+), 250 deletions(-)
diff --git a/Core/GameEngine/DataToCtl/PackageRegedit.cs b/Core/GameEngine/DataToCtl/PackageRegedit.cs
index 5fd7ca9..462b347 100644
--- a/Core/GameEngine/DataToCtl/PackageRegedit.cs
+++ b/Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -11,6 +11,7 @@
public static void Init()
{
// 鐧昏鐩稿簲鐨勬暟鎹綋鍙婂搴旂殑鏁版嵁杞�昏緫绫�
+ Register(typeof(H0311_tagDeleteSkill), typeof(DTC0311_tagDeleteSkill));
Register(typeof(HB106_tagMCNotifyPlayerMove), typeof(DTCB106_tagMCNotifyPlayerMove));
Register(typeof(H0132_tagCreateRoleSucess), typeof(DTC0132_tagCreateRoleSucess));
Register(typeof(HA326_tagMCNPCIDCollectionCntInfo), typeof(DTCA326_tagMCNPCIDCollectionCntInfo));
diff --git a/Core/GameEngine/Model/Config/SkillConfig.cs b/Core/GameEngine/Model/Config/SkillConfig.cs
index 89212d3..7d0fa88 100644
--- a/Core/GameEngine/Model/Config/SkillConfig.cs
+++ b/Core/GameEngine/Model/Config/SkillConfig.cs
@@ -1,6 +1,6 @@
锘�//--------------------------------------------------------
// [Author]: 绗簩涓栫晫
-// [ Date ]: Thursday, May 03, 2018
+// [ Date ]: Wednesday, September 26, 2018
//--------------------------------------------------------
using UnityEngine;
@@ -11,77 +11,78 @@
public partial class SkillConfig : ConfigBase {
- public int SkillID { get ; private set ; }
- public string SkillName { get ; private set; }
- public int SkillTypeID { get ; private set ; }
- public int SkillLV { get ; private set ; }
- public int SkillMaxLV { get ; private set ; }
- public int UseType { get ; private set ; }
- public int FuncType { get ; private set ; }
- public int CastTime { get ; private set ; }
- public int SkillType { get ; private set ; }
- public int HurtType { get ; private set ; }
- public int ContinueUse { get ; private set ; }
- public int AtkType { get ; private set ; }
- public int AtkRadius { get ; private set ; }
- public int Tag { get ; private set ; }
- public int AtkDist { get ; private set ; }
- public int StiffTime { get ; private set ; }
- public int CoolDownTime { get ; private set ; }
- public int MP { get ; private set ; }
- public int HP { get ; private set ; }
- public int XP { get ; private set ; }
- public int UseItemID { get ; private set ; }
- public int UseItemCount { get ; private set ; }
- public int Effect1 { get ; private set ; }
- public int EffectValue11 { get ; private set ; }
- public int EffectValue12 { get ; private set ; }
- public int EffectValue13 { get ; private set ; }
- public int Effect2 { get ; private set ; }
- public int EffectValue21 { get ; private set ; }
- public int EffectValue22 { get ; private set ; }
- public int EffectValue23 { get ; private set ; }
- public int Effect3 { get ; private set ; }
- public int EffectValue31 { get ; private set ; }
- public int EffectValue32 { get ; private set ; }
- public int EffectValue33 { get ; private set ; }
- public int Effect4 { get ; private set ; }
- public int EffectValue41 { get ; private set ; }
- public int EffectValue42 { get ; private set ; }
- public int EffectValue43 { get ; private set ; }
- public int Effect5 { get ; private set ; }
- public int EffectValue51 { get ; private set ; }
- public int EffectValue52 { get ; private set ; }
- public int EffectValue53 { get ; private set ; }
- public int Effect6 { get ; private set ; }
- public int EffectValue61 { get ; private set ; }
- public int EffectValue62 { get ; private set ; }
- public int EffectValue63 { get ; private set ; }
- public int LearnSkillReq { get ; private set ; }
- public int LearnSkillLV { get ; private set ; }
- public int LearnLVReq { get ; private set ; }
- public int FightPower { get ; private set ; }
- public int LVUpCostMoneyType { get ; private set ; }
- public int LVUpCostMoney { get ; private set ; }
- public int LVUpCostExp { get ; private set ; }
- public int ClientActionLimit { get ; private set ; }
- public int ClientSkillSeriesLimit { get ; private set ; }
- public int SkillOfSeries { get ; private set ; }
- public int ExpendMPRate { get ; private set ; }
- public int ExAttr1 { get ; private set ; }
- public int ExAttr3 { get ; private set ; }
- public int ExAttr4 { get ; private set ; }
- public int ExAttr5 { get ; private set ; }
- public int WarnInfo { get ; private set ; }
- public int CtrlActionID { get ; private set ; }
- public int BuffEffectID { get ; private set ; }
- public int EffectName { get ; private set ; }
- public string IconName { get ; private set; }
- public string SkillNameIcon { get ; private set; }
- public string Description { get ; private set; }
- public string BuffDescription { get ; private set; }
- public string Skillsource { get ; private set; }
- public int Skillactmark { get ; private set ; }
+ public int SkillID { get ; private set ; }
+ public string SkillName { get ; private set; }
+ public int SkillTypeID { get ; private set ; }
+ public int SkillLV { get ; private set ; }
+ public int SkillMaxLV { get ; private set ; }
+ public int UseType { get ; private set ; }
+ public int FuncType { get ; private set ; }
+ public int CastTime { get ; private set ; }
+ public int SkillType { get ; private set ; }
+ public int HurtType { get ; private set ; }
+ public int ContinueUse { get ; private set ; }
+ public int AtkType { get ; private set ; }
+ public int AtkRadius { get ; private set ; }
+ public int Tag { get ; private set ; }
+ public int AtkDist { get ; private set ; }
+ public int StiffTime { get ; private set ; }
+ public int CoolDownTime { get ; private set ; }
+ public int MP { get ; private set ; }
+ public int HP { get ; private set ; }
+ public int XP { get ; private set ; }
+ public int UseItemID { get ; private set ; }
+ public int UseItemCount { get ; private set ; }
+ public int Effect1 { get ; private set ; }
+ public int EffectValue11 { get ; private set ; }
+ public int EffectValue12 { get ; private set ; }
+ public int EffectValue13 { get ; private set ; }
+ public int Effect2 { get ; private set ; }
+ public int EffectValue21 { get ; private set ; }
+ public int EffectValue22 { get ; private set ; }
+ public int EffectValue23 { get ; private set ; }
+ public int Effect3 { get ; private set ; }
+ public int EffectValue31 { get ; private set ; }
+ public int EffectValue32 { get ; private set ; }
+ public int EffectValue33 { get ; private set ; }
+ public int Effect4 { get ; private set ; }
+ public int EffectValue41 { get ; private set ; }
+ public int EffectValue42 { get ; private set ; }
+ public int EffectValue43 { get ; private set ; }
+ public int Effect5 { get ; private set ; }
+ public int EffectValue51 { get ; private set ; }
+ public int EffectValue52 { get ; private set ; }
+ public int EffectValue53 { get ; private set ; }
+ public int Effect6 { get ; private set ; }
+ public int EffectValue61 { get ; private set ; }
+ public int EffectValue62 { get ; private set ; }
+ public int EffectValue63 { get ; private set ; }
+ public int LearnSkillReq { get ; private set ; }
+ public int LearnSkillLV { get ; private set ; }
+ public int LearnLVReq { get ; private set ; }
+ public int LearnSkillPointReq { get ; private set ; }
+ public int FightPower { get ; private set ; }
+ public int LVUpCostMoneyType { get ; private set ; }
+ public int LVUpCostMoney { get ; private set ; }
+ public int LVUpCostExp { get ; private set ; }
+ public int ClientActionLimit { get ; private set ; }
+ public int ClientSkillSeriesLimit { get ; private set ; }
+ public int SkillOfSeries { get ; private set ; }
+ public int ExpendMPRate { get ; private set ; }
+ public int ExAttr1 { get ; private set ; }
+ public int ExAttr3 { get ; private set ; }
+ public int ExAttr4 { get ; private set ; }
+ public int ExAttr5 { get ; private set ; }
+ public int WarnInfo { get ; private set ; }
+ public int CtrlActionID { get ; private set ; }
+ public int BuffEffectID { get ; private set ; }
+ public int EffectName { get ; private set ; }
+ public string IconName { get ; private set; }
+ public string SkillNameIcon { get ; private set; }
+ public string Description { get ; private set; }
+ public string BuffDescription { get ; private set; }
+ public string Skillsource { get ; private set; }
+ public int Skillactmark { get ; private set ; }
public int BuffDisplay { get ; private set ; }
public override string getKey()
@@ -92,149 +93,151 @@
public override void Parse() {
try
{
- SkillID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
-
- SkillName = rawContents[1].Trim();
-
- SkillTypeID=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
-
- SkillLV=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
-
- SkillMaxLV=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0;
-
- UseType=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0;
-
- FuncType=IsNumeric(rawContents[6]) ? int.Parse(rawContents[6]):0;
-
- CastTime=IsNumeric(rawContents[7]) ? int.Parse(rawContents[7]):0;
-
- SkillType=IsNumeric(rawContents[8]) ? int.Parse(rawContents[8]):0;
-
- HurtType=IsNumeric(rawContents[9]) ? int.Parse(rawContents[9]):0;
-
- ContinueUse=IsNumeric(rawContents[10]) ? int.Parse(rawContents[10]):0;
-
- AtkType=IsNumeric(rawContents[11]) ? int.Parse(rawContents[11]):0;
-
- AtkRadius=IsNumeric(rawContents[12]) ? int.Parse(rawContents[12]):0;
-
- Tag=IsNumeric(rawContents[13]) ? int.Parse(rawContents[13]):0;
-
- AtkDist=IsNumeric(rawContents[14]) ? int.Parse(rawContents[14]):0;
-
- StiffTime=IsNumeric(rawContents[15]) ? int.Parse(rawContents[15]):0;
-
- CoolDownTime=IsNumeric(rawContents[16]) ? int.Parse(rawContents[16]):0;
-
- MP=IsNumeric(rawContents[17]) ? int.Parse(rawContents[17]):0;
-
- HP=IsNumeric(rawContents[18]) ? int.Parse(rawContents[18]):0;
-
- XP=IsNumeric(rawContents[19]) ? int.Parse(rawContents[19]):0;
-
- UseItemID=IsNumeric(rawContents[20]) ? int.Parse(rawContents[20]):0;
-
- UseItemCount=IsNumeric(rawContents[21]) ? int.Parse(rawContents[21]):0;
-
- Effect1=IsNumeric(rawContents[22]) ? int.Parse(rawContents[22]):0;
-
- EffectValue11=IsNumeric(rawContents[23]) ? int.Parse(rawContents[23]):0;
-
- EffectValue12=IsNumeric(rawContents[24]) ? int.Parse(rawContents[24]):0;
-
- EffectValue13=IsNumeric(rawContents[25]) ? int.Parse(rawContents[25]):0;
-
- Effect2=IsNumeric(rawContents[26]) ? int.Parse(rawContents[26]):0;
-
- EffectValue21=IsNumeric(rawContents[27]) ? int.Parse(rawContents[27]):0;
-
- EffectValue22=IsNumeric(rawContents[28]) ? int.Parse(rawContents[28]):0;
-
- EffectValue23=IsNumeric(rawContents[29]) ? int.Parse(rawContents[29]):0;
-
- Effect3=IsNumeric(rawContents[30]) ? int.Parse(rawContents[30]):0;
-
- EffectValue31=IsNumeric(rawContents[31]) ? int.Parse(rawContents[31]):0;
-
- EffectValue32=IsNumeric(rawContents[32]) ? int.Parse(rawContents[32]):0;
-
- EffectValue33=IsNumeric(rawContents[33]) ? int.Parse(rawContents[33]):0;
-
- Effect4=IsNumeric(rawContents[34]) ? int.Parse(rawContents[34]):0;
-
- EffectValue41=IsNumeric(rawContents[35]) ? int.Parse(rawContents[35]):0;
-
- EffectValue42=IsNumeric(rawContents[36]) ? int.Parse(rawContents[36]):0;
-
- EffectValue43=IsNumeric(rawContents[37]) ? int.Parse(rawContents[37]):0;
-
- Effect5=IsNumeric(rawContents[38]) ? int.Parse(rawContents[38]):0;
-
- EffectValue51=IsNumeric(rawContents[39]) ? int.Parse(rawContents[39]):0;
-
- EffectValue52=IsNumeric(rawContents[40]) ? int.Parse(rawContents[40]):0;
-
- EffectValue53=IsNumeric(rawContents[41]) ? int.Parse(rawContents[41]):0;
-
- Effect6=IsNumeric(rawContents[42]) ? int.Parse(rawContents[42]):0;
-
- EffectValue61=IsNumeric(rawContents[43]) ? int.Parse(rawContents[43]):0;
-
- EffectValue62=IsNumeric(rawContents[44]) ? int.Parse(rawContents[44]):0;
-
- EffectValue63=IsNumeric(rawContents[45]) ? int.Parse(rawContents[45]):0;
-
- LearnSkillReq=IsNumeric(rawContents[46]) ? int.Parse(rawContents[46]):0;
-
- LearnSkillLV=IsNumeric(rawContents[47]) ? int.Parse(rawContents[47]):0;
-
- LearnLVReq=IsNumeric(rawContents[48]) ? int.Parse(rawContents[48]):0;
-
- FightPower=IsNumeric(rawContents[49]) ? int.Parse(rawContents[49]):0;
-
- LVUpCostMoneyType=IsNumeric(rawContents[50]) ? int.Parse(rawContents[50]):0;
-
- LVUpCostMoney=IsNumeric(rawContents[51]) ? int.Parse(rawContents[51]):0;
-
- LVUpCostExp=IsNumeric(rawContents[52]) ? int.Parse(rawContents[52]):0;
-
- ClientActionLimit=IsNumeric(rawContents[53]) ? int.Parse(rawContents[53]):0;
-
- ClientSkillSeriesLimit=IsNumeric(rawContents[54]) ? int.Parse(rawContents[54]):0;
-
- SkillOfSeries=IsNumeric(rawContents[55]) ? int.Parse(rawContents[55]):0;
-
- ExpendMPRate=IsNumeric(rawContents[56]) ? int.Parse(rawContents[56]):0;
-
- ExAttr1=IsNumeric(rawContents[57]) ? int.Parse(rawContents[57]):0;
-
- ExAttr3=IsNumeric(rawContents[58]) ? int.Parse(rawContents[58]):0;
-
- ExAttr4=IsNumeric(rawContents[59]) ? int.Parse(rawContents[59]):0;
-
- ExAttr5=IsNumeric(rawContents[60]) ? int.Parse(rawContents[60]):0;
-
- WarnInfo=IsNumeric(rawContents[61]) ? int.Parse(rawContents[61]):0;
-
- CtrlActionID=IsNumeric(rawContents[62]) ? int.Parse(rawContents[62]):0;
-
- BuffEffectID=IsNumeric(rawContents[63]) ? int.Parse(rawContents[63]):0;
-
- EffectName=IsNumeric(rawContents[64]) ? int.Parse(rawContents[64]):0;
-
- IconName = rawContents[65].Trim();
-
- SkillNameIcon = rawContents[66].Trim();
-
- Description = rawContents[67].Trim();
-
- BuffDescription = rawContents[68].Trim();
-
- Skillsource = rawContents[69].Trim();
-
- Skillactmark=IsNumeric(rawContents[70]) ? int.Parse(rawContents[70]):0;
-
- BuffDisplay=IsNumeric(rawContents[71]) ? int.Parse(rawContents[71]):0;
+ SkillID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
+
+ SkillName = rawContents[1].Trim();
+
+ SkillTypeID=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
+
+ SkillLV=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
+
+ SkillMaxLV=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0;
+
+ UseType=IsNumeric(rawContents[5]) ? int.Parse(rawContents[5]):0;
+
+ FuncType=IsNumeric(rawContents[6]) ? int.Parse(rawContents[6]):0;
+
+ CastTime=IsNumeric(rawContents[7]) ? int.Parse(rawContents[7]):0;
+
+ SkillType=IsNumeric(rawContents[8]) ? int.Parse(rawContents[8]):0;
+
+ HurtType=IsNumeric(rawContents[9]) ? int.Parse(rawContents[9]):0;
+
+ ContinueUse=IsNumeric(rawContents[10]) ? int.Parse(rawContents[10]):0;
+
+ AtkType=IsNumeric(rawContents[11]) ? int.Parse(rawContents[11]):0;
+
+ AtkRadius=IsNumeric(rawContents[12]) ? int.Parse(rawContents[12]):0;
+
+ Tag=IsNumeric(rawContents[13]) ? int.Parse(rawContents[13]):0;
+
+ AtkDist=IsNumeric(rawContents[14]) ? int.Parse(rawContents[14]):0;
+
+ StiffTime=IsNumeric(rawContents[15]) ? int.Parse(rawContents[15]):0;
+
+ CoolDownTime=IsNumeric(rawContents[16]) ? int.Parse(rawContents[16]):0;
+
+ MP=IsNumeric(rawContents[17]) ? int.Parse(rawContents[17]):0;
+
+ HP=IsNumeric(rawContents[18]) ? int.Parse(rawContents[18]):0;
+
+ XP=IsNumeric(rawContents[19]) ? int.Parse(rawContents[19]):0;
+
+ UseItemID=IsNumeric(rawContents[20]) ? int.Parse(rawContents[20]):0;
+
+ UseItemCount=IsNumeric(rawContents[21]) ? int.Parse(rawContents[21]):0;
+
+ Effect1=IsNumeric(rawContents[22]) ? int.Parse(rawContents[22]):0;
+
+ EffectValue11=IsNumeric(rawContents[23]) ? int.Parse(rawContents[23]):0;
+
+ EffectValue12=IsNumeric(rawContents[24]) ? int.Parse(rawContents[24]):0;
+
+ EffectValue13=IsNumeric(rawContents[25]) ? int.Parse(rawContents[25]):0;
+
+ Effect2=IsNumeric(rawContents[26]) ? int.Parse(rawContents[26]):0;
+
+ EffectValue21=IsNumeric(rawContents[27]) ? int.Parse(rawContents[27]):0;
+
+ EffectValue22=IsNumeric(rawContents[28]) ? int.Parse(rawContents[28]):0;
+
+ EffectValue23=IsNumeric(rawContents[29]) ? int.Parse(rawContents[29]):0;
+
+ Effect3=IsNumeric(rawContents[30]) ? int.Parse(rawContents[30]):0;
+
+ EffectValue31=IsNumeric(rawContents[31]) ? int.Parse(rawContents[31]):0;
+
+ EffectValue32=IsNumeric(rawContents[32]) ? int.Parse(rawContents[32]):0;
+
+ EffectValue33=IsNumeric(rawContents[33]) ? int.Parse(rawContents[33]):0;
+
+ Effect4=IsNumeric(rawContents[34]) ? int.Parse(rawContents[34]):0;
+
+ EffectValue41=IsNumeric(rawContents[35]) ? int.Parse(rawContents[35]):0;
+
+ EffectValue42=IsNumeric(rawContents[36]) ? int.Parse(rawContents[36]):0;
+
+ EffectValue43=IsNumeric(rawContents[37]) ? int.Parse(rawContents[37]):0;
+
+ Effect5=IsNumeric(rawContents[38]) ? int.Parse(rawContents[38]):0;
+
+ EffectValue51=IsNumeric(rawContents[39]) ? int.Parse(rawContents[39]):0;
+
+ EffectValue52=IsNumeric(rawContents[40]) ? int.Parse(rawContents[40]):0;
+
+ EffectValue53=IsNumeric(rawContents[41]) ? int.Parse(rawContents[41]):0;
+
+ Effect6=IsNumeric(rawContents[42]) ? int.Parse(rawContents[42]):0;
+
+ EffectValue61=IsNumeric(rawContents[43]) ? int.Parse(rawContents[43]):0;
+
+ EffectValue62=IsNumeric(rawContents[44]) ? int.Parse(rawContents[44]):0;
+
+ EffectValue63=IsNumeric(rawContents[45]) ? int.Parse(rawContents[45]):0;
+
+ LearnSkillReq=IsNumeric(rawContents[46]) ? int.Parse(rawContents[46]):0;
+
+ LearnSkillLV=IsNumeric(rawContents[47]) ? int.Parse(rawContents[47]):0;
+
+ LearnLVReq=IsNumeric(rawContents[48]) ? int.Parse(rawContents[48]):0;
+
+ LearnSkillPointReq=IsNumeric(rawContents[49]) ? int.Parse(rawContents[49]):0;
+
+ FightPower=IsNumeric(rawContents[50]) ? int.Parse(rawContents[50]):0;
+
+ LVUpCostMoneyType=IsNumeric(rawContents[51]) ? int.Parse(rawContents[51]):0;
+
+ LVUpCostMoney=IsNumeric(rawContents[52]) ? int.Parse(rawContents[52]):0;
+
+ LVUpCostExp=IsNumeric(rawContents[53]) ? int.Parse(rawContents[53]):0;
+
+ ClientActionLimit=IsNumeric(rawContents[54]) ? int.Parse(rawContents[54]):0;
+
+ ClientSkillSeriesLimit=IsNumeric(rawContents[55]) ? int.Parse(rawContents[55]):0;
+
+ SkillOfSeries=IsNumeric(rawContents[56]) ? int.Parse(rawContents[56]):0;
+
+ ExpendMPRate=IsNumeric(rawContents[57]) ? int.Parse(rawContents[57]):0;
+
+ ExAttr1=IsNumeric(rawContents[58]) ? int.Parse(rawContents[58]):0;
+
+ ExAttr3=IsNumeric(rawContents[59]) ? int.Parse(rawContents[59]):0;
+
+ ExAttr4=IsNumeric(rawContents[60]) ? int.Parse(rawContents[60]):0;
+
+ ExAttr5=IsNumeric(rawContents[61]) ? int.Parse(rawContents[61]):0;
+
+ WarnInfo=IsNumeric(rawContents[62]) ? int.Parse(rawContents[62]):0;
+
+ CtrlActionID=IsNumeric(rawContents[63]) ? int.Parse(rawContents[63]):0;
+
+ BuffEffectID=IsNumeric(rawContents[64]) ? int.Parse(rawContents[64]):0;
+
+ EffectName=IsNumeric(rawContents[65]) ? int.Parse(rawContents[65]):0;
+
+ IconName = rawContents[66].Trim();
+
+ SkillNameIcon = rawContents[67].Trim();
+
+ Description = rawContents[68].Trim();
+
+ BuffDescription = rawContents[69].Trim();
+
+ Skillsource = rawContents[70].Trim();
+
+ Skillactmark=IsNumeric(rawContents[71]) ? int.Parse(rawContents[71]):0;
+
+ BuffDisplay=IsNumeric(rawContents[72]) ? int.Parse(rawContents[72]):0;
}
catch (Exception ex)
{
diff --git a/Core/GameEngine/Model/Config/SkillConfig.cs.meta b/Core/GameEngine/Model/Config/SkillConfig.cs.meta
index dbc7ab1..40aff55 100644
--- a/Core/GameEngine/Model/Config/SkillConfig.cs.meta
+++ b/Core/GameEngine/Model/Config/SkillConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: db393bd0ebb18b74e98ba16a7d19e7c6
-timeCreated: 1525345704
+timeCreated: 1537946131
licenseType: Pro
MonoImporter:
serializedVersion: 2
diff --git a/Core/GameEngine/Model/Config/TalentConfig.cs b/Core/GameEngine/Model/Config/TalentConfig.cs
new file mode 100644
index 0000000..fcb36a4
--- /dev/null
+++ b/Core/GameEngine/Model/Config/TalentConfig.cs
@@ -0,0 +1,47 @@
+锘�//--------------------------------------------------------
+// [Author]: 绗簩涓栫晫
+// [ Date ]: Thursday, October 11, 2018
+//--------------------------------------------------------
+
+using UnityEngine;
+using System;
+
+namespace TableConfig {
+
+
+ public partial class TalentConfig : ConfigBase {
+
+ public int skillId { get ; private set ; }
+ public int type { get ; private set ; }
+ public int series { get ; private set ; }
+ public int order { get ; private set ; }
+
+ public override string getKey()
+ {
+ return skillId.ToString();
+ }
+
+ public override void Parse() {
+ try
+ {
+ skillId=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0;
+
+ type=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0;
+
+ series=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0;
+
+ order=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0;
+ }
+ catch (Exception ex)
+ {
+ DebugEx.Log(ex);
+ }
+ }
+
+ }
+
+}
+
+
+
+
diff --git a/Core/GameEngine/Model/Config/TalentConfig.cs.meta b/Core/GameEngine/Model/Config/TalentConfig.cs.meta
new file mode 100644
index 0000000..7a8df78
--- /dev/null
+++ b/Core/GameEngine/Model/Config/TalentConfig.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 86eb4a564c7dcb047bb4509cf2e2758a
+timeCreated: 1539224901
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index 968ad5c..dd6ad4b 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -199,7 +199,7 @@
AddAsyncTask<DungeonSpecialStateTimeConfig>();
AddAsyncTask<DailyQuestSpecialOpenTimeConfig>();
AddAsyncTask<WHYJRewardConfig>();
-
+ AddAsyncTask<TalentConfig>();
while (!AllCompleted())
{
var completedCount = 0;
diff --git a/Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs b/Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs
index c9324aa..da15ddb 100644
--- a/Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs
+++ b/Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs
@@ -57,4 +57,5 @@
public int forbidenTalk;
public int NpcHurtAddPer;//瀵规�墿浼ゅ鍔犳垚 188
public int FunalHurtPer;//瀵规�墿浼ゅ鍔犳垚 189
+ public int talentPoint;//澶╄祴鐐规暟 190
}
diff --git a/Core/GameEngine/Model/Player/PlayerDatas.cs b/Core/GameEngine/Model/Player/PlayerDatas.cs
index 22981f3..8ac6e40 100644
--- a/Core/GameEngine/Model/Player/PlayerDatas.cs
+++ b/Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -737,6 +737,9 @@
case PlayerDataRefresh.CDBPlayerRefresh_ForbidenTalk:
extersion.forbidenTalk = (int)value;
break;
+ case PlayerDataRefresh.CDBPlayerRefresh_TalentPoint:
+ extersion.talentPoint = (int)value;
+ break;
}
}
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs
new file mode 100644
index 0000000..2b5b6eb
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs
@@ -0,0 +1,16 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 50 重置大师天赋技能 #tagCMResetMasterSkill
+
+public class CA550_tagCMResetMasterSkill : GameNetPackBasic {
+
+ public CA550_tagCMResetMasterSkill () {
+ combineCmd = (ushort)0x03FE;
+ _cmd = (ushort)0xA550;
+ }
+
+ public override void WriteToBytes () {
+ }
+
+}
diff --git a/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs.meta b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs.meta
new file mode 100644
index 0000000..4e8f22a
--- /dev/null
+++ b/Core/NetworkPackage/ClientPack/ClientToMapServer/CA5_Function/CA550_tagCMResetMasterSkill.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 34385181537277e42aecb5e9c8fbcb67
+timeCreated: 1537966668
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
index 4ab3a4a..af0faa5 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0310_tagRoleSkillChange.cs
@@ -41,7 +41,7 @@
model.UpdateTreasurePotentialInfo(vNetData.OldSkillID, vNetData.NewSkillID);
-
+ ModelCenter.Instance.GetModel<TalentModel>().UpdateTalentSkill(vNetData.OldSkillID, vNetData.NewSkillID);
if (vNetData != null)
{
// horsemodel.MountSkill0310(vNetData.NewSkillID);
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs
index 77e119c..2d71f6a 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs
@@ -1,13 +1,24 @@
-锘縰sing UnityEngine;
-using System.Collections;
-
-/** 涓昏鍒犻櫎鎶�鑳� */
-public class DTC0311_tagDeleteSkill : DtcBasic {
-
- /** 閲嶅啓鍩虹被鐨勬暟鎹寘杞�昏緫澶勭悊 */
- public override void Done(GameNetPackBasic vNetPack)
- {
- base.Done(vNetPack);
-// H0311_tagDeleteSkill vNetData = vNetPack as H0311_tagDeleteSkill;
- }
-}
+锘�//--------------------------------------------------------
+// [Author]: 绗簩涓栫晫
+// [ Date ]: Thursday, October 11, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Snxxz.UI;
+public class DTC0311_tagDeleteSkill : DtcBasic
+{
+
+ public override void Done(GameNetPackBasic vNetPack)
+ {
+ base.Done(vNetPack);
+ var package = vNetPack as H0311_tagDeleteSkill;
+ ModelCenter.Instance.GetModel<TalentModel>().DeleteTalentSkill((int)package.SkillID);
+ }
+
+}
+
+
+
+
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs.meta b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs.meta
index 1d531ae..d17c5c3 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs.meta
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0311_tagDeleteSkill.cs.meta
@@ -1,8 +1,12 @@
fileFormatVersion: 2
-guid: 995d5419b5b880447917544b8c2cf104
+guid: f1409e1bfa7856e4d87922bed8509b8f
+timeCreated: 1539223309
+licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Core/NetworkPackage/ServerPack/H03_MainCharacter/H0311_tagDeleteSkill.cs b/Core/NetworkPackage/ServerPack/H03_MainCharacter/H0311_tagDeleteSkill.cs
index 4e8ad75..0bd6c55 100644
--- a/Core/NetworkPackage/ServerPack/H03_MainCharacter/H0311_tagDeleteSkill.cs
+++ b/Core/NetworkPackage/ServerPack/H03_MainCharacter/H0311_tagDeleteSkill.cs
@@ -1,17 +1,17 @@
-锘縰sing UnityEngine;
-using System.Collections;
-
-/** 涓昏鍒犻櫎鎶�鑳� */
-public class H0311_tagDeleteSkill : GameNetPackBasic {
-
- public int SkillID;
-
- public H0311_tagDeleteSkill () {
- _cmd = (ushort)0x0311;
- }
-
- /** 浠庡瓧鑺傚寘涓В鏋愪俊鎭� */
- public override void ReadFromBytes (byte[] vBytes) {
- TransBytes (out SkillID, vBytes, NetDataType.DWORD);
- }
-}
+using UnityEngine;
+using System.Collections;
+
+//03 11 主角删除技能#tagDeleteSkill
+
+public class H0311_tagDeleteSkill : GameNetPackBasic {
+ public uint SkillID;
+
+ public H0311_tagDeleteSkill () {
+ _cmd = (ushort)0x0311;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out SkillID, vBytes, NetDataType.DWORD);
+ }
+
+}
diff --git a/System/Skill/SkillPanel.cs b/System/Skill/SkillPanel.cs
index d5bd436..f013715 100644
--- a/System/Skill/SkillPanel.cs
+++ b/System/Skill/SkillPanel.cs
@@ -62,6 +62,15 @@
private void OnTalentFunc()
{
CloseChild();
+ functionOrder = 2;
+ if (windowState == WindowState.Opened)
+ {
+ WindowCenter.Instance.OpenWithoutAnimation<TalentWin>();
+ }
+ else
+ {
+ WindowCenter.Instance.Open<TalentWin>();
+ }
}
private void OnAccordFunc()
@@ -83,7 +92,7 @@
protected override void OnActived()
{
base.OnActived();
- functionButtonTalent.state = TitleBtnState.Locked;
+ //functionButtonTalent.state = TitleBtnState.Locked;
if (functionOrder == 0 && model.jumpToPass)
{
@@ -126,6 +135,10 @@
if (WindowCenter.Instance.IsOpen<SkillPassWin>()) {
WindowCenter.Instance.CloseImmediately<SkillPassWin>();
}
+ if (WindowCenter.Instance.IsOpen<TalentWin>())
+ {
+ WindowCenter.Instance.CloseImmediately<TalentWin>();
+ }
}
}
}
diff --git a/System/Skill/TalentModel.cs b/System/Skill/TalentModel.cs
new file mode 100644
index 0000000..0ed2b21
--- /dev/null
+++ b/System/Skill/TalentModel.cs
@@ -0,0 +1,491 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using TableConfig;
+using System;
+using System.Linq;
+
+namespace Snxxz.UI
+{
+ public class TalentModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize
+ {
+ Dictionary<int, TalentSkill> talentSkills = new Dictionary<int, TalentSkill>();
+ Dictionary<int, TalentTree> talentTreeDict = new Dictionary<int, TalentTree>();
+
+ int m_SelectSeries;
+ public int selectSeries
+ {
+ get { return m_SelectSeries; }
+ set
+ {
+ if (m_SelectSeries != value && selectSeriesEvent != null)
+ {
+ m_SelectSeries = value;
+ selectSeriesEvent();
+ }
+ m_SelectSeries = value;
+ }
+ }
+ int m_SelectTalentType;
+ public int selectTalentType
+ {
+ get { return m_SelectTalentType; }
+ set
+ {
+ if (m_SelectTalentType != value && selectTalentTypeEvnet != null)
+ {
+ m_SelectTalentType = value;
+ selectTalentTypeEvnet();
+ }
+ m_SelectTalentType = value;
+ }
+ }
+ int m_SelectSkill;
+ public int selectSkill
+ {
+ get { return m_SelectSkill; }
+ set
+ {
+ if (m_SelectSkill != value && selectSkillEvent != null)
+ {
+ m_SelectSkill = value;
+ selectSkillEvent();
+ }
+ m_SelectSkill = value;
+ }
+ }
+
+ bool serverInited = false;
+
+ public event Action selectTalentTypeEvnet;
+ public event Action selectSeriesEvent;
+ public event Action selectSkillEvent;
+ public event Action talentPointUpdate;
+ public event Action<int> talentSkillUpdate;
+
+ public override void Init()
+ {
+ ParseConfig();
+ FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+ PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
+ }
+
+ public void OnBeforePlayerDataInitialize()
+ {
+ foreach (var talent in talentSkills.Values)
+ {
+ talent.level = 0;
+ }
+ serverInited = false;
+ }
+
+ public void OnPlayerLoginOk()
+ {
+ serverInited = true;
+ if (WindowCenter.Instance.IsOpen<TalentWin>())
+ {
+ foreach (var talent in talentSkills.Values)
+ {
+ if (talentSkillUpdate != null)
+ {
+ talentSkillUpdate(talent.skillId);
+ }
+ }
+ }
+ UpdateRedpoint();
+ }
+
+ public override void UnInit()
+ {
+ FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+ PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent;
+ }
+
+ private void OnFuncStateChangeEvent(int _id)
+ {
+ if (_id == (int)FuncOpenEnum.Talent)
+ {
+ UpdateRedpoint();
+ }
+ }
+
+ public int talentResetBook { get; private set; }
+ public int talentResetBookCost { get; private set; }
+ Dictionary<int, List<int>> jobTalentTypeDict = new Dictionary<int, List<int>>();
+ void ParseConfig()
+ {
+ var configs = Config.Instance.GetAllValues<TalentConfig>();
+ for (int i = 0; i < configs.Count; i++)
+ {
+ var skillId = configs[i].skillId;
+ var skillConfig = Config.Instance.Get<SkillConfig>(skillId);
+ TalentSkill talent;
+ if (!TryGetTalent(skillConfig.SkillTypeID, out talent))
+ {
+ talent = new TalentSkill(skillConfig.SkillTypeID, skillConfig.SkillMaxLV);
+ talent.level = 0;
+ talentSkills.Add(skillConfig.SkillTypeID, talent);
+
+ TalentTree talentTree;
+ if (!talentTreeDict.TryGetValue(skillConfig.UseType, out talentTree))
+ {
+ talentTree = new TalentTree();
+ talentTreeDict.Add(skillConfig.UseType, talentTree);
+ }
+ talentTree.Add(configs[i], skillConfig.SkillTypeID);
+
+ List<int> list = null;
+ if (!jobTalentTypeDict.TryGetValue(skillConfig.UseType, out list))
+ {
+ list = new List<int>();
+ jobTalentTypeDict.Add(skillConfig.UseType, list);
+ }
+ if (!list.Contains(configs[i].type))
+ {
+ list.Add(configs[i].type);
+ }
+ }
+ }
+ var jobs = jobTalentTypeDict.Keys.ToList();
+ for (int i = 0; i < jobs.Count; i++)
+ {
+ var list = jobTalentTypeDict[jobs[i]];
+ list.Sort((x, y) =>
+ {
+ return x.CompareTo(y);
+ });
+ }
+
+
+ var config = Config.Instance.Get<FuncConfigConfig>("TalentResetBook");
+ talentResetBook = int.Parse(config.Numerical1);
+ talentResetBookCost = int.Parse(config.Numerical2);
+ }
+
+ public int GetTalentType(int index)
+ {
+ var job = (int)Math.Pow(2, PlayerDatas.Instance.baseData.Job);
+ if (jobTalentTypeDict.ContainsKey(job))
+ {
+ var list = jobTalentTypeDict[job];
+ return index < list.Count ? list[index] : list[0];
+ }
+ return 1;
+ }
+
+ public int talentTypeCount
+ {
+ get
+ {
+ var job = (int)Math.Pow(2, PlayerDatas.Instance.baseData.Job);
+ if (jobTalentTypeDict.ContainsKey(job))
+ {
+ var list = jobTalentTypeDict[job];
+ return list.Count;
+ }
+ return 0;
+ }
+ }
+
+ public bool TryGetTalents(int job, int talentType, int talentSeries, out List<int> talents)
+ {
+ talents = null;
+ TalentTree talentTree = null;
+ var _job = (int)Math.Pow(2, job);
+ talentTreeDict.TryGetValue(_job, out talentTree);
+ if (null != talentTree)
+ {
+ return talentTree.TryGetTalents(talentType, talentSeries, out talents);
+ }
+ return false;
+ }
+
+ public bool TryGetTalent(int talentId, out TalentSkill talent)
+ {
+ return talentSkills.TryGetValue(talentId, out talent);
+ }
+
+ public int GetTalentTypePoint(int talentType)
+ {
+ var point = 0;
+ for (int i = 1; i <= 3; i++)
+ {
+ point += GetSeriesPoint(talentType, i);
+ }
+ return point;
+ }
+
+ public int GetSeriesPoint(int talentType,int talentSeries)
+ {
+ var job = PlayerDatas.Instance.baseData.Job;
+ List<int> list;
+ var point = 0;
+ if (TryGetTalents(job, talentType, talentSeries, out list))
+ {
+ for (int i = 0; i < list.Count; i++)
+ {
+ TalentSkill talent;
+ if (TryGetTalent(list[i], out talent))
+ {
+ point += talent.level;
+ }
+ }
+ }
+ return point;
+ }
+
+ public bool SatisfyLevelUp(int talentId, out int error)
+ {
+ error = 0;
+ TalentSkill talent;
+ if (TryGetTalent(talentId, out talent))
+ {
+ if (talent.level >= talent.maxLevel)
+ {
+ error = 1;
+ return false;
+ }
+ if (talentPoint <= 0)
+ {
+ error = 2;
+ return false;
+ }
+ var talentConfig = talent.GetTalentConfig(talent.level + 1);
+ var skillConfig = talent.GetSkillConfig(talent.level + 1);
+ var requireSeriesPoint = skillConfig.RequireTalentSeriesPoint();
+ if (requireSeriesPoint != 0)
+ {
+ var requireSeries = skillConfig.RequireTalentSeries();
+ if (GetSeriesPoint(talentConfig.type, requireSeries) < requireSeriesPoint)
+ {
+ error = 3;
+ return false;
+ }
+ }
+ if (skillConfig.LearnSkillReq != 0)
+ {
+ TalentSkill learnTalent;
+ if (TryGetTalent(skillConfig.LearnSkillReq, out learnTalent))
+ {
+ if (learnTalent.level < skillConfig.LearnSkillLV)
+ {
+ error = 4;
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ public void ProcessLevelUpError(int talentId, int error)
+ {
+ switch (error)
+ {
+ case 1:
+ SysNotifyMgr.Instance.ShowTip("TalentHighestLevel");
+ break;
+ case 2:
+ SysNotifyMgr.Instance.ShowTip("LackTalentPoint");
+ break;
+ case 3:
+ SysNotifyMgr.Instance.ShowTip("LackTalentSeriesPoint");
+ break;
+ case 4:
+ SysNotifyMgr.Instance.ShowTip("PreTalentLevelLimit");
+ break;
+ }
+ }
+
+ #region 鏈嶅姟绔暟鎹�
+ public int talentPoint { get { return PlayerDatas.Instance.extersion.talentPoint; } }
+
+ private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType)
+ {
+ if (refreshType == PlayerDataRefresh.CDBPlayerRefresh_TalentPoint)
+ {
+ if (talentPointUpdate != null)
+ {
+ talentPointUpdate();
+ }
+ UpdateRedpoint();
+ }
+ }
+
+ public void UpdateTalentSkill(int _oldSkillId, int _newSkillId)
+ {
+ var config = Config.Instance.Get<SkillConfig>(_newSkillId);
+ if (config == null)
+ {
+ return;
+ }
+ if (talentSkills.ContainsKey(config.SkillTypeID))
+ {
+ var talentSkill = talentSkills[config.SkillTypeID];
+ talentSkill.level = config.SkillLV;
+ if (talentSkillUpdate != null)
+ {
+ talentSkillUpdate(config.SkillTypeID);
+ }
+ }
+ }
+
+ public void DeleteTalentSkill(int _skillId)
+ {
+ var config = Config.Instance.Get<SkillConfig>(_skillId);
+ if (config == null)
+ {
+ return;
+ }
+ if (talentSkills.ContainsKey(config.SkillTypeID))
+ {
+ var talentSkill = talentSkills[config.SkillTypeID];
+ talentSkill.level = 0;
+ if (talentSkillUpdate != null)
+ {
+ talentSkillUpdate(config.SkillTypeID);
+ }
+ }
+ }
+ #endregion
+
+ #region 绾㈢偣
+ Redpoint talentRedpoint = new Redpoint(103, 10303);
+ void UpdateRedpoint()
+ {
+ talentRedpoint.state = RedPointState.None;
+ if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Talent))
+ {
+ return;
+ }
+ if (talentPoint > 0)
+ {
+ talentRedpoint.state = RedPointState.Simple;
+ }
+ }
+ #endregion
+ }
+
+ public class TalentSkill
+ {
+ public int skillId { get; private set; }
+ public int level { get; set; }
+ public int maxLevel { get; private set; }
+
+ public TalentSkill(int skillId, int maxLevel)
+ {
+ this.skillId = skillId;
+ this.maxLevel = maxLevel;
+ }
+
+ public SkillConfig GetSkillConfig(int level = 0)
+ {
+ if (level > 0)
+ {
+ return Config.Instance.Get<SkillConfig>(skillId + level - 1);
+ }
+ else
+ {
+ return Config.Instance.Get<SkillConfig>(skillId + level);
+ }
+ }
+
+ public TalentConfig GetTalentConfig(int level = 0)
+ {
+ if (level > 0)
+ {
+ return Config.Instance.Get<TalentConfig>(skillId + level - 1);
+ }
+ else
+ {
+ return Config.Instance.Get<TalentConfig>(skillId + level);
+ }
+ }
+ }
+
+ public class TalentSeries
+ {
+ public int series { get; private set; }
+ public List<int> talentSkills { get; private set; }
+
+ public TalentSeries(int series)
+ {
+ this.series = series;
+ talentSkills = new List<int>();
+ }
+
+ public void Add(int skillId)
+ {
+ if (talentSkills.Contains(skillId))
+ {
+ return;
+ }
+ talentSkills.Add(skillId);
+ }
+ }
+
+ public class TalentTree
+ {
+ Dictionary<int, List<TalentSeries>> talentSeriesDict = new Dictionary<int, List<TalentSeries>>();
+
+ public void Add(TalentConfig config, int skillId)
+ {
+ List<TalentSeries> list = null;
+ if (!talentSeriesDict.TryGetValue(config.type, out list))
+ {
+ list = new List<TalentSeries>();
+ talentSeriesDict.Add(config.type, list);
+ }
+ TalentSeries talentSeries = list.Find((x) =>
+ {
+ return x.series == config.series;
+ });
+ if (talentSeries == null)
+ {
+ talentSeries = new TalentSeries(config.series);
+ list.Add(talentSeries);
+ }
+ talentSeries.Add(skillId);
+ }
+
+ public bool TryGetTalents(int type, int series, out List<int> list)
+ {
+ list = null;
+ if (talentSeriesDict.ContainsKey(type))
+ {
+ var talentSeries = talentSeriesDict[type].Find((x) =>
+ {
+ return x.series == series;
+ });
+ if (talentSeries != null)
+ {
+ list = talentSeries.talentSkills;
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ public static class TalentHelper
+ {
+ public static int RequireTalentSeries(this SkillConfig config)
+ {
+ if (config == null)
+ {
+ return 0;
+ }
+ return config.LearnSkillPointReq / 10000;
+ }
+
+ public static int RequireTalentSeriesPoint(this SkillConfig config)
+ {
+ if (config == null)
+ {
+ return 0;
+ }
+ return config.LearnSkillPointReq % 10000;
+ }
+ }
+}
+
diff --git a/System/Skill/TalentModel.cs.meta b/System/Skill/TalentModel.cs.meta
new file mode 100644
index 0000000..9a50643
--- /dev/null
+++ b/System/Skill/TalentModel.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 94d2b0e6415910d47a88b77e252ec3a0
+timeCreated: 1532942625
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/Skill/TalentSeriesBehaviour.cs b/System/Skill/TalentSeriesBehaviour.cs
new file mode 100644
index 0000000..08b5d54
--- /dev/null
+++ b/System/Skill/TalentSeriesBehaviour.cs
@@ -0,0 +1,77 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+ public class TalentSeriesBehaviour : MonoBehaviour
+ {
+ [SerializeField] int talentSeries = 0;
+ [SerializeField] Button m_Button;
+ [SerializeField] Image m_Icon;
+ [SerializeField] Text m_TalentType;
+ [SerializeField] Text m_TalentPoint;
+ [SerializeField] RectTransform m_ContainerSelect;
+
+ TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
+
+ private void Awake()
+ {
+ m_Button.onClick.AddListener(SelectSeries);
+ }
+
+ private void SelectSeries()
+ {
+ if (talentSeries != 0)
+ {
+ model.selectSeries = talentSeries;
+ }
+ }
+
+ public void Display()
+ {
+ m_ContainerSelect.gameObject.SetActive(talentSeries == model.selectSeries);
+ m_TalentType.text = Language.Get(StringUtility.Contact("TalentBtnSeries_", talentSeries));
+
+ DisplayTalentPoint();
+
+ model.selectSeriesEvent -= OnSelectSeriesEvent;
+ model.selectSeriesEvent += OnSelectSeriesEvent;
+ model.selectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
+ model.selectTalentTypeEvnet += OnSelectTalentTypeEvnet;
+ model.talentSkillUpdate -= TalentSkillUpdate;
+ model.talentSkillUpdate += TalentSkillUpdate;
+ }
+
+ void DisplayTalentPoint()
+ {
+ var point = model.GetSeriesPoint(model.selectTalentType, talentSeries);
+ m_TalentPoint.text = StringUtility.Contact("锛�", point, "锛�");
+ }
+
+ public void Dispose()
+ {
+ model.selectSeriesEvent -= OnSelectSeriesEvent;
+ model.selectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
+ model.talentSkillUpdate -= TalentSkillUpdate;
+ }
+
+ private void TalentSkillUpdate(int skillId)
+ {
+ DisplayTalentPoint();
+ }
+
+ private void OnSelectSeriesEvent()
+ {
+ m_ContainerSelect.gameObject.SetActive(talentSeries == model.selectSeries);
+ }
+
+ private void OnSelectTalentTypeEvnet()
+ {
+ DisplayTalentPoint();
+ }
+ }
+}
+
diff --git a/System/Skill/TalentSeriesBehaviour.cs.meta b/System/Skill/TalentSeriesBehaviour.cs.meta
new file mode 100644
index 0000000..6b69afe
--- /dev/null
+++ b/System/Skill/TalentSeriesBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 44434ba8a44224c408afd5e00a00f571
+timeCreated: 1533004940
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/Skill/TalentSkillBehaviour.cs b/System/Skill/TalentSkillBehaviour.cs
new file mode 100644
index 0000000..5a56986
--- /dev/null
+++ b/System/Skill/TalentSkillBehaviour.cs
@@ -0,0 +1,80 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using TableConfig;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+ public class TalentSkillBehaviour : MonoBehaviour
+ {
+ [SerializeField] Image m_Icon;
+ [SerializeField] Text m_Level;
+ [SerializeField] Button m_Button;
+ [SerializeField] RectTransform m_ContainerSelect;
+
+ int skillId = 0;
+
+ TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
+
+ private void Awake()
+ {
+ m_Button.onClick.AddListener(SelectSkill);
+ }
+
+ public void Display(int _skillId)
+ {
+ skillId = _skillId;
+ model.talentSkillUpdate -= TalentSkillUpdate;
+ model.talentSkillUpdate += TalentSkillUpdate;
+ model.selectSkillEvent -= OnSelectSkillEvent;
+ model.selectSkillEvent += OnSelectSkillEvent;
+ Display();
+ }
+
+ private void Display()
+ {
+ TalentSkill talent;
+ if (model.TryGetTalent(skillId, out talent))
+ {
+ var config = Config.Instance.Get<SkillConfig>(talent.skillId);
+ if (config != null)
+ {
+ m_Icon.SetSprite(config.IconName);
+ }
+ m_Level.text = StringUtility.Contact(talent.level, "/", talent.maxLevel);
+ m_Icon.material = talent.level > 0 ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial();
+ m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill);
+ }
+ }
+
+ private void TalentSkillUpdate(int _skillid)
+ {
+ if (skillId == _skillid)
+ {
+ Display();
+ }
+ }
+
+ private void OnSelectSkillEvent()
+ {
+ m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill);
+ }
+
+ public void Dispose()
+ {
+ model.talentSkillUpdate -= TalentSkillUpdate;
+ model.selectSkillEvent -= OnSelectSkillEvent;
+ }
+
+ private void SelectSkill()
+ {
+ if (skillId != 0)
+ {
+ model.selectSkill = skillId;
+ }
+ }
+ }
+}
+
diff --git a/System/Skill/TalentSkillBehaviour.cs.meta b/System/Skill/TalentSkillBehaviour.cs.meta
new file mode 100644
index 0000000..71fa0e2
--- /dev/null
+++ b/System/Skill/TalentSkillBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5359bc88b0bc7cd439412a99efda7dbb
+timeCreated: 1533007965
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/Skill/TalentTreeScriptable.cs b/System/Skill/TalentTreeScriptable.cs
new file mode 100644
index 0000000..c41e745
--- /dev/null
+++ b/System/Skill/TalentTreeScriptable.cs
@@ -0,0 +1,201 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+namespace Snxxz.UI
+{
+ public class TalentTreeScriptable : ScriptableObject
+ {
+ [SerializeField] TalentTree talentTrees;
+ [SerializeField] Vector2 m_ContentSizeDelta;
+ [SerializeField] List<TalentElement> skillElements;
+ [SerializeField] List<ArrowElement> arrowElements;
+
+ public Vector2 contentSizeDelta
+ {
+ get { return m_ContentSizeDelta; }
+ }
+
+ public int arrowCount
+ {
+ get { return arrowElements == null ? 0 : arrowElements.Count; }
+ }
+
+ public int skillCount
+ {
+ get { return skillElements == null ? 0 : skillElements.Count; }
+ }
+
+ public TalentElement GetTalentElement(int index)
+ {
+ if (skillElements != null && index < skillElements.Count)
+ {
+ return skillElements[index];
+ }
+ return default(TalentElement);
+ }
+
+ public ArrowElement GetArrowElement(int index)
+ {
+ if (arrowElements != null && index < arrowElements.Count)
+ {
+ return arrowElements[index];
+ }
+ return default(ArrowElement);
+ }
+
+ public float GetPercentBySkillElement(int index, float viewHeight, float offset)
+ {
+ if (skillElements != null && index < skillElements.Count)
+ {
+ var element = skillElements[index];
+ var height = contentSizeDelta.y - Mathf.Abs(element.position.y);
+ var percent = Mathf.Clamp01((height - viewHeight) / (contentSizeDelta.y - viewHeight));
+ return Mathf.Clamp01(percent + (offset / (contentSizeDelta.y - viewHeight)));//鍋忕Щ
+ }
+ return 1;
+ }
+
+#if UNITY_EDITOR
+ public void ApplyTalentElement(int index,Vector3 _position)
+ {
+ if (skillElements == null)
+ {
+ skillElements = new List<TalentElement>();
+ }
+ var element = new TalentElement()
+ {
+ position = _position,
+ };
+ if (index >= skillElements.Count)
+ {
+ skillElements.Add(element);
+ }
+ else
+ {
+ skillElements[index] = element;
+ }
+ }
+
+ public void SyncTalentElementsCount(int count)
+ {
+ if (count < skillElements.Count)
+ {
+ skillElements.RemoveRange(count, skillElements.Count - count);
+ }
+ }
+
+ public void ApplyArrowElement(int index, Vector3 _position, Vector2 _sizeDelta, Vector3 _rotation, string _iconKey)
+ {
+ if (arrowElements == null)
+ {
+ arrowElements = new List<ArrowElement>();
+ }
+ var element = new ArrowElement()
+ {
+ position = _position,
+ sizeDelta = _sizeDelta,
+ rotation = _rotation,
+ iconKey = _iconKey,
+ };
+ if (index >= arrowElements.Count)
+ {
+ arrowElements.Add(element);
+ }
+ else
+ {
+ arrowElements[index] = element;
+ }
+ }
+
+ public void SyncArrowElementsCount(int count)
+ {
+ if (count < arrowElements.Count)
+ {
+ arrowElements.RemoveRange(count, arrowElements.Count - count);
+ }
+ }
+#endif
+
+ public bool Belong(int job, int talentType, int talentSeries)
+ {
+ return talentTrees.Belong(job, talentType, talentSeries);
+ }
+
+ [Serializable]
+ public struct TalentTree
+ {
+ public int[] jobs;
+ public int[] talentTypes;
+ public int[] talentSeriess;
+
+ public bool Belong(int job, int talentType, int talentSeries)
+ {
+ bool sameJob = false;
+ for (int i = 0; i < jobs.Length; i++)
+ {
+ if (jobs[i] == job)
+ {
+ sameJob = true;
+ break;
+ }
+ }
+ bool sameType = false;
+ for (int i = 0; i < talentTypes.Length; i++)
+ {
+ if (talentTypes[i] == talentType)
+ {
+ sameType = true;
+ break;
+ }
+ }
+ bool sameSeries = false;
+ for (int i = 0; i < talentSeriess.Length; i++)
+ {
+ if (talentSeriess[i] == talentSeries)
+ {
+ sameSeries = true;
+ break;
+ }
+ }
+ return sameJob && sameType && sameSeries;
+ }
+ }
+
+ [Serializable]
+ public struct TalentElement
+ {
+ public Vector3 position;
+ }
+
+ [Serializable]
+ public struct ArrowElement
+ {
+ public string iconKey;
+ public Vector3 position;
+ public Vector3 rotation;
+ public Vector2 sizeDelta;
+ }
+ }
+
+#if UNITY_EDITOR
+ public class TalentTreeScriptableEditor : Editor
+ {
+ [MenuItem("绛栧垝宸ュ叿/鐢熸垚澶╄祴閰嶇疆鏂囦欢")]
+ static void BuildConfig()
+ {
+ TalentTreeScriptable config = CreateInstance<TalentTreeScriptable>();
+ string _path = StringUtility.Contact("Assets/ResourcesOut/Refdata/ScriptableObject/SoTalentTree/",
+ "SoTalentTree_",
+ ".asset");
+ AssetDatabase.CreateAsset(config, _path);
+ AssetDatabase.Refresh();
+ ProjectWindowUtil.ShowCreatedAsset(config);
+ }
+ }
+#endif
+}
+
diff --git a/System/Skill/TalentTreeScriptable.cs.meta b/System/Skill/TalentTreeScriptable.cs.meta
new file mode 100644
index 0000000..bc6e668
--- /dev/null
+++ b/System/Skill/TalentTreeScriptable.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 56183617d36b9af4d9dbb2785a581975
+timeCreated: 1537859705
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/Skill/TalentWin.cs b/System/Skill/TalentWin.cs
new file mode 100644
index 0000000..1aa857b
--- /dev/null
+++ b/System/Skill/TalentWin.cs
@@ -0,0 +1,502 @@
+锘�//--------------------------------------------------------
+// [Author]: 绗簩涓栫晫
+// [ Date ]: Tuesday, July 31, 2018
+//--------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using TableConfig;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI {
+
+ public class TalentWin : Window
+ {
+ [SerializeField] TalentSeriesBehaviour[] m_TalentSeries;
+ [SerializeField] TalentTreeScriptable[] m_TalentConfigs;
+ [SerializeField] RectTransform m_ContainerSelect;
+ [SerializeField] Button m_TalentTypeSelect;
+ [SerializeField] Text m_TalentType;
+ [SerializeField] Text m_TalentTitle;
+
+ [SerializeField] float m_AutoSelectOffset = 62f;
+ [SerializeField] ScrollRect m_Scroller;
+ [SerializeField] List<TalentSkillBehaviour> m_TalentSkills;
+ [SerializeField] List<Image> m_Arrows;
+
+ [SerializeField] RectTransform m_ContainerSelectSkill;
+ [SerializeField] Image m_SelectSkillIcon;
+ [SerializeField] Text m_SelectSkillLevel;
+ [SerializeField] Text m_SelectSkillName;
+
+ [SerializeField] RectTransform m_ContainerUnActive;
+ [SerializeField] RectTransform m_ContainerActive;
+ [SerializeField] RectTransform m_ContainerBetter;
+ [SerializeField] RectTransform m_ContainerMax;
+
+ [SerializeField] Text[] m_SelectConditions;
+ [SerializeField] Text m_SelectSkillEffect;
+ [SerializeField] Text m_SelectNextEffect;
+
+
+ [SerializeField] Button m_ResetPoint;
+ [SerializeField] Button m_AddPoint;
+ [SerializeField] Text m_AddPointBtnText;
+ [SerializeField] Text m_SurplusPoint;
+
+#if UNITY_EDITOR
+ [SerializeField] TalentTreeScriptable m_EditorScriptable;
+ [SerializeField] bool m_EditorMode;
+ [SerializeField] string m_StraightArrowName;
+ [SerializeField] string m_TurnArrowName;
+#endif
+
+ TalentModel model { get { return ModelCenter.Instance.GetModel<TalentModel>(); } }
+ PlayerPackModel pack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
+ #region Built-in
+ protected override void BindController()
+ {
+ }
+
+ protected override void AddListeners()
+ {
+ m_TalentTypeSelect.onClick.AddListener(SelectTalentType);
+ m_ResetPoint.onClick.AddListener(ResetPoint);
+ m_AddPoint.onClick.AddListener(AddPoint);
+ }
+
+ protected override void OnPreOpen()
+ {
+ model.selectSeries = 1;
+ model.selectTalentType = model.GetTalentType(0);
+ Display();
+ model.selectTalentTypeEvnet += OnSelectTalentTypeEvnet;
+ model.selectSeriesEvent += OnSelectSeriesEvent;
+ model.selectSkillEvent += OnSelectSkillEvent;
+ model.talentSkillUpdate += TalentSkillUpdate;
+ model.talentPointUpdate += TalentPointUpdate;
+ }
+
+ protected override void OnAfterOpen()
+ {
+ }
+
+ protected override void OnPreClose()
+ {
+ model.selectTalentTypeEvnet -= OnSelectTalentTypeEvnet;
+ model.selectSeriesEvent -= OnSelectSeriesEvent;
+ model.selectSkillEvent -= OnSelectSkillEvent;
+ model.talentSkillUpdate -= TalentSkillUpdate;
+ model.talentPointUpdate -= TalentPointUpdate;
+ for (int i = 0; i < m_TalentSeries.Length; i++)
+ {
+ m_TalentSeries[i].Dispose();
+ }
+ for (int i = 0; i < m_TalentSkills.Count; i++)
+ {
+ m_TalentSkills[i].Dispose();
+ }
+
+#if UNITY_EDITOR
+ if (m_EditorScriptable != null)
+ {
+ m_EditorScriptable = null;
+ }
+#endif
+ }
+
+ protected override void OnAfterClose()
+ {
+ }
+ #endregion
+
+ protected override void LateUpdate()
+ {
+ base.LateUpdate();
+#if UNITY_EDITOR
+ if (m_EditorMode && m_EditorScriptable != null)
+ {
+ DisplayTalentLayout(m_EditorScriptable);
+ }
+#endif
+ }
+
+ void Display()
+ {
+ for (int i = 0; i < m_TalentSeries.Length; i++)
+ {
+ m_TalentSeries[i].Display();
+ }
+
+ DisplaySkills();
+ DisplayTalentType();
+ DisplaySelectSkill();
+ DisplayTalentPoint();
+ DisplayLevelUp();
+ }
+
+ void DisplaySkills()
+ {
+ var job = PlayerDatas.Instance.baseData.Job;
+ List<int> talents = null;
+ model.TryGetTalents(job, model.selectTalentType, model.selectSeries, out talents);
+
+ TalentTreeScriptable selectScriptable = null;
+ for (int i = 0; i < m_TalentConfigs.Length; i++)
+ {
+ if (m_TalentConfigs[i].Belong(job, model.selectTalentType, model.selectSeries))
+ {
+ selectScriptable = m_TalentConfigs[i];
+ DisplayTalentLayout(selectScriptable);
+ break;
+ }
+ }
+
+ List<int> sortTalents = new List<int>(talents);
+ sortTalents.Sort(Compare);
+
+ var index = 0;
+ if (sortTalents != null && sortTalents.Count > 0)
+ {
+ index = 0;
+ }
+ model.selectSkill = sortTalents[index];
+ if (selectScriptable != null)
+ {
+ var rect = m_Scroller.transform as RectTransform;
+ var skillRect = m_TalentSkills[0].transform as RectTransform;
+ m_Scroller.verticalNormalizedPosition = selectScriptable.GetPercentBySkillElement(index, rect.sizeDelta.y, m_AutoSelectOffset);
+ }
+ for (int i = 0; i < m_TalentSkills.Count; i++)
+ {
+ if (sortTalents != null && i < sortTalents.Count)
+ {
+ m_TalentSkills[i].gameObject.SetActive(true);
+ m_TalentSkills[i].Display(sortTalents[i]);
+ }
+ else
+ {
+ m_TalentSkills[i].Dispose();
+ m_TalentSkills[i].gameObject.SetActive(false);
+ }
+ }
+
+ var talentTypeDisplay = Language.Get(StringUtility.Contact("TalentType_", model.selectTalentType));
+ var seriesDisplay = Language.Get(StringUtility.Contact("TalentSeries_", model.selectSeries));
+ m_TalentTitle.text = StringUtility.Contact(talentTypeDisplay, "路", seriesDisplay);
+ }
+
+ void DisplayTalentType()
+ {
+ m_ContainerSelect.gameObject.SetActive(model.talentTypeCount > 1);
+ if (model.talentTypeCount > 1)
+ {
+ var unselectTalentType = model.selectTalentType == model.GetTalentType(0) ? model.GetTalentType(1) : model.GetTalentType(0);
+ var point = model.GetTalentTypePoint(unselectTalentType);
+ var job = PlayerDatas.Instance.baseData.Job;
+ var talentTypeDisplay = Language.Get(StringUtility.Contact("TalentBtnType_", unselectTalentType));
+ m_TalentType.text = StringUtility.Contact(talentTypeDisplay, "锛�", point, "锛�");
+ }
+ }
+
+ void DisplaySelectSkill()
+ {
+ DisplaySkillInfo();
+ DisplayConditions();
+ DisplaySkillEffect();
+ }
+
+ void DisplayConditions()
+ {
+ TalentSkill talent;
+ var index = 0;
+ if (model.TryGetTalent(model.selectSkill, out talent))
+ {
+ var talentConfig = talent.GetTalentConfig(talent.level + 1);
+ var skillConfig = talent.GetSkillConfig(talent.level + 1);
+ if (talentConfig != null)
+ {
+ var requireSeriesPoint = skillConfig.RequireTalentSeriesPoint();
+ if (requireSeriesPoint != 0 && index < m_SelectConditions.Length)
+ {
+ m_SelectConditions[index].gameObject.SetActive(true);
+ var requireSeries = skillConfig.RequireTalentSeries();
+ var point = model.GetSeriesPoint(talentConfig.type, requireSeries);
+ var requireDisplay = StringUtility.Contact(point, "/", requireSeriesPoint);
+ requireDisplay = UIHelper.GetTextColorByItemColor(point >= requireSeriesPoint ?
+ TextColType.Green : TextColType.Red, requireDisplay);
+ var seriesDisplay = Language.Get("TalentSeriesCondition", Language.Get(StringUtility.Contact("TalentSeries_", requireSeries)));
+ m_SelectConditions[index].text = StringUtility.Contact(seriesDisplay, requireDisplay);
+ index++;
+ }
+ }
+ if (skillConfig != null && index < m_SelectConditions.Length)
+ {
+ TalentSkill learnTalent;
+ if (skillConfig.LearnSkillReq != 0 && model.TryGetTalent(skillConfig.LearnSkillReq, out learnTalent))
+ {
+ var learnSkillConfig = Config.Instance.Get<SkillConfig>(skillConfig.LearnSkillReq);
+ m_SelectConditions[index].gameObject.SetActive(true);
+ var requireDisplay = StringUtility.Contact(learnSkillConfig.SkillName, " ", learnTalent.level, "/", skillConfig.LearnSkillLV);
+ requireDisplay = UIHelper.GetTextColorByItemColor(learnTalent.level >= skillConfig.LearnSkillLV ?
+ TextColType.Green : TextColType.Red, requireDisplay);
+ m_SelectConditions[index].text = StringUtility.Contact(Language.Get("TalentPreSkillCondition"), requireDisplay);
+ index++;
+ }
+ }
+ }
+ for (int i = index; i < m_SelectConditions.Length; i++)
+ {
+ m_SelectConditions[i].gameObject.SetActive(false);
+ }
+ }
+
+ void DisplaySkillInfo()
+ {
+ TalentSkill talent;
+ m_ContainerSelectSkill.gameObject.SetActive(false);
+ if (model.TryGetTalent(model.selectSkill, out talent))
+ {
+ m_ContainerSelectSkill.gameObject.SetActive(true);
+ var config = talent.GetSkillConfig(talent.level);
+ m_SelectSkillIcon.SetSprite(config.IconName);
+ m_SelectSkillLevel.text = StringUtility.Contact(Language.Get("TalentLevel"), talent.level, "/", talent.maxLevel);
+ m_SelectSkillName.text = config.SkillName;
+ }
+ }
+
+ void DisplaySkillEffect()
+ {
+ TalentSkill talent;
+ if (model.TryGetTalent(model.selectSkill, out talent))
+ {
+ m_ContainerUnActive.gameObject.SetActive(talent.level == 0);
+ m_ContainerActive.gameObject.SetActive(talent.level > 0);
+ m_ContainerBetter.gameObject.SetActive(talent.level < talent.maxLevel);
+ m_ContainerMax.gameObject.SetActive(talent.level >= talent.maxLevel);
+
+ if (talent.level > 0)
+ {
+ var config = talent.GetSkillConfig(talent.level);
+ m_SelectSkillEffect.text = config.Description;
+ }
+ if (talent.level < talent.maxLevel)
+ {
+ var nextConfig = talent.GetSkillConfig(talent.level + 1);
+ m_SelectNextEffect.text = nextConfig.Description;
+ }
+ }
+ }
+
+ bool TryGetTalentConfig(out TalentTreeScriptable config)
+ {
+ config = null;
+ for (int i = 0; i < m_TalentConfigs.Length; i++)
+ {
+ if (m_TalentConfigs[i].Belong(PlayerDatas.Instance.baseData.Job, model.selectTalentType, model.selectSeries))
+ {
+ config = m_TalentConfigs[i];
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void DisplayTalentPoint()
+ {
+ m_SurplusPoint.text = model.talentPoint.ToString();
+ }
+
+ private void TalentSkillUpdate(int _skillId)
+ {
+ if (_skillId == model.selectSkill)
+ {
+ DisplaySkillInfo();
+ DisplayConditions();
+ DisplaySkillEffect();
+ DisplayLevelUp();
+ }
+ }
+
+ private void TalentPointUpdate()
+ {
+ DisplayTalentPoint();
+ }
+
+ private void OnSelectTalentTypeEvnet()
+ {
+ model.selectSeries = 1;
+ DisplaySkills();
+ DisplaySelectSkill();
+ DisplayTalentType();
+ }
+
+ private void OnSelectSeriesEvent()
+ {
+ DisplaySkills();
+ DisplaySelectSkill();
+ }
+
+ private void OnSelectSkillEvent()
+ {
+ DisplaySelectSkill();
+ DisplayLevelUp();
+ }
+
+ private void SelectTalentType()
+ {
+ if (model.talentTypeCount > 1)
+ {
+ model.selectTalentType = model.selectTalentType == model.GetTalentType(0) ?
+ model.GetTalentType(1) : model.GetTalentType(0);
+ }
+ }
+
+ private void DisplayLevelUp()
+ {
+ TalentSkill talent;
+ if (model.TryGetTalent(model.selectSkill, out talent))
+ {
+ m_AddPointBtnText.text = talent.level >= talent.maxLevel ? Language.Get("TalentHighestLevel") : Language.Get("TalentLevelUp");
+ }
+ }
+
+ private void AddPoint()
+ {
+ TalentSkill talent;
+ if (model.TryGetTalent(model.selectSkill, out talent))
+ {
+ int error;
+ if (!model.SatisfyLevelUp(model.selectSkill, out error))
+ {
+ model.ProcessLevelUpError(model.selectSkill, error);
+ return;
+ }
+ else
+ {
+ C0304_tagCAddSkillPoint pak = new C0304_tagCAddSkillPoint();
+ pak.SkillID = (ushort)model.selectSkill;
+ GameNetSystem.Instance.SendInfo(pak);
+ }
+ }
+ }
+
+ private void ResetPoint()
+ {
+ var count = pack.GetItemCountByID(PackType.rptItem, model.talentResetBook);
+ var config = Config.Instance.Get<ItemConfig>(model.talentResetBook);
+ if (count > 0)
+ {
+ ConfirmCancel.ShowItemConfirm(Language.Get("TalentResetRequire", config.ItemName), model.talentResetBook, 1, () =>
+ {
+ CA550_tagCMResetMasterSkill pak = new CA550_tagCMResetMasterSkill();
+ GameNetSystem.Instance.SendInfo(pak);
+ });
+ }
+ else
+ {
+ ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("LackTalentBook",
+ config.ItemName, model.talentResetBookCost), (bool isOk) =>
+ {
+ if (isOk)
+ {
+ if (UIHelper.GetMoneyCnt(1) < (ulong)model.talentResetBookCost)
+ {
+ WindowCenter.Instance.Open<RechargeTipWin>();
+ }
+ else
+ {
+ CA550_tagCMResetMasterSkill pak = new CA550_tagCMResetMasterSkill();
+ GameNetSystem.Instance.SendInfo(pak);
+ }
+ }
+ });
+ }
+ }
+
+ void DisplayTalentLayout(TalentTreeScriptable config)
+ {
+ m_Scroller.content.sizeDelta = config.contentSizeDelta;
+ for (int i = 0; i < config.skillCount; i++)
+ {
+ var element = config.GetTalentElement(i);
+ if (i < m_TalentSkills.Count)
+ {
+ m_TalentSkills[i].transform.localPosition = element.position;
+ }
+ }
+ var index = 0;
+ for (int i = 0; i < config.arrowCount; i++)
+ {
+ var element = config.GetArrowElement(i);
+ if (i < m_Arrows.Count)
+ {
+ var arrow = m_Arrows[i];
+ arrow.gameObject.SetActive(true);
+ arrow.transform.localPosition = element.position;
+ arrow.transform.localEulerAngles = element.rotation;
+ arrow.rectTransform.sizeDelta = element.sizeDelta;
+ arrow.SetSprite(element.iconKey);
+ index++;
+ }
+ }
+ for (int i = index; i < m_Arrows.Count; i++)
+ {
+ m_Arrows[i].gameObject.SetActive(false);
+ }
+ }
+
+ int Compare(int x, int y)
+ {
+ var configx = Config.Instance.Get<TalentConfig>(x);
+ var configy = Config.Instance.Get<TalentConfig>(y);
+ if (configx != null && configy != null)
+ {
+ return configx.order.CompareTo(configy.order);
+ }
+ return 0;
+ }
+
+#if UNITY_EDITOR
+ [ContextMenu("搴旂敤浣嶇疆鏁版嵁")]
+ void ApplyPositionToScriptable()
+ {
+ if (m_EditorScriptable == null)
+ {
+ return;
+ }
+ var count = 0;
+ for (int i = 0; i < m_TalentSkills.Count; i++)
+ {
+ if (m_TalentSkills[i].gameObject.activeSelf)
+ {
+ m_EditorScriptable.ApplyTalentElement(count, m_TalentSkills[i].transform.localPosition);
+ count++;
+ }
+ }
+ m_EditorScriptable.SyncTalentElementsCount(count);
+ count = 0;
+ if (m_Arrows != null)
+ {
+ for (int i = 0; i < m_Arrows.Count; i++)
+ {
+ if (m_Arrows[i].gameObject.activeSelf)
+ {
+ m_EditorScriptable.ApplyArrowElement(count, m_Arrows[i].transform.localPosition,
+ m_Arrows[i].rectTransform.sizeDelta, m_Arrows[i].transform.localEulerAngles,
+ m_Arrows[i].sprite.name.Equals(m_StraightArrowName) ? "Talent_StraightArrow" : "Talent_TurnArrow");
+ count++;
+ }
+ }
+ m_EditorScriptable.SyncArrowElementsCount(count);
+ }
+ }
+#endif
+ }
+}
+
+
+
+
diff --git a/System/Skill/TalentWin.cs.meta b/System/Skill/TalentWin.cs.meta
new file mode 100644
index 0000000..3db09c9
--- /dev/null
+++ b/System/Skill/TalentWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0bfe355d392770544ad6c5a5d59852f1
+timeCreated: 1533002943
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/System/WindowBase/ModelCenter.cs b/System/WindowBase/ModelCenter.cs
index 0b132b5..b61c7cf 100644
--- a/System/WindowBase/ModelCenter.cs
+++ b/System/WindowBase/ModelCenter.cs
@@ -196,6 +196,7 @@
RegisterModel<AwardExchangeModel>();
RegisterModel<WheelOfFortuneModel>();
RegisterModel<FlashRushToBuyModel>();
+ RegisterModel<TalentModel>();
RegisterModel<OpenServerActivityNotifyModel>();
inited = true;
}
diff --git a/Utility/EnumHelper.cs b/Utility/EnumHelper.cs
index 0f6254e..71e73c1 100644
--- a/Utility/EnumHelper.cs
+++ b/Utility/EnumHelper.cs
@@ -565,6 +565,7 @@
CDBPlayerRefresh_Danjing = 187, // 涓圭簿 187
CDBPlayerRefresh_NPCHurtAddPer,//瀵规�墿浼ゅ鍔犳垚 188
FunalHurtPer = 189,// 鏈�缁堜激瀹冲姞鎴�
+ CDBPlayerRefresh_TalentPoint = 190,
};
/** 鐗╁搧鍔犳垚绫诲瀷 */
--
Gitblit v1.8.0