diff --git a/Config/Binary/SceneConfigData.bytes b/Config/Binary/SceneConfigData.bytes
index b58e4b5..861e2d9 100644
--- a/Config/Binary/SceneConfigData.bytes
+++ b/Config/Binary/SceneConfigData.bytes
@@ -1,6 +1,7 @@
 
-&�"MultiThread*Addressable@�UH
-(�"MultiThread*Gate2KCP8��@�UH
-�"MultiThread*Map@�UH
-�"MultiThread*Chat@�UH
-�"MultiThread*Map@�UH
\ No newline at end of file
+/�"MultiThread*Addressable2KCP8��@�UH
+&�"MultiThread*Addressable@�VH
+(�"MultiThread*Gate2KCP8��@�VH
+�"MultiThread*Map@�VH
+�"MultiThread*Map@�VH
+�"MultiThread*Chat@�VH
\ No newline at end of file
diff --git a/Config/Excel/Server/SceneConfig.xlsx b/Config/Excel/Server/SceneConfig.xlsx
index 343902b..5a8a5e6 100644
Binary files a/Config/Excel/Server/SceneConfig.xlsx and b/Config/Excel/Server/SceneConfig.xlsx differ
diff --git a/Config/Excel/Version.txt b/Config/Excel/Version.txt
index c84cb4b..12888c8 100644
--- a/Config/Excel/Version.txt
+++ b/Config/Excel/Version.txt
@@ -1 +1 @@
-{"WorksheetNames":[-8419147776733210060,-3495952183970875596,-1088042625810372120,1720330851179383898],"Tables":{"-3495952183970875596":1750919742778,"-1088042625810372120":1731573652950,"1720330851179383898":1728449870789,"3730651590607244245":1731575713470,"5812538452563588342":1748394916174}}
\ No newline at end of file
+{"WorksheetNames":[-8419147776733210060,-3495952183970875596,1720330851179383898,3730651590607244245],"Tables":{"-3495952183970875596":1753598025078,"-1088042625810372120":1753532052628,"1720330851179383898":1753532052630,"3730651590607244245":1753532052629,"5812538452563588342":1753532052630}}
\ No newline at end of file
diff --git a/Config/Json/Server/SceneConfigData.Json b/Config/Json/Server/SceneConfigData.Json
index f34067d..d4e9f4a 100644
--- a/Config/Json/Server/SceneConfigData.Json
+++ b/Config/Json/Server/SceneConfigData.Json
@@ -1,8 +1,8 @@
 {"List":[
-{"Id":1001,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Authentication","NetworkProtocol":"KCP","OuterPort":20001,"InnerPort":11001,"SceneType":1},
-{"Id":1006,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Addressable","NetworkProtocol":null,"OuterPort":0,"InnerPort":11006,"SceneType":2},
-{"Id":1002,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Gate","NetworkProtocol":"KCP","OuterPort":20000,"InnerPort":11002,"SceneType":3},
-{"Id":1003,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Map","NetworkProtocol":null,"OuterPort":0,"InnerPort":11003,"SceneType":4},
-{"Id":1004,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Chat","NetworkProtocol":null,"OuterPort":0,"InnerPort":11004,"SceneType":8},
-{"Id":1005,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Map","NetworkProtocol":null,"OuterPort":0,"InnerPort":11005,"SceneType":4}
+{"Id":1001,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Addressable","NetworkProtocol":"KCP","OuterPort":20001,"InnerPort":11001,"SceneType":1},
+{"Id":1002,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Addressable","NetworkProtocol":null,"OuterPort":0,"InnerPort":11011,"SceneType":2},
+{"Id":1003,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Gate","NetworkProtocol":"KCP","OuterPort":20000,"InnerPort":11021,"SceneType":3},
+{"Id":1004,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Map","NetworkProtocol":null,"OuterPort":0,"InnerPort":11031,"SceneType":5},
+{"Id":1005,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Map","NetworkProtocol":null,"OuterPort":0,"InnerPort":11041,"SceneType":5},
+{"Id":1006,"ProcessConfigId":1,"WorldConfigId":1,"SceneRuntimeMode":"MultiThread","SceneTypeString":"Chat","NetworkProtocol":null,"OuterPort":0,"InnerPort":11051,"SceneType":8}
 ]}
diff --git a/Config/Json/Server/WorldConfigData.Json b/Config/Json/Server/WorldConfigData.Json
index 580dfa9..60dd090 100644
--- a/Config/Json/Server/WorldConfigData.Json
+++ b/Config/Json/Server/WorldConfigData.Json
@@ -1,3 +1,3 @@
 {"List":[
-{"Id":1,"WorldName":"测试服","DbConnection":"mongodb://127.0.0.1","DbName":"fantasy_main","DbType":"MongoDB"}
+{"Id":1,"WorldName":"测试服","DbConnection":null,"DbName":"fantasy_main","DbType":"MongoDB"}
 ]}
diff --git a/Config/NetworkProtocol/Inner/InnerMessage.proto b/Config/NetworkProtocol/Inner/InnerMessage.proto
index 496ddba..b4bd449 100644
--- a/Config/NetworkProtocol/Inner/InnerMessage.proto
+++ b/Config/NetworkProtocol/Inner/InnerMessage.proto
@@ -1,75 +1,2 @@
 syntax = "proto3";
 package Sining.Message;
-message G2A_TestMessage // IRouteMessage
-{
-	string Tag = 1;
-}
-message G2A_TestRequest // IRouteRequest,G2A_TestResponse
-{
-
-}
-message G2A_TestResponse // IRouteResponse
-{
-	
-}
-message G2M_RequestAddressableId // IRouteRequest,M2G_ResponseAddressableId
-{
-
-}
-message M2G_ResponseAddressableId // IRouteResponse
-{
-	int64 AddressableId = 1;	// Map服务器返回的AddressableId
-}
-/// 通知Chat服务器创建一个RouteId
-message G2Chat_CreateRouteRequest // IRouteRequest,Chat2G_CreateRouteResponse
-{
-	int64 GateRouteId = 1;
-}
-message Chat2G_CreateRouteResponse // IRouteResponse
-{
-	int64 ChatRouteId = 1;
-}
-/// Map给另外一个Map发送Unit数据
-// Protocol Bson
-message M2M_SendUnitRequest // IRouteRequest,M2M_SendUnitResponse
-{
-	
-}
-// Protocol Bson
-message M2M_SendUnitResponse // IRouteResponse
-{
-
-}
-/// Gate发送Addressable消息给MAP
-message G2M_SendAddressableMessage // IAddressableRouteMessage
-{
-	string Tag = 1;
-}
-// Gate通知Map创建一个SubScene
-message G2M_CreateSubSceneRequest // IRouteRequest,M2G_CreateSubSceneResponse
-{
-
-}
-message M2G_CreateSubSceneResponse // IRouteResponse
-{
-	int64 SubSceneRouteId = 1;
-}
-// Gate给SubScene发送一个消息
-message G2SubScene_SentMessage // IRouteMessage
-{
-	string Tag = 1;
-}
-/// Gate通知SubScene创建一个Addressable消息
-message G2SubScene_AddressableIdRequest // IRouteRequest,SubScene2G_AddressableIdResponse
-{
-
-}
-message SubScene2G_AddressableIdResponse // IRouteResponse
-{
-	int64 AddressableId = 1;	// SubScene服务器返回的AddressableId
-}
-/// Chat发送一个漫游消息给Map
-message Chat2M_TestMessage // IRoamingMessage,MapRoamingType
-{
-	string Tag = 1;
-}
\ No newline at end of file
diff --git a/Config/NetworkProtocol/Outer/OuterMessage.proto b/Config/NetworkProtocol/Outer/OuterMessage.proto
index 19da9f3..c17ad74 100644
--- a/Config/NetworkProtocol/Outer/OuterMessage.proto
+++ b/Config/NetworkProtocol/Outer/OuterMessage.proto
@@ -7,15 +7,6 @@ package Fantasy.Network.Message;
 // 使用方式:
 // 在message协议上方添加// Protocol+空格+协议名字
 // 例如:// Protocol ProtoBuf 或 // Protocol MemoryPack
-message C2A_RegisterRequest // IRequest,A2C_RegisterResponse
-{
-	string Username = 1;
-	string Password = 2;
-}
-message A2C_RegisterResponse // IResponse
-{
-
-}
 message C2A_LoginRequest // IRequest,A2C_LoginResponse
 {
 	string Username = 1;
@@ -54,61 +45,4 @@ message C2G_GetAccountInfoRequest // IRequest,G2C_GetAccountInfoResponse
 message G2C_GetAccountInfoResponse // IResponse
 {
 	GameAccountInfo GameAccountInfo = 1;
-}
-
-
-message C2G_TestMessage // IMessage
-{
-	string Tag = 1;
-}
-message C2G_TestRequest // IRequest,G2C_TestResponse
-{
-	string Tag = 1;
-}
-message G2C_TestResponse // IResponse
-{
-	string Tag = 1;
-}
-message C2G_CreateAddressableRequest // IRequest,G2C_CreateAddressableResponse
-{
-
-}
-message G2C_CreateAddressableResponse // IResponse
-{
-
-}
-message C2M_TestMessage // IAddressableRouteMessage
-{
-	string Tag = 1;
-}
-message C2M_TestRequest // IAddressableRouteRequest,M2C_TestResponse
-{
-	string Tag = 1;
-}
-message M2C_TestResponse // IAddressableRouteResponse
-{
-	string Tag = 1;
-}
-/// 通知Gate服务器创建一个Chat的Route连接
-message C2G_CreateChatRouteRequest // IRequest,G2C_CreateChatRouteResponse
-{
-
-}
-message G2C_CreateChatRouteResponse // IResponse
-{
-
-}
-/// 发送一个Route消息给Chat
-message C2Chat_TestMessage // ICustomRouteMessage,ChatRoute
-{
-	string Tag = 1;
-}
-/// 发送一个RPCRoute消息给Chat
-message C2Chat_TestMessageRequest // ICustomRouteRequest,Chat2C_TestMessageResponse,ChatRoute
-{
-	string Tag = 1;
-}
-message Chat2C_TestMessageResponse // ICustomRouteResponse
-{
-	string Tag = 1;
 }
\ No newline at end of file
diff --git a/Entity/Game/Item/ItemComponent.cs b/Entity/Game/Item/ItemComponent.cs
deleted file mode 100644
index 724ab73..0000000
--- a/Entity/Game/Item/ItemComponent.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-﻿using Fantasy.Entitas;
-
-namespace NB.Game;
-
-public class ItemComponent : Entity
-{
-    
-}
\ No newline at end of file
diff --git a/Entity/Game/Role/RoleComAttribute.cs b/Entity/Game/Role/RoleComAttribute.cs
index f3ca35f..326c94d 100644
--- a/Entity/Game/Role/RoleComAttribute.cs
+++ b/Entity/Game/Role/RoleComAttribute.cs
@@ -3,7 +3,7 @@
 namespace NB;
 
 /// <summary>
-/// 挂这个 玩家Role创建时会自动添加此组件
+/// 挂这个 玩家Unit创建时会自动添加此组件
 /// </summary>
 public class RoleComAttribute : BaseAttribute
 {
diff --git a/Entity/Game/Role/RoleManagerComponent.cs b/Entity/Game/Role/RoleManagerComponent.cs
index 689a052..4cc9859 100644
--- a/Entity/Game/Role/RoleManagerComponent.cs
+++ b/Entity/Game/Role/RoleManagerComponent.cs
@@ -4,5 +4,8 @@ namespace NB;
 
 public class RoleManagerComponent : Entity
 {
+    /// <summary>
+    /// 游戏列表
+    /// </summary>
     public readonly Dictionary<long, Role> Roles = new();
 }
\ No newline at end of file
diff --git a/Entity/Gate/Entity/Player.cs b/Entity/Gate/Entity/Player.cs
index 2d89780..af984f7 100644
--- a/Entity/Gate/Entity/Player.cs
+++ b/Entity/Gate/Entity/Player.cs
@@ -9,6 +9,5 @@ public sealed class Player : Entity
     public long LoginTime;
 
     [BsonIgnore]
-    // BsonIgnore特性是让Bson保存到数据库中忽略掉这个字段。
     public long SessionRunTimeId;
 }
\ No newline at end of file
diff --git a/Entity/Gate/Entity/PlayerFlagComponent.cs b/Entity/Gate/Entity/PlayerFlagComponent.cs
index b24e251..68a43d5 100644
--- a/Entity/Gate/Entity/PlayerFlagComponent.cs
+++ b/Entity/Gate/Entity/PlayerFlagComponent.cs
@@ -11,5 +11,5 @@ public sealed class PlayerFlagComponent : Entity
     // 有一种可能，当在Account在其他地方被销毁
     // 这时候因为这个Account是会回收到池子中，所以这个引用还是有效的
     // 那这时候就会出现这个引用的Account可能是其他用户的了。
-    public EntityReference<Player> Account;
+    public EntityReference<Player> Player;
 }
\ No newline at end of file
diff --git a/Entity/Generate/CustomExport/SceneType.cs b/Entity/Generate/CustomExport/SceneType.cs
index de34ed9..692a905 100644
--- a/Entity/Generate/CustomExport/SceneType.cs
+++ b/Entity/Generate/CustomExport/SceneType.cs
@@ -6,10 +6,10 @@ namespace Fantasy
 		public const int Authentication = 1;
 		public const int Addressable = 2;
 		public const int Gate = 3;
-		public const int Map = 4;
-		public const int CopyDispatcher = 5;
-		public const int CopyManager = 6;
-		public const int Copy = 7;
+		public const int Game = 4;
+		public const int Map = 5;
+		public const int Activity = 6;
+		public const int Cache = 7;
 		public const int Chat = 8;
 
 		public static readonly Dictionary<string, int> SceneTypeDic = new Dictionary<string, int>()
@@ -17,10 +17,10 @@ namespace Fantasy
 			{ "Authentication", 1 },
 			{ "Addressable", 2 },
 			{ "Gate", 3 },
-			{ "Map", 4 },
-			{ "CopyDispatcher", 5 },
-			{ "CopyManager", 6 },
-			{ "Copy", 7 },
+			{ "Game", 4 },
+			{ "Map", 5 },
+			{ "Activity", 6 },
+			{ "Cache", 7 },
 			{ "Chat", 8 },
 		};
 	}
diff --git a/Entity/Generate/NetworkProtocol/InnerMessage.cs b/Entity/Generate/NetworkProtocol/InnerMessage.cs
index c4f2a7e..586abde 100644
--- a/Entity/Generate/NetworkProtocol/InnerMessage.cs
+++ b/Entity/Generate/NetworkProtocol/InnerMessage.cs
@@ -15,317 +15,6 @@ using Fantasy.Serialize;
 #pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
 #pragma warning disable CS8618
 
-namespace Fantasy
+namespace NBC
 {	
-	[ProtoContract]
-	public partial class G2A_TestMessage : AMessage, IRouteMessage, IProto
-	{
-		public static G2A_TestMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2A_TestMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2A_TestMessage>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.G2A_TestMessage; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class G2A_TestRequest : AMessage, IRouteRequest, IProto
-	{
-		public static G2A_TestRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2A_TestRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2A_TestRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public G2A_TestResponse ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.G2A_TestRequest; }
-	}
-	[ProtoContract]
-	public partial class G2A_TestResponse : AMessage, IRouteResponse, IProto
-	{
-		public static G2A_TestResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2A_TestResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2A_TestResponse>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.G2A_TestResponse; }
-		[ProtoMember(1)]
-		public uint ErrorCode { get; set; }
-	}
-	[ProtoContract]
-	public partial class G2M_RequestAddressableId : AMessage, IRouteRequest, IProto
-	{
-		public static G2M_RequestAddressableId Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2M_RequestAddressableId>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2M_RequestAddressableId>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public M2G_ResponseAddressableId ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.G2M_RequestAddressableId; }
-	}
-	[ProtoContract]
-	public partial class M2G_ResponseAddressableId : AMessage, IRouteResponse, IProto
-	{
-		public static M2G_ResponseAddressableId Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<M2G_ResponseAddressableId>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			AddressableId = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<M2G_ResponseAddressableId>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.M2G_ResponseAddressableId; }
-		[ProtoMember(1)]
-		public long AddressableId { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  通知Chat服务器创建一个RouteId
-	/// </summary>
-	[ProtoContract]
-	public partial class G2Chat_CreateRouteRequest : AMessage, IRouteRequest, IProto
-	{
-		public static G2Chat_CreateRouteRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2Chat_CreateRouteRequest>();
-		}
-		public override void Dispose()
-		{
-			GateRouteId = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2Chat_CreateRouteRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public Chat2G_CreateRouteResponse ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.G2Chat_CreateRouteRequest; }
-		[ProtoMember(1)]
-		public long GateRouteId { get; set; }
-	}
-	[ProtoContract]
-	public partial class Chat2G_CreateRouteResponse : AMessage, IRouteResponse, IProto
-	{
-		public static Chat2G_CreateRouteResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<Chat2G_CreateRouteResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			ChatRouteId = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<Chat2G_CreateRouteResponse>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.Chat2G_CreateRouteResponse; }
-		[ProtoMember(1)]
-		public long ChatRouteId { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  Map给另外一个Map发送Unit数据
-	/// </summary>
-	public partial class M2M_SendUnitRequest : AMessage, IRouteRequest
-	{
-		public static M2M_SendUnitRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<M2M_SendUnitRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<M2M_SendUnitRequest>(this);
-#endif
-		}
-		[BsonIgnore]
-		public M2M_SendUnitResponse ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.M2M_SendUnitRequest; }
-	}
-	public partial class M2M_SendUnitResponse : AMessage, IRouteResponse
-	{
-		public static M2M_SendUnitResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<M2M_SendUnitResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<M2M_SendUnitResponse>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.M2M_SendUnitResponse; }
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  Gate发送Addressable消息给MAP
-	/// </summary>
-	[ProtoContract]
-	public partial class G2M_SendAddressableMessage : AMessage, IAddressableRouteMessage, IProto
-	{
-		public static G2M_SendAddressableMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2M_SendAddressableMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2M_SendAddressableMessage>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.G2M_SendAddressableMessage; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class G2M_CreateSubSceneRequest : AMessage, IRouteRequest, IProto
-	{
-		public static G2M_CreateSubSceneRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2M_CreateSubSceneRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2M_CreateSubSceneRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public M2G_CreateSubSceneResponse ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.G2M_CreateSubSceneRequest; }
-	}
-	[ProtoContract]
-	public partial class M2G_CreateSubSceneResponse : AMessage, IRouteResponse, IProto
-	{
-		public static M2G_CreateSubSceneResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<M2G_CreateSubSceneResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			SubSceneRouteId = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<M2G_CreateSubSceneResponse>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.M2G_CreateSubSceneResponse; }
-		[ProtoMember(1)]
-		public long SubSceneRouteId { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	[ProtoContract]
-	public partial class G2SubScene_SentMessage : AMessage, IRouteMessage, IProto
-	{
-		public static G2SubScene_SentMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2SubScene_SentMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2SubScene_SentMessage>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.G2SubScene_SentMessage; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	/// <summary>
-	///  Gate通知SubScene创建一个Addressable消息
-	/// </summary>
-	[ProtoContract]
-	public partial class G2SubScene_AddressableIdRequest : AMessage, IRouteRequest, IProto
-	{
-		public static G2SubScene_AddressableIdRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2SubScene_AddressableIdRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2SubScene_AddressableIdRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public SubScene2G_AddressableIdResponse ResponseType { get; set; }
-		public uint OpCode() { return InnerOpcode.G2SubScene_AddressableIdRequest; }
-	}
-	[ProtoContract]
-	public partial class SubScene2G_AddressableIdResponse : AMessage, IRouteResponse, IProto
-	{
-		public static SubScene2G_AddressableIdResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<SubScene2G_AddressableIdResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			AddressableId = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<SubScene2G_AddressableIdResponse>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.SubScene2G_AddressableIdResponse; }
-		[ProtoMember(1)]
-		public long AddressableId { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  Chat发送一个漫游消息给Map
-	/// </summary>
-	[ProtoContract]
-	public partial class Chat2M_TestMessage : AMessage, IRoamingMessage, IProto
-	{
-		public static Chat2M_TestMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<Chat2M_TestMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<Chat2M_TestMessage>(this);
-#endif
-		}
-		public uint OpCode() { return InnerOpcode.Chat2M_TestMessage; }
-		[ProtoIgnore]
-		public int RouteType => Fantasy.RoamingType.MapRoamingType;
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
 }
diff --git a/Entity/Generate/NetworkProtocol/InnerOpcode.cs b/Entity/Generate/NetworkProtocol/InnerOpcode.cs
index a6128fe..ce1590d 100644
--- a/Entity/Generate/NetworkProtocol/InnerOpcode.cs
+++ b/Entity/Generate/NetworkProtocol/InnerOpcode.cs
@@ -2,21 +2,5 @@ namespace Fantasy
 {
 	public static partial class InnerOpcode
 	{
-		 public const uint G2A_TestMessage = 939534097;
-		 public const uint G2A_TestRequest = 1073751825;
-		 public const uint G2A_TestResponse = 1207969553;
-		 public const uint G2M_RequestAddressableId = 1073751826;
-		 public const uint M2G_ResponseAddressableId = 1207969554;
-		 public const uint G2Chat_CreateRouteRequest = 1073751827;
-		 public const uint Chat2G_CreateRouteResponse = 1207969555;
-		 public const uint M2M_SendUnitRequest = 1082140436;
-		 public const uint M2M_SendUnitResponse = 1216358164;
-		 public const uint G2M_SendAddressableMessage = 1744840465;
-		 public const uint G2M_CreateSubSceneRequest = 1073751829;
-		 public const uint M2G_CreateSubSceneResponse = 1207969557;
-		 public const uint G2SubScene_SentMessage = 939534098;
-		 public const uint G2SubScene_AddressableIdRequest = 1073751830;
-		 public const uint SubScene2G_AddressableIdResponse = 1207969558;
-		 public const uint Chat2M_TestMessage = 2952800017;
 	}
 }
diff --git a/Entity/Generate/NetworkProtocol/OuterMessage.cs b/Entity/Generate/NetworkProtocol/OuterMessage.cs
index 3cb1015..2461e93 100644
--- a/Entity/Generate/NetworkProtocol/OuterMessage.cs
+++ b/Entity/Generate/NetworkProtocol/OuterMessage.cs
@@ -15,49 +15,8 @@ using Fantasy.Serialize;
 #pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
 #pragma warning disable CS8618
 
-namespace Fantasy
+namespace NBC
 {	
-	[ProtoContract]
-	public partial class C2A_RegisterRequest : AMessage, IRequest, IProto
-	{
-		public static C2A_RegisterRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2A_RegisterRequest>();
-		}
-		public override void Dispose()
-		{
-			Username = default;
-			Password = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2A_RegisterRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public A2C_RegisterResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2A_RegisterRequest; }
-		[ProtoMember(1)]
-		public string Username { get; set; }
-		[ProtoMember(2)]
-		public string Password { get; set; }
-	}
-	[ProtoContract]
-	public partial class A2C_RegisterResponse : AMessage, IResponse, IProto
-	{
-		public static A2C_RegisterResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<A2C_RegisterResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<A2C_RegisterResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.A2C_RegisterResponse; }
-		[ProtoMember(1)]
-		public uint ErrorCode { get; set; }
-	}
 	[ProtoContract]
 	public partial class C2A_LoginRequest : AMessage, IRequest, IProto
 	{
@@ -231,264 +190,4 @@ namespace Fantasy
 		[ProtoMember(2)]
 		public uint ErrorCode { get; set; }
 	}
-	[ProtoContract]
-	public partial class C2G_TestMessage : AMessage, IMessage, IProto
-	{
-		public static C2G_TestMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2G_TestMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2G_TestMessage>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.C2G_TestMessage; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class C2G_TestRequest : AMessage, IRequest, IProto
-	{
-		public static C2G_TestRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2G_TestRequest>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2G_TestRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public G2C_TestResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2G_TestRequest; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class G2C_TestResponse : AMessage, IResponse, IProto
-	{
-		public static G2C_TestResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2C_TestResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2C_TestResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.G2C_TestResponse; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	[ProtoContract]
-	public partial class C2G_CreateAddressableRequest : AMessage, IRequest, IProto
-	{
-		public static C2G_CreateAddressableRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2G_CreateAddressableRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2G_CreateAddressableRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public G2C_CreateAddressableResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2G_CreateAddressableRequest; }
-	}
-	[ProtoContract]
-	public partial class G2C_CreateAddressableResponse : AMessage, IResponse, IProto
-	{
-		public static G2C_CreateAddressableResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2C_CreateAddressableResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2C_CreateAddressableResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.G2C_CreateAddressableResponse; }
-		[ProtoMember(1)]
-		public uint ErrorCode { get; set; }
-	}
-	[ProtoContract]
-	public partial class C2M_TestMessage : AMessage, IAddressableRouteMessage, IProto
-	{
-		public static C2M_TestMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2M_TestMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2M_TestMessage>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.C2M_TestMessage; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class C2M_TestRequest : AMessage, IAddressableRouteRequest, IProto
-	{
-		public static C2M_TestRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2M_TestRequest>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2M_TestRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public M2C_TestResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2M_TestRequest; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class M2C_TestResponse : AMessage, IAddressableRouteResponse, IProto
-	{
-		public static M2C_TestResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<M2C_TestResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<M2C_TestResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.M2C_TestResponse; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  通知Gate服务器创建一个Chat的Route连接
-	/// </summary>
-	[ProtoContract]
-	public partial class C2G_CreateChatRouteRequest : AMessage, IRequest, IProto
-	{
-		public static C2G_CreateChatRouteRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2G_CreateChatRouteRequest>();
-		}
-		public override void Dispose()
-		{
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2G_CreateChatRouteRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public G2C_CreateChatRouteResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2G_CreateChatRouteRequest; }
-	}
-	[ProtoContract]
-	public partial class G2C_CreateChatRouteResponse : AMessage, IResponse, IProto
-	{
-		public static G2C_CreateChatRouteResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<G2C_CreateChatRouteResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<G2C_CreateChatRouteResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.G2C_CreateChatRouteResponse; }
-		[ProtoMember(1)]
-		public uint ErrorCode { get; set; }
-	}
-	/// <summary>
-	///  发送一个Route消息给Chat
-	/// </summary>
-	[ProtoContract]
-	public partial class C2Chat_TestMessage : AMessage, ICustomRouteMessage, IProto
-	{
-		public static C2Chat_TestMessage Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2Chat_TestMessage>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2Chat_TestMessage>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.C2Chat_TestMessage; }
-		[ProtoIgnore]
-		public int RouteType => Fantasy.RouteType.ChatRoute;
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	/// <summary>
-	///  发送一个RPCRoute消息给Chat
-	/// </summary>
-	[ProtoContract]
-	public partial class C2Chat_TestMessageRequest : AMessage, ICustomRouteRequest, IProto
-	{
-		public static C2Chat_TestMessageRequest Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<C2Chat_TestMessageRequest>();
-		}
-		public override void Dispose()
-		{
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<C2Chat_TestMessageRequest>(this);
-#endif
-		}
-		[ProtoIgnore]
-		public Chat2C_TestMessageResponse ResponseType { get; set; }
-		public uint OpCode() { return OuterOpcode.C2Chat_TestMessageRequest; }
-		[ProtoIgnore]
-		public int RouteType => Fantasy.RouteType.ChatRoute;
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-	}
-	[ProtoContract]
-	public partial class Chat2C_TestMessageResponse : AMessage, ICustomRouteResponse, IProto
-	{
-		public static Chat2C_TestMessageResponse Create(Scene scene)
-		{
-			return scene.MessagePoolComponent.Rent<Chat2C_TestMessageResponse>();
-		}
-		public override void Dispose()
-		{
-			ErrorCode = default;
-			Tag = default;
-#if FANTASY_NET || FANTASY_UNITY
-			GetScene().MessagePoolComponent.Return<Chat2C_TestMessageResponse>(this);
-#endif
-		}
-		public uint OpCode() { return OuterOpcode.Chat2C_TestMessageResponse; }
-		[ProtoMember(1)]
-		public string Tag { get; set; }
-		[ProtoMember(2)]
-		public uint ErrorCode { get; set; }
-	}
 }
diff --git a/Entity/Generate/NetworkProtocol/OuterOpcode.cs b/Entity/Generate/NetworkProtocol/OuterOpcode.cs
index 9dd0ec8..4648e95 100644
--- a/Entity/Generate/NetworkProtocol/OuterOpcode.cs
+++ b/Entity/Generate/NetworkProtocol/OuterOpcode.cs
@@ -2,27 +2,12 @@ namespace Fantasy
 {
 	public static partial class OuterOpcode
 	{
-		 public const uint C2A_RegisterRequest = 268445457;
-		 public const uint A2C_RegisterResponse = 402663185;
-		 public const uint C2A_LoginRequest = 268445458;
-		 public const uint A2C_LoginResponse = 402663186;
-		 public const uint C2G_LoginRequest = 268445459;
-		 public const uint G2C_LoginResponse = 402663187;
+		 public const uint C2A_LoginRequest = 268445457;
+		 public const uint A2C_LoginResponse = 402663185;
+		 public const uint C2G_LoginRequest = 268445458;
+		 public const uint G2C_LoginResponse = 402663186;
 		 public const uint G2C_RepeatLogin = 134227729;
-		 public const uint C2G_GetAccountInfoRequest = 268445460;
-		 public const uint G2C_GetAccountInfoResponse = 402663188;
-		 public const uint C2G_TestMessage = 134227730;
-		 public const uint C2G_TestRequest = 268445461;
-		 public const uint G2C_TestResponse = 402663189;
-		 public const uint C2G_CreateAddressableRequest = 268445462;
-		 public const uint G2C_CreateAddressableResponse = 402663190;
-		 public const uint C2M_TestMessage = 1342187281;
-		 public const uint C2M_TestRequest = 1476405009;
-		 public const uint M2C_TestResponse = 1610622737;
-		 public const uint C2G_CreateChatRouteRequest = 268445463;
-		 public const uint G2C_CreateChatRouteResponse = 402663191;
-		 public const uint C2Chat_TestMessage = 2147493649;
-		 public const uint C2Chat_TestMessageRequest = 2281711377;
-		 public const uint Chat2C_TestMessageResponse = 2415929105;
+		 public const uint C2G_GetAccountInfoRequest = 268445459;
+		 public const uint G2C_GetAccountInfoResponse = 402663187;
 	}
 }
diff --git a/Hotfix/Outer/Authentication/Handler/C2A_LoginRequestHandler.cs b/Hotfix/Authentication/Handler/C2A_LoginRequestHandler.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/Handler/C2A_LoginRequestHandler.cs
rename to Hotfix/Authentication/Handler/C2A_LoginRequestHandler.cs
diff --git a/Hotfix/Outer/Authentication/System/AccountSystem.cs b/Hotfix/Authentication/System/AccountSystem.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/AccountSystem.cs
rename to Hotfix/Authentication/System/AccountSystem.cs
diff --git a/Hotfix/Outer/Authentication/System/AuthenticationComponentSystem.cs b/Hotfix/Authentication/System/AuthenticationComponentSystem.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/AuthenticationComponentSystem.cs
rename to Hotfix/Authentication/System/AuthenticationComponentSystem.cs
diff --git a/Hotfix/Outer/Authentication/System/AuthenticationHelper.cs b/Hotfix/Authentication/System/AuthenticationHelper.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/AuthenticationHelper.cs
rename to Hotfix/Authentication/System/AuthenticationHelper.cs
diff --git a/Hotfix/Outer/Authentication/System/Jwt/AuthenticationJwtComponentSystem.cs b/Hotfix/Authentication/System/Jwt/AuthenticationJwtComponentSystem.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/Jwt/AuthenticationJwtComponentSystem.cs
rename to Hotfix/Authentication/System/Jwt/AuthenticationJwtComponentSystem.cs
diff --git a/Hotfix/Outer/Authentication/System/Jwt/AuthenticationJwtHelper.cs b/Hotfix/Authentication/System/Jwt/AuthenticationJwtHelper.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/Jwt/AuthenticationJwtHelper.cs
rename to Hotfix/Authentication/System/Jwt/AuthenticationJwtHelper.cs
diff --git a/Hotfix/Outer/Authentication/System/TimeOut/AccountCacheInfoTimeOutSystem.cs b/Hotfix/Authentication/System/TimeOut/AccountCacheInfoTimeOutSystem.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/TimeOut/AccountCacheInfoTimeOutSystem.cs
rename to Hotfix/Authentication/System/TimeOut/AccountCacheInfoTimeOutSystem.cs
diff --git a/Hotfix/Outer/Authentication/System/TimeOut/AccountTimeOutSystem.cs b/Hotfix/Authentication/System/TimeOut/AccountTimeOutSystem.cs
similarity index 100%
rename from Hotfix/Outer/Authentication/System/TimeOut/AccountTimeOutSystem.cs
rename to Hotfix/Authentication/System/TimeOut/AccountTimeOutSystem.cs
diff --git a/Hotfix/Outer/Game/Container/ContainerSystem.cs b/Hotfix/Game/Container/ContainerSystem.cs
similarity index 100%
rename from Hotfix/Outer/Game/Container/ContainerSystem.cs
rename to Hotfix/Game/Container/ContainerSystem.cs
diff --git a/Hotfix/Outer/Game/Handler/ItemFactory.cs b/Hotfix/Game/Handler/ItemFactory.cs
similarity index 100%
rename from Hotfix/Outer/Game/Handler/ItemFactory.cs
rename to Hotfix/Game/Handler/ItemFactory.cs
diff --git a/Hotfix/Game/Role/RoleManagerComponentSystem.cs b/Hotfix/Game/Role/RoleManagerComponentSystem.cs
new file mode 100644
index 0000000..9858365
--- /dev/null
+++ b/Hotfix/Game/Role/RoleManagerComponentSystem.cs
@@ -0,0 +1,49 @@
+﻿using Fantasy.Entitas.Interface;
+
+namespace NB;
+
+public sealed class RoleManagerComponentDestroySystem : DestroySystem<RoleManagerComponent>
+{
+    protected override void Destroy(RoleManagerComponent self)
+    {
+        foreach (var (_, role) in self.Roles)
+        {
+            role.Dispose();
+        }
+
+        self.Roles.Clear();
+    }
+}
+
+public static class RoleManagerComponentSystem
+{
+    public static void Add(this RoleManagerComponent self, Role account)
+    {
+        self.Roles.Add(account.Id, account);
+    }
+
+    public static Role Get(this RoleManagerComponent self, long accountId)
+    {
+        return self.Roles.GetValueOrDefault(accountId);
+    }
+
+    public static bool TryGet(this RoleManagerComponent self, long accountId, out Role account)
+    {
+        return self.Roles.TryGetValue(accountId, out account);
+    }
+
+    public static void Remove(this RoleManagerComponent self, long accountId, bool isDispose = true)
+    {
+        if (!self.Roles.Remove(accountId, out var account))
+        {
+            return;
+        }
+
+        if (!isDispose)
+        {
+            return;
+        }
+
+        account.Dispose();
+    }
+}
\ No newline at end of file
diff --git a/Hotfix/Outer/Game/System/ItemManagerComponentSystem.cs b/Hotfix/Game/System/ItemManagerComponentSystem.cs
similarity index 100%
rename from Hotfix/Outer/Game/System/ItemManagerComponentSystem.cs
rename to Hotfix/Game/System/ItemManagerComponentSystem.cs
diff --git a/Hotfix/Outer/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs b/Hotfix/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs
similarity index 94%
rename from Hotfix/Outer/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs
rename to Hotfix/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs
index e04c32c..05decaf 100644
--- a/Hotfix/Outer/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs
+++ b/Hotfix/Gate/Handler/Outer/C2G_GetAccountInfoRequestHandler.cs
@@ -19,7 +19,7 @@ public sealed class C2G_GetAccountInfoRequestHandler : MessageRPC<C2G_GetAccount
             return;
         }
 
-        Player account = gameAccountFlagComponent.Account;
+        Player account = gameAccountFlagComponent.Player;
 
         if (account == null)
         {
diff --git a/Hotfix/Outer/Gate/Handler/Outer/C2G_LoginRequestHandler.cs b/Hotfix/Gate/Handler/Outer/C2G_LoginRequestHandler.cs
similarity index 97%
rename from Hotfix/Outer/Gate/Handler/Outer/C2G_LoginRequestHandler.cs
rename to Hotfix/Gate/Handler/Outer/C2G_LoginRequestHandler.cs
index 5a23c41..459c91e 100644
--- a/Hotfix/Outer/Gate/Handler/Outer/C2G_LoginRequestHandler.cs
+++ b/Hotfix/Gate/Handler/Outer/C2G_LoginRequestHandler.cs
@@ -79,7 +79,7 @@ public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_L
 
                 var gameAccountFlagComponent = oldSession.GetComponent<PlayerFlagComponent>();
                 gameAccountFlagComponent.AccountID = 0;
-                gameAccountFlagComponent.Account = null;
+                gameAccountFlagComponent.Player = null;
                 // 给客户端发送一个重复登录的消息，如果当前客户端是自己上次登录的，发送也不会收到。
                 oldSession.Send(new G2C_RepeatLogin());
                 // 给当前Session做一个定时销毁的任务，因为不做这个定时销毁，直接销毁的话，有可能消息还没有发送过去就销毁了
@@ -90,10 +90,12 @@ public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_L
         // 给当前Session添加一个组件，当Session销毁的时候会销毁这个组件。
         var accountFlagComponent = session.AddComponent<PlayerFlagComponent>();
         accountFlagComponent.AccountID = accountId;
-        accountFlagComponent.Account = account;
+        accountFlagComponent.Player = account;
 
         account.SessionRunTimeId = session.RuntimeId;
         response.GameAccountInfo = account.GetGameAccountInfo();
         Log.Debug($"当前的Gate服务器:{session.Scene.SceneConfigId} accountId:{accountId}");
+        
+        //连接到游戏中心服
     }
 }
\ No newline at end of file
diff --git a/Hotfix/Outer/Gate/System/JWT/GateJWTComponentSystem.cs b/Hotfix/Gate/System/JWT/GateJWTComponentSystem.cs
similarity index 100%
rename from Hotfix/Outer/Gate/System/JWT/GateJWTComponentSystem.cs
rename to Hotfix/Gate/System/JWT/GateJWTComponentSystem.cs
diff --git a/Hotfix/Outer/Gate/System/JWT/GateJWTHelper.cs b/Hotfix/Gate/System/JWT/GateJWTHelper.cs
similarity index 100%
rename from Hotfix/Outer/Gate/System/JWT/GateJWTHelper.cs
rename to Hotfix/Gate/System/JWT/GateJWTHelper.cs
diff --git a/Hotfix/Outer/Gate/System/Player/PlayerDestroySystem.cs b/Hotfix/Gate/System/Player/PlayerDestroySystem.cs
similarity index 100%
rename from Hotfix/Outer/Gate/System/Player/PlayerDestroySystem.cs
rename to Hotfix/Gate/System/Player/PlayerDestroySystem.cs
diff --git a/Hotfix/Outer/Gate/System/Player/PlayerFactory.cs b/Hotfix/Gate/System/Player/PlayerFactory.cs
similarity index 100%
rename from Hotfix/Outer/Gate/System/Player/PlayerFactory.cs
rename to Hotfix/Gate/System/Player/PlayerFactory.cs
diff --git a/Hotfix/Outer/Gate/System/Player/PlayerFlagComponentSystem.cs b/Hotfix/Gate/System/Player/PlayerFlagComponentSystem.cs
similarity index 95%
rename from Hotfix/Outer/Gate/System/Player/PlayerFlagComponentSystem.cs
rename to Hotfix/Gate/System/Player/PlayerFlagComponentSystem.cs
index e6ada07..81f9028 100644
--- a/Hotfix/Outer/Gate/System/Player/PlayerFlagComponentSystem.cs
+++ b/Hotfix/Gate/System/Player/PlayerFlagComponentSystem.cs
@@ -14,6 +14,6 @@ public sealed class PlayerFlagComponentDestroySystem : DestroySystem<PlayerFlagC
             self.AccountID = 0;
         }
 
-        self.Account = null;
+        self.Player = null;
     }
 }
\ No newline at end of file
diff --git a/Hotfix/Outer/Gate/System/Player/PlayerHelper.cs b/Hotfix/Gate/System/Player/PlayerHelper.cs
similarity index 96%
rename from Hotfix/Outer/Gate/System/Player/PlayerHelper.cs
rename to Hotfix/Gate/System/Player/PlayerHelper.cs
index f49f19a..c9a4ce5 100644
--- a/Hotfix/Outer/Gate/System/Player/PlayerHelper.cs
+++ b/Hotfix/Gate/System/Player/PlayerHelper.cs
@@ -13,7 +13,7 @@ public static class PlayerHelper
     /// <param name="scene"></param>
     /// <param name="accountId">账号Id</param>
     /// <returns></returns>
-    public static async FTask<Player?> LoadDataBase(Scene scene, long accountId)
+    public static async FTask<Player> LoadDataBase(Scene scene, long accountId)
     {
         var account = await scene.World.DataBase.First<Player>(d => d.Id == accountId);
         if (account == null)
@@ -29,7 +29,7 @@ public static class PlayerHelper
     /// 保存账号到数据库中
     /// </summary>
     /// <param name="self"></param>
-    public static async FTask SaveDataBase(this Player self)
+    public static async FTask  SaveDataBase(this Player self)
     {
         await self.Scene.World.DataBase.Save(self);
     }
diff --git a/Hotfix/Outer/Gate/System/PlayerManageComponentSystem.cs b/Hotfix/Gate/System/PlayerManageComponentSystem.cs
similarity index 100%
rename from Hotfix/Outer/Gate/System/PlayerManageComponentSystem.cs
rename to Hotfix/Gate/System/PlayerManageComponentSystem.cs
diff --git a/Hotfix/Hotfix.csproj b/Hotfix/Hotfix.csproj
index 5151c65..a86e143 100644
--- a/Hotfix/Hotfix.csproj
+++ b/Hotfix/Hotfix.csproj
@@ -12,8 +12,4 @@
       <ProjectReference Include="..\Fantasy\Fantasy.Net\Fantasy.Net\Fantasy.Net.csproj" />
     </ItemGroup>
 
-    <ItemGroup>
-      <Folder Include="Outer\Gate\" />
-    </ItemGroup>
-
 </Project>
diff --git a/Hotfix/Inner/G2A_TestMessageHandler.cs b/Hotfix/Inner/G2A_TestMessageHandler.cs
deleted file mode 100644
index 57bf196..0000000
--- a/Hotfix/Inner/G2A_TestMessageHandler.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using Fantasy.Async;
-using Fantasy.Network.Interface;
-
-namespace Fantasy;
-
-public class G2A_TestMessageHandler : Route<Scene,G2A_TestMessage>
-{
-    protected override async FTask Run(Scene entity, G2A_TestMessage message)
-    {
-        
-        
-        Log.Debug($"G2A_TestMessageHandler :{message.Tag}");
-        await FTask.CompletedTask;
-    }
-}
\ No newline at end of file
diff --git a/Hotfix/Inner/G2A_TestRequestHandler.cs b/Hotfix/Inner/G2A_TestRequestHandler.cs
deleted file mode 100644
index 75f33e4..0000000
--- a/Hotfix/Inner/G2A_TestRequestHandler.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using Fantasy.Async;
-using Fantasy.Network.Interface;
-
-namespace Fantasy;
-
-public class G2A_TestRequestHandler : RouteRPC<Scene, G2A_TestRequest, G2A_TestResponse>
-{
-    private static int Count;
-    protected override async FTask Run(Scene entity, G2A_TestRequest request, G2A_TestResponse response, Action reply)
-    {
-        if (++Count % 1000000 == 0)
-        {
-            Log.Debug($"count:1000000");
-        }
-        // Log.Debug($"{Count}");
-        await FTask.CompletedTask;
-    }
-}
\ No newline at end of file
diff --git a/Hotfix/Inner/RouteMessage/G2Chat_CreateRouteRequestHandler.cs b/Hotfix/Inner/RouteMessage/G2Chat_CreateRouteRequestHandler.cs
deleted file mode 100644
index 801acba..0000000
--- a/Hotfix/Inner/RouteMessage/G2Chat_CreateRouteRequestHandler.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using Fantasy.Async;
-using Fantasy.Entitas;
-using Fantasy.Network.Interface;
-
-namespace Fantasy;
-
-public sealed class G2Chat_CreateRouteRequestHandler : RouteRPC<Scene, G2Chat_CreateRouteRequest, Chat2G_CreateRouteResponse>
-{
-    protected override async FTask Run(Scene scene, G2Chat_CreateRouteRequest request, Chat2G_CreateRouteResponse response, Action reply)
-    {
-        // 接收到Gate消息后，首先建立一个实体用来后面接收Route消息。
-        // 这里就拿ChatUnit来做这个。
-        var chatUnit = Entity.Create<ChatUnit>(scene, true, true);
-        // 把Gate传递过来的RouteId保存住，以便后面可以直接给Gate发送消息。
-        // 例如断线等操作，都可以通过这个GateRouteId发送到Gate的Session上。
-        chatUnit.GateRouteId = request.GateRouteId;
-        // 把chatUnit的RunTimeId发送给Gate。
-        // 正如之前所说任何实体的RunTimeId都可以当做RouteId使用。
-        response.ChatRouteId = chatUnit.RouteId;
-        await FTask.CompletedTask;
-    }
-}
\ No newline at end of file
diff --git a/Hotfix/OnSceneCreate_Init.cs b/Hotfix/OnSceneCreate_Init.cs
index 2315536..9b76ede 100644
--- a/Hotfix/OnSceneCreate_Init.cs
+++ b/Hotfix/OnSceneCreate_Init.cs
@@ -26,10 +26,16 @@ public class OnSceneCreate_Init : AsyncEventSystem<OnCreateScene>
             {
                 // 用于验证JWT是否合法的组件
                 scene.AddComponent<GateJWTComponent>();
-                // 用于管理GameAccount的组件
+                // 用于管理玩家的组件
                 scene.AddComponent<PlayerManageComponent>();
                 break;
             }
+            case SceneType.Game:
+            {
+                //游戏服用于管理用户的组件
+                scene.AddComponent<RoleManagerComponent>();
+                break;
+            }
         }
 
         await FTask.CompletedTask;
diff --git a/Tools/ConfigTable/ExporterSettings.json b/Tools/ConfigTable/ExporterSettings.json
index 7499bd6..b4af6ff 100644
--- a/Tools/ConfigTable/ExporterSettings.json
+++ b/Tools/ConfigTable/ExporterSettings.json
@@ -1,23 +1,23 @@
 {
     "Export": {
         "ExcelProgramPath": {
-            "Value": "../../../Examples/Config/Excel/",
+            "Value": "../../Config/Excel/",
             "Comment": "Excel文件夹的根目录"
         },
         "ExcelVersionFile": {
-            "Value": "../../../Examples/Config/Excel/Version.txt",
+            "Value": "../../Config/Excel/Version.txt",
             "Comment": "Excel的Version文件位置、这个文件用于记录每次导出对比是否需要再次导出的文件"
         },
         "ExcelServerFileDirectory": {
-            "Value": "../../../Examples/Server/Entity/Generate/ConfigTable/Entity/",
+            "Value": "../../Entity/Generate/ConfigTable/Entity/",
             "Comment": "Excel生成的代码文件、在服务端文件夹位置"
         },
         "ExcelClientFileDirectory": {
-            "Value": "../../../Examples/Client/Unity/Assets/Scripts/Hotfix/Generate/ConfigTable/Entity/",
+            "Value": "../../../Fishing2/Assets/Scripts/Generate/ConfigTable/Entity/",
             "Comment": "Excel生成的代码文件、在客户端文件夹位置"
         },
         "ExcelServerBinaryDirectory": {
-            "Value": "../../../Examples/Config/Binary/",
+            "Value": "../../Config/Binary/",
             "Comment": "Excel生成服务器二进制数据文件夹位置"
         },
         "ExcelClientBinaryDirectory": {
@@ -25,15 +25,15 @@
             "Comment": "Excel生成在客户端的二进制数据文件夹位置"
         },
         "ExcelServerJsonDirectory": {
-            "Value": "../../../Examples/Config/Json/Server/",
+            "Value": "../../Config/Json/Server/",
             "Comment": "Excel生成在服务端的Json数据文件夹位置"
         },
         "ExcelClientJsonDirectory": {
-            "Value": "../../../Examples/Config/Json/Client/",
+            "Value": "../../Config/Json/Client/",
             "Comment": "Excel生成在客户端的Json数据文件夹位置"
         },
         "ServerCustomExportDirectory": {
-            "Value": "../../../Examples/Server/Entity/Generate/CustomExport/",
+            "Value": "../../Entity/Generate/CustomExport/",
             "Comment": "Excel在服务端生成自定义代码的文件夹位置"
         },
         "ClientCustomExportDirectory": {
diff --git a/Tools/Exporter/NetworkProtocol/CommandLine.dll b/Tools/Exporter/NetworkProtocol/CommandLine.dll
new file mode 100644
index 0000000..3eab2be
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/CommandLine.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/ExporterSettings.json b/Tools/Exporter/NetworkProtocol/ExporterSettings.json
new file mode 100644
index 0000000..809f350
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/ExporterSettings.json
@@ -0,0 +1,29 @@
+{
+    "Export": {
+        "NetworkProtocolDirectory": {
+            "Value": "../../../Config/NetworkProtocol/",
+            "Comment": "ProtoBuf文件所在的文件夹位置"
+        },
+        "NetworkProtocolServerDirectory": {
+            "Value": "../../../Entity/Generate/NetworkProtocol/",
+            "Comment": "ProtoBuf生成到服务端的文件夹位置"
+        },
+        "NetworkProtocolClientDirectory": {
+            "Value": "../../../../Fishing2/Assets/Scripts/Generate/NetworkProtocol/",
+            "Comment": "ProtoBuf生成到客户端的文件夹位置"
+        },
+        "Serializes": {
+            "Value": [
+//                {
+//                    "KeyIndex": 0,
+//                    "NameSpace" : "MemoryPack",
+//                    "SerializeName": "MemoryPack",
+//                    "Attribute": "\t[MemoryPackable]",
+//                    "Ignore": "\t\t[MemoryPackIgnore]",
+//                    "Member": "MemoryPackOrder"
+//                }
+            ],
+            "Comment": "自定义序列化器"
+        }
+    }
+}
\ No newline at end of file
diff --git a/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json
new file mode 100644
index 0000000..e19c8a4
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json
@@ -0,0 +1,206 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v9.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v9.0": {
+      "Fantasy.Tools.NetworkProtocol/1.0.0": {
+        "dependencies": {
+          "CommandLineParser": "2.9.1",
+          "Microsoft.Extensions.Configuration.Json": "9.0.6",
+          "Newtonsoft.Json": "13.0.3"
+        },
+        "runtime": {
+          "Fantasy.Tools.NetworkProtocol.dll": {}
+        }
+      },
+      "CommandLineParser/2.9.1": {
+        "runtime": {
+          "lib/netstandard2.0/CommandLine.dll": {
+            "assemblyVersion": "2.9.1.0",
+            "fileVersion": "2.9.1.0"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Abstractions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.FileExtensions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.6",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Physical": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Json/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.6",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.Configuration.FileExtensions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Json.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Abstractions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Physical/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileSystemGlobbing": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Physical.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileSystemGlobbing/9.0.6": {
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Primitives/9.0.6": {
+        "runtime": {
+          "lib/net9.0/Microsoft.Extensions.Primitives.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Newtonsoft.Json/13.0.3": {
+        "runtime": {
+          "lib/net6.0/Newtonsoft.Json.dll": {
+            "assemblyVersion": "13.0.0.0",
+            "fileVersion": "13.0.3.27908"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Fantasy.Tools.NetworkProtocol/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "CommandLineParser/2.9.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
+      "path": "commandlineparser/2.9.1",
+      "hashPath": "commandlineparser.2.9.1.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-VWB5jdkxHsRiuoniTqwOL32R4OWyp5If/bAucLjRJczRVNcwb8iCXKLjn3Inv8fv+jHMVMnvQLg7xhSys+y5PA==",
+      "path": "microsoft.extensions.configuration/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Abstractions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-3GgMIi2jP8g1fBW93Z9b9Unamc0SIsgyhiCmC91gq4loTixK9vQMuxxUsfJ1kRGwn+/FqLKwOHqmn0oYWn3Fvw==",
+      "path": "microsoft.extensions.configuration.abstractions/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.abstractions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.FileExtensions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-pCEueasI5JhJ24KYzMFxtG40zyLnWpcQYawpARh9FNq9XbWozuWgexmdkPa8p8YoVNlpi3ecKfcjfoRMkKAufw==",
+      "path": "microsoft.extensions.configuration.fileextensions/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.fileextensions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Json/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-N0dgOYQ9tDzJouL9Tyx2dgMCcHV2pBaY8yVtorbDqYYwiDRS2zd1TbhTA2FMHqXF3SMjBoO+gONZcDoA79gdSA==",
+      "path": "microsoft.extensions.configuration.json/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.json.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Abstractions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-q9FPkSGVA9ipI255p3PBAvWNXas5Tzjyp/DwYSwT+46mIFw9fWZahsF6vHpoxLt5/vtANotH2sAm7HunuFIx9g==",
+      "path": "microsoft.extensions.fileproviders.abstractions/9.0.6",
+      "hashPath": "microsoft.extensions.fileproviders.abstractions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Physical/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-l+dFA0NRl90vSIiJNy5d7V0kpTEOWHTqbgoWYzlTwF5uiM5sWJ953haaELKE05jkyJdnemVTnqjrlgo4wo7oyg==",
+      "path": "microsoft.extensions.fileproviders.physical/9.0.6",
+      "hashPath": "microsoft.extensions.fileproviders.physical.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileSystemGlobbing/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1HJCAbwukNEoYbHgHbKHmenU0V/0huw8+i7Qtf5rLUG1E+3kEwRJQxpwD3wbTEagIgPSQisNgJTvmUX9yYVc6g==",
+      "path": "microsoft.extensions.filesystemglobbing/9.0.6",
+      "hashPath": "microsoft.extensions.filesystemglobbing.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Primitives/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-BHniU24QV67qp1pJknqYSofAPYGmijGI8D+ci9yfw33iuFdyOeB9lWTg78ThyYLyQwZw3s0vZ36VMb0MqbUuLw==",
+      "path": "microsoft.extensions.primitives/9.0.6",
+      "hashPath": "microsoft.extensions.primitives.9.0.6.nupkg.sha512"
+    },
+    "Newtonsoft.Json/13.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
+      "path": "newtonsoft.json/13.0.3",
+      "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll
new file mode 100644
index 0000000..5502bd8
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe
new file mode 100644
index 0000000..7bdf927
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe differ
diff --git a/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb
new file mode 100644
index 0000000..5c60a04
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb differ
diff --git a/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
new file mode 100644
index 0000000..b19c3c8
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
@@ -0,0 +1,12 @@
+{
+  "runtimeOptions": {
+    "tfm": "net9.0",
+    "framework": {
+      "name": "Microsoft.NETCore.App",
+      "version": "9.0.0"
+    },
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+    }
+  }
+}
\ No newline at end of file
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll
new file mode 100644
index 0000000..e8f0c56
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll
new file mode 100644
index 0000000..fa95e40
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll
new file mode 100644
index 0000000..d0a3fb5
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.dll
new file mode 100644
index 0000000..f40bb41
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Configuration.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll
new file mode 100644
index 0000000..7661f9a
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll
new file mode 100644
index 0000000..f272fc2
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll
new file mode 100644
index 0000000..d2c4b72
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Primitives.dll b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Primitives.dll
new file mode 100644
index 0000000..b2aa82b
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Microsoft.Extensions.Primitives.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Newtonsoft.Json.dll b/Tools/Exporter/NetworkProtocol/Newtonsoft.Json.dll
new file mode 100644
index 0000000..d035c38
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/Newtonsoft.Json.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Run.bat b/Tools/Exporter/NetworkProtocol/Run.bat
new file mode 100644
index 0000000..fe41258
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/Run.bat
@@ -0,0 +1,21 @@
+@echo off
+
+echo Please select an option:
+echo 1. Client
+echo 2. Server
+echo 3. All
+
+set /p choice=Please select an option:
+
+if "%choice%"=="1" (
+    echo Client
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 1
+) else if "%choice%"=="2" (
+    echo Server
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 2
+) else if "%choice%"=="3" (
+    echo All
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 3
+) else (
+    echo Invalid option
+)
\ No newline at end of file
diff --git a/Tools/Exporter/NetworkProtocol/Run.sh b/Tools/Exporter/NetworkProtocol/Run.sh
new file mode 100644
index 0000000..d5ed8b3
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/Run.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+echo "1. Client"
+echo "2. Server"
+echo "3. All"
+
+read -n 1 -p "Please select an option:" choice
+echo ""
+echo ""
+script_dir=$(cd $(dirname $0) && pwd)
+case $choice in
+    1)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 1 --f $script_dir
+        ;;
+    2)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 2 --f $script_dir
+        ;;
+    3)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 3 --f $script_dir
+        ;;
+    *)
+        echo "Invalid option"
+        ;;
+esac
diff --git a/Tools/Exporter/NetworkProtocol/System.IO.Pipelines.dll b/Tools/Exporter/NetworkProtocol/System.IO.Pipelines.dll
new file mode 100644
index 0000000..8c1c6e5
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/System.IO.Pipelines.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/System.Text.Encodings.Web.dll b/Tools/Exporter/NetworkProtocol/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..5bf355c
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/System.Text.Encodings.Web.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/System.Text.Json.dll b/Tools/Exporter/NetworkProtocol/System.Text.Json.dll
new file mode 100644
index 0000000..1b52175
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/System.Text.Json.dll differ
diff --git a/Tools/Exporter/NetworkProtocol/Template.txt b/Tools/Exporter/NetworkProtocol/Template.txt
new file mode 100644
index 0000000..6eb76c5
--- /dev/null
+++ b/Tools/Exporter/NetworkProtocol/Template.txt
@@ -0,0 +1,33 @@
+#if SERVER
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using MongoDB.Bson.Serialization.Attributes;
+using Fantasy;
+using Fantasy.Network.Interface;
+using Fantasy.Serialize;
+// ReSharper disable InconsistentNaming
+// ReSharper disable RedundantUsingDirective
+// ReSharper disable RedundantOverriddenMember
+// ReSharper disable PartialTypeWithSinglePart
+// ReSharper disable UnusedAutoPropertyAccessor.Global
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable CheckNamespace
+#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
+#pragma warning disable CS8618
+
+namespace NBC
+{	
+#else
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using Fantasy;
+using Fantasy.Network.Interface;
+using Fantasy.Serialize;
+#pragma warning disable CS8618
+
+namespace Fantasy
+{
+#endif
+(Content)}
\ No newline at end of file
diff --git a/Tools/Exporter/NetworkProtocol/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll b/Tools/Exporter/NetworkProtocol/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..0786a1d
Binary files /dev/null and b/Tools/Exporter/NetworkProtocol/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll differ
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json
index 16d4b25..e19c8a4 100644
--- a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json
+++ b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.deps.json
@@ -1,11 +1,11 @@
 {
   "runtimeTarget": {
-    "name": ".NETCoreApp,Version=v8.0",
+    "name": ".NETCoreApp,Version=v9.0",
     "signature": ""
   },
   "compilationOptions": {},
   "targets": {
-    ".NETCoreApp,Version=v8.0": {
+    ".NETCoreApp,Version=v9.0": {
       "Fantasy.Tools.NetworkProtocol/1.0.0": {
         "dependencies": {
           "CommandLineParser": "2.9.1",
@@ -30,7 +30,7 @@
           "Microsoft.Extensions.Primitives": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Configuration.dll": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -41,7 +41,7 @@
           "Microsoft.Extensions.Primitives": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -56,7 +56,7 @@
           "Microsoft.Extensions.Primitives": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -67,11 +67,10 @@
           "Microsoft.Extensions.Configuration": "9.0.6",
           "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
           "Microsoft.Extensions.Configuration.FileExtensions": "9.0.6",
-          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
-          "System.Text.Json": "9.0.6"
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
+          "lib/net9.0/Microsoft.Extensions.Configuration.Json.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -82,7 +81,7 @@
           "Microsoft.Extensions.Primitives": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -95,7 +94,7 @@
           "Microsoft.Extensions.Primitives": "9.0.6"
         },
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": {
+          "lib/net9.0/Microsoft.Extensions.FileProviders.Physical.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -103,7 +102,7 @@
       },
       "Microsoft.Extensions.FileSystemGlobbing/9.0.6": {
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
+          "lib/net9.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -111,7 +110,7 @@
       },
       "Microsoft.Extensions.Primitives/9.0.6": {
         "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Primitives.dll": {
+          "lib/net9.0/Microsoft.Extensions.Primitives.dll": {
             "assemblyVersion": "9.0.0.0",
             "fileVersion": "9.0.625.26613"
           }
@@ -124,42 +123,6 @@
             "fileVersion": "13.0.3.27908"
           }
         }
-      },
-      "System.IO.Pipelines/9.0.6": {
-        "runtime": {
-          "lib/net8.0/System.IO.Pipelines.dll": {
-            "assemblyVersion": "9.0.0.0",
-            "fileVersion": "9.0.625.26613"
-          }
-        }
-      },
-      "System.Text.Encodings.Web/9.0.6": {
-        "runtime": {
-          "lib/net8.0/System.Text.Encodings.Web.dll": {
-            "assemblyVersion": "9.0.0.0",
-            "fileVersion": "9.0.625.26613"
-          }
-        },
-        "runtimeTargets": {
-          "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": {
-            "rid": "browser",
-            "assetType": "runtime",
-            "assemblyVersion": "9.0.0.0",
-            "fileVersion": "9.0.625.26613"
-          }
-        }
-      },
-      "System.Text.Json/9.0.6": {
-        "dependencies": {
-          "System.IO.Pipelines": "9.0.6",
-          "System.Text.Encodings.Web": "9.0.6"
-        },
-        "runtime": {
-          "lib/net8.0/System.Text.Json.dll": {
-            "assemblyVersion": "9.0.0.0",
-            "fileVersion": "9.0.625.26613"
-          }
-        }
       }
     }
   },
@@ -238,27 +201,6 @@
       "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
       "path": "newtonsoft.json/13.0.3",
       "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
-    },
-    "System.IO.Pipelines/9.0.6": {
-      "type": "package",
-      "serviceable": true,
-      "sha512": "sha512-0nlr0reXrRmkZNKifKqh2DgGhQgfkT7Qa3gQxIn/JI7/y3WDiTz67M+Sq3vFhUqcG8O5zVrpqHvIHeGPGUBsEw==",
-      "path": "system.io.pipelines/9.0.6",
-      "hashPath": "system.io.pipelines.9.0.6.nupkg.sha512"
-    },
-    "System.Text.Encodings.Web/9.0.6": {
-      "type": "package",
-      "serviceable": true,
-      "sha512": "sha512-uWRgViw2yJAUyGxrzDLCc6fkzE2dZIoXxs8V6YjCujKsJuP0pnpYSlbm2/7tKd0SjBnMtwfDQhLenk3bXonVOA==",
-      "path": "system.text.encodings.web/9.0.6",
-      "hashPath": "system.text.encodings.web.9.0.6.nupkg.sha512"
-    },
-    "System.Text.Json/9.0.6": {
-      "type": "package",
-      "serviceable": true,
-      "sha512": "sha512-h+ZtYTyTnTh5Ju6mHCKb3FPGx4ylJZgm9W7Y2psUnkhQRPMOIxX+TCN0ZgaR/+Yea+93XHWAaMzYTar1/EHIPg==",
-      "path": "system.text.json/9.0.6",
-      "hashPath": "system.text.json.9.0.6.nupkg.sha512"
     }
   }
 }
\ No newline at end of file
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll
index 26b0ed3..5502bd8 100644
Binary files a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll and b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.dll differ
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe
new file mode 100644
index 0000000..7bdf927
Binary files /dev/null and b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.exe differ
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb
index 9c39e8a..5c60a04 100644
Binary files a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb and b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.pdb differ
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
index becfaea..b19c3c8 100644
--- a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
+++ b/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
@@ -1,9 +1,9 @@
 {
   "runtimeOptions": {
-    "tfm": "net8.0",
+    "tfm": "net9.0",
     "framework": {
       "name": "Microsoft.NETCore.App",
-      "version": "8.0.0"
+      "version": "9.0.0"
     },
     "configProperties": {
       "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll
index 99e2a39..e8f0c56 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Abstractions.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll
index c695685..fa95e40 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.FileExtensions.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll
index 4734607..d0a3fb5 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.Json.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.dll b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.dll
index 93add5f..f40bb41 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.Configuration.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll b/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll
index f396702..7661f9a 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Abstractions.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll b/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll
index 30418e6..f272fc2 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.FileProviders.Physical.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll b/Tools/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll
index e77512d..d2c4b72 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.FileSystemGlobbing.dll differ
diff --git a/Tools/NetworkProtocol/Microsoft.Extensions.Primitives.dll b/Tools/NetworkProtocol/Microsoft.Extensions.Primitives.dll
index dcc574e..b2aa82b 100644
Binary files a/Tools/NetworkProtocol/Microsoft.Extensions.Primitives.dll and b/Tools/NetworkProtocol/Microsoft.Extensions.Primitives.dll differ
diff --git a/Tools/NetworkProtocol/Run.bat b/Tools/NetworkProtocol/Run.bat
index e762f8d..fe41258 100644
--- a/Tools/NetworkProtocol/Run.bat
+++ b/Tools/NetworkProtocol/Run.bat
@@ -18,6 +18,4 @@ if "%choice%"=="1" (
     dotnet Fantasy.Tools.NetworkProtocol.dll --p 3
 ) else (
     echo Invalid option
-)
-
-PAUSE
\ No newline at end of file
+)
\ No newline at end of file
diff --git a/Tools/NetworkProtocol/Template.txt b/Tools/NetworkProtocol/Template.txt
new file mode 100644
index 0000000..39c10be
--- /dev/null
+++ b/Tools/NetworkProtocol/Template.txt
@@ -0,0 +1,34 @@
+#if SERVER
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using MongoDB.Bson.Serialization.Attributes;
+using Fantasy;
+using Fantasy.Network.Interface;
+using Fantasy.Serialize;
+// ReSharper disable InconsistentNaming
+// ReSharper disable RedundantUsingDirective
+// ReSharper disable RedundantOverriddenMember
+// ReSharper disable PartialTypeWithSinglePart
+// ReSharper disable UnusedAutoPropertyAccessor.Global
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable CheckNamespace
+#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
+#pragma warning disable CS8618
+
+namespace NBC
+{	
+#else
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using Fantasy;
+using NBC;
+using NBC.Network.Interface;
+using NBC.Serialize;
+#pragma warning disable CS8618
+
+namespace NBC
+{
+#endif
+(Content)}
\ No newline at end of file
diff --git a/Tools/NetworkProtocol2/CommandLine.dll b/Tools/NetworkProtocol2/CommandLine.dll
new file mode 100644
index 0000000..3eab2be
Binary files /dev/null and b/Tools/NetworkProtocol2/CommandLine.dll differ
diff --git a/Tools/NetworkProtocol2/ExporterSettings.json b/Tools/NetworkProtocol2/ExporterSettings.json
new file mode 100644
index 0000000..0a26191
--- /dev/null
+++ b/Tools/NetworkProtocol2/ExporterSettings.json
@@ -0,0 +1,29 @@
+{
+    "Export": {
+        "NetworkProtocolDirectory": {
+            "Value": "../../Config/NetworkProtocol/",
+            "Comment": "ProtoBuf文件所在的文件夹位置"
+        },
+        "NetworkProtocolServerDirectory": {
+            "Value": "../../Entity/Generate/NetworkProtocol/",
+            "Comment": "ProtoBuf生成到服务端的文件夹位置"
+        },
+        "NetworkProtocolClientDirectory": {
+            "Value": "../../../Fishing2/Assets/Scripts/Generate/NetworkProtocol/",
+            "Comment": "ProtoBuf生成到客户端的文件夹位置"
+        },
+        "Serializes": {
+            "Value": [
+//                {
+//                    "KeyIndex": 0,
+//                    "NameSpace" : "MemoryPack",
+//                    "SerializeName": "MemoryPack",
+//                    "Attribute": "\t[MemoryPackable]",
+//                    "Ignore": "\t\t[MemoryPackIgnore]",
+//                    "Member": "MemoryPackOrder"
+//                }
+            ],
+            "Comment": "自定义序列化器"
+        }
+    }
+}
\ No newline at end of file
diff --git a/Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol
similarity index 100%
rename from Tools/NetworkProtocol/Fantasy.Tools.NetworkProtocol
rename to Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol
diff --git a/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.deps.json b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.deps.json
new file mode 100644
index 0000000..16d4b25
--- /dev/null
+++ b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.deps.json
@@ -0,0 +1,264 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "Fantasy.Tools.NetworkProtocol/1.0.0": {
+        "dependencies": {
+          "CommandLineParser": "2.9.1",
+          "Microsoft.Extensions.Configuration.Json": "9.0.6",
+          "Newtonsoft.Json": "13.0.3"
+        },
+        "runtime": {
+          "Fantasy.Tools.NetworkProtocol.dll": {}
+        }
+      },
+      "CommandLineParser/2.9.1": {
+        "runtime": {
+          "lib/netstandard2.0/CommandLine.dll": {
+            "assemblyVersion": "2.9.1.0",
+            "fileVersion": "2.9.1.0"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Configuration.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Abstractions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.FileExtensions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.6",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Physical": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Configuration.Json/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Configuration": "9.0.6",
+          "Microsoft.Extensions.Configuration.Abstractions": "9.0.6",
+          "Microsoft.Extensions.Configuration.FileExtensions": "9.0.6",
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
+          "System.Text.Json": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Abstractions/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileProviders.Physical/9.0.6": {
+        "dependencies": {
+          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.6",
+          "Microsoft.Extensions.FileSystemGlobbing": "9.0.6",
+          "Microsoft.Extensions.Primitives": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.FileProviders.Physical.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.FileSystemGlobbing/9.0.6": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Microsoft.Extensions.Primitives/9.0.6": {
+        "runtime": {
+          "lib/net8.0/Microsoft.Extensions.Primitives.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "Newtonsoft.Json/13.0.3": {
+        "runtime": {
+          "lib/net6.0/Newtonsoft.Json.dll": {
+            "assemblyVersion": "13.0.0.0",
+            "fileVersion": "13.0.3.27908"
+          }
+        }
+      },
+      "System.IO.Pipelines/9.0.6": {
+        "runtime": {
+          "lib/net8.0/System.IO.Pipelines.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "System.Text.Encodings.Web/9.0.6": {
+        "runtime": {
+          "lib/net8.0/System.Text.Encodings.Web.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        },
+        "runtimeTargets": {
+          "runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll": {
+            "rid": "browser",
+            "assetType": "runtime",
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      },
+      "System.Text.Json/9.0.6": {
+        "dependencies": {
+          "System.IO.Pipelines": "9.0.6",
+          "System.Text.Encodings.Web": "9.0.6"
+        },
+        "runtime": {
+          "lib/net8.0/System.Text.Json.dll": {
+            "assemblyVersion": "9.0.0.0",
+            "fileVersion": "9.0.625.26613"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Fantasy.Tools.NetworkProtocol/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "CommandLineParser/2.9.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
+      "path": "commandlineparser/2.9.1",
+      "hashPath": "commandlineparser.2.9.1.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-VWB5jdkxHsRiuoniTqwOL32R4OWyp5If/bAucLjRJczRVNcwb8iCXKLjn3Inv8fv+jHMVMnvQLg7xhSys+y5PA==",
+      "path": "microsoft.extensions.configuration/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Abstractions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-3GgMIi2jP8g1fBW93Z9b9Unamc0SIsgyhiCmC91gq4loTixK9vQMuxxUsfJ1kRGwn+/FqLKwOHqmn0oYWn3Fvw==",
+      "path": "microsoft.extensions.configuration.abstractions/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.abstractions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.FileExtensions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-pCEueasI5JhJ24KYzMFxtG40zyLnWpcQYawpARh9FNq9XbWozuWgexmdkPa8p8YoVNlpi3ecKfcjfoRMkKAufw==",
+      "path": "microsoft.extensions.configuration.fileextensions/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.fileextensions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Configuration.Json/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-N0dgOYQ9tDzJouL9Tyx2dgMCcHV2pBaY8yVtorbDqYYwiDRS2zd1TbhTA2FMHqXF3SMjBoO+gONZcDoA79gdSA==",
+      "path": "microsoft.extensions.configuration.json/9.0.6",
+      "hashPath": "microsoft.extensions.configuration.json.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Abstractions/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-q9FPkSGVA9ipI255p3PBAvWNXas5Tzjyp/DwYSwT+46mIFw9fWZahsF6vHpoxLt5/vtANotH2sAm7HunuFIx9g==",
+      "path": "microsoft.extensions.fileproviders.abstractions/9.0.6",
+      "hashPath": "microsoft.extensions.fileproviders.abstractions.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileProviders.Physical/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-l+dFA0NRl90vSIiJNy5d7V0kpTEOWHTqbgoWYzlTwF5uiM5sWJ953haaELKE05jkyJdnemVTnqjrlgo4wo7oyg==",
+      "path": "microsoft.extensions.fileproviders.physical/9.0.6",
+      "hashPath": "microsoft.extensions.fileproviders.physical.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.FileSystemGlobbing/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1HJCAbwukNEoYbHgHbKHmenU0V/0huw8+i7Qtf5rLUG1E+3kEwRJQxpwD3wbTEagIgPSQisNgJTvmUX9yYVc6g==",
+      "path": "microsoft.extensions.filesystemglobbing/9.0.6",
+      "hashPath": "microsoft.extensions.filesystemglobbing.9.0.6.nupkg.sha512"
+    },
+    "Microsoft.Extensions.Primitives/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-BHniU24QV67qp1pJknqYSofAPYGmijGI8D+ci9yfw33iuFdyOeB9lWTg78ThyYLyQwZw3s0vZ36VMb0MqbUuLw==",
+      "path": "microsoft.extensions.primitives/9.0.6",
+      "hashPath": "microsoft.extensions.primitives.9.0.6.nupkg.sha512"
+    },
+    "Newtonsoft.Json/13.0.3": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
+      "path": "newtonsoft.json/13.0.3",
+      "hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
+    },
+    "System.IO.Pipelines/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-0nlr0reXrRmkZNKifKqh2DgGhQgfkT7Qa3gQxIn/JI7/y3WDiTz67M+Sq3vFhUqcG8O5zVrpqHvIHeGPGUBsEw==",
+      "path": "system.io.pipelines/9.0.6",
+      "hashPath": "system.io.pipelines.9.0.6.nupkg.sha512"
+    },
+    "System.Text.Encodings.Web/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-uWRgViw2yJAUyGxrzDLCc6fkzE2dZIoXxs8V6YjCujKsJuP0pnpYSlbm2/7tKd0SjBnMtwfDQhLenk3bXonVOA==",
+      "path": "system.text.encodings.web/9.0.6",
+      "hashPath": "system.text.encodings.web.9.0.6.nupkg.sha512"
+    },
+    "System.Text.Json/9.0.6": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-h+ZtYTyTnTh5Ju6mHCKb3FPGx4ylJZgm9W7Y2psUnkhQRPMOIxX+TCN0ZgaR/+Yea+93XHWAaMzYTar1/EHIPg==",
+      "path": "system.text.json/9.0.6",
+      "hashPath": "system.text.json.9.0.6.nupkg.sha512"
+    }
+  }
+}
\ No newline at end of file
diff --git a/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.dll b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.dll
new file mode 100644
index 0000000..26b0ed3
Binary files /dev/null and b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.dll differ
diff --git a/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.pdb b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.pdb
new file mode 100644
index 0000000..9c39e8a
Binary files /dev/null and b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.pdb differ
diff --git a/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.runtimeconfig.json b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
new file mode 100644
index 0000000..becfaea
--- /dev/null
+++ b/Tools/NetworkProtocol2/Fantasy.Tools.NetworkProtocol.runtimeconfig.json
@@ -0,0 +1,12 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "framework": {
+      "name": "Microsoft.NETCore.App",
+      "version": "8.0.0"
+    },
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+    }
+  }
+}
\ No newline at end of file
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Abstractions.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Abstractions.dll
new file mode 100644
index 0000000..99e2a39
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Abstractions.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.FileExtensions.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.FileExtensions.dll
new file mode 100644
index 0000000..c695685
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.FileExtensions.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Json.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Json.dll
new file mode 100644
index 0000000..4734607
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.Json.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.dll
new file mode 100644
index 0000000..93add5f
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.Configuration.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Abstractions.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Abstractions.dll
new file mode 100644
index 0000000..f396702
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Abstractions.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Physical.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Physical.dll
new file mode 100644
index 0000000..30418e6
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.FileProviders.Physical.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.FileSystemGlobbing.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.FileSystemGlobbing.dll
new file mode 100644
index 0000000..e77512d
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.FileSystemGlobbing.dll differ
diff --git a/Tools/NetworkProtocol2/Microsoft.Extensions.Primitives.dll b/Tools/NetworkProtocol2/Microsoft.Extensions.Primitives.dll
new file mode 100644
index 0000000..dcc574e
Binary files /dev/null and b/Tools/NetworkProtocol2/Microsoft.Extensions.Primitives.dll differ
diff --git a/Tools/NetworkProtocol2/Newtonsoft.Json.dll b/Tools/NetworkProtocol2/Newtonsoft.Json.dll
new file mode 100644
index 0000000..d035c38
Binary files /dev/null and b/Tools/NetworkProtocol2/Newtonsoft.Json.dll differ
diff --git a/Tools/NetworkProtocol2/Run.bat b/Tools/NetworkProtocol2/Run.bat
new file mode 100644
index 0000000..e762f8d
--- /dev/null
+++ b/Tools/NetworkProtocol2/Run.bat
@@ -0,0 +1,23 @@
+@echo off
+
+echo Please select an option:
+echo 1. Client
+echo 2. Server
+echo 3. All
+
+set /p choice=Please select an option:
+
+if "%choice%"=="1" (
+    echo Client
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 1
+) else if "%choice%"=="2" (
+    echo Server
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 2
+) else if "%choice%"=="3" (
+    echo All
+    dotnet Fantasy.Tools.NetworkProtocol.dll --p 3
+) else (
+    echo Invalid option
+)
+
+PAUSE
\ No newline at end of file
diff --git a/Tools/NetworkProtocol2/Run.sh b/Tools/NetworkProtocol2/Run.sh
new file mode 100644
index 0000000..d5ed8b3
--- /dev/null
+++ b/Tools/NetworkProtocol2/Run.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+echo "1. Client"
+echo "2. Server"
+echo "3. All"
+
+read -n 1 -p "Please select an option:" choice
+echo ""
+echo ""
+script_dir=$(cd $(dirname $0) && pwd)
+case $choice in
+    1)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 1 --f $script_dir
+        ;;
+    2)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 2 --f $script_dir
+        ;;
+    3)
+        dotnet $script_dir/Fantasy.Tools.NetworkProtocol.dll --p 3 --f $script_dir
+        ;;
+    *)
+        echo "Invalid option"
+        ;;
+esac
diff --git a/Tools/NetworkProtocol2/System.IO.Pipelines.dll b/Tools/NetworkProtocol2/System.IO.Pipelines.dll
new file mode 100644
index 0000000..8c1c6e5
Binary files /dev/null and b/Tools/NetworkProtocol2/System.IO.Pipelines.dll differ
diff --git a/Tools/NetworkProtocol2/System.Text.Encodings.Web.dll b/Tools/NetworkProtocol2/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..5bf355c
Binary files /dev/null and b/Tools/NetworkProtocol2/System.Text.Encodings.Web.dll differ
diff --git a/Tools/NetworkProtocol2/System.Text.Json.dll b/Tools/NetworkProtocol2/System.Text.Json.dll
new file mode 100644
index 0000000..1b52175
Binary files /dev/null and b/Tools/NetworkProtocol2/System.Text.Json.dll differ
diff --git a/Tools/NetworkProtocol2/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll b/Tools/NetworkProtocol2/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..0786a1d
Binary files /dev/null and b/Tools/NetworkProtocol2/runtimes/browser/lib/net8.0/System.Text.Encodings.Web.dll differ
diff --git a/Tools/SourceCode/Fantasy.Tools.ConfigTable/Fantasy.Tools.ConfigTable.csproj b/Tools/SourceCode/Fantasy.Tools.ConfigTable/Fantasy.Tools.ConfigTable.csproj
index 5ad4547..b58a43e 100644
--- a/Tools/SourceCode/Fantasy.Tools.ConfigTable/Fantasy.Tools.ConfigTable.csproj
+++ b/Tools/SourceCode/Fantasy.Tools.ConfigTable/Fantasy.Tools.ConfigTable.csproj
@@ -35,31 +35,31 @@
     </ItemGroup>
 
     <ItemGroup>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Pool\Normal\Pool.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Pool\Normal\Pool.cs">
           <Link>Core\Base\Pool.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Packages\Fantasy.ConfigTable\Net\Dictionary\IntDictionaryConfig.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Dictionary\IntDictionaryConfig.cs">
             <Link>Core\Dictionary\IntDictionaryConfig.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Packages\Fantasy.ConfigTable\Net\Dictionary\StringDictionaryConfig.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Dictionary\StringDictionaryConfig.cs">
             <Link>Core\Dictionary\StringDictionaryConfig.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Packages\Fantasy.ConfigTable\Net\Interface\IConfigTable.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Interface\IConfigTable.cs">
             <Link>Core\Interface\IConfigTable.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\ProtoBufPackHelper\IProto.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\ProtoBufPackHelper\IProto.cs">
             <Link>Core\Serialize\ProtoBufPackHelper\IProto.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\TimeHelper.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\TimeHelper.cs">
             <Link>Excel\Base\TimeHelper.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Pool\Interface\IPool.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Pool\Interface\IPool.cs">
             <Link>Excel\Base\IPool.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Assembly\AssemblyInfo.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Assembly\AssemblyInfo.cs">
             <Link>Excel\Base\AssemblyInfo.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\DataStructure\Collection\OneToManyListPool.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\DataStructure\Collection\OneToManyListPool.cs">
             <Link>Excel\Base\OneToManyList.cs</Link>
         </Compile>
       <Compile Include="..\Fantasy.Tools.NetworkProtocol\Core\Base\ConsoleLog.cs">
@@ -68,37 +68,37 @@
       <Compile Include="..\Fantasy.Tools.NetworkProtocol\Core\Base\ExportPlatform.cs">
         <Link>Core\ExportPlatform.cs</Link>
       </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\FileHelper.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\FileHelper.cs">
             <Link>Core\FileHelper.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\HashCodeHelper.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\HashCodeHelper.cs">
             <Link>Core\HashCodeHelper.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\JsonHelper.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\JsonHelper.cs">
             <Link>Core\JsonHelper.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\BsonPackHelperNet.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\BsonPackHelperNet.cs">
             <Link>Core\Serialize\BsonPack\BsonPackHelperNet.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\StructBsonSerialize.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\StructBsonSerialize.cs">
             <Link>Core\Serialize\BsonPack\StructBsonSerialize.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\SupportInitializeChecker.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\BsonPack\SupportInitializeChecker.cs">
             <Link>Core\Serialize\BsonPack\SupportInitializeChecker.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\Interface\ASerialize.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\Interface\ASerialize.cs">
             <Link>Core\Serialize\Interface\ASerialize.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\Interface\ISerialize.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\Interface\ISerialize.cs">
             <Link>Core\Serialize\Interface\ISerialize.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\SerializerManager.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\SerializerManager.cs">
             <Link>Core\Serialize\SerializerManager.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\ProtoBufPackHelper\ProtoBufPackHelperNet.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\ProtoBufPackHelper\ProtoBufPackHelperNet.cs">
             <Link>Core\Serialize\ProtoBufPackHelper\ProtoBufPackHelperNet.cs</Link>
         </Compile>
-        <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\MemoryStreamBuffer.cs">
+        <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Serialize\MemoryStreamBuffer.cs">
             <Link>Excel\Base\MemoryStreamBuffer.cs</Link>
         </Compile>
     </ItemGroup>
@@ -115,9 +115,4 @@
       </None>
     </ItemGroup>
 
-    <ItemGroup>
-      <ProjectReference Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Fantasy.Net.csproj" />
-      <ProjectReference Include="..\..\..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Fantasy.ConfigTable.csproj" />
-    </ItemGroup>
-
 </Project>
diff --git a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/NetworkProtocolTemplate.cs b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/NetworkProtocolTemplate.cs
deleted file mode 100644
index 1c0519f..0000000
--- a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/NetworkProtocolTemplate.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-namespace Fantasy.Tools.ProtocalExporter;
-
-public static class NetworkProtocolTemplate
-{
-    public static readonly string Template ="""
-                                            #if SERVER
-                                            using ProtoBuf;
-                                            (UsingNamespace)
-                                            using System.Collections.Generic;
-                                            using MongoDB.Bson.Serialization.Attributes;
-                                            using Fantasy;
-                                            using Fantasy.Network.Interface;
-                                            using Fantasy.Serialize;
-                                            // ReSharper disable InconsistentNaming
-                                            // ReSharper disable RedundantUsingDirective
-                                            // ReSharper disable RedundantOverriddenMember
-                                            // ReSharper disable PartialTypeWithSinglePart
-                                            // ReSharper disable UnusedAutoPropertyAccessor.Global
-                                            // ReSharper disable MemberCanBePrivate.Global
-                                            // ReSharper disable CheckNamespace
-                                            #pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
-                                            #pragma warning disable CS8618
-                                            
-                                            namespace Fantasy
-                                            {	
-                                            #else
-                                            using ProtoBuf;
-                                            (UsingNamespace)
-                                            using System.Collections.Generic;
-                                            using Fantasy;
-                                            using Fantasy.Network.Interface;
-                                            using Fantasy.Serialize;
-                                            #pragma warning disable CS8618
-                                            
-                                            namespace Fantasy
-                                            {
-                                            #endif
-                                            (Content)}
-                                            """;
-}
\ No newline at end of file
diff --git a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/ProtocolExporter.cs b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/ProtocolExporter.cs
index 24a29d3..f59b1db 100644
--- a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/ProtocolExporter.cs
+++ b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Exporter/ProtocolExporter.cs
@@ -4,6 +4,7 @@ using Fantasy.Helper;
 using Fantasy.Network;
 using OpCode = Fantasy.Network.OpCode;
 using OpCodeType = Fantasy.Network.OpCodeType;
+
 #pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type.
 #pragma warning disable CS8602 // Dereference of a possibly null reference.
 // ReSharper disable PossibleNullReferenceException
@@ -12,12 +13,14 @@ using OpCodeType = Fantasy.Network.OpCodeType;
 #pragma warning disable CS8604 // Possible null reference argument.
 
 namespace Fantasy.Tools.ProtocalExporter;
+
 public enum NetworkProtocolOpCodeType
 {
     None = 0,
     Outer = 1,
     Inner = 2,
 }
+
 public sealed class OpcodeInfo
 {
     public uint Code;
@@ -35,12 +38,13 @@ public sealed class ProtocolExporter
     private readonly string _networkProtocolServerDirectory;
     private readonly string _networkProtocolDirectoryOuter;
     private readonly string _networkProtocolDirectoryInner;
-    
+
     public ProtocolExporter()
     {
         Console.OutputEncoding = Encoding.UTF8;
-        
-        if (ExporterSettingsHelper.NetworkProtocolDirectory == null || ExporterSettingsHelper.NetworkProtocolDirectory.Trim() == "")
+
+        if (ExporterSettingsHelper.NetworkProtocolDirectory == null ||
+            ExporterSettingsHelper.NetworkProtocolDirectory.Trim() == "")
         {
             Log.Info($"NetworkProtocolDirectory Can not be empty!");
             return;
@@ -119,12 +123,12 @@ public sealed class ProtocolExporter
         var errorCodeStr = new StringBuilder();
         var usingNamespace = new HashSet<string>();
         var saveDirectory = new Dictionary<string, string>();
-        
+
         OpcodeInfo opcodeInfo = null;
         ProtocolOpCode protocolOpCode = null;
         string[] protocolFiles = null;
         _opcodes.Clear();
-        
+
         switch (opCodeType)
         {
             case NetworkProtocolOpCodeType.Outer:
@@ -133,12 +137,12 @@ public sealed class ProtocolExporter
                 {
                     saveDirectory.Add(_networkProtocolServerDirectory, _serverTemplate);
                 }
-                
+
                 if (ExporterAges.Instance.ExportPlatform.HasFlag(ExportPlatform.Client))
                 {
                     saveDirectory.Add(_networkProtocolClientDirectory, _clientTemplate);
                 }
-                
+
                 protocolOpCode = new ProtocolOpCode()
                 {
                     Message = OpCodeType.OuterMessage,
@@ -158,7 +162,8 @@ public sealed class ProtocolExporter
                     RoamingResponse = OpCodeType.OuterRoamingResponse,
                 };
                 opCodeName = "OuterOpcode";
-                protocolFiles = FileHelper.GetDirectoryFile(_networkProtocolDirectoryOuter, "*.proto", SearchOption.AllDirectories);
+                protocolFiles = FileHelper.GetDirectoryFile(_networkProtocolDirectoryOuter, "*.proto",
+                    SearchOption.AllDirectories);
                 break;
             }
             case NetworkProtocolOpCodeType.Inner:
@@ -183,7 +188,8 @@ public sealed class ProtocolExporter
                 };
                 opCodeName = "InnerOpcode";
                 saveDirectory.Add(_networkProtocolServerDirectory, _serverTemplate);
-                protocolFiles = FileHelper.GetDirectoryFile(_networkProtocolDirectoryInner, "*.proto", SearchOption.AllDirectories);
+                protocolFiles = FileHelper.GetDirectoryFile(_networkProtocolDirectoryInner, "*.proto",
+                    SearchOption.AllDirectories);
                 break;
             }
         }
@@ -192,7 +198,7 @@ public sealed class ProtocolExporter
         {
             return;
         }
-        
+
         #region GenerateFiles
 
         foreach (var filePath in protocolFiles)
@@ -221,7 +227,8 @@ public sealed class ProtocolExporter
 
                 if (currentLine.StartsWith("///"))
                 {
-                    messageStr.AppendFormat("	/// <summary>\r\n" + "	/// {0}\r\n" + "	/// </summary>\r\n", currentLine.Substring("///".Length));
+                    messageStr.AppendFormat("	/// <summary>\r\n" + "	/// {0}\r\n" + "	/// </summary>\r\n",
+                        currentLine.Substring("///".Length));
                     continue;
                 }
 
@@ -256,6 +263,7 @@ public sealed class ProtocolExporter
                                 Log.Error("Under Outer, /// does not support the Bson protocol!");
                                 return;
                             }
+
                             protocolType = null;
                             protocolIgnore = "\t\t[BsonIgnore]";
                             protocolMember = null;
@@ -298,11 +306,12 @@ public sealed class ProtocolExporter
                     {
                         messageStr.AppendLine("\t[ProtoContract]");
                     }
-                    
+
                     if (splits.Length > 1)
                     {
                         hasOpCode = true;
-                        var parameterArray = currentLine.Split(new[] { "//" }, StringSplitOptions.RemoveEmptyEntries)[1].Trim().Split(',');
+                        var parameterArray = currentLine.Split(new[] { "//" }, StringSplitOptions.RemoveEmptyEntries)[1]
+                            .Trim().Split(',');
                         parameter = parameterArray[0].Trim();
                         opcodeInfo = new OpcodeInfo()
                         {
@@ -330,12 +339,15 @@ public sealed class ProtocolExporter
                                         break;
                                     }
                                 }
+
                                 break;
                             }
                             case 3:
                             {
                                 responseTypeStr = parameterArray[1].Trim();
-                                customRouteType = parameter.Contains("IRoaming") ? $"Fantasy.RoamingType.{parameterArray[2].Trim()}" : $"Fantasy.RouteType.{parameterArray[2].Trim()}";
+                                customRouteType = parameter.Contains("IRoaming")
+                                    ? $"Fantasy.RoamingType.{parameterArray[2].Trim()}"
+                                    : $"Fantasy.RouteType.{parameterArray[2].Trim()}";
                                 break;
                             }
                         }
@@ -353,6 +365,7 @@ public sealed class ProtocolExporter
                     {
                         messageStr.Append(", IProto");
                     }
+
                     continue;
                 }
 
@@ -367,15 +380,18 @@ public sealed class ProtocolExporter
                     {
                         messageStr.AppendLine("\n\t{");
                         messageStr.AppendLine($"\t\tpublic static {className} Create(Scene scene)");
-                        messageStr.AppendLine($"\t\t{{\n\t\t\treturn scene.MessagePoolComponent.Rent<{className}>();\n\t\t}}");
+                        messageStr.AppendLine(
+                            $"\t\t{{\n\t\t\treturn scene.MessagePoolComponent.Rent<{className}>();\n\t\t}}");
                         messageStr.AppendLine($"\t\tpublic override void Dispose()");
                         messageStr.AppendLine($"\t\t{{");
-                        messageStr.AppendLine($"<<<<Dispose>>>#if FANTASY_NET || FANTASY_UNITY\n\t\t\tGetScene().MessagePoolComponent.Return<{className}>(this);\n#endif");
+                        messageStr.AppendLine(
+                            $"<<<<Dispose>>>#if FANTASY_NET || FANTASY_UNITY\n\t\t\tGetScene().MessagePoolComponent.Return<{className}>(this);\n#endif");
                         messageStr.AppendLine($"\t\t}}");
 
                         if (parameter == "IMessage")
                         {
-                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Message, protocolOpCode.AMessage++);
+                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Message,
+                                protocolOpCode.AMessage++);
                             messageStr.AppendLine($"\t\tpublic uint OpCode() {{ return {opCodeName}.{className}; }}");
                         }
                         else
@@ -397,7 +413,8 @@ public sealed class ProtocolExporter
 
                             if (hasOpCode)
                             {
-                                messageStr.AppendLine($"\t\tpublic uint OpCode() {{ return {opCodeName}.{className}; }}");
+                                messageStr.AppendLine(
+                                    $"\t\tpublic uint OpCode() {{ return {opCodeName}.{className}; }}");
                             }
 
                             if (customRouteType != null)
@@ -411,16 +428,19 @@ public sealed class ProtocolExporter
                             {
                                 case "IRequest":
                                 {
-                                    opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Request, protocolOpCode.ARequest++);
+                                    opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Request,
+                                        protocolOpCode.ARequest++);
                                     break;
                                 }
                                 case "IResponse":
                                 {
-                                    opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Response, protocolOpCode.AResponse++);
+                                    opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.Response,
+                                        protocolOpCode.AResponse++);
                                     if (!string.IsNullOrEmpty(protocolMember))
                                     {
                                         errorCodeStr.AppendLine($"\t\t[{protocolMember}(ErrorCodeKeyIndex)]");
                                     }
+
                                     errorCodeStr.AppendLine("\t\tpublic uint ErrorCode { get; set; }");
                                     disposeStr.AppendLine($"\t\t\tErrorCode = default;");
                                     break;
@@ -431,21 +451,28 @@ public sealed class ProtocolExporter
                                     {
                                         case "IAddressableRouteMessage":
                                         {
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.AddressableMessage, protocolOpCode.AAddressableMessage++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.AddressableMessage,
+                                                protocolOpCode.AAddressableMessage++);
                                             break;
                                         }
                                         case "IAddressableRouteRequest":
                                         {
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.AddressableRequest, protocolOpCode.AAddressableRequest++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.AddressableRequest,
+                                                protocolOpCode.AAddressableRequest++);
                                             break;
                                         }
                                         case "IAddressableRouteResponse":
                                         {
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.AddressableResponse, protocolOpCode.AAddressableResponse++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.AddressableResponse,
+                                                protocolOpCode.AAddressableResponse++);
                                             if (!string.IsNullOrEmpty(protocolMember))
                                             {
                                                 errorCodeStr.AppendLine($"\t\t[{protocolMember}(ErrorCodeKeyIndex)]");
                                             }
+
                                             errorCodeStr.AppendLine("\t\tpublic uint ErrorCode { get; set; }");
                                             disposeStr.AppendLine($"\t\t\tErrorCode = default;");
                                             break;
@@ -454,31 +481,44 @@ public sealed class ProtocolExporter
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Inner)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.CustomRouteMessage, protocolOpCode.ACustomRouteMessage++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.CustomRouteMessage,
+                                                protocolOpCode.ACustomRouteMessage++);
                                             break;
                                         }
                                         case "ICustomRouteRequest":
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Inner)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.CustomRouteRequest, protocolOpCode.ACustomRouteRequest++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.CustomRouteRequest,
+                                                protocolOpCode.ACustomRouteRequest++);
                                             break;
                                         }
                                         case "ICustomRouteResponse":
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Inner)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.CustomRouteResponse, protocolOpCode.ACustomRouteResponse++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.CustomRouteResponse,
+                                                protocolOpCode.ACustomRouteResponse++);
                                             if (!string.IsNullOrEmpty(protocolMember))
                                             {
                                                 errorCodeStr.AppendLine($"\t\t[{protocolMember}(ErrorCodeKeyIndex)]");
                                             }
+
                                             errorCodeStr.AppendLine("\t\tpublic uint ErrorCode { get; set; }");
                                             disposeStr.AppendLine($"\t\t\tErrorCode = default;");
                                             break;
@@ -489,7 +529,8 @@ public sealed class ProtocolExporter
                                             // {
                                             //     throw new NotSupportedException("Under Inner, /// does not support the IRoamingMessage!");
                                             // }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RoamingMessage, protocolOpCode.ARoamingMessage++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RoamingMessage, protocolOpCode.ARoamingMessage++);
                                             break;
                                         }
                                         case "IRoamingRequest":
@@ -498,7 +539,8 @@ public sealed class ProtocolExporter
                                             // {
                                             //     throw new NotSupportedException("Under Inner, /// does not support the IRoamingRequest!");
                                             // }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RoamingRequest, protocolOpCode.ARoamingRequest++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RoamingRequest, protocolOpCode.ARoamingRequest++);
                                             break;
                                         }
                                         case "IRoamingResponse":
@@ -507,11 +549,13 @@ public sealed class ProtocolExporter
                                             // {
                                             //     throw new NotSupportedException("Under Inner, /// does not support the IRoamingResponse!");
                                             // }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RoamingResponse, protocolOpCode.ARoamingResponse++);
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RoamingResponse, protocolOpCode.ARoamingResponse++);
                                             if (!string.IsNullOrEmpty(protocolMember))
                                             {
                                                 errorCodeStr.AppendLine($"\t\t[{protocolMember}(ErrorCodeKeyIndex)]");
                                             }
+
                                             errorCodeStr.AppendLine("\t\tpublic uint ErrorCode { get; set; }");
                                             disposeStr.AppendLine($"\t\t\tErrorCode = default;");
                                             break;
@@ -520,31 +564,41 @@ public sealed class ProtocolExporter
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Outer)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RouteMessage, protocolOpCode.ARouteMessage++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RouteMessage, protocolOpCode.ARouteMessage++);
                                             break;
                                         }
                                         case "IRouteRequest":
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Outer)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RouteRequest, protocolOpCode.ARouteRequest++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RouteRequest, protocolOpCode.ARouteRequest++);
                                             break;
                                         }
                                         case "IRouteResponse":
                                         {
                                             if (opCodeType == NetworkProtocolOpCodeType.Outer)
                                             {
-                                                throw new NotSupportedException("Under Inner, /// does not support the ICustomRouteMessage!");
+                                                throw new NotSupportedException(
+                                                    "Under Inner, /// does not support the ICustomRouteMessage!");
                                             }
-                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType, protocolOpCode.RouteResponse, protocolOpCode.ARouteResponse++);
+
+                                            opcodeInfo.Code = OpCode.Create(protocolOpCodeType,
+                                                protocolOpCode.RouteResponse, protocolOpCode.ARouteResponse++);
                                             if (!string.IsNullOrEmpty(protocolMember))
                                             {
                                                 errorCodeStr.AppendLine($"\t\t[{protocolMember}(ErrorCodeKeyIndex)]");
                                             }
+
                                             errorCodeStr.AppendLine("\t\tpublic uint ErrorCode { get; set; }");
                                             disposeStr.AppendLine($"\t\t\tErrorCode = default;");
                                             break;
@@ -589,7 +643,8 @@ public sealed class ProtocolExporter
 
                 if (currentLine.StartsWith("//"))
                 {
-                    messageStr.AppendFormat("\t\t///<summary>\r\n" + "\t\t/// {0}\r\n" + "\t\t///</summary>\r\n", currentLine.TrimStart('/', '/'));
+                    messageStr.AppendFormat("\t\t///<summary>\r\n" + "\t\t/// {0}\r\n" + "\t\t///</summary>\r\n",
+                        currentLine.TrimStart('/', '/'));
                     continue;
                 }
 
@@ -602,14 +657,14 @@ public sealed class ProtocolExporter
                     Members(messageStr, disposeStr, currentLine, protocolMember, ref keyIndex);
                 }
             }
-            
+
             var namespaceBuilder = new StringBuilder();
-            
+
             foreach (var @namespace in usingNamespace)
             {
                 namespaceBuilder.Append($"using {@namespace};\n");
             }
-            
+
             var csName = $"{Path.GetFileNameWithoutExtension(filePath)}.cs";
             foreach (var (directory, template) in saveDirectory)
             {
@@ -618,9 +673,10 @@ public sealed class ProtocolExporter
                 content = content.Replace("(UsingNamespace)", namespaceBuilder.ToString());
                 await File.WriteAllTextAsync(csFile, content);
             }
+
             file.Clear();
         }
-        
+
         #endregion
 
         #region GenerateOpCode
@@ -635,7 +691,7 @@ public sealed class ProtocolExporter
         {
             file.AppendLine($"\t\t public const uint {opcode.Name} = {opcode.Code};");
         }
-        
+
         _opcodes.Clear();
         file.AppendLine("\t}");
         file.AppendLine("}");
@@ -645,10 +701,12 @@ public sealed class ProtocolExporter
             var csFile = Path.Combine(directory, $"{opCodeName}.cs");
             await File.WriteAllTextAsync(csFile, file.ToString());
         }
+
         #endregion
     }
-    
-    private void Repeated(StringBuilder file, StringBuilder disposeStr, string newline, string protocolMember, ref int keyIndex)
+
+    private void Repeated(StringBuilder file, StringBuilder disposeStr, string newline, string protocolMember,
+        ref int keyIndex)
     {
         try
         {
@@ -669,8 +727,9 @@ public sealed class ProtocolExporter
             Log.Error($"{newline}\n {e}");
         }
     }
-    
-    private void Members(StringBuilder file, StringBuilder disposeStr, string currentLine, string protocolMember, ref int keyIndex)
+
+    private void Members(StringBuilder file, StringBuilder disposeStr, string currentLine, string protocolMember,
+        ref int keyIndex)
     {
         try
         {
@@ -685,6 +744,7 @@ public sealed class ProtocolExporter
             {
                 file.AppendLine($"\t\t[{protocolMember}({keyIndex++})]");
             }
+
             file.AppendLine($"\t\tpublic {typeCs} {name} {{ get; set; }}");
             disposeStr.AppendLine($"\t\t\t{name} = default;");
         }
@@ -693,7 +753,7 @@ public sealed class ProtocolExporter
             Log.Error($"{currentLine}\n {e}");
         }
     }
-    
+
     private string ConvertType(string type)
     {
         return type switch
@@ -763,9 +823,10 @@ public sealed class ProtocolExporter
             {
                 roamingTypeFileSb.AppendLine($"\t\t\t\tyield return {roamingType};");
             }
+
             roamingTypeFileSb.AppendLine("\t\t\t}\n\t\t}");
         }
-        
+
 
         roamingTypeFileSb.AppendLine("\t}\n}");
         var file = roamingTypeFileSb.ToString();
@@ -780,7 +841,7 @@ public sealed class ProtocolExporter
             await File.WriteAllTextAsync($"{_networkProtocolClientDirectory}RoamingType.cs", file);
         }
     }
-    
+
     private async Task RouteType()
     {
         var routeTypeFile = $"{_networkProtocolDirectory}RouteType.Config";
@@ -794,6 +855,7 @@ public sealed class ProtocolExporter
         {
             protoFileText = await File.ReadAllTextAsync(routeTypeFile);
         }
+
         var routeTypeFileSb = new StringBuilder();
         routeTypeFileSb.AppendLine("namespace Fantasy\n{");
         routeTypeFileSb.AppendLine("\t// Route协议定义(需要定义1000以上、因为1000以内的框架预留)\t");
@@ -835,10 +897,16 @@ public sealed class ProtocolExporter
             await File.WriteAllTextAsync($"{_networkProtocolClientDirectory}RouteType.cs", file);
         }
     }
-    
+
+
     private void LoadTemplate()
     {
-        string[] lines = NetworkProtocolTemplate.Template.Split(["\r\n", "\n"], StringSplitOptions.None);
+        // 获取当前运行根目录（即应用程序的工作目录）
+        string currentDirectory = Directory.GetCurrentDirectory();
+        string filePath = Path.Combine(currentDirectory, "Template.txt");
+
+        // 读取文件所有行
+        string[] lines = File.ReadAllLines(filePath);
 
         StringBuilder serverSb = new StringBuilder();
         StringBuilder clientSb = new StringBuilder();
@@ -853,12 +921,14 @@ public sealed class ProtocolExporter
                 flag = 1;
                 continue;
             }
-            else if (trim.StartsWith("#else"))
+
+            if (trim.StartsWith("#else"))
             {
                 flag = 2;
                 continue;
             }
-            else if (trim.StartsWith($"#endif"))
+
+            if (trim.StartsWith($"#endif"))
             {
                 flag = 0;
                 continue;
diff --git a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/ExporterSettings.json b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/ExporterSettings.json
index f093812..809f350 100644
--- a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/ExporterSettings.json
+++ b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/ExporterSettings.json
@@ -1,15 +1,15 @@
 {
     "Export": {
         "NetworkProtocolDirectory": {
-            "Value": "../../../Examples/Config/NetworkProtocol/",
+            "Value": "../../../Config/NetworkProtocol/",
             "Comment": "ProtoBuf文件所在的文件夹位置"
         },
         "NetworkProtocolServerDirectory": {
-            "Value": "../../../Examples/Server/Entity/Generate/NetworkProtocol/",
+            "Value": "../../../Entity/Generate/NetworkProtocol/",
             "Comment": "ProtoBuf生成到服务端的文件夹位置"
         },
         "NetworkProtocolClientDirectory": {
-            "Value": "../../../Examples/Client/Unity/Assets/Scripts/Hotfix/Generate/NetworkProtocol/",
+            "Value": "../../../../Fishing2/Assets/Scripts/Generate/NetworkProtocol/",
             "Comment": "ProtoBuf生成到客户端的文件夹位置"
         },
         "Serializes": {
diff --git a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Fantasy.Tools.NetworkProtocol.csproj b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Fantasy.Tools.NetworkProtocol.csproj
index 273e284..01b17d9 100644
--- a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Fantasy.Tools.NetworkProtocol.csproj
+++ b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Fantasy.Tools.NetworkProtocol.csproj
@@ -32,16 +32,16 @@
     </ItemGroup>
 
     <ItemGroup>
-      <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\FileHelper.cs">
+      <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\FileHelper.cs">
         <Link>Core\FileHelper.cs</Link>
       </Compile>
-      <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\HashCodeHelper.cs">
+      <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\HashCodeHelper.cs">
         <Link>Core\HashCodeHelper.cs</Link>
       </Compile>
-      <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\JsonHelper.cs">
+      <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Helper\JsonHelper.cs">
         <Link>Core\JsonHelper.cs</Link>
       </Compile>
-      <Compile Include="..\..\..\Fantasy.Net\Fantasy.Net\Runtime\Core\Network\Message\PacketParser\OpCode.cs">
+      <Compile Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Runtime\Core\Network\Message\PacketParser\OpCode.cs">
         <Link>ProtocalExporter\OpCode.cs</Link>
       </Compile>
       <Compile Update="ExporterSettingsHelper.cs">
@@ -59,10 +59,9 @@
       <None Update="Run.sh">
         <CopyToOutputDirectory>Always</CopyToOutputDirectory>
       </None>
-    </ItemGroup>
-
-    <ItemGroup>
-      <ProjectReference Include="..\..\..\Fantasy\Fantasy.Net\Fantasy.Net\Fantasy.Net.csproj" />
+      <None Update="Template.txt">
+        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      </None>
     </ItemGroup>
 
 </Project>
diff --git a/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Template.txt b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Template.txt
new file mode 100644
index 0000000..6eb76c5
--- /dev/null
+++ b/Tools/SourceCode/Fantasy.Tools.NetworkProtocol/Template.txt
@@ -0,0 +1,33 @@
+#if SERVER
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using MongoDB.Bson.Serialization.Attributes;
+using Fantasy;
+using Fantasy.Network.Interface;
+using Fantasy.Serialize;
+// ReSharper disable InconsistentNaming
+// ReSharper disable RedundantUsingDirective
+// ReSharper disable RedundantOverriddenMember
+// ReSharper disable PartialTypeWithSinglePart
+// ReSharper disable UnusedAutoPropertyAccessor.Global
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable CheckNamespace
+#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
+#pragma warning disable CS8618
+
+namespace NBC
+{	
+#else
+using ProtoBuf;
+(UsingNamespace)
+using System.Collections.Generic;
+using Fantasy;
+using Fantasy.Network.Interface;
+using Fantasy.Serialize;
+#pragma warning disable CS8618
+
+namespace Fantasy
+{
+#endif
+(Content)}
\ No newline at end of file
diff --git a/Tools/SourceCode/Fantasy.Tools.SourceCode.sln b/Tools/SourceCode/Fantasy.Tools.SourceCode.sln
index 901fa36..47d417f 100644
--- a/Tools/SourceCode/Fantasy.Tools.SourceCode.sln
+++ b/Tools/SourceCode/Fantasy.Tools.SourceCode.sln
@@ -12,12 +12,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fantasy.Tools.ExporterConfi
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SourceCode", "SourceCode", "{A402EB74-8BF8-4A53-82F2-F77E59D9F4C6}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fantasy.Net", "..\..\Fantasy\Fantasy.Net\Fantasy.Net\Fantasy.Net.csproj", "{0D68E07B-F631-4BC9-A9F3-94367E81AAA6}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Fantasy", "Fantasy", "{14CA88F5-2827-4302-B522-9E19CD9F65BE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fantasy.ConfigTable", "..\..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Fantasy.ConfigTable.csproj", "{C0AB5238-D911-4BB2-B732-54572A3DF0DF}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -40,21 +34,11 @@ Global
 		{5A236869-283F-4046-860B-E295963139AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{5A236869-283F-4046-860B-E295963139AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{5A236869-283F-4046-860B-E295963139AB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{0D68E07B-F631-4BC9-A9F3-94367E81AAA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{0D68E07B-F631-4BC9-A9F3-94367E81AAA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{0D68E07B-F631-4BC9-A9F3-94367E81AAA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{0D68E07B-F631-4BC9-A9F3-94367E81AAA6}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C0AB5238-D911-4BB2-B732-54572A3DF0DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C0AB5238-D911-4BB2-B732-54572A3DF0DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C0AB5238-D911-4BB2-B732-54572A3DF0DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C0AB5238-D911-4BB2-B732-54572A3DF0DF}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{E0F9231E-F057-4121-B167-7AC47D48E7E3} = {CCF6F6B1-50D8-4B0D-91B9-035CDCC4B1CA}
 		{5A236869-283F-4046-860B-E295963139AB} = {CCF6F6B1-50D8-4B0D-91B9-035CDCC4B1CA}
 		{F01BD146-FDEA-46D6-9A08-F3CCF05D817E} = {A402EB74-8BF8-4A53-82F2-F77E59D9F4C6}
 		{72D45E2D-EF78-4D80-8BFC-ED95FA8543C7} = {A402EB74-8BF8-4A53-82F2-F77E59D9F4C6}
-		{0D68E07B-F631-4BC9-A9F3-94367E81AAA6} = {14CA88F5-2827-4302-B522-9E19CD9F65BE}
-		{C0AB5238-D911-4BB2-B732-54572A3DF0DF} = {14CA88F5-2827-4302-B522-9E19CD9F65BE}
 	EndGlobalSection
 EndGlobal
diff --git a/Tools/SourceCode/Fantasy.Tools.SourceCode.sln.DotSettings.user b/Tools/SourceCode/Fantasy.Tools.SourceCode.sln.DotSettings.user
index 35b3967..a2fe3b5 100644
--- a/Tools/SourceCode/Fantasy.Tools.SourceCode.sln.DotSettings.user
+++ b/Tools/SourceCode/Fantasy.Tools.SourceCode.sln.DotSettings.user
@@ -10,6 +10,7 @@
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALicenseContext_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5127915f4e764e0285562916e9114ab3411610_003F47_003Fcbc79ab6_003FLicenseContext_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemoryPackableAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F958e054c967b40b3a108913205d36c4933400_003Fcd_003Fa95eada9_003FMemoryPackableAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMemoryPackFormatter_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F958e054c967b40b3a108913205d36c4933400_003F7e_003F8f320c8b_003FMemoryPackFormatter_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
+	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AParserResultExtensions_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc453ace1e4574cfe83f15ca8c8f735bf37000_003F04_003Fdce32804_003FParserResultExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AParser_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc453ace1e4574cfe83f15ca8c8f735bf37000_003F47_003F09aa3821_003FParser_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AProtoReader_002EState_002EReadMethods_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F37c1347d9c665a9c38de996b994b62177561c4c4515e4d49fdf93cd848fe49b_003FProtoReader_002EState_002EReadMethods_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARunResults_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe923221d2ee660ba5d21ad70b29da65ed3a69653ab6311336652dc91242cb_003FRunResults_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
