skill processing
This commit is contained in:
@@ -26,7 +26,7 @@ public abstract class CECPlayer : CECObject
|
||||
protected GameObject _pPlayerModel;
|
||||
protected float rotationSpeed = 5;
|
||||
internal int m_iMoveMode; // Player's move mode
|
||||
internal int m_idSelTarget;
|
||||
[SerializeField] internal int m_idSelTarget;
|
||||
protected int m_iShape; // Ñ¡ÖÐÄ¿±êµÄID
|
||||
protected uint m_dwStates; // Player's basic states
|
||||
protected uint m_uAttackType;
|
||||
|
||||
@@ -7,6 +7,7 @@ using CSNetwork.GPDataType;
|
||||
using ModelRenderer.Scripts.Common;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
public class CECNPC : CECObject
|
||||
@@ -778,7 +779,7 @@ public class CECNPC : CECObject
|
||||
|
||||
QueueLoadNPCModel();
|
||||
}
|
||||
public void QueueLoadNPCModel()
|
||||
public async Task QueueLoadNPCModel()
|
||||
{
|
||||
/* if (ShouldUseMasterModel())
|
||||
{
|
||||
@@ -793,7 +794,7 @@ public class CECNPC : CECObject
|
||||
{
|
||||
return;
|
||||
}
|
||||
var model = NPCBuilder.Instance.GetModelByPath(szModelFile.ToLower());
|
||||
var model = await NPCBuilder.Instance.GetModelByPath(szModelFile.ToLower());
|
||||
if (model == null) {
|
||||
|
||||
model = GameObject.CreatePrimitive(PrimitiveType.Capsule);
|
||||
|
||||
@@ -10,7 +10,8 @@ using BrewMonster;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
using Animancer;
|
||||
using BrewMonster.Scripts; // B�?o đ�?m b�?n có Animancer package
|
||||
using BrewMonster.Scripts;
|
||||
using System.Threading.Tasks; // B�?o đ�?m b�?n có Animancer package
|
||||
#endif
|
||||
|
||||
public class NPCBuilder : MonoSingleton<NPCBuilder>
|
||||
@@ -26,9 +27,9 @@ public class NPCBuilder : MonoSingleton<NPCBuilder>
|
||||
private Dictionary<string, GameObject> modelNPCDic;
|
||||
|
||||
|
||||
public GameObject GetModelByPath(string path)
|
||||
public async Task<GameObject> GetModelByPath(string path)
|
||||
{
|
||||
return AddressableManager.Instance.LoadPrefabAsync(path).Result;
|
||||
return await AddressableManager.Instance.LoadPrefabAsync(path);
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
|
||||
@@ -436,7 +436,6 @@ namespace CSNetwork.C2SCommand
|
||||
// Serialize the command and return the serialized data
|
||||
return SerializeCommand(eCommandID.TASK_VAR_DATA, cmd);
|
||||
}
|
||||
|
||||
public static Octets CreateGetAllDataCommand(bool byPack, bool byEquip, bool byTask)
|
||||
{
|
||||
var cmd = new CMD_GetAllData
|
||||
|
||||
@@ -1200,7 +1200,7 @@ namespace CSNetwork.GPDataType
|
||||
public struct cmd_skill_data
|
||||
{
|
||||
public uint skill_count;
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct SKILL
|
||||
{
|
||||
public short id_skill;
|
||||
@@ -1208,20 +1208,18 @@ namespace CSNetwork.GPDataType
|
||||
public short ability;
|
||||
|
||||
}
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
|
||||
public SKILL[] skill_list;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_scene_service_npc_list
|
||||
{
|
||||
public uint count;
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct NpcEntry
|
||||
{
|
||||
public int tid; // npc template id
|
||||
public int nid; // npc id
|
||||
}
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
|
||||
public NpcEntry[] list;
|
||||
|
||||
}
|
||||
|
||||
@@ -390,7 +390,6 @@ namespace CSNetwork
|
||||
case CommandID.PLAYER_INFO_1_LIST:
|
||||
case CommandID.PLAYER_INFO_00:
|
||||
case CommandID.SELF_INFO_1:
|
||||
// OnMsgPlayerInfo(-1, pDataBuf, pCmdHeader);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERINFO, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf,
|
||||
pCmdHeader, iHostID, _selectedRole);
|
||||
break;
|
||||
@@ -509,12 +508,10 @@ namespace CSNetwork
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.HOST_ATTACKRESULT:
|
||||
_logger.Info($"HOST_ATTACKRESULT: " + pCmdHeader);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
|
||||
pCmdHeader);
|
||||
break;
|
||||
case CommandID.HOST_ATTACKED:
|
||||
_logger.Info($"HOST_ATTACKED: " + pCmdHeader);
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATTACKED, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
|
||||
pCmdHeader);
|
||||
break;
|
||||
@@ -609,52 +606,15 @@ namespace CSNetwork
|
||||
break;
|
||||
case CommandID.SCENE_SERVICE_NPC_LIST:
|
||||
{
|
||||
cmd_scene_service_npc_list npcList = GPDataTypeHelper.FromBytes<cmd_scene_service_npc_list>(pDataBuf);
|
||||
CECHostSkillModel.Instance.RecvNPCServiceList(protocol.Data);
|
||||
break;
|
||||
}
|
||||
case CommandID.SKILL_DATA:
|
||||
BMLogger.LogError("HoangDev: SKILL_DATASKILL_DATA");
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SKILLDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnMsgPlayerInfo(int iSubID, byte[] data, ushort pCmdHeader)
|
||||
{
|
||||
if (iSubID == 0)
|
||||
{
|
||||
}
|
||||
else if (iSubID < 0)
|
||||
{
|
||||
int iHostID = _selectedRole.roleid;
|
||||
int lenghtByte = Marshal.SizeOf<int>();
|
||||
byte[] byteArray = new byte[lenghtByte];
|
||||
for (int i = 0; i < lenghtByte; i++)
|
||||
{
|
||||
byteArray[i] = data[i];
|
||||
}
|
||||
|
||||
int cid = BitConverter.ToInt32(byteArray);
|
||||
switch (pCmdHeader)
|
||||
{
|
||||
case CommandID.PLAYER_INFO_1:
|
||||
case CommandID.PLAYER_ENTER_WORLD:
|
||||
case CommandID.PLAYER_ENTER_SLICE:
|
||||
{
|
||||
if (cid != iHostID)
|
||||
{
|
||||
_logger.Info("### OnMsgPlayerInfo: ElsePlayer join");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleSelectRoleResponse(SelectRole_Re protocol)
|
||||
{
|
||||
@@ -907,7 +867,12 @@ namespace CSNetwork
|
||||
SendProtocol(gamedatasend);
|
||||
}
|
||||
|
||||
|
||||
public void c2s_CmdSendEnterPKPrecinctint()
|
||||
{
|
||||
gamedatasend gamedatasend = new gamedatasend();
|
||||
gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.ENTER_PK_PROTECTED);
|
||||
SendProtocol(gamedatasend);
|
||||
}
|
||||
public void SendChatData(byte cChannel, in string szMsg, int iPack, int iSlot)
|
||||
{
|
||||
publicchat publicChat = new publicchat();
|
||||
|
||||
@@ -245,7 +245,10 @@ namespace BrewMonster.Network
|
||||
{
|
||||
Instance._gameSession.c2s_CmdSelectTarget(idTarget);
|
||||
}
|
||||
|
||||
public static void c2s_CmdSendEnterPKPrecinct()
|
||||
{
|
||||
Instance._gameSession.c2s_CmdSendEnterPKPrecinctint();
|
||||
}
|
||||
#region Task
|
||||
public static void c2s_CmdGetAllData(bool byPack, bool byEquip, bool byTask)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BrewMonster.Assets.PerfectWorld.Scripts.Players
|
||||
{
|
||||
public class CECPlayerWrapper
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fad92b0f2869eb0459d2e0a2dc6bb74e
|
||||
@@ -52,7 +52,7 @@ namespace BrewMonster.Scripts.Skills
|
||||
}
|
||||
public void ProcessServiceList()
|
||||
{
|
||||
if (m_npcListData== null)
|
||||
if (m_npcListData == null)
|
||||
{
|
||||
BMLogger.LogWarning("CECHostSkillModel::ProcessServiceList, m_npcListData is null.");
|
||||
return;
|
||||
@@ -67,7 +67,17 @@ namespace BrewMonster.Scripts.Skills
|
||||
byte[] bodyBytes = new byte[bodySize];
|
||||
Buffer.BlockCopy(data, offset, bodyBytes, 0, bodySize);
|
||||
|
||||
cmd_scene_service_npc_list npcList = GPDataTypeHelper.FromBytes<cmd_scene_service_npc_list>(bodyBytes);
|
||||
cmd_scene_service_npc_list npcList = default;
|
||||
npcList.count = GPDataTypeHelper.FromBytes<uint>(bodyBytes);
|
||||
offset = sizeof(uint);
|
||||
int NpcEntrySize = Marshal.SizeOf<cmd_scene_service_npc_list.NpcEntry>();
|
||||
npcList.list = new cmd_scene_service_npc_list.NpcEntry[npcList.count];
|
||||
|
||||
for (int z = 0; z < npcList.count; z++)
|
||||
{
|
||||
npcList.list[z] = GPDataTypeHelper.FromBytes<cmd_scene_service_npc_list.NpcEntry>(bodyBytes, offset);
|
||||
offset += NpcEntrySize;
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < npcList.count; i++)
|
||||
@@ -131,7 +141,7 @@ namespace BrewMonster.Scripts.Skills
|
||||
public void RecvNPCServiceList(Octets Data)
|
||||
{
|
||||
m_npcListData = Data;
|
||||
|
||||
BMLogger.LogError("HoangDev: m_npcListData= "+ m_npcListData.Length);
|
||||
if (!m_bInitialized)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace BrewMonster.Assets.PerfectWorld.Scripts.Skills
|
||||
{
|
||||
map.Clear();
|
||||
PersistentData skill;
|
||||
|
||||
for (int i = 0; i < (int)pdata.skill_count; i++)
|
||||
{
|
||||
cmd_skill_data.SKILL item = pdata.skill_list[i];
|
||||
|
||||
@@ -160,7 +160,6 @@ namespace BrewMonster.UI
|
||||
await Task.Delay(10000);
|
||||
UnityGameSession.RequesrQueryPlayerCash();
|
||||
await Task.Delay(1000);
|
||||
UnityGameSession.c2s_CmdGetAllData(true, true, false);
|
||||
EC_Game.Init();
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
+403
-10
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user