skill processing

This commit is contained in:
VDH
2025-11-11 13:33:27 +07:00
parent eed08c2b13
commit cbf626fa28
14 changed files with 550 additions and 147 deletions
+98 -80
View File
@@ -31,6 +31,8 @@ using UnityEngine.UI;
using static Unity.Burst.Intrinsics.X86.Avx;
using static UnityEditor.PlayerSettings;
using Scene = UnityEngine.SceneManagement.Scene;
using Trace_reason = CECHPWorkTrace.Trace_reason;
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
public class CECHostPlayer : CECPlayer
{
@@ -249,15 +251,15 @@ public class CECHostPlayer : CECPlayer
SelectTarget(m_idUCSelTarget);
}
/* if (idTraceTarget != 0)
{
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
/* if (idTraceTarget != 0)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
}*/
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
}*/
}
m_pWorkMan?.Tick(Time.deltaTime);
}
@@ -404,8 +406,16 @@ public class CECHostPlayer : CECPlayer
private void OnMsgHstSkillData(ECMSG Msg)
{
cmd_skill_data pCmd = GPDataTypeHelper.FromBytes<cmd_skill_data>((byte[])Msg.dwParam1);
cmd_skill_data pCmd = default;
pCmd.skill_count = GPDataTypeHelper.FromBytes<uint>((byte[])Msg.dwParam1);
int offset = sizeof(uint);
int skillSize = Marshal.SizeOf<cmd_skill_data.SKILL>();
pCmd.skill_list = new cmd_skill_data.SKILL[2];
for (int i = 0; i < pCmd.skill_count; i++)
{
pCmd.skill_list[i] = GPDataTypeHelper.FromBytes<cmd_skill_data.SKILL>((byte[])Msg.dwParam1, offset);
offset += skillSize;
}
if (pCmd.skill_list == null)
{
BMLogger.LogError("OnMsgHstSkillData: cmd is null");
@@ -419,22 +429,22 @@ public class CECHostPlayer : CECPlayer
if (HostIsReady())
{
/*
for (int i = 0; i < HostConstants.NUM_HOSTSCSETS1; i++)
{
if (hostPlayer.m_aSCSets1[i] != null)
{
hostPlayer.m_aSCSets1[i].RemoveSkillShortcuts();
}
}
/*
for (int i = 0; i < HostConstants.NUM_HOSTSCSETS1; i++)
{
if (hostPlayer.m_aSCSets1[i] != null)
{
hostPlayer.m_aSCSets1[i].RemoveSkillShortcuts();
}
}
for (int i = 0; i < HostConstants.NUM_HOSTSCSETS2; i++)
{
if (hostPlayer.m_aSCSets2[i] != null)
{
hostPlayer.m_aSCSets2[i].RemoveSkillShortcuts();
}
}*/
for (int i = 0; i < HostConstants.NUM_HOSTSCSETS2; i++)
{
if (hostPlayer.m_aSCSets2[i] != null)
{
hostPlayer.m_aSCSets2[i].RemoveSkillShortcuts();
}
}*/
m_aPtSkills.Clear();
@@ -467,27 +477,27 @@ public class CECHostPlayer : CECPlayer
}
// Restore and convert shortcuts after loading new skills
/* if (hostPlayer.HostIsReady())
{
hostPlayer.ConvertSkillShortcut(skillSCConfigArray1);
hostPlayer.AssignSkillShortcut(skillSCConfigArray1, hostPlayer.m_aSCSets1);
hostPlayer.ConvertSkillShortcut(skillSCConfigArray2);
hostPlayer.AssignSkillShortcut(skillSCConfigArray2, hostPlayer.m_aSCSets2);
hostPlayer.ConvertComboSkill();
hostPlayer.ValidateSkillGrpShortcut(skillGrpSCConfigArray1);
hostPlayer.AssignSkillGrpShortcut(skillGrpSCConfigArray1, hostPlayer.m_aSCSets1);
hostPlayer.ValidateSkillGrpShortcut(skillGrpSCConfigArray2);
hostPlayer.AssignSkillGrpShortcut(skillGrpSCConfigArray2, hostPlayer.m_aSCSets2);
}
/* if (hostPlayer.HostIsReady())
{
hostPlayer.ConvertSkillShortcut(skillSCConfigArray1);
hostPlayer.AssignSkillShortcut(skillSCConfigArray1, hostPlayer.m_aSCSets1);
hostPlayer.ConvertSkillShortcut(skillSCConfigArray2);
hostPlayer.AssignSkillShortcut(skillSCConfigArray2, hostPlayer.m_aSCSets2);
hostPlayer.ConvertComboSkill();
hostPlayer.ValidateSkillGrpShortcut(skillGrpSCConfigArray1);
hostPlayer.AssignSkillGrpShortcut(skillGrpSCConfigArray1, hostPlayer.m_aSCSets1);
hostPlayer.ValidateSkillGrpShortcut(skillGrpSCConfigArray2);
hostPlayer.AssignSkillGrpShortcut(skillGrpSCConfigArray2, hostPlayer.m_aSCSets2);
}
if (hostPlayer.HostIsReady())
{
// Update UI when profession changes, save all shortcut configurations
// to remove effects from intermediate skills (invalid pointers)
// C++: CECGameUIMan *pGameUIMan = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
// pGameUIMan->UpdateSkillRelatedUI();
hostPlayer.UpdateSkillRelatedUI();
}*/
if (hostPlayer.HostIsReady())
{
// Update UI when profession changes, save all shortcut configurations
// to remove effects from intermediate skills (invalid pointers)
// C++: CECGameUIMan *pGameUIMan = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
// pGameUIMan->UpdateSkillRelatedUI();
hostPlayer.UpdateSkillRelatedUI();
}*/
}
public bool HostIsReady() { return true /*m_bEnterGame*/; }
private void OnMsgHstInfo00(in ECMSG Msg)
@@ -1075,6 +1085,10 @@ public class CECHostPlayer : CECPlayer
}
else
m_pActionSwitcher = new CECActionSwitcherBase(this);
UnityGameSession.c2s_CmdGetAllData(true, true, false);
// TODO: Move this to right flow later , it's just for test now
UnityGameSession.c2s_CmdSendEnterPKPrecinct();
}
private void JoystickStartDrag(JoystickPressEvent joystickPressEvent)
@@ -1612,7 +1626,7 @@ public class CECHostPlayer : CECPlayer
//}
//// Get force attack flag
bool bForceAttack = true;
bool bForceAttack = false;
//if (iForceAtk < 0)
// bForceAttack = glb_GetForceAttackFlag(0);
//else
@@ -1635,8 +1649,8 @@ public class CECHostPlayer : CECPlayer
//}
//// Check whether target type match
//int idCastTarget = idSelTarget;
//int iTargetType = pSkill->GetTargetType();
int idCastTarget = idSelTarget;
int iTargetType = pSkill.GetTargetType();
//if (pSkill->GetType() == CECSkill::TYPE_BLESS ||
// pSkill->GetType() == CECSkill::TYPE_NEUTRALBLESS)
@@ -1767,8 +1781,8 @@ public class CECHostPlayer : CECPlayer
// return false;
// }
// m_pPrepSkill = pSkill;
CastSkill(m_PlayerInfo.cid, bForceAttack);
m_pPrepSkill = pSkill;
//CastSkill(m_idSelTarget, bForceAttack);
//}
//else if (IsSpellingMagic() && m_pCurSkill == pSkill)
//{
@@ -1789,39 +1803,40 @@ public class CECHostPlayer : CECPlayer
// }
// else
// {
// bool bTraceOK = false;
// bool bUseAutoPF = false;
// CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper();
// if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper->GetAttackError() >= 2)
// bUseAutoPF = true;
bool bTraceOK = false;
bool bUseAutoPF = false;
/* CECPlayerWrapper* pWrapper = CECAutoPolicy::GetInstance().GetPlayerWrapper();
if (CECAutoPolicy::GetInstance().IsAutoPolicyEnabled() && pWrapper->GetAttackError() >= 2)
bUseAutoPF = true;*/
// if (!idCastTarget)
// {
// idCastTarget = GetCharacterID(); // ±ÜÃâË²ÒÆµÈ¼¼ÄÜʱ idCastTarget Ϊ0µ¼Ö CECWorkTrace::CreateTraceTarget ·µ»Ø¿Õ
// }
// if (CECHPWork * pWork = m_pWorkMan->GetWork(CECHPWork::WORK_TRACEOBJECT))
// {
// CECHPWorkTrace* pWorkTrace = dynamic_cast<CECHPWorkTrace*>(pWork);
// if (pWorkTrace->GetTraceReason() == CECHPWorkTrace::TRACE_SPELL &&
// pWorkTrace->GetTarget() == idCastTarget &&
// pWorkTrace->GetPrepSkill() == pSkill)
// return false; // We are just doing the same thing
if (idCastTarget == 0)
{
idCastTarget = GetCharacterID(); // ±ÜÃâË²ÒÆµÈ¼¼ÄÜʱ idCastTarget Ϊ0µ¼Ö CECWorkTrace::CreateTraceTarget ·µ»Ø¿Õ
}
CECHPWork pWork = m_pWorkMan.GetWork(Host_work_ID.WORK_TRACEOBJECT);
if (pWork != null)
{
CECHPWorkTrace pWorkTrace = (CECHPWorkTrace)(pWork);
if (pWorkTrace.GetTraceReason() == Trace_reason.TRACE_SPELL &&
pWorkTrace.GetTarget() == idCastTarget &&
pWorkTrace.GetPrepSkill() == pSkill)
return false; // We are just doing the same thing
// pWorkTrace->SetTraceTarget(pWorkTrace->CreatTraceTarget(idCastTarget, CECHPWorkTrace::TRACE_SPELL, bForceAttack), bUseAutoPF);
// pWorkTrace->SetPrepSkill(pSkill);
// bTraceOK = true;
// }
// else if (m_pWorkMan->CanStartWork(CECHPWork::WORK_TRACEOBJECT))
// {
// CECHPWorkTrace* pWork = (CECHPWorkTrace*)m_pWorkMan->CreateWork(CECHPWork::WORK_TRACEOBJECT);
// pWork->SetTraceTarget(pWork->CreatTraceTarget(idCastTarget, CECHPWorkTrace::TRACE_SPELL, bForceAttack), bUseAutoPF);
// pWork->SetPrepSkill(pSkill);
// m_pWorkMan->StartWork_p1(pWork);
// bTraceOK = true;
// }
pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idCastTarget, Trace_reason.TRACE_SPELL, bForceAttack), bUseAutoPF);
pWorkTrace.SetPrepSkill(pSkill);
bTraceOK = true;
}
else if (m_pWorkMan.CanStartWork(Host_work_ID.WORK_TRACEOBJECT))
{
CECHPWorkTrace pWork2 = (CECHPWorkTrace)m_pWorkMan.CreateWork(Host_work_ID.WORK_TRACEOBJECT);
/* pWork2->SetTraceTarget(pWork2->CreatTraceTarget(idCastTarget, CECHPWorkTrace::TRACE_SPELL, bForceAttack), bUseAutoPF);
pWork2->SetPrepSkill(pSkill);
m_pWorkMan->StartWork_p1(pWork2);*/
bTraceOK = true;
}
// if (!bTraceOK) return false;
// }
if (!bTraceOK) return false;
// }
//}
return true;
@@ -1830,6 +1845,9 @@ public class CECHostPlayer : CECPlayer
private void CastSkill(int idTarget, bool bForceAttack, CECObject pTarget = null)
{
byte byPVPMask = glb_BuildPVPMask(bForceAttack);
BMLogger.LogError("HoangDev: HostPlayer CastSkill SkillID=" + m_pPrepSkill.GetSkillID() +
" TargetID=" + idTarget + " bForceAttack=" + bForceAttack +
" byPVPMask=" + byPVPMask);
UnityGameSession.c2s_CmdCastSkill(m_pPrepSkill.GetSkillID(), byPVPMask, 1, idTarget);
}
public byte glb_BuildPVPMask(bool bForceAttack)