diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab index 957bcdb816..28c13383f3 100644 --- a/Assets/PerfectWorld/Prefab/UIManager.prefab +++ b/Assets/PerfectWorld/Prefab/UIManager.prefab @@ -1775,6 +1775,7 @@ MonoBehaviour: m_iMin: 0 m_iMax: 0 m_iPos: 0 + m_skillGroupIndex: -1 --- !u!222 &4529057318008104088 CanvasRenderer: m_ObjectHideFlags: 0 @@ -2535,6 +2536,139 @@ MonoBehaviour: m_PointerBehavior: 0 m_CursorLockBehavior: 0 m_ScrollDeltaPerTick: 6 +--- !u!1 &1260673443396960607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 665101671249071216} + - component: {fileID: 5852019988558300524} + - component: {fileID: 4807528781054845854} + - component: {fileID: 2271817625555567393} + m_Layer: 5 + m_Name: ShowLocalItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &665101671249071216 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260673443396960607} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5274902618964925175} + m_Father: {fileID: 7304194108989414091} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 46.5, y: -408.5} + m_SizeDelta: {x: 73, y: 73} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5852019988558300524 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260673443396960607} + m_CullTransparentMesh: 1 +--- !u!114 &4807528781054845854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260673443396960607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2271817625555567393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260673443396960607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4807528781054845854} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1890210201668811196} + m_TargetAssemblyTypeName: CECUIManager, Assembly-CSharp + m_MethodName: ShowDlgAwardEquippedItemsLocalTest + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!1 &1287587630908865938 GameObject: m_ObjectHideFlags: 0 @@ -5148,12 +5282,13 @@ RectTransform: - {fileID: 7009781864899289290} - {fileID: 306866035769036868} - {fileID: 7749074831901819156} + - {fileID: 665101671249071216} m_Father: {fileID: 4771507653765862825} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -60, y: 192.35} - m_SizeDelta: {x: 114.55328, y: 384.7} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 114.5533, y: 470.53} m_Pivot: {x: 0, y: 1} --- !u!114 &7541624867441988093 MonoBehaviour: @@ -5569,7 +5704,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 0, y: -225} - m_SizeDelta: {x: 120, y: 384.7} + m_SizeDelta: {x: 120, y: 470.53} m_Pivot: {x: 0, y: 1} --- !u!1 &2844154145387244641 GameObject: @@ -11021,6 +11156,7 @@ MonoBehaviour: m_iMin: 0 m_iMax: 0 m_iPos: 0 + m_skillGroupIndex: -1 --- !u!222 &7047362733096336047 CanvasRenderer: m_ObjectHideFlags: 0 @@ -13952,6 +14088,144 @@ MonoBehaviour: m_BlockingMask: serializedVersion: 2 m_Bits: 4294967295 +--- !u!1 &8742329132410766305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5274902618964925175} + - component: {fileID: 1324878229102893980} + - component: {fileID: 3472526562790816081} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5274902618964925175 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742329132410766305} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 665101671249071216} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1324878229102893980 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742329132410766305} + m_CullTransparentMesh: 1 +--- !u!114 &3472526562790816081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8742329132410766305} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Local Item Data + +' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2} + m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24.3 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} --- !u!1 &8760950483244738372 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/PerfectWorld/Scripts/GameData/ExpTypes.cs b/Assets/PerfectWorld/Scripts/GameData/ExpTypes.cs index 9d4767d821..1aacb498af 100644 --- a/Assets/PerfectWorld/Scripts/GameData/ExpTypes.cs +++ b/Assets/PerfectWorld/Scripts/GameData/ExpTypes.cs @@ -977,7 +977,7 @@ namespace BrewMonster [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public ushort[] name; // Name, max 15 characters - public string Name => ByteToStringUtils.UshortArrayToCP936String(name); + public string Name => ByteToStringUtils.UshortArrayToUnicodeString(name); [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] file_matter; // Matter model file path @@ -1951,13 +1951,14 @@ namespace BrewMonster [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public ushort[] name; // name, max 15 chars + public string Name => ByteToStringUtils.UshortArrayToUnicodeString(name); [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] file_matter; // matter file path - + public string FileMatter => ByteToStringUtils.ByteArrayToCP936String(file_matter); [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] file_icon; // icon file path - + public string FileIcon => ByteToStringUtils.ByteArrayToCP936String(file_icon); public int level; // level public int color; // color (0-7) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs index 2ae8861290..389d947ae2 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs @@ -519,18 +519,11 @@ namespace BrewMonster.Scripts.Managers return null; var equipment = EC_IvtrItem.CreateItem(itemData.m_tid, itemData.m_expire_date, itemData.m_iCount); - // Parse item info if available (use Content field) if (itemData.Content != null && itemData.Content.Length > 0) { equipment.SetItemInfo(itemData.Content, itemData.Content.Length); } - - // Align with GetDetailDataFromLocal() (e.g. CDlgAward): parsed addon params use prop.Local so - // AddOneAddOnPropDesc uses the same branches as shop/tooltip (IntToFloat, VisualizeFloatPercent). - if (equipment is EC_IvtrEquip ivtrEquip) - ivtrEquip.SetLocalProps(); - return equipment; } diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs index 954506d4a0..2b1bea8742 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs @@ -1,19 +1,19 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; -using UnityEngine; -using UnityEngine.AddressableAssets; -using ModelRenderer.Scripts.GameData; -using ModelRenderer.Scripts.Common; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; using BrewMonster; using BrewMonster.Common; using BrewMonster.Network; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Reflection; -using BrewMonster.Scripts.Managers; using BrewMonster.Scripts; +using BrewMonster.Scripts.Managers; +using ModelRenderer.Scripts.Common; +using ModelRenderer.Scripts.GameData; +using UnityEngine; +using UnityEngine.AddressableAssets; namespace BrewMonster.Scripts { /// @@ -982,14 +982,13 @@ namespace BrewMonster.Scripts { if (m_iScaleType != (int)EC_IvtrItem.ScaleType.SCALE_SELL) return base.GetScaledPrice(); - + int price = m_iPrice * Count; - + if (MaxEndurance == CurEndurance || MaxEndurance == 0) { return (int)(price * m_fPriceScale + 0.5f); } - else { return (int)(price * m_fPriceScale * CurEndurance / (float)MaxEndurance + 0.5f); @@ -1198,7 +1197,6 @@ namespace BrewMonster.Scripts // refine props – do not change mask further break; } - return flags; } @@ -1207,7 +1205,7 @@ namespace BrewMonster.Scripts /// private static Dictionary s_propIdToType; private static bool s_propMapLoaded; - private static readonly object s_propLock = new object(); + private static readonly object s_propLock = new(); private static void EnsurePropMapLoaded() { @@ -1222,20 +1220,20 @@ namespace BrewMonster.Scripts // Load item_ext_prop.txt from Addressables // Address must match the Addressables "Address" configured in Assets/AddressableAssetsData/... const string address = "Assets/Addressable/item_ext_prop.txt"; - + // Initialize Addressables if not already initialized Addressables.InitializeAsync().WaitForCompletion(); - + // Load the TextAsset synchronously (since GetPropertyType is called synchronously) var textAsset = Addressables.LoadAssetAsync(address).WaitForCompletion(); - + if (textAsset != null && !string.IsNullOrEmpty(textAsset.text)) { // Parse the text content int currentType = -1; bool inTypeBlock = false; bool inBlockComment = false; - + using (var reader = new StringReader(textAsset.text)) { string rawLine; @@ -1295,7 +1293,6 @@ namespace BrewMonster.Scripts } } } - } else { @@ -1323,28 +1320,27 @@ namespace BrewMonster.Scripts // Unknown return 0xff; } - + /// /// Set properties to local /// - public void SetLocalProps() + public override void SetLocalProps() { if (Props.Count == 0) return; - foreach (Property prop in Props) { prop.Local = true; } } - + /// /// Get deadly strike rate provided by this equipment /// public int GetDeadlyStrikeRate(bool suiteGen) { int val = 0; - + if (suiteGen) { // Suite generation logic would go here @@ -1359,10 +1355,10 @@ namespace BrewMonster.Scripts val += prop.Params[0]; } } - + return val; } - + /// /// Decide equipment name color /// @@ -1371,9 +1367,9 @@ namespace BrewMonster.Scripts int index = GetColorStrID(TemplateId); if (index >= 0) return index; - + int col = (int)DescriptipionMsg.ITEMDESC_COL_WHITE; - + switch (FixProps) { case 1: col = (int)DescriptipionMsg.ITEMDESC_COL_GREEN; break; @@ -1384,10 +1380,10 @@ namespace BrewMonster.Scripts col = (int)DescriptipionMsg.ITEMDESC_COL_LIGHTBLUE; break; } - + return col; } - + /// /// Get color string ID for template /// @@ -1402,9 +1398,9 @@ namespace BrewMonster.Scripts else return (int)DescriptipionMsg.ITEMDESC_COL2_START + iIndex - 7 + 1; } - + #endregion - + #region Description Methods (high level entry points) /// @@ -1505,12 +1501,12 @@ namespace BrewMonster.Scripts public string GetBoothBuyDesc() { m_strDesc = ""; - + int white = (int)DescriptipionMsg.ITEMDESC_COL_WHITE; - + // Item name AddDescText(white, true, GetItemDescString(DescriptipionMsg.ITEMDESC_NAME), GetName()); - + // Base stats from element data string baseStats = GetBaseStatsDesc(); if (!string.IsNullOrEmpty(baseStats)) @@ -1531,7 +1527,7 @@ namespace BrewMonster.Scripts // Price AddPriceDesc(white, false); - + return m_strDesc; } @@ -1893,7 +1889,6 @@ namespace BrewMonster.Scripts { string tmpDesc = m_strDesc; m_strDesc = ""; - AddOneAddOnPropDesc(prop.Type, prop.Params, null, null, prop.Local); string result = m_strDesc; @@ -2446,7 +2441,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(idString), p0); - AddDescText(color, true, "~{0}", p1); + AddDescText(color, true, "~~{0}", p1); } else { @@ -2471,7 +2466,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(idString), f0); - AddDescText(color, true, "~{0:F2}", f1); + AddDescText(color, true, "~~{0:F2}", f1); } else { @@ -2496,7 +2491,7 @@ namespace BrewMonster.Scripts if (v0 != v1) { AddDescText(color, false, GetItemDescString(idString), v0); - AddDescText(color, true, "~{0}%%", v1); + AddDescText(color, true, "~~{0}%%", v1); } else { @@ -2521,7 +2516,7 @@ namespace BrewMonster.Scripts if (v0 != v1) { AddDescText(color, false, GetItemDescString(idString), v0); - AddDescText(color, true, "~{0}%%", v1); + AddDescText(color, true, "~~{0}%%", v1); } else { @@ -2546,7 +2541,7 @@ namespace BrewMonster.Scripts if (v0 != v1) { AddDescText(color, false, GetItemDescString(idString), v0); - AddDescText(color, true, "~{0}%%", v1); + AddDescText(color, true, "~~{0}%%", v1); } else { @@ -2571,7 +2566,7 @@ namespace BrewMonster.Scripts if (h0 != h1) { AddDescText(color, false, GetItemDescString(idString), h0); - AddDescText(color, true, "~{0}", h1); + AddDescText(color, true, "~~{0}", h1); } else { @@ -2594,7 +2589,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(idString)); - AddDescText(color, true, " %+d~%d", p0, p1); + AddDescText(color, true, " %+d~~%d", p0, p1); } else { @@ -2642,7 +2637,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_MAXPHYDAMAGE), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -2684,7 +2679,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_MAXMAGICDAMAGE), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -2785,15 +2780,15 @@ namespace BrewMonster.Scripts AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_ADDATKDIST), IntToFloat(p0)); } break; - - case 11: // ����ʱ�� + + case 11: // ����ʱ�� if (local) { - AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_CASTTIME), -p0); + AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_CASTTIME), -VisualizeFloatPercent(p0)); } else { - AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_CASTTIME), -VisualizeFloatPercent(p0)); + AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_CASTTIME), -p0); } break; @@ -2836,7 +2831,7 @@ namespace BrewMonster.Scripts { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_GOLDDEFENCE)); if (p0 != p1) - AddDescText(color, true, " %d~%d", p0, p1); + AddDescText(color, true, " %d~~%d", p0, p1); else AddDescText(color, true, " %d", p0); } @@ -2855,7 +2850,7 @@ namespace BrewMonster.Scripts if ((p0) != (p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_GOLDDEFEXTRA), (p0)); - AddDescText(color, true, "~-%.2f%%", p1); + AddDescText(color, true, "~~-%.2f%%", p1); } else { @@ -2874,7 +2869,7 @@ namespace BrewMonster.Scripts AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_WOODDEFENCE)); if (p0 != p1) - AddDescText(color, true, " %d~%d", p0, p1); + AddDescText(color, true, " %d~~%d", p0, p1); else AddDescText(color, true, " %d", p0); } @@ -2894,7 +2889,7 @@ namespace BrewMonster.Scripts if ((p0) != (p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_WOODDEFEXTRA), (p0)); - AddDescText(color, true, "~-%.2f%%", p1); + AddDescText(color, true, "~~-%.2f%%", p1); } else { @@ -2913,7 +2908,7 @@ namespace BrewMonster.Scripts AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_WATERDEFENCE)); if (p0 != p1) - AddDescText(color, true, " %d~%d", p0, p1); + AddDescText(color, true, " %d~~%d", p0, p1); else AddDescText(color, true, " %d", p0); } @@ -2933,7 +2928,7 @@ namespace BrewMonster.Scripts if ((p0) != (p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_WATERDEFEXTRA), (p0)); - AddDescText(color, true, "~-%.2f%%", p1); + AddDescText(color, true, "~~-%.2f%%", p1); } else { @@ -2952,7 +2947,7 @@ namespace BrewMonster.Scripts AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_FIREDEFENCE)); if (p0 != p1) - AddDescText(color, true, " %d~%d", p0, p1); + AddDescText(color, true, " %d~~%d", p0, p1); else AddDescText(color, true, " %d", p0); } @@ -2960,19 +2955,18 @@ namespace BrewMonster.Scripts { if (aPEEVals != null) aPEEVals[PEEI_FIREDEF] += p0; - AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_FIREDEFENCE)); AddDescText(color, true, " %+d", p0); } break; - + case 22: // ���(%) if (local) { if ((p0) != (p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_FIREDEFEXTRA), (p0)); - AddDescText(color, true, "~-%.2f%%", p1); + AddDescText(color, true, "~~-%.2f%%", p1); } else { @@ -2991,7 +2985,7 @@ namespace BrewMonster.Scripts AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_EARTHDEFENCE)); if (p0 != p1) - AddDescText(color, true, " %d~%d", p0, p1); + AddDescText(color, true, " %d~~%d", p0, p1); else AddDescText(color, true, " %d", p0); } @@ -3011,7 +3005,7 @@ namespace BrewMonster.Scripts if ((p0) != (p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_EARTHDEFEXTRA), (p0)); - AddDescText(color, true, "~-%.2f%%", p1); + AddDescText(color, true, "~~-%.2f%%", p1); } else { @@ -3128,7 +3122,7 @@ namespace BrewMonster.Scripts AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_WOODDEFENCE)); AddDescText(color, true, " %+d", -p1); break; - + case 35: // HP if (!local) { @@ -3187,7 +3181,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_STRENGTH), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3206,7 +3200,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_AGILITY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3225,7 +3219,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_ENERGY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3244,7 +3238,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_VITALITY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3274,7 +3268,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_ATKRATING), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3297,7 +3291,6 @@ namespace BrewMonster.Scripts AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_ATKRATINGEXTRA), p0); } break; - case 48: // �ƶ��ٶ� AddDescText(color, true, GetItemDescString(DescriptipionMsg.ITEMDESC_RUNSPEED), IntToFloat(p0)); break; @@ -3369,7 +3362,7 @@ namespace BrewMonster.Scripts if (VisualizeFloatPercent(p0) != VisualizeFloatPercent(p1)) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_REQEXTRA), -VisualizeFloatPercent(p0)); - AddDescText(color, true, "~%d", VisualizeFloatPercent(p1)); + AddDescText(color, true, "~~%d", VisualizeFloatPercent(p1)); } else { @@ -3459,7 +3452,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_ATK_DEGREE), p0); - AddDescText(color, true, "~{0}", p1); + AddDescText(color, true, "~~{0}", p1); } else { @@ -3740,7 +3733,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_VITALITY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3759,7 +3752,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_STRENGTH), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3778,7 +3771,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_AGILITY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { @@ -3797,7 +3790,7 @@ namespace BrewMonster.Scripts if (p0 != p1) { AddDescText(color, false, GetItemDescString(DescriptipionMsg.ITEMDESC_ENERGY), p0); - AddDescText(color, true, "~%d", p1); + AddDescText(color, true, "~~%d", p1); } else { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs index d3a7149114..db7f08d3b0 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs @@ -1,13 +1,13 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; -using System.IO; using BrewMonster; +using BrewMonster.Network; using ModelRenderer.Scripts.Common; using ModelRenderer.Scripts.GameData; using UnityEngine; -using BrewMonster.Network; namespace BrewMonster.Scripts { @@ -809,7 +809,7 @@ namespace BrewMonster.Scripts /// public static EC_IvtrItem CreateItem(int tid, int expire_date, int iCount, int idSpace = 0) { - var pItem = new EC_IvtrItem(tid, expire_date); + EC_IvtrItem pItem; DATA_TYPE DataType = DATA_TYPE.DT_INVALID; object data = ElementDataManProvider.GetElementDataMan().get_data_ptr((uint)tid, ID_SPACE.ID_SPACE_ESSENCE, ref DataType); //Debug.Log("Create item data: DataType: " + DataType); @@ -1509,8 +1509,9 @@ namespace BrewMonster.Scripts return -1; } - protected virtual void SetLocalProps() + public virtual void SetLocalProps() { + } protected virtual void AddDescText(int iCol, bool bRet, string szText, params object[] args) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrStone.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrStone.cs index b725b3bfbd..ab1c9abd8f 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrStone.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrStone.cs @@ -1,14 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.IO; using BrewMonster; -using BrewMonster.Scripts.Managers; +using ModelRenderer.Scripts.Common; using ModelRenderer.Scripts.GameData; - +using UnityEngine; +using PerfectWorld.Scripts.Managers; +using BrewMonster.Network; +using BrewMonster.Scripts.Managers; +using BrewMonster.Scripts; +using CSNetwork.GPDataType; +using System.Runtime.InteropServices; namespace BrewMonster.Scripts { public class EC_IvtrStone : EC_IvtrItem { // Data in database - private STONE_ESSENCE m_pDBEssence; - + protected STONE_SUB_TYPE m_pDBSubType; + protected STONE_ESSENCE m_pDBEssence; /// /// Not create logic yet (add summary later) /// @@ -36,9 +46,46 @@ namespace BrewMonster.Scripts public EC_IvtrStone(EC_IvtrStone other) : base(other) { + m_pDBEssence = other.m_pDBEssence; + m_pDBSubType= other.m_pDBSubType; } public STONE_ESSENCE GetDBEssence() { return m_pDBEssence; } + public override bool SetItemInfo(byte[] pInfoData, int iDataLen) + { + base.SetItemInfo(pInfoData, iDataLen); + return true; + } + public override string GetIconFile() + { + return m_pDBEssence.FileIcon; + } + public override string GetName() + { + return m_pDBEssence.Name; + } + protected override string GetNormalDesc(bool bRepair) + { + m_strDesc = ""; + CECStringTab pDescTab = EC_Game.GetItemDesc(); + int white = (int)DescriptipionMsg.ITEMDESC_COL_WHITE; + int namecol = DecideNameCol(); + if (m_iCount > 1) + AddDescText(namecol, true, pDescTab.GetWideString((int)DescriptipionMsg.ITEMDESC_NAMENUMBER), GetName(), m_iCount); + else + AddDescText(namecol, true, pDescTab.GetWideString((int)DescriptipionMsg.ITEMDESC_NAME), GetName()); + AddIDDescText(); + AddExpireTimeDesc(); + AddPriceDesc(white, bRepair); + AddExtDescText(); + return m_strDesc; + + } + public override string GetDropModel() + { + return m_pDBEssence.FileMatter; + } + } } diff --git a/Assets/PerfectWorld/Scripts/Players/CECPlayerActionPlayPolicy.cs b/Assets/PerfectWorld/Scripts/Players/CECPlayerActionPlayPolicy.cs index c9d66aacbb..4a4dd77b79 100644 --- a/Assets/PerfectWorld/Scripts/Players/CECPlayerActionPlayPolicy.cs +++ b/Assets/PerfectWorld/Scripts/Players/CECPlayerActionPlayPolicy.cs @@ -400,7 +400,7 @@ namespace BrewMonster && GetModel().PlayActionByName(szActName, 1.0f, true, 200, true, (uint)PLAYER_ACTION_TYPE.ACT_CASTSKILL, bNoFX, attackEvent, dwFlagMode); if (!check) { - BMLogger.LogError($"Fall back to base implementation: {szActName} failed"); + //BMLogger.LogError($"Fall back to base implementation: {szActName} failed"); //fallback to base implementation(which is non policy based) base.PlaySkillAttackActionWithName(idSkill, szActName, bNoFX, attackEvent, dwFlagMode); } @@ -413,7 +413,7 @@ namespace BrewMonster && GetModel().QueueAction(szActName, nTransTime, (int)PLAYER_ACTION_TYPE.ACT_CASTSKILL, false, false, bNoFX, bResetSpeed, bResetActFlag, attackEvent, dwNewFlagMode); if (!check) { - BMLogger.LogError($"Fall back to base implementation: {szActName} failed"); + //BMLogger.LogError($"Fall back to base implementation: {szActName} failed"); //fallback to base implementation(which is non policy based) base.QueueSkillAttackActionWithName(idSkill, szActName, nTransTime, bNoFX, bResetSpeed, bResetActFlag, attackEvent, dwNewFlagMode); } diff --git a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs index ed78151793..f66e8b6ab0 100644 --- a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs +++ b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs @@ -1,4 +1,5 @@ using System; +using BrewMonster.Common; using BrewMonster.Network; using BrewMonster.Scripts.Managers; using BrewMonster.Scripts.Task; @@ -302,7 +303,103 @@ namespace BrewMonster.Scripts.UI } } } + /// + /// Debug: equipment slot template ids only; rebuild with + + /// for local prop/description testing. + /// + public void TestItemInInventory() + { + m_bThroughNPC = false; + m_bSpendContribution = false; + if (m_pBtn_Confirm != null) + m_pBtn_Confirm.gameObject.SetActive(false); + for (int r = 1; r <= _rowCount; r++) + GetToggleBtnAt(r)?.gameObject.SetActive(false); + + var host = GetHostPlayer(); + var inv = host?.GetInventory(InventoryConst.IVTRTYPE_EQUIPPACK); + if (inv == null) + { + ClearAwardGridForLocalEquipmentTest(0); + return; + } + + int capacity = _rowCount * _columnCount; + int filledCount = 0; + for (int slot = 0; slot < inv.GetSize(); slot++) + { + var eq = inv.GetItem(slot, false); + if (eq == null) + continue; + int tid = eq.GetTemplateID(); + if (tid <= 0) + continue; + + if (filledCount >= capacity) + break; + + int row = filledCount / _columnCount + 1; + int col = filledCount % _columnCount + 1; + var pImage = GetAwardItemAt(row, col); + if (pImage == null) + break; + + var pItem = EC_IvtrItem.CreateItem(tid, 0, 1); + if (pItem == null) + continue; + + pItem.GetDetailDataFromLocal(); + string strDesc = pItem.GetDesc(); + pImage.SetHint(strDesc); + pImage.SetOnClick(OnAwardItemClicked); + var sprite = EC_IvtrItemUtils.Instance.ResolveItemIconSprite(pItem.m_tid); + pImage.SetImage(sprite); + + var pEquip = (EC_IvtrEquip)EC_IvtrItem.CreateItem(pItem.m_tid, pItem.m_expire_date, pItem.m_iCount); + pImage.SetColor( + (pItem.IsEquipment() && pEquip.IsDestroying()) + ? new Color32(128, 128, 128, 255) + : new Color32(255, 255, 255, 255)); + + pImage.SetText(_AL("")); + pImage.Show(true); + filledCount++; + } + + for (int idx = filledCount; idx < capacity; idx++) + { + int row = idx / _columnCount + 1; + int col = idx % _columnCount + 1; + var extra = GetAwardItemAt(row, col); + if (extra == null) + continue; + extra.ClearCover(); + extra.SetHint(_AL("")); + extra.SetText(_AL("")); + } + + int lastFilledRow = filledCount == 0 ? 0 : (filledCount - 1) / _columnCount + 1; + ClearAwardGridForLocalEquipmentTest(lastFilledRow); + } + + void ClearAwardGridForLocalEquipmentTest(int lastFilledRow) + { + for (int i = lastFilledRow + 1; i <= _rowCount; i++) + { + GetToggleBtnAt(i)?.gameObject.SetActive(false); + for (int j = 1; j <= _columnCount; j++) + { + var pImage = GetAwardItemAt(i, j); + if (pImage == null) + break; + pImage.ClearCover(); + pImage.SetHint(_AL("")); + pImage.SetText(_AL("")); + pImage.Show(true); + } + } + } void sprintf(out string szName, string format, int i) { // Convert C-style format specifiers to C# format diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs index 08ac4c1171..60795916e8 100644 --- a/Assets/Scripts/CECUIManager.cs +++ b/Assets/Scripts/CECUIManager.cs @@ -775,6 +775,24 @@ public class CECUIManager : MonoSingleton _dlgPlayerOptions.transform.position = position; } + /// + /// Opens Win_Award () and fills it from equipped template ids using local item data + /// (). For debugging local prop/description behavior. + /// + /// The dialog instance, or null if the prefab is not registered. + public void ShowDlgAwardEquippedItemsLocalTest() + { + const string dlgAwardName = "Win_Award"; + CDlgAward award = null; + if (GetInGameUIMan().GetDialog(dlgAwardName) is CDlgAward dlgAward) + { + award = dlgAward; + } + + var shown = ShowUI(dlgAwardName) as CDlgAward; + (shown ?? award).TestItemInInventory(); + } + /// /// Get the current target NPC ID (same as stored from NPCINFO event) ///