fix: update normal attack.

This commit is contained in:
Tungdv
2025-10-06 18:32:32 +07:00
parent 83816419ae
commit 7818ec70e3
4 changed files with 88 additions and 86 deletions
Binary file not shown.
@@ -1,4 +1,5 @@
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Player;
using UnityEngine;
///////////////////////////////////////////////////////////////////////////
@@ -33,7 +34,7 @@ class CECHPWorkMelee : CECHPWork
}
// If target turn to be un-attackable, cancel action
if (!m_pHost.AttackableJudge(m_idTarget, true))
if (m_pHost.AttackableJudge(m_idTarget, true) == 0)
{
g_pGame.GetGameSession().c2s_CmdCancelAction();
m_bFinished = true;
@@ -54,9 +55,9 @@ class CECHPWorkMelee : CECHPWork
int idTraceTarget = 0;
if (ISPLAYERID(m_idTarget))
if (GPDataTypeHelper.ISPLAYERID(m_idTarget))
{
CECElsePlayer* pPlayer = m_pHost.m_pPlayerMan.GetElsePlayer(m_idTarget);
EC_ElsePlayer pPlayer = m_pHost.m_pPlayerMan.GetElsePlayer(m_idTarget);
if (!pPlayer || pPlayer.IsDead()) // Taget has missed ?
return true;
@@ -64,9 +65,9 @@ class CECHPWorkMelee : CECHPWork
if (!m_pHost.CanTouchTarget(pPlayer.GetPos(), pPlayer.GetTouchRadius(), 1))
idTraceTarget = m_idTarget;
}
else if (ISNPCID(m_idTarget))
else if (GPDataTypeHelper.ISNPCID(m_idTarget))
{
CECNPC* pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().GetNPC(m_idTarget);
CECNPC pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().GetNPC(m_idTarget);
if (!pNPC || pNPC.IsDead()) // Taget has missed ?
return true;
@@ -76,8 +77,8 @@ class CECHPWorkMelee : CECHPWork
if (idTraceTarget && !m_pHost.IsRooting())
{
CECHPWorkTrace* pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(WORK_TRACEOBJECT);
pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace::TRACE_ATTACK));
CECHPWorkTrace pWork = (CECHPWorkTrace*)m_pWorkMan.CreateWork(WORK_TRACEOBJECT);
pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK));
class CECHPWorkPostTickCommand1 : CECHPWorkPostTickRunWorkCommand
{
public CECHPWorkPostTickCommand1(CECHPWork pWork) : CECHPWorkPostTickRunWorkCommand(pWork, true)
@@ -161,7 +161,7 @@ public: // Operations
}
CECTracedObject* CreatTraceTarget(int iTraceObjId, int iReason, bool bForceAttack = false);
CECTracedObject CreatTraceTarget(int iTraceObjId, int iReason, bool bForceAttack = false);
// Tick routine
virtual bool Tick(DWORD dwDeltaTime);
+79 -78
View File
@@ -218,7 +218,7 @@ public class CECHostPlayer : EC_Player
case int value when value == EC_MsgDef.MSG_HST_TASKDATA:
{
OnMsgHstTaskData(Msg);
Debug.Log("[Dat]- OnMsgHstTaskData");
Debug.LogError("[Dat]- OnMsgHstTaskData");
break;
}
case int value when value == EC_MsgDef.MSG_HST_ITEMOPERATION:
@@ -433,18 +433,18 @@ public class CECHostPlayer : EC_Player
//pData += iStorageTasksListSize;
//A3DRELEASE(m_pTaskInterface);
return;
var m_pTaskInterface = new CECTaskInterface(this);
if (!m_pTaskInterface.Init(null, 0, null, 0,
null, 0, null, 0, null, 0))
{
//a_LogOutput(1, "CECHostPlayer::OnMsgHstTaskData, failed to initialize task interface");
return;
}
//todo
//var m_pTaskInterface = new CECTaskInterface(this);
m_pTaskInterface.CheckPQEnterWorldInit();
//if (!m_pTaskInterface.Init(null, 0, null, 0,
// null, 0, null, 0, null, 0))
//{
// //a_LogOutput(1, "CECHostPlayer::OnMsgHstTaskData, failed to initialize task interface");
// return;
//}
//m_pTaskInterface.CheckPQEnterWorldInit();
//// check if player has equipped goblin
//if (m_pEquipPack.GetItem(EQUIPIVTR_GOBLIN) != NULL)
@@ -481,8 +481,8 @@ public class CECHostPlayer : EC_Player
// We should have check target isn't dead
return false;
}
//if (!g_pGame.GetGameRun().GetWorld().GetObject(idTarget, 1))
// return false;
if (!EC_Game.GetGameRun().GetWorld().GetObject(idTarget, 1))
return false;
bool bStartNewWork = false;
bool bUseAutoPF = false;
@@ -538,7 +538,7 @@ public class CECHostPlayer : EC_Player
return -1;
// If target is pet, it's attacked possibility depends on it's monster
if (ISNPCID(idTarget))
if (GPDataTypeHelper.ISNPCID(idTarget))
{
CECNPC pNPC = (CECNPC)pObject;
int idMaster = pNPC.GetMasterID();
@@ -561,7 +561,7 @@ public class CECHostPlayer : EC_Player
int iRet = 0;
if (ISNPCID(idTarget))
if (GPDataTypeHelper.ISNPCID(idTarget))
{
CECNPC pNPC = (CECNPC)pObject;
@@ -610,74 +610,75 @@ public class CECHostPlayer : EC_Player
}
}
}
else if (ISPLAYERID(idTarget))
{
// Check duel at first
if (m_pvp.iDuelState == DUEL_ST_INDUEL && m_pvp.idDuelOpp == idTarget)
return 1;
else if (m_pvp.iDuelState == DUEL_ST_STOPPING && m_pvp.idDuelOpp == idTarget)
return 0;
// TO DO: fix later
//else if (GPDataTypeHelper.ISPLAYERID(idTarget))
//{
// // Check duel at first
// if (m_pvp.iDuelState == DUEL_ST_INDUEL && m_pvp.idDuelOpp == idTarget)
// return 1;
// else if (m_pvp.iDuelState == DUEL_ST_STOPPING && m_pvp.idDuelOpp == idTarget)
// return 0;
// In sanctuary we cannot attack other players
if (m_bInSanctuary)
return 0;
// // In sanctuary we cannot attack other players
// if (m_bInSanctuary)
// return 0;
//ASSERT(pObject.GetClassID() == CECObject::OCID_ELSEPLAYER);
EC_ElsePlayer pPlayer = (EC_ElsePlayer)pObject;
ROLEBASICPROP bp = pPlayer.GetBasicProps();
EC_GAME_SETTING gs = g_pGame.GetConfigs().GetGameSettings();
// //ASSERT(pObject.GetClassID() == CECObject::OCID_ELSEPLAYER);
// EC_ElsePlayer pPlayer = (EC_ElsePlayer)pObject;
// ROLEBASICPROP bp = pPlayer.GetBasicProps();
// EC_GAME_SETTING gs = g_pGame.GetConfigs().GetGameSettings();
if (m_pvp.bFreePVP)
{
if (IsTeamMember(idTarget))
return 0;
// if (m_pvp.bFreePVP)
// {
// if (IsTeamMember(idTarget))
// return 0;
// In free pvp mode, for example, host is in arena.
if (bForceAttack)
iRet = 1;
else if (gs.bAtk_NoMafia && IsFactionMember(pPlayer.GetFactionID()))
iRet = 0;
else if (gs.bAtk_NoWhite && !pPlayer.IsInvader() && !pPlayer.IsPariah())
iRet = 0;
else if (gs.bAtk_NoAlliance && g_pGame.GetFactionMan().IsFactionAlliance(pPlayer.GetFactionID()))
iRet = 0;
else if (gs.bAtk_NoForce && GetForce() > 0 && GetForce() == pPlayer.GetForce())
iRet = 0;
else
iRet = 1;
}
else if (m_iBattleCamp != GP_BATTLE_CAMP_NONE)
{
// Host is in battle
int iCamp = pPlayer.GetBattleCamp();
if (iCamp != GP_BATTLE_CAMP_NONE && iCamp != m_iBattleCamp)
iRet = 1;
else
iRet = 0;
}
else // Normal mode
{
if (IsTeamMember(idTarget))
return 0;
// // In free pvp mode, for example, host is in arena.
// if (bForceAttack)
// iRet = 1;
// else if (gs.bAtk_NoMafia && IsFactionMember(pPlayer.GetFactionID()))
// iRet = 0;
// else if (gs.bAtk_NoWhite && !pPlayer.IsInvader() && !pPlayer.IsPariah())
// iRet = 0;
// else if (gs.bAtk_NoAlliance && g_pGame.GetFactionMan().IsFactionAlliance(pPlayer.GetFactionID()))
// iRet = 0;
// else if (gs.bAtk_NoForce && GetForce() > 0 && GetForce() == pPlayer.GetForce())
// iRet = 0;
// else
// iRet = 1;
// }
// else if (m_iBattleCamp != GP_BATTLE_CAMP_NONE)
// {
// // Host is in battle
// int iCamp = pPlayer.GetBattleCamp();
// if (iCamp != GP_BATTLE_CAMP_NONE && iCamp != m_iBattleCamp)
// iRet = 1;
// else
// iRet = 0;
// }
// else // Normal mode
// {
// if (IsTeamMember(idTarget))
// return 0;
if (!IsPVPOpen() || !pPlayer.IsPVPOpen() || m_BasicProps.iLevel < EC_MAXNOPKLEVEL || bp.iLevel < EC_MAXNOPKLEVEL)
iRet = 0;
else if (bForceAttack)
iRet = 1;
else if (!gs.bAtk_Player)
iRet = 0;
else if (gs.bAtk_NoMafia && IsFactionMember(pPlayer.GetFactionID()))
iRet = 0;
else if (gs.bAtk_NoWhite && !pPlayer.IsInvader() && !pPlayer.IsPariah())
iRet = 0;
else if (gs.bAtk_NoAlliance && g_pGame.GetFactionMan().IsFactionAlliance(pPlayer.GetFactionID()))
iRet = 0;
else if (gs.bAtk_NoForce && GetForce() > 0 && GetForce() == pPlayer.GetForce())
iRet = 0;
else
iRet = 1;
}
}
// if (!IsPVPOpen() || !pPlayer.IsPVPOpen() || m_BasicProps.iLevel < EC_MAXNOPKLEVEL || bp.iLevel < EC_MAXNOPKLEVEL)
// iRet = 0;
// else if (bForceAttack)
// iRet = 1;
// else if (!gs.bAtk_Player)
// iRet = 0;
// else if (gs.bAtk_NoMafia && IsFactionMember(pPlayer.GetFactionID()))
// iRet = 0;
// else if (gs.bAtk_NoWhite && !pPlayer.IsInvader() && !pPlayer.IsPariah())
// iRet = 0;
// else if (gs.bAtk_NoAlliance && g_pGame.GetFactionMan().IsFactionAlliance(pPlayer.GetFactionID()))
// iRet = 0;
// else if (gs.bAtk_NoForce && GetForce() > 0 && GetForce() == pPlayer.GetForce())
// iRet = 0;
// else
// iRet = 1;
// }
//}
else
{
return -1;