protected override RC_RESULT OnCommand(SCommand_Object pCmd) { switch ((OBJECTCOMMANDDEF)pCmd.m_wID) { case OBJECTCOMMANDDEF.OC_SPECIAL_OBJ_TRIGGER: { int nLogicCount, nTargetCount; int[] paTargetIDs; nLogicCount = pCmd.GetValue <int>(0); nTargetCount = pCmd.GetValue <int>(1); paTargetIDs = (int[])(pCmd.GetValue <object>(2)); DoTrigger(nLogicCount, nTargetCount, paTargetIDs); } break; case OBJECTCOMMANDDEF.OC_SPECIAL_OBJ_DIE: { DoDie(); } break; default: break; } return(RC_RESULT.RC_SKIP); }
// 压入一条指令 public override bool PushCommand(SCommand_Object pCmd) { switch ((OBJECTCOMMANDDEF)pCmd.m_wID) { case OBJECTCOMMANDDEF.OC_BUS_MOVE: { float x = pCmd.GetValue <float>(0); float y = pCmd.GetValue <float>(1); float z = pCmd.GetValue <float>(2); Vector3 fvGame = new Vector3(x, y, z); StartMove(fvGame); } break; case OBJECTCOMMANDDEF.OC_BUS_STOP_MOVE: { float x = pCmd.GetValue <float>(0); float y = pCmd.GetValue <float>(1); float z = pCmd.GetValue <float>(2); Vector3 fvGame = new Vector3(x, y, z); SetPosition(fvGame); StopMove(); } break; case OBJECTCOMMANDDEF.OC_BUS_ADD_PASSENGER: { int nIndex = pCmd.GetValue <int>(0); int nPassengerID = pCmd.GetValue <int>(1); AddPassenger(nIndex, (uint)nPassengerID); } break; case OBJECTCOMMANDDEF.OC_BUS_REMOVE_PASSENGER: { int nPassengerID = pCmd.GetValue <int>(0); RemovePassenger((uint)nPassengerID); } break; case OBJECTCOMMANDDEF.OC_BUS_REMOVE_ALL_PASSENGER: { RemoveAllPassengers(); } break; default: break; } return(true); }
protected override RC_RESULT OnCommand(SCommand_Object pCmd) { RC_RESULT rcResult = RC_RESULT.RC_SKIP; switch ((OBJECTCOMMANDDEF)pCmd.m_wID) { case OBJECTCOMMANDDEF.OC_UPDATE_EQUIPMENT: { uint dwModifyFlags = pCmd.GetValue <uint>(0); uint[] pData = pCmd.GetValue <uint[]>(1); int i; uint dwIndex = 0; for (i = 0; i < (int)HUMAN_EQUIP.HEQUIP_NUMBER; i++) { if ((dwModifyFlags & (1 << i)) != 0) { GetCharacterData().Set_Equip((HUMAN_EQUIP)i, (int)(pData[dwIndex])); dwIndex++; } } rcResult = RC_RESULT.RC_OK; } break; case OBJECTCOMMANDDEF.OC_UPDATE_TEAM_FLAG: { if (this != CObjectManager.Instance.getPlayerMySelf()) { CCharacterData pData = GetCharacterData(); pData.Set_HaveTeamFlag(pCmd.GetValue <byte>(0) == 1); pData.Set_TeamLeaderFlag(pCmd.GetValue <byte>(1) == 1); pData.Set_TeamFullFlag(pCmd.GetValue <byte>(2) == 1); } rcResult = RC_RESULT.RC_OK; } break; // case OBJECTCOMMANDDEF.OC_TEAM_FOLLOW_MEMBER: // { // CCharacterData* pData = GetCharacterData(); // // pData->Set_TeamFollowListCount( pCmd->m_adwParam[0] ); // // for( INT i=0; i<(INT)(pCmd->m_adwParam[0]); ++i ) // { // pData->Set_TeamFollowedMember(i, pCmd->m_adwParam[i+1]); // } // // rcResult = RC_RESULT.RC_OK; // } // break; // case OBJECTCOMMANDDEF.OC_UPDATE_TEAM_FOLLOW_FLAG: // { // CCharacterData* pData = GetCharacterData(); // // pData->Set_TeamFollowFlag( pCmd->m_abParam[0] ); // CharacterLogic_GetAI()->OnAIStopped(); // // rcResult = RC_RESULT.RC_OK; // } // break; default: return(base.OnCommand(pCmd)); } return(rcResult); }
static public CObjectCommand NewObjectCommand(SCommand_Object cmd) { CObjectCommand retCmd = null; if (cmd != null) { switch ((OBJECTCOMMANDDEF)cmd.m_wID) { case OBJECTCOMMANDDEF.OC_STOP_ACTION: { CObjectCommand_StopAction NewCmd = new CObjectCommand_StopAction(); int nLogicCount; uint uEndTime; nLogicCount = cmd.GetValue <int>(0); uEndTime = cmd.GetValue <uint>(1); bool bResult = NewCmd.Init(nLogicCount, uEndTime); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_STOP_MOVE: { CObjectCommand_StopMove NewCmd = new CObjectCommand_StopMove(); int nLogicCount, nEndNodeIndex; WORLD_POS posEnd; nLogicCount = cmd.GetValue <int>(0); nEndNodeIndex = cmd.GetValue <int>(1); posEnd.m_fX = cmd.GetValue <float>(2); posEnd.m_fZ = cmd.GetValue <float>(3); bool bResult = NewCmd.Init(nLogicCount, nEndNodeIndex, posEnd); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_ACTION: { CObjectCommand_Action NewCmd = new CObjectCommand_Action(); uint uStartTime; int nLogicCount, nActionID; uStartTime = cmd.GetValue <uint>(0); nLogicCount = cmd.GetValue <int>(1); nActionID = cmd.GetValue <int>(2); bool bResult = NewCmd.Init(uStartTime, nLogicCount, nActionID); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_MOVE: { CObjectCommand_Move NewCmd = new CObjectCommand_Move(); uint uStartTime; int nLogicCount, nNodeCount; WORLD_POS[] paposNode; uStartTime = cmd.GetValue <uint>(0); nLogicCount = cmd.GetValue <int>(1); nNodeCount = cmd.GetValue <int>(2); paposNode = (cmd.GetValue <WORLD_POS[]>(3)); bool bResult = NewCmd.Init(uStartTime, nLogicCount, nNodeCount, paposNode); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_MAGIC_SEND: { CObjectCommand_MagicSend NewCmd = new CObjectCommand_MagicSend(); uint uStartTime; int nLogicCount; int nMagicID; uint nTargetObjID; WORLD_POS posTarget; float fTargetDir; uStartTime = cmd.GetValue <uint>(0); nLogicCount = cmd.GetValue <int>(1); nMagicID = cmd.GetValue <short>(2); nTargetObjID = cmd.GetValue <uint>(3); posTarget.m_fX = cmd.GetValue <float>(4); posTarget.m_fZ = cmd.GetValue <float>(5); fTargetDir = cmd.GetValue <float>(6); bool bResult = NewCmd.Init(uStartTime, nLogicCount, nMagicID, nTargetObjID, posTarget, fTargetDir); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_MAGIC_CHARGE: { CObjectCommand_MagicCharge NewCmd = new CObjectCommand_MagicCharge(); uint uStartTime; int nLogicCount; int nMagicID; uint nTargetObjID; WORLD_POS posTarget; float fTargetDir; uint uTotalTime; uStartTime = cmd.GetValue <uint>(0); nLogicCount = cmd.GetValue <int>(1); nMagicID = cmd.GetValue <short>(2); nTargetObjID = (uint)cmd.GetValue <int>(3); posTarget.m_fX = cmd.GetValue <float>(4); posTarget.m_fZ = cmd.GetValue <float>(5); fTargetDir = cmd.GetValue <float>(6); uTotalTime = (uint)cmd.GetValue <int>(7); bool bResult = NewCmd.Init(uStartTime, nLogicCount, nMagicID, nTargetObjID, posTarget, fTargetDir, uTotalTime); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_MAGIC_CHANNEL: { CObjectCommand_MagicChannel NewCmd = new CObjectCommand_MagicChannel(); uint uStartTime; int nLogicCount; int nMagicID; uint nTargetObjID; WORLD_POS posTarget; float fTargetDir; uint uTotalTime; uStartTime = cmd.GetValue <uint>(0); nLogicCount = cmd.GetValue <int>(1); nMagicID = cmd.GetValue <short>(2); nTargetObjID = (uint)cmd.GetValue <int>(3); posTarget.m_fX = cmd.GetValue <float>(4); posTarget.m_fZ = cmd.GetValue <float>(5); fTargetDir = cmd.GetValue <float>(6); uTotalTime = (uint)cmd.GetValue <int>(7); bool bResult = NewCmd.Init(uStartTime, nLogicCount, nMagicID, nTargetObjID, posTarget, fTargetDir, uTotalTime); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_ABILITY: { CObjectCommand_Ability NewCmd = new CObjectCommand_Ability(); int uStartTime; int nLogicCount; int nAbilityID; int nPrescriptionID; uint nTargetID; uStartTime = cmd.GetValue <int>(0); nLogicCount = cmd.GetValue <int>(1); nAbilityID = cmd.GetValue <short>(2); nPrescriptionID = cmd.GetValue <int>(3); nTargetID = cmd.GetValue <uint>(4); bool bResult = NewCmd.Init((uint)uStartTime, nLogicCount, nAbilityID, nPrescriptionID, nTargetID); if (bResult) { retCmd = NewCmd; } else { NewCmd.CleanUp(); NewCmd = null; } } break; case OBJECTCOMMANDDEF.OC_MODIFY_ACTION: default: break; } } return(retCmd); }