diff --git a/.gitignore b/.gitignore
index e2bb03bc7e..ebac7aaa5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -97,5 +97,4 @@ InitTestScene*.unity*
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*
-ProjectSettings/EditorBuildSettings.asset
-ProjectSettings/ProjectSettings.asset
+.idea
diff --git a/.idea/.idea.perfect-world-unity/.idea/indexLayout.xml b/.idea/.idea.perfect-world-unity/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163ceb..0000000000
--- a/.idea/.idea.perfect-world-unity/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.perfect-world-unity/.idea/projectSettingsUpdater.xml b/.idea/.idea.perfect-world-unity/.idea/projectSettingsUpdater.xml
deleted file mode 100644
index ef20cb08cd..0000000000
--- a/.idea/.idea.perfect-world-unity/.idea/projectSettingsUpdater.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/.idea.perfect-world-unity/.idea/workspace.xml b/.idea/.idea.perfect-world-unity/.idea/workspace.xml
deleted file mode 100644
index 85b3df73df..0000000000
--- a/.idea/.idea.perfect-world-unity/.idea/workspace.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1757057210233
-
-
- 1757057210233
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset
index 8f362706ab..f54bae7284 100644
--- a/Assets/AddressableAssetsData/AddressableAssetSettings.asset
+++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset
@@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 712e3991f28e549e7a56ee582a977810
m_currentHash:
serializedVersion: 2
- Hash: 00000000000000000000000000000000
+ Hash: b784dddf0899262809f507f77ce90583
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0
diff --git a/Assets/NetworkLib.meta b/Assets/NetworkLib.meta
new file mode 100644
index 0000000000..5b4e6dc27e
--- /dev/null
+++ b/Assets/NetworkLib.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 95c82a23114631b428b9fff51c373a39
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/NetworkLib/Debug.meta b/Assets/NetworkLib/Debug.meta
new file mode 100644
index 0000000000..a8ef706c49
--- /dev/null
+++ b/Assets/NetworkLib/Debug.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bac3638b875256b479fb1e463c6e213d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/NetworkLib/Debug/netstandard2.1.meta b/Assets/NetworkLib/Debug/netstandard2.1.meta
new file mode 100644
index 0000000000..d87e17ade3
--- /dev/null
+++ b/Assets/NetworkLib/Debug/netstandard2.1.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 464b57f0bb61a1143a27580c5fe83dca
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Prefab.meta b/Assets/PerfectWorld/Prefab.meta
new file mode 100644
index 0000000000..bd48c05ec2
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cd9dd347b6fd0d0448728c426759cd2e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Prefab/HUD.prefab b/Assets/PerfectWorld/Prefab/HUD.prefab
new file mode 100644
index 0000000000..f4aace2cc8
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab/HUD.prefab
@@ -0,0 +1,1142 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &517904720983784571
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4368626321871940460}
+ - component: {fileID: 2266026641417794312}
+ - component: {fileID: 5335503683694560306}
+ m_Layer: 5
+ m_Name: ManaImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4368626321871940460
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 517904720983784571}
+ 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: 3992890073798626326}
+ m_Father: {fileID: 6806681442789174374}
+ 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: 40.1, y: -13.9}
+ m_SizeDelta: {x: 244, y: 13}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2266026641417794312
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 517904720983784571}
+ m_CullTransparentMesh: 1
+--- !u!114 &5335503683694560306
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 517904720983784571}
+ 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: 7bf1ef4f98c0dee419cfb9127e7e5818, 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 &974102734944724072
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8575537839465846660}
+ - component: {fileID: 9173523129545024395}
+ - component: {fileID: 3984476637502251390}
+ m_Layer: 5
+ m_Name: ExpText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8575537839465846660
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 974102734944724072}
+ 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: 5777532589522199890}
+ 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: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &9173523129545024395
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 974102734944724072}
+ m_CullTransparentMesh: 1
+--- !u!114 &3984476637502251390
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 974102734944724072}
+ 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: 100%
+ 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: 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: 20
+ m_fontSizeBase: 20
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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: 0
+ 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 &1206081263085839492
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4940661028721112619}
+ - component: {fileID: 1308048038456201286}
+ - component: {fileID: 8867137494968155958}
+ m_Layer: 5
+ m_Name: LevelText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4940661028721112619
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1206081263085839492}
+ 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: 8118804085881780215}
+ 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: 3.6}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1308048038456201286
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1206081263085839492}
+ m_CullTransparentMesh: 1
+--- !u!114 &8867137494968155958
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1206081263085839492}
+ 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: 105
+ 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: 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: 25
+ m_fontSizeBase: 25
+ 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 &1327388134249139498
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2197988886818318685}
+ - component: {fileID: 1084018795101285839}
+ - component: {fileID: 6006331445413644439}
+ m_Layer: 5
+ m_Name: AvatatarUI
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2197988886818318685
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1327388134249139498}
+ 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: 2891120192736919771}
+ m_Father: {fileID: 6806681442789174374}
+ 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: 5.9}
+ m_SizeDelta: {x: 461, y: 133}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1084018795101285839
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1327388134249139498}
+ m_CullTransparentMesh: 1
+--- !u!114 &6006331445413644439
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1327388134249139498}
+ 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: aa88fae966836174fa9e918a12cf3f3b, 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 &2621599687005268648
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 534925566466250660}
+ - component: {fileID: 6407790034284267145}
+ - component: {fileID: 8086917028654197348}
+ m_Layer: 5
+ m_Name: HealthImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &534925566466250660
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2621599687005268648}
+ 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: 2224911469552029187}
+ m_Father: {fileID: 6806681442789174374}
+ 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: 62.3, y: 6.3}
+ m_SizeDelta: {x: 274, y: 13}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6407790034284267145
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2621599687005268648}
+ m_CullTransparentMesh: 1
+--- !u!114 &8086917028654197348
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2621599687005268648}
+ 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: 320a54deb1692314bb12d0ed72635ad1, 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 &3087718937344452328
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8118804085881780215}
+ - component: {fileID: 7423197018078382773}
+ - component: {fileID: 2198421068187600632}
+ m_Layer: 5
+ m_Name: LevelImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8118804085881780215
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3087718937344452328}
+ 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: 4940661028721112619}
+ m_Father: {fileID: 6806681442789174374}
+ 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: -213.8, y: -23.2}
+ m_SizeDelta: {x: 62, y: 62}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7423197018078382773
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3087718937344452328}
+ m_CullTransparentMesh: 1
+--- !u!114 &2198421068187600632
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3087718937344452328}
+ 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: a034057f2077d9d4d9408ee854ce6a60, 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 &3311234641760367388
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5777532589522199890}
+ - component: {fileID: 4576936668814888857}
+ - component: {fileID: 3414706020273276291}
+ m_Layer: 5
+ m_Name: ExpImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5777532589522199890
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3311234641760367388}
+ 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: 8575537839465846660}
+ m_Father: {fileID: 6806681442789174374}
+ 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: 2.3, y: -33.9}
+ m_SizeDelta: {x: 199, y: 11}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4576936668814888857
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3311234641760367388}
+ m_CullTransparentMesh: 1
+--- !u!114 &3414706020273276291
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3311234641760367388}
+ 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: 61e9943fc4f2c7b418919d61e58f415c, 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 &4131166278565359271
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2891120192736919771}
+ - component: {fileID: 4940149776777522924}
+ - component: {fileID: 1464374634028484465}
+ m_Layer: 5
+ m_Name: NamePlayerText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2891120192736919771
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4131166278565359271}
+ 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: 2197988886818318685}
+ 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: 30.7, y: 27.8}
+ m_SizeDelta: {x: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4940149776777522924
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4131166278565359271}
+ m_CullTransparentMesh: 1
+--- !u!114 &1464374634028484465
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4131166278565359271}
+ 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: Hoang
+ 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: 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: 1
+ 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: -70.62712, 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 &4823752405346273106
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6806681442789174374}
+ - component: {fileID: 3549955056024652669}
+ - component: {fileID: 5615975604488516553}
+ m_Layer: 5
+ m_Name: HUD
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6806681442789174374
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4823752405346273106}
+ 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: 2197988886818318685}
+ - {fileID: 534925566466250660}
+ - {fileID: 4368626321871940460}
+ - {fileID: 5777532589522199890}
+ - {fileID: 8118804085881780215}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 275.1, y: -110.3}
+ m_SizeDelta: {x: 461, y: 133}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3549955056024652669
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4823752405346273106}
+ m_CullTransparentMesh: 1
+--- !u!114 &5615975604488516553
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4823752405346273106}
+ 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: 0}
+ 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: 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!1 &4933898273451627870
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2224911469552029187}
+ - component: {fileID: 503557315038355089}
+ - component: {fileID: 6583662924878292146}
+ m_Layer: 5
+ m_Name: HealthText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2224911469552029187
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4933898273451627870}
+ 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: 534925566466250660}
+ 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: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &503557315038355089
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4933898273451627870}
+ m_CullTransparentMesh: 1
+--- !u!114 &6583662924878292146
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4933898273451627870}
+ 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: 1500/1500
+ 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: 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: 20
+ m_fontSizeBase: 20
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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: 0
+ 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 &8054530446250643719
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3992890073798626326}
+ - component: {fileID: 4604439120824836270}
+ - component: {fileID: 5872129684784782099}
+ m_Layer: 5
+ m_Name: ManaText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3992890073798626326
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8054530446250643719}
+ 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: 4368626321871940460}
+ 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: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4604439120824836270
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8054530446250643719}
+ m_CullTransparentMesh: 1
+--- !u!114 &5872129684784782099
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8054530446250643719}
+ 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: 1500/1500
+ 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: 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: 20
+ m_fontSizeBase: 20
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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: 0
+ 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/HUD.prefab.meta b/Assets/PerfectWorld/Prefab/HUD.prefab.meta
new file mode 100644
index 0000000000..4bc6da36ca
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab/HUD.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 76408ccdbeb4c654291462fcff24a8c5
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Prefab/HUDNPC.prefab b/Assets/PerfectWorld/Prefab/HUDNPC.prefab
new file mode 100644
index 0000000000..0e939974bb
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab/HUDNPC.prefab
@@ -0,0 +1,689 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1273460584854605297
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8841982213385894347}
+ - component: {fileID: 1981970930610958667}
+ - component: {fileID: 2949641406655472012}
+ m_Layer: 5
+ m_Name: AvatarNPCFrame
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8841982213385894347
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1273460584854605297}
+ 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: 7601428160728630082}
+ 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: -160, y: -42}
+ m_SizeDelta: {x: 123, y: 123}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1981970930610958667
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1273460584854605297}
+ m_CullTransparentMesh: 1
+--- !u!114 &2949641406655472012
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1273460584854605297}
+ 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: db18cbc4c576c7145862557ebdd51721, 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 &5010991128992349155
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7601428160728630082}
+ - component: {fileID: 9105272519104429228}
+ m_Layer: 5
+ m_Name: HUDNPC
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7601428160728630082
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5010991128992349155}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.8888889, y: 0.8888889, z: 0.8888889}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 7183588826468540253}
+ - {fileID: 8841982213385894347}
+ m_Father: {fileID: 0}
+ 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: -50}
+ m_SizeDelta: {x: 100, y: 100}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &9105272519104429228
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5010991128992349155}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d072871c8791e284dbad61ce13ba6887, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!1 &5230218528339883288
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7183588826468540253}
+ - component: {fileID: 6172505155667263140}
+ - component: {fileID: 3698845693087953935}
+ m_Layer: 5
+ m_Name: InfoNPCFrame
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7183588826468540253
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5230218528339883288}
+ 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: 3267022032878559059}
+ - {fileID: 32787377066272636}
+ - {fileID: 1333050478342715942}
+ m_Father: {fileID: 7601428160728630082}
+ 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: 22, y: -42.000004}
+ m_SizeDelta: {x: 336, y: 95}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6172505155667263140
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5230218528339883288}
+ m_CullTransparentMesh: 1
+--- !u!114 &3698845693087953935
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5230218528339883288}
+ 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: 82ad58252b552294bafd78600e329adf, 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 &7164650417342813199
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3267022032878559059}
+ - component: {fileID: 3703095907353088660}
+ - component: {fileID: 391766345810538963}
+ m_Layer: 5
+ m_Name: HealthNPCBar
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3267022032878559059
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7164650417342813199}
+ 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: 6650353791342631994}
+ m_Father: {fileID: 7183588826468540253}
+ 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: 28.5}
+ m_SizeDelta: {x: 313, y: 21}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3703095907353088660
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7164650417342813199}
+ m_CullTransparentMesh: 1
+--- !u!114 &391766345810538963
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7164650417342813199}
+ 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: 9ef86922851818c4e9e58040f51c491f, 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 &7483462528009603224
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6650353791342631994}
+ - component: {fileID: 8071545074518398122}
+ - component: {fileID: 8148604647689649493}
+ m_Layer: 5
+ m_Name: HealthText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6650353791342631994
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7483462528009603224}
+ 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: 3267022032878559059}
+ 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: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8071545074518398122
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7483462528009603224}
+ m_CullTransparentMesh: 1
+--- !u!114 &8148604647689649493
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7483462528009603224}
+ 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: 100%
+ 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: 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: 22
+ m_fontSizeBase: 22
+ 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 &8058160227183985436
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 32787377066272636}
+ - component: {fileID: 6237368962895350952}
+ - component: {fileID: 8459104239633154731}
+ m_Layer: 5
+ m_Name: NPCNameText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &32787377066272636
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8058160227183985436}
+ 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: 7183588826468540253}
+ 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: -1.6}
+ m_SizeDelta: {x: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6237368962895350952
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8058160227183985436}
+ m_CullTransparentMesh: 1
+--- !u!114 &8459104239633154731
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8058160227183985436}
+ 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: Chu tiem tap hoa
+ 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: 4278301439
+ m_fontColor: {r: 1, g: 0.6982597, b: 0.0047169924, 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: 23
+ m_fontSizeBase: 23
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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: 0
+ 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 &8340737021475261245
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1333050478342715942}
+ - component: {fileID: 1511151077524208679}
+ - component: {fileID: 7225922753763360209}
+ m_Layer: 5
+ m_Name: StatText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1333050478342715942
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8340737021475261245}
+ 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: 7183588826468540253}
+ 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: -26}
+ m_SizeDelta: {x: 200, y: 50}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1511151077524208679
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8340737021475261245}
+ m_CullTransparentMesh: 1
+--- !u!114 &7225922753763360209
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8340737021475261245}
+ 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: "Kh\xF4ng"
+ 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: 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: 20
+ m_fontSizeBase: 20
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 18
+ m_fontSizeMax: 72
+ m_fontStyle: 1
+ 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/HUDNPC.prefab.meta b/Assets/PerfectWorld/Prefab/HUDNPC.prefab.meta
new file mode 100644
index 0000000000..12ef22c3a9
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab/HUDNPC.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7130d91d43d72c145a379b373c8c27b0
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Prefab/UI.meta b/Assets/PerfectWorld/Prefab/UI.meta
new file mode 100644
index 0000000000..1545e4c037
--- /dev/null
+++ b/Assets/PerfectWorld/Prefab/UI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 64cc3f3f3f7aa254c9df21dc1a27b5ed
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Scene/Boostrap.unity b/Assets/PerfectWorld/Scene/Boostrap.unity
index 3b2550c1df..202bdef669 100644
--- a/Assets/PerfectWorld/Scene/Boostrap.unity
+++ b/Assets/PerfectWorld/Scene/Boostrap.unity
@@ -1,592 +1,3 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!29 &1
-OcclusionCullingSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_OcclusionBakeSettings:
- smallestOccluder: 5
- smallestHole: 0.25
- backfaceThreshold: 100
- m_SceneGUID: 00000000000000000000000000000000
- m_OcclusionCullingData: {fileID: 0}
---- !u!104 &2
-RenderSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 10
- m_Fog: 0
- m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- m_FogMode: 3
- m_FogDensity: 0.01
- m_LinearFogStart: 0
- m_LinearFogEnd: 300
- m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
- m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
- m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
- m_AmbientIntensity: 1
- m_AmbientMode: 0
- m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
- m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
- m_HaloStrength: 0.5
- m_FlareStrength: 1
- m_FlareFadeSpeed: 3
- m_HaloTexture: {fileID: 0}
- m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
- m_DefaultReflectionMode: 0
- m_DefaultReflectionResolution: 128
- m_ReflectionBounces: 1
- m_ReflectionIntensity: 1
- m_CustomReflection: {fileID: 0}
- m_Sun: {fileID: 0}
- m_UseRadianceAmbientProbe: 0
---- !u!157 &3
-LightmapSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 13
- m_BakeOnSceneLoad: 0
- m_GISettings:
- serializedVersion: 2
- m_BounceScale: 1
- m_IndirectOutputScale: 1
- m_AlbedoBoost: 1
- m_EnvironmentLightingMode: 0
- m_EnableBakedLightmaps: 1
- m_EnableRealtimeLightmaps: 0
- m_LightmapEditorSettings:
- serializedVersion: 12
- m_Resolution: 2
- m_BakeResolution: 40
- m_AtlasSize: 1024
- m_AO: 0
- m_AOMaxDistance: 1
- m_CompAOExponent: 1
- m_CompAOExponentDirect: 0
- m_ExtractAmbientOcclusion: 0
- m_Padding: 2
- m_LightmapParameters: {fileID: 0}
- m_LightmapsBakeMode: 1
- m_TextureCompression: 1
- m_ReflectionCompression: 2
- m_MixedBakeMode: 2
- m_BakeBackend: 1
- m_PVRSampling: 1
- m_PVRDirectSampleCount: 32
- m_PVRSampleCount: 512
- m_PVRBounces: 2
- m_PVREnvironmentSampleCount: 256
- m_PVREnvironmentReferencePointCount: 2048
- m_PVRFilteringMode: 1
- m_PVRDenoiserTypeDirect: 1
- m_PVRDenoiserTypeIndirect: 1
- m_PVRDenoiserTypeAO: 1
- m_PVRFilterTypeDirect: 0
- m_PVRFilterTypeIndirect: 0
- m_PVRFilterTypeAO: 0
- m_PVREnvironmentMIS: 1
- m_PVRCulling: 1
- m_PVRFilteringGaussRadiusDirect: 1
- m_PVRFilteringGaussRadiusIndirect: 1
- m_PVRFilteringGaussRadiusAO: 1
- m_PVRFilteringAtrousPositionSigmaDirect: 0.5
- m_PVRFilteringAtrousPositionSigmaIndirect: 2
- m_PVRFilteringAtrousPositionSigmaAO: 1
- m_ExportTrainingData: 0
- m_TrainingDataDestination: TrainingData
- m_LightProbeSampleCountMultiplier: 4
- m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
- m_LightingSettings: {fileID: 0}
---- !u!196 &4
-NavMeshSettings:
- serializedVersion: 2
- m_ObjectHideFlags: 0
- m_BuildSettings:
- serializedVersion: 3
- agentTypeID: 0
- agentRadius: 0.5
- agentHeight: 2
- agentSlope: 45
- agentClimb: 0.4
- ledgeDropHeight: 0
- maxJumpAcrossDistance: 0
- minRegionArea: 2
- manualCellSize: 0
- cellSize: 0.16666667
- manualTileSize: 0
- tileSize: 256
- buildHeightMesh: 0
- maxJobWorkers: 0
- preserveTilesOutsideBounds: 0
- debug:
- m_Flags: 0
- m_NavMeshData: {fileID: 0}
---- !u!1 &105404090
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 105404091}
- - component: {fileID: 105404092}
- m_Layer: 0
- m_Name: Boostrap
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &105404091
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 105404090}
- serializedVersion: 2
- 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: 0}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &105404092
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 105404090}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 2781611f0f83bf54290a9ec600543440, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- _nextSceneName: LoginScene
---- !u!1001 &506356661
-PrefabInstance:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- serializedVersion: 3
- m_TransformParent: {fileID: 0}
- m_Modifications:
- - target: {fileID: 132536, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_Name
- value: IngameDebugConsole
- objectReference: {fileID: 0}
- - target: {fileID: 11490438, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_IgnoreReversedGraphics
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22426080, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22428984, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22455554, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_Pivot.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_Pivot.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalRotation.w
- value: 1
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalRotation.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalRotation.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalEulerAnglesHint.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalEulerAnglesHint.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22457152, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_LocalEulerAnglesHint.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22468896, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22488670, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 22495692, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224619367409363176, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMax.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchorMin.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_SizeDelta.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 224856348943071238, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: m_AnchoredPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 958269219681220773, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 2369662702609791303, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 4760950775166374324, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 5379786813386287946, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 6275684029659916475, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 7682126221316033537, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 7917212057380179541, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 8026934286120355878, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 8276117061088563291, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- - target: {fileID: 8949468901311314302, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
- propertyPath: 'm_ActiveFontFeatures.Array.data[0]'
- value: 1801810542
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_RemovedGameObjects: []
- m_AddedGameObjects: []
- m_AddedComponents: []
- m_SourcePrefab: {fileID: 100100000, guid: 67117722a812a2e46ab8cb8eafbf5f5e, type: 3}
---- !u!1 &591506935
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 591506937}
- - component: {fileID: 591506936}
- - component: {fileID: 591506938}
- m_Layer: 0
- m_Name: GameSession
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &591506936
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 591506935}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: c9177aa9fcd28a94b9042f8a89fdac2d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!4 &591506937
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 591506935}
- serializedVersion: 2
- 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: 0}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &591506938
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 591506935}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 96073aa22df0eda49b4d56c0580aa806, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!1 &1654552490
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1654552492}
- - component: {fileID: 1654552491}
- m_Layer: 0
- m_Name: AutoIniializer
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1654552491
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1654552490}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: ddf01aaf66ec43f2bc9deda891a457d3, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!4 &1654552492
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1654552490}
- serializedVersion: 2
- 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: 0}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1660057539 &9223372036854775807
-SceneRoots:
- m_ObjectHideFlags: 0
- m_Roots:
- - {fileID: 1654552492}
- - {fileID: 591506937}
- - {fileID: 105404091}
- - {fileID: 506356661}
+version https://git-lfs.github.com/spec/v1
+oid sha256:d367fa56162cf045cb9f046aa3953821a7011bb15c33b5a2beaaba5283f5e2d9
+size 21448
diff --git a/Assets/PerfectWorld/Scripts/Addressable/AddressableManager.cs b/Assets/PerfectWorld/Scripts/Addressable/AddressableManager.cs
index 64372d9cd9..b3bea36612 100644
--- a/Assets/PerfectWorld/Scripts/Addressable/AddressableManager.cs
+++ b/Assets/PerfectWorld/Scripts/Addressable/AddressableManager.cs
@@ -45,11 +45,19 @@ namespace BrewMonster.Scripts
{
return _loadedAssets[assetPath].Result;
}
-
- var handle = Addressables.LoadAssetAsync(assetPath);
- await handle.Task;
- _loadedAssets[assetPath] = handle;
- return handle.Result;
+
+ try
+ {
+ var handle = Addressables.LoadAssetAsync(assetPath);
+ await handle.Task;
+ _loadedAssets[assetPath] = handle;
+ return handle.Result;
+ }
+ catch (System.Exception e)
+ {
+ BMLogger.LogError(e.StackTrace);
+ return null;
+ }
}
///
diff --git a/Assets/PerfectWorld/Scripts/Boostrap/BoostrapSceneController.cs b/Assets/PerfectWorld/Scripts/Boostrap/BoostrapSceneController.cs
index 668a6dd21d..9b9882fe21 100644
--- a/Assets/PerfectWorld/Scripts/Boostrap/BoostrapSceneController.cs
+++ b/Assets/PerfectWorld/Scripts/Boostrap/BoostrapSceneController.cs
@@ -17,7 +17,11 @@ namespace BrewMonster
private void LoadNextScene()
{
+#if TESTFAST
+ SceneManager.LoadSceneAsync(_nextSceneName,LoadSceneMode.Additive);
+#else
SceneManager.LoadScene(_nextSceneName);
+#endif
}
}
}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs b/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs
index a4a88a30ed..c6eb6a94ab 100644
--- a/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs
+++ b/Assets/PerfectWorld/Scripts/Common/LookAtCamera.cs
@@ -17,7 +17,7 @@ public class LookAtCamera : MonoBehaviour
[Tooltip("Kiểu xoay theo hướng camera.")]
public LookMode mode = LookMode.LookAt;
- void LateUpdate()
+ private void Start()
{
if (targetCamera == null)
{
@@ -27,6 +27,9 @@ public class LookAtCamera : MonoBehaviour
if (targetCamera == null && Camera.main != null)
targetCamera = Camera.main;
}
+ }
+ void LateUpdate()
+ {
if (targetCamera == null)
return;
@@ -34,6 +37,7 @@ public class LookAtCamera : MonoBehaviour
{
case LookMode.LookAt:
transform.LookAt(targetCamera.transform);
+ transform.Rotate(0, 180f, 0); // 👈 đảo mặt để chữ quay đúng hướng
break;
case LookMode.LookAway:
diff --git a/Assets/PerfectWorld/Scripts/GameData/EC_RoleType.cs b/Assets/PerfectWorld/Scripts/GameData/EC_RoleType.cs
index 2bcb97ce76..d8e7ee6313 100644
--- a/Assets/PerfectWorld/Scripts/GameData/EC_RoleType.cs
+++ b/Assets/PerfectWorld/Scripts/GameData/EC_RoleType.cs
@@ -53,7 +53,7 @@ public struct ROLEEXTPROP
public ROLEEXTPROP_ATK ak;
public ROLEEXTPROP_DEF df;
- int max_ap;
+ public int max_ap;
public ROLEEXTPROP(bool initialize = true)
{
bs = new ROLEEXTPROP_BASE();
diff --git a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
index 8dfc5b0c3d..c85f8e82a8 100644
--- a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
@@ -281,11 +281,8 @@ public class CECNPCMan : IMsgHandler
{
case CommandID.NPC_INFO_LIST:
{
-
-
// msg.dwParam1 chÃnh là buffer chứa placeholder data (không có header cmd_npc_info_list)
- cmd_npc_info_list pCmd = MemoryMarshal.Read(
- ((byte[])msg.dwParam1).AsSpan());
+ cmd_npc_info_list pCmd = MemoryMarshal.Read(((byte[])msg.dwParam1).AsSpan());
int offset = Marshal.OffsetOf("placeholder").ToInt32();
byte[] buffer = (byte[])msg.dwParam1;
@@ -340,6 +337,7 @@ public class CECNPCMan : IMsgHandler
}
case CommandID.NPC_INFO_00:
{
+ BMLogger.LogError("HoangDev: NPCMAN NPC_INFO_00");
var buffer = (byte[])msg.dwParam1;
cmd_npc_info_00 pCmd = GPDataTypeHelper.FromBytes(buffer);
//cmd_npc_info_00 pCmd = MemoryMarshal.Read(buffer.AsSpan(0, cmd_npc_info_00.));
@@ -352,6 +350,7 @@ public class CECNPCMan : IMsgHandler
bp.iCurHP = pCmd.iHP;
ep.bs.max_hp = pCmd.iMaxHP;
pNPC.SetSelectedTarget(pCmd.iTargetID);
+ EventBus.Publish(new NPCINFO(pNPC.GetName(),pCmd.iHP,pCmd.iMaxHP));
}
break;
}
@@ -440,7 +439,6 @@ public class CECNPCMan : IMsgHandler
tid = 4249;
dataType = edm.get_data_type((uint)tid, ID_SPACE.ID_SPACE_ESSENCE);
}
- BMLogger.LogError("HoangDev: CreateNPC TID = " + tid.ToString() + " DataType= " + (DATA_TYPE)dataType + " bPet: "+ bPet);
if (bPet)
{
//pNPC = new CECPet(this);
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
index f8531917e2..3f4af13bfb 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
@@ -413,7 +413,7 @@ namespace BrewMonster.Scripts
{
if (pWorkMove.GetAutoMove())
{
- //pWorkMove.Finish();
+ pWorkMove.Finish();
}
else
{
@@ -606,6 +606,67 @@ namespace BrewMonster.Scripts
StartAwaitingWorks();
}
}
+
+ public bool IsFollowing()
+ {
+ return IsWorkRunning(CECHPWork.Host_work_ID.WORK_FOLLOW);
+ }
+
+ public bool IsMovingToPosition()
+ {
+ return IsWorkRunning(CECHPWork.Host_work_ID.WORK_MOVETOPOS);
+ }
+
+ public bool IsTracing()
+ {
+ return IsWorkRunning(CECHPWork.Host_work_ID.WORK_TRACEOBJECT);
+ }
+
+ bool IsWorkRunning(int iWorkID)
+ {
+ bool result = false;
+ if (ValidatePriority(m_iCurPriority))
+ {
+ WorkList workList = m_WorkStack[m_iCurPriority];
+ if(workList != null)
+ {
+ for (int i = 0; i < workList.Count; ++i)
+ {
+ if (iWorkID == workList[i].GetWorkID())
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+ public void FinishRunningWork(int idWork)
+ {
+ if (!IsWorkRunning(idWork))
+ {
+ return;
+ }
+ WorkList workList = m_WorkStack[m_iCurPriority];
+ if(workList != null)
+ {
+ for (int i = 0; i < workList.Count;)
+ {
+ if (workList[i].GetWorkID() != idWork)
+ {
+ ++i;
+ continue;
+ }
+ KillWork(m_iCurPriority, i);
+ }
+ if (workList == null)
+ {
+ StartAwaitingWorks();
+ }
+ }
+ }
}
public abstract class CECHPWorkPostTickCommand
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
index 14ad942f18..20a1ccd25c 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
@@ -62,7 +62,7 @@ namespace BrewMonster.Scripts
m_vMoveDest = vMoveDest;
m_bHaveDest = true;
m_bGliding = false;
- //m_pHost->SetAdjustOrient(false); // 2014-9-10 ÐìÎıò£ºÔÚ CECHPWorkMove ´´½¨µÄʱºò¶¼»áµ÷Óô˺¯Êý£¬»áµ¼ÖÂÆäËüʱ»úͨ¹ý SetDestDirAndUp µ÷ÓöÔÈËÎïµÄ³¯Ïòµ÷ÕûʧЧ¡£
+ //m_pHost.SetAdjustOrient(false); // 2014-9-10 ÐìÎıò£ºÔÚ CECHPWorkMove ´´½¨µÄʱºò¶¼»áµ÷Óô˺¯Êý£¬»áµ¼ÖÂÆäËüʱ»úͨ¹ý SetDestDirAndUp µ÷ÓöÔÈËÎïµÄ³¯Ïòµ÷ÕûʧЧ¡£
// ÖØÏÖ·½·¨Îª£ºÔÂÏÉ¡°ÍûÔÂÓ½¡±¼¼ÄÜÊͷźó¡¢ÂíÉϰ´×¡'A'»ò'D'µÈÒÆ¶¯¼ü²¢Þôס²»·Å£¬½«µ¼ÖÂÈËÎïÊ©·¨·½ÏòÆ«ÀëÄ¿±ê¶ø³¯ÏòÒÆ¶¯·½Ïò£¨Ðè¶à´Î³¢ÊÔ£©
//Çå¿ÕÈÎÎñÐÅÏ¢
@@ -92,7 +92,7 @@ namespace BrewMonster.Scripts
else if (IsAutoPF())
{
// TO DO: fix later
- //m_vCurDir = CECIntelligentRoute::Instance().GetCurDest() - m_pHost->GetPos();
+ //m_vCurDir = CECIntelligentRoute::Instance().GetCurDest() - m_pHost.GetPos();
//m_vCurDir.y = 0.0f;
//m_vCurDir.Normalize();
//if (m_bUseAutoMoveDialog)
@@ -181,7 +181,7 @@ namespace BrewMonster.Scripts
// if (m_iNPCTempleId)
// {
// CECNPC pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().FindNPCByTempleID(m_iNPCTempleId);
- // if (pNPC && m_pHost.SelectTarget(pNPC->GetNPCID()))
+ // if (pNPC && m_pHost.SelectTarget(pNPC.GetNPCID()))
// {
// CECHPWorkTrace pWork = m_pWorkMan.CreateNPCTraceWork(pNPC, m_iTaskId);
// if (pWork)
@@ -203,15 +203,15 @@ namespace BrewMonster.Scripts
// if (!m_pHost.IsJumping() && !m_pHost.IsPlayingAction(CECPlayer::ACT_TRICK_RUN) &&
// m_pHost.m_iMoveMode != CECPlayer::MOVE_SLIDE && !m_bMeetSlide)
// {
- // int iAction = m_pHost->GetMoveStandAction(true);
+ // int iAction = m_pHost.GetMoveStandAction(true);
// m_pHost.PlayAction(iAction, false);
// }
// Tick_Walk(fDeltaTime);
//}
- //else // (m_pHost->m_iMoveEnv == CECPlayer::MOVEENV_AIR || m_pHost->m_iMoveEnv == CECPlayer::MOVEENV_WATER)
+ //else // (m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_AIR || m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_WATER)
//{
- // m_pHost->ResetJump();
+ // m_pHost.ResetJump();
// // Play appropriate actions
// if (!m_bGliding)
@@ -273,9 +273,33 @@ namespace BrewMonster.Scripts
bool IsAutoPF() { return m_iDestType == Types.DEST_AUTOPF; }
// Finish work
- void Finish()
+ public void Finish()
{
+ m_bFinished = true;
+ Cancel();
+ // Close 'Win_AutoPlay' dialog if it exists
+ //CECGameUIMan* pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
+ //pGameUI.AutoMoveShowDialog(false);
+
+ if (m_bUseAutoMoveDialog)
+ {
+ if (m_bAutoLand)
+ {
+ m_bAutoLand = false;
+ //if (g_pGame.GetGameRun().GetHostPlayer().IsFlying())
+ // g_pGame.GetGameRun().GetHostPlayer().CmdFly(false);
+ }
+
+ m_bUseAutoMoveDialog = false;
+ m_fAutoHeight = -1.0f;
+ m_bAutoFly = false;
+ m_bReachedHeight = true;
+ }
+
+ //Çå¿ÕÈÎÎñ×·×ÙÊý¾Ý
+ m_iNPCTempleId = 0;
+ m_iTaskId = 0;
}
void SetTaskNPCInfo(int tid, int taskid)
@@ -288,8 +312,8 @@ namespace BrewMonster.Scripts
//int tid, taskid;
//tid = m_iNPCTempleId;
//taskid = m_iTaskId;
- //CECGameUIMan* pGameUI = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
- //pGameUI->SetAutoMoveShowDialogTarget((int)m_vMoveDest.x, (int)m_vMoveDest.z);
+ //CECGameUIMan* pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
+ //pGameUI.SetAutoMoveShowDialogTarget((int)m_vMoveDest.x, (int)m_vMoveDest.z);
//SetDestination(CECHPWorkMove::DEST_2D, m_vMoveDest);
//SetTaskNPCInfo(tid, taskid);
//SetUseAutoMoveDialog(true);
@@ -346,12 +370,12 @@ namespace BrewMonster.Scripts
// bool bSwitchTo2D(true);
// while (true)
// {
- // if (m_pHost->IsFlying())
+ // if (m_pHost.IsFlying())
// {
// break;
// }
- // CECHostBrushTest brushTester(m_pHost->GetPos(), m_pHost->m_CDRInfo.vExtent, m_pHost->m_CDRInfo.fStepHeight);
- // if (CECIntelligentRoute::Instance().Search(m_pHost->GetPos(), m_vMoveDest, &brushTester) != CECIntelligentRoute::enumSearchSuccess)
+ // CECHostBrushTest brushTester(m_pHost.GetPos(), m_pHost.m_CDRInfo.vExtent, m_pHost.m_CDRInfo.fStepHeight);
+ // if (CECIntelligentRoute::Instance().Search(m_pHost.GetPos(), m_vMoveDest, &brushTester) != CECIntelligentRoute::enumSearchSuccess)
// {
// break;
// }
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
index d1b38189aa..d15c4ca942 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
@@ -152,11 +152,11 @@ public abstract class CECTracedObject
fTouchRadius = pNPC.GetTouchRadius();
return m_pHost.CanTouchTarget(vHostPos, vTargetPos, fTouchRadius, iTouchReason, fMaxCut);
}
- //else if (GPDataTypeHelper.ISMATTERID(m_iObjectId))
- //{
- // CECMatter pMatter = (pObject) as CECMatter;
- // return pMatter.CalcDist(vHostPos, true) < pMatter.GetGatherDist();
- //}
+ else if (GPDataTypeHelper.ISMATTERID(m_iObjectId))
+ {
+ //CECMatter pMatter = (pObject) as CECMatter;
+ //return pMatter.CalcDist(vHostPos, true) < pMatter.GetGatherDist();
+ }
break;
}
return false;
@@ -527,7 +527,7 @@ public class CECHPWorkTrace : CECHPWork
// Change trace target
//void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false);
- // É趨traceobject
+ // �趨traceobject
public void SetTraceTarget(CECTracedObject pTraceObj, bool bUseAutoPF = false)
{
ResetUseAutoPF(bUseAutoPF);
@@ -603,11 +603,11 @@ public class CECHPWorkTrace : CECHPWork
{
OnTouchTarget();
return true;
- //if (m_pTraceObject.CanTouchFrom(m_pHost.GetPos()))
- //{
- // OnTouchTarget();
- // return true;
- //}
+ if (m_pTraceObject.CanTouchFrom(m_pHost.GetPos() + new A3DVECTOR3(0f, m_pHost.m_CDRInfo.vExtent.y, 0f)))
+ {
+ OnTouchTarget();
+ return true;
+ }
}
}
m_bCheckTouch = true;
@@ -786,13 +786,13 @@ public class CECHPWorkTrace : CECHPWork
protected bool m_bMoreClose; // Move close flag
protected bool m_bForceAttack; // Force attack flag
protected CECSkill m_pPrepSkill; // Skill prepared to be casted
- protected bool m_bActionDone; // Ä¿±êÐÐΪ³É¹¦·¢³ö
+ protected bool m_bActionDone; // Ŀ����Ϊ�ɹ�����
protected bool m_bShouldResetUseAutoPF;
protected bool m_bUseAutoPFResetValue;
protected bool m_bUseAutoPF; // Use CECIntelligentRoute::Search
- protected uint m_dwAutoPFNextCheckTime; // Ï´μì²éʱ¼ä
+ protected uint m_dwAutoPFNextCheckTime; // �´μ��ʱ��
- protected CECTracedObject m_pTraceObject; // ¶¨ÒåtraceÄ¿±ê¶ÔÏó
+ protected CECTracedObject m_pTraceObject; // ����traceĿ�����
// Operations
@@ -829,6 +829,7 @@ public class CECHPWorkTrace : CECHPWork
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime);
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
+ Debug.LogError("SendStopMoveCmd");
m_pHost.m_MoveCtrl.SetSlideLock(true);
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_SLIDE);
m_bFinished = true;
@@ -840,6 +841,7 @@ public class CECHPWorkTrace : CECHPWork
//{
// CECIntelligentRoute::Instance().OnPlayerPosChange(vCurPos);
//}
+ Debug.LogError("SendMoveCmd");
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 2, GPDataTypeHelper.g_vOrigin, EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), (int)GPMoveMode.GP_MOVE_SLIDE);
}
}
@@ -875,7 +877,7 @@ public class CECHPWorkTrace : CECHPWork
}
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime, m_pHost.m_fVertSpeed);
- Debug.LogError(vCurPos);
+
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
//if (GetUseAutoPF() && CECIntelligentRoute::Instance().IsMoveOn())
//{
@@ -892,11 +894,15 @@ public class CECHPWorkTrace : CECHPWork
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
- // m_pHost.m_MoveCtrl.SendStopMoveCmd(vCurPos, m_pHost.GetGroundSpeed(), iMoveMode);
+ Debug.LogError("SendStopMoveCmd");
+ m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), iMoveMode);
PressCancel();
}
else
+ {
+ Debug.LogError("SendMoveCmd");
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 0, vTargetPos, EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), iMoveMode);
+ }
}
else // m_bMeetSlide == true
{
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
index b2d1402019..4a4609027c 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
@@ -30,6 +30,7 @@ namespace PerfectWorld.Scripts.Managers
if (Msg.iSubID == 0)
{
if (GameController.Instance == null) return true;
+ if (GameController.Instance.GetHostPlayer() == null) return true;
GameController.Instance.GetHostPlayer().ProcessMessage(Msg);
}
else if (Msg.iSubID < 0)
diff --git a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs
index 46e401f0b8..a74a9fdf34 100644
--- a/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs
+++ b/Assets/PerfectWorld/Scripts/Move/CECHostMove.cs
@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Runtime.ConstrainedExecution;
using System.Security.Cryptography;
using System.Text;
+using BrewMonster;
using UnityEngine;
public class CECHostMove
@@ -144,6 +145,7 @@ public class CECHostMove
}
public void SendMoveCmd(in Vector3 vCurPos, in Vector3 vVel, int iMoveMode, bool bForceSend = false)
{
+
Vector3 vMoveDir = vVel;
float fSpeed = vMoveDir.magnitude;
SendMoveCmd(vCurPos, fSpeed, iMoveMode, bForceSend);
@@ -168,7 +170,6 @@ public class CECHostMove
void SendMoveCmd(in Vector3 vCurPos,
float fSpeed, int iMoveMode, bool bForceSend)
{
-
if (m_bStop)
{
// m_CmdTimeCnt.Reset();
diff --git a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
index 1fd54cfcd3..5a78826190 100644
--- a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
+++ b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
@@ -20,103 +20,105 @@ public abstract class CECPlayer : CECObject
[SerializeField] internal INFO m_PlayerInfo;
protected GameObject _pPlayerModel;
protected float rotationSpeed = 5;
- internal int m_iMoveMode; // Player's move mode
+ internal int m_iMoveMode; // Player's move mode
internal int m_idSelTarget;
protected int m_iShape; // Ñ¡ÖÃÄ¿±êµÄID
- protected uint m_dwStates; // Player's basic states
+ protected uint m_dwStates; // Player's basic states
protected uint m_uAttackType;
protected int[] m_aEquips;
- protected ROLEEXTPROP m_ExtProps; // Extend properties
+ protected ROLEEXTPROP m_ExtProps; // Extend properties
protected int m_iFashionWeaponType;
- protected float m_fTouchRad = 0.3f; // Touch radius
+ protected float m_fTouchRad = 0.3f; // Touch radius
protected bool m_bWeaponAttached;
- protected int m_iBattleCamp = Player_camp_in_battle.GP_BATTLE_CAMP_NONE; // Battle this player belongs to
- byte m_factionPVPMask; // pvp mask
- protected uint m_dwResFlags; // pvp mask
+ protected bool m_bFight;
+ protected int m_iBattleCamp = Player_camp_in_battle.GP_BATTLE_CAMP_NONE; // Battle this player belongs to
+ byte m_factionPVPMask; // pvp mask
+ protected uint m_dwResFlags; // pvp mask
protected ROLEBASICPROP m_BasicProps;
- public int m_iMoveEnv = Move_environment.MOVEENV_GROUND; // Move environment
+ public int m_iMoveEnv = Move_environment.MOVEENV_GROUND; // Move environment
public bool m_bWalkRun;
- public A3DAABB m_aabbServer = new A3DAABB(); // Óë·þÎñÆ÷±£³ÖÒ»ÖµÄaabb£¬ ²»ÊÜËõ·ÅÓ°Ãì
- public A3DAABB m_aabb = new A3DAABB(); // Player's aabb£¬ÓÃÓÚÃÔʾµÄaabb£¬ÊÜËõ·ÅÓ°Ãì
- public int m_iProfession; // Profession
+ public A3DAABB m_aabbServer = new A3DAABB(); // Óë·þÎñÆ÷±£³ÖÒ»ÖµÄaabb£¬ ²»ÊÜËõ·ÅÓ°Ãì
+ public A3DAABB m_aabb = new A3DAABB(); // Player's aabb£¬ÓÃÓÚÃÔʾµÄaabb£¬ÊÜËõ·ÅÓ°Ãì
+ public int m_iProfession; // Profession
public float m_fScaleBySkill;
- public int m_iGender; // Gender
+ public int m_iGender; // Gender
protected bool m_bFashionMode;
public bool m_bShowWeapon;
private QueueActionEvent queueActionEvent;
+ protected static PLAYER_LEVELEXP_CONFIG _player_levelup_exp;
protected int NUM_WEAPON_TYPE = 15;
public static readonly int[] m_sciStateIDForStateAction = { 117 };
- public MOVECONST m_MoveConst; // Const used when moving control
+ public MOVECONST m_MoveConst; // Const used when moving control
public MOVECONST[] aMoveConsts = new MOVECONST[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER]
- {
- // ÎäÃÀ
- // fStepHei fMinAirHei fMinWaterHei fShoreDepth fWaterSurf
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ·¨Ê¦
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // Î×ʦ
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // Ñý¾«
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ÑýÊÞ
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.8f, 0.7f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- // ´Ì¿Ã
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // Óðâ
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ÓðÃé
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ½£Ãé
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ÷ÈÃé
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // Ò¹Ó°
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- // ÔÂÃÉ
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
- new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
- };
+ {
+ // ÎäÃÀ
+ // fStepHei fMinAirHei fMinWaterHei fShoreDepth fWaterSurf
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ·¨Ê¦
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // Î×ʦ
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // Ñý¾«
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ÑýÊÞ
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.8f, 0.7f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ // ´Ì¿Ã
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // Óðâ
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ÓðÃé
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ½£Ãé
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ÷ÈÃé
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // Ò¹Ó°
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ // ÔÂÃÉ
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f),
+ new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f),
+ };
public A3DVECTOR3[] aExts = new A3DVECTOR3[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER]
{
- new A3DVECTOR3(0.4f, 0.9f, 0.4f), // ÎäÃÀ
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ·¨Ê¦
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Î×ʦ
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ñý¾«
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.5f, 1.05f, 0.5f), // ÑýÊÞ
- new A3DVECTOR3(0.3f, 0.9f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ´Ì¿Ã
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Óðâ
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÓðÃé
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ½£Ãé
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÷ÈÃé
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ò¹Ó°
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
- new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÔÂÃÉ
- new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.4f, 0.9f, 0.4f), // ÎäÃÀ
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ·¨Ê¦
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Î×ʦ
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ñý¾«
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.5f, 1.05f, 0.5f), // ÑýÊÞ
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ´Ì¿Ã
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Óðâ
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÓðÃé
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ½£Ãé
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÷ÈÃé
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ò¹Ó°
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
+ new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÔÂÃÉ
+ new A3DVECTOR3(0.3f, 0.85f, 0.3f),
};
protected void Awake()
@@ -126,14 +128,20 @@ public abstract class CECPlayer : CECObject
m_aEquips = new int[(int)IndexOfIteminEquipmentInventory.SIZE_ALL_EQUIPIVTR];
queueActionEvent = new QueueActionEvent("", null, false, null);
}
- public void SetUpPlayer()
+
+ public virtual void SetUpPlayer()
{
m_dwResFlags = 0;
+ m_iFashionWeaponType = -1;
+ m_uAttackType = DEFAULT_ACTION_TYPE;
+ AttachWeapon();
}
+
public void SetPlayerInfor(INFO playinfo)
{
m_PlayerInfo = playinfo;
}
+
public INFO GetPlayInfo()
{
return m_PlayerInfo;
@@ -151,12 +159,25 @@ public abstract class CECPlayer : CECObject
public static void InitStaticRes()
{
BuildActionList();
+ DATA_TYPE dt = default;
+ _player_levelup_exp = (PLAYER_LEVELEXP_CONFIG)ElementDataManProvider.GetElementDataMan()
+ .get_data_ptr(202, ID_SPACE.ID_SPACE_CONFIG, ref dt);
}
- public bool IsDead() { return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0; }
+ public bool IsDead()
+ {
+ return (m_dwStates & PlayerNPCState.GP_STATE_CORPSE) != 0;
+ }
- public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; }
- public int GetCharacterID() { return m_PlayerInfo.cid; }
+ public bool IsValidAction(int iIndex)
+ {
+ return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false;
+ }
+
+ public int GetCharacterID()
+ {
+ return m_PlayerInfo.cid;
+ }
private static void BuildActionList()
@@ -189,7 +210,6 @@ public abstract class CECPlayer : CECObject
{
if (!actionMap.TryAdd(data.ActionName, data))
{
-
}
}
}
@@ -215,20 +235,25 @@ public abstract class CECPlayer : CECObject
}
}
}
+
public bool PlayAction(int iAction, bool bRestart = true, int iTransTime = 200, bool bQueue = false)
{
return PlayActionWithConfig(iAction, 0, bRestart, iTransTime, bQueue);
}
- public bool PlayActionWithConfig(int iAction, int actionConfigID, bool bRestart = true, int iTransTime = 200, bool bQueue = false)
+
+ public bool PlayActionWithConfig(int iAction, int actionConfigID, bool bRestart = true, int iTransTime = 200,
+ bool bQueue = false)
{
if (iAction < 0 || iAction >= (int)PLAYER_ACTION_TYPE.ACT_MAX)
{
return false;
}
+
if (actionConfigID > 0)
{
DATA_TYPE dt = DATA_TYPE.DT_INVALID;
- var p = ElementDataManProvider.GetElementDataMan().get_data_ptr((uint)actionConfigID, ID_SPACE.ID_SPACE_CONFIG, ref dt);
+ var p = ElementDataManProvider.GetElementDataMan()
+ .get_data_ptr((uint)actionConfigID, ID_SPACE.ID_SPACE_CONFIG, ref dt);
if (dt == DATA_TYPE.DT_PLAYER_ACTION_INFO_CONFIG)
{
PLAYER_ACTION actionConfig;
@@ -238,13 +263,14 @@ public abstract class CECPlayer : CECObject
}
else
{
-
}
}
+
return PlayActionWithConfig(iAction, m_PlayerActions[iAction], bRestart, iTransTime, bQueue);
}
+
public bool PlayActionWithConfig(int iAction, in PLAYER_ACTION actionConfig,
- bool bRestart = true, int iTransTime = 200, bool bQueue = false)
+ bool bRestart = true, int iTransTime = 200, bool bQueue = false)
{
PLAYER_ACTION action = actionConfig;
@@ -252,154 +278,162 @@ public abstract class CECPlayer : CECObject
EventBus.PublishChannel(m_PlayerInfo.cid, new PlayActionEvent(szAct));
return true;
}
+
public static void Dispose()
{
_default_actions = null;
_turning_actions = null;
}
+
public struct PLAYER_ACTION
{
public PLAYER_ACTION_TYPE type;
public PLAYER_ACTION_INFO_CONFIG data;
};
- public INFO GetPlayerInfo() { return m_PlayerInfo; }
+
+ public INFO GetPlayerInfo()
+ {
+ return m_PlayerInfo;
+ }
+
public enum PLAYER_ACTION_TYPE
{
// 0
- ACT_STAND = 0, // Äứng
- ACT_FIGHTSTAND, // Äứng chiến đấu
- ACT_WALK, // Äi bá»™
- ACT_RUN, // Chạy
- ACT_JUMP_START, // Bắt đầu nhảy
+ ACT_STAND = 0, // Äứng
+ ACT_FIGHTSTAND, // Äứng chiến đấu
+ ACT_WALK, // Äi bá»™
+ ACT_RUN, // Chạy
+ ACT_JUMP_START, // Bắt đầu nhảy
// 5
- ACT_JUMP_LOOP, // Nhảy trên không lặp lại
- ACT_JUMP_LAND, // Nhảy tiếp đất
- ACT_SWIM, // Bơi
- ACT_HANGINWATER, // LÆ¡ lá»ng trong nước
- ACT_TAKEOFF, // Cất cánh (should be ACT_TAKEOFF_WING)
+ ACT_JUMP_LOOP, // Nhảy trên không lặp lại
+ ACT_JUMP_LAND, // Nhảy tiếp đất
+ ACT_SWIM, // Bơi
+ ACT_HANGINWATER, // LÆ¡ lá»ng trong nước
+ ACT_TAKEOFF, // Cất cánh (should be ACT_TAKEOFF_WING)
// 10
- ACT_HANGINAIR, // Treo trên không (should be ACT_HANGINAIR_WING)
- ACT_FLY, // Bay (should be ACT_FLY_WING)
- ACT_FLYDOWN, // Bay xuống cao (should be ACT_FLYDOWN_WING_HIGH)
- ACT_FLYDOWN_WING_LOW, // Bay xuống thấp (should be ACT_FLYDOWN_WING_LOW)
- ACT_LANDON, // Hạ cánh (should be ACT_LAND_WING)
+ ACT_HANGINAIR, // Treo trên không (should be ACT_HANGINAIR_WING)
+ ACT_FLY, // Bay (should be ACT_FLY_WING)
+ ACT_FLYDOWN, // Bay xuống cao (should be ACT_FLYDOWN_WING_HIGH)
+ ACT_FLYDOWN_WING_LOW, // Bay xuống thấp (should be ACT_FLYDOWN_WING_LOW)
+ ACT_LANDON, // Hạ cánh (should be ACT_LAND_WING)
// 15
- ACT_TAKEOFF_SWORD, // Kiếm bay - cất cánh
- ACT_HANGINAIR_SWORD, // Kiếm bay - treo không trung
- ACT_FLY_SWORD, // Kiếm bay - tiến tới
- ACT_FLYDOWN_SWORD_HIGH, // Kiếm bay - rơi cao
- ACT_FLYDOWN_SWORD_LOW, // Kiếm bay - rơi thấp
+ ACT_TAKEOFF_SWORD, // Kiếm bay - cất cánh
+ ACT_HANGINAIR_SWORD, // Kiếm bay - treo không trung
+ ACT_FLY_SWORD, // Kiếm bay - tiến tới
+ ACT_FLYDOWN_SWORD_HIGH, // Kiếm bay - rơi cao
+ ACT_FLYDOWN_SWORD_LOW, // Kiếm bay - rơi thấp
// 20
- ACT_LANDON_SWORD, // Kiếm bay - hạ cánh
- ACT_SITDOWN, // Ngồi
- ACT_SITDOWN_LOOP, // Ngồi lặp lại
- ACT_STANDUP, // Äứng dáºy
- ACT_WOUNDED, // Bị thương
+ ACT_LANDON_SWORD, // Kiếm bay - hạ cánh
+ ACT_SITDOWN, // Ngồi
+ ACT_SITDOWN_LOOP, // Ngồi lặp lại
+ ACT_STANDUP, // Äứng dáºy
+ ACT_WOUNDED, // Bị thương
// 25
- ACT_GROUNDDIE, // Chết trên mặt đất
- ACT_GROUNDDIE_LOOP, // Chết trên đất (loop)
- ACT_WATERDIE, // Chết trong nước
- ACT_WATERDIE_LOOP, // Chết trong nước (loop)
- ACT_AIRDIE_ST, // Chết trên không (bắt đầu)
+ ACT_GROUNDDIE, // Chết trên mặt đất
+ ACT_GROUNDDIE_LOOP, // Chết trên đất (loop)
+ ACT_WATERDIE, // Chết trong nước
+ ACT_WATERDIE_LOOP, // Chết trong nước (loop)
+ ACT_AIRDIE_ST, // Chết trên không (bắt đầu)
// 30
- ACT_AIRDIE, // Chết trên không (loop rơi)
- ACT_AIRDIE_ED, // Chết trên không (chạm đất)
- ACT_AIRDIE_LAND_LOOP, // Chết rơi đất (loop)
- ACT_REVIVE, // Hồi sinh
- ACT_CUSTOMIZE, // Äá»™ng tác tùy chỉnh
+ ACT_AIRDIE, // Chết trên không (loop rơi)
+ ACT_AIRDIE_ED, // Chết trên không (chạm đất)
+ ACT_AIRDIE_LAND_LOOP, // Chết rơi đất (loop)
+ ACT_REVIVE, // Hồi sinh
+ ACT_CUSTOMIZE, // Äá»™ng tác tùy chỉnh
// 35
- ACT_STRIKEBACK, // Bị đánh lùi
- ACT_STRIKEDOWN, // Bị đánh ngã
- ACT_STRIKEDOWN_LOOP, // Bị đánh ngã (loop)
- ACT_STRIKEDOWN_STANDUP, // Bị đánh ngã rồi đứng dáºy
- ACT_PICKUP, // Nhặt đồ
+ ACT_STRIKEBACK, // Bị đánh lùi
+ ACT_STRIKEDOWN, // Bị đánh ngã
+ ACT_STRIKEDOWN_LOOP, // Bị đánh ngã (loop)
+ ACT_STRIKEDOWN_STANDUP, // Bị đánh ngã rồi đứng dáºy
+ ACT_PICKUP, // Nhặt đồ
// 40
- ACT_PICKUP_LOOP, // Nhặt đồ (loop)
- ACT_PICKUP_STANDUP, // Nhặt đồ đứng dáºy
- ACT_PICKUP_MATTER, // Nhặt váºt thể
- ACT_GAPE, // Há miệng
- ACT_LOOKAROUND, // Nhìn quanh
+ ACT_PICKUP_LOOP, // Nhặt đồ (loop)
+ ACT_PICKUP_STANDUP, // Nhặt đồ đứng dáºy
+ ACT_PICKUP_MATTER, // Nhặt váºt thể
+ ACT_GAPE, // Há miệng
+ ACT_LOOKAROUND, // Nhìn quanh
// 45
- ACT_PLAYWEAPON, // Vung vÅ© khÃ
- ACT_EXP_WAVE, // Vẫy tay
- ACT_EXP_NOD, // Gáºt đầu
- ACT_EXP_SHAKEHEAD, // Lắc đầu
- ACT_EXP_SHRUG, // Nhún vai
+ ACT_PLAYWEAPON, // Vung vÅ© khÃ
+ ACT_EXP_WAVE, // Vẫy tay
+ ACT_EXP_NOD, // Gáºt đầu
+ ACT_EXP_SHAKEHEAD, // Lắc đầu
+ ACT_EXP_SHRUG, // Nhún vai
// 50
- ACT_EXP_LAUGH, // Cưá»i lá»›n
- ACT_EXP_ANGRY, // Tức giáºn
- ACT_EXP_STUN, // Choáng
- ACT_EXP_DEPRESSED, // Buồn bã
- ACT_EXP_KISSHAND, // Hôn tay
+ ACT_EXP_LAUGH, // Cưá»i lá»›n
+ ACT_EXP_ANGRY, // Tức giáºn
+ ACT_EXP_STUN, // Choáng
+ ACT_EXP_DEPRESSED, // Buồn bã
+ ACT_EXP_KISSHAND, // Hôn tay
// 55
- ACT_EXP_SHY, // Ngại ngùng
- ACT_EXP_SALUTE, // Chà o
- ACT_EXP_SITDOWN, // Ngồi xuống
- ACT_EXP_SITDOWN_LOOP, // Ngồi xuống (loop)
- ACT_EXP_SITDOWN_STANDUP, // Ngồi xuống rồi đứng dáºy
+ ACT_EXP_SHY, // Ngại ngùng
+ ACT_EXP_SALUTE, // Chà o
+ ACT_EXP_SITDOWN, // Ngồi xuống
+ ACT_EXP_SITDOWN_LOOP, // Ngồi xuống (loop)
+ ACT_EXP_SITDOWN_STANDUP, // Ngồi xuống rồi đứng dáºy
// 60
- ACT_EXP_ASSAULT, // Tấn công
- ACT_EXP_THINK, // Suy nghĩ
- ACT_EXP_DEFIANCE, // Thách thức
- ACT_EXP_VICTORY, // Chiến thắng
- ACT_EXP_KISS, // Hôn
+ ACT_EXP_ASSAULT, // Tấn công
+ ACT_EXP_THINK, // Suy nghĩ
+ ACT_EXP_DEFIANCE, // Thách thức
+ ACT_EXP_VICTORY, // Chiến thắng
+ ACT_EXP_KISS, // Hôn
// 65
- ACT_EXP_KISS_LOOP, // Hôn (loop)
- ACT_EXP_KISS_END, // Kết thúc hôn
- ACT_ATTACK_1, // Tấn công 1
- ACT_ATTACK_2, // Tấn công 2
- ACT_ATTACK_3, // Tấn công 3
+ ACT_EXP_KISS_LOOP, // Hôn (loop)
+ ACT_EXP_KISS_END, // Kết thúc hôn
+ ACT_ATTACK_1, // Tấn công 1
+ ACT_ATTACK_2, // Tấn công 2
+ ACT_ATTACK_3, // Tấn công 3
// 70
- ACT_ATTACK_4, // Tấn công 4
- ACT_ATTACK_TOSS, // Ném vÅ© khÃ
- ACT_TRICK_RUN, // Chiêu khi chạy
- ACT_TRICK_JUMP, // Chiêu khi nhảy
- ACT_FLY_GLIDE, // Lượn
+ ACT_ATTACK_4, // Tấn công 4
+ ACT_ATTACK_TOSS, // Ném vÅ© khÃ
+ ACT_TRICK_RUN, // Chiêu khi chạy
+ ACT_TRICK_JUMP, // Chiêu khi nhảy
+ ACT_FLY_GLIDE, // Lượn
// 75
- ACT_FLY_GLIDE_SWORD, // Kiếm bay - lượn
- ACT_EXP_FIGHT, // Tư thế chiến đấu
- ACT_EXP_ATTACK1, // Tấn công diễn xuất 1
- ACT_EXP_ATTACK2, // Tấn công diễn xuất 2
- ACT_EXP_ATTACK3, // Tấn công diễn xuất 3
+ ACT_FLY_GLIDE_SWORD, // Kiếm bay - lượn
+ ACT_EXP_FIGHT, // Tư thế chiến đấu
+ ACT_EXP_ATTACK1, // Tấn công diễn xuất 1
+ ACT_EXP_ATTACK2, // Tấn công diễn xuất 2
+ ACT_EXP_ATTACK3, // Tấn công diễn xuất 3
// 80
- ACT_EXP_ATTACK4, // Tấn công diễn xuất 4
- ACT_EXP_DEFENCE, // Phòng thủ
- ACT_EXP_FALL, // Té ngã
- ACT_EXP_FALLONGROUND, // Ngã xuống đất
- ACT_EXP_LOOKAROUND, // Nhìn quanh
+ ACT_EXP_ATTACK4, // Tấn công diễn xuất 4
+ ACT_EXP_DEFENCE, // Phòng thủ
+ ACT_EXP_FALL, // Té ngã
+ ACT_EXP_FALLONGROUND, // Ngã xuống đất
+ ACT_EXP_LOOKAROUND, // Nhìn quanh
// 85
- ACT_EXP_DANCE, // Nhảy múa
- ACT_EXP_FASHIONWEAPON, // Äá»™ng tác vÅ© khà thá»i trang
- ACT_USEITEM, // Dùng item
- ACT_USEITMELOOP, // Dùng item (loop)
- ACT_TWO_KISS, // Hôn đôi
+ ACT_EXP_DANCE, // Nhảy múa
+ ACT_EXP_FASHIONWEAPON, // Äá»™ng tác vÅ© khà thá»i trang
+ ACT_USEITEM, // Dùng item
+ ACT_USEITMELOOP, // Dùng item (loop)
+ ACT_TWO_KISS, // Hôn đôi
// 90
- ACT_USING_TARGET_ITEM, // Dùng đạo cụ
- ACT_SWIM_FOR_MOVESKILL, // Bơi trong lúc dùng skill di chuyển
+ ACT_USING_TARGET_ITEM, // Dùng đạo cụ
+ ACT_SWIM_FOR_MOVESKILL, // Bơi trong lúc dùng skill di chuyển
ACT_MAX,
- ACT_CASTSKILL // Chỉ là placeholder cho skill actions
+ ACT_CASTSKILL // Chỉ là placeholder cho skill actions
}
+
public void PlayAttackEffect(int idTarget, int idSkill, int skillLevel, int nDamage,
- uint dwModifier, int nAttackSpeed, ref int piAttackTime , int nSection = 0)
+ uint dwModifier, int nAttackSpeed, ref int piAttackTime, int nSection = 0)
{
if (!IsAllResReady())
return;
@@ -413,7 +447,8 @@ public abstract class CECPlayer : CECObject
{
// ¿´¿´ÊDz»ÊÇÔ¶³ÌÎäÆ÷
DATA_TYPE dt = default;
- WEAPON_ESSENCE? pWeapon = (WEAPON_ESSENCE)ElementDataManProvider.GetElementDataMan().get_data_ptr((uint)idWeapon, ID_SPACE.ID_SPACE_ESSENCE, ref dt);
+ WEAPON_ESSENCE? pWeapon = (WEAPON_ESSENCE)ElementDataManProvider.GetElementDataMan()
+ .get_data_ptr((uint)idWeapon, ID_SPACE.ID_SPACE_ESSENCE, ref dt);
if (dt == DATA_TYPE.DT_WEAPON_ESSENCE && pWeapon != null && pWeapon.Value.require_projectile != 0)
{
@@ -437,9 +472,9 @@ public abstract class CECPlayer : CECObject
if (pAttack != null)
{
if (!IsDead() && (dwModifier & (uint)MOD.MOD_RETORT) == 0
- && (dwModifier & (uint)MOD.MOD_ATTACK_AURA) == 0
- && PlayAttackAction(nAttackSpeed, ref piAttackTime, pAttack)
- && (dwModifier & (uint)MOD.MOD_BEAT_BACK) == 0)
+ && (dwModifier & (uint)MOD.MOD_ATTACK_AURA) == 0
+ && PlayAttackAction(nAttackSpeed, ref piAttackTime, pAttack)
+ && (dwModifier & (uint)MOD.MOD_BEAT_BACK) == 0)
{
}
else
@@ -515,14 +550,17 @@ public abstract class CECPlayer : CECObject
{
EventBus.PublishChannel(m_PlayerInfo.cid, new CleearComActFlagAllRankNodesEvent(v));
}
+
public struct CleearComActFlagAllRankNodesEvent
{
public bool v;
+
public CleearComActFlagAllRankNodesEvent(bool value)
{
v = value;
}
}
+
public bool PlayAttackAction(int nAttackSpeed, ref int attackTime, CECAttackEvent attackEvent)
{
//attackTime = 0;
@@ -533,7 +571,7 @@ public abstract class CECPlayer : CECObject
int nRand = UnityEngine.Random.Range(0, 4);
string szAct = string.Empty;
- //int weapon_type = GetShowingWeaponType();
+ int weapon_type = GetShowingWeaponType();
int nTime1 = 0, nTime2 = 0;
int iAction = (int)PLAYER_ACTION_TYPE.ACT_ATTACK_1 + nRand;
@@ -648,28 +686,33 @@ public abstract class CECPlayer : CECObject
return true;
}
+
public void SetApplyDamage(bool isApplyDamage, CECAttackEvent cECAttackEvent)
{
cECAttackEvent.m_bSignaled = isApplyDamage;
}
+
public void ShowWeaponByConfig(PLAYER_ACTION_INFO_CONFIG p)
{
m_bShowWeapon = p.hide_weapon != 0 ? false : true;
//ShowWeapon(m_bShowWeapon);
}
+
public int GetShowingWeaponType()
{
int weapon_type = 0;
- if (CanShowFashionWeapon((int)m_uAttackType, m_iFashionWeaponType) && m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FASHION_WEAPON] != 0)
+ if (CanShowFashionWeapon((int)m_uAttackType, m_iFashionWeaponType) &&
+ m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FASHION_WEAPON] != 0)
{
- weapon_type = (m_iFashionWeaponType == DEFAULT_ACTION_TYPE || !IsWeaponAttached()) ?
- 10 : m_iFashionWeaponType;
+ weapon_type = (EC_Utility.BinaryEquals(m_iFashionWeaponType, DEFAULT_ACTION_TYPE) || !IsWeaponAttached())
+ ? 10
+ : m_iFashionWeaponType;
}
else
{
- weapon_type = (m_uAttackType == DEFAULT_ACTION_TYPE || !IsWeaponAttached()) ?
- 10 : (int)m_uAttackType;
+ weapon_type = (EC_Utility.BinaryEquals(m_uAttackType, DEFAULT_ACTION_TYPE) || !IsWeaponAttached()) ? 10 : (int)m_uAttackType;
}
+
return weapon_type;
}
@@ -677,11 +720,61 @@ public abstract class CECPlayer : CECObject
{
return m_bWeaponAttached;
}
- public bool InFashionMode() { return m_bFashionMode; }
+ bool AttachWeapon(){
+ bool result = (false);
+
+ /*while (GetPlayerModel() && (GetLeftHandWeapon() || GetRightHandWeapon())){
+ A3DSkinModel *pSkinModel = GetPlayerModel()->GetA3DSkinModel();
+ if (!pSkinModel ||
+ !pSkinModel->GetSkeleton()){
+ break;
+ }
+ if (!pSkinModel->GetSkeletonHook(GetLeftWeaponHookPos(m_weaponHangerPos),true) ||
+ !pSkinModel->GetSkeletonHook(GetRightWeaponHookPos(m_weaponHangerPos),true)){
+ break;
+ }
+ if (GetLeftHandWeapon()){
+ GetPlayerModel()->AddChildModel(
+ _left_hand_weapon,
+ false,
+ GetLeftWeaponHookPos(m_weaponHangerPos),
+ GetLeftHandWeapon(),
+ GetLeftWeaponOwnHookPos(GetLeftHandWeapon()));
+ }
+ if (GetRightHandWeapon()){
+ GetPlayerModel()->AddChildModel(
+ _right_hand_weapon,
+ false,
+ GetRightWeaponHookPos(m_weaponHangerPos),
+ GetRightHandWeapon(),
+ GetRightWeaponOwnHookPos(GetRightHandWeapon()));
+ }
+ ALog log;
+ log.Init("EC.log", "My Application Log");
+
+ // Anywhere in your code where you want to see the call flow:
+ log.Log("[HoangDev]Checking execution flow at this point:");
+ log.LogStackTrace();
+
+ log.Release();
+ m_bWeaponAttached = true;
+ result = true;
+ break;
+ }*/
+ m_bWeaponAttached = true;
+ result = true;
+ return result;
+ }
+ public bool InFashionMode()
+ {
+ return m_bFashionMode;
+ }
+
public bool CanShowFashionWeapon(int weapon_type, int fashion_weapon_type)
{
return IsFashionWeaponTypeFit(weapon_type, fashion_weapon_type) && InFashionMode();
}
+
public bool IsFashionWeaponTypeFit(int weapon_type, int fashion_weapon_type)
{
if (fashion_weapon_type < 0 || fashion_weapon_type >= NUM_WEAPON_TYPE) return false;
@@ -691,9 +784,11 @@ public abstract class CECPlayer : CECObject
BMLogger.LogError("CECPlayer::GetFashionConfig, Failed to load fashion weapon config");
return false;
}
+
int fashion_weapon_mask = (int)pConfig.Value.action_mask[fashion_weapon_type];
return (fashion_weapon_mask & (1 << GetWeaponType(weapon_type))) != 0;
}
+
public FASHION_WEAPON_CONFIG GetFashionConfig()
{
FASHION_WEAPON_CONFIG? pFashionConfig = null;
@@ -705,16 +800,30 @@ public abstract class CECPlayer : CECObject
if (tid != 0)
{
- pFashionConfig = (FASHION_WEAPON_CONFIG)pDataMan.get_data_ptr(tid, ID_SPACE.ID_SPACE_CONFIG, ref DataType);
+ pFashionConfig =
+ (FASHION_WEAPON_CONFIG)pDataMan.get_data_ptr(tid, ID_SPACE.ID_SPACE_CONFIG, ref DataType);
BMLogger.LogError($"HoangDev : get_data_ptr {pFashionConfig.GetType()}");
}
}
+
return pFashionConfig.Value;
}
- public int GetSelectedTarget() { return m_idSelTarget; }
- public float GetTouchRadius() { return m_fTouchRad; }
+
+ public int GetSelectedTarget()
+ {
+ return m_idSelTarget;
+ }
+
+ public float GetTouchRadius()
+ {
+ return m_fTouchRad;
+ }
+
// Is player in battle
- public bool IsInBattle() { return m_iBattleCamp != Player_camp_in_battle.GP_BATTLE_CAMP_NONE; }
+ public bool IsInBattle()
+ {
+ return m_iBattleCamp != Player_camp_in_battle.GP_BATTLE_CAMP_NONE;
+ }
// Check whether specified npc in a same battle camp
public bool InSameBattleCamp(CECNPC pNPC)
@@ -726,14 +835,30 @@ public abstract class CECPlayer : CECObject
return true;
}
+
public const uint DEFAULT_ACTION_TYPE = 0xFFFFFFFF;
- public static int GetWeaponType(int iWeaponType) { return iWeaponType == DEFAULT_ACTION_TYPE ? 10 : iWeaponType; }
+
+ public static int GetWeaponType(int iWeaponType)
+ {
+ return iWeaponType == DEFAULT_ACTION_TYPE ? 10 : iWeaponType;
+ }
+
public bool IsInFactionPVP() => (m_factionPVPMask & 0x01) != 0;
public bool CanAttackFactionPVPMineCar() => (m_factionPVPMask & 0x02) != 0;
public bool CanAttackFactionPVPMineBase() => (m_factionPVPMask & 0x04) != 0;
+ public int GetLevelUpExp(int iLevel)
+ {
+ return _player_levelup_exp.exp[iLevel - 1];
+ //return iLevel * iLevel * 500;
+ }
+
// Get basic properties
- public ROLEBASICPROP GetBasicProps() { return m_BasicProps; }
+ public ROLEBASICPROP GetBasicProps()
+ {
+ return m_BasicProps;
+ }
+
public override void TurnFaceTo(int idTarget, float dwTime = 200)
{
if (idTarget != 0)
@@ -742,17 +867,21 @@ public abstract class CECPlayer : CECObject
{
return;
}
+
if (IsWorkMoveRunning() /*&& !IsPlayingCastingSkillAndMoveActions()*/)
- { // ÒÆ¶¯Ê±Ò»°ãÓ¦ÃæÃòÒÆ¶¯·½Ãò¡¢Ö»ÔÚÒÆ¶¯Ê©·¨ÖòÅתÃò
+ {
+ // ÒÆ¶¯Ê±Ò»°ãÓ¦ÃæÃòÒÆ¶¯·½Ãò¡¢Ö»ÔÚÒÆ¶¯Ê©·¨ÖòÅתÃò
return;
}
}
+
var target = EC_ManMessageMono.Instance?.GetObject(idTarget, 0)?.gameObject.transform;
if (target == null)
{
BMLogger.LogError("HoangDev: ko có transform ");
return;
}
+
Vector3 direction = (target.position - transform.position).normalized;
direction.y = 0f;
int turnSpeed = 5;
@@ -769,10 +898,12 @@ public abstract class CECPlayer : CECObject
);
}
}
+
public virtual bool IsWorkMoveRunning()
{
return false;
}
+
/* public bool IsPlayingCastingSkillAndMoveActions()
{
return IsPlayingCastingSkillAction() && IsPlayingMoveAction();
@@ -849,6 +980,7 @@ public abstract class CECPlayer : CECObject
return iAction;
}
+
public void Damaged(int nDamage, uint dwModifier = 0, int skill = 0)
{
BMLogger.LogError($"HoangDev: Damaged nDamage={nDamage} ");
@@ -893,7 +1025,7 @@ public abstract class CECPlayer : CECObject
PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
DamageTextManager.Instance.ShowDamageText(
- transform.position,nDamage, Color.yellow, 1.0f);
+ transform.position, nDamage, Color.yellow, 1.0f);
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_REBOUND)
@@ -911,6 +1043,7 @@ public abstract class CECPlayer : CECObject
BubbleText(BUBBLE_HITMISSED, 0);*/
}
}
+
public bool OnDamaged(int skill)
{
var atkMan = CECAttacksMan.Instance;
@@ -930,6 +1063,7 @@ public abstract class CECPlayer : CECObject
return false;
}
+
bool GetSkillStateActionName(int skill, int state, string name1, string name2)
{
/* for (int i = 0; i < (int)m_SkillStateActionVec.size(); i++)
@@ -947,19 +1081,37 @@ public abstract class CECPlayer : CECObject
public float GetGroundSpeed()
{
// return m_bWalkRun ? g_pGame.GetConfigs().GetHostRunSpeed() : m_ExtProps.mv.walk_speed;
+ return 5f;
return m_bWalkRun ? m_ExtProps.mv.run_speed : m_ExtProps.mv.walk_speed;
}
// Get move environment
- public int GetMoveEnv() { return m_iMoveEnv; }
- public bool IsShapeChanged() { return m_iShape != 0; }
- public int GetWeaponID() { return m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WEAPON] & 0xffff; }
- public bool IsAllResReady() { return (m_dwResFlags & (uint)PlayerResourcesReadyFlag.RESFG_ALL) == (uint)PlayerResourcesReadyFlag.RESFG_ALL; }
+ public int GetMoveEnv()
+ {
+ return m_iMoveEnv;
+ }
+
+ public bool IsShapeChanged()
+ {
+ return m_iShape != 0;
+ }
+
+ public int GetWeaponID()
+ {
+ return m_aEquips[(int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WEAPON] & 0xffff;
+ }
+
+ public bool IsAllResReady()
+ {
+ return (m_dwResFlags & (uint)PlayerResourcesReadyFlag.RESFG_ALL) == (uint)PlayerResourcesReadyFlag.RESFG_ALL;
+ }
// Get character ID
}
+
public struct PlayActionEvent
{
public string AnimationName;
+
public PlayActionEvent(string animationName)
{
this.AnimationName = animationName;
@@ -972,14 +1124,18 @@ public class QueueActionEvent
public Action SetFlag;
public CECAttackEvent AttackEvent;
public bool IsHitAnim;
- public QueueActionEvent(string animationName, Action setFlag, bool isHitAnim, CECAttackEvent attackEvent)
+
+ public QueueActionEvent(string animationName, Action setFlag, bool isHitAnim,
+ CECAttackEvent attackEvent)
{
this.AnimationName = animationName;
SetFlag = setFlag;
IsHitAnim = isHitAnim;
AttackEvent = attackEvent;
}
- public void SetData(string animationName, Action setFlag, bool isHitAnim, CECAttackEvent attackEvent)
+
+ public void SetData(string animationName, Action setFlag, bool isHitAnim,
+ CECAttackEvent attackEvent)
{
this.AnimationName = animationName;
SetFlag = setFlag;
@@ -987,12 +1143,14 @@ public class QueueActionEvent
AttackEvent = attackEvent;
}
}
+
[Serializable]
public struct INFO
{
- public int cid; // Character ID
- public int crc_c; // customized data crc
- public int crc_e; // Equipment data crc
+ public int cid; // Character ID
+ public int crc_c; // customized data crc
+ public int crc_e; // Equipment data crc
+
public INFO(int cid, int crc_c, int crc_)
{
this.cid = cid;
@@ -1000,6 +1158,7 @@ public struct INFO
this.crc_e = crc_;
}
}
+
public enum PlayerResourcesReadyFlag
{
@@ -1009,12 +1168,13 @@ public enum PlayerResourcesReadyFlag
RESFG_ASSEMBLED = 0x08,
RESFG_ALL = 0x0f,
};
-public static class Duel_state // Duel state
+
+public static class Duel_state // Duel state
{
public const int DUEL_ST_NONE = 0,
- DUEL_ST_PREPARE = 1,
- DUEL_ST_INDUEL = 2,
- DUEL_ST_STOPPING = 3;
+ DUEL_ST_PREPARE = 1,
+ DUEL_ST_INDUEL = 2,
+ DUEL_ST_STOPPING = 3;
}
//// Move mode
diff --git a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs
index b1991728a5..c108730425 100644
--- a/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs
+++ b/Assets/PerfectWorld/Scripts/Move/EC_CDR.cs
@@ -11,10 +11,11 @@ namespace BrewMonster.Scripts
public static class EC_CDR
{
// Cho phép CECHostMove gán mask theo scene (giữ linh hoạt nhưng không phá cấu trúc)
- public static LayerMask BrushMask { get; set; } = ~0;
- public static LayerMask TerrainMask { get; set; } = ~0;
+ public static LayerMask BrushMask { get; set; } = 1<<7;
+ public static LayerMask TerrainMask { get; set; } = 1<<6;
const float LOCAL_EPSILON = 1e-5f;
+
//[Flags]
public class CDR_EVN
{
@@ -86,37 +87,44 @@ namespace BrewMonster.Scripts
}
// == Thay CollideWithEnv (C++) bằng BoxCast ==
- static bool CollideWithEnv_BoxCast(Vector3 vStart, Vector3 vDelta, Vector3 vExt,
- LayerMask mask,
- out RaycastHit hit, out float fFraction, out Vector3 vHitNormal, out bool bStartSolid,
- float skin = 0.01f)
- {
- hit = default;
- vHitNormal = Vector3.up;
- bStartSolid = false;
- fFraction = 1.0f;
+ //static bool CollideWithEnv_BoxCast(Vector3 vStart, Vector3 vDelta, Vector3 vExt,
+ // LayerMask mask,
+ // out RaycastHit hit, out float fFraction, out Vector3 vHitNormal, out bool bStartSolid,
+ // float skin = 0.01f)
+ //{
+ // hit = default;
+ // vHitNormal = Vector3.up;
+ // bStartSolid = false;
+ // fFraction = 0.0f;
- float dist = vDelta.magnitude;
- if (dist <= 1e-6f) return false;
+ // float dist = vDelta.magnitude;
+ // if (dist <= 1e-6f) return false;
- // start-in-solid
- var overlapped = Physics.OverlapBox(vStart, vExt - Vector3.one * skin, Quaternion.identity, mask, QueryTriggerInteraction.Ignore);
- if (overlapped != null && overlapped.Length > 0)
- {
- bStartSolid = true;
- return true;
- }
+ // var hasHit = Physics.Raycast(vStart, vDelta,out hit, dist, mask);
+ // if (hasHit)
+ // {
+ // bStartSolid = true;
+ // fFraction = (t - 5E-4f) / vDelta.Normalize();
+ // return true;
+ // }
+ // // start-in-solid
+ // var overlapped = Physics.OverlapBox(vStart, vExt - Vector3.one * skin, Quaternion.identity, mask, QueryTriggerInteraction.Ignore);
+ // if (overlapped != null && overlapped.Length > 0)
+ // {
+ // bStartSolid = true;
+ // return true;
+ // }
- // sweep AABB
- Vector3 dir = vDelta / Mathf.Max(dist, 1e-6f);
- if (Physics.BoxCast(vStart, vExt - Vector3.one * skin, dir, out hit, Quaternion.identity, dist, mask, QueryTriggerInteraction.Ignore))
- {
- fFraction = Mathf.Clamp01(hit.distance / Mathf.Max(dist, 1e-6f));
- vHitNormal = hit.normal;
- return true;
- }
- return false;
- }
+ // // sweep AABB
+ // Vector3 dir = vDelta / Mathf.Max(dist, 1e-6f);
+ // if (Physics.BoxCast(vStart, vExt - Vector3.one * skin, dir, out hit, Quaternion.identity, dist, mask, QueryTriggerInteraction.Ignore))
+ // {
+ // fFraction = Mathf.Clamp01(hit.distance / Mathf.Max(dist, 1e-6f));
+ // vHitNormal = hit.normal;
+ // return true;
+ // }
+ // return false;
+ //}
// == Thay RetrieveSupportPlane (C++) bằng Raycast xuống ==
static bool DoGroundProbe(Vector3 vStart, Vector3 vExt, float fDeltaY, LayerMask mask,
@@ -159,16 +167,28 @@ namespace BrewMonster.Scripts
bool bJump = (fYVel > 0.5f);
Vector3 vVelocity = CDRInfo.fSpeed * new Vector3(CDRInfo.vXOZVelDir.x, 0f, CDRInfo.vXOZVelDir.z) + fYVel * Vector3.up;
+
+
if (bFreeFall)
{
vVelocity += -CDRInfo.fGravityAccel * CDRInfo.t * Vector3.up;
fYVel += -CDRInfo.fGravityAccel * CDRInfo.t;
}
-
Vector3 vVelDir = vVelocity;
float fVelSpeed = vVelDir.magnitude;
- if (fVelSpeed > 1e-6f) vVelDir /= fVelSpeed; else vVelDir = Vector3.zero;
- if (!bFreeFall) fVelSpeed = Mathf.Min(fVelSpeed, VEL_MAX_SPEED);
+ //vVelDir = vVelDir.normalized;
+ if (fVelSpeed > 1e-6f)
+ {
+ vVelDir /= fVelSpeed;
+ }
+ else
+ {
+ vVelDir = Vector3.zero;
+ }
+ if (!bFreeFall)
+ {
+ fVelSpeed = Mathf.Min(fVelSpeed, VEL_MAX_SPEED);
+ }
vVelocity = vVelDir * fVelSpeed;
float dtp = Vector3.Dot(vVelDir, CDRInfo.vTPNormal);
@@ -190,96 +210,98 @@ namespace BrewMonster.Scripts
int nTry = 0;
LayerMask mask = UsedMask_Ground();
- while (nTry < 4)
+ while (nTry < 1)
{
vDelta = vVelocity * fTime;
float fDeltaDist = vDelta.magnitude;
- if (fDeltaDist < DIST_EPSILON) break;
+ //if (fDeltaDist < DIST_EPSILON) break;
// TO DO: fix later beacuse logic in CollideWithEnv_BoxCast is wrong
//bool hasHit = CollideWithEnv_BoxCast(vStart, vDelta, vExt, mask,
// out RaycastHit hit, out float fFraction, out Vector3 hitNormal, out bool bStartSolid);
- bool hasHit = false, bStartSolid = false;
- float fFraction = 0f;
- Vector3 hitNormal = Vector3.zero;
+ Vector3 posFoot = vStart - Vector3.up * vExt.y;
+ Debug.DrawLine(vStart, posFoot + vVelocity, Color.yellow, 10f);
+ bool bClear = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out RaycastHit hit, fDeltaDist, mask);
nTry++;
-
- if (bStartSolid)
- {
- CDRInfo.fMoveDist = 0f;
- if (CDRInfo.vTPNormal.y < CDRInfo.fSlopeThresh) CDRInfo.vTPNormal = Vector3.up;
- return;
- }
-
- if (!hasHit)
+ if (bClear)
{
vFinalPos = vStart + vDelta;
+ Debug.DrawLine(vStart, vFinalPos, Color.red, 10f);
CDRInfo.fMoveDist += fDeltaDist;
break;
}
+ Debug.LogError("Hit");
+ //if (bStartSolid)
+ //{
+ // CDRInfo.fMoveDist = 0f;
+ // if (CDRInfo.vTPNormal.y < CDRInfo.fSlopeThresh) CDRInfo.vTPNormal = Vector3.up;
+ // return;
+ //}
- vStart += vDelta * fFraction;
- CDRInfo.fMoveDist += (fDeltaDist * fFraction);
- fTime -= fTime * fFraction;
- vNormal = hitNormal;
+
+ vStart = hit.point + Vector3.up * vExt.y;
+ vFinalPos = vStart;
+ //CDRInfo.fMoveDist += (fDeltaDist * fFraction);
+ //fTime -= fTime * fFraction;
+ //vNormal = hitNormal;
// Step-up (giữ tinh thần bản gốc)
if (!bFreeFall && !bTryPull && !bJump)
{
- float skin = 0.01f;
- Vector3 vStartUp = vStart + new Vector3(0f, CDRInfo.fStepHeight, 0f);
- bool upBlocked = Physics.CheckBox(vStartUp, vExt - Vector3.one * skin, Quaternion.identity, mask, QueryTriggerInteraction.Ignore);
- if (!upBlocked)
+ //float skin = 0.01f;
+ posFoot = vStart - Vector3.up * vExt.y;
+ Vector3 vStartUp = new Vector3(0f, CDRInfo.fStepHeight, 0f);
+ bPull = !Physics.Raycast(posFoot, (posFoot + vStartUp).normalized, out hit, mask);
+ if (bPull)
{
+ vStart += Vector3.up * CDRInfo.fStepHeight;
+ posFoot = vStart - Vector3.up * vExt.y;
Vector3 vDelta2 = vVelocity;
- bool hasHit2 = CollideWithEnv_BoxCast(vStartUp, vDelta2, vExt, mask,
- out RaycastHit hit2, out float frac2, out Vector3 hitNormal2, out bool bStartSolid2);
- if (hasHit2) vDelta2 *= frac2;
-
- if (vDelta2.sqrMagnitude >= (vExt.x * vExt.x * 4f))
+ bool bMove = !Physics.Raycast(posFoot, (posFoot + vVelocity).normalized, out hit, mask);
+ if (!bMove)
{
- vStart = vStartUp;
- vDelta = vDelta2;
-
- float distAll = vVelocity.magnitude;
- float distMoved = vDelta.magnitude;
- if (distAll > 1e-6f) fTime *= Mathf.Clamp01(distMoved / Mathf.Max(distAll, 1e-6f));
-
- bPull = true;
+ //vDelta2 *= frac2;
+ vFinalPos = hit.point + Vector3.up * vExt.y;
}
+
+ //if (vDelta2.sqrMagnitude < (vExt.x * vExt.x * 4f))
+ //{
+ // vStart -= Vector3.up * CDRInfo.fStepHeight;
+ // bPull = false;
+ //}
}
bTryPull = true;
}
- if (!bPull)
- {
- if (vVelocity.sqrMagnitude > 1e-12f)
- {
- vVelDir = vVelocity.normalized;
- fVelSpeed = vVelocity.magnitude * (1f - nTry * 0.1f);
+ //if (!bPull)
+ //{
+ // if (vVelocity.sqrMagnitude > 1e-12f)
+ // {
+ // vVelDir = vVelocity.normalized;
+ // fVelSpeed = vVelocity.magnitude * (1f - nTry * 0.1f);
- dtp = Vector3.Dot(vNormal, vVelDir);
- float fRelSpeed = Mathf.Min(fVelSpeed, 5.0f);
+ // dtp = Vector3.Dot(vNormal, vVelDir);
+ // float fRelSpeed = Mathf.Min(fVelSpeed, 5.0f);
- if (dtp >= 0f && dtp < 1e-4f)
- {
- vVelocity += vNormal * VEL_REFLECT * fRelSpeed;
- }
- else
- {
- vVelocity = (vVelDir - vNormal * dtp) * fVelSpeed - vNormal * dtp * VEL_REFLECT * fRelSpeed;
- }
- }
+ // if (dtp >= 0f && dtp < 1e-4f)
+ // {
+ // vVelocity += vNormal * VEL_REFLECT * fRelSpeed;
+ // }
+ // else
+ // {
+ // vVelocity = (vVelDir - vNormal * dtp) * fVelSpeed - vNormal * dtp * VEL_REFLECT * fRelSpeed;
+ // }
+ // }
- if (fYVel > VEL_EPSILON)
- {
- if (vNormal.y >= CDRInfo.fSlopeThresh || vNormal.y < -NORMAL_EPSILON) fYVel = 0f;
- }
- else if (fYVel < -VEL_EPSILON)
- {
- if (vNormal.y >= CDRInfo.fSlopeThresh) fYVel = 0f;
- }
- }
+ // if (fYVel > VEL_EPSILON)
+ // {
+ // if (vNormal.y >= CDRInfo.fSlopeThresh || vNormal.y < -NORMAL_EPSILON) fYVel = 0f;
+ // }
+ // else if (fYVel < -VEL_EPSILON)
+ // {
+ // if (vNormal.y >= CDRInfo.fSlopeThresh) fYVel = 0f;
+ // }
+ //}
}
// “vertical ground trace†– thay RetrieveSupportPlane
diff --git a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
index 85556a90cf..7c54f2570e 100644
--- a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
+++ b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
@@ -38,7 +38,6 @@ public class CECMonster : CECNPC
if ((info.state & (int)PlayerNPCState.GP_STATE_NPC_NAME) == 0)
{
m_strName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(m_pDBEssence.name));
- BMLogger.LogError("info.state MOnster :" + m_strName);
m_npcUI.SetName(m_strName);
}
diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs
index 92e1870f40..9c63ba0cb2 100644
--- a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs
+++ b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs
@@ -24,7 +24,6 @@ public class CECNPC : CECObject
protected float m_fDistToHostH;
protected OtherPlayer_Move_Info m_cdr;
protected float m_fTouchRad = 1f;
- protected ROLEBASICPROP m_BasicProps;
protected Vector3 m_vMoveDir;
protected int m_iPassiveMove;
protected bool m_bStopMove;
@@ -41,6 +40,7 @@ public class CECNPC : CECObject
protected bool m_bAboutToDie;
protected Vector3 m_vStopDir;
protected ROLEEXTPROP m_ExtProps;
+ protected ROLEBASICPROP m_BasicProps;
protected CECNPCModelPolicy m_pNPCModelPolicy;
protected CECPolicyAction m_pPolicyAction;
public int m_iMMIndex;
@@ -51,6 +51,8 @@ public class CECNPC : CECObject
protected static CECStringTab m_ActionNames;
+/* public string NameNPC => m_strName;
+ public string ROLEBASICPROP => m_strName;*/
public virtual void SetUpCECNPC(CECNPCMan pNPCMan)
@@ -59,10 +61,13 @@ public class CECNPC : CECObject
m_vServerPos = new Vector3();
m_iCID = (int)Class_ID.OCID_NPC;
}
+
+ public string GetName()
+ {
+ return m_strName;
+ }
public virtual bool Init(int tid, in info_npc info, ReadOnlySpan packet, int infoOffset)
{
- BMLogger.LogError($" CECNPC.Init "+ info.state);
-
m_NPCInfo.nid = info.nid;
m_NPCInfo.tid = tid;
m_NPCInfo.vis_tid = info.vis_tid;
@@ -788,15 +793,18 @@ public class CECNPC : CECObject
{
return;
}
-
- var nameMonster = Path.GetFileNameWithoutExtension(szModelFile);
- var model = NPCBuilder.Instance.GetModelByName(nameMonster);
- if (model == null) return;
+ BMLogger.LogError($" CECNPC.QueueLoadNPCModel szModelFile= {szModelFile.ToLower()} ");
+ var model = NPCBuilder.Instance.GetModelByPath(szModelFile.ToLower());
+ if (model == null) {
+
+ model = GameObject.CreatePrimitive(PrimitiveType.Capsule);
+ BMLogger.LogError($" CECNPC.QueueLoadNPCModel model == null szModelFile= {szModelFile} ");
+ }
var monsterModel = Instantiate(model, transform);
monsterModel.SetActive(true);
var npcVisual = GetComponent();
- npcVisual.InitNPCEventDoneHandler(m_NPCInfo);
+ npcVisual?.InitNPCEventDoneHandler(m_NPCInfo);
//QueueECModelForLoad(MTL_ECM_NPC, GetNPCInfo().nid, GetBornStamp(), GetServerPos(), szModelFile, tid);
}
@@ -818,7 +826,6 @@ public class CECNPC : CECObject
{
tid = GetNPCInfo().tid;
}
- BMLogger.LogError("HoangDev: GetVisibleModel NPC TID=" + tid + ", ModelFile=" + szModelFile);
return tid > 0;
}
public bool GetModelFile(int tid, out string szModelFile)
diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs
index ee58eed2f3..45ac186c69 100644
--- a/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs
+++ b/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs
@@ -1,6 +1,8 @@
using BrewMonster;
using CSNetwork.GPDataType;
using System;
+using System.Runtime.InteropServices;
+using System.Text;
using UnityEngine;
using static CECNPC;
@@ -37,7 +39,6 @@ public class CECNPCServer : CECNPC
m_fTouchRad = m_pMonEssence.Value.size;
m_BasicProps.iLevel = m_pMonEssence.Value.level;
- BMLogger.LogError("HoangDev: CECNPCServer CECNPCServer QueueLoadNPCModel = ");
QueueLoadNPCModel();
/* float fExt = m_fTouchRad * 1.5f;
@@ -47,9 +48,8 @@ public class CECNPCServer : CECNPC
// If NPC doesn't have specific name, use the name in database
if ((info.state & (int)PlayerNPCState.GP_STATE_NPC_NAME) == 0)
{
- m_strName = m_pMonEssence.Value.name.ToString();
- /* if (m_pPateName)
- m_pPateName->SetText(m_strName, false);*/
+ m_strName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(m_pDBEssence.Value.name));
+ m_npcUI.SetName(m_strName);
}
transform.forward = EC_Utility.glb_DecompressDirH(info.dir);
diff --git a/Assets/PerfectWorld/Scripts/NPC/NPCBuilder.cs b/Assets/PerfectWorld/Scripts/NPC/NPCBuilder.cs
index 787ece1912..82c7811dc4 100644
--- a/Assets/PerfectWorld/Scripts/NPC/NPCBuilder.cs
+++ b/Assets/PerfectWorld/Scripts/NPC/NPCBuilder.cs
@@ -9,7 +9,8 @@ using BrewMonster;
#if UNITY_EDITOR
-using Animancer; // B�?o đ�?m b�?n có Animancer package
+using Animancer;
+using BrewMonster.Scripts; // B�?o đ�?m b�?n có Animancer package
#endif
public class NPCBuilder : MonoSingleton
@@ -36,11 +37,9 @@ public class NPCBuilder : MonoSingleton
.ToDictionary(g => g.Key, g => g.First());
}
- public GameObject GetModelByName(string name)
+ public GameObject GetModelByPath(string path)
{
- return modelNPCDic != null && modelNPCDic.TryGetValue(name, out var model)
- ? model
- : null;
+ return AddressableManager.Instance.LoadPrefabAsync(path).Result;
}
#if UNITY_EDITOR
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
index b1422cce07..46b334ebe3 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
@@ -771,6 +771,21 @@ namespace CSNetwork.GPDataType
//TO DO: Check Valid
}
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_self_info_00
+ {
+ public short sLevel;
+ public byte State;
+ public byte Level2;
+ public int iHP;
+ public int iMaxHP;
+ public int iMP;
+ public int iMaxMP;
+ public int iExp;
+ public int iSP;
+ public int iAP;
+ public int iMaxAP;
+ };
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct info_player_1
@@ -1204,11 +1219,13 @@ namespace CSNetwork.GPDataType
return true;
}
}
+
public struct cmd_npc_visible_tid_notify
{
public int nid;
public int vis_tid;
};
+
public struct cmd_npc_info_00
{
public int idNPC;
@@ -1336,5 +1353,18 @@ namespace CSNetwork.GPDataType
{
public int idTarget;
};
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_host_notify_root
+ {
+ public A3DVECTOR3 pos;
+ public byte type;
+ };
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_host_dispel_root
+ {
+ public byte type;
+ };
}
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
index 5f30345c24..d1be236edd 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
@@ -22,7 +22,8 @@ namespace CSNetwork
{
public class GameSession : IDisposable
{
- private static IPrefixedLogger _logger = LoggerFactory.GetLogger(nameof(GameSession)); // Get class-specific logger
+ private static IPrefixedLogger
+ _logger = LoggerFactory.GetLogger(nameof(GameSession)); // Get class-specific logger
private NetworkManager _networkManager;
private string _host;
@@ -31,8 +32,10 @@ namespace CSNetwork
private string _password;
private int _currentUserId = -1; // To store the UserID after successful login
private int m_iCharID;
- private int m_idLastSelTarget = 0; // ID of selected item last time
+ private int m_idLastSelTarget = 0; // ID of selected item last time
+
CECStringTab m_ErrorMsgs;
+
// State management for async operations and callbacks
private Action _loginCallback;
private Action> _roleListCallback;
@@ -41,6 +44,16 @@ namespace CSNetwork
private RoleInfo _selectedRole;
public bool IsConnected => _networkManager?.IsConnected ?? false;
+#if UNITY_EDITOR
+ public bool isDebug;
+ public bool IsDebug
+ {
+ get => isDebug;
+ set => isDebug = value;
+ }
+#endif
+
+
public GameSession()
{
_networkManager = new NetworkManager();
@@ -55,6 +68,7 @@ namespace CSNetwork
_logger = LoggerFactory.GetCustomLogger(path, nameof(GameSession) + GetHashCode(), LoggerType.File);
_networkManager.SetLogPath(path);
}
+
///
/// Connects to the game server asynchronously.
///
@@ -68,6 +82,7 @@ namespace CSNetwork
_logger.Log(LogType.Warning, "ConnectAsync called but already connected.");
return;
}
+
_host = host;
_port = port;
_logger.Log(LogType.Info, $"Attempting to connect to {_host}:{_port}...");
@@ -80,7 +95,8 @@ namespace CSNetwork
}
else
{
- _logger.Log(LogType.Warning, "Connection failed after ConnectAsync completed (check NetworkManager logs/events).");
+ _logger.Log(LogType.Warning,
+ "Connection failed after ConnectAsync completed (check NetworkManager logs/events).");
}
}
catch (Exception ex)
@@ -111,6 +127,7 @@ namespace CSNetwork
callback?.Invoke(false);
return;
}
+
if (_loginCallback != null)
{
_logger.Log(LogType.Warning, "LoginAsync called while another login is already in progress.");
@@ -138,15 +155,18 @@ namespace CSNetwork
callback?.Invoke(null);
return;
}
+
if (_currentUserId == -1)
{
_logger.Log(LogType.Warning, "GetRoleListAsync called but not logged in.");
callback?.Invoke(null);
return;
}
+
if (_roleListCallback != null)
{
- _logger.Log(LogType.Warning, "GetRoleListAsync called while another role list retrieval is already in progress.");
+ _logger.Log(LogType.Warning,
+ "GetRoleListAsync called while another role list retrieval is already in progress.");
callback?.Invoke(null);
return;
}
@@ -157,6 +177,11 @@ namespace CSNetwork
RequestRoleListInternal();
}
+ public RoleInfo GetRoleInfo()
+ {
+ return _selectedRole;
+ }
+
public void SelectRoleAsync(RoleInfo role, Action callback)
{
_selectedRole = role;
@@ -167,8 +192,8 @@ namespace CSNetwork
Roleid = role.roleid,
Flag = 0
});
-
}
+
public void EnterWorldAsync(RoleInfo role, Action callback)
{
SendProtocol(new enterworld()
@@ -177,12 +202,14 @@ namespace CSNetwork
Provider_link_id = 0,
}, callback);
}
+
public void RequestDropIvtrItem(byte index, int amount)
{
gamedatasend gamedatasendRequest = new gamedatasend();
gamedatasendRequest.Data = C2SCommandFactory.CreateDropIvtrItem(index, amount);
SendProtocol(gamedatasendRequest);
}
+
public void RequestDropEquipItem(byte index)
{
gamedatasend gamedatasendRequest = new gamedatasend();
@@ -196,6 +223,7 @@ namespace CSNetwork
gamedatasendRequest.Data = C2SCommandFactory.CreatePickupItem(idItem, tid);
SendProtocol(gamedatasendRequest);
}
+
public void RequestInventoryAsync(byte byPackage, Action callback)
{
gamedatasend gamedatasendRequest = new gamedatasend();
@@ -209,6 +237,7 @@ namespace CSNetwork
gamedatasendRequest.Data = C2SCommandFactory.CreateQueryPlayerCash();
SendProtocol(gamedatasendRequest);
}
+
public void RequestCheckSecurityPassWd(string password)
{
gamedatasend gamedatasendRequest = new gamedatasend();
@@ -229,6 +258,7 @@ namespace CSNetwork
gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.CreateGetMallShopping(count, goodsArray);
SendProtocol(gamedatasendRequest);
}
+
public void RequestOwnItemInfoAsync(
byte byPackage,
byte bySlot,
@@ -242,7 +272,8 @@ namespace CSNetwork
Action callback)
{
gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.CreateOwnItemInfo(byPackage, bySlot, type, expire_date, state, count, crc, content_length, content);
+ gamedatasendRequest.Data = C2SCommandFactory.CreateOwnItemInfo(byPackage, bySlot, type, expire_date, state,
+ count, crc, content_length, content);
SendProtocol(gamedatasendRequest, callback);
}
@@ -251,7 +282,8 @@ namespace CSNetwork
{
if (IsConnected)
{
- _logger.Log(LogType.Debug, $"Sending protocol: {protocol.GetType().Name} (Detail: {protocol.ToString})");
+ _logger.Log(LogType.Debug,
+ $"Sending protocol: {protocol.GetType().Name} (Detail: {protocol.ToString})");
_networkManager.Send(protocol);
complete?.Invoke();
}
@@ -265,13 +297,11 @@ namespace CSNetwork
private void OnProtocolReceived(Protocol protocol)
{
-
_logger.Log(LogType.Debug, $"Received protocol: {protocol.GetType().Name} (Type: {protocol.Type})");
if (protocol is null)
return;
-
// Route protocol to appropriate handler
switch (protocol.GetPType())
{
@@ -331,11 +361,16 @@ namespace CSNetwork
pDataBuf[i - lenghtHeader] = protocol.Data.ByteArray[i];
}
}
+
var pCmdHeader = BitConverter.ToUInt16(byteArrHeader);
//sss
- //BMLogger.LogError($"### GameDataSend: CMDID {pCmdHeader}");
+#if UNITY_EDITOR
+ if (isDebug)
+ {
+ BMLogger.LogError($"### GameDataSend: CMDID {pCmdHeader}");
+ }
+#endif
int iHostID = _selectedRole.roleid;
- //BMLogger.LogError($"### GameDataSend: " + pCmdHeader);
switch (pCmdHeader)
{
@@ -355,7 +390,8 @@ namespace CSNetwork
case CommandID.PLAYER_INFO_00:
case CommandID.SELF_INFO_1:
// OnMsgPlayerInfo(-1, pDataBuf, pCmdHeader);
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERINFO, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader, iHostID, _selectedRole);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERINFO, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf,
+ pCmdHeader, iHostID, _selectedRole);
break;
case CommandID.OBJECT_MOVE:
int lenghtDataType = Marshal.SizeOf();
@@ -363,31 +399,38 @@ namespace CSNetwork
int idObjMove = BitConverter.ToInt32(arrByteData);
if (ISPLAYERID(idObjMove))
{
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader, iHostID);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader, iHostID);
}
else if (ISNPCID(idObjMove))
{
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
}
+
break;
case CommandID.OBJECT_STOP_MOVE:
+ {
+ int id1 = GPDataTypeHelper.FromBytes(pDataBuf);
+ if (ISPLAYERID(id1))
{
- int id1 = GPDataTypeHelper.FromBytes(pDataBuf);
- if (ISPLAYERID(id1))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSTOPMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- }
- else if (ISNPCID(id1))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCSTOPMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- }
- break;
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSTOPMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
}
+ else if (ISNPCID(id1))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCSTOPMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
+ }
+
+ break;
+ }
case CommandID.OWN_IVTR_DATA:
- case CommandID.OWN_IVTR_DETAIL_DATA:
+ case CommandID.OWN_IVTR_DETAIL_DATA:
case CommandID.GET_OWN_MONEY:
case CommandID.CHANGE_IVTR_SIZE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
break;
case CommandID.EXG_IVTR_ITEM:
case CommandID.MOVE_IVTR_ITEM:
@@ -397,49 +440,61 @@ namespace CSNetwork
case CommandID.MOVE_EQUIP_ITEM:
case CommandID.UNFREEZE_IVTR_SLOT:
case CommandID.PLAYER_EQUIP_TRASHBOX_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ITEMOPERATION, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ITEMOPERATION, (int)MANAGER_INDEX.MAN_PLAYER, 0,
+ pDataBuf, pCmdHeader);
break;
case CommandID.PLAYER_CASH:
{
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
break;
}
case CommandID.MATTER_INFO_LIST:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERINFO, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERINFO, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.MATTER_ENTER_WORLD:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERENTWORLD, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERENTWORLD, (int)MANAGER_INDEX.MAN_MATTER, 0,
+ pDataBuf, pCmdHeader);
break;
- case CommandID.PICKUP_ITEM:
+ case CommandID.PICKUP_ITEM:
case CommandID.HOST_OBTAIN_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPITEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPITEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.MATTER_PICKUP:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PICKUPMATTER, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PICKUPMATTER, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
+ break;
case CommandID.PICKUP_MONEY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPMONEY, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPMONEY, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.HOST_CORRECT_POS:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CORRECTPOS, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CORRECTPOS, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
break;
case CommandID.OWN_ITEM_INFO:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNITEMINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNITEMINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
break;
case CommandID.NPC_ENTER_SLICE:
case CommandID.NPC_INFO_LIST:
case CommandID.NPC_INFO_00:
case CommandID.NPC_ENTER_WORLD:
case CommandID.NPC_VISIBLE_TID_NOTIFY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCINFO, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader, dwDataSize);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCINFO, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader, dwDataSize);
break;
case CommandID.TASK_DATA:
case CommandID.TASK_VAR_DATA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, dwDataSize);
break;
case CommandID.BE_HURT:
case CommandID.HURT_RESULT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.OBJECT_ATTACK_RESULT:
//int id = GPDataTypeHelper.FromBytes(pDataBuf);
@@ -447,38 +502,39 @@ namespace CSNetwork
//BMLogger.LogError($"OBJECT_ATTACK_RESULT: npc ? " + ISNPCID(id));
if (ISPLAYERID(pCmdAtk.attacker_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
else if (ISNPCID(pCmdAtk.attacker_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.HOST_ATTACKRESULT:
_logger.Info($"HOST_ATTACKRESULT: " + pCmdHeader);
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.HOST_ATTACKED:
_logger.Info($"HOST_ATTACKED: " + pCmdHeader);
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATTACKED, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATTACKED, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.ERROR_MESSAGE:
_logger.Info($"### GameDataSend: ERROR_MESSAGE: {BitConverter.ToInt32(pDataBuf, 0)}");
- cmd_error_msg pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
+ cmd_error_msg pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
BMLogger.LogError("hOANGdEV : ERROR_MESSAGE pCmd.iMessage!=0 " + pCmd.iMessage);
- if (pCmd.iMessage!=0)
+ if (pCmd.iMessage != 0)
{
-
string szMsg = m_ErrorMsgs.GetWideString(pCmd.iMessage);
- if (string.IsNullOrEmpty( szMsg))
- BMLogger.LogError("SERVER - unknown error !");
+ if (string.IsNullOrEmpty(szMsg))
+ BMLogger.LogError("SERVER - unknown error !");
//else if (pCmd.iMessage != 2)
- //g_pGame->GetGameRun()->AddChatMessage(szMsg, GP_CHAT_MISC);
-
+ //g_pGame->GetGameRun()->AddChatMessage(szMsg, GP_CHAT_MISC);
}
if (pCmd.iMessage == 2)
{
-
// Attack target is too far
//pGameRun->PostMessage(MSG_HST_TARGETISFAR, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader->cmd);
}
@@ -499,15 +555,18 @@ namespace CSNetwork
}
else if (pCmd.iMessage == 108 /*&& pGameRun->GetHostPlayer()->IsInKingService()*/)
{
- /* CECGameUIMan* pGameUI = pGameRun->GetUIManager()->GetInGameUIMan();
- if (pGameUI)
- pGameUI->EndNPCService();*/
+ /* CECGameUIMan* pGameUI = pGameRun->GetUIManager()->GetInGameUIMan();
+ if (pGameUI)
+ pGameUI->EndNPCService();*/
}
- else if (pCmd.iMessage == 108 /*&& pGameRun->GetHostPlayer()->GetOfflineShopCtrl()->GetNPCSevFlag() != COfflineShopCtrl::NPCSEV_NULL*/)
+ else if
+ (pCmd.iMessage ==
+ 108 /*&& pGameRun->GetHostPlayer()->GetOfflineShopCtrl()->GetNPCSevFlag() != COfflineShopCtrl::NPCSEV_NULL*/
+ )
{
- /* CECGameUIMan* pGameUI = pGameRun->GetUIManager()->GetInGameUIMan();
- if (pGameUI)
- pGameUI->EndNPCService();*/
+ /* CECGameUIMan* pGameUI = pGameRun->GetUIManager()->GetInGameUIMan();
+ if (pGameUI)
+ pGameUI->EndNPCService();*/
}
else if (pCmd.iMessage == 175)
{
@@ -523,7 +582,8 @@ namespace CSNetwork
case CommandID.SELECT_TARGET:
case CommandID.UNSELECT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SELTARGET, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SELTARGET, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
break;
case CommandID.NPC_DIED:
case CommandID.NPC_DIED2:
@@ -531,18 +591,23 @@ namespace CSNetwork
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDIED, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
break;
case CommandID.OBJECT_DISAPPEAR:
- {
- int lenghtDataType1 = Marshal.SizeOf();
- byte[] arrByteData1 = GetBytes(pDataBuf, lenghtDataType1, 0);
- int idObjMove1 = BitConverter.ToInt32(arrByteData1);
- if (ISPLAYERID(idObjMove1))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDISAPPEAR, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- else if (ISNPCID(idObjMove1))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDISAPPEAR, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
-
- break;
- }
+ {
+ int lenghtDataType1 = Marshal.SizeOf();
+ byte[] arrByteData1 = GetBytes(pDataBuf, lenghtDataType1, 0);
+ int idObjMove1 = BitConverter.ToInt32(arrByteData1);
+ if (ISPLAYERID(idObjMove1))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDISAPPEAR, MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
+ else if (ISNPCID(idObjMove1))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDISAPPEAR, MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ }
+ case CommandID.SELF_INFO_00:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_INFO00, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
}
}
@@ -550,7 +615,6 @@ namespace CSNetwork
{
if (iSubID == 0)
{
-
}
else if (iSubID < 0)
{
@@ -561,24 +625,25 @@ namespace CSNetwork
{
byteArray[i] = data[i];
}
+
int cid = BitConverter.ToInt32(byteArray);
switch (pCmdHeader)
{
case CommandID.PLAYER_INFO_1:
case CommandID.PLAYER_ENTER_WORLD:
case CommandID.PLAYER_ENTER_SLICE:
+ {
+ if (cid != iHostID)
{
- if (cid != iHostID)
- {
- _logger.Info("### OnMsgPlayerInfo: ElsePlayer join");
- }
- break;
+ _logger.Info("### OnMsgPlayerInfo: ElsePlayer join");
}
+
+ break;
+ }
}
}
else
{
-
}
}
@@ -686,7 +751,8 @@ namespace CSNetwork
return;
}
- _logger.Log(LogType.Debug, $"Received RoleListResponse. Handle: {response.handle}, Result: {response.result}, Count: {response.rolelist.Count}");
+ _logger.Log(LogType.Debug,
+ $"Received RoleListResponse. Handle: {response.handle}, Result: {response.result}, Count: {response.rolelist.Count}");
if (response.result == 0)
{
@@ -771,10 +837,12 @@ namespace CSNetwork
_networkManager.Dispose();
_networkManager = null;
}
+
_loginCallback = null;
_roleListCallback = null;
_accumulatedRoles = null;
}
+
disposedValue = true;
}
}
@@ -789,8 +857,10 @@ namespace CSNetwork
{
return id != 0 && (id & 0x80000000) == 0;
}
+
public bool ISNPCID(int id) => ((id & unchecked((int)0x80000000)) != 0)
- && ((id & 0x40000000) == 0);
+ && ((id & 0x40000000) == 0);
+
private byte[] GetBytes(byte[] bytes, int length, int index)
{
byte[] arrByteData = new byte[length];
@@ -798,25 +868,30 @@ namespace CSNetwork
{
arrByteData[i] = bytes[i + index];
}
+
return arrByteData;
}
+
public void c2s_CmdPlayerMove(in Vector3 vCurPos, in Vector3 vDest,
- int iTime, float fSpeed, int iMoveMode, ushort wStamp)
+ int iTime, float fSpeed, int iMoveMode, ushort wStamp)
{
gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreatePlayerMove(vCurPos, vDest, (ushort)iTime, fSpeed, (byte)iMoveMode, wStamp);
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerMove(vCurPos, vDest, (ushort)iTime, fSpeed, (byte)iMoveMode, wStamp);
SendProtocol(gamedatasend);
}
+
public void c2s_SendCmdStopMove(in Vector3 vDest, float fSpeed, int iMoveMode,
- byte byDir, ushort wStamp, int iTime)
+ byte byDir, ushort wStamp, int iTime)
{
-
gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreatePlayerStop(vDest, fSpeed, (byte)iMoveMode, byDir, wStamp, (ushort)iTime);
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerStop(vDest, fSpeed, (byte)iMoveMode, byDir, wStamp, (ushort)iTime);
SendProtocol(gamedatasend);
}
+
public void SendChatData(byte cChannel, in string szMsg, int iPack, int iSlot)
{
publicchat publicChat = new publicchat();
@@ -828,7 +903,12 @@ namespace CSNetwork
_logger.Log(LogType.Warning, $"HoangDev : publicChat {publicChat}");
SendProtocol(publicChat);
}
- private void SetCharacterID(int iCharID) { m_iCharID = iCharID; }
+
+ private void SetCharacterID(int iCharID)
+ {
+ m_iCharID = iCharID;
+ }
+
private void OnPrtcChatMessage(Protocol pProtocol, bool bCalledagain)
{
chatmessage p = (chatmessage)pProtocol;
@@ -842,7 +922,11 @@ namespace CSNetwork
public struct ChatMessageEvent
{
public string context;
- public ChatMessageEvent(string context) { this.context = context; }
+
+ public ChatMessageEvent(string context)
+ {
+ this.context = context;
+ }
}
public void c2s_SendCmdGetAllData(bool byPack, bool byEquip, bool byTask)
@@ -897,4 +981,4 @@ namespace CSNetwork
}
}
}
-}
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
index 5fbd6667e8..d493a1d2ba 100644
--- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
+++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
@@ -29,6 +29,19 @@ namespace BrewMonster.Network
private string _username = "";
private string _password = "";
+#if UNITY_EDITOR
+ public bool isDebg;
+ private bool lastDebug;
+ public void OnValidate()
+ {
+ if (isDebg != lastDebug)
+ {
+ _gameSession.IsDebug = isDebg;
+ lastDebug = isDebg;
+ }
+ }
+#endif
+
protected override void Awake()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
@@ -105,7 +118,10 @@ namespace BrewMonster.Network
DontDestroyOnLoad(gameObject);
}
-
+ public RoleInfo GetRoleInfo()
+ {
+ return _gameSession.GetRoleInfo();
+ }
/// Make sure username and password is set before calling this method
private async Task ConnectAsync(string ip, int port)
{
diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs
index bc50295ed8..a558ade04e 100644
--- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs
+++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs
@@ -160,14 +160,12 @@ namespace PerfectWorld.Scripts.Player
float fMoveDelta = A3d_Magnitude(vPos - vCurPos);
if (Math.Abs(fMoveDelta - 0f) <= float.Epsilon || fMoveDelta >= fDist) //!fMoveDelta <=> (Math.Abs(fMoveDelta - 0f) <= float.Epsilon) Compare with 0
{
- BrewMonster.BMLogger.Log($"HoangDev : SetPosServer({m_vServerPos}) 1;");
SetPos(m_vServerPos);
PlayAction(GetMoveStandAction(false), true, 1, false);
bRet = true;
}
else
{
- BrewMonster.BMLogger.Log($"HoangDev : SetPos({vPos}) 1;");
SetPos(vPos);
}
}
@@ -191,11 +189,9 @@ namespace PerfectWorld.Scripts.Player
);
vPos = MoveStep(vDir, m_fMoveSpeed, fDeltaTime);
SetPos(vPos);
- BrewMonster.BMLogger.Log("HoangDev : SetPos(vPos) 1;");
float fDist = A3d_Magnitude(m_vServerPos - vCurPos);
if (fDist >= MAX_LAGDIST)
{
- BrewMonster.BMLogger.Log("HoangDev : SetPos(m_vServerPos) 2;");
SetPos(m_vServerPos);
return true;
}
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs
new file mode 100644
index 0000000000..fd4316bd9f
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs
@@ -0,0 +1,19 @@
+using TMPro;
+using UnityEngine;
+
+namespace BrewMonster
+{
+ public class HUDNPC : MonoBehaviour
+ {
+ [SerializeField] private TextMeshProUGUI _healthText;
+ [SerializeField] private TextMeshProUGUI _nameText;
+ [SerializeField] private TextMeshProUGUI _statText;
+
+ public void SetText(string healthText, string nameText, string statText)
+ {
+ _healthText.text = healthText;
+ _nameText.text = nameText;
+ _statText.text = statText;
+ }
+ }
+}
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs.meta b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs.meta
new file mode 100644
index 0000000000..697d2e1da0
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d072871c8791e284dbad61ce13ba6887
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs
new file mode 100644
index 0000000000..884598b890
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs
@@ -0,0 +1,42 @@
+using System;
+using CSNetwork.GPDataType;
+using TMPro;
+using UnityEngine;
+
+namespace BrewMonster
+{
+ public class HUDPlayer : MonoBehaviour
+ {
+ public TextMeshProUGUI healthText;
+ public TextMeshProUGUI manaText;
+ public TextMeshProUGUI expText;
+ public TextMeshProUGUI nameText;
+ public TextMeshProUGUI levelText;
+
+ public float neededExp;
+ private void Awake()
+ {
+ EventBus.Subscribe(UpdateHostPlayerInfoUI);
+ EventBus.Subscribe(UpdateNameHostPlayer);
+ EventBus.Subscribe(UpdateNeededExp);
+ }
+
+ private void UpdateNeededExp(EXPToUpLevel obj)
+ {
+ neededExp = obj.NeededExp;
+ }
+
+ private void UpdateNameHostPlayer(InfoHostPlayer obj)
+ {
+ nameText.text = obj.NameHostPlayer;
+ }
+
+ private void UpdateHostPlayerInfoUI(cmd_self_info_00 obj)
+ {
+ healthText.text = $"{obj.iHP}/{obj.iMaxHP}";
+ manaText.text = $"{obj.iMP}/{obj.iMaxMP}";
+ expText.text = $"{((float)obj.iExp/neededExp)*100}%";
+ levelText.text = $"{obj.sLevel}";
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs.meta b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs.meta
new file mode 100644
index 0000000000..1ba0472aea
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 706d0ac515335b446be8840000ff0fab
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
index e6e114b825..e089a3e701 100644
--- a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs
@@ -56,6 +56,7 @@ namespace BrewMonster.UI
_usernameInputField.text = "test004";
_passwordInputField.text = "123456";
}
+
if (Input.GetKeyUp(KeyCode.Tab))
{
_usernameInputField.text = "test002";
@@ -75,7 +76,7 @@ namespace BrewMonster.UI
PlayerPrefs.SetString("password", password);
PlayerPrefs.Save();
await UnityGameSession.Login(username, password, OnLoginComplete);
- _selectCharacterScreen.gameObject.SetActive(true);
+ _selectCharacterScreen.gameObject.SetActive(true);
}
///
@@ -89,6 +90,7 @@ namespace BrewMonster.UI
BMLogger.LogError("Login failed");
return;
}
+
UnityGameSession.GetRoleListAsync(OnGetRoleListComplete);
}
@@ -111,7 +113,7 @@ namespace BrewMonster.UI
private void OnSelectRoleComplete(RoleInfo roleInfo)
{
- context.Post(_ =>
+ context.Post(_ =>
{
isDoneWorldRender = false;
isDoneNPCRender = false;
@@ -122,7 +124,15 @@ namespace BrewMonster.UI
return;
}
};
- string nameScene = "NPCRender";
+#if TESTFAST
+ string nameScene = "LoginScene";
+ SceneManager.UnloadSceneAsync(nameScene);
+ isDoneNPCRender = true;
+ isDoneWorldRender = true;
+ actLoadChar?.Invoke();
+ UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete);
+#else
+ string nameScene = "NPCRender";
UnityGameSession.Instance.LoadScene(nameScene, LoadSceneMode.Single, (value) =>
{
isDoneNPCRender = value;
@@ -136,8 +146,8 @@ namespace BrewMonster.UI
UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete);
});
+#endif
}, null);
-
}
private async void OnEnterWorldComplete()
@@ -159,7 +169,7 @@ namespace BrewMonster.UI
// _inventoryUI.DisplayInventory(inventoryData);
//}
- #if UNITY_EDITOR
+#if UNITY_EDITOR
private void OnValidate()
{
if (_usernameInputField == null)
@@ -167,17 +177,19 @@ namespace BrewMonster.UI
// find childrend with name "username"
_usernameInputField = transform.Find("username").GetComponent();
}
+
if (_passwordInputField == null)
{
// find childrend with name "password"
_passwordInputField = transform.Find("password").GetComponent();
}
+
if (_loginButton == null)
{
// find childrend with name "LoginBtn"
_loginButton = transform.Find("LoginBtn").GetComponent