using System; using System.Collections.Generic; namespace Wizard; public class AIVirtualCardParameter { public int BaseId; public string CardName; public int Attack; public int Life; public int DefaultAttack; public int DefaultLife; public int MaxLife; public int DefLife; public int LastLife; public int MaxAttackableCount; public int DefaultMaxAttackableCount; public int EvoAttackPlus; public int EvoLifePlus; public AIVirtualCardParameter(BattleCardBase origin) { ISkillApplyInformation skillApplyInformation = origin.SkillApplyInformation; BaseId = origin.BaseParameter.BaseCardId; CardName = origin.BaseParameter.CardName; Attack = origin.Atk; Life = origin.Life; DefaultAttack = origin.BaseParameter.Atk; DefaultLife = origin.BaseParameter.Life; MaxLife = origin.MaxLife; DefLife = Life; LastLife = skillApplyInformation.GetLastLife(); if (origin.IsUnit) { EvoAttackPlus = GetAtkFromSkillApplyInfo(skillApplyInformation.OffenseModifierList, origin.BaseParameter.EvoAtk) - GetAtkFromSkillApplyInfo(skillApplyInformation.OffenseModifierList, origin.BaseParameter.Atk); EvoLifePlus = GetLifeFromSkillApplyInfo(skillApplyInformation.LifeModifierList, origin.BaseParameter.EvoLife) - GetLifeFromSkillApplyInfo(skillApplyInformation.LifeModifierList, origin.BaseParameter.Life); MaxAttackableCount = origin.MaxAttackableCount; DefaultMaxAttackableCount = origin.MaxAttackableCount; } else { EvoAttackPlus = 0; EvoLifePlus = 0; MaxAttackableCount = 0; DefaultMaxAttackableCount = 0; } } private AIVirtualCardParameter(AIVirtualCardParameter cloneOriginal) { BaseId = cloneOriginal.BaseId; CardName = cloneOriginal.CardName; Attack = cloneOriginal.Attack; Life = cloneOriginal.Life; DefaultAttack = cloneOriginal.DefaultAttack; DefaultLife = cloneOriginal.DefaultLife; MaxLife = cloneOriginal.MaxLife; DefLife = cloneOriginal.DefLife; LastLife = cloneOriginal.LastLife; EvoAttackPlus = cloneOriginal.EvoAttackPlus; EvoLifePlus = cloneOriginal.EvoLifePlus; MaxAttackableCount = cloneOriginal.MaxAttackableCount; DefaultMaxAttackableCount = cloneOriginal.MaxAttackableCount; } public AIVirtualCardParameter(BattleCardBase origin, BattleCardBase baseParamCard, AIBuffRecorderCollection buffRecord) { ISkillApplyInformation skillApplyInformation = baseParamCard.SkillApplyInformation; (int, int) simulateBuff = buffRecord.GetSimulateBuff(); BaseId = origin.CardId; CardName = origin.BaseParameter.CardName; Attack = GetAtkFromSkillApplyInfo(skillApplyInformation.OffenseModifierList, origin.BaseParameter.Atk, simulateBuff.Item1); Life = GetLifeFromSkillApplyInfo(skillApplyInformation.LifeModifierList, origin.BaseParameter.Life, simulateBuff.Item2); DefaultAttack = origin.BaseParameter.Atk; DefaultLife = origin.BaseParameter.Life; MaxLife = origin.MaxLife + simulateBuff.Item2; DefLife = Life; LastLife = skillApplyInformation.GetLastLife() + simulateBuff.Item2; if (origin.IsUnit) { EvoAttackPlus = GetAtkFromSkillApplyInfo(skillApplyInformation.OffenseModifierList, origin.BaseParameter.EvoAtk, simulateBuff.Item1) - Attack; EvoLifePlus = GetLifeFromSkillApplyInfo(skillApplyInformation.LifeModifierList, origin.BaseParameter.EvoLife, simulateBuff.Item2) - Life; MaxAttackableCount = origin.MaxAttackableCount; DefaultMaxAttackableCount = origin.MaxAttackableCount; } else { EvoAttackPlus = 0; EvoLifePlus = 0; MaxAttackableCount = 0; DefaultMaxAttackableCount = 0; } } public AIVirtualCardParameter(int attack, int life, int attackableCount) { Attack = attack; Life = life; DefaultAttack = attack; DefaultLife = life; MaxLife = life; DefLife = life; LastLife = life; MaxAttackableCount = attackableCount; DefaultMaxAttackableCount = attackableCount; BaseId = 0; CardName = "Dummy"; EvoAttackPlus = 0; EvoLifePlus = 0; } public AIVirtualCardParameter Clone() { return new AIVirtualCardParameter(this); } private int GetAtkFromSkillApplyInfo(List modifiers, int baseAtk, int simulateBuffValue = 0) { int num = baseAtk; int count = modifiers.Count; for (int i = 0; i < count; i++) { num = modifiers[i].CalcOffense(num); } return Math.Max(0, num + simulateBuffValue); } private int GetLifeFromSkillApplyInfo(List modifiers, int baseMaxLife, int simulateBuffValue = 0) { int num = baseMaxLife; int num2 = baseMaxLife; int count = modifiers.Count; for (int i = 0; i < count; i++) { ICardLifeModifier cardLifeModifier = modifiers[i]; num2 = cardLifeModifier.CalcMaxLife(num2); num = cardLifeModifier.CalcLife(num); num = Math.Min(num, num2); } return num + simulateBuffValue; } public void Validate(AIVirtualCardParameter param) { } }