コード例 #1
0
ファイル: frmExport.cs プロジェクト: hxlbuzz/HearthStone
 /// <summary>
 /// 获得法术定义
 /// </summary>
 /// <param name="worksheet"></param>
 /// <param name="rowCount"></param>
 /// <returns></returns>
 private static void GetAbilityDefine(ref AbilityCard.AbilityDefine Ability, dynamic worksheet, ref int rowCount)
 {
     Ability.MainAbilityDefine = GetEffectDefine(worksheet, ref rowCount);
     //追加效果
     String NextLine = worksheet.Cells(rowCount + 1, 2).Text;
     if (!String.IsNullOrEmpty(NextLine) && NextLine == "追加条件")
     {
         rowCount++;
         //当前行是追加条件
         Ability.AppendEffectCondition = worksheet.Cells(rowCount, 3).Text;
         rowCount++;
         //当前行是第一效果的标题栏
         Ability.AppendAbilityDefine = GetEffectDefine(worksheet, ref rowCount);
     }
 }
コード例 #2
0
ファイル: frmExport.cs プロジェクト: hxlbuzz/HearthStone
 /// <summary>
 /// 法术的导入
 /// </summary>
 /// <param name="target"></param>
 /// <param name="workbook"></param>
 private void Ability(dynamic workbook)
 {
     if (Directory.Exists(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\"))
     {
         Directory.Delete(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\", true);
     }
     Directory.CreateDirectory(XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\");
     //法术的导入
     dynamic worksheet = workbook.Sheets(2);
     int rowCount = 4;
     Engine.Card.AbilityCard Ability;
     while (!String.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text))
     {
         //当前行肯定是卡牌基本情报
         Ability = new AbilityCard();
         Ability.序列号 = worksheet.Cells(rowCount, 2).Text;
         Ability.名称 = worksheet.Cells(rowCount, 3).Text;
         Ability.描述 = worksheet.Cells(rowCount, 4).Text;
         Ability.职业 = CardUtility.GetEnum<Engine.Utility.CardUtility.ClassEnum>(worksheet.Cells(rowCount, 9).Text, Engine.Utility.CardUtility.ClassEnum.中立);
         Ability.使用成本 = CardUtility.GetInt(worksheet.Cells(rowCount, 10).Text);
         Ability.过载 = CardUtility.GetInt(worksheet.Cells(rowCount, 11).Text);
         Ability.是否启用 = true;
         rowCount++;
         //当前行肯定是选择条件
         Ability.效果选择类型 = CardUtility.GetEnum<AbilityCard.效果选择类型枚举>(worksheet.Cells(rowCount, 3).Text,
             Engine.Card.AbilityCard.效果选择类型枚举.无需选择);
         Ability.FirstAbilityDefine.描述 = worksheet.Cells(rowCount, 4).Text;
         Ability.SecondAbilityDefine.描述 = worksheet.Cells(rowCount, 5).Text;
         rowCount++;
         GetAbilityDefine(ref Ability.FirstAbilityDefine, worksheet, ref rowCount);
         if (Ability.效果选择类型 != Engine.Card.AbilityCard.效果选择类型枚举.无需选择)
         {
             rowCount++;
             //当前行是第一效果的标题栏
             GetAbilityDefine(ref Ability.SecondAbilityDefine, worksheet, ref rowCount);
         }
         XmlSerializer xml = new XmlSerializer(typeof(Engine.Card.AbilityCard));
         String XmlFilename = XmlFolderPicker.SelectedPathOrFileName + "\\Ability\\" + Ability.序列号 + ".xml";
         xml.Serialize(new StreamWriter(XmlFilename), Ability);
         rowCount++;
     }
 }
コード例 #3
0
ファイル: AbilityCard.cs プロジェクト: hxlbuzz/HearthStone
        /// <summary>
        /// 运行法术
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="ConvertPosDirect"></param>
        /// <param name="Ability"></param>
        /// <param name="TargetPosInfo"></param>
        /// <returns></returns>
        private List<String> RunAbilityEffect(GameManager game,
                                              Boolean ConvertPosDirect,
                                              AbilityCard.AbilityDefine Ability)
        {
            List<String> Result = new List<string>();

            //对象选择处理
            if (Ability.MainAbilityDefine.AbliltyPosPicker.EffictTargetSelectMode == CardUtility.TargetSelectModeEnum.指定 ||
                Ability.MainAbilityDefine.AbliltyPosPicker.EffictTargetSelectMode == CardUtility.TargetSelectModeEnum.横扫 ||
                Ability.MainAbilityDefine.AbliltyPosPicker.EffictTargetSelectMode == CardUtility.TargetSelectModeEnum.相邻)
            {
                Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos = game.GetSelectTarget(Ability.MainAbilityDefine.AbliltyPosPicker);
            }
            else
            {
                if (ConvertPosDirect)
                {
                    switch (Ability.MainAbilityDefine.AbliltyPosPicker.EffectTargetSelectDirect)
                    {
                        case CardUtility.TargetSelectDirectEnum.本方:
                            Ability.MainAbilityDefine.AbliltyPosPicker.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.对方;
                            break;
                        case CardUtility.TargetSelectDirectEnum.对方:
                            Ability.MainAbilityDefine.AbliltyPosPicker.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.本方;
                            break;
                        case CardUtility.TargetSelectDirectEnum.双方:
                            break;
                        default:
                            break;
                    }
                }
            }

            //取消处理
            if (Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos.Postion == -1)
            {
                Result.Clear();
                return Result;
            }

            //法术伤害对于攻击型效果的加成
            if (Ability.MainAbilityDefine.效果条件 == CardUtility.strIgnore && Ability.MainAbilityDefine.EffectCount > 1)
            {
                Ability.MainAbilityDefine.EffectCount += game.MyInfo.BattleField.AbilityDamagePlus;
            }
            //按照回数执行效果
            for (int cnt = 0; cnt < Ability.MainAbilityDefine.EffectCount; cnt++)
            {
                //系统法术
                switch (Ability.MainAbilityDefine.TrueAtomicEffect.AtomicEffectType)
                {
                    case AtomicEffectDefine.AtomicEffectEnum.卡牌:
                    case AtomicEffectDefine.AtomicEffectEnum.水晶:
                    case AtomicEffectDefine.AtomicEffectEnum.召唤:
                    case AtomicEffectDefine.AtomicEffectEnum.武器:
                        Result.AddRange(RunGameSystemEffect(game, ConvertPosDirect, Ability.MainAbilityDefine.TrueAtomicEffect, Ability.MainAbilityDefine.AbliltyPosPicker));
                        break;
                    case AtomicEffectDefine.AtomicEffectEnum.控制:
                        Result.AddRange(ControlEffect.RunEffect(game, Ability.MainAbilityDefine.AbliltyPosPicker.SelectedPos.ToString()));
                        break;
                    default:
                        Result.AddRange(Effecthandler.RunSingleEffect(Ability.MainAbilityDefine, game, GameManager.RandomSeed));
                        break;
                }
                GameManager.RandomSeed++;
                Result.AddRange(game.Settle());
            }
            //追加条件计算
            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++)
            {
                //系统法术
                switch (Ability.AppendAbilityDefine.TrueAtomicEffect.AtomicEffectType)
                {
                    case AtomicEffectDefine.AtomicEffectEnum.卡牌:
                    case AtomicEffectDefine.AtomicEffectEnum.水晶:
                    case AtomicEffectDefine.AtomicEffectEnum.召唤:
                    case AtomicEffectDefine.AtomicEffectEnum.武器:
                        Result.AddRange(RunGameSystemEffect(game, ConvertPosDirect, Ability.AppendAbilityDefine.TrueAtomicEffect,
                                                                                    Ability.AppendAbilityDefine.AbliltyPosPicker));
                        break;
                    case AtomicEffectDefine.AtomicEffectEnum.控制:
                        Result.AddRange(ControlEffect.RunEffect(game, Ability.AppendAbilityDefine.AbliltyPosPicker.SelectedPos.ToString()));
                        break;
                    default:
                        Result.AddRange(Effecthandler.RunSingleEffect(Ability.AppendAbilityDefine, game, GameManager.RandomSeed));
                        break;
                }
                GameManager.RandomSeed++;
                Result.AddRange(game.Settle());
            }
            return Result;
        }