- fix anim elseplayer.
- fix auto move to target of HP.
- fix postion wrong went use joystick after auto move of HP.
This commit is contained in:
Tungdv
2025-11-03 19:59:00 +07:00
parent 25f717dc00
commit cfc13087e4
12 changed files with 106 additions and 61 deletions
@@ -232,6 +232,7 @@ public class CECTracedNPC : CECTracedObject
if (m_iObjectId == m_pHost.m_idSelTarget &&
m_pHost.AttackableJudge(m_iObjectId, m_bForceAttack) == 1)
{
Debug.LogError("c2s_CmdNormalAttack");
byte byPVPMask = EC_Utility.glb_BuildPVPMask(m_bForceAttack);
UnityGameSession.c2s_CmdNormalAttack(byPVPMask);
m_pHost.m_bPrepareFight = true;
@@ -345,7 +346,6 @@ public class CECTracedPlayer : CECTracedObject
if (m_iObjectId == m_pHost.m_idSelTarget &&
m_pHost.AttackableJudge(m_iObjectId, m_bForceAttack) == 1)
{
Debug.LogError("c2s_CmdNormalAttack");
byte byPVPMask = EC_Utility.glb_BuildPVPMask(m_bForceAttack);
UnityGameSession.c2s_CmdNormalAttack(byPVPMask);
m_pHost.m_bPrepareFight = true;
@@ -580,7 +580,6 @@ public class CECHPWorkTrace : CECHPWork
public override bool Tick(float dwDeltaTime)
{
base.Tick(dwDeltaTime);
Debug.LogError("Tick");
CheckPrepSkill();
UpdateResetUseAutoPF();
@@ -606,7 +605,6 @@ public class CECHPWorkTrace : CECHPWork
//return true;
if (m_pTraceObject.CanTouchFrom(m_pHost.GetPos() + new A3DVECTOR3(0f, m_pHost.m_CDRInfo.vExtent.y, 0f)))
{
Debug.LogError("OnTouchTarget");
OnTouchTarget();
return true;
}
@@ -767,6 +765,7 @@ public class CECHPWorkTrace : CECHPWork
public void OnTouchTarget()
{
Debug.LogError("EC_HPWorkTrace OnTouchTarget StopMove");
StopMove(true);
m_bActionDone = m_pTraceObject.OnTouched();
}
@@ -829,6 +828,7 @@ public class CECHPWorkTrace : CECHPWork
m_vCurDirH = vDir;
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime);
m_pHost.SetDirAndUp(EC_Utility.ToVector3(vCurPos - m_pHost.GetPos()), Vector3.up);
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
m_pHost.m_MoveCtrl.SetSlideLock(true);
@@ -880,6 +880,8 @@ public class CECHPWorkTrace : CECHPWork
}
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDirH, m_pHost.GetGroundSpeed(), fDeltaTime, m_pHost.m_fVertSpeed);
Debug.LogError(vCurPos);
m_pHost.SetDirAndUp(EC_Utility.ToVector3(vCurPos - m_pHost.GetPos()), Vector3.up);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
//if (GetUseAutoPF() && CECIntelligentRoute::Instance().IsMoveOn())
@@ -889,7 +891,6 @@ public class CECHPWorkTrace : CECHPWork
if (cdr.vTPNormal == Vector3.zero)
{
Debug.LogError("m_bCheckTouch = false");
m_bCheckTouch = false;
}
@@ -900,20 +901,20 @@ public class CECHPWorkTrace : CECHPWork
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
Debug.LogError("m_pHost.m_MoveCtrl.SendStopMoveCmd");
//m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), iMoveMode);
PressCancel();
}
else
{
Debug.LogError("m_pHost.m_MoveCtrl.SendMoveCmd");
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 0, vTargetPos, EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), iMoveMode);
}
}
else // m_bMeetSlide == true
{
if (m_bHaveMoved)
{
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_SLIDE);
}
m_bFinished = true;
}
@@ -934,7 +935,6 @@ public class CECHPWorkTrace : CECHPWork
// command
if (m_bHaveMoved || !m_pHost.m_MoveCtrl.IsStop())
{
Debug.LogError("SendStopMoveCmd");
m_pHost.m_MoveCtrl.SendStopMoveCmd();
}
@@ -218,6 +218,7 @@ namespace PerfectWorld.Scripts.Managers
return;
if (pCmd.id != iHostID)
{
Debug.Log("OnMsgPlayerMove id = " + pCmd.id);
EC_ElsePlayer pPlayer = SeekOutElsePlayer(pCmd.id);
if (pPlayer)
{
@@ -307,7 +308,10 @@ namespace PerfectWorld.Scripts.Managers
{
GameObject ob = GameController.Instance.InitCharacter(info);
EC_ElsePlayer elsePlayer = ob.AddComponent<EC_ElsePlayer>();
elsePlayer.GetComponent<CECHostPlayer>().enabled = false;
if (ob.TryGetComponent<CECHostPlayer>(out CECHostPlayer result))
{
GameObject.Destroy(result);
}
//init
elsePlayer.Init(roleInfo, info);
return elsePlayer;
@@ -347,6 +351,7 @@ namespace PerfectWorld.Scripts.Managers
{
cmd_object_stop_move pCmd = GPDataTypeHelper.FromBytes<cmd_object_stop_move>((byte[])Msg.dwParam1);
EC_ElsePlayer pPlayer = SeekOutElsePlayer(pCmd.id);
Debug.Log("OnMsgPlayerStopMove id = " + pCmd.id);
if (pPlayer)
pPlayer.StopMoveTo(pCmd);
return true;
@@ -98,6 +98,11 @@ public class CECObject : MonoBehaviour
// A3DCoordinate::SetDirAndUp(vDir, vUp);
// Stop orientation adjusting
if (vDir != Vector3.zero)
{
Quaternion lookRot = Quaternion.LookRotation(vDir, vUp);
transform.rotation = lookRot;
}
m_bAdjustOrient = false;
}
// Set destination orientation of model
@@ -39,6 +39,8 @@ public class CECHostMove
m_fMoveTime = 0.0f;
m_pHost = pHost;
m_bStop = false;
cmdstopdelayCounter = 500;
m_DelayedStop = new STOPMOVE();
}
public void Tick(ulong dwDeltaTime)
@@ -64,6 +66,7 @@ public class CECHostMove
// make a potential check with tuojigua
iMoveMode |= (int)GPMoveMode.GP_MOVE_DEAD;
Debug.LogError("CECHostMove Tick c2s_SendCmdStopMove");
UnityGameSession.Instance.c2s_SendCmdStopMove(
m.vPos, fSpeed, iMoveMode, m.byDir, m_wMoveStamp++, iTime
);
@@ -112,7 +115,7 @@ public class CECHostMove
Debug.LogWarning("HoangDev : SendStopMoveCmd");
iMoveMode |= (int)GPMoveMode.GP_MOVE_DEAD;
if (cmdstopdelayCounter == 500)
if (cmdstopdelayCounter >= 500)
{
Vector3 vDir = m_pHost.transform.forward;
byte byDir = EC_Utility.glb_CompressDirH(vDir.x, vDir.z);
@@ -224,6 +227,8 @@ public class CECHostMove
{
cmdstopdelayCounter = 0;
m_bStop = true;
m_fBlockTime = 0.0f;
m_fBlockMove = 0.0f;
m_DelayedStop.bValid = false;
}
@@ -891,11 +891,12 @@ public abstract class CECPlayer : CECObject
Quaternion targetRotation = Quaternion.LookRotation(direction, Vector3.up);
// Xoay mượt từ rotation hiện tại sang rotation mục tiêu
transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRotation,
Time.deltaTime * turnSpeed
);
//transform.rotation = Quaternion.Slerp(
// transform.rotation,
// targetRotation,
// Time.deltaTime * turnSpeed
//);
transform.rotation = targetRotation;
}
}
@@ -536,7 +536,7 @@ namespace CSNetwork
if (pCmd.iMessage == 2)
{
// Attack target is too far
//pGameRun->PostMessage(MSG_HST_TARGETISFAR, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader->cmd);
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TARGETISFAR, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
}
else if (pCmd.iMessage == 20)
{
@@ -578,7 +578,6 @@ namespace CSNetwork
}
break;
break;
case CommandID.SELECT_TARGET:
case CommandID.UNSELECT:
@@ -5,6 +5,7 @@ using CSNetwork;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using System;
using System.Data;
using UnityEngine;
namespace PerfectWorld.Scripts.Player
@@ -32,6 +33,7 @@ namespace PerfectWorld.Scripts.Player
public void Init(RoleInfo roleInfo, info_player_1 Info)
{
SetPlayerInfor(new INFO(Info.cid, Info.crc_e, Info.crc_c));
m_dwResFlags = (uint)PlayerResourcesReadyFlag.RESFG_ALL;
m_pEPWorkMan = new CECEPWorkMan(this);
m_iProfession = roleInfo.occupation;
@@ -58,7 +60,7 @@ namespace PerfectWorld.Scripts.Player
if (TryGetComponent<PlayerVisual>(out var visual))
{
visual.InitHostPlayerEventDoneHandler();
visual.InitElsePlayerEventDoneHandler(m_PlayerInfo);
}
}
+2 -2
View File
@@ -476,7 +476,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6780952369966265306}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalRotation: {x: -0.03342759, y: -0.4452524, z: 0.01663679, w: -0.89462626}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@@ -619,7 +619,7 @@ BoxCollider:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_IsTrigger: 1
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ee11665fb7d6ffe88be7e5bc4785fbbe6e1ff526fc5005f4790bf1598fe39c5f
size 532497037
oid sha256:0d1bcf9fb61ce98fdc9a2833b5d653913d95833de182d6c8538c08d1e3023127
size 532501420
+13 -39
View File
@@ -1,4 +1,5 @@
using BrewMonster;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
@@ -17,12 +18,12 @@ using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using BrewMonster.Managers;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using static UnityEditor.PlayerSettings;
using Scene = UnityEngine.SceneManagement.Scene;
public class CECHostPlayer : CECPlayer
@@ -139,8 +140,7 @@ public class CECHostPlayer : CECPlayer
// ccRadius = controller.radius; ccSkin = controller.skinWidth;
_playerStateMachine.UpdateState();
if (Input.GetMouseButtonDown(1) && mainCam != null)
if (Input.GetMouseButtonDown(0) && mainCam != null)
{
int idTraceTarget = 0, idSelTarget = 0;
bool bForceAttack = false;
@@ -192,47 +192,14 @@ public class CECHostPlayer : CECPlayer
if (idTraceTarget != 0)
{
//if (m_pWorkMan.IsSitting())
//{
// g_pGame.GetGameSession().c2s_CmdStandUp();
// return;
//}
// Trace a object
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
Debug.LogError("Attack");
NormalAttackObject(idTraceTarget, bForceAttack);
}
//else
//{
// if (!CanDo(CANDO_MOVETO))
// return;
// if (iTraceReason == CECHPWorkTrace::TRACE_PICKUP)
// {
// PickupObject(idTraceTarget, false);
// }
// else if (iTraceReason == CECHPWorkTrace::TRACE_GATHER)
// {
// PickupObject(idTraceTarget, true);
// }
// else if (CECHPWork * pWork = m_pWorkMan.GetWork(CECHPWork::WORK_TRACEOBJECT))
// {
// CECHPWorkTrace* pWorkTrace = dynamic_cast<CECHPWorkTrace*>(pWork);
// pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
// }
// else if (m_pWorkMan.CanStartWork(CECHPWork::WORK_TRACEOBJECT) && !bWikiMonster)
// {
// CECHPWorkTrace* pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(CECHPWork::WORK_TRACEOBJECT);
// pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
// m_pWorkMan.StartWork_p1(pWork);
// }
//}
}
}
m_pWorkMan?.Tick(Time.deltaTime);
}
@@ -275,6 +242,10 @@ public class CECHostPlayer : CECPlayer
transform.forward = move;
m_MoveCtrl.GroundMove(Time.deltaTime);
m_MoveCtrl.SendMoveCmd(transform.position, controller.velocity, (int)GPMoveMode.GP_MOVE_RUN);
m_aabb.Center = EC_Utility.ToA3DVECTOR3(transform.position) + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f);
m_aabb.CompleteMinsMaxs();
m_aabbServer.Center = EC_Utility.ToA3DVECTOR3(transform.position) + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f);
m_aabbServer.CompleteMinsMaxs();
}
else
{
@@ -334,8 +305,8 @@ public class CECHostPlayer : CECPlayer
public void ProcessMessage(in ECMSG Msg)
{
Debug.LogWarning("HoangDev : ProcessMessageProcessMessageProcessMessage");
var msg = (int)Msg.dwMsg;
//Debug.LogError("HoangDev : ProcessMessageProcessMessageProcessMessage " + msg);
switch (msg)
{
case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break;
@@ -1064,7 +1035,7 @@ public class CECHostPlayer : CECPlayer
bool bUseAutoPF = false;
//CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper();
//if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper.GetAttackError() >= 2)
bUseAutoPF = true;
//bUseAutoPF = true;
CECHPWorkTrace pWorkTrace = null;
CECHPWork pWork = null;
@@ -1305,8 +1276,8 @@ public class CECHostPlayer : CECPlayer
{
fRange = m_ExtProps.ak.AttackRange * 0.7f;
}
// TO DO: fix later
fRange = 1f;
Debug.LogError("fDist - fTargetRad = " + (fDist - fTargetRad));
if (fDist - fTargetRad <= fRange)
return true;
@@ -1437,7 +1408,10 @@ public class CECHostPlayer : CECPlayer
{
bRet = true;
if (idTarget == 0)
{
BMLogger.LogError("HoangDev: HostPlayer Unsetlect npc");
UnityGameSession.c2s_CmdUnselect();
}
else
{
BMLogger.LogError("HoangDev: HostPlayer setlect npc");
+35 -1
View File
@@ -1,4 +1,4 @@
using CSNetwork.GPDataType;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
using System.Data;
using Unity.Cinemachine;
@@ -17,6 +17,11 @@ public class GameController : MonoBehaviour
//[SerializeField] private Transform ground;
CECHostPlayer hostPlayer;
public CinemachineFreeLook freeLookCam;
public float rotateSpeedX = 300f; // tốc độ xoay ngang
public float rotateSpeedY = 2f; // tốc độ xoay dọc
public static GameController Instance
{
get
@@ -93,4 +98,33 @@ public class GameController : MonoBehaviour
{
instance = null;
}
//private void Update()
//{
// if (hostPlayer == null || hostPlayer.transform == null)
// return;
// bool rightClick = Input.GetMouseButton(1);
// if (rightClick)
// {
// // Bật khả năng xoay khi giữ chuột phải
// freeLookCam.m_XAxis.m_MaxSpeed = rotateSpeedX;
// freeLookCam.m_YAxis.m_MaxSpeed = rotateSpeedY;
// // Ghi giá trị chuột thủ công (nếu muốn override Input System cũ)
// float mouseX = Input.GetAxis("Mouse X");
// float mouseY = Input.GetAxis("Mouse Y");
// // Xoay camera theo hướng chuột
// freeLookCam.m_XAxis.Value += mouseX * Time.deltaTime * rotateSpeedX;
// freeLookCam.m_YAxis.Value -= mouseY * Time.deltaTime * (rotateSpeedY / 100f);
// }
// else
// {
// // Khi thả chuột thì khoá xoay
// freeLookCam.m_XAxis.m_MaxSpeed = 0;
// freeLookCam.m_YAxis.m_MaxSpeed = 0;
// }
//}
}
+20
View File
@@ -46,6 +46,26 @@ public class PlayerVisual : MonoBehaviour
EventBus.SubscribeChannel<CleearComActFlagAllRankNodesEvent>(_playerInfo.cid, CleearComActFlagAllRankNodesEventHandler);
}
public void InitElsePlayerEventDoneHandler(INFO playerInfo)
{
namedAnimancer = GetComponentInChildren<NamedAnimancerComponent>();
if (namedAnimancer == null)
{
BrewMonster.BMLogger.LogError("animancer == null");
return;
}
//var player = GetComponentInParent<CECPlayer>();
//if (player == null)
//{
// BrewMonster.BMLogger.LogError("player == null");
// return;
//}
_playerInfo = playerInfo;//player.GetPlayInfo();
EventBus.SubscribeChannel<PlayActionEvent>(_playerInfo.cid, PlayActionEventHandler);
EventBus.SubscribeChannelClass<QueueActionEvent>(_playerInfo.cid, QueueActionEventHandler);
EventBus.SubscribeChannel<CleearComActFlagAllRankNodesEvent>(_playerInfo.cid, CleearComActFlagAllRankNodesEventHandler);
}
private void CleearComActFlagAllRankNodesEventHandler(CleearComActFlagAllRankNodesEvent @event)
{
_animationQueue.Clear();