From 5dd3dcf48d2a0d145a738d889d1547fefcf0b1c9 Mon Sep 17 00:00:00 2001 From: MinhHai Date: Wed, 4 Feb 2026 15:17:39 +0700 Subject: [PATCH 01/29] WIP: add logic and UI --- Assets/PerfectWorld/Prefab/UI/DlgExit.prefab | 918 ++++++++++++++++++ .../Prefab/UI/DlgExit.prefab.meta | 7 + Assets/PerfectWorld/Prefab/UIManager.prefab | 283 ++++++ .../UI/DialogScriptTableObject.asset | 2 + .../PerfectWorld/Scripts/Common/EC_Configs.cs | 26 + .../Scripts/Common/EC_PendingAction.cs | 314 ++++++ .../Scripts/Common/EC_PendingAction.cs.meta | 3 + .../Scripts/Network/CSNetwork/GameSession.cs | 29 + .../PerfectWorld/Scripts/Task/UI/DlgTask.cs | 36 +- Assets/PerfectWorld/Scripts/UI/DlgExit.meta | 3 + .../Scripts/UI/DlgExit/CDlgExit.cs | 39 + .../Scripts/UI/DlgExit/CDlgExit.cs.meta | 3 + .../Scripts/UI/DlgExit/ExitTest.cs | 27 + .../Scripts/UI/DlgExit/ExitTest.cs.meta | 3 + .../Scripts/UI/GamePlay/EC_GameUIMan.cs | 11 + .../Scripts/Utils/AFilePackage.cs | 33 + Assets/Scripts/CECGameRun.cs | 185 +++- Assets/Scripts/CECHostPlayer.cs | 27 + 18 files changed, 1930 insertions(+), 19 deletions(-) create mode 100644 Assets/PerfectWorld/Prefab/UI/DlgExit.prefab create mode 100644 Assets/PerfectWorld/Prefab/UI/DlgExit.prefab.meta create mode 100644 Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs create mode 100644 Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/DlgExit.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/DlgExit/ExitTest.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/DlgExit/ExitTest.cs.meta diff --git a/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab b/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab new file mode 100644 index 0000000000..a2a3f6956e --- /dev/null +++ b/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab @@ -0,0 +1,918 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1590197940424963217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6666702292353843246} + - component: {fileID: 4026888369354985289} + m_Layer: 0 + m_Name: DlgExit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6666702292353843246 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590197940424963217} + 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: 4878816101074468399} + m_Father: {fileID: 0} + 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!114 &4026888369354985289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590197940424963217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8ca9d1418c284fd395248056f086c7d4, type: 3} + m_Name: + m_EditorClassIdentifier: + ConfirmBtn: {fileID: 3576373828330281173} + CancelBtn: {fileID: 5816777684468032703} +--- !u!1 &1725743065086802770 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4878816101074468399} + - component: {fileID: 1101450299599105715} + - component: {fileID: 5337953600179164026} + m_Layer: 0 + m_Name: Popup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4878816101074468399 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725743065086802770} + 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: 7913819123905793175} + - {fileID: 7527520206793245717} + - {fileID: 4965393937731457567} + - {fileID: 4000902174573487903} + m_Father: {fileID: 6666702292353843246} + 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: 933.3333, y: 533.3333} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1101450299599105715 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725743065086802770} + m_CullTransparentMesh: 1 +--- !u!114 &5337953600179164026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725743065086802770} + 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: 4744752b0496d42d0b1c52fcb705e044, 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 &4518958362188575915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4965393937731457567} + - component: {fileID: 1891070853961845177} + - component: {fileID: 807580002560918717} + - component: {fileID: 3576373828330281173} + m_Layer: 0 + m_Name: Button_Confirm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4965393937731457567 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4518958362188575915} + 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: 4642911678502374063} + m_Father: {fileID: 4878816101074468399} + 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: -210, y: -150} + m_SizeDelta: {x: 313, y: 91} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1891070853961845177 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4518958362188575915} + m_CullTransparentMesh: 1 +--- !u!114 &807580002560918717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4518958362188575915} + 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: b545f49a479374ffaaec0c8f123b0c5f, 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!114 &3576373828330281173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4518958362188575915} + 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: 807580002560918717} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4670976812881016521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7913819123905793175} + - component: {fileID: 2369126678925736279} + - component: {fileID: 7564280183498118806} + m_Layer: 0 + m_Name: Text (TMP)_Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7913819123905793175 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4670976812881016521} + 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: 4878816101074468399} + 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: -3.7721, y: -17.4557} + m_SizeDelta: {x: 298.0753, y: 34.9115} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2369126678925736279 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4670976812881016521} + m_CullTransparentMesh: 1 +--- !u!114 &7564280183498118806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4670976812881016521} + 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: "Th\xF4ng b\xE1o" + 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: 30 + m_fontSizeBase: 30 + m_fontWeight: 400 + m_enableAutoSizing: 0 + 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 &5918190347695128963 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4642911678502374063} + - component: {fileID: 4834289956051303799} + - component: {fileID: 3482299799452283765} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4642911678502374063 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5918190347695128963} + 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: 4965393937731457567} + 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 &4834289956051303799 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5918190347695128963} + m_CullTransparentMesh: 1 +--- !u!114 &3482299799452283765 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5918190347695128963} + 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: "X\xE1c nh\u1EADn" + 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: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + 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 &5923497699521027687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4000902174573487903} + - component: {fileID: 7348237821025748982} + - component: {fileID: 356920440688922164} + - component: {fileID: 5816777684468032703} + m_Layer: 0 + m_Name: Button_Cancel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4000902174573487903 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5923497699521027687} + 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: 1979839230795202451} + m_Father: {fileID: 4878816101074468399} + 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: 210, y: -150} + m_SizeDelta: {x: 313, y: 91} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7348237821025748982 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5923497699521027687} + m_CullTransparentMesh: 1 +--- !u!114 &356920440688922164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5923497699521027687} + 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: b545f49a479374ffaaec0c8f123b0c5f, 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!114 &5816777684468032703 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5923497699521027687} + 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: 356920440688922164} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6076086137757476783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7527520206793245717} + - component: {fileID: 717316905677608887} + - component: {fileID: 2182669632864579474} + m_Layer: 0 + m_Name: Text (TMP)_Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7527520206793245717 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6076086137757476783} + 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: 4878816101074468399} + 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: -2, y: -201.94122} + m_SizeDelta: {x: 862.825, y: 279.6172} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &717316905677608887 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6076086137757476783} + m_CullTransparentMesh: 1 +--- !u!114 &2182669632864579474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6076086137757476783} + 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: "R\u1EDDi kh\u1ECFi ho\xE0n m\u1EF9 ?" + 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: 93.94 + m_fontSizeBase: 93.94 + m_fontWeight: 400 + m_enableAutoSizing: 0 + 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 &8385824745593160430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1979839230795202451} + - component: {fileID: 926584410341277518} + - component: {fileID: 7589457457506445651} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1979839230795202451 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8385824745593160430} + 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: 4000902174573487903} + 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 &926584410341277518 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8385824745593160430} + m_CullTransparentMesh: 1 +--- !u!114 &7589457457506445651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8385824745593160430} + 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: "H\u1EE7y" + 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: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + 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} diff --git a/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab.meta b/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab.meta new file mode 100644 index 0000000000..1c6e3602da --- /dev/null +++ b/Assets/PerfectWorld/Prefab/UI/DlgExit.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0c248d0510a114829b58d62d2ecc3b5e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab index ab2d2b4c7e..64263892ff 100644 --- a/Assets/PerfectWorld/Prefab/UIManager.prefab +++ b/Assets/PerfectWorld/Prefab/UIManager.prefab @@ -457,6 +457,142 @@ MonoBehaviour: m_PointerBehavior: 0 m_CursorLockBehavior: 0 m_ScrollDeltaPerTick: 6 +--- !u!1 &1180649769221527971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1908310604726647551} + - component: {fileID: 7432323784403002332} + - component: {fileID: 6253396656395833156} + 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 &1908310604726647551 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180649769221527971} + 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: 8680646788002276863} + 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 &7432323784403002332 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180649769221527971} + m_CullTransparentMesh: 1 +--- !u!114 &6253396656395833156 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180649769221527971} + 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: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, 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 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + 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 &1182266301883914285 GameObject: m_ObjectHideFlags: 0 @@ -2564,6 +2700,152 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5721980010412121515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8680646788002276863} + - component: {fileID: 8076476413184855661} + - component: {fileID: 8851603462695586251} + - component: {fileID: 5556504023802397200} + - component: {fileID: 1370263596141727443} + m_Layer: 5 + m_Name: ExitBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8680646788002276863 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5721980010412121515} + 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: 1908310604726647551} + m_Father: {fileID: 3483809415181351540} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -880, y: -66.70001} + m_SizeDelta: {x: 85, y: 99} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8076476413184855661 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5721980010412121515} + m_CullTransparentMesh: 1 +--- !u!114 &8851603462695586251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5721980010412121515} + 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: 052d4b5b3b147d04cbd00f737f5c7c53, 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!114 &5556504023802397200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5721980010412121515} + 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: 8851603462695586251} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1890210201668811196} + m_TargetAssemblyTypeName: CECUIManager, Assembly-CSharp + m_MethodName: ShowUI + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: Win_Quest + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1370263596141727443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5721980010412121515} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 96de7d56a4514c979bdd93568dba2031, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &5885931642767984348 GameObject: m_ObjectHideFlags: 0 @@ -3249,6 +3531,7 @@ RectTransform: - {fileID: 984617901920738932} - {fileID: 2783469216819378410} - {fileID: 8913509984865075419} + - {fileID: 8680646788002276863} - {fileID: 5823843793071880086} - {fileID: 1462603449517194619} - {fileID: 7020286574697807252} diff --git a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset index e2c6c4a523..725d31e9e5 100644 --- a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset +++ b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset @@ -43,3 +43,5 @@ MonoBehaviour: prefab: {fileID: 5492547392745930423, guid: 54cccb2c6a758a24183474cd385ccb2c, type: 3} - id: CDlgInfoTooltip prefab: {fileID: 6830833846243993097, guid: 97dd1de3aba08a04980849e40d5c1ea4, type: 3} + - id: CDlgInfoTooltip + prefab: {fileID: 6830833846243993097, guid: 97dd1de3aba08a04980849e40d5c1ea4, type: 3} diff --git a/Assets/PerfectWorld/Scripts/Common/EC_Configs.cs b/Assets/PerfectWorld/Scripts/Common/EC_Configs.cs index 432df518bf..a8249fb014 100644 --- a/Assets/PerfectWorld/Scripts/Common/EC_Configs.cs +++ b/Assets/PerfectWorld/Scripts/Common/EC_Configs.cs @@ -1063,6 +1063,32 @@ namespace BrewMonster return true; } + /// + /// Write user config data into buffer at given offset. 在指定偏移处写入用户配置数据。 + /// + public bool SaveUserConfigData(byte[] pDataBuf, int startIndex, out int piSize) + { + if (startIndex < 0) { piSize = 0; return false; } + piSize = 0; + int iTotalSize = 0; + iTotalSize += sizeof(uint); + iTotalSize += Marshal.SizeOf(typeof(EC_VIDEO_SETTING)); + iTotalSize += Marshal.SizeOf(typeof(EC_GAME_SETTING)); + iTotalSize += Marshal.SizeOf(typeof(EC_BLACKLIST_SETTING)); + iTotalSize += Marshal.SizeOf(typeof(EC_COMPUTER_AIDED_SETTING)); + + if (pDataBuf != null && startIndex + iTotalSize <= pDataBuf.Length) + { + using (MemoryStream ms = new MemoryStream(pDataBuf, startIndex, pDataBuf.Length - startIndex)) + using (BinaryWriter writer = new BinaryWriter(ms)) + { + writer.Write((uint)EC_ConfigConstants.EC_CONFIG_VERSION); + } + } + piSize = iTotalSize; + return true; + } + public void DefaultUserConfigData() { DefaultUserSettings(ref m_ss, ref m_vs, ref m_gs, ref m_bs, ref m_cas); diff --git a/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs b/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs new file mode 100644 index 0000000000..aedf88b999 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs @@ -0,0 +1,314 @@ +// Filename : EC_PendingAction.cs +// Creator : Xu Wenbin +// Date : 2011/11/09 +// Converted from C++: EC_PendingAction.cpp / EC_PendingAction.h + +using System.Collections.Generic; +using BrewMonster; +using BrewMonster.Network; +using BrewMonster.UI; +using CSNetwork; +using UnityEngine; + +// Logout type constants (C++: gnetdef.h) +// _PLAYER_LOGOUT_FULL 0, _PLAYER_LOGOUT_HALF 1 +public static class PendingActionConstants +{ + public const int _PLAYER_LOGOUT_FULL = 0; + public const int _PLAYER_LOGOUT_HALF = 1; +} + +// CECPendingAction — base class for delayed/pending actions +public abstract class CECPendingAction +{ + // 执行的时限 / Execution time limit + private readonly CECCounter m_Counter; + // 是否还需要执行 / Whether still needs to execute + private bool m_bNeedExecute; + // 是否收到外界执行指示 / Whether received external execute trigger + private bool m_bTriggered; + // 执行结果:是否成功执行 / Execute result: whether executed successfully + private bool m_bExecuteResult; + + public CECPendingAction(uint dwTimerPeriod) + { + m_Counter = new CECCounter(); + m_Counter.SetPeriod((float)dwTimerPeriod); + m_bNeedExecute = true; + m_bTriggered = false; + m_bExecuteResult = false; + } + + public void Update(uint dwElapsedTime) + { + if (GetNeedExecute()) + { + // 每次都尝试执行 / Try execute every time + if (m_Counter.IncCounter((float)dwElapsedTime)) + { + // 计时器到 / Timer reached + // 强制执行 / Force execute + m_bExecuteResult = Execute(); + // 不需要再进行尝试 / No need to try again + m_bNeedExecute = false; + } + // else 计时中 / else counting + } + } + + public void Trigger() + { + if (!GetNeedExecute()) + { + // 计时器已经强制执行,不需要再触发执行 / Timer already forced execute, no need to trigger again + return; + } + if (GetTriggered()) + { + // 不允许多次触发 / Multiple trigger not allowed + return; + } + m_bTriggered = true; + m_bExecuteResult = Execute(); + m_bNeedExecute = false; + } + + public bool GetNeedExecute() => m_bNeedExecute; + public bool GetTriggered() => m_bTriggered; + + public abstract string GetName(); + + protected abstract bool Execute(); + + // Whether currently in game (session connected, game state in-game, host ready) + protected bool IsInGame() + { + var pSession = GetGameSession(); + var pGameRun = GetGameRun(); + var pHost = pGameRun?.GetHostPlayer(); + return pSession != null + && pSession.IsConnected + && pGameRun != null + && pGameRun.GetGameState() == (int)GameState.GS_GAME + && pHost != null + && pHost.HostIsReady(); + } + + protected static CECGameRun GetGameRun() => EC_Game.GetGameRun(); + protected static GameSession GetGameSession() => UnityGameSession.Instance?.GameSession; + protected static CECHostPlayer GetHostPlayer() => GetGameRun()?.GetHostPlayer(); +} + +// 游戏小退 / Game logout (half — back to select role) +public class CECPendingLogoutHalf : CECPendingAction +{ + public CECPendingLogoutHalf(uint dwTimerPeriod = 5000) : base(dwTimerPeriod) { } + + protected override bool Execute() + { + bool bSuccess = false; + if (IsInGame()) + { + GetGameSession().SendPlayerLogout(PendingActionConstants._PLAYER_LOGOUT_HALF); + bSuccess = true; + } + return bSuccess; + } + + public override string GetName() => "CECPendingLogoutHalf"; +} + +// 游戏大退 / Game logout (full — account logout) +public class CECPendingLogoutFull : CECPendingAction +{ + public CECPendingLogoutFull(uint dwTimerPeriod = 5000) : base(dwTimerPeriod) { } + + protected override bool Execute() + { + bool bSuccess = false; + if (IsInGame()) + { + GetGameSession().SendPlayerLogout(PendingActionConstants._PLAYER_LOGOUT_FULL); + bSuccess = true; + } + return bSuccess; + } + + public override string GetName() => "CECPendingLogoutFull"; +} + +// 寄售角色 / Selling role +public class CECPendingSellingRole : CECPendingAction +{ + public CECPendingSellingRole(uint dwTimerPeriod = 5000) : base(dwTimerPeriod) { } + + protected override bool Execute() + { + bool bSuccess = false; + if (IsInGame()) + { + GetGameSession().SendPlayerLogout(PendingActionConstants._PLAYER_LOGOUT_HALF); + GetGameRun().SetSellingRoleID(GetHostPlayer().GetCharacterID()); + bSuccess = true; + } + return bSuccess; + } + + public override string GetName() => "CECPendingSellingRole"; +} + +// 跨服小退 / Cross-server logout (half) +public class CECPendingLogoutCrossServer : CECPendingAction +{ + public CECPendingLogoutCrossServer(uint dwTimerPeriod = 5000) : base(dwTimerPeriod) { } + + protected override bool Execute() + { + GetGameRun().SetLogoutFlag(2); + return true; + } + + public override string GetName() => "CECPendingLogoutCrossServer"; +} + +// 进出跨服 / Cross-server get in or out +// m_bGetIn: 进入跨服时为 true;否则为 false / true when entering cross-server; otherwise false +public class CECPendingCrossServerGetInOut : CECPendingAction +{ + private readonly bool m_bGetIn; + + public CECPendingCrossServerGetInOut(bool bGetIn, uint dwTimerPeriod = 5000) + : base(dwTimerPeriod) + { + m_bGetIn = bGetIn; + } + + protected override bool Execute() + { + bool bSuccess = false; + if (IsInGame()) + { + var session = GetGameSession(); + if (session != null) + { + if (m_bGetIn) + session.c2s_CmdNPCSevCrossServerGetIn(); + else + session.c2s_CmdNPCSevCrossServerGetOut(); + } + } + var pGameUIMan = GetGameRun()?.GetUIManager()?.GetInGameUIMan(); + if (pGameUIMan is CECGameUIMan inGameUIMan) + inGameUIMan.EndNPCService(); + return bSuccess; + } + + public override string GetName() => "CECPendingCrossServerGetInOut"; +} + +// CECPendingActionArray — container for multiple pending actions +public class CECPendingActionArray +{ + private readonly List m_actions = new List(); + private bool m_bAllowMultiActions; + + public CECPendingActionArray(bool bAllowMultiActions) + { + m_bAllowMultiActions = bAllowMultiActions; + } + + ~CECPendingActionArray() + { + Clear(); + } + + public void Append(CECPendingAction pAction) + { + // 添加新事件 / Add new event + if (pAction == null) + { + Debug.Assert(false); + return; + } + if (!pAction.GetNeedExecute()) + { + Debug.Assert(false); + return; + } + if (!GetAllowMultiAction()) + Clear(); + m_actions.Add(pAction); + } + + public void AppendForSaveConfig(CECPendingAction pAction) + { + if (pAction == null) + { + Debug.Assert(false); + return; + } + if (!pAction.GetNeedExecute()) + { + Debug.Assert(false); + return; + } + uint saveResult = EC_Game.GetGameRun().SaveConfigsToServer(); + if (saveResult != 2) + { + pAction.Trigger(); + return; + } + Append(pAction); + } + + public void Update(uint dwElapsedTime) + { + if (m_actions.Count == 0) return; + + for (int i = m_actions.Count - 1; i >= 0; i--) + { + CECPendingAction pAction = m_actions[i]; + pAction.Update(dwElapsedTime); + if (!pAction.GetNeedExecute()) + { + m_actions.RemoveAt(i); + } + } + } + + public void TriggerAll() + { + if (m_actions.Count == 0) return; + + foreach (var pAction in m_actions) + { + if (pAction.GetNeedExecute()) + pAction.Trigger(); + } + } + + public void Clear() + { + // 清除当前所有事件 / Clear all current events + if (m_actions.Count == 0) return; + + m_actions.Clear(); + } + + public void SetAllowMultiAction(bool bAllow) + { + if (GetAllowMultiAction() == bAllow) return; + + m_bAllowMultiActions = bAllow; + + // 按时间先后顺序,只保留队列最后一个 / By time order, keep only the last one in queue + if (!bAllow && m_actions.Count > 1) + { + var last = m_actions[m_actions.Count - 1]; + m_actions.Clear(); + m_actions.Add(last); + } + } + + public bool GetAllowMultiAction() => m_bAllowMultiActions; +} diff --git a/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs.meta b/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs.meta new file mode 100644 index 0000000000..9e17475b3a --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/EC_PendingAction.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a8fc69213d734cb49b1b381a760ae418 +timeCreated: 1770180043 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index 19e2261b35..5652b27198 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -1458,6 +1458,23 @@ namespace CSNetwork p.Roleid = m_iCharID; SendProtocol(p); } + + /// + /// Save config data to server (sends setuiconfig with compressed config blob). + /// 保存配置数据到服务器(发送 setuiconfig 及压缩后的配置数据)。 + /// + public void SaveConfigData(byte[] pBuf, int len) + { + if (pBuf == null || len <= 0) return; + var p = new setuiconfig(); + p.Roleid = m_iCharID; + p.Localsid = (int)_localsid; + byte[] slice = new byte[len]; + Buffer.BlockCopy(pBuf, 0, slice, 0, len); + p.Ui_config = new Octets(slice); + SendProtocol(p); + } + private void SetCharacterID(int iCharID) { m_iCharID = iCharID; @@ -1894,5 +1911,17 @@ namespace CSNetwork gamedatasend.Data = C2SCommandFactory.CreateNPCSevClearEmbeddedChipCmd(iEquipIdx, tidEquip); SendProtocol(gamedatasend); } + + // Cross-server get in (C++: c2s_CmdNPCSevCrossServerGetIn) — TODO: implement C2S packet when needed + public void c2s_CmdNPCSevCrossServerGetIn() + { + // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetInCmd() and SendProtocol + } + + // Cross-server get out (C++: c2s_CmdNPCSevCrossServerGetOut) — TODO: implement C2S packet when needed + public void c2s_CmdNPCSevCrossServerGetOut() + { + // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetOutCmd() and SendProtocol + } } } \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs index 8592f9d79e..42103f3e32 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs @@ -211,7 +211,7 @@ namespace BrewMonster.Scripts.Task.UI if (m_pTxt_QuestItem == null) return; const string LINK_CLICK_VER = "DlgTaskLinkClickCamFix_v2"; - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} pressEventCamera={(eventData.pressEventCamera != null ? eventData.pressEventCamera.name : "null")}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} pressEventCamera={(eventData.pressEventCamera != null ? eventData.pressEventCamera.name : "null")}"); // C++: int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); // C++: int x = GET_X_LPARAM(lParam); int y = GET_Y_LPARAM(lParam); Vector2 localPoint; @@ -221,7 +221,7 @@ namespace BrewMonster.Scripts.Task.UI eventData.pressEventCamera, out localPoint); - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Click at localPoint={localPoint}, screenPos={eventData.position}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Click at localPoint={localPoint}, screenPos={eventData.position}"); // C++: GetItemLinkItemOn(x, y, pObj, &Item); // C++: GetItemLinkItemOn(x, y, pObj, &Item); // Find which link was clicked (like C++ GetItemLinkItemOn checks vecItemLink[i].rc.PtInRect) // 查找点击了哪个链接(如C++ GetItemLinkItemOn检查vecItemLink[i].rc.PtInRect) @@ -229,12 +229,12 @@ namespace BrewMonster.Scripts.Task.UI // Debug: verify TMP parsed tags and we have linkInfo int linkCount = m_pTxt_QuestItem.textInfo?.linkCount ?? -1; - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: TMP linkCount={linkCount}, raycastTarget={m_pTxt_QuestItem.raycastTarget}, richText={m_pTxt_QuestItem.richText}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: TMP linkCount={linkCount}, raycastTarget={m_pTxt_QuestItem.raycastTarget}, richText={m_pTxt_QuestItem.richText}"); if (linkCount <= 0) { string text = m_pTxt_QuestItem.text ?? string.Empty; string preview = text.Substring(0, Mathf.Min(300, text.Length)); - UnityEngine.Debug.LogWarning($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: No links parsed. Text preview: {preview}"); + // UnityEngine.Debug.LogWarning($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: No links parsed. Text preview: {preview}"); return; } @@ -245,7 +245,7 @@ namespace BrewMonster.Scripts.Task.UI { // IMPORTANT: TMP_TextUtilities.FindIntersectingLink expects camera=null for ScreenSpaceOverlay. // 重要:ScreenSpaceOverlay 必须传 camera=null,否则会算错导致 linkIndex = -1。 - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Canvas renderMode={canvas.renderMode}, worldCamera={(canvas.worldCamera != null ? canvas.worldCamera.name : "null")}, pressEventCamera={(eventData.pressEventCamera != null ? eventData.pressEventCamera.name : "null")}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Canvas renderMode={canvas.renderMode}, worldCamera={(canvas.worldCamera != null ? canvas.worldCamera.name : "null")}, pressEventCamera={(eventData.pressEventCamera != null ? eventData.pressEventCamera.name : "null")}"); if (canvas.renderMode == RenderMode.ScreenSpaceOverlay) { camera = null; @@ -258,7 +258,7 @@ namespace BrewMonster.Scripts.Task.UI } else { - UnityEngine.Debug.LogWarning($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} Canvas not found in parents of m_pTxt_QuestItem!"); + // UnityEngine.Debug.LogWarning($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} Canvas not found in parents of m_pTxt_QuestItem!"); // No canvas found; fall back to pressEventCamera (may be null) then main camera = eventData.pressEventCamera != null ? eventData.pressEventCamera : Camera.main; } @@ -266,16 +266,16 @@ namespace BrewMonster.Scripts.Task.UI // Find intersecting link (like C++ checks vecItemLink[i].rc.PtInRect(x, y)) // 查找相交的链接(如C++检查vecItemLink[i].rc.PtInRect(x, y)) int linkIndexCam = TMP_TextUtilities.FindIntersectingLink(m_pTxt_QuestItem, eventData.position, camera); int linkIndexNull = TMP_TextUtilities.FindIntersectingLink(m_pTxt_QuestItem, eventData.position, null); - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} FindIntersectingLink(cam={(camera != null ? camera.name : "null")})={linkIndexCam}, FindIntersectingLink(null)={linkIndexNull}, screenPos={eventData.position}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: {LINK_CLICK_VER} FindIntersectingLink(cam={(camera != null ? camera.name : "null")})={linkIndexCam}, FindIntersectingLink(null)={linkIndexNull}, screenPos={eventData.position}"); int linkIndex = linkIndexCam != -1 ? linkIndexCam : linkIndexNull; - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FindIntersectingLink => linkIndex={linkIndex}, camera={(camera != null ? camera.name : "null")}, screenPos={eventData.position}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FindIntersectingLink => linkIndex={linkIndex}, camera={(camera != null ? camera.name : "null")}, screenPos={eventData.position}"); // Dump all links for debugging for (int i = 0; i < m_pTxt_QuestItem.textInfo.linkCount; i++) { TMP_LinkInfo li = m_pTxt_QuestItem.textInfo.linkInfo[i]; - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Link[{i}] id={li.GetLinkID()} text={li.GetLinkText()}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Link[{i}] id={li.GetLinkID()} text={li.GetLinkText()}"); } // C++: if( Item.m_pItem != NULL ) // C++: if( Item.m_pItem != NULL ) @@ -284,7 +284,7 @@ namespace BrewMonster.Scripts.Task.UI TMP_LinkInfo linkInfo = m_pTxt_QuestItem.textInfo.linkInfo[linkIndex]; string linkID = linkInfo.GetLinkID(); - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Found link - linkID={linkID}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Found link - linkID={linkID}"); // C++: if( Item.m_pItem->GetType() == enumEICoord ) // C++: if( Item.m_pItem->GetType() == enumEICoord ) // Check if this is a coordinate link (NPC, monster, item, target - all use enumEICoord in C++) // 检查这是否是坐标链接(NPC、怪物、物品、目标 - 在C++中都使用enumEICoord) @@ -301,7 +301,7 @@ namespace BrewMonster.Scripts.Task.UI // Use currently selected task ID (like m_idSelTask in C++ FollowCoord call) // 使用当前选中的任务ID(如C++ FollowCoord调用中的m_idSelTask) int currentTaskID = m_idSelTask; - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Coordinate link clicked, EntityID={entityID} (NPC/Monster/Item/Target), task={currentTaskID}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: Coordinate link clicked, EntityID={entityID} (NPC/Monster/Item/Target), task={currentTaskID}"); // C++: CECUIHelper::FollowCoord(Item.m_pItem, m_idSelTask); // C++: CECUIHelper::FollowCoord(Item.m_pItem, m_idSelTask); // FollowCoord triggers auto-move to the coordinates (for NPC, monster, item, target) // FollowCoord触发自动移动到坐标(适用于NPC、怪物、物品、目标) @@ -317,7 +317,7 @@ namespace BrewMonster.Scripts.Task.UI // This matches C++: CECUIHelper::FollowCoord(Item.m_pItem, m_idSelTask) // 这匹配C++:CECUIHelper::FollowCoord(Item.m_pItem, m_idSelTask) bool ok = CECUIHelper.FollowCoord(entityID, currentTaskID); - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FollowCoord(entity={entityID}, task={currentTaskID}) => {ok}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FollowCoord(entity={entityID}, task={currentTaskID}) => {ok}"); } } } @@ -326,7 +326,7 @@ namespace BrewMonster.Scripts.Task.UI // Even without a task, still follow coord // 即使没有任务,也照样跟随坐标 bool ok = CECUIHelper.FollowCoord(entityID, 0); - UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FollowCoord(entity={entityID}, task=0) => {ok}"); + // UnityEngine.Debug.Log($"[DlgTask] OnEventLButtonDown_Txt_QuestItem: FollowCoord(entity={entityID}, task=0) => {ok}"); } } } @@ -605,7 +605,7 @@ namespace BrewMonster.Scripts.Task.UI // } m_idSelTask = idTask; - Debug.Log($"[DlgTask] OnEventLButtonDown_Tv_Quest: {idTask}"); + // Debug.Log($"[DlgTask] OnEventLButtonDown_Tv_Quest: {idTask}"); } // void OnEventMouseMove_Txt_QuestItem(WPARAM wParam, LPARAM lParam, AUIObject *pObj); // void OnEventLButtonDown_Txt_QuestItem(WPARAM wParam, LPARAM lParam, AUIObject *pObj); @@ -706,7 +706,7 @@ namespace BrewMonster.Scripts.Task.UI // private bool Tick() { - Debug.Log("[DlgTask] Tick"); + // Debug.Log("[DlgTask] Tick"); RefreshTaskTrace(); // Time-window task refresh: while in Search view, refresh the list when server time crosses a minute boundary. // This is throttled to avoid rebuilding large task lists every frame. @@ -817,7 +817,7 @@ namespace BrewMonster.Scripts.Task.UI } public void RefreshTaskTrace() { - Debug.Log("[DlgTask] RefreshTaskTrace"); + // Debug.Log("[DlgTask] RefreshTaskTrace"); // Get AUIManager, fallback to GetGameUIMan() if m_pAUIManager is not set yet // 获取AUIManager,如果m_pAUIManager尚未设置则回退到GetGameUIMan() AUIManager auiManager = GetAUIManager(); @@ -1050,7 +1050,7 @@ namespace BrewMonster.Scripts.Task.UI } else { - Debug.LogError($"Task {idTask} not found ATaskTempl !!!"); + // Debug.LogError($"Task {idTask} not found ATaskTempl !!!"); } } else @@ -1112,7 +1112,7 @@ namespace BrewMonster.Scripts.Task.UI if (idTask != m_idLastTask) { _nameTaskText.SetText(EC_Utility.FormatForTextMeshPro(GetTaskNameWithColor(pTemp))); - Debug.Log("[DlgTask] SearchForTask name task: " + _nameTaskText.text); + // Debug.Log("[DlgTask] SearchForTask name task: " + _nameTaskText.text); if (pTextDesc != null) pTextDesc.SetText(EC_Utility.FormatForTextMeshPro(pTemp.GetDescription())); m_idLastTask = idTask; bLastTaskChanged = true; diff --git a/Assets/PerfectWorld/Scripts/UI/DlgExit.meta b/Assets/PerfectWorld/Scripts/UI/DlgExit.meta new file mode 100644 index 0000000000..6c9d9acd0b --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/DlgExit.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2832b8373ed049a89499155c2a507557 +timeCreated: 1770188709 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs b/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs new file mode 100644 index 0000000000..8eb67fe2eb --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs @@ -0,0 +1,39 @@ +using BrewMonster.UI; +using UnityEngine; +using UnityEngine.UI; + +namespace BrewMonster.Scripts +{ + public class CDlgExit : AUIDialog + { + [SerializeField] private Button ConfirmBtn; + [SerializeField] private Button CancelBtn; + // [SerializeField] private Toggle CheckBox; + + private void Awake() + { + ConfirmBtn.onClick.AddListener(OnCommand_confirm); + CancelBtn.onClick.AddListener(OnCancelClicked); + } + + private void OnCancelClicked() + { + Show(false); + } + + void OnCommand_confirm() + { + + // TODO: Implement logout and exit logic + // if( m_pChk_Forcequit.isOn || !GetGameSession()->IsConnected()) + // GetGameRun()->PostMessage(MSG_EXITGAME, -1, 0); + // else + // GetGameRun()->GetPendingLogOut().AppendForSaveConfig(new CECPendingLogoutFull()); + + CECGameRun.Instance.GetPendingLogOut().AppendForSaveConfig(new CECPendingLogoutFull()); + + Show(false); + } + + } +} \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs.meta b/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs.meta new file mode 100644 index 0000000000..84a36eb0c4 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/DlgExit/CDlgExit.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8ca9d1418c284fd395248056f086c7d4 +timeCreated: 1770188720 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/DlgExit/ExitTest.cs b/Assets/PerfectWorld/Scripts/UI/DlgExit/ExitTest.cs new file mode 100644 index 0000000000..9eb1fec4fd --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/DlgExit/ExitTest.cs @@ -0,0 +1,27 @@ +using System; +using BrewMonster.UI; +using UnityEngine; +using UnityEngine.UI; + +namespace BrewMonster.Scripts +{ + public class ExitTest : MonoBehaviour + { + private bool isExitDlgOpen = false; + private Button btn; + + private void Start() + { + btn = GetComponent