diff --git a/OshimaModules/Effects/EffectID.cs b/OshimaModules/Effects/EffectID.cs
index 825bc0c..f0a06fc 100644
--- a/OshimaModules/Effects/EffectID.cs
+++ b/OshimaModules/Effects/EffectID.cs
@@ -175,6 +175,21 @@
///
IgnoreEvade = 8033,
+ ///
+ /// 数值攻击距离,参数:exatr
+ ///
+ ExATR = 8034,
+
+ ///
+ /// 数值移动距离,参数:exmov
+ ///
+ ExMOV = 8035,
+
+ ///
+ /// 生命偷取%,参数:exls
+ ///
+ ExLifesteal = 8038,
+
///
/// 被动特效终点
///
diff --git a/OshimaModules/Effects/OpenEffects/DynamicsEffect.cs b/OshimaModules/Effects/OpenEffects/DynamicsEffect.cs
index 10e8641..869ebf6 100644
--- a/OshimaModules/Effects/OpenEffects/DynamicsEffect.cs
+++ b/OshimaModules/Effects/OpenEffects/DynamicsEffect.cs
@@ -582,6 +582,36 @@ namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
Descriptions.Add($"{(exls >= 0 ? "增加" : "减少")}角色 {Math.Abs(exls) * 100:0.##}% 生命偷取。");
}
break;
+ case "exatr":
+ if (int.TryParse(value, out int exatr))
+ {
+ if (!remove)
+ {
+ character.ExATR += exatr;
+ }
+ else if (RealDynamicsValues.TryGetValue("exatr", out double current))
+ {
+ character.ExATR -= (int)current;
+ }
+ RealDynamicsValues["exatr"] = exatr;
+ Descriptions.Add($"{(exatr >= 0 ? "增加" : "减少")}角色 {Math.Abs(exatr)} 格攻击距离。");
+ }
+ break;
+ case "exmov":
+ if (int.TryParse(value, out int exmov))
+ {
+ if (!remove)
+ {
+ character.ExMOV += exmov;
+ }
+ else if (RealDynamicsValues.TryGetValue("exmov", out double current))
+ {
+ character.ExMOV -= (int)current;
+ }
+ RealDynamicsValues["exmov"] = exmov;
+ Descriptions.Add($"{(exmov >= 0 ? "增加" : "减少")}角色 {Math.Abs(exmov)} 格移动距离。");
+ }
+ break;
}
}
}
diff --git a/OshimaModules/Effects/OpenEffects/ExATR.cs b/OshimaModules/Effects/OpenEffects/ExATR.cs
new file mode 100644
index 0000000..e3700a0
--- /dev/null
+++ b/OshimaModules/Effects/OpenEffects/ExATR.cs
@@ -0,0 +1,48 @@
+using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Library.Constant;
+
+namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
+{
+ public class ExATR : Effect
+ {
+ public override long Id => (long)EffectID.ExATR;
+ public override string Name => "攻击距离加成";
+ public override string Description => $"{(实际加成 >= 0 ? "增加" : "减少")}角色 {Math.Abs(实际加成)} 格攻击距离。" + (Source != null && (Skill.Character != Source || Skill is not OpenSkill) ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : (Skill is OpenSkill ? "" : $" 的 [ {Skill.Name} ]")) : "");
+ public int Value => 实际加成;
+
+ private readonly int 实际加成 = 0;
+
+ public override void OnEffectGained(Character character)
+ {
+ if (Durative && RemainDuration == 0)
+ {
+ RemainDuration = Duration;
+ }
+ else if (RemainDurationTurn == 0)
+ {
+ RemainDurationTurn = DurationTurn;
+ }
+ character.ExATR += 实际加成;
+ }
+
+ public override void OnEffectLost(Character character)
+ {
+ character.ExATR -= 实际加成;
+ }
+
+ public ExATR(Skill skill, Dictionary args, Character? source = null) : base(skill, args)
+ {
+ EffectType = EffectType.Item;
+ GamingQueue = skill.GamingQueue;
+ Source = source;
+ if (Values.Count > 0)
+ {
+ string key = Values.Keys.FirstOrDefault(s => s.Equals("exatr", StringComparison.CurrentCultureIgnoreCase)) ?? "";
+ if (key.Length > 0 && int.TryParse(Values[key].ToString(), out int exATR))
+ {
+ 实际加成 = exATR;
+ }
+ }
+ }
+ }
+}
diff --git a/OshimaModules/Effects/OpenEffects/ExLifesteal.cs b/OshimaModules/Effects/OpenEffects/ExLifesteal.cs
new file mode 100644
index 0000000..5497c4b
--- /dev/null
+++ b/OshimaModules/Effects/OpenEffects/ExLifesteal.cs
@@ -0,0 +1,48 @@
+using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Library.Constant;
+
+namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
+{
+ public class ExLifesteal : Effect
+ {
+ public override long Id => (long)EffectID.ExLifesteal;
+ public override string Name => "生命偷取加成";
+ public override string Description => $"{(实际加成 >= 0 ? "增加" : "减少")}角色 {Math.Abs(实际加成) * 100:0.##}% 生命偷取。" + (Source != null && (Skill.Character != Source || Skill is not OpenSkill) ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : (Skill is OpenSkill ? "" : $" 的 [ {Skill.Name} ]")) : "");
+ public double Value => 实际加成;
+
+ private readonly double 实际加成 = 0;
+
+ public override void OnEffectGained(Character character)
+ {
+ if (Durative && RemainDuration == 0)
+ {
+ RemainDuration = Duration;
+ }
+ else if (RemainDurationTurn == 0)
+ {
+ RemainDurationTurn = DurationTurn;
+ }
+ character.Lifesteal += 实际加成;
+ }
+
+ public override void OnEffectLost(Character character)
+ {
+ character.Lifesteal -= 实际加成;
+ }
+
+ public ExLifesteal(Skill skill, Dictionary args, Character? source = null) : base(skill, args)
+ {
+ EffectType = EffectType.Item;
+ GamingQueue = skill.GamingQueue;
+ Source = source;
+ if (Values.Count > 0)
+ {
+ string key = Values.Keys.FirstOrDefault(s => s.Equals("exls", StringComparison.CurrentCultureIgnoreCase)) ?? "";
+ if (key.Length > 0 && double.TryParse(Values[key].ToString(), out double exLS))
+ {
+ 实际加成 = exLS;
+ }
+ }
+ }
+ }
+}
diff --git a/OshimaModules/Effects/OpenEffects/ExMOV.cs b/OshimaModules/Effects/OpenEffects/ExMOV.cs
new file mode 100644
index 0000000..c8c7d99
--- /dev/null
+++ b/OshimaModules/Effects/OpenEffects/ExMOV.cs
@@ -0,0 +1,48 @@
+using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Library.Constant;
+
+namespace Oshima.FunGame.OshimaModules.Effects.OpenEffects
+{
+ public class ExMOV : Effect
+ {
+ public override long Id => (long)EffectID.ExMOV;
+ public override string Name => "移动距离加成";
+ public override string Description => $"{(实际加成 >= 0 ? "增加" : "减少")}角色 {Math.Abs(实际加成)} 格移动距离。" + (Source != null && (Skill.Character != Source || Skill is not OpenSkill) ? $"来自:[ {Source} ]" + (Skill.Item != null ? $" 的 [ {Skill.Item.Name} ]" : (Skill is OpenSkill ? "" : $" 的 [ {Skill.Name} ]")) : "");
+ public int Value => 实际加成;
+
+ private readonly int 实际加成 = 0;
+
+ public override void OnEffectGained(Character character)
+ {
+ if (Durative && RemainDuration == 0)
+ {
+ RemainDuration = Duration;
+ }
+ else if (RemainDurationTurn == 0)
+ {
+ RemainDurationTurn = DurationTurn;
+ }
+ character.ExMOV += 实际加成;
+ }
+
+ public override void OnEffectLost(Character character)
+ {
+ character.ExMOV -= 实际加成;
+ }
+
+ public ExMOV(Skill skill, Dictionary args, Character? source = null) : base(skill, args)
+ {
+ EffectType = EffectType.Item;
+ GamingQueue = skill.GamingQueue;
+ Source = source;
+ if (Values.Count > 0)
+ {
+ string key = Values.Keys.FirstOrDefault(s => s.Equals("exmov", StringComparison.CurrentCultureIgnoreCase)) ?? "";
+ if (key.Length > 0 && int.TryParse(Values[key].ToString(), out int exMOV))
+ {
+ 实际加成 = exMOV;
+ }
+ }
+ }
+ }
+}
diff --git a/OshimaModules/Items/Consumable/回复药.cs b/OshimaModules/Items/Consumable/回复药.cs
index 0a5a99d..d04c34e 100644
--- a/OshimaModules/Items/Consumable/回复药.cs
+++ b/OshimaModules/Items/Consumable/回复药.cs
@@ -170,6 +170,7 @@ namespace Oshima.FunGame.OshimaModules.Items
{
Level = 1;
Item = item;
+ SelectTargetPredicates.Add(c => c.HP > 0 && c.HP < c.MaxHP);
if (!isPercentage)
{
Effects.Add(new RecoverHP(this, new()
diff --git a/OshimaModules/Items/Consumable/复苏药.cs b/OshimaModules/Items/Consumable/复苏药.cs
index 7db01d1..61278ed 100644
--- a/OshimaModules/Items/Consumable/复苏药.cs
+++ b/OshimaModules/Items/Consumable/复苏药.cs
@@ -166,6 +166,7 @@ namespace Oshima.FunGame.OshimaModules.Items
_canSelectTeammate = canSelectTeammate;
_canSelectEnemy = canSelectEnemy;
_canSelectCount = canSelectCount;
+ SelectTargetPredicates.Add(c => c.HP >= 0 && c.HP < c.MaxHP);
Effects.Add(new 强驱散特效(this));
if (!isPercentage)
{
diff --git a/OshimaModules/Models/FunGameConstant.cs b/OshimaModules/Models/FunGameConstant.cs
index 01772d1..8d5d7be 100644
--- a/OshimaModules/Models/FunGameConstant.cs
+++ b/OshimaModules/Models/FunGameConstant.cs
@@ -22,7 +22,9 @@ namespace Oshima.FunGame.OshimaModules.Models
public static List Characters { get; } = [];
public static List Skills { get; } = [];
public static List PassiveSkills { get; } = [];
+ public static List CommonPassiveSkills { get; } = [];
public static List SuperSkills { get; } = [];
+ public static List CommonSuperSkills { get; } = [];
public static List Magics { get; } = [];
public static List- Equipment { get; } = [];
public static List
- Items { get; } = [];
@@ -47,7 +49,6 @@ namespace Oshima.FunGame.OshimaModules.Models
public static Dictionary UserCreditsRanking { get; } = [];
public static Dictionary UserMaterialsRanking { get; } = [];
public static Dictionary UserEXPRanking { get; } = [];
- public static Dictionary UserSkillRanking { get; } = [];
public static Dictionary ClubIdAndClub { get; } = [];
public static DateTime RankingUpdateTime { get; set; } = DateTime.Now;
public static char[] SplitChars => [',', ' ', ',', ';', ';'];
@@ -300,6 +301,13 @@ namespace Oshima.FunGame.OshimaModules.Models
{ "exatk", Math.Clamp(Random.Shared.NextDouble(), 0.15, 0.3) }
}
},
+ {
+ EffectID.ExMaxMP2,
+ new()
+ {
+ { "exmp", 5 }
+ }
+ },
{
EffectID.AccelerationCoefficient,
new()
diff --git a/OshimaModules/Modules/SkillModule.cs b/OshimaModules/Modules/SkillModule.cs
index e6650e3..e011c08 100644
--- a/OshimaModules/Modules/SkillModule.cs
+++ b/OshimaModules/Modules/SkillModule.cs
@@ -124,6 +124,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 礼包技能(),
@@ -173,6 +175,9 @@ namespace Oshima.FunGame.OshimaModules
EffectID.ExMaxMP2 => new ExMaxMP2(skill, dict),
EffectID.DynamicsEffect => new DynamicsEffect(skill, dict),
EffectID.IgnoreEvade => new IgnoreEvade(skill, dict),
+ EffectID.ExATR => new ExATR(skill, dict),
+ EffectID.ExMOV => new ExMOV(skill, dict),
+ EffectID.ExLifesteal => new ExLifesteal(skill, dict),
EffectID.RecoverHP => new RecoverHP(skill, dict),
EffectID.RecoverMP => new RecoverMP(skill, dict),
EffectID.RecoverHP2 => new RecoverHP2(skill, dict),
diff --git a/OshimaModules/Skills/被动/致命节奏.cs b/OshimaModules/Skills/被动/致命节奏.cs
new file mode 100644
index 0000000..7f1c636
--- /dev/null
+++ b/OshimaModules/Skills/被动/致命节奏.cs
@@ -0,0 +1,81 @@
+using Milimoe.FunGame.Core.Entity;
+using Milimoe.FunGame.Core.Library.Constant;
+using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
+
+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 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 => $"每次普通攻击造成伤害后,提升 {行动速度提升:0.##} 点行动速度,持续 {行动速度持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" +
+ $"当行动系数达到 {行动系数阈值:0.##}% 时,获得 {额外攻击力:0.##} 点额外攻击力,持续 {额外攻击力持续时间:0.##} {GameplayEquilibriumConstant.InGameTime}。" +
+ $"获得额外攻击力后,致命节奏进入冷却时间 {冷却时间} {GameplayEquilibriumConstant.InGameTime}。";
+
+ private double 行动系数阈值 => Skill.Character != null ? 25 + Skill.Character.Level * 0.6 : 25;
+ private double 行动速度持续时间 => Skill.Character != null ? 18 - Skill.Character.Level * 0.1 : 18;
+ private double 行动速度提升 => Skill.Character != null ? 40 + Skill.Character.Level * 1.1 : 40;
+ private double 额外攻击力持续时间 => Skill.Character != null ? 12 + Skill.Character.Level * 0.15 : 12;
+ private double 额外攻击力 => Skill.Character != null ? 6 + Skill.Character.Level * 1.7 : 6;
+ private double 冷却时间 => Skill.Character != null ? 24 + Skill.Character.Level * 0.1 : 24;
+ private bool 冷却中 => Skill.CurrentCD > 0;
+
+ public override void AfterDamageCalculation(Character character, Character enemy, double damage, double actualDamage, bool isNormalAttack, DamageType damageType, MagicType magicType, DamageResult damageResult)
+ {
+ if (Skill.Character != null && Skill.Character == character && !冷却中 && isNormalAttack && (damageResult == DamageResult.Normal || damageResult == DamageResult.Critical))
+ {
+ WriteLine($"[ {character} ] 发动了致命节奏,提升了 {行动速度提升:0.##} 点行动速度!");
+ Effect e1 = new ExSPD(Skill, new Dictionary()
+ {
+ { "exspd", 行动速度提升 }
+ }, character)
+ {
+ Durative = true,
+ Duration = 行动速度持续时间
+ };
+ character.Effects.Add(e1);
+ e1.OnEffectGained(character);
+ e1.IsDebuff = false;
+ RecordCharacterApplyEffects(character, EffectType.Haste);
+
+ // 检查是否达到阈值
+ if (character.ActionCoefficient * 100 >= 行动系数阈值)
+ {
+ Skill.Enable = false;
+ Skill.CurrentCD = 冷却时间;
+ WriteLine($"[ {character} ] 发动了致命节奏,获得了 {额外攻击力:0.##} 点额外攻击力!");
+ Effect e2 = new ExATK(Skill, new Dictionary()
+ {
+ { "exatk", 额外攻击力 }
+ }, character)
+ {
+ Durative = true,
+ Duration = 额外攻击力持续时间
+ };
+ character.Effects.Add(e2);
+ e2.OnEffectGained(character);
+ e2.IsDebuff = false;
+ RecordCharacterApplyEffects(character, EffectType.DamageBoost);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/OshimaModules/Skills/魔法/时间加速复.cs b/OshimaModules/Skills/魔法/时间加速复.cs
index 598cafd..3ff6cc5 100644
--- a/OshimaModules/Skills/魔法/时间加速复.cs
+++ b/OshimaModules/Skills/魔法/时间加速复.cs
@@ -1,7 +1,6 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
-using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
@@ -109,7 +108,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = false;
- GamingQueue?.LastRound.ApplyEffects.TryAdd(target, [EffectType.Haste]);
+ RecordCharacterApplyEffects(target, EffectType.Haste);
}
}
}
diff --git a/OshimaModules/Skills/魔法/时间加速改.cs b/OshimaModules/Skills/魔法/时间加速改.cs
index 3bd45b2..d614ab4 100644
--- a/OshimaModules/Skills/魔法/时间加速改.cs
+++ b/OshimaModules/Skills/魔法/时间加速改.cs
@@ -1,7 +1,6 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.FunGame.OshimaModules.Effects.OpenEffects;
-using Oshima.FunGame.OshimaModules.Effects.SkillEffects;
namespace Oshima.FunGame.OshimaModules.Skills
{
@@ -10,10 +9,10 @@ namespace Oshima.FunGame.OshimaModules.Skills
public override long Id => (long)MagicID.时间加速改;
public override string Name => "时间加速·改";
public override string Description => Effects.Count > 0 ? Effects.First().Description : "";
- public override double MPCost => Level > 0 ? 80 + (85 * (Level - 1)) : 80;
+ public override double MPCost => Level > 0 ? 120 + (115 * (Level - 1)) : 120;
public override double CD => Level > 0 ? 65 - (0.5 * (Level - 1)) : 65;
- public override double CastTime => Level > 0 ? 6 + (1 * (Level - 1)) : 6;
- public override double HardnessTime { get; set; } = 7;
+ public override double CastTime => 3;
+ public override double HardnessTime { get; set; } = 9;
public override bool CanSelectSelf => true;
public override bool CanSelectTeammate => true;
public override bool CanSelectEnemy => false;
@@ -93,7 +92,7 @@ namespace Oshima.FunGame.OshimaModules.Skills
target.Effects.Add(e2);
e2.OnEffectGained(target);
e2.IsDebuff = false;
- GamingQueue?.LastRound.ApplyEffects.TryAdd(target, [EffectType.Haste]);
+ RecordCharacterApplyEffects(target, EffectType.Haste);
}
}
}
diff --git a/OshimaServers/Service/FunGameService.cs b/OshimaServers/Service/FunGameService.cs
index 3e0216f..c7d4266 100644
--- a/OshimaServers/Service/FunGameService.cs
+++ b/OshimaServers/Service/FunGameService.cs
@@ -51,6 +51,8 @@ namespace Oshima.FunGame.OshimaServers.Service
FunGameConstant.SuperSkills.AddRange([new 嗜血本能(), new 平衡强化(), new 绝对领域(), new 精准打击(), new 三重叠加(), new 变幻之心(), new 力量爆发(), new 能量毁灭(), new 血之狂欢(), new 迅捷之势(), new 天赐之力(), new 魔法涌流()]);
FunGameConstant.PassiveSkills.AddRange([new META马(), new 心灵之火(), new 魔法震荡(), new 灵能反射(), new 智慧与力量(), new 致命打击(), new 毁灭之势(), new 枯竭打击(), new 破釜沉舟(), new 累积之压(), new 敏捷之刃(), new 弱者猎手()]);
+
+ FunGameConstant.CommonPassiveSkills.AddRange([new 征服者(), new 致命节奏()]);
FunGameConstant.Magics.AddRange([new 冰霜攻击(), new 火之矢(), new 水之矢(), new 风之轮(), new 石之锤(), new 心灵之霞(), new 次元上升(), new 暗物质(),
new 回复术(), new 治愈术(), new 复苏术(), new 圣灵术(), new 时间加速(), new 时间减速(), new 反魔法领域(), new 沉默十字(), new 虚弱领域(), new 混沌烙印(), new 凝胶稠絮(),
@@ -126,8 +128,10 @@ namespace Oshima.FunGame.OshimaServers.Service
FunGameConstant.AllSkills.AddRange(FunGameConstant.Magics);
FunGameConstant.AllSkills.AddRange(FunGameConstant.Skills);
FunGameConstant.AllSkills.AddRange(FunGameConstant.PassiveSkills);
+ FunGameConstant.AllSkills.AddRange(FunGameConstant.CommonPassiveSkills);
FunGameConstant.AllSkills.AddRange(FunGameConstant.ItemSkills);
FunGameConstant.AllSkills.AddRange(FunGameConstant.SuperSkills);
+ FunGameConstant.AllSkills.AddRange(FunGameConstant.CommonSuperSkills);
}
public static List
- GenerateMagicCards(int count, QualityType? qualityType = null, long[]? magicIds = null, (int str, int agi, int intelligence)[]? values = null)
@@ -460,7 +464,9 @@ namespace Oshima.FunGame.OshimaServers.Service
FunGameConstant.Equipment.Clear();
FunGameConstant.Skills.Clear();
FunGameConstant.SuperSkills.Clear();
+ FunGameConstant.CommonSuperSkills.Clear();
FunGameConstant.PassiveSkills.Clear();
+ FunGameConstant.CommonPassiveSkills.Clear();
FunGameConstant.Magics.Clear();
FunGameConstant.DrawCardItems.Clear();
FunGameConstant.ExploreItems.Clear();
@@ -1751,7 +1757,7 @@ namespace Oshima.FunGame.OshimaServers.Service
}
// 存活时间贡献
- double liveTimeContribution = Math.Log(1 + (stats.LiveTime / (stats.TotalTakenDamage + 0.01) * 100));
+ double liveTimeContribution = Math.Log(1 + (stats.LiveTime / (stats.TotalTakenDamage + 1) * 100));
// 团队模式参团率加成
double teamContribution = 0;
@@ -4588,8 +4594,7 @@ namespace Oshima.FunGame.OshimaServers.Service
// 排行榜更新
FunGameConstant.UserCreditsRanking[user.Id] = user.Inventory.Credits;
FunGameConstant.UserMaterialsRanking[user.Id] = user.Inventory.Materials;
- FunGameConstant.UserEXPRanking[user.Id] = user.Inventory.Characters.Select(c => FunGameConstant.PrecomputeTotalExperience[c.Level] + c.EXP).Sum();
- FunGameConstant.UserSkillRanking[user.Id] = user.Inventory.Characters.Select(c => (c.NormalAttack.Level - 1) * 50000 + c.Skills.Select(s => s.Level * 40000).Sum()).Sum();
+ FunGameConstant.UserEXPRanking[user.Id] = user.Inventory.Characters.Select(c => FunGameConstant.PrecomputeTotalExperience[c.Level] + c.EXP + (c.NormalAttack.Level - 1) * 50000 + c.Skills.Select(s => s.Level * 40000).Sum()).Sum();
if (pc.TryGetValue("horseRacingPoints", out object? value3) && int.TryParse(value3.ToString(), out int horseRacingPoints))
{
FunGameConstant.UserHorseRacingRanking[user.Id] = horseRacingPoints;
diff --git a/OshimaWebAPI/Controllers/FunGameController.cs b/OshimaWebAPI/Controllers/FunGameController.cs
index 2cf86bd..e9a12ab 100644
--- a/OshimaWebAPI/Controllers/FunGameController.cs
+++ b/OshimaWebAPI/Controllers/FunGameController.cs
@@ -8690,12 +8690,7 @@ namespace Oshima.FunGame.WebAPI.Controllers
{
currentTop = index + 1;
}
- double score = kv.Value;
- if (FunGameConstant.UserSkillRanking.TryGetValue(kv.Key, out double value2))
- {
- score += value2;
- }
- return $"{index + 1}. UID:{kv.Key},昵称:{username},总得分:{score:0.##}";
+ return $"{index + 1}. UID:{kv.Key},昵称:{username},总得分:{kv.Value:0.##}";
})) : "暂无任何数据。")}\r\n\r\n本榜单统计角色的经验值总额,并根据其普通攻击和技能的等级计算总得分。\r\n仅显示前 {showTop} 位{(currentTop > 0 ? $",你目前排在第 {currentTop} 位。" : "")}",
3 => $"【赛马积分排行榜】\r\n" +
$"数据每分钟更新一次,上次更新:{FunGameConstant.RankingUpdateTime.ToString(General.GeneralDateTimeFormatChinese)}\r\n" +