mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2026-01-19 14:08:23 +00:00
技能和数据查询调整
This commit is contained in:
parent
0e5c1dd6d4
commit
91cb2eadf7
@ -8,22 +8,57 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
|
|||||||
{
|
{
|
||||||
public override long Id => (long)PassiveEffectID.禁止治疗;
|
public override long Id => (long)PassiveEffectID.禁止治疗;
|
||||||
public override string Name => "禁止治疗";
|
public override string Name => "禁止治疗";
|
||||||
public override string Description => $"此角色已被禁止治疗。来自:[ {Source} ] 的 [ {Skill.Name} ]";
|
public override string Description => $"此角色已被禁止治疗{禁止类型}。来自:[ {Source} ] 的 [ {Skill.Name} ]";
|
||||||
public override EffectType EffectType => EffectType.GrievousWound;
|
public override EffectType EffectType => EffectType.GrievousWound;
|
||||||
public override Character Source => _sourceCharacter;
|
public override Character Source => _sourceCharacter;
|
||||||
public override bool Durative => _durative;
|
public override bool Durative => _durative;
|
||||||
public override double Duration => _duration;
|
public override double Duration => _duration;
|
||||||
public override int DurationTurn => _durationTurn;
|
public override int DurationTurn => _durationTurn;
|
||||||
|
|
||||||
|
public string 禁止类型
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_allowRecovery && _allowLifeSteal && _allowHealing)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<string> strings = [];
|
||||||
|
if (!_allowRecovery)
|
||||||
|
{
|
||||||
|
strings.Add("自然回复");
|
||||||
|
}
|
||||||
|
if (!_allowLifeSteal)
|
||||||
|
{
|
||||||
|
strings.Add("生命偷取");
|
||||||
|
}
|
||||||
|
if (!_allowHealing)
|
||||||
|
{
|
||||||
|
strings.Add("应用治疗");
|
||||||
|
}
|
||||||
|
return $"({string.Join("、", strings)})";
|
||||||
|
}
|
||||||
|
}
|
||||||
private readonly Character _sourceCharacter;
|
private readonly Character _sourceCharacter;
|
||||||
|
private readonly bool _allowRecovery;
|
||||||
|
private readonly bool _allowLifeSteal;
|
||||||
|
private readonly bool _allowHealing;
|
||||||
private readonly bool _durative;
|
private readonly bool _durative;
|
||||||
private readonly double _duration;
|
private readonly double _duration;
|
||||||
private readonly int _durationTurn;
|
private readonly int _durationTurn;
|
||||||
|
|
||||||
public 禁止治疗(Skill skill, Character sourceCharacter, bool durative = false, double duration = 0, int durationTurn = 1) : base(skill)
|
public 禁止治疗(Skill skill, Character sourceCharacter, bool allowRecovery = false, bool allowLifeSteal = false, bool allowHealing = false, bool durative = false, double duration = 0, int durationTurn = 1) : base(skill)
|
||||||
{
|
{
|
||||||
GamingQueue = skill.GamingQueue;
|
GamingQueue = skill.GamingQueue;
|
||||||
_sourceCharacter = sourceCharacter;
|
_sourceCharacter = sourceCharacter;
|
||||||
|
_allowRecovery = allowRecovery;
|
||||||
|
_allowLifeSteal = allowLifeSteal;
|
||||||
|
_allowHealing = allowHealing;
|
||||||
|
if (!_allowHealing)
|
||||||
|
{
|
||||||
|
_allowLifeSteal = false;
|
||||||
|
_allowRecovery = false;
|
||||||
|
}
|
||||||
_durative = durative;
|
_durative = durative;
|
||||||
_duration = duration;
|
_duration = duration;
|
||||||
_durationTurn = durationTurn;
|
_durationTurn = durationTurn;
|
||||||
@ -31,11 +66,26 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
|
|||||||
|
|
||||||
public override bool BeforeApplyRecoveryAtTimeLapsing(Character character, ref double hr, ref double mr)
|
public override bool BeforeApplyRecoveryAtTimeLapsing(Character character, ref double hr, ref double mr)
|
||||||
{
|
{
|
||||||
return true;
|
return _allowRecovery;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool BeforeLifesteal(Character character, Character enemy, double damage, double steal)
|
||||||
|
{
|
||||||
|
return _allowLifeSteal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool BeforeHealToTarget(Character actor, Character target, double heal, bool canRespawn)
|
||||||
|
{
|
||||||
|
return _allowHealing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEffectGained(Character character)
|
public override void OnEffectGained(Character character)
|
||||||
{
|
{
|
||||||
|
if (_allowRecovery && _allowLifeSteal && _allowHealing)
|
||||||
|
{
|
||||||
|
character.Effects.Remove(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (_durative && RemainDuration == 0)
|
if (_durative && RemainDuration == 0)
|
||||||
{
|
{
|
||||||
RemainDuration = Duration;
|
RemainDuration = Duration;
|
||||||
|
|||||||
@ -47,7 +47,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
|
|||||||
|
|
||||||
public override void AfterDeathCalculation(Character death, bool hasMaster, Character? killer, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney, Character[] assists)
|
public override void AfterDeathCalculation(Character death, bool hasMaster, Character? killer, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney, Character[] assists)
|
||||||
{
|
{
|
||||||
if (GamingQueue != null && killer != null && killer == _targetCharacter && Source != null && death != Source && GamingQueue.Queue.Contains(Source))
|
if (GamingQueue != null && !hasMaster && killer != null && killer == _targetCharacter && Source != null && death != Source && GamingQueue.Queue.Contains(Source))
|
||||||
{
|
{
|
||||||
WriteLine($"[ {Source} ] 正在观察 [ {killer} ] 的情绪。");
|
WriteLine($"[ {Source} ] 正在观察 [ {killer} ] 的情绪。");
|
||||||
if (LastType == CharacterActionType.NormalAttack)
|
if (LastType == CharacterActionType.NormalAttack)
|
||||||
@ -82,15 +82,22 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
|
|||||||
Source.Effects.Add(e);
|
Source.Effects.Add(e);
|
||||||
WriteLine($"[ {Source} ] 复制了 [ {killer} ] 的技能:{LastSkill.Name}!!");
|
WriteLine($"[ {Source} ] 复制了 [ {killer} ] 的技能:{LastSkill.Name}!!");
|
||||||
}
|
}
|
||||||
Effect e2 = new 时雨标记(Skill, Source)
|
if (killer.Effects.FirstOrDefault(e => e is 时雨标记) is 时雨标记 e2)
|
||||||
{
|
{
|
||||||
Durative = false,
|
e2.RemainDurationTurn = 3;
|
||||||
DurationTurn = 3,
|
}
|
||||||
RemainDurationTurn = 3
|
else
|
||||||
};
|
{
|
||||||
e2.OnEffectGained(killer);
|
e2 = new 时雨标记(Skill, Source)
|
||||||
killer.Effects.Add(e2);
|
{
|
||||||
WriteLine($"[ {Source} ] 给予了 [ {killer} ] 时雨标记!");
|
Durative = false,
|
||||||
|
DurationTurn = 3,
|
||||||
|
RemainDurationTurn = 3
|
||||||
|
};
|
||||||
|
e2.OnEffectGained(killer);
|
||||||
|
killer.Effects.Add(e2);
|
||||||
|
WriteLine($"[ {Source} ] 给予了 [ {killer} ] 时雨标记!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public override long Id => Skill.Id;
|
public override long Id => Skill.Id;
|
||||||
public override string Name => Skill.Name;
|
public override string Name => Skill.Name;
|
||||||
public override string Description => $"{Skill.SkillOwner()}在场上时,会召唤数名雇佣兵协助战斗,初始数量为 {最小数量} 名,雇佣兵具有独立的回合,生命值为{Skill.SkillOwner()}的 {生命值比例 * 100:0.##}% [ {Skill.Character?.MaxHP * 生命值比例:0.##} ],攻击力为{Skill.SkillOwner()}的 {攻击力比例 * 100:0.##}% 基础攻击力 [ {Skill.Character?.BaseATK * 攻击力比例:0.##} ]," +
|
public override string Description => $"{Skill.SkillOwner()}在场上时,会召唤数名雇佣兵协助战斗,初始数量为 {最小数量} 名,雇佣兵具有独立的回合,生命值为{Skill.SkillOwner()}的 {生命值比例 * 100:0.##}% [ {Skill.Character?.MaxHP * 生命值比例:0.##} ],攻击力为{Skill.SkillOwner()}的 {攻击力比例 * 100:0.##}% 基础攻击力 [ {Skill.Character?.BaseATK * 攻击力比例:0.##} ]," +
|
||||||
$"完整继承其他能力值(暴击率、闪避率等)。当{Skill.SkillOwner()}参与击杀时,便会临时产生一名额外的雇佣兵。场上最多可以存在 {最大数量} 名雇佣兵,达到数量后不再产生新的雇佣兵;当不足 {最小数量} 名雇佣兵时,{补充间隔} {GameplayEquilibriumConstant.InGameTime}后会重新补充一名雇佣兵。" +
|
$"完整继承其他能力值(暴击率、闪避率等),雇佣兵每{GameplayEquilibriumConstant.InGameTime}流失 {生命流失 * 100:0.##}% 当前生命值。当{Skill.SkillOwner()}参与击杀时,便会临时产生一名额外的雇佣兵。场上最多可以存在 {最大数量} 名雇佣兵,达到数量后不再产生新的雇佣兵;当不足 {最小数量} 名雇佣兵时,{补充间隔} {GameplayEquilibriumConstant.InGameTime}后会重新补充一名雇佣兵。" +
|
||||||
(雇佣兵团.Count < 最小数量 && Skill.CurrentCD > 0 ? $"(下次补充:{Skill.CurrentCD} {GameplayEquilibriumConstant.InGameTime}后)" : "");
|
(雇佣兵团.Count < 最小数量 && Skill.CurrentCD > 0 ? $"(下次补充:{Skill.CurrentCD} {GameplayEquilibriumConstant.InGameTime}后)" : "");
|
||||||
|
|
||||||
public List<雇佣兵> 雇佣兵团 { get; } = [];
|
public List<雇佣兵> 雇佣兵团 { get; } = [];
|
||||||
@ -37,6 +37,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public const int 补充间隔 = 30;
|
public const int 补充间隔 = 30;
|
||||||
public const double 生命值比例 = 0.1;
|
public const double 生命值比例 = 0.1;
|
||||||
public const double 攻击力比例 = 0.6;
|
public const double 攻击力比例 = 0.6;
|
||||||
|
public const double 生命流失 = 0.09;
|
||||||
|
|
||||||
public override void AfterDeathCalculation(Character death, bool hasMaster, Character? killer, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney, Character[] assists)
|
public override void AfterDeathCalculation(Character death, bool hasMaster, Character? killer, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney, Character[] assists)
|
||||||
{
|
{
|
||||||
@ -73,6 +74,18 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
{
|
{
|
||||||
保底补充(character);
|
保底补充(character);
|
||||||
}
|
}
|
||||||
|
foreach (雇佣兵 gyb in 雇佣兵团)
|
||||||
|
{
|
||||||
|
if (gyb.HP > 0)
|
||||||
|
{
|
||||||
|
double lost = gyb.HP * 生命流失 * elapsed;
|
||||||
|
gyb.HP -= lost;
|
||||||
|
if (gyb.HP <= 0)
|
||||||
|
{
|
||||||
|
gyb.HP = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnEffectLost(Character character)
|
public override void OnEffectLost(Character character)
|
||||||
@ -125,7 +138,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
InitialHR = character.HR,
|
InitialHR = character.HR,
|
||||||
InitialMR = character.MR,
|
InitialMR = character.MR,
|
||||||
Lifesteal = character.Lifesteal,
|
Lifesteal = character.Lifesteal,
|
||||||
ExPDR = character.PDR,
|
ExPDR = character.ExPDR,
|
||||||
PhysicalPenetration = character.PhysicalPenetration,
|
PhysicalPenetration = character.PhysicalPenetration,
|
||||||
MagicalPenetration = character.MagicalPenetration
|
MagicalPenetration = character.MagicalPenetration
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||||
public override double EPCost => 100;
|
public override double EPCost => 100;
|
||||||
public override double CD => 60;
|
public override double CD => 75;
|
||||||
public override double HardnessTime { get; set; } = 10;
|
public override double HardnessTime { get; set; } = 10;
|
||||||
public override bool CanSelectSelf => false;
|
public override bool CanSelectSelf => false;
|
||||||
public override bool CanSelectEnemy => true;
|
public override bool CanSelectEnemy => true;
|
||||||
@ -40,7 +40,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public override ImmuneType IgnoreImmune => ImmuneType.All;
|
public override ImmuneType IgnoreImmune => ImmuneType.All;
|
||||||
|
|
||||||
public string 爆炸伤害描述 => $"对受到标记的目标造成伤害时将产生爆炸,爆炸将产生 {分裂伤害系数 * 100:0.##}% 分裂伤害。分裂伤害为全图索敌,会优先分裂至三个在持续时间内对{Skill.SkillOwner()}造成伤害最多的敌人,若没有符合条件的敌人或敌人数量不足,则将分裂至被标记的敌人,或至多三个随机的敌人。";
|
public string 爆炸伤害描述 => $"对受到标记的目标造成伤害时将产生爆炸,爆炸将产生 {分裂伤害系数 * 100:0.##}% 分裂伤害。分裂伤害为全图索敌,会优先分裂至三个在持续时间内对{Skill.SkillOwner()}造成伤害最多的敌人,若没有符合条件的敌人或敌人数量不足,则将分裂至被标记的敌人,或至多三个随机的敌人。";
|
||||||
public double 直接伤害 => 180 + 240 * (Skill.Level - 1);
|
public double 直接伤害 => 180 + 75 * (Skill.Level - 1);
|
||||||
public double 持续时间 => 25 + 2 * (Skill.Level - 1);
|
public double 持续时间 => 25 + 2 * (Skill.Level - 1);
|
||||||
public double 分裂伤害系数 => 0.25 + 0.02 * (Skill.Level - 1);
|
public double 分裂伤害系数 => 0.25 + 0.02 * (Skill.Level - 1);
|
||||||
public double 力量提升 => 0.6 * (Skill.Character?.BaseSTR ?? 0);
|
public double 力量提升 => 0.6 * (Skill.Character?.BaseSTR ?? 0);
|
||||||
|
|||||||
@ -26,13 +26,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
{
|
{
|
||||||
public override long Id => Skill.Id;
|
public override long Id => Skill.Id;
|
||||||
public override string Name => Skill.Name;
|
public override string Name => Skill.Name;
|
||||||
public override string Description => $"{Skill.SkillOwner()}释放「熵灭」的力量,获得 135% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次普通攻击命中时都会损失自身 9% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
|
public override string Description => $"{Skill.SkillOwner()}释放「熵灭」的力量,获得 135% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次普通攻击命中时都会损失自身 6% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
|
||||||
public override bool Durative => true;
|
public override bool Durative => true;
|
||||||
public override double Duration => 10 + 1 * (Level - 1);
|
public override double Duration => 10 + 2 * (Level - 1);
|
||||||
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
|
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
|
||||||
|
|
||||||
private double 攻击力加成 => Skill.Character?.STR * 1.35 ?? 0;
|
private double 攻击力加成 => Skill.Character?.STR * 1.35 ?? 0;
|
||||||
private double 当前生命值 => Skill.Character?.HP * 0.09 ?? 0;
|
private double 当前生命值 => Skill.Character?.HP * 0.06 ?? 0;
|
||||||
private double 实际攻击力加成 = 0;
|
private double 实际攻击力加成 = 0;
|
||||||
|
|
||||||
public override void OnEffectGained(Character character)
|
public override void OnEffectGained(Character character)
|
||||||
|
|||||||
@ -14,7 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||||
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
|
public override string ExemptionDescription => Effects.Count > 0 ? Effects.First().ExemptionDescription : "";
|
||||||
public override double EPCost => 100;
|
public override double EPCost => 100;
|
||||||
public override double CD => 60;
|
public override double CD => 80;
|
||||||
public override double HardnessTime { get; set; } = 2;
|
public override double HardnessTime { get; set; } = 2;
|
||||||
public override bool CanSelectSelf => true;
|
public override bool CanSelectSelf => true;
|
||||||
public override bool CanSelectEnemy => false;
|
public override bool CanSelectEnemy => false;
|
||||||
@ -92,7 +92,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
{
|
{
|
||||||
if (实际选择熵核 && character == Skill.Character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && !CheckSkilledImmune(character, enemy, Skill))
|
if (实际选择熵核 && character == Skill.Character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && !CheckSkilledImmune(character, enemy, Skill))
|
||||||
{
|
{
|
||||||
Effect e = new 禁止治疗(Skill, character, true, 熵核影响敌人时间, 0)
|
禁止治疗 e = new(Skill, character, false, true, true, true, 熵核影响敌人时间, 0)
|
||||||
{
|
{
|
||||||
ExemptionType = PrimaryAttribute.AGI,
|
ExemptionType = PrimaryAttribute.AGI,
|
||||||
ExemptDuration = false,
|
ExemptDuration = false,
|
||||||
@ -100,7 +100,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
};
|
};
|
||||||
if (enemy.AGI <= character.AGI || (enemy.AGI > character.AGI && !CheckExemption(character, enemy, e)))
|
if (enemy.AGI <= character.AGI || (enemy.AGI > character.AGI && !CheckExemption(character, enemy, e)))
|
||||||
{
|
{
|
||||||
WriteLine($"[ {character} ] 对 [ {enemy} ] 施加了禁止治疗!!持续时间:{熵核影响敌人时间:0.##} {GameplayEquilibriumConstant.InGameTime}!");
|
WriteLine($"[ {character} ] 对 [ {enemy} ] 施加了禁止治疗{e.禁止类型}!!持续时间:{熵核影响敌人时间:0.##} {GameplayEquilibriumConstant.InGameTime}!");
|
||||||
enemy.Effects.Add(e);
|
enemy.Effects.Add(e);
|
||||||
e.OnEffectGained(enemy);
|
e.OnEffectGained(enemy);
|
||||||
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
|
GamingQueue?.LastRound.AddApplyEffects(enemy, e.EffectType);
|
||||||
|
|||||||
@ -68,7 +68,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
|
|
||||||
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
|
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
|
||||||
{
|
{
|
||||||
if (enemy == Skill.Character && 实际受到伤害减少 > 0)
|
if (enemy == Skill.Character && 实际受到伤害减少 > 0 && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical))
|
||||||
{
|
{
|
||||||
double reduce = damage * 实际受到伤害减少;
|
double reduce = damage * 实际受到伤害减少;
|
||||||
WriteLine($"[ {Skill.Character} ] 发动了概念之骰!伤害减少了 {reduce:0.##} 点!");
|
WriteLine($"[ {Skill.Character} ] 发动了概念之骰!伤害减少了 {reduce:0.##} 点!");
|
||||||
|
|||||||
@ -26,7 +26,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
{
|
{
|
||||||
public override long Id => Skill.Id;
|
public override long Id => Skill.Id;
|
||||||
public override string Name => Skill.Name;
|
public override string Name => Skill.Name;
|
||||||
public override string Description => $"敏捷提高 20% [ {敏捷提升:0.##} ] 点,然后将当前力量补充到敏捷的 {平衡系数 * 100:0.##}%{(Skill.Character != null ? $" [ {Skill.Character.AGI * 平衡系数:0.##} ]" : "")},持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
|
public override string Description => $"敏捷提高 20% [ {敏捷提升:0.##} ] 点。若当前总力量低于敏捷,则获得额外力量提升,使得总力量等于敏捷的 {平衡系数 * 100:0.##}%{(Skill.Character != null ? $" [ {Skill.Character.AGI * 平衡系数:0.##} ]" : "")},持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
|
||||||
public override bool Durative => true;
|
public override bool Durative => true;
|
||||||
public override double Duration => 30;
|
public override double Duration => 30;
|
||||||
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
|
public override DispelledType DispelledType => DispelledType.CannotBeDispelled;
|
||||||
|
|||||||
@ -10,7 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public override string Name => "天堂之吻";
|
public override string Name => "天堂之吻";
|
||||||
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
|
||||||
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
|
||||||
public override double EPCost => 60;
|
public override double EPCost => 75;
|
||||||
public override double CD => 40;
|
public override double CD => 40;
|
||||||
public override double HardnessTime { get; set; } = 10;
|
public override double HardnessTime { get; set; } = 10;
|
||||||
public override bool CanSelectSelf => true;
|
public override bool CanSelectSelf => true;
|
||||||
@ -21,7 +21,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
|
|||||||
public 天堂之吻(Character? character = null) : base(SkillType.Skill, character)
|
public 天堂之吻(Character? character = null) : base(SkillType.Skill, character)
|
||||||
{
|
{
|
||||||
CastRange = 5;
|
CastRange = 5;
|
||||||
Effects.Add(new 提升友方行动速度(this, 120, 50, duration: 20));
|
Effects.Add(new 提升友方行动速度(this, 90, 30, duration: 20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,48 +60,80 @@ namespace Oshima.FunGame.WebAPI.Controllers
|
|||||||
StringBuilder builder = new();
|
StringBuilder builder = new();
|
||||||
|
|
||||||
builder.AppendLine(character.ToStringWithOutUser());
|
builder.AppendLine(character.ToStringWithOutUser());
|
||||||
builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成真实伤害:{stats.TotalTrueDamage:0.##} / 场均:{stats.AvgTrueDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenTrueDamage:0.##} / 场均:{stats.AvgTakenTrueDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计治疗:{stats.TotalHeal:0.##} / 场均:{stats.AvgHeal:0.##}");
|
|
||||||
builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}");
|
|
||||||
builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}");
|
|
||||||
builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}");
|
|
||||||
builder.AppendLine($"总计控制时长:{stats.ControlTime:0.##} / 场均:{stats.AvgControlTime:0.##}");
|
|
||||||
builder.AppendLine($"总计护盾抵消:{stats.TotalShield:0.##} / 场均:{stats.AvgShield:0.##}");
|
|
||||||
builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}");
|
|
||||||
builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}");
|
|
||||||
builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}");
|
|
||||||
builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}");
|
|
||||||
builder.AppendLine($"总计回合决策数:{stats.TurnDecisions:0.##} / 场均:{stats.AvgTurnDecisions:0.##}");
|
|
||||||
builder.AppendLine($"总计使用决策点:{stats.UseDecisionPoints:0.##} / 场均:{stats.AvgUseDecisionPoints:0.##}");
|
|
||||||
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"击杀死亡比:{(stats.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):0.##}");
|
|
||||||
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : ""));
|
|
||||||
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : ""));
|
|
||||||
builder.AppendLine($"总计参赛数:{stats.Plays}");
|
|
||||||
builder.AppendLine($"总计冠军数:{stats.Wins}");
|
|
||||||
builder.AppendLine($"总计前三数:{stats.Top3s}");
|
|
||||||
builder.AppendLine($"总计败场数:{stats.Loses}");
|
|
||||||
|
|
||||||
List<string> names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
|
List<string> names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgPhysicalDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgMagicDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTrueDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成真实伤害:{stats.TotalTrueDamage:0.##} / 场均:{stats.AvgTrueDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenPhysicalDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenMagicDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenTrueDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenTrueDamage:0.##} / 场均:{stats.AvgTakenTrueDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgHeal).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计治疗:{stats.TotalHeal:0.##} / 场均:{stats.AvgHeal:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgLiveRound).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgActionTurn).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgLiveTime).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgControlTime).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计控制时长:{stats.ControlTime:0.##} / 场均:{stats.AvgControlTime:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgShield).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计护盾抵消:{stats.TotalShield:0.##} / 场均:{stats.AvgShield:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgEarnedMoney).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerRound).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerTurn).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerSecond).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgTurnDecisions).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计回合决策数:{stats.TurnDecisions:0.##} / 场均:{stats.AvgTurnDecisions:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.AvgUseDecisionPoints).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计使用决策点:{stats.UseDecisionPoints:0.##} / 场均:{stats.AvgUseDecisionPoints:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Kills : (double)kv.Value.Kills / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Deaths : (double)kv.Value.Deaths / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Deaths == 0 ? kv.Value.Kills : ((double)kv.Value.Kills / kv.Value.Deaths)).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"击杀死亡比:{(stats.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Assists : (double)kv.Value.Assists / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.FirstKills : (double)kv.Value.FirstKills / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.FirstDeaths : (double)kv.Value.FirstDeaths / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计参赛数:{stats.Plays}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Wins).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计胜场数:{stats.Wins}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Top3s).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计前三数:{stats.Top3s}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Loses).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计败场数:{stats.Loses}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|
||||||
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
|
||||||
builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})");
|
builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|
||||||
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrate).Select(kv => kv.Key.GetName())];
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrate).Select(kv => kv.Key.GetName())];
|
||||||
builder.AppendLine($"胜率:{stats.Winrate * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})");
|
builder.AppendLine($"胜率:{stats.Winrate * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
builder.AppendLine($"前三率:{stats.Top3rate * 100:0.##}%");
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Top3rate).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"前三率:{stats.Top3rate * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|
||||||
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())];
|
names = [.. FunGameSimulation.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())];
|
||||||
builder.AppendLine($"技术得分:{stats.Rating:0.0#}(#{names.IndexOf(character.GetName()) + 1})");
|
builder.AppendLine($"技术得分:{stats.Rating:0.0#}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|
||||||
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank:0.##}");
|
builder.AppendLine($"上次排名:#{stats.LastRank} / 场均名次:#{stats.AvgRank:0.##}");
|
||||||
|
|
||||||
return builder.ToString();
|
return builder.ToString();
|
||||||
}
|
}
|
||||||
@ -121,37 +153,67 @@ namespace Oshima.FunGame.WebAPI.Controllers
|
|||||||
StringBuilder builder = new();
|
StringBuilder builder = new();
|
||||||
|
|
||||||
builder.AppendLine(character.ToStringWithOutUser());
|
builder.AppendLine(character.ToStringWithOutUser());
|
||||||
builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计造成真实伤害:{stats.TotalTrueDamage:0.##} / 场均:{stats.AvgTrueDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenTrueDamage:0.##} / 场均:{stats.AvgTakenTrueDamage:0.##}");
|
|
||||||
builder.AppendLine($"总计治疗:{stats.TotalHeal:0.##} / 场均:{stats.AvgHeal:0.##}");
|
|
||||||
builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}");
|
|
||||||
builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}");
|
|
||||||
builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}");
|
|
||||||
builder.AppendLine($"总计控制时长:{stats.ControlTime:0.##} / 场均:{stats.AvgControlTime:0.##}");
|
|
||||||
builder.AppendLine($"总计护盾抵消:{stats.TotalShield:0.##} / 场均:{stats.AvgShield:0.##}");
|
|
||||||
builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}");
|
|
||||||
builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}");
|
|
||||||
builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}");
|
|
||||||
builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}");
|
|
||||||
builder.AppendLine($"总计回合决策数:{stats.TurnDecisions:0.##} / 场均:{stats.AvgTurnDecisions:0.##}");
|
|
||||||
builder.AppendLine($"总计使用决策点:{stats.UseDecisionPoints:0.##} / 场均:{stats.AvgUseDecisionPoints:0.##}");
|
|
||||||
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"击杀死亡比:{(stats.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):0.##}");
|
|
||||||
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : ""));
|
|
||||||
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : ""));
|
|
||||||
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : ""));
|
|
||||||
builder.AppendLine($"总计参赛数:{stats.Plays}");
|
|
||||||
builder.AppendLine($"总计胜场数:{stats.Wins}");
|
|
||||||
builder.AppendLine($"总计败场数:{stats.Loses}");
|
|
||||||
|
|
||||||
List<string> names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
|
List<string> names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgPhysicalDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgMagicDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTrueDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计造成真实伤害:{stats.TotalTrueDamage:0.##} / 场均:{stats.AvgTrueDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenPhysicalDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenMagicDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTakenTrueDamage).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenTrueDamage:0.##} / 场均:{stats.AvgTakenTrueDamage:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgHeal).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计治疗:{stats.TotalHeal:0.##} / 场均:{stats.AvgHeal:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgLiveRound).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgActionTurn).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgLiveTime).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgControlTime).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计控制时长:{stats.ControlTime:0.##} / 场均:{stats.AvgControlTime:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgShield).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计护盾抵消:{stats.TotalShield:0.##} / 场均:{stats.AvgShield:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgEarnedMoney).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerRound).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerTurn).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.DamagePerSecond).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgTurnDecisions).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计回合决策数:{stats.TurnDecisions:0.##} / 场均:{stats.AvgTurnDecisions:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.AvgUseDecisionPoints).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计使用决策点:{stats.UseDecisionPoints:0.##} / 场均:{stats.AvgUseDecisionPoints:0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Kills : (double)kv.Value.Kills / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Deaths : (double)kv.Value.Deaths / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Deaths == 0 ? kv.Value.Kills : ((double)kv.Value.Kills / kv.Value.Deaths)).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"击杀死亡比:{(stats.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):0.##}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.Assists : (double)kv.Value.Assists / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.FirstKills : (double)kv.Value.FirstKills / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : "") + $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays == 0 ? kv.Value.FirstDeaths : (double)kv.Value.FirstDeaths / kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : "")+ $"(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Plays).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计参赛数:{stats.Plays}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Wins).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计胜场数:{stats.Wins}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Loses).Select(kv => kv.Key.GetName())];
|
||||||
|
builder.AppendLine($"总计败场数:{stats.Loses}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|
||||||
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
|
||||||
builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})");
|
builder.AppendLine($"MVP次数:{stats.MVPs}(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrate).Select(kv => kv.Key.GetName())];
|
names = [.. FunGameSimulation.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrate).Select(kv => kv.Key.GetName())];
|
||||||
builder.AppendLine($"胜率:{stats.Winrate * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})");
|
builder.AppendLine($"胜率:{stats.Winrate * 100:0.##}%(#{names.IndexOf(character.GetName()) + 1})");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user