From b487e24d8a040c3a9196301a8f9358c80e0057c1 Mon Sep 17 00:00:00 2001 From: vuong dinh hoang Date: Wed, 20 May 2026 15:08:09 +0700 Subject: [PATCH] fix action --- .../Samples/ExampleAnimator.controller | 70 ++++- .../Scripts/Managers/CECHPWorkSit.cs | 64 +++++ .../Scripts/Managers/CECHPWorkSit.cs.meta | 2 + .../Scripts/Managers/EC_HPWork.cs | 2 +- .../Scripts/Managers/EC_ManMatter.cs | 9 + .../Scripts/Managers/EC_ManPlayer.cs | 7 + Assets/PerfectWorld/Scripts/Move/CECPlayer.cs | 28 +- .../CSNetwork/C2SCommand/C2SCommand.cs | 15 + .../CSNetwork/C2SCommand/C2SCommandFactory.cs | 15 + .../Scripts/Network/CSNetwork/GPDataType.cs | 12 + .../Scripts/Network/CSNetwork/GameSession.cs | 53 ++++ .../Scripts/Network/UnityGameSession.cs | 41 +++ .../Scripts/Objet/Shortcut/CECShortcutSet.cs | 118 ++++---- .../Scripts/Players/CECActionSwitcherBase.cs | 3 + .../Scripts/Players/EC_ElsePlayer.cs | 17 ++ .../GamePlay/SkillUI/CDlgSkillSubListItem.cs | 2 - Assets/Resources/DebugCmdHistory.json | 16 +- Assets/Scripts/CECHostPlayer.HostCmd.cs | 259 ++++++++++++++++++ Assets/Scripts/CECHostPlayer.HostCmd.cs.meta | 2 + Assets/Scripts/CECHostPlayer.Interaction.cs | 1 + Assets/Scripts/CECHostPlayer.Sit.cs | 38 +++ Assets/Scripts/CECHostPlayer.Sit.cs.meta | 2 + Assets/Scripts/CECHostPlayer.cs | 10 +- Assets/Scripts/PlayerVisual.cs | 1 + 24 files changed, 693 insertions(+), 94 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs create mode 100644 Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs.meta create mode 100644 Assets/Scripts/CECHostPlayer.HostCmd.cs create mode 100644 Assets/Scripts/CECHostPlayer.HostCmd.cs.meta create mode 100644 Assets/Scripts/CECHostPlayer.Sit.cs create mode 100644 Assets/Scripts/CECHostPlayer.Sit.cs.meta diff --git a/Assets/EditorAttributes/Samples/ExampleAnimator.controller b/Assets/EditorAttributes/Samples/ExampleAnimator.controller index fcd51ccc2e..4d82241192 100644 --- a/Assets/EditorAttributes/Samples/ExampleAnimator.controller +++ b/Assets/EditorAttributes/Samples/ExampleAnimator.controller @@ -1,5 +1,57 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-6682150482281830067 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u6253\u5750_\u901A\u7528" + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 93519909dda6cca42a0c28127afbbb52, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &-4679316952246346250 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: "\u6253\u5750\u5FAA\u73AF_\u901A\u7528" + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: bf857f5576da777429ed5a6fd606294a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: --- !u!1107 &-4297166198488271538 AnimatorStateMachine: serializedVersion: 6 @@ -8,7 +60,13 @@ AnimatorStateMachine: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Base Layer - m_ChildStates: [] + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -6682150482281830067} + m_Position: {x: 330, y: 78, z: 0} + - serializedVersion: 1 + m_State: {fileID: -4679316952246346250} + m_Position: {x: 348, y: 166, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] @@ -18,7 +76,7 @@ AnimatorStateMachine: m_EntryPosition: {x: 50, y: 120, z: 0} m_ExitPosition: {x: 800, y: 120, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} - m_DefaultState: {fileID: 0} + m_DefaultState: {fileID: -6682150482281830067} --- !u!91 &9100000 AnimatorController: m_ObjectHideFlags: 0 @@ -33,25 +91,25 @@ AnimatorController: m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 0} + m_Controller: {fileID: 9100000} - m_Name: IntParam m_Type: 3 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 0} + m_Controller: {fileID: 9100000} - m_Name: BoolParam m_Type: 4 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 0} + m_Controller: {fileID: 9100000} - m_Name: TriggerParam m_Type: 9 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 - m_Controller: {fileID: 0} + m_Controller: {fileID: 9100000} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer diff --git a/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs b/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs new file mode 100644 index 0000000000..84821fec71 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs @@ -0,0 +1,64 @@ +/* + * FILE: CECHPWorkSit.cs + * + * DESCRIPTION: Host player sit work + * + * CONVERTED FROM: EC_HPWorkSit.cpp/EC_HPWorkSit.h + */ + +using BrewMonster; +using CSNetwork.GPDataType; + +namespace BrewMonster.Scripts +{ + public class CECHPWorkSit : CECHPWork + { + protected bool m_bBeSitting; + + public CECHPWorkSit(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_SIT, pWorkMan) + { + m_dwMask = Work_mask.MASK_SIT; + m_dwTransMask = Work_mask.MASK_STAND; + Reset(); + } + + public void SetBeSittingFlag(bool bTrue) + { + m_bBeSitting = bTrue; + } + + public override void Reset() + { + base.Reset(); + m_bBeSitting = false; + } + + public override bool CopyData(CECHPWork pWork) + { + if (!base.CopyData(pWork)) + return false; + + CECHPWorkSit pSrc = (CECHPWorkSit)pWork; + m_bBeSitting = pSrc.m_bBeSitting; + return true; + } + + protected override void OnFirstTick() + { + m_pHost.m_iMoveMode = (int)Move_Mode.MOVE_STAND; + if (m_bBeSitting) + m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_SITDOWN_LOOP); + else + { + m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_SITDOWN); + m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_SITDOWN_LOOP, true, 200, true); + } + } + + public override bool Tick(float dwDeltaTime) + { + base.Tick(dwDeltaTime); + return true; + } + } +} diff --git a/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs.meta b/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs.meta new file mode 100644 index 0000000000..fe6a91a001 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Managers/CECHPWorkSit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d9a9c005284728d428a534fcf337a5b1 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs index 4c734423b1..a92b763d96 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs @@ -649,7 +649,7 @@ namespace BrewMonster.Scripts //case CECHPWork.Host_work_ID.WORK_FOLLOW: pWork = new CECHPWorkFollow(this); break; case CECHPWork.Host_work_ID.WORK_FLYOFF: pWork = new CECHPWorkFly(this); break; case CECHPWork.Host_work_ID.WORK_FREEFALL: pWork = new CECHPWorkFall(this); break; - //case CECHPWork.Host_work_ID.WORK_SIT: pWork = new CECHPWorkSit(this); break; + case CECHPWork.Host_work_ID.WORK_SIT: pWork = new CECHPWorkSit(this); break; case CECHPWork.Host_work_ID.WORK_PICKUP: pWork = new EC_HPWorkPick(this); break; case CECHPWork.Host_work_ID.WORK_CONCENTRATE: pWork = new CECHPWorkConcentrate(this); break; //case CECHPWork.Host_work_ID.WORK_REVIVE: pWork = new CECHPWorkRevive(this); break; diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManMatter.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManMatter.cs index 73d1204849..88fe69e3cc 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_ManMatter.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManMatter.cs @@ -343,6 +343,15 @@ namespace PerfectWorld.Scripts.Managers } return best; } + + /// Port of CECMatterMan::FindMatterNearHost — nearest pickupable ground matter. + public CECMatter FindMatterNearHost(float fRadius, bool bPickOnly = true) + { + CECHostPlayer host = CECGameRun.Instance?.GetHostPlayer(); + if (host == null) + return null; + return GetNearestPickupableMatter(host.GetPos(), fRadius); + } public CECMatter CreateMatter(info_matter info) { diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs index d679e9ccc8..c01e9b4148 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs @@ -67,6 +67,7 @@ namespace PerfectWorld.Scripts.Managers case EC_MsgDef.MSG_PM_PLAYERDOEMOTE: case EC_MsgDef.MSG_PM_PLAYERGATHER: case EC_MsgDef.MSG_PM_PLAYERFLY: + case EC_MsgDef.MSG_PM_PLAYERSITDOWN: case EC_MsgDef.MSG_PM_PLAYERMOUNT: case EC_MsgDef.MSG_PM_PLAYERCHGSHAPE: case EC_MsgDef.MSG_PM_PLAYERSKILLRESULT: @@ -754,6 +755,12 @@ namespace PerfectWorld.Scripts.Managers cid = (GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1)).object_id; break; + case EC_MsgDef.MSG_PM_PLAYERSITDOWN: + if (Convert.ToInt32(Msg.dwParam2) == CommandID.OBJECT_SIT_DOWN) + cid = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1).id; + else + cid = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1).id; + break; case EC_MsgDef.MSG_PM_PLAYERMOUNT: cid = (GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1)).id; break; diff --git a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs index 0a24e3ea40..aed6742a2f 100644 --- a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs @@ -1544,21 +1544,21 @@ namespace BrewMonster szAct= $"{action.data.ActionPrefix}_{action.data.action_weapon_suffix[weapon_type].Suffix}"; - // CECModel pRightHandWeapon = GetRightHandWeapon(); - // if( !bQueue ) - // { - // PlayNonSkillActionWithName(iAction, szAct, bRestart, iTransTime); + CECModel pRightHandWeapon = GetRightHandWeapon(); + if( !bQueue ) + { + m_pActionController. PlayNonSkillActionWithName(iAction, szAct, bRestart, iTransTime); - // if(pRightHandWeapon && IsUsingMagicWeapon()) - // pRightHandWeapon->PlayActionByName(_GenWeaponActionName(szAct, m_iGender), 1.0f, bRestart, iTransTime, true, iAction); - // } - // else - // { - // QueueNonSkillActionWithName(iAction, szAct, iTransTime, bRestart, false, false, true, NULL, COMACT_FLAG_MODE_ONCE_MULTIIGNOREGFX); + // if(pRightHandWeapon && IsUsingMagicWeapon()) + // pRightHandWeapon->PlayActionByName(_GenWeaponActionName(szAct, m_iGender), 1.0f, bRestart, iTransTime, true, iAction); + } + else + { + m_pActionController. QueueNonSkillActionWithName(iAction, szAct, iTransTime, bRestart, false, false, true, null, COMACT_FLAG_MODE_ONCE_MULTIIGNOREGFX); - // if(pRightHandWeapon && IsUsingMagicWeapon()) - // pRightHandWeapon->QueueAction(_GenWeaponActionName(szAct, m_iGender), iTransTime, iAction, bRestart ? true : false); - // } + // if(pRightHandWeapon && IsUsingMagicWeapon()) + // pRightHandWeapon->QueueAction(_GenWeaponActionName(szAct, m_iGender), iTransTime, iAction, bRestart ? true : false); + } if (m_iBuddyId != 0) { @@ -1619,7 +1619,7 @@ namespace BrewMonster // UpdateWeaponHangerPosByAction(iAction); // } // EventBus.PublishChannel(m_PlayerInfo.cid, new PlayActionEvent(szShapeName, szAct, iTransTime)); - m_pActionController.PlayNonSkillActionWithName(iAction, szAct, bRestart, iTransTime); + // m_pActionController.PlayNonSkillActionWithName(iAction, szAct, bRestart, iTransTime); return true; } else diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommand.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommand.cs index d6d1719eec..8d22f9474a 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommand.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommand.cs @@ -314,6 +314,21 @@ namespace CSNetwork.C2SCommand public int id_task; // Task ID } + public struct cmd_assist_sel + { + public int idTeamMember; + } + + public struct cmd_bind_player_request + { + public int target; + } + + public struct cmd_bind_player_invite + { + public int target; + } + public struct cmd_error_msg { public int iMessage; diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs index 859bcb5515..16d9809264 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs @@ -1045,6 +1045,21 @@ namespace CSNetwork.C2SCommand return SerializeCommand(CommandID.ACTIVE_RUSH_FLY, pCmd); } + public static Octets CreateTeamAssistSelCommand(int idTeamMember) + { + return SerializeCommand(CommandID.ASSIST_SELECT, new cmd_assist_sel { idTeamMember = idTeamMember }); + } + + public static Octets CreateBindPlayerRequestCommand(int idTarget) + { + return SerializeCommand(CommandID.BIND_PLAYER_REQUEST, new cmd_bind_player_request { target = idTarget }); + } + + public static Octets CreateBindPlayerInviteCommand(int idTarget) + { + return SerializeCommand(CommandID.BIND_PLAYER_INVITE, new cmd_bind_player_invite { target = idTarget }); + } + public static Octets CreatePetCtrlCmd(int idTarget, int cmd, byte[] pParamBuf, int iParamLen) { cmd_pet_ctrl pCmd = new cmd_pet_ctrl(); diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs index 0012496751..1aa9283ae3 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs @@ -2830,6 +2830,18 @@ namespace CSNetwork.GPDataType public int object_id; }; + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct cmd_object_sit_down + { + public int id; + }; + + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct cmd_object_stand_up + { + public int id; + }; + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct cmd_host_rush_fly { diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index 6f48c4389b..9ba8cf2025 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -1572,6 +1572,11 @@ namespace CSNetwork break; } + case CommandID.OBJECT_SIT_DOWN: + case CommandID.OBJECT_STAND_UP: + + EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSITDOWN, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader); + break; default: #if UNITY_EDITOR if (isDebug) @@ -2962,6 +2967,54 @@ namespace CSNetwork SendProtocol(gamedatasend); } + public void c2s_SendCmdSitDown() + { + var g = new gamedatasend(); + g.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.SIT_DOWN); + SendProtocol(g); + } + + public void c2s_SendCmdTeamAssistSel(int idTeamMember) + { + var g = new gamedatasend(); + g.Data = C2SCommandFactory.CreateTeamAssistSelCommand(idTeamMember); + SendProtocol(g); + } + + public void c2s_SendCmdOpenBoothTest() + { + var g = new gamedatasend(); + g.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.OPEN_BOOTH_TEST); + SendProtocol(g); + } + + public void c2s_SendCmdBindPlayerRequest(int idTarget) + { + var g = new gamedatasend(); + g.Data = C2SCommandFactory.CreateBindPlayerRequestCommand(idTarget); + SendProtocol(g); + } + + public void c2s_SendCmdBindPlayerInvite(int idTarget) + { + var g = new gamedatasend(); + g.Data = C2SCommandFactory.CreateBindPlayerInviteCommand(idTarget); + SendProtocol(g); + } + + /// Port of CECGameSession::trade_Start. + public bool trade_Start(int idTarget) + { + var p = new tradestart + { + Roleid = m_iCharID, + Partner_roleid = idTarget, + Localsid = (int)_localsid + }; + SendProtocol(p); + return true; + } + public void c2s_SendCmdPetCtrl(int idTarget, int cmd, byte[] pParamBuf, int iParamLen) { gamedatasend gamedatasend = new gamedatasend(); diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs index 2551c38c7b..6c95b6d15d 100644 --- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs @@ -655,6 +655,42 @@ namespace BrewMonster.Network { Instance._gameSession.c2s_SendCmdStandUp(); } + + public static void c2s_CmdSitDown() + { + BMLogger.LogError("HoangDev: c2s_CmdSitDown"); + Instance._gameSession.c2s_SendCmdSitDown(); + } + + public static void c2s_CmdTeamAssistSel(int idTeamMember) + { + Instance._gameSession.c2s_SendCmdTeamAssistSel(idTeamMember); + } + + public static void c2s_CmdActiveRushFly(bool bActive) + { + Instance._gameSession.c2s_SendCmdActiveRushFly(bActive); + } + + public static void c2s_CmdOpenBoothTest() + { + Instance._gameSession.c2s_SendCmdOpenBoothTest(); + } + + public static void c2s_CmdBindPlayerRequest(int idTarget) + { + Instance._gameSession.c2s_SendCmdBindPlayerRequest(idTarget); + } + + public static void c2s_CmdBindPlayerInvite(int idTarget) + { + Instance._gameSession.c2s_SendCmdBindPlayerInvite(idTarget); + } + + public static bool trade_Start(int idTarget) + { + return Instance._gameSession.trade_Start(idTarget); + } #region Task public static void c2s_CmdGetAllData(bool byPack, bool byEquip, bool byTask) { @@ -666,6 +702,11 @@ namespace BrewMonster.Network { Instance._gameSession.c2s_SendCmdEmoteAction(wPose); } + + public static void c2s_CmdSessionEmote(int iPose) + { + Instance._gameSession.c2s_SendCmdEmoteAction((uint)iPose); + } public static void c2s_CmdTaskNotify( byte[] pBuf, uint sz) { if (Instance != null && Instance._gameSession != null) diff --git a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs index 63a08530c1..d5d1f683f6 100644 --- a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs +++ b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs @@ -17,6 +17,7 @@ using BrewMonster.Assets.PerfectWorld.Scripts.Skills; using BrewMonster.Network; using BrewMonster.Scripts; using BrewMonster.Scripts.Skills; +using static BrewMonster.Scripts.FixedMsg; using CSNetwork.C2SCommand; using CSNetwork.GPDataType; using CSNetwork.S2CCommand; @@ -513,7 +514,7 @@ namespace BrewMonster data.AddRange(BitConverter.GetBytes((int)cmdSC.GetParam())); break; } - + case CECShortcut.ShortcutType.SCT_SKILL: { CECSCSkill skillSC = (CECSCSkill)pSC; @@ -949,61 +950,61 @@ namespace BrewMonster public override bool Execute() { CECHostPlayer pHost = CECGameRun.Instance.GetHostPlayer(); - if (!pHost || !pHost.IsAllResReady()) + if (pHost == null || !pHost.IsAllResReady()) return false; - // if (GetCoolTime(0)>0) - // { - // bool bForbidCmd = true; - // if (m_iCommand == CMD_RUSHFLY && pHost.GetRushFlyFlag()) - // bForbidCmd = false; - // - // if (bForbidCmd) - // { - // g_pGame.GetGameRun().AddFixedMessage(FIXMSG_CMD_INCOOLTIME); - // return false; - // } - // } - switch (m_iCommand) + int iMax = 0; + if (GetCoolTime(ref iMax) > 0) { - // case CMD_SITDOWN: pHost.CmdSitDown(!pHost.IsSitting()); break; - // case CMD_WALKRUN: pHost.CmdWalkRun(!pHost.GetWalkRunFlag()); break; + bool bForbidCmd = true; + if ((CommandID)m_iCommand == CMD_RUSHFLY && pHost.GetRushFlyFlag()) + bForbidCmd = false; + + if (bForbidCmd) + { + CECGameRun.Instance?.AddFixedMessage((int)FIXMSG_CMD_INCOOLTIME); + return false; + } + } + BMLogger.LogError("HoangDev: (CommandID)m_iCommand:"+(CommandID)m_iCommand); + switch ((CommandID)m_iCommand) + { + case CMD_SITDOWN: pHost.CmdSitDown(!pHost.IsSitting()); break; + case CMD_WALKRUN: pHost.CmdWalkRun(!pHost.GetWalkRunFlag()); break; // case CMD_NORMALATTACK: pHost.CmdNormalAttack(); break; - // case CMD_FINDTARGET: pHost.CmdFindTarget(); break; - // case CMD_ASSISTATTACK: pHost.CmdAssistAttack(); break; - // case CMD_INVITETOTEAM: pHost.CmdInviteToTeam(); break; - // case CMD_LEAVETEAM: pHost.CmdLeaveTeam(); break; - // case CMD_KICKTEAMMEM: pHost.CmdKickTeamMember(); break; - // case CMD_FINDTEAM: pHost.CmdFindTeam(); break; - // case CMD_STARTTRADE: pHost.CmdStartTrade(); break; - // case CMD_SELLBOOTH: pHost.CmdSellBooth(); break; - // case CMD_BUYBOOTH: pHost.CmdBuyBooth(); break; - case (int)CommandID.CMD_PLAYPOSE: pHost.CmdStartPose((int)m_dwParam); break; - // case CMD_INVITETOFACTION: pHost.CmdInviteToFaction(); break; - case (int)CommandID.CMD_FLY: + case CMD_FINDTARGET: pHost.CmdFindTarget(); break; + case CMD_ASSISTATTACK: pHost.CmdAssistAttack(); break; + case CMD_INVITETOTEAM: pHost.CmdInviteToTeam(); break; + case CMD_LEAVETEAM: pHost.CmdLeaveTeam(); break; + case CMD_KICKTEAMMEM: pHost.CmdKickTeamMember(); break; + case CMD_FINDTEAM: pHost.CmdFindTeam(); break; + case CMD_STARTTRADE: pHost.CmdStartTrade(); break; + case CMD_SELLBOOTH: pHost.CmdSellBooth(); break; + case CMD_BUYBOOTH: pHost.CmdBuyBooth(); break; + case CMD_PLAYPOSE: pHost.CmdStartPose((int)m_dwParam); break; + case CMD_INVITETOFACTION: pHost.CmdInviteToFaction(); break; + case CMD_FLY: { // 如果骑乘要飞行,则这些 action switcher,否则 CmdFly - // If riding wants to fly, then these action switcher, otherwise CmdFly - // Call CmdFly(true) to match F4 key behavior - // Manual fly toggle should also cancel any active auto-route/AutoPF move. - // Use same behavior as local input (F4) so the player regains control immediately. - var wm = pHost.GetWorkMan(); - if (wm != null) + // If riding wants to fly, use action switcher; otherwise CmdFly + if (pHost.GetActionSwitcher()?.OnRideToFlyAction() != true) { - var mw = wm.GetRunningWork(CECHPWork.Host_work_ID.WORK_MOVETOPOS) as CECHPWorkMove; - if (mw != null && mw.GetAutoMove()) + var wm = pHost.GetWorkMan(); + if (wm != null) { - wm.FinishRunningWork(CECHPWork.Host_work_ID.WORK_MOVETOPOS); + var mw = wm.GetRunningWork(CECHPWork.Host_work_ID.WORK_MOVETOPOS) as CECHPWorkMove; + if (mw != null && mw.GetAutoMove()) + wm.FinishRunningWork(CECHPWork.Host_work_ID.WORK_MOVETOPOS); } + CECIntelligentRoute.Instance().ResetSearch(); + pHost.CmdFly(true); } - CECIntelligentRoute.Instance().ResetSearch(); - pHost.CmdFly(true); break; } // case CMD_PICKUP: pHost.CmdPickup(); break; - // case CMD_GATHER: pHost.CmdGather(); break; - // case CMD_RUSHFLY: pHost.CmdRushFly(); break; - // case CMD_BINDBUDDY: pHost.CmdBindBuddy(pHost.GetSelectedTarget()); break; + case CMD_GATHER: pHost.CmdGather(); break; + case CMD_RUSHFLY: pHost.CmdRushFly(); break; + case CMD_BINDBUDDY: pHost.CmdBindBuddy(pHost.GetSelectedTarget()); break; default: return false; } @@ -1079,37 +1080,34 @@ namespace BrewMonster return szIconFile; } - // Get item cool time - int GetCoolTime(ref int piMax/* NULL */) + public override int GetCoolTime(ref int piMax) { CECHostPlayer pHost = CECGameRun.Instance.GetHostPlayer(); int iTime = 0; + piMax = 0; + + if (pHost == null) + return 0; switch ((CommandID)m_iCommand) { - case CommandID.CMD_RUSHFLY: - - // iTime = pHost.GetCoolTime(GP_CT_FLY_RUSH, piMax); + case CMD_RUSHFLY: + iTime = pHost.GetCoolTime((int)CoolTimeIndex.GP_CT_FLY_RUSH, out piMax); break; - case CommandID.CMD_PLAYPOSE: - // todo need to get cooldown here - // iTime = pHost.GetCoolTime(GP_CT_EMOTE, piMax); + case CMD_PLAYPOSE: + iTime = pHost.GetCoolTime((int)CoolTimeIndex.GP_CT_EMOTE, out piMax); break; - case CommandID.CMD_BINDBUDDY: + case CMD_BINDBUDDY: { - // CECCounter& cnt = pHost.GetBindCmdCoolCnt(); - // iTime = cnt.GetPeriod() - cnt.GetCounter(); - // - // if (piMax) - // *piMax = cnt.GetPeriod(); - + CECCounter cnt = pHost.GetBindCmdCoolCnt(); + iTime = (int)(cnt.GetPeriod() - cnt.GetCounter()); + piMax = (int)cnt.GetPeriod(); break; } default: - - // if (piMax) *piMax = 0; + piMax = 0; break; } diff --git a/Assets/PerfectWorld/Scripts/Players/CECActionSwitcherBase.cs b/Assets/PerfectWorld/Scripts/Players/CECActionSwitcherBase.cs index 1b270a0c84..0a9a6102aa 100644 --- a/Assets/PerfectWorld/Scripts/Players/CECActionSwitcherBase.cs +++ b/Assets/PerfectWorld/Scripts/Players/CECActionSwitcherBase.cs @@ -206,6 +206,9 @@ namespace BrewMonster.Assets.PerfectWorld.Scripts.Players public void SetPostMessageFlag(bool bCan) { m_bCanAddMsg = bCan; } public virtual bool OnFlyToRideAction(int petIndex) { return false; } // fly -> ride + + /// Ride mount then fly (shortcut CMD_FLY). 骑乘后飞行 + public virtual bool OnRideToFlyAction() { return false; } } public enum EMsgActionSwitcher diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs index b7c546ae47..894b3ee3d1 100644 --- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs +++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs @@ -497,6 +497,7 @@ namespace BrewMonster switch (Msg.dwMsg) { case EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERSITDOWN: OnMsgPlayerSitDown(Msg); break; case EC_MsgDef.MSG_PM_PLAYERBASEINFO: OnMsgPlayerBaseInfo(Msg); break; case EC_MsgDef.MSG_PM_PLAYEREXTSTATE: OnMsgPlayerExtState(Msg); break; case EC_MsgDef.MSG_PM_PLAYEREQUIPDATA: OnMsgPlayerEquipData(Msg); break; @@ -1202,6 +1203,22 @@ namespace BrewMonster m_dwStates |= (uint)PlayerNPCState.GP_STATE_FLY; } + void OnMsgPlayerSitDown(ECMSG Msg) + { + if (Convert.ToInt32(Msg.dwParam2) == CommandID.OBJECT_SIT_DOWN) + { + m_dwStates |= (uint)PlayerNPCState.GP_STATE_SITDOWN; + m_pEPWorkMan.StartNormalWork(new CECEPWorkIdle(m_pEPWorkMan, CECEPWork.Idle_work_type.IDLE_SITDOWN, 0, 0)); + } + else // OBJECT_STAND_UP + { + m_dwStates &= ~(uint)PlayerNPCState.GP_STATE_SITDOWN; + if (m_pEPWorkMan.IsWorkRunning(CECEPWork.EP_work_ID.WORK_IDLE)) + PlayAction((int)PLAYER_ACTION_TYPE.ACT_STANDUP); + m_pEPWorkMan.FinishIdleWork(CECEPWork.Idle_work_type.IDLE_SITDOWN); + } + } + // Load player equipments bool LoadPlayerEquipments() { diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs index 1b1ffd1083..c06c7d3e5d 100644 --- a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs +++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs @@ -260,8 +260,6 @@ namespace BrewMonster enumSkillLearnedState learnedState = model.GetSkillLearnedState(m_skillID); int requiredItem = model.GetRequiredBook(m_skillID, m_curLevel + 1); - if(m_skillID == 1) - BMLogger.LogError($"UpdateUpgradeBtn learnedState:{learnedState}, fitLevel={fitLevel}, requiredItem:{requiredItem}, model.CheckPreItem(requiredItem):{model.CheckPreItem(requiredItem)}"); if (enumSkillLearnedState.SKILL_FULL != learnedState && enumSkillFitLevelState.SKILL_FIT_LEVEL == fitLevel && (requiredItem == 0 || model.CheckPreItem(requiredItem))) diff --git a/Assets/Resources/DebugCmdHistory.json b/Assets/Resources/DebugCmdHistory.json index 5da8d2d05a..43b4aedfe2 100644 --- a/Assets/Resources/DebugCmdHistory.json +++ b/Assets/Resources/DebugCmdHistory.json @@ -1,18 +1,18 @@ { "items": [ - { - "header": 1992, - "param": 0, - "hasParam": false, - "describe": "Buff rage", - "lastUsedUtcTicks": 639138321717437357 - }, { "header": 8903, "param": 73125, "hasParam": true, "describe": "NoCooldown", - "lastUsedUtcTicks": 639138321659072960 + "lastUsedUtcTicks": 639147565037094641 + }, + { + "header": 1992, + "param": 0, + "hasParam": false, + "describe": "Buff rage", + "lastUsedUtcTicks": 639147564992569650 }, { "header": 2000, diff --git a/Assets/Scripts/CECHostPlayer.HostCmd.cs b/Assets/Scripts/CECHostPlayer.HostCmd.cs new file mode 100644 index 0000000000..229e964fe1 --- /dev/null +++ b/Assets/Scripts/CECHostPlayer.HostCmd.cs @@ -0,0 +1,259 @@ +using BrewMonster.Managers; +using BrewMonster.Network; +using BrewMonster.Scripts; +using BrewMonster.UI; +using CSNetwork.GPDataType; +using PerfectWorld.Scripts.Managers; +using UnityEngine; +using static BrewMonster.Scripts.CECHPWork; +using static BrewMonster.CECHPWorkTrace; + +namespace BrewMonster +{ + public partial class CECHostPlayer + { + public bool GetWalkRunFlag() => m_bWalkRun; + public bool GetRushFlyFlag() => m_bRushFly; + + CECCounter m_BindCmdCoolCnt = new CECCounter(); + + public CECCounter GetBindCmdCoolCnt() => m_BindCmdCoolCnt; + + void InitBindCmdCoolCnt() + { + m_BindCmdCoolCnt.SetPeriod(35000); + m_BindCmdCoolCnt.Reset(true); + } + + // Sit down / Stand up + // 坐下 / 站起 + public bool CmdSitDown(bool bSitDown) + { + BMLogger.LogError("HoangDev: CmdSitDown:"+bSitDown); + if (!CanDo(ActionCanDo.CANDO_SITDOWN)) + return false; + + if (bSitDown) + UnityGameSession.c2s_CmdSitDown(); + else + UnityGameSession.c2s_CmdStandUp(); + + return true; + } + + // Switch walk and run state + // 切换走/跑状态 + public bool CmdWalkRun(bool bRun) + { + m_bWalkRun = bRun; + return true; + } + + // Find a near target (stub) + // 寻找附近目标(占位) + public bool CmdFindTarget() + { + return true; + } + + // Select other player's attacked target + // 选择队友正在攻击的目标 + public bool CmdAssistAttack() + { + if (m_pWorkMan.IsSitting()) + { + UnityGameSession.c2s_CmdStandUp(); + return false; + } + + if (CanDo(ActionCanDo.CANDO_ASSISTSEL)) + UnityGameSession.c2s_CmdTeamAssistSel(m_idSelTarget); + + return true; + } + + // Invite selected player to join team + // 邀请选中的玩家入队 + public bool CmdInviteToTeam() + { + if (IsDead() || !GPDataTypeHelper.ISPLAYERID(m_idSelTarget) || m_idSelTarget == GetCharacterID()) + return false; + + UnityGameSession.c2s_CmdTeamInvite(m_idSelTarget); + return true; + } + + // Leave current team (confirmation dialog) + // 离开当前队伍(确认框) + public bool CmdLeaveTeam() + { + if (IsDead() || m_pTeam == null) + return false; + + string szMsg = CECUIManager.Instance?.GetInGameUIMan()?.GetStringFromTable(235) + ?? "Are you sure you want to leave the team?"; + CECUIManager.Instance?.ShowMessageBoxYesAndNo("", szMsg, null, + () => UnityGameSession.c2s_CmdTeamLeaveParty(), null); + return true; + } + + // Kick one member of team (stub) + // 踢出队员(占位) + public bool CmdKickTeamMember() + { + return true; + } + + // Search for a team (stub) + // 寻找队伍(占位) + public bool CmdFindTeam() + { + return true; + } + + // Start trade with other selected player + // 与选中玩家开始交易 + public bool CmdStartTrade() + { + if (m_pWorkMan.IsSitting()) + { + UnityGameSession.c2s_CmdStandUp(); + return false; + } + + if (!CanDo(ActionCanDo.CANDO_TRADE)) + return false; + + if (!GPDataTypeHelper.ISPLAYERID(m_idSelTarget) || m_idSelTarget == m_PlayerInfo.cid) + return false; + + UnityGameSession.trade_Start(m_idSelTarget); + return true; + } + + // Open booth for selling items + // 开摊出售 + public bool CmdSellBooth() + { + if (IsInvisible()) + { + CECGameRun.Instance?.AddFixedMessage((int)FixedMsg.FIXMSG_CANNOT_USE_WHEN_INVISIBLE); + return false; + } + + if (m_pWorkMan.IsSitting()) + { + UnityGameSession.c2s_CmdStandUp(); + return false; + } + + if (m_pWorkMan.IsFollowing()) + m_pWorkMan.FinishAllWork(true); + + if (!CanDo(ActionCanDo.CANDO_BOOTH)) + return false; + + UnityGameSession.c2s_CmdOpenBoothTest(); + return true; + } + + // Open booth for buying items (stub) + // 开摊收购(占位) + public bool CmdBuyBooth() + { + return true; + } + + // Invite selected player to join faction (stub) + // 邀请入帮(占位) + public bool CmdInviteToFaction() + { + return true; + } + + /*public bool CmdPickup() + { + if (m_pWorkMan.IsSitting()) + { + UnityGameSession.c2s_CmdStandUp(); + return false; + } + + if (!CanDo(ActionCanDo.CANDO_PICKUP)) + return false; + + CECHPWork pWork = m_pWorkMan.GetWork(Host_work_ID.WORK_TRACEOBJECT); + if (pWork is CECHPWorkTrace pTrace && + pTrace.GetTraceReason() == Trace_reason.TRACE_PICKUP) + return true; + + EC_ManMatter matterMan = EC_ManMessageMono.Instance?.EC_ManMatter; + CECMatter pMatter = matterMan?.FindMatterNearHost(10.0f, true); + if (pMatter != null) + PickupObject(pMatter.GetMatterID(), false); + + return true; + }*/ + + public bool CmdGather() + { + if (m_pWorkMan.IsSitting()) + { + UnityGameSession.c2s_CmdStandUp(); + return false; + } + + if (!CanDo(ActionCanDo.CANDO_GATHER)) + return false; + + CECHPWork pWork = m_pWorkMan.GetWork(Host_work_ID.WORK_TRACEOBJECT); + if (pWork is CECHPWorkTrace pTrace && + pTrace.GetTraceReason() == Trace_reason.TRACE_GATHER) + return true; + + PickupObject(m_idSelTarget, true); + return true; + } + + public bool CmdRushFly() + { + if (m_bAboutToDie || IsDead() || !IsFlying()) + return false; + + UnityGameSession.c2s_CmdActiveRushFly(!m_bRushFly); + return true; + } + + public bool CmdBindBuddy(int idTarget) + { + if (!m_BindCmdCoolCnt.IsFull()) + { + CECGameRun.Instance?.AddFixedMessage((int)FixedMsg.FIXMSG_CMD_INCOOLTIME); + return false; + } + + if (!CanDo(ActionCanDo.CANDO_BINDBUDDY) || !GPDataTypeHelper.ISPLAYERID(idTarget) || + idTarget == GetCharacterID()) + return false; + + EC_ElsePlayer pPlayer = m_pPlayerMan?.GetElsePlayer(idTarget); + if (pPlayer == null || pPlayer.GetGender() == GetGender()) + return false; + + A3DVECTOR3 vDist = pPlayer.GetServerPos() - GetPos(); + if (vDist.Magnitude() >= 2.8f) + { + CECGameRun.Instance?.AddFixedMessage((int)FixedMsg.FIXMSG_TARGETISFAR); + return false; + } + + if (GetGender() == GENDER.GENDER_MALE) + UnityGameSession.c2s_CmdBindPlayerInvite(idTarget); + else + UnityGameSession.c2s_CmdBindPlayerRequest(idTarget); + + m_BindCmdCoolCnt.Reset(); + return true; + } + } +} diff --git a/Assets/Scripts/CECHostPlayer.HostCmd.cs.meta b/Assets/Scripts/CECHostPlayer.HostCmd.cs.meta new file mode 100644 index 0000000000..63626f90d5 --- /dev/null +++ b/Assets/Scripts/CECHostPlayer.HostCmd.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 61bcfdcbd8ffcd746b0e59990cc6970b \ No newline at end of file diff --git a/Assets/Scripts/CECHostPlayer.Interaction.cs b/Assets/Scripts/CECHostPlayer.Interaction.cs index c49bd9e17a..1fa25b3a17 100644 --- a/Assets/Scripts/CECHostPlayer.Interaction.cs +++ b/Assets/Scripts/CECHostPlayer.Interaction.cs @@ -135,6 +135,7 @@ namespace BrewMonster int iAction = (int)PLAYER_ACTION_TYPE.ACT_STAND; bool bSession = false; + BMLogger.LogError("HoangDev: idEmote "+idEmote); // Select action according to pose switch (idEmote) { diff --git a/Assets/Scripts/CECHostPlayer.Sit.cs b/Assets/Scripts/CECHostPlayer.Sit.cs new file mode 100644 index 0000000000..b98bfbc372 --- /dev/null +++ b/Assets/Scripts/CECHostPlayer.Sit.cs @@ -0,0 +1,38 @@ +using System; +using BrewMonster.Network; +using BrewMonster.Scripts; +using BrewMonster.Scripts.Task; +using CSNetwork; +using CSNetwork.GPDataType; + +namespace BrewMonster +{ + public partial class CECHostPlayer + { + private void OnMsgPlayerSitDown(ECMSG Msg) + { + if (Convert.ToInt32(Msg.dwParam2) == CommandID.OBJECT_SIT_DOWN) + { + if (m_pWorkMan.IsMovingToPosition() || + m_pWorkMan.IsTracing() || + m_pWorkMan.IsFollowing()) + { + m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(GetPos()), GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_RUN); + } + + m_dwStates |= (uint)PlayerNPCState.GP_STATE_SITDOWN; + CECHPWorkSit pWork = (CECHPWorkSit)m_pWorkMan.CreateWork(CECHPWork.Host_work_ID.WORK_SIT); + pWork.SetBeSittingFlag(false); + m_pWorkMan.StartWork_p1(pWork); + + GetTaskInterface().SetEmotion((int)TaskInterface.CommandTaskAction.CMD_EMOTION_SITDOWN); + } + else if (Convert.ToInt32(Msg.dwParam2) == CommandID.OBJECT_STAND_UP) + { + m_dwStates &= ~(uint)PlayerNPCState.GP_STATE_SITDOWN; + CECHPWorkStand pWork = (CECHPWorkStand)m_pWorkMan.CreateWork(CECHPWork.Host_work_ID.WORK_STAND); + m_pWorkMan.StartWork_p1(pWork); + } + } + } +} diff --git a/Assets/Scripts/CECHostPlayer.Sit.cs.meta b/Assets/Scripts/CECHostPlayer.Sit.cs.meta new file mode 100644 index 0000000000..7d483133ab --- /dev/null +++ b/Assets/Scripts/CECHostPlayer.Sit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3b8afadf7e5c78f409d4e8746ef6ea77 \ No newline at end of file diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index ad0d5795c0..b0ddb19f6b 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -565,6 +565,7 @@ namespace BrewMonster case EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break; case EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break; case EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break; + case EC_MsgDef.MSG_PM_PLAYERSITDOWN: OnMsgPlayerSitDown(Msg); break; case EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break; case EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break; case EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break; @@ -1327,6 +1328,7 @@ namespace BrewMonster m_IncantCnt = new CECCounter(); m_IncantCnt.SetPeriod(1000); m_IncantCnt.Reset(true); + InitBindCmdCoolCnt(); m_bEnterGame = false; } @@ -3374,7 +3376,8 @@ namespace BrewMonster if (iPose == (int)RoleExpression.ROLEEXP_SITDOWN) { - // UnityGameSession.c2s_CmdSessionEmote(iPose); + BMLogger.LogError("HoangDev: c2s_CmdSessionEmote: "+iPose); + UnityGameSession.c2s_CmdSessionEmote(iPose); } else if (iPose == (int)RoleExpression.ROLEEXP_KISS) { @@ -3655,9 +3658,10 @@ namespace BrewMonster m_PetOptCnt.IncCounter(iRealTime); // Bind command cool counter - /* if (m_BindCmdCoolCnt.IncCounter(dwDeltaTime)) - m_BindCmdCoolCnt.Reset(true); + if (m_BindCmdCoolCnt.IncCounter(iRealTime)) + m_BindCmdCoolCnt.Reset(true); + /* // Auto fashion time counter if (m_bAutoFashion && GetBoothState() != 2 && !IsShapeChanged()) { diff --git a/Assets/Scripts/PlayerVisual.cs b/Assets/Scripts/PlayerVisual.cs index f0f7bed33b..711a9d3af7 100644 --- a/Assets/Scripts/PlayerVisual.cs +++ b/Assets/Scripts/PlayerVisual.cs @@ -221,6 +221,7 @@ namespace BrewMonster { return; } + BMLogger.LogError("HoangDev animationName:"+animationName); bool isState = namedAnimancer.States.TryGet(animationName, out var existingState) ? true : false; if (isState) {