Merge remote-tracking branch 'origin/feature/hp_interact_npc_merge' into implement_task_UI

This commit is contained in:
MinhHai
2025-11-17 19:14:26 +07:00
52 changed files with 6124 additions and 61 deletions
@@ -1,5 +1,106 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2486392142327362049
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3233441867675090637}
- component: {fileID: 7894129013412138377}
- component: {fileID: 1184637750286334292}
- component: {fileID: 7240944814921333938}
m_Layer: 0
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3233441867675090637
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2486392142327362049}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2780428059708698453}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!223 &7894129013412138377
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2486392142327362049}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 100
m_TargetDisplay: 0
--- !u!114 &1184637750286334292
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2486392142327362049}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 1
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0
--- !u!114 &7240944814921333938
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2486392142327362049}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &6950113420985123515
GameObject:
m_ObjectHideFlags: 0
@@ -30,7 +131,8 @@ Transform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 3233441867675090637}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1890210201668811196
@@ -49,6 +151,8 @@ MonoBehaviour:
uiPrefabs: []
npsUI: {fileID: 0}
currentTargetNPCID: 0
dialogResouce: {fileID: 11400000, guid: 540bc8e61556ba4479407a2d68e17580, type: 2}
canvasDlg: {fileID: 7894129013412138377}
--- !u!114 &6919949516443544071
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -0,0 +1,17 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3b5ec8ff401272d4ebb5be4f47b02464, type: 3}
m_Name: DialogScriptTableObject
m_EditorClassIdentifier:
lstPrefabDialog:
- id: DialogNPC
prefab: {fileID: 8237288432181259026, guid: 7653e7e64393ec24c903f0606499b8c4, type: 3}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 540bc8e61556ba4479407a2d68e17580
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a8da53776c0d93a4cb3248d89be94d91
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: fb2f2f58be45f6e4890e85cc00b0bcc9
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 6d3e1de5b0b9eec47930f9f2dc926d84
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 208d836ca21070845bd58e58b10c8de9
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,130 @@
fileFormatVersion: 2
guid: 50648e5dab4e12f44bbbdac9313e24a4
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -251,5 +251,10 @@ namespace BrewMonster.Common
GetNextToken(bCrossLine);
return int.Parse(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken));
}
// Reach end of file ?
public bool IsEnd() { return m_Script.pCurIndex >= m_Script.pFileBuf.Length; }
// Get current line
public int GetCurLine() { return m_Script.iLine; }
}
}
@@ -0,0 +1,83 @@
using UnityEngine;
namespace BrewMonster.Common
{
public class CECTimeSafeChecker
{
uint m_dwBeginTick;
uint m_dwTimeLength;
public CECTimeSafeChecker()
{
m_dwBeginTick = 0;
m_dwTimeLength = 0;
}
void Reset(uint dwCurrentTickCount, uint dwTimeLength)
{
m_dwBeginTick = dwCurrentTickCount;
m_dwTimeLength = dwTimeLength;
}
void Reset(uint dwTimeLength)
{
Reset((uint)Time.realtimeSinceStartupAsDouble, dwTimeLength);
}
public void Reset()
{
Reset((uint)Time.realtimeSinceStartupAsDouble, m_dwTimeLength);
}
public bool IsTimeArrived()
{
return IsTimeArrived((uint)Time.realtimeSinceStartupAsDouble);
}
bool IsTimeArrived(uint dwCurrentTickCount)
{
return ElapsedTime(dwCurrentTickCount) >= TimeLength();
}
uint ElapsedTime(uint dwEndTickCount, uint dwBeginTickCount)
{
return (dwEndTickCount >= dwBeginTickCount) ? (dwEndTickCount - dwBeginTickCount) : 0;
}
uint ElapsedTime(uint dwCurrentTickCount)
{
return ElapsedTime(dwCurrentTickCount, m_dwBeginTick);
}
uint ElapsedTimeFor(uint dwBeginTickCount)
{
return ElapsedTime((uint)Time.realtimeSinceStartupAsDouble, dwBeginTickCount);
}
uint ElapsedTime()
{
return ElapsedTime((uint)Time.realtimeSinceStartupAsDouble);
}
uint TimeLength()
{
return m_dwTimeLength;
}
uint LeftTime(uint dwCurrentTickCount)
{
uint result = 0;
uint dwElapsedTime = ElapsedTime(dwCurrentTickCount);
if (dwElapsedTime<TimeLength()){
result = TimeLength() - dwElapsedTime;
}
return result;
}
public uint LeftTime(){
return LeftTime((uint)Time.realtimeSinceStartupAsDouble);
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 962cbd73730e4564bbf5b94ef1ab1b27
@@ -0,0 +1,25 @@
using NUnit.Framework;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace BrewMonster.UI
{
[CreateAssetMenu(fileName = "DialogScriptTableObject", menuName = "Scriptable Objects/DialogScriptTableObject")]
public class DialogScriptTableObject : ScriptableObject
{
public List<DialogResouce> lstPrefabDialog;
public GameObject GetPrefabDialog(string id)
{
return lstPrefabDialog.Find(x => x.id.Equals(id)).prefab;
}
}
[Serializable]
public struct DialogResouce
{
public string id;
public GameObject prefab;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3b5ec8ff401272d4ebb5be4f47b02464
@@ -0,0 +1,30 @@
using BrewMonster.Common;
using DG.Tweening;
using NUnit.Framework;
using System.Collections.Generic;
using UnityEngine;
namespace BrewMonster.Common
{
public class CECStubbornFactionInfoSender
{
CECTimeSafeChecker m_timer;
List<int> m_factionIDs;
public void Add(int iNumFaction, int[] aFactionIDs)
{
if (iNumFaction <= 0 || aFactionIDs == null)
{
return;
}
for (int i = 0; i < iNumFaction; ++i)
{
int idFaction = aFactionIDs[i];
if (idFaction > 0 && !m_factionIDs.Contains(idFaction))
{
m_factionIDs.Add(idFaction);
}
}
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c2856691c4dd1e948914ea59c1d2e443
@@ -1,10 +1,11 @@
using ModelRenderer.Scripts.GameData;
using BrewMonster.Scripts.Task;
using UnityEngine;
using BrewMonster;
using BrewMonster.Scripts.Task;
using CSNetwork;
using ModelRenderer.Scripts.GameData;
using System;
using System.Collections.Generic;
using System.IO;
using CSNetwork;
using UnityEngine;
namespace BrewMonster.Network
{
@@ -12,6 +13,8 @@ namespace BrewMonster.Network
{
#region Fields
private static CECFactionMan m_pFactionMan; // Faction manager
public static bool g_bEnableFortressDeclareWar = false;
private static ATaskTemplMan m_pTaskMan; // Task template manager
private static elementdataman m_pElementDataMan; // global element templates manager
private static CECGameRun m_pGameRun; // Game running object
@@ -41,6 +44,7 @@ namespace BrewMonster.Network
}
// String table getters
public static CECFactionMan GetFactionMan() { return m_pFactionMan; }
public static BrewMonster.CECStringTab GetFixedMsgs()
{
return m_FixedMsgs;
@@ -251,6 +255,12 @@ namespace BrewMonster.Network
return iOldCursor;
}
// Get server GMT(UTC) time
public static int GetServerGMTTime()
{
long unixTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
return (int)unixTime + m_iTimeError;
}
#endregion
}
}
@@ -0,0 +1,34 @@
using BrewMonster.Network;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace BrewMonster
{
public class Faction_Info
{
public uint m_id;
public string m_szName;
public int m_nLev;
public int m_nMemNum;
public int GetLevel() { return m_nLev; }
}
public class CECFactionMan
{
Dictionary<uint, Faction_Info> m_FactionMap;
public Faction_Info GetFaction(uint uId, bool bRequestFromServer)
{
if (!m_FactionMap.TryGetValue(uId, out var it))
{
if (bRequestFromServer)
UnityGameSession.Instance.GetFactionInfo(1, new int[] { (int)uId });
return null;
}
return it;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f317e7b8bfb4c1e45b5cb1a2c4af9e82
@@ -17,6 +17,7 @@ using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
using BrewMonster.Network;
public abstract partial class CECPlayer : CECObject
{
@@ -60,6 +61,14 @@ public abstract partial class CECPlayer : CECObject
protected int NUM_WEAPON_TYPE = 15;
public static readonly int[] m_sciStateIDForStateAction = { 117 };
protected int m_iBoothState = 0; // Booth state. 0, none; 1, prepare; 2, open booth; 3, visite other's booth
public int m_idFRole = GNETRoles._R_UNMEMBER; // ID of player's faction role
protected int m_idCountry = 0; // ¹úÕ½ÕóÓª id
public static int MAX_REINCARNATION = 2;
protected List<int> m_aCurEffects = new List<int>(); // Current effects
byte m_ReincarnationCount = 0;
string m_strName; // Player name
public MOVECONST m_MoveConst; // Const used when moving control
public Move_Mode m_MoveMode;
public MOVECONST[] aMoveConsts = new MOVECONST[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER]
@@ -131,7 +140,12 @@ public abstract partial class CECPlayer : CECObject
new A3DVECTOR3(0.3f, 0.85f, 0.3f),
};
public static class Effect_type
{
public const int EFF_FACEPILL = 1;
}
private BaseVfxObject _levelUpVfx;
protected void Awake()
{
m_PlayerActions = _default_actions;
@@ -1216,6 +1230,42 @@ public abstract partial class CECPlayer : CECObject
BMLogger.LogError($"Failed to load level up effect prefab at: {path}");
}
}
// Get booth state
public int GetBoothState() { return m_iBoothState; }
// Check whether player has effect of specified type
public bool HasEffectType(int iEffType)
{
int i;
switch (iEffType)
{
case Effect_type.EFF_FACEPILL:
{
elementdataman pDataMan = EC_Game.GetElementDataMan();
// Get item data type
for (i = 0; i < m_aCurEffects.Count; i++)
{
DATA_TYPE DataType = pDataMan.get_data_type((uint)m_aCurEffects[i], ID_SPACE.ID_SPACE_ESSENCE);
if (DataType == DATA_TYPE.DT_FACEPILL_ESSENCE)
return true;
}
break;
}
}
return false;
}
public byte GetReincarnationCount() { return m_ReincarnationCount; }
public string GetName()
{
return m_strName;
}
}
public struct PlayActionEvent
@@ -13,7 +13,7 @@ public class CECNPCServer : CECNPC
public override void SetUpCECNPC(CECNPCMan pNPCMan)
{
base.SetUpCECNPC(pNPCMan);
m_iCID = (int)Class_ID.OCID_MONSTER;
m_iCID = (int)Class_ID.OCID_SERVER;
m_pDBEssence = null;
}
public override bool Init(int tid, in info_npc info, ReadOnlySpan<byte> packet, int infoOffset)
@@ -58,4 +58,17 @@ public class CECNPCServer : CECNPC
StartWork((int)WorkType.WT_NOTHING, (int)WorkID.WORK_STAND);
return true;
}
// Get way point ID bound with this NPC
public uint? GetWayPointID()
{
uint? dwID = 0;
if ((m_pDBEssence?.combined_services & 0x08) != 0)
dwID = m_pDBEssence?.id_to_discover;
return dwID;
}
// Get essence data in database
public NPC_ESSENCE? GetDBEssence() { return m_pDBEssence; }
}
@@ -1359,6 +1359,12 @@ namespace CSNetwork.S2CCommand
{
public int id;
};
public struct cmd_sevnpc_serve
{
public int service_type;
public uint len;
};
}
// Player and NPC state
@@ -503,5 +503,15 @@ namespace CSNetwork.C2SCommand
{
return SerializeCommand(iCmd);
}
public static Octets CreateNPCSevWaypointCmd(int serviceType, uint len)
{
var cmd = new cmd_sevnpc_serve
{
service_type = serviceType,
len = len
};
return SerializeCommand(CommandID.SEVNPC_SERVE, cmd);
}
}
}
@@ -111,5 +111,72 @@ namespace CSNetwork.Common
}
}
public enum SERVICE_TYPE : int
{
// ½»Ì¸·þÎñ
NPC_TALK = int.MinValue,
// ³öÊÛÉÌÆ·µÄ·þÎñ
NPC_SELL,
// ÊÕ¹ºÉÌÆ·µÄ·þÎñ
NPC_BUY,
// ÐÞÀíÉÌÆ·µÄ·þÎñ
NPC_REPAIR,
// ÏâǶ·þÎñ
NPC_INSTALL,
// ²ð³ý·þÎñ
NPC_UNINSTALL,
// ÈÎÎñÏà¹Ø·þÎñ,·Ö·¢ÈÎÎñºÍÍê³ÉÈÎÎñÒÔ¼°·¢·ÅÈÎÎñÎïÆ·
NPC_GIVE_TASK,
NPC_COMPLETE_TASK,
NPC_GIVE_TASK_MATTER,
// ½ÌÊÚÏà¹Ø·þÎñ
NPC_SKILL,
// ÖÎÁÆ·þÎñ
NPC_HEAL,
// ´«ËÍ·þÎñ
NPC_TRANSMIT,
// ÔËÊä·þÎñ
NPC_TRANSPORT,
// ´úÊÛ·þÎñ
NPC_PROXY,
// ´æ´¢ÎïÆ·¡¢½ðÇ®
NPC_STORAGE,
// Éú²ú·þÎñ
NPC_MAKE,
// ·Ö½â·þÎñ
NPC_DECOMPOSE,
// TALK·µ»Ø
TALK_RETURN,
// ½áÊø¶Ô»°
TALK_EXIT,
// ²Ö¿âÃÜÂë
NPC_STORAGE_PASSWORD,
// ¼ø¶¨·þÎñ
NPC_IDENTIFY,
// ·ÅÆúÈÎÎñ
TALK_GIVEUP_TASK,
// ³ÇÕ½ÅÚËþ½¨Ôì·þÎñ
NPC_WAR_TOWERBUILD,
// Ï´µã·þÎñ
NPC_RESETPROP,
// ³èÎï¸ÄÃû·þÎñ
NPC_PETNAME,
// ³èÎïѧϰ¼¼ÄÜ·þÎñ
NPC_PETLEARNSKILL,
// ³èÎïÒÅÍü¼¼ÄÜ·þÎñ
NPC_PETFORGETSKILL,
// ×°±¸°ó¶¨·þÎñ
NPC_EQUIPBIND,
// ×°±¸Ïú»Ù·þÎñ
NPC_EQUIPDESTROY,
// ×°±¸½â³ýÏú»Ù·þÎñ
NPC_EQUIPUNDESTROY,
// ÕʺŲֿâ
NPC_ACCOUNT_STORAGE,
// ïÔ¿Ì·þÎñ
NPC_ENGRAVE,
// ×°±¸ÖØÖý£¨Ëæ»úÊôÐÔ£©
NPC_RANDPROP,
};
}
}
@@ -518,6 +518,126 @@ namespace CSNetwork.GPDataType
public const int PRAY_DISTANCE_CHANGE = 396; // Ò÷³ª¾àÀë²ÎÊý
}
// NPC service type
public static class NPC_service_type
{
public const int GP_NPCSEV_SELL = 1, // 1, NPC sell to player
GP_NPCSEV_BUY = 2, // 2, NPC buy from player
GP_NPCSEV_REPAIR = 3, // 3
GP_NPCSEV_HEAL = 4, // 4
GP_NPCSEV_TRANSMIT = 5, // 5, Transmit to somewhere
GP_NPCSEV_TASK_RETURN = 6, // 6, Return task
GP_NPCSEV_TASK_ACCEPT = 7, // 7, Accept task
GP_NPCSEV_TASK_MATTER = 8, // 8, Task matter
GP_NPCSEV_LEARN = 9, // 9, Learn skill
GP_NPCSEV_EMBED = 10, // 10, Embed stone
GP_NPCSEV_CLEAR_TESSERA = 11, // 11, Clear tessear
GP_NPCSEV_MAKEITEM = 12, // 12
GP_NPCSEV_BREAKITEM = 13, // 13
GP_NPCSEV_TRASHPSW = 14, // 14, Change trash password
GP_NPCSEV_OPENTRASH = 15, // 15, Open trash
GP_NPCSEV_RESERVED = 16, // 16
GP_NPCSEV_IDENTIFY = 17, // 17, Identify item
GP_NPCSEV_FACTION = 18, // 18, About faction
GP_NPCSEV_BOOTHSELL = 19, // 19, Player booth sell
GP_NPCSEV_TRAVEL = 20, // 20, Travel
GP_NPCSEV_BOOTHBUY = 21, // 21, Player booth buy
GP_NPCSEV_WAYPOINT = 22, // 22
GP_NPCSEV_FORGETSKILL = 23, // 23
GP_NPCSEV_FACECHANGE = 24, // 24
GP_NPCSEV_MAIL = 25, // 25
GP_NPCSEV_VENDUE = 26, // 26
GP_NPCSEV_DBLEXPTIME = 27, // 27
GP_NPCSEV_HATCHPET = 28, // 28
GP_NPCSEV_RESTOREPET = 29, // 29
GP_NPCSEV_BATTLE = 30, // 30
GP_NPCSEV_BUILDTOWER = 31, // 31
GP_NPCSEV_LEAVEBATTLE = 32, // 32
GP_NPCSEV_RETURNSTATUSPT = 33, // 33
GP_NPCSEV_ACCOUNTPOINT = 34, // 34
GP_NPCSEV_REFINE = 35, // 35
GP_NPCSEV_PETNAME = 36, // 36, change pet name
GP_NPCSEV_PETSKILL_DEL = 37, // 37, Delete pet skill
GP_NPCSEV_PETSKILL_LEARN = 38, // 38, Learn pet skill
GP_NPCSEV_BIND_ITEM = 39, // 39, Bind item
GP_NPCSEV_DESTROY_BIND = 40, // 40, Destroy bind item
CP_NPCSEV_CANCEL_DESTROY = 41, // 41, Cancel destroy bind item
GP_NPCSEV_STOCK_TRANSACTION = 42,// 42
GP_NPCSEV_STOCK_OPERATION = 43, // 43
GP_NPCSEV_DYE = 44, // 44
GP_NPCSEV_REFINE_TRANS = 45, // 45
GP_NPCSEV_COMPOSE = 46, // 46
GP_NPCSEV_MAKE_SLOT = 47, // 47
GP_NPCSEV_GOBLIN_RETURNSTATUSPT = 48, // 48, Return goblin status point
GP_NPCSEV_GOBLIN_RETURNGENIUSPT = 49, // 49, Return goblin genius point
GP_NPCSEV_GOBLINSKILL_LEARN = 50, // 50, Learn goblin skill
GP_NPCSEV_GOBLINSKILL_DEL = 51, // 51, delete goblin skill
GP_NPCSEV_GOBLIN_REFINE = 52, // 52, Refine goblin
GP_NPCSEV_GOBLIN_REFINETRANSFER = 53, // 53, Transfer refine level
GP_NPCSEV_GOBLIN_DESTROY = 54, // 54, Destroy goblin
GP_NPCSEV_GOBLINEQUIP_DESTROY = 55, // 55, Destroy goblin's equipment
GP_NPCSEV_DYE_BY_SUIT = 56, // 56, Dye by suit
GP_NPCSEV_REPAIR_DESTROYING_ITEM = 57, // 57, Repair destroying item
GP_NPCSEV_LEVELUP_PRODUCE = 58, // 58, Level up produce
GP_NPCSEV_OPEN_ACCOUNT_BOX = 59, // 59, Open account box
GP_NPCSEV_WEBTRADE = 60, // 60, Web trade
GP_NPCSEV_GODEVILCONVERT = 61, // 61, Convert between god and evil
GP_NPCSEV_WEDDING_BOOK = 62, // 62
GP_NPCSEV_WEDDING_INVITE = 63, // 63
GP_NPCSEV_FACTION_FORTRESS_SERVICE_1 = 64, // 64
GP_NPCSEV_FACTION_FORTRESS_SERVICE_2 = 65, // 65
GP_NPCSEV_FACTION_FORTRESS_SERVICE_3 = 66, // 66
GP_NPCSEV_PET_DYE = 67, // 67
GP_NPCSEV_VIEW_TRASHBOX = 68, // 68, check the trash box without password
GP_NPCSEV_ENGRAVE = 69, // 69
GP_NCPSEV_DPS_DPH_RANK = 70, // 70
GP_NPCSEV_ADDONREGEN = 71, // 71
GP_NPCSEV_FORCE = 72, // 72
GP_NPCSEV_TRANSMIT_DIRECT = 73, // 73
GP_NPCSEV_PREVIEW_PRODUCE = 74, // 74
GP_NPCSEV_COUNTRY_JOINLEAVE = 75,// 75
GP_NPCSEV_COUNTRY_LEAVEWAR = 76, // 76
GP_NPCSEV_MARK = 77, // 77
GP_NPCSEV_CROSSSERVER_GETIN = 78,// 78
GP_NPCSEV_CROSSSERVER_GETOUT = 79,// 79
GP_NPCSEV_PLAYER_RENAME = 80, // 80
GP_NPCSEV_STONE_TRANSFER = 81, // 81
GP_NPCSEV_STONE_REPLACE = 82, // 82
GP_NPCSEV_KINGSEV = 83, // 83
GP_NPCSEV_SPLIT_FASHION = 84, // 84
GP_NPCSEV_OFFLINESHOP = 85, // 85
GP_NPCSEV_REINCARNATION = 86, // 86
GP_NPCSEV_GIFTCARD = 87, // 87
GP_NPCSEV_TRICKBATTLE = 88, // 88
GP_NPCSEV_CARDRESPAWN = 89, // 89
GP_NPCSEV_FLYSWORDIMPROVE = 90, // 90
GP_NPCSEV_OPEN_FACTION_PVP = 91, // 91
GP_NPCSEV_ADVANCED_PRODUCE = 92, // 92
GP_NPCSEV_GOLD_SHOP = 93, // 93
GP_NPCSEV_DIVIDEND_GOLD_SHOP = 94, // 94
GP_NPCSEV_PLAYER_CHANGE_GENDER = 95; // 95
}
// Constants used in moving control
public struct MOVECONST
{
@@ -1465,7 +1585,27 @@ namespace CSNetwork.GPDataType
{
public byte type;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_npc_greeting
{
public int idObject; // ID of NPC or player
};
public struct cmd_activate_waypoint
{
public ushort waypoint;
};
public static class GNETRoles
{
public const int _R_UNMEMBER = 0,
_R_SYSTEM = 1,
_R_MASTER = 2,
_R_VICEMASTER = 3,
_R_BODYGUARD = 4,
_R_POINEER = 5,
_R_MEMBER = 6;
}; //end of Roles
public struct cmd_server_time
{
public int time;
@@ -395,7 +395,7 @@ namespace CSNetwork
}
#endif
int iHostID = _selectedRole.roleid;
BMLogger.LogError($"### GameDataSend: CMDID {pCmdHeader}");
switch (pCmdHeader)
{
case CommandID.PLAYER_INFO_2:
@@ -654,6 +654,16 @@ namespace CSNetwork
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_INFO00, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
pCmdHeader);
break;
case CommandID.NPC_GREETING:
{
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_NPCGREETING, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
break;
}
case CommandID.ACTIVATE_WAYPOINT:
case CommandID.WAYPOINT_LIST:
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_WAYPOINT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
break;
case CommandID.SERVER_TIME:
{
cmd_server_time pcmd_server_time = GPDataTypeHelper.FromBytes<cmd_server_time>(pDataBuf);
@@ -1052,6 +1062,12 @@ namespace CSNetwork
}
}
public void c2s_SendCmdNPCSevWaypoint()
{
gamedatasend gamedatasend = new gamedatasend();
gamedatasend.Data = C2SCommandFactory.CreateNPCSevWaypointCmd(NPC_service_type.GP_NPCSEV_WAYPOINT, 0);
SendProtocol(gamedatasend);
}
public void GetRoleBaseInfo(int iNumRole, List<int> aRoleIDs)
{
int iNumLimit = 128;
@@ -1,4 +1,5 @@
using BrewMonster;
using BrewMonster.Common;
using CSNetwork;
using CSNetwork.C2SCommand;
using CSNetwork.Protocols;
@@ -29,6 +30,8 @@ namespace BrewMonster.Network
private string _username = "";
private string _password = "";
CECStubbornFactionInfoSender m_stubbornFactionInfoSender;
#if UNITY_EDITOR
public bool isDebg;
private bool lastDebug;
@@ -257,6 +260,15 @@ namespace BrewMonster.Network
{
Instance._gameSession.c2s_CmdSelectTarget(idTarget);
}
public static void c2s_CmdNPCSevWaypoint()
{
Instance._gameSession.c2s_SendCmdNPCSevWaypoint();
}
public void GetFactionInfo(int iNumFaction, int[] aFactinoIDs)
{
m_stubbornFactionInfoSender.Add(iNumFaction, aFactinoIDs);
}
public static void c2s_CmdSendEnterPKPrecinct()
{
Instance._gameSession.c2s_CmdSendEnterPKPrecinctint();
@@ -1,11 +1,12 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Player;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using BrewMonster.Scripts.Managers;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
using UnityEngine;
namespace BrewMonster.Scripts.Task
@@ -1150,7 +1151,18 @@ namespace BrewMonster.Scripts.Task
// use this to avoid task hack by changing the system time
return (uint)EC_Game.GetServerAbsTime();
}
}
private const string SYMBOL_HOSTNAME = "$name";
public string FormatTaskTalk(string taskTalk)
{
string ret = taskTalk ?? string.Empty;
if (taskTalk == null) return ret;
string strName = m_pHost.GetName(); // assumes string; use ToString() if needed
return ret.Replace(SYMBOL_HOSTNAME, $"&{strName}&");
}
}
}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 072fe2eeccf3b7c4a98f9474ad26f60c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,115 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace BrewMonster.UI
{
public class AUIListBox : MonoBehaviour
{
[SerializeField] private RectTransform content;
[SerializeField] private ScrollView scrollView;
[SerializeField] private ItemUIListBox prefabItemUIListBox;
[SerializeField] private float heightItem = 100f;
[SerializeField] private float paddingY = 10f;
List<ItemUIListBox> m_Item = new List<ItemUIListBox>();
int m_nCurSel = 0;
const uint AUILISTBOX_ERROR = 0xFFFFFFFF; // same as -1 for uint
public void ResetContent()
{
foreach(var item in m_Item)
{
Destroy(item.gameObject);
}
m_Item.Clear();
content.anchoredPosition = Vector2.zero;
content.sizeDelta = Vector2.zero;
}
public void AddString(string pszString)
{
ItemUIListBox item = Instantiate(prefabItemUIListBox, content);
item.SetText(pszString);
item.gameObject.SetActive(true);
m_Item.Add(item);
Vector2 size = content.sizeDelta;
size.y = heightItem * m_Item.Count + m_Item.Count * paddingY;
content.sizeDelta = size;
}
public int SetItemData(int nIndex, uint dwItemData, int nSubIndex = 0, string strName = "")
{
if (nIndex < 0 || nIndex >= (m_Item.Count))
return -1;
if (nSubIndex < 0 || nSubIndex >= 20) // #define AUILISTBOX_DATA_NUM AUILISTBOX_MAX_COLUMN 20
return -1;
m_Item[nIndex].strDataName[nSubIndex] = strName;
m_Item[nIndex].dwData[nSubIndex] = dwItemData;
return nIndex;
}
public int SetItemDataPtr(int nIndex, object pData, int nSubIndex = 0, string strName = "")
{
if (nIndex < 0 || nIndex >= (m_Item.Count))
return -1;
if (nSubIndex < 0 || nSubIndex >= 20) // #define AUILISTBOX_DATA_NUM AUILISTBOX_MAX_COLUMN 20
return -1;
m_Item[nIndex].strDataPtrName[nSubIndex] = strName;
m_Item[nIndex].pvData[nSubIndex] = pData;
return nIndex;
}
public int GetCount()
{
return m_Item.Count;
}
public object GetItemDataPtr(int nIndex, int nSubIndex, string strName)
{
if (nIndex < 0 || nIndex >= m_Item.Count)
return null;
if (nSubIndex < 0 || nSubIndex >= 20) // #define AUILISTBOX_DATA_NUM AUILISTBOX_MAX_COLUMN 20
return null;
//if (0 != m_Item[nIndex].pvData[nSubIndex] && strName != m_Item[nIndex].strDataPtrName[nSubIndex])
// AUI_ReportError(__LINE__, 1, "AUIListBox::GetItemDataPtr(), data name not match");
return m_Item[nIndex].pvData[nSubIndex];
}
public uint GetItemData(int nIndex, int nSubIndex, string strName)
{
if (nIndex < 0 || nIndex >= m_Item.Count)
return AUILISTBOX_ERROR;
if (nSubIndex < 0 || nSubIndex >= 20)
return AUILISTBOX_ERROR;
//if (0 != m_Item[nIndex].dwData[nSubIndex] && strName != m_Item[nIndex].strDataName[nSubIndex])
// AUI_ReportError(__LINE__, 1, "AUIListBox::GetItemData(), data name not match");
return m_Item[nIndex].dwData[nSubIndex];
}
public void SetCurSel(int nIndex)
{
//if (nIndex != m_nCurSel)
// UpdateRenderTarget();
m_nCurSel = nIndex;
}
public int GetCurSel()
{
return m_nCurSel;
}
public string GetText(int nIndex)
{
if (nIndex < 0 || nIndex >= (m_Item.Count))
return "";
else
return m_Item[nIndex].strText;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e94504b96a4532444acf89e50910d8e1
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 1a69ae0024fdd744f8481223fa2dc85c
@@ -0,0 +1,23 @@
using TMPro;
using UnityEngine;
namespace BrewMonster
{
public class ItemUIListBox : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI txtItem;
public string[] strDataName = new string[20];
public string[] strDataPtrName = new string[20];
public uint[] dwData = new uint[20];
public object[] pvData = new object[20];
public string strText;
public void SetText(string txt)
{
strText = txt;
txtItem.text = txt;
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ce1dfcc5e6936e547a2a2b7d112ebea1
@@ -0,0 +1,306 @@
using BrewMonster.Common;
using BrewMonster.Managers;
using BrewMonster.Network;
using ModelRenderer.Scripts.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
namespace BrewMonster.UI
{
public class CECGameUIMan
{
DlgNPC m_pDlgNPC;
public NPC_ESSENCE? m_pCurNPCEssence;
private DialogScriptTableObject m_dialogResouce;
private Canvas m_canvas;
Dictionary<int, string> m_StringTable = new Dictionary<int, string>();
Dictionary<int, string> m_auiDialog_stringTable = new Dictionary<int, string>();
public static bool TALKPROC_IS_TERMINAL(uint id)
{
return ((id & 0x80000000u) != 0) && ((id & 0x40000000u) != 0);
}
public static bool TALKPROC_IS_FUNCTION(uint id)
{
return ((id) & 0x80000000) != 0;
}
public static uint TALKPROC_GET_FUNCTION_ID(uint id)
{
return ((id) & 0x7FFFFFFF);
}
public string GetStringFromTable(int idString)
{
if (m_StringTable.TryGetValue(idString, out var str))
return str;
return null;
}
public string GetStringFromAuiDialogTable(int idString)
{
if (m_auiDialog_stringTable.TryGetValue(idString, out var str))
return str;
return null;
}
public void SetDependency(DialogScriptTableObject resouce, Canvas canvas)
{
m_dialogResouce = resouce;
m_canvas = canvas;
}
public void Init()
{
ImportStringTable("ingame.stf");
ImportAuiDialogStringTable("msgbox.stf");
}
public string Translate(ushort[] str)
{
if (str == null || str.Length == 0)
return null;
string m_AWString = "";
string input = new string(str.Where(c => c != 0).Select(c => (char)c).ToArray());
m_AWString = input;
var result = new System.Text.StringBuilder();
int i = 0;
while (i < input.Length)
{
char c = input[i];
if (c != '\\')
{
result.Append(c);
i++;
continue;
}
i++;
if (i >= input.Length)
break;
char next = input[i];
switch (next)
{
case '\n':
i++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
{
int value = 0;
int count = 3;
while (i < input.Length && input[i] >= '0' && input[i] <= '7' && count > 0)
{
count--;
value = value * 8 + (input[i] - '0');
i++;
}
if (value <= 255)
result.Append((char)(value & 0xFF));
break;
}
case '"':
case '\'':
case '\\':
result.Append(next);
i++;
break;
case 'n':
result.Append('\n');
i++;
break;
case 'r':
result.Append('\r');
i++;
break;
case 't':
result.Append('\t');
i++;
break;
case 'v':
result.Append('\v');
i++;
break;
default:
i++;
break;
}
}
m_AWString = result.ToString();
return m_AWString;
}
private bool ImportStringTable(string pszFilename)
{
//AWScriptFile s = new AWScriptFile();
string szFilename = Path.Combine(Application.streamingAssetsPath, pszFilename);
foreach (var line in File.ReadLines(szFilename))
{
if (string.IsNullOrWhiteSpace(line))
continue;
var parts = line.Split('\t', StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2)
continue;
if (int.TryParse(parts[0], out int key))
{
string value = parts[1].Trim();
if (value.StartsWith("\"") && value.EndsWith("\""))
value = value.Substring(1, value.Length - 2);
m_StringTable[key] = value;
}
}
return true;
//bool bval = s.Open(szFilename);
//if (!bval) return false;
//while (!s.IsEnd())
//{
// bval = s.GetNextToken(true);
// if (!bval) break; // End of file.
// int idString = int.Parse(ByteToStringUtils.UshortArrayToUnicodeString(s.m_szToken));
// bval = s.GetNextToken(true);
// if (!bval) return false;
// string str = (Translate(s.m_szToken));
// m_StringTable[idString] = str;
//}
//s.Close();
//if (a_stricmp(GetStringFromTable(1), _AL("")) == 0) //1 ĬÈÏ×ÖÌå
// m_StringTable[1] = _AL("·½ÕýϸºÚÒ»¼òÌå");
//m_strDefaultFontName = GetStringFromTable(1);
//if (a_stricmp(GetStringFromTable(2), _AL("")) == 0) //2 ĬÈÏ×ÖÌå´óС
// m_StringTable[2] = _AL("10");
//m_nDefaultFontSize = a_atoi(GetStringFromTable(2));
//if (a_stricmp(GetStringFromTable(3), _AL("")) == 0) //3 ·ûºÅ '\t' Ï൱ÓÚ¶àÉÙ¸ö 'W'µÄ¿í¶È
// m_StringTable[3] = _AL("30");
//_tab_char = a_atoi(GetStringFromTable(3));
//if (a_stricmp(GetStringFromTable(4), _AL("")) == 0) //4 m_FontImagePicture ×ÖÌå´óС
// m_StringTable[4] = m_StringTable[2];
//if (a_stricmp(GetStringFromTable(5), _AL("")) == 0) //5 MessageBox ×ÖÌå´óС
// m_StringTable[5] = m_StringTable[2];
//if (a_stricmp(GetStringFromTable(6), _AL("")) == 0) //6 MessageBox shadow
// m_StringTable[6] = _AL("0");
//if (a_stricmp(GetStringFromTable(7), _AL("")) == 0) //7 MessageBox outline
// m_StringTable[7] = _AL("0");
//if (a_stricmp(GetStringFromTable(8), _AL("")) == 0) //8 MessageBox outline color
// m_StringTable[8] = _AL("0");
//m_FontHint.szFontName = GetStringFromTable(1);
//m_FontHint.nFontSize = a_atoi(GetStringFromTable(2));
//m_FontImagePicture.szFontName = GetStringFromTable(1);
//m_FontImagePicture.nFontSize = a_atoi(GetStringFromTable(4));
//m_FontImagePicture.nOutline = 1;
//m_FontMessageBox.szFontName = GetStringFromTable(1);
//m_FontMessageBox.nFontSize = a_atoi(GetStringFromTable(5));
//m_FontMessageBox.nShadow = a_atoi(GetStringFromTable(6));
//m_FontMessageBox.nOutline = a_atoi(GetStringFromTable(7));
//return true;
}
public bool ImportAuiDialogStringTable(string pszFilename)
{
//bool bval;
//int idString;
//string str;
//AWScriptFile s = new AWScriptFile();
string szFilename = Path.Combine(Application.streamingAssetsPath, pszFilename);
//bval = s.Open(szFilename);
//if (!bval) return true; // Ignore error.
//while (!s.IsEnd())
//{
// bval = s.GetNextToken(true);
// if (!bval) break; // End of file.
// idString = int.Parse(ByteToStringUtils.UshortArrayToUnicodeString(s.m_szToken));
// bval = s.GetNextToken(true);
// if (!bval) return false;
// str = ByteToStringUtils.UshortArrayToUnicodeString(s.m_szToken);
// if(m_auiDialog_stringTable.TryGetValue(idString, out string value))
// {
// m_auiDialog_stringTable[idString] = str;
// }
// else
// {
// m_auiDialog_stringTable.Add(idString, str);
// }
//}
//s.Close();
foreach (var line in File.ReadLines(szFilename))
{
if (string.IsNullOrWhiteSpace(line))
continue;
var parts = line.Split('\t', StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2)
continue;
if (int.TryParse(parts[0], out int key))
{
string value = parts[1].Trim();
if (value.StartsWith("\"") && value.EndsWith("\""))
value = value.Substring(1, value.Length - 2);
m_auiDialog_stringTable[key] = value;
}
}
return true;
}
public void PopupNPCDialog(NPC_ESSENCE pEssence)
{
if(m_pDlgNPC == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DialogNPC");
m_pDlgNPC = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<DlgNPC>();
}
m_pDlgNPC.PopupDialog(pEssence);
}
public void PopupNPCDialog(talk_proc pTalk)
{
if(m_pDlgNPC == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DialogNPC");
m_pDlgNPC = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<DlgNPC>();
}
m_pDlgNPC.PopupNPCDialog(pTalk);
}
public void EndNPCService()
{
m_pCurNPCEssence = null;
//EC_Game.GetGameRun().GetHostPlayer().EndNPCService();
EC_ManMessageMono.Instance.EC_ManPlayer.GetHostPlayer().EndNPCService();
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 450eac8e68388db418e23a6896c839c1
@@ -16,11 +16,13 @@ namespace BrewMonster
}
public void SetHealthImage(float health)
{
_healthImage.fillAmount = health;
if(_healthImage != null)
_healthImage.fillAmount = health;
}
public void SetHealthText(string healthText)
{
_healthText.text = healthText;
if(_healthText != null)
_healthText.text = healthText;
}
}
}
+26 -2
View File
@@ -11,6 +11,7 @@ GameObject:
- component: {fileID: 5975684648087068252}
- component: {fileID: 1882963580244400679}
- component: {fileID: -5899287755522118344}
- component: {fileID: 1637622316711963511}
m_Layer: 0
m_Name: NPCServer
m_TagString: Untagged
@@ -66,6 +67,29 @@ MonoBehaviour:
m_npcUI: {fileID: 0}
m_fMoveSpeed: 0
_characterController: {fileID: 0}
--- !u!136 &1637622316711963511
CapsuleCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2426933851766496167}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_Radius: 0.5
m_Height: 2
m_Direction: 1
m_Center: {x: 0, y: 1, z: 0}
--- !u!1 &3297168817873124018
GameObject:
m_ObjectHideFlags: 0
@@ -93,7 +117,7 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3297168817873124018}
m_LocalRotation: {x: -0.002627404, y: 0.9181325, z: 0.3962182, w: 0.0060883234}
m_LocalRotation: {x: 8.102368e-16, y: 1, z: 0.000000046460137, w: -0.000000017439397}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@@ -255,7 +279,7 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6510845919681767284}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalRotation: {x: -0.015657494, y: 0.89469767, z: -0.03145985, w: -0.44528785}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7653e7e64393ec24c903f0606499b8c4
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+17 -3
View File
@@ -1,11 +1,12 @@
using CSNetwork.GPDataType;
using BrewMonster;
using BrewMonster.Network;
using BrewMonster.Scripts.World;
using BrewMonster.UI;
using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using System.Data;
using BrewMonster.Network;
using CSNetwork;
using Unity.Cinemachine;
using UnityEngine;
@@ -25,6 +26,8 @@ public partial class CECGameRun : MonoBehaviour, IMsgHandler
public float rotateSpeedX = 300f; // tốc độ xoay ngang
public float rotateSpeedY = 2f; // tốc độ xoay dọc
private CECWorld m_pWorld;
protected CECUIManager m_pUIManager; // UI manager
public CECWorld GetWorld() { return m_pWorld; }
public bool StartGame(int idInst, Vector3 vHostPos)
{
@@ -160,4 +163,15 @@ public partial class CECGameRun : MonoBehaviour, IMsgHandler
// freeLookCam.m_YAxis.m_MaxSpeed = 0;
// }
//}
// Get UI manager
public CECUIManager GetUIManager()
{
if(m_pUIManager == null)
{
m_pUIManager = CECUIManager.Instance;
}
return m_pUIManager;
}
}
+278 -40
View File
@@ -1,6 +1,5 @@
using BrewMonster;
using BrewMonster.Assets.PerfectWorld.Scripts.Players;
using BrewMonster.Assets.PerfectWorld.Scripts.Skills;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts;
@@ -8,34 +7,21 @@ using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.Skills;
using CSNetwork;
using CSNetwork.Common;
using CSNetwork.GPDataType;
using CSNetwork.Protocols;
using CSNetwork.Protocols.RPCData;
using NUnit.Framework;
using PerfectWorld.Scripts.Managers;
using PerfectWorld.Scripts.Managers.BrewMonster.Managers;
using ModelRenderer.Scripts.GameData;
using PerfectWorld.Scripts.Player;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using BrewMonster.PerfectWorld.Scripts.Vfx;
using TMPro;
using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using static Unity.Burst.Intrinsics.X86.Avx;
using static UnityEditor.PlayerSettings;
using Scene = UnityEngine.SceneManagement.Scene;
using Trace_reason = CECHPWorkTrace.Trace_reason;
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
using BrewMonster.Scripts;
using BrewMonster.Scripts.World;
using PerfectWorld.Scripts.Managers;
public partial class CECHostPlayer : CECPlayer
{
@@ -86,6 +72,10 @@ public partial class CECHostPlayer : CECPlayer
public GNDINFO m_GndInfo;
private int m_idUCSelTarget; // Uncertificately selected object's ID
public float m_fVertSpeed = 0f;
int m_idSevNPC = 0; // Current service NPC
bool m_bTalkWithNPC = false; // true, is talking with NPC
List<ushort> m_aWayPoints = new List<ushort>(); // Active way points
bool m_bIsInKingService = false; // ÊÇ·ñÕýÔÚ½øÐйúÍõ·þÎñ²Ù×÷
CECActionSwitcherBase m_pActionSwitcher;
// ====== Ground cast config ======
@@ -110,6 +100,8 @@ public partial class CECHostPlayer : CECPlayer
float ccRadius, ccSkin;
RaycastHit lastGroundHit;
Camera mainCam;
Ray ray;
RaycastHit hit;
private BaseVfxObject m_pSelectedGFX;
private BaseVfxObject m_pHoverGFX;
@@ -230,14 +222,11 @@ public partial class CECHostPlayer : CECPlayer
int iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_NONE;
bool bWikiMonster = false;
Ray ray = mainCam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
ray = mainCam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
CECObject clickedObject = hit.collider.gameObject.GetComponent<CECObject>();
if (clickedObject != null)
if (hit.collider.gameObject.TryGetComponent<CECObject>(out CECObject clickedObject))
{
int idObject = CECObject.GetObjectID(clickedObject);
if (idObject != 0)
@@ -262,6 +251,36 @@ public partial class CECHostPlayer : CECPlayer
}
}
}
else
{
// pCDS.m_RayTraceRt.iEntity == ECENT_PLAYER
CECPlayer pPlayer = EC_ManMessageMono.Instance.EC_ManPlayer.GetPlayer(idObject);
// 1. Msg.dwParam4 is double click flag.
// 2. Buddy player counld't be traced
if (!pPlayer.IsDead() /*&& pPlayer.GetCharacterID() != m_iBuddyId*/ &&
(m_idSelTarget == idObject /*|| (Msg.dwParam4 && m_idUCSelTarget == idObject)*/))
{
idTraceTarget = idObject;
//bForceAttack = glb_GetForceAttackFlag(&Msg.dwParam3);
if (AttackableJudge(idObject, bForceAttack) == 1)
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_ATTACK;
else if (pPlayer.GetBoothState() != 0)
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_TALK;
}
else
{
idSelTarget = idObject;
}
}
// cancel this action if not selectable
if (!CanSelectTarget(idTraceTarget))
{
idTraceTarget = 0;
//return;
}
}
}
}
@@ -281,6 +300,31 @@ public partial class CECHostPlayer : CECPlayer
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
else
{
if (!CanDo(ActionCanDo.CANDO_MOVETO))
return;
CECHPWork pWork;
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_PICKUP)
{
//PickupObject(idTraceTarget, false);
}
else if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_GATHER)
{
//PickupObject(idTraceTarget, true);
}
else if ((pWork = m_pWorkMan.GetWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT)) != null)
{
CECHPWorkTrace pWorkTrace = (pWork) as CECHPWorkTrace;
pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
}
else if (m_pWorkMan.CanStartWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT) && !bWikiMonster)
{
CECHPWorkTrace pWorkTrace = (CECHPWorkTrace)m_pWorkMan.CreateWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT);
pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
m_pWorkMan.StartWork_p1(pWorkTrace);
}
}
}
}
m_pWorkMan?.Tick(Time.deltaTime);
@@ -428,6 +472,8 @@ public partial class CECHostPlayer : CECPlayer
case int value when value == EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break;
@@ -548,24 +594,24 @@ public partial class CECHostPlayer : CECPlayer
if (pCmd.iHP < m_BasicProps.iCurHP && m_BasicProps.iCurHP >= iLimit && pCmd.iHP < iLimit)
{
/*if (CECUIHelper::GetGameUIMan()->IsShowLowHP()) {
/*if (CECUIHelper::GetGameUIMan().IsShowLowHP()) {
// ѪÁ¿µÍÓÚÁÙ½çÖµÔò²¥·ÅÌØÐ§
const int GfxLastTime = 10000; // ³ÖÐøÊ±¼ä10Ãë
CECUIHelper::GetGameUIMan()->GetScreenEffectMan()->StartEffect(CECScreenEffect::EFFECT_REDSPARK, GfxLastTime);
CECUIHelper::GetGameUIMan().GetScreenEffectMan().StartEffect(CECScreenEffect::EFFECT_REDSPARK, GfxLastTime);
}*/
}
/*if (pCmd.iHP >= iLimit || pCmd.iHP <= 0) {
// ѪÁ¿¸ßÓÚÁÙ½çÖµ»òËÀÍö£¬ÔòÍ£Ö¹²¥·ÅÌØÐ§
CECUIHelper::GetGameUIMan()->GetScreenEffectMan()->FinishEffect(CECScreenEffect::EFFECT_REDSPARK);
CECUIHelper::GetGameUIMan().GetScreenEffectMan().FinishEffect(CECScreenEffect::EFFECT_REDSPARK);
}*/
/*iLimit = (int)(pCmd.iMaxMP * 0.2f);
if (pCmd.iMP < m_BasicProps.iCurMP && m_BasicProps.iCurMP >= iLimit && pCmd.iMP < iLimit)
BubbleText(BUBBLE_MPWARN, 0);*/
/*if (m_ExtProps.max_ap != pCmd->iMaxAP)
g_pGame->GetGameRun()->AddFixedMessage(FIXMSG_ADDMAXAP, pCmd->iMaxAP - m_ExtProps.max_ap);*/
/*if (m_ExtProps.max_ap != pCmd.iMaxAP)
g_pGame.GetGameRun().AddFixedMessage(FIXMSG_ADDMAXAP, pCmd.iMaxAP - m_ExtProps.max_ap);*/
}
m_BasicProps.iLevel = pCmd.sLevel;
@@ -586,10 +632,10 @@ public partial class CECHostPlayer : CECPlayer
// UpdateGodEvilSprite();
/*CECGameUIMan* pGameUI = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
CDlgAutoHelp *pDlgHelp = dynamic_cast<CDlgAutoHelp *>(pGameUI->GetDialog("Win_WikiPop"));*/
/*CECGameUIMan* pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
CDlgAutoHelp *pDlgHelp = dynamic_cast<CDlgAutoHelp *>(pGameUI.GetDialog("Win_WikiPop"));*/
/*if(pDlgHelp && m_bFight)
pDlgHelp->SetAutoHelpState(false);*/
pDlgHelp.SetAutoHelpState(false);*/
}
void SetLevel2(int level2, bool bFirstTime)
{
@@ -607,9 +653,9 @@ public partial class CECHostPlayer : CECPlayer
if (pCmd.iDamage != 0 && (pCmd.cEquipment & 0x7f) != 0x7f)
{
/* char cEquip = (char)(pCmd.cEquipment & 0x7f);
CECIvtrEquip pEquip = (CECIvtrEquip)m_pEquipPack->GetItem(cEquip);
CECIvtrEquip pEquip = (CECIvtrEquip)m_pEquipPack.GetItem(cEquip);
if (pEquip)
pEquip->AddCurEndurance(ARMOR_RUIN_SPEED);*/
pEquip.AddCurEndurance(ARMOR_RUIN_SPEED);*/
}
// The host player is attacked, we should make an effect here
@@ -674,7 +720,7 @@ public partial class CECHostPlayer : CECPlayer
{
cmd_be_hurt pCmd = (cmd_be_hurt)Msg.dwParam1;
if (pCmd.damage != 0)
Damaged(pCmd->damage);
Damaged(pCmd.damage);
}
else if (cmd == CommandID.HURT_RESULT)
{
@@ -686,7 +732,7 @@ public partial class CECHostPlayer : CECPlayer
{
CECElsePlayer pTarget = m_pPlayerMan.GetElsePlayer(pCmd.target_id);
if (pTarget)
pTarget->Damaged(pCmd->damage);
pTarget.Damaged(pCmd.damage);
}
else if (UnityGameSession.Instance.GameSession.ISNPCID(pCmd.target_id))
{
@@ -1368,8 +1414,8 @@ public partial class CECHostPlayer : CECPlayer
CECNPC pNPC = (CECNPC)pObject;
// If this npc is host's pet, cannot be attacked
//if (pNPC.GetMasterID() == m_PlayerInfo.cid)
// return 0;
if (pNPC.GetMasterID() == m_PlayerInfo.cid)
return 0;
// If it's a pet and can not be attacked, pet can be attacked only if it's a fighting pet
//if (pNPC.IsPetNPC() && !((CECPet)pNPC).CanBeAttacked())
@@ -1597,7 +1643,7 @@ public partial class CECHostPlayer : CECPlayer
return (m_dwLIES & mask) != 0;
}
bool IsInFortress()
public bool IsInFortress()
{
return m_fortressEnter.role_in_war != 0;
}
@@ -1608,7 +1654,7 @@ public partial class CECHostPlayer : CECPlayer
}
// Get faction ID
int GetFactionID()
public int GetFactionID()
{
return m_idFaction;
}
@@ -2119,7 +2165,7 @@ public partial class CECHostPlayer : CECPlayer
case ActionCanDo.CANDO_ASSISTSEL:
if (IsDead() || !GPDataTypeHelper.ISPLAYERID(m_idSelTarget) || m_idSelTarget == m_PlayerInfo.cid /*||
!m_pTeam || !m_pTeam->GetMemberByID(m_idSelTarget) || m_iBuddyId || IsPassiveMove() ||
!m_pTeam || !m_pTeam.GetMemberByID(m_idSelTarget) || m_iBuddyId || IsPassiveMove() ||
m_playerLimits.test(PLAYER_LIMIT_NOCHANGESELECT)*/)
bRet = false;
@@ -2249,7 +2295,7 @@ public partial class CECHostPlayer : CECPlayer
// if (IsDead() || IsAboutToDie() || IsTrading() || IsUsingTrashBox() || IsTalkingWithNPC() ||
// IsJumping() || IsFlashMoving() || IsFalling() || IsChangingFace() || GetBoothState() != 0 || IsTakingOff() ||
// m_pWorkMan->HasWorkRunningOnPriority(CECHPWorkMan::PRIORITY_2) ||
// m_pWorkMan.HasWorkRunningOnPriority(CECHPWorkMan::PRIORITY_2) ||
// m_iBuddyId || IsOperatingPet() || IsRebuildingPet() || IsUsingItem() || IsPassiveMove())
// bRet = false;
@@ -2261,7 +2307,7 @@ public partial class CECHostPlayer : CECPlayer
// IsMeleeing() || IsTrading() || IsUsingTrashBox() || IsTalkingWithNPC() ||
// IsChangingFace() || IsReviving() || IsSpellingMagic() || IsPicking() ||
// IsGathering() || IsRooting() || GetBoothState() != 0 ||
// !m_pWorkMan->IsStanding() || m_iBuddyId ||
// !m_pWorkMan.IsStanding() || m_iBuddyId ||
// IsOperatingPet() || IsRebuildingPet() || IsUsingItem() || GetShapeType() == PLAYERMODEL_DUMMYTYPE2 || IsPassiveMove() ||
// m_playerLimits.test(PLAYER_LIMIT_NOBIND))
// bRet = false;
@@ -2345,6 +2391,198 @@ public partial class CECHostPlayer : CECPlayer
// }
// return fSpeedSev;
//}
private void OnMsgHstNPCGreeting(ECMSG Msg)
{
cmd_npc_greeting pCmd = GPDataTypeHelper.FromBytes<cmd_npc_greeting>((byte[])Msg.dwParam1);
if (GPDataTypeHelper.ISNPCID(pCmd.idObject))
{
// רÃÅ´¦Àíѧϰ¼¼ÄܵÄÒþ²ØNPC
//if (CECHostSkillModel::Instance().IsSkillLearnNPC(pCmd.idObject))
//{
// CECGameUIMan* pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
// //m_idSevNPC = pCmd.idObject;
// //m_bTalkWithNPC = true;
// //pGameUI.GetDialog("Win_SkillAction").Show(true);
// //CDlgSkillAction* dlg = dynamic_cast<CDlgSkillAction*>(pGameUI.GetDialog("Win_SkillAction"));
// //dlg.ForceShowDialog();
// CDlgSkillAction* dlg = dynamic_cast<CDlgSkillAction*>(pGameUI.GetDialog("Win_SkillAction"));
// dlg.SetReceivedNPCGreeting(true);
// return;
//}
CECNPC pNPC = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(pCmd.idObject);
if (!pNPC || !pNPC.IsServerNPC())
{
return;
}
// Check distance again
if (!CanTouchTarget(pNPC.GetPos(), pNPC.GetTouchRadius(), 3))
return;
m_idSevNPC = pCmd.idObject;
m_bTalkWithNPC = true;
// Check way point service on NPC
var dwID = (pNPC as CECNPCServer).GetWayPointID();
if (dwID != null && !HasWayPoint(dwID))
UnityGameSession.c2s_CmdNPCSevWaypoint();
//g_pGame.GetGameSession().c2s_CmdNPCSevWaypoint();
var pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
NPC_ESSENCE? result = (pNPC as CECNPCServer).GetDBEssence();
if (result != null)
{
pGameUI.PopupNPCDialog(result.Value);
}
}
//else if (GPDataTypeHelper.ISPLAYERID(pCmd.idObject))
//{
// EC_ElsePlayer pPlayer = m_pPlayerMan.GetElsePlayer(pCmd.idObject);
// // Check distance again
// if (!pPlayer || !CanTouchTarget(pPlayer.GetPos(), 0.0f, 3))
// return;
// m_idSevNPC = pCmd.idObject;
// m_bTalkWithNPC = true;
// m_iBoothState = 3;
// g_pGame.GetGameSession().c2s_CmdNPCSevGetContent(GP_NPCSEV_BOOTHSELL);
// m_pBuyPack.RemoveAllItems();
// m_pSellPack.RemoveAllItems();
// m_pEPBoothBPack.RemoveAllItems();
// m_pEPBoothSPack.RemoveAllItems();
// CECGameUIMan* pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
// pGameUI.PopupBoothDialog(true, false, pCmd.idObject);
//}
else
{
return;
}
}
// Does host player have specified way point ?
bool HasWayPoint(uint? wID)
{
if (wID == null)
{
return false;
}
for (int i = 0; i < m_aWayPoints.Count; i++)
{
if (m_aWayPoints[i] == wID)
return true;
}
return false;
}
void OnMsgHstWayPoint(ECMSG Msg)
{
//CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
//if (Convert.ToInt32(Msg.dwParam2) == CommandID.ACTIVATE_WAYPOINT)
//{
// cmd_activate_waypoint pCmd = GPDataTypeHelper.FromBytes<cmd_activate_waypoint>((byte[])Msg.dwParam1);
// m_aWayPoints.Add(pCmd.waypoint);
// // add to waypoints array
// pGameUI.GetMapDlgsMgr().UpdateWayPoints(&pCmd.waypoint, 1, false);
// // Print a notify message
// const CECMapDlgsMgr::PointMap& aWayPoints = pGameUI.GetMapDlgsMgr().GetTransPoint();
// CECMapDlgsMgr::PointMap::const_iterator itr = aWayPoints.find(pCmd.waypoint);
// if(itr != aWayPoints.end())
// {
// g_pGame.GetGameRun().AddFixedMessage(FIXMSG_NEWWAYPOINT, (itr.second).strName);
// bool bCanPopUITips = true;
// int count = CECUIConfig::Instance().GetGameUI().GetTaskIDDisableWayPointsUITipsCount();
// // ¼ì²éÉíÉÏÊÇ·ñÓнûÖ¹µ¯³ötipsµÄÈÎÎñ
// for (int i=0;i<count;i++){
// int taskID = CECUIConfig::Instance().GetGameUI().GetTaskIDDisableWayPointsUITips(i);
// if(GetTaskInterface() && GetTaskInterface().HasTask(taskID)){
// bCanPopUITips = false;
// break;
// }
// }
// // µ¯³ötips
// CECScriptMan* pScriptMan = g_pGame.GetGameRun().GetUIManager().GetScriptMan();
// if (pScriptMan && bCanPopUITips)
// {
// pScriptMan.GetContext().GetUI().SetTipDialogTitleAndContent(AC2AS_CP(CP_UTF8, pGameUI.GetStringFromTable(11350)), AC2AS_CP(CP_UTF8, (itr.second).strName));
// pScriptMan.GetContext().GetUI().ShowTip(500, 500, 5000, 300);
// }
// }
// }
// else if (Msg.dwParam2 == WAYPOINT_LIST)
// {
// cmd_waypoint_list* pCmd = (cmd_waypoint_list*)Msg.dwParam1;
// m_aWayPoints.SetSize(pCmd.count, 16);
// for (size_t i = 0; i < pCmd.count; i++)
// m_aWayPoints[i] = pCmd.list[i];
// // update the whole list
// pGameUI.GetMapDlgsMgr().UpdateWayPoints(pCmd.list, pCmd.count, true);
// }
}
// Get faction role
public int GetFRoleID() { return m_idFRole; }
public FACTION_FORTRESS_CONFIG GetFactionFortressConfig()
{
elementdataman pDataMan = EC_Game.GetElementDataMan();
DATA_TYPE dt = DATA_TYPE.DT_INVALID;
var ob = pDataMan.get_data_ptr(854, ID_SPACE.ID_SPACE_CONFIG, ref dt);
FACTION_FORTRESS_CONFIG pConfig = new FACTION_FORTRESS_CONFIG();
if (ob == null || dt != DATA_TYPE.DT_FACTION_FORTRESS_CONFIG)
{
// ûÓлùµØÅäÖñí
pConfig.require_level = int.MinValue;
}
else
{
pConfig = (FACTION_FORTRESS_CONFIG)ob;
}
return pConfig;
}
public bool IsInFortressWar()
{
bool bInWar = false;
if (IsInFortress())
{
int serverTime = EC_Game.GetServerGMTTime();
if (m_fortressEnter.end_time > serverTime)
bInWar = true;
}
return bInWar;
}
public int GetCountry() { return m_idCountry; }
// Get battle info.
//public BATTLEINFO GetBattleInfo() { return m_BattleInfo; }
//public bool IsInCountryWar() { return IsInBattle() && GetBattleInfo().IsCountryWar(); }
// End NPC service
public void EndNPCService()
{
m_idSevNPC = 0;
m_bTalkWithNPC = false;
m_iBoothState = 0;
m_bIsInKingService = false;
//m_pOffShopCtrl.SetNPCSevFlag(COfflineShopCtrl::NPCSEV_NULL);
}
void UpdateGFXs(float dwDeltaTime)
{
+15 -1
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using BrewMonster;
using BrewMonster.UI;
using UnityEngine;
public class CECUIManager : MonoSingleton<CECUIManager>
@@ -13,7 +14,9 @@ public class CECUIManager : MonoSingleton<CECUIManager>
[SerializeField] private HUDNPC npsUI;
[SerializeField] private int currentTargetNPCID;
CECGameUIMan gameUI;
[SerializeField] private DialogScriptTableObject dialogResouce;
[SerializeField] private Canvas canvasDlg;
protected override void Awake()
{
base.Awake();
@@ -104,4 +107,15 @@ public class CECUIManager : MonoSingleton<CECUIManager>
kv.Value.SetActive(false);
}
}
public CECGameUIMan GetInGameUIMan()
{
if (gameUI == null)
{
gameUI = new CECGameUIMan();
gameUI.SetDependency(dialogResouce, canvasDlg);
gameUI.Init();
}
return gameUI;
}
}
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 900c2b23089d0e1488dfae0059db9425
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: de3ba170288dec647b1957bf1af29f86
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+1 -1
View File
@@ -773,7 +773,7 @@ PlayerSettings:
webGLCloseOnQuit: 0
webWasm2023: 0
scriptingDefineSymbols:
Android: DOTWEEN;TESTFAST
Android: DOTWEEN;TESTFAST;_TASK_CLIENT
EmbeddedLinux: DOTWEEN
GameCoreScarlett: DOTWEEN
GameCoreXboxOne: DOTWEEN