技能调整

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)
{

View File

@ -64,7 +64,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
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)
{

View File

@ -47,7 +47,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
List<Character> teammates = GamingQueue.GetTeammates(character);
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.##} 点!");
return bonus;
}

View File

@ -45,7 +45,7 @@ namespace Oshima.FunGame.OshimaModules.Effects.PassiveEffects
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))
{

View File

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

View File

@ -49,7 +49,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
}
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 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 string Name => Skill.Name;
public override string Description => $"{Skill.SkillOwner()}在其首个可行动回合的开始阶段进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合,该复制品没有冷却时间;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
$"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 50% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 100%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" +
public override string Description => $"{Skill.SkillOwner()}在其首个可行动回合的开始阶段进入 [ {nameof(长期监视)} ] 状态,时刻监视着场上的一举一动。当场上有角色死亡时,如果该角色死于技能,则{Skill.SkillOwner()}复制该技能获得使用权,持续 3 回合;如果该角色死于普通攻击,则{Skill.SkillOwner()}的普通攻击将转为魔法伤害并且无视闪避,持续 3 回合。" +
$"接着,{Skill.SkillOwner()}给予击杀者 [ {nameof(时雨标记)} ]。{Skill.SkillOwner()}在造成魔法伤害时,会基于伤害值的 15% 治疗持有标记的友方角色;{Skill.SkillOwner()}与所有持有标记的友方角色对持有标记的敌方角色的伤害加成提升 25%,并且使持有标记的敌方角色在持续时间内的回合开始阶段,有 65% 概率陷入混乱。" +
$"混乱:进入行动受限状态,失控并随机行动,且在进行攻击指令时,可能会选取友方角色为目标。时雨标记持续 3 回合。";
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)
{
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;
}
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)
@ -84,9 +74,9 @@ namespace Oshima.FunGame.OshimaModules.Skills
public string => $"使场上现有的时雨标记变得不可驱散,并且刷新为持续 3 回合。并给予持有时雨标记的敌方角色 [ 宫监手标记 ],宫监手标记不可驱散,持续 3 回合。{任务要求}";
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()}可以终止所有放监任务。";
public double => 0.8 * Skill.Level;
public double => 0.2 + 0.15 * (Skill.Level - 1);
$"1. 使用 [ 普通攻击 ] 攻击一次队友,此伤害必定暴击且无视闪避;\r\n2. 对{Skill.SkillOwner()}释放一个指向性技能,{Skill.SkillOwner()}将此技能效果无效化并且复制该技能获得使用权持续 4 回合。\r\n注意在宫监手标记被消除前对{Skill.SkillOwner()}释放指向性技能始终会触发无效化和复制效果。杀死{Skill.SkillOwner()}可以终止所有放监任务。";
public double => 0.7 * Skill.Level;
public double => 0.2 + 0.10 * (Skill.Level - 1);
public void (Character character, int count)
{
@ -112,17 +102,17 @@ namespace Oshima.FunGame.OshimaModules.Skills
{
e.DispelledType = DispelledType.CannotBeDispelled;
e.RemainDurationTurn = 3;
}
if (enemies.Contains(character))
{
Effect e2 = new (Skill, caster, character, this)
if (enemies.Contains(character))
{
Durative = false,
DurationTurn = 3,
RemainDurationTurn = 3
};
character.Effects.Add(e2);
e2.OnEffectGained(character);
Effect e2 = new (Skill, caster, character, this)
{
Durative = false,
DurationTurn = 3,
RemainDurationTurn = 3
};
character.Effects.Add(e2);
e2.OnEffectGained(character);
}
}
}
GamingQueue.LastRound.AddApplyEffects(caster, EffectType.Focusing);

View File

@ -77,7 +77,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
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)
{

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)
{

View File

@ -36,7 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
public double { get; set; } = 0.3;
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;
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 string Name => Skill.Name;
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)
{

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)
{

View File

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