添加了用户名缓存;调整了一些物品的数值;添加了按用户名决斗的API

This commit is contained in:
milimoe 2024-12-11 01:34:08 +08:00
parent 7b245ee263
commit 46d2cc2794
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
8 changed files with 163 additions and 59 deletions

View File

@ -313,6 +313,7 @@ namespace Oshima.Core.Controllers
User user = Factory.GetUser(userid, username, DateTime.Now, DateTime.Now, userid + "@qq.com", username);
user.Inventory.Credits = 5000000;
user.Inventory.Characters.Add(new CustomCharacter(userid, username));
FunGameService.UserIdAndUsername[userid] = username;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"创建存档成功!你的用户名是【{username}】。");
@ -338,6 +339,7 @@ namespace Oshima.Core.Controllers
user.Inventory.Materials = 0;
user.Inventory.Characters.Clear();
user.Inventory.Items.Clear();
user.Inventory.Characters.Add(new CustomCharacter(userid, user.Username));
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
@ -380,6 +382,7 @@ namespace Oshima.Core.Controllers
{
user.Inventory.Name = user.Username + "的库存";
}
FunGameService.UserIdAndUsername[user.Id] = user.Username;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
@ -1101,12 +1104,13 @@ namespace Oshima.Core.Controllers
}
[HttpPost("showcharacterinfo")]
public string GetCharacterInfoFromInventory([FromQuery] long? qq = null, [FromQuery] int? seq = null)
public string GetCharacterInfoFromInventory([FromQuery] long? qq = null, [FromQuery] int? seq = null, [FromQuery] bool? simple = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int cIndex = seq ?? 0;
bool isSimple = simple ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
@ -1118,6 +1122,10 @@ namespace Oshima.Core.Controllers
if (cIndex > 0 && cIndex <= user.Inventory.Characters.Count)
{
Character character = user.Inventory.Characters.ToList()[cIndex - 1];
if (isSimple)
{
return NetworkUtility.JsonSerialize($"这是你库存中序号为 {cIndex} 的角色简略信息:\r\n{character.GetSimpleInfo().Trim()}");
}
return NetworkUtility.JsonSerialize($"这是你库存中序号为 {cIndex} 的角色详细信息:\r\n{character.GetInfo().Trim()}");
}
else
@ -1344,6 +1352,28 @@ namespace Oshima.Core.Controllers
return [e.ToString()];
}
}
[HttpPost("fightcustom2")]
public List<string> FightCustom2([FromQuery] long? qq = null, [FromQuery] string? name = null)
{
try
{
if (name != null)
{
long enemyid = FunGameService.UserIdAndUsername.Where(kv => kv.Value == name).Select(kv => kv.Key).FirstOrDefault();
if (enemyid == 0)
{
return [$"找不到此名称对应的玩家!"];
}
return FightCustom(qq, enemyid);
}
return [$"决斗发起失败!"];
}
catch (Exception e)
{
return [e.ToString()];
}
}
[HttpGet("reload")]
public string Relaod([FromQuery] long? master = null)

View File

@ -1,4 +1,6 @@
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Oshima.Core.Configs;
using Oshima.Core.Constant;
using Oshima.Core.Utils;
@ -114,6 +116,27 @@ namespace Oshima.Core.WebAPI
}
}
});
Task taskCache = Task.Factory.StartNew(async () =>
{
string directoryPath = $@"{AppDomain.CurrentDomain.BaseDirectory}configs/saved";
if (Directory.Exists(directoryPath))
{
string[] filePaths = Directory.GetFiles(directoryPath);
foreach (string filePath in filePaths)
{
string fileName = Path.GetFileNameWithoutExtension(filePath);
PluginConfig pc = new("saved", fileName);
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
FunGameService.UserIdAndUsername[user.Id] = user.Username;
}
}
Controller.WriteLine("读取 FunGame 存档缓存");
}
await Task.Delay(3000 * 60 * 10);
});
}
}
}

View File

@ -566,13 +566,9 @@ namespace Oshima.Core.Utils
DeathMatchRoundDetail = deathMatchRoundDetail;
try
{
if (IsRuning) return ["游戏正在进行中,请勿重复请求!"];
List<string> result = [];
Msg = "";
IsRuning = true;
if (PrintOut) Console.WriteLine();
if (PrintOut) Console.WriteLine("Start!!!");
if (PrintOut) Console.WriteLine();
@ -755,6 +751,12 @@ namespace Oshima.Core.Utils
{
roundMsg = actionQueue.LastRound.ToString().Trim() + $"\r\n{(isTeam ? $"{string.Join(" / ", actionQueue.Teams.Values.Select(t => $"{t.Name}({t.Score})"))}{actionQueue.GetTeam(actionQueue.LastRound.Actor)}" : "")}\r\n";
}
roundMsg += "\r\n";
foreach (Character character in characters)
{
roundMsg += $"[ {character} ] 生命值:{character.HP}/{character.MaxHP}" + "\r\n";
}
roundMsg = roundMsg.Trim();
Msg = "";
}
@ -781,7 +783,7 @@ namespace Oshima.Core.Utils
// 赛后统计
GetCharacterRating(actionQueue.CharacterStatistics, isTeam, actionQueue.EliminatedTeams);
int top = isWeb ? actionQueue.CharacterStatistics.Count : 4; // 回执多少个角色的统计信息
int top = isWeb ? actionQueue.CharacterStatistics.Count : 2; // 回执多少个角色的统计信息
int count = 1;
if (isWeb)
{
@ -790,23 +792,26 @@ namespace Oshima.Core.Utils
}
else
{
//WriteLine("=== 本场比赛最佳角色 ===");
//Msg = $"=== 本场比赛最佳角色 ===\r\n";
//// 统计技术得分
//Character? character = actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.Rating).Select(d => d.Key).FirstOrDefault();
//if (character != null)
//{
// CharacterStatistics stats = actionQueue.CharacterStatistics[character];
// stats.MVPs++;
// StringBuilder builder = new();
// builder.AppendLine($"{(isWeb ? count + "." : (isTeam ? "[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ]" ?? " " : ""))}[ {character.ToStringWithLevel()} ]");
// builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / 死亡数:" + stats.Deaths : "")}");
// 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}");
// WriteLine(builder.ToString());
//}
if (isTeam)
{
WriteLine("=== 本场比赛最佳角色 ===");
Msg = $"=== 本场比赛最佳角色 ===\r\n";
// 统计技术得分
Character? character = actionQueue.CharacterStatistics.OrderByDescending(d => d.Value.Rating).Select(d => d.Key).FirstOrDefault();
if (character != null)
{
CharacterStatistics stats = actionQueue.CharacterStatistics[character];
stats.MVPs++;
StringBuilder builder = new();
builder.AppendLine($"{(isTeam ? "[ " + actionQueue.GetTeamFromEliminated(character)?.Name + " ] " : "")}[ {character.ToStringWithLevel()} ]");
builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / " + stats.Deaths : "")}");
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}");
WriteLine(builder.ToString());
}
}
}
if (PrintOut)
@ -815,7 +820,7 @@ namespace Oshima.Core.Utils
Console.WriteLine("=== 技术得分排行榜 ===");
}
Msg = "=== 技术得分排行榜 ===\r\n";
Msg = $"=== 技术得分排行榜 TOP{top} ===\r\n";
if (isTeam)
{
@ -845,7 +850,7 @@ namespace Oshima.Core.Utils
{
StringBuilder builder = new();
CharacterStatistics stats = actionQueue.CharacterStatistics[character];
builder.AppendLine($"{(isWeb ? count + ". " : "")}[ {character.ToStringWithLevel()} ]");
builder.AppendLine($"{count + ". "}[ {character.ToStringWithLevel()} ]");
builder.AppendLine($"技术得分:{stats.Rating:0.##} / 击杀数:{stats.Kills} / 助攻数:{stats.Assists}{(actionQueue.MaxRespawnTimes != 0 ? " / " + stats.Deaths : "")}");
builder.AppendLine($"存活时长:{stats.LiveTime} / 存活回合数:{stats.LiveRound} / 行动回合数:{stats.ActionTurn}");
builder.AppendLine($"总计伤害:{stats.TotalDamage} / 总计物理伤害:{stats.TotalPhysicalDamage} / 总计魔法伤害:{stats.TotalMagicDamage}");
@ -907,13 +912,10 @@ namespace Oshima.Core.Utils
}
}
IsRuning = false;
return result;
}
catch (Exception ex)
{
IsRuning = false;
Console.WriteLine(ex);
return [ex.ToString()];
}

View File

@ -17,6 +17,7 @@ namespace Oshima.Core.Utils
public static List<Skill> Magics { get; } = [];
public static List<Item> Equipment { get; } = [];
public static List<Item> Items { get; } = [];
public static Dictionary<long, string> UserIdAndUsername { get; } = [];
public static void InitFunGame()
{
@ -35,7 +36,7 @@ namespace Oshima.Core.Utils
Dictionary<string, Item> exItems = Factory.GetGameModuleInstances<Item>(OshimaGameModuleConstant.General, OshimaGameModuleConstant.Item);
Equipment.AddRange(exItems.Values.Where(i => (int)i.ItemType >= 0 && (int)i.ItemType < 5));
Equipment.AddRange([new 10(), new 30(), new 50()]);
Equipment.AddRange([new 10(), new 20(), new 35(), new 50()]);
Items.AddRange(exItems.Values.Where(i => (int)i.ItemType > 4));

View File

@ -18,16 +18,29 @@ namespace Oshima.FunGame.OshimaModules.Items
}
}
public class 30 : Item
public class 20 : Item
{
public override long Id => (long)AccessoryID.30;
public override string Name => "攻击之爪 +30";
public override long Id => (long)AccessoryID.20;
public override string Name => "攻击之爪 +20";
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)
public 20(Character? character = null) : base(ItemType.Accessory)
{
Skills.Passives.Add(new (character, this, 30));
Skills.Passives.Add(new (character, this, 20));
}
}
public class 35 : Item
{
public override long Id => (long)AccessoryID.35;
public override string Name => "攻击之爪 +35";
public override string Description => Skills.Passives.Count > 0 ? Skills.Passives.First().Description : "";
public override QualityType QualityType => QualityType.Blue;
public 35(Character? character = null) : base(ItemType.Accessory)
{
Skills.Passives.Add(new (character, this, 35));
}
}
@ -36,14 +49,14 @@ 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 override QualityType QualityType => QualityType.Purple;
public 50(Character? character = null) : base(ItemType.Accessory)
{
Skills.Passives.Add(new (character, this, 50));
}
}
public class : Skill
{
public override long Id => (long)ItemPassiveID.;

View File

@ -3,7 +3,8 @@
public enum AccessoryID : long
{
10 = 14001,
30 = 14002,
50 = 14003,
20 = 14002,
35 = 14003,
50 = 14004,
}
}

View File

@ -26,7 +26,8 @@ namespace Oshima.FunGame.OshimaModules
return id switch
{
(long)AccessoryID.10 => new 10(),
(long)AccessoryID.30 => new 30(),
(long)AccessoryID.20 => new 20(),
(long)AccessoryID.35 => new 35(),
(long)AccessoryID.50 => new 50(),
_ => null,
};

View File

@ -637,7 +637,7 @@
"初级法袍": {
"Id": 12501,
"Name": "初级法袍",
"Description": "增加角色 10% 魔法抗性。",
"Description": "增加角色 8% 魔法抗性。",
"BackgroundStory": "可以不穿,不能没有。",
"ItemType": 2,
"WeaponType": 0,
@ -653,7 +653,7 @@
{
"Id": 8020,
"mdftype": 0,
"mdfvalue": 0.1
"mdfvalue": 0.08
}
]
}
@ -688,7 +688,7 @@
"圣洁之盾": {
"Id": 12503,
"Name": "圣洁之盾",
"Description": "受到的物理伤害减少 20%。",
"Description": "增加 10% 物理伤害减免。",
"BackgroundStory": "传说中由圣光祝福的盾牌,能够抵挡邪恶的力量。",
"ItemType": 2,
"WeaponType": 0,
@ -703,7 +703,7 @@
"Effects": [
{
"Id": 8019,
"expdr": 0.20
"expdr": 0.10
}
]
}
@ -713,7 +713,7 @@
"魔能法袍": {
"Id": 12504,
"Name": "魔能法袍",
"Description": "增加角色 15 点智力和 20% 魔法抗性。",
"Description": "增加角色 15 点智力和 15% 魔法抗性。",
"BackgroundStory": "法袍蕴含着神秘的魔力,穿戴者能增强魔法威力。",
"ItemType": 2,
"WeaponType": 0,
@ -733,7 +733,7 @@
{
"Id": 8020,
"mdftype": 0,
"mdfvalue": 0.2
"mdfvalue": 0.15
}
]
}
@ -971,7 +971,7 @@
"富贵头冠": {
"Id": 14502,
"Name": "富贵头冠",
"Description": "增加角色 170 点最大生命值和 80 点最大魔法值。",
"Description": "增加角色 70 点最大生命值和 40 点最大魔法值。",
"BackgroundStory": "辉煌华贵的头冠。",
"ItemType": 4,
"WeaponType": 0,
@ -986,11 +986,11 @@
"Effects": [
{
"Id": 8012,
"exhp": 170
"exhp": 70
},
{
"Id": 8013,
"exmp": 80
"exmp": 40
}
]
}
@ -1000,7 +1000,7 @@
"黄金挂坠": {
"Id": 14503,
"Name": "黄金挂坠",
"Description": "增加角色 300 点最大生命值。",
"Description": "增加角色 150 点最大生命值。",
"BackgroundStory": "珍贵稀有的黄金挂件,象征财富与荣耀的护身符。",
"ItemType": 4,
"WeaponType": 0,
@ -1015,7 +1015,7 @@
"Effects": [
{
"Id": 8012,
"exhp": 300
"exhp": 150
}
]
}
@ -1025,7 +1025,7 @@
"辉煌光环": {
"Id": 14504,
"Name": "辉煌光环",
"Description": "增加角色 170 点最大魔法值和 6 点每时间魔法回复。",
"Description": "增加角色 80 点最大魔法值和 5 点每时间魔法回复。",
"BackgroundStory": "流光溢彩的光环。",
"ItemType": 4,
"WeaponType": 0,
@ -1040,11 +1040,11 @@
"Effects": [
{
"Id": 8013,
"exmp": 170
"exmp": 80
},
{
"Id": 8022,
"exmr": 6
"exmr": 5
}
]
}
@ -1203,7 +1203,7 @@
"YukiのCalfSocks": {
"Id": 14510,
"Name": "YukiのCalfSocks",
"Description": "增加角色 15% 暴击率和 30% 暴击伤害。",
"Description": "增加角色 10% 暴击率和 20% 暴击伤害。",
"BackgroundStory": "小雪的小腿袜,拥有神秘的力量,令人神往。",
"ItemType": 4,
"WeaponType": 0,
@ -1218,11 +1218,11 @@
"Effects": [
{
"Id": 8014,
"excr": 0.15
"excr": 0.1
},
{
"Id": 8015,
"excrd": 0.3
"excrd": 0.2
}
]
}
@ -1286,7 +1286,7 @@
"路人哥的cos服": {
"Id": 14513,
"Name": "路人哥的cos服",
"Description": "增加角色 10% 攻击力,增加角色 15% 魔法抗性,但是会减少 8% 物理伤害减免。",
"Description": "增加角色 10% 攻击力,增加角色 10% 魔法抗性,但是会减少 8% 物理伤害减免。",
"BackgroundStory": "一套神秘的服饰,据说穿上后会引发未知的力量变化。",
"ItemType": 4,
"WeaponType": 0,
@ -1306,7 +1306,7 @@
{
"Id": 8020,
"mdftype": 0,
"mdfvalue": 0.15
"mdfvalue": 0.10
},
{
"Id": 8019,
@ -1316,5 +1316,38 @@
}
]
}
},
"白月光的玉佩": {
"Id": 14514,
"Name": "白月光的玉佩",
"Description": "增加角色 15% 魔法抗性8 点每时间魔法回复和 15% 冷却缩减。",
"BackgroundStory": "据说每个总裁都有一个救命恩人,还有一个冒充救命恩人的人。",
"ItemType": 4,
"WeaponType": 0,
"QualityType": 3,
"Skills": {
"Active": null,
"Passives": [
{
"Id": 7314,
"Name": "白月光的玉佩",
"SkillType": 3,
"Effects": [
{
"Id": 8020,
"exatk": 0.15
},
{
"Id": 8022,
"exmr": 8
},
{
"Id": 8011,
"excdr": 0.1
}
]
}
]
}
}
}