Esempio n. 1
0
        BehaveResult Tick(Tree sender)
        {
            if (Time.time - startHideTime > CHECK_Hide_TIME)
            {
                Vector3 dir = mFind.GetHideDir(PeCreature.Instance.mainPlayer.peTrans.position, position, Enemies);
                if (mFind.bNeedHide)
                {
                    Vector3 dirPos = position + dir.normalized * m_Data.RunRadius;
                    MoveToPosition(dirPos, SpeedState.Run);
                }
                else
                {
                    StopMove();
                    FaceDirection(PeCreature.Instance.mainPlayer.peTrans.position - position);
                    //if(entity.target.beSkillTarget)
                    //{
                    //    MoveDirection(transform.right,SpeedState.Run);
                    //}
                    //else
                    //{
                    //    StopMove();
                    //    FaceDirection(PeCreature.Instance.mainPlayer.peTrans.position - position);
                    //}
                }

                startHideTime = Time.time;
            }

            if (Time.time - startRunTime > CHECK_TIME || entity.HPPercent > m_Data.minHpPercent ||
                ItemAsset.SelectItem.HasCanEquip(entity, EeqSelect.combat, AttackType.Ranged))
            {
                SetCambat(true);
                return(BehaveResult.Success);
            }

            //吃到了合适的属性值或者没有合适的药品时停止
            ItemAsset.ItemObject mEatItem;
            if (NpcEatDb.IsContinueEat(entity, out mEatItem))
            {
                if (entity.UseItem.GetCdByItemProtoId(mEatItem.protoId) < PETools.PEMath.Epsilon)
                {
                    UseItem(mEatItem);
                }
            }

            return(BehaveResult.Running);
        }
Esempio n. 2
0
        BehaveResult Tick(Tree sender)
        {
            if (!NpcTypeDb.CanRun(NpcCmdId, ENpcControlType.Recourse))
            {
                return(BehaveResult.Failure);
            }

//			Request req = GetRequest(EReqType.FollowPath) as RQFollowPath;
//			if(req != null && !req.CanRun())
//			{
//				specialRecurse = true;
//			}
//			else
//			{
//				specialRecurse = false;
//			}


            if (Enemy.IsNullOrInvalid(attackEnemy))
            {
                return(BehaveResult.Success);
            }

            if (Time.time - checkStarTime > Check_TIME)
            {
                checkStarTime = Time.time;
                if (!entity.NpcCmpt.HasEnemyLocked())
                {
                    entity.target.ClearEnemy();
                }
            }

            float Hp    = GetAttribute(AttribType.Hp);
            float HpMax = GetAttribute(AttribType.HpMax);

            if (Hp / HpMax >= 0.3f)         //!specialRecurse &&
            {
                return(BehaveResult.Success);
            }

            if (Time.time - hideStarTime > HIDE_TIME)
            {
                mdir         = mfind.GetHideDir(playerTrans.position, position, Enemies);
                hideStarTime = Time.time;
            }

            Vector3 dirPos = position + mdir.normalized * 10.0f;

            if (mfind.bNeedHide)
            {
                MoveToPosition(dirPos, SpeedState.Run);
            }
            else
            {
                StopMove();
                FaceDirection(playerTrans.position - position);
            }

            //吃到了合适的属性值或者没有合适的药品时停止
            ItemAsset.ItemObject mEatItem;
            if (NpcEatDb.IsContinueEat(entity, out mEatItem))
            {
                if (entity.UseItem.GetCdByItemProtoId(mEatItem.protoId) < PETools.PEMath.Epsilon)
                {
                    UseItem(mEatItem);
                }
            }
            SetCambat(false);
            return(BehaveResult.Running);
        }