From 1004d644579743be35b8578be9be597f787bc40d Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Mon, 23 Mar 2026 17:59:11 +0700 Subject: [PATCH 1/8] fix again some UI and update money when buy item --- .../Scripts/Network/CSNetwork/GPDataType.cs | 6 + .../Scripts/Network/CSNetwork/GameSession.cs | 3 + .../Scripts/UI/Dialogs/DlgProduce.cs | 15 +- Assets/PerfectWorld/UI/DlgProduce.prefab | 436 +++++++++++++++++- Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab | 1 - Assets/Prefabs/UI/DlgInstall.prefab | 4 + Assets/Prefabs/UI/DlgUninstall.prefab | 10 +- Assets/Scripts/CECHostPlayer.Inventory.cs | 5 +- Assets/Scripts/CECHostPlayer.cs | 13 + 9 files changed, 466 insertions(+), 27 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs index 7bc1b77fee..c65ff4211b 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs @@ -1594,6 +1594,12 @@ namespace CSNetwork.GPDataType public int amount; } + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct cmd_spend_money + { + public ulong cost; + } + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct cmd_produce_start { diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index 825ad2707e..3ed068a715 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -957,6 +957,9 @@ namespace CSNetwork case CommandID.OWN_IVTR_DATA: case CommandID.OWN_IVTR_DETAIL_DATA: case CommandID.GET_OWN_MONEY: + //case CommandID.SPEND_MONEY: + // EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SPENDMONEY, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader); + // break; case CommandID.CHANGE_IVTR_SIZE: EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID); diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs index 163502e67d..561c03662c 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs @@ -1,4 +1,4 @@ -using BrewMonster.Network; +using BrewMonster.Network; using BrewMonster.Scripts.Managers; using BrewMonster.Scripts.Task; using BrewMonster.UI; @@ -23,6 +23,7 @@ namespace BrewMonster [SerializeField] private string tabButtonTextComponentName = "Text"; [Header("Produce Detail")] + [SerializeField] private ScrollRect m_scrollRect; [SerializeField] private Transform itemContainer; [SerializeField] private GameObject itemPb; @@ -241,7 +242,12 @@ namespace BrewMonster if(btn != null) { int capturedIndex = pageIndex; - btn.onClick.AddListener(() => OnTabSelected(capturedIndex)); + btn.onClick.AddListener(() => + { + OnTabSelected(capturedIndex); + ResetOnTop(); + }); + } } } @@ -904,6 +910,11 @@ namespace BrewMonster } + private void ResetOnTop() + { + m_scrollRect.verticalNormalizedPosition = 1f; + } + public void OnDestroy() { ClearContainer(tabBtnContainer); diff --git a/Assets/PerfectWorld/UI/DlgProduce.prefab b/Assets/PerfectWorld/UI/DlgProduce.prefab index 3a0d538d13..5c65e3d61e 100644 --- a/Assets/PerfectWorld/UI/DlgProduce.prefab +++ b/Assets/PerfectWorld/UI/DlgProduce.prefab @@ -272,6 +272,142 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &70114320900013507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 789401693037584548} + - component: {fileID: 174827458641637006} + - component: {fileID: 1706491284262151001} + m_Layer: 5 + m_Name: value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &789401693037584548 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70114320900013507} + 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: 6881174879155244888} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -76.23927, y: -1.2526} + m_SizeDelta: {x: 133.1375, y: 46.509} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &174827458641637006 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70114320900013507} + m_CullTransparentMesh: 1 +--- !u!114 &1706491284262151001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70114320900013507} + 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: 0 + 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: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 33 + m_fontSizeBase: 33 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + 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: -3.1838207, 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 &192599202523918635 GameObject: m_ObjectHideFlags: 0 @@ -8750,7 +8886,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -9695,7 +9831,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 190.55} + m_SizeDelta: {x: 0, y: 414.7042} m_Pivot: {x: 0, y: 1} --- !u!114 &5533501872213994117 MonoBehaviour: @@ -12650,6 +12786,42 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5602599835815257179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2747539822277118411} + m_Layer: 5 + m_Name: bottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2747539822277118411 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5602599835815257179} + 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: 6388306983607914181} + m_Father: {fileID: 6148732438360338751} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 551, y: 76.9929} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &5609841959885064357 GameObject: m_ObjectHideFlags: 0 @@ -13265,9 +13437,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c5653f9f523864f47a37bcfad6111bce, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} tabBtnContainer: {fileID: 8572018612644380183} tabBtnPb: {fileID: 532136160345846687, guid: 548ae6ac061bc9648b093c9f9d203615, type: 3} tabButtonTextComponentName: Text + m_scrollRect: {fileID: 6611684716447600188} itemContainer: {fileID: 3338815937298185852} itemPb: {fileID: 3478571236783653060, guid: b89cfffd83c228f4886273562ff4e111, type: 3} quantityText: @@ -13629,7 +13804,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -13661,7 +13836,7 @@ MonoBehaviour: m_Content: {fileID: 3338815937298185852} m_Horizontal: 0 m_Vertical: 1 - m_MovementType: 1 + m_MovementType: 2 m_Elasticity: 0.1 m_Inertia: 1 m_DecelerationRate: 0.135 @@ -13676,6 +13851,81 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] +--- !u!1 &5847795749707775693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5040031872477380263} + - component: {fileID: 736853770351864709} + - component: {fileID: 7661421627214692747} + m_Layer: 5 + m_Name: icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5040031872477380263 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5847795749707775693} + 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: 6881174879155244888} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 33.8445, y: -1.2525} + m_SizeDelta: {x: 52.5132, y: 46.5092} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &736853770351864709 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5847795749707775693} + m_CullTransparentMesh: 1 +--- !u!114 &7661421627214692747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5847795749707775693} + 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: 21300000, guid: acb875b203dad934ba6728afc54a0457, type: 3} + m_Type: 0 + 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!1 &5857206669955516811 GameObject: m_ObjectHideFlags: 0 @@ -13737,7 +13987,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -14176,6 +14426,41 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5967721196410837174 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7014012699842272084} + m_Layer: 5 + m_Name: padding + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7014012699842272084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5967721196410837174} + 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: 6388306983607914181} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 103.97, y: -8.3571} + m_SizeDelta: {x: 207.94, y: 16.7142} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &6073156465046363571 GameObject: m_ObjectHideFlags: 0 @@ -15859,6 +16144,83 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!1 &6842285581628894140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6881174879155244888} + - component: {fileID: 5629218913493257010} + - component: {fileID: 5492897892786552407} + m_Layer: 5 + m_Name: khung_tien + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6881174879155244888 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6842285581628894140} + 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: 5040031872477380263} + - {fileID: 789401693037584548} + m_Father: {fileID: 6388306983607914181} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 103.49395, y: -46.853596} + m_SizeDelta: {x: 206.9879, y: 58.067} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5629218913493257010 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6842285581628894140} + m_CullTransparentMesh: 1 +--- !u!114 &5492897892786552407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6842285581628894140} + 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: 21300000, guid: 76f221d3f4723d84396a3a34a7c832e6, type: 3} + 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: 0.5 --- !u!1 &6846043642406901907 GameObject: m_ObjectHideFlags: 0 @@ -16970,7 +17332,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 321.8199, y: -135.11911} + m_AnchoredPosition: {x: 321.8199, y: -111.99997} m_SizeDelta: {x: -1331.3702, y: 51.2261} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7107669718148059426 @@ -17383,7 +17745,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -17603,7 +17965,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -18237,11 +18599,12 @@ RectTransform: - {fileID: 4141445087230863076} - {fileID: 1051688473320605609} - {fileID: 9106679786015196161} + - {fileID: 2747539822277118411} m_Father: {fileID: 1108604418086848939} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: -370, y: -127} + m_AnchoredPosition: {x: -370, y: -87} m_SizeDelta: {x: 551, y: 781.7728} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1545313863142283565 @@ -18282,6 +18645,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 12345678901234567890123456789012, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} inventoryPackButtons: - {fileID: 8610406895042781376} - {fileID: 1347616396337973875} @@ -18324,25 +18689,19 @@ MonoBehaviour: detailPanelRoot: {fileID: 1753167144210994885} detailPanelOffset: {x: 20, y: 0} hideDetailOnStart: 1 - nameText: - legacy: {fileID: 0} - tmp: {fileID: 7304082661431364846} descriptionText: legacy: {fileID: 0} tmp: {fileID: 4926468606842631984} - extendedDescText: - legacy: {fileID: 0} - tmp: {fileID: 0} equipButton: {fileID: 0} dropButton: {fileID: 0} autoRefresh: 1 refreshInterval: 1 showEquipmentDetails: 1 moneyTextsLegacy: [] - moneyTextsTMP: [] + moneyTextsTMP: + - {fileID: 1706491284262151001} cashTextsLegacy: [] cashTextsTMP: [] - currentDragImage: {fileID: 0} --- !u!1 &8531818128743034073 GameObject: m_ObjectHideFlags: 0 @@ -18546,8 +18905,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Content: {fileID: 8572018612644380183} - m_Horizontal: 1 - m_Vertical: 1 + m_Horizontal: 0 + m_Vertical: 0 m_MovementType: 1 m_Elasticity: 0.1 m_Inertia: 1 @@ -19426,6 +19785,43 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &8857320422253253108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6388306983607914181} + m_Layer: 5 + m_Name: tien + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6388306983607914181 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8857320422253253108} + 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: 7014012699842272084} + - {fileID: 6881174879155244888} + m_Father: {fileID: 2747539822277118411} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 446.95886, y: -22} + m_SizeDelta: {x: 207.94, y: 76.993} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &8906529666242649700 GameObject: m_ObjectHideFlags: 0 @@ -20028,7 +20424,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 543, y: -135.11911} + m_AnchoredPosition: {x: 543, y: -112} m_SizeDelta: {x: -1578.0154, y: 51.2261} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &379168591246989621 diff --git a/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab b/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab index 7ffea3f607..935a04e445 100644 --- a/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab +++ b/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab @@ -2312,7 +2312,6 @@ MonoBehaviour: - {fileID: 3143844115087084068} cashTextsLegacy: [] cashTextsTMP: [] - currentDragImage: {fileID: 0} --- !u!1 &2120473612711573367 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/UI/DlgInstall.prefab b/Assets/Prefabs/UI/DlgInstall.prefab index d659d2d5d8..450d335849 100644 --- a/Assets/Prefabs/UI/DlgInstall.prefab +++ b/Assets/Prefabs/UI/DlgInstall.prefab @@ -16314,6 +16314,10 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -37 objectReference: {fileID: 0} + - target: {fileID: 6102967088919909530, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} + propertyPath: m_AnchoredPosition.y + value: 10 + objectReference: {fileID: 0} - target: {fileID: 6830833846243993097, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_Name value: item_info diff --git a/Assets/Prefabs/UI/DlgUninstall.prefab b/Assets/Prefabs/UI/DlgUninstall.prefab index 114ae81e8f..f7254aa3f6 100644 --- a/Assets/Prefabs/UI/DlgUninstall.prefab +++ b/Assets/Prefabs/UI/DlgUninstall.prefab @@ -15955,7 +15955,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_SizeDelta.y - value: 948.02 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_LocalPosition.x @@ -16021,13 +16021,17 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: -37 objectReference: {fileID: 0} + - target: {fileID: 6102967088919909530, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} + propertyPath: m_AnchoredPosition.y + value: 10.8 + objectReference: {fileID: 0} - target: {fileID: 6830833846243993097, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_Name value: item_info objectReference: {fileID: 0} - target: {fileID: 6830833846243993097, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_IsActive - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 7209086543831860202, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_AnchorMax.y @@ -16055,7 +16059,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 8894405194986632892, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_SizeDelta.y - value: 928.02 + value: 0 objectReference: {fileID: 0} - target: {fileID: 8894405194986632892, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3} propertyPath: m_AnchoredPosition.x diff --git a/Assets/Scripts/CECHostPlayer.Inventory.cs b/Assets/Scripts/CECHostPlayer.Inventory.cs index b965df4f0e..f9d93b22ea 100644 --- a/Assets/Scripts/CECHostPlayer.Inventory.cs +++ b/Assets/Scripts/CECHostPlayer.Inventory.cs @@ -780,7 +780,10 @@ namespace BrewMonster } m_pPack.RemoveItem(pCmd.chip_idx, 1); - + if (pTessera is EC_IvtrStone stone) + { + AddMoneyAmount(-(int)stone.GetDBEssence().install_price); + } // Refresh equip's data // todo make receive request UnityGameSession.c2s_CmdGetItemInfo(Inventory_type.IVTRTYPE_PACK, pCmd.equip_idx); diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 37320efbc2..699af42947 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -547,6 +547,9 @@ namespace BrewMonster case EC_MsgDef.MSG_HST_PICKUPMONEY: OnMsgHstPickupMoney(Msg); break; + case EC_MsgDef.MSG_HST_SPENDMONEY: + OnMsgHstSpendMoney(Msg); + break; case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break; case EC_MsgDef.MSG_HST_ATTACKONCE: OnMsgHstAttackOnce(Msg); break; case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break; @@ -629,6 +632,16 @@ namespace BrewMonster BubbleText((int)BubbleTextType.BUBBLE_MONEY, (uint)pCmd.amount); } + private void OnMsgHstSpendMoney(ECMSG msg) + { + var data = msg.dwParam1 as byte[]; + if (data == null || data.Length == 0) + return; + + cmd_spend_money pCmd = GPDataTypeHelper.FromBytes(data); + AddMoneyAmount(-(int)pCmd.cost); + } + private void BubbleText(int iIndex, uint dwNum, int p1 = 0) { bool isHost = IsHostPlayer(); From 5b52e17ef47fcfba5e7b7c3df864f5bdb8c5519a Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Tue, 24 Mar 2026 16:11:43 +0700 Subject: [PATCH 2/8] update money when buy item and manufacturing, pethatch, petrec --- Assets/PerfectWorld/Prefab/UIManager.prefab | 369 +++++++++++++++++- .../Scripts/Managers/EC_InventoryUI.cs | 5 + .../Scripts/UI/Dialogs/DlgPetRec.cs | 14 +- Assets/Scripts/CECHostPlayer.Pet.cs | 4 +- 4 files changed, 376 insertions(+), 16 deletions(-) diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab index 25810eb002..16ceecefda 100644 --- a/Assets/PerfectWorld/Prefab/UIManager.prefab +++ b/Assets/PerfectWorld/Prefab/UIManager.prefab @@ -2528,6 +2528,96 @@ MonoBehaviour: m_PointerBehavior: 0 m_CursorLockBehavior: 0 m_ScrollDeltaPerTick: 6 +--- !u!1 &1239118436709597064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9185993710452847837} + - component: {fileID: 3813527339988106691} + - component: {fileID: 1135526870529231829} + - component: {fileID: 8071368568625081365} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9185993710452847837 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239118436709597064} + 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: 2332045924289626483} + m_Father: {fileID: 2593100680991628788} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3813527339988106691 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239118436709597064} + m_CullTransparentMesh: 1 +--- !u!114 &1135526870529231829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239118436709597064} + 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: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + 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 &8071368568625081365 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239118436709597064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 --- !u!1 &1320901936805636085 GameObject: m_ObjectHideFlags: 0 @@ -3496,6 +3586,91 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &1838148716174691973 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2593100680991628788} + - component: {fileID: 1695836777078832130} + m_Layer: 5 + m_Name: BuffIconTemplate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2593100680991628788 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838148716174691973} + 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: 9185993710452847837} + m_Father: {fileID: 7336517896112354473} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1695836777078832130 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1838148716174691973} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 0 + m_TargetGraphic: {fileID: 1135526870529231829} + toggleTransition: 1 + graphic: {fileID: 3077087968573713096} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 --- !u!1 &1907375868528687128 GameObject: m_ObjectHideFlags: 0 @@ -3586,9 +3761,10 @@ MonoBehaviour: m_EditorClassIdentifier: _cinemachineCamera: {fileID: 0} orbital: {fileID: 0} - minSwipeDistance: 0.1 - speedX: 1 - speedY: 1 + dragDeadZone: 0.009259259 + horizontalRotationPerScreen: 60 + verticalRotationPerScreen: 500 + _migratedDeadZoneToNormalized: 1 --- !u!1 &2011212591958706914 GameObject: m_ObjectHideFlags: 0 @@ -4118,6 +4294,81 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2190896689053945876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2332045924289626483} + - component: {fileID: 3922041439874885185} + - component: {fileID: 3077087968573713096} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2332045924289626483 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2190896689053945876} + 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: 9185993710452847837} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3922041439874885185 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2190896689053945876} + m_CullTransparentMesh: 1 +--- !u!114 &3077087968573713096 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2190896689053945876} + 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: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, type: 3} + m_Type: 0 + 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!1 &2219616156878279274 GameObject: m_ObjectHideFlags: 0 @@ -5167,7 +5418,6 @@ RectTransform: - {fileID: 5196010413898095880} - {fileID: 3483809415181351540} - {fileID: 7451658084820611230} - - {fileID: 9121369084142034904} m_Father: {fileID: 2780428059708698453} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -11949,13 +12199,13 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6949335809637514808} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 4956381234499428555} - m_Father: {fileID: 3233441867675090637} + m_Father: {fileID: 3483809415181351540} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -12946,6 +13196,7 @@ RectTransform: - {fileID: 5823843793071880086} - {fileID: 1462603449517194619} - {fileID: 1572942396405590444} + - {fileID: 9121369084142034904} - {fileID: 3994932288534442379} - {fileID: 1491137607121893366} - {fileID: 6742883814524417716} @@ -13778,6 +14029,93 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 64 _target: {x: 0, y: 0, z: 0} +--- !u!1 &7701226945236446671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7336517896112354473} + - component: {fileID: 437641776219854776} + - component: {fileID: 1379399347395413332} + - component: {fileID: 8713793999983479947} + m_Layer: 5 + m_Name: Panel (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7336517896112354473 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7701226945236446671} + 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: 2593100680991628788} + m_Father: {fileID: 2907261990866691440} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 133.1923, y: -138.03845} + m_SizeDelta: {x: 0, y: 11} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &437641776219854776 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7701226945236446671} + m_CullTransparentMesh: 1 +--- !u!114 &1379399347395413332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7701226945236446671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 25 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &8713793999983479947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7701226945236446671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 --- !u!1 &7734186782654785308 GameObject: m_ObjectHideFlags: 0 @@ -23073,30 +23411,33 @@ PrefabInstance: m_AddedGameObjects: - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 7 - addedObject: {fileID: 8852050935391130844} + addedObject: {fileID: 7336517896112354473} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 8 - addedObject: {fileID: 1389770869284841247} + addedObject: {fileID: 8852050935391130844} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 9 - addedObject: {fileID: 9208725189562257770} + addedObject: {fileID: 1389770869284841247} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 10 - addedObject: {fileID: 1505082503590519222} + addedObject: {fileID: 9208725189562257770} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 11 - addedObject: {fileID: 5191021986578083479} + addedObject: {fileID: 1505082503590519222} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 12 - addedObject: {fileID: 494610354563246192} + addedObject: {fileID: 5191021986578083479} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 13 - addedObject: {fileID: 2090006027067688671} + addedObject: {fileID: 494610354563246192} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 14 - addedObject: {fileID: 5264098290850076161} + addedObject: {fileID: 2090006027067688671} - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} insertIndex: 15 + addedObject: {fileID: 5264098290850076161} + - targetCorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} + insertIndex: 16 addedObject: {fileID: 6421830357984996457} m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3} diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs index 9b83665e9c..7b160bb684 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs @@ -215,6 +215,9 @@ namespace BrewMonster.Scripts.Managers /// public void UpdateMoney(ulong amount, ulong maxAmount) { + s_pendingMoneyAmount = amount; + s_pendingMoneyMaxAmount = maxAmount; + s_hasPendingMoney = true; string text = amount.ToString(); if (moneyTextsLegacy != null) { @@ -241,6 +244,8 @@ namespace BrewMonster.Scripts.Managers /// public void UpdateCash(int amount) { + s_pendingCashAmount = amount; + s_hasPendingCash = true; string text = amount.ToString(); if (cashTextsLegacy != null) { diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetRec.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetRec.cs index f76c5e565c..69602f822a 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetRec.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetRec.cs @@ -205,6 +205,9 @@ namespace BrewMonster.UI if (m_nSlot >= 0) { GetHostPlayer().RestorePet(m_nSlot); + LoadPetSlotFromCorral(); + ClearPet(); + UpdatePetSlotUI(); GetGameUIMan()?.EndNPCService(); Show(false); //GetGameUIMan()->m_pDlgPetList->Show(false); @@ -392,10 +395,10 @@ namespace BrewMonster.UI if (m_pBtn_PetSlots[i] == null) continue; + var buttonImage = m_pBtn_PetSlots[i].GetComponent(); var petData = m_petSlots[i]; if (petData != null) { - var buttonImage = m_pBtn_PetSlots[i].GetComponent(); if (buttonImage != null) { DATA_TYPE dataType = DATA_TYPE.DT_INVALID; @@ -440,6 +443,15 @@ namespace BrewMonster.UI bool isSelectedPet = (m_nSlot == i && m_pCurrentPet != null); m_pBtn_PetSlots[i].interactable = !isActivePet && !isSelectedPet; } + else + { + if (buttonImage != null) + { + ClearSlotIcon(buttonImage); + buttonImage.color = Color.white; + } + m_pBtn_PetSlots[i].interactable = true; + } } } diff --git a/Assets/Scripts/CECHostPlayer.Pet.cs b/Assets/Scripts/CECHostPlayer.Pet.cs index 1d733b8410..02af041802 100644 --- a/Assets/Scripts/CECHostPlayer.Pet.cs +++ b/Assets/Scripts/CECHostPlayer.Pet.cs @@ -213,6 +213,7 @@ namespace BrewMonster return false; } + AddMoneyAmount(-pEgg.GetDBEssence().money_hatched); UnityGameSession.c2s_CmdNPCSevHatchPet(iIvtrIdx, pItem.GetTemplateID()); return true; @@ -248,9 +249,10 @@ namespace BrewMonster return false; } + AddMoneyAmount(-pdbe.money_restored); UnityGameSession.c2s_CmdNPCSevRestorePet(iPetIdx); return true; } } -} \ No newline at end of file +} From d666bbae1e44f97ff77b1f3e359dd6813244f151 Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Tue, 24 Mar 2026 16:34:51 +0700 Subject: [PATCH 3/8] update UIManager.prefab --- Assets/PerfectWorld/Prefab/UIManager.prefab | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab index 4d2553ff3c..8165f81047 100644 --- a/Assets/PerfectWorld/Prefab/UIManager.prefab +++ b/Assets/PerfectWorld/Prefab/UIManager.prefab @@ -1297,7 +1297,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -47.6} + m_AnchoredPosition: {x: -187.8, y: -47.6} m_SizeDelta: {x: 191, y: 60} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6965363531247653623 @@ -4319,7 +4319,6 @@ RectTransform: - {fileID: 5196010413898095880} - {fileID: 3483809415181351540} - {fileID: 7451658084820611230} - - {fileID: 9121369084142034904} m_Father: {fileID: 2780428059708698453} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -4847,7 +4846,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -791.8898, y: -64.69995} + m_AnchoredPosition: {x: -903, y: -64.69995} m_SizeDelta: {x: 96, y: 96} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &4294505687272824498 @@ -9588,13 +9587,13 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6949335809637514808} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 4956381234499428555} - m_Father: {fileID: 3233441867675090637} + m_Father: {fileID: 3483809415181351540} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -10498,6 +10497,7 @@ RectTransform: - {fileID: 5823843793071880086} - {fileID: 1462603449517194619} - {fileID: 1572942396405590444} + - {fileID: 9121369084142034904} - {fileID: 3994932288534442379} - {fileID: 1491137607121893366} - {fileID: 6742883814524417716} @@ -11332,7 +11332,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -680, y: -64.70001} + m_AnchoredPosition: {x: -791.1102, y: -64.70001} m_SizeDelta: {x: 96, y: 96} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7156160830622099876 @@ -15603,11 +15603,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 5834405183358786743, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3} propertyPath: m_AnchoredPosition.x - value: 41.1442 + value: 41.144287 objectReference: {fileID: 0} - target: {fileID: 5834405183358786743, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3} propertyPath: m_AnchoredPosition.y - value: 3.2666 + value: 3.2666016 objectReference: {fileID: 0} - target: {fileID: 5834405183358786743, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -18559,7 +18559,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 627631504828013321, guid: b78469eadfa272c4f8fee4c8cae4b26f, type: 3} propertyPath: m_AnchoredPosition.x - value: 0.00012207031 + value: 0 objectReference: {fileID: 0} - target: {fileID: 627631504828013321, guid: b78469eadfa272c4f8fee4c8cae4b26f, type: 3} propertyPath: m_AnchoredPosition.y @@ -18832,7 +18832,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 627631504828013321, guid: c7269974711314d68bdb2103c9ecebbd, type: 3} propertyPath: m_AnchoredPosition.x - value: 0.00012207031 + value: 0 objectReference: {fileID: 0} - target: {fileID: 627631504828013321, guid: c7269974711314d68bdb2103c9ecebbd, type: 3} propertyPath: m_AnchoredPosition.y From 445ff4ae6238596a3b742883d68a5dbd4d093e52 Mon Sep 17 00:00:00 2001 From: HungDK <> Date: Tue, 24 Mar 2026 17:14:45 +0700 Subject: [PATCH 4/8] Fix dead and revive error before enter world --- .../Scripts/UI/Popup/PopupManager.cs | 30 +++++++++++++++++-- Assets/Scripts/CECHostPlayer.Combat.cs | 5 +--- Assets/Scripts/CECHostPlayer.World.cs | 4 +-- Assets/Scripts/CECHostPlayer.cs | 4 ++- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/UI/Popup/PopupManager.cs b/Assets/PerfectWorld/Scripts/UI/Popup/PopupManager.cs index 50ec155b01..5d8ab010a7 100644 --- a/Assets/PerfectWorld/Scripts/UI/Popup/PopupManager.cs +++ b/Assets/PerfectWorld/Scripts/UI/Popup/PopupManager.cs @@ -6,6 +6,7 @@ namespace BrewMonster public class PopupManager : MonoBehaviour { public static PopupManager Instance { get; private set; } + private static bool s_shouldShowRevivePopup; [SerializeField] private GameObject ReviveOptionPopup; @@ -14,6 +15,7 @@ namespace BrewMonster if (Instance == null) { Instance = this; + ApplyRevivePopupState(); } else { @@ -31,11 +33,35 @@ namespace BrewMonster public void OnPlayerDied() { - ReviveOptionPopup.SetActive(true); + s_shouldShowRevivePopup = true; + ApplyRevivePopupState(); } public void OnPlayerRevived() { - ReviveOptionPopup.SetActive(false); + s_shouldShowRevivePopup = false; + ApplyRevivePopupState(); + } + + private void ApplyRevivePopupState() + { + if (ReviveOptionPopup == null) + { + return; + } + + ReviveOptionPopup.SetActive(s_shouldShowRevivePopup); + } + + public static void NotifyPlayerDied() + { + s_shouldShowRevivePopup = true; + Instance?.ApplyRevivePopupState(); + } + + public static void NotifyPlayerRevived() + { + s_shouldShowRevivePopup = false; + Instance?.ApplyRevivePopupState(); } } diff --git a/Assets/Scripts/CECHostPlayer.Combat.cs b/Assets/Scripts/CECHostPlayer.Combat.cs index 2dda8e9018..c0f6a630c2 100644 --- a/Assets/Scripts/CECHostPlayer.Combat.cs +++ b/Assets/Scripts/CECHostPlayer.Combat.cs @@ -876,10 +876,7 @@ namespace BrewMonster EventBus.PublishChannel(GetCharacterID(), new ClearComActFlagAllRankNodesEvent(true)); PlayAction((int)PLAYER_ACTION_TYPE.ACT_GROUNDDIE); - if (PopupManager.Instance != null) - { - PopupManager.Instance.OnPlayerDied(); - } + PopupManager.NotifyPlayerDied(); } private bool NormalAttackObject(int idTarget, bool bForceAttack, bool bMoreClose = false) diff --git a/Assets/Scripts/CECHostPlayer.World.cs b/Assets/Scripts/CECHostPlayer.World.cs index c81bc56248..3f02371a88 100644 --- a/Assets/Scripts/CECHostPlayer.World.cs +++ b/Assets/Scripts/CECHostPlayer.World.cs @@ -1,4 +1,4 @@ -using BrewMonster.Network; +using BrewMonster.Network; using BrewMonster.Scripts; using CSNetwork; using CSNetwork.GPDataType; @@ -35,7 +35,7 @@ namespace BrewMonster } public void OnMsgHstGoto(in ECMSG Msg) { - PopupManager.Instance.OnPlayerRevived(); + PopupManager.NotifyPlayerRevived(); // p1 is a byte[] buffer; parse into cmd_notify_hostpos then set position // p1 是一个 byte[] 缓冲区;解析为 cmd_notify_hostpos 然后设置位置 byte[] buf = (byte[])Msg.dwParam1; diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 3b3a67d0a4..7f2aeea186 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -1454,9 +1454,11 @@ namespace BrewMonster //m_pWorkMan.StartWork_p0(pWork); EventBus.PublishChannel(GetCharacterID(), new ClearComActFlagAllRankNodesEvent(true)); PlayAction((int)PLAYER_ACTION_TYPE.ACT_GROUNDDIE); + PopupManager.NotifyPlayerDied(); } else { + PopupManager.NotifyPlayerRevived(); UnityGameSession.c2s_CmdGetAllData(true, true, false); UnityGameSession.c2s_CmdSendEnterPKPrecinct(); UnityGameSession.RequesrQueryPlayerCash(); @@ -2632,7 +2634,7 @@ namespace BrewMonster { /* CECGameUIMan pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan(); pGameUI.PopupReviveDialog(true);*/ - PopupManager.Instance.OnPlayerDied(); + PopupManager.NotifyPlayerDied(); } m_bEnterGame = true; } From 5f97ad0bc83e2f20151b673431c2f416137a3ca3 Mon Sep 17 00:00:00 2001 From: HungDK <> Date: Tue, 24 Mar 2026 16:15:42 +0700 Subject: [PATCH 5/8] Update prevent inappropriate word --- .../Scripts/UI/Login/CreateCharacterScreen.cs | 82 ++++++++++++++++++- Assets/Prefabs/UI/CreateCharacterUI.prefab | 2 + 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs b/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs index 47b5ad4bf7..de7f993a0e 100644 --- a/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs +++ b/Assets/PerfectWorld/Scripts/UI/Login/CreateCharacterScreen.cs @@ -9,6 +9,7 @@ using TMPro; using UnityEngine; using UnityEngine.UI; using BrewMonster.Scripts; +using BrewMonster.PerfectWorld.Scripts.Utility.ChatFilter; namespace BrewMonster.UI { @@ -23,9 +24,12 @@ namespace BrewMonster.UI [SerializeField] private Button maleGenderButton; [SerializeField] private Button femaleGenderButton; [SerializeField] private TMP_InputField nameInputField; + [SerializeField] private TMP_Text validationMessageText; [SerializeField] private Button confirmButton; [SerializeField] private Button cancelButton; [SerializeField] private Button backButton; + [SerializeField] private CDlgMessageBox messageBoxPrefab; + private CDlgMessageBox _messageBoxInstance; private int _currentProfession = -1; private int _currentGender = -1; @@ -79,6 +83,7 @@ namespace BrewMonster.UI if (nameInputField != null) { nameInputField.onSubmit.AddListener((text) => { if (CanConfirm()) OnConfirmClicked(); }); + nameInputField.onValueChanged.AddListener((text) => ClearValidationError()); } } @@ -97,6 +102,8 @@ namespace BrewMonster.UI nameInputField.Select(); } + ClearValidationError(); + UpdateConfirmButtonState(); } @@ -180,10 +187,8 @@ namespace BrewMonster.UI if (!CanConfirm()) return; - string characterName = nameInputField != null ? nameInputField.text : ""; - if (string.IsNullOrWhiteSpace(characterName)) + if (!TryGetValidatedCharacterName(out string characterName)) { - Debug.LogWarning("Character name cannot be empty"); return; } @@ -214,6 +219,77 @@ namespace BrewMonster.UI _onCancel?.Invoke(); } + private bool TryGetValidatedCharacterName(out string characterName) + { + characterName = nameInputField != null ? nameInputField.text.Trim() : string.Empty; + if (string.IsNullOrWhiteSpace(characterName)) + { + ShowValidationError("Character name cannot be empty."); + return false; + } + + if (ChatFilterService.ContainsBadWord(characterName)) + { + ShowValidationError("Character name contains inappropriate words."); + return false; + } + + ClearValidationError(); + return true; + } + + private void ShowValidationError(string message) + { + if (validationMessageText != null) + { + validationMessageText.text = message; + validationMessageText.gameObject.SetActive(true); + } + + var dialog = GetOrCreateMessageBoxInstance(); + if (dialog != null) + { + dialog.ShowMessageBoxYes("Invalid Character Name", message, null, null); + } + else + { + CECUIManager.Instance?.ShowMessageBoxYes("Invalid Character Name", message, null, null); + } + Debug.LogWarning(message); + } + + private CDlgMessageBox GetOrCreateMessageBoxInstance() + { + if (_messageBoxInstance != null) + { + return _messageBoxInstance; + } + + if (messageBoxPrefab == null) + { + return null; + } + + var canvas = GetComponentInParent(); + if (canvas == null) + { + return null; + } + + _messageBoxInstance = Instantiate(messageBoxPrefab, canvas.transform); + _messageBoxInstance.gameObject.SetActive(false); + return _messageBoxInstance; + } + + private void ClearValidationError() + { + if (validationMessageText != null) + { + validationMessageText.text = string.Empty; + validationMessageText.gameObject.SetActive(false); + } + } + private bool CanConfirm() { if (_currentProfession < 0 || _currentProfession >= (int)Profession.NUM_PROFESSION) diff --git a/Assets/Prefabs/UI/CreateCharacterUI.prefab b/Assets/Prefabs/UI/CreateCharacterUI.prefab index f35677284c..861d0ec8f3 100644 --- a/Assets/Prefabs/UI/CreateCharacterUI.prefab +++ b/Assets/Prefabs/UI/CreateCharacterUI.prefab @@ -912,9 +912,11 @@ MonoBehaviour: maleGenderButton: {fileID: 4799972544958627575} femaleGenderButton: {fileID: 975101812964933518} nameInputField: {fileID: 5515740729786715052} + validationMessageText: {fileID: 0} confirmButton: {fileID: 2058345032894912639} cancelButton: {fileID: 3605310658127377634} backButton: {fileID: 3605310658127377634} + messageBoxPrefab: {fileID: 1069295583529170983, guid: 54cccb2c6a758a24183474cd385ccb2c, type: 3} --- !u!1 &2083311518824170680 GameObject: m_ObjectHideFlags: 0 From 2ef8ec179a468f4340d1b52a78b72bef07548673 Mon Sep 17 00:00:00 2001 From: HungDK <> Date: Tue, 24 Mar 2026 15:17:29 +0700 Subject: [PATCH 6/8] Update shop and inventory --- .../Scripts/Managers/EC_InventoryUI.cs | 75 ++-- .../Scripts/Network/CSNetwork/GameSession.cs | 13 + .../PerfectWorld/Scripts/UI/ShopItemPanel.cs | 9 +- .../PerfectWorld/Scripts/UI/ShopUIManager.cs | 87 +++- Assets/Prefabs/UI/InventoryUI.prefab | 129 +++--- Assets/Prefabs/UI/MallUI.prefab | 389 ++++++++---------- Assets/Scripts/CECHostPlayer.Inventory.cs | 15 +- 7 files changed, 355 insertions(+), 362 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs index 7b160bb684..8a3e9d53e7 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs @@ -43,9 +43,11 @@ namespace BrewMonster.Scripts.Managers [SerializeField] private List moneyTextsLegacy = new List(); [SerializeField] private List moneyTextsTMP = new List(); - [Header("Cash UI (assign any text fields to mirror cash amount)")] - [SerializeField] private List cashTextsLegacy = new List(); - [SerializeField] private List cashTextsTMP = new List(); + [Header("Character UI (assign in Inspector)")] + [SerializeField] private UnityEngine.UI.Text characterNameTextLegacy; + [SerializeField] private TMPro.TextMeshProUGUI characterNameTextTMP; + [SerializeField] private UnityEngine.UI.Text characterLevelTextLegacy; + [SerializeField] private TMPro.TextMeshProUGUI characterLevelTextTMP; private float lastRefreshTime; @@ -53,8 +55,6 @@ namespace BrewMonster.Scripts.Managers private static bool s_hasPendingMoney; private static ulong s_pendingMoneyAmount; private static ulong s_pendingMoneyMaxAmount; - private static bool s_hasPendingCash; - private static int s_pendingCashAmount; // Flags to prevent log spam for extended description warnings // 防止扩展描述警告日志刷屏的标志 @@ -128,6 +128,7 @@ namespace BrewMonster.Scripts.Managers { // Ensure cached values are pushed when the UI is enabled ApplyPendingCurrency(); + UpdateCharacterInfo(); ShowDetailPanel(false); } @@ -207,6 +208,7 @@ namespace BrewMonster.Scripts.Managers view.RenderPackage(inventoryPackButtons, invItems, PKG_INVENTORY, OnInventoryButtonClicked, GetDisplayTextForItem); view.RenderPackage(equipmentPackButtons, eqpItems, PKG_EQUIPMENT, OnInventoryButtonClicked, GetDisplayTextForItem); view.RenderPackage(fashionPackButtons, fshItems, PKG_FASHION, OnInventoryButtonClicked, GetDisplayTextForItem); + UpdateCharacterInfo(); } /// @@ -238,31 +240,26 @@ namespace BrewMonster.Scripts.Managers } } - /// - /// Update all configured cash text components with the current boutique cash amount. - /// Call this when PLAYER_CASH arrives. - /// - public void UpdateCash(int amount) + private void UpdateCharacterInfo() { - s_pendingCashAmount = amount; - s_hasPendingCash = true; - string text = amount.ToString(); - if (cashTextsLegacy != null) + var host = CECGameRun.Instance?.GetHostPlayer(); + string characterName = string.Empty; + string characterLevel = string.Empty; + + if (host != null) { - for (int i = 0; i < cashTextsLegacy.Count; i++) - { - var t = cashTextsLegacy[i]; - if (t != null) t.text = text; - } - } - if (cashTextsTMP != null) - { - for (int i = 0; i < cashTextsTMP.Count; i++) - { - var t = cashTextsTMP[i]; - if (t != null) t.text = text; - } + characterName = host.GetName() ?? string.Empty; + characterLevel = host.GetBasicProps().iLevel.ToString(); } + + if (characterNameTextLegacy != null) + characterNameTextLegacy.text = characterName; + if (characterNameTextTMP != null) + characterNameTextTMP.text = characterName; + if (characterLevelTextLegacy != null) + characterLevelTextLegacy.text = characterLevel; + if (characterLevelTextTMP != null) + characterLevelTextTMP.text = characterLevel; } // Public static entry points to cache values when UI is unavailable @@ -287,36 +284,12 @@ namespace BrewMonster.Scripts.Managers } } - public static void CacheCash(int amount) - { - s_pendingCashAmount = amount; - s_hasPendingCash = true; - // If an instance exists (even inactive), push immediately so the value is ready - var all = Resources.FindObjectsOfTypeAll(); - if (all != null) - { - for (int i = 0; i < all.Length; i++) - { - var ui = all[i]; - if (ui != null && ui.gameObject.scene.IsValid()) - { - ui.ApplyPendingCurrency(); - break; - } - } - } - } - private void ApplyPendingCurrency() { if (s_hasPendingMoney) { UpdateMoney(s_pendingMoneyAmount, s_pendingMoneyMaxAmount); } - if (s_hasPendingCash) - { - UpdateCash(s_pendingCashAmount); - } } private void OnInventoryButtonClicked(byte package, int slot) diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index b57b9b3d3a..8d394ace3e 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -1003,6 +1003,19 @@ namespace CSNetwork break; case CommandID.PLAYER_CASH: { + if (pDataBuf != null) + { + try + { + var cashData = GPDataTypeHelper.FromBytes(pDataBuf); + int cashAmount = cashData.cash_amount; + PostToUnityContext(() => ShopUIManager.CacheCash(cashAmount)); + } + catch (Exception ex) + { + } + } + EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID); break; diff --git a/Assets/PerfectWorld/Scripts/UI/ShopItemPanel.cs b/Assets/PerfectWorld/Scripts/UI/ShopItemPanel.cs index 6e4b377cca..8ddc14a964 100644 --- a/Assets/PerfectWorld/Scripts/UI/ShopItemPanel.cs +++ b/Assets/PerfectWorld/Scripts/UI/ShopItemPanel.cs @@ -51,7 +51,14 @@ public class ShopItemPanel : MonoBehaviour { if (itemData.buy[i].price > 0) { - bestPrice = itemData.buy[i].price; + if (itemData.buy[i].price / 100 == 0 && itemData.buy[i].price != 0) + { + gameObject.GetComponent