mirror of
https://github.com/oshima-studios/OshimaGameModule.git
synced 2025-04-22 03:49:35 +08:00
添加团队模式
This commit is contained in:
parent
cce98072d4
commit
fd2bf430c3
@ -17,16 +17,11 @@ namespace Oshima.Core.Controllers
|
||||
private readonly ILogger<UserDailyController> _logger = logger;
|
||||
|
||||
[HttpGet("test")]
|
||||
public List<string> GetTest([FromQuery] bool? isweb = null)
|
||||
public List<string> GetTest([FromQuery] bool? isweb = null, [FromQuery] bool? isteam = null)
|
||||
{
|
||||
if (isweb ?? true)
|
||||
{
|
||||
return FunGameSimulation.StartGame(false, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return FunGameSimulation.StartGame(false, false);
|
||||
}
|
||||
bool web = isweb ?? true;
|
||||
bool team = isteam ?? false;
|
||||
return FunGameSimulation.StartGame(false, web, team);
|
||||
}
|
||||
|
||||
[HttpGet("stats")]
|
||||
@ -58,6 +53,53 @@ namespace Oshima.Core.Controllers
|
||||
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : ""));
|
||||
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : ""));
|
||||
builder.AppendLine($"总计参赛数:{stats.Plays}");
|
||||
builder.AppendLine($"总计冠军数:{stats.Wins}");
|
||||
builder.AppendLine($"总计前三数:{stats.Top3s}");
|
||||
builder.AppendLine($"总计败场数:{stats.Loses}");
|
||||
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
|
||||
builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%");
|
||||
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank}");
|
||||
|
||||
return NetworkUtility.JsonSerialize(builder.ToString());
|
||||
}
|
||||
}
|
||||
return NetworkUtility.JsonSerialize("");
|
||||
}
|
||||
|
||||
[HttpGet("teamstats")]
|
||||
public string GetTeamStats([FromQuery] int? id = null)
|
||||
{
|
||||
if (id != null && id > 0 && id <= FunGameSimulation.Characters.Count)
|
||||
{
|
||||
Character character = FunGameSimulation.Characters[Convert.ToInt32(id) - 1];
|
||||
if (FunGameSimulation.TeamCharacterStatistics.TryGetValue(character, out CharacterStatistics? stats) && stats != null)
|
||||
{
|
||||
StringBuilder builder = new();
|
||||
|
||||
builder.AppendLine(character.ToString());
|
||||
builder.AppendLine($"总计造成伤害:{stats.TotalDamage:0.##} / 场均:{stats.AvgDamage:0.##}");
|
||||
builder.AppendLine($"总计造成物理伤害:{stats.TotalPhysicalDamage:0.##} / 场均:{stats.AvgPhysicalDamage:0.##}");
|
||||
builder.AppendLine($"总计造成魔法伤害:{stats.TotalMagicDamage:0.##} / 场均:{stats.AvgMagicDamage:0.##}");
|
||||
builder.AppendLine($"总计造成真实伤害:{stats.TotalRealDamage:0.##} / 场均:{stats.AvgRealDamage:0.##}");
|
||||
builder.AppendLine($"总计承受伤害:{stats.TotalTakenDamage:0.##} / 场均:{stats.AvgTakenDamage:0.##}");
|
||||
builder.AppendLine($"总计承受物理伤害:{stats.TotalTakenPhysicalDamage:0.##} / 场均:{stats.AvgTakenPhysicalDamage:0.##}");
|
||||
builder.AppendLine($"总计承受魔法伤害:{stats.TotalTakenMagicDamage:0.##} / 场均:{stats.AvgTakenMagicDamage:0.##}");
|
||||
builder.AppendLine($"总计承受真实伤害:{stats.TotalTakenRealDamage:0.##} / 场均:{stats.AvgTakenRealDamage:0.##}");
|
||||
builder.AppendLine($"总计存活回合数:{stats.LiveRound} / 场均:{stats.AvgLiveRound}");
|
||||
builder.AppendLine($"总计行动回合数:{stats.ActionTurn} / 场均:{stats.AvgActionTurn}");
|
||||
builder.AppendLine($"总计存活时长:{stats.LiveTime:0.##} / 场均:{stats.AvgLiveTime:0.##}");
|
||||
builder.AppendLine($"总计赚取金钱:{stats.TotalEarnedMoney} / 场均:{stats.AvgEarnedMoney}");
|
||||
builder.AppendLine($"每回合伤害:{stats.DamagePerRound:0.##}");
|
||||
builder.AppendLine($"每行动回合伤害:{stats.DamagePerTurn:0.##}");
|
||||
builder.AppendLine($"每秒伤害:{stats.DamagePerSecond:0.##}");
|
||||
builder.AppendLine($"总计击杀数:{stats.Kills}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Kills / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计死亡数:{stats.Deaths}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Deaths / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计助攻数:{stats.Assists}" + (stats.Plays != 0 ? $" / 场均:{(double)stats.Assists / stats.Plays:0.##}" : ""));
|
||||
builder.AppendLine($"总计首杀数:{stats.FirstKills}" + (stats.Plays != 0 ? $" / 首杀率:{(double)stats.FirstKills / stats.Plays * 100:0.##}%" : ""));
|
||||
builder.AppendLine($"总计首死数:{stats.FirstDeaths}" + (stats.Plays != 0 ? $" / 首死率:{(double)stats.FirstDeaths / stats.Plays * 100:0.##}%" : ""));
|
||||
builder.AppendLine($"总计参赛数:{stats.Plays}");
|
||||
builder.AppendLine($"总计冠军数:{stats.Wins}");
|
||||
builder.AppendLine($"总计前三数:{stats.Top3s}");
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System.Text;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Model;
|
||||
using Oshima.FunGame.OshimaModules;
|
||||
using Oshima.FunGame.OshimaModules.Characters;
|
||||
@ -31,13 +32,15 @@ namespace Oshima.Core.Utils
|
||||
public static List<Character> Characters { get; } = [];
|
||||
public static List<Item> Items { get; } = [];
|
||||
public static Dictionary<Character, CharacterStatistics> CharacterStatistics { get; } = [];
|
||||
public static Dictionary<Character, CharacterStatistics> TeamCharacterStatistics { get; } = [];
|
||||
public static PluginConfig StatsConfig { get; } = new(nameof(FunGameSimulation), nameof(CharacterStatistics));
|
||||
public static PluginConfig TeamStatsConfig { get; } = new(nameof(FunGameSimulation), nameof(TeamCharacterStatistics));
|
||||
public static bool IsRuning { get; set; } = false;
|
||||
public static bool IsWeb { get; set; } = false;
|
||||
public static bool PrintOut { get; set; } = false;
|
||||
public static string Msg { get; set; } = "";
|
||||
|
||||
public static List<string> StartGame(bool printout, bool isWeb = false)
|
||||
public static List<string> StartGame(bool printout, bool isWeb = false, bool isTeam = false)
|
||||
{
|
||||
PrintOut = printout;
|
||||
IsWeb = isWeb;
|
||||
@ -291,15 +294,8 @@ namespace Oshima.Core.Utils
|
||||
}
|
||||
}
|
||||
|
||||
// 显示角色信息
|
||||
if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo()));
|
||||
|
||||
// 创建顺序表并排序
|
||||
ActionQueue actionQueue = new(characters, WriteLine);
|
||||
if (PrintOut) Console.WriteLine();
|
||||
|
||||
// 显示初始顺序表
|
||||
actionQueue.DisplayQueue();
|
||||
ActionQueue actionQueue = new(characters, isTeam, WriteLine);
|
||||
if (PrintOut) Console.WriteLine();
|
||||
|
||||
// 总游戏时长
|
||||
@ -307,9 +303,41 @@ namespace Oshima.Core.Utils
|
||||
|
||||
// 开始空投
|
||||
Msg = "";
|
||||
空投(actionQueue);
|
||||
int 发放的武器品质 = 0;
|
||||
int 发放的防具品质 = 0;
|
||||
int 发放的鞋子品质 = 0;
|
||||
int 发放的饰品品质 = 0;
|
||||
空投(actionQueue, ref 发放的武器品质, ref 发放的防具品质, ref 发放的鞋子品质, ref 发放的饰品品质);
|
||||
if (isWeb) result.Add("=== 空投 ===\r\n" + Msg);
|
||||
double 下一次空投 = 80;
|
||||
double 下一次空投 = 40;
|
||||
|
||||
// 显示角色信息
|
||||
if (PrintOut) characters.ForEach(c => Console.WriteLine(c.GetInfo()));
|
||||
|
||||
// 因赋予了装备,所以清除排序重新排
|
||||
actionQueue.ClearQueue();
|
||||
actionQueue.InitCharacterQueue(characters);
|
||||
if (PrintOut) Console.WriteLine();
|
||||
|
||||
// 团队模式
|
||||
if (isTeam)
|
||||
{
|
||||
// 打乱原始数组的顺序
|
||||
IEnumerable<Character> shuffledCharacters = characters.OrderBy(c => Random.Shared.Next());
|
||||
|
||||
// 计算分割点
|
||||
int splitIndex = shuffledCharacters.Count() / 2;
|
||||
|
||||
// 分成两个数组
|
||||
List<Character> group1 = shuffledCharacters.Take(splitIndex).ToList();
|
||||
List<Character> group2 = shuffledCharacters.Skip(splitIndex).ToList();
|
||||
actionQueue.Teams.Add("队伍一", group1);
|
||||
actionQueue.Teams.Add("队伍二", group2);
|
||||
}
|
||||
|
||||
// 显示初始顺序表
|
||||
actionQueue.DisplayQueue();
|
||||
if (PrintOut) Console.WriteLine();
|
||||
|
||||
// 总回合数
|
||||
int i = 1;
|
||||
@ -366,9 +394,9 @@ namespace Oshima.Core.Utils
|
||||
{
|
||||
// 空投
|
||||
Msg = "";
|
||||
空投(actionQueue);
|
||||
空投(actionQueue, ref 发放的武器品质, ref 发放的防具品质, ref 发放的鞋子品质, ref 发放的饰品品质);
|
||||
if (isWeb) result.Add("=== 空投 ===\r\n" + Msg);
|
||||
下一次空投 = 100;
|
||||
下一次空投 = 40;
|
||||
}
|
||||
|
||||
if (actionQueue.Eliminated.Count > deaths)
|
||||
@ -400,72 +428,150 @@ namespace Oshima.Core.Utils
|
||||
int top = isWeb ? 12 : 6;
|
||||
Msg = $"=== 伤害排行榜 TOP{top} ===\r\n";
|
||||
int count = 1;
|
||||
foreach (Character character in actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.TotalDamage).Select(d => d.Key))
|
||||
{
|
||||
StringBuilder builder = new();
|
||||
CharacterStatistics stats = actionQueue.CharacterStatistics[character];
|
||||
builder.AppendLine($"{count}. [ {character.ToStringWithLevel()} ] ({stats.Kills} / {stats.Assists})");
|
||||
builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
|
||||
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
|
||||
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
|
||||
builder.Append($"每秒伤害:{stats.DamagePerSecond} / 每回合伤害:{stats.DamagePerTurn}");
|
||||
if (count++ <= top)
|
||||
{
|
||||
WriteLine(builder.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PrintOut) Console.WriteLine(builder.ToString());
|
||||
}
|
||||
|
||||
CharacterStatistics? totalStats = CharacterStatistics.Where(kv => kv.Key.GetName() == character.GetName()).Select(kv => kv.Value).FirstOrDefault();
|
||||
if (totalStats != null)
|
||||
if (isTeam)
|
||||
{
|
||||
foreach (Character character in actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.TotalDamage).Select(d => d.Key))
|
||||
{
|
||||
// 统计此角色的所有数据
|
||||
totalStats.TotalDamage = Calculation.Round2Digits(totalStats.TotalDamage + stats.TotalDamage);
|
||||
totalStats.TotalPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage + stats.TotalPhysicalDamage);
|
||||
totalStats.TotalMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage + stats.TotalMagicDamage);
|
||||
totalStats.TotalRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage + stats.TotalRealDamage);
|
||||
totalStats.TotalTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage + stats.TotalTakenDamage);
|
||||
totalStats.TotalTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage + stats.TotalTakenPhysicalDamage);
|
||||
totalStats.TotalTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage + stats.TotalTakenMagicDamage);
|
||||
totalStats.TotalTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage + stats.TotalTakenRealDamage);
|
||||
totalStats.LiveRound += stats.LiveRound;
|
||||
totalStats.ActionTurn += stats.ActionTurn;
|
||||
totalStats.LiveTime = Calculation.Round2Digits(totalStats.LiveTime + stats.LiveTime);
|
||||
totalStats.TotalEarnedMoney += stats.TotalEarnedMoney;
|
||||
totalStats.Kills += stats.Kills;
|
||||
totalStats.Deaths += stats.Deaths;
|
||||
totalStats.Assists += stats.Assists;
|
||||
totalStats.LastRank = stats.LastRank;
|
||||
double totalRank = totalStats.AvgRank * totalStats.Plays + totalStats.LastRank;
|
||||
totalStats.Plays += stats.Plays;
|
||||
if (totalStats.Plays != 0) totalStats.AvgRank = Calculation.Round2Digits(totalRank / totalStats.Plays);
|
||||
totalStats.Wins += stats.Wins;
|
||||
totalStats.Top3s += stats.Top3s;
|
||||
totalStats.Loses += stats.Loses;
|
||||
if (totalStats.Plays != 0)
|
||||
StringBuilder builder = new();
|
||||
CharacterStatistics stats = actionQueue.CharacterStatistics[character];
|
||||
builder.AppendLine($"{count}. [ {character.ToStringWithLevel()} ] ({stats.Kills} / {stats.Assists})");
|
||||
builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
|
||||
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
|
||||
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
|
||||
builder.Append($"每秒伤害:{stats.DamagePerSecond} / 每回合伤害:{stats.DamagePerTurn}");
|
||||
if (count++ <= top)
|
||||
{
|
||||
totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays);
|
||||
totalStats.AvgPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage / totalStats.Plays);
|
||||
totalStats.AvgLiveRound = totalStats.LiveRound / totalStats.Plays;
|
||||
totalStats.AvgActionTurn = totalStats.ActionTurn / totalStats.Plays;
|
||||
totalStats.AvgLiveTime = Calculation.Round2Digits(totalStats.LiveTime / totalStats.Plays);
|
||||
totalStats.AvgEarnedMoney = totalStats.TotalEarnedMoney / totalStats.Plays;
|
||||
totalStats.Winrates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Wins) / Convert.ToDouble(totalStats.Plays));
|
||||
totalStats.Top3rates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Top3s) / Convert.ToDouble(totalStats.Plays));
|
||||
WriteLine(builder.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PrintOut) Console.WriteLine(builder.ToString());
|
||||
}
|
||||
|
||||
CharacterStatistics? totalStats = TeamCharacterStatistics.Where(kv => kv.Key.GetName() == character.GetName()).Select(kv => kv.Value).FirstOrDefault();
|
||||
if (totalStats != null)
|
||||
{
|
||||
// 统计此角色的所有数据
|
||||
totalStats.TotalDamage = Calculation.Round2Digits(totalStats.TotalDamage + stats.TotalDamage);
|
||||
totalStats.TotalPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage + stats.TotalPhysicalDamage);
|
||||
totalStats.TotalMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage + stats.TotalMagicDamage);
|
||||
totalStats.TotalRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage + stats.TotalRealDamage);
|
||||
totalStats.TotalTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage + stats.TotalTakenDamage);
|
||||
totalStats.TotalTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage + stats.TotalTakenPhysicalDamage);
|
||||
totalStats.TotalTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage + stats.TotalTakenMagicDamage);
|
||||
totalStats.TotalTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage + stats.TotalTakenRealDamage);
|
||||
totalStats.LiveRound += stats.LiveRound;
|
||||
totalStats.ActionTurn += stats.ActionTurn;
|
||||
totalStats.LiveTime = Calculation.Round2Digits(totalStats.LiveTime + stats.LiveTime);
|
||||
totalStats.TotalEarnedMoney += stats.TotalEarnedMoney;
|
||||
totalStats.Kills += stats.Kills;
|
||||
totalStats.Deaths += stats.Deaths;
|
||||
totalStats.Assists += stats.Assists;
|
||||
totalStats.FirstKills += stats.FirstKills;
|
||||
totalStats.FirstDeaths += stats.FirstDeaths;
|
||||
totalStats.LastRank = stats.LastRank;
|
||||
double totalRank = totalStats.AvgRank * totalStats.Plays + totalStats.LastRank;
|
||||
totalStats.Plays += stats.Plays;
|
||||
if (totalStats.Plays != 0) totalStats.AvgRank = Calculation.Round2Digits(totalRank / totalStats.Plays);
|
||||
totalStats.Wins += stats.Wins;
|
||||
totalStats.Top3s += stats.Top3s;
|
||||
totalStats.Loses += stats.Loses;
|
||||
if (totalStats.Plays != 0)
|
||||
{
|
||||
totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays);
|
||||
totalStats.AvgPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage / totalStats.Plays);
|
||||
totalStats.AvgLiveRound = totalStats.LiveRound / totalStats.Plays;
|
||||
totalStats.AvgActionTurn = totalStats.ActionTurn / totalStats.Plays;
|
||||
totalStats.AvgLiveTime = Calculation.Round2Digits(totalStats.LiveTime / totalStats.Plays);
|
||||
totalStats.AvgEarnedMoney = totalStats.TotalEarnedMoney / totalStats.Plays;
|
||||
totalStats.Winrates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Wins) / Convert.ToDouble(totalStats.Plays));
|
||||
totalStats.Top3rates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Top3s) / Convert.ToDouble(totalStats.Plays));
|
||||
}
|
||||
if (totalStats.LiveRound != 0) totalStats.DamagePerRound = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveRound);
|
||||
if (totalStats.ActionTurn != 0) totalStats.DamagePerTurn = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.ActionTurn);
|
||||
if (totalStats.LiveTime != 0) totalStats.DamagePerSecond = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveTime);
|
||||
}
|
||||
if (totalStats.LiveRound != 0) totalStats.DamagePerRound = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveRound);
|
||||
if (totalStats.ActionTurn != 0) totalStats.DamagePerTurn = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.ActionTurn);
|
||||
if (totalStats.LiveTime != 0) totalStats.DamagePerSecond = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (Character character in actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.TotalDamage).Select(d => d.Key))
|
||||
{
|
||||
StringBuilder builder = new();
|
||||
CharacterStatistics stats = actionQueue.CharacterStatistics[character];
|
||||
builder.AppendLine($"{count}. [ {character.ToStringWithLevel()} ] ({stats.Kills} / {stats.Assists})");
|
||||
builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
|
||||
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
|
||||
builder.AppendLine($"总承受伤害:{stats.TotalTakenDamage} / 总承受物理伤害:{stats.TotalTakenPhysicalDamage} / 总承受魔法伤害:{stats.TotalTakenMagicDamage}");
|
||||
builder.Append($"每秒伤害:{stats.DamagePerSecond} / 每回合伤害:{stats.DamagePerTurn}");
|
||||
if (count++ <= top)
|
||||
{
|
||||
WriteLine(builder.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PrintOut) Console.WriteLine(builder.ToString());
|
||||
}
|
||||
|
||||
CharacterStatistics? totalStats = CharacterStatistics.Where(kv => kv.Key.GetName() == character.GetName()).Select(kv => kv.Value).FirstOrDefault();
|
||||
if (totalStats != null)
|
||||
{
|
||||
// 统计此角色的所有数据
|
||||
totalStats.TotalDamage = Calculation.Round2Digits(totalStats.TotalDamage + stats.TotalDamage);
|
||||
totalStats.TotalPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage + stats.TotalPhysicalDamage);
|
||||
totalStats.TotalMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage + stats.TotalMagicDamage);
|
||||
totalStats.TotalRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage + stats.TotalRealDamage);
|
||||
totalStats.TotalTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage + stats.TotalTakenDamage);
|
||||
totalStats.TotalTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage + stats.TotalTakenPhysicalDamage);
|
||||
totalStats.TotalTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage + stats.TotalTakenMagicDamage);
|
||||
totalStats.TotalTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage + stats.TotalTakenRealDamage);
|
||||
totalStats.LiveRound += stats.LiveRound;
|
||||
totalStats.ActionTurn += stats.ActionTurn;
|
||||
totalStats.LiveTime = Calculation.Round2Digits(totalStats.LiveTime + stats.LiveTime);
|
||||
totalStats.TotalEarnedMoney += stats.TotalEarnedMoney;
|
||||
totalStats.Kills += stats.Kills;
|
||||
totalStats.Deaths += stats.Deaths;
|
||||
totalStats.Assists += stats.Assists;
|
||||
totalStats.FirstKills += stats.FirstKills;
|
||||
totalStats.FirstDeaths += stats.FirstDeaths;
|
||||
totalStats.LastRank = stats.LastRank;
|
||||
double totalRank = totalStats.AvgRank * totalStats.Plays + totalStats.LastRank;
|
||||
totalStats.Plays += stats.Plays;
|
||||
if (totalStats.Plays != 0) totalStats.AvgRank = Calculation.Round2Digits(totalRank / totalStats.Plays);
|
||||
totalStats.Wins += stats.Wins;
|
||||
totalStats.Top3s += stats.Top3s;
|
||||
totalStats.Loses += stats.Loses;
|
||||
if (totalStats.Plays != 0)
|
||||
{
|
||||
totalStats.AvgDamage = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.Plays);
|
||||
totalStats.AvgPhysicalDamage = Calculation.Round2Digits(totalStats.TotalPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgMagicDamage = Calculation.Round2Digits(totalStats.TotalMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgRealDamage = Calculation.Round2Digits(totalStats.TotalRealDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenDamage = Calculation.Round2Digits(totalStats.TotalTakenDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenPhysicalDamage = Calculation.Round2Digits(totalStats.TotalTakenPhysicalDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenMagicDamage = Calculation.Round2Digits(totalStats.TotalTakenMagicDamage / totalStats.Plays);
|
||||
totalStats.AvgTakenRealDamage = Calculation.Round2Digits(totalStats.TotalTakenRealDamage / totalStats.Plays);
|
||||
totalStats.AvgLiveRound = totalStats.LiveRound / totalStats.Plays;
|
||||
totalStats.AvgActionTurn = totalStats.ActionTurn / totalStats.Plays;
|
||||
totalStats.AvgLiveTime = Calculation.Round2Digits(totalStats.LiveTime / totalStats.Plays);
|
||||
totalStats.AvgEarnedMoney = totalStats.TotalEarnedMoney / totalStats.Plays;
|
||||
totalStats.Winrates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Wins) / Convert.ToDouble(totalStats.Plays));
|
||||
totalStats.Top3rates = Calculation.Round4Digits(Convert.ToDouble(totalStats.Top3s) / Convert.ToDouble(totalStats.Plays));
|
||||
}
|
||||
if (totalStats.LiveRound != 0) totalStats.DamagePerRound = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveRound);
|
||||
if (totalStats.ActionTurn != 0) totalStats.DamagePerTurn = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.ActionTurn);
|
||||
if (totalStats.LiveTime != 0) totalStats.DamagePerSecond = Calculation.Round2Digits(totalStats.TotalDamage / totalStats.LiveTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result.Add(Msg);
|
||||
|
||||
// 显示每个角色的信息
|
||||
@ -478,13 +584,27 @@ namespace Oshima.Core.Utils
|
||||
}
|
||||
}
|
||||
|
||||
lock (StatsConfig)
|
||||
if (isTeam)
|
||||
{
|
||||
foreach (Character c in CharacterStatistics.Keys)
|
||||
lock (TeamStatsConfig)
|
||||
{
|
||||
StatsConfig.Add(c.ToStringWithOutUser(), CharacterStatistics[c]);
|
||||
foreach (Character c in TeamCharacterStatistics.Keys)
|
||||
{
|
||||
TeamStatsConfig.Add(c.ToStringWithOutUser(), TeamCharacterStatistics[c]);
|
||||
}
|
||||
TeamStatsConfig.SaveConfig();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (StatsConfig)
|
||||
{
|
||||
foreach (Character c in CharacterStatistics.Keys)
|
||||
{
|
||||
StatsConfig.Add(c.ToStringWithOutUser(), CharacterStatistics[c]);
|
||||
}
|
||||
StatsConfig.SaveConfig();
|
||||
}
|
||||
StatsConfig.SaveConfig();
|
||||
}
|
||||
|
||||
IsRuning = false;
|
||||
@ -506,13 +626,57 @@ namespace Oshima.Core.Utils
|
||||
if (PrintOut) Console.WriteLine(str);
|
||||
}
|
||||
|
||||
public static void 空投(ActionQueue queue)
|
||||
public static void 空投(ActionQueue queue, ref int wQuality, ref int aQuality, ref int sQuality, ref int acQuality)
|
||||
{
|
||||
Item a = Items[Random.Shared.Next(Items.Count)];
|
||||
Item[] 这次发放的空投 = [a];
|
||||
WriteLine($"社区送温暖了,现在向所有人发放 [ {a.Name} ]!!");
|
||||
WriteLine($"社区送温暖了,现在随机发放空投!!");
|
||||
foreach (Character character in queue.Queue)
|
||||
{
|
||||
int t1 = wQuality;
|
||||
int t2 = aQuality;
|
||||
int t3 = sQuality;
|
||||
int t4 = acQuality;
|
||||
Item[] 武器 = Items.Where(i => i.Id.ToString().StartsWith("11") && (int)i.QualityType == t1).ToArray();
|
||||
if (wQuality < 4)
|
||||
{
|
||||
wQuality++;
|
||||
}
|
||||
Item[] 防具 = Items.Where(i => i.Id.ToString().StartsWith("12") && (int)i.QualityType == t2).ToArray();
|
||||
if (aQuality < 1)
|
||||
{
|
||||
aQuality++;
|
||||
}
|
||||
Item[] 鞋子 = Items.Where(i => i.Id.ToString().StartsWith("13") && (int)i.QualityType == t3).ToArray();
|
||||
if (sQuality < 1)
|
||||
{
|
||||
sQuality++;
|
||||
}
|
||||
Item[] 饰品 = Items.Where(i => i.Id.ToString().StartsWith("14") && (int)i.QualityType == t4).ToArray();
|
||||
if (acQuality < 3)
|
||||
{
|
||||
acQuality++;
|
||||
}
|
||||
Item? a = null, b = null, c = null, d = null;
|
||||
if (武器.Length > 0)
|
||||
{
|
||||
a = 武器[Random.Shared.Next(武器.Length)];
|
||||
}
|
||||
if (防具.Length > 0)
|
||||
{
|
||||
b = 防具[Random.Shared.Next(防具.Length)];
|
||||
}
|
||||
if (鞋子.Length > 0)
|
||||
{
|
||||
c = 鞋子[Random.Shared.Next(鞋子.Length)];
|
||||
}
|
||||
if (饰品.Length > 0)
|
||||
{
|
||||
d = 饰品[Random.Shared.Next(饰品.Length)];
|
||||
}
|
||||
List<Item> 这次发放的空投 = [];
|
||||
if (a != null) 这次发放的空投.Add(a);
|
||||
if (b != null) 这次发放的空投.Add(b);
|
||||
if (c != null) 这次发放的空投.Add(c);
|
||||
if (d != null) 这次发放的空投.Add(d);
|
||||
foreach (Item item in 这次发放的空投)
|
||||
{
|
||||
Item realItem = item.Copy(1);
|
||||
@ -551,6 +715,20 @@ namespace Oshima.Core.Utils
|
||||
CharacterStatistics[character] = StatsConfig.Get<CharacterStatistics>(character.ToStringWithOutUser()) ?? CharacterStatistics[character];
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Character c in Characters)
|
||||
{
|
||||
TeamCharacterStatistics.Add(c, new());
|
||||
}
|
||||
|
||||
TeamStatsConfig.LoadConfig();
|
||||
foreach (Character character in TeamCharacterStatistics.Keys)
|
||||
{
|
||||
if (TeamStatsConfig.ContainsKey(character.ToStringWithOutUser()))
|
||||
{
|
||||
TeamCharacterStatistics[character] = TeamStatsConfig.Get<CharacterStatistics>(character.ToStringWithOutUser()) ?? TeamCharacterStatistics[character];
|
||||
}
|
||||
}
|
||||
|
||||
Dictionary<string, Item> exItems = Factory.GetGameModuleInstances<Item>(OshimaGameModuleConstant.General, OshimaGameModuleConstant.Item);
|
||||
Items.AddRange(exItems.Values);
|
||||
|
@ -10,6 +10,7 @@ namespace Oshima.FunGame.OshimaModules.Items
|
||||
public override long Id => (long)AccessoryID.攻击之爪10;
|
||||
public override string Name => "攻击之爪 +10";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
public override QualityType QualityType => QualityType.White;
|
||||
|
||||
public 攻击之爪10(Character? character = null) : base(ItemType.Accessory)
|
||||
{
|
||||
@ -22,6 +23,7 @@ namespace Oshima.FunGame.OshimaModules.Items
|
||||
public override long Id => (long)AccessoryID.攻击之爪30;
|
||||
public override string Name => "攻击之爪 +30";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
public override QualityType QualityType => QualityType.Green;
|
||||
|
||||
public 攻击之爪30(Character? character = null) : base(ItemType.Accessory)
|
||||
{
|
||||
@ -34,6 +36,7 @@ namespace Oshima.FunGame.OshimaModules.Items
|
||||
public override long Id => (long)AccessoryID.攻击之爪50;
|
||||
public override string Name => "攻击之爪 +50";
|
||||
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
|
||||
public override QualityType QualityType => QualityType.Blue;
|
||||
|
||||
public 攻击之爪50(Character? character = null) : base(ItemType.Accessory)
|
||||
{
|
||||
|
@ -100,6 +100,15 @@ namespace Oshima.FunGame.OshimaModules
|
||||
EffectID.ExMDF => new ExMDF(skill, dict),
|
||||
EffectID.ExHR => new ExHR(skill, dict),
|
||||
EffectID.ExMR => new ExMR(skill, dict),
|
||||
EffectID.ExATK2 => new ExATK2(skill, dict),
|
||||
EffectID.ExDEF2 => new ExDEF2(skill, dict),
|
||||
EffectID.ExSTR2 => new ExSTR2(skill, dict),
|
||||
EffectID.ExAGI2 => new ExAGI2(skill, dict),
|
||||
EffectID.ExINT2 => new ExINT2(skill, dict),
|
||||
EffectID.SkillHardTimeReduce2 => new SkillHardTimeReduce2(skill, dict),
|
||||
EffectID.NormalAttackHardTimeReduce2 => new NormalAttackHardTimeReduce2(skill, dict),
|
||||
EffectID.ExMaxHP2 => new ExMaxHP2(skill, dict),
|
||||
EffectID.ExMaxMP2 => new ExMaxMP2(skill, dict),
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
|
@ -339,7 +339,7 @@ namespace Oshima.FunGame.OshimaServers
|
||||
SendAllGamingMessage(data, c.GetInfo());
|
||||
}
|
||||
|
||||
ActionQueue actionQueue = new(inGameCharacters, (str) =>
|
||||
ActionQueue actionQueue = new(inGameCharacters, false, (str) =>
|
||||
{
|
||||
SendAllGamingMessage(data, str);
|
||||
});
|
||||
|
@ -6,6 +6,7 @@
|
||||
"BackgroundStory": "传说中的黑暗之刃,蕴含邪恶力量。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 1,
|
||||
"QualityType": 0,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -31,6 +32,7 @@
|
||||
"BackgroundStory": "火焰中锻造的长剑,散发着炙热气息。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 2,
|
||||
"QualityType": 0,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -56,6 +58,7 @@
|
||||
"BackgroundStory": "由稀有银月材料制成,精准无比。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 3,
|
||||
"QualityType": 0,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -81,6 +84,7 @@
|
||||
"BackgroundStory": "捕捉风暴之力的武器,射速惊人。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 5,
|
||||
"QualityType": 0,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -106,6 +110,7 @@
|
||||
"BackgroundStory": "无形的力量增强拳套,适合迅捷攻击。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 11,
|
||||
"QualityType": 0,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -131,6 +136,7 @@
|
||||
"BackgroundStory": "蕴含雷霆之力的神秘之剑,斩击时带有雷电。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 1,
|
||||
"QualityType": 1,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -156,6 +162,7 @@
|
||||
"BackgroundStory": "由远古龙骨锻造而成的巨剑,威力无比。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 2,
|
||||
"QualityType": 1,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -181,6 +188,7 @@
|
||||
"BackgroundStory": "能够穿透黑暗的弓,适合隐匿射击。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 3,
|
||||
"QualityType": 1,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -206,6 +214,7 @@
|
||||
"BackgroundStory": "能够发射赤焰的手枪,近距离威力极大。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 4,
|
||||
"QualityType": 1,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -231,6 +240,7 @@
|
||||
"BackgroundStory": "据说能够召唤天空之力的法杖,拥有强大魔力。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 8,
|
||||
"QualityType": 1,
|
||||
"Price": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
@ -256,6 +266,7 @@
|
||||
"BackgroundStory": "这把剑燃烧着永恒的火焰,传说可以焚尽一切。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 1,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -280,6 +291,7 @@
|
||||
"BackgroundStory": "每次射击都能引发狂风,传说它由风神亲手打造。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 3,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -304,6 +316,7 @@
|
||||
"BackgroundStory": "在破晓时分,这把长枪能够穿透任何黑暗。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 9,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -328,6 +341,7 @@
|
||||
"BackgroundStory": "这对匕首闪烁着死亡的光芒,专为刺客所用。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 6,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -352,6 +366,7 @@
|
||||
"BackgroundStory": "召唤天雷的法杖,拥有毁天灭地的力量。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 8,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -376,6 +391,7 @@
|
||||
"BackgroundStory": "此剑驾驭飞雷之力,能引发猛烈的雷击。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 1,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -400,6 +416,7 @@
|
||||
"BackgroundStory": "法杖中燃烧着不灭的火焰,象征着无尽的力量。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 8,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -424,6 +441,7 @@
|
||||
"BackgroundStory": "由远古龙骨制成的长柄武器,坚不可摧。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 9,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -448,6 +466,7 @@
|
||||
"BackgroundStory": "双持短刀,速度如疾风般迅捷。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 6,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -472,6 +491,7 @@
|
||||
"BackgroundStory": "由冰晶打造的手枪,子弹带有极寒之力。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 4,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -496,6 +516,7 @@
|
||||
"BackgroundStory": "藏于黑暗中的锋利刀刃,只在敌人未察觉时现身。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 11,
|
||||
"QualityType": 4,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -520,6 +541,7 @@
|
||||
"BackgroundStory": "弓弦上凝聚寒霜,箭矢能冻结一切。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 3,
|
||||
"QualityType": 4,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -544,6 +566,7 @@
|
||||
"BackgroundStory": "携带雷电之力的巨斧,一击之下,雷声轰鸣。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 2,
|
||||
"QualityType": 4,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -568,6 +591,7 @@
|
||||
"BackgroundStory": "拳套内的力量能激发佩戴者的狂怒,造成大量伤害。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 10,
|
||||
"QualityType": 4,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -592,6 +616,7 @@
|
||||
"BackgroundStory": "法器中蕴含着星辰之力,每一次攻击都如天外陨石降临。",
|
||||
"ItemType": 1,
|
||||
"WeaponType": 7,
|
||||
"QualityType": 4,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -609,24 +634,76 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"圣洁之盾": {
|
||||
"Id": 20001,
|
||||
"Name": "圣洁之盾",
|
||||
"Description": "受到的物理伤害减少 25%。",
|
||||
"BackgroundStory": "传说中由圣光祝福的盾牌,能够抵挡邪恶的力量。",
|
||||
"初级法袍": {
|
||||
"Id": 12501,
|
||||
"Name": "初级法袍",
|
||||
"Description": "增加 20 点物理护甲。",
|
||||
"BackgroundStory": "可以不穿,不能没有。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7100,
|
||||
"Id": 7101,
|
||||
"Name": "初级法袍",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8002,
|
||||
"exdef": 20
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"高中校服": {
|
||||
"Id": 12502,
|
||||
"Name": "初级法袍",
|
||||
"Description": "增加 10% 魔法抗性。",
|
||||
"BackgroundStory": "珍藏的回忆。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7102,
|
||||
"Name": "高中校服",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8020,
|
||||
"mdftype": 0,
|
||||
"mdfvalue": 0.2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"圣洁之盾": {
|
||||
"Id": 12503,
|
||||
"Name": "圣洁之盾",
|
||||
"Description": "受到的物理伤害减少 20%。",
|
||||
"BackgroundStory": "传说中由圣光祝福的盾牌,能够抵挡邪恶的力量。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7103,
|
||||
"Name": "圣光护佑",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8019,
|
||||
"expdr": 0.25
|
||||
"expdr": 0.20
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -634,12 +711,13 @@
|
||||
}
|
||||
},
|
||||
"魔能法袍": {
|
||||
"Id": 20005,
|
||||
"Id": 12504,
|
||||
"Name": "魔能法袍",
|
||||
"Description": "提高 20% 魔抗,增加 15 点智力。",
|
||||
"Description": "增加 15 点智力和 20% 魔法抗性。",
|
||||
"BackgroundStory": "法袍蕴含着神秘的魔力,穿戴者能增强魔法威力。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
@ -661,5 +739,548 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"炼狱战铠": {
|
||||
"Id": 12505,
|
||||
"Name": "炼狱战铠",
|
||||
"Description": "增加 40 点物理护甲,增加 10 点每时间生命回复。",
|
||||
"BackgroundStory": "在无尽战火中锻造而成,具有极高的防御力。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7105,
|
||||
"Name": "战火庇护",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8002,
|
||||
"exdef": 40
|
||||
},
|
||||
{
|
||||
"Id": 8021,
|
||||
"exhr": 10
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"幽影斗篷": {
|
||||
"Id": 12506,
|
||||
"Name": "幽影斗篷",
|
||||
"Description": "增加 30 点物理护甲和 8% 闪避率。",
|
||||
"BackgroundStory": "黑暗中编织而成的斗篷,能让穿戴者更加敏捷。",
|
||||
"ItemType": 2,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7106,
|
||||
"Name": "幽影闪避",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8002,
|
||||
"exdef": 30
|
||||
},
|
||||
{
|
||||
"Id": 8016,
|
||||
"exer": 0.08
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"帆布鞋": {
|
||||
"Id": 13501,
|
||||
"Name": "帆布鞋",
|
||||
"Description": "增加 30 点行动速度。",
|
||||
"BackgroundStory": "一如年少模样。",
|
||||
"ItemType": 3,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7701,
|
||||
"Name": "帆布鞋",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 30
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"疾风靴": {
|
||||
"Id": 13502,
|
||||
"Name": "疾风靴",
|
||||
"Description": "增加 65 点行动速度,使穿戴者行动更加敏捷。",
|
||||
"BackgroundStory": "这双靴子由风元素加持,步伐轻盈如风。",
|
||||
"ItemType": 3,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7702,
|
||||
"Name": "疾风靴",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 65
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"轻灵之鞋": {
|
||||
"Id": 13503,
|
||||
"Name": "轻灵之鞋",
|
||||
"Description": "增加 45 点行动速度,并提高 10% 闪避率。",
|
||||
"BackgroundStory": "传说这双鞋能让穿戴者的步伐鬼魅般飘忽不定。",
|
||||
"ItemType": 3,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7703,
|
||||
"Name": "轻灵之步",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 45
|
||||
},
|
||||
{
|
||||
"Id": 8016,
|
||||
"exer": 0.1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"雷电靴": {
|
||||
"Id": 13504,
|
||||
"Name": "雷电靴",
|
||||
"Description": "增加 45 点行动速度,并提高 10% 冷却缩减。",
|
||||
"BackgroundStory": "这双靴子蕴含雷电之力,使穿戴者快速出击。",
|
||||
"ItemType": 3,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7704,
|
||||
"Name": "雷霆之速",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 45
|
||||
},
|
||||
{
|
||||
"Id": 8011,
|
||||
"excdr": 0.1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"暗影之靴": {
|
||||
"Id": 13505,
|
||||
"Name": "暗影之靴",
|
||||
"Description": "增加 38 点行动速度,并提高 8% 暴击率。",
|
||||
"BackgroundStory": "这双鞋在黑暗中隐藏,赋予穿戴者暗影的力量。",
|
||||
"ItemType": 3,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7705,
|
||||
"Name": "暗影疾行",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 38
|
||||
},
|
||||
{
|
||||
"Id": 8014,
|
||||
"excr": 0.08
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"守护吊坠": {
|
||||
"Id": 14501,
|
||||
"Name": "守护吊坠",
|
||||
"Description": "增加 3 点所有力量、敏捷、智力。",
|
||||
"BackgroundStory": "带着一丝丝念想。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7301,
|
||||
"Name": "守护吊坠",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8003,
|
||||
"exstr": 3
|
||||
},
|
||||
{
|
||||
"Id": 8004,
|
||||
"exagi": 3
|
||||
},
|
||||
{
|
||||
"Id": 8005,
|
||||
"exint": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"富贵头冠": {
|
||||
"Id": 14502,
|
||||
"Name": "富贵头冠",
|
||||
"Description": "增加 170 点最大生命值和 80 点最大魔法值。",
|
||||
"BackgroundStory": "辉煌华贵的头冠。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 0,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7302,
|
||||
"Name": "守护吊坠",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8012,
|
||||
"exhp": 170
|
||||
},
|
||||
{
|
||||
"Id": 8013,
|
||||
"exmp": 80
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"黄金挂坠": {
|
||||
"Id": 14503,
|
||||
"Name": "黄金挂坠",
|
||||
"Description": "增加 300 点最大生命值。",
|
||||
"BackgroundStory": "珍贵稀有的黄金挂件,象征财富与荣耀的护身符。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7303,
|
||||
"Name": "守护吊坠",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8012,
|
||||
"exhp": 300
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"辉煌光环": {
|
||||
"Id": 14504,
|
||||
"Name": "辉煌光环",
|
||||
"Description": "增加 170 点最大魔法值和 6 点每时间魔法回复。",
|
||||
"BackgroundStory": "流光溢彩的光环。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7304,
|
||||
"Name": "辉煌光环",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8013,
|
||||
"exmp": 170
|
||||
},
|
||||
{
|
||||
"Id": 8022,
|
||||
"exmr": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"银质手环": {
|
||||
"Id": 14505,
|
||||
"Name": "银质手环",
|
||||
"Description": "提升 6 点所有力量、敏捷、智力。",
|
||||
"BackgroundStory": "素雅精致的银质手环。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 1,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7305,
|
||||
"Name": "银质手环",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8003,
|
||||
"exstr": 6
|
||||
},
|
||||
{
|
||||
"Id": 8004,
|
||||
"exagi": 6
|
||||
},
|
||||
{
|
||||
"Id": 8005,
|
||||
"exint": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"星辉护符": {
|
||||
"Id": 14506,
|
||||
"Name": "星辉护符",
|
||||
"Description": "提升 15 点智力,提升暴击伤害 12%。",
|
||||
"BackgroundStory": "护符上镶嵌着神秘的星辉宝石,传说能提升佩戴者的法术威力。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7306,
|
||||
"Name": "星辉启示",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8005,
|
||||
"exint": 15
|
||||
},
|
||||
{
|
||||
"Id": 8015,
|
||||
"excrd": 0.12
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"雷鸣之戒": {
|
||||
"Id": 14507,
|
||||
"Name": "雷鸣之戒",
|
||||
"Description": "增加 12 点力量和 8% 暴击率。",
|
||||
"BackgroundStory": "戒指中流淌着雷电的力量,增强佩戴者的战斗威力。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7307,
|
||||
"Name": "雷电之力",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8003,
|
||||
"exstr": 12
|
||||
},
|
||||
{
|
||||
"Id": 8014,
|
||||
"excr": 0.08
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"精灵之戒": {
|
||||
"Id": 14508,
|
||||
"Name": "精灵之戒",
|
||||
"Description": "提升 10 每时间魔法回复,并增加 8 点智力。",
|
||||
"BackgroundStory": "这枚戒指由精灵制成,能够帮助法师更快地恢复法力。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7308,
|
||||
"Name": "法力复苏",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8022,
|
||||
"exmr": 10
|
||||
},
|
||||
{
|
||||
"Id": 8005,
|
||||
"exint": 8
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"暗影项链": {
|
||||
"Id": 14509,
|
||||
"Name": "暗影项链",
|
||||
"Description": "增加 20 点敏捷和 20 点行动速度。",
|
||||
"BackgroundStory": "项链蕴含着黑暗的力量,让佩戴者更具敏捷性。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 2,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7309,
|
||||
"Name": "黑暗敏捷",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8015,
|
||||
"excrd": 0.15
|
||||
},
|
||||
{
|
||||
"Id": 8009,
|
||||
"exspd": 20
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"YukiのCalfSocks": {
|
||||
"Id": 14510,
|
||||
"Name": "YukiのCalfSocks",
|
||||
"Description": "增加 15% 暴击率和 30% 暴击伤害。",
|
||||
"BackgroundStory": "小雪的小腿袜,拥有神秘的力量,令人神往。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7310,
|
||||
"Name": "YukiのCalfSocks",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8014,
|
||||
"excr": 0.15
|
||||
},
|
||||
{
|
||||
"Id": 8015,
|
||||
"excrd": 0.3
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"诺尔希的现代汉语字典": {
|
||||
"Id": 14511,
|
||||
"Name": "诺尔希的现代汉语字典",
|
||||
"Description": "增加 15% 攻击力和 8% 物理护甲。",
|
||||
"BackgroundStory": "懂又不懂。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7311,
|
||||
"Name": "诺尔希的现代汉语字典",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8024,
|
||||
"exdef": 0.08
|
||||
},
|
||||
{
|
||||
"Id": 8023,
|
||||
"exatk": 0.15
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"金刚石": {
|
||||
"Id": 14512,
|
||||
"Name": "金刚石",
|
||||
"Description": "增加 10% 最大生命值。",
|
||||
"BackgroundStory": "罕见宝石,蕴含不可动摇的坚韧之力。",
|
||||
"ItemType": 4,
|
||||
"WeaponType": 0,
|
||||
"QualityType": 3,
|
||||
"Skills": {
|
||||
"Active": null,
|
||||
"Passives": [
|
||||
{
|
||||
"Id": 7312,
|
||||
"Name": "金刚石",
|
||||
"SkillType": 3,
|
||||
"Effects": [
|
||||
{
|
||||
"Id": 8030,
|
||||
"exhp": 0.10
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user