Пример #1
0
 public void OnStateQuit(AIAgent.STATE ass)
 {
     //if(_mmEffectMap != null)
     //{
     //    _mmEffectMap.StopEffect();
     //}
 }
Пример #2
0
 public FC_COMMAND_NETSTREAM(FC_COMMAND_NETSTREAM src)
 {
     _state           = src._state;
     _currentPosition = src._currentPosition;
     _currentRotation = src._currentRotation;
     _commandIndex    = src._commandIndex;
     timeStamp        = src.timeStamp;
 }
Пример #3
0
 public bool GetStateToGo(int stateCount, ref AIAgent.STATE ret, ref float timeIdle, ref float timeWander)
 {
     ret = AIAgent.STATE.NONE;
     if (_countsForJump == 0 || (_countsForJump > 0 && stateCount % _countsForJump == 0))
     {
         int c1 = 0;
         int c2 = 0;
         if (_chanceToIdle > 0)
         {
             ret = AIAgent.STATE.IDLE;
             c1  = Random.Range(0, _chanceToIdle);
         }
         if (_chanceToWander > 0)
         {
             if (ret != AIAgent.STATE.NONE)
             {
                 c2 = Random.Range(0, _chanceToWander);
                 if (c2 > c1)
                 {
                     ret = AIAgent.STATE.HESITATE;
                     c1  = c2;
                 }
             }
             else
             {
                 ret = AIAgent.STATE.HESITATE;
             }
         }
         if (_chanceToAttack > 0)
         {
             if (ret != AIAgent.STATE.NONE)
             {
                 c2 = Random.Range(0, _chanceToAttack);
                 if (c2 > c1)
                 {
                     ret = AIAgent.STATE.ATTACK;
                 }
             }
             else
             {
                 ret = AIAgent.STATE.ATTACK;
             }
         }
     }
     if (ret == AIAgent.STATE.IDLE)
     {
         timeIdle = _idleTime;
         return(true);
     }
     else if (ret == AIAgent.STATE.HESITATE)
     {
         timeWander = _wanderTime;
         return(true);
     }
     return(false);
 }
Пример #4
0
    public bool IsHit(ActionController target)
    {
        bool ret = false;

        AIAgent.STATE ass = _owner.ACOwner.AIUse.AIStateAgent.CurrentStateID;
        if (_owner.beActive && _coolDownTimeCount <= 0)
        {
            ret = true;

            foreach (AIAgent.STATE state in _statesCantAutoIce)
            {
                if (state == ass)
                {
                    ret = false;
                    break;
                }
            }

            if (_owner.ACOwner.AIUse.CurrentSkill != null)
            {
                string sn = _owner.ACOwner.AIUse.CurrentSkill._skillName;
                foreach (string skill in _skillCantAutoIce)
                {
                    if (skill == sn)
                    {
                        ret = false;
                        break;
                    }
                }
            }

            if (ret && Random.Range(0, 1f) <= _chanceToFireIce)
            {
                _coolDownTimeCount = _coolDownTime;
                ret = true;
                Vector3 dir = target.ThisTransform.localPosition - _owner.ACOwner.ThisTransform.localPosition;
                dir.y = 0;
                dir.Normalize();
                if (dir != Vector3.zero)
                {
                    _owner.ACOwner.ACRotateTo(dir, -1, true, true);
                }
                _owner.ACOwner.AIUse.GoToAttackForce(_iceSkillName, 0);
            }
            else
            {
                ret = false;
            }
        }
        return(ret);
        //if()
    }
Пример #5
0
    public bool IsHit(ActionController target)
    {
        bool ret = false;

        if (_owner.beActive && _coolDownTimeCount <= 0)
        {
            ret = true;
            AIAgent.STATE ass  = _owner.ACOwner.AIUse.AIStateAgent.PreStateID;
            AIAgent.STATE assc = _owner.ACOwner.AIUse.AIStateAgent.CurrentStateID;
            foreach (AIAgent.STATE state in _statesCantAutoDefense)
            {
                if (state == ass && ass == assc)
                {
                    ret = false;
                    break;
                }
            }
            if (ret)
            {
                if (_owner.ACOwner.AIUse.CurrentSkill != null)
                {
                    string sn = _owner.ACOwner.AIUse.CurrentSkill._skillName;
                    foreach (string skill in _skillCantAutoDefense)
                    {
                        if (skill == sn)
                        {
                            ret = false;
                            break;
                        }
                    }
                }
            }
            if (ret)
            {
                ret = (Random.Range(0, 1f) <= _chanceToBlock);
            }
            if (ret)
            {
                _owner.ACOwner.AIUse.GoToAttackForce(_parrySkill, _parrySkillCombo);
                _owner.ACOwner.AIUse.ParryTarget = target;
                _coolDownTimeCount = _coolDownTime;
                _owner.ACOwner.AIUse.SetActionSwitchFlag(FC_ACTION_SWITCH_FLAG.IN_GOD);
            }
        }
        return(ret);
        //if()
    }
Пример #6
0
    void UpdateSyncCommandForPVP()
    {
        if (!GameManager.Instance.IsPVPMode)
        {
            return;
        }

        _lastPos = _owner.ThisTransform.localPosition;
        //set my pos
        CommandManager.Instance._syncCommandScript._myPosition
            = _lastPos;

        _lastRot = _owner.ThisTransform.eulerAngles;
        //set my rotation
        CommandManager.Instance._syncCommandScript._myRotation
            = _lastRot;

        _lastAIState = _owner.AIUse.AIStateAgent.CurrentStateID;
        //set my AI state
        CommandManager.Instance._syncCommandScript._myAIState = _lastAIState;
    }
Пример #7
0
 public override AIAgent.STATE GetNextStateByRun(bool findedTarget, bool inFinding)
 {
     AIAgent.STATE state = AIAgent.STATE.MAX;
     if (_owner.ACOwner.IsAlived)
     {
         if (findedTarget && _owner.TargetAC != null && _owner.TargetAC.IsAlived)
         {
             state = AIAgent.STATE.ATTACK;
         }
         else if (!inFinding)
         {
             state = AIAgent.STATE.IDLE;
         }
         else if (inFinding)
         {
             if (_owner.CanSeekTarget())
             {
                 _owner.HandleInnerCmd(FCCommand.CMD.MOVE_TO_POINT, null, _owner.TargetAC.ThisTransform.localPosition, null, null);
             }
             else
             {
                 _owner.HandleInnerCmd(FCCommand.CMD.STOP_IS_ARRIVE_POINT, null);
                 state = AIAgent.STATE.IDLE;
             }
         }
         else
         {
             state = AIAgent.STATE.IDLE;
         }
     }
     else
     {
         state = AIAgent.STATE.DEAD;
     }
     return(state);
 }
Пример #8
0
    public int CountHurtResult()
    {
        _currentStep   = 0;
        _frameCount    = 0;
        _stateWantToGo = AIAgent.STATE.NONE;
        float speedScale = ((float)_hitStrength) / 100;

#if PVP_ENABLED
        if (GameManager.Instance.IsPVPMode && _owner.ACOwner.IsClientPlayer)
        {
            //speedScale = 0.0f;
        }
#endif
        if (_owner.ACOwner.IsPlayerSelf && GameManager.Instance.IsPVPMode)
        {
            _hurtInfoForClient2.x = _hitDirection.x;
            _hurtInfoForClient2.y = _hitDirection.z;
            _hurtInfoForClient2.z = _effectTime;

            CommandManager.Instance.SendCommandToOthers(FCCommand.CMD.CLIENT_HURT,
                                                        _owner.ACOwner.ObjectID, _owner.ACOwner.ThisTransform.localPosition,
                                                        _hurtInfoForClient, FC_PARAM_TYPE.QUATERNION,
                                                        _hurtInfoForClient2, FC_PARAM_TYPE.QUATERNION,
                                                        null, FC_PARAM_TYPE.NONE);
        }

        if (!_owner.ACOwner.SelfMoveAgent.IsOnGround)
        {
            speedScale += 0.2f;
        }
        if (_currentHitType == AttackHitType.KnockDown)
        {
            _inSky = true;
            _owner.MoveByDirection(_hitDirection, _hitBackSpeed * speedScale, 99f, _hitBackDrag);
            if (_canBeHitDown)
            {
                _stateWantToGo = AIAgent.STATE.STAND;
            }
        }
        else if (_currentHitType == AttackHitType.KnockBack)
        {
            _owner.MoveByDirection(_hitDirection, _hitBackSpeed * speedScale, 99f, _hitBackDrag);
            if (_canBeHitFly)
            {
                _stateWantToGo = AIAgent.STATE.IDLE;
            }
        }
        else if (_currentHitType == AttackHitType.HitFly)
        {
            _inSky    = true;
            _isInFall = false;
            if (_canBeHitUp)
            {
                //Debug.LogError("FC_HIT_TYPE.UP" + Time.realtimeSinceStartup);
                //_owner.MoveByDirection(_hitDirection, _hitBackSpeed * speedScale, 1.2f, 0);
                //_owner.MoveByDirection(_hitDirection, 0.1f, 0.1f, 0);

                _owner.MoveByDirection(_hitDirection, _hitBackSpeed * speedScale, 99f, _hitBackDrag);

                _stateWantToGo = AIAgent.STATE.STAND;
                _owner.ACOwner.ACEffectByGravity(_hitUpSpeed, null, Vector3.up, 999, false, true);
            }
            else
            {
                _owner.MoveByDirection(_hitDirection, _hitBackSpeed * speedScale, 99f, _hitBackDrag);
            }
        }
        else if (_currentHitType == AttackHitType.HurtFlash)
        {
            _owner.MoveByDirection(_hitDirection, _flashHurtSpeed * speedScale, 1f, _hurtSpeedDrag);
        }
        else if (_currentHitType == AttackHitType.HurtNormal)
        {
            //Debug.Log("FC_HIT_TYPE.HURT_NORMAL _hitDirection = " + _hitDirection + ", _normalHurtSpeed :" +_normalHurtSpeed + ",speedScale : " + speedScale + " , _hurtSpeedDrag =" +_hurtSpeedDrag );
            _owner.MoveByDirection(_hitDirection, _normalHurtSpeed * speedScale, 1f, _hurtSpeedDrag);
        }
        else if (_currentHitType == AttackHitType.ParrySuccess)
        {
            _owner.MoveByDirection(_hitDirection, _parryBackSpeed * speedScale, 1f, _hurtSpeedDrag);
        }
        else if (_currentHitType == AttackHitType.ParryFail)
        {
            if (_sfxParryBreak != "")
            {
                SoundManager.Instance.PlaySoundEffect(_sfxParryBreak);
            }
            _owner.MoveByDirection(_hitDirection, _parryFailSpeed * speedScale, 0.3f, 6f);
        }
        else if (_currentHitType == AttackHitType.Dizzy)
        {
            _owner.StopMove();
        }
        else if (_currentHitType == AttackHitType.ForceBack)
        {
            //			if(_owner.ACOwner.IsClientPlayer)
            //			{
            //				_owner.MoveByDirection(_hitDirection,_normalHurtSpeed*speedScale,0.2f,_hurtSpeedDrag);
            //			}
            //			else
            //			{
            _owner.StopMove();
            //		}
        }
        else if (_currentHitType == AttackHitType.BlackHole)
        {
            _owner.StopMove();
        }
#if xingtianbo
        //else if(_currentHitType == AttackHitType.KnockDown)
        //{
        //    _owner.StopMove();
        //    _stateWantToGo = AIAgent.STATE.STAND;
        //}
#endif
        else
        {
            _owner.StopMove();
        }
        _currentStep = 1;
        _owner.IncreaseRage(RageAgent.RageEvent.HURT, _attackerType);

        return((int)_currentHitType);
    }
Пример #9
0
 public override void IdleTaskChange(FCCommand.CMD cmd)
 {
     if (cmd == FCCommand.CMD.STATE_QUIT)
     {
         _owner.ACSetMoveMode(MoveAgent.MOVE_MODE.BY_ANIMATION);
     }
     else if (cmd == FCCommand.CMD.STATE_ENTER)
     {
         if (!_isFight)
         {
             _wanderTimeThisTime  = -1;
             _timeForIdleThisTime = Random.Range(_timeForIdleMin, _timeForIdleMax);
             //_owner.ACSetMoveMode(MoveAgent.MOVE_MODE.BY_MOVE_MANUAL);
             _haverWanderActionThisTime = _haveWanderAction;
             AIAgent.STATE aas = AIAgent.STATE.IDLE;
             if (_state._preState != null)
             {
                 aas = _state._preState.CurrentStateID;
             }
             AIAgent.STATE ret = AIAgent.STATE.NONE;
             if (_state._preState.CurrentStateID == AIAgent.STATE.BORN)
             {
                 ret = AIAgent.STATE.ATTACK;
             }
             else if (_skillCount > 0 && aas == AIAgent.STATE.ATTACK && _afterSkill != null && _afterSkill.Count > 0)
             {
                 foreach (StateToGoCondition stgc in _afterSkill)
                 {
                     if (stgc.GetStateToGo(_skillCount, ref ret, ref _timeForIdleThisTime, ref _wanderTimeThisTime))
                     {
                         break;
                     }
                 }
             }
             if (ret == AIAgent.STATE.ATTACK)
             {
                 GoToAttack();
             }
             else if (ret == AIAgent.STATE.IDLE)
             {
                 _haverWanderActionThisTime = false;
             }
         }
         _owner.ACSetMoveMode(MoveAgent.MOVE_MODE.BY_ANIMATION);
         HandleInnerCmd(FCCommand.CMD.DIRECTION_FOLLOW_FORWARD, null);
         if (!_owner.IsPlayer)
         {
             _owner.ACStop();
         }
     }
     else if (cmd == FCCommand.CMD.STATE_FINISH)
     {
     }
     else if (cmd == FCCommand.CMD.STATE_DONE)
     {
         if (_isFight)
         {
             if (_haverWanderActionThisTime)
             {
                 SetNextState(AIAgent.STATE.HESITATE);
             }
             else
             {
                 GoToAttack();
             }
         }
         else
         {
             SetNextState(AIAgent.STATE.IDLE);
         }
     }
 }
Пример #10
0
    public override bool HandleInnerCmd(FCCommand.CMD cmd, object param0, object param1, object param2, object param3)
    {
        bool ret = false;

        if (_sAHandleCmd != null)
        {
            ret = _sAHandleCmd(cmd, param0, param1, param2, param3);
        }
        if (!ret)
        {
            switch (cmd)
            {
            //state
            case FCCommand.CMD.STATE_GOTO:
            {
                AIAgent.STATE ast = (AIAgent.STATE)param0;
                ret = SetNextState(ast);
                break;
            }

            case FCCommand.CMD.STATE_ENTER:
                switch (_state.CurrentStateID)
                {
                case STATE.RUN:
                {
                    GotoNextPathPoint();
                    ret = true;
                    break;
                }

                case STATE.IDLE:
                {
                    if (_faceTarget == null)
                    {
                        _owner.ACRotateTo(_targetDirection, -1, true, true);
                    }
                    break;
                }
                }
                break;

            case FCCommand.CMD.STATE_DONE:
            {
                switch (_state.CurrentStateID)
                {
                case STATE.BORN:
                {
                    _owner.SetShipForSpeedAndForward(MoveAgent.ROTATE_FLAG.FOLLOW_SPEED);
                    _owner.ACSetMoveMode(MoveAgent.MOVE_MODE.BY_MOVE_MANUAL);
                    if (HasPathWay && !_controlByPlayer)
                    {
                        if (_pathway.HasPath)
                        {
                            _runOnPath = true;
                            SetNextState(AIAgent.STATE.RUN);
                        }
                        else
                        {
                            _runOnPath = false;
                            SetNextState(AIAgent.STATE.IDLE);
                        }
                    }
                    else
                    {
                        _runOnPath = false;
                        HandleInnerCmd(FCCommand.CMD.DIRECTION_FOLLOW_FORWARD, null);
                        SetNextState(AIAgent.STATE.IDLE);
                    }
                    ret = true;
                    break;
                }

                case STATE.RUN:
                {
                    ret = SetNextState(AIAgent.STATE.IDLE);
                    break;
                }

                case STATE.IDLE:
                {
                    ret = SetNextState(AIAgent.STATE.RUN);
                    break;
                }
                }

                break;
            }

            case FCCommand.CMD.MOVE_TO_POINT:
            {
                Vector3 p = (Vector3)param1;
                _owner.ACMove(ref p);
                ret = true;
                break;
            }


            //stop
            case FCCommand.CMD.STOP:
                _owner.ACStop();
                ret = true;
                break;

            case FCCommand.CMD.STOP_IS_ARRIVE_POINT:
            {
                _targetDirection = _owner.ThisTransform.forward;
                SetNextState(AIAgent.STATE.IDLE);
                break;
            }

            //Set
            case FCCommand.CMD.SET_TO_DEFAULT_SPEED:
            {
                ACOwner.CurrentSpeed = _owner.Data.TotalMoveSpeed;
                ret = true;
                break;
            }


            //direction
            case FCCommand.CMD.DIRECTION_FOLLOW_FORWARD:
            {
                _owner.SetShipForSpeedAndForward(MoveAgent.ROTATE_FLAG.FOLLOW_SPEED);
                ret = true;
                break;
            }

            case FCCommand.CMD.DIRECTION_UNLOCK:
            {
                _owner.SetShipForSpeedAndForward(MoveAgent.ROTATE_FLAG.UNLOCK);
                ret = true;
                break;
            }

            //action
            case FCCommand.CMD.ACTION_IS_AWAY_NPC:
            {
                Transform tf = (Transform)param1;
                if (tf == _faceTarget)
                {
                    _faceTarget = null;
                }
                ret = true;
                break;
            }

            case FCCommand.CMD.ACTION_IS_NEAR_NPC:
            {
                Transform tf = (Transform)param1;
                _faceTarget = tf;
                ret         = true;
                break;
            }
            }
        }
        return(ret);
    }
Пример #11
0
 public override AIAgent.STATE GetNextStateByBorn()
 {
     AIAgent.STATE state = AIAgent.STATE.MAX;
     state = AIAgent.STATE.IDLE;
     return(state);
 }
Пример #12
0
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (!ObjectManager.Instance || ObjectManager.Instance.ObjectCount == 0)
        {
            return;
        }

        short   myIndex  = 0;            //player index, 0~3 + NETWORK_ID_HERO_START
        Vector3 pos      = Vector3.zero; //player position
        Vector3 rot      = Vector3.zero; //player rotation , eularAngles
        int     cmdIdx   = 0;
        short   ai_state = -1;           //player AI state

        if (stream.isWriting)
        {
            if (!IsWriteEnabled)
            {
                return;
            }

            if (_myAIState == AIAgent.STATE.MAX)
            {
                return;
            }

            ActionController ac = ObjectManager.Instance.GetObjectByNetworkID(_myIndex).fcObj as ActionController;
            //output
            myIndex = (short)_myIndex;
            stream.Serialize(ref myIndex);

            pos         = ac.ThisTransform.localPosition;
            _myRotation = ac.ThisTransform.eulerAngles;
            _myAIState  = ac.AIUse.AIStateAgent.CurrentStateID;
            stream.Serialize(ref pos);
            if (GameManager.Instance.IsPVPMode)
            {
                rot = _myRotation;
                stream.Serialize(ref rot);

                _myCmdIdx = CommandManager.Instance.GetNextCommandStreamID(_myIndex);
                cmdIdx    = _myCmdIdx;
                stream.Serialize(ref cmdIdx);

                ai_state = (short)_myAIState;
                stream.Serialize(ref ai_state);
            }
        }
        else
        {
            if (!IsReadEnabled)
            {
                return;
            }

            //read
            stream.Serialize(ref myIndex);
            _myIndex = myIndex;

            stream.Serialize(ref pos);
            _myPosition = pos;
            if (GameManager.Instance.IsPVPMode)
            {
                stream.Serialize(ref rot);
                _myRotation = rot;

                //sync command stream index
                stream.Serialize(ref cmdIdx);
                _myCmdIdx = cmdIdx;

                //ai state
                stream.Serialize(ref ai_state);
                _myAIState = (AIAgent.STATE)ai_state;

                ecns._commandIndex    = _myCmdIdx;
                ecns._currentPosition = _myPosition;
                ecns._currentRotation = _myRotation;
                ecns._state           = _myAIState;
                ecns.timeStamp        = info.timestamp;
                CommandManager.Instance.WriteCommandToCache(_myIndex, _myPosition, true, _myCmdIdx, ecns);
            }
        }
    }
Пример #13
0
    /*void LateUpdate()
     * {
     *      if(PhotonNetwork.room == null) return;
     *
     *      if(!_isLerpEnabled || !_owner.IsClientPlayer) return;
     *
     *      _owner.ThisTransform.localPosition  = Vector3.Lerp( _owner._currPosition , _lerpToPos , SMOOTH * Time.deltaTime);
     *      if( Vector3.Distance(_owner.ThisTransform.localPosition , _lerpToPos) < 0.1f ){
     *              _isLerpEnabled = false;
     *      }
     * }*/

    public virtual bool HandleCommand(ref FCCommand ewd)
    {
        if (PhotonNetwork.room == null)
        {
            return(false);
        }


        switch (ewd._cmd)
        {
        case FCCommand.CMD.CLIENT_MOVE_TO_POINT:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.VECTOR3)
            {
                Debug.LogError("get a CLIENT_MOVE_TO_POINT but param1 is not a vector3");
            }
            else
            {
                _owner._dataSync._position = (Vector3)ewd._param1;
                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_HURT:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.VECTOR3 || ewd._param2Type != FC_PARAM_TYPE.VECTOR3)
            {
                Debug.LogError("get a CLIENT_HURT but param1 , 2 is not a vector3");
            }
            else
            {
//					Vector3 param1 = (Vector3)ewd._param1;
//				    FC_HIT_TYPE eht = (FC_HIT_TYPE)param1.x;
//					bool isCritical = (param1.y == 0.0 ? false : true);
                //int realDamage = (int)param1.z;

//					Vector3 hitDirection = (Vector3)ewd._param2;

                _owner.SelfMoveAgent.SetPosition(ewd._commandPosition);
                //_owner.ACHandleHurt(eht , isCritical ,realDamage , hitDirection  , true , true , false );
                //Debug.Log("Get FCCommand.CMD.CLIENT_HURT !!!!!!!!!!!!! hitDir = " + hitDirection);
                //CommandManager.Instance.SendFastToSelf(ref ewd);
                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_HURT_HP:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.INT || ewd._param2Type != FC_PARAM_TYPE.INT)
            {
                Debug.LogError("get a CLIENT_HURT_HP but param1 is not a int");
            }
            else
            {
                _owner.ACReduceHP((int)ewd._param1, (int)ewd._param2, false, false, false, false);
//					_owner._dataSync._hitPoint = (int)ewd._param1;
                return(true);
            }
        }
        break;


        case FCCommand.CMD.CLIENT_THREAT:
        {
            if ((ewd._param1Type != FC_PARAM_TYPE.INT) || (ewd._param2Type != FC_PARAM_TYPE.INT))
            {
                Debug.LogError("get a CLIENT_THREAT but param is not a int");
            }
            else
            {
                //get player objid
                OBJECT_ID player_ID = ObjectManager.Instance.GetObjectByNetworkID((int)ewd._param2);
                if (player_ID == null)
                {
                    Debug.LogError("receive increase threat but bad player");
                }

                //get player AC
                ActionController target = player_ID.fcObj as ActionController;

                //increase threat
                _owner.ACIncreaseThreat((int)ewd._param1, false, target);
                return(true);
            }
        }
        break;


        case FCCommand.CMD.CLIENT_LEVELUP:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.INT)
            {
                Debug.LogError("get a CLIENT_LEVELUP but param is not a int");
            }
            else
            {
                //level up
                _owner.OnLevelUp_FromNet((int)ewd._param1);
                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_CURRSTATE:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.INT)
            {
                Debug.LogError("get a CLIENT_CURRSTATE_ID but param is not a int");
                //}else if (ewd._param2Type != FC_PARAM_TYPE.FLOAT){
                //	Debug.LogError("get a CLIENT_CURRSTATE_ID but param2 is not float type");
            }
            else
            {
                _clientAICurrStateID = (AIAgent.STATE)ewd._param1;

                //float y = (float)ewd._param2;
                //Quaternion rotation = Quaternion.Euler(new Vector3(0, y, 0));
                //Vector3 v3 = rotation * Vector3.forward;
                //_owner.ACRotateTo(v3,-1,true,true);

                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_POTION_HP:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.FLOAT || ewd._param2Type != FC_PARAM_TYPE.FLOAT)
            {
                Debug.LogError("get a CLIENT_POTION_HP but param is not a float");
            }
            else
            {
                //increase HP
                _owner.ACEatPotion((float)ewd._param1, (float)ewd._param2, FCConst.POTION_TIME, FCPotionType.Health);
                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_POTION_ENERGY:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.FLOAT || ewd._param2Type != FC_PARAM_TYPE.FLOAT)
            {
                Debug.LogError("get a CLIENT_POTION_ENERGY but param is not a float");
            }
            else
            {
                //increase EP
                _owner.ACEatPotion((float)ewd._param1, (float)ewd._param2, FCConst.POTION_TIME, FCPotionType.Mana);
                return(true);
            }
        }
        break;

        case FCCommand.CMD.CLIENT_REVIVE:
        {
            if (ewd._param1Type != FC_PARAM_TYPE.NONE)
            {
                Debug.LogError("get a CLIENT_REVIVE but param is not a float");
            }
            else
            {
                //revive now
                //_owner.GoToRevive();
                return(true);
            }
        }
        break;
        }

        return(false);
    }