Feature: Some Language will be set automatically

This commit is contained in:
Somebody
2024-08-26 13:05:20 +08:00
parent a9c2c77687
commit 47f181aeac
23 changed files with 77 additions and 109 deletions

View File

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Data;
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.PlayerSync;
using EggLink.DanhengServer.Internationalization;
@@ -27,7 +26,6 @@ public class CommandSetlevel : ICommand
var level = Math.Max(Math.Min(arg.GetInt(0), 70), 1);
player.Data.Level = level;
player.OnLevelChange();
DatabaseHelper.Instance?.UpdateInstance(player.Data);
player.Data.Exp = GameData.GetPlayerExpRequired(level);
await player.SendPacket(new PacketPlayerSyncScNotify(player.ToProto()));

View File

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.Database.Gacha;
using EggLink.DanhengServer.Database.Gacha;
using EggLink.DanhengServer.Enums;
using EggLink.DanhengServer.Proto;
using GachaInfo = EggLink.DanhengServer.Proto.GachaInfo;
@@ -80,8 +79,6 @@ public class BannerConfig
}
}
DatabaseHelper.Instance?.UpdateInstance(data);
return item;
}

View File

@@ -34,14 +34,12 @@ public class AccountData : BaseDatabaseDataHelper
public string GenerateDispatchToken()
{
DispatchToken = Crypto.CreateSessionKey(Uid.ToString());
DatabaseHelper.Instance?.UpdateInstance(this);
return DispatchToken;
}
public string GenerateComboToken()
{
ComboToken = Crypto.CreateSessionKey(Uid.ToString());
DatabaseHelper.Instance?.UpdateInstance(this);
return ComboToken;
}
}

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.Database.Inventory;
using System.Globalization;
using EggLink.DanhengServer.Database.Inventory;
using EggLink.DanhengServer.Database.Quests;
using EggLink.DanhengServer.Internationalization;
using EggLink.DanhengServer.Util;
@@ -109,7 +110,9 @@ public class DatabaseHelper
foreach (var instance in GetAllInstance<MissionData>()!) instance.MoveFromOld();
foreach (var instance in GetAllInstance<InventoryData>()!) UpdateInstance(instance);
foreach (var instance in GetAllInstance<InventoryData>()!)
{
}
}
public void MoveFromSqlite()
@@ -236,14 +239,6 @@ public class DatabaseHelper
.Add((instance as BaseDatabaseDataHelper)!); // add to the map
}
public void UpdateInstance<T>(T instance) where T : class, new()
{
//lock (GetLock((instance as BaseDatabaseDataHelper)!.Uid))
//{
// sqlSugarScope?.Updateable(instance).ExecuteCommand();
//}
}
public void CalcSaveDatabase() // per 5 min
{
if (LastSaveTick + TimeSpan.TicksPerMinute * 5 > DateTime.UtcNow.Ticks) return;
@@ -271,8 +266,9 @@ public class DatabaseHelper
}
}
var t = (DateTime.Now - prev).TotalSeconds;
logger.Info(I18NManager.Translate("Server.ServerInfo.SaveDatabase",
(DateTime.Now - prev).TotalSeconds.ToString()[..4]));
Math.Round(t, 2).ToString(CultureInfo.InvariantCulture)));
ToSaveUidList.Clear();
}

View File

@@ -42,7 +42,7 @@ public class ItemData
{
GameData.RelicConfigData.TryGetValue(ItemId, out var config);
if (config == null) return;
var affixId = GameTools.GetRandomRelicMainAffix(config.MainAffixGroup);
var affixId = UtilTools.GetRandomRelicMainAffix(config.MainAffixGroup);
MainAffix = affixId;
}

View File

@@ -56,8 +56,6 @@ public class LineupInfo
result = true;
}
}
DatabaseHelper.Instance?.UpdateInstance(AvatarData!);
}
return result;
@@ -79,8 +77,6 @@ public class LineupInfo
result = true;
}
}
DatabaseHelper.Instance?.UpdateInstance(AvatarData!);
}
return result;
@@ -101,8 +97,6 @@ public class LineupInfo
result = true;
}
}
DatabaseHelper.Instance?.UpdateInstance(AvatarData!);
}
return result;

View File

@@ -97,8 +97,6 @@ public class MissionData : BaseDatabaseDataHelper
else if (main.Value == MissionPhaseEnum.Accept) RunningMainMissionIds.SafeAdd(main.Key);
MainMissionInfo.Clear();
DatabaseHelper.Instance!.UpdateInstance(this);
}
}

View File

@@ -5,7 +5,7 @@ namespace EggLink.DanhengServer.Util;
public static class ConfigManager
{
public static Logger logger = new("ConfigManager");
public static Logger Logger = new("ConfigManager");
public static ConfigContainer Config { get; private set; } = new();
public static void LoadConfig()
@@ -13,10 +13,22 @@ public static class ConfigManager
var file = new FileInfo("config.json");
if (!file.Exists)
{
logger.Warn("Config file not found, creating a new one");
Config = new ConfigContainer();
Config.MuipServer.AdminKey = Guid.NewGuid().ToString();
logger.Info("Muipserver Admin key: " + Config.MuipServer.AdminKey);
Logger.Warn("Config file not found, creating a new one");
Config = new ConfigContainer
{
MuipServer =
{
AdminKey = Guid.NewGuid().ToString()
},
ServerOption =
{
Language = UtilTools.GetCurrentLanguage()
}
};
Logger.Info("Current Language is " + Config.ServerOption.Language);
Logger.Info("Muipserver Admin key: " + Config.MuipServer.AdminKey);
SaveConfig();
}

View File

@@ -5,8 +5,8 @@ namespace EggLink.DanhengServer.Util;
public class Crypto
{
private static readonly Random secureRandom = new();
public static Logger logger = new("Crypto");
private static readonly Random SecureRandom = new();
public static Logger Logger = new("Crypto");
public static void Xor(byte[] packet, byte[] key)
{
@@ -16,7 +16,7 @@ public class Crypto
}
catch (Exception e)
{
logger.Error("Crypto error.", e);
Logger.Error("Crypto error.", e);
}
}
@@ -24,9 +24,9 @@ public class Crypto
public static string CreateSessionKey(string accountUid)
{
var random = new byte[64];
secureRandom.NextBytes(random);
SecureRandom.NextBytes(random);
var temp = accountUid + "." + DateTime.Now.Ticks + "." + secureRandom;
var temp = accountUid + "." + DateTime.Now.Ticks + "." + SecureRandom;
try
{

View File

@@ -1,18 +0,0 @@
using EggLink.DanhengServer.Data;
namespace EggLink.DanhengServer.Util;
public static class GameTools
{
public static int GetRandomRelicMainAffix(int GroupId)
{
GameData.RelicMainAffixData.TryGetValue(GroupId, out var affixes);
if (affixes == null) return 0;
List<int> affixList = [];
foreach (var affix in affixes.Values)
if (affix.IsAvailable)
affixList.Add(affix.AffixID);
if (affixList.Count == 0) return 0;
return affixList.RandomElement();
}
}

28
Common/Util/UtilTools.cs Normal file
View File

@@ -0,0 +1,28 @@
using System.Globalization;
using EggLink.DanhengServer.Data;
namespace EggLink.DanhengServer.Util;
public static class UtilTools
{
public static int GetRandomRelicMainAffix(int groupId)
{
GameData.RelicMainAffixData.TryGetValue(groupId, out var affixes);
if (affixes == null) return 0;
List<int> affixList = [];
affixList.AddRange(from affix in affixes.Values where affix.IsAvailable select affix.AffixID);
return affixList.Count == 0 ? 0 : affixList.RandomElement();
}
public static string GetCurrentLanguage()
{
var uiCulture = CultureInfo.CurrentUICulture;
return uiCulture.Name switch
{
"zh-CN" => "CHS",
"zh-TW" => "CHT",
"ja-JP" => "JP",
_ => "EN"
};
}
}

View File

@@ -1,6 +1,5 @@
using EggLink.DanhengServer.Data;
using EggLink.DanhengServer.Data.Excel;
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.Database.Inventory;
using EggLink.DanhengServer.GameServer.Game.Battle.Skill;
using EggLink.DanhengServer.GameServer.Game.Player;
@@ -347,7 +346,6 @@ public class BattleManager(PlayerInstance player) : BasePlayerManager(player)
}
}
DatabaseHelper.Instance?.UpdateInstance(Player.AvatarManager!.AvatarData);
await Player.SendPacket(new PacketSyncLineupNotify(lineup));
}

View File

@@ -88,8 +88,6 @@ public class ChessRogueManager(PlayerInstance player) : BasePlayerManager(player
diceData.Surfaces = surfaceId;
}
DatabaseHelper.Instance!.UpdateInstance(ChessRogueNousData);
return diceData;
}
@@ -109,7 +107,6 @@ public class ChessRogueManager(PlayerInstance player) : BasePlayerManager(player
}
diceData.Surfaces[index] = surfaceId;
DatabaseHelper.Instance!.UpdateInstance(ChessRogueNousData);
return diceData;
}
@@ -133,8 +130,6 @@ public class ChessRogueManager(PlayerInstance player) : BasePlayerManager(player
foreach (var d in dice.SurfaceList) diceData.Surfaces[(int)d.Index] = (int)d.SurfaceId;
DatabaseHelper.Instance!.UpdateInstance(ChessRogueNousData);
return diceData;
}

View File

@@ -62,9 +62,6 @@ public class FriendManager(PlayerInstance player) : BasePlayerManager(player)
target.FriendList.Add(Player.Uid);
target.SendApplyList.Remove(Player.Uid);
DatabaseHelper.Instance!.UpdateInstance(FriendData);
DatabaseHelper.Instance!.UpdateInstance(target);
var targetData = PlayerData.GetPlayerByUid(targetUid)!;
var targetPlayer = Listener.GetActiveConnection(targetUid);
if (targetPlayer != null)

View File

@@ -251,7 +251,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
}
if (sync && removedItems.Count > 0) await Player.SendPacket(new PacketPlayerSyncScNotify(removedItems));
DatabaseHelper.Instance?.UpdateInstance(Data);
return removedItems;
}
@@ -486,8 +485,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
var i = (await Player.InventoryManager!.AddItem(item.ItemId, item.Count, false))!;
i.Count = item.Count; // return the all thing
}
DatabaseHelper.Instance!.UpdateInstance(Player.InventoryManager!.Data);
}
return items;
@@ -796,7 +793,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
avatarData.Level = curLevel;
avatarData.Exp = curExp;
DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!);
// leftover
Dictionary<int, ItemData> list = [];
var leftover = exp;
@@ -904,7 +900,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
itemData.Level = curLevel;
itemData.Exp = curExp;
DatabaseHelper.Instance!.UpdateInstance(Data);
// leftover
Dictionary<int, ItemData> list = [];
var leftover = exp;
@@ -989,7 +984,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
await Player.InventoryManager!.RemoveItem(cost.ItemID, cost.ItemNum);
equipmentData.Promotion++;
DatabaseHelper.Instance!.UpdateInstance(Player.InventoryManager.Data);
await Player.SendPacket(new PacketPlayerSyncScNotify(equipmentData));
return true;
@@ -1125,7 +1119,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
var avatarData = Player.AvatarManager!.GetAvatar(baseAvatarId);
if (avatarData == null) return;
avatarData.GetCurPathInfo().Rank++;
DatabaseHelper.Instance!.UpdateInstance(Player.AvatarManager.AvatarData!);
await Player.SendPacket(new PacketPlayerSyncScNotify(avatarData));
}
@@ -1143,7 +1136,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
var itemData = Data.EquipmentItems.Find(x => x.UniqueId == equipmentUniqueId);
if (itemData == null) return;
itemData.Rank += rank;
DatabaseHelper.Instance!.UpdateInstance(Data);
await Player.SendPacket(new PacketPlayerSyncScNotify(itemData));
}

View File

@@ -124,7 +124,6 @@ public class LineupManager : BasePlayerManager
if (GetLineup(lineupIndex)!.BaseAvatars!.Count == 0) return false;
LineupData.CurLineup = lineupIndex;
LineupData.CurExtraLineup = -1;
DatabaseHelper.Instance?.UpdateInstance(LineupData);
Player.SceneInstance?.SyncLineup();
await Player.SendPacket(new PacketSyncLineupNotify(GetCurLineup()!));
@@ -138,7 +137,6 @@ public class LineupManager : BasePlayerManager
{
// reset lineup
LineupData.CurExtraLineup = -1;
DatabaseHelper.Instance?.UpdateInstance(LineupData);
return;
}
@@ -281,7 +279,6 @@ public class LineupManager : BasePlayerManager
else
lineup.BaseAvatars?.RemoveAll(avatar => avatar.BaseAvatarId == avatarId);
LineupData.Lineups[lineupIndex] = lineup;
DatabaseHelper.Instance?.UpdateInstance(LineupData);
if (sendPacket)
{
@@ -354,7 +351,6 @@ public class LineupManager : BasePlayerManager
var curLineup = GetCurLineup()!;
curLineup.Mp -= count;
curLineup.Mp = Math.Min(Math.Max(0, curLineup.Mp), 5);
DatabaseHelper.Instance?.UpdateInstance(LineupData);
await Player.SendPacket(new PacketSceneCastSkillMpUpdateScNotify(castEntityId, curLineup.Mp));
}
@@ -365,7 +361,6 @@ public class LineupManager : BasePlayerManager
var curLineup = GetCurLineup()!;
curLineup.Mp += count;
curLineup.Mp = Math.Min(Math.Max(0, curLineup.Mp), 5);
DatabaseHelper.Instance?.UpdateInstance(LineupData);
if (sendPacket)
await Player.SendPacket(
new PacketSyncLineupNotify(GetCurLineup()!, reason));

View File

@@ -174,7 +174,6 @@ public class MissionManager : BasePlayerManager
Status = MissionStatus.MissionDoing
});
DatabaseHelper.Instance?.UpdateInstance(Data);
if (sendPacket) await Player.SendPacket(new PacketPlayerSyncScNotify(sync));
Player.SceneInstance!.SyncGroupInfo();
if (mission.SubMissionInfo != null)

View File

@@ -8,7 +8,7 @@ namespace EggLink.DanhengServer.GameServer.Plugin;
public class PluginManager
{
private static readonly Logger logger = new("PluginManager");
private static readonly Logger Logger = new("PluginManager");
public static readonly Dictionary<IPlugin, PluginInfo> Plugins = [];
public static readonly Dictionary<IPlugin, List<Type>> PluginAssemblies = [];
@@ -32,8 +32,7 @@ public class PluginManager
Directory.CreateDirectory(ConfigManager.Config.Path.PluginPath);
var plugins = Directory.GetFiles(ConfigManager.Config.Path.PluginPath, "*.dll");
var loaders = new List<PluginLoader>();
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
AppDomain.CurrentDomain.AssemblyResolve += (_, args) =>
{
var assemblyName = new AssemblyName(args.Name).Name + ".dll";
var assemblyPath = Path.Combine(ConfigManager.Config.Path.PluginPath, assemblyName);
@@ -70,18 +69,18 @@ public class PluginManager
var pluginInfo = type.GetCustomAttribute<PluginInfo>();
if (pluginInfo != null)
{
logger.Info(
Logger.Info(
$"Loaded plugin {pluginInfo.Name} v{pluginInfo.Version}: {pluginInfo.Description}");
}
else
{
logger.Info($"Loaded plugin {plugin}: No plugin info");
Logger.Info($"Loaded plugin {plugin}: No plugin info");
continue;
}
if (Plugins.Values.Any(p => p.Name == pluginInfo.Name))
{
logger.Error($"Failed to load plugin {plugin}: Plugin already loaded");
Logger.Error($"Failed to load plugin {plugin}: Plugin already loaded");
continue;
}
@@ -99,25 +98,23 @@ public class PluginManager
}
else
{
logger.Error($"Failed to load plugin {plugin}: Plugin instance is null");
Logger.Error($"Failed to load plugin {plugin}: Plugin instance is null");
}
}
}
catch (Exception ex)
{
logger.Error($"Failed to load plugin {plugin}: {ex.Message}");
Logger.Error($"Failed to load plugin {plugin}: {ex.Message}");
}
}
public static void UnloadPlugin(IPlugin plugin)
{
if (Plugins.TryGetValue(plugin, out var value))
{
plugin.OnUnload();
Plugins.Remove(plugin);
PluginAssemblies.Remove(plugin);
logger.Info($"Unloaded plugin {value.Name}");
}
if (!Plugins.TryGetValue(plugin, out var value)) return;
plugin.OnUnload();
Plugins.Remove(plugin);
PluginAssemblies.Remove(plugin);
Logger.Info($"Unloaded plugin {value.Name}");
}
@@ -125,7 +122,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

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Phone;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Phone;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -13,7 +12,6 @@ public class HandlerSelectChatBubbleCsReq : Handler
var req = SelectChatBubbleCsReq.Parser.ParseFrom(data);
connection.Player!.Data.ChatBubble = (int)req.BubbleId;
DatabaseHelper.Instance!.UpdateInstance(connection.Player!.Data);
await connection.SendPacket(new PacketSelectChatBubbleScRsp(req.BubbleId));
}

View File

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Phone;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Phone;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -13,7 +12,6 @@ public class HandlerSelectPhoneThemeCsReq : Handler
var req = SelectPhoneThemeCsReq.Parser.ParseFrom(data);
connection.Player!.Data.PhoneTheme = (int)req.ThemeId;
DatabaseHelper.Instance!.UpdateInstance(connection.Player!.Data);
await connection.SendPacket(new PacketSelectPhoneThemeScRsp(req.ThemeId));
}

View File

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -15,7 +14,6 @@ public class HandlerUnlockTutorialCsReq : Handler
if (!player.TutorialData!.Tutorials.TryGetValue((int)req.TutorialId, out var _))
{
player.TutorialData!.Tutorials.Add((int)req.TutorialId, TutorialStatus.TutorialUnlock);
DatabaseHelper.Instance?.UpdateInstance(player.TutorialData!);
}
await connection.SendPacket(new PacketUnlockTutorialScRsp(req.TutorialId));

View File

@@ -1,5 +1,4 @@
using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Tutorial;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -15,7 +14,6 @@ public class HandlerUnlockTutorialGuideCsReq : Handler
if (!player.TutorialGuideData!.Tutorials.TryGetValue((int)req.GroupId, out var _))
{
player.TutorialGuideData!.Tutorials.Add((int)req.GroupId, TutorialStatus.TutorialUnlock);
DatabaseHelper.Instance?.UpdateInstance(player.TutorialGuideData!);
}
await connection.SendPacket(new PacketUnlockTutorialGuideScRsp(req.GroupId));

View File

@@ -211,7 +211,7 @@ public class EntryPoint
var elapsed = DateTime.Now - time;
Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerStarted",
elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture)[..4]));
Math.Round(elapsed.TotalSeconds, 2).ToString(CultureInfo.InvariantCulture)));
GenerateLogMap();