技能调整

This commit is contained in:
milimoe 2026-01-16 01:55:46 +08:00
parent c3cb20cef5
commit 0e5c1dd6d4
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
15 changed files with 50 additions and 54 deletions

View File

@ -90,7 +90,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
} }
} }
public override void AfterDeathCalculation(Character death, 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 (death == _targetCharacter) if (death == _targetCharacter)
{ {

View File

@ -64,7 +64,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
return CharacterActionType.EndTurn; return CharacterActionType.EndTurn;
} }
public override void AfterDeathCalculation(Character death, 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 (death == _targetCharacter) if (death == _targetCharacter)
{ {

View File

@ -47,7 +47,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
List<Character> teammates = GamingQueue.GetTeammates(character); List<Character> teammates = GamingQueue.GetTeammates(character);
if ((character == Source || teammates.Contains(Source)) && enemy.Effects.Any(e => e is )) if ((character == Source || teammates.Contains(Source)) && enemy.Effects.Any(e => e is ))
{ {
double bonus = damage; double bonus = damage * 0.25;
WriteLine($"[ {character} ] 受到了{nameof(时雨标记)}的影响,伤害提高了 {bonus:0.##} 点!"); WriteLine($"[ {character} ] 受到了{nameof(时雨标记)}的影响,伤害提高了 {bonus:0.##} 点!");
return bonus; return bonus;
} }

View File

@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
return true; return true;
} }
public override void AfterDeathCalculation(Character death, 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 && killer != null && killer == _targetCharacter && Source != null && death != Source && GamingQueue.Queue.Contains(Source))
{ {

View File

@ -1,4 +1,5 @@
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon; using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Models; using Oshima.FunGame.OshimaModules.Models;
@ -31,13 +32,13 @@ namespace Oshima.FunGame.OshimaModules.Skills
(.Count < && Skill.CurrentCD > 0 ? $"(下次补充:{Skill.CurrentCD} {GameplayEquilibriumConstant.InGameTime}后)" : ""); (.Count < && Skill.CurrentCD > 0 ? $"(下次补充:{Skill.CurrentCD} {GameplayEquilibriumConstant.InGameTime}后)" : "");
public List<> { get; } = []; public List<> { get; } = [];
public const int = 2; public const int = 1;
public const int = 5; public const int = 5;
public const int = 20; public const int = 30;
public const double = 0.15; public const double = 0.1;
public const double = 0.4; public const double = 0.6;
public override void AfterDeathCalculation(Character death, 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 (death is gyb) if (death is gyb)
{ {
@ -99,6 +100,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
while (count < ); while (count < );
} }
if (GamingQueue != null)
{
foreach ( gyb in .Where(g => !GamingQueue.Queue.Contains(g)))
{
if (gyb.HP <= 0) gyb.HP = 1;
(character, gyb);
}
}
} }
public int (Character character) public int (Character character)
@ -124,6 +133,14 @@ namespace Oshima.FunGame.OshimaModules.Skills
gyb.Recovery(); gyb.Recovery();
.Add(gyb); .Add(gyb);
(character, gyb);
WriteLine($"[ {character} ] 召唤了{gyb}");
return .Count;
}
public void (Character character, gyb)
{
// 添加到地图/队列 // 添加到地图/队列
if (GamingQueue != null) if (GamingQueue != null)
{ {
@ -137,15 +154,12 @@ namespace Oshima.FunGame.OshimaModules.Skills
if (target != null) if (target != null)
{ {
map.SetCharacterCurrentGrid(gyb, target); map.SetCharacterCurrentGrid(gyb, target);
WriteLine($"[ {character} ] 召唤了雇佣兵 ({target.X}, {target.Y}, {target.Z}) !");
} }
} }
} }
GamingQueue.Queue.Add(gyb); GamingQueue.Queue.Add(gyb);
GamingQueue.ChangeCharacterHardnessTime(gyb, 5, false, false); GamingQueue.ChangeCharacterHardnessTime(gyb, 5, false, false);
} }
return .Count;
} }
} }
} }

View File

@ -42,7 +42,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public string => $"对受到标记的目标造成伤害时将产生爆炸,爆炸将产生 {分裂伤害系数 * 100:0.##}% 分裂伤害。分裂伤害为全图索敌,会优先分裂至三个在持续时间内对{Skill.SkillOwner()}造成伤害最多的敌人,若没有符合条件的敌人或敌人数量不足,则将分裂至被标记的敌人,或至多三个随机的敌人。"; public string => $"对受到标记的目标造成伤害时将产生爆炸,爆炸将产生 {分裂伤害系数 * 100:0.##}% 分裂伤害。分裂伤害为全图索敌,会优先分裂至三个在持续时间内对{Skill.SkillOwner()}造成伤害最多的敌人,若没有符合条件的敌人或敌人数量不足,则将分裂至被标记的敌人,或至多三个随机的敌人。";
public double => 180 + 240 * (Skill.Level - 1); public double => 180 + 240 * (Skill.Level - 1);
public double => 25 + 2 * (Skill.Level - 1); public double => 25 + 2 * (Skill.Level - 1);
public double => 0.25 + 0.05 * (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);
public Dictionary<Character, double> { get; set; } = []; public Dictionary<Character, double> { get; set; } = [];

View File

@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
public override ImmuneType IgnoreImmune => ImmuneType.All; public override ImmuneType IgnoreImmune => ImmuneType.All;
public double => Math.Min(0.5, 0.3 + (Skill.Character?.Level ?? 0 + 0.00) / 200); public double { get; set; } = 0.25;
public ? { get; set; } = null; public ? { get; set; } = null;
public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult) public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)

View File

@ -26,8 +26,8 @@ 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()}在其首个可行动回合的开始阶段进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合,该复制品没有冷却时间;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" + public override string Description => $"{Skill.SkillOwner()}在其首个可行动回合的开始阶段进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
$"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 50% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 100%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" + $"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 15% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 25%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" +
$"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。"; $"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。";
private bool = false; private bool = false;
@ -49,16 +49,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
} }
public override void OnCharacterActionTaken(Character actor, DecisionPoints dp, CharacterActionType type)
{
Skill[] skills = [.. actor.Skills.Where(s => s.Values.TryGetValue(nameof(), out object? value) && value.Equals(1))];
foreach (Skill skill in skills)
{
skill.CurrentCD = 0;
skill.Enable = true;
}
}
public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult) public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)
{ {
if (character != Skill.Character || GamingQueue is null || damageType != DamageType.Magical || (damageResult != DamageResult.Normal && damageResult != DamageResult.Critical)) if (character != Skill.Character || GamingQueue is null || damageType != DamageType.Magical || (damageResult != DamageResult.Normal && damageResult != DamageResult.Critical))

View File

@ -63,16 +63,6 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
return true; return true;
} }
public override void OnCharacterActionTaken(Character actor, DecisionPoints dp, CharacterActionType type)
{
Skill[] skills = [.. actor.Skills.Where(s => s.Values.TryGetValue(nameof(), out object? value) && value.Equals(1))];
foreach (Skill skill in skills)
{
skill.CurrentCD = 0;
skill.Enable = true;
}
}
} }
public class (Skill skill) : Effect(skill) public class (Skill skill) : Effect(skill)
@ -84,9 +74,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
public string => $"使场上现有的时雨标记变得不可驱散,并且刷新为持续 3 回合。并给予持有时雨标记的敌方角色 [ 宫监手标记 ],宫监手标记不可驱散,持续 3 回合。{任务要求}"; public string => $"使场上现有的时雨标记变得不可驱散,并且刷新为持续 3 回合。并给予持有时雨标记的敌方角色 [ 宫监手标记 ],宫监手标记不可驱散,持续 3 回合。{任务要求}";
public string => $"持有宫监手标记的角色,必须完成以下两个任务以消除标记,否则将在标记消失时,每个未完成的任务给予角色基于{Skill.SkillOwner()} {核心属性系数 * 100:0.##}% 核心属性 + {攻击力系数 * 100:0.##}% 攻击力 [ {Skill.Character?.PrimaryAttributeValue * 核心属性系数 + Skill.Character?.ATK * 攻击力系数:0.##} ] 的真实伤害:\r\n" + public string => $"持有宫监手标记的角色,必须完成以下两个任务以消除标记,否则将在标记消失时,每个未完成的任务给予角色基于{Skill.SkillOwner()} {核心属性系数 * 100:0.##}% 核心属性 + {攻击力系数 * 100:0.##}% 攻击力 [ {Skill.Character?.PrimaryAttributeValue * 核心属性系数 + Skill.Character?.ATK * 攻击力系数:0.##} ] 的真实伤害:\r\n" +
$"1. 使用 [ 普通攻击 ] 攻击一次队友,此伤害必定暴击且无视闪避;\r\n2. 对{Skill.SkillOwner()}释放一个指向性技能,{Skill.SkillOwner()}将此技能效果无效化并且复制该技能获得使用权持续 4 回合,该复制品没有冷却时间。\r\n注意在宫监手标记被消除前对{Skill.SkillOwner()}释放指向性技能始终会触发无效化和复制效果。杀死{Skill.SkillOwner()}可以终止所有放监任务。"; $"1. 使用 [ 普通攻击 ] 攻击一次队友,此伤害必定暴击且无视闪避;\r\n2. 对{Skill.SkillOwner()}释放一个指向性技能,{Skill.SkillOwner()}将此技能效果无效化并且复制该技能获得使用权持续 4 回合。\r\n注意在宫监手标记被消除前对{Skill.SkillOwner()}释放指向性技能始终会触发无效化和复制效果。杀死{Skill.SkillOwner()}可以终止所有放监任务。";
public double => 0.8 * Skill.Level; public double => 0.7 * Skill.Level;
public double => 0.2 + 0.15 * (Skill.Level - 1); public double => 0.2 + 0.10 * (Skill.Level - 1);
public void (Character character, int count) public void (Character character, int count)
{ {
@ -112,17 +102,17 @@ namespace Oshima.FunGame.OshimaModules.Skills
{ {
e.DispelledType = DispelledType.CannotBeDispelled; e.DispelledType = DispelledType.CannotBeDispelled;
e.RemainDurationTurn = 3; e.RemainDurationTurn = 3;
} if (enemies.Contains(character))
if (enemies.Contains(character))
{
Effect e2 = new (Skill, caster, character, this)
{ {
Durative = false, Effect e2 = new (Skill, caster, character, this)
DurationTurn = 3, {
RemainDurationTurn = 3 Durative = false,
}; DurationTurn = 3,
character.Effects.Add(e2); RemainDurationTurn = 3
e2.OnEffectGained(character); };
character.Effects.Add(e2);
e2.OnEffectGained(character);
}
} }
} }
GamingQueue.LastRound.AddApplyEffects(caster, EffectType.Focusing); GamingQueue.LastRound.AddApplyEffects(caster, EffectType.Focusing);

View File

@ -77,7 +77,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
return 0; return 0;
} }
public override void AfterDeathCalculation(Character death, 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 (Skill.Character != null && death != Skill.Character && (killer == Skill.Character || assists.Contains(Skill.Character)) && Skill is skill) if (Skill.Character != null && death != Skill.Character && (killer == Skill.Character || assists.Contains(Skill.Character)) && Skill is skill)
{ {

View File

@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
} }
public override void AfterDeathCalculation(Character death, 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 (death == Skill.Character) if (death == Skill.Character)
{ {

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public double { get; set; } = 0.3; public double { get; set; } = 0.3;
public double { get; set; } = 0.15; public double { get; set; } = 0.15;
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 AlterExpectedDamageBeforeCalculation(Character character, Character enemy, double damage, bool isNormalAttack, DamageType damageType, MagicType magicType, Dictionary<Effect, double> totalDamageBonus)
{ {
double bonus = 0; double bonus = 0;
if (character != Skill.Character && enemy != Skill.Character) if (character != Skill.Character && enemy != Skill.Character)

View File

@ -27,7 +27,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 => $"造成伤害时,标记目标 25 {GameplayEquilibriumConstant.InGameTime}并叠加 1 层数,当目标身上的电刑标记达到 3 层时,此次伤害提升 {伤害百分比 * 100:0.##}%。"; public override string Description => $"造成伤害时,标记目标 25 {GameplayEquilibriumConstant.InGameTime}并叠加 1 层数,当目标身上的电刑标记达到 3 层时,此次伤害提升 {伤害百分比 * 100:0.##}%。";
private double => Skill.Character != null ? 0.3 + Skill.Character.Level * 0.005 : 0; private double => Skill.Character != null ? 0.2 + Skill.Character.Level * 0.004 : 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) 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)
{ {

View File

@ -53,7 +53,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
} }
} }
public override void AfterDeathCalculation(Character death, 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 (death == Skill.Character && > 0) if (death == Skill.Character && > 0)
{ {

View File

@ -23,6 +23,7 @@ namespace Oshima.FunGame.OshimaServers.Service
public static GameMap Map { get; } = new FastAutoMap(); public static GameMap Map { get; } = new FastAutoMap();
public static bool IsRuning { get; set; } = false; public static bool IsRuning { get; set; } = false;
public static bool IsWeb { get; set; } = false; public static bool IsWeb { get; set; } = false;
public static bool IsDebug { get; set; } = false;
public static bool PrintOut { get; set; } = false; public static bool PrintOut { get; set; } = false;
public static bool DeathMatchRoundDetail { get; set; } = false; public static bool DeathMatchRoundDetail { get; set; } = false;
public static string Msg { get; set; } = ""; public static string Msg { get; set; } = "";
@ -204,6 +205,7 @@ namespace Oshima.FunGame.OshimaServers.Service
if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo())); if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo()));
// 初始化队列,准备开始游戏 // 初始化队列,准备开始游戏
actionQueue.IsDebug = IsDebug;
actionQueue.InitActionQueue(); actionQueue.InitActionQueue();
actionQueue.SetCharactersToAIControl(false, characters); actionQueue.SetCharactersToAIControl(false, characters);
if (PrintOut) Console.WriteLine(); if (PrintOut) Console.WriteLine();