Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    // 压入一条指令
    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);
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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);
    }