namespace Application.Domain; public class GameAttrTool { public static UserAttrModel GetRoleAttrTemp(UserAttrModel temp, List attrData) { UserAttrModel result = new UserAttrModel(); result.minAtk = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Atk.ToString(), attrData, temp.minAtk)); result.maxAtk = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Atk.ToString(), attrData, temp.maxAtk)); result.defense = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Defense.ToString(), attrData, temp.defense)); result.agility = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Agility.ToString(), attrData, temp.agility)); result.upBlood = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Blood.ToString(), attrData, temp.upBlood)); result.upMorale = Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Morale.ToString(), attrData, temp.upMorale)); result.InBlood = GetAttrItemValue(GameEnum.AttrCode.InBlood.ToString(), attrData, temp.InBlood); result.Crit = GetAttrItemValue(GameEnum.AttrCode.Crit.ToString(), attrData, temp.Crit); result.NoHarm = GetAttrItemValue(GameEnum.AttrCode.NoHarm.ToString(), attrData, temp.NoHarm); result.Dodge = GetAttrItemValue(GameEnum.AttrCode.Dodge.ToString(), attrData, temp.Dodge); result.Rebound = GetAttrItemValue(GameEnum.AttrCode.Rebound.ToString(), attrData, temp.Rebound); result.ReboundLess = GetAttrItemValue(GameEnum.AttrCode.ReboundLess.ToString(), attrData, temp.ReboundLess); result.Punish = GetAttrItemValue(GameEnum.AttrCode.Punish.ToString(), attrData, temp.Punish); result.Slow = GetAttrItemValue(GameEnum.AttrCode.Slow.ToString(), attrData, temp.Slow); result.SlowLess = GetAttrItemValue(GameEnum.AttrCode.SlowLess.ToString(), attrData, temp.SlowLess); result.Poison = GetAttrItemValue(GameEnum.AttrCode.Poison.ToString(), attrData, temp.Poison); result.PoisonLess = GetAttrItemValue(GameEnum.AttrCode.PoisonLess.ToString(), attrData, temp.PoisonLess); result.Curse = GetAttrItemValue(GameEnum.AttrCode.Curse.ToString(), attrData, temp.Curse); result.CurseLess = GetAttrItemValue(GameEnum.AttrCode.CurseLess.ToString(), attrData, temp.CurseLess); result.Weaken = GetAttrItemValue(GameEnum.AttrCode.Weaken.ToString(), attrData, temp.Weaken); result.WeakenLess = GetAttrItemValue(GameEnum.AttrCode.WeakenLess.ToString(), attrData, temp.WeakenLess); result.Deadly = GetAttrItemValue(GameEnum.AttrCode.Deadly.ToString(), attrData, temp.Deadly); result.DeadlyLess = GetAttrItemValue(GameEnum.AttrCode.DeadlyLess.ToString(), attrData, temp.DeadlyLess); result.Depressed = GetAttrItemValue(GameEnum.AttrCode.Depressed.ToString(), attrData, temp.Depressed); result.DepressedLess = GetAttrItemValue(GameEnum.AttrCode.DepressedLess.ToString(), attrData, temp.DepressedLess); result.Breach = GetAttrItemValue(GameEnum.AttrCode.Breach.ToString(), attrData, temp.Breach); result.BreachLess = GetAttrItemValue(GameEnum.AttrCode.BreachLess.ToString(), attrData, temp.BreachLess); result.Del_Fashion = GetAttrItemValue(GameEnum.AttrCode.Del_Fashion.ToString(), attrData, temp.Del_Fashion); result.Atk_Next = GetAttrItemValue(GameEnum.AttrCode.Atk_Next.ToString(), attrData, temp.Atk_Next); result.Harm_Add = GetAttrItemValue(GameEnum.AttrCode.Harm_Add.ToString(), attrData, temp.Harm_Add); result.PalsyAtk = GetAttrItemValue(GameEnum.AttrCode.PalsyAtk.ToString(), attrData, temp.PalsyAtk); result.PalsyAtkLess = GetAttrItemValue(GameEnum.AttrCode.PalsyAtkLess.ToString(), attrData, temp.PalsyAtk); result.addExp = GetAttrItemValue(nameof(GameEnum.AttrCode.AddExp), attrData, temp.addExp); result.addGold = GetAttrItemValue(nameof(GameEnum.AttrCode.AddGold), attrData, temp.addGold); result.burst = GetAttrItemValue(nameof(GameEnum.AttrCode.Burst), attrData, temp.burst); result.luck = GetAttrItemValue(nameof(GameEnum.AttrCode.Luck), attrData, temp.luck); result.weight = Convert.ToInt32(GetAttrItemValue(nameof(GameEnum.AttrCode.Weight), attrData, temp.weight)); return result; } public static UserAttrModel GetRoleAttrTempMerge(UserAttrModel result, List attrData) { result.minAtk += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Atk.ToString(), attrData, result.minAtk)); result.maxAtk += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Atk.ToString(), attrData, result.maxAtk)); result.defense += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Defense.ToString(), attrData, result.defense)); result.agility += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Agility.ToString(), attrData, result.agility)); result.upBlood += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Blood.ToString(), attrData, result.upBlood)); result.upMorale += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Morale.ToString(), attrData, result.upMorale)); result.InBlood += GetAttrItemValue(GameEnum.AttrCode.InBlood.ToString(), attrData, 0); result.Crit += GetAttrItemValue(GameEnum.AttrCode.Crit.ToString(), attrData, 0); result.NoHarm += GetAttrItemValue(GameEnum.AttrCode.NoHarm.ToString(), attrData, 0); result.Dodge += GetAttrItemValue(GameEnum.AttrCode.Dodge.ToString(), attrData, 0); result.Rebound += GetAttrItemValue(GameEnum.AttrCode.Rebound.ToString(), attrData, 0); result.ReboundLess += GetAttrItemValue(GameEnum.AttrCode.ReboundLess.ToString(), attrData, 0); result.Punish += GetAttrItemValue(GameEnum.AttrCode.Punish.ToString(), attrData, 0); result.Slow += GetAttrItemValue(GameEnum.AttrCode.Slow.ToString(), attrData, 0); result.SlowLess += GetAttrItemValue(GameEnum.AttrCode.SlowLess.ToString(), attrData, 0); result.Poison += GetAttrItemValue(GameEnum.AttrCode.Poison.ToString(), attrData, 0); result.PoisonLess += GetAttrItemValue(GameEnum.AttrCode.PoisonLess.ToString(), attrData, 0); result.Curse += GetAttrItemValue(GameEnum.AttrCode.Curse.ToString(), attrData, 0); result.CurseLess += GetAttrItemValue(GameEnum.AttrCode.CurseLess.ToString(), attrData, 0); result.Weaken += GetAttrItemValue(GameEnum.AttrCode.Weaken.ToString(), attrData, 0); result.WeakenLess += GetAttrItemValue(GameEnum.AttrCode.WeakenLess.ToString(), attrData, 0); result.Deadly += GetAttrItemValue(GameEnum.AttrCode.Deadly.ToString(), attrData, 0); result.DeadlyLess += GetAttrItemValue(GameEnum.AttrCode.DeadlyLess.ToString(), attrData, 0); result.Depressed += GetAttrItemValue(GameEnum.AttrCode.Depressed.ToString(), attrData, 0); result.DepressedLess += GetAttrItemValue(GameEnum.AttrCode.DepressedLess.ToString(), attrData, 0); result.Breach += GetAttrItemValue(GameEnum.AttrCode.Breach.ToString(), attrData, 0); result.BreachLess += GetAttrItemValue(GameEnum.AttrCode.BreachLess.ToString(), attrData, 0); result.Del_Fashion += GetAttrItemValue(GameEnum.AttrCode.Del_Fashion.ToString(), attrData, 0); result.Atk_Next += GetAttrItemValue(GameEnum.AttrCode.Atk_Next.ToString(), attrData, 0); result.Harm_Add += GetAttrItemValue(GameEnum.AttrCode.Harm_Add.ToString(), attrData, 0); result.PalsyAtk += GetAttrItemValue(GameEnum.AttrCode.PalsyAtk.ToString(), attrData, 0); result.PalsyAtkLess += GetAttrItemValue(GameEnum.AttrCode.PalsyAtkLess.ToString(), attrData, 0); result.addExp += GetAttrItemValue(GameEnum.AttrCode.AddExp.ToString(), attrData, 0); result.addGold += GetAttrItemValue(GameEnum.AttrCode.AddGold.ToString(), attrData, 0); result.burst += GetAttrItemValue(GameEnum.AttrCode.Burst.ToString(), attrData, 0); result.luck += GetAttrItemValue(GameEnum.AttrCode.Luck.ToString(), attrData, 0); result.weight += Convert.ToInt32(GetAttrItemValue(GameEnum.AttrCode.Weight.ToString(), attrData, 0)) ; return result; } public static UserAttrModel GetRoleAttrTempMerge(UserAttrModel main, UserAttrModel vice) { main.minAtk += vice.minAtk; main.maxAtk += vice.maxAtk; main.defense += vice.defense; main.agility += vice.agility; main.upBlood += vice.upBlood; main.upMorale += vice.upMorale; main.InBlood += vice.InBlood; main.Crit += vice.Crit; main.NoHarm += vice.NoHarm; main.Dodge += vice.Dodge; main.Rebound += vice.Rebound; main.ReboundLess += vice.ReboundLess; main.Punish += vice.Punish; main.Slow += vice.Slow; main.Poison += vice.Poison; main.PoisonLess += vice.PoisonLess; main.Curse += vice.Curse; main.CurseLess += vice.CurseLess; main.Weaken += vice.Weaken; main.WeakenLess += vice.WeakenLess; main.Deadly += vice.Deadly; main.DeadlyLess += vice.DeadlyLess; main.Depressed += vice.Depressed; main.DepressedLess += vice.DepressedLess; main.Breach += vice.Breach; main.BreachLess += vice.BreachLess; main.Del_Fashion += vice.Del_Fashion; main.Atk_Next += vice.Atk_Next; main.Harm_Add += vice.Harm_Add; main.PalsyAtk += vice.PalsyAtk; main.PalsyAtkLess += vice.PalsyAtkLess; main.addExp += vice.addExp; main.addGold += vice.addGold; main.burst += vice.burst; main.luck += vice.luck; main.weight += vice.weight; return main; } public static decimal GetAttrItemValue(string attrCode, List AttrData, decimal unit) { decimal result = 0.00M; foreach (var item in AttrData) { if (attrCode == item.code) { if (string.IsNullOrEmpty(item.compute)) { continue; } if (item.compute == nameof(GameEnum.ComputeType.Ride)) { result += unit * Convert.ToDecimal(item.parameter); } else if (item.compute == nameof(GameEnum.ComputeType.Plus)) { result += Convert.ToDecimal(item.parameter); } else if (item.compute == nameof(GameEnum.ComputeType.Reduce)) { result = unit - Convert.ToDecimal(item.parameter); } else if (item.compute == nameof(GameEnum.ComputeType.Except)) { result = unit / Convert.ToDecimal(item.parameter); } } } return result; } public static async Task CheckRoleLoadBuff(UserAttrModel temp, List loadBuff) { foreach (var item in loadBuff) { if (item.code == nameof(GameEnum.AttrCode.Slow)) { decimal radio = item.count * 0.05M; temp.agility = Convert.ToInt32(temp.agility * (1.0M - radio)); } else if (item.code == nameof(GameEnum.AttrCode.Poison)) { decimal radio = item.count * 0.08M; temp.upBlood = Convert.ToInt32(temp.upBlood * (1.0M - radio)); } else if (item.code == nameof(GameEnum.AttrCode.Curse)) { decimal radio = item.count * 0.08M; temp.minAtk = Convert.ToInt32(temp.minAtk * (1.0M - radio)); temp.maxAtk = Convert.ToInt32(temp.maxAtk * (1.0M - radio)); } else if (item.code == nameof(GameEnum.AttrCode.Weaken)) { decimal radio = item.count * 0.02M; temp.Crit = temp.Crit - radio; } else if (item.code == nameof(GameEnum.AttrCode.Depressed)) { decimal radio = item.count * 0.07M; temp.upMorale = Convert.ToInt32(temp.upMorale * (1.0M - radio)); } else if (item.code == nameof(GameEnum.AttrCode.Breach)) { decimal radio = item.count * 0.04M; temp.defense = Convert.ToInt32(temp.defense * (1.0M - radio)); } else if (item.code == nameof(GameEnum.AttrCode.PalsyAtk)) { decimal radio = item.count * 0.1M; temp.Atk_Next -= radio; } } return temp; } }