OshimaGameModule/OshimaCore/Controllers/FunGameController.cs

3081 lines
140 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
using Oshima.Core.Configs;
using Oshima.Core.Models;
using Oshima.Core.Utils;
using Oshima.FunGame.OshimaModules.Characters;
using Oshima.FunGame.OshimaModules.Items;
namespace Oshima.Core.Controllers
{
[ApiController]
[Route("[controller]")]
public class FunGameController(ILogger<FunGameController> logger) : ControllerBase
{
private readonly ILogger<FunGameController> _logger = logger;
private const int drawCardReduce = 2000;
private const int drawCardReduce_Material = 10;
private const string noSaved = "你还没有创建存档!请发送【创建存档】创建。";
private readonly ItemType[] itemCanUsed = [ItemType.Consumable, ItemType.MagicCard, ItemType.SpecialItem, ItemType.GiftBox, ItemType.Others];
[HttpGet("test")]
public List<string> GetTest([FromQuery] bool? isweb = null, [FromQuery] bool? isteam = null, [FromQuery] bool? showall = null)
{
bool web = isweb ?? true;
bool team = isteam ?? false;
bool all = showall ?? false;
return FunGameActionQueue.StartSimulationGame(false, web, team, all);
}
[HttpGet("stats")]
public string GetStats([FromQuery] int? id = null)
{
if (id != null && id > 0 && id <= FunGameService.Characters.Count)
{
Character character = FunGameService.Characters[Convert.ToInt32(id) - 1];
if (FunGameActionQueue.CharacterStatistics.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}");
builder.AppendLine($"总计败场数:{stats.Loses}");
List<string> names = [.. FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
builder.AppendLine($"MVP次数{stats.MVPs}#{names.IndexOf(character.GetName()) + 1}");
names = [.. FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())];
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName()) + 1}");
builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%");
names = [.. FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())];
builder.AppendLine($"技术得分:{stats.Rating:0.0#}#{names.IndexOf(character.GetName()) + 1}");
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank:0.##}");
return NetworkUtility.JsonSerialize(builder.ToString());
}
}
return NetworkUtility.JsonSerialize("");
}
[HttpGet("teamstats")]
public string GetTeamStats([FromQuery] int? id = null)
{
if (id != null && id > 0 && id <= FunGameService.Characters.Count)
{
Character character = FunGameService.Characters[Convert.ToInt32(id) - 1];
if (FunGameActionQueue.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.Deaths == 0 ? stats.Kills : ((double)stats.Kills / stats.Deaths)):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.Loses}");
List<string> names = [.. FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.MVPs).Select(kv => kv.Key.GetName())];
builder.AppendLine($"MVP次数{stats.MVPs}#{names.IndexOf(character.GetName()) + 1}");
names = [.. FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key.GetName())];
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%#{names.IndexOf(character.GetName()) + 1}");
names = [.. FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key.GetName())];
builder.AppendLine($"技术得分:{stats.Rating:0.0#}#{names.IndexOf(character.GetName()) + 1}");
return NetworkUtility.JsonSerialize(builder.ToString());
}
}
return NetworkUtility.JsonSerialize("");
}
[HttpGet("winraterank")]
public string GetWinrateRank([FromQuery] bool? isteam = null)
{
bool team = isteam ?? false;
if (team)
{
List<string> strings = [];
IEnumerable<Character> ratings = FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key);
foreach (Character character in ratings)
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameActionQueue.TeamCharacterStatistics[character];
builder.AppendLine(character.ToString());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
builder.AppendLine($"技术得分:{stats.Rating:0.0#}");
builder.AppendLine($"MVP次数{stats.MVPs}");
strings.Add(builder.ToString());
}
return NetworkUtility.JsonSerialize(strings);
}
else
{
List<string> strings = [];
IEnumerable<Character> ratings = FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Winrates).Select(kv => kv.Key);
foreach (Character character in ratings)
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameActionQueue.CharacterStatistics[character];
builder.AppendLine(character.ToString());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%");
builder.AppendLine($"技术得分:{stats.Rating:0.0#}");
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank:0.##}");
builder.AppendLine($"MVP次数{stats.MVPs}");
strings.Add(builder.ToString());
}
return NetworkUtility.JsonSerialize(strings);
}
}
[HttpGet("ratingrank")]
public string GetRatingRank([FromQuery] bool? isteam = null)
{
bool team = isteam ?? false;
if (team)
{
List<string> strings = [];
IEnumerable<Character> ratings = FunGameActionQueue.TeamCharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key);
foreach (Character character in ratings)
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameActionQueue.TeamCharacterStatistics[character];
builder.AppendLine(character.ToString());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
builder.AppendLine($"技术得分:{stats.Rating:0.0#}");
builder.AppendLine($"MVP次数{stats.MVPs}");
strings.Add(builder.ToString());
}
return NetworkUtility.JsonSerialize(strings);
}
else
{
List<string> strings = [];
IEnumerable<Character> ratings = FunGameActionQueue.CharacterStatistics.OrderByDescending(kv => kv.Value.Rating).Select(kv => kv.Key);
foreach (Character character in ratings)
{
StringBuilder builder = new();
CharacterStatistics stats = FunGameActionQueue.CharacterStatistics[character];
builder.AppendLine(character.ToString());
builder.AppendLine($"总计参赛数:{stats.Plays}");
builder.AppendLine($"总计冠军数:{stats.Wins}");
builder.AppendLine($"胜率:{stats.Winrates * 100:0.##}%");
builder.AppendLine($"前三率:{stats.Top3rates * 100:0.##}%");
builder.AppendLine($"技术得分:{stats.Rating:0.0#}");
builder.AppendLine($"上次排名:{stats.LastRank} / 场均名次:{stats.AvgRank:0.##}");
builder.AppendLine($"MVP次数{stats.MVPs}");
strings.Add(builder.ToString());
}
return NetworkUtility.JsonSerialize(strings);
}
}
[HttpGet("characterinfo")]
public string GetCharacterInfo([FromQuery] int? id = null)
{
if (id != null && id > 0 && id <= FunGameService.Characters.Count)
{
Character c = FunGameService.Characters[Convert.ToInt32(id) - 1].Copy();
c.Level = General.GameplayEquilibriumConstant.MaxLevel;
c.NormalAttack.Level = General.GameplayEquilibriumConstant.MaxNormalAttackLevel;
FunGameService.AddCharacterSkills(c, 1, General.GameplayEquilibriumConstant.MaxSkillLevel, General.GameplayEquilibriumConstant.MaxSuperSkillLevel);
return NetworkUtility.JsonSerialize(c.GetInfo().Trim());
}
return NetworkUtility.JsonSerialize("");
}
[HttpGet("skillinfo")]
public string GetSkillInfo([FromQuery] long? id = null)
{
IEnumerable<Skill> skills = FunGameService.Skills.Union(FunGameService.Magics);
if (id != null && FunGameService.Characters.Count > 1)
{
List<string> msg = [];
Character c = FunGameService.Characters[1].Copy();
Skill? s = skills.Where(s => s.Id == id).FirstOrDefault()?.Copy();
if (s != null)
{
s.Character = c;
msg.Add($"技能展示的属性基于演示角色:[ {c} ]");
msg.Add(c.ToStringWithLevel() + "\r\n" + s.ToString());
s.Level++; ;
msg.Add(c.ToStringWithLevel() + "\r\n" + s.ToString());
c.Level = General.GameplayEquilibriumConstant.MaxLevel;
s.Level = s.IsMagic ? General.GameplayEquilibriumConstant.MaxMagicLevel : General.GameplayEquilibriumConstant.MaxSkillLevel;
msg.Add(c.ToStringWithLevel() + "\r\n" + s.ToString());
}
return NetworkUtility.JsonSerialize(string.Join("\r\n\r\n", msg));
}
return NetworkUtility.JsonSerialize("");
}
[HttpGet("iteminfo")]
public string GetItemInfo([FromQuery] long? id = null)
{
IEnumerable<Item> items = FunGameService.AllItems;
if (id != null)
{
List<string> msg = [];
Item? i = items.Where(i => i.Id == id).FirstOrDefault()?.Copy();
if (i != null)
{
i.SetLevel(1);
msg.Add(i.ToString(false, true));
}
return NetworkUtility.JsonSerialize(string.Join("\r\n\r\n", msg));
}
return NetworkUtility.JsonSerialize("");
}
[HttpGet("newmagiccard")]
public string GenerateMagicCard()
{
Item i = FunGameService.GenerateMagicCard();
return NetworkUtility.JsonSerialize(i.ToString(false, true));
}
[HttpGet("newmagiccardpack")]
public string GenerateMagicCardPack()
{
Item? i = FunGameService.GenerateMagicCardPack(3);
if (i != null)
{
return NetworkUtility.JsonSerialize(i.ToString(false, true));
}
return NetworkUtility.JsonSerialize("");
}
[HttpPost("createsaved")]
public string CreateSaved([FromQuery] long? qq = null, [FromQuery] string? name = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
string username = name ?? FunGameService.GenerateRandomChineseUserName();
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count == 0)
{
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}】。");
}
else
{
return NetworkUtility.JsonSerialize("你已经创建过存档!");
}
}
[HttpPost("restoresaved")]
public string RestoreSaved([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
user.Inventory.Credits = 5000000;
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();
return NetworkUtility.JsonSerialize($"你的存档已还原成功。");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("rename")]
public string ReName([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = 1500;
if (user.Inventory.Credits >= reduce)
{
user.Inventory.Credits -= reduce;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法改名!");
}
user.Username = FunGameService.GenerateRandomChineseUserName();
if (user.Inventory.Characters.FirstOrDefault(c => c.Id == user.Id) is Character character)
{
character.Name = user.Username;
}
if (user.Inventory.Name.EndsWith("的库存"))
{
user.Inventory.Name = user.Username + "的库存";
}
FunGameService.UserIdAndUsername[user.Id] = user.Username;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你的新名字是【{user.Username}】");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("randomcustom")]
public string RandomCustomCharacter([FromQuery] long? qq = null, [FromQuery] bool? confirm = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
bool isConfirm = confirm ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
EntityModuleConfig<Character> emc = new("randomcustom", userid.ToString());
emc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (user.Inventory.Characters.FirstOrDefault(c => c.Id == user.Id) is Character character)
{
PrimaryAttribute oldPA = character.PrimaryAttribute;
double oldSTR = character.InitialSTR;
double oldAGI = character.InitialAGI;
double oldINT = character.InitialINT;
double oldSTRG = character.STRGrowth;
double oldAGIG = character.AGIGrowth;
double oldINTG = character.INTGrowth;
Character? newCustom = emc.Count > 0 ? emc.Get("newCustom") : null;
if (isConfirm)
{
if (newCustom != null)
{
character.PrimaryAttribute = newCustom.PrimaryAttribute;
character.InitialSTR = newCustom.InitialSTR;
character.InitialAGI = newCustom.InitialAGI;
character.InitialINT = newCustom.InitialINT;
character.STRGrowth = newCustom.STRGrowth;
character.AGIGrowth = newCustom.AGIGrowth;
character.INTGrowth = newCustom.INTGrowth;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
emc.Clear();
emc.SaveConfig();
return NetworkUtility.JsonSerialize($"你已完成重随属性确认,新的自建角色属性如下:\r\n" +
$"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(character.PrimaryAttribute)}\r\n" +
$"初始力量:{oldSTR}+{oldSTRG}/Lv=> {character.InitialSTR}+{character.STRGrowth}/Lv\r\n" +
$"初始敏捷:{oldAGI}+{oldAGIG}/Lv=> {character.InitialAGI}+{character.AGIGrowth}/Lv\r\n" +
$"初始智力:{oldINT}+{oldINTG}/Lv=> {character.InitialINT}+{character.INTGrowth}/Lv");
}
else
{
return NetworkUtility.JsonSerialize($"你还没有获取过重随属性预览!");
}
}
else
{
if (newCustom is null)
{
int reduce = 20;
if (user.Inventory.Materials >= reduce)
{
user.Inventory.Materials -= reduce;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法重随自建角色属性!");
}
newCustom = new CustomCharacter(user.Id, "");
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
emc.Add("newCustom", newCustom);
emc.SaveConfig();
return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},获取到重随属性预览如下:\r\n" +
$"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(newCustom.PrimaryAttribute)}\r\n" +
$"初始力量:{oldSTR}+{oldSTRG}/Lv=> {newCustom.InitialSTR}+{newCustom.STRGrowth}/Lv\r\n" +
$"初始敏捷:{oldAGI}+{oldAGIG}/Lv=> {newCustom.InitialAGI}+{newCustom.AGIGrowth}/Lv\r\n" +
$"初始智力:{oldINT}+{oldINTG}/Lv=> {newCustom.InitialINT}+{newCustom.INTGrowth}/Lv\r\n" +
$"请发送【确认角色重随】来确认更新,或者发送【取消角色重随】来取消操作。");
}
else if (newCustom.Id == user.Id)
{
return NetworkUtility.JsonSerialize($"你已经有一个待确认的重随属性如下:\r\n" +
$"核心属性:{CharacterSet.GetPrimaryAttributeName(oldPA)} => {CharacterSet.GetPrimaryAttributeName(newCustom.PrimaryAttribute)}\r\n" +
$"初始力量:{oldSTR}+{oldSTRG}/Lv=> {newCustom.InitialSTR}+{newCustom.STRGrowth}/Lv\r\n" +
$"初始敏捷:{oldAGI}+{oldAGIG}/Lv=> {newCustom.InitialAGI}+{newCustom.AGIGrowth}/Lv\r\n" +
$"初始智力:{oldINT}+{oldINTG}/Lv=> {newCustom.InitialINT}+{newCustom.INTGrowth}/Lv\r\n"+
$"请发送【确认角色重随】来确认更新,或者发送【取消角色重随】来取消操作。");
}
else
{
return NetworkUtility.JsonSerialize($"重随自建角色属性失败!");
}
}
}
else
{
return NetworkUtility.JsonSerialize($"你似乎没有自建角色,请发送【生成自建角色】创建!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("cancelrandomcustom")]
public string CancelRandomCustomCharacter([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
EntityModuleConfig<Character> emc = new("randomcustom", userid.ToString());
emc.LoadConfig();
if (emc.Count > 0)
{
emc.Clear();
emc.SaveConfig();
return NetworkUtility.JsonSerialize($"已取消角色重随。");
}
else
{
return NetworkUtility.JsonSerialize($"你目前没有待确认的角色重随。");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("inventoryinfo")]
public string GetInventoryInfo([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
return NetworkUtility.JsonSerialize(user.Inventory.ToString(false));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("inventoryinfo2")]
public List<string> GetInventoryInfo2([FromQuery] long? qq = null, [FromQuery] int? page = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int showPage = page ?? 1;
if (showPage <= 0) showPage = 1;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
List<string> list = [];
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
list.Add($"☆★☆ {user.Inventory.Name} ☆★☆");
list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}{user.Inventory.Credits:0.00}");
list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}{user.Inventory.Materials:0.00}");
List<Character> characters = [.. user.Inventory.Characters];
List<Item> items = [.. user.Inventory.Items];
int total = characters.Count + items.Count;
int maxPage = (int)Math.Ceiling((double)total / 10);
if (maxPage < 1) maxPage = 1;
if (showPage <= maxPage)
{
List<object> inventory = [.. characters, .. items];
Dictionary<int, object> dict = inventory.Select((obj, index) => new { Index = index + 1, Value = obj }).ToDictionary(k => k.Index, v => v.Value);
List<int> seq = [.. FunGameService.GetPage(dict.Keys, showPage, 10)];
bool showCharacter = true;
bool showItem = true;
int characterCount = 0;
int itemCount = 0;
int prevSequence = dict.Take((showPage - 1) * 10).Count();
foreach (int index in seq)
{
object obj = dict[index];
string str = "";
if (obj is Character character)
{
characterCount++;
if (showCharacter)
{
showCharacter = false;
list.Add("======= 角色 =======");
}
str = $"{prevSequence + characterCount}. {character.ToStringWithLevelWithOutUser()}";
}
if (obj is Item item)
{
itemCount++;
if (showItem)
{
showItem = false;
list.Add("======= 物品 =======");
}
str = $"{index - (characterCount > 0 ? prevSequence + characterCount : characters.Count)}. [{ItemSet.GetQualityTypeName(item.QualityType)}|{ItemSet.GetItemTypeName(item.ItemType)}] {item.Name}\r\n";
str += $"{item.ToStringInventory(false).Trim()}";
}
list.Add(str);
}
list.Add($"页数:{showPage} / {maxPage}");
}
else
{
list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。");
}
}
else
{
list.Add(noSaved);
}
return list;
}
[HttpPost("inventoryinfo3")]
public List<string> GetInventoryInfo3([FromQuery] long? qq = null, [FromQuery] int? page = null, [FromQuery] int? order = null, [FromQuery] int? orderqty = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int showPage = page ?? 1;
if (showPage <= 0) showPage = 1;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
List<string> list = [];
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
list.Add($"☆★☆ {user.Inventory.Name} ☆★☆");
list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}{user.Inventory.Credits:0.00}");
list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}{user.Inventory.Materials:0.00}");
List<Item> items = [.. user.Inventory.Items];
Dictionary<string, List<Item>> itemCategory = [];
foreach (Item item in items)
{
if (!itemCategory.TryAdd(item.GetIdName(), [item]))
{
itemCategory[item.GetIdName()].Add(item);
}
}
if (orderqty != 0)
{
IOrderedEnumerable<KeyValuePair<string, List<Item>>>? orderEnum = null;
if (order != 0)
{
orderEnum = order switch
{
1 => itemCategory.OrderBy(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0),
2 => itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0),
3 => itemCategory.OrderBy(kv => kv.Value.FirstOrDefault()?.ItemType ?? 0),
4 => itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.ItemType ?? 0),
_ => itemCategory.OrderBy(kv => 0)
};
}
if (orderEnum != null)
{
if (orderqty == 1)
{
orderEnum = orderEnum.ThenBy(kv => kv.Value.Count);
}
else
{
orderEnum = orderEnum.ThenByDescending(kv => kv.Value.Count);
}
itemCategory = orderEnum.ToDictionary();
}
}
int maxPage = (int)Math.Ceiling((double)itemCategory.Count / 10);
if (maxPage < 1) maxPage = 1;
if (showPage <= maxPage)
{
List<string> keys = [.. FunGameService.GetPage(itemCategory.Keys, showPage, 10)];
int itemCount = 0;
list.Add("======= 物品 =======");
foreach (string key in keys)
{
itemCount++;
List<Item> objs = itemCategory[key];
Item first = objs[0];
string str = $"{itemCount}. [{ItemSet.GetQualityTypeName(first.QualityType)}|{ItemSet.GetItemTypeName(first.ItemType)}] {first.Name}\r\n";
str += $"物品描述:{first.Description}\r\n";
string itemsIndex = string.Join("", objs.Select(i => items.IndexOf(i) + 1));
if (objs.Count > 10)
{
itemsIndex = string.Join("", objs.Take(10).Select(i => items.IndexOf(i) + 1)) + "...";
}
str += $"物品序号:{itemsIndex}\r\n";
str += $"拥有数量:{objs.Count}" + (first.IsEquipment ? $"可装备数量:{objs.Count(i => i.Character is null)}" : "") +
(itemCanUsed.Contains(first.ItemType) ? $"可使用数量:{objs.Count(i => i.RemainUseTimes > 0)}" : "") +
$"可出售数量:{objs.Count(i => i.IsSellable)},可交易数量:{objs.Count(i => i.IsTradable)}";
list.Add(str);
}
list.Add($"页数:{showPage} / {maxPage}");
}
else
{
list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。");
}
}
else
{
list.Add(noSaved);
}
return list;
}
[HttpPost("inventoryinfo4")]
public List<string> GetInventoryInfo4([FromQuery] long? qq = null, [FromQuery] int? page = null, [FromQuery] int? type = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int showPage = page ?? 1;
int itemtype = type ?? -1;
if (showPage <= 0) showPage = 1;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
List<string> list = [];
if (pc.Count > 0)
{
if (type == -1)
{
return ["没有指定物品的类型,请使用通用查询方法!"];
}
User user = FunGameService.GetUser(pc);
list.Add($"☆★☆ {user.Inventory.Name} ☆★☆");
list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}{user.Inventory.Credits:0.00}");
list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}{user.Inventory.Materials:0.00}");
List<Item> items = [.. user.Inventory.Items];
Dictionary<string, List<Item>> itemCategory = [];
foreach (Item item in items)
{
if (!itemCategory.TryAdd(item.GetIdName(), [item]))
{
itemCategory[item.GetIdName()].Add(item);
}
}
// 按品质倒序、数量倒序排序
itemCategory = itemCategory.OrderByDescending(kv => kv.Value.FirstOrDefault()?.QualityType ?? 0).ThenByDescending(kv => kv.Value.Count).ToDictionary();
// 移除所有非指定类型的物品
foreach (List<Item> listTemp in itemCategory.Values)
{
if (listTemp.First() is Item item && (int)item.ItemType != itemtype)
{
itemCategory.Remove(item.GetIdName());
}
}
int maxPage = (int)Math.Ceiling((double)itemCategory.Count / 10);
if (maxPage < 1) maxPage = 1;
if (showPage <= maxPage)
{
List<string> keys = [.. FunGameService.GetPage(itemCategory.Keys, showPage, 10)];
int itemCount = 0;
list.Add($"======= {ItemSet.GetItemTypeName((ItemType)itemtype)} =======");
foreach (string key in keys)
{
itemCount++;
List<Item> objs = itemCategory[key];
Item first = objs[0];
string str = $"{itemCount}. [{ItemSet.GetQualityTypeName(first.QualityType)}|{ItemSet.GetItemTypeName(first.ItemType)}] {first.Name}\r\n";
str += $"物品描述:{first.Description}\r\n";
string itemsIndex = string.Join("", objs.Select(i => items.IndexOf(i) + 1));
if (objs.Count > 10)
{
itemsIndex = string.Join("", objs.Take(10).Select(i => items.IndexOf(i) + 1)) + "...";
}
str += $"物品序号:{itemsIndex}\r\n";
str += $"拥有数量:{objs.Count}" + (first.IsEquipment ? $"可装备数量:{objs.Count(i => i.Character is null)}" : "") +
(itemCanUsed.Contains(first.ItemType) ? $"可使用数量:{objs.Count(i => i.RemainUseTimes > 0)}" : "") +
$"可出售数量:{objs.Count(i => i.IsSellable)},可交易数量:{objs.Count(i => i.IsTradable)}";
list.Add(str);
}
list.Add($"页数:{showPage} / {maxPage}");
}
else
{
list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。");
}
}
else
{
list.Add(noSaved);
}
return list;
}
[HttpPost("inventoryinfo5")]
public List<string> GetInventoryInfo5([FromQuery] long? qq = null, [FromQuery] int? page = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int showPage = page ?? 1;
if (showPage <= 0) showPage = 1;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
List<string> list = [];
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
list.Add($"☆★☆ {user.Inventory.Name} ☆★☆");
list.Add($"{General.GameplayEquilibriumConstant.InGameCurrency}{user.Inventory.Credits:0.00}");
list.Add($"{General.GameplayEquilibriumConstant.InGameMaterial}{user.Inventory.Materials:0.00}");
List<Character> characters = [.. user.Inventory.Characters];
int total = characters.Count;
int maxPage = (int)Math.Ceiling((double)total / 6);
if (maxPage < 1) maxPage = 1;
if (showPage <= maxPage)
{
List<object> inventory = [.. characters];
Dictionary<int, object> dict = inventory.Select((obj, index) => new { Index = index + 1, Value = obj }).ToDictionary(k => k.Index, v => v.Value);
List<int> seq = [.. FunGameService.GetPage(dict.Keys, showPage, 6)];
bool showCharacter = true;
int characterCount = 0;
int prevSequence = dict.Take((showPage - 1) * 6).Count();
foreach (int index in seq)
{
object obj = dict[index];
string str = "";
if (obj is Character character)
{
characterCount++;
if (showCharacter)
{
showCharacter = false;
list.Add("======= 角色 =======");
}
str = $"{prevSequence + characterCount}. {character.ToStringWithLevelWithOutUser()}";
}
list.Add(str);
}
list.Add($"页数:{showPage} / {maxPage}");
}
else
{
list.Add($"没有这么多页!当前总页数为 {maxPage},但你请求的是第 {showPage} 页。");
}
}
else
{
list.Add(noSaved);
}
return list;
}
[HttpPost("newcustomcharacter")]
public string NewCustomCharacter([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (user.Inventory.Characters.Any(c => c.Id == user.Id))
{
return NetworkUtility.JsonSerialize($"你已经拥有一个自建角色【{user.Username}】,无法再创建!");
}
else
{
user.Inventory.Characters.Add(new CustomCharacter(userid, user.Username));
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"恭喜你成功创建了一个自建角色【{user.Username}】,请查看你的角色库存!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("drawcard")]
public string DrawCard([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = drawCardReduce;
if (user.Inventory.Credits >= reduce)
{
user.Inventory.Credits -= reduce;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法抽卡!");
}
double dice = Random.Shared.NextDouble();
if (dice > 0.8)
{
string msg = FunGameService.GetDrawCardResult(reduce, user);
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你什么也没抽中……");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("drawcards")]
public List<string> DrawCards([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = drawCardReduce * 10;
if (user.Inventory.Credits >= reduce)
{
user.Inventory.Credits -= reduce;
}
else
{
return [$"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {reduce} 呢,无法十连抽卡!"];
}
List<string> result = [$"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},恭喜你抽到了:"];
int count = 0;
for (int i = 0; i < 10; i++)
{
double dice = Random.Shared.NextDouble();
if (dice > 0.8)
{
count++;
result.Add(FunGameService.GetDrawCardResult(reduce, user, true, count));
}
}
if (result.Count == 1)
{
result[0] = $"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameCurrency},你什么也没抽中……";
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return result;
}
else
{
return [noSaved];
}
}
[HttpPost("drawcardm")]
public string DrawCard_Material([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = drawCardReduce_Material;
if (user.Inventory.Materials >= reduce)
{
user.Inventory.Materials -= reduce;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法抽卡!");
}
double dice = Random.Shared.NextDouble();
if (dice > 0.8)
{
string msg = FunGameService.GetDrawCardResult(reduce, user);
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},你什么也没抽中……");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("drawcardsm")]
public List<string> DrawCards_Material([FromQuery] long? qq = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = drawCardReduce_Material * 10;
if (user.Inventory.Materials >= reduce)
{
user.Inventory.Materials -= reduce;
}
else
{
return [$"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce} 呢,无法十连抽卡!"];
}
List<string> result = [$"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},恭喜你抽到了:"];
int count = 0;
for (int i = 0; i < 10; i++)
{
double dice = Random.Shared.NextDouble();
if (dice > 0.8)
{
count++;
result.Add(FunGameService.GetDrawCardResult(reduce, user, true, count));
}
}
if (result.Count == 1)
{
result[0] = $"消耗 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},你什么也没抽中……";
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return result;
}
else
{
return [noSaved];
}
}
[HttpPost("exchangecredits")]
public string ExchangeCredits([FromQuery] long? qq = null, [FromQuery] double? materials = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
double useMaterials = materials ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
int reduce = (int)useMaterials >= 10 ? (int)useMaterials : 10;
reduce -= reduce % 10;
if (reduce >= 10 && user.Inventory.Materials >= reduce)
{
int reward = reduce / 10 * 2000;
user.Inventory.Credits += reward;
user.Inventory.Materials -= reduce;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"兑换成功!你消耗了 {reduce} {General.GameplayEquilibriumConstant.InGameMaterial},增加了 {reward} {General.GameplayEquilibriumConstant.InGameCurrency}");
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {reduce},最低消耗 10 {General.GameplayEquilibriumConstant.InGameMaterial}兑换 2000 {General.GameplayEquilibriumConstant.InGameCurrency}");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("showcharacterinfo")]
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();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (cIndex == 0)
{
if (isSimple)
{
return NetworkUtility.JsonSerialize($"这是你的主战角色简略信息:\r\n{user.Inventory.MainCharacter.GetSimpleInfo(showEXP: true).Trim()}");
}
return NetworkUtility.JsonSerialize($"这是你的主战角色详细信息:\r\n{user.Inventory.MainCharacter.GetInfo().Trim()}");
}
else
{
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(showEXP: true).Trim()}");
}
return NetworkUtility.JsonSerialize($"这是你库存中序号为 {cIndex} 的角色详细信息:\r\n{character.GetInfo().Trim()}");
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("showiteminfo")]
public string GetItemInfoFromInventory([FromQuery] long? qq = null, [FromQuery] int? seq = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int itemIndex = seq ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count)
{
Item item = user.Inventory.Items.ToList()[itemIndex - 1];
return NetworkUtility.JsonSerialize($"这是你库存中序号为 {itemIndex} 的物品详细信息:\r\n{item.ToStringInventory(true).Trim()}");
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("equipitem")]
public string EquipItem([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] int? i = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
int itemIndex = i ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
Item? item = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count)
{
item = user.Inventory.Items.ToList()[itemIndex - 1];
if ((int)item.ItemType < (int)ItemType.MagicCardPack || (int)item.ItemType > (int)ItemType.Accessory)
{
return NetworkUtility.JsonSerialize($"这个物品无法被装备!");
}
else if (item.Character != null)
{
return NetworkUtility.JsonSerialize($"这个物品无法被装备![ {item.Character.ToStringWithLevelWithOutUser()} ] 已装备此物品。");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品!");
}
if (character != null && item != null && character.Equip(item))
{
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!" +
$"{ItemSet.GetEquipSlotTypeName(item.EquipSlotType)}栏位)\r\n物品描述{item.Description}");
}
else
{
return NetworkUtility.JsonSerialize($"装备失败!可能是角色、物品不存在或者其他原因。");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("unequipitem")]
public string UnEquipItem([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] int? i = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
EquipSlotType type = (EquipSlotType)(i ?? 0);
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
Item? item = character.UnEquip(type);
if (item != null && user.Inventory.Items.Where(i => i.Guid == item.Guid).FirstOrDefault() is Item itemInventory)
{
itemInventory.EquipSlotType = EquipSlotType.None;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"取消装备{ItemSet.GetQualityTypeName(item.QualityType)}{ItemSet.GetItemTypeName(item.ItemType)}【{item.Name}】成功!({ItemSet.GetEquipSlotTypeName(type)}栏位)");
}
else return NetworkUtility.JsonSerialize($"取消装备失败!角色并没有装备{ItemSet.GetEquipSlotTypeName(type)},或者库存中不存在此物品!");
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("fightcustom")]
public List<string> FightCustom([FromQuery] long? qq = null, [FromQuery] long? eqq = null, [FromQuery] bool? all = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
long enemyid = eqq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
bool showAllRound = all ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
PluginConfig pc2 = new("saved", enemyid.ToString());
pc2.LoadConfig();
User? user1 = null, user2 = null;
if (pc.Count > 0)
{
user1 = FunGameService.GetUser(pc);
user1.LastTime = DateTime.Now;
pc.Add("user", user1);
pc.SaveConfig();
}
else
{
return [noSaved];
}
if (pc2.Count > 0)
{
user2 = FunGameService.GetUser(pc2);
user2.LastTime = DateTime.Now;
pc2.Add("user", user2);
pc2.SaveConfig();
}
else
{
return [$"对方貌似还没有创建存档呢!"];
}
if (user1 != null && user2 != null)
{
return FunGameActionQueue.StartGame([user1.Inventory.MainCharacter, user2.Inventory.MainCharacter], false, false, false, false, showAllRound);
}
else
{
return [$"决斗发起失败!"];
}
}
catch (Exception e)
{
return [e.ToString()];
}
}
[HttpPost("fightcustom2")]
public List<string> FightCustom2([FromQuery] long? qq = null, [FromQuery] string? name = null, [FromQuery] bool? all = 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, all);
}
return [$"决斗发起失败!"];
}
catch (Exception e)
{
return [e.ToString()];
}
}
[HttpPost("useitem")]
public string UseItem([FromQuery] long? qq = null, [FromQuery] int? id = null, [FromBody] int[]? characters = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int itemIndex = id ?? 0;
List<int> charactersIndex = characters?.ToList() ?? [];
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
Item? item = null;
if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count)
{
item = user.Inventory.Items.ToList()[itemIndex - 1];
if (itemCanUsed.Contains(item.ItemType))
{
if (item.RemainUseTimes <= 0)
{
return NetworkUtility.JsonSerialize("此物品剩余使用次数为0无法使用");
}
List<Character> targets = [];
foreach (int characterIndex in charactersIndex)
{
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
targets.Add(character);
}
}
if (FunGameService.UseItem(item, user, [.. targets], out string msg))
{
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
}
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize($"这个物品无法使用!");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("useitem2")]
public string UseItem2([FromQuery] long? qq = null, [FromQuery] string? name = null, [FromQuery] int? count = null, [FromBody] int[]? characters = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
string itemName = name ?? "";
int useCount = count ?? 0;
List<int> charactersIndex = characters?.ToList() ?? [];
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
IEnumerable<Item> items = user.Inventory.Items.Where(i => i.Name == name && i.Character is null && i.ItemType != ItemType.MagicCard);
if (!items.Any())
{
return NetworkUtility.JsonSerialize($"库存中不存在名称为【{name}】的物品!如果是魔法卡,请用【使用魔法卡】指令。");
}
if (items.Count() >= useCount)
{
items = items.TakeLast(useCount);
List<string> msgs = [];
int successCount = 0;
List<Character> targets = [];
Character? character = null;
foreach (int characterIndex in charactersIndex)
{
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
targets.Add(character);
}
else
{
msgs.Add($"库存中不存在序号为 {characterIndex} 的角色!");
}
}
foreach (Item item in items)
{
if (itemCanUsed.Contains(item.ItemType))
{
if (item.RemainUseTimes <= 0)
{
msgs.Add("此物品剩余使用次数为0无法使用");
}
if (FunGameService.UseItem(item, user, [.. targets], out string msg))
{
successCount++;
}
msgs.Add(msg);
}
else
{
msgs.Add($"这个物品无法使用!");
}
}
if (successCount > 0)
{
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
}
return NetworkUtility.JsonSerialize($"使用完毕!使用 {useCount} 件物品,成功 {successCount} 件!\r\n" + string.Join("\r\n", msgs.Count > 30 ? msgs.Take(30) : msgs));
}
else
{
return NetworkUtility.JsonSerialize("此物品的可使用数量小于你想要使用的数量!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("useitem3")]
public string UseItem3([FromQuery] long? qq = null, [FromQuery] int? id = null, [FromQuery] int? id2 = null, [FromQuery] bool? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int itemIndex = id ?? 0;
int itemToIndex = id2 ?? 0;
bool isCharacter = c ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Item? item = null;
if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count)
{
item = user.Inventory.Items.ToList()[itemIndex - 1];
if (item.ItemType == ItemType.MagicCard)
{
if (item.RemainUseTimes <= 0)
{
return NetworkUtility.JsonSerialize("此物品剩余使用次数为0无法使用");
}
string msg = "";
Item? itemTo = null;
if (isCharacter)
{
if (itemToIndex > 0 && itemToIndex <= user.Inventory.Characters.Count)
{
Character character = user.Inventory.Characters.ToList()[itemToIndex - 1];
if (character.EquipSlot.MagicCardPack != null)
{
itemTo = user.Inventory.Items.FirstOrDefault(i => i.Guid == character.EquipSlot.MagicCardPack.Guid);
if (itemTo != null)
{
msg = FunGameService.UseMagicCard(user, item, itemTo);
}
else
{
return NetworkUtility.JsonSerialize($"库存中没有找到此角色对应的魔法卡包!");
}
}
else
{
return NetworkUtility.JsonSerialize($"这个角色没有装备魔法卡包,无法对其使用魔法卡!");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
}
else
{
if (itemToIndex > 0 && itemToIndex <= user.Inventory.Items.Count)
{
itemTo = user.Inventory.Items.ToList()[itemToIndex - 1];
if (itemTo != null && itemTo.ItemType == ItemType.MagicCardPack)
{
msg = FunGameService.UseMagicCard(user, item, itemTo);
}
else
{
return NetworkUtility.JsonSerialize($"与目标序号相对应的物品不是魔法卡包!");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与目标序号相对应的物品!");
}
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize($"这个物品不是魔法卡!");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与目标序号相对应的物品!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("characterlevelup")]
public string CharacterLevelUp([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] int? count = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
int upCount = count ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (character.Level == General.GameplayEquilibriumConstant.MaxLevel)
{
return NetworkUtility.JsonSerialize($"该角色等级已满,无需再升级!");
}
int originalLevel = character.Level;
character.OnLevelUp(upCount);
string msg = $"升级完成!角色 [ {character} ] 共提升 {character.Level - originalLevel} 级,当前等级:{character.Level} 级。";
if (character.Level != General.GameplayEquilibriumConstant.MaxLevel && General.GameplayEquilibriumConstant.EXPUpperLimit.TryGetValue(character.Level, out double need))
{
if (character.EXP < need)
{
msg += $"\r\n角色 [ {character} ] 仍需 {need - character.EXP} 点经验值才能继续升级。";
}
else
{
msg += $"\r\n角色 [ {character} ] 目前突破进度:{character.LevelBreak + 1}/{General.GameplayEquilibriumConstant.LevelBreakList.Count},需要进行【角色突破】才能继续升级。";
}
}
else if (character.Level == General.GameplayEquilibriumConstant.MaxLevel)
{
msg += $"\r\n该角色已升级至满级恭喜";
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("getlevelbreakneedy")]
public string GetLevelBreakNeedy([FromQuery] long? qq = null, [FromQuery] int? id = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = id ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (character.LevelBreak + 1 == General.GameplayEquilibriumConstant.LevelBreakList.Count)
{
return NetworkUtility.JsonSerialize($"该角色已完成全部的突破阶段,无需再突破!");
}
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 目前突破进度:{character.LevelBreak + 1}/{General.GameplayEquilibriumConstant.LevelBreakList.Count}" +
$"\r\n该角色下一个等级突破阶段在 {General.GameplayEquilibriumConstant.LevelBreakList.ToArray()[character.LevelBreak + 1]} 级,所需材料:\r\n" + FunGameService.GetLevelBreakNeedy(character.LevelBreak + 1));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("characterlevelbreak")]
public string CharacterLevelBreak([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (character.LevelBreak + 1 == General.GameplayEquilibriumConstant.LevelBreakList.Count)
{
return NetworkUtility.JsonSerialize($"该角色已完成全部的突破阶段,无需再突破!");
}
int originalBreak = character.LevelBreak;
if (FunGameService.LevelBreakNeedyList.TryGetValue(originalBreak + 1, out Dictionary<string, int>? needy) && needy != null && needy.Count > 0)
{
foreach (string key in needy.Keys)
{
int needCount = needy[key];
if (key == General.GameplayEquilibriumConstant.InGameMaterial)
{
if (user.Inventory.Materials >= needCount)
{
user.Inventory.Materials -= needCount;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {needCount} 呢,不满足突破条件!");
}
}
else
{
if (needCount > 0)
{
IEnumerable<Item> items = user.Inventory.Items.Where(i => i.Name == key);
if (items.Count() >= needCount)
{
items = items.TakeLast(needCount);
foreach (Item item in items)
{
user.Inventory.Items.Remove(item);
}
}
else
{
return NetworkUtility.JsonSerialize($"你的物品【{key}】数量不足 {needCount} 呢,不满足突破条件!");
}
}
}
}
}
character.OnLevelBreak();
if (originalBreak == character.LevelBreak)
{
return NetworkUtility.JsonSerialize($"突破失败!角色 [ {character} ] 目前突破进度:{character.LevelBreak + 1}/{General.GameplayEquilibriumConstant.LevelBreakList.Count}。" +
$"\r\n该角色下一个等级突破阶段在 {General.GameplayEquilibriumConstant.LevelBreakList.ToArray()[character.LevelBreak + 1]} 级,所需材料:\r\n" + FunGameService.GetLevelBreakNeedy(character.LevelBreak + 1));
}
else
{
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"突破成功!角色 [ {character} ] 目前突破进度:{character.LevelBreak + 1}/{General.GameplayEquilibriumConstant.LevelBreakList.Count}。" +
$"{(character.LevelBreak + 1 == General.GameplayEquilibriumConstant.LevelBreakList.Count ?
"\r\n该角色已完成全部的突破阶段" :
$"\r\n该角色下一个等级突破阶段在 {General.GameplayEquilibriumConstant.LevelBreakList.ToArray()[character.LevelBreak + 1]} 级,所需材料:\r\n" + FunGameService.GetLevelBreakNeedy(character.LevelBreak + 1))}");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("createitem")]
public string CreateItem([FromQuery] long? qq = null, [FromQuery] string? name = null, [FromQuery] int? count = null, [FromQuery] long? target = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
string itemName = name ?? "";
int itemCount = count ?? 0;
long targetid = target ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
string msg = "";
if (user.IsAdmin)
{
PluginConfig pc2 = new("saved", targetid.ToString());
pc2.LoadConfig();
if (pc2.Count > 0)
{
User user2 = FunGameService.GetUser(pc2);
if (itemName == General.GameplayEquilibriumConstant.InGameCurrency)
{
user2.Inventory.Credits += itemCount;
msg = $"已为 [ {user2} ] 生成 {itemCount} {General.GameplayEquilibriumConstant.InGameCurrency}";
}
else if (itemName == General.GameplayEquilibriumConstant.InGameMaterial)
{
user2.Inventory.Materials += itemCount;
msg = $"已为 [ {user2} ] 生成 {itemCount} {General.GameplayEquilibriumConstant.InGameMaterial}";
}
else if (itemName.Contains("魔法卡包"))
{
foreach (string type in ItemSet.QualityTypeNameArray)
{
if (itemName == $"{type}魔法卡包")
{
int success = 0;
for (int i = 0; i < itemCount; i++)
{
Item? item = FunGameService.GenerateMagicCardPack(3, ItemSet.GetQualityTypeFromName(type));
if (item != null)
{
item.User = user2;
user2.Inventory.Items.Add(item);
success++;
}
}
msg = $"已为 [ {user2} ] 成功生成 {success} 个{type}魔法卡包";
break;
}
}
}
else if (itemName.Contains("魔法卡"))
{
foreach (string type in ItemSet.QualityTypeNameArray)
{
if (itemName == $"{type}魔法卡")
{
for (int i = 0; i < itemCount; i++)
{
Item item = FunGameService.GenerateMagicCard(ItemSet.GetQualityTypeFromName(type));
item.User = user2;
user2.Inventory.Items.Add(item);
}
msg = $"已为 [ {user2} ] 生成 {itemCount} 张{type}魔法卡";
break;
}
}
}
else if (FunGameService.AllItems.FirstOrDefault(i => i.Name == itemName) is Item item)
{
for (int i = 0; i < itemCount; i++)
{
Item newItem = item.Copy();
newItem.User = user2;
user2.Inventory.Items.Add(newItem);
}
msg = $"已为 [ {user2} ] 生成 {itemCount} 个 [{ItemSet.GetQualityTypeName(item.QualityType)}|{ItemSet.GetItemTypeName(item.ItemType)}] {item.Name}";
}
else
{
return NetworkUtility.JsonSerialize($"此物品不存在!");
}
pc2.Add("user", user2);
pc2.SaveConfig();
}
else
{
return NetworkUtility.JsonSerialize($"目标 UID 不存在!");
}
}
else
{
return NetworkUtility.JsonSerialize($"你没有权限使用此指令!");
}
return NetworkUtility.JsonSerialize(msg);
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("decomposeitem")]
public string DecomposeItem([FromQuery] long? qq = null, [FromBody] int[]? items = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int[] ids = items ?? [];
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
List<string> msgs = [];
int successCount = 0;
double totalGained = 0;
Dictionary<int, Item> dict = user.Inventory.Items.Select((item, index) => new { item, index })
.Where(x => ids.Contains(x.index) && x.item.Character is null)
.ToDictionary(x => x.index, x => x.item);
foreach (int id in dict.Keys)
{
Item item = dict[id];
if (user.Inventory.Items.Remove(item))
{
double gained = item.QualityType switch
{
QualityType.Gold => 80,
QualityType.Red => 55,
QualityType.Orange => 35,
QualityType.Purple => 20,
QualityType.Blue => 10,
QualityType.Green => 4,
_ => 1
};
totalGained += gained;
successCount++;
}
}
if (successCount > 0)
{
user.Inventory.Materials += totalGained;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
}
return NetworkUtility.JsonSerialize($"分解完毕!分解 {ids.Length} 件,成功 {successCount} 件,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("decomposeitem2")]
public string DecomposeItem2([FromQuery] long? qq = null, [FromQuery] string? name = null, [FromQuery] int? count = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
string itemName = name ?? "";
int useCount = count ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
IEnumerable<Item> items = user.Inventory.Items.Where(i => i.Name == name && i.Character is null);
if (!items.Any())
{
return NetworkUtility.JsonSerialize($"库存中不存在名称为【{name}】的物品!");
}
if (items.Count() >= useCount)
{
items = items.TakeLast(useCount);
List<string> msgs = [];
int successCount = 0;
double totalGained = 0;
foreach (Item item in items)
{
if (user.Inventory.Items.Remove(item))
{
double gained = item.QualityType switch
{
QualityType.Gold => 80,
QualityType.Red => 55,
QualityType.Orange => 35,
QualityType.Purple => 20,
QualityType.Blue => 10,
QualityType.Green => 4,
_ => 1
};
totalGained += gained;
successCount++;
}
}
if (successCount > 0)
{
user.Inventory.Materials += totalGained;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
}
return NetworkUtility.JsonSerialize($"分解完毕!分解 {useCount} 件物品,成功 {successCount} 件,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}");
}
else
{
return NetworkUtility.JsonSerialize("此物品的可分解数量小于你想要分解的数量!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("decomposeitem3")]
public string DecomposeItem3([FromQuery] long? qq = null, [FromQuery] int? q = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int qType = q ?? 0;
if (qType < 0 || qType > (int)QualityType.Gold)
{
return NetworkUtility.JsonSerialize($"品质序号输入错误!");
}
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
string qualityName = ItemSet.GetQualityTypeName((QualityType)qType);
IEnumerable<Item> items = user.Inventory.Items.Where(i => (int)i.QualityType == qType && i.Character is null);
if (!items.Any())
{
return NetworkUtility.JsonSerialize($"库存中{qualityName}物品数量为零!");
}
List<string> msgs = [];
int successCount = 0;
double gained = items.First().QualityType switch
{
QualityType.Gold => 80,
QualityType.Red => 55,
QualityType.Orange => 35,
QualityType.Purple => 20,
QualityType.Blue => 10,
QualityType.Green => 4,
_ => 1
};
foreach (Item item in items)
{
if (user.Inventory.Items.Remove(item))
{
successCount++;
}
}
double totalGained = 0;
if (successCount > 0)
{
totalGained = successCount * gained;
user.Inventory.Materials += totalGained;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
}
return NetworkUtility.JsonSerialize($"分解完毕!成功分解 {successCount} 件{qualityName}物品,得到了 {totalGained} {General.GameplayEquilibriumConstant.InGameMaterial}");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("conflatemagiccardpack")]
public string ConflateMagicCardPack([FromQuery] long? qq = null, [FromBody] int[]? items = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
List<int> itemsIndex = items?.ToList() ?? [];
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Item? item = null;
List<Item> mfks = [];
foreach (int itemIndex in itemsIndex)
{
if (itemIndex > 0 && itemIndex <= user.Inventory.Items.Count)
{
item = user.Inventory.Items.ToList()[itemIndex - 1];
if (item.ItemType == ItemType.MagicCard && item.RemainUseTimes > 0)
{
mfks.Add(item);
}
else
{
return NetworkUtility.JsonSerialize($"此物品不是魔法卡或者使用次数为0{itemIndex}. {item.Name}");
}
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的物品:{itemIndex}");
}
}
if (mfks.Count >= 3)
{
item = FunGameService.ConflateMagicCardPack([mfks[0], mfks[1], mfks[2]]);
if (item != null)
{
item.User = user;
FunGameService.SetSellAndTradeTime(item);
user.Inventory.Items.Add(item);
user.Inventory.Items.Remove(mfks[0]);
user.Inventory.Items.Remove(mfks[1]);
user.Inventory.Items.Remove(mfks[2]);
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"合成魔法卡包成功!获得魔法卡包:\r\n{item.ToStringInventory(true)}");
}
else
{
return NetworkUtility.JsonSerialize($"合成魔法卡包失败!");
}
}
else
{
return NetworkUtility.JsonSerialize($"选用的魔法卡不足 3 张,请重新选择!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("setmain")]
public string SetMain([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
user.Inventory.MainCharacter = character;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"设置主战角色成功:{character}");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("starttraining")]
public string StartTraining([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (user.Inventory.Training.Count > 0)
{
return NetworkUtility.JsonSerialize($"你已经有角色在练级中,请使用【练级结算】指令结束并获取奖励:{user.Inventory.Training.First()}");
}
user.Inventory.Training[character.Id] = DateTime.Now;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"角色 [{character}] 开始练级,请过一段时间后进行【练级结算】,时间越长奖励越丰盛!练级时间最长 1440 分钟24小时超时将无任何收益请及时领取奖励。");
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("stoptraining")]
public string StopTraining([FromQuery] long? qq = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (user.Inventory.Training.Count == 0)
{
return NetworkUtility.JsonSerialize($"你目前没有角色在练级中,请使用【开启练级+角色序号】指令进行练级。");
}
long cid = user.Inventory.Training.Keys.First();
DateTime time = user.Inventory.Training[cid];
DateTime now = DateTime.Now;
Character? character = user.Inventory.Characters.FirstOrDefault(c => c.Id == cid);
if (character != null)
{
user.Inventory.Training.Remove(cid);
TimeSpan diff = now - time;
string msg = FunGameService.GetTrainingInfo(diff, false, out int totalExperience, out int smallBookCount, out int mediumBookCount, out int largeBookCount);
if (totalExperience > 0)
{
character.EXP += totalExperience;
}
for (int i = 0; i < smallBookCount; i++)
{
Item item = new (user);
user.Inventory.Items.Add(item);
}
for (int i = 0; i < mediumBookCount; i++)
{
Item item = new (user);
user.Inventory.Items.Add(item);
}
for (int i = 0; i < largeBookCount; i++)
{
Item item = new (user);
user.Inventory.Items.Add(item);
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 练级结束,{msg}");
}
else
{
return NetworkUtility.JsonSerialize($"你目前没有角色在练级中,也可能是库存信息获取异常,请稍后再试。");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("gettraininginfo")]
public string GetTrainingInfo([FromQuery] long? qq = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (user.Inventory.Training.Count == 0)
{
return NetworkUtility.JsonSerialize($"你目前没有角色在练级中,请使用【开启练级+角色序号】指令进行练级。");
}
long cid = user.Inventory.Training.Keys.First();
DateTime time = user.Inventory.Training[cid];
DateTime now = DateTime.Now;
Character? character = user.Inventory.Characters.FirstOrDefault(c => c.Id == cid);
if (character != null)
{
TimeSpan diff = now - time;
string msg = FunGameService.GetTrainingInfo(diff, true, out int totalExperience, out int smallBookCount, out int mediumBookCount, out int largeBookCount);
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 正在练级中,{msg}\r\n确认无误后请输入【练级结算】领取奖励");
}
else
{
return NetworkUtility.JsonSerialize($"你目前没有角色在练级中,也可能是库存信息获取异常,请稍后再试。");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("getskilllevelupneedy")]
public string GetSkillLevelUpNeedy([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] string? s = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
string skillName = s ?? "";
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (character.Skills.FirstOrDefault(s => s.Name == skillName) is Skill skill)
{
if (skill.SkillType == SkillType.Skill || skill.SkillType == SkillType.SuperSkill)
{
if (skill.Level + 1 == General.GameplayEquilibriumConstant.MaxSkillLevel)
{
return NetworkUtility.JsonSerialize($"此技能【{skill.Name}】已经升至满级!");
}
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{skill.Name}】技能等级:{skill.Level} / {General.GameplayEquilibriumConstant.MaxSkillLevel}" +
$"\r\n下一级所需升级材料\r\n" + FunGameService.GetSkillLevelUpNeedy(skill.Level + 1));
}
return NetworkUtility.JsonSerialize($"此技能无法升级!");
}
else
{
return NetworkUtility.JsonSerialize($"此角色没有【{skillName}】技能!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("skilllevelup")]
public string SkillLevelUp([FromQuery] long? qq = null, [FromQuery] int? c = null, [FromQuery] string? s = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
string skillName = s ?? "";
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (character.Skills.FirstOrDefault(s => s.Name == skillName) is Skill skill)
{
string isStudy = skill.Level == 0 ? "学习" : "升级";
if (skill.SkillType == SkillType.Skill || skill.SkillType == SkillType.SuperSkill)
{
if (skill.Level == General.GameplayEquilibriumConstant.MaxSkillLevel)
{
return NetworkUtility.JsonSerialize($"此技能【{skill.Name}】已经升至满级!");
}
if (FunGameService.SkillLevelUpList.TryGetValue(skill.Level + 1, out Dictionary<string, int>? needy) && needy != null && needy.Count > 0)
{
foreach (string key in needy.Keys)
{
int needCount = needy[key];
if (key == "角色等级")
{
if (character.Level < needCount)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级不足 {needCount} 级,无法{isStudy}此技能!");
}
}
else if (key == "角色突破进度")
{
if (character.LevelBreak < needCount)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级突破进度不足 {needCount} 等阶,无法{isStudy}此技能!");
}
}
else if (key == General.GameplayEquilibriumConstant.InGameCurrency)
{
if (user.Inventory.Credits >= needCount)
{
user.Inventory.Credits -= needCount;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {needCount} 呢,不满足{isStudy}条件!");
}
}
else if (key == General.GameplayEquilibriumConstant.InGameMaterial)
{
if (user.Inventory.Materials >= needCount)
{
user.Inventory.Materials -= needCount;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {needCount} 呢,不满足{isStudy}条件!");
}
}
else
{
if (needCount > 0)
{
IEnumerable<Item> items = user.Inventory.Items.Where(i => i.Name == key);
if (items.Count() >= needCount)
{
items = items.TakeLast(needCount);
foreach (Item item in items)
{
user.Inventory.Items.Remove(item);
}
}
else
{
return NetworkUtility.JsonSerialize($"你的物品【{key}】数量不足 {needCount} 呢,不满足{isStudy}条件!");
}
}
}
}
skill.Level += 1;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
needy.Remove("角色等级");
needy.Remove("角色突破进度");
string msg = $"{isStudy}技能成功!本次消耗:{string.Join("", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{skill.Name}】技能提升至 {skill.Level} 级!";
if (skill.Level == General.GameplayEquilibriumConstant.MaxSkillLevel)
{
msg += $"\r\n此技能已经升至满级恭喜";
}
else
{
msg += $"\r\n下一级所需升级材料\r\n" + FunGameService.GetSkillLevelUpNeedy(skill.Level + 1);
}
return NetworkUtility.JsonSerialize(msg);
}
return NetworkUtility.JsonSerialize($"{isStudy}技能失败!角色 [ {character} ] 的【{skill.Name}】技能当前等级:{skill.Level}/{General.GameplayEquilibriumConstant.MaxSkillLevel}" +
$"\r\n下一级所需升级材料\r\n" + FunGameService.GetSkillLevelUpNeedy(skill.Level + 1));
}
return NetworkUtility.JsonSerialize($"此技能无法{isStudy}");
}
else
{
return NetworkUtility.JsonSerialize($"此角色没有【{skillName}】技能!");
}
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("getnormalattacklevelupneedy")]
public string GetNormalAttackLevelUpNeedy([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
NormalAttack na = character.NormalAttack;
if (na.Level + 1 == General.GameplayEquilibriumConstant.MaxNormalAttackLevel)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】已经升至满级!");
}
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】等级:{na.Level} / {General.GameplayEquilibriumConstant.MaxNormalAttackLevel}" +
$"\r\n下一级所需升级材料\r\n" + FunGameService.GetNormalAttackLevelUpNeedy(na.Level + 1));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
[HttpPost("normalattacklevelup")]
public string NormalAttackLevelUp([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
NormalAttack na = character.NormalAttack;
if (na.Level == General.GameplayEquilibriumConstant.MaxNormalAttackLevel)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 的【{na.Name}】已经升至满级!");
}
if (FunGameService.NormalAttackLevelUpList.TryGetValue(na.Level + 1, out Dictionary<string, int>? needy) && needy != null && needy.Count > 0)
{
foreach (string key in needy.Keys)
{
int needCount = needy[key];
if (key == "角色等级")
{
if (character.Level < needCount)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级不足 {needCount} 级,无法升级此技能!");
}
}
else if (key == "角色突破进度")
{
if (character.LevelBreak < needCount)
{
return NetworkUtility.JsonSerialize($"角色 [ {character} ] 等级突破进度不足 {needCount} 等阶,无法升级此技能!");
}
}
else if (key == General.GameplayEquilibriumConstant.InGameCurrency)
{
if (user.Inventory.Credits >= needCount)
{
user.Inventory.Credits -= needCount;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameCurrency}不足 {needCount} 呢,不满足升级条件!");
}
}
else if (key == General.GameplayEquilibriumConstant.InGameMaterial)
{
if (user.Inventory.Materials >= needCount)
{
user.Inventory.Materials -= needCount;
}
else
{
return NetworkUtility.JsonSerialize($"你的{General.GameplayEquilibriumConstant.InGameMaterial}不足 {needCount} 呢,不满足升级条件!");
}
}
else
{
if (needCount > 0)
{
IEnumerable<Item> items = user.Inventory.Items.Where(i => i.Name == key);
if (items.Count() >= needCount)
{
items = items.TakeLast(needCount);
foreach (Item item in items)
{
user.Inventory.Items.Remove(item);
}
}
else
{
return NetworkUtility.JsonSerialize($"你的物品【{key}】数量不足 {needCount} 呢,不满足升级条件!");
}
}
}
}
na.Level += 1;
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
needy.Remove("角色等级");
needy.Remove("角色突破进度");
string msg = $"角色 [ {character} ] 升级【{na.Name}】成功!本次消耗:{string.Join("", needy.Select(kv => kv.Key + " * " + kv.Value))},成功将【{na.Name}】提升至 {na.Level} 级!";
if (na.Level == General.GameplayEquilibriumConstant.MaxNormalAttackLevel)
{
msg += $"\r\n{na.Name}已经升至满级,恭喜!";
}
else
{
msg += $"\r\n下一级所需升级材料\r\n" + FunGameService.GetNormalAttackLevelUpNeedy(na.Level + 1);
}
return NetworkUtility.JsonSerialize(msg);
}
return NetworkUtility.JsonSerialize($"升级{na.Name}失败!角色 [ {character} ] 的【{na.Name}】当前等级:{na.Level}/{General.GameplayEquilibriumConstant.MaxNormalAttackLevel}" +
$"\r\n下一级所需升级材料\r\n" + FunGameService.GetSkillLevelUpNeedy(na.Level + 1));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpGet("getboss")]
public List<string> GetBoss([FromQuery] int? index = null)
{
List<string> bosses = [];
if (index != null)
{
if (FunGameService.Bosses.Values.FirstOrDefault(kv => kv.Id == index) is Character boss)
{
bosses.Add(boss.GetInfo(false));
}
else
{
bosses.Add($"找不到指定编号的 Boss");
}
}
else if (FunGameService.Bosses.Count > 0)
{
bosses.Add($"Boss 列表:");
foreach (int i in FunGameService.Bosses.Keys)
{
Character boss = FunGameService.Bosses[i];
bosses.Add($"{i}. {boss.ToStringWithLevelWithOutUser()}");
}
}
else
{
bosses.Add($"现在没有任何 Boss请等待刷新~");
}
return bosses;
}
[HttpPost("fightboss")]
public List<string> FightBoss([FromQuery] long? qq = null, [FromQuery] int? index = null, [FromQuery] bool? all = null)
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int bossIndex = index ?? 0;
bool showAllRound = all ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (FunGameService.Bosses.Values.FirstOrDefault(kv => kv.Id == index) is Character boss)
{
if (user.Inventory.MainCharacter.HP < user.Inventory.MainCharacter.MaxHP * 0.1)
{
return [$"主战角色重伤未愈,当前生命值低于 10%,请先等待生命值自动回复或设置其他主战角色!"];
}
Character boss2 = CharacterBuilder.Build(boss, false, true, null, FunGameService.AllItems, FunGameService.AllSkills, false);
List<string> msgs = FunGameActionQueue.StartGame([user.Inventory.MainCharacter, boss2], false, false, false, false, showAllRound);
if (boss2.HP <= 0)
{
FunGameService.Bosses.Remove(bossIndex);
double gained = boss.Level;
user.Inventory.Materials += gained;
msgs.Add($"恭喜你击败了 Boss获得 {gained} 材料奖励!");
}
else
{
boss.HP = boss2.HP;
boss.MP = boss2.MP;
boss.EP = boss2.EP;
msgs.Add($"挑战 Boss 失败,请稍后再来!");
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return msgs;
}
else
{
return [$"找不到指定编号的 Boss"];
}
}
else
{
return [noSaved];
}
}
[HttpPost("addsquad")]
public string AddSquad([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (user.Inventory.Squad.Count >= 4)
{
return NetworkUtility.JsonSerialize($"小队人数已满 4 人,无法继续添加角色!当前小队角色如下:\r\n" +
string.Join("\r\n", user.Inventory.Characters.Where(c => user.Inventory.Squad.Contains(c.Id))));
}
if (user.Inventory.Squad.Contains(character.Id))
{
return NetworkUtility.JsonSerialize($"此角色已经在小队中了!");
}
user.Inventory.Squad.Add(character.Id);
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"添加小队角色成功:{character}\r\n当前小队角色如下\r\n" +
string.Join("\r\n", user.Inventory.Characters.Where(c => user.Inventory.Squad.Contains(c.Id))));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("removesquad")]
public string RemoveSquad([FromQuery] long? qq = null, [FromQuery] int? c = null)
{
try
{
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int characterIndex = c ?? 0;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
Character? character = null;
if (characterIndex > 0 && characterIndex <= user.Inventory.Characters.Count)
{
character = user.Inventory.Characters.ToList()[characterIndex - 1];
}
else
{
return NetworkUtility.JsonSerialize($"没有找到与这个序号相对应的角色!");
}
if (!user.Inventory.Squad.Contains(character.Id))
{
return NetworkUtility.JsonSerialize($"此角色不在小队中!");
}
user.Inventory.Squad.Remove(character.Id);
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return NetworkUtility.JsonSerialize($"移除小队角色成功:{character}\r\n当前小队角色如下\r\n" +
string.Join("\r\n", user.Inventory.Characters.Where(c => user.Inventory.Squad.Contains(c.Id))));
}
else
{
return NetworkUtility.JsonSerialize(noSaved);
}
}
catch (Exception e)
{
return NetworkUtility.JsonSerialize(e.ToString());
}
}
[HttpPost("fightbossteam")]
public List<string> FightBossTeam([FromQuery] long? qq = null, [FromQuery] int? index = null, [FromQuery] bool? all = null)
{
return [];
long userid = qq ?? Convert.ToInt64("10" + Verification.CreateVerifyCode(VerifyCodeType.NumberVerifyCode, 11));
int bossIndex = index ?? 0;
bool showAllRound = all ?? false;
PluginConfig pc = new("saved", userid.ToString());
pc.LoadConfig();
if (pc.Count > 0)
{
User user = FunGameService.GetUser(pc);
if (FunGameService.Bosses.Values.FirstOrDefault(kv => kv.Id == index) is Character boss)
{
Character[] squad = [.. user.Inventory.Characters.Where(c => user.Inventory.Squad.Contains(c.Id))];
if (squad.All(c => c.HP < c.MaxHP * 0.1))
{
return [$"小队角色均重伤未愈,当前生命值低于 10%,请先等待生命值自动回复或重组小队!",
"当前小队角色如下:",
string.Join("\r\n", user.Inventory.Characters.Where(c => user.Inventory.Squad.Contains(c.Id)))];
}
Character boss2 = CharacterBuilder.Build(boss, false, true, null, FunGameService.AllItems, FunGameService.AllSkills, false);
//List<string> msgs = FunGameActionQueue.StartGameTeam;
List<string> msgs = [];
if (boss2.HP <= 0)
{
FunGameService.Bosses.Remove(bossIndex);
double gained = boss.Level;
user.Inventory.Materials += gained;
msgs.Add($"恭喜你击败了 Boss获得 {gained} 材料奖励!");
}
else
{
boss.HP = boss2.HP;
boss.MP = boss2.MP;
boss.EP = boss2.EP;
msgs.Add($"挑战 Boss 失败,请稍后再来!");
}
user.LastTime = DateTime.Now;
pc.Add("user", user);
pc.SaveConfig();
return msgs;
}
else
{
return [$"找不到指定编号的 Boss"];
}
}
else
{
return [noSaved];
}
}
[HttpGet("reload")]
public string Relaod([FromQuery] long? master = null)
{
if (master != null && master == GeneralSettings.Master)
{
FunGameService.Reload();
FunGameActionQueue.InitFunGameActionQueue();
return NetworkUtility.JsonSerialize("FunGame已重新加载。");
}
return NetworkUtility.JsonSerialize("提供的参数不正确。");
}
[HttpPost("post")]
public string PostName([FromBody] string name)
{
return NetworkUtility.JsonSerialize($"Your Name received successfully: {name}.");
}
[HttpPost("bind")]
public string Post([FromBody] BindQQ b)
{
return NetworkUtility.JsonSerialize("绑定失败,请稍后再试。");
}
}
}