更新最新框架

This commit is contained in:
Bob.Song
2025-11-11 17:43:11 +08:00
parent 7b10d4cb31
commit fd3c6ec38d
1048 changed files with 11041 additions and 87002 deletions

View File

@@ -1,30 +1,30 @@
using System.Reflection;
using System.Runtime.Loader;
using Fantasy.Helper;
namespace NB
namespace Fantasy
{
public static class AssemblyHelper
{
private const string HotfixDll = "Hotfix";
private static AssemblyLoadContext? _assemblyLoadContext = null;
public static System.Reflection.Assembly[] Assemblies
public static void Initialize()
{
get
{
var assemblies = new System.Reflection.Assembly[2];
assemblies[0] = LoadEntityAssembly();
assemblies[1] = LoadHotfixAssembly();
return assemblies;
}
LoadEntityAssembly();
LoadHotfixAssembly();
}
private static System.Reflection.Assembly LoadEntityAssembly()
private static void LoadEntityAssembly()
{
return typeof(AssemblyHelper).Assembly;
// .NET 运行时采用延迟加载机制,如果代码中不使用程序集的类型,程序集不会被加载
// 执行一下,触发运行时强制加载从而自动注册到框架中
// 因为AssemblyHelper代码在Entity项目里所以需要获取这个项目的Assembly
// 然后调用EnsureLoaded方法强制加载一下
typeof(AssemblyHelper).Assembly.EnsureLoaded();
}
private static System.Reflection.Assembly LoadHotfixAssembly()
public static System.Reflection.Assembly LoadHotfixAssembly()
{
if (_assemblyLoadContext != null)
{
@@ -33,9 +33,16 @@ namespace NB
}
_assemblyLoadContext = new AssemblyLoadContext(HotfixDll, true);
var dllBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.dll"));
var pdbBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.pdb"));
return _assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
var dllBytes = File.ReadAllBytes(Path.Combine(AppContext.BaseDirectory, $"{HotfixDll}.dll"));
var pdbBytes = File.ReadAllBytes(Path.Combine(AppContext.BaseDirectory, $"{HotfixDll}.pdb"));
var assembly = _assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
// 强制触发 ModuleInitializer 执行
// AssemblyLoadContext.LoadFromStream 只加载程序集到内存,不会自动触发 ModuleInitializer
// 必须访问程序集中的类型才能触发初始化,这里通过反射调用生成的 AssemblyMarker
// 注意此方法仅用于热重载场景JITNative AOT 不支持动态加载
// 拿到Assembly就用EnsureLoaded()方法强制触发
assembly.EnsureLoaded();
return assembly;
}
}
}
}

View File

@@ -1,39 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<LangVersion>default</LangVersion>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<RootNamespace>Entity</RootNamespace>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>TRACE;FANTASY_NET</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Fantasy-Net" Version="2025.2.0" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
</ItemGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DefineConstants>TRACE;FANTASY_NET</DefineConstants>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ThirdParty\ThirdParty.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Fantasy\Fantasy.Net\Fantasy.Net\Fantasy.Net.csproj" />
<ProjectReference Include="..\Fantasy\Fantasy.Packages\Fantasy.ConfigTable\Net\Fantasy.ConfigTable.csproj" />
<ProjectReference Include="..\ThirdParty\ThirdParty.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.12.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.12.1" />
<PackageReference Include="ToolGood.Words" Version="3.1.0.2" />
</ItemGroup>
<ItemGroup>
<Folder Include="Game\Shop\" />
<Folder Include="Generate\ConfigTable\Entity\" />
<Folder Include="Generate\ConfigTable\Partial\" />
<Folder Include="Social\Entity\" />
<Folder Include="Social\Mail\" />
</ItemGroup>
</Project>
</Project>

77
Entity/Fantasy.config Normal file
View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<fantasy xmlns="http://fantasy.net/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://fantasy.net/config Fantasy.xsd">
<!-- ↓这是为了兼容旧版Fantasy的导表Json配置↓, 如果这个XML节点被注释掉, 就会以 Fantasy.config 配置为准 -->
<!--<configTable path="../../../../Config/Json/Server" />-->
<!-- ↓这是目前推荐使用的Fantasy框架启服配置↓ -->
<network inner="TCP" maxMessageSize="1048560" />
<session idleTimeout="8000" idleInterval="5000" />
<server>
<!-- 机器配置 -->
<machines>
<machine id="1" outerIP="127.0.0.1" outerBindIP="127.0.0.1" innerBindIP="127.0.0.1" />
</machines>
<!-- 进程配置 -->
<processes>
<process id="1" machineId="1" startupGroup="0" />
</processes>
<!-- 世界配置 -->
<worlds>
<world id="1" worldName="WorldA">
<database dbType="MongoDB" dbName="fantasy_main" dbConnection="mongodb://127.0.0.1" />
</world>
</worlds>
<!-- 场景配置 -->
<scenes>
<scene id="1001"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Authentication"
networkProtocol="KCP"
outerPort="20001" innerPort="11001" />
<scene id="1002"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Addressable"
networkProtocol=""
outerPort="0" innerPort="11011" />
<scene id="1003"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Gate"
networkProtocol="KCP"
outerPort="20000" innerPort="11021" />
<scene id="1004"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Game"
networkProtocol=""
outerPort="0" innerPort="11031" />
<scene id="1006"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Social"
networkProtocol=""
outerPort="0" innerPort="11051" />
<scene id="1007"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Map"
networkProtocol=""
outerPort="0" innerPort="11061" />
</scenes>
</server>
</fantasy>

345
Entity/Fantasy.xsd Normal file
View File

@@ -0,0 +1,345 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://fantasy.net/config"
xmlns="http://fantasy.net/config"
elementFormDefault="qualified">
<!-- Root element -->
<xs:element name="fantasy">
<xs:annotation>
<xs:documentation>Fantasy框架配置文件根元素</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="configTable" type="configTableType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>配置表路径设置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="network" type="networkRuntimeType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>网络运行时配置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="session" type="sessionRuntimeType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>会话运行时配置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="server" type="serverType" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>服务器配置</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ConfigTable type -->
<xs:complexType name="configTableType">
<xs:attribute name="path" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>配置表文件路径</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Server type -->
<xs:complexType name="serverType">
<xs:sequence>
<xs:element name="machines" type="machinesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>机器配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="processes" type="processesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>进程配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="worlds" type="worldsType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>世界配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="scenes" type="scenesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>场景配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="units" type="unitsType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>单位配置列表</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Machines types -->
<xs:complexType name="machinesType">
<xs:sequence>
<xs:element name="machine" type="machineType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="machineType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>机器ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="outerIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>外网IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="outerBindIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>外网绑定IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="innerBindIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>内网绑定IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Processes types -->
<xs:complexType name="processesType">
<xs:sequence>
<xs:element name="process" type="processType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="processType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>进程ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="machineId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>所属机器ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="startupGroup" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>启动分组</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Worlds types -->
<xs:complexType name="worldsType">
<xs:sequence>
<xs:element name="world" type="worldType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- database的选择 -->
<xs:complexType name="databaseType">
<xs:attribute name="dbType" use="required">
<xs:annotation>
<xs:documentation>数据库类型</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- PostgreSQL -->
<xs:enumeration value="PostgreSQL"/>
<xs:enumeration value="Postgres"/>
<xs:enumeration value="PgSQL"/>
<xs:enumeration value="Pg"/>
<xs:enumeration value="PG"/>
<!-- MongoDB -->
<xs:enumeration value="MongoDB"/>
<xs:enumeration value="Mongo"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dbName" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>数据库名称</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="dbConnection" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>数据库连接字符串</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="worldType">
<!-- 每个world允许包含1或n个database -->
<xs:sequence>
<xs:annotation>
<xs:documentation>世界中配置的数据库</xs:documentation>
</xs:annotation>
<xs:element name="database" type="databaseType" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<!-- world需要id和worldName -->
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>世界ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="worldName" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>世界名称</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Scenes types -->
<xs:complexType name="scenesType">
<xs:sequence>
<xs:element name="scene" type="sceneType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sceneType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>场景ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="processConfigId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>进程配置ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="worldConfigId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>世界配置ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sceneRuntimeMode" use="required">
<xs:annotation>
<xs:documentation>场景运行模式</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="MainThread"/>
<xs:enumeration value="MultiThread"/>
<xs:enumeration value="ThreadPool"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="sceneTypeString" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>场景类型字符串</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="networkProtocol" use="optional">
<xs:annotation>
<xs:documentation>网络协议类型</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="TCP"/>
<xs:enumeration value="KCP"/>
<xs:enumeration value="WebSocket"/>
<xs:enumeration value="HTTP"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="outerPort" type="xs:unsignedInt" use="optional" default="0">
<xs:annotation>
<xs:documentation>外网端口</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="innerPort" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>内网端口</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Network Runtime type -->
<xs:complexType name="networkRuntimeType">
<xs:attribute name="inner" use="optional" default="TCP">
<xs:annotation>
<xs:documentation>服务器内部网络协议</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="TCP"/>
<xs:enumeration value="KCP"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="maxMessageSize" type="xs:int" use="optional" default="1048560">
<xs:annotation>
<xs:documentation>消息体最大长度(字节)默认1048560字节(约1.02MB)</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Session Runtime type -->
<xs:complexType name="sessionRuntimeType">
<xs:attribute name="idleTimeout" type="xs:int" use="optional" default="8000">
<xs:annotation>
<xs:documentation>Session idle check timeout (in milliseconds)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="idleInterval" type="xs:int" use="optional" default="5000">
<xs:annotation>
<xs:documentation>Session idle check interval (in milliseconds)</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Units types -->
<xs:complexType name="unitsType">
<xs:sequence>
<xs:element name="unit" type="unitType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitType">
<xs:sequence>
<xs:element name="dic" type="unitDicType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>单位字典数据</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>单位ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>单位名称</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="model" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>单位模型</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="unitDicType">
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="key" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>字典键</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="value" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>字典值</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class BaitConfig : ASerialize, IProto, IConfigTable
public sealed partial class BaitConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class BasicConfig : ASerialize, IProto, IConfigTable
public sealed partial class BasicConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,25 +6,20 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class BobberConfig : ASerialize, IProto, IConfigTable
public sealed partial class BobberConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]
public uint Id { get; set; } // Id
[ProtoMember(2)]
public uint Displacement { get; set; } // 位移
[ProtoMember(3)]
public uint NightLight { get; set; } // 是否夜光
[ProtoIgnore]
public uint Key => Id;
[ProtoMember(1)] public uint Id { get; set; } // Id
[ProtoMember(2)] public uint Displacement { get; set; } // 位移
[ProtoMember(3)] public uint NightLight { get; set; } // 是否夜光
[ProtoIgnore] public uint Key => Id;
#region Static
private static ConfigContext<BobberConfig> Context => ConfigTableHelper.Table<BobberConfig>();
public static BobberConfig Get(uint key)
@@ -36,7 +31,7 @@ namespace NBF
{
return Context.Get(match);
}
public static BobberConfig Fist()
{
return Context.Fist();
@@ -56,7 +51,7 @@ namespace NBF
{
return Context.Last(match);
}
public static int Count()
{
return Context.Count();
@@ -76,10 +71,12 @@ namespace NBF
{
return Context.GetList(match);
}
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
{
ConfigTableHelper.ParseLine<BobberConfig>(arr);
}
#endregion
}
}

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class FeederConfig : ASerialize, IProto, IConfigTable
public sealed partial class FeederConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class FishConfig : ASerialize, IProto, IConfigTable
public sealed partial class FishConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class HookConfig : ASerialize, IProto, IConfigTable
public sealed partial class HookConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class InitConfig : ASerialize, IProto, IConfigTable
public sealed partial class InitConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class ItemConfig : ASerialize, IProto, IConfigTable
public sealed partial class ItemConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class LineConfig : ASerialize, IProto, IConfigTable
public sealed partial class LineConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class LureConfig : ASerialize, IProto, IConfigTable
public sealed partial class LureConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class ReelConfig : ASerialize, IProto, IConfigTable
public sealed partial class ReelConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class RingConfig : ASerialize, IProto, IConfigTable
public sealed partial class RingConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class RodConfig : ASerialize, IProto, IConfigTable
public sealed partial class RodConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class RodRingConfig : ASerialize, IProto, IConfigTable
public sealed partial class RodRingConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -6,12 +6,12 @@ using System.Reflection;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Fantasy.Serialize;
using Fantasy.ConfigTable;
using NBF.ConfigTable;
namespace NBF
{
[ProtoContract]
public sealed partial class WeightConfig : ASerialize, IProto, IConfigTable
public sealed partial class WeightConfig : ASerialize, IConfigTable
{
[ProtoMember(1)]

View File

@@ -1,27 +0,0 @@
namespace Fantasy
{
// 生成器自动生成,请不要手动编辑。
public static class SceneType
{
public const int Authentication = 1;
public const int Addressable = 2;
public const int Gate = 3;
public const int Game = 4;
public const int Map = 5;
public const int Activity = 6;
public const int Cache = 7;
public const int Social = 8;
public static readonly Dictionary<string, int> SceneTypeDic = new Dictionary<string, int>()
{
{ "Authentication", 1 },
{ "Addressable", 2 },
{ "Gate", 3 },
{ "Game", 4 },
{ "Map", 5 },
{ "Activity", 6 },
{ "Cache", 7 },
{ "Social", 8 },
};
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,12 +17,12 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// 角色基础信息
/// </summary>
[ProtoContract]
public partial class RoleBaseInfo : AMessage, IProto
public partial class RoleBaseInfo : AMessage
{
public static RoleBaseInfo Create(Scene scene)
{
@@ -53,7 +54,7 @@ namespace Fantasy
public VipInfo VipInfo { get; set; }
}
[ProtoContract]
public partial class KeyValueInt64 : AMessage, IProto
public partial class KeyValueInt64 : AMessage
{
public static KeyValueInt64 Create(Scene scene)
{
@@ -76,7 +77,7 @@ namespace Fantasy
/// 角色信息
/// </summary>
[ProtoContract]
public partial class RoleInfo : AMessage, IProto
public partial class RoleInfo : AMessage
{
public static RoleInfo Create(Scene scene)
{
@@ -123,7 +124,7 @@ namespace Fantasy
/// 角色信息
/// </summary>
[ProtoContract]
public partial class RoleSimpleInfo : AMessage, IProto
public partial class RoleSimpleInfo : AMessage
{
public static RoleSimpleInfo Create(Scene scene)
{
@@ -161,7 +162,7 @@ namespace Fantasy
/// VIP信息
/// </summary>
[ProtoContract]
public partial class VipInfo : AMessage, IProto
public partial class VipInfo : AMessage
{
public static VipInfo Create(Scene scene)
{
@@ -187,7 +188,7 @@ namespace Fantasy
/// 奖励信息
/// </summary>
[ProtoContract]
public partial class AwardInfo : AMessage, IProto
public partial class AwardInfo : AMessage
{
public static AwardInfo Create(Scene scene)
{
@@ -210,7 +211,7 @@ namespace Fantasy
/// 玩家当前使用钓组信息
/// </summary>
[ProtoContract]
public partial class ItemBindInfo : AMessage, IProto
public partial class ItemBindInfo : AMessage
{
public static ItemBindInfo Create(Scene scene)
{
@@ -233,7 +234,7 @@ namespace Fantasy
/// 物品信息
/// </summary>
[ProtoContract]
public partial class ItemInfo : AMessage, IProto
public partial class ItemInfo : AMessage
{
public static ItemInfo Create(Scene scene)
{
@@ -268,7 +269,7 @@ namespace Fantasy
/// fish信息
/// </summary>
[ProtoContract]
public partial class FishInfo : AMessage, IProto
public partial class FishInfo : AMessage
{
public static FishInfo Create(Scene scene)
{
@@ -297,7 +298,7 @@ namespace Fantasy
public long ExpirationTime { get; set; }
}
[ProtoContract]
public partial class ActivityInfo : AMessage, IProto
public partial class ActivityInfo : AMessage
{
public static ActivityInfo Create(Scene scene)
{
@@ -326,7 +327,7 @@ namespace Fantasy
/// 技能情况
/// </summary>
[ProtoContract]
public partial class SkillInfo : AMessage, IProto
public partial class SkillInfo : AMessage
{
public static SkillInfo Create(Scene scene)
{
@@ -349,3 +350,4 @@ namespace Fantasy
public int Exp { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,7 +17,7 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// /////////// ******** 物品信息 *******/////////////
/// </summary>
@@ -24,7 +25,7 @@ namespace Fantasy
/// 请求背包列表
/// </summary>
[ProtoContract]
public partial class C2Game_GetItemsRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_GetItemsRequest : AMessage, ICustomRouteRequest
{
public static C2Game_GetItemsRequest Create(Scene scene)
{
@@ -46,7 +47,7 @@ namespace Fantasy
/// 请求背包列表响应
/// </summary>
[ProtoContract]
public partial class Game2C_GetItemsResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_GetItemsResponse : AMessage, ICustomRouteResponse
{
public static Game2C_GetItemsResponse Create(Scene scene)
{
@@ -73,7 +74,7 @@ namespace Fantasy
/// 请求使用物品
/// </summary>
[ProtoContract]
public partial class C2Game_UseItemRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_UseItemRequest : AMessage, ICustomRouteRequest
{
public static C2Game_UseItemRequest Create(Scene scene)
{
@@ -95,7 +96,7 @@ namespace Fantasy
/// 请求使用物品响应
/// </summary>
[ProtoContract]
public partial class Game2C_UseItemResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_UseItemResponse : AMessage, ICustomRouteResponse
{
public static Game2C_UseItemResponse Create(Scene scene)
{
@@ -116,7 +117,7 @@ namespace Fantasy
/// 物品变化
/// </summary>
[ProtoContract]
public partial class Game2C_ItemChange : AMessage, ICustomRouteMessage, IProto
public partial class Game2C_ItemChange : AMessage, ICustomRouteMessage
{
public static Game2C_ItemChange Create(Scene scene)
{
@@ -148,7 +149,7 @@ namespace Fantasy
/// 请求安装或取下配件
/// </summary>
[ProtoContract]
public partial class C2Game_RigChangeRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_RigChangeRequest : AMessage, ICustomRouteRequest
{
public static C2Game_RigChangeRequest Create(Scene scene)
{
@@ -179,7 +180,7 @@ namespace Fantasy
/// 请求安装配件响应
/// </summary>
[ProtoContract]
public partial class Game2C_RigChangeResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_RigChangeResponse : AMessage, ICustomRouteResponse
{
public static Game2C_RigChangeResponse Create(Scene scene)
{
@@ -206,7 +207,7 @@ namespace Fantasy
/// 请求鱼护列表
/// </summary>
[ProtoContract]
public partial class C2Game_GetFishsRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_GetFishsRequest : AMessage, ICustomRouteRequest
{
public static C2Game_GetFishsRequest Create(Scene scene)
{
@@ -228,7 +229,7 @@ namespace Fantasy
/// 请求鱼护列表响应
/// </summary>
[ProtoContract]
public partial class Game2C_GetFishsResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_GetFishsResponse : AMessage, ICustomRouteResponse
{
public static Game2C_GetFishsResponse Create(Scene scene)
{
@@ -252,7 +253,7 @@ namespace Fantasy
/// 鱼护变化
/// </summary>
[ProtoContract]
public partial class Game2C_FishChange : AMessage, ICustomRouteMessage, IProto
public partial class Game2C_FishChange : AMessage, ICustomRouteMessage
{
public static Game2C_FishChange Create(Scene scene)
{
@@ -281,7 +282,7 @@ namespace Fantasy
/// 请求出售
/// </summary>
[ProtoContract]
public partial class C2Game_SellFishRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_SellFishRequest : AMessage, ICustomRouteRequest
{
public static C2Game_SellFishRequest Create(Scene scene)
{
@@ -306,7 +307,7 @@ namespace Fantasy
/// 请求出售响应
/// </summary>
[ProtoContract]
public partial class Game2C_SellFishResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_SellFishResponse : AMessage, ICustomRouteResponse
{
public static Game2C_SellFishResponse Create(Scene scene)
{
@@ -333,7 +334,7 @@ namespace Fantasy
/// 请求购买
/// </summary>
[ProtoContract]
public partial class C2Game_BuyRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_BuyRequest : AMessage, ICustomRouteRequest
{
public static C2Game_BuyRequest Create(Scene scene)
{
@@ -355,7 +356,7 @@ namespace Fantasy
/// 请求购买响应
/// </summary>
[ProtoContract]
public partial class Game2C_BuyResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_BuyResponse : AMessage, ICustomRouteResponse
{
public static Game2C_BuyResponse Create(Scene scene)
{
@@ -376,3 +377,4 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,12 +17,12 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// 通知游戏服角色进入该游戏服
/// </summary>
[ProtoContract]
public partial class G2Common_EnterRequest : AMessage, IRouteRequest, IProto
public partial class G2Common_EnterRequest : AMessage, IRouteRequest
{
public static G2Common_EnterRequest Create(Scene scene)
{
@@ -47,7 +48,7 @@ namespace Fantasy
public int RouteType { get; set; }
}
[ProtoContract]
public partial class G2Common_EnterResponse : AMessage, IRouteResponse, IProto
public partial class G2Common_EnterResponse : AMessage, IRouteResponse
{
public static G2Common_EnterResponse Create(Scene scene)
{
@@ -71,7 +72,7 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class G2Common_ExitRequest : AMessage, IRouteRequest, IProto
public partial class G2Common_ExitRequest : AMessage, IRouteRequest
{
public static G2Common_ExitRequest Create(Scene scene)
{
@@ -94,7 +95,7 @@ namespace Fantasy
public long GateRouteId { get; set; }
}
[ProtoContract]
public partial class Common2G_ExitResponse : AMessage, IRouteResponse, IProto
public partial class Common2G_ExitResponse : AMessage, IRouteResponse
{
public static Common2G_ExitResponse Create(Scene scene)
{
@@ -115,7 +116,7 @@ namespace Fantasy
/// 获取玩家基础信息
/// </summary>
[ProtoContract]
public partial class S2G_GetPlayerBasicInfoRequest : AMessage, IRouteRequest, IProto
public partial class S2G_GetPlayerBasicInfoRequest : AMessage, IRouteRequest
{
public static S2G_GetPlayerBasicInfoRequest Create(Scene scene)
{
@@ -138,7 +139,7 @@ namespace Fantasy
/// 获取玩家基础信息响应
/// </summary>
[ProtoContract]
public partial class G2S_GetPlayerBasicInfoResponse : AMessage, IRouteResponse, IProto
public partial class G2S_GetPlayerBasicInfoResponse : AMessage, IRouteResponse
{
public static G2S_GetPlayerBasicInfoResponse Create(Scene scene)
{
@@ -159,7 +160,7 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class S2G_ChatMessage : AMessage, IRouteMessage, IProto
public partial class S2G_ChatMessage : AMessage, IRouteMessage
{
public static S2G_ChatMessage Create(Scene scene)
{
@@ -183,7 +184,7 @@ namespace Fantasy
/// 创建聊天频道
/// </summary>
[ProtoContract]
public partial class Club2Chat_CreateChannel : AMessage, IRouteMessage, IProto
public partial class Club2Chat_CreateChannel : AMessage, IRouteMessage
{
public static Club2Chat_CreateChannel Create(Scene scene)
{
@@ -204,7 +205,7 @@ namespace Fantasy
/// 请求进入房间
/// </summary>
[ProtoContract]
public partial class G2Map_EnterMapRequest : AMessage, IRouteRequest, IProto
public partial class G2Map_EnterMapRequest : AMessage, IRouteRequest
{
public static G2Map_EnterMapRequest Create(Scene scene)
{
@@ -233,7 +234,7 @@ namespace Fantasy
/// 请求进入房间响应
/// </summary>
[ProtoContract]
public partial class Map2G_EnterMapResponse : AMessage, IRouteResponse, IProto
public partial class Map2G_EnterMapResponse : AMessage, IRouteResponse
{
public static Map2G_EnterMapResponse Create(Scene scene)
{
@@ -263,7 +264,7 @@ namespace Fantasy
/// 请求离开房间
/// </summary>
[ProtoContract]
public partial class G2Map_ExitRoomRequest : AMessage, IRouteRequest, IProto
public partial class G2Map_ExitRoomRequest : AMessage, IRouteRequest
{
public static G2Map_ExitRoomRequest Create(Scene scene)
{
@@ -289,7 +290,7 @@ namespace Fantasy
/// 请求离开房间响应
/// </summary>
[ProtoContract]
public partial class Map2G_ExiRoomResponse : AMessage, IRouteResponse, IProto
public partial class Map2G_ExiRoomResponse : AMessage, IRouteResponse
{
public static Map2G_ExiRoomResponse Create(Scene scene)
{
@@ -307,3 +308,4 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,12 +17,12 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// 请求创建房间
/// </summary>
[ProtoContract]
public partial class C2Map_CreateRoomRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Map_CreateRoomRequest : AMessage, ICustomRouteRequest
{
public static C2Map_CreateRoomRequest Create(Scene scene)
{
@@ -46,7 +47,7 @@ namespace Fantasy
/// 请求创建房间成功
/// </summary>
[ProtoContract]
public partial class Map2C_CreateRoomResponse : AMessage, ICustomRouteResponse, IProto
public partial class Map2C_CreateRoomResponse : AMessage, ICustomRouteResponse
{
public static Map2C_CreateRoomResponse Create(Scene scene)
{
@@ -73,7 +74,7 @@ namespace Fantasy
/// 请求网关离开房间(离开房间,但是不离开地图)
/// </summary>
[ProtoContract]
public partial class C2G_ExitRoomRequest : AMessage, IRequest, IProto
public partial class C2G_ExitRoomRequest : AMessage, IRequest
{
public static C2G_ExitRoomRequest Create(Scene scene)
{
@@ -96,7 +97,7 @@ namespace Fantasy
/// 请求网关进入离开响应
/// </summary>
[ProtoContract]
public partial class G2C_ExitRoomResponse : AMessage, IResponse, IProto
public partial class G2C_ExitRoomResponse : AMessage, IResponse
{
public static G2C_ExitRoomResponse Create(Scene scene)
{
@@ -120,7 +121,7 @@ namespace Fantasy
/// 请求网关进入地图
/// </summary>
[ProtoContract]
public partial class C2G_EnterMapRequest : AMessage, IRequest, IProto
public partial class C2G_EnterMapRequest : AMessage, IRequest
{
public static C2G_EnterMapRequest Create(Scene scene)
{
@@ -146,7 +147,7 @@ namespace Fantasy
/// 请求网关进入房间响应
/// </summary>
[ProtoContract]
public partial class G2C_EnterMapResponse : AMessage, IResponse, IProto
public partial class G2C_EnterMapResponse : AMessage, IResponse
{
public static G2C_EnterMapResponse Create(Scene scene)
{
@@ -176,7 +177,7 @@ namespace Fantasy
/// 通知客户端切换地图
/// </summary>
[ProtoContract]
public partial class Map2C_ChangeMap : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_ChangeMap : AMessage, ICustomRouteMessage
{
public static Map2C_ChangeMap Create(Scene scene)
{
@@ -199,3 +200,4 @@ namespace Fantasy
public int Node { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,9 +17,9 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
[ProtoContract]
public partial class Vector3Info : AMessage, IProto
public partial class Vector3Info : AMessage
{
public static Vector3Info Create(Scene scene)
{
@@ -41,7 +42,7 @@ namespace Fantasy
public float z { get; set; }
}
[ProtoContract]
public partial class Vector2Info : AMessage, IProto
public partial class Vector2Info : AMessage
{
public static Vector2Info Create(Scene scene)
{
@@ -61,7 +62,7 @@ namespace Fantasy
public float y { get; set; }
}
[ProtoContract]
public partial class QuaternionInfo : AMessage, IProto
public partial class QuaternionInfo : AMessage
{
public static QuaternionInfo Create(Scene scene)
{
@@ -90,7 +91,7 @@ namespace Fantasy
/// 玩家当前使用钓组信息
/// </summary>
[ProtoContract]
public partial class GearInfo : AMessage, IProto
public partial class GearInfo : AMessage
{
public static GearInfo Create(Scene scene)
{
@@ -119,7 +120,7 @@ namespace Fantasy
public List<KeyValueInt64> Propertys = new List<KeyValueInt64>();
}
[ProtoContract]
public partial class UnitStateInfo : AMessage, IProto
public partial class UnitStateInfo : AMessage
{
public static UnitStateInfo Create(Scene scene)
{
@@ -139,7 +140,7 @@ namespace Fantasy
public List<KeyValueInt64> Propertys = new List<KeyValueInt64>();
}
[ProtoContract]
public partial class MapUnitInfo : AMessage, IProto
public partial class MapUnitInfo : AMessage
{
public static MapUnitInfo Create(Scene scene)
{
@@ -174,3 +175,4 @@ namespace Fantasy
public List<KeyValueInt64> Propertys = new List<KeyValueInt64>();
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,9 +17,9 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
[ProtoContract]
public partial class C2A_LoginRequest : AMessage, IRequest, IProto
public partial class C2A_LoginRequest : AMessage, IRequest
{
public static C2A_LoginRequest Create(Scene scene)
{
@@ -47,7 +48,7 @@ namespace Fantasy
public int Region { get; set; }
}
[ProtoContract]
public partial class A2C_LoginResponse : AMessage, IResponse, IProto
public partial class A2C_LoginResponse : AMessage, IResponse
{
public static A2C_LoginResponse Create(Scene scene)
{
@@ -71,7 +72,7 @@ namespace Fantasy
/// 客户端登录到Gate服务器
/// </summary>
[ProtoContract]
public partial class C2G_LoginRequest : AMessage, IRequest, IProto
public partial class C2G_LoginRequest : AMessage, IRequest
{
public static C2G_LoginRequest Create(Scene scene)
{
@@ -91,7 +92,7 @@ namespace Fantasy
public string ToKen { get; set; }
}
[ProtoContract]
public partial class G2C_LoginResponse : AMessage, IResponse, IProto
public partial class G2C_LoginResponse : AMessage, IResponse
{
public static G2C_LoginResponse Create(Scene scene)
{
@@ -115,7 +116,7 @@ namespace Fantasy
/// 通知客户端重复登录
/// </summary>
[ProtoContract]
public partial class G2C_RepeatLogin : AMessage, IMessage, IProto
public partial class G2C_RepeatLogin : AMessage, IMessage
{
public static G2C_RepeatLogin Create(Scene scene)
{
@@ -130,7 +131,7 @@ namespace Fantasy
public uint OpCode() { return OuterOpcode.G2C_RepeatLogin; }
}
[ProtoContract]
public partial class C2Game_GetRoleInfoRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2Game_GetRoleInfoRequest : AMessage, ICustomRouteRequest
{
public static C2Game_GetRoleInfoRequest Create(Scene scene)
{
@@ -149,7 +150,7 @@ namespace Fantasy
public int RouteType => Fantasy.RouteType.GameRoute;
}
[ProtoContract]
public partial class Game2C_GetRoleInfoResponse : AMessage, ICustomRouteResponse, IProto
public partial class Game2C_GetRoleInfoResponse : AMessage, ICustomRouteResponse
{
public static Game2C_GetRoleInfoResponse Create(Scene scene)
{
@@ -173,3 +174,4 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,12 +17,12 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// 用户进入地图
/// </summary>
[ProtoContract]
public partial class Map2C_RoleEnterRoomNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_RoleEnterRoomNotify : AMessage, ICustomRouteMessage
{
public static Map2C_RoleEnterRoomNotify Create(Scene scene)
{
@@ -44,7 +45,7 @@ namespace Fantasy
/// 用户离开地图
/// </summary>
[ProtoContract]
public partial class Map2C_RoleExitRoomNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_RoleExitRoomNotify : AMessage, ICustomRouteMessage
{
public static Map2C_RoleExitRoomNotify Create(Scene scene)
{
@@ -64,7 +65,7 @@ namespace Fantasy
public long Id { get; set; }
}
[ProtoContract]
public partial class C2Map_RolePropertyChange : AMessage, ICustomRouteMessage, IProto
public partial class C2Map_RolePropertyChange : AMessage, ICustomRouteMessage
{
public static C2Map_RolePropertyChange Create(Scene scene)
{
@@ -87,7 +88,7 @@ namespace Fantasy
/// 玩家状态变化同步
/// </summary>
[ProtoContract]
public partial class Map2C_RoleStateNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_RoleStateNotify : AMessage, ICustomRouteMessage
{
public static Map2C_RoleStateNotify Create(Scene scene)
{
@@ -113,7 +114,7 @@ namespace Fantasy
/// 玩家钓组变化
/// </summary>
[ProtoContract]
public partial class Map2C_RoleGearChangeNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_RoleGearChangeNotify : AMessage, ICustomRouteMessage
{
public static Map2C_RoleGearChangeNotify Create(Scene scene)
{
@@ -136,7 +137,7 @@ namespace Fantasy
public List<GearInfo> Gears = new List<GearInfo>();
}
[ProtoContract]
public partial class Map2C_RolePropertyChangeNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_RolePropertyChangeNotify : AMessage, ICustomRouteMessage
{
public static Map2C_RolePropertyChangeNotify Create(Scene scene)
{
@@ -159,7 +160,7 @@ namespace Fantasy
public List<KeyValueInt64> Propertys = new List<KeyValueInt64>();
}
[ProtoContract]
public partial class C2Map_Move : AMessage, ICustomRouteMessage, IProto
public partial class C2Map_Move : AMessage, ICustomRouteMessage
{
public static C2Map_Move Create(Scene scene)
{
@@ -194,7 +195,7 @@ namespace Fantasy
public long Timestamp { get; set; }
}
[ProtoContract]
public partial class C2Map_Look : AMessage, ICustomRouteMessage, IProto
public partial class C2Map_Look : AMessage, ICustomRouteMessage
{
public static C2Map_Look Create(Scene scene)
{
@@ -220,7 +221,7 @@ namespace Fantasy
/// 玩家移动推送
/// </summary>
[ProtoContract]
public partial class Map2C_MoveNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_MoveNotify : AMessage, ICustomRouteMessage
{
public static Map2C_MoveNotify Create(Scene scene)
{
@@ -261,7 +262,7 @@ namespace Fantasy
/// 玩家旋转推送
/// </summary>
[ProtoContract]
public partial class Map2C_LookeNotify : AMessage, ICustomRouteMessage, IProto
public partial class Map2C_LookeNotify : AMessage, ICustomRouteMessage
{
public static Map2C_LookeNotify Create(Scene scene)
{
@@ -287,3 +288,4 @@ namespace Fantasy
public long Timestamp { get; set; }
}
}

View File

@@ -1,5 +1,6 @@
using ProtoBuf;
using System;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
@@ -16,7 +17,7 @@ using Fantasy.Serialize;
#pragma warning disable CS8618
namespace Fantasy
{
{
/// <summary>
/// /////////// ******** 私聊/邮件 *******/////////////
/// </summary>
@@ -24,7 +25,7 @@ namespace Fantasy
/// 会话信息
/// </summary>
[ProtoContract]
public partial class ConversationInfo : AMessage, IProto
public partial class ConversationInfo : AMessage
{
public static ConversationInfo Create(Scene scene)
{
@@ -44,7 +45,7 @@ namespace Fantasy
public List<MailInfo> List = new List<MailInfo>();
}
[ProtoContract]
public partial class MailInfo : AMessage, IProto
public partial class MailInfo : AMessage
{
public static MailInfo Create(Scene scene)
{
@@ -82,7 +83,7 @@ namespace Fantasy
/// 请求会话列表
/// </summary>
[ProtoContract]
public partial class C2S_GetConversationsRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_GetConversationsRequest : AMessage, ICustomRouteRequest
{
public static C2S_GetConversationsRequest Create(Scene scene)
{
@@ -104,7 +105,7 @@ namespace Fantasy
/// 请求会话列表响应
/// </summary>
[ProtoContract]
public partial class S2C_GetConversationsResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_GetConversationsResponse : AMessage, ICustomRouteResponse
{
public static S2C_GetConversationsResponse Create(Scene scene)
{
@@ -128,7 +129,7 @@ namespace Fantasy
/// 发送邮件消息
/// </summary>
[ProtoContract]
public partial class C2S_SendMailRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_SendMailRequest : AMessage, ICustomRouteRequest
{
public static C2S_SendMailRequest Create(Scene scene)
{
@@ -159,7 +160,7 @@ namespace Fantasy
/// 发送邮件消息响应
/// </summary>
[ProtoContract]
public partial class S2C_SendMailResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_SendMailResponse : AMessage, ICustomRouteResponse
{
public static S2C_SendMailResponse Create(Scene scene)
{
@@ -180,7 +181,7 @@ namespace Fantasy
/// 发送删除会话消息
/// </summary>
[ProtoContract]
public partial class C2S_DeleteMailRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_DeleteMailRequest : AMessage, ICustomRouteRequest
{
public static C2S_DeleteMailRequest Create(Scene scene)
{
@@ -205,7 +206,7 @@ namespace Fantasy
/// 发送删除会话消息响应
/// </summary>
[ProtoContract]
public partial class S2C_DeleteMailResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_DeleteMailResponse : AMessage, ICustomRouteResponse
{
public static S2C_DeleteMailResponse Create(Scene scene)
{
@@ -229,7 +230,7 @@ namespace Fantasy
/// 新邮件推送
/// </summary>
[ProtoContract]
public partial class S2C_HaveMail : AMessage, ICustomRouteMessage, IProto
public partial class S2C_HaveMail : AMessage, ICustomRouteMessage
{
public static S2C_HaveMail Create(Scene scene)
{
@@ -252,7 +253,7 @@ namespace Fantasy
public string Key { get; set; }
}
[ProtoContract]
public partial class S2C_MailState : AMessage, ICustomRouteMessage, IProto
public partial class S2C_MailState : AMessage, ICustomRouteMessage
{
public static S2C_MailState Create(Scene scene)
{
@@ -278,7 +279,7 @@ namespace Fantasy
/// /////////// ******** 频道聊天 *******/////////////
/// </summary>
[ProtoContract]
public partial class ChatUserInfo : AMessage, IProto
public partial class ChatUserInfo : AMessage
{
public static ChatUserInfo Create(Scene scene)
{
@@ -298,7 +299,7 @@ namespace Fantasy
public long Name { get; set; }
}
[ProtoContract]
public partial class ChatMessageInfo : AMessage, IProto
public partial class ChatMessageInfo : AMessage
{
public static ChatMessageInfo Create(Scene scene)
{
@@ -330,7 +331,7 @@ namespace Fantasy
/// 创建频道
/// </summary>
[ProtoContract]
public partial class C2S_CreateChannelRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_CreateChannelRequest : AMessage, ICustomRouteRequest
{
public static C2S_CreateChannelRequest Create(Scene scene)
{
@@ -355,7 +356,7 @@ namespace Fantasy
/// 创建频道响应
/// </summary>
[ProtoContract]
public partial class S2C_CreateChannelResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_CreateChannelResponse : AMessage, ICustomRouteResponse
{
public static S2C_CreateChannelResponse Create(Scene scene)
{
@@ -379,7 +380,7 @@ namespace Fantasy
/// 请求进入频道
/// </summary>
[ProtoContract]
public partial class C2S_JoinChannelRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_JoinChannelRequest : AMessage, ICustomRouteRequest
{
public static C2S_JoinChannelRequest Create(Scene scene)
{
@@ -404,7 +405,7 @@ namespace Fantasy
/// 进入频道响应
/// </summary>
[ProtoContract]
public partial class S2C_JoinChannelResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_JoinChannelResponse : AMessage, ICustomRouteResponse
{
public static S2C_JoinChannelResponse Create(Scene scene)
{
@@ -425,7 +426,7 @@ namespace Fantasy
/// 发送消息
/// </summary>
[ProtoContract]
public partial class C2S_SendMessageRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_SendMessageRequest : AMessage, ICustomRouteRequest
{
public static C2S_SendMessageRequest Create(Scene scene)
{
@@ -453,7 +454,7 @@ namespace Fantasy
/// 发送消息响应
/// </summary>
[ProtoContract]
public partial class S2C_SendMessageResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_SendMessageResponse : AMessage, ICustomRouteResponse
{
public static S2C_SendMessageResponse Create(Scene scene)
{
@@ -474,7 +475,7 @@ namespace Fantasy
/// 推送消息
/// </summary>
[ProtoContract]
public partial class S2C_Message : AMessage, ICustomRouteMessage, IProto
public partial class S2C_Message : AMessage, ICustomRouteMessage
{
public static S2C_Message Create(Scene scene)
{
@@ -497,7 +498,7 @@ namespace Fantasy
/// /////////// ******** 工会 *******/////////////
/// </summary>
[ProtoContract]
public partial class ClubInfo : AMessage, IProto
public partial class ClubInfo : AMessage
{
public static ClubInfo Create(Scene scene)
{
@@ -529,7 +530,7 @@ namespace Fantasy
/// 请求创建工会
/// </summary>
[ProtoContract]
public partial class C2S_CreateClubRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_CreateClubRequest : AMessage, ICustomRouteRequest
{
public static C2S_CreateClubRequest Create(Scene scene)
{
@@ -554,7 +555,7 @@ namespace Fantasy
/// 创建工会响应
/// </summary>
[ProtoContract]
public partial class S2C_CreateClubResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_CreateClubResponse : AMessage, ICustomRouteResponse
{
public static S2C_CreateClubResponse Create(Scene scene)
{
@@ -578,7 +579,7 @@ namespace Fantasy
/// 请求工会信息
/// </summary>
[ProtoContract]
public partial class C2S_GetClubInfoRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_GetClubInfoRequest : AMessage, ICustomRouteRequest
{
public static C2S_GetClubInfoRequest Create(Scene scene)
{
@@ -603,7 +604,7 @@ namespace Fantasy
/// 响应工会信息
/// </summary>
[ProtoContract]
public partial class S2C_GetClubInfoResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_GetClubInfoResponse : AMessage, ICustomRouteResponse
{
public static S2C_GetClubInfoResponse Create(Scene scene)
{
@@ -627,7 +628,7 @@ namespace Fantasy
/// 请求工会成员列表
/// </summary>
[ProtoContract]
public partial class C2S_GetMemberListRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_GetMemberListRequest : AMessage, ICustomRouteRequest
{
public static C2S_GetMemberListRequest Create(Scene scene)
{
@@ -652,7 +653,7 @@ namespace Fantasy
/// 响应工会成员列表
/// </summary>
[ProtoContract]
public partial class S2C_GetMemberListResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_GetMemberListResponse : AMessage, ICustomRouteResponse
{
public static S2C_GetMemberListResponse Create(Scene scene)
{
@@ -676,7 +677,7 @@ namespace Fantasy
/// 获取工会列表请求
/// </summary>
[ProtoContract]
public partial class C2S_GetClubListRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_GetClubListRequest : AMessage, ICustomRouteRequest
{
public static C2S_GetClubListRequest Create(Scene scene)
{
@@ -698,7 +699,7 @@ namespace Fantasy
/// 获取工会列表响应
/// </summary>
[ProtoContract]
public partial class S2C_GetClubListResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_GetClubListResponse : AMessage, ICustomRouteResponse
{
public static S2C_GetClubListResponse Create(Scene scene)
{
@@ -722,7 +723,7 @@ namespace Fantasy
/// 请求加入工会
/// </summary>
[ProtoContract]
public partial class C2S_JoinClubRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_JoinClubRequest : AMessage, ICustomRouteRequest
{
public static C2S_JoinClubRequest Create(Scene scene)
{
@@ -747,7 +748,7 @@ namespace Fantasy
/// 响应加入工会
/// </summary>
[ProtoContract]
public partial class S2C_JoinClubResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_JoinClubResponse : AMessage, ICustomRouteResponse
{
public static S2C_JoinClubResponse Create(Scene scene)
{
@@ -771,7 +772,7 @@ namespace Fantasy
/// 请求退出工会
/// </summary>
[ProtoContract]
public partial class C2S_LeaveClubRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_LeaveClubRequest : AMessage, ICustomRouteRequest
{
public static C2S_LeaveClubRequest Create(Scene scene)
{
@@ -796,7 +797,7 @@ namespace Fantasy
/// 响应退出工会
/// </summary>
[ProtoContract]
public partial class S2C_LeaveClubResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_LeaveClubResponse : AMessage, ICustomRouteResponse
{
public static S2C_LeaveClubResponse Create(Scene scene)
{
@@ -820,7 +821,7 @@ namespace Fantasy
/// 请求解散工会
/// </summary>
[ProtoContract]
public partial class C2S_DissolveClubRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_DissolveClubRequest : AMessage, ICustomRouteRequest
{
public static C2S_DissolveClubRequest Create(Scene scene)
{
@@ -845,7 +846,7 @@ namespace Fantasy
/// 响应解散工会
/// </summary>
[ProtoContract]
public partial class S2C_DissolveClubResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_DissolveClubResponse : AMessage, ICustomRouteResponse
{
public static S2C_DissolveClubResponse Create(Scene scene)
{
@@ -869,7 +870,7 @@ namespace Fantasy
/// 请求操作申请
/// </summary>
[ProtoContract]
public partial class C2S_DisposeJoinRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_DisposeJoinRequest : AMessage, ICustomRouteRequest
{
public static C2S_DisposeJoinRequest Create(Scene scene)
{
@@ -900,7 +901,7 @@ namespace Fantasy
/// 响应操作申请
/// </summary>
[ProtoContract]
public partial class S2C_DisposeJoinResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_DisposeJoinResponse : AMessage, ICustomRouteResponse
{
public static S2C_DisposeJoinResponse Create(Scene scene)
{
@@ -930,7 +931,7 @@ namespace Fantasy
/// 推送消息
/// </summary>
[ProtoContract]
public partial class S2C_ClubChange : AMessage, ICustomRouteMessage, IProto
public partial class S2C_ClubChange : AMessage, ICustomRouteMessage
{
public static S2C_ClubChange Create(Scene scene)
{
@@ -953,3 +954,4 @@ namespace Fantasy
public int ChangeType { get; set; }
}
}

View File

@@ -0,0 +1,85 @@
namespace NBF.ConfigTable;
public interface IConfigContext
{
// 定义非泛型接口
}
public class ConfigContext<T> : IConfigContext where T : IConfigTable
{
private static List<T> _cacheList = new List<T>();
#region Cache
public void Association(List<T> list)
{
if (list != null)
{
_cacheList = list;
}
}
#endregion
public int Count()
{
return _cacheList.Count;
}
public int Count(Func<T, bool> predicate)
{
return _cacheList.Count(predicate);
}
public T Get(uint key)
{
return First(key);
}
public T Fist()
{
return _cacheList.First();
}
public T Last()
{
return _cacheList.Last();
}
public T Fist(Predicate<T> match)
{
return Get(match);
}
public T Last(Predicate<T> match)
{
return _cacheList.FindLast(match);
}
public T Get(Predicate<T> match)
{
return _cacheList.Find(match);
}
public T GetRandom()
{
Random random = new Random();
// 随机从列表中取一个对象
return _cacheList[random.Next(_cacheList.Count)];
}
public List<T> GetList()
{
return _cacheList;
}
public List<T> GetList(Predicate<T> match)
{
return _cacheList.FindAll(match);
}
private T First(uint key)
{
return _cacheList.Find(t => t.Key == key);
}
}

View File

@@ -0,0 +1,122 @@
using System.Reflection;
using Fantasy;
using Fantasy.Helper;
using Newtonsoft.Json.Linq;
// ReSharper disable SuspiciousTypeConversion.Global
namespace NBF.ConfigTable
{
/// <summary>
/// 配置表帮助类
/// </summary>
public static class ConfigTableHelper
{
private static readonly Dictionary<Type, IConfigContext> _dictionary = new Dictionary<Type, IConfigContext>();
public static void Initialize()
{
//解析配置文件
var gameConfigText = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "configs.Json"));
Initialize(gameConfigText, typeof(Fantasy.AssemblyHelper).Assembly);
}
/// <summary>
/// 初始化ConfigTableHelper
/// </summary>
public static void Initialize(string json, params System.Reflection.Assembly[] assemblies)
{
_dictionary.Clear();
var jsonObj = JObject.Parse(json);
Dictionary<string, JArray> tokens = new();
foreach (var item in jsonObj)
{
try
{
var name = item.Key;
var value = item.Value;
if (value is JArray jArray)
{
tokens[name] = jArray;
}
}
catch (Exception e)
{
Log.Error($"读表异常请检查name={item.Key} ex={e}");
}
}
foreach (var type in GetAllConfigTableTypes(assemblies))
{
var name = type.Name;
if (tokens.TryGetValue(name, out var jArray))
{
// 通过反射调用 ParseJson 方法
var parseMethod = type.GetMethod("ParseJson", BindingFlags.Public | BindingFlags.Static);
parseMethod?.Invoke(null, [jArray]);
}
}
// var d = _dictionary;
}
public static ConfigContext<T>? Table<T>() where T : IConfigTable
{
var type = typeof(T);
if (_dictionary.TryGetValue(type, out var context))
{
return context as ConfigContext<T>;
}
var jsonContext = new ConfigContext<T>();
_dictionary[type] = jsonContext;
return jsonContext;
}
public static List<T> ParseLine<T>(JArray arr) where T : IConfigTable, new()
{
List<T> list = new List<T>();
foreach (var jToken in arr)
{
T? instance = jToken.ToObject<T>();
if (instance != null)
{
list.Add(instance);
}
}
var context = Table<T>();
context?.Association(list);
return list;
}
/// <summary>
/// 获取所有实现了 IConfigTable 接口的非抽象类
/// </summary>
/// <returns>所有非抽象的配置对象类</returns>
private static List<Type> GetAllConfigTableTypes(params System.Reflection.Assembly[] assemblies)
{
var types = new List<Type>();
var interfaceType = typeof(IConfigTable);
// 遍历当前程序集中的所有类型
foreach (var assembly in assemblies)
{
foreach (var type in assembly.GetTypes())
{
// 检查是否实现了 IConfigTable 接口,并且不是抽象类
if (interfaceType.IsAssignableFrom(type) && !type.IsAbstract && !type.IsInterface)
{
types.Add(type);
}
}
}
return types;
}
}
}

View File

@@ -0,0 +1,10 @@
namespace NBF.ConfigTable
{
/// <summary>
/// 表示是一个配置文件
/// </summary>
public interface IConfigTable
{
public uint Key { get; }
}
}

View File

@@ -0,0 +1,408 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v9.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v9.0": {
"Entity/1.0.0": {
"dependencies": {
"Fantasy-Net": "2025.2.0",
"Microsoft.IdentityModel.Tokens": "8.14.0",
"System.IdentityModel.Tokens.Jwt": "8.14.0",
"ThirdParty": "1.0.0"
},
"runtime": {
"Entity.dll": {}
}
},
"CommandLineParser/2.9.1": {
"runtime": {
"lib/netstandard2.0/CommandLine.dll": {
"assemblyVersion": "2.9.1.0",
"fileVersion": "2.9.1.0"
}
}
},
"DnsClient/1.6.1": {
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"assemblyVersion": "1.6.1.0",
"fileVersion": "1.6.1.0"
}
}
},
"Fantasy-Net/2025.2.0": {
"dependencies": {
"CommandLineParser": "2.9.1",
"MongoDB.Bson": "3.5.0",
"MongoDB.Driver": "3.5.0",
"Newtonsoft.Json": "13.0.4",
"protobuf-net": "3.2.56"
},
"runtime": {
"lib/net9.0/Fantasy-Net.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {},
"Microsoft.Extensions.Logging.Abstractions/8.0.0": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.IdentityModel.Abstractions/8.14.0": {
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.14.0": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.14.0"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.IdentityModel.Logging/8.14.0": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.14.0"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.IdentityModel.Tokens/8.14.0": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"Microsoft.IdentityModel.Logging": "8.14.0"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"MongoDB.Bson/3.5.0": {
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"assemblyVersion": "3.5.0.0",
"fileVersion": "3.5.0.0"
}
}
},
"MongoDB.Driver/3.5.0": {
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "8.0.0",
"MongoDB.Bson": "3.5.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"assemblyVersion": "3.5.0.0",
"fileVersion": "3.5.0.0"
}
}
},
"Newtonsoft.Json/13.0.4": {
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.4.30916"
}
}
},
"protobuf-net/3.2.56": {
"dependencies": {
"protobuf-net.Core": "3.2.56"
},
"runtime": {
"lib/net8.0/protobuf-net.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.56.57311"
}
}
},
"protobuf-net.Core/3.2.56": {
"runtime": {
"lib/net8.0/protobuf-net.Core.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.56.57311"
}
}
},
"SharpCompress/0.30.1": {
"runtime": {
"lib/net5.0/SharpCompress.dll": {
"assemblyVersion": "0.30.1.0",
"fileVersion": "0.30.1.0"
}
}
},
"Snappier/1.0.0": {
"runtime": {
"lib/net5.0/Snappier.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.IdentityModel.Tokens.Jwt/8.14.0": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.14.0",
"Microsoft.IdentityModel.Tokens": "8.14.0"
},
"runtime": {
"lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.14.0.0",
"fileVersion": "8.14.0.60815"
}
}
},
"System.Memory/4.5.5": {},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {},
"System.Security.AccessControl/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Principal.Windows/5.0.0": {},
"ZstdSharp.Port/0.7.3": {
"runtime": {
"lib/net7.0/ZstdSharp.dll": {
"assemblyVersion": "0.7.3.0",
"fileVersion": "0.7.3.0"
}
}
},
"ThirdParty/1.0.0": {
"runtime": {
"ThirdParty.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"Entity/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"
},
"DnsClient/1.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"path": "dnsclient/1.6.1",
"hashPath": "dnsclient.1.6.1.nupkg.sha512"
},
"Fantasy-Net/2025.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vCkduwxkMlH8GozyS+ZlWGLC4nGjFGaL13Ah4w5HL55XAJaAhe+RX+gbSRNBeJf1Uu0cjG2MgVyS4NX7bXdN4g==",
"path": "fantasy-net/2025.2.0",
"hashPath": "fantasy-net.2025.2.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"path": "microsoft.extensions.logging.abstractions/8.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-iwbCpSjD3ehfTwBhtSNEtKPK0ICun6ov7Ibx6ISNA9bfwIyzI2Siwyi9eJFCJBwxowK9xcA1mj+jBWiigeqgcQ==",
"path": "microsoft.identitymodel.abstractions/8.14.0",
"hashPath": "microsoft.identitymodel.abstractions.8.14.0.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4jOpiA4THdtpLyMdAb24dtj7+6GmvhOhxf5XHLYWmPKF8ApEnApal1UnJsKO4HxUWRXDA6C4WQVfYyqsRhpNpQ==",
"path": "microsoft.identitymodel.jsonwebtokens/8.14.0",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.14.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eqqnemdW38CKZEHS6diA50BV94QICozDZEvSrsvN3SJXUFwVB9gy+/oz76gldP7nZliA16IglXjXTCTdmU/Ejg==",
"path": "microsoft.identitymodel.logging/8.14.0",
"hashPath": "microsoft.identitymodel.logging.8.14.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lKIZiBiGd36k02TCdMHp1KlNWisyIvQxcYJvIkz7P4gSQ9zi8dgh6S5Grj8NNG7HWYIPfQymGyoZ6JB5d1Lo1g==",
"path": "microsoft.identitymodel.tokens/8.14.0",
"hashPath": "microsoft.identitymodel.tokens.8.14.0.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"path": "microsoft.win32.registry/5.0.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512"
},
"MongoDB.Bson/3.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JGNK6BanLDEifgkvPLqVFCPus5EDCy416pxf1dxUBRSVd3D9+NB3AvMVX190eXlk5/UXuCxpsQv7jWfNKvppBQ==",
"path": "mongodb.bson/3.5.0",
"hashPath": "mongodb.bson.3.5.0.nupkg.sha512"
},
"MongoDB.Driver/3.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ST90u7psyMkNNOWFgSkexsrB3kPn7Ynl2DlMFj2rJyYuc6SIxjmzu4ufy51yzM+cPVE1SvVcdb5UFobrRw6cMg==",
"path": "mongodb.driver/3.5.0",
"hashPath": "mongodb.driver.3.5.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pdgNNMai3zv51W5aq268sujXUyx7SNdE2bj1wZcWjAQrKMFZV260lbqYop1d2GM67JI1huLRwxo9ZqnfF/lC6A==",
"path": "newtonsoft.json/13.0.4",
"hashPath": "newtonsoft.json.13.0.4.nupkg.sha512"
},
"protobuf-net/3.2.56": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4IPJeTYAMNewlN8MDaFkcmR/9hLhJeo9eARnTh104zh7mf+vXT2gu5MUfUnkSQU+CH578Q6vcdU7LQDQPG6eaw==",
"path": "protobuf-net/3.2.56",
"hashPath": "protobuf-net.3.2.56.nupkg.sha512"
},
"protobuf-net.Core/3.2.56": {
"type": "package",
"serviceable": true,
"sha512": "sha512-d6QOukTpDzs7zZv9tPnBZMtvHDNeHJQXUhMx54g4urUQsXK3oo9U70H9HvklYq7hlQ4A7AHJl7EVEqyCXXIl8Q==",
"path": "protobuf-net.core/3.2.56",
"hashPath": "protobuf-net.core.3.2.56.nupkg.sha512"
},
"SharpCompress/0.30.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"path": "sharpcompress/0.30.1",
"hashPath": "sharpcompress.0.30.1.nupkg.sha512"
},
"Snappier/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"path": "snappier/1.0.0",
"hashPath": "snappier.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.14.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EYGgN/S+HK7S6F3GaaPLFAfK0UzMrkXFyWCvXpQWFYmZln3dqtbyIO7VuTM/iIIPMzkelg8ZLlBPvMhxj6nOAA==",
"path": "system.identitymodel.tokens.jwt/8.14.0",
"hashPath": "system.identitymodel.tokens.jwt.8.14.0.nupkg.sha512"
},
"System.Memory/4.5.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"path": "system.memory/4.5.5",
"hashPath": "system.memory.4.5.5.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"path": "system.security.accesscontrol/5.0.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512"
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"path": "system.security.principal.windows/5.0.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512"
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"path": "zstdsharp.port/0.7.3",
"hashPath": "zstdsharp.port.0.7.3.nupkg.sha512"
},
"ThirdParty/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<fantasy xmlns="http://fantasy.net/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://fantasy.net/config Fantasy.xsd">
<!-- ↓这是为了兼容旧版Fantasy的导表Json配置↓, 如果这个XML节点被注释掉, 就会以 Fantasy.config 配置为准 -->
<!--<configTable path="../../../../Config/Json/Server" />-->
<!-- ↓这是目前推荐使用的Fantasy框架启服配置↓ -->
<network inner="TCP" maxMessageSize="1048560" />
<session idleTimeout="8000" idleInterval="5000" />
<server>
<!-- 机器配置 -->
<machines>
<machine id="1" outerIP="127.0.0.1" outerBindIP="127.0.0.1" innerBindIP="127.0.0.1" />
</machines>
<!-- 进程配置 -->
<processes>
<process id="1" machineId="1" startupGroup="0" />
</processes>
<!-- 世界配置 -->
<worlds>
<world id="1" worldName="WorldA">
<database dbType="MongoDB" dbName="fantasy_main" dbConnection="mongodb://127.0.0.1" />
</world>
</worlds>
<!-- 场景配置 -->
<scenes>
<scene id="1001"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Authentication"
networkProtocol="KCP"
outerPort="20001" innerPort="11001" />
<scene id="1002"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Addressable"
networkProtocol=""
outerPort="0" innerPort="11011" />
<scene id="1003"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Gate"
networkProtocol="KCP"
outerPort="20000" innerPort="11021" />
<scene id="1004"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Game"
networkProtocol=""
outerPort="0" innerPort="11031" />
<scene id="1006"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Social"
networkProtocol=""
outerPort="0" innerPort="11051" />
<scene id="1007"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Map"
networkProtocol=""
outerPort="0" innerPort="11061" />
</scenes>
</server>
</fantasy>

View File

@@ -0,0 +1,345 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://fantasy.net/config"
xmlns="http://fantasy.net/config"
elementFormDefault="qualified">
<!-- Root element -->
<xs:element name="fantasy">
<xs:annotation>
<xs:documentation>Fantasy框架配置文件根元素</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="configTable" type="configTableType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>配置表路径设置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="network" type="networkRuntimeType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>网络运行时配置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="session" type="sessionRuntimeType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>会话运行时配置</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="server" type="serverType" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>服务器配置</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ConfigTable type -->
<xs:complexType name="configTableType">
<xs:attribute name="path" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>配置表文件路径</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Server type -->
<xs:complexType name="serverType">
<xs:sequence>
<xs:element name="machines" type="machinesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>机器配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="processes" type="processesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>进程配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="worlds" type="worldsType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>世界配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="scenes" type="scenesType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>场景配置列表</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="units" type="unitsType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>单位配置列表</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Machines types -->
<xs:complexType name="machinesType">
<xs:sequence>
<xs:element name="machine" type="machineType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="machineType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>机器ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="outerIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>外网IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="outerBindIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>外网绑定IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="innerBindIP" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>内网绑定IP地址</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Processes types -->
<xs:complexType name="processesType">
<xs:sequence>
<xs:element name="process" type="processType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="processType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>进程ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="machineId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>所属机器ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="startupGroup" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>启动分组</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Worlds types -->
<xs:complexType name="worldsType">
<xs:sequence>
<xs:element name="world" type="worldType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- database的选择 -->
<xs:complexType name="databaseType">
<xs:attribute name="dbType" use="required">
<xs:annotation>
<xs:documentation>数据库类型</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- PostgreSQL -->
<xs:enumeration value="PostgreSQL"/>
<xs:enumeration value="Postgres"/>
<xs:enumeration value="PgSQL"/>
<xs:enumeration value="Pg"/>
<xs:enumeration value="PG"/>
<!-- MongoDB -->
<xs:enumeration value="MongoDB"/>
<xs:enumeration value="Mongo"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="dbName" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>数据库名称</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="dbConnection" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>数据库连接字符串</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="worldType">
<!-- 每个world允许包含1或n个database -->
<xs:sequence>
<xs:annotation>
<xs:documentation>世界中配置的数据库</xs:documentation>
</xs:annotation>
<xs:element name="database" type="databaseType" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<!-- world需要id和worldName -->
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>世界ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="worldName" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>世界名称</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Scenes types -->
<xs:complexType name="scenesType">
<xs:sequence>
<xs:element name="scene" type="sceneType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="sceneType">
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>场景ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="processConfigId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>进程配置ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="worldConfigId" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>世界配置ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="sceneRuntimeMode" use="required">
<xs:annotation>
<xs:documentation>场景运行模式</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="MainThread"/>
<xs:enumeration value="MultiThread"/>
<xs:enumeration value="ThreadPool"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="sceneTypeString" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>场景类型字符串</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="networkProtocol" use="optional">
<xs:annotation>
<xs:documentation>网络协议类型</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="TCP"/>
<xs:enumeration value="KCP"/>
<xs:enumeration value="WebSocket"/>
<xs:enumeration value="HTTP"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="outerPort" type="xs:unsignedInt" use="optional" default="0">
<xs:annotation>
<xs:documentation>外网端口</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="innerPort" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>内网端口</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Network Runtime type -->
<xs:complexType name="networkRuntimeType">
<xs:attribute name="inner" use="optional" default="TCP">
<xs:annotation>
<xs:documentation>服务器内部网络协议</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="TCP"/>
<xs:enumeration value="KCP"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="maxMessageSize" type="xs:int" use="optional" default="1048560">
<xs:annotation>
<xs:documentation>消息体最大长度(字节)默认1048560字节(约1.02MB)</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Session Runtime type -->
<xs:complexType name="sessionRuntimeType">
<xs:attribute name="idleTimeout" type="xs:int" use="optional" default="8000">
<xs:annotation>
<xs:documentation>Session idle check timeout (in milliseconds)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="idleInterval" type="xs:int" use="optional" default="5000">
<xs:annotation>
<xs:documentation>Session idle check interval (in milliseconds)</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- Units types -->
<xs:complexType name="unitsType">
<xs:sequence>
<xs:element name="unit" type="unitType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="unitType">
<xs:sequence>
<xs:element name="dic" type="unitDicType" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>单位字典数据</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedInt" use="required">
<xs:annotation>
<xs:documentation>单位ID</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>单位名称</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="model" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>单位模型</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="unitDicType">
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="key" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>字典键</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="value" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>字典值</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Entity")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7b10d4cb317c9f310649a9cb4afe3882d4b12624")]
[assembly: System.Reflection.AssemblyProductAttribute("Entity")]
[assembly: System.Reflection.AssemblyTitleAttribute("Entity")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
4925a41a1713fbdc3c4b16a99814eedf9add8ff230ff3e204d8dc265b8ca499e

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net9.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Entity
build_property.ProjectDir = D:\work\Fishing2Server\Entity\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 9.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

Binary file not shown.

View File

@@ -0,0 +1 @@
6062551d1ab69f267bcbdefc9b276d4b2471f6b61b2a4e2cc6c5f261ac8ee2b5

View File

@@ -0,0 +1,17 @@
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\Fantasy.config
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\Fantasy.xsd
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\Entity.deps.json
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\Entity.dll
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\Entity.pdb
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.csproj.AssemblyReference.cache
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.GeneratedMSBuildEditorConfig.editorconfig
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.AssemblyInfoInputs.cache
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.AssemblyInfo.cs
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.csproj.CoreCompileInputs.cache
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.dll
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\refint\Entity.dll
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.pdb
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\ref\Entity.dll
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\ThirdParty.dll
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\bin\Debug\net9.0\ThirdParty.pdb
D:\work\Fishing2ServerNew\Fishing2\Server\Entity\obj\Debug\net9.0\Entity.csproj.Up2Date

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,156 @@
{
"format": 1,
"restore": {
"D:\\work\\Fishing2Server\\Entity\\Entity.csproj": {}
},
"projects": {
"D:\\work\\Fishing2Server\\Entity\\Entity.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\work\\Fishing2Server\\Entity\\Entity.csproj",
"projectName": "Entity",
"projectPath": "D:\\work\\Fishing2Server\\Entity\\Entity.csproj",
"packagesPath": "C:\\Users\\FIREBAT\\.nuget\\packages\\",
"outputPath": "D:\\work\\Fishing2Server\\Entity\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\FIREBAT\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net9.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net9.0": {
"targetAlias": "net9.0",
"projectReferences": {
"D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj": {
"projectPath": "D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.300"
},
"frameworks": {
"net9.0": {
"targetAlias": "net9.0",
"dependencies": {
"Fantasy-Net": {
"target": "Package",
"version": "[2025.2.0, )"
},
"Microsoft.IdentityModel.Tokens": {
"target": "Package",
"version": "[8.14.0, )"
},
"System.IdentityModel.Tokens.Jwt": {
"target": "Package",
"version": "[8.14.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
}
}
},
"D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj",
"projectName": "ThirdParty",
"projectPath": "D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj",
"packagesPath": "C:\\Users\\FIREBAT\\.nuget\\packages\\",
"outputPath": "D:\\work\\Fishing2Server\\ThirdParty\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\FIREBAT\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.300"
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\FIREBAT\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\FIREBAT\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)fantasy-net\2025.2.0\build\Fantasy-Net.props" Condition="Exists('$(NuGetPackageRoot)fantasy-net\2025.2.0\build\Fantasy-Net.props')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.0\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)fantasy-net\2025.2.0\buildTransitive\Fantasy-Net.targets" Condition="Exists('$(NuGetPackageRoot)fantasy-net\2025.2.0\buildTransitive\Fantasy-Net.targets')" />
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,34 @@
{
"version": 2,
"dgSpecHash": "5DJdEeWOOl4=",
"success": true,
"projectFilePath": "D:\\work\\Fishing2Server\\Entity\\Entity.csproj",
"expectedPackageFiles": [
"C:\\Users\\FIREBAT\\.nuget\\packages\\commandlineparser\\2.9.1\\commandlineparser.2.9.1.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\dnsclient\\1.6.1\\dnsclient.1.6.1.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\fantasy-net\\2025.2.0\\fantasy-net.2025.2.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.0\\microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.0\\microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.14.0\\microsoft.identitymodel.abstractions.8.14.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.14.0\\microsoft.identitymodel.jsonwebtokens.8.14.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.identitymodel.logging\\8.14.0\\microsoft.identitymodel.logging.8.14.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.identitymodel.tokens\\8.14.0\\microsoft.identitymodel.tokens.8.14.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.netcore.platforms\\5.0.0\\microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\microsoft.win32.registry\\5.0.0\\microsoft.win32.registry.5.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\mongodb.bson\\3.5.0\\mongodb.bson.3.5.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\mongodb.driver\\3.5.0\\mongodb.driver.3.5.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\newtonsoft.json\\13.0.4\\newtonsoft.json.13.0.4.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\protobuf-net\\3.2.56\\protobuf-net.3.2.56.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\protobuf-net.core\\3.2.56\\protobuf-net.core.3.2.56.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\sharpcompress\\0.30.1\\sharpcompress.0.30.1.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\snappier\\1.0.0\\snappier.1.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.14.0\\system.identitymodel.tokens.jwt.8.14.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.memory\\4.5.5\\system.memory.4.5.5.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.security.accesscontrol\\5.0.0\\system.security.accesscontrol.5.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\system.security.principal.windows\\5.0.0\\system.security.principal.windows.5.0.0.nupkg.sha512",
"C:\\Users\\FIREBAT\\.nuget\\packages\\zstdsharp.port\\0.7.3\\zstdsharp.port.0.7.3.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1 @@
"restore":{"projectUniqueName":"D:\\work\\Fishing2Server\\Entity\\Entity.csproj","projectName":"Entity","projectPath":"D:\\work\\Fishing2Server\\Entity\\Entity.csproj","outputPath":"D:\\work\\Fishing2Server\\Entity\\obj\\","projectStyle":"PackageReference","fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net9.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{"D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj":{"projectPath":"D:\\work\\Fishing2Server\\ThirdParty\\ThirdParty.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.300"}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"Fantasy-Net":{"target":"Package","version":"[2025.2.0, )"},"Microsoft.IdentityModel.Tokens":{"target":"Package","version":"[8.14.0, )"},"System.IdentityModel.Tokens.Jwt":{"target":"Package","version":"[8.14.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\9.0.304/PortableRuntimeIdentifierGraph.json"}}

View File

@@ -0,0 +1 @@
17628533859030116

View File

@@ -0,0 +1 @@
17628541514897177