添加新技能

This commit is contained in:
milimoe 2025-09-26 23:32:53 +08:00
parent 5b9ed72ad3
commit d198718697
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
11 changed files with 242 additions and 8 deletions

View File

@ -264,6 +264,8 @@
= 4124,
= 4125,
= 4126,
= 4127
= 4127,
= 4128,
= 4129
}
}

View File

@ -8,7 +8,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
{
public override long Id => (long)PassiveEffectID.;
public override string Name => "战斗不能";
public override string Description => $"此角色处于战斗不能状态,无法普通攻击和使用技能(魔法、战技和爆发技)。来自:[ {Source} ] 的 [ {Skill.Name} ]";
public override string Description => $"此角色处于战斗不能状态,无法普通攻击和使用技能(魔法、战技和爆发技),无法对敌人或者队友使用物品。来自:[ {Source} ] 的 [ {Skill.Name} ]";
public override EffectType EffectType => EffectType.Cripple;
public override DispelledType DispelledType => DispelledType.Strong;
public override bool IsDebuff => true;

View File

@ -0,0 +1,64 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
{
public class : Effect
{
public override long Id => (long)PassiveEffectID.;
public override string Name => "易损";
public override string Description => $"此角色处于易损状态,承受伤害提升 {_exDamagePercent * 100:0.##}%。来自:[ {Source} ] 的 [ {Skill.Name} ]";
public override EffectType EffectType => EffectType.Vulnerable;
public override bool IsDebuff => true;
public override Character Source => _sourceCharacter;
public override bool Durative => _durative;
public override double Duration => _duration;
public override int DurationTurn => _durationTurn;
private readonly Character _targetCharacter;
private readonly Character _sourceCharacter;
private readonly bool _durative;
private readonly double _duration;
private readonly int _durationTurn;
private readonly double _exDamagePercent;
public (Skill skill, Character targetCharacter, Character sourceCharacter, bool durative = false, double duration = 0, int durationTurn = 1, double exDamagePercent = 0) : base(skill)
{
GamingQueue = skill.GamingQueue;
_targetCharacter = targetCharacter;
_sourceCharacter = sourceCharacter;
_durative = durative;
_duration = duration;
_durationTurn = durationTurn;
_exDamagePercent = exDamagePercent;
}
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 == _targetCharacter)
{
return damage * _exDamagePercent;
}
return 0;
}
public override void OnEffectGained(Character character)
{
if (_durative && RemainDuration == 0)
{
RemainDuration = Duration;
}
else if (RemainDurationTurn == 0)
{
RemainDurationTurn = DurationTurn;
}
AddEffectTypeToCharacter(character, [EffectType.Vulnerable]);
}
public override void OnEffectLost(Character character)
{
RemoveEffectTypesFromCharacter(character);
}
}
}

View File

@ -0,0 +1,25 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
{
public class : Effect
{
public override long Id => (long)PassiveEffectID.;
public override string Name => "电刑标记";
public override string Description => $"此角色持有电刑标记,层数:{层数} 层。来自:[ {Source} ]";
public override EffectType EffectType => EffectType.Mark;
public override bool IsDebuff => true;
public override Character Source => _sourceCharacter;
public int { get; set; } = 1;
private readonly Character _sourceCharacter;
public (Skill skill, Character sourceCharacter) : base(skill)
{
GamingQueue = skill.GamingQueue;
_sourceCharacter = sourceCharacter;
}
}
}

View File

@ -126,6 +126,8 @@ namespace Oshima.FunGame.OshimaModules
(long)PassiveID. => new (),
(long)PassiveID. => new (),
(long)PassiveID. => new (),
(long)PassiveID. => new (),
(long)PassiveID. => new (),
(long)ItemPassiveID. => new (),
(long)ItemActiveID. => new (),
(long)ItemActiveID. => new (),

View File

@ -42,11 +42,11 @@ namespace Oshima.FunGame.OshimaModules.Skills
if (character == Skill.Character && actualDamage > 0 && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical) && ! && enemy.HP > 0)
{
// 叠标记
IEnumerable<Effect> effects = enemy.Effects.Where(e => e is );
if (effects.Any() && effects.First() is e)
IEnumerable<Effect> effects = enemy.Effects.Where(e => e is && e.Source == character);
if (effects.FirstOrDefault() is e)
{
IEnumerable<Effect> effects2 = character.Effects.Where(e => e is );
if (effects2.Any() && effects2.First() is e2)
if (effects2.FirstOrDefault() is e2)
{
// 嗜血本能生效状态下,不会移除标记
}

View File

@ -14,6 +14,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override string Slogan => "从深渊引爆力量,世界将为之颤抖!!!!";
public override bool CanSelectSelf => false;
public override bool CanSelectEnemy => true;
public override bool CastAnywhere => true;
public (Character? character = null) : base(SkillType.SuperSkill, character)
{

View File

@ -0,0 +1,71 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)PassiveID.;
public override string Name => "强攻";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public (Character? character = null) : base(SkillType.Passive, character)
{
Effects.Add(new (this));
}
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return Effects;
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"连续3次普通攻击同一目标时造成额外的 {额外伤害系数 * 100:0.##}% 伤害并使其进入易损状态,后续承受伤害提升 {易损伤害提升百分比 * 100:0.##}%,持续 {易损持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。";
private double => Skill.Character != null ? 0.15 + Skill.Character.Level * 0.004 : 0.15;
private double => Skill.Character != null ? 0.06 + Skill.Character.Level * 0.005 : 0.06;
private double => Skill.Character != null ? 15 + Skill.Character.Level * 0.1 : 15;
private int = 0;
private Character? = null;
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 (Skill.Character != null && Skill.Character == character && isNormalAttack && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical))
{
if ( != enemy)
{
= 0;
= enemy;
}
++;
if ( == 3)
{
double = damage * ;
WriteLine($"[ {character} ] 发动了强攻!将额外造成 {额外伤害:0.##} 点伤害!");
= 0;
WriteLine($"[ {character} ] 对 [ {enemy} ] 施加了易损状态![ {enemy} ] 的承受伤害提升 {易损伤害提升百分比 * 100:0.##}%");
(character, enemy);
return ;
}
}
return 0;
}
private void (Character character, Character target)
{
Effect e = new (Skill, target, character, true, , 0, );
target.Effects.Add(e);
e.OnEffectGained(target);
RecordCharacterApplyEffects(target, EffectType.Vulnerable);
}
}
}

View File

@ -0,0 +1,62 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.PassiveEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
public class : Skill
{
public override long Id => (long)PassiveID.;
public override string Name => "电刑";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
public override string DispelDescription => Effects.Count > 0 ? Effects.First().DispelDescription : "";
public (Character? character = null) : base(SkillType.Passive, character)
{
Effects.Add(new (this));
}
public override IEnumerable<Effect> AddPassiveEffectToCharacter()
{
return Effects;
}
}
public class (Skill skill) : Effect(skill)
{
public override long Id => Skill.Id;
public override string Name => Skill.Name;
public override string Description => $"造成伤害时,标记目标 25 {GameplayEquilibriumConstant.InGameTime}并叠加 1 层数,当目标身上的电刑标记达到 3 层时,此次伤害提升 {伤害百分比 * 100:0.##}%。";
private double => Skill.Character != null ? 0.4 + Skill.Character.Level * 0.01 : 0;
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 (Skill.Character != null && Skill.Character == character && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical))
{
if (enemy.Effects.Where(e => e is && e.Source == character).FirstOrDefault() is e)
{
e.++;
if (e. >= 3)
{
double = damage * ;
WriteLine($"[ {character} ] 发动了电刑的 3 层效果,伤害提升了 {伤害百分比 * 100:0.##}%!额外造成 {额外伤害:0.##} 点{CharacterSet.GetDamageTypeName(damageType)}");
e.RemainDuration = 0;
enemy.Effects.Remove(e);
return ;
}
}
else
{
e = new (Skill, character)
{
Durative = true,
Duration = 25,
RemainDuration = 25
};
enemy.Effects.Add(e);
}
}
return 0;
}
}
}

View File

@ -52,7 +52,7 @@ namespace Oshima.FunGame.OshimaServers.Service
FunGameConstant.PassiveSkills.AddRange([new META马(), new (), new (), new (), new (), new (), new (), new (), new (), new (), new (), new ()]);
FunGameConstant.CommonPassiveSkills.AddRange([new (), new ()]);
FunGameConstant.CommonPassiveSkills.AddRange([new (), new (), new (), new ()]);
FunGameConstant.Magics.AddRange([new (), new (), new (), new (), new (), new (), new (), new (),
new (), new (), new (), new (), new (), new (), new (), new (), new (), new (), new (),
@ -1739,11 +1739,11 @@ namespace Oshima.FunGame.OshimaServers.Service
}
else
{
baseScore = baseScore * 0.6 + 0.4 * (stats.Kills / (stats.Kills + stats.Deaths + 0.01));
baseScore = baseScore * 0.7 + 0.4 * (stats.Kills / (stats.Kills + stats.Deaths + 0.01));
}
// 伤害贡献
double damageContribution = Math.Log(1 + Math.Min(2, (stats.TotalDamage / (stats.TotalTakenDamage + 1))));
double damageContribution = Math.Log(1 + Math.Min(2, (stats.TotalDamage / (stats.TotalTakenDamage + 1.45))));
if (team != null && teammateStats != null)
{
// 考虑团队伤害排名,优先高伤害的

View File

@ -126,6 +126,13 @@ namespace Oshima.FunGame.OshimaServers.Service
Level = slevel
};
c.Skills.Add();
foreach (Skill skillLoop in FunGameConstant.CommonPassiveSkills)
{
Skill passive = skillLoop.Copy();
passive.Character = c;
passive.Level = 1;
c.Skills.Add(passive);
}
foreach (Effect e in c.Effects)
{
e.OnEffectLost(c);