diff --git a/Common/Data/ResourceManager.cs b/Common/Data/ResourceManager.cs
index 2129d532..be53a787 100644
--- a/Common/Data/ResourceManager.cs
+++ b/Common/Data/ResourceManager.cs
@@ -16,6 +16,7 @@ namespace EggLink.DanhengServer.Data;
public class ResourceManager
{
public static Logger Logger { get; } = new("ResourceManager");
+ public static bool IsLoaded { get; set; }
public static void LoadGameData()
{
diff --git a/Common/Internationalization/Message/LanguageCHS.cs b/Common/Internationalization/Message/LanguageCHS.cs
index 506ace6b..dc75c665 100644
--- a/Common/Internationalization/Message/LanguageCHS.cs
+++ b/Common/Internationalization/Message/LanguageCHS.cs
@@ -124,6 +124,7 @@ public class CommandTextCHS
///
public class WebTextCHS
{
+ public string Maintain => "服务器正在维修,请稍后尝试。";
}
///
diff --git a/Common/Internationalization/Message/LanguageCHT.cs b/Common/Internationalization/Message/LanguageCHT.cs
index 227433e4..41a973a4 100644
--- a/Common/Internationalization/Message/LanguageCHT.cs
+++ b/Common/Internationalization/Message/LanguageCHT.cs
@@ -124,6 +124,7 @@ public class CommandTextCHT
///
public class WebTextCHT
{
+ public string Maintain => "服务器正在维修,请稍后尝试。";
}
///
diff --git a/Common/Internationalization/Message/LanguageEN.cs b/Common/Internationalization/Message/LanguageEN.cs
index 39f74b9b..feaf09cb 100644
--- a/Common/Internationalization/Message/LanguageEN.cs
+++ b/Common/Internationalization/Message/LanguageEN.cs
@@ -124,6 +124,7 @@ public class CommandTextEN
///
public class WebTextEN
{
+ public string Maintain => "The server is undergoing maintenance, please try again later.";
}
///
diff --git a/GameServer/Server/Packet/Recv/Player/HandlerPlayerGetTokenCsReq.cs b/GameServer/Server/Packet/Recv/Player/HandlerPlayerGetTokenCsReq.cs
index d505f2b2..af4ebb9f 100644
--- a/GameServer/Server/Packet/Recv/Player/HandlerPlayerGetTokenCsReq.cs
+++ b/GameServer/Server/Packet/Recv/Player/HandlerPlayerGetTokenCsReq.cs
@@ -1,4 +1,5 @@
-using EggLink.DanhengServer.Database;
+using EggLink.DanhengServer.Data;
+using EggLink.DanhengServer.Database;
using EggLink.DanhengServer.Database.Account;
using EggLink.DanhengServer.Database.Player;
using EggLink.DanhengServer.GameServer.Game.Player;
@@ -19,8 +20,13 @@ public class HandlerPlayerGetTokenCsReq : Handler
var account = DatabaseHelper.Instance?.GetInstance(int.Parse(req.AccountUid));
if (account == null)
{
- await connection.SendPacket(new PacketPlayerGetTokenScRsp());
- await connection.SendPacket(new PacketPlayerKickOutScNotify());
+ await connection.SendPacket(new PacketPlayerGetTokenScRsp(0, Retcode.RetNotInWhiteList));
+ return;
+ }
+
+ if (!ResourceManager.IsLoaded)
+ {
+ // resource manager not loaded, return
return;
}
@@ -32,13 +38,13 @@ public class HandlerPlayerGetTokenCsReq : Handler
}
connection.State = SessionStateEnum.WAITING_FOR_LOGIN;
+
var pd = DatabaseHelper.Instance?.GetInstance(int.Parse(req.AccountUid));
- if (pd == null)
- connection.Player = new PlayerInstance(int.Parse(req.AccountUid));
- else
- connection.Player = new PlayerInstance(pd);
+ connection.Player = pd == null ? new PlayerInstance(int.Parse(req.AccountUid)) : new PlayerInstance(pd);
+
connection.DebugFile = Path.Combine(ConfigManager.Config.Path.LogPath, "Debug/", $"{req.AccountUid}/",
$"Debug-{DateTime.Now:yyyy-MM-dd HH-mm-ss}.log");
+
await connection.Player.OnGetToken();
connection.Player.Connection = connection;
await connection.SendPacket(new PacketPlayerGetTokenScRsp(connection));
diff --git a/GameServer/Server/Packet/Send/Player/PacketPlayerGetTokenScRsp.cs b/GameServer/Server/Packet/Send/Player/PacketPlayerGetTokenScRsp.cs
index 73259af0..009b2335 100644
--- a/GameServer/Server/Packet/Send/Player/PacketPlayerGetTokenScRsp.cs
+++ b/GameServer/Server/Packet/Send/Player/PacketPlayerGetTokenScRsp.cs
@@ -16,11 +16,14 @@ public class PacketPlayerGetTokenScRsp : BasePacket
SetData(rsp);
}
- public PacketPlayerGetTokenScRsp() : base(CmdIds.PlayerGetTokenScRsp)
+ public PacketPlayerGetTokenScRsp(uint uid, Retcode ret, BlackInfo? black = null, string msg = "") : base(CmdIds.PlayerGetTokenScRsp)
{
var rsp = new PlayerGetTokenScRsp
{
- Retcode = 0
+ Retcode = (uint)ret,
+ BlackInfo = black ?? new BlackInfo(),
+ Msg = msg,
+ Uid = uid
};
SetData(rsp);
diff --git a/GameServer/Server/Packet/Send/Player/PacketPlayerKickOutScNotify.cs b/GameServer/Server/Packet/Send/Player/PacketPlayerKickOutScNotify.cs
index 59cc6294..2de34ac9 100644
--- a/GameServer/Server/Packet/Send/Player/PacketPlayerKickOutScNotify.cs
+++ b/GameServer/Server/Packet/Send/Player/PacketPlayerKickOutScNotify.cs
@@ -13,4 +13,19 @@ public class PacketPlayerKickOutScNotify : BasePacket
};
SetData(proto);
}
+
+ public PacketPlayerKickOutScNotify(KickType type, BlackInfo? info = null) : base(CmdIds.PlayerKickOutScNotify)
+ {
+ var proto = new PlayerKickOutScNotify
+ {
+ KickType = type
+ };
+
+ if (info != null)
+ {
+ proto.BlackInfo = info;
+ }
+
+ SetData(proto);
+ }
}
\ No newline at end of file
diff --git a/Program/Program/EntryPoint.cs b/Program/Program/EntryPoint.cs
index ac49a671..41623a25 100644
--- a/Program/Program/EntryPoint.cs
+++ b/Program/Program/EntryPoint.cs
@@ -82,20 +82,6 @@ public class EntryPoint
return;
}
- // Load the game data
- Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.GameData")));
- try
- {
- ResourceManager.LoadGameData();
- }
- catch (Exception e)
- {
- Logger.Error(
- I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.GameData")), e);
- Console.ReadLine();
- return;
- }
-
// Initialize the database
try
{
@@ -113,6 +99,31 @@ public class EntryPoint
return;
}
+ HandlerManager.Init();
+
+ WebProgram.Main([], GetConfig().HttpServer.Port, GetConfig().HttpServer.GetBindDisplayAddress());
+ Logger.Info(I18NManager.Translate("Server.ServerInfo.ServerRunning", I18NManager.Translate("Word.Dispatch"),
+ GetConfig().HttpServer.GetDisplayAddress()));
+
+ DanhengListener.BaseConnection = typeof(Connection);
+ DanhengListener.StartListener();
+
+ GenerateLogMap();
+
+ // Load the game data
+ Logger.Info(I18NManager.Translate("Server.ServerInfo.LoadingItem", I18NManager.Translate("Word.GameData")));
+ try
+ {
+ ResourceManager.LoadGameData();
+ }
+ catch (Exception e)
+ {
+ Logger.Error(
+ I18NManager.Translate("Server.ServerInfo.FailedToLoadItem", I18NManager.Translate("Word.GameData")), e);
+ Console.ReadLine();
+ return;
+ }
+
// Register the command handlers
try
{
@@ -200,23 +211,15 @@ public class EntryPoint
// generate the handbook
HandbookGenerator.Generate();
- HandlerManager.Init();
-
- WebProgram.Main([], GetConfig().HttpServer.Port, GetConfig().HttpServer.GetBindDisplayAddress());
- 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",
Math.Round(elapsed.TotalSeconds, 2).ToString(CultureInfo.InvariantCulture)));
- GenerateLogMap();
-
if (GetConfig().ServerOption.EnableMission)
Logger.Warn(I18NManager.Translate("Server.ServerInfo.MissionEnabled"));
+
+ ResourceManager.IsLoaded = true;
+
CommandManager.Start();
}
diff --git a/WebServer/Controllers/MuipServerRoutes.cs b/WebServer/Controllers/MuipServerRoutes.cs
index df0b7a9c..8108df79 100644
--- a/WebServer/Controllers/MuipServerRoutes.cs
+++ b/WebServer/Controllers/MuipServerRoutes.cs
@@ -45,6 +45,18 @@ public class MuipServerRoutes
return new JsonResult(resp);
}
+
+ [HttpGet("/server/type")]
+ public IActionResult DanhengVerify()
+ {
+ return new ContentResult
+ {
+ Content =
+ "{\"serverType\": \"DanhengServer\"}",
+ ContentType = "application/json"
+ };
+ }
+
[HttpPost("/muip/server_information")]
public IActionResult GetServerInformationPost([FromBody] ServerInformationRequest req)
{
diff --git a/WebServer/Handler/QueryGatewayHandler.cs b/WebServer/Handler/QueryGatewayHandler.cs
index fd8b1a2e..33dd606a 100644
--- a/WebServer/Handler/QueryGatewayHandler.cs
+++ b/WebServer/Handler/QueryGatewayHandler.cs
@@ -1,4 +1,6 @@
-using EggLink.DanhengServer.Proto;
+using EggLink.DanhengServer.Data;
+using EggLink.DanhengServer.Internationalization;
+using EggLink.DanhengServer.Proto;
using EggLink.DanhengServer.Util;
using Google.Protobuf;
@@ -20,7 +22,7 @@ internal class QueryGatewayHandler
RegionName = config.GameServer.GameServerId,
Ip = config.GameServer.PublicAddress,
Port = config.GameServer.Port,
- Msg = "Access verification failed. Please check if you have logged in to the correct account and server.",
+ Msg = I18NManager.Translate("Server.Web.Maintain"),
Unk1 = true,
Unk2 = true,
Unk3 = true,
@@ -30,6 +32,11 @@ internal class QueryGatewayHandler
Unk7 = true
};
+ if (!ResourceManager.IsLoaded)
+ {
+ gateServer.Retcode = 2;
+ }
+
if (urlData.AssetBundleUrl != null && urlData.AssetBundleUrl.Length > 0)
gateServer.AssetBundleUrl = urlData.AssetBundleUrl;