Ejemplo n.º 1
0
 /// <summary>
 /// 获取翻滚技能,可能为null(法师没有冲锋)
 /// </summary>
 /// <returns></returns>
 public AbilityInstance GetRoundAbility(SmartActor _target)
 {
     if (roundAbility != null)
     {
         roundAbility.ResetResult(_target);
     }
     return(roundAbility);
 }
Ejemplo n.º 2
0
    public void OnClickSkillBtnActon(int _btnIndex)
    {
        if (PlayerInputListener.isDragingRockerItem)//如果在拖动摇杆移动不能释放技能 add by黄洪兴
        {
            return;
        }
        if (!GameCenter.curMainPlayer.inputListener.CheckLock())
        {
            GameCenter.messageMng.AddClientMsg(58);
            return; //如果是锁定操作状态,那么不能使用技能 add by吴江
        }
        //测试技能
        if (!SkillButton[_btnIndex].HadLearn)
        {
            GameCenter.messageMng.AddClientMsg(42);
            return;
        }
        if (!SkillButton[_btnIndex].HadMp)
        {
            GameCenter.messageMng.AddClientMsg(43);
            return;
        }
        if (SkillButton[_btnIndex].IsDown != true)
        {
            if (GameCenter.curMainPlayer.isRigidity)
            {
                return;
            }
            if (SkillButton [_btnIndex].skillInfo == null)
            {
                return;
            }
            int ID = SkillButton [_btnIndex].skillInfo.SkillID;
            //AbilityInstance curInstance = GameCenter.curMainPlayer.curTryUseAbility;
            AbilityInstance thisInstance = GameCenter.skillMng.abilityDic[ID];
            if (GameCenter.curMainPlayer.IsSilent && thisInstance.thisSkillMode == SkillMode.CLIENTSKILL)
            {
                GameCenter.messageMng.AddClientMsg(59);
                return;                 //如果是沉默状态,那么不能使用技能 add by吴江
            }
            //if (curInstance != null && curInstance == thisInstance && curInstance.TargetActor == GameCenter.curMainPlayer.CurTarget && !curInstance.HasServerConfirm)
            //{
            //    return;
            //}
            GameCenter.curMainPlayer.CancelCommands();
            thisInstance.ResetResult(GameCenter.curMainPlayer.CurTarget as SmartActor);
            thisInstance.SetActor(GameCenter.curMainPlayer, GameCenter.curMainPlayer.CurTarget as SmartActor);
            GameCenter.curMainPlayer.TryUseAbility(thisInstance, true);
//            if (GameCenter.curMainPlayer.AttakType != MainPlayer.AttackType.AUTOFIGHT)
//            {
//                GameCenter.curMainPlayer.GoNormalFight();
//            }
        }
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 获取下一次普通攻击的类型
    /// </summary>
    /// <returns></returns>
    public AbilityInstance GetNextDefaultAbility(SmartActor _target)
    {
        if (LastDefaultAbility != null && LastDefaultAbility.RestCD <= 0)
        {
            ResetDefaultAbility();            //普攻CD结束,则重置到第一个普攻
        }
        int             curIndex = CountCurIndex(curDefaultAbilityIndex, defaultAbilityCount);
        AbilityInstance instance = defaultAbilityList[curIndex];

        if (instance != null)
        {
            instance.ResetResult(_target);
            return(instance);
        }
        return(null);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 获取随从要使用的下一个技能
    /// </summary>
    /// <param name="_target"></param>
    /// <returns></returns>
    public AbilityInstance GetNextEntourageAbility(SmartActor _target)
    {
        AbilityInstance curInstance = null;

        //以普攻CD为间隔,大约三秒发动一次攻击 by邓成
        if (!(Time.time - previousAbilityTime > AttackDiffTime))
        {
            return(null);
        }
        for (int i = 0; i < entourageDefaultAbilityList.Count; i++)
        {
            if (entourageDefaultAbilityList[i].RestCD <= 0)
            {
                int curRandom = UnityEngine.Random.Range(0, 100);
                if (curRandom / 100f > entourageDefaultAbilityList[i].PetUseRate)
                {
                    curInstance = entourageDefaultAbilityList[i];
                    break;
                }
            }
        }
        if (curInstance == null && entourageNormalAbility != null && entourageNormalAbility.RestCD <= 0)
        {
            curInstance = entourageNormalAbility;
        }
        if (curInstance != null)
        {
            curInstance.ResetResult(_target);
            previousAbilityTime = Time.time;
        }
        if (curInstance != null)
        {
            curInstance.FullCD();
        }
        return(curInstance);
    }
Ejemplo n.º 5
0
    protected virtual void UpdateAutoFightState(fsm.State _curState)
    {
        if (thisTarget == null || thisTarget.isDead)
        {
            //OnAutoPick();
            TaskStateType curTaskStateType = CheckMainTaskStateType();
            if (GameCenter.curGameStage.SceneType != SceneType.DUNGEONS && curTaskStateType != mainTaskStateType && curTaskStateType == TaskStateType.Finished)
            {
                thisPlayer.GoTraceTask(curTarTaskInfo);
                return;
            }
            else if (!commandMng.HasCommand())
            {
                stateMachine.Send((int)EventType.TARGET);                //怪死了直接进入寻怪状态,去掉回起始点的设定  TARGET状态中有回路点的设定 By邓成
            }
        }
        else
        {
            if (IsUseLoseHitAbility)
            {
                return;
            }
            if (thisTarget != null)
            {
                if (!thisPlayer.isRigidity && !thisPlayer.IsProtecting && !commandMng.HasCommand())
                {
                    if (thisTarget.typeID == ObjectType.SceneItem)
                    {
                        Command_MoveTo cmdMoveTo = new Command_MoveTo();
                        cmdMoveTo.destPos     = thisTarget.transform.position;
                        cmdMoveTo.maxDistance = 0f;
                        commandMng.PushCommand(cmdMoveTo);
                    }
                    if (IsEnemy(thisTarget))
                    {
                        if (thisTarget.typeID == ObjectType.MOB)
                        {
                            Monster mob = thisTarget as Monster;
                            if (mob != null && mob.isDead)
                            {
                                thisTarget = null;
                                return;
                            }
                        }
                        else if (thisTarget.typeID == ObjectType.Player)
                        {
                            OtherPlayer opc = thisTarget as OtherPlayer;
                            if (opc != null && opc.isDead)
                            {
                                thisTarget = null;
                                return;
                            }
                        }
                        switch (thisPlayer.AttakType)
                        {
                        case MainPlayer.AttackType.AUTOFIGHT:
                        case MainPlayer.AttackType.COMPLETE_TASK:
                            AbilityInstance instance = GameCenter.skillMng.GetAbilityRandom();
                            if (instance == null || instance.RestCD > 0)
                            {
                                if (lastAbilityInstance != null && lastAbilityInstance.thisSkillMode == SkillMode.NORMALSKILL && thisPlayer.IsProtecting)
                                {
                                    return;
                                }
                                if (lastNormalAbilityInstance != null && !lastNormalAbilityInstance.HasServerConfirm)
                                {
                                    Debug.LogError(lastNormalAbilityInstance.AbilityName + " Catch: 捕捉到上一次攻击尚未获得后台确认,前台即发动下一次普通攻击!");
                                }
                                instance = thisPlayer.abilityMng.GetNextDefaultAbility(thisTarget);
                                lastNormalAbilityInstance = instance;
                            }
                            else
                            {
                                instance.ResetResult(thisTarget);
                                instance.SetActor(thisPlayer, thisTarget);
                            }
                            if (instance != null)
                            {
                                lastAbilityInstance = instance;
                                thisPlayer.TryUseAbility(instance, true);
                            }
                            break;

                        default:
                            stateMachine.Send((int)EventType.FIGHT);
                            break;
                        }
                    }
                }
            }
        }
    }