技能修改

This commit is contained in:
milimoe 2025-04-16 01:24:48 +08:00
parent 2438bcd5b6
commit 37a8a989c9
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
31 changed files with 267 additions and 106 deletions

View File

@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Model;
namespace Oshima.Core.Constant
{
@ -23,5 +24,10 @@ namespace Oshima.Core.Constant
private static readonly string[] Skills = [Skill];
private static readonly string[] Items = [Item];
public static GameModuleDepend GameModuleDepend { get; } = new(Maps, Characters, Skills, Items);
public static EquilibriumConstant GameplayEquilibriumConstant { get; } = new()
{
InGameTime = "秒"
};
}
}

View File

@ -170,6 +170,11 @@
/// </summary>
DynamicsEffect = 8032,
/// <summary>
/// 无视闪避率参数p
/// </summary>
IgnoreEvade = 8033,
/// <summary>
/// 被动特效终点
/// </summary>

View File

@ -142,7 +142,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
}
}
RealDynamicsValues["shtr"] = shtr;
Descriptions.Add($"减少角色的所有主动技能 {shtr:0.##} 硬直时间。");
Descriptions.Add($"减少角色的所有主动技能 {shtr:0.##} {GameplayEquilibriumConstant.InGameTime}硬直时间。");
}
break;
case "nahtr":
@ -157,7 +157,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
character.NormalAttack.HardnessTime += nahtr;
}
RealDynamicsValues["nahtr"] = nahtr;
Descriptions.Add($"减少角色的普通攻击 {nahtr:0.##} 硬直时间。");
Descriptions.Add($"减少角色的普通攻击 {nahtr:0.##} {GameplayEquilibriumConstant.InGameTime}硬直时间。");
}
break;
case "exacc":

View File

@ -0,0 +1,40 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
{
public class IgnoreEvade : Effect
{
public override long Id => (long)EffectID.IgnoreEvade;
public override string Name => "无视闪避";
public override string Description => $"普通攻击有 {概率 * 100:0.##}% 概率无视闪避。" + (Source != null && Skill.Character != Source ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : "") : "");
public override EffectType EffectType => EffectType.Item;
public double Value => ;
private readonly double = 0;
public override bool BeforeEvadeCheck(Character actor, Character enemy, ref double throwingBonus)
{
if (actor == Skill.Character)
{
WriteLine($"[ {actor} ] 的普通攻击无视了 [ {enemy} ] 的闪避!");
return false;
}
return true;
}
public IgnoreEvade(Skill skill, Dictionary<string, object> args, Character? source = null) : base(skill, args)
{
GamingQueue = skill.GamingQueue;
Source = source;
if (Values.Count > 0)
{
string key = Values.Keys.FirstOrDefault(s => s.Equals("p", StringComparison.CurrentCultureIgnoreCase)) ?? "";
if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double p) && p >= 0 && p <= 1)
{
= p;
}
}
}
}
}

View File

@ -7,7 +7,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
{
public override long Id => (long)EffectID.NormalAttackHardTimeReduce;
public override string Name => Skill.Name;
public override string Description => $"减少角色的普通攻击 {实际硬直时间减少:0.##} 硬直时间。" + (Source != null && Skill.Character != Source ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : "") : "");
public override string Description => $"减少角色的普通攻击 {实际硬直时间减少:0.##} {GameplayEquilibriumConstant.InGameTime}硬直时间。" + (Source != null && Skill.Character != Source ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : "") : "");
public override EffectType EffectType => EffectType.Item;
private readonly double = 0;

View File

@ -7,7 +7,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
{
public override long Id => (long)EffectID.SkillHardTimeReduce;
public override string Name => Skill.Name;
public override string Description => $"减少角色的所有主动技能 {实际硬直时间减少:0.##} 硬直时间。" + (Source != null && Skill.Character != Source ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : "") : "");
public override string Description => $"减少角色的所有主动技能 {实际硬直时间减少:0.##} {GameplayEquilibriumConstant.InGameTime}硬直时间。" + (Source != null && Skill.Character != Source ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : "") : "");
public override EffectType EffectType => EffectType.Item;
private readonly double = 0;

View File

@ -7,10 +7,9 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
{
public override long Id => 4102;
public override string Name => "累积之压标记";
public override string Description => $"此角色持有累积之压标记,已累计 {MarkLevel} 层。来自:[ {Source} ]";
public override string Description => $"此角色持有累积之压标记。来自:[ {Source} ]";
public override EffectType EffectType => EffectType.Mark;
public override Character Source => _sourceCharacter;
public int MarkLevel { get; set; } = 1;
private readonly Character _sourceCharacter;

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
private double SPD => Level > 0 ? Math.Abs( + * (Level - 1)) : Math.Abs();
private double { get; set; } = 65;
private double { get; set; } = 25;
private string => _durative && _duration > 0 ? _duration + " 时间" : (!_durative && _durationTurn > 0 ? _durationTurn + " 回合" : "0 时间");
private string => _durative && _duration > 0 ? _duration + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? _durationTurn + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
@ -31,7 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的行动速度提升了 {SPD:0.##} !持续时间:{持续时间}");
WriteLine($"[ {target} ] 的行动速度提升了 {SPD:0.##} !持续时间:{持续时间} {GameplayEquilibriumConstant.InGameTime}");
ExSPD e = new(Skill, new Dictionary<string, object>()
{
{ "exspd", SPD }

View File

@ -9,7 +9,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override string Name => Skill.Name;
public override string Description => $"对目标{(Skill.CanSelectTargetCount > 1 ? $" {Skill.CanSelectTargetCount} " : "")}敌人造成封技 {封技时间},无法使用技能(魔法、战技和爆发技),并打断当前施法。";
private string => _durative && _duration > 0 ? + " 时间" : (!_durative && _durationTurn > 0 ? + " 回合" : "0 时间");
private string => _durative && _duration > 0 ? + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
private double => _durative && _duration > 0 ? _duration + _levelGrowth * (Level - 1) : (!_durative && _durationTurn > 0 ? _durationTurn + _levelGrowth * (Level - 1) : 0);
private readonly bool _durative;
private readonly double _duration;
@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
foreach (Character enemy in targets)
{
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间}");
WriteLine($"[ {caster} ] 对 [ {enemy} ] 造成了封技和施法解除!持续时间:{封技时间} {GameplayEquilibriumConstant.InGameTime}");
e = new(Skill, caster, false, 0, 1);
enemy.Effects.Add(e);
e.OnEffectGained(enemy);

View File

@ -9,7 +9,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
public override string Name => Skill.Name;
public override string Description => $"对目标{(Skill.CanSelectTargetCount > 1 ? $" {Skill.CanSelectTargetCount} " : "")}敌人造成眩晕 {眩晕时间}。";
private string => _durative && _duration > 0 ? + " 时间" : (!_durative && _durationTurn > 0 ? + " 回合" : "0 时间");
private string => _durative && _duration > 0 ? + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
private double => _durative && _duration > 0 ? _duration + _levelGrowth * (Level - 1) : (!_durative && _durationTurn > 0 ? _durationTurn + _levelGrowth * (Level - 1) : 0);
private readonly bool _durative;
private readonly double _duration;
@ -29,7 +29,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
foreach (Character enemy in targets)
{
WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间}");
WriteLine($"[ {caster} ] 眩晕了 [ {enemy} ] !持续时间:{眩晕时间} {GameplayEquilibriumConstant.InGameTime}");
e = new(Skill, caster, false, 0, 1);
enemy.Effects.Add(e);
e.OnEffectGained(enemy);

View File

@ -12,7 +12,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
private double SPD => Level > 0 ? -Math.Abs( + * (Level - 1)) : -Math.Abs();
private double { get; set; } = 30;
private double { get; set; } = 20;
private string => _durative && _duration > 0 ? _duration + " 时间" : (!_durative && _durationTurn > 0 ? _durationTurn + " 回合" : "0 时间");
private string => _durative && _duration > 0 ? _duration + $" {GameplayEquilibriumConstant.InGameTime}" : (!_durative && _durationTurn > 0 ? _durationTurn + " 回合" : $"0 {GameplayEquilibriumConstant.InGameTime}");
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
@ -31,7 +31,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.SkillEffects
{
foreach (Character target in targets)
{
WriteLine($"[ {target} ] 的行动速度降低了 {SPD:0.##} !持续时间:{持续时间}");
WriteLine($"[ {target} ] 的行动速度降低了 {SPD:0.##} !持续时间:{持续时间} {GameplayEquilibriumConstant.InGameTime}");
ExSPD e = new(Skill, new Dictionary<string, object>()
{
{ "exspd", SPD }

View File

@ -22,7 +22,7 @@ namespace Oshima.FunGame.OshimaModules.Items
{
public override long Id => 5999;
public override string Name => "独奏弓";
public override string Description => $"增加角色 {攻击力加成:0.##} 点攻击力,减少普通攻击 {硬直时间减少:0.##} 硬直时间。";
public override string Description => $"增加角色 {攻击力加成:0.##} 点攻击力,减少普通攻击 {硬直时间减少:0.##} {GameplayEquilibriumConstant.InGameTime}硬直时间。";
private readonly double = 80;
private readonly double = 2;

View File

@ -1,5 +1,6 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.Core.Constant;
using Oshima.FunGame.OshimaModules.Effects.ItemEffects;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
@ -23,6 +24,11 @@ namespace Oshima.FunGame.OshimaModules
}
}
protected override void AfterLoad()
{
General.GameplayEquilibriumConstant.InGameTime = "秒";
}
protected override Factory.EntityFactoryDelegate<Skill> SkillFactory()
{
return (id, name, args) =>
@ -116,6 +122,7 @@ namespace Oshima.FunGame.OshimaModules
EffectID.ExMaxHP2 => new ExMaxHP2(skill, dict),
EffectID.ExMaxMP2 => new ExMaxMP2(skill, dict),
EffectID.DynamicsEffect => new DynamicsEffect(skill, dict),
EffectID.IgnoreEvade => new IgnoreEvade(skill, dict),
EffectID.RecoverHP => new RecoverHP(skill, dict),
EffectID.RecoverMP => new RecoverMP(skill, dict),
EffectID.RecoverHP2 => new RecoverHP2(skill, dict),

View File

@ -10,8 +10,8 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Name => "嗜血本能";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100;
public override double CD => 42 - 1 * (Level - 1);
public override double HardnessTime { get; set; } = 12;
public override double CD => 45;
public override double HardnessTime { get; set; } = 5;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -25,27 +25,34 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Duration} 时间内,攻击拥有标记的角色将根据标记层数获得 {吸血 * 100:0.##}% 吸血每层。";
public override string Description => $"{Duration} {GameplayEquilibriumConstant.InGameTime}内,攻击拥有标记的角色将不会回收标记,增强 {最大生命值伤害 * 100:0.##}% 最大生命值伤害,并获得 {吸血 * 100:0.##}% 吸血。";
public override bool Durative => true;
public override double Duration => 30;
public override double Duration => 25;
public HashSet<Character> { get; } = [];
private double => 0.03 * Level;
private static double => 0.3;
private double => 0.02 * Level;
public override void OnEffectGained(Character character)
{
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. += ;
}
}
public override void OnEffectLost(Character character)
{
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. -= ;
}
}
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
{
if (character == Skill.Character && damageResult != DamageResult.Evaded && character.HP < character.MaxHP)
{
int = 0;
if (enemy.Effects.Where(e => e is ).FirstOrDefault() is e)
{
= e.MarkLevel;
}
else if (.Remove(enemy))
{
= 4;
}
double = * * damage;
double = * damage;
character.HP += ;
WriteLine($"[ {character} ] 回复了 {实际吸血:0.##} 点生命值!");
}
@ -56,7 +63,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
RemainDuration = Duration;
if (!caster.Effects.Contains(this))
{
.Clear();
caster.Effects.Add(this);
OnEffectGained(caster);
}

View File

@ -25,9 +25,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"每次造成伤害都可以叠一层标记,累计 4 层时回收该角色所有标记并造成眩晕 1 回合,额外对该角色造成 {系数 * 100:0.##}% 最大生命值的物理伤害。";
public override string Description => $"造成伤害时会标记目标,攻击具有标记的敌人将对其造成眩晕 1 回合,并回收标记,额外对该角色造成 {系数 * 100:0.##}% 最大生命值的物理伤害。";
private readonly double = 0.12;
public double { get; set; } = 0.16;
private bool = false;
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
@ -38,40 +38,32 @@ namespace Oshima.FunGame.OshimaModules.Skills
IEnumerable<Effect> effects = enemy.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
{
e.MarkLevel++;
IEnumerable<Effect> effects2 = character.Effects.Where(e => e is );
if (effects2.Any() && effects2.First() is e2)
{
if (e.MarkLevel >= 4)
{
e2..Add(enemy);
}
else
{
e2..Remove(enemy);
}
// 嗜血本能生效状态下,不会移除标记
}
if (e.MarkLevel >= 4)
else
{
// 移除标记
enemy.Effects.Remove(e);
double = enemy.MaxHP * ;
WriteLine($"[ {character} ] 发动了累积之压!将对 [ {enemy} ] 造成眩晕和额外伤害!");
// 眩晕
IEnumerable<Effect> effects3 = enemy.Effects.Where(e => e is && e.Skill == Skill);
if (effects3.Any())
{
effects3.First().RemainDurationTurn++;
}
else
{
e3 = new(Skill, character, false, 0, 1);
enemy.Effects.Add(e3);
e3.OnEffectGained(enemy);
}
= true;
DamageToEnemy(character, enemy, false, magicType, );
}
double = enemy.MaxHP * ;
WriteLine($"[ {character} ] 发动了累积之压!将对 [ {enemy} ] 造成眩晕和额外伤害!");
// 眩晕
IEnumerable<Effect> effects3 = enemy.Effects.Where(e => e is && e.Skill == Skill);
if (effects3.Any())
{
effects3.First().RemainDurationTurn++;
}
else
{
e3 = new(Skill, character, false, 0, 1);
enemy.Effects.Add(e3);
e3.OnEffectGained(enemy);
}
= true;
DamageToEnemy(character, enemy, false, magicType, );
}
else
{

View File

@ -24,10 +24,12 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"每时间提升 {伤害提升 * 100:0.##}% 所有伤害,无上限,但受到伤害时效果清零。" + ( > 0 ? $"(当前总提升:{累计伤害 * 100:0.##}%" : "");
public override string Description => $"每经过 {时间流逝} {GameplayEquilibriumConstant.InGameTime}提升 {伤害提升 * 100:0.##}% 所有伤害,无上限,但是受到伤害时清零。(下一次提升在:{下一次提升:0.##} {GameplayEquilibriumConstant.InGameTime}后{(累计伤害 > 0 ? $"{ * 100:0.##}%" : "")}";
private readonly double = 0.03;
private readonly double = 7;
private readonly double = 0.21;
private double = 0;
private double = 7;
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
{
@ -52,8 +54,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
if (GamingQueue != null)
{
+= * eapsed;
WriteLine($"[ {character} ] 的 [ {Name} ] 效果增加了,当前总提升:{累计伤害 * 100:0.##}%。");
-= eapsed;
if ( <= 0)
{
+= ;
+= ;
WriteLine($"[ {character} ] 的 [ {Name} ] 效果增加了,当前总提升:{累计伤害 * 100:0.##}%。");
}
}
}
}

View File

@ -9,7 +9,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Name => "绝对领域";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => Math.Max(100, Character?.EP ?? 100);
public override double CD => 32 + (1 * (Level - 1));
public override double CD => 60;
public override double HardnessTime { get; set; } = 12;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Duration:0.##} 时间内无法受到任何伤害,且敏捷提升 {系数 * 100:0.##}% [ {敏捷提升:0.##} ]。此技能会消耗至少 100 点能量。";
public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内无法受到任何伤害,且敏捷提升 {系数 * 100:0.##}% [ {敏捷提升:0.##} ]。此技能会消耗至少 100 点能量。";
public override bool Durative => true;
public override double Duration => 16 + * 0.03;

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"30 时间内暴击率提升 {暴击率提升 * 100:0.##}%,暴击伤害提升 {暴击伤害提升 * 100:0.##}%,物理穿透提升 {物理穿透提升 * 100:0.##}%。";
public override string Description => $"30 {GameplayEquilibriumConstant.InGameTime}内暴击率提升 {暴击率提升 * 100:0.##}%,暴击伤害提升 {暴击伤害提升 * 100:0.##}%,物理穿透提升 {物理穿透提升 * 100:0.##}%。";
public override bool Durative => true;
public override double Duration => 30;

View File

@ -61,10 +61,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
}
public override bool BeforeCriticalCheck(Character character, ref double throwingBonus)
public override bool BeforeCriticalCheck(Character actor, Character enemy, ref double throwingBonus)
{
throwingBonus += 100;
return false;
if (actor == Skill.Character)
{
throwingBonus += 100;
}
return true;
}
public override void OnTimeElapsed(Character character, double elapsed)

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => "力量爆发";
public override string Description => $"获得 135% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次攻击都会损失 9% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} 时间。";
public override string Description => $"获得 135% 力量 [ {攻击力加成:0.##} ] 的攻击力加成,但每次攻击都会损失 9% 当前生命值 [ {当前生命值:0.##} ],持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
public override bool Durative => true;
public override double Duration => 10 + 1 * (Level - 1);

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"{Duration:0.##} 时间内,提升自身 25% 物理伤害减免和魔法抗性,普通攻击转为魔法伤害,且硬直时间减少 30%,并基于 {智力系数 * 100:0.##}% 智力 [ {智力加成:0.##} ] 强化普通攻击伤害。";
public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,提升自身 25% 物理伤害减免和魔法抗性,普通攻击转为魔法伤害,且硬直时间减少 30%,并基于 {智力系数 * 100:0.##}% 智力 [ {智力加成:0.##} ] 强化普通攻击伤害。";
public override bool Durative => true;
public override double Duration => 40;

View File

@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Entity;
using System.Collections.Generic;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
namespace Oshima.FunGame.OshimaModules.Skills
@ -24,11 +25,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"优先攻击血量更低的角色,对生命值百分比低于自己的角色造成 150% 伤害。";
public override string Description => $"在 AI 控制下,任何目标都将则优先选择血量更低的角色。行动开始时,弱者猎手会盯上一名角色,然后标记所有生命值百分比低于自己的角色。在此回合内攻击被盯上或者被标记的角色,将造成 150% 伤害。";
public HashSet<Character> { get; set; } = [];
public override double AlterExpectedDamageBeforeCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, Dictionary<Effect, double> totalDamageBonus)
{
if (character == Skill.Character && (enemy.HP / enemy.MaxHP) <= (character.HP / character.MaxHP))
if (character == Skill.Character && .Contains(enemy))
{
double = damage * 0.5;
return ;
@ -36,16 +39,34 @@ namespace Oshima.FunGame.OshimaModules.Skills
return 0;
}
public override bool AlterEnemyListBeforeAction(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney)
public override void AlterSelectListBeforeAction(Character character, List<Character> enemys, List<Character> teammates, List<Skill> skills, Dictionary<Character, int> continuousKilling, Dictionary<Character, int> earnedMoney)
{
.Clear();
IEnumerable<Character> list = [.. enemys.OrderBy(e => e.HP / e.MaxHP)];
if (list.Any())
{
enemys.Clear();
enemys.Add(list.First());
WriteLine($"[ {character} ] 发动了弱者猎手![ {list.First()} ] 被盯上了!");
Character first = list.First();
if (IsCharacterInAIControlling(character))
{
enemys.Clear();
enemys.Add(first);
}
.Add(first);
WriteLine($"[ {character} ] 发动了弱者猎手![ {first} ] 被盯上了!");
AddHalfOfMe(enemys);
if (.Count > 0) WriteLine($"[ {character} ] 的弱者猎手标记了以下角色:[ {string.Join(" ] / [ ", 猎手标记)} ] ");
}
}
private void AddHalfOfMe(params IEnumerable<Character> enemys)
{
foreach (Character enemy in enemys)
{
if (Skill.Character != null && ((enemy.HP / enemy.MaxHP) < (Skill.Character.HP / Skill.Character.MaxHP)))
{
.Add(enemy);
}
}
return true;
}
}
}

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"获得 40% 吸血,持续 {Duration:0.##} 时间。";
public override string Description => $"获得 40% 吸血,持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
public override bool Durative => true;
public override double Duration => 30;

View File

@ -24,13 +24,22 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"普通攻击硬直时间减少 20%。每次使用普通攻击时,额外再发动一次普通攻击,伤害特效可叠加,冷却 {基础冷却时间:0.##} 时间。" +
( > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} 时间" : "");
public override string Description => $"普通攻击硬直时间减少 20%。每次使用普通攻击时,额外再发动一次普通攻击,伤害特效可叠加,但伤害折减一半,冷却 {基础冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" +
( > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}" : "");
public double { get; set; } = 0;
public double { get; set; } = 20;
public double { get; set; } = 12;
private bool = false;
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
{
if (character == Skill.Character && && isNormalAttack && damage > 0)
{
return -(damage / 2);
}
return 0;
}
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
{
if (character == Skill.Character && isNormalAttack && == 0 && ! && GamingQueue != null && enemy.HP > 0)

View File

@ -10,7 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override double EPCost => 100;
public override double CD => 35;
public override double HardnessTime { get; set; } = 10;
public override double HardnessTime { get; set; } = 3;
public override bool CanSelectSelf => true;
public override bool CanSelectEnemy => false;
@ -24,22 +24,34 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => "魔法涌流";
public override string Description => $"{Duration:0.##} 时间内,增加所有伤害的 {减伤比例 * 100:0.##}% 伤害减免,并将普通攻击转为魔法伤害,可叠加魔法震荡的效果。";
public override string Description => $"{Duration:0.##} {GameplayEquilibriumConstant.InGameTime}内,增加自身所有伤害的 {减伤比例 * 100:0.##}% 伤害减免;【魔法震荡】的冷却时间降低至 5 {GameplayEquilibriumConstant.InGameTime},并将普通攻击转为魔法伤害,允许普通攻击时选择至多 3 个目标。";
public override bool Durative => true;
public override double Duration => 25;
public override double Duration => 30;
private double => 0.1 + 0.02 * (Level - 1);
private double => 0.15 + 0.04 * (Level - 1);
private double = 0;
public override void OnEffectGained(Character character)
{
character.NormalAttack.CanSelectTargetCount += 2;
= ;
character.NormalAttack.SetMagicType(true, character.MagicType);
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. = 5;
if (e. > e.) e. = e.;
}
}
public override void OnEffectLost(Character character)
{
= 0;
character.NormalAttack.CanSelectTargetCount -= 2;
character.NormalAttack.SetMagicType(false, character.MagicType);
if (character.Effects.Where(e => e is ).FirstOrDefault() is e)
{
e. = 10;
}
}
public override double AlterActualDamageAfterCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult, ref bool isEvaded, Dictionary<Effect, double> totalDamageBonus)
@ -56,7 +68,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
RemainDuration = Duration;
if (!caster.Effects.Contains(this))
{
= 0;
caster.Effects.Add(this);
OnEffectGained(caster);
}

View File

@ -25,11 +25,25 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"造成魔法伤害时有 35% 几率使敌人眩晕 1 回合。";
public override string Description => $"对处于完全行动不能状态的敌人额外造成 {系数 * 100:0.##}% 力量 [ {伤害加成:0.##} ] 点伤害;造成魔法伤害时使敌人眩晕 1 回合,冷却 {基础冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" +
( > 0 ? $"(正在冷却:剩余 {冷却时间:0.##} {GameplayEquilibriumConstant.InGameTime}" : "");
public double { get; set; } = 0;
public double { get; set; } = 10;
private double => 1.2 * (1 + 0.4 * (Skill.Level - 1));
private double => * Skill.Character?.STR ?? 0;
public override double AlterExpectedDamageBeforeCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, Dictionary<Effect, double> totalDamageBonus)
{
if (character == Skill.Character && enemy.CharacterState == CharacterState.NotActionable)
{
return ;
}
return 0;
}
public override void AfterDamageCalculation(Character character, Character enemy, double damage, bool isNormalAttack, bool isMagicDamage, MagicType magicType, DamageResult damageResult)
{
if (character == Skill.Character && isMagicDamage && damageResult != DamageResult.Evaded && new Random().NextDouble() < 0.35)
if (character == Skill.Character && isMagicDamage && == 0 && damageResult != DamageResult.Evaded && new Random().NextDouble() < 0.35)
{
IEnumerable<Effect> effects = enemy.Effects.Where(e => e is && e.Skill == Skill);
if (effects.Any())
@ -43,6 +57,19 @@ namespace Oshima.FunGame.OshimaModules.Skills
e.OnEffectGained(enemy);
}
WriteLine($"[ {character} ] 的魔法伤害触发了魔法震荡,[ {enemy} ] 被眩晕了!");
= ;
}
}
public override void OnTimeElapsed(Character character, double elapsed)
{
if ( > 0)
{
-= elapsed;
if ( <= 0)
{
= 0;
}
}
}
}

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"敏捷提高 20%,然后将目前的力量补充到与敏捷持平,持续 {Duration:0.##} 时间。";
public override string Description => $"敏捷提高 20%,然后将目前的力量补充到与敏捷持平,持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。";
public override bool Durative => true;
public override double Duration => 30;

View File

@ -24,7 +24,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"进入不可选中状态,获得 100 行动速度,提高 8% 暴击率,持续 {Duration:0.##} 时间。破隐一击:在持续时间内,首次造成伤害会附加 {系数 * 100:0.##}% 敏捷 [ {伤害加成:0.##} ] 的强化伤害,并解除不可选中状态。";
public override string Description => $"进入不可选中状态,获得 100 行动速度,提高 8% 暴击率,持续 {Duration:0.##} {GameplayEquilibriumConstant.InGameTime}。破隐一击:在持续时间内,首次造成伤害会附加 {系数 * 100:0.##}% 敏捷 [ {伤害加成:0.##} ] 的强化伤害,并解除不可选中状态。";
public override bool Durative => true;
public override double Duration => 12 + (1 * (Level - 1));

View File

@ -708,7 +708,7 @@
"Description": "增加角色 85 点攻击力和 25% 暴击伤害。",
"BackgroundStory": "一环荆棘与花朵交织的暗器,美丽而致命,象征着爱与痛的纠缠。",
"ItemType": 1,
"WeaponType": 9,
"WeaponType": 11,
"QualityType": 4,
"Skills": {
"Active": null,
@ -728,6 +728,35 @@
]
}
},
"金箍棒": {
"Id": 11572,
"Name": "金箍棒",
"Description": "增加角色 85 点攻击力。克敌机先:普通攻击有 80% 概率无视闪避。",
"BackgroundStory": "天河定底神珍棒,棒名如意世间高。",
"ItemType": 1,
"WeaponType": 9,
"QualityType": 4,
"Skills": {
"Active": null,
"Passives": [
{
"Id": 7030,
"Name": "金箍棒",
"SkillType": 3,
"Effects": [
{
"Id": 8001,
"exatk": 85
},
{
"Id": 8033,
"p": 0.8
}
]
}
]
}
},
"初级法袍": {
"Id": 12501,
"Name": "初级法袍",
@ -837,7 +866,7 @@
"炼狱战铠": {
"Id": 12505,
"Name": "炼狱战铠",
"Description": "增加角色 40 点物理护甲,增加角色 5 点每时间生命回复。",
"Description": "增加角色 40 点物理护甲,增加角色 5 点每生命回复。",
"BackgroundStory": "在无尽战火中锻造而成,具有极高的防御力。",
"ItemType": 2,
"WeaponType": 0,
@ -1119,7 +1148,7 @@
"辉煌光环": {
"Id": 14504,
"Name": "辉煌光环",
"Description": "增加角色 80 点最大魔法值和 2 点每时间魔法回复。",
"Description": "增加角色 80 点最大魔法值和 2 点每魔法回复。",
"BackgroundStory": "流光溢彩的光环。",
"ItemType": 4,
"WeaponType": 0,
@ -1239,7 +1268,7 @@
"精灵之戒": {
"Id": 14508,
"Name": "精灵之戒",
"Description": "增加角色 5 点每时间魔法回复,并增加角色 8 点智力。",
"Description": "增加角色 5 点每魔法回复,并增加角色 8 点智力。",
"BackgroundStory": "这枚戒指由精灵制成,能够帮助法师更快地恢复法力。",
"ItemType": 4,
"WeaponType": 0,
@ -1268,7 +1297,7 @@
"暗影项链": {
"Id": 14509,
"Name": "暗影项链",
"Description": "增加角色 15 点敏捷和 3 点每时间生命回复。",
"Description": "增加角色 15 点敏捷和 3 点每生命回复。",
"BackgroundStory": "项链蕴含着黑暗的力量,让佩戴者更具敏捷性。",
"ItemType": 4,
"WeaponType": 0,
@ -1414,7 +1443,7 @@
"白月光的玉佩": {
"Id": 14514,
"Name": "白月光的玉佩",
"Description": "增加角色 10% 魔法抗性4 点每时间魔法回复和 5% 冷却缩减。",
"Description": "增加角色 10% 魔法抗性4 点每魔法回复和 5% 冷却缩减。",
"BackgroundStory": "据说每个总裁都有一个救命恩人,还有一个冒充救命恩人的人。",
"ItemType": 4,
"WeaponType": 0,

View File

@ -1,5 +1,4 @@
using System.Text;
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Model;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;

View File

@ -50,7 +50,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
builder.AppendLine(character.ToStringWithLevelWithOutUser());
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.##}");
@ -105,7 +105,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
builder.AppendLine(character.ToStringWithLevelWithOutUser());
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.##}");
@ -157,7 +157,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameSimulation.TeamCharacterStatistics[character];
builder.AppendLine(character.ToStringWithLevelWithOutUser());
builder.AppendLine(character.ToStringWithOutUser());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
@ -175,7 +175,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameSimulation.CharacterStatistics[character];
builder.AppendLine(character.ToStringWithLevelWithOutUser());
builder.AppendLine(character.ToStringWithOutUser());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
@ -202,7 +202,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameSimulation.TeamCharacterStatistics[character];
builder.AppendLine(character.ToStringWithLevelWithOutUser());
builder.AppendLine(character.ToStringWithOutUser());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
@ -220,7 +220,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameSimulation.CharacterStatistics[character];
builder.AppendLine(character.ToStringWithLevelWithOutUser());
builder.AppendLine(character.ToStringWithOutUser());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");