From 07b41349057066c0ea47ee02ec3fda360892f766 Mon Sep 17 00:00:00 2001 From: vuong dinh hoang Date: Wed, 22 Apr 2026 15:34:26 +0700 Subject: [PATCH] fix bug move to select character scene then enter world again then player can't learn new skills --- .../Scripts/Skills/EC_HostSkillModel.cs | 20 +++++++++++++------ .../Scripts/UI/Dialogs/CDlgSkillSubList.cs | 6 +++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs b/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs index 2738567c52..d755b5c333 100644 --- a/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs +++ b/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs @@ -176,12 +176,14 @@ namespace BrewMonster.Scripts.Skills //BMLogger.LogError("ProcessServiceList npcList.count:" + npcList.count); //BMLogger.LogError("ProcessServiceList m_allProfNPCs.count:" + m_allProfNPCs.Count); int i; + bool sawProfSkillNpcInList = false; for (i = 0; i < npcList.count; i++) { int tid = npcList.list[i].tid; //BMLogger.LogError("ProcessServiceList tid:" + tid); if (m_allProfNPCs.Contains(tid)) { + sawProfSkillNpcInList = true; //BMLogger.LogError("m_skillLearnNPCNID : " + m_skillLearnNPCNID); //BMLogger.LogError("npcList.list[i].nid : " + npcList.list[i].nid); if (m_skillLearnNPCNID != npcList.list[i].nid) @@ -193,17 +195,25 @@ namespace BrewMonster.Scripts.Skills //NotifyObservers(change); break; } + else + { + // Same trainer instance as before — still refresh service skills (re-enter world / list refresh). + SetCurServiceSkills(tid); + var change = new CECSkillPanelChange(CECSkillPanelChange.enumChangeMask.CHANGE_SKILL_NPC, 0, 0); + break; + } } } - if (i == npcList.count && m_skillLearnNPCNID != 0) + if (i == npcList.count && m_skillLearnNPCNID != 0 && !sawProfSkillNpcInList) { m_skillLearnNPCNID = 0; SetCurServiceSkills(0); var change = new CECSkillPanelChange(CECSkillPanelChange.enumChangeMask.CHANGE_SKILL_NPC, 0, 0); //NotifyObservers(change); } - m_npcListData.Clear(); + // Do not Clear m_npcListData: Initialize() may run ProcessServiceList again after Release(); + // clearing here left npcDataSize 0 on world re-entry. New packets replace m_npcListData in RecvNPCServiceList. } //BMLogger.LogError("HoangDev: m_npcListData.Size :"+ m_npcListData.Size); @@ -320,10 +330,8 @@ namespace BrewMonster.Scripts.Skills { return; } - else - { - ProcessServiceList(); - } + + ProcessServiceList(); } private void InitSkillTreeRootMap(IEnumerable rootSkills) { diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/CDlgSkillSubList.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/CDlgSkillSubList.cs index dd156bb996..35b1d68853 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/CDlgSkillSubList.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/CDlgSkillSubList.cs @@ -6,7 +6,7 @@ using BrewMonster.Scripts.Skills; using TMPro; using UnityEngine; using UnityEngine.UI; - + namespace BrewMonster.UI { [DisallowMultipleComponent] @@ -129,7 +129,7 @@ namespace BrewMonster.UI { CreateOneRankDlg(taoistRank); } - + } // ��ʼ�����������ڶԻ���һ���Է�����ڴ� / Initialize rank sub-dialogs once to avoid realloc @@ -214,7 +214,7 @@ namespace BrewMonster.UI CDlgSkillSubListItem subListItem = pSub; if(subListItem == null ) { - BMLogger.LogError("HoangDev: UpdateOneSubDlg subListItem is null for skillID " + skillID); + // BMLogger.LogError("HoangDev: UpdateOneSubDlg subListItem is null for skillID " + skillID); return; } subListItem.UpdateSkill(skillID);