实装魔法/能量消耗减少 添加其他统计

This commit is contained in:
milimoe 2024-09-16 16:56:13 +08:00
parent 2ad3844d10
commit aa8ef765e8
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
25 changed files with 274 additions and 61 deletions

View File

@ -16,7 +16,7 @@ namespace FunGame.Testing.Characters
c.NickName = "大島シヤ"; c.NickName = "大島シヤ";
c.PrimaryAttribute = PrimaryAttribute.STR; c.PrimaryAttribute = PrimaryAttribute.STR;
c.InitialATK = 25; c.InitialATK = 25;
c.InitialHP = 145; c.InitialHP = 85;
c.InitialMP = 10; c.InitialMP = 10;
c.InitialSTR = 35; c.InitialSTR = 35;
c.STRGrowth = 3.5; c.STRGrowth = 3.5;
@ -216,7 +216,7 @@ namespace FunGame.Testing.Characters
c.NickName = "LUOLI66"; c.NickName = "LUOLI66";
c.PrimaryAttribute = PrimaryAttribute.INT; c.PrimaryAttribute = PrimaryAttribute.INT;
c.InitialATK = 18; c.InitialATK = 18;
c.InitialHP = 85; c.InitialHP = 125;
c.InitialMP = 45; c.InitialMP = 45;
c.InitialSTR = 0; c.InitialSTR = 0;
c.STRGrowth = 0; c.STRGrowth = 0;
@ -241,7 +241,7 @@ namespace FunGame.Testing.Characters
c.NickName = "冷蓝"; c.NickName = "冷蓝";
c.PrimaryAttribute = PrimaryAttribute.STR; c.PrimaryAttribute = PrimaryAttribute.STR;
c.InitialATK = 28; c.InitialATK = 28;
c.InitialHP = 135; c.InitialHP = 95;
c.InitialMP = 25; c.InitialMP = 25;
c.InitialSTR = 22; c.InitialSTR = 22;
c.STRGrowth = 1.9; c.STRGrowth = 1.9;

View File

@ -0,0 +1,35 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Effects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"增加角色 {实际冷却缩减加成 * 100:0.##}% 冷却缩减。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 0;
public override void OnEffectGained(Character character)
{
character.ExCDR += ;
}
public override void OnEffectLost(Character character)
{
character.ExCDR -= ;
}
public (Skill skill, Character? source, Item item, double exCdr) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= exCdr;
}
}
}

View File

@ -0,0 +1,52 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Effects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"减少角色的所有主动技能 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 2;
public override void OnEffectGained(Character character)
{
foreach (Skill s in character.Skills)
{
s.HardnessTime = Calculation.Round2Digits(s.HardnessTime - );
}
foreach (Skill? s in character.Items.Select(i => i.Skills.Active))
{
if (s != null)
s.HardnessTime = Calculation.Round2Digits(s.HardnessTime - );
}
}
public override void OnEffectLost(Character character)
{
foreach (Skill s in character.Skills)
{
s.HardnessTime = Calculation.Round2Digits(s.HardnessTime + );
}
foreach (Skill? s in character.Items.Select(i => i.Skills.Active))
{
if (s != null)
s.HardnessTime = Calculation.Round2Digits(s.HardnessTime + );
}
}
public (Skill skill, Character? source, Item item, double reduce) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= reduce;
}
}
}

View File

@ -0,0 +1,35 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Effects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"增加角色 {实际攻击力加成} 点攻击力。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 0;
public override void OnEffectGained(Character character)
{
character.ExATK2 += ;
}
public override void OnEffectLost(Character character)
{
character.ExATK2 -= ;
}
public (Skill skill, Character? source, Item item, double exATK) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= exATK;
}
}
}

View File

@ -0,0 +1,36 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Effects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"减少角色的普通攻击 {实际硬直时间减少} 硬直时间。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 2;
public override void OnEffectGained(Character character)
{
character.NormalAttack.HardnessTime = Calculation.Round2Digits(character.NormalAttack.HardnessTime - ); ;
}
public override void OnEffectLost(Character character)
{
character.NormalAttack.HardnessTime = Calculation.Round2Digits(character.NormalAttack.HardnessTime + ); ;
}
public (Skill skill, Character? source, Item item, double reduce) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= reduce;
}
}
}

View File

@ -0,0 +1,35 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Effects
{
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"增加角色 {实际物理护甲加成} 点物理护甲。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 0;
public override void OnEffectGained(Character character)
{
character.ExDEF2 += ;
}
public override void OnEffectLost(Character character)
{
character.ExDEF2 -= ;
}
public (Skill skill, Character? source, Item item, double exDef) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= exDef;
}
}
}

View File

@ -14,4 +14,11 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Items\Armor\" />
<Folder Include="Items\Consumable\" />
<Folder Include="Items\MagicCardPack\" />
<Folder Include="Items\Shoes\" />
</ItemGroup>
</Project> </Project>

View File

@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Entity; using FunGame.Testing.Effects;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Items namespace FunGame.Testing.Items
@ -48,7 +49,7 @@ namespace FunGame.Testing.Items
{ {
Level = 1; Level = 1;
Item = item; Item = item;
Effects.Add(new (this, character, item, exATK)); Effects.Add(new (this, character, item, exATK));
} }
public override IEnumerable<Effect> AddInactiveEffectToCharacter() public override IEnumerable<Effect> AddInactiveEffectToCharacter()
@ -56,34 +57,4 @@ namespace FunGame.Testing.Items
return Effects; return Effects;
} }
} }
public class : Effect
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"增加角色 {攻击力加成} 点攻击力。" + (!TargetSelf ? $"来自:[ {Source} ] 的 [ {Item.Name} ]" : "");
public override EffectType EffectType => EffectType.Item;
public override bool TargetSelf => true;
public Item Item { get; }
private readonly double = 0;
public override void OnEffectGained(Character character)
{
character.ExATK2 += ;
}
public override void OnEffectLost(Character character)
{
character.ExATK2 -= ;
}
public (Skill skill, Character? source, Item item, double exATK) : base(skill)
{
ActionQueue = skill.ActionQueue;
Source = source;
Item = item;
= exATK;
}
}
} }

View File

@ -0,0 +1,43 @@
using FunGame.Testing.Effects;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace FunGame.Testing.Items
{
public class : Item
{
public override long Id => 11001;
public override string Name => "独奏弓";
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
public (Character? character = null) : base(ItemType.Weapon, slot: EquipSlotType.Weapon)
{
WeaponType = WeaponType.Bow;
Skills.Passives.Add(new (character, this));
}
}
public class : Skill
{
public override long Id => 5002;
public override string Name => "独奏弓";
public override string Description => $"增加角色 {攻击力加成} 点攻击力,减少普通攻击 {硬直时间减少} 硬直时间。";
public Item Item { get; }
private readonly double = 80;
private readonly double = 2;
public (Character? character, Item item) : base(SkillType.Passive, character)
{
Level = 1;
Item = item;
Effects.Add(new (this, character, item, ));
Effects.Add(new (this, character, item, ));
}
public override IEnumerable<Effect> AddInactiveEffectToCharacter()
{
return Effects;
}
}
}

View File

@ -12,7 +12,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 42 - 1 * (Level - 1); public override double CD => 42 - 1 * (Level - 1);
public override double HardnessTime => 12; public override double HardnessTime { get; set; } = 12;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 40 - 1 * (Level - 1); public override double CD => 40 - 1 * (Level - 1);
public override double HardnessTime => 8; public override double HardnessTime { get; set; } = 8;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -10,7 +10,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 35 - 2 * (Level - 1); public override double CD => 35 - 2 * (Level - 1);
public override double HardnessTime => 10; public override double HardnessTime { get; set; } = 10;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 30; public override double CD => 30;
public override double HardnessTime => 10; public override double HardnessTime { get; set; } = 10;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 55; public override double CD => 55;
public override double HardnessTime => 0; public override double HardnessTime { get; set; } = 0;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -26,7 +26,7 @@ namespace Milimoe.FunGame.Testing.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 => $"生命值高于 30% 时,受到额外的 [ {高于30额外伤害下限}~{高于30额外伤害上限}% ] 伤害,但是获得 [ 累计所受伤害的 {高于30的加成下限}~{高于30的加成上限}% ] 伤害加成;生命值低于等于 30% 时,不会受到额外的伤害,仅能获得 [ 累计受到的伤害 {低于30的加成下限}~{低于30的加成上限}% ] 伤害加成。" + public override string Description => $"生命值高于 30% 时,受到额外的 [ {高于30额外伤害下限}~{高于30额外伤害上限}% ] 伤害,但是获得 [ 累计所受伤害的 {高于30的加成下限}~{高于30的加成上限}% ] 伤害加成;生命值低于等于 30% 时,不会受到额外的伤害,仅能获得 [ 累计受到的伤害 {低于30的加成下限}~{低于30的加成上限}% ] 伤害加成。" +
$"在没有受到任何伤害的时候,将获得 {常规伤害加成 * 100:0.##}% 伤害加成。" + ( > 0 ? $"(当前伤害加成{伤害加成(累计受到的伤害) * 100:0.##}%" : ""); $"在没有受到任何伤害的时候,将获得 {常规伤害加成 * 100:0.##}% 伤害加成。" + ( > 0 ? $"(当前累计受到伤害:{累计受到的伤害}" : "");
public override bool TargetSelf => true; public override bool TargetSelf => true;
private double = 0; private double = 0;

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 60 - 2 * (Level - 1); public override double CD => 60 - 2 * (Level - 1);
public override double HardnessTime => 15; public override double HardnessTime { get; set; } = 15;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 55 - 3 * (Level - 1); public override double CD => 55 - 3 * (Level - 1);
public override double HardnessTime => 25; public override double HardnessTime { get; set; } = 25;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {
@ -30,7 +30,7 @@ namespace Milimoe.FunGame.Testing.Skills
private double => Calculation.Round4Digits(0.55 * Level); private double => Calculation.Round4Digits(0.55 * Level);
private double => Calculation.Round2Digits( * Skill.Character?.INT ?? 0); private double => Calculation.Round2Digits( * Skill.Character?.INT ?? 0);
private readonly double = Calculation.Round4Digits(4.5); private double => Calculation.Round4Digits(0.75 * Level);
public override void OnSkillCasted(Character caster, List<Character> enemys, List<Character> teammates, Dictionary<string, object> others) public override void OnSkillCasted(Character caster, List<Character> enemys, List<Character> teammates, Dictionary<string, object> others)
{ {

View File

@ -12,7 +12,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 45; public override double CD => 45;
public override double HardnessTime => 7; public override double HardnessTime { get; set; } = 7;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 60; public override double CD => 60;
public override double HardnessTime => 15; public override double HardnessTime { get; set; } = 15;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 35; public override double CD => 35;
public override double HardnessTime => 10; public override double HardnessTime { get; set; } = 10;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -9,9 +9,9 @@ namespace Milimoe.FunGame.Testing.Skills
public override long Id => 2001; public override long Id => 2001;
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 double EPCost => 35; public override double EPCost => 60;
public override double CD => 35; public override double CD => 35;
public override double HardnessTime => 5; public override double HardnessTime { get; set; } = 5;
public (Character character) : base(SkillType.Skill, character) public (Character character) : base(SkillType.Skill, character)
{ {

View File

@ -10,7 +10,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100; public override double EPCost => 100;
public override double CD => 55 - (1 * (Level - 1)); public override double CD => 55 - (1 * (Level - 1));
public override double HardnessTime => 12; public override double HardnessTime { get; set; } = 12;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -11,7 +11,7 @@ namespace Milimoe.FunGame.Testing.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : ""; public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => Math.Max(100, Character?.EP ?? 100); public override double EPCost => Math.Max(100, Character?.EP ?? 100);
public override double CD => 32 + (1 * (Level - 1)); public override double CD => 32 + (1 * (Level - 1));
public override double HardnessTime => 12; public override double HardnessTime { get; set; } = 12;
public (Character character) : base(SkillType.SuperSkill, character) public (Character character) : base(SkillType.SuperSkill, character)
{ {

View File

@ -9,11 +9,10 @@ namespace Milimoe.FunGame.Testing.Skills
public override long Id => 2001; public override long Id => 2001;
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 double MPCost => BaseMPCost + (50 * (Level - 1)); public override double MPCost => 30 + (50 * (Level - 1));
public override double CD => 20; public override double CD => 20;
public override double CastTime => 6; public override double CastTime => 6;
public override double HardnessTime => 3; public override double HardnessTime { get; set; } = 3;
protected override double BaseMPCost => 30;
public (Character character) : base(SkillType.Magic, character) public (Character character) : base(SkillType.Magic, character)
{ {

View File

@ -104,9 +104,9 @@ namespace Milimoe.FunGame.Testing.Tests
character9, character10, character11, character12 character9, character10, character11, character12
]; ];
int clevel = 25; int clevel = 60;
int slevel = 3; int slevel = 6;
int mlevel = 4; int mlevel = 8;
// 升级和赋能 // 升级和赋能
for (int index = 0; index < characters.Count; index++) for (int index = 0; index < characters.Count; index++)
@ -395,16 +395,16 @@ namespace Milimoe.FunGame.Testing.Tests
// 赛后统计 // 赛后统计
WriteLine("==== 伤害排行榜 TOP6 ===="); WriteLine("==== 伤害排行榜 TOP6 ====");
Msg = "==== 伤害排行榜 TOP6 ====\r\n"; Msg = "==== 伤害排行榜 TOP6 ====\r\n";
// 显示前四的角色统计
int count = 1; int count = 1;
foreach (Character character in actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.TotalDamage).Select(d => d.Key)) foreach (Character character in actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.TotalDamage).Select(d => d.Key))
{ {
StringBuilder builder = new(); StringBuilder builder = new();
CharacterStatistics stats = actionQueue.CharacterStatistics[character]; CharacterStatistics stats = actionQueue.CharacterStatistics[character];
builder.AppendLine($"{count}. [ {character.ToStringWithLevel()} ]"); builder.AppendLine($"{count}. [ {character.ToStringWithLevel()} ] {stats.Kills} / {stats.Assists}");
builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}"); builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 每秒伤害:{stats.DamagePerSecond} / 每回合伤害:{stats.DamagePerTurn}"); builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
builder.Append($"总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}"); builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
builder.Append($"每秒伤害:{stats.DamagePerSecond} / 每回合伤害:{stats.DamagePerTurn}");
if (count++ <= 6) if (count++ <= 6)
{ {
WriteLine(builder.ToString()); WriteLine(builder.ToString());