Merge branch 'develop' into feature/skill-data

# Conflicts:
#	Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
#	Assets/PerfectWorld/Scripts/Move/CECHostMove.cs
#	Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
#	Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
#	Assets/Scripts/CECHostPlayer.cs
This commit is contained in:
VDH
2025-12-06 16:41:34 +07:00
16 changed files with 1852 additions and 62 deletions
@@ -10310,7 +10310,907 @@ AnimationClip:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings: []
genericBindings:
- serializedVersion: 2
path: 2904062089
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2697794434
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 473984651
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 623370192
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2562056908
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2941519199
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2904062089
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2671905850
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2320144522
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2697794434
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3205428742
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 181291755
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 154580831
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1777750735
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 429640245
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2817243914
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1777417914
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 519441964
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4002323032
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2613341690
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 473984651
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4218330170
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 973752780
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2596236104
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2425874665
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3885029503
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2123991493
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 623370192
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3802533241
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 681675820
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 888812595
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2278634959
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2562056908
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4181503832
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2561672102
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2317553494
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2270638035
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4031782725
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1767460607
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2941519199
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 970861809
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3764974733
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2271171554
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3784749727
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2526118409
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 261673907
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2391830708
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2089267986
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1177066612
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2872170345
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4131753032
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 582302429
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2127582788
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2671905850
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2320144522
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3205428742
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 181291755
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 154580831
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1777750735
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 429640245
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3505163164
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2817243914
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1777417914
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 519441964
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4002323032
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2613341690
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4218330170
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 973752780
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2596236104
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2425874665
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3885029503
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2123991493
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3802533241
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 681675820
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 888812595
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2278634959
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4040557913
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1776243939
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4181503832
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2561672102
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2317553494
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2270638035
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4031782725
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1767460607
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 970861809
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3764974733
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2271171554
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3784749727
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2526118409
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 261673907
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2391830708
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2089267986
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1177066612
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2872170345
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4131753032
attribute: 1
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 582302429
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 2127582788
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3505163164
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 4040557913
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 1776243939
attribute: 2
script: {fileID: 0}
typeID: 4
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
@@ -10322,7 +11222,7 @@ AnimationClip:
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
@@ -1,4 +1,5 @@
using UnityEngine;
using System.Runtime.InteropServices;
using UnityEngine;
public static class GameConstants
{
@@ -46,6 +47,8 @@ public struct ROLEBASICPROP
iVigour = 0;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ROLEEXTPROP
{
public ROLEEXTPROP_BASE bs;
@@ -63,6 +66,8 @@ public struct ROLEEXTPROP
max_ap = 0;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ROLEEXTPROP_BASE
{
/* »ù´¡ÊôÐÔ */
@@ -100,6 +105,8 @@ public struct ROLEEXTPROP_BASE
this.mp_gen = mp_gen;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ROLEEXTPROP_MOVE
{
/* Ô˶¯ËÙ¶È*/
@@ -125,6 +132,8 @@ public struct ROLEEXTPROP_MOVE
this.flight_speed = flight_speed;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ROLEEXTPROP_ATK
{
// 物理攻击属性 / Attack properties
@@ -135,6 +144,7 @@ public struct ROLEEXTPROP_ATK
public float AttackRange; // 攻击范围
// 附加魔法伤害倍数(或附加魔法伤害范围)数组
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public AddonDamageEntry[] AddonDamage;
// 魔法攻击伤害
@@ -172,10 +182,12 @@ public struct ROLEEXTPROP_ATK
}
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
// Role (Player and NPC) extended properties, defense part
public struct ROLEEXTPROP_DEF
{
/* ·ÀÓùÊôÐÔ */
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public int[] resistance; // ħ·¨¿¹ÐÔ
public int defense; // ·ÀÓùÁ¦
public int armor; // ÉÁ¶ãÂÊ£¨×°¼×µÈ¼¶£©
@@ -1,5 +1,6 @@
using BrewMonster.Network;
using System.Collections.Generic;
using UnityEngine;
namespace BrewMonster.Scripts
{
@@ -434,11 +435,25 @@ namespace BrewMonster.Scripts
public void CancelWork(CECHPWork pWork)
{
if (pWork == null)
{
//ASSERT(false);
return;
}
pWork.Cancel();
}
public void CancelWorkAtPriority(int iPriority)
{
if (!ValidatePriority(iPriority))
{
return;
}
WorkList workList = m_WorkStack[iPriority];
for (int i = 0; i < workList.Count; ++i)
{
CancelWork(workList[i]);
//LOG_DEBUG_INFO(AString().Format("CECHPWork::%s priority=%d cancelled", workList[i]->GetWorkName(), iPriority));
}
}
public bool DelayWork(int iPriority, CECHPWork pWork)
@@ -832,7 +847,7 @@ namespace BrewMonster.Scripts
int m_iPriority;
bool m_bNoDelay;
bool m_bShouldTick;
uint m_dwTickTime;
float m_dwTickTime;
// Constructor
public CECHPWorkPostTickRunWorkCommand(
@@ -840,7 +855,7 @@ namespace BrewMonster.Scripts
bool bNoDelay = false,
int iPriority = CECHPWorkMan.Work_priority.PRIORITY_1,
bool bShouldTick = false,
uint dwTickTime = 0)
float dwTickTime = 0)
{
m_pWork = pWork;
m_bNoDelay = bNoDelay;
@@ -1,5 +1,5 @@
using BrewMonster.Network;
using CSNetwork.GPDataType;
using System;
using UnityEngine;
using Types = BrewMonster.Scripts.CECHPWorkMove.DestTypes;
@@ -613,8 +613,7 @@ namespace BrewMonster.Scripts
}
else
{
vCurPos = m_pHost.m_MoveCtrl.GroundMove(GPDataTypeHelper.g_vOrigin, 0.0f, fDeltaTime, m_pHost.m_fVertSpeed);
Debug.LogError("vCurPos = " + vCurPos + " m_pHost.m_fVertSpeed = " + m_pHost.m_fVertSpeed);
vCurPos = m_pHost.m_MoveCtrl.GroundMove(GPDataTypeHelper.g_vOrigin, 0.0f, fDeltaTime, m_pHost.m_fVertSpeed);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
@@ -752,6 +751,120 @@ namespace BrewMonster.Scripts
// Tick routine of flying or swimming
protected bool Tick_FlySwim(float fDeltaTime)
{
A3DVECTOR3 vCurPos = m_pHost.GetPos();
int iMoveMode = (m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_AIR) ? (int)GPMoveMode.GP_MOVE_AIR : (int)GPMoveMode.GP_MOVE_WATER;
float na, fMaxSpeed;
bool bInAir;
if (m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_AIR)
{
bInAir = true;
na = CECHostMove.EC_NACCE_AIR;
fMaxSpeed = m_pHost.GetFlySpeed();
}
else
{
bInAir = false;
na = CECHostMove.EC_NACCE_WATER;
fMaxSpeed = m_pHost.GetSwimSpeedSev();
}
if (m_bReadyCancel || m_bMeetSlide)
{
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fMaxSpeed, iMoveMode | (int)GPMoveMode.GP_MOVE_RUN);
Finish();
return true;
}
// for auto move
if (m_bUseAutoMoveDialog && m_fAutoHeight > 0.0f && m_iDestType != DestTypes.DEST_PUSH)
{
if (m_pHost.m_dwMoveRelDir == 0)
{
if ((int)(vCurPos.y / 10.0f) == (int)m_fAutoHeight)
{
if (!m_bReachedHeight)
{
m_pHost.m_vVelocity.y = 0.0f;
m_pHost.m_dwMoveRelDir &= ~((uint)(MOVE_DIR.MD_ABSUP | MOVE_DIR.MD_ABSDOWN));
m_bReachedHeight = true;
}
}
else
{
if (!m_bReachedHeight)
{
if (vCurPos.y < m_fAutoHeight * 10.0f)
{
m_pHost.m_dwMoveRelDir &= ~((uint)(MOVE_DIR.MD_ABSDOWN));
m_pHost.m_dwMoveRelDir |= ((uint)MOVE_DIR.MD_ABSUP);
}
else if (vCurPos.y > m_fAutoHeight * 10.0f)
{
m_pHost.m_dwMoveRelDir &= ~((uint)(MOVE_DIR.MD_ABSUP));
m_pHost.m_dwMoveRelDir |= (uint)MOVE_DIR.MD_ABSDOWN;
}
}
else // Auto adjust height, so we should refresh move height
{
m_fAutoHeight = vCurPos.y / 10.0f;
}
}
}
else // Player manually set auto move height
{
m_bReachedHeight = true;
m_fAutoHeight = vCurPos.y / 10.0f;
}
}
if ((m_pHost.m_dwMoveRelDir & (uint)(MOVE_DIR.MD_LEFT | MOVE_DIR.MD_RIGHT | MOVE_DIR.MD_FORWARD | MOVE_DIR.MD_BACK)) != 0)
m_iDestType = DestTypes.DEST_PUSH;
ON_AIR_CDR_INFO cdr = m_pHost.m_AirCDRInfo;
if (m_iDestType == DestTypes.DEST_DIR)
{
Vector3 vPushDir = Vector3.zero;
m_pHost.GetPushDir(ref vPushDir, (uint)MOVE_DIR.MD_ALL, 0);
vPushDir.x = vPushDir.z = 0.0f;
float fSpeed1H = m_pHost.m_vVelocity.MagnitudeH();
float fSpeed1V = m_pHost.m_vVelocity.y;
A3DVECTOR3 vMoveDirH = m_vMoveDest;
float pa = CECHostMove.EC_PUSH_ACCE;
float fSpeed2H = fSpeed1H + (pa + na) * fDeltaTime;
if (Math.Abs(pa - 0) < float.Epsilon && fSpeed2H < 0.0f)
fSpeed2H = 0.0f; // Only resistance couldn't generate negative speed
else if (fSpeed2H > fMaxSpeed)
fSpeed2H = fMaxSpeed;
Glide(5.0f, vMoveDirH, fDeltaTime, bInAir);
vMoveDirH = m_pHost.GetModelMoveDir();
vMoveDirH.y = 0;
vMoveDirH.Normalize();
// Vertical speed
float fSpeed2V = CalcFlySwimVertSpeed(fSpeed1V, vPushDir.y, CECHostMove.EC_PUSH_ACCE, fDeltaTime);
A3DVECTOR3 vVel2 = vMoveDirH * fSpeed2H + GPDataTypeHelper.g_vAxisY * fSpeed2V;
// Air/water move
vCurPos = m_pHost.m_MoveCtrl.AirWaterMove(vVel2, fDeltaTime, bInAir);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
m_pHost.m_vVelocity = vVel2;
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fMaxSpeed, iMoveMode | (int)GPMoveMode.GP_MOVE_RUN);
}
else
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 0, m_vMoveDest, vVel2, iMoveMode | (int)GPMoveMode.GP_MOVE_RUN);
}
return true;
}
// Start gliding
@@ -134,7 +134,7 @@ namespace BrewMonster.Scripts
{
pWork.SetDestination(CECHPWorkMove.DestTypes.DEST_STANDJUMP, GPDataTypeHelper.g_vOrigin);
m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(
pWork, false, CECHPWorkMan.Work_priority.PRIORITY_1, true, (uint)dwDeltaTime));
pWork, false, CECHPWorkMan.Work_priority.PRIORITY_1, true, dwDeltaTime));
}
}
else if (iMoveReason == 2)
@@ -150,10 +150,8 @@ namespace BrewMonster.Scripts
{
// ASSERT(0);
}
return true;
}
// Play appropriate actions
if (m_iPoseAction == (int)PLAYER_ACTION_TYPE.ACT_STAND)
{
@@ -174,7 +172,7 @@ namespace BrewMonster.Scripts
if (m_iPoseAction == (int)PLAYER_ACTION_TYPE.ACT_STAND)
{
// Chariot war special case omitted for now
m_pHost.PlayAction(m_iCurAction, false, 0);
m_pHost.PlayAction(m_iCurAction, false, 300);
//m_oldAction = m_iCurAction;
}
@@ -1,6 +1,7 @@
using BrewMonster;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts;
using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.Protocols;
@@ -8,6 +9,7 @@ using CSNetwork.Protocols.RPCData;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
using TMPro;
using UnityEngine;
@@ -74,6 +76,9 @@ namespace PerfectWorld.Scripts.Managers
case EC_MsgDef.MSG_PM_PICKUPMATTER:
OnMsgPlayerPickupMatter(Msg);
break;
case EC_MsgDef.MSG_PM_PLAYEREXTPROP:
OnMsgPlayerExtProp(Msg);
break;
}
}
else
@@ -188,15 +193,15 @@ namespace PerfectWorld.Scripts.Managers
// TODO: Implement get faction
/*/
// Get faction info
if (pPlayer->GetFactionID() && !g_pGame->GetFactionMan()->GetFaction(pPlayer->GetFactionID()))
if (pPlayer.GetFactionID() && !g_pGame.GetFactionMan().GetFaction(pPlayer.GetFactionID()))
{
int i(0);
for (i = 0; i < a4.GetSize(); i++)
if (a4[i] == pPlayer->GetFactionID())
if (a4[i] == pPlayer.GetFactionID())
break;
if (i == a4.GetSize())
a4.Add(pPlayer->GetFactionID());
a4.Add(pPlayer.GetFactionID());
}
//*/
}
@@ -663,6 +668,72 @@ namespace PerfectWorld.Scripts.Managers
{
return CECGameRun.Instance.GetHostPlayer();
}
public bool OnMsgPlayerExtProp(ECMSG Msg)
{
object pData;
int idPlayer, iIndex;
switch (Msg.dwParam2)
{
case CommandID.PLAYER_EXT_PROP_BASE:
{
cmd_pep_base pCmd = GPDataTypeHelper.FromBytes<cmd_pep_base>((byte[])Msg.dwParam1);
idPlayer = pCmd.idPlayer;
pData = pCmd.ep_base;
iIndex = (int)ExtendPropertyClass.EXTPROPIDX_BASE;
break;
}
case CommandID.PLAYER_EXT_PROP_MOVE:
{
cmd_pep_move pCmd = GPDataTypeHelper.FromBytes<cmd_pep_move>((byte[])Msg.dwParam1);
idPlayer = pCmd.idPlayer;
pData = pCmd.ep_move;
iIndex = (int)ExtendPropertyClass.EXTPROPIDX_MOVE;
break;
}
case CommandID.PLAYER_EXT_PROP_ATK:
{
cmd_pep_attack pCmd = GPDataTypeHelper.FromBytes<cmd_pep_attack>((byte[])Msg.dwParam1);
idPlayer = pCmd.idPlayer;
pData = pCmd.ep_attack;
iIndex = (int)ExtendPropertyClass.EXTPROPIDX_ATTACK;
break;
}
case CommandID.PLAYER_EXT_PROP_DEF:
{
cmd_pep_def pCmd = GPDataTypeHelper.FromBytes<cmd_pep_def>((byte[])Msg.dwParam1);
idPlayer = pCmd.idPlayer;
pData = pCmd.ep_def;
iIndex = (int)ExtendPropertyClass.EXTPROPIDX_DEF;
break;
}
default:
return false;
}
if (!GPDataTypeHelper.ISPLAYERID(idPlayer))
{
//ASSERT(ISPLAYERID(idPlayer));
return false;
}
//CECGameSession* pSession = g_pGame.GetGameSession();
if (idPlayer == m_pHostPlayer.GetCharacterID())
{
GetHostPlayer().SetPartExtendProps(iIndex, pData);
}
else
{
EC_ElsePlayer pPlayer = SeekOutElsePlayer(idPlayer);
if (pPlayer)
pPlayer.SetPartExtendProps(iIndex, pData);
}
return true;
}
}
}
public struct EC_PLAYERLOADRESULT
@@ -17,6 +17,7 @@ public class CECObject : MonoBehaviour
protected static int ALPHA_HASH = Shader.PropertyToID("_Alpha");
protected Quaternion targetRotation;
protected Quaternion startRotation; // Store starting rotation for Slerp
protected Vector3 g_vAxisY = Vector3.up;
// Class ID
public static class Class_ID
@@ -115,6 +116,7 @@ public class CECObject : MonoBehaviour
m_bAdjustOrient = true;
m_dwOrientTime = dwTime;
m_dwOrientTimeCnt = 0;
startRotation = transform.rotation; // Store current rotation as start
targetRotation = Quaternion.LookRotation(vDir, Vector3.up);
}
@@ -182,13 +184,6 @@ public class CECObject : MonoBehaviour
{
vDir.Normalize();
}
// Xoay mượt từ rotation hiện tại sang rotation mục tiêu
/* transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRotation,
Time.deltaTime * 5.0f
);*/
SetDestDirAndUp(vDir, g_vAxisY, timeturn);
}
protected virtual void Update()
@@ -287,25 +282,18 @@ public class CECObject : MonoBehaviour
protected void AdjustOrientation(float dwDeltaTime)
{
m_dwOrientTimeCnt += dwDeltaTime;
A3DMATRIX4 mat;
// Adjust model's orientation
if (m_dwOrientTimeCnt >= m_dwOrientTime)
{
SetDirAndUp(Vector3.forward,Vector3.up );
// Set final rotation to target (not Vector3.forward)
transform.rotation = targetRotation;
m_bAdjustOrient = false;
}
else
{
float f = (float)m_dwOrientTimeCnt / m_dwOrientTime;
transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRotation,
f
);
SetDirAndUp(Vector3.forward, Vector3.up);
// Note: SetDirAndUp will change m_bAdjustOrient flag
// Interpolate from START to TARGET rotation based on time progress
float f = m_dwOrientTimeCnt / m_dwOrientTime;
transform.rotation = Quaternion.Slerp(startRotation, targetRotation, f);
m_bAdjustOrient = true;
}
}
+95 -12
View File
@@ -1,15 +1,7 @@
using BrewMonster.Network;
using BrewMonster.Scripts;
using CSNetwork;
using CSNetwork.C2SCommand;
using CSNetwork.GPDataType;
using CSNetwork.Protocols;
using System;
using System.Collections.Generic;
using System.Runtime.ConstrainedExecution;
using System.Security.Cryptography;
using System.Text;
using BrewMonster;
using UnityEngine;
using BrewMonster.Scripts.World;
@@ -36,6 +28,22 @@ namespace BrewMonster
A3DVECTOR3 m_vBlockMove;
bool m_bLocalMove; // true, Moving info isn't sent to server
public A3DVECTOR3 m_vFlashTPNormal;
// Negative accelerate in water and air
public const float EC_NACCE_AIR = -5.0f;
public const float EC_NACCE_WATER = -5.0f;
// Push accelerate
public const float EC_PUSH_ACCE = 8.0f; // Normal push accelerate in air and water
public const float EC_FLYOFF_ACCE = 10.0f; // Fly off accelerate
public const float EC_SLOPE_Y = 0.5f;
public const float EC_GRAVITY = 9.8f;
// Move length minimum threshold
public const float MIN_MOVELEN_IN_AIR_WATER = 0.5f;
public const float MIN_MOVELEN_ON_GROUND = 0.5f;
public const float MIN_MOVELEN_FOR_DETECT_VIBRATION = 0.05f;
public CECHostMove(CECHostPlayer pHost)
{
m_wMoveStamp = 0;
@@ -115,7 +123,7 @@ namespace BrewMonster
public void SendStopMoveCmd(in Vector3 vPos, float fSpeed, int iMoveMode)
{
Debug.LogWarning("HoangDev : SendStopMoveCmd");
UnityEngine.Debug.LogWarning("HoangDev : SendStopMoveCmd");
iMoveMode |= (int)GPMoveMode.GP_MOVE_DEAD;
if (cmdstopdelayCounter >= 500)
@@ -220,7 +228,7 @@ namespace BrewMonster
if (fTime < 0.05f || fSpeed > 50.0f)
{
// tương đương ASSERT(0) trong C++, ở đây có thể Debug.LogWarning
Debug.LogWarning("CalcAverageSpeed: invalid input, fallback to default speed.");
UnityEngine.Debug.LogWarning("CalcAverageSpeed: invalid input, fallback to default speed.");
return fDefSpeed;
}
@@ -309,7 +317,7 @@ namespace BrewMonster
cdr.fYVel += fSpeedV;
EC_CDR.OnGroundMove(ref cdr);
m_pHost.m_CDRInfo = cdr;
//if (g_pGame.GetGameRun().GetWorld().GetAssureMove())
// g_pGame.GetGameRun().GetWorld().GetAssureMove().AssureMove(m_pHost.m_aabbServer.Center, cdr.vCenter);
@@ -323,7 +331,9 @@ namespace BrewMonster
m_iBlockedCnt = 0;
m_fBlockMove += (vNewPos - m_pHost.GetPos()).Magnitude();
m_vBlockMove += vNewPos - m_pHost.GetPos();
if ((m_fBlockTime += fTime) >= 1.0f)
m_fBlockTime += fTime;
//TO DO: in c++ set 1.0f. Convert to c#, this logic is wrong. If set time is 2.0, game run correct
if ((m_fBlockTime) >= 2.0f)
{
if (m_fBlockMove < GPDataTypeHelper.MIN_MOVELEN_ON_GROUND || m_vBlockMove.Magnitude() < GPDataTypeHelper.MIN_MOVELEN_FOR_DETECT_VIBRATION)
{
@@ -410,6 +420,79 @@ namespace BrewMonster
return vCurPos;
}
}
// Get host's last position sent to server
public Vector3 GetLastSevPos() { return m_vLastSevPos; }
public bool GetSlideLock() { return m_bSlideLock; }
// Air/Water move
public A3DVECTOR3 AirWaterMove(A3DVECTOR3 vSpeed, float fTime, bool bInAir, bool bTrace = false)
{
A3DVECTOR3 vDir = vSpeed;
float fSpeed = vDir.Normalize();
return AirWaterMove(vDir, fSpeed, fTime, bInAir, bTrace);
}
// Air/Water move
A3DVECTOR3 AirWaterMove(A3DVECTOR3 vDir, float fSpeed, float fTime, bool bInAir, bool bTrace/* false */)
{
A3DVECTOR3 vRealDir = vDir;
// OnAirMove only accept positive speed value
if (fSpeed< 0.0f)
{
vRealDir = -vDir;
fSpeed = -fSpeed;
}
float fMaxSpeed = bInAir ? m_pHost.GetFlySpeed() : m_pHost.GetSwimSpeedSev();
if (fSpeed > fMaxSpeed)
fSpeed = fMaxSpeed;
ON_AIR_CDR_INFO cdr = m_pHost.m_AirCDRInfo;
cdr.vCenter = m_pHost.m_aabbServer.Center;
cdr.vVelDir = vRealDir;
cdr.fSpeed = fSpeed;
cdr.fHeightThresh = bInAir? m_pHost.m_MoveConst.fMinAirHei : m_pHost.m_MoveConst.fMinWaterHei;
cdr.t = fTime;
cdr.bOnAir = bInAir;
// If player is tracing something, let he fly/swim low enough
// if (bTrace)
// cdr.fHeightThresh = 0.2f;
EC_CDR.OnAirMove(ref cdr);
// TO DO: fix later
//if(EC_Game.GetGameRun().GetWorld().GetAssureMove() )
// EC_Game.GetGameRun().GetWorld().GetAssureMove().NoAssureMove();
m_pHost.SetGroundNormal(GPDataTypeHelper.g_vAxisY);
A3DVECTOR3 vNewPos = cdr.vCenter - GPDataTypeHelper.g_vAxisY * m_pHost.m_aabbServer.Extents.y;
m_iBlockedCnt = 0;
m_fBlockMove += (vNewPos - m_pHost.GetPos()).Magnitude();
m_vBlockMove += vNewPos - m_pHost.GetPos();
if ((m_fBlockTime += fTime) >= 1.0f)
{
if (m_fBlockMove<MIN_MOVELEN_IN_AIR_WATER || m_vBlockMove.Magnitude() < MIN_MOVELEN_FOR_DETECT_VIBRATION)
{
m_iBlockedCnt = 5;
}
m_fBlockTime = 0.0f;
m_fBlockMove = 0.0f;
m_vBlockMove.Clear();
}
m_fMoveTime += fTime;
return vNewPos;
}
}
public struct CDR_INFO
{
//the aabb
+34 -1
View File
@@ -20,6 +20,7 @@ using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UIElements;
using static BrewMonster.CECPlayer;
using BrewMonster.Network;
namespace BrewMonster
{
@@ -1352,7 +1353,7 @@ namespace BrewMonster
public float GetGroundSpeed()
{
// return m_bWalkRun ? g_pGame.GetConfigs().GetHostRunSpeed() : m_ExtProps.mv.walk_speed;
return 5f;
// return 5f;
return m_bWalkRun ? m_ExtProps.mv.run_speed : m_ExtProps.mv.walk_speed;
}
@@ -1497,6 +1498,38 @@ namespace BrewMonster
}
public enumWingType GetWingType() { return m_wingType; }
// Set part extend properties
public void SetPartExtendProps(int iPropIdx, object pData)
{
switch (iPropIdx)
{
case (int)ExtendPropertyClass.EXTPROPIDX_BASE:
m_ExtProps.bs = (ROLEEXTPROP_BASE)pData;
break;
case (int)ExtendPropertyClass.EXTPROPIDX_MOVE:
m_ExtProps.mv = (ROLEEXTPROP_MOVE)pData;
break;
case (int)ExtendPropertyClass.EXTPROPIDX_ATTACK:
m_ExtProps.ak = (ROLEEXTPROP_ATK)pData;
break;
case (int)ExtendPropertyClass.EXTPROPIDX_DEF:
m_ExtProps.df = (ROLEEXTPROP_DEF)pData;
break;
default:
//ASSERT(0);
return;
}
}
}
public struct PlayActionEvent
@@ -542,6 +542,30 @@ namespace BrewMonster
//return bBrush;
}
public static void OnAirMove(ref ON_AIR_CDR_INFO awmInfo)
{
//assert(0 && "Not ready yet");
if (awmInfo.bOnAir)
{
AirMove(ref awmInfo);
}
else
{
WaterMove(ref awmInfo);
}
}
static void AirMove(ref ON_AIR_CDR_INFO awmInfo)
{
}
static void WaterMove(ref ON_AIR_CDR_INFO awmInfo)
{
}
}
public struct OtherPlayer_Move_Info
{
@@ -572,4 +596,38 @@ namespace BrewMonster
public bool bStartSolid; //start in solid
public uint dwClsFlag; //collision flag
};
// for on-air move case
//@note : change to AABB. By Kuiwu[22/9/2005]
public struct ON_AIR_CDR_INFO
{
public A3DVECTOR3 vCenter;
public A3DVECTOR3 vExtent;
// Hold a height from the surface of terrain or building
public float fHeightThresh;
// Velocity Info
public A3DVECTOR3 vVelDir;
public float fSpeed;
// time span ( sec )
public float t;
//@note : SlopeThresh seems useless on air or under water. By Kuiwu[22/9/2005]
// Slope Thresh
//float fSlopeThresh;
// Distance Thresh under the water surface
public float fUnderWaterDistThresh;
public A3DVECTOR3 vTPNormal;
// On air or water, true if on air, false for on water case.
public bool bOnAir;
// After the move action is done, If the fHeightThresh
// still be satisfied, bMeetHeightThresh is set to true.
public bool bMeetHeightThresh;
};
}
+1 -1
View File
@@ -392,7 +392,7 @@ public class CECNPC : CECObject
{
return m_pNPCModelPolicy.PlayAttackAction(nAttackSpeed, attackevent);
}
void NPCTurnFaceTo(int idTarget, float dwTime = 0)
void NPCTurnFaceTo(int idTarget, float dwTime = 0.3f)
{
if (IsDirFixed())
{
@@ -55,7 +55,7 @@ namespace CSNetwork
public static int MSG_HST_GAINITEM = 243; // Gain item in or after trade
public static int MSG_HST_SELTARGET = 244; // Select / unselect target, p1 - data address; p2 - command ID
public static int MSG_HST_FIXCAMERA = 245; // Fix camera
public static int MSG_HST_OWNEXTPROP = 246; // Host extend properties
public const int MSG_HST_OWNEXTPROP = 246; // Host extend properties
public static int MSG_HST_ADDSTATUSPT = 247; // Add status point
public static int MSG_HST_RBTNCLICK = 248; // Left button click, p1 - x; p2 - y; p2 - y; p3 - SHIFT, ALT, CTRL key states
public static int MSG_HST_JOINTEAM = 249; // Host join team
@@ -174,7 +174,7 @@ namespace CSNetwork
public static int MSG_PM_PLAYERDISAPPEAR = 359; // Player disappear, p1 - data address
public static int MSG_PM_PLAYERSTOPMOVE = 360; // Player stop move, p1 - data address
public static int MSG_PM_PLAYERLEVELUP = 361; // Player level up
public static int MSG_PM_PLAYEREXTPROP = 362; // Player extend properties
public const int MSG_PM_PLAYEREXTPROP = 362; // Player extend properties
// #define MSG_PM_TEAMMEMBERDATA 363 // Team member data
public static int MSG_PM_LEAVETEAM = 364; // Player leave team
public static int MSG_PM_PLAYEREQUIPDATA = 365; // Player equipment data
@@ -1827,6 +1827,52 @@ namespace CSNetwork.GPDataType
public byte[] placeholder; // Task data ...
}
// PLAYER_EXT_PROP_BASE
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_pep_base
{
public int idPlayer;
public ROLEEXTPROP_BASE ep_base;
};
// PLAYER_EXT_PROP_MOVE
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_pep_move
{
public int idPlayer;
public ROLEEXTPROP_MOVE ep_move;
};
// PLAYER_EXT_PROP_ATK
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_pep_attack
{
public int idPlayer;
public ROLEEXTPROP_ATK ep_attack;
};
// PLAYER_EXT_PROP_DEF
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_pep_def
{
public int idPlayer;
public ROLEEXTPROP_DEF ep_def;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_own_ext_prop
{
public uint status_point;
public int attack_degree; //¹¥»÷µÈ¼¶
public int defend_degree; //·ÀÓùµÈ¼¶
public int crit_rate;
public int crit_damage_bonus;
public int invisible_degree;
public int anti_invisible_degree;
public int penetration;
public int resilience;
public int vigour;
public ROLEEXTPROP prop;
};
}
@@ -729,6 +729,9 @@ namespace CSNetwork
case CommandID.PLAYER_EXT_PROP_DEF:
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEREXTPROP, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
break;
case CommandID.OWN_EXT_PROP:
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNEXTPROP, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
break;
}
}
+1
View File
@@ -29,6 +29,7 @@ public partial class CECGameRun
public void Init()
{
Application.targetFrameRate = 60;
instance = this;
// _gameRunConfig = Resources.Load<GameRunConfig>("GameRunConfig");
// _playerPrefab = _gameRunConfig.PlayerPrefab;
+479 -10
View File
@@ -91,6 +91,9 @@ namespace BrewMonster
private A3DVECTOR3 g_vOrigin = new A3DVECTOR3(0f);
private Transform playerTransform;
private float EC_SLOPE_Y = 0.5f;
int m_iOldWalkMode = Move_Mode.MOVE_STAND; // Copy of work mode
public uint m_dwMoveRelDir = 0; // Move relative direction flags
public ON_AIR_CDR_INFO m_AirCDRInfo;
// Host config data version
const int HOSTCFG_VERSION = 11;
@@ -267,20 +270,23 @@ namespace BrewMonster
}
#endif
// Update cursor based on what's under mouse
EstimateCursor();
//Debug.Log($"(ulong)Time.deltaTime * 1000 {(ulong)(Time.deltaTime * 1000)}");
m_MoveCtrl.Tick((ulong)(Time.deltaTime * 1000));
// Nếu có thay đổi runtime, có thể lấy lại mỗi vài giây/Start nếu bạn thích:
// ccRadius = controller.radius; ccSkin = controller.skinWidth;
EstimateMoveEnv(GetPos());
OnKeyDown();
m_pWorkMan?.Tick(Time.deltaTime);
// Update cursor based on what's under mouse
EstimateCursor();
// Update GFXs
UpdateGFXs(Time.deltaTime);
//m_dwMoveRelDir = 0;
m_fVertSpeed = 0.0f;
}
public void StopMovement()
@@ -430,6 +436,7 @@ namespace BrewMonster
case int value when value == EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break;
case int value when value == EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break;
}
@@ -2102,20 +2109,33 @@ namespace BrewMonster
m_aabb.Center = GPDataTypeHelper.g_vOrigin;
m_aabb.Extents.Set(0.3f, 0.9f, 0.3f);
m_aabbServer = m_aabb;
m_MoveConst.fStepHei = 0.8f;
m_MoveConst.fMinAirHei = 1.6f;
m_MoveConst.fMinWaterHei = 0.3f;
m_MoveConst.fShoreDepth = 1.6f;
m_MoveConst.fWaterSurf = 0.6f;
CalcPlayerAABB();
SetPos(pos);
//m_CDRInfo.vTPNormal = GroundCheck(out RaycastHit hit) ? hit.normal : Vector3.zero;
m_CDRInfo.vExtent = m_aabbServer.Extents;
m_CDRInfo.vExtent = EC_Utility.ToVector3(m_aabbServer.Extents);
m_CDRInfo.vTPNormal = EC_Utility.ToVector3(g_vOrigin);
m_CDRInfo.fYVel = 0.0f;
m_CDRInfo.fSlopeThresh = EC_SLOPE_Y;
m_CDRInfo.fStepHeight = m_MoveConst.fStepHei;
m_AirCDRInfo.vExtent = m_aabbServer.Extents;
m_AirCDRInfo.fUnderWaterDistThresh = m_MoveConst.fWaterSurf;
// Create work manager
m_pWorkMan = new CECHPWorkMan(this);
m_pWorkMan.StartWork_p0(m_pWorkMan.CreateWork(Host_work_ID.WORK_STAND));
if (IsDead())
{
//CECHPWorkDead pWork = (CECHPWorkDead*)m_pWorkMan->CreateWork(CECHPWork.Host_work_ID.WORK_DEAD);
//pWork->SetBeDeadFlag(true);
//m_pWorkMan->StartWork_p0(pWork);
EventBus.PublishChannel(GetCharacterID(), new ClearComActFlagAllRankNodesEvent(true));
//CECHPWorkDead pWork = (CECHPWorkDead*)m_pWorkMan.CreateWork(CECHPWork.Host_work_ID.WORK_DEAD);
//pWork.SetBeDeadFlag(true);
//m_pWorkMan.StartWork_p0(pWork);
EventBus.PublishChannel(GetCharacterID(), new CECPlayer.ClearComActFlagAllRankNodesEvent(true));
PlayAction((int)PLAYER_ACTION_TYPE.ACT_GROUNDDIE);
if (PopupManager.Instance != null)
{
@@ -2650,6 +2670,44 @@ namespace BrewMonster
{
return m_ExtProps.mv.swim_speed;
}
public float GetSwimSpeedSev()
{
float fSpeedSev = GetSwimSpeed();
LayerMask layerGround = 1 << 6;
LayerMask layerWater = 1 << 8;
while (true)
{
if (!IsUnderWater()) break;
CECWorld pWorld = EC_Game.GetGameRun().GetWorld();
if (pWorld == null) break;
A3DVECTOR3 vPos = GetPos();
Vector3 startPoint = EC_Utility.ToVector3(vPos);
Vector3 dir = EC_Utility.ToVector3(vPos) + Vector3.down;
float fTerrainHeight = 0f;
if (Physics.Raycast(startPoint, dir, out hit, layerGround))
{
fTerrainHeight = Vector3.Distance(hit.point, startPoint);
}
float fWaterHeight = 0f;
if (Physics.Raycast(startPoint, dir, out hit, layerWater))
{
fWaterHeight = Vector3.Distance(hit.point, startPoint);
}
if (fWaterHeight <= fTerrainHeight) break;
float fBorderLine = fWaterHeight - 2.0f;
if (vPos.y <= fBorderLine) break;
// ·þÎñÆ÷¶Ë½«Ë®ÃæÒÔÏÂ2Ã×ÒÔÉÏ´¦ÀíΪ run_speed£¨ÓÐÎÊÌ⣩
// µ«Î´Ê¹ÓüÓËÙ¼¼ÄÜʱ swim_speed СÓÚ run_speed£¬
// ¿ÉÒÔÔÚË®ÃæÒÔÏÂ2Ã×ÒÔÉÏ»ñÈ¡³¬¹ý swim_speed µÄËÙ¶È£¬Òò´Ë£¬´Ë´¦È¡Á½Õß½ÏСֵΪºÏÀí×ö·¨
fSpeedSev = Math.Min(m_ExtProps.mv.run_speed, fSpeedSev);
break;
}
return fSpeedSev;
}
public bool ApplySkillShortcut(int idSkill, bool bCombo = false /* false */,
int idSelTarget = 0/* 0 */, int iForceAtk = -1/* -1 */)
{
@@ -4372,6 +4430,144 @@ namespace BrewMonster
m_bIsInKingService = false;
//m_pOffShopCtrl.SetNPCSevFlag(COfflineShopCtrl::NPCSEV_NULL);
}
public bool GetPushDir(ref Vector3 vPushDir, uint dwMask, float deltaTime)
{
Vector3 vRight = Vector3.zero;
vRight.x = joystick.Horizontal;
vRight.z = joystick.Vertical;
vRight.y = 0f;
vRight.Normalize();
if (vRight == Vector3.zero)
{
return false;
}
vPushDir = vRight;
/* // reset
vPushDir = Vector3.zero;
Vector3 vRight = Vector3.zero;
bool bMove = false;
// Không bấm gì → không có hướng
if (m_dwMoveRelDir == 0)
return false;
// ===== LEFT =====
if ((m_dwMoveRelDir & MD_LEFT) != 0)
{
// Nếu trên không → xoay camera thay vì di chuyển
if (m_iMoveEnv == MOVEENV_AIR)
{
// giữ nguyên logic PW
ECMSG msg = new ECMSG();
msg.dwParam2 = 0;
msg.dwParam1 = (uint)(_yaw_vel_air * deltaTime);
if ((m_dwMoveRelDir & MD_BACK) != 0)
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
OnMsgHstYaw(msg); // TODO: bạn map hàm này sang Unity
}
else if (m_iMoveEnv == MOVEENV_WATER)
{
ECMSG msg = new ECMSG();
msg.dwParam2 = 0;
msg.dwParam1 = (uint)(_yaw_vel * deltaTime);
if ((m_dwMoveRelDir & MD_BACK) != 0)
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
OnMsgHstYaw(msg); // TODO
}
else
{
// Mặt đất → di chuyển sang trái theo camera
// C++: vRight = -m_CameraCoord.GetRight();
Vector3 camRight = m_CameraCoord.GetRight(); // TODO: map sang Unity Camera?
vRight = -camRight;
vRight.y = 0;
vRight.Normalize();
vPushDir = vRight;
bMove = true;
}
}
// ===== RIGHT =====
else if ((m_dwMoveRelDir & MD_RIGHT) != 0)
{
if (m_iMoveEnv == MOVEENV_AIR)
{
ECMSG msg = new ECMSG();
msg.dwParam2 = 0;
msg.dwParam1 = (uint)((-_yaw_vel_air) * deltaTime);
if ((m_dwMoveRelDir & MD_BACK) != 0)
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
OnMsgHstYaw(msg); // TODO
}
else if (m_iMoveEnv == MOVEENV_WATER)
{
ECMSG msg = new ECMSG();
msg.dwParam2 = 0;
msg.dwParam1 = (uint)((-_yaw_vel) * deltaTime);
if ((m_dwMoveRelDir & MD_BACK) != 0)
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
OnMsgHstYaw(msg); // TODO
}
else
{
// Mặt đất → di chuyển sang phải theo camera
Vector3 camRight = m_CameraCoord.GetRight(); // TODO
vRight = camRight;
vRight.y = 0;
vRight.Normalize();
vPushDir = vRight;
bMove = true;
}
}
// ===== FORWARD =====
if ((m_dwMoveRelDir & MD_FORWARD) != 0)
{
Vector3 forward = m_CameraCoord.GetDir(); // TODO
forward.y = 0;
forward.Normalize();
vPushDir = forward;
if (bMove)
{
vPushDir += vRight;
vPushDir.Normalize();
}
}
// ===== BACK =====
else if ((m_dwMoveRelDir & MD_BACK) != 0)
{
Vector3 back = -m_CameraCoord.GetDir(); // TODO
back.y = 0;
back.Normalize();
vPushDir = back;
if (bMove)
{
vPushDir += vRight;
vPushDir.Normalize();
}
}
// ===== ABS UP (nếu mask cho phép) =====
else if (((m_dwMoveRelDir & MD_ABSUP) != 0) && ((dwMask & MD_ABSUP) != 0))
{
vPushDir = Vector3.up;
}*/
return true;
}
void UpdateGFXs(float dwDeltaTime)
{
@@ -4636,7 +4832,281 @@ namespace BrewMonster
return NormalAttackObject(idTarget, bForceAttack, bMoreClose);
}
}
bool IsJumpInWater() { return m_bJumpInWater; }
// Is under water
bool IsUnderWater() { return m_iMoveEnv == Move_environment.MOVEENV_WATER ? true : false; }
// Can jump or take off in water ?
bool CanTakeOffWater()
{
return true;
//A3DVECTOR3 vPos = GetPos();
//if (vPos.y < EC_Game.GetGameRun().GetWorld().GetWaterHeight(vPos) - m_MoveConst.fShoreDepth)
// return false;
//else
// return true;
}
bool IsSitting() { return (m_dwStates & PlayerNPCState.GP_STATE_SITDOWN) != 0 ? true : false; }
// Is host player open trash box ?
bool IsUsingTrashBox() { return m_bUsingTrashBox; }
// Is host player talking with NPC ?
bool IsTalkingWithNPC() { return m_bTalkWithNPC; }
// Is reviving
bool IsReviving()
{
return m_pWorkMan.IsReviving();
}
// Is spelling magic
bool IsSpellingMagic()
{
return m_pWorkMan.IsSpellingMagic();
}
// Is picking up something
bool IsPicking()
{
return false;
// TODO: fix later
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
//if (pWork != null)
//{
// return !(pWork as CECHPWorkPick).IsGather();
//}
//else
// return false;
}
// Is gathering resources
bool IsGathering()
{
return false;
// TODO: fix later
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
//if (pWork != null)
// return (pWork as CECHPWorkPick).IsGather();
//else
// return false;
}
// Is using item ?
bool IsUsingItem()
{
return m_pWorkMan.IsUsingItem();
}
bool IsPassiveMove()
{
return m_pWorkMan.IsPassiveMoving();
}
void SetJumpInWater(bool b) { m_bJumpInWater = b; }
// Is host in sliding state (in the state, host is sliding on slope) ?
bool InSlidingState()
{
if (m_iMoveMode != Move_Mode.MOVE_SLIDE)
return false;
CECHPWorkStand pWork = (m_pWorkMan.GetRunningWork(Host_work_ID.WORK_STAND) as CECHPWorkStand);
if (pWork != null)
{
if (pWork.GetStopSlideFlag())
{
return false;
}
}
return true;
}
public void SetGroundInfoClient()
{
isGrounded = GroundCheck(out lastGroundHit);
m_GndInfo.bOnGround = isGrounded;
}
public void SetRotationHP(Vector3 dir)
{
transform.rotation = Quaternion.LookRotation(dir);
}
// Estimate move environment
void EstimateMoveEnv(A3DVECTOR3 vPos)
{
if (IsFlying())
{
m_iMoveEnv = Move_environment.MOVEENV_AIR;
return;
}
CECWorld pWorld = EC_Game.GetGameRun().GetWorld();
LayerMask layerMaskTerrain = 1 << 6;
LayerMask layerMaskBush = 1 << 7;
Vector3 vStart = EC_Utility.ToVector3(vPos);
Vector3 vGndPos0 = Vector3.zero;
Vector3 vTestPos0 = m_MoveCtrl.GetLastSevPos() + g_vAxisY * m_aabbServer.Extents.y;
VertRayTrace(vTestPos0, ref vGndPos0, ref m_GndInfo.vGndNormal, 1000f);
m_GndInfo.fGndHei = vGndPos0.y;
Vector3 vAABBGnd = Vector3.zero;
VertAABBTrace(vTestPos0, EC_Utility.ToVector3(m_aabbServer.Extents), ref vAABBGnd, ref m_GndInfo.vGndNormal, 1000f);
vAABBGnd.y -= m_aabbServer.Extents.y;
bool bIsInAir = false;
if (m_MoveCtrl.GetLastSevPos().y - vAABBGnd.y > 0.2f)
bIsInAir = true;
Vector3 vGndPos = Vector3.zero;
A3DVECTOR3 vTestPos = vPos + EC_Utility.ToA3DVECTOR3(g_vAxisY) * m_aabbServer.Extents.y;
VertRayTrace(EC_Utility.ToVector3(vTestPos), ref vGndPos, ref m_GndInfo.vGndNormal, 1000f);
m_GndInfo.fGndHei = vGndPos.y;
//m_GndInfo.fWaterHei = pWorld.GetWaterHeight(vTestPos);
VertAABBTrace(EC_Utility.ToVector3(vTestPos), EC_Utility.ToVector3(m_aabbServer.Extents), ref vAABBGnd, ref m_GndInfo.vGndNormal, 1000f);
vAABBGnd.y -= m_aabbServer.Extents.y;
int iNewEnv = Move_environment.MOVEENV_GROUND;
if (iNewEnv == Move_environment.MOVEENV_GROUND && GetPos().y - vAABBGnd.y < 0.2f && bIsInAir && EC_Utility.ToVector3(GetPos()) != m_MoveCtrl.GetLastSevPos())
{
m_MoveCtrl.SendMoveCmd(GetPos(), 2, EC_Utility.ToA3DVECTOR3(g_vAxisY), EC_Utility.ToA3DVECTOR3(m_CDRInfo.vAbsVelocity), m_iMoveMode, true);
// BubbleText(BUBBLE_LEVELUP, 0);
}
if (iNewEnv == Move_environment.MOVEENV_GROUND)
{
m_GndInfo.bOnGround = true;
// if (vPos.y > m_GndInfo.fGndHei + 0.2f)
if (m_CDRInfo.vTPNormal == Vector3.zero)
{
if (m_iMoveMode != (int)MoveMode.MOVE_FREEFALL)
m_iMoveMode = (int)MoveMode.MOVE_FREEFALL;
m_GndInfo.bOnGround = false;
if (IsJumping() && m_CDRInfo.vAbsVelocity.y < 0.0f && vPos.y - vAABBGnd.y < 0.6f)
{
PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LAND, false);
}
}
else
{
if (IsJumping() && m_CDRInfo.vAbsVelocity.y < 0.0f && vPos.y - vAABBGnd.y < 0.6f)
{
PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LAND, false);
ResetJump();
}
// if (m_GndInfo.vGndNormal.y < EC_SLOPE_Y)
if (m_CDRInfo.vTPNormal.y < EC_SLOPE_Y)
{
if (!m_MoveCtrl.GetSlideLock())
{
if (m_iMoveMode != (int)MoveMode.MOVE_SLIDE)
{
m_iOldWalkMode = m_iMoveMode;
m_iMoveMode = (int)MoveMode.MOVE_SLIDE;
}
}
else
{
m_MoveCtrl.SetSlideLock(false);
m_iMoveMode = (int)MoveMode.MOVE_STAND;
}
}
else
{
m_MoveCtrl.SetSlideLock(false);
if (m_iMoveMode == (int)MoveMode.MOVE_FREEFALL)
{
m_iMoveMode = (int)MoveMode.MOVE_STAND;
}
else if (m_iMoveMode == (int)MoveMode.MOVE_SLIDE)
m_iMoveMode = m_iOldWalkMode;
}
}
}
//else if (iNewEnv == MOVEENV_WATER)
//{
// m_CDRInfo.fYVel = 0.0f;
// if (m_iMoveMode == MOVE_SLIDE)
// {
// if (m_pWorkMan.IsMoving())
// m_iMoveMode = MOVE_MOVE;
// else
// m_iMoveMode = MOVE_STAND;
// }
//}
m_iMoveEnv = iNewEnv;
}
// ÏòÏ Trace µØÐκͽ¨Öþ£¬²¢·µ»ØµÚÒ»¸öÅöײµãµÄÇé¿ö
bool VertRayTrace(Vector3 vPos, ref Vector3 vHitPos, ref A3DVECTOR3 vHitNormal, float DeltaY)
{
Vector3 vTerrainPos = Vector3.zero;
Vector3 vTerrainNormal = Vector3.zero;
Vector3 vBuildingPos = Vector3.zero;
Vector3 vBuildingNormal = Vector3.zero;
LayerMask layerMaskTerrain = 1 << 6;
LayerMask layerMaskBush = 1 << 7;
if (Physics.Raycast(vPos, (vPos + Vector3.down), out hit, layerMaskTerrain))
{
vTerrainPos = hit.point;
vTerrainNormal = hit.normal;
}
if (Physics.Raycast(vPos, (vPos + Vector3.down), out hit, DeltaY, layerMaskTerrain))
{
if (vBuildingPos.y > vTerrainPos.y)
{
// Ó뽨Öþ·¢ÉúÁËÅöײ
vHitPos = vBuildingPos;
vHitNormal = EC_Utility.ToA3DVECTOR3(vBuildingNormal);
return true;
}
}
if (vTerrainPos.y > vPos.y || (vTerrainPos.y <= vPos.y && vTerrainPos.y >= vPos.y - DeltaY))
{
vHitPos = vTerrainPos;
vHitNormal = EC_Utility.ToA3DVECTOR3(vTerrainNormal);
return true;
}
return false;
}
void VertAABBTrace(Vector3 vCenter, Vector3 vExt, ref Vector3 vHitPos, ref A3DVECTOR3 vHitNormal, float DeltaY/* =100.0f */)
{
vHitPos = vCenter;
vHitPos.y -= DeltaY;
LayerMask layerMask = 1 << 6 | 1 << 7;
if(!Physics.BoxCast(vCenter, vExt, (vCenter + Vector3.down).normalized,
out hit, transform.rotation, DeltaY, layerMask))
{
vHitPos = vCenter;
vHitNormal = EC_Utility.ToA3DVECTOR3(Vector3.up);
}
else
{
vHitPos = hit.point;
vHitNormal = EC_Utility.ToA3DVECTOR3(hit.normal);
}
}
void OnMsgHstExtProp(ECMSG Msg)
{
cmd_own_ext_prop pCmd = GPDataTypeHelper.FromBytes<cmd_own_ext_prop>((byte[])Msg.dwParam1);
m_ExtProps = pCmd.prop;
m_BasicProps.iStatusPt = (int) pCmd.status_point;
m_BasicProps.iAtkDegree = pCmd.attack_degree;
m_BasicProps.iDefDegree = pCmd.defend_degree;
m_BasicProps.iCritRate = pCmd.crit_rate;
m_BasicProps.iCritDamageBonus = pCmd.crit_damage_bonus;
m_BasicProps.iInvisibleDegree = pCmd.invisible_degree;
m_BasicProps.iAntiInvisibleDegree = pCmd.anti_invisible_degree;
m_BasicProps.iPenetration = pCmd.penetration;
m_BasicProps.iResilience = pCmd.resilience;
m_BasicProps.iVigour = pCmd.vigour;
}
}
public enum StateAnim
{
@@ -4683,7 +5153,6 @@ namespace BrewMonster
}
}
enum MOVE_DIR
{
MD_FORWARD = 0x01,
MD_RIGHT = 0x02,