Beispiel #1
0
        /// <summary>
        /// 运行法术
        /// </summary>
        /// <param name="game"></param>
        /// <param name="IsMyAction"></param>
        /// <param name="Ability"></param>
        /// <returns></returns>
        public static List <string> RunAbility(ActionStatus game, AbilityDefine Ability)
        {
            List <string> Result = new List <string>();

            //对象选择处理
            if (Ability.MainAbilityDefine.AbliltyPosPicker.IsNeedTargetSelect())
            {
                //如果是BS的话,可以通过game的上下文数据获得位置信息
                if (SystemManager.游戏类型 == SystemManager.GameType.HTML版)
                {
                    //如果是随从卡牌的时候,这里是战吼的动作,战吼的动作的话,前面已经对于指定位置的设置了
                    if (game.ActionName == "USESPELLCARD")
                    {
                        Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos = CardUtility.指定位置结构体.FromString(game.Interrupt.SessionDic["SPELLPOSITION"]);
                    }
                }
                else
                {
                    Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos = ActionStatus.GetSelectTarget(Ability.MainAbilityDefine.AbliltyPosPicker);
                }
            }
            //取消处理
            if (Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos.位置 == Client.BattleFieldInfo.UnknowPos)
            {
                Result.Clear();
                return(Result);
            }
            //法术伤害对于攻击型效果的加成
            if (Ability.MainAbilityDefine.效果条件 == CardUtility.strIgnore && Ability.MainAbilityDefine.EffectCount > 1)
            {
                Ability.MainAbilityDefine.EffectCount += game.AllRole.MyPublicInfo.BattleField.AbilityDamagePlus;
            }
            //按照回数执行效果
            for (int cnt = 0; cnt < Ability.MainAbilityDefine.EffectCount; cnt++)
            {
                //系统法术:有些法术的True和False是不同的类型
                RunEffect(game, Ability.MainAbilityDefine, Result);
                ActionStatus.RandomSeed++;
                //是否每次结算?这里的逻辑需要确认!
                Result.AddRange(ActionStatus.Settle(game));
            }
            //追加条件计算
            if (Ability.AppendAbilityDefine == null || (!ExpressHandler.AppendAbilityCondition(game, Ability)))
            {
                return(Result);
            }
            //按照回数执行追加效果
            //继承主效果的选定位置信息
            Ability.AppendAbilityDefine.AbliltyPosPicker.SelectedPos = Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos;
            for (int cnt = 0; cnt < Ability.AppendAbilityDefine.EffectCount; cnt++)
            {
                //系统法术
                RunEffect(game, Ability.AppendAbilityDefine, Result);
                ActionStatus.RandomSeed++;
                Result.AddRange(ActionStatus.Settle(game));
            }
            return(Result);
        }
Beispiel #2
0
 /// <summary>
 /// 运行法术
 /// </summary>
 /// <param name="game"></param>
 /// <param name="IsMyAction"></param>
 /// <param name="Ability"></param>
 /// <returns></returns>
 public static List<string> RunAbility(ActionStatus game, AbilityDefine Ability)
 {
     List<string> Result = new List<string>();
     //对象选择处理
     if (Ability.MainAbilityDefine.AbliltyPosPicker.IsNeedTargetSelect())
     {
         //如果是BS的话,可以通过game的上下文数据获得位置信息
         if (SystemManager.游戏类型 == SystemManager.GameType.HTML版)
         {
             //如果是随从卡牌的时候,这里是战吼的动作,战吼的动作的话,前面已经对于指定位置的设置了
             if (game.ActionName == "USESPELLCARD")
             {
                 Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos = CardUtility.指定位置结构体.FromString(game.Interrupt.SessionDic["SPELLPOSITION"]);
             }
         }
         else
         {
             Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos = ActionStatus.GetSelectTarget(Ability.MainAbilityDefine.AbliltyPosPicker);
         }
     }
     //取消处理
     if (Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos.位置 == Client.BattleFieldInfo.UnknowPos)
     {
         Result.Clear();
         return Result;
     }
     //法术伤害对于攻击型效果的加成
     if (Ability.MainAbilityDefine.效果条件 == CardUtility.strIgnore && Ability.MainAbilityDefine.EffectCount > 1)
     {
         Ability.MainAbilityDefine.EffectCount += game.AllRole.MyPublicInfo.BattleField.AbilityDamagePlus;
     }
     //按照回数执行效果
     for (int cnt = 0; cnt < Ability.MainAbilityDefine.EffectCount; cnt++)
     {
         //系统法术:有些法术的True和False是不同的类型
         RunEffect(game, Ability.MainAbilityDefine, Result);
         ActionStatus.RandomSeed++;
         //是否每次结算?这里的逻辑需要确认!
         Result.AddRange(ActionStatus.Settle(game));
     }
     //追加条件计算
     if (Ability.AppendAbilityDefine == null || (!ExpressHandler.AppendAbilityCondition(game, Ability)))
     {
         return Result;
     }
     //按照回数执行追加效果
     //继承主效果的选定位置信息
     Ability.AppendAbilityDefine.AbliltyPosPicker.SelectedPos = Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos;
     for (int cnt = 0; cnt < Ability.AppendAbilityDefine.EffectCount; cnt++)
     {
         //系统法术
         RunEffect(game, Ability.AppendAbilityDefine, Result);
         ActionStatus.RandomSeed++;
         Result.AddRange(ActionStatus.Settle(game));
     }
     return Result;
 }