Refactor Command & Format Code

This commit is contained in:
Somebody
2024-08-25 20:25:52 +08:00
parent dd2d640bd6
commit e2e0939cca
46 changed files with 504 additions and 509 deletions

View File

@@ -11,7 +11,7 @@ public class CommandAccount : ICommand
{
if (arg.Args.Count < 2)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -21,30 +21,30 @@ public class CommandAccount : ICommand
if (arg.Args.Count > 2)
if (!int.TryParse(arg.Args[2], out uid))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Account.InvalidUid"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Account.InvalidUid"));
return;
}
if (AccountData.GetAccountByUserName(account) != null)
{
await arg.SendMsg(string.Format(I18nManager.Translate("Game.Command.Account.DuplicateAccount"), account));
await arg.SendMsg(string.Format(I18NManager.Translate("Game.Command.Account.DuplicateAccount"), account));
return;
}
if (uid != 0 && AccountData.GetAccountByUid(uid) != null)
{
await arg.SendMsg(string.Format(I18nManager.Translate("Game.Command.Account.DuplicateUID"), uid));
await arg.SendMsg(string.Format(I18NManager.Translate("Game.Command.Account.DuplicateUID"), uid));
return;
}
try
{
AccountHelper.CreateAccount(account, uid);
await arg.SendMsg(I18nManager.Translate("Game.Command.Account.CreateSuccess", account));
await arg.SendMsg(I18NManager.Translate("Game.Command.Account.CreateSuccess", account));
}
catch (Exception ex)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Account.CreateError", ex.Message));
await arg.SendMsg(I18NManager.Translate("Game.Command.Account.CreateError", ex.Message));
}
}
}

View File

@@ -7,7 +7,7 @@ using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("avatar", "Game.Command.Avatar.Desc", "Game.Command.Avatar.Usage")]
[CommandInfo("avatar", "Game.Command.Avatar.Desc", "Game.Command.Avatar.Usage", ["av", "ava"])]
public class CommandAvatar : ICommand
{
[CommandMethod("talent")]
@@ -15,23 +15,23 @@ public class CommandAvatar : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 2)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
// change basic type
var avatarId = arg.GetInt(0);
var level = arg.GetInt(1);
if (level < 0 || level > 10)
if (level is < 0 or > 10)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.InvalidLevel",
I18nManager.Translate("Word.Talent")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.InvalidLevel",
I18NManager.Translate("Word.Talent")));
return;
}
@@ -55,8 +55,8 @@ public class CommandAvatar : ICommand
});
}
});
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18nManager.Translate("Word.Talent"), level.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18NManager.Translate("Word.Talent"), level.ToString()));
// sync
await player.SendPacket(new PacketPlayerSyncScNotify(player.AvatarManager.AvatarData.Avatars));
@@ -67,7 +67,7 @@ public class CommandAvatar : ICommand
var avatar = player.AvatarManager!.GetAvatar(avatarId);
if (avatar == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarNotFound"));
return;
}
@@ -79,9 +79,9 @@ public class CommandAvatar : ICommand
// sync
await player.SendPacket(new PacketPlayerSyncScNotify(avatar));
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarLevelSet",
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarLevelSet",
avatar.Excel?.Name?.Replace("{NICKNAME}", player.Data.Name) ?? avatarId.ToString(),
I18nManager.Translate("Word.Talent"), level.ToString()));
I18NManager.Translate("Word.Talent"), level.ToString()));
}
[CommandMethod("get")]
@@ -89,22 +89,22 @@ public class CommandAvatar : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1) await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
if (arg.BasicArgs.Count < 1) await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
var id = arg.GetInt(0);
var excel = await arg.Target.Player!.AvatarManager!.AddAvatar(id);
if (excel == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarFailedGet", id.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarFailedGet", id.ToString()));
return;
}
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarGet", excel.Name ?? id.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarGet", excel.Name ?? id.ToString()));
}
[CommandMethod("rank")]
@@ -112,18 +112,18 @@ public class CommandAvatar : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 2) await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
if (arg.BasicArgs.Count < 2) await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
var id = arg.GetInt(0);
var rank = arg.GetInt(1);
if (rank < 0 || rank > 6)
if (rank is < 0 or > 6)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.InvalidLevel",
I18nManager.Translate("Word.Rank")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.InvalidLevel",
I18NManager.Translate("Word.Rank")));
return;
}
@@ -133,8 +133,8 @@ public class CommandAvatar : ICommand
{
foreach (var path in avatar.PathInfoes.Values) path.Rank = Math.Min(rank, 6);
});
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18nManager.Translate("Word.Rank"), rank.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18NManager.Translate("Word.Rank"), rank.ToString()));
// sync
await arg.Target.SendPacket(
@@ -145,7 +145,7 @@ public class CommandAvatar : ICommand
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
if (avatar == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarNotFound"));
return;
}
@@ -154,9 +154,9 @@ public class CommandAvatar : ICommand
// sync
await arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarLevelSet",
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarLevelSet",
avatar.Excel?.Name?.Replace("{NICKNAME}", arg.Target.Player!.Data.Name) ?? id.ToString(),
I18nManager.Translate("Word.Rank"), rank.ToString()));
I18NManager.Translate("Word.Rank"), rank.ToString()));
}
}
@@ -165,22 +165,22 @@ public class CommandAvatar : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 2)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
var id = arg.GetInt(0);
var level = arg.GetInt(1);
if (level < 1 || level > 80)
if (level is < 1 or > 80)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.InvalidLevel",
I18nManager.Translate("Word.Avatar")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.InvalidLevel",
I18NManager.Translate("Word.Avatar")));
return;
}
@@ -191,8 +191,8 @@ public class CommandAvatar : ICommand
avatar.Level = Math.Min(level, 80);
avatar.Promotion = GameData.GetMinPromotionForLevel(avatar.Level);
});
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18nManager.Translate("Word.Avatar"), level.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AllAvatarsLevelSet",
I18NManager.Translate("Word.Avatar"), level.ToString()));
// sync
await arg.Target.SendPacket(
@@ -203,7 +203,7 @@ public class CommandAvatar : ICommand
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(id);
if (avatar == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarNotFound"));
return;
}
@@ -213,9 +213,9 @@ public class CommandAvatar : ICommand
// sync
await arg.Target.SendPacket(new PacketPlayerSyncScNotify(avatar));
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarLevelSet",
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarLevelSet",
avatar.Excel?.Name?.Replace("{NICKNAME}", arg.Target.Player!.Data.Name) ?? id.ToString(),
I18nManager.Translate("Word.Avatar"), level.ToString()));
I18NManager.Translate("Word.Avatar"), level.ToString()));
}
}
@@ -224,13 +224,13 @@ public class CommandAvatar : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 2)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -240,13 +240,13 @@ public class CommandAvatar : ICommand
var avatar = arg.Target.Player!.AvatarManager!.GetAvatar(avatarId);
if (avatar == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarNotFound"));
return;
}
if (!GameData.MultiplePathAvatarConfigData.ContainsKey(pathId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Avatar.AvatarNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Avatar.AvatarNotFound"));
return;
}

View File

@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Internationalization;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("give", "Game.Command.Give.Desc", "Game.Command.Give.Usage")]
[CommandInfo("give", "Game.Command.Give.Desc", "Game.Command.Give.Usage", ["g"])]
public class CommandGive : ICommand
{
[CommandDefault]
@@ -12,20 +12,20 @@ public class CommandGive : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
GameData.ItemConfigData.TryGetValue(arg.GetInt(0), out var itemData);
if (itemData == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Give.ItemNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Give.ItemNotFound"));
return;
}
@@ -38,14 +38,14 @@ public class CommandGive : ICommand
if (!int.TryParse(str, out var amount) || !int.TryParse(levelStr, out var level) ||
!int.TryParse(rankStr, out var rank))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
await player.InventoryManager!.AddItem(arg.GetInt(0), amount, rank: Math.Min(rank, 5),
level: Math.Max(Math.Min(level, 80), 1));
await arg.SendMsg(I18nManager.Translate("Game.Command.Give.GiveItem", player.Uid.ToString(), amount.ToString(),
await arg.SendMsg(I18NManager.Translate("Game.Command.Give.GiveItem", player.Uid.ToString(), amount.ToString(),
itemData.Name ?? itemData.ID.ToString()));
}
}

View File

@@ -7,7 +7,7 @@ using EggLink.DanhengServer.Internationalization;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("giveall", "Game.Command.GiveAll.Desc", "Game.Command.GiveAll.Usage")]
[CommandInfo("giveall", "Game.Command.GiveAll.Desc", "Game.Command.GiveAll.Usage", ["ga"])]
public class CommandGiveall : ICommand
{
[CommandMethod("0 avatar")]
@@ -16,7 +16,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -26,7 +26,7 @@ public class CommandGiveall : ICommand
levelStr ??= "1";
if (!int.TryParse(rankStr, out var rank) || !int.TryParse(levelStr, out var level))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -59,8 +59,8 @@ public class CommandGiveall : ICommand
await player.SendPacket(new PacketPlayerSyncScNotify(player.AvatarManager!.AvatarData.Avatars));
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Avatar"), "1"));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Avatar"), "1"));
}
[CommandMethod("0 equipment")]
@@ -69,7 +69,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -82,7 +82,7 @@ public class CommandGiveall : ICommand
if (!int.TryParse(rankStr, out var rank) || !int.TryParse(levelStr, out var level) ||
!int.TryParse(amountStr, out var amount))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -101,8 +101,8 @@ public class CommandGiveall : ICommand
await player.SendPacket(new PacketPlayerSyncScNotify(items));
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Equipment"), amount.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Equipment"), amount.ToString()));
}
[CommandMethod("0 material")]
@@ -111,7 +111,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -119,7 +119,7 @@ public class CommandGiveall : ICommand
amountStr ??= "1";
if (!int.TryParse(amountStr, out var amount))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -134,8 +134,8 @@ public class CommandGiveall : ICommand
});
await player.InventoryManager!.AddItems(items, false);
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Material"), amount.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Material"), amount.ToString()));
}
[CommandMethod("0 relic")]
@@ -144,7 +144,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -152,7 +152,7 @@ public class CommandGiveall : ICommand
levelStr ??= "1";
if (!int.TryParse(levelStr, out var level))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -160,7 +160,7 @@ public class CommandGiveall : ICommand
amountStr ??= "1";
if (!int.TryParse(amountStr, out var amount))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -179,8 +179,8 @@ public class CommandGiveall : ICommand
await player.SendPacket(new PacketPlayerSyncScNotify(items));
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Relic"), amount.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Relic"), amount.ToString()));
}
[CommandMethod("0 unlock")]
@@ -189,7 +189,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -201,8 +201,8 @@ public class CommandGiveall : ICommand
material.ItemSubType == ItemSubTypeEnum.ChatBubble)
await player.InventoryManager!.AddItem(material.ID, 1, false);
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Unlock"), "1"));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Unlock"), "1"));
}
[CommandMethod("0 path")]
@@ -211,7 +211,7 @@ public class CommandGiveall : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -236,8 +236,8 @@ public class CommandGiveall : ICommand
await player.SendPacket(new PacketPlayerSyncScNotify(player.AvatarManager!.AvatarData.Avatars));
await arg.SendMsg(I18nManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18nManager.Translate("Word.Avatar"),
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Avatar"),
"1"));
}
}

View File

@@ -1,8 +1,9 @@
using EggLink.DanhengServer.Internationalization;
using EggLink.DanhengServer.Util;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("help", "Game.Command.Help.Desc", "Game.Command.Help.Usage")]
[CommandInfo("help", "Game.Command.Help.Desc", "Game.Command.Help.Usage", ["h"])]
public class CommandHelp : ICommand
{
[CommandDefault]
@@ -14,28 +15,35 @@ public class CommandHelp : ICommand
var cmd = arg.Args[0];
if (commands == null || !commands.TryGetValue(cmd, out var command))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Help.CommandNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Help.CommandNotFound"));
return;
}
var msg =
$"/{command.Name} - {I18nManager.Translate(command.Description)}\n\n{I18nManager.Translate(command.Usage)}";
$"/{command.Name} - {I18NManager.Translate(command.Description)}\n\n{I18NManager.Translate(command.Usage)}";
if (command.Alias.Length > 0)
msg +=
$"\n\n{I18NManager.Translate("Game.Command.Help.CommandAlias")} {command.Alias.ToList().ToArrayString()}";
if (command.Permission != "")
msg += $"\n\n{I18nManager.Translate("Game.Command.Help.CommandPermission")} {command.Permission}";
msg += $"\n\n{I18NManager.Translate("Game.Command.Help.CommandPermission")} {command.Permission}";
await arg.SendMsg(msg);
return;
}
await arg.SendMsg(I18nManager.Translate("Game.Command.Help.Commands"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Help.Commands"));
if (commands == null) return;
foreach (var command in commands.Values)
{
var msg =
$"/{command.Name} - {I18nManager.Translate(command.Description)}\n\n{I18nManager.Translate(command.Usage)}";
$"/{command.Name} - {I18NManager.Translate(command.Description)}\n\n{I18NManager.Translate(command.Usage)}";
if (command.Alias.Length > 0)
msg +=
$"\n\n{I18NManager.Translate("Game.Command.Help.CommandAlias")} {command.Alias.ToList().ToArrayString()}";
if (command.Permission != "")
msg += $"\n\n{I18nManager.Translate("Game.Command.Help.CommandPermission")} {command.Permission}";
msg += $"\n\n{I18NManager.Translate("Game.Command.Help.CommandPermission")} {command.Permission}";
await arg.SendMsg(msg);
}
}

View File

@@ -13,20 +13,20 @@ public class CommandHero : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
var gender = (Gender)arg.GetInt(0);
if (gender == Gender.None)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Hero.GenderNotSpecified"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Hero.GenderNotSpecified"));
return;
}
@@ -35,7 +35,7 @@ public class CommandHero : ICommand
await player.ChangeAvatarPathType(8001, MultiPathAvatarTypeEnum.Warrior);
await player.SendPacket(new PacketGetMultiPathAvatarInfoScRsp(player));
await arg.SendMsg(I18nManager.Translate("Game.Command.Hero.GenderChanged"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Hero.GenderChanged"));
}
[CommandMethod("0 type")]
@@ -43,26 +43,26 @@ public class CommandHero : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
var gender = (MultiPathAvatarTypeEnum)arg.GetInt(0);
if (gender == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Hero.HeroTypeNotSpecified"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Hero.HeroTypeNotSpecified"));
return;
}
var player = arg.Target!.Player!;
await player.ChangeAvatarPathType(8001, gender);
await arg.SendMsg(I18nManager.Translate("Game.Command.Hero.HeroTypeChanged"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Hero.HeroTypeChanged"));
}
}

View File

@@ -11,12 +11,12 @@ public class CommandKick : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
await arg.Target.SendPacket(new PacketPlayerKickOutScNotify());
await arg.SendMsg(I18nManager.Translate("Game.Command.Kick.PlayerKicked", arg.Target.Player!.Data.Name!));
await arg.SendMsg(I18NManager.Translate("Game.Command.Kick.PlayerKicked", arg.Target.Player!.Data.Name!));
arg.Target.Stop();
}
}

View File

@@ -11,13 +11,13 @@ public class CommandLineup : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var count = arg.GetInt(0);
await arg.Target.Player!.LineupManager!.GainMp(count == 0 ? 2 : count);
await arg.SendMsg(I18nManager.Translate("Game.Command.Lineup.PlayerGainedMp", Math.Min(count, 2).ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Lineup.PlayerGainedMp", count.ToString()));
}
[CommandMethod("0 heal")]
@@ -25,13 +25,13 @@ public class CommandLineup : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var player = arg.Target.Player!;
foreach (var avatar in player.LineupManager!.GetCurLineup()!.AvatarData!.Avatars) avatar.CurrentHp = 10000;
await player.SendPacket(new PacketSyncLineupNotify(player.LineupManager.GetCurLineup()!));
await arg.SendMsg(I18nManager.Translate("Game.Command.Lineup.HealedAllAvatars"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Lineup.HealedAllAvatars"));
}
}

View File

@@ -2,7 +2,7 @@
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("mail", "Game.Command.Mail.Desc", "Game.Command.Mail.Usage", permission: "")]
[CommandInfo("mail", "Game.Command.Mail.Desc", "Game.Command.Mail.Usage", permission: "egglink.manage")]
public class CommandMail : ICommand
{
[CommandDefault]
@@ -10,19 +10,19 @@ public class CommandMail : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.Args.Count < 7)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!(arg.Args.Contains("_TITLE") && arg.Args.Contains("_CONTENT")))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -37,16 +37,14 @@ public class CommandMail : ICommand
var flagContent = false;
foreach (var text in arg.Args)
{
if (text == "_TITLE")
switch (text)
{
flagTitle = true;
continue;
}
if (text == "_CONTENT")
{
flagContent = true;
continue;
case "_TITLE":
flagTitle = true;
continue;
case "_CONTENT":
flagContent = true;
continue;
}
if (flagTitle && !flagContent) title += text + " ";
@@ -60,6 +58,6 @@ public class CommandMail : ICommand
await arg.Target.Player!.MailManager!.SendMail(sender, title, content, templateId, expiredDay);
await arg.SendMsg(I18nManager.Translate("Game.Command.Mail.MailSent"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mail.MailSent"));
}
}

View File

@@ -4,7 +4,7 @@ using EggLink.DanhengServer.Internationalization;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("mission", "Game.Command.Mission.Desc", "Game.Command.Mission.Usage")]
[CommandInfo("mission", "Game.Command.Mission.Desc", "Game.Command.Mission.Usage", ["m"])]
public class CommandMission : ICommand
{
[CommandMethod("0 pass")]
@@ -12,14 +12,14 @@ public class CommandMission : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var mission = arg.Target!.Player!.MissionManager!;
var count = mission.GetRunningSubMissionIdList().Count;
foreach (var id in mission.GetRunningSubMissionIdList()) await mission.FinishSubMission(id);
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.AllRunningMissionsFinished", count.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.AllRunningMissionsFinished", count.ToString()));
}
[CommandMethod("0 finish")]
@@ -27,25 +27,25 @@ public class CommandMission : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var missionId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.InvalidMissionId"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId"));
return;
}
var mission = arg.Target!.Player!.MissionManager!;
await mission.FinishSubMission(missionId);
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.MissionFinished", missionId.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.MissionFinished", missionId.ToString()));
}
[CommandMethod("0 running")]
@@ -53,7 +53,7 @@ public class CommandMission : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -61,11 +61,11 @@ public class CommandMission : ICommand
var runningMissions = mission.GetRunningSubMissionList();
if (runningMissions.Count == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.NoRunningMissions"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.NoRunningMissions"));
return;
}
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.RunningMissions"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.RunningMissions"));
Dictionary<int, List<int>> missionMap = [];
foreach (var m in runningMissions)
@@ -84,7 +84,7 @@ public class CommandMission : ICommand
foreach (var list in missionMap)
{
await arg.SendMsg($"{I18nManager.Translate("Game.Command.Mission.MainMission")} {list.Key}");
await arg.SendMsg($"{I18NManager.Translate("Game.Command.Mission.MainMission")} {list.Key}");
var sb = new StringBuilder();
foreach (var id in list.Value)
{
@@ -104,7 +104,7 @@ public class CommandMission : ICommand
if (morePossibleStuckIds.Count > 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.PossibleStuckMissions"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.PossibleStuckMissions"));
var sb = new StringBuilder();
foreach (var id in morePossibleStuckIds) sb.Append($"{id}、");
@@ -115,7 +115,7 @@ public class CommandMission : ICommand
}
else if (possibleStuckIds.Count > 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.PossibleStuckMissions"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.PossibleStuckMissions"));
var sb = new StringBuilder();
foreach (var id in possibleStuckIds) sb.Append($"{id}、");
@@ -133,25 +133,25 @@ public class CommandMission : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var missionId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.InvalidMissionId"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId"));
return;
}
var mission = arg.Target!.Player!.MissionManager!;
await mission.ReAcceptMainMission(missionId);
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.MissionReAccepted", missionId.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.MissionReAccepted", missionId.ToString()));
}
[CommandMethod("0 finishmain")]
@@ -159,24 +159,24 @@ public class CommandMission : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!int.TryParse(arg.BasicArgs[0], out var missionId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.InvalidMissionId"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.InvalidMissionId"));
return;
}
var mission = arg.Target!.Player!.MissionManager!;
await mission.FinishMainMission(missionId);
await arg.SendMsg(I18nManager.Translate("Game.Command.Mission.MissionFinished", missionId.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Mission.MissionFinished", missionId.ToString()));
}
}

View File

@@ -10,12 +10,12 @@ public class CommandRaid : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
await arg.Target.Player!.RaidManager!.LeaveRaid(false);
await arg.SendMsg(I18nManager.Translate("Game.Command.Raid.Leaved"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Raid.Leaved"));
}
}

View File

@@ -14,13 +14,13 @@ public class CommandRelic : ICommand
var player = arg.Target?.Player;
if (player == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.BasicArgs.Count < 3)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -30,7 +30,7 @@ public class CommandRelic : ICommand
levelStr ??= "1";
if (!int.TryParse(str, out var amount) || !int.TryParse(levelStr, out var level))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -38,7 +38,7 @@ public class CommandRelic : ICommand
GameData.ItemConfigData.TryGetValue(int.Parse(arg.BasicArgs[0]), out var itemConfigExcel);
if (itemConfig == null || itemConfigExcel == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Relic.RelicNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Relic.RelicNotFound"));
return;
}
@@ -46,7 +46,7 @@ public class CommandRelic : ICommand
GameData.RelicMainAffixData.TryGetValue(itemConfig.MainAffixGroup, out var mainAffixConfig);
if (subAffixConfig == null || mainAffixConfig == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Relic.RelicNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Relic.RelicNotFound"));
return;
}
@@ -62,7 +62,7 @@ public class CommandRelic : ICommand
mainAffixId = int.Parse(arg.BasicArgs[1]);
if (!mainAffixConfig.ContainsKey(mainAffixId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Relic.InvalidMainAffixId"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Relic.InvalidMainAffixId"));
return;
}
@@ -77,13 +77,13 @@ public class CommandRelic : ICommand
if (subAffix.Length != 2 || !int.TryParse(subAffix[0], out var subId) ||
!int.TryParse(subAffix[1], out var subLevel))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
if (!subAffixConfig.ContainsKey(subId))
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Relic.InvalidSubAffixId"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Relic.InvalidSubAffixId"));
return;
}
@@ -133,7 +133,7 @@ public class CommandRelic : ICommand
for (var i = 0; i < amount; i++) await player.InventoryManager!.AddItem(itemData, false);
await arg.SendMsg(I18nManager.Translate("Game.Command.Relic.RelicGiven", player.Uid.ToString(),
await arg.SendMsg(I18NManager.Translate("Game.Command.Relic.RelicGiven", player.Uid.ToString(),
amount.ToString(), itemConfigExcel.Name ?? itemData.ItemId.ToString(), itemData.MainAffix.ToString()));
}
}

View File

@@ -13,8 +13,8 @@ public class CommandReload : ICommand
// Reload the banners
GameData.BannersConfig =
ResourceManager.LoadCustomFile<BannersConfig>("Banner", "Banners") ?? new BannersConfig();
await arg.SendMsg(I18nManager.Translate("Game.Command.Reload.ConfigReloaded",
I18nManager.Translate("Word.Banner")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Reload.ConfigReloaded",
I18NManager.Translate("Word.Banner")));
}
[CommandMethod("0 activity")]
@@ -23,7 +23,7 @@ public class CommandReload : ICommand
// Reload the activities
GameData.ActivityConfig = ResourceManager.LoadCustomFile<ActivityConfig>("Activity", "ActivityConfig") ??
new ActivityConfig();
await arg.SendMsg(I18nManager.Translate("Game.Command.Reload.ConfigReloaded",
I18nManager.Translate("Word.Activity")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Reload.ConfigReloaded",
I18NManager.Translate("Word.Activity")));
}
}

View File

@@ -1,11 +1,10 @@
using EggLink.DanhengServer.Data;
using EggLink.DanhengServer.Data.Excel;
using EggLink.DanhengServer.GameServer.Game.Rogue.Scene.Entity;
using EggLink.DanhengServer.Internationalization;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("rogue", "Game.Command.Rogue.Desc", "Game.Command.Rogue.Usage")]
[CommandInfo("rogue", "Game.Command.Rogue.Desc", "Game.Command.Rogue.Usage", ["r"])]
public class CommandRogue : ICommand
{
[CommandMethod("0 money")]
@@ -13,7 +12,7 @@ public class CommandRogue : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -21,12 +20,12 @@ public class CommandRogue : ICommand
var instance = arg.Target.Player!.RogueManager?.GetRogueInstance();
if (instance == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
return;
}
await instance.GainMoney(count);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerGainedMoney", count.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerGainedMoney", count.ToString()));
}
[CommandMethod("0 buff")]
@@ -34,14 +33,14 @@ public class CommandRogue : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var instance = arg.Target.Player!.RogueManager?.GetRogueInstance();
if (instance == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
return;
}
@@ -49,32 +48,28 @@ public class CommandRogue : ICommand
if (id == -1)
{
var buffList = new List<RogueBuffExcel>();
foreach (var buff in GameData.RogueBuffData.Values)
{
if (buff.IsAeonBuff || buff.MazeBuffLevel == 2) continue;
buffList.Add(buff);
}
var buffList = GameData.RogueBuffData.Values.Where(buff => !buff.IsAeonBuff && buff.MazeBuffLevel != 2)
.ToList();
await instance.AddBuffList(buffList);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerGainedAllItems",
I18nManager.Translate("Word.Buff")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerGainedAllItems",
I18NManager.Translate("Word.Buff")));
}
else
{
GameData.RogueMazeBuffData.TryGetValue(id, out var buff);
if (buff == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.ItemNotFound",
I18nManager.Translate("Word.Buff")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.ItemNotFound",
I18NManager.Translate("Word.Buff")));
return;
}
await instance.AddBuff(buff.ID, buff.Lv);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerGainedItem",
I18nManager.Translate("Word.Buff"), buff.Name ?? id.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerGainedItem",
I18NManager.Translate("Word.Buff"), buff.Name ?? id.ToString()));
}
}
@@ -83,14 +78,14 @@ public class CommandRogue : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var instance = arg.Target.Player!.RogueManager?.GetRogueInstance();
if (instance == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
return;
}
@@ -99,14 +94,14 @@ public class CommandRogue : ICommand
GameData.RogueMiracleData.TryGetValue(id, out var miracle);
if (miracle == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.ItemNotFound",
I18nManager.Translate("Word.Miracle")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.ItemNotFound",
I18NManager.Translate("Word.Miracle")));
return;
}
await instance.AddMiracle(id);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerGainedItem",
I18nManager.Translate("Word.Miracle"), miracle.Name ?? id.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerGainedItem",
I18NManager.Translate("Word.Miracle"), miracle.Name ?? id.ToString()));
}
[CommandMethod("0 enhance")]
@@ -114,14 +109,14 @@ public class CommandRogue : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var instance = arg.Target.Player!.RogueManager?.GetRogueInstance();
if (instance == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerNotInRogue"));
return;
}
@@ -129,21 +124,21 @@ public class CommandRogue : ICommand
if (id == -1)
{
foreach (var enhance in GameData.RogueBuffData.Values) await instance.EnhanceBuff(enhance.MazeBuffID);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerEnhancedAllBuffs"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerEnhancedAllBuffs"));
}
else
{
GameData.RogueMazeBuffData.TryGetValue(id, out var buff);
if (buff == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.ItemNotFound",
I18nManager.Translate("Word.Buff")));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.ItemNotFound",
I18NManager.Translate("Word.Buff")));
return;
}
await instance.EnhanceBuff(buff.ID);
await arg.SendMsg(
I18nManager.Translate("Game.Command.Rogue.PlayerEnhancedBuff", buff.Name ?? id.ToString()));
I18NManager.Translate("Game.Command.Rogue.PlayerEnhancedBuff", buff.Name ?? id.ToString()));
}
}
@@ -152,15 +147,15 @@ public class CommandRogue : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var player = arg.Target.Player!;
foreach (var npc in player.SceneInstance!.Entities.Values)
if (npc is RogueNpc rNpc && rNpc.RogueNpcId > 0)
if (npc is RogueNpc { RogueNpcId: > 0 } rNpc)
await player.SceneInstance!.RemoveEntity(rNpc);
await arg.SendMsg(I18nManager.Translate("Game.Command.Rogue.PlayerUnstuck"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Rogue.PlayerUnstuck"));
}
}

View File

@@ -12,7 +12,7 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -21,7 +21,7 @@ public class CommandScene : ICommand
foreach (var group in scene.Entities)
if (!loadedGroup.Contains(group.Value.GroupID))
loadedGroup.Add(group.Value.GroupID);
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.LoadedGroups", string.Join(", ", loadedGroup)));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.LoadedGroups", string.Join(", ", loadedGroup)));
}
[CommandMethod("0 prop")]
@@ -29,7 +29,7 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -44,12 +44,12 @@ public class CommandScene : ICommand
if (prop == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.PropNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.PropNotFound"));
return;
}
await prop.SetState((PropStateEnum)arg.GetInt(2));
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.PropStateChanged", prop.PropInfo.ID.ToString(),
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.PropStateChanged", prop.PropInfo.ID.ToString(),
prop.State.ToString()));
}
@@ -58,7 +58,7 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -66,12 +66,12 @@ public class CommandScene : ICommand
scene.Entities.TryGetValue(arg.GetInt(0), out var entity);
if (entity == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.EntityNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.EntityNotFound"));
return;
}
await scene.RemoveEntity(entity);
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.EntityRemoved", entity.EntityID.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.EntityRemoved", entity.EntityID.ToString()));
}
[CommandMethod("0 unlockall")]
@@ -79,7 +79,7 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -88,7 +88,7 @@ public class CommandScene : ICommand
if (entity is EntityProp prop)
if (prop.Excel.PropStateList.Contains(PropStateEnum.Open))
await prop.SetState(PropStateEnum.Open);
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.AllPropsUnlocked"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.AllPropsUnlocked"));
}
[CommandMethod("0 change")]
@@ -96,19 +96,19 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.GetInt(0) == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
var player = arg.Target!.Player!;
await player.EnterScene(arg.GetInt(0), 0, true);
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.SceneChanged", arg.GetInt(0).ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.SceneChanged", arg.GetInt(0).ToString()));
}
[CommandMethod("0 reload")]
@@ -116,13 +116,13 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var player = arg.Target!.Player!;
await player.EnterScene(player.Data.EntryId, 0, true);
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.SceneReloaded"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.SceneReloaded"));
}
[CommandMethod("0 reset")]
@@ -130,14 +130,14 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var floorId = arg.GetInt(0);
if (floorId == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -148,7 +148,7 @@ public class CommandScene : ICommand
if (player.SceneData?.FloorSavedData.TryGetValue(floorId, out _) == true)
player.SceneData.FloorSavedData[floorId] = [];
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.SceneReset", floorId.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.SceneReset", floorId.ToString()));
}
[CommandMethod("0 cur")]
@@ -156,11 +156,12 @@ public class CommandScene : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
var player = arg.Target!.Player!;
await arg.SendMsg(I18nManager.Translate("Game.Command.Scene.CurrentScene", player.Data.EntryId.ToString(), player.Data.PlaneId.ToString(), player.Data.FloorId.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.Scene.CurrentScene", player.Data.EntryId.ToString(),
player.Data.PlaneId.ToString(), player.Data.FloorId.ToString()));
}
}

View File

@@ -13,13 +13,13 @@ public class CommandSetlevel : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
if (arg.Args.Count < 1)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -31,6 +31,6 @@ public class CommandSetlevel : ICommand
player.Data.Exp = GameData.GetPlayerExpRequired(level);
await player.SendPacket(new PacketPlayerSyncScNotify(player.ToProto()));
await arg.SendMsg(I18nManager.Translate("Game.Command.Setlevel.SetlevelSuccess"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Setlevel.SetlevelSuccess"));
}
}

View File

@@ -6,7 +6,7 @@ using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.Command.Command.Cmd;
[CommandInfo("unlockall", "Game.Command.UnlockAll.Desc", "Game.Command.UnlockAll.Usage")]
[CommandInfo("unlockall", "Game.Command.UnlockAll.Desc", "Game.Command.UnlockAll.Usage", ["ua"])]
public class CommandUnlockAll : ICommand
{
[CommandMethod("0 mission")]
@@ -14,7 +14,7 @@ public class CommandUnlockAll : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}
@@ -39,7 +39,7 @@ public class CommandUnlockAll : ICommand
player.AvatarManager!.GetHero()!.PathId = 8002;
}
await arg.SendMsg(I18nManager.Translate("Game.Command.UnlockAll.AllMissionsUnlocked"));
await arg.SendMsg(I18NManager.Translate("Game.Command.UnlockAll.AllMissionsUnlocked"));
await arg.Target!.Player!.SendPacket(new PacketPlayerKickOutScNotify());
arg.Target!.Stop();
}

View File

@@ -13,13 +13,13 @@ public class CommandUnstuck : ICommand
{
if (arg.Target != null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Unstuck.PlayerIsOnline"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Unstuck.PlayerIsOnline"));
return;
}
if (arg.BasicArgs.Count == 0)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.InvalidArguments"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.InvalidArguments"));
return;
}
@@ -32,11 +32,11 @@ public class CommandUnstuck : ICommand
playerData.PlaneId = 20001;
playerData.FloorId = 20001001;
playerData.EntryId = 2000101;
await arg.SendMsg(I18nManager.Translate("Game.Command.Unstuck.UnstuckSuccess"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Unstuck.UnstuckSuccess"));
}
else
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Unstuck.UidNotExist"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Unstuck.UidNotExist"));
}
}

View File

@@ -11,7 +11,7 @@ public class CommandWindy : ICommand
{
if (arg.Target == null)
{
await arg.SendMsg(I18nManager.Translate("Game.Command.Notice.PlayerNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.Notice.PlayerNotFound"));
return;
}

View File

@@ -38,10 +38,10 @@ public class CommandArg
if (con != null) Target = con;
CharacterArgs.TryGetValue("@", out var target);
if (target != null)
if (DanhengListener.Connections.Values.ToList()
.Find(item => (item as Connection)?.Player?.Uid.ToString() == target) is Connection connection)
Target = connection;
if (target == null) return;
if (DanhengListener.Connections.Values.ToList()
.Find(item => (item as Connection)?.Player?.Uid.ToString() == target) is Connection connection)
Target = connection;
}
public string Raw { get; }

View File

@@ -15,7 +15,8 @@ public class CommandManager
private int _historyIndex = -1;
public static CommandManager? Instance { get; private set; }
public Dictionary<string, ICommand> Commands { get; } = [];
public Dictionary<string, CommandInfo> CommandInfo { get; } = [];
public Dictionary<string, CommandInfoAttribute> CommandInfo { get; } = [];
public Dictionary<string, string> CommandAlias { get; } = []; // alias -> command
public Logger Logger { get; } = new("CommandManager");
public Connection? Target { get; set; }
@@ -24,20 +25,20 @@ public class CommandManager
Instance = this;
foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
{
var attr = type.GetCustomAttribute<CommandInfo>();
if (attr != null)
{
var instance = Activator.CreateInstance(type);
if (instance is ICommand command)
{
Commands.Add(attr.Name, command);
CommandInfo.Add(attr.Name, attr);
}
}
var attr = type.GetCustomAttribute<CommandInfoAttribute>();
if (attr == null) continue;
var instance = Activator.CreateInstance(type);
if (instance is not ICommand command) continue;
Commands.Add(attr.Name, command);
CommandInfo.Add(attr.Name, attr);
// register alias
foreach (var alias in attr.Alias) // add alias
CommandAlias.Add(alias, attr.Name);
}
Logger.Info(I18nManager.Translate("Server.ServerInfo.RegisterItem", Commands.Count.ToString(),
I18nManager.Translate("Word.Command")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.RegisterItem", Commands.Count.ToString(),
I18NManager.Translate("Word.Command")));
}
public void Start()
@@ -49,7 +50,7 @@ public class CommandManager
if (string.IsNullOrEmpty(input)) continue;
if (input.StartsWith("/")) input = input.Substring(1);
if (input.StartsWith("/")) input = input[1..];
if (_commandHistory.Count >= MaxCommandHistory) _commandHistory.RemoveAt(0);
@@ -59,19 +60,19 @@ public class CommandManager
}
catch
{
Logger.Error(I18nManager.Translate("Game.Command.Notice.InternalError"));
Logger.Error(I18NManager.Translate("Game.Command.Notice.InternalError"));
}
// ReSharper disable once FunctionNeverReturns
}
private string ReadCommand()
{
var input = new List<char>();
ConsoleKeyInfo keyInfo;
AnsiConsole.Markup("[yellow]> [/]");
while (true)
{
keyInfo = Console.ReadKey(true);
var keyInfo = Console.ReadKey(true);
if (keyInfo.Key == ConsoleKey.Enter)
{
@@ -79,46 +80,54 @@ public class CommandManager
break;
}
if (keyInfo.Key == ConsoleKey.Backspace)
switch (keyInfo.Key)
{
if (input.Count > 0)
case ConsoleKey.Backspace:
{
input.RemoveAt(input.Count - 1);
Console.Write("\b \b");
if (input.Count > 0)
{
input.RemoveAt(input.Count - 1);
Console.Write("\b \b");
}
break;
}
}
else if (keyInfo.Key == ConsoleKey.UpArrow)
{
if (_historyIndex > 0)
case ConsoleKey.UpArrow:
{
_historyIndex--;
ReplaceInput(input, _commandHistory[_historyIndex]);
if (_historyIndex > 0)
{
_historyIndex--;
ReplaceInput(input, _commandHistory[_historyIndex]);
}
break;
}
}
else if (keyInfo.Key == ConsoleKey.DownArrow)
{
if (_historyIndex < _commandHistory.Count - 1)
{
case ConsoleKey.DownArrow when _historyIndex < _commandHistory.Count - 1:
_historyIndex++;
ReplaceInput(input, _commandHistory[_historyIndex]);
}
else if (_historyIndex == _commandHistory.Count - 1)
break;
case ConsoleKey.DownArrow:
{
_historyIndex++;
ReplaceInput(input, string.Empty);
if (_historyIndex == _commandHistory.Count - 1)
{
_historyIndex++;
ReplaceInput(input, string.Empty);
}
break;
}
}
else // known issue: Ctrl + (Any Key but C) or other control key will cause display error
{
input.Add(keyInfo.KeyChar);
Console.Write(keyInfo.KeyChar);
// known issue: Ctrl + (Any Key but C) or other control key will cause display error
default:
input.Add(keyInfo.KeyChar);
Console.Write(keyInfo.KeyChar);
break;
}
}
return new string(input.ToArray());
}
private void ReplaceInput(List<char> input, string newText)
private static void ReplaceInput(List<char> input, string newText)
{
while (input.Count > 0)
{
@@ -146,13 +155,13 @@ public class CommandManager
.Find(item => (item as Connection)?.Player?.Uid.ToString() == target) is Connection con)
{
Target = con;
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.TargetFound", target,
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.TargetFound", target,
con.Player!.Data.Name!));
}
else
{
// offline or not exist
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.TargetNotFound", target));
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.TargetNotFound", target));
}
return;
@@ -164,19 +173,22 @@ public class CommandManager
tempTarget = Listener.GetActiveConnection(sender.GetSender());
if (tempTarget == null)
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.TargetNotFound",
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.TargetNotFound",
sender.GetSender().ToString()));
return;
}
}
if (tempTarget != null && !tempTarget.IsOnline)
if (tempTarget is { IsOnline: false })
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.TargetOffline",
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.TargetOffline",
tempTarget.Player!.Uid.ToString(), tempTarget.Player!.Data.Name!));
tempTarget = null;
}
// find the command
if (CommandAlias.TryGetValue(cmd, out var realCmd)) cmd = realCmd;
if (Commands.TryGetValue(cmd, out var command))
{
var split = input.Split(' ').ToList();
@@ -187,81 +199,66 @@ public class CommandManager
// judge permission
if (arg.Target?.Player?.Uid != sender.GetSender() && !sender.HasPermission("command.others"))
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.NoPermission"));
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.NoPermission"));
return;
}
// find the proper method with attribute CommandMethod
// find the proper method with attribute CommandMethodAttribute
var isFound = false;
var info = CommandInfo[cmd];
if (!sender.HasPermission(info.Permission))
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.NoPermission"));
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.NoPermission"));
return;
}
foreach (var method in command.GetType().GetMethods())
{
var attr = method.GetCustomAttribute<CommandMethod>();
if (attr != null)
var attr = method.GetCustomAttribute<CommandMethodAttribute>();
if (attr == null) continue;
var canRun = true;
foreach (var condition in attr.Conditions)
{
var canRun = true;
foreach (var condition in attr.Conditions)
if (split.Count <= condition.Index)
{
if (split.Count <= condition.Index)
{
canRun = false;
break;
}
if (!split[condition.Index].Equals(condition.ShouldBe))
{
canRun = false;
break;
}
}
if (canRun)
{
isFound = true;
method.Invoke(command, [arg]);
canRun = false;
break;
}
if (split[condition.Index].Equals(condition.ShouldBe)) continue;
canRun = false;
break;
}
if (!canRun) continue;
isFound = true;
method.Invoke(command, [arg]);
break;
}
if (!isFound)
if (isFound) return;
// find the default method with attribute CommandDefaultAttribute
foreach (var method in command.GetType().GetMethods())
{
// find the default method with attribute CommandDefault
foreach (var method in command.GetType().GetMethods())
{
var attr = method.GetCustomAttribute<CommandDefault>();
if (attr != null)
{
isFound = true;
method.Invoke(command, [arg]);
break;
}
}
if (!isFound)
{
if (info != null)
sender.SendMsg(I18nManager.Translate(info.Usage));
else
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.CommandNotFound"));
}
var attr = method.GetCustomAttribute<CommandDefaultAttribute>();
if (attr == null) continue;
isFound = true;
method.Invoke(command, [arg]);
break;
}
if (isFound) return;
sender.SendMsg(I18NManager.Translate(info.Usage));
}
else
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.CommandNotFound"));
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.CommandNotFound"));
}
}
catch
{
sender.SendMsg(I18nManager.Translate("Game.Command.Notice.InternalError"));
sender.SendMsg(I18NManager.Translate("Game.Command.Notice.InternalError"));
}
}
}

View File

@@ -1,10 +1,15 @@
namespace EggLink.DanhengServer.Command;
[AttributeUsage(AttributeTargets.Class)]
public class CommandInfo(string name, string description, string usage, string keyword = "", string permission = "")
public class CommandInfoAttribute(
string name,
string description,
string usage,
string keyword = "",
string permission = "")
: Attribute
{
public CommandInfo(string name, string description, string usage, string[] alias, string keyword = "",
public CommandInfoAttribute(string name, string description, string usage, string[] alias, string keyword = "",
string permission = "") : this(name, description, usage, keyword, permission)
{
Alias = alias;
@@ -19,23 +24,23 @@ public class CommandInfo(string name, string description, string usage, string k
}
[AttributeUsage(AttributeTargets.Method)]
public class CommandMethod(CommandCondition conditions) : Attribute
public class CommandMethodAttribute(CommandCondition conditions) : Attribute
{
public CommandMethod(string condition) : this(new CommandCondition())
public CommandMethodAttribute(string condition) : this(new CommandCondition())
{
var index = 0;
var conditions = condition.Split(' ');
foreach (var c in conditions)
if (int.TryParse(c, out var i))
Conditions[index].Index = i;
else if (c is string s) Conditions[index++].ShouldBe = s;
else Conditions[index++].ShouldBe = c;
}
public List<CommandCondition> Conditions { get; } = [conditions];
}
[AttributeUsage(AttributeTargets.Method)]
public class CommandDefault : Attribute
public class CommandDefaultAttribute : Attribute
{
}

View File

@@ -1,5 +1,3 @@
namespace EggLink.DanhengServer.Command;
public interface ICommand
{
}
public interface ICommand;

View File

@@ -17,7 +17,7 @@
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="SQLitePCLRaw.core" Version="2.1.8" />
<PackageReference Include="SQLitePCLRaw.provider.e_sqlite3" Version="2.1.8" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.143" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.167" />
<PackageReference Include="System.Management" Version="8.0.0" />
</ItemGroup>

View File

@@ -32,8 +32,8 @@ public class RogueDialogueBaseConfigInfo
catch (Exception ex)
{
logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
@@ -54,8 +54,8 @@ public class RogueDialogueBaseConfigInfo
catch (Exception ex)
{
logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
}

View File

@@ -15,6 +15,7 @@ public class RogueTournAreaExcel : ExcelResource
[JsonConverter(typeof(StringEnumConverter))]
public RogueTournDifficultyTypeEnum Difficulty { get; set; }
public int ExpScoreID { get; set; }
public int UnlockID { get; set; }
public int AreaID { get; set; }

View File

@@ -10,8 +10,10 @@ public class RogueTournBuffExcel : ExcelResource
public int MazeBuffID { get; set; }
public int MazeBuffLevel { get; set; }
public int RogueBuffType { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public RogueBuffCategoryEnum RogueBuffCategory { get; set; }
public int RogueBuffTag { get; set; }
public bool IsInHandbook { get; set; }

View File

@@ -15,4 +15,4 @@ public class RogueTournDifficultyCompExcel : ExcelResource
{
GameData.RogueTournDifficultyCompData.TryAdd(DifficultyCompID, this);
}
}
}

View File

@@ -7,7 +7,7 @@ namespace EggLink.DanhengServer.Data.Excel;
[ResourceEntity("RogueTournFormula.json")]
public class RogueTournFormulaExcel : ExcelResource
{
public string FormulaIcon{ get; set; }
public string FormulaIcon { get; set; }
public string UltraFormulaIcon { get; set; }
public string FormulaSubIcon { get; set; }
public string FormulaStoryJson { get; set; }
@@ -16,10 +16,12 @@ public class RogueTournFormulaExcel : ExcelResource
[JsonConverter(typeof(StringEnumConverter))]
public RogueTournModeEnum TournMode { get; set; }
public int UnlockDisplayID { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public RogueFormulaCategoryEnum FormulaCategory { get; set; }
public bool IsInHandbook { get; set; }
public int MainBuffTypeID { get; set; }
public int FormulaDisplayID { get; set; }

View File

@@ -213,11 +213,23 @@ public static class GameData
public static Dictionary<int, RogueTournBuffExcel> RogueTournBuffData { get; private set; } = [];
public static Dictionary<int, RogueTournFormulaExcel> RogueTournFormulaData { get; private set; } = [];
public static Dictionary<int, RogueTournBuffGroupExcel> RogueTournBuffGroupData { get; private set; } = [];
public static Dictionary<int, RogueTournHexAvatarBaseTypeExcel> RogueTournHexAvatarBaseTypeData { get; private set; } = [];
public static Dictionary<int, RogueTournHexAvatarBaseTypeExcel> RogueTournHexAvatarBaseTypeData
{
get;
private set;
} = [];
public static Dictionary<int, RogueTournHandBookEventExcel> RogueTournHandBookEventData { get; private set; } = [];
public static Dictionary<int, RogueTournHandbookMiracleExcel> RogueTournHandbookMiracleData { get; private set; } = [];
public static Dictionary<int, RogueTournDifficultyCompExcel> RogueTournDifficultyCompData { get; private set; } = [];
public static Dictionary<int, RogueTournPermanentTalentExcel> RogueTournPermanentTalentData { get; private set; } = [];
public static Dictionary<int, RogueTournHandbookMiracleExcel> RogueTournHandbookMiracleData { get; private set; } =
[];
public static Dictionary<int, RogueTournDifficultyCompExcel> RogueTournDifficultyCompData { get; private set; } =
[];
public static Dictionary<int, RogueTournPermanentTalentExcel> RogueTournPermanentTalentData { get; private set; } =
[];
#endregion

View File

@@ -55,8 +55,8 @@ public class ResourceManager
var file = new FileInfo(path);
if (!file.Exists)
{
Logger.Error(I18nManager.Translate("Server.ServerInfo.FailedToReadItem", fileName,
I18nManager.Translate("Word.NotFound")));
Logger.Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", fileName,
I18NManager.Translate("Word.NotFound")));
continue;
}
@@ -121,11 +121,11 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", fileName,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", fileName,
I18NManager.Translate("Word.Error")), ex);
}
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(), cls.Name));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(), cls.Name));
}
foreach (var cls in resList) cls.AfterAllDone();
@@ -133,16 +133,16 @@ public class ResourceManager
public static void LoadFloorInfo()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.FloorInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.FloorInfo")));
DirectoryInfo directory = new(ConfigManager.Config.Path.ResourcePath + "/Config/LevelOutput/RuntimeFloor/");
var missingGroupInfos = false;
if (!directory.Exists)
{
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.FloorInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.FloorInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/LevelOutput/RuntimeFloor",
I18nManager.Translate("Word.FloorMissingResult")));
I18NManager.Translate("Word.FloorMissingResult")));
return;
}
@@ -160,8 +160,8 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
foreach (var info in GameData.FloorInfoData.Values)
@@ -200,8 +200,8 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
if (info.Groups.Count == 0) missingGroupInfos = true;
@@ -211,25 +211,25 @@ public class ResourceManager
}
if (missingGroupInfos)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.FloorGroupInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.FloorGroupInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/LevelOutput/SharedRuntimeGroup",
I18nManager.Translate("Word.FloorGroupMissingResult")));
I18NManager.Translate("Word.FloorGroupMissingResult")));
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", GameData.FloorInfoData.Count.ToString(),
I18nManager.Translate("Word.FloorInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", GameData.FloorInfoData.Count.ToString(),
I18NManager.Translate("Word.FloorInfo")));
}
public static void LoadMissionInfo()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.MissionInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.MissionInfo")));
DirectoryInfo directory = new(ConfigManager.Config.Path.ResourcePath + "/Config/Level/Mission");
if (!directory.Exists)
{
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.MissionInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.MissionInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/Level/Mission",
I18nManager.Translate("Word.Mission")));
I18NManager.Translate("Word.Mission")));
return;
}
@@ -259,22 +259,22 @@ public class ResourceManager
}
if (missingMissionInfos)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.MissionInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.MissionInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/Level/Mission",
I18nManager.Translate("Word.Mission")));
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.MissionInfo")));
I18NManager.Translate("Word.Mission")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.MissionInfo")));
}
public static T? LoadCustomFile<T>(string filetype, string filename)
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", filetype));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", filetype));
FileInfo file = new(ConfigManager.Config.Path.ConfigPath + $"/{filename}.json");
T? customFile = default;
if (!file.Exists)
{
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing", filetype,
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing", filetype,
$"{ConfigManager.Config.Path.ConfigPath}/{filename}.json", filetype));
return customFile;
}
@@ -295,23 +295,25 @@ public class ResourceManager
switch (customFile)
{
case Dictionary<int, int> d:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", d.Count.ToString(), filetype));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", d.Count.ToString(), filetype));
break;
case Dictionary<int, List<int>> di:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", di.Count.ToString(), filetype));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", di.Count.ToString(), filetype));
break;
case BannersConfig c:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", c.Banners.Count.ToString(), filetype));
Logger.Info(
I18NManager.Translate("Server.ServerInfo.LoadedItems", c.Banners.Count.ToString(), filetype));
break;
case RogueMiracleEffectConfig r:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", r.Miracles.Count.ToString(), filetype));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", r.Miracles.Count.ToString(),
filetype));
break;
case ActivityConfig a:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", a.ScheduleData.Count.ToString(),
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", a.ScheduleData.Count.ToString(),
filetype));
break;
default:
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItem", filetype));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItem", filetype));
break;
}
@@ -320,8 +322,8 @@ public class ResourceManager
public static void LoadMazeSkill()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem",
I18nManager.Translate("Word.MazeSkillInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem",
I18NManager.Translate("Word.MazeSkillInfo")));
var count = 0;
foreach (var adventure in GameData.AdventurePlayerData.Values)
{
@@ -343,24 +345,24 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", adventurePath,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", adventurePath,
I18NManager.Translate("Word.Error")), ex);
}
}
if (count < GameData.AdventurePlayerData.Count)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.MazeSkillInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.MazeSkillInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/Level/AdventureAbility",
I18nManager.Translate("Word.MazeSkill")));
I18NManager.Translate("Word.MazeSkill")));
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.MazeSkillInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.MazeSkillInfo")));
}
public static void LoadDialogueInfo()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.DialogueInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.DialogueInfo")));
var count = 0;
foreach (var dialogue in GameData.RogueNPCData)
{
@@ -383,25 +385,25 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
if (count < GameData.RogueNPCData.Count)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.DialogueInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.DialogueInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/Level/Rogue/Dialogue",
I18nManager.Translate("Word.Dialogue")));
I18NManager.Translate("Word.Dialogue")));
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.DialogueInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.DialogueInfo")));
}
public static void LoadPerformanceInfo()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem",
I18nManager.Translate("Word.PerformanceInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem",
I18NManager.Translate("Word.PerformanceInfo")));
var count = 0;
foreach (var performance in GameData.PerformanceEData.Values)
{
@@ -427,8 +429,8 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
@@ -456,8 +458,8 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
@@ -467,14 +469,14 @@ public class ResourceManager
//Logger.Warn("Performance infos are missing, please check your resources folder: " + ConfigManager.Config.Path.ResourcePath + "/Config/Level/Mission/*/Act. Performances may not work!");
}
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.PerformanceInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.PerformanceInfo")));
}
public static void LoadSubMissionInfo()
{
Logger.Info(
I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.SubMissionInfo")));
I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.SubMissionInfo")));
var count = 0;
foreach (var subMission in GameData.SubMissionData.Values)
{
@@ -496,8 +498,8 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
@@ -506,14 +508,14 @@ public class ResourceManager
//Logger.Warn("Performance infos are missing, please check your resources folder: " + ConfigManager.Config.Path.ResourcePath + "/Config/Level/Mission/*/Act. Performances may not work!");
}
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.SubMissionInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.SubMissionInfo")));
}
public static void LoadRogueChestMapInfo()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem",
I18nManager.Translate("Word.RogueChestMapInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem",
I18NManager.Translate("Word.RogueChestMapInfo")));
var count = 0;
var boardList = new List<RogueDLCChessBoardExcel>();
foreach (var nousMap in GameData.RogueNousChessBoardData.Values) boardList.AddRange(nousMap);
@@ -547,35 +549,35 @@ public class ResourceManager
catch (Exception ex)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18nManager.Translate("Word.Error")), ex);
I18NManager.Translate("Server.ServerInfo.FailedToReadItem", file.Name,
I18NManager.Translate("Word.Error")), ex);
}
}
if (count < boardList.Count)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.RogueChestMapInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.RogueChestMapInfo"),
$"{ConfigManager.Config.Path.ResourcePath}/Config/Gameplays/RogueDLC",
I18nManager.Translate("Word.RogueChestMap")));
I18NManager.Translate("Word.RogueChestMap")));
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.RogueChestMapInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.RogueChestMapInfo")));
}
public static void LoadChessRogueRoomData()
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem",
I18nManager.Translate("Word.ChessRogueRoomInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem",
I18NManager.Translate("Word.ChessRogueRoomInfo")));
var count = 0;
FileInfo file = new(ConfigManager.Config.Path.ConfigPath + "/ChessRogueRoomGen.json");
List<ChessRogueRoomConfig>? customFile;
if (!file.Exists)
{
Logger.Warn(I18nManager.Translate("Server.ServerInfo.ConfigMissing",
I18nManager.Translate("Word.ChessRogueRoomInfo"),
Logger.Warn(I18NManager.Translate("Server.ServerInfo.ConfigMissing",
I18NManager.Translate("Word.ChessRogueRoomInfo"),
$"{ConfigManager.Config.Path.ConfigPath}/ChessRogueRoomGen.json",
I18nManager.Translate("Word.ChessRogueRoom")));
I18NManager.Translate("Word.ChessRogueRoom")));
return;
}
@@ -627,8 +629,8 @@ public class ResourceManager
Logger.Error("Error in reading " + file.Name, ex);
}
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18nManager.Translate("Word.ChessRogueRoomInfo")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadedItems", count.ToString(),
I18NManager.Translate("Word.ChessRogueRoomInfo")));
}
public static void AddRoomToGameData(RogueDLCBlockTypeEnum type, ChessRogueRoomConfig room)

View File

@@ -23,7 +23,7 @@ public class DatabaseHelper
public void Initialize()
{
logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.Database")));
logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Database")));
var config = ConfigManager.Config;
DbType type;
string connectionString;
@@ -271,7 +271,7 @@ public class DatabaseHelper
}
}
logger.Info(I18nManager.Translate("Server.ServerInfo.SaveDatabase",
logger.Info(I18NManager.Translate("Server.ServerInfo.SaveDatabase",
(DateTime.Now - prev).TotalSeconds.ToString()[..4]));
ToSaveUidList.Clear();

View File

@@ -3,7 +3,7 @@ using EggLink.DanhengServer.Util;
namespace EggLink.DanhengServer.Internationalization;
public static class I18nManager
public static class I18NManager
{
public static Logger Logger = new("I18nManager");

View File

@@ -264,6 +264,7 @@ public class HelpTextCHS
public string Usage => "用法:/help\n\n用法/help [命令]";
public string Commands => "命令:";
public string CommandPermission => "所需权限: ";
public string CommandAlias => "命令别名:";
}
/// <summary>

View File

@@ -264,6 +264,7 @@ public class HelpTextCHT
public string Usage => "用法:/help\n\n用法/help [命令]";
public string Commands => "命令:";
public string CommandPermission => "所需權限: ";
public string CommandAlias => "命令彆名:";
}
/// <summary>

View File

@@ -272,6 +272,7 @@ public class HelpTextEN
public string Commands => "Commands:";
public string CommandUsage => "Usage: ";
public string CommandPermission => "Need Permission: ";
public string CommandAlias => "Command Alias";
}
/// <summary>

View File

@@ -52,12 +52,12 @@ public static class Extensions
return DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
public static string ToArrayString(this List<string> list)
public static string ToArrayString<T>(this List<T> list)
{
return list.JoinFormat(", ", "");
}
public static string ToJsonString(this Dictionary<string, string> dic)
public static string ToJsonString<TK, TV>(this Dictionary<TK, TV> dic) where TK : notnull
{
return JsonConvert.SerializeObject(dic);
}

View File

@@ -43,7 +43,7 @@ public class DanhengListener
if (UDPListener == null) return;
KCPTransport = KcpSocketTransport.CreateMultiplexConnection(UDPClient, 1400);
KCPTransport.Start();
Logger.Info(I18nManager.Translate("Server.ServerInfo.ServerRunning", I18nManager.Translate("Word.Game"),
Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerRunning", I18NManager.Translate("Word.Game"),
ConfigManager.Config.GameServer.GetDisplayAddress()));
}

View File

@@ -68,12 +68,12 @@ public class LineupManager : BasePlayerManager
var avatarStorage = DatabaseHelper.Instance?.GetInstance<AvatarData>(avatar.AssistUid);
avatarType = AvatarType.AvatarAssistType;
if (avatarStorage == null) continue;
foreach (var avatarData in avatarStorage.Avatars!)
if (avatarData.AvatarId == avatar.BaseAvatarId)
{
avatarInfo = avatarData;
break;
}
foreach (var avatarData in avatarStorage.Avatars.Where(avatarData =>
avatarData.AvatarId == avatar.BaseAvatarId))
{
avatarInfo = avatarData;
break;
}
}
else
{
@@ -307,10 +307,10 @@ public class LineupManager : BasePlayerManager
LineupInfo lineup;
if (LineupData.CurExtraLineup != -1)
lineup = LineupData.Lineups[LineupData.CurExtraLineup]; // Extra lineup
else if (lineupIndex < 0 || !LineupData.Lineups.ContainsKey(lineupIndex))
else if (lineupIndex < 0 || !LineupData.Lineups.TryGetValue(lineupIndex, out var dataLineup))
return;
else
lineup = LineupData.Lineups[lineupIndex];
lineup = dataLineup;
lineup.BaseAvatars = [];
var index = lineup.LineupType == 0 ? lineupIndex : LineupData.GetCurLineupIndex();
foreach (var avatar in lineupSlotList) await AddAvatar(index, avatar, false);
@@ -330,7 +330,7 @@ public class LineupManager : BasePlayerManager
LineupInfo lineup;
if (LineupData.CurExtraLineup != -1)
lineup = LineupData.Lineups[LineupData.CurExtraLineup]; // Extra lineup
else if (req.Index < 0 || !LineupData.Lineups.ContainsKey((int)req.Index))
else if (!LineupData.Lineups.ContainsKey((int)req.Index))
return;
else
lineup = LineupData.Lineups[(int)req.Index];

View File

@@ -45,11 +45,14 @@ public class RogueTournManager(PlayerInstance player) : BasePlayerManager(player
{
TalentInfoList = new RogueTalentInfoList
{
TalentInfo = { GameData.RogueTournPermanentTalentData.Values.Select(x => new RogueTalentInfo
TalentInfo =
{
TalentId = (uint)x.TalentID,
Status = RogueTalentStatus.Enable
}) }
GameData.RogueTournPermanentTalentData.Values.Select(x => new RogueTalentInfo
{
TalentId = (uint)x.TalentID,
Status = RogueTalentStatus.Enable
})
}
}
};
}
@@ -99,30 +102,18 @@ public class RogueTournManager(PlayerInstance player) : BasePlayerManager(player
};
foreach (var hexAvatar in GameData.RogueTournHexAvatarBaseTypeData.Keys)
{
proto.HandbookAvatarBaseList.Add((uint)hexAvatar);
}
foreach (var buff in GameData.RogueTournBuffData.Values)
{
if (buff.IsInHandbook)
proto.HandbookBuffList.Add((uint)buff.MazeBuffID);
}
foreach (var formulaId in GameData.RogueTournFormulaData.Keys)
{
proto.HandbookFormulaList.Add((uint)formulaId);
}
foreach (var formulaId in GameData.RogueTournFormulaData.Keys) proto.HandbookFormulaList.Add((uint)formulaId);
foreach (var miracleId in GameData.RogueTournHandbookMiracleData.Keys)
{
proto.HandbookMiracleList.Add((uint)miracleId);
}
foreach (var eventId in GameData.RogueTournHandBookEventData.Keys)
{
proto.HandbookEventList.Add((uint)eventId);
}
foreach (var eventId in GameData.RogueTournHandBookEventData.Keys) proto.HandbookEventList.Add((uint)eventId);
return proto;
}

View File

@@ -21,10 +21,10 @@ public class SceneEntityLoader(SceneInstance scene)
if (dimInfo == null) return;
LoadGroups.AddRange(dimInfo.GroupIDList);
foreach (var group in from @group in Scene.FloorInfo?.Groups.Values! where @group.LoadSide != GroupLoadSideEnum.Client where !@group.GroupName.Contains("TrainVisitor") select @group)
{
await LoadGroup(group);
}
foreach (var group in from @group in Scene.FloorInfo?.Groups.Values!
where @group.LoadSide != GroupLoadSideEnum.Client
where !@group.GroupName.Contains("TrainVisitor")
select @group) await LoadGroup(group);
Scene.IsLoaded = true;
}
@@ -39,8 +39,8 @@ public class SceneEntityLoader(SceneInstance scene)
var removeList = new List<IGameEntity>();
var addList = new List<IGameEntity>();
foreach (var group in Scene.FloorInfo!.Groups.Values.Where(group => group.LoadSide != GroupLoadSideEnum.Client).Where(group => !group.GroupName.Contains("TrainVisitor")))
{
foreach (var group in Scene.FloorInfo!.Groups.Values.Where(group => group.LoadSide != GroupLoadSideEnum.Client)
.Where(group => !group.GroupName.Contains("TrainVisitor")))
if (oldGroupId.Contains(group.Id)) // check if it should be unloaded
{
if (group.ForceUnloadCondition.IsTrue(Scene.Player.MissionManager!.Data, false) ||
@@ -75,7 +75,6 @@ public class SceneEntityLoader(SceneInstance scene)
refreshed = groupList != null || refreshed;
addList.AddRange(groupList ?? []);
}
}
if (refreshed && (addList.Count > 0 || removeList.Count > 0))
await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(addList, removeList));
@@ -109,11 +108,9 @@ public class SceneEntityLoader(SceneInstance scene)
break;
}
if (info.SystemUnlockCondition.Operation == OperationEnum.Not && part)
{
result = false;
break;
}
if (info.SystemUnlockCondition.Operation != OperationEnum.Not || !part) continue;
result = false;
break;
}
if (!result) return null;
@@ -142,28 +139,31 @@ public class SceneEntityLoader(SceneInstance scene)
foreach (var npc in info.NPCList)
try
{
if (await LoadNpc(npc, info) is EntityNpc entity) entityList.Add(entity);
if (await LoadNpc(npc, info) is { } entity) entityList.Add(entity);
}
catch
{
// ignored
}
foreach (var monster in info.MonsterList)
try
{
if (await LoadMonster(monster, info) is EntityMonster entity) entityList.Add(entity);
if (await LoadMonster(monster, info) is { } entity) entityList.Add(entity);
}
catch
{
// ignored
}
foreach (var prop in info.PropList)
try
{
if (await LoadProp(prop, info) is EntityProp entity) entityList.Add(entity);
if (await LoadProp(prop, info) is { } entity) entityList.Add(entity);
}
catch
{
// ignored
}
return entityList;
@@ -175,7 +175,7 @@ public class SceneEntityLoader(SceneInstance scene)
if (group == null) return null;
var entities = await LoadGroup(group, true);
if (sendPacket && entities != null && entities.Count > 0)
if (sendPacket && entities is { Count: > 0 })
await Scene.Player.SendPacket(new PacketSceneGroupRefreshScNotify(entities));
return entities;
@@ -252,17 +252,10 @@ public class SceneEntityLoader(SceneInstance scene)
else
{
if (Scene.Excel.PlaneType == PlaneTypeEnum.Raid)
{
prop.State = info.State;
}
else
{
// elevator
if (prop.Excel.PropType == PropTypeEnum.PROP_ELEVATOR)
prop.State = PropStateEnum.Elevator1;
else
prop.State = info.State;
}
prop.State = prop.Excel.PropType == PropTypeEnum.PROP_ELEVATOR ? PropStateEnum.Elevator1 : info.State;
}
if (group.GroupName.Contains("Machine"))
@@ -277,11 +270,9 @@ public class SceneEntityLoader(SceneInstance scene)
if (prop.PropInfo.PropID == 1003)
{
if (prop.PropInfo.MappingInfoID == 2220)
{
await prop.SetState(PropStateEnum.Open);
await Scene.AddEntity(prop, sendPacket);
}
if (prop.PropInfo.MappingInfoID != 2220) return prop;
await prop.SetState(PropStateEnum.Open);
await Scene.AddEntity(prop, sendPacket);
}
else
{

View File

@@ -37,14 +37,4 @@
<Folder Include="Server\Packet\Send\TalkEvent\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="McMaster.NETCore.Plugins" Version="1.4.0" />
<PackageReference Include="McMaster.NETCore.Plugins.Mvc" Version="1.4.0" />
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="SQLitePCLRaw.core" Version="2.1.8" />
<PackageReference Include="SQLitePCLRaw.provider.e_sqlite3" Version="2.1.8" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.143" />
<PackageReference Include="System.Management" Version="8.0.0" />
</ItemGroup>
</Project>

View File

@@ -2,7 +2,6 @@
using EggLink.DanhengServer.GameServer.Plugin.Constructor;
using EggLink.DanhengServer.Internationalization;
using EggLink.DanhengServer.Util;
using McMaster.NETCore.Plugins;
namespace EggLink.DanhengServer.GameServer.Plugin;
@@ -127,7 +126,7 @@ public class PluginManager
{
foreach (var plugin in Plugins.Keys) UnloadPlugin(plugin);
logger.Info(I18nManager.Translate("Server.ServerInfo.UnloadedItems", I18nManager.Translate("Word.Plugin")));
logger.Info(I18NManager.Translate("Server.ServerInfo.UnloadedItems", I18NManager.Translate("Word.Plugin")));
}
#endregion

View File

@@ -151,8 +151,8 @@ public class Connection : DanhengConnection
var packetName = LogMap.GetValueOrDefault(opcode);
if (packetName == null) return false;
var respName = packetName.Replace("Cs", "Sc").Replace("Req", "Rsp"); // Get the response packet name
var respOpcode = LogMap.FirstOrDefault(x => x.Value == respName).Key; // Get the response opcode
var respName = packetName.Replace("Cs", "Sc").Replace("Req", "Rsp"); // Get the response packet name
var respOpcode = LogMap.FirstOrDefault(x => x.Value == respName).Key; // Get the response opcode
// Send Rsp
await SendPacket(respOpcode);

View File

@@ -17,8 +17,8 @@ public static class HandbookGenerator
var textMapPath = config.Path.ResourcePath + "/TextMap/TextMap" + config.ServerOption.Language + ".json";
if (!File.Exists(textMapPath))
{
Logger.GetByClassName().Error(I18nManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath,
I18nManager.Translate("Word.NotFound")));
Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath,
I18NManager.Translate("Word.NotFound")));
return;
}
@@ -26,8 +26,8 @@ public static class HandbookGenerator
if (textMap == null)
{
Logger.GetByClassName().Error(I18nManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath,
I18nManager.Translate("Word.Error")));
Logger.GetByClassName().Error(I18NManager.Translate("Server.ServerInfo.FailedToReadItem", textMapPath,
I18NManager.Translate("Word.Error")));
return;
}
@@ -79,7 +79,7 @@ public static class HandbookGenerator
WriteToFile(builder.ToString());
Logger.GetByClassName()
.Info(I18nManager.Translate("Server.ServerInfo.GeneratedItem", I18nManager.Translate("Word.Handbook")));
.Info(I18NManager.Translate("Server.ServerInfo.GeneratedItem", I18NManager.Translate("Word.Handbook")));
}
public static void GenerateCmd(StringBuilder builder)
@@ -87,7 +87,7 @@ public static class HandbookGenerator
foreach (var cmd in EntryPoint.CommandManager.CommandInfo)
{
builder.Append("\t" + cmd.Key);
var desc = I18nManager.Translate(cmd.Value.Description).Replace("\n", "\n\t\t");
var desc = I18NManager.Translate(cmd.Value.Description).Replace("\n", "\n\t\t");
builder.AppendLine(": " + desc);
}
}

View File

@@ -29,12 +29,12 @@ public class EntryPoint
{
AppDomain.CurrentDomain.ProcessExit += (_, _) =>
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.Shutdown"));
Logger.Info(I18NManager.Translate("Server.ServerInfo.Shutdown"));
PerformCleanup();
};
Console.CancelKeyPress += (_, eventArgs) =>
{
Logger.Info(I18nManager.Translate("Server.ServerInfo.CancelKeyPressed"));
Logger.Info(I18NManager.Translate("Server.ServerInfo.CancelKeyPressed"));
eventArgs.Cancel = true;
Environment.Exit(0);
};
@@ -52,10 +52,10 @@ public class EntryPoint
Logger.SetLogFile(file);
// Starting the server
Logger.Info(I18nManager.Translate("Server.ServerInfo.StartingServer"));
Logger.Info(I18NManager.Translate("Server.ServerInfo.StartingServer"));
// Load the config
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.Config")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Config")));
try
{
ConfigManager.LoadConfig();
@@ -63,27 +63,27 @@ public class EntryPoint
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToLoadItem", I18nManager.Translate("Word.Config")), e);
I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Config")), e);
Console.ReadLine();
return;
}
// Load the language
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.Language")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Language")));
try
{
I18nManager.LoadLanguage();
I18NManager.LoadLanguage();
}
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToLoadItem", I18nManager.Translate("Word.Language")), e);
I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Language")), e);
Console.ReadLine();
return;
}
// Load the game data
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.GameData")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.GameData")));
try
{
ResourceManager.LoadGameData();
@@ -91,7 +91,7 @@ public class EntryPoint
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToLoadItem", I18nManager.Translate("Word.GameData")), e);
I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.GameData")), e);
Console.ReadLine();
return;
}
@@ -108,7 +108,7 @@ public class EntryPoint
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToLoadItem", I18nManager.Translate("Word.Database")), e);
I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Database")), e);
Console.ReadLine();
return;
}
@@ -121,14 +121,14 @@ public class EntryPoint
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToInitializeItem",
I18nManager.Translate("Word.Command")), e);
I18NManager.Translate("Server.ServerInfo.FailedToInitializeItem",
I18NManager.Translate("Word.Command")), e);
Console.ReadLine();
return;
}
// Load the plugins
Logger.Info(I18nManager.Translate("Server.ServerInfo.LoadingItem", I18nManager.Translate("Word.Plugin")));
Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.Plugin")));
try
{
PluginManager.LoadPlugins();
@@ -136,7 +136,7 @@ public class EntryPoint
catch (Exception e)
{
Logger.Error(
I18nManager.Translate("Server.ServerInfo.FailedToLoadItem", I18nManager.Translate("Word.Plugin")), e);
I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.Plugin")), e);
Console.ReadLine();
return;
}
@@ -203,20 +203,20 @@ public class EntryPoint
HandlerManager.Init();
WebProgram.Main([], GetConfig().HttpServer.Port, GetConfig().HttpServer.GetBindDisplayAddress());
Logger.Info(I18nManager.Translate("Server.ServerInfo.ServerRunning", I18nManager.Translate("Word.Dispatch"),
Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerRunning", I18NManager.Translate("Word.Dispatch"),
GetConfig().HttpServer.GetDisplayAddress()));
DanhengListener.BaseConnection = typeof(Connection);
DanhengListener.StartListener();
var elapsed = DateTime.Now - time;
Logger.Info(I18nManager.Translate("Server.ServerInfo.ServerStarted",
Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerStarted",
elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)[..4]));
GenerateLogMap();
if (GetConfig().ServerOption.EnableMission)
Logger.Warn(I18nManager.Translate("Server.ServerInfo.MissionEnabled"));
Logger.Warn(I18NManager.Translate("Server.ServerInfo.MissionEnabled"));
CommandManager.Start();
}