From 12ecb7dcb4fbe92ffb946fc63671829c264252c0 Mon Sep 17 00:00:00 2001 From: Tungdv Date: Sat, 18 Apr 2026 17:40:33 +0700 Subject: [PATCH] fix: fix crash on mobile when enter world. --- .../Managers/EC_IvtrItem/EC_IvtrEquip.cs | 4 +-- .../Managers/EC_IvtrItem/EC_IvtrGoblin.cs | 28 ++++++++++--------- .../PerfectWorld/Scripts/Utils/CECRTDebug.cs | 6 ++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs index f174d16096..05c721512b 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs @@ -683,7 +683,7 @@ namespace BrewMonster.Scripts if (numHole > 0) { Holes.Clear(); - Holes.Capacity = numHole; + //Holes.Capacity = numHole; for (int i = 0; i < numHole; i++) { Holes.Add(dr.ReadInt()); @@ -701,7 +701,7 @@ namespace BrewMonster.Scripts if (numProp > 0) { Props.Clear(); - Props.Capacity = numProp; + //Props.Capacity = numProp; for (int i = 0; i < numProp; i++) { int type = dr.ReadInt(); diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrGoblin.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrGoblin.cs index d75f44eee8..c9241e4464 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrGoblin.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrGoblin.cs @@ -147,7 +147,7 @@ namespace BrewMonster.Scripts }; #endregion List m_aSkills; - List m_aEquipID; + uint[] m_aEquipID; IVTR_ESSENCE_GOBLIN m_Essence; // Goblin essence data // Data in database @@ -188,8 +188,8 @@ namespace BrewMonster.Scripts m_aSkills[i] = other.m_aSkills[i]; // Copy equipments - int iNumEquip = other.m_aEquipID.Count; - m_aEquipID = new List(iNumEquip); + int iNumEquip = other.m_aEquipID.Length; + m_aEquipID = new uint[iNumEquip]; for(i=0; i< iNumEquip; i++) m_aEquipID[i] = other.m_aEquipID[i]; @@ -310,10 +310,12 @@ namespace BrewMonster.Scripts int i, iEquipCnt = dr.ReadInt(); m_Essence.equip_cnt = iEquipCnt; - m_aEquipID = new List(iEquipCnt); - for(i=0; i< iEquipCnt; i++) + // TODO: need optimize m_aEquipID, becasue iEquipCnt is big + m_aEquipID = new uint[iEquipCnt]; + + for (i=0; i< iEquipCnt; i++) { - m_aEquipID[i] = (uint)dr.ReadInt(); + m_aEquipID[i] = ((uint)dr.ReadInt()); } // Set skill info @@ -330,7 +332,7 @@ namespace BrewMonster.Scripts } catch (Exception e) { - Debug.LogError("CECIvtrGoblin::SetItemInfo, data read error (" + e.GetType() + ")"); + Debug.LogError("CECIvtrGoblin::SetItemInfo, data read error (" + e.GetType() + ")" + e.StackTrace); return false; } @@ -393,7 +395,7 @@ namespace BrewMonster.Scripts DATA_TYPE DataType = DATA_TYPE.DT_INVALID; GOBLIN_EQUIP_ESSENCE pDBEssence; - for(i=0; i< m_aEquipID.Count; i++) + for(i=0; i< m_aEquipID.Length; i++) { pDBEssence = (GOBLIN_EQUIP_ESSENCE)pDB.get_data_ptr(m_aEquipID[i], ID_SPACE.ID_SPACE_ESSENCE, ref DataType); iEquipStrength += pDBEssence.strength; @@ -475,9 +477,9 @@ namespace BrewMonster.Scripts AddPriceDesc(white, bRepair); // Equipment info - if(m_aEquipID.Count != 0) + if(m_aEquipID.Length != 0) m_strDesc += "\\r"; - for(i=0; i< m_aEquipID.Count; i++) + for(i=0; i< m_aEquipID.Length; i++) { pDBEssence = (GOBLIN_EQUIP_ESSENCE)pDB.get_data_ptr(m_aEquipID[i], ID_SPACE.ID_SPACE_ESSENCE, ref DataType); AddDescText(white, false, pDescTab.GetWideString((int)DescriptipionMsg.ITEMDESC_GOBLINEQUIP_POS_1 + pDBEssence.equip_type)); @@ -485,7 +487,7 @@ namespace BrewMonster.Scripts } // Skill list - if(m_aSkills.Count != 0 && m_aEquipID.Count == 0) + if(m_aSkills.Count != 0 && m_aEquipID.Length == 0) m_strDesc += "\\r"; for (i=0; i < m_aSkills.Count; i++) { @@ -554,7 +556,7 @@ namespace BrewMonster.Scripts DATA_TYPE DataType = DATA_TYPE.DT_INVALID; GOBLIN_EQUIP_ESSENCE pDBEssence; - for(i=0; i< m_aEquipID.Count; i++) + for(i=0; i< m_aEquipID.Length; i++) { pDBEssence = (GOBLIN_EQUIP_ESSENCE)pDB.get_data_ptr(m_aEquipID[i], ID_SPACE.ID_SPACE_ESSENCE, ref DataType); iEquipStrength += pDBEssence.strength; @@ -679,7 +681,7 @@ namespace BrewMonster.Scripts DATA_TYPE DataType = DATA_TYPE.DT_INVALID; GOBLIN_EQUIP_ESSENCE pDBEssence; - for(i=0; i< m_aEquipID.Count; i++) + for(i=0; i< m_aEquipID.Length; i++) { pDBEssence = (GOBLIN_EQUIP_ESSENCE)pDB.get_data_ptr(m_aEquipID[i], ID_SPACE.ID_SPACE_ESSENCE, ref DataType); iRet += pDBEssence.magic[iIndex]; diff --git a/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs b/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs index 6012a4da6b..c80b1fe624 100644 --- a/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs +++ b/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs @@ -1,8 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using UnityEngine; namespace BrewMonster { @@ -150,8 +151,9 @@ namespace BrewMonster } void BoundCheck(int dwSize) { - if (m_pCur + dwSize < m_pStart || m_pCur + dwSize > m_pEnd) + if (m_pCur < m_pStart || m_pCur + dwSize > m_pEnd) { + //Debug.LogError("TYPE_OVERBOUND " + m_pCur + " || " + m_pStart + " || " + (m_pCur + dwSize) + " || " + m_pEnd); throw new System.InvalidOperationException("Out of bounds"); } }