public string DealMinion(ActionStatus game, MinionCard Minion) { var Pos = Minion.战场位置; if (Pos.本方对方标识) { if (game.AllRole.MyPrivateInfo.handCards.Count != SystemManager.MaxHandCardCount) { game.AllRole.MyPrivateInfo.handCards.Add( CardUtility.GetCardInfoBySN(game.AllRole.MyPublicInfo.BattleField.BattleMinions[Pos.位置 - 1].序列号) ); } game.AllRole.MyPublicInfo.BattleField.BattleMinions[Pos.位置 - 1] = null; } else { if (game.AllRole.YourPrivateInfo.handCards.Count != SystemManager.MaxHandCardCount) { game.AllRole.YourPrivateInfo.handCards.Add( CardUtility.GetCardInfoBySN(game.AllRole.YourPublicInfo.BattleField.BattleMinions[Pos.位置 - 1].序列号) ); } game.AllRole.YourPublicInfo.BattleField.BattleMinions[Pos.位置 - 1] = null; } return String.Empty; }
/// <summary> /// InitByMinion /// </summary> /// <param name="minion"></param> public void Init(MinionCard minion) { 名称 = minion.名称; 攻击力 = minion.实际攻击值; 生命值 = minion.生命值; 使用成本 = minion.使用成本; 状态列表 = minion.状态; 能否攻击 = minion.能否攻击; 描述 = minion.描述; }
public MinionCardEditor(string CardSn) { InitializeComponent(); if (string.IsNullOrEmpty(CardSn)) { IsCreateMode = true; } else { IsCreateMode = false; minion = (MinionCard)Engine.Utility.CardUtility.GetCardInfoBySN(CardSn); } }
/// <summary> /// 对随从动作 /// </summary> /// <param name="game"></param> /// <param name="Minion"></param> /// <returns></returns> string IAtomicEffect.DealMinion(ActionStatus game, MinionCard Minion) { int HealthPoint = ExpressHandler.GetEffectPoint(game, 生命值回复表达式); if (Minion.设置被治疗后状态(HealthPoint)) { game.battleEvenetHandler.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.治疗, 触发位置 = Minion.战场位置 }); } return Server.ActionCode.strHealth + CardUtility.strSplitMark + Minion.战场位置.ToString() + CardUtility.strSplitMark + HealthPoint.ToString(); }
/// <summary> /// 符合种族条件 /// </summary> /// <param name="minion"></param> /// <param name="SelectOpt"></param> /// <returns></returns> public static bool 符合选择条件(MinionCard minion, string strCondition) { if (string.IsNullOrEmpty(strCondition) || strCondition == CardUtility.strIgnore) return true; foreach (var 种族名称 in Enum.GetNames(typeof(CardUtility.种族枚举))) { if (种族名称 == strCondition) { return strCondition == minion.种族.ToString(); } if (("非" + 种族名称) == strCondition) { return strCondition != minion.种族.ToString(); } } switch (strCondition.Substring(1, 1)) { case "+": return minion.攻击力 >= int.Parse(strCondition.Substring(0, 1)); case "-": return minion.攻击力 <= int.Parse(strCondition.Substring(0, 1)); } return true; }
/// <summary> /// 将对象表示在UI上 /// </summary> /// <param name="card"></param> public void GetBasicInfo(MinionCard card) { numCost.Value = card.使用成本; txtName.Text = card.名称; txtDescription.Text = card.描述; }
/// <summary> /// 卡牌入战场 /// </summary> /// <param name="CardSn"></param> public void AppendToBattle(MinionCard Minion) { int Position = MinionCount + 1; PutToBattle(Position, Minion); }
/// <summary> /// 去除死去随从 /// </summary> /// <param name="evt"></param> /// <param name="本方对方标识"></param> /// <returns></returns> public List<MinionCard> ClearDead(BattleEventHandler evt, bool 本方对方标识) { //必须是当前的随从,不能使编号 //如果是沉默状态的随从,无亡语效果! List<MinionCard> DeadList = new List<MinionCard>(); var CloneMinions = new MinionCard[SystemManager.MaxMinionCount]; int ALive = 0; for (int i = 0; i < SystemManager.MaxMinionCount; i++) { if (BattleMinions[i] != null) { if (BattleMinions[i].生命值 > 0) { CloneMinions[ALive] = BattleMinions[i]; ALive++; } else { DeadList.Add(BattleMinions[i]); evt.事件池.Add(new EventCard.全局事件() { 触发事件类型 = EventCard.事件类型枚举.死亡, 触发位置 = BattleMinions[i].战场位置, }); } } } BattleMinions = CloneMinions; for (int i = 0; i < MinionCount; i++) { BattleMinions[i].战场位置.位置 = i + 1; BattleMinions[i].战场位置.本方对方标识 = 本方对方标识; } return DeadList; }
/// <summary> /// 卡牌入战场 /// </summary> /// <param name="Position">从1开始的位置</param> /// <param name="Minion">随从</param> /// <remarks>不涉及到战吼等计算</remarks> public void PutToBattle(int Position, MinionCard Minion) { //战场满了 if (MinionCount == SystemManager.MaxMinionCount) return; //无效的位置 if ((Position < 1) || (Position > MinionCount + 1) || Position > SystemManager.MaxMinionCount) return; //插入操作 if (BattleMinions[Position - 1] == null) { //添加到最右边 BattleMinions[Position - 1] = Minion; } else { //Position右边的全体移位,腾出地方 for (int i = SystemManager.MaxMinionCount - 1; i >= Position; i--) { BattleMinions[i] = BattleMinions[i - 1]; } BattleMinions[Position - 1] = Minion; } for (int i = 0; i < MinionCount; i++) { BattleMinions[i].战场位置.位置 = i + 1; BattleMinions[i].战场位置.本方对方标识 = 本方对方标识; } }
/// <summary> /// 随从的导入 /// </summary> /// <param name="target"></param> /// <param name="workbook"></param> private void Minion(dynamic workbook) { if (Directory.Exists(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\")) { Directory.Delete(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\", true); } Directory.CreateDirectory(XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\"); //随从的导入 dynamic worksheet = workbook.Sheets(1); int rowCount = 4; while (!String.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text)) { Engine.Card.MinionCard Minion = new Engine.Card.MinionCard(); Minion.序列号 = worksheet.Cells(rowCount, 2).Text; Minion.名称 = worksheet.Cells(rowCount, 3).Text; Minion.描述 = worksheet.Cells(rowCount, 4).Text; Minion.职业 = CardUtility.GetEnum<Engine.Utility.CardUtility.ClassEnum>(worksheet.Cells(rowCount, 5).Text, Engine.Utility.CardUtility.ClassEnum.中立); Minion.种族 = CardUtility.GetEnum<Engine.Utility.CardUtility.种族Enum>(worksheet.Cells(rowCount, 6).Text, Engine.Utility.CardUtility.种族Enum.无); Minion.使用成本 = CardUtility.GetInt(worksheet.Cells(rowCount, 7).Text); Minion.攻击力 = CardUtility.GetInt(worksheet.Cells(rowCount, 8).Text); Minion.生命值上限 = CardUtility.GetInt(worksheet.Cells(rowCount, 9).Text); Minion.Rare = CardUtility.GetEnum<Engine.Card.CardBasicInfo.稀有程度>(worksheet.Cells(rowCount, 12).Text, CardBasicInfo.稀有程度.白色); Minion.是否启用 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 13).Text); Minion.嘲讽特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 14).Text); Minion.冲锋特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 15).Text); Minion.无法攻击特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 16).Text); Minion.风怒特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 17).Text); Minion.潜行特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 18).Text); Minion.圣盾特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 19).Text); Minion.法术免疫特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 20).Text); Minion.英雄技能免疫特性 = !String.IsNullOrEmpty(worksheet.Cells(rowCount, 21).Text); Boolean HasBuff = false; for (int i = 22; i < 25; i++) { if (!String.IsNullOrEmpty(worksheet.Cells(rowCount, i).Text)) { HasBuff = true; break; } } if (HasBuff) { Minion.光环效果.Name = Minion.名称; Minion.光环效果.Scope = CardUtility.GetEnum<Engine.Card.MinionCard.光环范围>(worksheet.Cells(rowCount, 22).Text, Engine.Card.MinionCard.光环范围.随从全体); Minion.光环效果.EffectType = CardUtility.GetEnum<Engine.Card.MinionCard.光环类型>(worksheet.Cells(rowCount, 23).Text, Engine.Card.MinionCard.光环类型.增加攻防); Minion.光环效果.BuffInfo = worksheet.Cells(rowCount, 24).Text; } Minion.战吼效果 = worksheet.Cells(rowCount, 25).Text; Minion.战吼类型 = CardUtility.GetEnum<Engine.Card.MinionCard.战吼类型列表>(worksheet.Cells(rowCount, 26).Text, Engine.Card.MinionCard.战吼类型列表.默认); Minion.亡语效果 = worksheet.Cells(rowCount, 27).Text; Minion.激怒效果 = worksheet.Cells(rowCount, 28).Text; Minion.连击效果 = worksheet.Cells(rowCount, 29).Text; Minion.回合开始效果 = worksheet.Cells(rowCount, 30).Text; Minion.回合结束效果 = worksheet.Cells(rowCount, 31).Text; Minion.过载 = CardUtility.GetInt(worksheet.Cells(rowCount, 32).Text); Minion.自身事件效果.触发效果事件类型 = CardUtility.GetEnum<Engine.Utility.CardUtility.事件类型列表>(worksheet.Cells(rowCount, 33).Text, Engine.Utility.CardUtility.事件类型列表.无); Minion.自身事件效果.效果编号 = worksheet.Cells(rowCount, 34).Text; Minion.自身事件效果.触发效果事件方向 = CardUtility.GetEnum<Engine.Utility.CardUtility.TargetSelectDirectEnum>(worksheet.Cells(rowCount, 35).Text, Engine.Utility.CardUtility.TargetSelectDirectEnum.本方); Minion.自身事件效果.限制信息 = worksheet.Cells(rowCount, 36).Text; Minion.特殊效果 = CardUtility.GetEnum<Engine.Card.MinionCard.特殊效果列表>(worksheet.Cells(rowCount, 37).Text, Engine.Card.MinionCard.特殊效果列表.无效果); XmlSerializer xml = new XmlSerializer(typeof(Engine.Card.MinionCard)); String XmlFilename = XmlFolderPicker.SelectedPathOrFileName + "\\Minion\\" + Minion.序列号 + ".xml"; xml.Serialize(new StreamWriter(XmlFilename), Minion); rowCount++; } }
/// <summary> /// 去除死去随从 /// </summary> /// <param name="game"></param> /// <param name="本方对方标识"></param> /// <returns></returns> public List<MinionCard> ClearDead(GameManager game, Boolean 本方对方标识) { //必须是当前的随从,不能使编号 //如果是沉默状态的随从,无亡语效果! List<MinionCard> DeadList = new List<MinionCard>(); var CloneMinions = new MinionCard[BattleFieldInfo.MaxMinionCount]; int ALive = 0; for (int i = 0; i < BattleFieldInfo.MaxMinionCount; i++) { if (BattleMinions[i] != null) { if (BattleMinions[i].生命值 > 0) { CloneMinions[ALive] = BattleMinions[i]; ALive++; } else { DeadList.Add(BattleMinions[i]); game.事件处理组件.事件池.Add(new Engine.Utility.CardUtility.全局事件() { 触发事件类型 = CardUtility.事件类型列表.死亡, 触发位置 = BattleMinions[i].战场位置, }); } } } BattleMinions = CloneMinions; for (int i = 0; i < MinionCount; i++) { BattleMinions[i].战场位置.Postion = i + 1; BattleMinions[i].战场位置.本方对方标识 = 本方对方标识; } return DeadList; }
/// <summary> /// 随从的导入 /// </summary> /// <param name="target"></param> /// <param name="workbook"></param> private void Minion(dynamic workbook) { if (Directory.Exists(ExportFolderPicker.SelectedPathOrFileName + "\\Minion\\")) { Directory.Delete(ExportFolderPicker.SelectedPathOrFileName + "\\Minion\\", true); } Directory.CreateDirectory(ExportFolderPicker.SelectedPathOrFileName + "\\Minion\\"); //随从的导入 dynamic worksheet = workbook.Sheets(1); int rowCount = 4; while (!string.IsNullOrEmpty(worksheet.Cells(rowCount, 2).Text)) { MinionCard Minion = new MinionCard(); Minion.序列号 = worksheet.Cells(rowCount, 2).Text; Minion.名称 = worksheet.Cells(rowCount, 3).Text; Minion.描述 = worksheet.Cells(rowCount, 4).Text; Minion.职业 = CSharpUtility.GetEnum<CardUtility.职业枚举>(worksheet.Cells(rowCount, 5).Text, CardUtility.职业枚举.中立); Minion.种族 = CSharpUtility.GetEnum<CardUtility.种族枚举>(worksheet.Cells(rowCount, 6).Text, CardUtility.种族枚举.无); Minion.使用成本 = CSharpUtility.GetInt(worksheet.Cells(rowCount, 7).Text); Minion.攻击力 = CSharpUtility.GetInt(worksheet.Cells(rowCount, 8).Text); Minion.生命值上限 = CSharpUtility.GetInt(worksheet.Cells(rowCount, 9).Text); Minion.稀有程度 = CSharpUtility.GetEnum<CardBasicInfo.稀有程度枚举>(worksheet.Cells(rowCount, 12).Text, CardBasicInfo.稀有程度枚举.白色); Minion.是否启用 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 13).Text); Minion.嘲讽特性 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 14).Text); Minion.冲锋特性 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 15).Text); Minion.风怒特性 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 17).Text); Minion.潜行特性 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 18).Text); Minion.圣盾特性 = !string.IsNullOrEmpty(worksheet.Cells(rowCount, 19).Text); bool HasBuff = false; for (int i = 22; i < 25; i++) { if (!string.IsNullOrEmpty(worksheet.Cells(rowCount, i).Text)) { HasBuff = true; break; } } if (HasBuff) { Minion.光环效果.来源 = Minion.名称; //Minion.光环效果.范围 = CSharpUtility.GetEnum<Buff.光环范围枚举>(worksheet.Cells(rowCount, 22).Text, Buff.光环范围枚举.随从全体); Minion.光环效果.类型 = CSharpUtility.GetEnum<Buff.光环类型枚举>(worksheet.Cells(rowCount, 23).Text, Buff.光环类型枚举.增加攻防); Minion.光环效果.信息 = worksheet.Cells(rowCount, 24).Text; } Minion.战吼效果 = worksheet.Cells(rowCount, 25).Text; Minion.亡语效果 = worksheet.Cells(rowCount, 27).Text; Minion.激怒效果 = worksheet.Cells(rowCount, 28).Text; Minion.连击效果 = worksheet.Cells(rowCount, 29).Text; Minion.回合开始效果 = worksheet.Cells(rowCount, 30).Text; Minion.回合结束效果 = worksheet.Cells(rowCount, 31).Text; Minion.过载 = CSharpUtility.GetInt(worksheet.Cells(rowCount, 32).Text); //Minion.自身事件效果.触发效果事件类型 = CSharpUtility.GetEnum<CardUtility.事件类型枚举>(worksheet.Cells(rowCount, 33).Text, CardUtility.事件类型枚举.无); Minion.自身事件效果.效果编号 = worksheet.Cells(rowCount, 34).Text; Minion.自身事件效果.触发效果事件方向 = CSharpUtility.GetEnum<CardUtility.目标选择方向枚举>(worksheet.Cells(rowCount, 35).Text, CardUtility.目标选择方向枚举.本方); Minion.自身事件效果.限制信息 = worksheet.Cells(rowCount, 36).Text; Minion.特殊效果 = CSharpUtility.GetEnum<MinionCard.特殊效果枚举>(worksheet.Cells(rowCount, 37).Text, MinionCard.特殊效果枚举.无效果); switch (exportType) { case SystemManager.ExportType.XML: XmlSerializer xml = new XmlSerializer(typeof(MinionCard)); string XmlFilename = ExportFolderPicker.SelectedPathOrFileName + "\\Minion\\" + Minion.序列号 + ".xml"; xml.Serialize(new StreamWriter(XmlFilename), Minion); break; case SystemManager.ExportType.JSON: string JSonFilename = ExportFolderPicker.SelectedPathOrFileName + "\\Minion\\" + Minion.序列号 + ".json"; StreamWriter json = new StreamWriter(JSonFilename); json.Write(Minion.ToJson()); json.Close(); break; default: break; } rowCount++; } }