public override void AutoTarget(AbilityInstance abilityInstance)
    {
        List <Character> enemyCharacters = abilityInstance.Caster.Team.EnemyTeam.Characters;

        abilityInstance.Targets.AddRange(enemyCharacters.Where(
                                             character => character.PositionHandler.Position == TeamPosition.Melee));
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 设置所属玩家
    /// </summary>
    /// <param name="_player"></param>
    public void SetPlayer(PlayerBase _player)
    {
        player = _player;
        defaultAbilityList.Clear();
        defaultAbilityCount    = 0;
        curDefaultAbilityIndex = 0;
        if (player == null)
        {
            return;
        }
        PlayerConfig playerRef = ConfigMng.Instance.GetPlayerConfig(player.Prof);

        if (playerRef != null)
        {
            List <int> list = playerRef.mormalSkillList;
            foreach (var item in list)
            {
                AbilityInstance abilityInstance = new AbilityInstance(item, 1, player, null);
                defaultAbilityList.Add(abilityInstance);
            }
            defaultAbilityCount    = defaultAbilityList.Count;
            curDefaultAbilityIndex = 0;
            if (playerRef.roundSkill != 0)
            {
                roundAbility = new AbilityInstance(playerRef.roundSkill, 1, player, null);
            }
        }
    }
Ejemplo n.º 3
0
 /// <summary>
 /// 技能移动,一般是后台确认后才能调用该方法 by吴江
 /// </summary>
 /// <param name="_instance"></param>
 public virtual void AbilityMove(AbilityInstance _instance)
 {
     if (moveFSM != null)
     {
         moveFSM.UseAbility(_instance);
     }
 }
Ejemplo n.º 4
0
    /// <summary>
    /// 使用急救术
    /// </summary>
    /// <param name="_instance"></param>
    public void C2S_UseAddHpAbility(AbilityInstance _instance)
    {
        Debug.logger.Log("使用急救术");
        pt_scene_skill_c005 msg = new pt_scene_skill_c005();

        msg.oid               = (uint)_instance.UserActor.id;
        msg.skill             = (uint)_instance.AbilityID;
        msg.lev               = 1;
        msg.target_id         = _instance.TargetActor == null ? 0 : (uint)_instance.TargetActor.id;
        msg.target_x          = _instance.TargetPostion.x;
        msg.target_y          = _instance.TargetPostion.y;
        msg.target_z          = _instance.TargetPostion.z;
        msg.x                 = _instance.UserPostion.x;
        msg.y                 = _instance.UserPostion.y;
        msg.z                 = _instance.UserPostion.z;
        msg.dir               = _instance.DirY;
        msg.seq               = NetMsgMng.CreateNewUnLockSerializeID();
        _instance.LastTryTime = Time.time;
        NetMsgMng.SendMsg(msg);
        _instance.serializeID = msg.seq;
        _instance.OnTringEnd += OnAbilityInstanceTringEnd;
        waitServerConfirmAbilityDic[msg.seq] = _instance;
        if (OnMainPlayerUseAbility != null && _instance.UserActor.id == GameCenter.curMainPlayer.id)
        {
            OnMainPlayerUseAbility();
        }
    }
Ejemplo n.º 5
0
 public void UseAbility(AbilityInstance _instance, System.Action _shake, System.Action _finish)
 {
     if (animFSM != null)
     {
         animFSM.DoPreviewAnim(_instance, fxCtrl, _shake, _finish);
     }
 }
Ejemplo n.º 6
0
    IEnumerator CouPreloadModel()
    {
        while (ConfigMng.Instance.Pendings > 0)
        {
            yield return(new WaitForFixedUpdate());
        }
        if (GameCenter.loginMng.createPlayerInfoDic.Count == 0)
        {
            GameCenter.loginMng.InitCreatePlayerInfo();
            foreach (PlayerBaseInfo item in GameCenter.loginMng.createPlayerInfoDic.Values)
            {
                CreatePlayer preloadPlayer = CreatePlayer.CreateDummy(item);
                preloadPlayer.StartAsyncCreate(() =>
                {
                    preloadPlayer.transform.position = new Vector3(-1000, -1000, -1000);
                });

                AbilityInstance ability = new AbilityInstance(item.CreateAbilityID, 1, null, null);
                if (ability != null)
                {
                    string effectName = ability.ProcessEffectList.Count > 0 ? ability.ProcessEffectList[0] : string.Empty;
                    if (!string.IsNullOrEmpty(effectName))
                    {
                        AssetMng.GetEeffctAssetObject(effectName, (x) => { });
                        //AssetMng.GetEffectInstance(effectName, null);//预加载特效
                    }
                }
            }
        }
    }
Ejemplo n.º 7
0
    public List <Character> GetAITargets(AbilityInstance abInst)
    {
        AbilityTargeting targeting  = abInst.Ability.Template.Targeting;
        List <Character> candidates = targeting.GetCandidates(abInst.Caster);
        int numTargetsReq           = targeting.NumTargetsRequired;

        if (candidates.Count == 0 || (candidates.Count < numTargetsReq && targeting.CannotRepeatSelection))
        {
            return(null);
        }

        List <Character> prioritizedCandidates = candidates.OrderByDescending(GetSelector(firstPriority)).
                                                 ThenBy(GetSelector(secondPriority)).ToList();

        tempTargets.Clear();
        for (int i = 0; i < numTargetsReq; i++)
        {
            for (int j = 0; j < prioritizedCandidates.Count; j++)
            {
                if (j == prioritizedCandidates.Count - 1 || HelperMethods.CheckChance(1 - priorityDeviation))
                {
                    tempTargets.Add(prioritizedCandidates[j]);
                    if (targeting.CannotRepeatSelection)
                    {
                        tempTargets.Remove(prioritizedCandidates[j]);
                    }
                    break;
                }
            }
        }
        return(tempTargets);
    }
    public override void ActivateAbility(List <Target> targets, AbilityInstance instance)
    {
        if (instance.owner.owner.resources.value >= instance.owner.cost)
        {
            GameSystem.Instance.resourceSystem.WithdrawResources(instance.owner.owner, instance.owner.cost);
            int counter = 0;
            if (damageAmounts != null && targets != null) //check for nulls
            {
                if (targets.Count > 0)                    //check that there are any targets
                {
                    new SpellCardActivateCommand(instance.owner.cardView).AddToQueue();

                    foreach (Target target in targets)     //perform actions on all targets
                    {
                        if (counter < damageAmounts.Count) //if there is a damage value for the next target
                        {
                            GameSystem.Instance.actionSystem.ExecuteAction(new AttackAction(target, instance.owner, damageAmounts[counter]));
                            //target.Damage(damageAmounts[counter]); //apply damage
                            counter++; //increment counter of damage values to apply to targets
                        }
                    }
                }
            }

            instance.owner.RemoveCard();
        }
    }
Ejemplo n.º 9
0
    public void SetCurPlayer(PlayerBaseInfo _info)
    {
        if (originalPosition != Vector3.zero && camera != null)
        {
            camera.transform.localPosition = originalPosition;
        }

        if (curCreatePlayer != null)
        {
            DestroyImmediate(curCreatePlayer.gameObject);
            curCreatePlayer = null;
        }
        if (_info == null)
        {
            return;
        }
        if (dragRotation != null)
        {
            dragRotation.SetObjRotY(180);
            dragRotation.SetEnable(false);//震动中不让拖动旋转,否则相机位置会偏差很大
        }
        curCreatePlayer = CreatePlayer.CreateDummy(_info);
        curCreatePlayer.transform.position = positionTransform.position;
        curCreatePlayer.StartAsyncCreate(() =>
        {
            AbilityInstance ability = new AbilityInstance(_info.CreateAbilityID, 1, curCreatePlayer, null);
            curCreatePlayer.UseAbility(ability, () =>
            {
                ShakeCamera(ability.ProcessShakeV3, (ability.ProcessShakePowerList.Count > 0 ? ability.ProcessShakePowerList[0] : 0.2f));
            }, FinishAbility);
        });
    }
Ejemplo n.º 10
0
        public void Show()
        {
            Self = Object.Instantiate(
                _loadObjectsManager.GetObjectByPath <GameObject>("Prefabs/UI/Popups/OverlordAbilityPopup"));
            Self.transform.SetParent(_uiManager.Canvas3.transform, false);

            _continueButton = Self.transform.Find("Button_Continue").GetComponent <Button>();
            _cancelButton   = Self.transform.Find("Button_Cancel").GetComponent <Button>();

            _continueButton.onClick.AddListener(ContinueButtonOnClickHandler);
            _cancelButton.onClick.AddListener(CancelButtonOnClickHandler);

            _title            = Self.transform.Find("Title").GetComponent <TextMeshProUGUI>();
            _skillName        = Self.transform.Find("SkillName").GetComponent <TextMeshProUGUI>();
            _skillDescription = Self.transform.Find("SkillDescription").GetComponent <TextMeshProUGUI>();

            _abilitiesGroup = Self.transform.Find("Abilities").gameObject;

            _heroImage = Self.transform.Find("HeroImage").GetComponent <Image>();

            _abilities.Clear();

            for (int i = 0; i < AbilityListSize; i++)
            {
                AbilityInstance abilityInstance = new AbilityInstance(_abilitiesGroup.transform);
                abilityInstance.SelectionChanged += AbilityInstanceOnSelectionChanged;
                _abilities.Add(abilityInstance);
            }
        }
Ejemplo n.º 11
0
 /// <summary>
 /// 被技能影响 by吴江
 /// </summary>
 /// <param name="_info"></param>
 public virtual void BeInfluencedByOther(AbilityInstance _instance, st.net.NetBase.skill_effect _result)
 {
     if (IsActor)
     {
         return;
     }
     unFinishedAbilityResultList.Add(new AbilityResultInfo(_instance, _result));
 }
Ejemplo n.º 12
0
 public bool IsRoundAbility(AbilityInstance _abilityInstance)
 {
     if (roundAbility != null && _abilityInstance != null && _abilityInstance.AbilityID == roundAbility.AbilityID)
     {
         return(true);
     }
     return(false);
 }
Ejemplo n.º 13
0
 public CardInstance(Card card)
 {
     //TODO : write method to generate unique instance IDs
     this.card  = card;
     this.power = card.power;
     this.cost  = card.cost;
     if (card.ability != null)
     {
         this.abilityInstance = card.ability.GetInstance(this);
     }
 }
Ejemplo n.º 14
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.º 15
0
 public void DoPreviewAnim(AbilityInstance curCastAbility, FXCtrl _fxCtrl, System.Action _shake, System.Action _finish)
 {
     animName      = curCastAbility.ProcessAnimationNameList.Count > 0?curCastAbility.ProcessAnimationNameList[0]:string.Empty;
     effectName    = curCastAbility.ProcessEffectList.Count > 0?curCastAbility.ProcessEffectList[0]:string.Empty;
     shakeTimeList = new List <int>(curCastAbility.ProcessShakeTimeList);//需要新构造一个,否则会被Remove到长度0
     fxCtrl        = _fxCtrl;
     OnShakeEvent  = _shake;
     OnFinish      = _finish;
     //Debug.Log("animName:"+animName+",effectName:"+effectName);
     stateMachine.Send((int)EventType.SelectedEnd);
 }
Ejemplo n.º 16
0
    ///// <summary>
    ///// 服务端通知使用技能 by吴江
    ///// </summary>
    ///// <param name="_info"></param>
    //public void UseAbility(AbilityInfo _info)
    //{
    //    if (_info == null) return;
    //    StopMovingTo();
    //    if (_info.MoveType != AbilityType.Normal)
    //    {
    //        waitForActMoveAbilityList.Add(new AbilityMoveData(_info, this.gameObject));
    //        stateMachine.Send((int)EventType.ABILITYMOVE);
    //    }
    //}

    /// <summary>
    /// 客户端通知使用技能 by吴江
    /// </summary>
    /// <param name="_info"></param>
    public void UseAbility(AbilityInstance _instance)
    {
        if (!_instance.HasServerConfirm || (_instance.endPosX == 0 && _instance.endPosZ == 0))
        {
            return;
        }
        if (_instance.PerformanceRef.selfShiftType != SelfShiftType.NO)
        {
            waitForActMoveAbilityList.Add(new AbilityMoveData(_instance, this.gameObject));
            stateMachine.Send((int)EventType.ABILITYMOVE);
        }
    }
Ejemplo n.º 17
0
 public AbilityBallisticCurveInfo(AbilityInstance _data)
 {
     lockData   = _data;
     configID   = (int)_data.ArrowID;
     instanceID = CreateLockInstanceID();
     target     = _data.TargetActor;
     isLock     = true;
     if (target != null)
     {
         direction = (target.transform.position - startPos).normalized;
     }
 }
Ejemplo n.º 18
0
    public virtual bool SelectTargetCheck(Character selected, AbilityInstance abilityInstance)
    {
        Character caster = abilityInstance.Caster;

        return(!selected.HealthHandler.Dead &&
               (canSelectAllies || selected.Team != caster.Team) &&
               (canSelectEnemies && selected.Targetable || selected.Team == caster.Team) &&
               (canSelectMelee || selected.PositionHandler.Position != TeamPosition.Melee) &&
               (canSelectSupport || selected.PositionHandler.Position != TeamPosition.Support) &&
               (!cannotSelectSelf || selected == caster) &&
               (!cannotSelectLastMelee || selected.PositionHandler.CanDoRepositionAction) &&
               (!cannotRepeatSelection || !abilityInstance.Targets.Contains(selected)));
    }
Ejemplo n.º 19
0
    public static AbilityInstance NewAbility(Ability ability = null, Character caster = null)
    {
        AbilityInstance instance = GetNextInstance();

        instance.Ability = ability;
        instance.Caster  = caster;
        instance.Targets.Clear();
        instance.OnStart.RemoveAllListeners();
        instance.OnComplete.RemoveAllListeners();
        instance.OnCancel.RemoveAllListeners();
        instance.isActive = true;
        return(instance);
    }
Ejemplo n.º 20
0
 /// <summary>
 /// 强制结束技能,限制切换场景的时候使用
 /// </summary>
 public virtual void ForceCancelAbility()
 {
     if (moveFSM != null)
     {
         moveFSM.CancelAbility();
     }
     if (animFSM != null)
     {
         animFSM.StopCast();
     }
     curTryUseAbility = null;
     TickAnimation();
 }
Ejemplo n.º 21
0
    void ManualTarget(AbilityInstance abilityInstance)
    {
        TargetingController targetingController = abilityInstance.Caster.Team.TargetingController;

        targetingController.ChooseNewTargets(Template.Targeting.NumTargetsRequired,
                                             character => Template.Targeting.SelectTargetCheck(character, abilityInstance),
                                             targets =>
        {
            abilityInstance.Targets.AddRange(targets);
            abilityInstance.Execute();
        },
                                             abilityInstance.Cancel);
    }
Ejemplo n.º 22
0
    void UseAITargets(AbilityInstance abilityInstance, TargetingAI aiTargeting = null)
    {
        if (aiTargeting == null)
        {
            return;
        }
        List <Character> targets = aiTargeting.GetAITargets(abilityInstance);

        if (targets != null)
        {
            abilityInstance.Targets.AddRange(targets);
        }
    }
Ejemplo n.º 23
0
 protected void OnAbilityInstanceTringEnd(uint _serializeID)
 {
     if (waitServerConfirmAbilityDic.ContainsKey(_serializeID))
     {
         AbilityInstance ins = waitServerConfirmAbilityDic[_serializeID] as AbilityInstance;
         if (ins != null)
         {
             ins.OnTringEnd -= OnAbilityInstanceTringEnd;
             ins.serializeID = 0;
         }
         waitServerConfirmAbilityDic.Remove(_serializeID);
     }
 }
Ejemplo n.º 24
0
 /// <summary>
 /// 尝试战斗 by吴江
 /// </summary>
 /// <param name="_curType">当前状态</param>
 /// <param name="_nextType">下一顺位的状态</param>
 protected void TryFight(EventType _curType, EventType _nextType, float _checkRange)
 {
     if (CheckNeedTeleport())
     {
         return;
     }
     if (lastNormalAbilityInstance != null && !lastNormalAbilityInstance.HasServerConfirm && !lastNormalAbilityInstance.IsTringEnd)
     {
         return;
     }
     if ((thisPlayer.transform.position - owner.transform.position).sqrMagnitude > _checkRange * _checkRange)
     {
         stateMachine.Send((int)_nextType);
         return;
     }
     if (thisTarget == null || thisTarget.isDead)
     {
         thisTarget = TryTarget(_curType);
     }
     if (thisTarget == null || thisTarget.isDead)
     {
         stateMachine.Send((int)_nextType);
     }
     else
     {
         if (IsUseLoseHitAbility)
         {
             return;
         }
         if (thisTarget != null)
         {
             TryTalk(EntourageTalkType.ATTACK);
             if (!thisPlayer.isRigidity && !thisPlayer.IsProtecting && !commandMng.HasCommand())
             {
                 if (lastNormalAbilityInstance != null && !lastNormalAbilityInstance.HasServerConfirm)
                 {
                     Debug.LogError("Catch: 捕捉到上一次普通攻击尚未获得后台确认,前台即发动下一次普通攻击!");
                 }
                 AbilityInstance instance = thisPlayer.abilityMng.GetNextEntourageAbility(thisTarget);
                 //Debug.Log("TryUseAbility:"+(instance==null?"null":instance.AbilityName)+",Time:"+Time.realtimeSinceStartup);
                 if (instance != null)
                 {
                     thisPlayer.TryUseAbility(instance, true);
                     lastNormalAbilityInstance = instance;
                     startNoTargetTime         = Time.time;
                 }
             }
         }
     }
     return;
 }
Ejemplo n.º 25
0
 /// <summary>
 /// 禁止外部使用
 /// </summary>
 /// <param name="_instance"></param>
 public override void UseAbility(AbilityInstance _instance)
 {
     if (isDead)
     {
         return;
     }
     if (_instance.thisSkillMode != SkillMode.NORMALSKILL && isSilent)
     {
         return;
     }
     curTryUseAbility = null;
     base.UseAbility(_instance);
     abilityMng.C2S_UseAbility(_instance);
 }
Ejemplo n.º 26
0
    public bool CastAbility(AbilityType abilityType, TargetingAI aiTargeting = null)
    {
        if (!Character.Available)
        {
            Debug.Log("Character busy, not active, or incapacitated");
            return(false);
        }
        if (casting.Value)
        {
            Debug.Log("Already casting a spell");
            return(false);
        }

        Ability ability = GetAbility(abilityType);

        if (ability == null)
        {
            Debug.LogError("Ability doesn't exist");
            return(false);
        }
        if (!ability.CanCast)
        {
            Debug.Log("Ability can't cast");
            return(false);
        }

        AbilityInstance abInst = ability.GetNewInstance(Character);

        abInst.OnStart.AddListener(() =>
        {
            casting.Value = true;
            Character.ActionPointHandler.UseActionPoints(ability.Template.ActionPointCost);
        });

        abInst.OnComplete.AddListener(() =>
        {
            casting.Value = false;
            Character.Mover.DoneInMelee();
        });

        abInst.OnCancel.AddListener(() =>
        {
            casting.Value = false;
            Character.Mover.DoneInMelee();
        });

        return(ability.StartCasting(aiTargeting));
    }
Ejemplo n.º 27
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.º 28
0
    protected void S2C_OnAbilityCancelWarnning(Pt _info)
    {
        pt_scene_skill_aleret_cancel_c022 msg = _info as pt_scene_skill_aleret_cancel_c022;

        if (msg != null)
        {
            ObjectType type = (ObjectType)msg.obj_sort;
            SmartActor user = null;
            switch (type)
            {
            case ObjectType.Player:
                if ((int)msg.oid == GameCenter.mainPlayerMng.MainPlayerInfo.ServerInstanceID)
                {
                    user = GameCenter.curMainPlayer;
                }
                else
                {
                    user = GameCenter.curGameStage.GetOtherPlayer((int)msg.oid) as SmartActor;
                }
                break;

            case ObjectType.MOB:
                user = GameCenter.curGameStage.GetMOB((int)msg.oid) as SmartActor;
                break;

            case ObjectType.Entourage:
                user = GameCenter.curGameStage.GetEntourage((int)msg.oid) as EntourageBase;
                break;

            default:
                break;
            }
            if (user != null)
            {
                AbilityInstance instance = user.curTryUseAbility;
                if (instance == null)
                {
                    return;
                }
                if (instance.AbilityID == msg.skill && instance.RuneID == msg.skill_rune &&
                    instance.Level == msg.lev && instance.NeedPrepare && !instance.HasServerConfirm)
                {
                    user.CancelAbility();
                }
            }
        }
    }
Ejemplo n.º 29
0
    public void AddCDTime(AbilityInstance _ability)
    {
        ability = _ability;
        if (ability.HasServerConfirm)
        {
            CurTime = ability.RestCD;
            if (ability.RestCD > 0)
            {
                isdown = true;
            }
        }
        else
        {
            CurTime = CoolingTime;
        }

        // Debug.Log("当前冷却时间为" + CurTime);
    }
Ejemplo n.º 30
0
    public override void ActivateAbility(List <Target> targets, AbilityInstance instance)
    {
        if (instance.owner.owner.resources.value >= instance.owner.cost)
        {
            if (targets != null && targets.Count > 0)
            {
                GameSystem.Instance.resourceSystem.WithdrawResources(instance.owner.owner, instance.owner.cost);

                foreach (Target target in targets)
                {
                    target.Heal(healAmount);
                }

                new SpellCardActivateCommand(instance.owner.cardView).AddToQueue();

                instance.owner.RemoveCard();
            }
        }
    }