Ver código fonte

Merge branch 'dev' of http://43.226.57.217:3000/yishanyou/chuanzhanServer into dev

pigflower 4 semanas atrás
pai
commit
0c2e008ff1
29 arquivos alterados com 2809 adições e 2130 exclusões
  1. 284 0
      docs/文档/OpenCards.Server.Main启动问题排查记录.md
  2. 216 0
      docs/文档6.10/server_battle_SLua问题排查与打包记录.md
  3. 302 0
      docs/文档6.10/战斗错误6.10.md
  4. 2 1
      server/src/core/OpenCards.Tools/copylua.bat
  5. 2 2
      server/src/data/ClientScript/Protocol/generated/OpenCards.Core.Protocol.Client.ClientHandleRoleCommonRequest.lua
  6. 4 4
      server/src/data/ClientScript/Protocol/generated/OpenCards.Core.Protocol.Client.ClientHandleRoleCommonResponse.lua
  7. 0 417
      server/src/data/ClientScript/Protocol/generated/_baseType.lua
  8. 0 449
      server/src/data/ClientScript/Protocol/generated/_enum.lua
  9. 0 629
      server/src/data/ClientScript/Protocol/generated/_errorCode.lua
  10. 28 28
      server/src/data/ServerData/templates_lua/Market.xlsx/push_gift_depot_limit.lua
  11. 2 567
      server/src/data/ServerData/templates_lua/_luaversion_.lua
  12. 0 3
      server/src/server/OpenCards.Server.Core/OpenCards.Server.Core.csproj
  13. 1 1
      server/src/server/OpenCards.Server.Core/TableManager.cs
  14. 5 2
      server/src/server/OpenCards.Server.DotNetCore/OpenCardsNameServer.cs
  15. 42 0
      server/src/server/OpenCards.Server.DotNetCore/OpenCardsRpcAppFactory.cs
  16. 2 11
      server/src/server/OpenCards.Server.DotNetCore/Program.cs
  17. 2 0
      server/src/server/OpenCards.Server.DotNetCore/server打包.bat
  18. 4 0
      server/src/server/OpenCards.Server.Main/OpenCards.Server.Main.csproj
  19. 7 3
      server/src/server/OpenCards.Server.Main/Program.cs
  20. BIN
      server_battle/GameLogic/.signature.p7s
  21. 1 1
      server_battle/GameLogic/App.config
  22. 20 11
      server_battle/GameLogic/GameLogic.csproj
  23. BIN
      server_battle/Packages/LitJson.0.7.0/.signature.p7s
  24. 11 0
      server_battle/Packages/slua-standalone.1.0.67/[Content_Types].xml
  25. 5 0
      server_battle/Packages/slua-standalone.1.0.67/_rels/.rels
  26. 17 0
      server_battle/Packages/slua-standalone.1.0.67/slua-standalone.nuspec
  27. 1843 0
      server_battle/ServerLib/LuaState.cs
  28. 1 1
      server_battle/ServerLib/ServerLib.csproj
  29. 8 0
      server_battle/打包.bat

+ 284 - 0
docs/文档/OpenCards.Server.Main启动问题排查记录.md

@@ -0,0 +1,284 @@
+# OpenCards.Server.Main 启动问题排查记录
+
+> 整理自 Cursor Agent 对话(2026-06-10)  
+> 项目路径:`D:\WorkSpace\project\chuanzhanServer`
+
+---
+
+## 目录
+
+1. [Quartz 启动报错:System.Configuration.ConfigurationManager 找不到](#1-quartz-启动报错systemconfigurationconfigurationmanager-找不到)
+2. [LuaTemplateLoader 初始化 NullReferenceException](#2-luatemplateloader-初始化-nullreferenceexception)
+3. [TableManager.LoadTemplates 报错且 _IdMap 为 null](#3-tablemanagerloadtemplates-报错且-_idmap-为-null)
+4. [activity_task.lua 存在但仍报错的误解](#4-activity_tasklua-存在但仍报错的误解)
+5. [推荐启动配置清单](#5-推荐启动配置清单)
+
+---
+
+## 1. Quartz 启动报错:System.Configuration.ConfigurationManager 找不到
+
+### 现象
+
+启动 `OpenCards.Server.Main` 时出现类似日志:
+
+```
+2026-06-10 10:14:45,047 INFO  CenterService@NODE_NAME - Service Starting...
+2026-06-10 10:14:45,107 ERROR Quartz - One or more errors occurred. (Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 系统找不到指定的文件。)
+System.AggregateException : One or more errors occurred. (Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 系统找不到指定的文件。)
+```
+
+### 结论
+
+**不是** `_launch_server_*.xml` 等路径配置文件的问题,而是 **.NET 依赖 DLL 版本不匹配**。
+
+### 原因分析
+
+调用链:
+
+1. `CenterService` 启动时调用 `Provider.CreateCornJobAsync()` 注册定时任务
+2. `DeepFrozen.RPC.dll` 内部使用 **Quartz** 调度器
+3. `Quartz.dll`(3.3.2.0)编译时依赖 `System.Configuration.ConfigurationManager` **版本 4.0.3.0**
+
+| 组件 | 需要的版本 | 输出目录原有版本 |
+|------|-----------|----------------|
+| Quartz.dll | ConfigurationManager **4.0.3.0** | **4.0.1.0** |
+
+`OpenCards.Server.DotNetCore` 项目已引用该 NuGet 包,但 `OpenCards.Server.Main` 未引用,构建时不会把正确版本复制到 `_output.server`。
+
+### 修复方案
+
+在 `OpenCards.Server.Main.csproj` 中添加:
+
+```xml
+<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
+```
+
+重新 `dotnet build` 后,输出目录中 DLL 版本变为 **4.0.3.0**,与 Quartz 要求一致。
+
+### 操作步骤
+
+```powershell
+cd D:\WorkSpace\project\chuanzhanServer\server\src\server\OpenCards.Server.Main
+dotnet build -c Debug
+cd ..\..\_output.server
+.\OpenCards.Server.Main.exe local
+```
+
+---
+
+## 2. LuaTemplateLoader 初始化 NullReferenceException
+
+### 现象
+
+`Program.cs` 第 129 行:
+
+```csharp
+new DeepCore.Lua.LuaTemplateLoader(true, ad);
+```
+
+调试时报 `System.NullReferenceException`,堆栈类似:
+
+```
+Error initializing UnityScriptLoader : System.NullReferenceException
+   at MoonSharp.Interpreter.Compatibility.Frameworks.FrameworkClrBase.GetProperty(Type type, String name)
+   at MoonSharp.Interpreter.Loaders.UnityAssetsScriptLoader.LoadResourcesWithReflection(String assetsPath)
+```
+
+已知运行时 `ad` 的实例为 `{DeepCore.Template.MoonSharp.MoonSharpLuaAdapter}`。
+
+### 结论
+
+**不是 `ad` 为空**,而是构造函数第一个参数 `true` 触发了 Unity 专用脚本加载器初始化。
+
+### 原因分析
+
+- 构造函数签名:`LuaTemplateLoader(Boolean instance, ILuaAdapter adapter)`
+- `instance = true`:按 **Unity 客户端** 模式初始化
+- 内部创建 `UnityAssetsScriptLoader`,调用 `LoadResourcesWithReflection()`
+- 该方法通过反射加载 `UnityEngine.Resources`、`UnityEngine.TextAsset`
+- 服务端 .NET 控制台环境**没有** `UnityEngine.dll`,`Type.GetType(...)` 返回 null
+- `FrameworkClrBase.GetProperty(null, "name")` → NullReferenceException
+
+该异常在 MoonSharp 内部被 `catch` 并打印日志,**一般不会向外抛出**,程序可继续运行。若 Visual Studio 开启「引发时中断」,调试器会在 `Program.cs` 该行停下。
+
+### 重要:true 与 false 的区别
+
+| 参数 | `LuaTemplateLoader.Instance` | 对 TableManager 的影响 |
+|------|------------------------------|------------------------|
+| `true` | **有值** | `LoadTemplates` 正常工作 |
+| `false` | **null** | `LoadTemplates` 必然 NRE |
+
+**不能**为避免 Unity 日志而将 `true` 改为 `false`,否则所有配置表加载失败(见第 3 节)。
+
+### 处理建议
+
+- 服务端保持 `new DeepCore.Lua.LuaTemplateLoader(true, ad);`
+- 忽略控制台中的 `Error initializing UnityScriptLoader` 日志
+- 或在 VS 中关闭对该异常的「引发时中断」
+
+---
+
+## 3. TableManager.LoadTemplates 报错且 _IdMap 为 null
+
+### 现象
+
+`TableManager.cs` 中:
+
+```csharp
+_IdMap = loader.LoadTemplates<int, Table_ActivityTask>(nameof(Table_ActivityTask.Id), "activity_task");
+```
+
+该行报错,且 `_IdMap` 值为 `null`。
+
+### 根因
+
+若 `Program.cs` 使用了 `new LuaTemplateLoader(false, ad)`:
+
+1. `LuaTemplateLoader.Instance` 不会被赋值(保持 null)
+2. `loader.LoadTemplates(...)` 内部依赖该静态单例
+3. 在 `DeepCore.TemplateLoader.XLSLoader.LoadTemplates` 处抛出 `NullReferenceException`
+4. `_IdMap` 赋值失败,保持 null
+
+### 修复方案
+
+恢复 `Program.cs` 中的正确写法:
+
+```csharp
+DeepCore.GameEvent.Lua.LuaEventManager.DefaultAdapter = new DeepCore.Template.MoonSharp.MoonSharpLuaAdapter();
+var ad = DeepCore.GameEvent.Lua.LuaEventManager.DefaultAdapter;
+if (ad != null)
+{
+    // 必须传 true,否则 LuaTemplateLoader.Instance 不会被赋值,TableManager.LoadTemplates 会 NRE。
+    // true 时 MoonSharp 会尝试初始化 Unity 脚本加载器并打印 Error initializing UnityScriptLoader,可忽略。
+    new DeepCore.Lua.LuaTemplateLoader(true, ad);
+    CardsServerTemplateManager.TemplateDataRootPath =
+        CardsServerTemplateManager.ResolveServerDataRoot();
+    new DeepCore.Lua.LuaDataCenter(ad,
+        Path.Combine(CardsServerTemplateManager.TemplateDataRootPath, "templates_lua"));
+}
+CardsServerTemplateManager.Instance.Init();
+```
+
+### 初始化顺序(不可打乱)
+
+1. `MoonSharpLuaAdapter` → `LuaEventManager.DefaultAdapter`
+2. `new LuaTemplateLoader(true, ad)`
+3. `new LuaDataCenter(ad, templates_lua 路径)`
+4. `CardsServerTemplateManager.Instance.Init()` → 内部 `TableManager.LoadAllConfig`
+
+### 验证
+
+```csharp
+Table_ActivityTaskManager.IdMap.Count  // 正常应为 3
+Table_ActivityTaskManager.GetById(1)   // 应有数据
+```
+
+---
+
+## 4. activity_task.lua 存在但仍报错的误解
+
+### 用户疑问
+
+`ClientScript\Data\activity_new.xlsx\activity_task.lua` 文件存在,为何仍报错?是否所有 `.lua` 都没加载?
+
+### 关键说明
+
+#### 服务端不读 ClientScript 目录
+
+服务端模板根目录解析为:
+
+```
+server/src/data/ServerData/
+```
+
+`TableManager` 实际读取:
+
+```
+data/ServerData/templates_lua/activity_new.xlsx/activity_task.lua
+```
+
+**不会**读取 `data/ClientScript/Data/activity_new.xlsx/activity_task.lua`。  
+`ClientScript` 供 Unity 客户端使用;`ServerData/templates_lua` 供服务端使用,两套目录并行维护。
+
+#### activity_task.lua 可以正常加载
+
+在 `LuaTemplateLoader(true, ad)` 条件下,日志可见:
+
+```
+WARN LuaTemplateLoader - Field not found ... Table_ActivityTask.StageName : Sheet=activity_task
+WARN LuaTemplateLoader - Field not found ... Table_ActivityTask.Desc : Sheet=activity_task
+```
+
+说明 Lua 已解析,只是 `StageName`、`Desc` 在服务端 C# 类中未定义(客户端展示字段),属于正常 WARN。
+
+服务端 `Table_ActivityTask` 仅包含:
+
+```csharp
+public int Id;
+public int Type;
+public int Target;
+public int DropGroupId;
+```
+
+#### 并非所有 lua 未加载
+
+启动日志中有大量:
+
+```
+TemplateDataCenter - Reload : CacheData : File=templates_lua/activity_new.xlsx
+```
+
+表示对应 xlsx 目录下的 lua 已成功缓存。真正的加载失败会由 `LogicUtils.LogError` 记录并 `throw`。
+
+### 日志类型对照
+
+| 日志 | 含义 |
+|------|------|
+| `Error initializing UnityScriptLoader` | Unity 加载器初始化失败,不影响磁盘读 Lua |
+| `Field not found ... StageName/Desc` | Lua 已加载,客户端字段被忽略 |
+| `TemplateDataCenter - Reload` | 表加载成功 |
+| `LogicUtils.LogError` + 异常堆栈 | 真正的表加载失败 |
+
+---
+
+## 5. 推荐启动配置清单
+
+### 已修复项
+
+- [x] `OpenCards.Server.Main.csproj` 添加 `System.Configuration.ConfigurationManager` 4.7.0
+- [x] `Program.cs` 使用 `LuaTemplateLoader(true, ad)` 而非 `false`
+
+### 启动前检查
+
+1. 工作目录为 `_output.server`(或确保 `ResolveServerDataRoot` 能找到 `map/map_events.json`)
+2. Redis 已启动(配置见 `_launch_server_local.xml`)
+3. 模板数据存在于 `server/src/data/ServerData/templates_lua/`
+
+### 可忽略的启动日志
+
+- `Error initializing UnityScriptLoader : NullReferenceException`
+- `Field not found in C# class ... StageName / Desc / Name` 等客户端字段警告
+
+### 需要关注的错误
+
+- `System.Configuration.ConfigurationManager` 程序集找不到(需重新 build)
+- `TableManager` 中 `LoadTemplates` 的 NRE(检查是否误用 `LuaTemplateLoader(false, ad)`)
+- `Cannot find ServerData directory`(工作目录或数据路径错误)
+
+---
+
+## 附录:相关文件路径
+
+| 文件 | 说明 |
+|------|------|
+| `server/src/server/OpenCards.Server.Main/Program.cs` | 主程序入口,Lua 初始化 |
+| `server/src/server/OpenCards.Server.Main/OpenCards.Server.Main.csproj` | Main 项目,Quartz 依赖修复 |
+| `server/src/server/OpenCards.Server.Core/TableManager.cs` | 配置表加载 |
+| `server/src/server/OpenCards.Server.Core/Table/Table_ActivityTask.cs` | activity_task 表定义 |
+| `server/src/data/ServerData/templates_lua/activity_new.xlsx/activity_task.lua` | 服务端实际读取的 lua |
+| `server/src/data/ClientScript/Data/activity_new.xlsx/activity_task.lua` | 客户端 lua(服务端不读) |
+| `server/src/_output.server/` | 编译输出与运行目录 |
+
+---
+
+*文档生成时间:2026-06-10*

+ 216 - 0
docs/文档6.10/server_battle_SLua问题排查与打包记录.md

@@ -0,0 +1,216 @@
+# server_battle 项目 SLua 问题排查与打包记录
+
+> 整理时间:2026-06-10  
+> 项目路径:`D:\WorkSpace\project\chuanzhanServer\server_battle`
+
+---
+
+## 一、`using SLua` 编译报错
+
+### 现象
+
+`Program.cs` 中 `using SLua;` 无法识别,编译失败。
+
+### 原因
+
+`GameLogic.csproj` 引用了 NuGet 包路径:
+
+```
+..\packages\slua-standalone.1.0.67\lib\net35\slua-standalone.dll
+```
+
+但仓库中 **缺少该 DLL**。虽然存在 `slua-standalone.1.0.67` 目录和 `Packages` 文件夹,但只有 `content`(配置文件、`.so` 等),没有 `lib\net35\slua-standalone.dll`。
+
+另外注意:`Packages`(大写)与 `packages`(小写)是两个不同目录,csproj 引用的是小写 `packages`。
+
+### 解决方案
+
+从 NuGet 下载并解压 `slua-standalone 1.0.67`:
+
+```powershell
+Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/slua-standalone/1.0.67" -OutFile "slua-standalone.1.0.67.zip"
+Expand-Archive -Path "slua-standalone.1.0.67.zip" -DestinationPath "packages\slua-standalone.1.0.67"
+```
+
+解压后应存在:
+
+- `packages\slua-standalone.1.0.67\lib\net35\slua-standalone.dll` — C# 绑定(提供 `SLua` 命名空间)
+- `packages\slua-standalone.1.0.67\content\lib\x64\slua.dll` — Windows 原生库
+
+同时将原生库复制到 `GameLogic\lib\x64` 和 `GameLogic\lib\x86`。
+
+### 其他安装方式
+
+**Visual Studio 包管理器控制台:**
+
+```powershell
+Install-Package slua-standalone -Version 1.0.67
+```
+
+**或从同仓库其他项目复制:**
+
+`server\src\server\OpenCards.Server.Battle` 引用 `server\src\library\slua-standalone.dll`(若该路径有文件)。
+
+### 验证结果
+
+MSBuild 编译成功,生成 `GameLogic.exe`。
+
+---
+
+## 二、打包输出到 `_output.battle.server`
+
+### 需求
+
+将当前项目打包,输出到 `_output.battle.server` 目录。
+
+### 项目特点
+
+本项目为 **.NET Framework 4.8 旧式项目**,不能使用 `dotnet publish`,需使用 MSBuild。
+
+### 已做调整
+
+1. **Release 输出路径**:与 Debug 一致,统一到 `_output.battle.server`
+2. **AfterBuild**:自动将 `GameLogic\lib` 复制到输出目录
+3. **打包.bat**:改为使用 MSBuild(原 `dotnet publish` 不适用)
+
+### 打包命令
+
+```bat
+MSBuild server_battle.sln /t:Rebuild /p:Configuration=Release
+```
+
+或直接双击 `打包.bat`。
+
+### 输出目录结构
+
+```
+_output.battle.server\
+  GameLogic.exe
+  GameLogic.exe.config
+  ServerLib.dll
+  Newtonsoft.Json.dll
+  slua-standalone.dll
+  slua.dll                    ← 后续修复新增
+  lib\
+    x64\slua.dll
+    x86\slua.dll
+    x64\slua.so
+    x86\slua.so
+```
+
+### 运行说明
+
+在 `_output.battle.server` 目录下放置 `Config.json`(含 `ip`、`port`、`luaRoot`),再运行 `GameLogic.exe`。
+
+---
+
+## 三、运行时 `DllNotFoundException: 无法加载 DLL "slua"`
+
+### 现象
+
+```
+System.DllNotFoundException: 无法加载 DLL "slua": 找不到指定的模块。
+(异常来自 HRESULT:0x8007007E)
+```
+
+### 原因分析
+
+SLua 内部通过 P/Invoke 加载原生库:
+
+```csharp
+[DllImport("slua", CallingConvention = CallingConvention.Cdecl)]
+```
+
+**Windows 加载规则**:在 `GameLogic.exe` **同目录**、系统目录或 `PATH` 中查找 `slua.dll`,**不会**自动搜索 `lib\x64`、`lib\x86` 子目录。
+
+之前打包结果中 `slua.dll` 只在子目录:
+
+```
+_output.battle.server\
+  GameLogic.exe
+  lib\x64\slua.dll   ← Windows 找不到
+  lib\x86\slua.dll
+```
+
+### 额外问题:位数不匹配
+
+- 原项目为 `AnyCPU`,在部分环境下以 **32 位** 进程运行
+- 若复制 `lib\x64\slua.dll` 到根目录,会报 `BadImageFormatException`
+- 实测复制 `lib\x86\slua.dll` 可正常启动
+
+`slua-standalone.dll.config` 中的 `<dllmap>` **仅 Linux/Mono 有效**,在 Windows .NET Framework 下不起作用。
+
+### 解决方案
+
+修改 `GameLogic.csproj`:
+
+1. **平台改为 x64**,与 `lib\x64\slua.dll` 一致
+2. **构建后自动复制** 对应架构的 `slua.dll` 到 `_output.battle.server\slua.dll`(与 exe 同级)
+
+AfterBuild 逻辑示意:
+
+```xml
+<PropertyGroup>
+  <SluaNativeArch Condition="'$(PlatformTarget)' == 'x86'">x86</SluaNativeArch>
+  <SluaNativeArch Condition="'$(PlatformTarget)' == 'x64'">x64</SluaNativeArch>
+  <SluaNativeArch Condition="'$(SluaNativeArch)' == ''">x64</SluaNativeArch>
+</PropertyGroup>
+<Copy SourceFiles="$(ProjectDir)lib\$(SluaNativeArch)\slua.dll"
+      DestinationFiles="$(OutputPath)slua.dll" />
+```
+
+### 手动临时修复(不重新编译)
+
+```powershell
+# 64 位进程(项目已改为 x64)
+Copy-Item "GameLogic\lib\x64\slua.dll" "_output.battle.server\slua.dll"
+
+# 若进程是 32 位
+Copy-Item "GameLogic\lib\x86\slua.dll" "_output.battle.server\slua.dll"
+```
+
+### 验证结果
+
+重新打包后服务正常启动:
+
+```
+luaRootPath->D:\WorkSpace\project\chuanzhanServer\server\src\data\ClientScript\
+Sever is running at http://127.0.0.1:8088
+```
+
+---
+
+## 四、注意事项汇总
+
+| 项目 | 说明 |
+|------|------|
+| 目标框架 | .NET Framework 3.5+(当前 4.8,满足要求) |
+| NuGet 包路径 | csproj 引用小写 `packages`,勿与 `Packages` 混淆 |
+| Windows 原生库 | `slua.dll` 必须与 `GameLogic.exe` 同目录 |
+| 平台位数 | 建议明确使用 x64,避免 AnyCPU 位数不一致 |
+| Linux 部署 | 需 `slua.so`,设置 `LD_LIBRARY_PATH` 或使用 dllmap 配置 |
+| VC++ 运行库 | 若仍报「找不到模块」,可能需安装 Visual C++ Redistributable |
+| Git 提交 | 建议将 `packages\slua-standalone.1.0.67\lib\` 纳入版本库 |
+
+---
+
+## 五、相关文件路径
+
+| 文件 | 路径 |
+|------|------|
+| 主程序 | `GameLogic\Program.cs` |
+| 项目配置 | `GameLogic\GameLogic.csproj` |
+| SLua 原生库 | `GameLogic\lib\x64\slua.dll`、`GameLogic\lib\x86\slua.dll` |
+| SLua C# 绑定 | `packages\slua-standalone.1.0.67\lib\net35\slua-standalone.dll` |
+| 输出目录 | `_output.battle.server\` |
+| 打包脚本 | `打包.bat` |
+| 项目记录 | `记录\记录.md` |
+
+---
+
+## 六、项目背景(来自记录.md)
+
+- 战斗校验服使用 `slua-standalone`,Linux 版本未充分测试,目前主要跑 Windows
+- SLua 限制:只能基于 .NET Framework 3.5 及以上开发
+- 逻辑服 HTTP 服务基于 .NET Core 5.0,无法启动 SLua 虚拟机
+- 因此战斗服与游戏逻辑服分离,无法整合在一起

+ 302 - 0
docs/文档6.10/战斗错误6.10.md

@@ -0,0 +1,302 @@
+# chuanzhanServer 对话记录
+
+**日期:** 2026-06-10  
+**项目:** chuanzhanServer  
+**整理内容:** 战斗逻辑位置与战斗结算超时问题、本地起服 127.0.0.1 地址无法访问问题
+
+---
+
+## 一、战斗逻辑存放位置与战斗结算报错
+
+### 1.1 问题描述
+
+战斗结束后,GameNode 日志出现如下报错:
+
+```
+ERROR session:111115_1@GameNode1 - A Task Timeout Exception!
+DeepFrozen.RPC.Remote.RpcException : A Task Timeout Exception!
+
+ERROR ConnectorService_1 - Request is : TypeCodec : OpenCards.Core.Protocol.Client.ClientFightResultRequest (217603)
+```
+
+日志时间线示例:
+
+```
+00:06:32  ClientEnterGameRequest Reconnect(玩家重连)
+00:06:32  StartLogicService
+00:06:40  ClientFightResultRequest 超时(约 8 秒)
+00:07:33  ClientFightResultRequest 再次超时(客户端重试)
+```
+
+---
+
+### 1.2 战斗逻辑存放位置
+
+项目采用 **客户端 Lua 跑战斗 + 服务端 C# 结算/校验** 的架构。
+
+#### 客户端战斗核心(Lua)
+
+**主目录:** `server/src/data/ClientScript/battle/`
+
+| 文件/目录 | 作用 |
+|-----------|------|
+| `battle_main.lua` | 战斗入口,按模式创建不同 Battle 实例 |
+| `battle_core.lua` | 战斗核心循环(tick、update、结算) |
+| `mode/battle_stage.lua` | 主线关卡战斗模式 |
+| `entity/`、`skill/`、`buff/`、`ai/` | 实体、技能、Buff、AI |
+| `server.lua` | 服务端无头战斗入口(供战斗服校验用) |
+
+**客户端控制层:**
+
+- `gameControl/battle/battleCtrl.lua` — 战斗流程控制
+- `gameControl/battleResult/battleResultCtrl.lua` — 战斗结束后发起 `ClientFightResultRequest`
+
+#### 服务端战斗结算(C#)
+
+| 文件 | 作用 |
+|------|------|
+| `OpenCards.Server.Logic/Module/FightModules.cs` | 战斗结果处理核心:`HandleClientFightResultRequest` |
+| `OpenCards.Core/Protocol/Client/0x35200.Logic.Fight.cs` | 协议定义 `ClientFightResultRequest` |
+
+#### 独立战斗校验服
+
+| 位置 | 作用 |
+|------|------|
+| `server_battle/GameLogic/BattleServer.cs` | HTTP 战斗服,监听 `/fight/reqstartbattle` |
+| `OpenCards.Server.Battle/BattleServer.cs` | 集成版战斗服(当前 Lua 调用被注释) |
+
+战斗校验 HTTP 地址:
+
+```csharp
+public static string FightPostURL = "http://127.0.0.1:8088/fight/reqstartbattle";
+```
+
+---
+
+### 1.3 报错原因分析
+
+报错性质是 **RPC 超时**,不是战斗 Lua 逻辑本身抛错。
+
+**调用链:**
+
+```
+客户端 → ConnectorService → SessionService → LogicService(FightModule) → 返回响应
+```
+
+**`ClientFightResultRequest` 服务端处理流程(`FightModules.HandleClientFightResultRequest`):**
+
+1. 校验 `FightMod / StageId / RandomUuid` 是否与开战时一致
+2. (可选)HTTP 调用战斗服重跑校验
+3. 触发 `AsyncEventHandleFightResult` 发奖励、更新关卡
+4. 同步 Public / Center / Bill 等服务
+
+#### 最可能的原因
+
+**① 重连与战斗结算并发冲突(高度可疑)**
+
+重连时 `LogicService` 处理 `ClientEnterGameRequest`,其中有同步阻塞:
+
+```csharp
+// LogicService.cs 第 726 行
+Provider.Execute(NotifyModulesClientEnterGameMustDataAsync).Wait();
+```
+
+`LogicService` 为单线程消息队列,`ClientFightResultRequest` 会排在重连逻辑之后,超过 RPC 超时阈值即报 `Task Timeout Exception`。
+
+**② 下游 RPC 服务响应慢或不可用**
+
+战斗胜利后的结算链路会调用:
+
+- `StageRankModule.CheckStageRankInfo` → StageRank 服务
+- `SyncStageInfo` → Public / Center 服务
+- `HandleSvaeBillInfo` → Bill 服务(保存战报)
+
+任一服务卡住都会导致超时。
+
+**③ 主线战斗校验已被关闭**
+
+`FightModules.cs` 中主线 PVE 的 HTTP 战斗校验代码已被注释:
+
+```csharp
+log.Info("==================  关闭战斗校验   ==================");
+// RequestBattleService(battlerinfo, RandomUuid, ResultInfo);
+```
+
+因此超时**不太可能是**战斗服 Lua 跑战斗太慢,更可能是 LogicService 排队或下游 RPC 阻塞。
+
+**④ RandomUuid 不匹配(会快速失败,不会超时)**
+
+若 `RandomUuid` 与开战时不一致,会直接返回 `CODE_CAN_NOT_FIGHT_CHAPTER`,不会等到超时。
+
+**⑤ ArenaPinnacle 警告无关**
+
+日志中 `Region 1 round contestants is not 8, grouping contestants failed!` 是竞技场巅峰赛分组问题,与本次战斗结算无直接关系。
+
+---
+
+### 1.4 排查建议
+
+1. 查 GameNode1 完整日志,搜索 `111115` + `HandleClientFightResultRequest` / `Enter Game`,看重连与战斗结算是否重叠。
+2. 检查下游服务是否正常:StageRankService、PublicService、CenterService、BillService。
+3. 确认 RPC 超时配置(`_launch_server.xml` 中 `DefaultTaskExecuteTimeout`,默认 60000ms)。
+4. 客户端侧:战斗结束后若网络断开又重连,可在重连成功后再提交战斗结果。
+5. 检查 `_launch_server.xml` 中 `DefaultTaskExecuteTimeout` 是否被改得过短(如 5000–8000ms)。
+
+---
+
+## 二、本地起服后 127.0.0.1 地址无法访问
+
+### 2.1 问题描述
+
+使用 `_launch_server_local.xml` 起服后,配置中的 `127.0.0.1` 相关网址仍无法访问。
+
+**配置文件路径:** `server/src/server/OpenCards.Server.Main/_launch_server_local.xml`
+
+---
+
+### 2.2 两类 127.0.0.1 地址(关键)
+
+配置里的地址分两类,很多**不是**游戏服自己提供的页面。
+
+#### 类型 A:静态配置文件 URL(游戏服不会提供)
+
+```xml
+<ServerListUrl>http://127.0.0.1:8000/serverlist.json</ServerListUrl>
+<StopServerDataURL>http://127.0.0.1/cjw_60000_stop_server.json</StopServerDataURL>
+<UpdateServerConfig>http://127.0.0.1/update_server_config.json</UpdateServerConfig>
+<AndroidClientVersionRecordConfig>http://127.0.0.1/android_version_record_file.json</AndroidClientVersionRecordConfig>
+<!-- 以及 ios 相关配置 -->
+```
+
+这些是 **AccountServer 启动后主动去拉取的配置**,需要本地另起静态 HTTP 服务,游戏服本身不托管这些 JSON。
+
+| URL | 需要的本地服务 |
+|-----|----------------|
+| `http://127.0.0.1:8000/serverlist.json` | 8000 端口静态文件服务 |
+| `http://127.0.0.1/xxx.json`(无端口 = 80) | 80 端口静态文件服务 |
+
+仓库里虽有 `apollo_60000/serverlist.json` 等文件,但:
+
+- 文件名与配置不一致(如 `stop_server_list.json` vs `cjw_60000_stop_server.json`)
+- 没有自动部署到 8000/80 端口的机制
+- `serverlist.json` 里的 `address` 多为远程 IP,本地需改成 `127.0.0.1:19821`
+
+#### 类型 B:游戏服自身 HTTP/TCP 服务
+
+| 服务 | 地址 | 说明 |
+|------|------|------|
+| AccountServer | `http://127.0.0.1:18081/account/` | 账号/区服 API |
+| PayServer | `http://127.0.0.1:18082/pay/` | 支付 |
+| AdminService | `http://127.0.0.1:18088/api/` | 管理后台 |
+| Connector | `127.0.0.1:19821` | 客户端 TCP 连接 |
+
+由 `ServiceLauncher`(`OpenCards.Server.Main` 单节点模式)拉起。
+
+---
+
+### 2.3 当时环境检查结果
+
+本机端口检查:**只有 Redis 6379 在监听**,18081、18082、18088、19821、8000 均未监听。
+
+说明游戏服 HTTP 未成功启动,或进程已退出;仅“执行了起服命令”不够,需确认进程在跑且端口已绑定。
+
+---
+
+### 2.4 常见原因与处理
+
+| 原因 | 说明 | 处理 |
+|------|------|------|
+| 误把配置拉取地址当可访问页面 | `8000/serverlist.json` 需独立静态服 | 在 JSON 目录执行 `python -m http.server 8000` |
+| 本地缺少配置文件 | `cjw_60000_stop_server.json` 等不存在 | 从 `apollo_60000/` 复制重命名,或改 XML URL |
+| serverlist 地址不是本机 | 仓库内多为远程 IP | 改为 `"address": "127.0.0.1:19821"` |
+| Windows URL ACL 未注册 | `http://+:18081` 等需管理员权限 | 以管理员运行,或手动 `netsh http add urlacl` |
+| 依赖未就绪 | Redis、MySQL、战斗服 | Redis 已运行;Pay 需 MySQL;8088 战斗服在 local 配置中被注释 |
+| 启动方式与配置不匹配 | local.xml 仅 GlobalConfig | Main 用 `OpenCards.Server.Main.exe local`;多节点用 DotNetCore + local2 |
+
+**本地 serverlist.json 示例:**
+
+```json
+[
+  {
+    "id": 1,
+    "index": 0,
+    "name": "本地1区",
+    "address": "127.0.0.1:19821",
+    "state": 1,
+    "is_open": true,
+    "capacity": 2000,
+    "serverid": 1,
+    "groupid": 1,
+    "note": "local"
+  }
+]
+```
+
+**Windows URL ACL 手动注册:**
+
+```powershell
+netsh http add urlacl url=http://+:18081/account/ user=Everyone
+netsh http add urlacl url=http://+:18082/pay/ user=Everyone
+netsh http add urlacl url=http://+:18088/api/ user=Everyone
+netsh http add urlacl url=http://+:18089/chat/ user=Everyone
+```
+
+**Main 单节点启动:**
+
+```powershell
+cd server\src\_output.server\net5.0
+OpenCards.Server.Main.exe local
+```
+
+**验证端口:**
+
+```powershell
+netstat -ano | findstr "18081 19821 8000"
+```
+
+**快速改法(不想搭静态服):**
+
+将 `_launch_server_local.xml` 中的 `ServerListUrl` 等改为 OSS 地址(参考 `_launch_server_dev.xml`),本地联调时把 serverlist 中的 `address` 改成本机 IP:19821。
+
+---
+
+### 2.5 推荐本地调试步骤
+
+1. **以管理员身份**启动 Redis(已有)和 MySQL(Pay 需要)。
+2. 准备静态 JSON,启动 8000 端口 HTTP 服务。
+3. 确认 `serverlist.json` 中 `address` 为 `127.0.0.1:19821`。
+4. 以管理员身份启动 `OpenCards.Server.Main.exe local`。
+5. `netstat` 确认 18081、19821、8000 端口监听。
+6. 验证:
+   - 静态配置:`http://127.0.0.1:8000/serverlist.json`
+   - 账号服:`http://127.0.0.1:18081/account/getserverlist`
+
+---
+
+## 三、关键文件索引
+
+| 主题 | 路径 |
+|------|------|
+| 战斗 Lua 核心 | `server/src/data/ClientScript/battle/` |
+| 战斗结算 C# | `server/src/server/OpenCards.Server.Logic/Module/FightModules.cs` |
+| 战斗协议 | `server/src/core/OpenCards.Core/Protocol/Client/0x35200.Logic.Fight.cs` |
+| 战斗校验服 | `server_battle/GameLogic/BattleServer.cs` |
+| 本地起服配置 | `server/src/server/OpenCards.Server.Main/_launch_server_local.xml` |
+| 完整多节点配置 | `server/src/server/OpenCards.Server.Main/_launch_server_local2.xml` |
+| 单节点启动器 | `server/src/server/OpenCards.Server.Main/ServiceLauncher.cs` |
+| 起服入口 | `server/src/server/OpenCards.Server.Main/Program.cs` |
+| 静态配置样例 | `apollo_60000/serverlist.json` 等 |
+
+---
+
+## 四、总结
+
+| 问题 | 结论 |
+|------|------|
+| 战斗逻辑在哪 | 主要在 `server/src/data/ClientScript/battle/`(Lua),结算在 `FightModules.cs` |
+| 战斗结算超时 | RPC 超时;重连阻塞 LogicService 或 StageRank/Center/Bill 下游慢 |
+| 127.0.0.1 无法访问 | 8000/80 为外部静态配置源,需自建 HTTP;18081 等需游戏服成功启动 + 管理员 URL ACL |
+
+---
+
+*文档由 Cursor 对话自动整理生成*

+ 2 - 1
server/src/core/OpenCards.Tools/copylua.bat

@@ -10,4 +10,5 @@ rem Modify "cn" to the file configuration you want to start
 @SET LuaDirPath=%SolutionDir%..\..\data\ServerData\templates_lua\
 echo %LuaAreaDirPath%
 echo %LuaDirPath%
-@if exist "%LuaAreaDirPath%" xcopy /Y /Q /e /i %LuaAreaDirPath%  %LuaDirPath%
+rem @if exist "%LuaAreaDirPath%" xcopy /Y /Q /e /i %LuaAreaDirPath%  %LuaDirPath%
+@xcopy /Y /Q /e /i %LuaAreaDirPath%  %LuaDirPath%

+ 2 - 2
server/src/data/ClientScript/Protocol/generated/OpenCards.Core.Protocol.Client.ClientHandleRoleCommonRequest.lua

@@ -16,13 +16,13 @@ Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.Client.ClientHandleRo
 
 function _M.Write(output,data)
 	Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.ClientRequest'].Write(output, data)
-	output:PutS32(data.c2s_reqtype)
+	
 end
 
 
 function _M.Read(input,data)
 	Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.ClientRequest'].Read(input, data)
-	data.c2s_reqtype = input:GetS32()
+	
 end
 
 

+ 4 - 4
server/src/data/ClientScript/Protocol/generated/OpenCards.Core.Protocol.Client.ClientHandleRoleCommonResponse.lua

@@ -16,15 +16,15 @@ Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.Client.ClientHandleRo
 
 function _M.Write(output,data)
 	Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.ClientResponse'].Write(output, data)
-	output:PutS32(data.s2c_reqtype)
-	output:PutMap(data.s2c_data, output.PutUTF, output.PutS64,'string', 'long')
+	output:PutMap(data.s2c_subscribeData, output.PutUTF, output.PutS64,'string', 'long')
+	output:PutBool(data.s2c_thirtyDayOpen)
 end
 
 
 function _M.Read(input,data)
 	Protocol.Serializer.StringDefined['OpenCards.Core.Protocol.ClientResponse'].Read(input, data)
-	data.s2c_reqtype = input:GetS32()
-	data.s2c_data = input:GetMap(input.GetUTF, input.GetS64,'string', 'long')
+	data.s2c_subscribeData = input:GetMap(input.GetUTF, input.GetS64,'string', 'long')
+	data.s2c_thirtyDayOpen = input:GetBool()
 end
 
 

+ 0 - 417
server/src/data/ClientScript/Protocol/generated/_baseType.lua

@@ -1,417 +0,0 @@
-basetype = {
-["OpenCards.Core.Protocol.Client.ClientEnterServerResponse"] = "ConnectorResponse",
-["OpenCards.Core.Protocol.Client.ClientEnterGameResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientExitGameResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeServerIDResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientPong"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientBatchResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientUseItemResponse"] = "ItemResponse",
-["OpenCards.Core.Protocol.Client.ClientUseItemResponse"] = "ItemResponse",
-["OpenCards.Core.Protocol.Client.ClientFightRandomSeedResponse"] = "FightResponse",
-["OpenCards.Core.Protocol.Client.ClientFightResultResponse"] = "FightResponse",
-["OpenCards.Core.Protocol.Client.ClientFightSkipResultResponse"] = "FightResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaValorFightRandomSeedResponse"] = "FightResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaHighendFightRandomSeedResponse"] = "FightResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroResetResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroDisbandResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroAutoDisbandResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroRollbackResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroReplacementResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientSetReplacementConfigIDResponse"] = "CarriageResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroLevelUpResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroUpRankResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroLockResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroWearResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroTakeOffResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroLinkResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroVoidKeyLinkResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientBuyHeroPackResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryHeroInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryBagHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroWearSkinResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientCheckTrialHeroResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientRecordMercenaryHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSetTalnentResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHandleGMResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientDropTest1Response"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientDropTest2Response"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetVipRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRelicItemResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRoleListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLoadVipRewardsResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetServerTimeOffsetResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRelicWaitRecvListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientJoinCommunityRespoonse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHandleRoleCommonResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetCheckinInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientCheckinClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetStageRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientStageRewardClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetLoginRewardInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLoginRewardClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTargetTaskResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientTargetTaskClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetActivityTaskResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientActivityTaskClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetSummonTaskResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSummonTaskClaimResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryTaskListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTaskRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTaskStageRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTaskConfigResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetStageChallengeRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryTaskListByArrayResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryTowerInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChallengeTowerStartResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChallengeTowerEndResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryTowerLevelPlayerResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryFriendTowerLevelPlayerResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSweepTowerResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetFormationInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientUpFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientDeleteFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientExchangeFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveWholeFormationsResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientByTypeSaveFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientCollectionFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetCollectionFormationListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveMultiTypeFormationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetShopInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientBuyShopItemResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientRefreshShopResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientRecommendGuildListResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientSearchGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientLoadGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientCreateGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientApplyJoinGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeGuildPlaceResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientLoadJoinGuildAppliesResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientHandleJoinGuildApplyResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeGuildInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientSendMailToGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientExitGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientLoadGuildEventsResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeGuildPositionResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientKickOutGuildResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientChallengeGuildMemberResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeGuildNoticeResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientSetGuildProtectorResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientLllustratedBookRedPointInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLllustratedBookReceiveRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHistoricalArchivesListInfoRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSetForeignAidHeroRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetForeignAidHeroRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientRemoveForeignAidHeroRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientValidHeroListRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientActiveHeroRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientShowItemTipsRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHeroBuffDataResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientEquipResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientUnEquipResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientEquipAllResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientUnEquipAllResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientLevelUpEquipResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientTierUpEquipResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientResetEquipRaceResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientActiveExWeaponResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientExWeaponLevelUpResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientResetEquipRaceComfirmResponse"] = "EquipResponse",
-["OpenCards.Core.Protocol.Client.ClientLoadCopyTypeDataResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientStartCopyResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientEndCopyResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientGainCopyRewardResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveCopyEventResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientExploreCopyMapPosesResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientAddCopyMapLogResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyCombatResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyGainRelicResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyUseSpringResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyReliveHeroResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyHireHeroResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientSetPlayerCopyPosResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientSetMapDataResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyTriggerTrapResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyResetAllHerosResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyGetHireHerosResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyGetMonstersResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientCopyGranaryResponse"] = "CopyResponse",
-["OpenCards.Core.Protocol.Client.ClientEquipArtifactResponse"] = "ArtifactResponse",
-["OpenCards.Core.Protocol.Client.ClientUnEquipArtifactResponse"] = "ArtifactResponse",
-["OpenCards.Core.Protocol.Client.ClientLevelUpArtifactResponse"] = "ArtifactResponse",
-["OpenCards.Core.Protocol.Client.PayResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.PlaceOrderResponse"] = "PayResponse",
-["OpenCards.Core.Protocol.Client.CheckOrderResponse"] = "PayResponse",
-["OpenCards.Core.Protocol.Client.SyncOrderResponse"] = "PayResponse",
-["OpenCards.Core.Protocol.Client.ClientSummonResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetWishListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveWishListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetSummonBoxResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetAstrologyHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveAstrologyHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRaceSummonInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSwitchRaceSummonResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSelectTavernSkinResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientAstrologyRemindResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetDiamondWishListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveDiamondWishListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTavernRecommendGiftResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTavernExchangeInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSaveTavernExchangeHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientClaimTavernExchangeHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetWishListRecommendResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientDrawRaceOptionalCardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientBuyRaceExchangeShopResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetCryInfoResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientSetCryTeamListResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientUnlockCryGridResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientCryBreakResponse"] = "HeroResponse",
-["OpenCards.Core.Protocol.Client.ClientCryLevelUpResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientCryUpHeroResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientCryDownHeroResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientCryRefreshGridTimeReqResponse"] = "CrystalResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildHunterInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientSummonGuildHunterBossResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientSweepGuildHunterResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildHunterLogResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGuildHunterBattleResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildWarriorTreasureInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientDrawGuildWarriorTreasureResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientLookGuildWarriorTreasureInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMailListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientOperateMailResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetBountyOptResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetBountyInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientValidAidHeroListRsponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLifeTreeShowSoulEchoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLifeTreeUpgradeResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLifeTreeResetResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientLifeTreeInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientCollectLifeTreeSoulEchoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientAtlantisActivityListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetValleyRuinsPageInfoResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientSetValleyRuinsRewardResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientValleyRuinsEnterFloorResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientFireValleyRuinsRewardResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientValleyRuinsRewardHistoryResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientValleyRuinsFloorActiveResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientMagicTopHatFireRewardResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientMagicTopHatFireRewardHistoryResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientMagicTopHatRewardProbabilityResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientExchangeActivityInfoResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientExchangeActivityExchangeResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientGetNewHeroTrialInfoResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientActiveNewHeroTrialResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityInfoResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityRecevieRewardResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityPurchaseChallengesResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityBattleRecordResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityRankResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientBossChallengeActivityStartResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientMagicTopHatInfoResponse"] = "AtlantisActvityCommonErrorCode",
-["OpenCards.Core.Protocol.Client.ClientAtlantisActivityConfigResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveShallowInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveDeepInfoResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGuildSecretCaveBaseResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGuildSecretCaveBattleResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientBuyGuildSecretCaveCountResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGuildSecretCaveLogResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveRankResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientRefreshGuildSecretCaveRankResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveLastRankResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveAppointGradeRankResponse"] = "GuildResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveDreamStepRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetGuildSecretCaveDreamStepInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientEnterMazeResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMazeGridOptResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMazeUseItemResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMazeHelpListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMazeHelpOptResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMazeGetGridInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryAlLRedDotInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeRedDotStatusResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientIsShowRedDotResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendFindResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendApplyResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendApplyListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendApplyHandleResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendRemoveResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendBlacklistResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendAddBlacklistResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendRemoveBlacklistResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempHiredMercenaryListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempCanHireMercenaryListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempCanHireMercenaryApplyResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempLendMercenaryListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempMercenaryApplyListResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempMercenaryApplyHandleResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempMercenaryReturnResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendPointOperateResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendPointOneKeyOperateResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientFriendApplyCountResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientTempMercenaryApplyCountResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTempMercenaryUseResponse"] = "FriendResponse",
-["OpenCards.Core.Protocol.Client.ClientLookTimeBoxRewardResponse"] = "TimeRewardResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTimeBoxRewardResponse"] = "TimeRewardResponse",
-["OpenCards.Core.Protocol.Client.ClientGetWorldMapOtherRolesResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetStageHistoryResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetBattleOtherRolesResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatMessageListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatAddMessageResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatUpMessageResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatDeleteMessageResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatUpdateMessageResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatWorldChannelListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatWorldChannelChangeResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChatMuteStateResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHotRankInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientArtifactUsageRateResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientHeroHotInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetLoginPopupInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ArenaResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientEnterArenaResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorOpponentResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetFightRecordListResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorOppositeRoleDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorRoleDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaValorRankActivityBaseInfoResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorRankDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientReceiveArenaValorRankActivityDailyRewardResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaValorRankActivityDailyRewardDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientIsArenaValorEnterOneTimesResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientEnterArenaValorRankActivityResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientReceiveArenaValorTierSegmentRewardResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientReceiveArenaValorBoxRewardResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaHighendDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaHighendOpponentResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHighendFightRecordListResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaHighendOppositeRoleDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaHighendScoreRankListResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaHighendCoinResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientCheckSeasonRefreshResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleTopOfGloryDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleRoadOfGloryDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleGroupCompetitionDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleGroupGroupDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleRoundCompetitionDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleRoundGroupDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleFinalCompetitionDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleQuizHandicapDataResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaPinnacleBetResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaPinnacleQuizRecordResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaPinnacleQuizStatisticsResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaPinnacleAwardPreviewResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientEarnArenaPinnacleGloryRoadIconBoxResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleFightRecordResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaPinnacleRankRewardStatusResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientReceiveArenaPinnacleRankRewardResponse"] = "ArenaResponse",
-["OpenCards.Core.Protocol.Client.ClientArenaBuyTicketResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetArenaTicketDailyPurchasedCountsResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMarketInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRechargeOrderResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMarketRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientRefreshMarketRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMarketPushResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientOrderMarketPushResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetFirstRechargeInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMarketProgressRewardInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMarketProgressRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientBuyMarketProgressRewardScoreResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketProgressRewardSetPlanIDResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketGetMonthCardRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketChangeOptionalBagInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketLockOptionalHeroInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketSailGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketEliteGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetAccumulateRechargeInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRecommendGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketPrivilegeRewardInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketClaimPrivilegeRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketGetSummonRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketGeneralGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientFosterAcumulateInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientFosterDayInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientFosterGetRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientMarketMonthCardInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientUpdateCurrencyCodeResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSetFirstRechargeShowResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientNotHeroLevelUpResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetAdsRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMiniGameRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMiniGameEndResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetAdsInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientTimeLimitedActivityConfigResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetPassCheckInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetPassCheckRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTimeLimitedTaskInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetTimeLimitedTaskRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetSummonCountRewardInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientClaimSummonCountRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetDirectGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientExchangeDirectGiftResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetSpecialTrainingInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientClaimSpecialTrainingResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetExpGiftInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHonourRankMainInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHonourRankListInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHonourRankRewardListResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHonourRankRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetAchieveFivePlayerResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRoleInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientAttentionSomeoneResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientFansInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientReportSomeoneResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetMultiRoleInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetCDKResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientCreatCDKCodeResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetRoleInfomationResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeRoleNameResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeGenderResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeSignResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeShowPicturesAndHeroTeamResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeHeadIconResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeHeadIconBoxResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientChangeChatBoxResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSetChangeShowTeamResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientRecordLocalLanguageResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientUploadIPRespoonse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetLoginSignInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetLoginSignRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientNewerGuideSetProgressResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientPresetHeroSelectStateResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientSelectPresetHeroResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientVoidGuestInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientTrialVoidGuestResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientExchangeVoidGuestResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHeroWayResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHeroWayTaskRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientGetHeroWayStageRewardResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientStageRankInfoResponse"] = "StageRabkResponse",
-["OpenCards.Core.Protocol.Client.ClientStageRankingResponse"] = "StageRabkResponse",
-["OpenCards.Core.Protocol.Client.ClientFeedbackListResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.ClientFeedBackSubmitResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.ClientFeedBackRewardtResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.ClientQueryUserPhoneResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.ClientSendCodeByPhoneResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.ClientBindPhoneResponse"] = "FeedBackResponse",
-["OpenCards.Core.Protocol.Client.WishSummonActivityResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientActivityStateResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonActivityConfigResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonSummonBaseInfoResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonSummonSaveHeroResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonSummonResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonBossChallengeBaseInfoResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonBossChallengeRankListResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonHeroGiftBaseInfoResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonLockHeroResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonWeekCardBaseInfoResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientWishSummonLimitedGiftBaseInfoResponse"] = "WishSummonActivityResponse",
-["OpenCards.Core.Protocol.Client.ClientNewGuildBossInfoResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientNewGuildBossSweepResponse"] = "ClientResponse",
-["OpenCards.Core.Protocol.Client.ClientNewGuildBossReceiveRewardBoxResponse"] = "ClientNewGuildBossSweepResponse",
-["OpenCards.Core.Protocol.Client.ClientGetBattleHistoryRecordsResponse"] = "ClientResponse",
-}

+ 0 - 449
server/src/data/ClientScript/Protocol/generated/_enum.lua

@@ -1,449 +0,0 @@
-SyncClientRoleDataType = {
-	Level = 1,
-	Exp = 2,
-	Diamond = 3,
-	AutoDisband = 4,
-	Coin = 5,
-	HeroDisbandUnlock = 6,
-	HeroRollbackUnlock = 7,
-	HeroReplacementUnlock = 8,
-	HeroPackCount = 9,
-	HeroPackOpenCnt = 10,
-	CryStalLevel = 11,
-	CryStalStep = 12,
-	CryStalState = 13,
-	CrystalBuyGirdByMatCnt = 14,
-	CrystalBuyGirdByDiamondCnt = 15,
-	VipLevel = 16,
-	VipExp = 17,
-	LastGeTimeBoxTime = 18,
-	QuickTimeCount = 19,
-	LastRefreshDataTime = 20,
-	HeroExp = 21,
-	ArenaValorID = 22,
-	WorldMapShowNonFriend = 23,
-	StrangerGroupID = 24,
-	FriendPoint = 25,
-	ChangeNameCount = 26,
-	ArenaHighendTier = 27,
-	ArenaHighendCoinTime = 28,
-	HeroReplacementConfigId = 29,
-	AccumulationTime = 30,
-	TotalTimeLimit = 31,
-	StageRankState = 32,
-	StageRanking = 33,
-	ReceiveStageChallengeTask = 34,
-	AcumulateActivityState = 35,
-	CryStalHighestLevel = 36,
-	ArenaValorCurrentRank = 37,
-	ArenaHighendCumulativeCoin = 38,
-	ArenaValorScore = 39,
-	ArenaValorFightVictoryTimes = 40,
-	ArenaValorHistoricHighestScore = 41,
-	ArenaValorTier = 42,
-	ArenaValorHistoricHighestTier = 43,
-	PresetHeroSelect1 = 44,
-	PresetHeroSelect2 = 45,
-}
-
-SyncClientFormationType = {
-	Battle = 1,
-	Team = 2,
-	TowerTeam1 = 3,
-	ArenaValorAttackTeam = 4,
-	ArenaValorDefendTeam = 5,
-	ArenaHighendAttackTeam = 6,
-	ArenaHighendDefendTeam = 7,
-	ArenaPinnacleTeam = 8,
-	ShowTeam = 10,
-	MazeTeam = 11,
-	TowerTeam2 = 12,
-	TowerTeam3 = 13,
-	TowerTeam4 = 14,
-	TowerTeam5 = 15,
-	TowerTeam6 = 16,
-	TowerTeam7 = 17,
-	AbyssMazeTeam = 21,
-	TopOfTime = 22,
-	GuildHunter = 23,
-	GuildSecret = 24,
-	Battle2 = 32,
-	Battle3 = 33,
-	Battle4 = 34,
-	Battle5 = 35,
-	QiJing = 36,
-	WishSummonBoss = 37,
-	NewGuildBoss = 38,
-}
-
-CopyType = {
-	QiJingTanXian = 1,
-	ShiGuangNiLv = 2,
-	HeroTrial = 3,
-}
-
-SyncClientSummonType = {
-	Diamond = 1,
-	Race = 2,
-	Friend = 3,
-	Optional = 4,
-	Astrology = 5,
-	TimeLimited = 6,
-	Wish = 7,
-}
-
-SyncClientDrawType = {
-	Single = 1,
-	Ten = 2,
-}
-
-SyncClientRaceType = {
-	Human = 1,
-	Barbarian = 2,
-	Sui = 3,
-	Undead = 4,
-	God = 5,
-}
-
-MailConfigType = {
-	System = 1,
-	Guild = 2,
-	GuildSecret = 3,
-}
-
-PinnacleServiceType = {
-	Game = 0,
-	Public = 1,
-}
-
-SyncClientPinnacleStageType = {
-	Vacuum = 0,
-	Offseason = 1,
-	CompetitionPrepare = 2,
-	Group = 3,
-	Ro64 = 4,
-	Ro32 = 5,
-	Ro16 = 6,
-	QuarterFinals = 7,
-	SemiFinals = 8,
-	ChampionshipFinals = 9,
-}
-
-SyncClientCompetitionPeriodType = {
-	NotCompetition = 0,
-	Prepare = 1,
-	LockFormation = 2,
-	ResultShow = 3,
-}
-
-SyncClientCompetitionRankType = {
-	ChampionShip = 1,
-	Final2 = 2,
-	Final4 = 4,
-	Final8 = 8,
-	Ro16 = 16,
-	Ro32 = 32,
-	Ro64 = 64,
-	Group = 128,
-}
-
-ContestantGatherStateType = {
-	NotStartGatherYet = 0,
-	IsGathering = 1,
-	CompleteGathering = 2,
-	IncompleteGathering = 3,
-}
-
-CheckSeasonState = {
-	SeasonNotChange = 0,
-	OverSeason = 1,
-	OverSeason = 1,
-}
-
-StageRankStateType = {
-	StageRankStateType_0 = 0,
-	StageRankStateType_Season_1 = 1,
-	StageRankStateType_Season_End = 2,
-	StageRankStateType_Season_2 = 3,
-	StageRankStateType_End = 4,
-}
-
-FeedbackStateType = {
-	FeedbackStateType_0 = 0,
-	FeedbackStateType_Can_GetReward = 1,
-	FeedbackStateType_Already_Get = 2,
-}
-
-TargetTaskStatus = {
-	Unfinished = 0,
-	Unclaimed = 1,
-	Claimed = 2,
-}
-
-LoginActivityType = {
-	Online = 1,
-	Days = 2,
-}
-
-RoleType = {
-	Stranger = 0,
-	SameAreaFriend = 1,
-	SameArenGuildMember = 2,
-	SameAreaFriendAndGuildMember = 3,
-	OtherAreaFriend = 4,
-	OtherAreaGuildMember = 5,
-	OtherAreaFriendAndGuildMember = 6,
-}
-
-AddItemSpecialReason = {
-}
-
-ItemType = {
-	Tool = 1,
-	Hero = 2,
-	Weapon = 3,
-	Relic = 4,
-	Artifact = 5,
-}
-
-ItemAdditionType = {
-	ItemAdditionType_Common = 0,
-	ItemAdditionType_VIP = 1,
-	ItemAdditionType_Subscribe = 2,
-	ItemAdditionType_Stars = 3,
-}
-
-MailReadType = {
-	UnRead = 1,
-	Readed = 2,
-}
-
-MailClaimType = {
-	UnClaim = 1,
-	Claimed = 2,
-}
-
-MailOperateType = {
-	Read = 1,
-	Claim = 2,
-	Del = 3,
-}
-
-JoinGuildCheckType = {
-	NoCheck = 0,
-	NeedCheck = 1,
-	AbadonJoin = 2,
-}
-
-GuildMemberType = {
-	Leader = 1,
-	Presbyter = 2,
-	Member = 3,
-}
-
-GuildPrivilegeType = {
-	ChangePosition = 1,
-	HandleApplyJoinGuild = 2,
-	OpenActivity = 3,
-	InfoSetting = 4,
-	GuildMail = 5,
-	ChangeGuildPlace = 6,
-	ChangeProtector = 7,
-	KickOutGuild = 8,
-	SummonBoss = 9,
-}
-
-GuildEventType = {
-	PlayerJoinGuild = 1,
-	PlayerExitGuild = 2,
-	PlayerKickoutGuild = 3,
-	PlayerPositionChanged = 4,
-	CreateGuild = 5,
-	SetProtector = 6,
-	CancelProtector = 7,
-	AutoChangeLeader = 8,
-}
-
-EnumHeroSourceType = {
-	HeroSourceType_None = 0,
-	HeroSourceType_Friend = 1,
-	HeroSourceType_Guild = 2,
-}
-
-EnumRelationType = {
-	RelationType_None = 0,
-	RelationType_Guild = 1,
-	RelationType_Friend = 2,
-	RelationType_GuildFriend = 3,
-	RelationType_Self = 4,
-}
-
-GetStatus = {
-	NotGet = 0,
-	UnGet = 1,
-	Got = 2,
-}
-
-ApplyStatus = {
-	NotApply = 0,
-	Applied = 1,
-	Have = 2,
-}
-
-FightType = {
-	FightType_Main = 1,
-	FightType_Maze = 2,
-	FightType_Coy = 3,
-	FightType_GuildPK = 4,
-	FightType_FriendPK = 5,
-	FightType_GuildHunter = 6,
-	FightType_GuildSecret = 7,
-	FightType_Tower = 10,
-	FightType_ArenaValor = 11,
-	FightType_ArenaHighend = 12,
-	FightType_ArenaPinnacle = 13,
-	FightType_GuangZhu = 14,
-	FightType_LieCi = 15,
-	FightType_CangCui = 16,
-	FightType_QianHai = 17,
-	FightType_YueSheng = 18,
-	FightType_JiYuan = 19,
-	FightType_QiJing = 20,
-	FightType_Dungeon_Gold = 31,
-	FightType_Dungeon_Exp = 32,
-	FightType_Dungeon_Hero = 33,
-	FightType_Dungeon_Artifact = 34,
-	FightType_Dungeon_Rune = 35,
-	FightType_ActivityBoss = 101,
-	FightType_TimeLimitedSpecialTraining = 102,
-	FightType_WishSummon_Activity_Boss = 103,
-	FightType_GuildBOSS = 104,
-	FightType_TOTAL_NUM = 105,
-}
-
-FightResultType = {
-	FightResultType_Win = 1,
-	FightResultType_Fail = 2,
-	FightResultType_Exit = 3,
-	FightResultType_Timeout = 4,
-}
-
-TowerType = {
-	TowerType_WangZuo = 1,
-	TowerType_GuangZhu = 2,
-	TowerType_LieCi = 3,
-	TowerType_CangCui = 4,
-	TowerType_QianHai = 5,
-	TowerType_YueSheng = 6,
-	TowerType_JiYuan = 7,
-}
-
-GetTimeRewardType = {
-	GET_TIME_TYPE_ORDER = 0,
-	GET_TIME_TYPE_QUICK = 1,
-}
-
-CryState = {
-	Cry_UNKNOWN = 0,
-	Cry_Rank = 1,
-	Cry_Already_Rank = 2,
-}
-
-CryGirdCostType = {
-	Cry_COST_CRY = 1,
-	Cry_COST_GAMES = 2,
-}
-
-VoidKeyLinkType = {
-	VoidKeyLinkType_Use = 1,
-	VoidKeyLinkType_Remove = 2,
-}
-
-ForeignAidHeroUseStatus = {
-	FREE = 1,
-	USE_FETTERS = 2,
-	USE_TASK = 3,
-}
-
-LifeTreeUpgradeType = {
-	CORE_BLESS_TYPE = 1,
-	ASSIST_BLESS_TYPE = 2,
-	MAGE_BLESS_TYPE = 3,
-	WARRIOR_BLESS_TYPE = 4,
-	TANK_BLESS_TYPE = 5,
-	RANGER_BLESS_TYPE = 6,
-}
-
-Platform = {
-	None = 0,
-	Googleplay = 1,
-	Appstore = 2,
-}
-
-OrderState = {
-	None = 0,
-	Purchased = 1,
-	Completed = 2,
-}
-
-ChatType = {
-	WorldChat = 1,
-	LocalChat = 2,
-	GuildChat = 3,
-	PrivateChat = 4,
-}
-
-ChannelStatus = {
-	Unimpeded = 0,
-	Jam = 1,
-	Full = 2,
-}
-
-HotType = {
-	HeroHot = 1,
-	TeamHot = 2,
-	EquipHot = 3,
-	furnitureHot = 4,
-}
-
-HotRankType = {
-	MainRank = 1,
-	TowerRank = 2,
-	GuangZhuRank = 3,
-	LieCiRank = 4,
-	CangCuiRank = 5,
-	QianHaiRank = 6,
-	YueShengRank = 7,
-	JiYuanRank = 8,
-	ValorArenaRank = 9,
-	HighendArenaRank = 10,
-	PinnacleArenaRank = 11,
-	RaceEquipRank = 12,
-	GodEquipRank = 13,
-	VoidEquipRank = 14,
-}
-
-TimeLimitedActivityType = {
-	SummonCountReward = 1,
-	PassCheck = 2,
-	DailyTask = 3,
-	AchievementTask = 4,
-	DirectGift = 5,
-	SpecialTraining = 6,
-	ExpGift = 7,
-}
-
-TimeLimitedClaimStatus = {
-	Unfinished = 0,
-	Unclaimed = 1,
-	Claimed = 2,
-}
-
-WishSummonActivityType = {
-	WishSummon = 1,
-	BossChallenge = 2,
-	HeroGift = 3,
-	WeekCard = 4,
-	LimitedGift = 5,
-}
-

+ 0 - 629
server/src/data/ClientScript/Protocol/generated/_errorCode.lua

@@ -1,629 +0,0 @@
-ConnectorResponse_501 Token错误
-ConnectorResponse_502 Token已过期
-ConnectorResponse_503 Token已过期
-ClientEnterGameResponse_501 无效的角色ID!
-ClientEnterGameResponse_502 角色逻辑不存在!
-ClientEnterGameResponse_503 角色已登录!
-ClientEnterGameResponse_504 角色已封停
-ClientEnterGameResponse_505 无效的区号!
-ClientEnterGameResponse_506 排队中
-ItemResponse_501 物品数量不足!
-ItemResponse_502 错误的物品操作!
-ItemResponse_503 错误的物品数量!
-ItemResponse_504 不满足使用条件!
-FightResponse_101 不能挑战该章节!
-FightResponse_102 章节配置异常
-FightResponse_103 战斗验证失败
-FightResponse_104 编队信息不存在
-FightResponse_105 战斗数据验证失败
-FightResponse_106 非主线不能战斗跳过
-FightResponse_107 VIP不能战斗跳过
-FightResponse_108 关卡不能战斗跳过
-FightResponse_109 战力值不能战斗跳过
-ClientArenaValorFightRandomSeedResponse_601 挑战券不足
-ClientArenaValorFightRandomSeedResponse_602 战斗返回数据异常
-ClientArenaValorFightRandomSeedResponse_603 更新玩家斗技场数据异常
-ClientArenaValorFightRandomSeedResponse_604 战斗阵容异常
-ClientArenaHighendFightRandomSeedResponse_1001 血战斗技场挑战券不足
-ClientArenaHighendFightRandomSeedResponse_1002 战斗返回数据异常
-ClientArenaHighendFightRandomSeedResponse_1003 更新玩家血战斗技场数据异常
-ClientArenaHighendFightRandomSeedResponse_1004 战斗阵容异常
-CarriageResponse_501 英雄不存在
-CarriageResponse_502 错误的英雄标识
-CarriageResponse_503 钻石不足
-CarriageResponse_504 虚空英雄无法重置
-CarriageResponse_505 参数异常
-CarriageResponse_506 英雄已锁定
-CarriageResponse_507 英雄升级配置异常
-CarriageResponse_508 英雄数量小于5,不能遣散
-CarriageResponse_509 英雄配置不存在
-CarriageResponse_510 英雄品质异常
-CarriageResponse_511 英雄遣散配置异常
-CarriageResponse_512 回退功能尚未解锁
-CarriageResponse_513 该英雄不可回退
-CarriageResponse_514 英雄回退配置异常
-CarriageResponse_515 最高品质英雄不能回退
-HeroResponse_501 未找到此英雄!
-HeroResponse_502 在共鸣水晶中不能升级!
-HeroResponse_503 虚空英雄不能升级!
-HeroResponse_504 英雄等级已经到达最大值!
-HeroResponse_505 全局配置异常!
-HeroResponse_506 资源不足!
-HeroResponse_507 达到背包购买上限!
-HeroResponse_508 升阶数据为空!
-HeroResponse_509 升阶英雄不存!
-HeroResponse_510 英雄配置异常
-HeroResponse_511 英雄升阶配置异常
-HeroResponse_512 英雄阶级已满
-HeroResponse_513 英雄升阶数量不对
-HeroResponse_514 英雄升阶不满足条件
-HeroResponse_515 水晶队伍等级上限
-HeroResponse_516 英雄品质最大等级上限
-HeroResponse_517 不是虚空英雄!
-HeroResponse_518 虚空英雄已连接!
-HeroResponse_519 英雄已被连接!
-HeroResponse_520 虚空英雄未连接!
-HeroResponse_521 虚空英雄重置异常!
-HeroResponse_522 虚空英雄未使用虚空秘钥!
-HeroResponse_523 虚空英雄未使用虚空秘钥!
-HeroResponse_524 物品数量不足
-HeroResponse_525 皮肤不存在
-HeroResponse_526 道具配置异常
-HeroResponse_527 该皮肤不能穿戴在此英雄上
-HeroResponse_528 试用英雄不可强化
-HeroResponse_529 水晶已经突破
-HeroResponse_530 已借出给好友英雄不能被用来升阶
-ClientQueryHeroInfoResponse_501 英雄不存在!
-ClientSetTalnentResponse_501 品质不满足
-ClientHandleGMResponse_501 参数数量错误
-ClientHandleGMResponse_502 参数错误
-ClientHandleGMResponse_503 处理失败
-ClientGetRelicItemResponse_501 没有可领取奖励
-ClientGetRoleListResponse_501 连接账号失败
-ClientGetRoleListResponse_502 获取服务器列表失败
-ClientCheckinClaimResponse_501 天数未开启
-ClientCheckinClaimResponse_502 天数已领取
-ClientStageRewardClaimResponse_501 奖励不存在
-ClientStageRewardClaimResponse_502 奖励已领取
-ClientStageRewardClaimResponse_503 活跃值未达到
-ClientGetLoginRewardInfoResponse_501 关卡未达到
-ClientLoginRewardClaimResponse_501 没有奖励可领取
-ClientLoginRewardClaimResponse_502 关卡未达到
-ClientTargetTaskClaimResponse_501 任务未开启
-ClientTargetTaskClaimResponse_502 任务不能领取
-ClientActivityTaskClaimResponse_501 任务不存在
-ClientActivityTaskClaimResponse_502 任务不能领
-ClientSummonTaskClaimResponse_501 任务不存在
-ClientSummonTaskClaimResponse_502 任务不能领
-ClientGetTaskRewardResponse_501 任务未找到
-ClientGetTaskRewardResponse_502 任务未完成
-ClientGetTaskRewardResponse_503 任务已领取
-ClientGetTaskRewardResponse_504 任务配置错误
-ClientGetTaskStageRewardResponse_501 任务未找到
-ClientGetTaskStageRewardResponse_502 进度未达成
-ClientGetTaskStageRewardResponse_503 进度奖励已领取
-ClientGetTaskStageRewardResponse_504 任务配置错误
-ClientGetStageChallengeRewardResponse_501 任务已领取
-ClientGetStageChallengeRewardResponse_502 任务配置错误
-ClientGetStageChallengeRewardResponse_503 关卡错误
-ClientChallengeTowerStartResponse_501 模块未开启
-ClientChallengeTowerStartResponse_502 副本未通关
-ClientChallengeTowerStartResponse_503 配置错误
-ClientChallengeTowerStartResponse_504 时间未到
-ClientChallengeTowerStartResponse_505 参数不合法
-ClientChallengeTowerStartResponse_506 战斗失败
-ClientChallengeTowerStartResponse_507 次数达到上限
-ClientSweepTowerResponse_501 层级未通关
-ClientSweepTowerResponse_502 次数用完
-ClientSweepTowerResponse_503 资源不足
-ClientSaveFormationResponse_501 编队名存在
-ClientUpFormationResponse_501 类型不存在
-ClientUpFormationResponse_502 索引不存在
-ClientDeleteFormationResponse_501 类型不存在
-ClientDeleteFormationResponse_502 索引不存在
-ClientExchangeFormationResponse_501 类型不存在
-ClientExchangeFormationResponse_502 现索引不存在
-ClientExchangeFormationResponse_503 交换索引不存在
-ClientSaveWholeFormationsResponse_501 类型不存在
-ClientSaveWholeFormationsResponse_502 编队名不存在
-ClientSaveWholeFormationsResponse_503 下标不合法
-ClientSaveWholeFormationsResponse_504 下标缺失
-ClientSaveWholeFormationsResponse_505 下标重复
-ClientByTypeSaveFormationResponse_501 队伍列表为空
-ClientCollectionFormationResponse_501 已经收藏
-ClientCollectionFormationResponse_502 编队已满
-ClientCollectionFormationResponse_503 未收藏
-ClientSaveMultiTypeFormationResponse_501 队伍列表为空
-ClientGetShopInfoResponse_501 商店类型错误
-ClientBuyShopItemResponse_501 购买次数已用完
-ClientBuyShopItemResponse_502 参数错误
-ClientBuyShopItemResponse_503 道具不足
-ClientBuyShopItemResponse_504 商品未解锁
-ClientRefreshShopResponse_501 参数错误
-ClientRefreshShopResponse_502 道具不足
-ClientRefreshShopResponse_503 今日刷新次数已达上限
-GuildResponse_501 玩家已经有公会了!
-GuildResponse_502 公会名称长度不合法!
-GuildResponse_503 内部错误!
-GuildResponse_504 公会图标错误!
-GuildResponse_505 钻石数量不足!
-GuildResponse_506 公会名称被占用!
-GuildResponse_507 公会不存在!
-GuildResponse_508 玩家等级过低!
-GuildResponse_509 公会申请列表已满!
-GuildResponse_510 已经申请加入该公会!
-GuildResponse_511 没有加入公会!
-GuildResponse_512 没有权限!
-GuildResponse_513 不是公会成员!
-GuildResponse_514 退出公会冷却时间中!
-GuildResponse_515 加入申请未找到!
-GuildResponse_516 公会人数已满!
-GuildResponse_517 目标玩家已经有公会了!
-GuildResponse_518 部分操作失败!
-GuildResponse_519 公会加入公告长度不合法!
-GuildResponse_520 公会会长不能随时退出公会!
-GuildResponse_521 错误的职位!
-GuildResponse_522 职位数量限制!
-GuildResponse_523 操作目标不能是自己!
-GuildResponse_524 地块未解锁!
-GuildResponse_525 地块被占用!
-GuildResponse_526 每周设置庇护者次数上限!
-GuildResponse_527 公会设置为不能加入!
-GuildResponse_528 全员邮件发送冷却时间!
-GuildResponse_529 每日迁移自己船只次数限制!
-GuildResponse_530 单个玩家每周只能设置成为庇护者一次!
-GuildResponse_531 活动暂未开启
-GuildResponse_532 活动数据为空
-ClientLllustratedBookReceiveRewardResponse_501 已领取过
-ClientLllustratedBookReceiveRewardResponse_502 该英雄没有奖励
-ClientLllustratedBookReceiveRewardResponse_503 该英雄还未拥有
-ClientLllustratedBookReceiveRewardResponse_504 该英雄未出现在配置表中
-ClientSetForeignAidHeroRsponse_501 当前已经已经设置为外援英雄
-ClientSetForeignAidHeroRsponse_502 英雄不存在或者是试用英雄
-ClientSetForeignAidHeroRsponse_503 请求参数不合法
-ClientRemoveForeignAidHeroRsponse_501 没到时间点,不能移除
-ClientRemoveForeignAidHeroRsponse_502 没有找到该英雄
-ClientRemoveForeignAidHeroRsponse_503 请求参数不合法
-ClientActiveHeroRsponse_501 不能激活该英雄,由于使用同一名好友或者工会成员的三名英雄了
-ClientActiveHeroRsponse_502 请求参数不合法
-EquipResponse_501 装备不存在
-EquipResponse_502 英雄不存在
-EquipResponse_503 装备无法强化
-EquipResponse_504 物品数量不足
-EquipResponse_505 装备无法升阶
-EquipResponse_506 装备无法重铸
-EquipResponse_507 无法装备
-ClientActiveExWeaponResponse_601 已激活专属武器
-ClientActiveExWeaponResponse_602 英雄品质未到
-ClientActiveExWeaponResponse_603 道具不足
-ClientActiveExWeaponResponse_604 试用英雄无法激活专属武器
-ClientExWeaponLevelUpResponse_601 专属武器未激活
-ClientExWeaponLevelUpResponse_602 道具不足
-ClientExWeaponLevelUpResponse_603 已升至最高等级
-ClientExWeaponLevelUpResponse_604 试用英雄无法升级专属武器
-CopyResponse_501 �޷���������
-ArtifactResponse_501 神器不存在
-ArtifactResponse_502 英雄不存在
-ArtifactResponse_503 神器槽位已满
-ArtifactResponse_504 神器已满级
-ArtifactResponse_505 物品不足
-ArtifactResponse_506 该职业的英雄无法使用该神器
-ArtifactResponse_507 无法装备
-ArtifactResponse_508 试用英雄无法升级神器
-PayResponse_501 商品ID错误
-PayResponse_502 商品不可购买
-PayResponse_503 Debug支付未开启
-PayResponse_504 支付服务异常
-PayResponse_505 添加订单失败
-PayResponse_506 订单号不正确
-PayResponse_507 订单未支付
-PayResponse_508 订单已发货
-PayResponse_509 创建订单失败
-PayResponse_510 创建订单参数错误
-PayResponse_511 更新订单失败
-PayResponse_512 玩家ID为空
-ClientSummonResponse_501 道具不足召唤失败
-ClientSummonResponse_502 英雄背包格子满了
-ClientSummonResponse_503 超出每日召唤次数限制
-ClientSummonResponse_504 不在活动时间
-ClientSaveWishListResponse_501 保存失败
-ClientSwitchRaceSummonResponse_501 切换失败
-ClientSelectTavernSkinResponse_501 选择失败
-ClientSaveDiamondWishListResponse_501 保存失败
-ClientSaveDiamondWishListResponse_502 心愿单英雄不足
-ClientSaveDiamondWishListResponse_503 心愿单英雄未解锁
-ClientSaveTavernExchangeHeroResponse_501 心愿值兑换功能未开启
-ClientSaveTavernExchangeHeroResponse_502 S英雄未解锁
-ClientSaveTavernExchangeHeroResponse_503 S+英雄未解锁
-ClientClaimTavernExchangeHeroResponse_501 心愿值兑换功能未开启
-ClientClaimTavernExchangeHeroResponse_502 心愿值不足不能领取
-ClientClaimTavernExchangeHeroResponse_503 已经领取
-ClientClaimTavernExchangeHeroResponse_504 英雄实例ID为空
-ClientDrawRaceOptionalCardResponse_501 种族ID不存在
-ClientDrawRaceOptionalCardResponse_502 VIP等级不够
-ClientDrawRaceOptionalCardResponse_503 消耗货币不足
-ClientBuyRaceExchangeShopResponse_501 编号ID不存在
-ClientBuyRaceExchangeShopResponse_502 消耗货币不足
-ClientBuyRaceExchangeShopResponse_503 兑换次数错误
-CrystalResponse_501 水晶已经升阶!
-CrystalResponse_502 超出水晶队伍上限!
-CrystalResponse_503 水晶队伍重复设置!
-CrystalResponse_504 英雄已经在水晶格子中!
-CrystalResponse_505 英雄不存在!
-CrystalResponse_506 该格子已经解锁!
-CrystalResponse_516 该格子尚未解锁!
-CrystalResponse_507 前面的格子尚未解锁!
-CrystalResponse_508 解锁配置异常!
-CrystalResponse_509 材料不足!
-CrystalResponse_510 已经突破!
-CrystalResponse_511 未突破!
-CrystalResponse_512 突破等级不够!
-CrystalResponse_513 突破等级不够!
-CrystalResponse_514 水晶升级史诗英雄数量不足!
-CrystalResponse_515 虚空英雄不能设置!
-CrystalResponse_517 该格子不能设置!
-CrystalResponse_518 该英雄在队伍中!
-CrystalResponse_519 该英雄在格子中!
-CrystalResponse_520 该格子没有cd时间!
-CrystalResponse_521 超出格子购买上限!
-CrystalResponse_522 试用英雄不能设置!
-CrystalResponse_523 改英雄的品质不能放入水晶格子中
-ClientSummonGuildHunterBossResponse_701 道具不足
-ClientSummonGuildHunterBossResponse_702 公会活跃度不足
-ClientSweepGuildHunterResponse_701 条件不足,无法扫荡
-ClientSweepGuildHunterResponse_702 boss不存在
-ClientSweepGuildHunterResponse_704 未满24小时,无法挑战
-ClientGuildHunterBattleResponse_701 次数不足
-ClientGuildHunterBattleResponse_702 boss不存在,无法挑战
-ClientGuildHunterBattleResponse_703 正在结算,无法挑战
-ClientGuildHunterBattleResponse_704 未满24小时,无法挑战
-ClientDrawGuildWarriorTreasureResponse_701 勇者财宝已过期
-ClientDrawGuildWarriorTreasureResponse_702 不能重复领取奖励
-ClientDrawGuildWarriorTreasureResponse_703 暂无勇者财宝可以领取
-ClientDrawGuildWarriorTreasureResponse_704 勇者财宝不存在
-ClientLookGuildWarriorTreasureInfoResponse_701 勇者财宝不存在
-ClientOperateMailResponse_501 邮件uuid不存在
-ClientOperateMailResponse_502 邮件无奖励领取
-ClientOperateMailResponse_503 邮件奖励已领取
-ClientOperateMailResponse_504 邮件不能删除
-ClientOperateMailResponse_505 邮件已过期
-ClientOperateMailResponse_506 背包已满
-ClientGetBountyOptResponse_501 操作类型错误
-ClientGetBountyOptResponse_502 找不到任务
-ClientGetBountyOptResponse_503 任务操作类型错误
-ClientGetBountyOptResponse_504 资源不足
-ClientGetBountyOptResponse_505 没有任务可刷新
-ClientGetBountyOptResponse_506 英雄已经外派
-ClientGetBountyOptResponse_507 外派英雄移除时间未到
-ClientGetBountyOptResponse_508 英雄没有外派
-ClientGetBountyOptResponse_509 英雄外派数量上限
-ClientGetBountyOptResponse_510 任务未完成
-ClientLifeTreeUpgradeResponse_501 升级的道具不够
-ClientLifeTreeUpgradeResponse_502 当前已经是最高级
-ClientLifeTreeUpgradeResponse_503 当前类型还未解锁由于战斗等级不够
-ClientLifeTreeUpgradeResponse_504 当前类型还未解锁由于圣石等级不够
-ClientLifeTreeResetResponse_501 当前类型不能重置
-ClientLifeTreeResetResponse_502 当前类型等级为0级,不能重置
-ClientLifeTreeResetResponse_503 钻石不够不能重置
-ClientSetValleyRuinsRewardResponse_504 当前奖励已经使用完
-ClientSetValleyRuinsRewardResponse_505 当前奖励不存在
-ClientSetValleyRuinsRewardResponse_506 当前奖励未解锁
-ClientSetValleyRuinsRewardResponse_507 当前层大奖已经领取了
-ClientValleyRuinsEnterFloorResponse_504 所有关卡已经通过
-ClientValleyRuinsEnterFloorResponse_505 未抽取到最大奖
-ClientValleyRuinsEnterFloorResponse_506 当前关卡未开始
-ClientFireValleyRuinsRewardResponse_504 该位置奖励已经领取过
-ClientFireValleyRuinsRewardResponse_505 该位置奖励不存在
-ClientFireValleyRuinsRewardResponse_506 该层未设置大奖
-ClientFireValleyRuinsRewardResponse_507 道具不够
-ClientFireValleyRuinsRewardResponse_508 当前层未激活
-ClientValleyRuinsFloorActiveResponse_504 当前层未设置大奖
-AtlantisActvityCommonErrorCode_501 活动已经结束
-AtlantisActvityCommonErrorCode_502 活动不存在
-AtlantisActvityCommonErrorCode_503 活动未开启
-ClientMagicTopHatFireRewardResponse_504 道具不足
-ClientMagicTopHatFireRewardResponse_505 当前时间段查询不到有效的活动组ID
-ClientMagicTopHatFireRewardResponse_506 传递的参数不合法
-ClientMagicTopHatFireRewardHistoryResponse_504 当前时间段查询不到有效的活动组ID
-ClientMagicTopHatRewardProbabilityResponse_504 当前时间段查询不到有效的活动组ID
-ClientExchangeActivityInfoResponse_504 当前时间段查询不到有效的活动组ID
-ClientExchangeActivityExchangeResponse_504 当前时间段查询不到有效的活动组ID
-ClientExchangeActivityExchangeResponse_505 道具不够
-ClientExchangeActivityExchangeResponse_506 没有可用的次数
-ClientExchangeActivityExchangeResponse_507 没有可用的次数
-ClientExchangeActivityExchangeResponse_508 兑换次数过多,超过了最大次数,请减少次数
-ClientExchangeActivityExchangeResponse_509 兑换次数不能小于等于0
-ClientActiveNewHeroTrialResponse_601 本轮活动已经激活试用英雄
-ClientBossChallengeActivityInfoResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityRecevieRewardResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityRecevieRewardResponse_505 当前位置的奖励已经领取
-ClientBossChallengeActivityRecevieRewardResponse_506 未达到当前位置的领取条件
-ClientBossChallengeActivityRecevieRewardResponse_507 当前位置不存在奖励
-ClientBossChallengeActivityRecevieRewardResponse_508 当前活动未初始化,请先调用查询接口
-ClientBossChallengeActivityPurchaseChallengesResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityPurchaseChallengesResponse_505 今日购买次数已经用完
-ClientBossChallengeActivityPurchaseChallengesResponse_506 不能购买,由于免费次数没有用完
-ClientBossChallengeActivityPurchaseChallengesResponse_507 当前活动未初始化,请先调用查询接口
-ClientBossChallengeActivityPurchaseChallengesResponse_508 道具不够
-ClientBossChallengeActivityBattleRecordResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityRankResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityStartResponse_504 当前时间段查询不到有效的活动组ID
-ClientBossChallengeActivityStartResponse_505 当前活动未初始化,请先调用查询接口
-ClientBossChallengeActivityStartResponse_506 当前没有可用次数
-ClientBuyGuildSecretCaveCountResponse_701 道具不足
-ClientBuyGuildSecretCaveCountResponse_702 购买次数已达上限
-ClientRefreshGuildSecretCaveRankResponse_701 请不要频繁刷新
-ClientGetGuildSecretCaveDreamStepRewardResponse_501 已领取改奖励
-ClientEnterMazeResponse_501 选择迷宫类型
-ClientEnterMazeResponse_502 无法进入迷宫类型
-ClientMazeGridOptResponse_501 格子不相邻
-ClientMazeGridOptResponse_502 格子已激活
-ClientMazeGridOptResponse_503 当前格子事件待处理
-ClientMazeGridOptResponse_504 格子错误
-ClientMazeGridOptResponse_505 格子处理错误
-ClientMazeGridOptResponse_506 当前格子事件已处理
-ClientMazeGridOptResponse_507 操作不合法
-ClientMazeGridOptResponse_530 战斗验证失败遗物待领取
-ClientMazeHelpOptResponse_501 道具达到上限
-FriendResponse_501 uuid不存在
-FriendResponse_502 申请上限
-FriendResponse_503 已申请过
-FriendResponse_504 已在黑名单
-FriendResponse_505 已是好友
-FriendResponse_506 自己好友上限
-FriendResponse_507 好友不存在
-FriendResponse_508 黑名单不存在
-FriendResponse_509 英雄uuid不存在
-FriendResponse_510 已租借英雄上限
-FriendResponse_511 出借英雄上限
-FriendResponse_512 已出借英雄
-FriendResponse_513 申请列表为空
-FriendResponse_514 申请不存在
-FriendResponse_515 租借不存在
-FriendResponse_516 好友列表为空
-FriendResponse_517 友情点已赠送
-FriendResponse_518 友情点已领取
-FriendResponse_519 已租借该英雄
-FriendResponse_520 租借已归还
-FriendResponse_521 黑名单上限
-FriendResponse_522 对方好友上限
-FriendResponse_523 已在对方黑名单
-FriendResponse_524 友情点赠送上限
-FriendResponse_525 友情点领取上限
-TimeRewardResponse_501 次数超上限!
-TimeRewardResponse_502 资源不足!
-TimeRewardResponse_503 挂机奖励配置异常!
-TimeRewardResponse_504 挂机奖励时间未到!
-TimeRewardResponse_505 支付类型错误!
-TimeRewardResponse_506 广告次数达到上限!
-ClientGetWorldMapOtherRolesResponse_501 未找到好友服务
-ClientGetWorldMapOtherRolesResponse_502 获取好友详情失败
-ClientGetWorldMapOtherRolesResponse_503 关卡配置未找到
-ClientGetWorldMapOtherRolesResponse_504 世界地图配置未找到
-ClientGetStageHistoryResponse_501 参数错误
-ClientGetStageHistoryResponse_502 未找到公共服务
-ClientGetStageHistoryResponse_503 未找到好友服务
-ClientGetBattleOtherRolesResponse_501 未找到好友服务
-ClientGetBattleOtherRolesResponse_502 获取好友详情失败
-ClientGetBattleOtherRolesResponse_503 关卡配置未找到
-ClientGetBattleOtherRolesResponse_504 世界地图配置未找到
-ClientChatAddMessageResponse_501 聊天频道已存在
-ClientChatUpMessageResponse_501 聊天频道不存在
-ClientChatDeleteMessageResponse_501 聊天频道不存在
-ClientChatDeleteMessageResponse_502 不是私聊频道
-ClientChatUpdateMessageResponse_501 聊天频道不存在
-ClientChatWorldChannelChangeResponse_501 频道ID为空
-ClientChatWorldChannelChangeResponse_502 频道NAME为空
-ClientChatWorldChannelChangeResponse_503 频道没有改变
-ArenaResponse_501 无法找到竞技场管理服务
-ArenaResponse_502 无法找到对应赛区竞技场服务
-ArenaResponse_503 获取斗技场数据失败
-ArenaResponse_504 获取斗技场玩家数据失败
-ArenaResponse_505 获取血战斗技场数据失败
-ArenaResponse_506 获取血战斗技场玩家数据失败
-ArenaResponse_507 获取巅峰斗技场数据失败
-ArenaResponse_508 获取巅峰斗技场玩家数据失败
-ArenaResponse_509 竞技场未解锁
-ArenaResponse_510 斗技场未解锁
-ArenaResponse_511 血战斗技场未解锁
-ArenaResponse_512 血战斗技场段位配置缺失
-ArenaResponse_513 巅峰斗技场未解锁
-ArenaResponse_514 巅峰斗技场赛区id不存在
-ArenaResponse_515 尚未进入过斗技场
-ArenaResponse_516 斗技场防守阵容尚未初始化
-ClientGetArenaValorOpponentResponse_601 消耗品不足
-ClientReceiveArenaValorRankActivityDailyRewardResponse_601 已经领取过每日奖励
-ClientReceiveArenaValorRankActivityDailyRewardResponse_602 昨日没有排名
-ClientReceiveArenaValorRankActivityDailyRewardResponse_603 此排名没有奖励
-ClientReceiveArenaValorRankActivityDailyRewardResponse_604 斗技场排名活动已经结束
-ClientGetArenaValorRankActivityDailyRewardDataResponse_604 斗技场排名活动已经结束
-ClientReceiveArenaValorTierSegmentRewardResponse_601 已经领取过了
-ClientReceiveArenaValorTierSegmentRewardResponse_602 不符合领取条件
-ClientReceiveArenaValorBoxRewardResponse_601 已经领取过了
-ClientReceiveArenaValorBoxRewardResponse_602 未达到胜利次数
-ClientGetArenaPinnacleGroupCompetitionDataResponse_601 巅峰斗技场不在小组赛期间
-ClientGetArenaPinnacleGroupGroupDataResponse_601 巅峰斗技场不在小组赛期间
-ClientGetArenaPinnacleGroupGroupDataResponse_602 小组id不合法
-ClientGetArenaPinnacleRoundCompetitionDataResponse_601 巅峰斗技场不在晋级赛期间
-ClientGetArenaPinnacleRoundCompetitionDataResponse_602 小组id不合法
-ClientGetArenaPinnacleRoundGroupDataResponse_601 巅峰斗技场不在晋级赛期间
-ClientGetArenaPinnacleRoundGroupDataResponse_602 小组id不合法
-ClientGetArenaPinnacleFinalCompetitionDataResponse_601 巅峰斗技场不在冠军赛期间
-ClientGetArenaPinnacleFinalCompetitionDataResponse_602 冠军赛小组异常
-ClientGetArenaPinnacleFinalCompetitionDataResponse_603 冠军赛小组人数异常
-ClientGetArenaPinnacleQuizHandicapDataResponse_601 巅峰斗技场不在比赛期间,没有竞猜盘口
-ClientGetArenaPinnacleQuizHandicapDataResponse_602 下注金币金额获取失败
-ClientArenaPinnacleBetResponse_601 巅峰斗技场不在比赛期间,没有竞猜盘口
-ClientArenaPinnacleBetResponse_602 下注对象UUID不合法
-ClientArenaPinnacleBetResponse_603 竞猜盘口数据尚未计算
-ClientArenaPinnacleBetResponse_604 比赛结果已经公布,不能参与竞猜
-ClientArenaPinnacleBetResponse_605 金币不足
-ClientEarnArenaPinnacleGloryRoadIconBoxResponse_601 不满足此荣耀之路领取资格
-ClientEarnArenaPinnacleGloryRoadIconBoxResponse_602 id不合法
-ClientEarnArenaPinnacleGloryRoadIconBoxResponse_603 已经领取过了
-ClientGetArenaPinnacleFightRecordResponse_601 小组不合法
-ClientGetArenaPinnacleFightRecordResponse_602 玩家不存在于上传赛区小组内
-ClientGetArenaPinnacleFightRecordResponse_603 当前阶段尚未有对战记录
-ClientGetArenaPinnacleFightRecordResponse_604 当前阶段战斗还未开始
-ClientReceiveArenaPinnacleRankRewardResponse_601 已经领取过了
-ClientReceiveArenaPinnacleRankRewardResponse_602 当前不可领取奖励
-ClientReceiveArenaPinnacleRankRewardResponse_603 未达到领取奖励资格
-ClientArenaBuyTicketResponse_601 消耗品不足
-ClientArenaBuyTicketResponse_602 每日购买次数已达上限
-ClientArenaBuyTicketResponse_603 要购买的物品捆id不合法
-ClientGetArenaTicketDailyPurchasedCountsResponse_501 捆配置表中没有此捆id
-ClientGetArenaTicketDailyPurchasedCountsResponse_502 没有每日购买次数上限,无法查询
-ClientGetRechargeOrderResponse_501 无效的平台
-ClientGetRechargeOrderResponse_502 无效的商品
-ClientGetRechargeOrderResponse_503 创建订单失败
-ClientGetRechargeOrderResponse_504 无法购买该物品
-ClientGetRechargeOrderResponse_505 不满足活动开启条件
-ClientGetRechargeOrderResponse_506 不满足购买条件
-ClientGetRechargeOrderResponse_507 价格配置异常
-ClientGetRechargeOrderResponse_508 支付服务器异常
-ClientGetRechargeOrderResponse_509 Debug支付未开启
-ClientGetRechargeOrderResponse_510 无效的商品
-ClientGetRechargeOrderResponse_511 使用代金券支付成功
-ClientGetMarketRewardResponse_501 无效的商品
-ClientGetMarketRewardResponse_502 不满足活动开启条件
-ClientGetMarketRewardResponse_503 不满足领取条件
-ClientGetMarketRewardResponse_504 不可领取
-ClientRefreshMarketRewardResponse_501 无效的商品
-ClientRefreshMarketRewardResponse_502 不满足活动开启条件
-ClientRefreshMarketRewardResponse_503 刷新已达上限
-ClientOrderMarketPushResponse_501 礼包不存在
-ClientOrderMarketPushResponse_502 条件不满足
-ClientOrderMarketPushResponse_503 价格配置错误
-ClientOrderMarketPushResponse_504 支付服务器异常
-ClientGetMarketProgressRewardResponse_501 已经领取
-ClientGetMarketProgressRewardResponse_502 分数不足
-ClientGetMarketProgressRewardResponse_503 高级奖励未开启
-ClientBuyMarketProgressRewardScoreResponse_501 高级犒赏未开启
-ClientBuyMarketProgressRewardScoreResponse_502 开启时间不合法
-ClientBuyMarketProgressRewardScoreResponse_503 购买数量不合法
-ClientMarketProgressRewardSetPlanIDResponse_501 已经领取奖励
-ClientMarketProgressRewardSetPlanIDResponse_502 配置错误
-ClientMarketProgressRewardSetPlanIDResponse_503 礼包未购买
-ClientMarketProgressRewardSetPlanIDResponse_504 主题已被设置
-ClientMarketProgressRewardSetPlanIDResponse_505 主题条件不合法
-ClientMarketGetMonthCardRewardResponse_501 已经领取奖励
-ClientMarketGetMonthCardRewardResponse_502 配置错误
-ClientMarketChangeOptionalBagInfoResponse_501 改变失败
-ClientMarketLockOptionalHeroInfoResponse_501 锁定失败
-ClientMarketClaimPrivilegeRewardResponse_501 无法领取
-ClientMarketClaimPrivilegeRewardResponse_502 已经领取
-ClientMarketGetSummonRewardResponse_501 无法领取
-ClientMarketGetSummonRewardResponse_502 已经领取
-ClientFosterAcumulateInfoResponse_501 已经领取奖励
-ClientFosterAcumulateInfoResponse_502 不在活动时间内
-ClientFosterAcumulateInfoResponse_503 不满足条件
-ClientFosterAcumulateInfoResponse_504 配置异常
-ClientFosterAcumulateInfoResponse_505 关卡不满足
-ClientFosterAcumulateInfoResponse_506 数据异常
-ClientFosterGetRewardResponse_501 已经领取奖励
-ClientFosterGetRewardResponse_502 不在活动时间内
-ClientFosterGetRewardResponse_503 不满足条件
-ClientFosterGetRewardResponse_504 配置异常
-ClientFosterGetRewardResponse_505 关卡不满足
-ClientUpdateCurrencyCodeResponse_501 更新失败
-ClientGetAdsRewardResponse_501 观看广告达到上限
-ClientGetAdsRewardResponse_502 观看未开启
-ClientGetMiniGameRewardResponse_501 Index不合法
-ClientGetMiniGameRewardResponse_502 没有阶段奖励
-ClientGetMiniGameRewardResponse_503 没有通关
-ClientGetMiniGameRewardResponse_504 已经领取过了
-ClientGetMiniGameEndResponse_501 sceneid或stageid不合法
-ClientGetMiniGameEndResponse_502 开启条件不满足
-ClientGetMiniGameEndResponse_503 已经通关过了
-ClientGetMiniGameEndResponse_504 上一关还没通关
-ClientGetPassCheckRewardResponse_501 已经领取
-ClientGetPassCheckRewardResponse_502 分数不足
-ClientGetPassCheckRewardResponse_503 高级奖励未开启
-ClientGetTimeLimitedTaskRewardResponse_501 任务未找到
-ClientGetTimeLimitedTaskRewardResponse_502 任务未完成
-ClientGetTimeLimitedTaskRewardResponse_503 任务已领取
-ClientGetTimeLimitedTaskRewardResponse_504 任务配置错误
-ClientClaimSummonCountRewardResponse_501 召唤任务id不存在
-ClientClaimSummonCountRewardResponse_502 召唤任务不能领取
-ClientExchangeDirectGiftResponse_501 编号ID不存在
-ClientExchangeDirectGiftResponse_502 兑换次数上限
-ClientExchangeDirectGiftResponse_503 消耗道具不足
-ClientClaimSpecialTrainingResponse_501 关卡ID不存在
-ClientClaimSpecialTrainingResponse_502 关卡不能领取
-ClientGetHonourRankRewardResponse_501 已领取
-ClientGetHonourRankRewardResponse_502 暂无玩家达成奖励进度
-ClientGetAchieveFivePlayerResponse_501 暂无玩家达成奖励进度
-ClientGetRoleInfoResponse_501 δ��ѯ�������
-ClientAttentionSomeoneResponse_501 δ��ע
-ClientAttentionSomeoneResponse_502 �ѹ�ע
-ClientReportSomeoneResponse_501 �����Ѿ�����ÿ�վٱ�����
-ClientGetMultiRoleInfoResponse_501 δ��ѯ�������
-ClientGetCDKResponse_501 �����ڸ�CDK��
-ClientGetCDKResponse_502 ����CDK��ڼ䣡
-ClientGetCDKResponse_503 ���������CDK��
-ClientGetCDKResponse_505 ���������㣡
-ClientGetCDKResponse_506 �˺����ƣ�
-ClientGetCDKResponse_507 ��ɫ���ƣ�
-ClientGetCDKResponse_508 ���������꣡
-ClientChangeRoleNameResponse_501 ��ʯ����
-ClientChangeRoleNameResponse_502 ����û�����仯
-ClientChangeGenderResponse_501 �Ա𲻺Ϸ�
-ClientChangeShowPicturesAndHeroTeamResponse_501 �ϴ���Ӣ��չʾ�б��Ȳ��Ϸ�
-ClientChangeHeadIconResponse_501 ͷ��ID������
-ClientChangeHeadIconBoxResponse_501 ͷ���ID������
-ClientChangeChatBoxResponse_501 �����ID������
-ClientRecordLocalLanguageResponse_501 ����ID���Ϸ�
-ClientGetLoginSignRewardResponse_501 ����ȡ
-ClientGetLoginSignRewardResponse_502 δ�ﵽ��ȡ����
-ClientNewerGuideSetProgressResponse_501 �����ڴ�����ID
-ClientNewerGuideSetProgressResponse_502 ��������������
-ClientNewerGuideSetProgressResponse_503 �����������Ϸ�
-ClientSelectPresetHeroResponse_501 �����ڴ�Ӣ��ѡ��ID
-ClientSelectPresetHeroResponse_502 �����ڴ�Ӣ��ѡ��StageID
-ClientSelectPresetHeroResponse_503 ��Ϸģʽ����
-ClientSelectPresetHeroResponse_504 �Ѿ�ѡ�����
-ClientSelectPresetHeroResponse_505 ��Ӣ��ѡ��ID���Ϸ�
-ClientSelectPresetHeroResponse_506 �ؿ���������
-ClientTrialVoidGuestResponse_501 已经拥有此虚空英雄
-ClientTrialVoidGuestResponse_502 已经在试用中
-ClientTrialVoidGuestResponse_503 试用时间已过时
-ClientExchangeVoidGuestResponse_501 已经拥有此虚空英雄
-ClientExchangeVoidGuestResponse_502 货币不足
-ClientExchangeVoidGuestResponse_503 低于货币兑换下限
-ClientExchangeVoidGuestResponse_504 超过货币兑换上限
-ClientExchangeVoidGuestResponse_505 兑换总和不合法
-ClientGetHeroWayTaskRewardResponse_501 任务未找到
-ClientGetHeroWayTaskRewardResponse_502 任务未完成
-ClientGetHeroWayTaskRewardResponse_503 任务已领取
-ClientGetHeroWayTaskRewardResponse_504 任务配置错误
-ClientGetHeroWayStageRewardResponse_501 任务未找到
-ClientGetHeroWayStageRewardResponse_502 任务未完成
-ClientGetHeroWayStageRewardResponse_503 任务已领取
-ClientGetHeroWayStageRewardResponse_504 任务配置错误
-ClientGetHeroWayStageRewardResponse_505 进阶奖励未付费
-StageRabkResponse_501 排行榜服务器异常!
-FeedBackResponse_501 配置异常!
-FeedBackResponse_502 活动时间已结束!
-FeedBackResponse_503 题目未答完!
-FeedBackResponse_504 题目有空数据!
-FeedBackResponse_505 问卷未答题
-FeedBackResponse_506 问卷已领奖
-FeedBackResponse_507 操作失败
-WishSummonActivityResponse_501 不在活动期间
-ClientWishSummonSummonSaveHeroResponse_601 上传的英雄Id不合法
-ClientWishSummonSummonResponse_601 道具不足召唤失败
-ClientWishSummonSummonResponse_602 英雄背包格子满了
-ClientWishSummonSummonResponse_603 超出每日召唤次数限制
-ClientWishSummonHeroGiftBaseInfoResponse_601 上传的英雄Id不合法
-ClientWishSummonLockHeroResponse_601 已锁定其他英雄
-ClientWishSummonLockHeroResponse_602 上传的英雄Id不合法
-ClientNewGuildBossSweepResponse_501 挑战等级参数不合法
-ClientNewGuildBossSweepResponse_502 道具不足
-ClientNewGuildBossSweepResponse_503 参数不在配置表中
-ClientNewGuildBossSweepResponse_504 VIP等级不满足
-ClientNewGuildBossSweepResponse_505 该功能未开启,不能扫荡
-ClientNewGuildBossReceiveRewardBoxResponse_505 未达到关卡要求
-ClientNewGuildBossReceiveRewardBoxResponse_506 奖励已经领取
-ClientGetBattleHistoryRecordsResponse_501 参数错误
-ClientGetBattleHistoryRecordsResponse_502 未找到中心服务
-ClientGetBattleHistoryRecordsResponse_503 未找到好友服务

+ 28 - 28
server/src/data/ServerData/templates_lua/Market.xlsx/push_gift_depot_limit.lua

@@ -26,33 +26,33 @@ return {
 [21] = {122,0,0,-1,-1,-1,},
 [22] = {123,0,0,-1,-1,-1,},
 [23] = {124,0,0,-1,-1,-1,},
-[24] = {201,1,1,1,20,2,},
-[25] = {202,1,1,1,20,2,},
-[26] = {203,1,1,1,20,2,},
-[27] = {204,1,1,1,20,2,},
-[28] = {205,1,1,1,20,2,},
-[29] = {206,1,1,1,20,2,},
-[30] = {207,1,1,1,20,2,},
-[31] = {208,1,1,1,20,2,},
-[32] = {209,1,1,1,20,2,},
-[33] = {210,1,1,1,20,2,},
-[34] = {211,1,1,1,20,2,},
-[35] = {212,1,1,1,20,2,},
-[36] = {213,1,1,1,20,2,},
-[37] = {214,1,1,1,20,2,},
-[38] = {215,1,1,1,20,2,},
-[39] = {216,1,1,1,20,2,},
-[40] = {217,1,1,1,20,2,},
-[41] = {218,1,1,1,20,2,},
-[42] = {219,1,1,1,20,2,},
-[43] = {220,1,1,1,20,2,},
-[44] = {221,1,1,1,20,2,},
-[45] = {222,1,1,1,20,2,},
-[46] = {223,1,1,1,20,2,},
-[47] = {224,1,1,1,20,2,},
-[48] = {225,1,1,1,20,2,},
-[49] = {226,1,1,1,20,2,},
-[50] = {227,1,1,1,20,2,},
-[51] = {228,1,1,1,20,2,},
+[24] = {201,1,1,1,3,1,},
+[25] = {202,1,1,1,3,1,},
+[26] = {203,1,1,1,3,1,},
+[27] = {204,1,1,1,3,1,},
+[28] = {205,1,1,1,3,1,},
+[29] = {206,1,1,1,3,1,},
+[30] = {207,1,1,1,3,1,},
+[31] = {208,1,1,1,3,1,},
+[32] = {209,1,1,1,3,1,},
+[33] = {210,1,1,1,3,1,},
+[34] = {211,1,1,1,3,1,},
+[35] = {212,1,1,1,3,1,},
+[36] = {213,1,1,1,3,1,},
+[37] = {214,1,1,1,3,1,},
+[38] = {215,1,1,1,3,1,},
+[39] = {216,1,1,1,3,1,},
+[40] = {217,1,1,1,3,1,},
+[41] = {218,1,1,1,3,1,},
+[42] = {219,1,1,1,3,1,},
+[43] = {220,1,1,1,3,1,},
+[44] = {221,1,1,1,3,1,},
+[45] = {222,1,1,1,3,1,},
+[46] = {223,1,1,1,3,1,},
+[47] = {224,1,1,1,3,1,},
+[48] = {225,1,1,1,3,1,},
+[49] = {226,1,1,1,3,1,},
+[50] = {227,1,1,1,3,1,},
+[51] = {228,1,1,1,3,1,},
 
 }

+ 2 - 567
server/src/data/ServerData/templates_lua/_luaversion_.lua

@@ -1,344 +1,9 @@
 return {
-["version"] = "0016b3abbf04ed9de4091db250a10661",
-["/actionidlereward.xlsx/actionidlereward.lua"] = "606de01da68f2503f54b3b3683ff7480",
-["/actitonidlereward.xlsx/actitonidlereward.lua"] = "3a02dcbcce29f237b6c61043bff565d1",
-["/activity_new - 副本.xlsx/activity_task.lua"] = "e7af163d7fd680e11b8af339ea2f8b2b",
-["/activity_new - 副本.xlsx/activity_type.lua"] = "59307415ab5833eb57eb17cc1dca5cc6",
-["/activity_new - 副本.xlsx/checkin.lua"] = "7d57acb6216039444b058c6712d357d8",
-["/activity_new - 副本.xlsx/stage_reward.lua"] = "dc9213e53aafd4c1a458a27b72d603d8",
-["/activity_new - 副本.xlsx/target_task.lua"] = "c8a205bc07d735dd63105ebccfc0b953",
-["/activity_new.xlsx/7Daysstage_reward.lua"] = "99b35ced0a2f24483da97e1563d76f10",
-["/activity_new.xlsx/7DaysTask.lua"] = "d6c775d7f70d8febef6e363357b8aeec",
-["/activity_new.xlsx/activity_task.lua"] = "e7af163d7fd680e11b8af339ea2f8b2b",
-["/activity_new.xlsx/activity_time.lua"] = "ef827552c33d6ba78d6bc5e75824793f",
-["/activity_new.xlsx/activity_type.lua"] = "59307415ab5833eb57eb17cc1dca5cc6",
-["/activity_new.xlsx/checkin.lua"] = "7d57acb6216039444b058c6712d357d8",
-["/activity_new.xlsx/login_reward.lua"] = "9d080bb1548eaa9e6a5b56bf07a807d7",
-["/activity_new.xlsx/stage_reward.lua"] = "57e11c1c24e11d2b9f3f99a2bedf1317",
-["/activity_new.xlsx/summon_task.lua"] = "4f95e144d6c4beae6f1e1fe7eb93f0b6",
-["/activity_new.xlsx/target_task.lua"] = "96a8e37ca4b7762981adc6b28fcce8b1",
-["/activity_time.xlsx/activity_time_control.lua"] = "07830bd56cf93579d5e5fe24e1b1f07f",
-["/activity_time.xlsx/activity_time.lua"] = "851b84512d4d14628b83c9d4678f36c6",
-["/activity_time.xlsx/ItemRecycle.lua"] = "1a585db9b47b6d4b1fa1a2b3768dcb50",
-["/ActivityBoss.xlsx/ActivityBossChallenge.lua"] = "20e400f8f53d9f60a387c8251cf94587",
-["/ActivityBoss.xlsx/BossActivitySkill.lua"] = "6e60a1a8e95945b9634e988771efaf7e",
-["/ActivityBoss.xlsx/BossAttr.lua"] = "8b9ff7a2762dd94dffbb1be408a882d1",
-["/ActivityBoss.xlsx/BossChallengeConfig.lua"] = "601294af1d53e23c75c138175157afe3",
-["/ActivityBoss.xlsx/BossGuildRankList.lua"] = "e22da796ca56feb4c5b9ddac5087f9f4",
-["/ActivityBoss.xlsx/BossRankList.lua"] = "ecfadc7af7b49cef21c84930df5aab2d",
-["/ActivityDailyDrop.xlsx/ActivityDailyDrop.lua"] = "a62a2625b2a93620ab0fb72d9007dada",
-["/activityDraw.xlsx/activitiesExchange.lua"] = "0b95e159aaad60684ca41090b09cd4d0",
-["/activityDraw.xlsx/activityDraw.lua"] = "dd24d4ef75544432b0b0b9acefa58329",
-["/activityDraw.xlsx/activityGroup.lua"] = "8c0849047c7f4fe4426f9de2a2a3b4c6",
-["/ActivityIconFly.xlsx/ActivityIconFly.lua"] = "b0aced2d814dc0f16786467a59fe2288",
-["/ActivityOpenCondition.xlsx/ActivityOpenCondition.lua"] = "2849a8e996584d5f60f38d2a5fd33c80",
-["/Ad.xlsx/AdsManager.lua"] = "b5648e572c0f8f3b4083ae70d8fe60c8",
-["/Arena.xlsx/arenaglobalconfig.lua"] = "fb9311773cf46aea2a3f979414e067d0",
-["/Arena.xlsx/J竞技场#Arena配置规范.lua"] = "c93263b9738c6842ecd467e5a013459c",
-["/arenarankconfig.xlsx/ArenaActivityReward.lua"] = "995ef8786890d3c98232d51e7af7c188",
-["/arenarankconfig.xlsx/ArenaIntegralSubsection.lua"] = "00eeb22d5f63978363a182358da009a8",
-["/arenarankconfig.xlsx/ArenaRankReward.lua"] = "9a961e94a6a18d94aac9136d4f4b98c1",
-["/arenarankconfig.xlsx/ArenaSegmentReward.lua"] = "fadb9231131d88515ab79c6a22641dde",
-["/arenarankconfig.xlsx/Arenasort.lua"] = "9530b8354ecdb5627dbd7ab900b26a5d",
-["/arenarankconfig.xlsx/Arenatreasurechest.lua"] = "5aada08f02a3a1012c4155ea860f6845",
-["/arenarankconfig.xlsx/Rankadjustment.lua"] = "22085eb8413976e5b8e2853fe5132aed",
-["/arenarankconfig.xlsx/Robotpositionweigh.lua"] = "02cf4102e49186c849ed6674bfebffba",
-["/arenarankconfig.xlsx/section.lua"] = "a816a6946957ddb1a4c74a434e1fbc16",
-["/arenarankconfig.xlsx/TicketPrice.lua"] = "eaadb2d1eb8f1ed149321e2af80e6ece",
-["/arenarankconfig.xlsx/winbattle.lua"] = "887c382bfa62bad565a61ff622ab3fee",
-["/ArenaRobot.xlsx/arenarobotartifact.lua"] = "e2c5a9f785b5409031ad8aa3b127e639",
-["/ArenaRobot.xlsx/arenarobotequip.lua"] = "7d6ef7c4250b14cb0156b34871f3e501",
-["/ArenaRobot.xlsx/arenarobothero.lua"] = "92524fddd2f61f1a191db33a4d615b6a",
-["/ArenaRobot.xlsx/arenavalorrobot.lua"] = "dbf004030f678e9053904975dc39403a",
-["/ArenaRobot.xlsx/J竞技场机器人#ArenaRobot配置规范.lua"] = "be2a5e7c475bdc184bac8340f2b46a73",
-["/ArenaRobot.xlsx/Sheet1.lua"] = "da3049d72613fa355c452c0aca9a2651",
-["/artifact.xlsx/artifact_enhance.lua"] = "905ca97bfcb7e22dc5896a6594f112db",
-["/artifact.xlsx/artifact_property.lua"] = "ed8c1dd8e05a004ffe9f3a186ad25478",
-["/artifact.xlsx/artifact.lua"] = "676131f6faaac4edf3d43890b613c697",
-["/battleartifactskill.xlsx/battleartifactskill.lua"] = "d595196eca660432e489c3db0c4a8320",
-["/battleAttrs.xlsx/battleAttrs.lua"] = "5f9148eff8653033442493b319bc9a35",
-["/battleBuff.xlsx/battleBuff.lua"] = "de4efcc1b47626b7b32e9236a74466ea",
-["/battlebullet.xlsx/battlebullet.lua"] = "b5d6c6b6107527ba7bf5014c8309b641",
-["/battleBulletframe.xlsx/battleBulletframe.lua"] = "e5e24daaef12008b007b1faba318d00c",
-["/battledifficulty.xlsx/battledifficulty.lua"] = "f1f88eb064e3ab17639897da2a962cc2",
-["/battleDmgLvPer.xlsx/battleDmgLvPer.lua"] = "a6ecea4bacabc644cd1b6ee975057077",
-["/battleDmgLvPer.xlsx/property.lua"] = "245777876af67840fe9cf5d3e0891a38",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS.lua"] = "ec3c1a18e5adfb6abed3aa4d4885feca",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001101.lua"] = "42e52432afcfac058f2515d4dac05fea",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001103.lua"] = "ec9d188b4a0dc63e85b8dd362e0d86bd",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001104.lua"] = "de21d4b87c29acb350a76ff8bdc4c7f1",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001201.lua"] = "af4d2b6200cce2a844360dbea9a866d3",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001202.lua"] = "009cc4c978443c7b1420f45db9d52c87",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001203.lua"] = "eabccfd2a225c1618b2b7e5da90315e4",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001301.lua"] = "a955e10995076e1940da679ba07ab12a",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001304.lua"] = "f6e100b9475e8dbefe8e7c7362ae1605",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001306.lua"] = "e02c9d86a18fb41a7d7ba6d690a922af",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001307.lua"] = "a3167c7fcf9c24a87fccc8b80007df1a",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001308.lua"] = "7334995cab6b0d570809c03882bb847c",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001309.lua"] = "21365279e055fc2fec3ada9b94207559",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001311.lua"] = "1a070a54ea725e5b30309cd0b3ee6a18",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001312.lua"] = "bd5a8aeea1789143af30b570d8f90440",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001313.lua"] = "3b5a05119000f9f264c6749f3c8b8b4e",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1001314.lua"] = "6082dc9de2f483e145551ca95a1a84c8",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002101.lua"] = "b5abb1a59b983de364f6c39b226decc8",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002102.lua"] = "807d70d491592ef74d1132e6fbae64d5",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002201.lua"] = "5b96c8dda5a0efefad6e294ee9b1ad22",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002202.lua"] = "7ffbea4eadd02659c9e5de21f26218cc",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002203.lua"] = "29f2edd58bf6c37f109190d7f654f53a",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002302.lua"] = "85bce53587194738d7e582215fdc766f",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002303.lua"] = "b6dd0b0998ef30608a48ec24676fed39",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002304.lua"] = "702e613d36d736eaedf5cca934cc3912",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002305.lua"] = "4c9d5b5b05c81d39c6d0c4a1deb1b580",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002307.lua"] = "8e158a0a7a11b840b24c68db4261a787",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002309.lua"] = "1405d31fd321e163356f197beffa258b",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1002310.lua"] = "7ab7aa237b5a40fcb62fa05f02c11ec0",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003101.lua"] = "2ca1f070ff6526e2e2bec45bf032b975",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003102.lua"] = "1facd22ab7471ac36d169b0f18778333",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003201.lua"] = "145acf3f71a9eb5444ff2afa0fb97dfc",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003202.lua"] = "e9780b1f84d865e915b135e6ebc2dd05",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003203.lua"] = "37818291d0931cb83cca256f7210b489",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003301.lua"] = "356ba97bd80a4bd4d020b1e78f4be3aa",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003302.lua"] = "87c21acee4469996dc61b1d61ed6b6c3",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003304.lua"] = "5d0d0ed6a2067d5502798fc9b17d0007",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003305.lua"] = "e83c105c065d59177255618a663891fd",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003306.lua"] = "17ada6c1c3df3110c9fc59e21119307a",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003308.lua"] = "2c49c46679c49f5892ad48cf63368586",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1003309.lua"] = "d805554eeb1c485b877ddfb03c51d0a8",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004101.lua"] = "18dd96f0703952ab3c6992ded624232d",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004102.lua"] = "0997bb2a379893bf36679440134e2533",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004201.lua"] = "4f8023db54452ccacff82d562cd9ccea",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004202.lua"] = "4eb6187f0de56d907c95c291938e372b",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004203.lua"] = "f29b28669eb9dad46cdbacd7c6b894b1",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004301.lua"] = "6ddcdfc46df5f736578901283ebf8e2f",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004303.lua"] = "85f707441782ce2afe7b9ae77a6229f1",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004304.lua"] = "f0953ca35e0611343c7c06625af94d3f",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004305.lua"] = "5c7cae0b5055876f004bd2d7a2602e8a",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004307.lua"] = "d4f6312dcdca673415a1772bfdcd07ea",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004308.lua"] = "74c3020b0ac49f666b92ffeb0a44514d",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1004309.lua"] = "9bada7ae9ea41b0f0068104f298dc2d3",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1005304.lua"] = "06fd3b9210dcb12151e454984cc15bc4",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1006301.lua"] = "982a92c7bfccfcd2cb21e614e8af271d",
-["/battleEffectivenessGS.xlsx/battleEffectivenessGS/1006303.lua"] = "68c092e6cee3b204130938caf86223f4",
-["/battlehero.xlsx/battlehero.lua"] = "e05333b9ca0d59b45f72732379966be6",
-["/battleRelicBuff.xlsx/battleRelicBuff.lua"] = "417ae9eea83ff2217aeb96e10a6f6a11",
-["/battleRelicSkill.xlsx/battleRelicSkill.lua"] = "20e6a94a07770a356ad5be32482cda80",
-["/battleroguelikeskill.xlsx/battleroguelikeskill.lua"] = "0bdf8e4a2de74c87d7d6fdb9c514d1bc",
-["/battleSimulate.xlsx/simulate_attacker.lua"] = "cb6e946f7c79c1c80c9bc68ceb51deab",
-["/battleSimulate.xlsx/simulate_attribute.lua"] = "cefbcae6e65a716c2e95ceb02901779e",
-["/battleSimulate.xlsx/simulate_defender.lua"] = "25881179dbc4e2a6724b07a66dd0c7b3",
-["/battleSimulate.xlsx/simulate_setting.lua"] = "21881b2bf157536ef54cb32878d453dd",
-["/battleskill.xlsx/battleskill.lua"] = "94584052cb3958cf0cdab6f0d9d03789",
-["/battleskillaction.xlsx/battleskillframe.lua"] = "4aceeb1e52c370ae34f36b222bdca93d",
-["/battleskillframe.xlsx/battleskillframe.lua"] = "ca2608e994ce2cb7716e1f6e254feabd",
-["/battleskilllabel.xlsx/battleskilllabel.lua"] = "58b31ad2cccb9ea5fda984bde59c5f71",
-["/battleSpEquipskill.xlsx/battleSpEquipskill.lua"] = "fe5849991091430ed4c734493630fff3",
-["/battlesummon.xlsx/battlesummon.lua"] = "fcd8daec70aeb40ab55febafdba33418",
-["/battletalentskill.xlsx/battletalentskill.lua"] = "edc18fe440a94b704dacb30f5463db12",
-["/battletesthero.xlsx/battletesthero.lua"] = "c0380e97be9e8595cc3a93b845612b5b",
-["/battletesthero.xlsx/battletesthero121.lua"] = "ba2502e5e734476baa78e85ff4fff8ce",
-["/battletesthero.xlsx/battletesthero161.lua"] = "82573580cafe9a55c775bd3495ee3e7b",
-["/battletesthero.xlsx/battletesthero201.lua"] = "ed0a115c4fb42e21a02ddecbc3c40c3f",
-["/battleWord.xlsx/battleWord.lua"] = "b24601720ad2e1c654dee28c3647001f",
-["/blackword.xlsx/blackWord.lua"] = "d7ae6d90e123eca965b86ad5f9841c5f",
-["/bless.xlsx/bless.lua"] = "8c4c0e60f893d00793bc0c8c122be5b0",
-["/bless.xlsx/blessmage.lua"] = "e0fd1d57cd1c6d3497c1f023ee321534",
-["/bless.xlsx/blessranger.lua"] = "1b2ded71178bea0fc7ea839fc026e616",
-["/bless.xlsx/blesssupport.lua"] = "d6ef49593dec410ff1590f9264dc3a84",
-["/bless.xlsx/blesstank.lua"] = "da5df6813cbceded60e913a1f271578c",
-["/bless.xlsx/blesswarrior.lua"] = "4e17f6ee9b1cf7c332cdce7a40eefa76",
-["/bounty.xlsx/bountylevel.lua"] = "0afc6b6d03946b03b967fde12a972821",
-["/bounty.xlsx/bountyquestion.lua"] = "1337faf790e1fac48eac9fa24df6790c",
-["/carriage.xlsx/配置说明.lua"] = "308d08deb0524591054c5d57a3574d1a",
-["/carriage.xlsx/carriage_disband.lua"] = "c9d834db4bf2f1563ceade6320065371",
-["/carriage.xlsx/carriage_herocard.lua"] = "52d6f2218cfb3dd4bb02d5cb675438cf",
-["/carriage.xlsx/carriage_lang.lua"] = "91a8eb4cf0ec92f0a954f95c3058e725",
-["/carriage.xlsx/carriage_price.lua"] = "fd5f91c3ab7398820282335a2387e1bb",
-["/carriage.xlsx/carriage_rollback.lua"] = "da18b298ffd63d5d097beec5afe52119",
-["/CDKConfig.xlsx/CDKconfig.lua"] = "fdbca842d52ca6e4b7002f70a12e127e",
-["/chapter.xlsx/chapter.lua"] = "4841ac7d6042f0e3f894018dc769ecc4",
-["/characterAvatar.xlsx/characterAvatar.lua"] = "8e98f3783d9c6935a8fdcde4d7df6086",
-["/characterAvatar.xlsx/ChatBox.lua"] = "d990cbec4fb24fe0b92950e31e8a1dd9",
-["/characterAvatar.xlsx/HeadFrame.lua"] = "dbb236c20c663b1df50bd32caf3c3012",
-["/characterAvatar.xlsx/RoleFrame.lua"] = "ac2bcfe2346f47541c189acc1146b7ba",
-["/characterAvatar.xlsx/RoleHeadIcon.lua"] = "bc29e080f809f327db27eaf816c5051e",
-["/characterAvatar.xlsx/SkinIcon.lua"] = "205417169e5875d026f20b4d037c8521",
-["/chat_new.xlsx/blackWord.lua"] = "2b735f9637ee6004a1d520ad11c9eee6",
-["/chat_new.xlsx/chat_emo.lua"] = "8f27dae0fd774fa6231e9b63cc9e1867",
-["/color.xlsx/color.lua"] = "fefb3655ce15a029355efb47415e7976",
-["/color.xlsx/colorLink.lua"] = "5357c6f4a09261fd7c195fc8df8c7651",
-["/copy_config.xlsx/battle.lua"] = "d05d8af18c988910378c0594f1653274",
-["/copy_config.xlsx/battleGS.lua"] = "31acb5c366fc2fbcf8eb818d45cff894",
-["/copy_config.xlsx/copy_reward.lua"] = "b16186f0e637297016c36b01ed6bad57",
-["/copy_config.xlsx/copy.lua"] = "d8e0118757d64ecc3535223419d24337",
-["/copy_config.xlsx/itemArrow.lua"] = "a39d75cdaa15544f82a4ac45e72645fc",
-["/copy_config.xlsx/mapInfo.lua"] = "53d45e66a53aab3d12808238bcc07d51",
-["/copy_config.xlsx/relic.lua"] = "d6eb69dbff73c4965565d2746fdd2cff",
-["/copy_config.xlsx/reward.lua"] = "c942bd696b22c55ef66bc17e4d0a2072",
-["/copy_config.xlsx/spInfo.lua"] = "3f14862db190df05c5e8aa299e643ba3",
-["/copy_config.xlsx/tips.lua"] = "7088cbd638f3b92ab39b9278effd20f7",
-["/Crystal.xlsx/CrystalConstant.lua"] = "4f1913ac5ba08406812abbb548e63051",
-["/Crystal.xlsx/CrystalHeroLevelLimit.lua"] = "db0180f4d48440a86b11212d76cb1914",
-["/Crystal.xlsx/CrystalLevel.lua"] = "5bffe881ba423c2b779fa612e80cdadc",
-["/Crystal.xlsx/CrystalSlots.lua"] = "ec3d87da457f81d3804f67d0a5885a7b",
-["/Crystal.xlsx/CrystalSlotsDiamonds.lua"] = "3684d6a6d6d0e867a700148a21835a86",
-["/D订阅特权subscribe.xlsx/desc.lua"] = "45c145da37208cb52c971172b2935f0e",
-["/D订阅特权subscribe.xlsx/privilege.lua"] = "6cda07ca5705240516e0891fe8dc5b70",
-["/Dialog.xlsx/cfg.lua"] = "daa4b5c37e6d0ba74c41b0147fc51cdd",
-["/dropconfig.xlsx/dropgroup.lua"] = "8ef105ef43b77a6fb6d5dc4d932e8808",
-["/dropconfig.xlsx/dropshow.lua"] = "36a4ee18bebdc3d550169de29fbc3e1c",
-["/dropconfig.xlsx/dropteam.lua"] = "2003e10d1fc2c23c0058cb997be4e95a",
-["/DungeonStone.xlsx/dungeonstage.lua"] = "c1b4d388667140f5813fea53eae00579",
-["/DungeonStone.xlsx/dungeonstonebattle.lua"] = "2fdfa80b55f990bf8ff51cdd334aed69",
-["/DungeonStone.xlsx/dungeonstonebuy.lua"] = "25aba36b60a25c0cbff8f607f094579f",
-["/DungeonStone.xlsx/dungeonstonedrop.lua"] = "ceea54a7a2495f5932cd983b380bf8c9",
-["/DungeonStone.xlsx/dungeonstonegloabal.lua"] = "169fd5782cb2541ef52a2c6582f5d8ae",
-["/DungeonStone.xlsx/dungeonstonelist.lua"] = "5586a30b87f2983563848c7da641acfe",
-["/DungeonStone.xlsx/dungeonstoneopen.lua"] = "86ca41effc18b8f14475b228479d9bbe",
-["/DynamicEvent.xlsx/DynamicEvent.lua"] = "d4aba74af3bf3876f7e6430711c7ada0",
-["/equipconfig.xlsx/Equalityconfig.lua"] = "4e90d7dc4f258bde48b906ab7b630fa7",
-["/equipconfig.xlsx/equip.lua"] = "b9896a03425b7788c82cefd4bf8295ba",
-["/equipconfig.xlsx/EquipLevel.lua"] = "e15ee0fbc38205e08e458b80e3028f79",
-["/equipconfig.xlsx/equiprace.lua"] = "c0e452fb4a40c484595fec7e659b8326",
-["/equipconfig.xlsx/EquipRank.lua"] = "7d7962b09a129a63a17aa5a283acfe96",
-["/equipconfig.xlsx/qualityconfig.lua"] = "4193e747409267fe51c139766ebf3ea9",
-["/equipconfig.xlsx/SpEquip.lua"] = "c843dfef81f792cae30650eb0f8b6fda",
-["/equipconfig.xlsx/SpEquipGS.lua"] = "d78277af5f78bb4f2f55bef525354209",
-["/equipconfig.xlsx/SpEquipLevel.lua"] = "dbad6ceb1610d23c7a0060eeff679272",
-["/exchangeconfig.xlsx/exchangeconfig.lua"] = "a2a486dcb89cf48bb485d26a6625ed09",
-["/exchangeconfig.xlsx/exchangegroup.lua"] = "1c2240c949a4f88163d85d085a7a7b29",
-["/exchangeconfig.xlsx/exchangevip.lua"] = "f81040923aeaf403131deed8b504d678",
-["/formationInfo.xlsx/Info.lua"] = "47e1789c758be61356a9756a9068cd65",
-["/Friends.xlsx/DimensionalsStone.lua"] = "535e58ba676e34caf8a9a6c42b22b77e",
-["/function_switch.xlsx/function_switch.lua"] = "f5978d0ac19feff5d17641d756cdc983",
-["/functions.xlsx/activitiesAccess.lua"] = "68b181b01eec5e91a9cf770526cda094",
-["/functions.xlsx/functions.lua"] = "d5d0ce551b9ed907c9c52c1e28c371e9",
-["/G英雄说话表herowords.xlsx/words.lua"] = "58c8c2b9ac4ed8613677a8e7db803e26",
-["/gameConfig.xlsx/gameConfig.lua"] = "5d84fcb40f19c8e556d069f73f57dd41",
-["/general_free_reward.xlsx/GeneralFreeReward.lua"] = "105428546eddaf0acdeae557d2d8e9a4",
-["/generalControl.xlsx/MailControl.lua"] = "3494ef2176a5fb730c60d92173f4000c",
-["/generalpopup.xlsx/general_popup_list.lua"] = "9d27f2d49dee126ffd69c7559561dc59",
-["/generalpopup.xlsx/general_popup.lua"] = "b8802185795b0c5d30099476f35e7a77",
-["/Gift.xlsx/GiftPack_base.lua"] = "c70b9e3907deaec98ef37a0302d6bfe5",
-["/GiftDrop.xlsx/GiftDrop.lua"] = "9ab29dbf1c8bad14d0695a2b7b107058",
-["/GiftDrop.xlsx/GiftTeam.lua"] = "54c83860454015d38a4591435ee614f8",
-["/guild.xlsx/guild_level.lua"] = "eac0ba044300beb7d580aab2c1b1c172",
-["/guild.xlsx/guild_member_privilege.lua"] = "fef35ea7c57b817588ac2ade05e1f3a7",
-["/guildhuntlevel.xlsx/goldcoinratio.lua"] = "9c6c5710ab63ec6c6f3ba880b32ed562",
-["/guildhuntlevel.xlsx/guildhunt.lua"] = "87845aa662987c87e730758e6fb02182",
-["/guildhuntlevel.xlsx/guildhuntaward.lua"] = "ffbd26c3bffbbf58fa844322615bf9f2",
-["/guildhuntlevel.xlsx/guildhuntlevel.lua"] = "30c68c0eecd242fd75bd3c266c08866c",
-["/guildhuntlevelnew.xlsx/guildhuntawardbox.lua"] = "6cf6f9969d6989847c35a5fc906da284",
-["/guildhuntlevelnew.xlsx/guildhuntnew.lua"] = "5a02c84f8c886540cccacf3b4173eac7",
-["/guildhuntlevelnew.xlsx/guildhuntnewconstant.lua"] = "4eeabdf02fde17d5c9e36ff773123f30",
-["/guildsecretcave.xlsx/boss.lua"] = "23ef463282581d9fdd96aab29db94806",
-["/guildsecretcave.xlsx/config.lua"] = "943eb261712f06826053cd93bb59bb18",
-["/guildsecretcave.xlsx/deepreward.lua"] = "f9eb7c1f1e3e6e81a1db3786a921ae8a",
-["/guildsecretcave.xlsx/legendreward.lua"] = "ab8afae12f5767d465a4275275d1f9bc",
-["/guildsecretcave.xlsx/shallowlayer.lua"] = "c77eee7a577f45e1841cec8264fd6c04",
-["/guildsecretcave.xlsx/shallowrank.lua"] = "dbf9dd8d158d1230ca9c3956994228c9",
-["/guildsecretcave.xlsx/shallowreward.lua"] = "c5ad3d830b5db832440921362ac5fcca",
-["/guildsecretcave.xlsx/step.lua"] = "f116d177c324eddfb10d3b02e83b9382",
-["/guildsecretcave.xlsx/steppoint.lua"] = "f70c9f90215453e2f4d0bc33dd9cf367",
-["/guildsecretcave.xlsx/warriortreasures.lua"] = "8102cc193a9313afb5cb26239d6ff1dd",
-["/guildwarrior.xlsx/warriortreasure.lua"] = "7eb577f1ebbc201bda657883cecf1937",
-["/hallows.xlsx/hallow.lua"] = "f0904c719bbd8da86a91bd9d01575d85",
-["/hallows.xlsx/hallowlevelup.lua"] = "4d15e1ea1d3b8c3995c78254c3349fbf",
-["/hallows.xlsx/hallowpart.lua"] = "e4b3b797eec60d9eb25564fddf850837",
-["/hallows.xlsx/hallowskill.lua"] = "03cceaece1d3f1da64bae9420efcb579",
-["/hallows.xlsx/hallowskillbuff.lua"] = "ceec98d00fa2c19687288d43d9cbfd0e",
-["/hallows.xlsx/hallowskilllevelup.lua"] = "1c7410462e770a14a4f873302d0bd9ca",
-["/hallows.xlsx/hallowskilllock.lua"] = "8fb0cef0da46664f9d34a276ddfccabc",
-["/hallows.xlsx/hallowstarup.lua"] = "570fdabd0d3011e18199e452ef2b01ac",
-["/heatBillboard.xlsx/配置说明.lua"] = "abf3ae1442b665f6af6fd5c201610153",
-["/heatBillboard.xlsx/heatBillboardDetail.lua"] = "d200fdf0c00529c69dbc56590393b13c",
-["/heatBillboard.xlsx/heatBillboardMain.lua"] = "617c340b8b2c2b59512199b0674dee40",
-["/heatBillboard.xlsx/heatBillboardTitle.lua"] = "17614ba77ead104e405bd5a9f6c323a3",
-["/hero.xlsx/herobasetypeconfig.lua"] = "b9a6ae41afb20cd527d1141337074e64",
-["/hero.xlsx/heroconfig.lua"] = "ae91f17d259c46e89620ac03b8e89b0b",
-["/hero.xlsx/heroglobal.lua"] = "bd08055e74dd5c6e7ba252d126ec036a",
-["/hero.xlsx/herolevelup.lua"] = "ba7335bda7b41adb57d09a5ab738dd33",
-["/hero.xlsx/herolevelupn.lua"] = "f7b6dec68ab90d9811d38c555a99d18f",
-["/hero.xlsx/heropackageup.lua"] = "ee7ca1abd0f651a78fc1249fcc1db6e3",
-["/hero.xlsx/herorankup.lua"] = "1c3074967d560e3ab05fe3a15a505514",
-["/hero.xlsx/heroskill.lua"] = "ccb89a346153d80e9c3f7ec02174ec82",
-["/hero.xlsx/herostep.lua"] = "03b6f5e33bd68a6c4e3872cf07d7bb49",
-["/hero.xlsx/qualityconfig.lua"] = "a154e81883897c03a4291ee7cdc9aa2b",
-["/hero.xlsx/raceconfig.lua"] = "fb18fa09612eb8f9db87aa020b743cbc",
-["/HeroActivity_time.xlsx/ActivityCopy.lua"] = "896c471936bb029a3a72e2160becd510",
-["/HeroActivity_time.xlsx/ActivityCopyRewards.lua"] = "477812632427fb2bf62c42af150e56f3",
-["/HeroActivity_time.xlsx/ActivityExpGift.lua"] = "9ec4cfdcb47671461388815a136fb3d3",
-["/HeroActivity_time.xlsx/ActivityGoods.lua"] = "56a32d4d1409bc519c0ffd45a168b98c",
-["/HeroActivity_time.xlsx/ActivityHeroShow.lua"] = "801d031ec60c056c4ff1559207a1161e",
-["/HeroActivity_time.xlsx/ActivityOpenCondition.lua"] = "78b9d8c99bf2548c2b6c68e778b52391",
-["/HeroActivity_time.xlsx/ActivitySummonRewards.lua"] = "48d91aacd8e5b978ba94986bd09a62bd",
-["/HeroActivity_time.xlsx/ActivityTask.lua"] = "5b785d8a47f55e19785e746053309123",
-["/herolevel_GS.xlsx/herolevel_GS.lua"] = "bcc65e97d8479e442cfe3cf4c6e4ca2d",
-["/HeroMap.xlsx/heromap_race.lua"] = "5bec4767281e659a70709c8118267bd0",
-["/HeroMap.xlsx/heromap_title.lua"] = "5e66272f8b9e276d4bf444ab0908081d",
-["/HeroMap.xlsx/special_order.lua"] = "ba8fe5940359bca5c61da5df30943fd8",
-["/HeroSelect.xlsx/heroselect_hero.lua"] = "31d1ad5728d8259b66735a15652755ea",
-["/HeroSelect.xlsx/heroselect_stage.lua"] = "bd8dfd21dfbcd24ae07976801d29d441",
-["/heroskin.xlsx/heroskin.lua"] = "95a52b77eff158899f889fd5b568d96f",
-["/herostory.xlsx/story_hero.lua"] = "9b2afcd8fc7965af158530a12fbd1969",
-["/HeroTower.xlsx/HeroTowerConfig.lua"] = "4111ab0dc547753d90686a124c9b079c",
-["/HeroTower.xlsx/HeroTowerEffect.lua"] = "2b2040ed824e660b887bb6000178507f",
-["/HeroTower.xlsx/HeroTowerMonster.lua"] = "8e2073009883fda7b1eb99ea5d27b41c",
-["/heroTrial.xlsx/heroTrial.lua"] = "62df3feff95fb9c8bdebdde9943e2587",
-["/HeroWay.xlsx/HeroWay_Reward.lua"] = "986c4ce5c56050c985f5b4e5437fa738",
-["/HeroWay.xlsx/HeroWay_TaskGroup.lua"] = "15a188634ddf15134ac4d3ec21616c5d",
-["/HeroWay.xlsx/HeroWay_TaskList.lua"] = "66eafa1932733c927abf6ee11b24290d",
-["/herowords.xlsx/words.lua"] = "3eb073c0ae9c7ac8075561aff8390285",
-["/higharenarankconfig.xlsx/G高阶竞技场表#higharenarankconfig配置规范.lua"] = "39481b6f39a1666d02e510bdf713a797",
-["/higharenarankconfig.xlsx/HighArenaRankConfig.lua"] = "312a502e3fef3afe61ddf60c980f9716",
-["/HistoricalArchives.xlsx/fetter.lua"] = "d2919b5ea930432a38a3a44fa543fc8d",
-["/HistoricalArchives.xlsx/historical_archives_conds_rewar.lua"] = "f700a3c6014aa9080934a9ac2a16eb52",
-["/HistoricalArchives.xlsx/historical_archives_id_conds.lua"] = "9c6ddb0f8e749d7ca1e57dbb32f09df5",
-["/HistoricalArchives.xlsx/historical_archives_id_heros.lua"] = "a599056939cc6027a24f11f7545df42b",
-["/HistoricalArchives.xlsx/historicalArchivesLanguage.lua"] = "8eae3779a46429e2eeefdec6edf72dc8",
-["/HistoricalArchives.xlsx/libraryItem.lua"] = "a699477a5a975ae916e8f37be786d1f4",
-["/IAP.xlsx/AccumulateRechargeConfig.lua"] = "96bdf93dfcf547680f198014c0b0e578",
-["/IAP.xlsx/ChargeConfig.lua"] = "79e47b685ec8ad9f264c5bcb99f1c834",
-["/IAP.xlsx/productConfig.lua"] = "6e68ed71f9c9872bb38e034c57628ede",
-["/IAP.xlsx/Sheet1.lua"] = "6bf0353875d9613fb4ad70da5c7d38ef",
-["/idlereward.xlsx/idleConstant.lua"] = "c32d359edf04a582b35736acdc4b6177",
-["/idlereward.xlsx/idlereward.lua"] = "3b255c3369d2c0ccbcda636561d1b438",
-["/idlereward.xlsx/idlerewardOpen.lua"] = "29a3dfe16e07d47eb7242a7c279ebad7",
-["/idlereward.xlsx/idlerewardTip.lua"] = "98aef236a8bb609feb5c9821fef51a79",
-["/idlereward.xlsx/quickIdleReward.lua"] = "172d761a5dbbf33c61faeb8b0648fd07",
-["/IIAP商品表.xlsx/Sheet1.lua"] = "6bf0353875d9613fb4ad70da5c7d38ef",
-["/Instructions.xlsx/instructions.lua"] = "9c20a91ed72252b2a2f7c2c033b32ca8",
-["/item.xlsx/Item_rare.lua"] = "35c0e6d9211d38dc9d62b08109cd643d",
-["/item.xlsx/item_type.lua"] = "63e3acff9380108e46b9d71e27592c3c",
-["/item.xlsx/item.lua"] = "51b91a25802fd74b8e082e40bb3ef15f",
-["/item.xlsx/ItemRare_type.lua"] = "c5ebcdb6ba22c3143ee2cb37b831fe1a",
-["/iteminstance.xlsx/item_instance.lua"] = "6c4cc565d645afc5bad765f566477423",
-["/LackOfResources.xlsx/LackOfResources.lua"] = "6c266d9d13fc8a07f0f99146cded0575",
-["/LackOfResources.xlsx/LackOfResourcesEvents.lua"] = "c2b323e7f167f8d1ae835b93b6c30c6b",
-["/LackOfResources.xlsx/LackOfResourcesPlan.lua"] = "50db5d90af34c7d02a54e852184a7cf2",
-["/legendarenarankconfig.xlsx/legendarenarankconfig.lua"] = "6f2cdb2de5bc947a0db23f870d6397a0",
-["/legendarenarankconfig.xlsx/legendreward.lua"] = "5e83a2221e241801a156a2bb7dde8230",
-["/login_reward.xlsx/login_reward.lua"] = "f8e5f1e45e024f508c34321f4f45b133",
-["/loginpopup.xlsx/login_popup.lua"] = "f2eee4cba7f4fb12af0dce5e23335027",
-["/loginReward.xlsx/loginReward.lua"] = "63d9e540f01d11177ef410b3324620c4",
-["/loginReward.xlsx/LoginRewardInfo.lua"] = "12305c72ff3d7fc9c583a4a2c386d6ab",
-["/loginReward.xlsx/PlanInfo.lua"] = "f58615f9814e3b79ac09bd2b3008403c",
-["/LoginTips.xlsx/LoginTips.lua"] = "74a35a24a57470fdaefa266220e8da48",
-["/mail.xlsx/配置说明.lua"] = "6da5931b4a3bb22c775cb912458487f9",
-["/mail.xlsx/mail.lua"] = "778168d6f74d7b26433d71af85a3f0de",
-["/mail.xlsx/mailcontent.lua"] = "258104977affeaded7eb0d22192ffed9",
-["/mapconfig.xlsx/mapconfig.lua"] = "b3942086cbb7995b957e5255cfd2cee3",
-["/Mappingoffset.xlsx/BattleCard.lua"] = "36688a7cb4104f867b6fd592f3fc1de0",
-["/Mappingoffset.xlsx/HeroMapPic.lua"] = "fd3e533754b4647b61f7273075ca7752",
-["/Mappingoffset.xlsx/HeroPigPic.lua"] = "6e3a0564afe76a59fa10d38d1b1deb2c",
-["/Mappingoffset.xlsx/Mappingoffset.lua"] = "63f643fad0b4d14de0cc38d0ebd0eea2",
-["/Mappingoffset.xlsx/TavernCard.lua"] = "1a3285e6ee625c6c18180ce7bc9f16f1",
+["version"] = "e3e0af13d353bf9d937d20775d537871",
 ["/Market.xlsx/accumulate_Constant.lua"] = "fa5f37ba518b624464fb43328010c585",
 ["/Market.xlsx/accumulate_daily_recharge.lua"] = "8f8ef348602a13ba149c34f5cb80393a",
 ["/Market.xlsx/accumulate_recharge.lua"] = "e826794b25d229f459da998bea170779",
 ["/Market.xlsx/activity_gift.lua"] = "4303b5f613b2f0a96087ddcd58847799",
-["/Market.xlsx/daily_gift.lua"] = "fdea2f7e7e4da2c039a422f55fd95556",
-["/Market.xlsx/dream_reward.lua"] = "1062dcaf9e23cb8715360a0dee33b8d2",
-["/Market.xlsx/gift_battlepass.lua"] = "23944e6d5c03f7064c915a3e42f6111f",
 ["/Market.xlsx/gift_custompack.lua"] = "85f96ea5e1cb8e00a18962cc70375b5f",
 ["/Market.xlsx/gift_growth.lua"] = "173daa72af22cb72197ee69e78cc6676",
 ["/Market.xlsx/gift_monthcard_recommendgift.lua"] = "eb1e52f29417b617a40692bc1e3003b3",
@@ -354,238 +19,8 @@ return {
 ["/Market.xlsx/progress_Plan.lua"] = "b174fe6266260cc6f5ecc1522efd43a2",
 ["/Market.xlsx/progress_reward_module.lua"] = "3e9a10379b6f747b9f06753f7429436a",
 ["/Market.xlsx/progress_reward.lua"] = "798f21140aca3dab4f161df37f1bcbb3",
-["/Market.xlsx/push_gift_depot_limit.lua"] = "ac7e30487dc08f4a25eeeed636f1d5a2",
+["/Market.xlsx/push_gift_depot_limit.lua"] = "1158e23ee73f0cb2ab538c7a34e0025e",
 ["/Market.xlsx/push_gift_depot.lua"] = "16fd87f2f7ae1371acdb5f42a1d9c1f2",
 ["/Market.xlsx/push_gift_total_condition.lua"] = "a2ed61516a3af3d692272d94be8fb23a",
 ["/Market.xlsx/PushPaymentConfig.lua"] = "e19b744928653c40d1cb3ad743048802",
-["/Market.xlsx/royal_reward.lua"] = "7fd1e9e5872b7206c12a64e086c34e1c",
-["/MarketCN.xlsx/accumulate_ConstantCN.lua"] = "2949d27ef437d3e1caaaf49ce8368858",
-["/MarketCN.xlsx/accumulate_daily_rechargeCN.lua"] = "143a5b61f87e0bb3b841920a7ac46083",
-["/MarketCN.xlsx/accumulate_rechargeCN.lua"] = "7e99621e3428b2dafb1255f008caa80a",
-["/MarketCN.xlsx/gift_custompackCN.lua"] = "85f96ea5e1cb8e00a18962cc70375b5f",
-["/MarketCN.xlsx/gift_growthCN.lua"] = "2f14f018919181e7d81d00647aab0c5b",
-["/MarketCN.xlsx/gift_monthcard_recommendgiftCN.lua"] = "eb1e52f29417b617a40692bc1e3003b3",
-["/MarketCN.xlsx/gift_monthcardCN.lua"] = "874d6014c182e00207aa13e872483f63",
-["/MarketCN.xlsx/gift_subscribeCN.lua"] = "2cbe2b98427ea554b2e5ecab2e0a7bf7",
-["/MarketCN.xlsx/gift_summonCN.lua"] = "843582735effff13a2533e0d255e87f2",
-["/MarketCN.xlsx/hero_growthCN.lua"] = "9560c8256889bd3679ccbf49cfe1d49e",
-["/MarketCN.xlsx/market_clotheCN.lua"] = "576289868c0cea940a709e5b36ecd6ec",
-["/MarketCN.xlsx/market_gift_pkgCN.lua"] = "25950ef88388e1f0807117757ba0bc1b",
-["/MarketCN.xlsx/market_gift_total_conditionCN.lua"] = "5121b11958f96e5fc18ffde45d765e58",
-["/MarketCN.xlsx/market_gift_totalCN.lua"] = "08c4e44a35ef0080c92bc3a935a37627",
-["/MarketCN.xlsx/marketCN.lua"] = "0ac07acf8d2d0095f9b359cfed0c3a83",
-["/MarketCN.xlsx/progress_PlanCN.lua"] = "7de384f7edf09018709a86d14eb861cb",
-["/MarketCN.xlsx/progress_reward_moduleCN.lua"] = "2bc8459bbb97506cf6451e9f45ab3688",
-["/MarketCN.xlsx/progress_rewardCN.lua"] = "a5a10fa9465b8322a8f65e3d84678bdd",
-["/MarketCN.xlsx/push_gift_total_conditionCN.lua"] = "5c28e7a67503d3bf9d342b24526c63e9",
-["/maze.xlsx/FirstMaze_monster.lua"] = "66c06506ede1815ad2b6ca1818064404",
-["/maze.xlsx/FirstMaze_reward.lua"] = "0823a93de508d53984b93c538810af4c",
-["/maze.xlsx/herolevel_GS.lua"] = "b26312305451929db94556f0e7d8a50c",
-["/maze.xlsx/maze_battleGS.lua"] = "eb4852a9048a33167156dfa54333d269",
-["/maze.xlsx/maze_bossbox_drop.lua"] = "1db83e63089faea7ba05b8155eca127a",
-["/maze.xlsx/maze_carriage.lua"] = "890e3527c44c684349adbac602e81d4b",
-["/maze.xlsx/maze_carriagestage.lua"] = "11032b42736f8bd6a451202f50f88223",
-["/maze.xlsx/maze_doom.lua"] = "93f5e18cd3f0a1d015f395cf28457d04",
-["/maze.xlsx/maze_drop.lua"] = "b3d5743cc2a9227ca1d2e18a59feb90c",
-["/maze.xlsx/maze_events.lua"] = "9270ca0b9c09046e9f888613d1075259",
-["/maze.xlsx/maze_grid.lua"] = "d98cad9ca6715c06ed330b162472d39c",
-["/maze.xlsx/maze_map.lua"] = "24a8d15d9a00a0c7dd106675d721d3c9",
-["/maze.xlsx/maze_model.lua"] = "ea81ab94b3af40624f9cf48e13178ed2",
-["/maze.xlsx/maze_monster_bank.lua"] = "65834c94b2007d896214b60e816efdf4",
-["/maze.xlsx/maze_monster_drop.lua"] = "1b3865688c3b11b4df3e598f5a231b5c",
-["/maze.xlsx/maze_monster_group.lua"] = "1e274c1db16e5bd1d6de6665919003dd",
-["/maze.xlsx/maze_monster.lua"] = "da1efe8a773000712d729e4b10cb1a80",
-["/maze.xlsx/maze_monstergroupnew.lua"] = "994c576f11dada79985e1c771f6f9789",
-["/maze.xlsx/maze_monsternew.lua"] = "275f15ca5ab64239381aa2580df164c1",
-["/maze.xlsx/maze_randommonster.lua"] = "15897d14836d02135bc0922b651b15d4",
-["/maze.xlsx/maze_relics.lua"] = "a0d6001202259369773dc8a69afb7461",
-["/maze.xlsx/maze_shop.lua"] = "ce726eb403127ff93b4bb4ce38b1d368",
-["/MercenaryScore.xlsx/equipscore.lua"] = "c1b47fee5872064d8d8b83e78248a08e",
-["/MercenaryScore.xlsx/mercenary_equip.lua"] = "6758aafb25e00cb3dbf8e11a6699e8bf",
-["/MercenaryScore.xlsx/mercenary_quality.lua"] = "5227cba8ea438b5ee3d7cc661f9a156c",
-["/MercenaryScore.xlsx/mercenay_level.lua"] = "01861cb7f4f9c18c5ab23b2d24b21782",
-["/minigame_giantRush.xlsx/bossproperty.lua"] = "d08f8cfb67b5a0ef0dc83fa2228f39ff",
-["/minigame_giantRush.xlsx/gameConfig.lua"] = "34fdcb83cb259a3e3f2abad906b476a7",
-["/minigame_giantRush.xlsx/manproperty.lua"] = "d5e527d70d20dde8f8caf1886e615747",
-["/minigame_giantRush.xlsx/model.lua"] = "2e0d550b5d51350aaa75dd61fcbb7398",
-["/minigame_giantRush.xlsx/stage.lua"] = "7e70d1cd7b380b67be309c3363bff093",
-["/minigame_mafiaRule.xlsx/card.lua"] = "f1050eab614e26ab8c62cebbc2eea7e1",
-["/minigame_mafiaRule.xlsx/model.lua"] = "4e82e0540ae626675b8aec2c8cdd7801",
-["/minigame_mafiaRule.xlsx/stage.lua"] = "370e1c0a5c9b63be8772ad27a3a56ec2",
-["/minigame_monsterMerge.xlsx/camera.lua"] = "dd983eef46306e9ae4bb89855511e269",
-["/minigame_monsterMerge.xlsx/model.lua"] = "14b33e34971d511d5d19b497c04d28dd",
-["/minigame_monsterMerge.xlsx/monstercard.lua"] = "900a079163ca8cc92b2bb8f8dd3bdbf1",
-["/minigame_monsterMerge.xlsx/SpecialStage.lua"] = "92a73292e9df7be757f8fc3c62141b79",
-["/minigame_monsterMerge.xlsx/stage.lua"] = "0012ffa888067707e40a17a130230a4e",
-["/minigame_tinyFighter.xlsx/character.lua"] = "d3160067207418b5cdc0efecbb730e40",
-["/minigame_tinyFighter.xlsx/enemy.lua"] = "32d1dfbe3d56dd6cbc1f7ed895b2a242",
-["/minigame_tinyFighter.xlsx/model.lua"] = "a4520611c4baa5e7576fa6c4d7175de6",
-["/minigame_tinyFighter.xlsx/stage.lua"] = "574e7444e79dc93a5af4a494459a476d",
-["/miniGameStage.xlsx/boss.lua"] = "04e8fb1ebb1ec24434e35471bb8e73db",
-["/miniGameStage.xlsx/bossposition.lua"] = "0a7abfcb4350aeec10562becac4a5529",
-["/miniGameStage.xlsx/gameturn.lua"] = "424f4c2e4da423f2bc06983e0d75d266",
-["/miniGameStage.xlsx/gametype.lua"] = "ca58aab3623cca341eb7fd159d843f36",
-["/miniGameStage.xlsx/minigametype.lua"] = "5047b450e96254c41d2d5935c93b090b",
-["/miniGameStage.xlsx/object.lua"] = "bcc73cfd46c478e76460f8e0c9a57b30",
-["/miniGameStage.xlsx/SpecialStage.lua"] = "c07e952e3e36b26f5326444febeacc97",
-["/miniGameStage.xlsx/stage.lua"] = "770bf2d939d8a204be858d1b8a7285d1",
-["/miniGameStage.xlsx/usertype.lua"] = "a2038a920d8a94bb53511ca438c229d5",
-["/Model.xlsx/model.lua"] = "b197cf1fb48fb5e58cd594b798ab45b1",
-["/ModelScale.xlsx/modelPosition.lua"] = "11a656bdf5b97d9b399fcb0b3e263dee",
-["/ModelScale.xlsx/modelscale.lua"] = "a2bd4fe55a37682810499b6c43b570bc",
-["/ModelScale.xlsx/picInfo.lua"] = "d3bd026a666a985054ec2d3fed766ce4",
-["/ModelScale.xlsx/storyInfo.lua"] = "f4ef749f5d7d458c753d47755264b2fc",
-["/moduleEntrance.xlsx/moduleEntrance.lua"] = "c96b3943c3b09d5c2422a71f02049339",
-["/moduleEntrance.xlsx/moduleOpen.lua"] = "ba740f667698adb32963e2bbb72eab78",
-["/NotAlert.xlsx/notAlert.lua"] = "1d76617a945a380888f0d7c79392932e",
-["/NoviceGuide.xlsx/FailGuideTimes.lua"] = "5d24a8b465de2e44d812d8757f596ce7",
-["/NoviceGuide.xlsx/GuideCondition.lua"] = "9192bdfbe3432249c6cb03504b9be053",
-["/NoviceGuide.xlsx/GuideConditionHero.lua"] = "22bf7c8f8b95bba5d1d26cddce2a66aa",
-["/NoviceGuide.xlsx/GuideTower.lua"] = "cc1eb5b17432c0e8c73385a3363730c0",
-["/NoviceGuide.xlsx/NoviceGuide.lua"] = "b8742df1d5268e199884b942451366ba",
-["/Npc.xlsx/npc.lua"] = "7a46b20ad948bdbfb4e4382d26111f35",
-["/NpcAttr.xlsx/npcAttributes.lua"] = "a0b45e556f6ec8b341fa608034cf94be",
-["/Npcinstance.xlsx/Npcinstance.lua"] = "1646c2a19da6b0f4924838cde8d513ba",
-["/Npcinstance.xlsx/Npcinstance配置.lua"] = "98fd51af33d13f8049529a1c67cddb54",
-["/Npcinstance.xlsx/Sheet1.lua"] = "3a87370f8ddb2148f93cdbeb3ed09080",
-["/Npcinstance.xlsx/Sheet2.lua"] = "587e02113e85e55a6fd1faa4eb9a0a65",
-["/openTime.xlsx/openTime.lua"] = "62f94a2b25f729d62e6f471b52dfb80f",
-["/other.xlsx/laiwan_account.lua"] = "ab08513b59513a7f99f2e8e6029319bf",
-["/pinnaclearenarankconfig.xlsx/pinnaballtewin.lua"] = "8589fabcace43233bdcd374422578161",
-["/pinnaclearenarankconfig.xlsx/pinnacleGloryRoadReward.lua"] = "252bc9b3774e95e1e54b7ffc858cc7e0",
-["/pinnaclearenarankconfig.xlsx/pinnacleRankReward.lua"] = "eb03f61b54c86e31ec3b32472206b871",
-["/pinnaclearenarankconfig.xlsx/pinnacleTurn.lua"] = "66d4511df93ac2a747de648cadd32182",
-["/pinnaclearenarankconfig.xlsx/pinnacleWarriorTreasure.lua"] = "7954d7f0d3fc959c1a6ff2a5299b5e97",
-["/Planetarium .xlsx/Planet_Info.lua"] = "c50f33c06e10667727b7f358be49491d",
-["/Planetarium .xlsx/Star_Info.lua"] = "1e7b8e4a2f3be35ef38d2aa4e505f926",
-["/PlayerInfo.xlsx/ViewInit.lua"] = "a450bb49b2aff8055003fd134b81d724",
-["/PlayerLevel.xlsx/PlayerLevelTable.lua"] = "bc9f712eb3ec5a1015a349eb04a6965a",
-["/PlayerQuestionnaire.xlsx/PlayerQuestionnaireConstant.lua"] = "bb5da6864755419457335209e5f41226",
-["/PlayerQuestionnaire.xlsx/PlayerQuestionnaireDetail.lua"] = "be3a8e6a48843d39d35f4e94c42c41e2",
-["/PlayerQuestionnaire.xlsx/PlayerQuestionnaireInfo.lua"] = "1cdd1287450fd154f48cd64c7d85d524",
-["/plotDialog.xlsx/mainStory.lua"] = "549ad6e3683d642d607ac85cada20a4a",
-["/plotDialog.xlsx/plotDialog.lua"] = "986b961c67b71ce38536eb36330866ed",
-["/PopupCondition.xlsx/popup_condition.lua"] = "0afce2b37e2a14d72b7e7ba767061080",
-["/PopupPriority.xlsx/PopupGroup_Sundry.lua"] = "245e17d94d3345431c071e7e24429173",
-["/PopupPriority.xlsx/PopupPriority_Group.lua"] = "9e4624b4e467138512a77c40a4cf91ec",
-["/property.xlsx/property.lua"] = "1e9e7d8406d3731a37667d375d1082b1",
-["/RaceAction.xlsx/chapter.lua"] = "103afbaa19ee739b28f8f1ec290cc35e",
-["/RaceAction.xlsx/raceaction.lua"] = "c3209aabe495a3ffa2bfc54d0e57d372",
-["/RandomName.xlsx/竞技场名字.lua"] = "18a81eeff0c88f25ee4e639203bc1560",
-["/RandomName.xlsx/DATA.lua"] = "d3337de04a6ad0a6f5e7e29475ca7326",
-["/RandomName.xlsx/jjcname.lua"] = "ba1ad53b033ddb84823ecd61ee73ce00",
-["/RandomName.xlsx/randomname.lua"] = "f2db17621db6e6f6f78bc51e5ec31e02",
-["/rank.xlsx/hero_score.lua"] = "ac9698d35fc85eb236541eee3cdd26b5",
-["/rank.xlsx/rank_reward.lua"] = "66c7cf93f2e44bd1ba7319490c074451",
-["/rank.xlsx/ranklist.lua"] = "6e7224ccd29cdc0589dad6668338ddb2",
-["/recommendation.xlsx/recommendation.lua"] = "0998fe134a73ecbbadb2a2cf6931e5af",
-["/RecommendGift.xlsx/RecommendGift.lua"] = "af6d15e42c8f7ad6545da200188b248d",
-["/Relic.xlsx/relic.lua"] = "40115325017785063fd7c878f9083a10",
-["/Relic.xlsx/relicpackage.lua"] = "3dc9545f0c7eb6028dfc67fad7bc75c4",
-["/require.xlsx/require.lua"] = "430cb48a01ad7cc32d1e94d6f2138eed",
-["/Res.xlsx/Res.lua"] = "1eabf510cafe58180fdd87a8c11a3bb9",
-["/RewardTrial.xlsx/battle.lua"] = "d30ef70e3879330c71e24cf61e687922",
-["/RewardTrial.xlsx/config.lua"] = "05f19359e7c7efdea7c5d808d40728d6",
-["/RewardTrial.xlsx/heroconfig.lua"] = "d1e84023c6c025e571a56d8d31a219e8",
-["/RewardTrial.xlsx/heroteam.lua"] = "1258c4a6b1d4d370acb5687f1e48f8fe",
-["/RewardTrial.xlsx/task.lua"] = "53bcf38987b446b569b8f958f835f7a5",
-["/RobotStageRanking.xlsx/RankRewards.lua"] = "7094c7a20c2406e50547c8fbcf538c6d",
-["/RobotStageRanking.xlsx/RobotActivityConstant.lua"] = "aeb4a13c4a402dd74a70cb179314c190",
-["/RobotStageRanking.xlsx/RobotInitialStage.lua"] = "3ea01cb110061b7e694acfbd3700a065",
-["/RobotStageRanking.xlsx/RobotName.lua"] = "271b442fff94bb34963c95863938638b",
-["/RobotStageRanking.xlsx/RobotStageChange.lua"] = "2e3b24d2b7fe8c76f851fb40ee04c93b",
-["/rogueModel.xlsx/RogueEventConfig.lua"] = "1822301f6223312c91275d580c3a606a",
-["/rogueModel.xlsx/RoguePlaneConfig.lua"] = "215da5002f1ba9b1af6eeb6be97d5bcd",
-["/rouge.xlsx/battle.lua"] = "0c14a3e64f3330fbb60f57dc42e02a7b",
-["/rouge.xlsx/reward.lua"] = "aa0bcd7cb23b8b146252e2f143abefc1",
-["/rouge.xlsx/tips.lua"] = "627a7dbdeb4aee1c6ef74509f77748db",
-["/shop.xlsx/配置说明.lua"] = "51dfd67960b9626e1f956de0bac66e75",
-["/shop.xlsx/goods_list.lua"] = "ce43cb9fda3e08b6be14f836b978eb1c",
-["/shop.xlsx/maze_goods.lua"] = "0b1be00ca696c3e6871c5f83265cef71",
-["/shop.xlsx/shop_info.lua"] = "b47750169a7722b98b442a9da07ba4df",
-["/shop.xlsx/shop_oprtips.lua"] = "f60b41ca1895f9e2bad047fe6ebfa8d1",
-["/shop.xlsx/slot_list.lua"] = "3b6364ecab26d7813fbce445d8d973fa",
-["/skillTmp.xlsx/skilltmp.lua"] = "83c98e7fdfb000cb13700fd12cd7837f",
-["/Stage.xlsx/Sheet1.lua"] = "8957178807b56902d5ec0b8a883b6d34",
-["/Stage.xlsx/Sheet2.lua"] = "6d8c7a55d60eaa741d5eda87a8846d05",
-["/Stage.xlsx/Sheet3.lua"] = "541f02bec5c72f39508d482dd0198228",
-["/Stage.xlsx/stage_bossmodelshow.lua"] = "21104bde2a2e9d0cc295e4c1487544de",
-["/Stage.xlsx/stage_bossshow.lua"] = "a197b3edf521d1bad89bbd24f761c474",
-["/Stage.xlsx/stage.lua"] = "e9dbe750349597e4de2bd6e87f4c24f7",
-["/StageDifficultyDecreases.xlsx/StageDynamicDifficulty.lua"] = "df9b0e59ee341b6f2366f1d65fde7462",
-["/StageDifficultyDecreases.xlsx/StageDynamicDifficultyConfig.lua"] = "144768cdc49f55572ac99d4a639e48d1",
-["/StageDynamicDifficulty.xlsx/PayDynamicDifficulty.lua"] = "c454af8266593f3797f2fd88e25df56c",
-["/StageDynamicDifficulty.xlsx/StageDynamicDifficulty.lua"] = "5ba7070e819501e85b8c8092d1b78f05",
-["/StageRewardChest.xlsx/G关卡章节奖励表#StageRewardChest配置规范.lua"] = "d90ac78d1c00592466d4ba797ad17f70",
-["/StageRewardChest.xlsx/StageRewardChest.lua"] = "79d1e9d7ea2f71822fc5ae1c765d94a1",
-["/subscribe.xlsx/desc.lua"] = "45c145da37208cb52c971172b2935f0e",
-["/subscribe.xlsx/privilege.lua"] = "7c6fa771e01669be834b97e09c68f7ba",
-["/summon_task.xlsx/summon_task.lua"] = "4f95e144d6c4beae6f1e1fe7eb93f0b6",
-["/summon.xlsx/doublePurpleCounter.lua"] = "5195733c3012a47b523e6c614fbed5c4",
-["/summon.xlsx/npcConfig.lua"] = "86037bc4cb95348b16995a7f635ee127",
-["/summon.xlsx/npcDialogueConfig.lua"] = "2c4d7be5bce26317f40027779d9f4369",
-["/summon.xlsx/RaceExchangeShop.lua"] = "2cbd6f4ded1cc6189d395e6a26449758",
-["/summon.xlsx/RaceOptionalCard.lua"] = "96930bea85052a49e499bee1f0241977",
-["/summon.xlsx/RaceTavernRecommendGift.lua"] = "dfb50abb9b01d8019287d13d3f452031",
-["/summon.xlsx/summonBonus.lua"] = "4fa89427cf3a0f138005378e73825e96",
-["/summon.xlsx/summonProgressReward.lua"] = "877052e13ab6cb531554e78fc328b4fc",
-["/summon.xlsx/TavernRecommendGift.lua"] = "3f24d9665af4b542ff025a0774181acc",
-["/summon.xlsx/tipsShow.lua"] = "c4049d0e141ab2f1bf2d7d295e0529a6",
-["/summon.xlsx/WishListHero.lua"] = "74b2a46f0a3508f28daea12c01b86729",
-["/summon.xlsx/WishListRecommend.lua"] = "7d90337817a8a5827a2ff1b38376d87d",
-["/summon.xlsx/WishPointHero.lua"] = "bd857cb900e6778be7c284a40e956648",
-["/summon.xlsx/WishValueExchangeTime.lua"] = "52def71e5575fb5088e57c90533355c5",
-["/T弹出条件表PopupCondition.xlsx/popup_condition.lua"] = "0c0b6504f9a8458351ae969c01c9bd97",
-["/T通用免费奖励表general_free_reward.xlsx/GeneralFreeReward.lua"] = "105428546eddaf0acdeae557d2d8e9a4",
-["/task_boxData.xlsx/boxData_dropgroup.lua"] = "5c166973617cda055415c7252a39d20e",
-["/task_boxData.xlsx/boxData_dropteam.lua"] = "9a9eb254aa14a099a68732296988717d",
-["/task_boxData.xlsx/task_boxData.lua"] = "e97967736537b1d2b14128788287b54c",
-["/task_mainData.xlsx/maintask_dropteam.lua"] = "5a4522aa50ead48861051253cb6c2b48",
-["/task_mainData.xlsx/miantask_dropgroup.lua"] = "b3fff68003d06a182592ca5756022b21",
-["/task_mainData.xlsx/task_mainData.lua"] = "8b40028edb9e86f0b40a37f892a26293",
-["/Task.xlsx/StageChallenge.lua"] = "14595b77a8c09945e3bfb183d5277abd",
-["/Task.xlsx/taskgroup.lua"] = "d3a6089c19309cb9aa60b448ff25cf6d",
-["/Task.xlsx/tasklist.lua"] = "d1812a500fc6ccdc31d06a657bfc1261",
-["/Task.xlsx/taskstage.lua"] = "8069c0be989b69de0845efd4e7f30171",
-["/test/test.xlsx/test_sheet.lua"] = "2541cc00ea8dc24dc12c50b44feecd0d",
-["/test/testconfig.xlsx/testConfig.lua"] = "0b424f3763593f89093a40badb2b3fd5",
-["/TheElderTree.xlsx/TheElderTree_Droplets.lua"] = "a0dcb34177a60d62b7ed7ae2507633d7",
-["/TheElderTree.xlsx/TheElderTree.lua"] = "65bc5fda5804f78cb2374565a6250181",
-["/thirty_days_reward.xlsx/ShowHero.lua"] = "99a65b7221b6235d03974462874a06d3",
-["/thirty_days_reward.xlsx/ThirtyDaysReward.lua"] = "0b3ecbb5eb2e84d6a8f171497cc4908b",
-["/timer_cmd.xlsx/cmd.lua"] = "3d5e9bbf359473657b034b86a6635525",
-["/tower.xlsx/Sheet2.lua"] = "257e0711fbdbb41daf7c4e13739bfd6e",
-["/tower.xlsx/towerbatch.lua"] = "0d7424df57d97cd87991df4e36a471b2",
-["/tower.xlsx/towerclient.lua"] = "416d899f6c654fbcf839c4b9ca411751",
-["/tower.xlsx/towerconfig.lua"] = "ef86fc28dc43ec2cf449698e75008d35",
-["/tower.xlsx/towersweep.lua"] = "85a17def3c120cc7338dc08cc988c389",
-["/tower.xlsx/TowerSweepRewards.lua"] = "babdf3469618fc97cd22fe31080d3b9f",
-["/trench_maze.xlsx/配置说明.lua"] = "8f5ac66a3a2f9484353a53662c5fecc9",
-["/trench_maze.xlsx/normal_reward.lua"] = "d7a6a5ff815cd6e7c8e799415ca5ffe9",
-["/trench_maze.xlsx/target_reward.lua"] = "72194f05b4e28ccbe0c545b73b5a3c60",
-["/Trialground.xlsx/Trialground.lua"] = "f8a27d5f557479340548216c3fdbaa34",
-["/TTTConfig.xlsx/TTTconfig.lua"] = "e6508f97c49b849eb8b870cbb934f268",
-["/UserNameDefaultConfig.xlsx/LanguageConfig.lua"] = "ef70b990729995aa607a18cf779e351f",
-["/UserNameDefaultConfig.xlsx/UserheadIconChange.lua"] = "451707b33f2ad75d9c8cf6c1725b2fa6",
-["/UserNameDefaultConfig.xlsx/UserNameDefaultName.lua"] = "1423ed2cb75f1f8b20257f7414fb266b",
-["/VipPrivilege.xlsx/vipLevel.lua"] = "534f13920f66ed336f29991a692ad3c1",
-["/VipPrivilege.xlsx/vipPrivileges.lua"] = "dd59cf7c5d936737e8b8ab8855ed1d0d",
-["/VoidGuest.xlsx/VoidGuest_Base.lua"] = "b7dc71a03271058aaf73002afc3cfe45",
-["/VoidGuest.xlsx/VoidGuest_Exchange.lua"] = "b7c4ec8d64ae6eb91359f4a6ad2bc5b3",
-["/warriortreasures.xlsx/warriortreasures.lua"] = "85d9e68b30b671d1d49fb6e635d769dc",
-["/warriortreasures.xlsx/warriortreasuresconfig.lua"] = "a9f89c329184c9330d922c7ab93721dc",
-["/wish_star.xlsx/AstrologyDropConfig.lua"] = "a196982752e272ed9d9f145902f31a29",
-["/wish_star.xlsx/wishStarDropConfig.lua"] = "e12b78f1d442f644b6b055669cf83531",
-["/wish_star.xlsx/WishStarRewardShowConfig.lua"] = "29f51f9fd926c6af6fbbc74db4656e4e",
-["/WishActivity.xlsx/配置说明.lua"] = "8386b36f53638c3077d30fb23b04f306",
-["/WishActivity.xlsx/BossChallengeRankReward.lua"] = "e50b39b920fbb0ffc785b2a039ad69ec",
-["/WishActivity.xlsx/HeroGift.lua"] = "e4405d289efef9695318b9b9944dcbaf",
-["/WishActivity.xlsx/WeekCard.lua"] = "5d6fe5ba343c51268cd322860d6b7be9",
-["/WishActivity.xlsx/WishSummonDropConfig.lua"] = "66a95d466cf504b563e4f1257b761642",
-["/WishActivity.xlsx/WishSummonDropShowConfig.lua"] = "29887929f7c08ae7c22c57f6b81f2fb4",
-["/WishActivity.xlsx/WishSummonGameConfig.lua"] = "85d00e3f15fd1fd8ba0435b9fc38c19d",
-["/WishActivity.xlsx/WishSummonHeroList.lua"] = "32ca308af583473c47a2bc0f7a9ecb73",
-["/WishActivity.xlsx/WishSummonRewardShowConfig.lua"] = "62222bd55312682c3f422fd0878d7ccb",
-["/worldmap.xlsx/worldmap.lua"] = "3c4aca2aa1962ddf780dfbbc1e781d43",
-["/Y英雄说话表herowords.xlsx/words.lua"] = "58c8c2b9ac4ed8613677a8e7db803e26",
 }

+ 0 - 3
server/src/server/OpenCards.Server.Core/OpenCards.Server.Core.csproj

@@ -52,9 +52,6 @@
     <Reference Include="Newtonsoft.Json">
       <HintPath>..\..\library\Newtonsoft.Json.dll</HintPath>
     </Reference>
-    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
-      <HintPath>..\..\library\Newtonsoft.Json.dll</HintPath>
-    </Reference>
   </ItemGroup>
 
   <ItemGroup>

+ 1 - 1
server/src/server/OpenCards.Server.Core/TableManager.cs

@@ -18,7 +18,7 @@ namespace OpenCards.Server.Core
 				try
 				{
 				_IdMap = loader.LoadTemplates<int, Table_ActivityTask>(nameof(Table_ActivityTask.Id), "activity_task");
-				foreach (var table in _IdMap.Values)
+                foreach (var table in _IdMap.Values)
 				{
 					table.OnReload();
 				}

+ 5 - 2
server/src/server/OpenCards.Server.DotNetCore/OpenCardsNameServer.cs

@@ -20,8 +20,11 @@ namespace OpenCards.Server.DotNetCore
         {
             DoStart(doc);
             consoleCommand = RpcAppFactory.Instance.CreateConsoleCommand(Launcher);
-            this.http = new HttpServer(nameserverHttp, consoleCommand, log);
-            this.http.Start();
+            if (!string.IsNullOrEmpty(nameserverHttp))
+            {
+                this.http = new HttpServer(nameserverHttp, consoleCommand, log);
+                this.http.Start();
+            }
         }
 
         protected override bool DoStart(XmlDocument doc)

+ 42 - 0
server/src/server/OpenCards.Server.DotNetCore/OpenCardsRpcAppFactory.cs

@@ -26,6 +26,38 @@ using ServiceProxyInfo = DeepFrozenIceImpl.ServiceProxyInfo;
 
 namespace OpenCards.Server.DotNetCore
 {
+    internal static class OpenCardsConsoleTryReadLine
+    {
+        public static bool TryReadLine(TextReader input, out string cmd)
+        {
+            cmd = null;
+            try
+            {
+                if (Console.IsInputRedirected)
+                {
+                    if (input.Peek() >= 0)
+                    {
+                        cmd = input.ReadLine();
+                        return cmd != null;
+                    }
+                    return false;
+                }
+
+                if (Console.KeyAvailable)
+                {
+                    cmd = input.ReadLine();
+                    return true;
+                }
+            }
+            catch (IOException e)
+            {
+                Console.WriteLine($"TryReadLine报错 :{e}");
+            }
+
+            return false;
+        }
+    }
+
     public class OpenCardsRpcAppFactory : IceRpcAppFactory
     {
         class OpencardIceRpcNameServer : IceRpcNameServer
@@ -227,6 +259,11 @@ namespace OpenCards.Server.DotNetCore
         public OpenCardsNameServerConsoleCommand(NameServerLauncher app) : base(app)
         {
         }
+
+        protected override bool TryReadLine(TextReader input, out string cmd)
+        {
+            return OpenCardsConsoleTryReadLine.TryReadLine(input, out cmd);
+        }
         // 重新加载服务配置
         [Desc("Reload Service Config")]
         public class CMD_RELOADXML : AbstractCommand
@@ -497,6 +534,11 @@ namespace OpenCards.Server.DotNetCore
             //this.OutputDir = new DirectoryInfo($"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}state");
         }
 
+        protected override bool TryReadLine(TextReader input, out string cmd)
+        {
+            return OpenCardsConsoleTryReadLine.TryReadLine(input, out cmd);
+        }
+
         // 重新加载服务配置
         [Desc("Reload Service Config")]
         public class CMD_RELOADXML : AbstractCommand

+ 2 - 11
server/src/server/OpenCards.Server.DotNetCore/Program.cs

@@ -130,20 +130,11 @@ namespace OpenCards.Server.DotNetCore
             LoggerFactory.SetFactory(new BILogger.BICustomLoggerFactory());
 
             var svrName = new OpenCardsNameServer(nameserverHttp);
-            if (string.IsNullOrEmpty(nameserverHttp))
-                svrName.MainLoop(doc);
-            else
-                svrName.Start(doc);
-            while(true)
+            svrName.Start(doc);
+            while (true)
             {
-                svrName.Start(doc);
-                while (true)
-                {
-                    Thread.Sleep(1000);
-                }
                 Thread.Sleep(1000);
             }
-            
         }
 
         public static void StartServerNode(XmlDocument doc, string nodeName)

+ 2 - 0
server/src/server/OpenCards.Server.DotNetCore/server打包.bat

@@ -0,0 +1,2 @@
+dotnet publish OpenCards.Server.DotNetCore.csproj -c Release -r linux-x64 --self-contained false -o ./_output.server
+pause

+ 4 - 0
server/src/server/OpenCards.Server.Main/OpenCards.Server.Main.csproj

@@ -118,4 +118,8 @@
     </None>
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
+  </ItemGroup>
+
 </Project>

+ 7 - 3
server/src/server/OpenCards.Server.Main/Program.cs

@@ -83,7 +83,7 @@ namespace OpenCards.Server.Main
                     NetSH.AddUrlAcl(url);
                 }
             }
-            
+
             RedisDump.CMD_CREATE_MAPPING = ORMUtils.CMD_CREATE_MAPPING;
 
             LogicUtils.LogCallback = (msg, e) =>
@@ -111,7 +111,7 @@ namespace OpenCards.Server.Main
             var my_str = "";
             Console.WriteLine("记得开redis");
             var mysql = XmlUtil.FindChild<XmlElement>(StartConfigInfo, "Mysql");
-            if(mysql != null)
+            if (mysql != null)
                 my_str = mysql.GetTextValue();
             using (var db = OpenCarsRedisORMFactory.Create(re_str, my_str))
             {
@@ -124,12 +124,16 @@ namespace OpenCards.Server.Main
                 DeepCore.GameEvent.Lua.LuaEventManager.DefaultAdapter = new DeepCore.Template.MoonSharp.MoonSharpLuaAdapter();
 #endif
                 var ad = DeepCore.GameEvent.Lua.LuaEventManager.DefaultAdapter;
+
+                // 必须传 true,否则 LuaTemplateLoader.Instance 不会被赋值,TableManager.LoadTemplates 会 NRE。
+                // true 时 MoonSharp 会尝试初始化 Unity 脚本加载器并打印 Error initializing UnityScriptLoader,可忽略。
                 new DeepCore.Lua.LuaTemplateLoader(true, ad);
                 CardsServerTemplateManager.TemplateDataRootPath =
                     CardsServerTemplateManager.ResolveServerDataRoot();
                 new DeepCore.Lua.LuaDataCenter(ad,
                     Path.Combine(CardsServerTemplateManager.TemplateDataRootPath, "templates_lua"));
 
+
                 CardsServerTemplateManager.Instance.Init();
                 //启动极简服务,只需要提供服务名和服务类型
                 new SingleNodeLauncher().MainLoopSingleService(
@@ -139,7 +143,7 @@ namespace OpenCards.Server.Main
             }
 
             RpcAppFactory.PrintGCFinalizers();
-            
+
             //redis.Close();}
         }
     }

BIN
server_battle/GameLogic/.signature.p7s


+ 1 - 1
server_battle/GameLogic/App.config

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
     <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
     </startup>
 </configuration>

+ 20 - 11
server_battle/GameLogic/GameLogic.csproj

@@ -9,12 +9,13 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>HttpServer</RootNamespace>
     <AssemblyName>GameLogic</AssemblyName>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <TargetFrameworkProfile />
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
+    <PlatformTarget>x64</PlatformTarget>
+    <Prefer32Bit>false</Prefer32Bit>
     <DebugSymbols>true</DebugSymbols>
     <DebugType>portable</DebugType>
     <Optimize>false</Optimize>
@@ -24,17 +25,18 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
+    <PlatformTarget>x64</PlatformTarget>
+    <Prefer32Bit>false</Prefer32Bit>
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
+    <OutputPath>..\_output.battle.server\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
-      <HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+    <Reference Include="Newtonsoft.Json">
+      <HintPath>..\..\server\src\library\Newtonsoft.Json.dll</HintPath>
     </Reference>
     <Reference Include="slua-standalone, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\slua-standalone.1.0.67\lib\net35\slua-standalone.dll</HintPath>
@@ -55,6 +57,7 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
+    <None Include=".signature.p7s" />
     <None Include="App.config" />
     <None Include="lib\slua-standalone.dll.config" />
     <None Include="packages.config" />
@@ -73,11 +76,17 @@
     <Content Include="lib\x86\slua.so" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
   <Target Name="AfterBuild">
+    <PropertyGroup>
+      <SluaNativeArch Condition="'$(PlatformTarget)' == 'x86'">x86</SluaNativeArch>
+      <SluaNativeArch Condition="'$(PlatformTarget)' == 'x64'">x64</SluaNativeArch>
+      <SluaNativeArch Condition="'$(PlatformTarget)' == 'AnyCPU' and '$(Prefer32Bit)' == 'true'">x86</SluaNativeArch>
+      <SluaNativeArch Condition="'$(SluaNativeArch)' == ''">x64</SluaNativeArch>
+    </PropertyGroup>
+    <Copy SourceFiles="$(ProjectDir)lib\$(SluaNativeArch)\slua.dll" DestinationFiles="$(OutputPath)slua.dll" SkipUnchangedFiles="true" />
+    <ItemGroup>
+      <LibFiles Include="$(ProjectDir)lib\**\*" />
+    </ItemGroup>
+    <Copy SourceFiles="@(LibFiles)" DestinationFolder="$(OutputPath)lib\%(RecursiveDir)" SkipUnchangedFiles="true" />
   </Target>
-  -->
 </Project>

BIN
server_battle/Packages/LitJson.0.7.0/.signature.p7s


+ 11 - 0
server_battle/Packages/slua-standalone.1.0.67/[Content_Types].xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
+  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
+  <Default Extension="psmdcp" ContentType="application/vnd.openxmlformats-package.core-properties+xml" />
+  <Default Extension="dll" ContentType="application/octet" />
+  <Default Extension="pdb" ContentType="application/octet" />
+  <Default Extension="so" ContentType="application/octet" />
+  <Default Extension="txt" ContentType="application/octet" />
+  <Default Extension="config" ContentType="application/octet" />
+  <Default Extension="nuspec" ContentType="application/octet" />
+</Types>

+ 5 - 0
server_battle/Packages/slua-standalone.1.0.67/_rels/.rels

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+  <Relationship Type="http://schemas.microsoft.com/packaging/2010/07/manifest" Target="/slua-standalone.nuspec" Id="R7d168d72ff3942b4" />
+  <Relationship Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="/package/services/metadata/core-properties/55bba8b9cbcc42c8b15bb958f818ce86.psmdcp" Id="R1c034dd4d7874478" />
+</Relationships>

+ 17 - 0
server_battle/Packages/slua-standalone.1.0.67/slua-standalone.nuspec

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
+  <metadata>
+    <id>slua-standalone</id>
+    <version>1.0.67</version>
+    <authors>http://github.com/mr-kelly</authors>
+    <owners>pangweiwei</owners>
+    <requireLicenseAcceptance>false</requireLicenseAcceptance>
+    <licenseUrl>http://github.com/pangweiwei/slua</licenseUrl>
+    <projectUrl>http://github.com/mr-kelly/slua</projectUrl>
+    <iconUrl>http://www.lua.org/images/lua.gif</iconUrl>
+    <description>Slua is a Unity3D Lua Library, this slua-standalone is a version without Unity3D for Windows and Linux</description>
+    <releaseNotes></releaseNotes>
+    <copyright>Copyright 2016</copyright>
+    <tags>slua lua</tags>
+  </metadata>
+</package>

+ 1843 - 0
server_battle/ServerLib/LuaState.cs

@@ -0,0 +1,1843 @@
+// The MIT License (MIT)
+
+// Copyright 2015 Siney/Pangweiwei siney@yeah.net
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//#define LUA_DEBUG
+
+
+
+namespace SLua
+{
+    using System;
+    using System.Collections.Generic;
+    using System.Collections;
+    using System.Text;
+#if LUA_DEBUG
+    using System.Security.Cryptography;
+#endif
+#if !SLUA_STANDALONE
+    using UnityEngine;
+#else
+    using System.IO;
+#endif
+
+    abstract public class LuaVar : IDisposable
+    {
+        protected LuaState state = null;
+        protected int valueref = 0;
+
+
+
+        public IntPtr L
+        {
+            get
+            {
+                return state.L;
+            }
+        }
+
+        public int Ref
+        {
+            get
+            {
+                return valueref;
+            }
+        }
+
+        public LuaVar()
+        {
+            state = null;
+        }
+
+        public LuaVar(LuaState l, int r)
+        {
+            state = l;
+            valueref = r;
+        }
+
+        public LuaVar(IntPtr l, int r)
+        {
+            state = LuaState.get(l);
+            valueref = r;
+        }
+
+        ~LuaVar()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        static void unref(IntPtr l, int r)
+        {
+            LuaDLL.lua_unref(l, r);
+        }
+
+        public virtual void Dispose(bool disposeManagedResources)
+        {
+            if (valueref != 0)
+            {
+                state.gcRef(unref, valueref);
+                valueref = 0;
+            }
+        }
+
+        public void push(IntPtr l)
+        {
+            LuaDLL.lua_getref(l, valueref);
+        }
+
+        public override int GetHashCode()
+        {
+            return base.GetHashCode();
+        }
+
+        public override bool Equals(object obj)
+        {
+            if (obj is LuaVar)
+            {
+                return this == (LuaVar)obj;
+            }
+            return false;
+        }
+
+        public static bool operator ==(LuaVar x, LuaVar y)
+        {
+            if ((object)x == null || (object)y == null)
+                return (object)x == (object)y;
+
+            return Equals(x, y) == 1;
+        }
+
+        public static bool operator !=(LuaVar x, LuaVar y)
+        {
+            if ((object)x == null || (object)y == null)
+                return (object)x != (object)y;
+
+            return Equals(x, y) != 1;
+        }
+
+        static int Equals(LuaVar x, LuaVar y)
+        {
+            x.push(x.L);
+            y.push(x.L);
+            int ok = LuaDLL.lua_equal(x.L, -1, -2);
+            LuaDLL.lua_pop(x.L, 2);
+            return ok;
+        }
+    }
+
+    public class LuaThread : LuaVar
+    {
+        public LuaThread(IntPtr l, int r)
+            : base(l, r)
+        { }
+    }
+
+    public class LuaDelegate : LuaFunction
+    {
+        public object d;
+
+        public LuaDelegate(IntPtr l, int r)
+            : base(l, r)
+        {
+        }
+
+        static void unref(IntPtr l, int r)
+        {
+            LuaObject.removeDelgate(l, r);
+            LuaDLL.lua_unref(l, r);
+        }
+
+        public override void Dispose(bool disposeManagedResources)
+        {
+            if (valueref != 0)
+            {
+                state.gcRef(unref, valueref);
+                valueref = 0;
+            }
+
+        }
+    }
+
+    public class LuaFunction : LuaVar
+    {
+        public LuaFunction(LuaState l, int r)
+            : base(l, r)
+        {
+        }
+
+        public LuaFunction(IntPtr l, int r)
+            : base(l, r)
+        {
+        }
+
+        public bool pcall(int nArgs, int errfunc)
+        {
+
+            if (!state.isMainThread())
+            {
+                Logger.LogError("Can't call lua function in bg thread");
+                return false;
+            }
+
+            LuaDLL.lua_getref(L, valueref);
+
+            if (!LuaDLL.lua_isfunction(L, -1))
+            {
+                LuaDLL.lua_pop(L, 1);
+                throw new Exception("Call invalid function.");
+            }
+
+            LuaDLL.lua_insert(L, -nArgs - 1);
+            if (LuaDLL.lua_pcall(L, nArgs, -1, errfunc) != 0)
+            {
+                LuaDLL.lua_pop(L, 1);
+                return false;
+            }
+            return true;
+        }
+
+        bool innerCall(int nArgs, int errfunc)
+        {
+            bool ret = pcall(nArgs, errfunc);
+            LuaDLL.lua_remove(L, errfunc);
+            return ret;
+        }
+
+
+        public object call()
+        {
+            int error = LuaObject.pushTry(state.L);
+            if (innerCall(0, error))
+            {
+                return state.topObjects(error - 1);
+            }
+            return null;
+        }
+
+        public object call(params object[] args)
+        {
+            int error = LuaObject.pushTry(state.L);
+
+            for (int n = 0; args != null && n < args.Length; n++)
+            {
+                LuaObject.pushVar(L, args[n]);
+            }
+
+            if (innerCall(args != null ? args.Length : 0, error))
+            {
+                return state.topObjects(error - 1);
+            }
+
+            return null;
+        }
+
+        public bool TryCall(out object ret, params object[] args)
+        {
+            int error = LuaObject.pushTry(state.L);
+
+            for (int n = 0; args != null && n < args.Length; n++)
+            {
+                LuaObject.pushVar(L, args[n]);
+            }
+
+            if (innerCall(args != null ? args.Length : 0, error))
+            {
+                ret = state.topObjects(error - 1);
+                return true;
+            }
+            ret = null;
+            return false;
+        }
+
+        public object call(LuaTable self, params object[] args)
+        {
+            int error = LuaObject.pushTry(state.L);
+
+            LuaObject.pushVar(L, self);
+
+            for (int n = 0; args != null && n < args.Length; n++)
+            {
+                LuaObject.pushVar(L, args[n]);
+            }
+
+            if (innerCall((args != null ? args.Length : 0) + 1, error))
+            {
+                return state.topObjects(error - 1);
+            }
+
+            return null;
+        }
+
+        public T cast<T>() where T : class
+        {
+            return LuaObject.delegateCast(this, typeof(T)) as T;
+        }
+    }
+
+    public class LuaTable : LuaVar, IEnumerable<LuaTable.TablePair>
+    {
+
+
+        public struct TablePair
+        {
+            public object key;
+            public object value;
+        }
+        public LuaTable(IntPtr l, int r)
+            : base(l, r)
+        {
+        }
+
+        public LuaTable(LuaState l, int r)
+            : base(l, r)
+        {
+        }
+
+        public LuaTable(LuaState state)
+            : base(state, 0)
+        {
+
+            LuaDLL.lua_newtable(L);
+            valueref = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
+        }
+
+        // if wholekey is true, don't split key by '.'
+        public object get(string key, bool wholekey = false, bool rawget = false)
+        {
+            return state.getObject(valueref, key, wholekey, rawget);
+        }
+
+        // if wholekey is true, don't split key by '.'
+        public void set(string key, object v, bool wholekey = false, bool rawset = false)
+        {
+            state.setObject(valueref, key, v, wholekey, rawset);
+        }
+
+        public object this[string key]
+        {
+            get
+            {
+                return state.getObject(valueref, key);
+            }
+
+            set
+            {
+                state.setObject(valueref, key, value);
+            }
+        }
+
+        public object this[int index]
+        {
+            get
+            {
+                return state.getObject(valueref, index);
+            }
+
+            set
+            {
+                state.setObject(valueref, index, value);
+            }
+        }
+
+        public object invoke(string func, params object[] args)
+        {
+            using (LuaFunction f = (LuaFunction)this[func])
+            {
+                if (f != null)
+                {
+                    return f.call(args);
+                }
+            }
+            throw new Exception(string.Format("Can't find {0} function", func));
+        }
+
+        public int length()
+        {
+            int n = LuaDLL.lua_gettop(L);
+            push(L);
+            int l = LuaDLL.lua_rawlen(L, -1);
+            LuaDLL.lua_settop(L, n);
+            return l;
+        }
+
+        public bool IsEmpty
+        {
+            get
+            {
+                int top = LuaDLL.lua_gettop(L);
+                LuaDLL.lua_getref(L, this.Ref);
+                LuaDLL.lua_pushnil(L);
+                bool ret = LuaDLL.lua_next(L, -2) > 0;
+                LuaDLL.lua_settop(L, top);
+                return !ret;
+            }
+        }
+
+        public int GetInt(string key)
+        {
+            var rtn = this[key].ToString();
+            int r = 0;
+            int.TryParse(rtn, out r);
+            return r;
+        }
+
+        public string GetString(string key)
+        {
+            return (this[key].ToString());
+        }
+
+        public class Enumerator : IEnumerator<TablePair>, IDisposable
+        {
+            LuaTable t;
+            int indext = -1;
+            TablePair current = new TablePair();
+            int iterPhase = 0;
+
+            public Enumerator(LuaTable table)
+            {
+                t = table;
+                Reset();
+            }
+
+            public bool MoveNext()
+            {
+                if (indext < 0)
+                    return false;
+
+                if (iterPhase == 0)
+                {
+                    LuaDLL.lua_pushnil(t.L);
+                    iterPhase = 1;
+                }
+                else
+                    LuaDLL.lua_pop(t.L, 1);
+
+                //var ty = LuaDLL.lua_type(t.L, -1);
+                bool ret = LuaDLL.lua_next(t.L, indext) > 0;
+                if (!ret) iterPhase = 2;
+
+                return ret;
+            }
+
+            public void Reset()
+            {
+                LuaDLL.lua_getref(t.L, t.Ref);
+                indext = LuaDLL.lua_gettop(t.L);
+            }
+
+            public void Dispose()
+            {
+                if (iterPhase == 1)
+                    LuaDLL.lua_pop(t.L, 2);
+
+                LuaDLL.lua_remove(t.L, indext);
+            }
+
+            public TablePair Current
+            {
+                get
+                {
+                    current.key = LuaObject.checkVar(t.L, -2);
+                    current.value = LuaObject.checkVar(t.L, -1);
+                    return current;
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    return Current;
+                }
+            }
+        }
+
+        public IEnumerator<TablePair> GetEnumerator()
+        {
+            return new LuaTable.Enumerator(this);
+        }
+
+        IEnumerator IEnumerable.GetEnumerator()
+        {
+            return GetEnumerator();
+        }
+    }
+
+
+
+
+
+    public class LuaState : IDisposable
+    {
+        IntPtr l_;
+        int mainThread = 0;
+        internal WeakDictionary<int, LuaDelegate> delgateMap = new WeakDictionary<int, LuaDelegate>();
+#if LUA_DEBUG
+        static Dictionary<string, string> debugStringMap = new Dictionary<string, string>();
+#endif
+        public int cachedDelegateCount
+        {
+            get
+            {
+                return this.delgateMap.AliveCount;
+            }
+        }
+
+        public IntPtr L
+        {
+            get
+            {
+
+                if (!isMainThread())
+                {
+                    Logger.LogError("Can't access lua in bg thread");
+                    throw new Exception("Can't access lua in bg thread");
+                }
+
+                if (l_ == IntPtr.Zero)
+                {
+                    Logger.LogError("LuaState had been destroyed, can't used yet");
+                    throw new Exception("LuaState had been destroyed, can't used yet");
+                }
+
+                return l_;
+            }
+            set
+            {
+                l_ = value;
+            }
+        }
+
+        public IntPtr handle
+        {
+            get
+            {
+                return L;
+            }
+        }
+
+        public int Top { get { return LuaDLL.lua_gettop(L); } }
+
+        public delegate byte[] LoaderDelegate(string fn, ref string absoluteFn);
+        public delegate void OutputDelegate(string msg);
+        public delegate void PushVarDelegate(IntPtr l, object o);
+
+        public LoaderDelegate loaderDelegate;
+        public OutputDelegate logDelegate;
+        public OutputDelegate errorDelegate;
+        public OutputDelegate warnDelegate;
+
+
+        public delegate void UnRefAction(IntPtr l, int r);
+        struct UnrefPair
+        {
+            public UnRefAction act;
+            public int r;
+        }
+        Queue<UnrefPair> refQueue;
+        public int PCallCSFunctionRef = 0;
+        Dictionary<Type, PushVarDelegate> typePushMap = new Dictionary<Type, PushVarDelegate>();
+
+        public static Dictionary<IntPtr, LuaState> statemap = new Dictionary<IntPtr, LuaState>();
+        static IntPtr oldptr = IntPtr.Zero;
+        static LuaState oldstate = null;
+        static public LuaCSFunction errorFunc = new LuaCSFunction(errorReport);
+        int errorRef = 0;
+
+        internal LuaFunction newindex_func;
+        internal LuaFunction index_func;
+        const string DelgateTable = "__LuaDelegate";
+        bool openedSluaLib = false;
+
+        LuaFunction dumpstack;
+
+        public bool isMainThread()
+        {
+            return System.Threading.Thread.CurrentThread.ManagedThreadId == mainThread;
+        }
+
+#if !SLUA_STANDALONE
+        internal LuaSvrGameObject lgo;
+#endif
+
+        static public LuaState get(IntPtr l)
+        {
+            if (l == oldptr)
+                return oldstate;
+
+            LuaState ls;
+            if (statemap.TryGetValue(l, out ls))
+            {
+                oldptr = l;
+                oldstate = ls;
+                return ls;
+            }
+
+            LuaDLL.lua_getglobal(l, "__main_state");
+            if (LuaDLL.lua_isnil(l, -1))
+            {
+                LuaDLL.lua_pop(l, 1);
+                return null;
+            }
+
+            IntPtr nl = LuaDLL.lua_touserdata(l, -1);
+            LuaDLL.lua_pop(l, 1);
+            if (nl != l)
+                return get(nl);
+            return null;
+        }
+
+
+
+        public void openSluaLib()
+        {
+
+            LuaArray.init(L);
+            LuaVarObject.init(L);
+
+            LuaDLL.lua_newtable(L);
+            LuaDLL.lua_setglobal(L, DelgateTable);
+
+#if !SLUA_STANDALONE
+            LuaTimer.reg(L);
+            LuaCoroutine.reg(L, lgo);
+#endif
+            Lua_SLua_ByteArray.reg(L);
+            Helper.reg(L);
+
+            openedSluaLib = true;
+        }
+
+        public void openExtLib()
+        {
+            LuaDLL.luaS_openextlibs(L);
+            LuaSocketMini.reg(L);
+        }
+
+        public void bindUnity()
+        {
+            if (!openedSluaLib)
+                openSluaLib();
+
+            LuaSvr.doBind(L);
+            LuaValueType.reg(L);
+        }
+
+        public IEnumerator bindUnity(Action<int> _tick, Action complete)
+        {
+            if (!openedSluaLib)
+                openSluaLib();
+
+            yield return LuaSvr.doBind(L, _tick, complete);
+            LuaValueType.reg(L);
+        }
+
+        static public LuaState main
+        {
+            get
+            {
+                return LuaSvr.mainState;
+            }
+        }
+
+        public string Name
+        {
+            get;
+            set;
+        }
+
+        public LuaState()
+        {
+            if (mainThread == 0)
+                mainThread = System.Threading.Thread.CurrentThread.ManagedThreadId;
+
+            L = LuaDLL.luaL_newstate();
+            statemap[L] = this;
+
+
+
+            refQueue = new Queue<UnrefPair>();
+            ObjectCache.make(L);
+
+            LuaDLL.lua_atpanic(L, panicCallback);
+
+            LuaDLL.luaL_openlibs(L);
+
+            string PCallCSFunction = @"
+local assert = assert
+local function check(ok,...)
+	assert(ok, ...)
+	return ...
+end
+return function(cs_func)
+	return function(...)
+		return check(cs_func(...))
+	end
+end
+";
+
+            LuaDLL.lua_dostring(L, PCallCSFunction);
+            PCallCSFunctionRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
+
+            string newindexfun = @"
+
+local getmetatable=getmetatable
+local rawget=rawget
+local error=error
+local type=type
+local function newindex(ud,k,v)
+    local t=getmetatable(ud)
+    repeat
+        local h=rawget(t,k)
+        if h then
+            if h[2] then
+                h[2](ud,v)
+                return
+            else
+                error('property '..k..' is read only')
+            end
+        end
+        t=rawget(t,'__parent')
+    until t==nil
+    error('can not find '..k)
+end
+
+return newindex
+";
+
+            string indexfun = @"
+local type=type
+local error=error
+local rawget=rawget
+local getmetatable=getmetatable
+local function index(ud,k)
+    local t=getmetatable(ud)
+    repeat
+        local fun=rawget(t,k)
+        local tp=type(fun)
+        if tp=='function' then
+            return fun
+        elseif tp=='table' then
+            local f=fun[1]
+            if f then
+                return f(ud)
+            else
+                error('property '..k..' is write only')
+            end
+        end
+        t = rawget(t,'__parent')
+    until t==nil
+    error('Can not find '..k)
+end
+
+return index
+";
+
+            newindex_func = (LuaFunction)doString(newindexfun);
+            index_func = (LuaFunction)doString(indexfun);
+
+            setupPushVar();
+
+            pcall(L, init);
+
+            createGameObject();
+        }
+
+        void createGameObject()
+        {
+#if !SLUA_STANDALONE
+            if (lgo == null
+#if UNITY_EDITOR
+                && UnityEditor.EditorApplication.isPlaying
+#endif
+            )
+            {
+                GameObject go = new GameObject("LuaSvrProxy");
+                lgo = go.AddComponent<LuaSvrGameObject>();
+                GameObject.DontDestroyOnLoad(go);
+                lgo.onUpdate = this.tick;
+                lgo.state = this;
+            }
+#endif
+        }
+
+        void destroyGameObject()
+        {
+#if !SLUA_STANDALONE
+#if UNITY_EDITOR
+            if (UnityEditor.EditorApplication.isPlaying)
+#endif
+            {
+                if (lgo != null)
+                {
+                    GameObject go = lgo.gameObject;
+                    GameObject.Destroy(lgo);
+                    GameObject.Destroy(go);
+                }
+            }
+#endif
+        }
+
+        virtual protected void tick()
+        {
+            checkRef();
+        }
+
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static int init(IntPtr L)
+        {
+            LuaDLL.lua_pushlightuserdata(L, L);
+            LuaDLL.lua_setglobal(L, "__main_state");
+
+            LuaDLL.lua_pushcfunction(L, print);
+            LuaDLL.lua_setglobal(L, "print");
+
+            LuaDLL.lua_pushcfunction(L, printerror);
+            LuaDLL.lua_setglobal(L, "printerror");
+
+            LuaDLL.lua_pushcfunction(L, warn);
+            LuaDLL.lua_setglobal(L, "warn");
+
+#if LUA_DEBUG
+            LuaDLL.lua_pushcfunction(L, getStringFromMD5); 
+            LuaDLL.lua_setglobal(L, "getStringFromMD5");
+#endif
+
+            pushcsfunction(L, import);
+            LuaDLL.lua_setglobal(L, "import");
+
+
+            string resumefunc = @"
+local resume = coroutine.resume
+local function check(co, ok, err, ...)
+	if not ok then UnityEngine.Debug.LogError(debug.traceback(co,err)) end
+	return ok, err, ...
+end
+coroutine.resume=function(co,...)
+	return check(co, resume(co,...))
+end
+";
+
+            // overload resume function for report error
+            var state = LuaState.get(L);
+            state.doString(resumefunc);
+
+            // https://github.com/pkulchenko/MobDebug/blob/master/src/mobdebug.lua#L290
+            // Dump only 3 stacks, or it will return null (I don't know why)
+            string dumpstackfunc = @"
+local dumpstack=function()
+  function vars(f)
+    local dump = """"
+    local func = debug.getinfo(f, ""f"").func
+    local i = 1
+    local locals = {}
+    -- get locals
+    while true do
+      local name, value = debug.getlocal(f, i)
+      if not name then break end
+      if string.sub(name, 1, 1) ~= '(' then 
+        dump = dump ..  ""    "" .. name .. ""="" .. tostring(value) .. ""\n"" 
+      end
+      i = i + 1
+    end
+    -- get varargs (these use negative indices)
+    i = 1
+    while true do
+      local name, value = debug.getlocal(f, -i)
+      -- `not name` should be enough, but LuaJIT 2.0.0 incorrectly reports `(*temporary)` names here
+      if not name or name ~= ""(*vararg)"" then break end
+      dump = dump ..  ""    "" .. name .. ""="" .. tostring(value) .. ""\n""
+      i = i + 1
+    end
+    -- get upvalues
+    i = 1
+    while func do -- check for func as it may be nil for tail calls
+      local name, value = debug.getupvalue(func, i)
+      if not name then break end
+      dump = dump ..  ""    "" .. name .. ""="" .. tostring(value) .. ""\n""
+      i = i + 1
+    end
+    return dump
+  end
+  local dump = """"
+  for i = 3, 100 do
+    local source = debug.getinfo(i, ""S"")
+    if not source then break end
+    dump = dump .. ""- stack"" .. tostring(i-2) .. ""\n""
+    dump = dump .. vars(i+1)
+    if source.what == 'main' then break end
+  end
+  return dump
+end
+return dumpstack
+";
+
+            state.dumpstack = state.doString(dumpstackfunc) as LuaFunction;
+
+#if UNITY_ANDROID
+            // fix android performance drop with JIT on according to luajit mailist post
+            state.doString("if jit then require('jit.opt').start('sizemcode=256','maxmcode=256') for i=1,1000 do end end");
+#endif
+
+            pushcsfunction(L, dofile);
+            LuaDLL.lua_setglobal(L, "dofile");
+
+            pushcsfunction(L, loadfile);
+            LuaDLL.lua_setglobal(L, "loadfile");
+
+            pushcsfunction(L, loadfile_env);
+            LuaDLL.lua_setglobal(L, "loadfile_env");
+
+            pushcsfunction(L, loader);
+            int loaderFunc = LuaDLL.lua_gettop(L);
+
+            LuaDLL.lua_getglobal(L, "package");
+#if LUA_5_3
+            LuaDLL.lua_getfield(L, -1, "searchers");
+#else
+            LuaDLL.lua_getfield(L, -1, "loaders");
+#endif
+            int loaderTable = LuaDLL.lua_gettop(L);
+
+            // Shift table elements right
+            for (int e = LuaDLL.lua_rawlen(L, loaderTable) + 1; e > 2; e--)
+            {
+                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
+                LuaDLL.lua_rawseti(L, loaderTable, e);
+            }
+            LuaDLL.lua_pushvalue(L, loaderFunc);
+            LuaDLL.lua_rawseti(L, loaderTable, 2);
+            LuaDLL.lua_settop(L, 0);
+            return 0;
+        }
+
+        void Close()
+        {
+            destroyGameObject();
+            LuaTimer.DeleteAll(L);
+
+            if (L != IntPtr.Zero)
+            {
+                Logger.Log("Finalizing Lua State.");
+                // be careful, if you close lua vm, make sure you don't use lua state again,
+                // comment this line as default for avoid unexpected crash.
+                LuaDLL.lua_close(L);
+
+                ObjectCache.del(L);
+                ObjectCache.clear();
+
+                statemap.Remove(L);
+
+                oldptr = IntPtr.Zero;
+                oldstate = null;
+                L = IntPtr.Zero;
+            }
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            System.GC.Collect();
+            System.GC.WaitForPendingFinalizers();
+        }
+
+        public virtual void Dispose(bool dispose)
+        {
+            if (dispose)
+            {
+                Close();
+            }
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        public static int errorReport(IntPtr L)
+        {
+            s.Length = 0;
+            LuaDLL.lua_getglobal(L, "debug");
+            LuaDLL.lua_getfield(L, -1, "traceback");
+            LuaDLL.lua_pushvalue(L, 1);
+            LuaDLL.lua_pushnumber(L, 2);
+            LuaDLL.lua_call(L, 2, 1);
+            LuaDLL.lua_remove(L, -2);
+            s.Append(LuaDLL.lua_tostring(L, -1));
+            LuaDLL.lua_pop(L, 1);
+
+            LuaState state = LuaState.get(L);
+            state.dumpstack.push(L);
+            LuaDLL.lua_call(L, 0, 1);
+            s.Append("\n");
+            s.Append(LuaDLL.lua_tostring(L, -1));
+            LuaDLL.lua_pop(L, 1);
+
+            string str = s.ToString();
+            Logger.LogError(str, true);
+            if (state.errorDelegate != null)
+            {
+                state.errorDelegate(str);
+            }
+
+            return 0;
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int import(IntPtr l)
+        {
+            try
+            {
+                LuaDLL.luaL_checktype(l, 1, LuaTypes.LUA_TSTRING);
+                string str = LuaDLL.lua_tostring(l, 1);
+
+                string[] ns = str.Split('.');
+
+                LuaDLL.lua_pushglobaltable(l);
+
+                for (int n = 0; n < ns.Length; n++)
+                {
+                    LuaDLL.lua_getfield(l, -1, ns[n]);
+                    if (!LuaDLL.lua_istable(l, -1))
+                    {
+                        return LuaObject.error(l, "expect {0} is type table", ns);
+                    }
+                    LuaDLL.lua_remove(l, -2);
+                }
+
+                LuaDLL.lua_pushnil(l);
+                while (LuaDLL.lua_next(l, -2) != 0)
+                {
+                    string key = LuaDLL.lua_tostring(l, -2);
+                    LuaDLL.lua_getglobal(l, key);
+                    if (!LuaDLL.lua_isnil(l, -1))
+                    {
+                        LuaDLL.lua_pop(l, 1);
+                        return LuaObject.error(l, "{0} had existed, import can't overload it.", key);
+                    }
+                    LuaDLL.lua_pop(l, 1);
+                    LuaDLL.lua_setglobal(l, key);
+                }
+
+                LuaDLL.lua_pop(l, 1);
+
+                LuaObject.pushValue(l, true);
+                return 1;
+            }
+            catch (Exception e)
+            {
+                return LuaObject.error(l, e);
+            }
+        }
+
+        internal static void pcall(IntPtr l, LuaCSFunction f)
+        {
+            int err = LuaObject.pushTry(l);
+            LuaDLL.lua_pushcfunction(l, f);
+            if (LuaDLL.lua_pcall(l, 0, 0, err) != 0)
+            {
+                LuaDLL.lua_pop(l, 1);
+            }
+            LuaDLL.lua_remove(l, err);
+        }
+
+
+
+        static public bool printTrace = true;
+        private static StringBuilder s = new StringBuilder();
+
+        static string stackString(IntPtr L, int n)
+        {
+            s.Length = 0;
+
+            LuaDLL.lua_getglobal(L, "tostring");
+
+            for (int i = 1; i <= n; i++)
+            {
+                if (i > 1)
+                {
+                    s.Append("    ");
+                }
+
+                LuaDLL.lua_pushvalue(L, -1);
+                LuaDLL.lua_pushvalue(L, i);
+
+                LuaDLL.lua_call(L, 1, 1);
+                s.Append(LuaDLL.lua_tostring(L, -1));
+                LuaDLL.lua_pop(L, 1);
+            }
+
+            if (printTrace
+#if UNITY_EDITOR
+                 && SLuaSetting.Instance.PrintTrace
+#endif
+               )
+            {
+                LuaDLL.lua_getglobal(L, "debug");
+                LuaDLL.lua_getfield(L, -1, "traceback");
+                LuaDLL.lua_call(L, 0, 1);
+                s.Append("\n");
+                s.Append(LuaDLL.lua_tostring(L, -1));
+            }
+
+            return s.ToString();
+        }
+
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int print(IntPtr L)
+        {
+#if SOV_RELEASE
+            return 0;
+#endif
+
+            int n = LuaDLL.lua_gettop(L);
+            string str = stackString(L, n);
+            Logger.Log(str, true);
+
+            LuaState state = LuaState.get(L);
+            if (state.logDelegate != null)
+            {
+                state.logDelegate(s.ToString());
+            }
+
+            LuaDLL.lua_settop(L, n);
+
+            return 0;
+        }
+
+        // copy from print()
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int printerror(IntPtr L)
+        {
+            int n = LuaDLL.lua_gettop(L);
+            string str = stackString(L, n);
+            Logger.LogError(str, true);
+
+            LuaState state = LuaState.get(L);
+            if (state.errorDelegate != null)
+            {
+                state.errorDelegate(s.ToString());
+            }
+
+            LuaDLL.lua_settop(L, n);
+
+            return 0;
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int warn(IntPtr L)
+        {
+            int n = LuaDLL.lua_gettop(L);
+            string str = stackString(L, n);
+            Logger.LogWarning(str);
+            LuaState state = LuaState.get(L);
+            if (state.warnDelegate != null)
+            {
+                state.warnDelegate(s.ToString());
+            }
+
+            LuaDLL.lua_settop(L, n);
+            return 0;
+        }
+
+
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int loadfile(IntPtr L)
+        {
+            loader(L);
+
+            if (LuaDLL.lua_isnil(L, -1))
+            {
+                string fileName = LuaDLL.lua_tostring(L, 1);
+                return LuaObject.error(L, "Can't find {0}", fileName);
+            }
+            return 2;
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int loadfile_env(IntPtr L)
+        {
+            LuaState state = LuaState.get(L);
+            string fileName = LuaDLL.lua_tostring(L, 1);
+            LuaDLL.luaL_checktype(L, 2, LuaTypes.LUA_TTABLE);
+            string absoluteFn = "";
+            byte[] bytes = state.loadFile(fileName, ref absoluteFn);
+            if (bytes != null)
+            {
+                if (LuaDLL.luaL_loadbuffer(L, bytes, bytes.Length, "@" + fileName) == 0)
+                {
+                    LuaDLL.lua_pushvalue(L, 2);
+                    LuaDLL.lua_setupvalue(L, -2, 1);
+                    LuaObject.pushValue(L, true);
+                    LuaDLL.lua_insert(L, -2);
+                    return 2;
+                }
+                else
+                {
+                    string errstr = LuaDLL.lua_tostring(L, -1);
+                    return LuaObject.error(L, errstr);
+                }
+            }
+            else
+            {
+                LuaObject.pushValue(L, true);
+                LuaDLL.lua_pushnil(L);
+                return LuaObject.error(L, "Can't find {0}", fileName);
+            }
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int dofile(IntPtr L)
+        {
+            int n = LuaDLL.lua_gettop(L);
+
+            loader(L);
+            if (!LuaDLL.lua_toboolean(L, -2))
+            {
+                return 2;
+            }
+            else
+            {
+                if (LuaDLL.lua_isnil(L, -1))
+                {
+                    string fileName = LuaDLL.lua_tostring(L, 1);
+                    return LuaObject.error(L, "Can't find {0}", fileName);
+                }
+                int k = LuaDLL.lua_gettop(L);
+                LuaDLL.lua_call(L, 0, LuaDLL.LUA_MULTRET);
+                k = LuaDLL.lua_gettop(L);
+                return k - n;
+            }
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static public int panicCallback(IntPtr l)
+        {
+            string reason = string.Format("unprotected error in call to Lua API ({0})", LuaDLL.lua_tostring(l, -1));
+            throw new Exception(reason);
+        }
+
+        static public void pushcsfunction(IntPtr L, LuaCSFunction function)
+        {
+            LuaDLL.lua_getref(L, get(L).PCallCSFunctionRef);
+            LuaDLL.lua_pushcclosure(L, function, 0);
+            LuaDLL.lua_call(L, 1, 1);
+        }
+#if LUA_DEBUG
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        static public int getStringFromMD5(IntPtr L) {
+			string str = LuaDLL.lua_tostring(L, -1);
+            string destString = "";
+
+            if (debugStringMap.ContainsKey(str))
+            {
+                destString = debugStringMap[str];
+            }
+            LuaObject.pushValue(L, destString);
+            return 1;
+        }
+
+        static public string getStringMD5(string str)
+        {
+            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
+            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);
+            byte[] md5Data = md5.ComputeHash(bytes, 0, bytes.Length);
+            md5.Clear();
+
+            string destString = "";
+            for (int i = 0; i < md5Data.Length; i++)
+            {
+                destString += System.Convert.ToString(md5Data[i], 16).PadLeft(2, '0');
+            }
+            destString = destString.PadLeft(32, '0');
+            return destString;
+        }
+#endif
+
+        public object doString(string str)
+        {
+#if LUA_DEBUG
+            //get str's md5 string
+            string stringMd5 = getStringMD5(str);
+            debugStringMap.Add(stringMd5, str);
+            return doString(str, stringMd5);
+#else
+            return doString(str, "temp buffer");
+#endif
+        }
+
+        public object doString(string str, string chunkname)
+        {
+            byte[] bytes = Encoding.UTF8.GetBytes(str);
+
+            object obj;
+            if (doBuffer(bytes, chunkname, out obj))
+                return obj;
+            return null; ;
+        }
+
+        [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
+        internal static int loader(IntPtr L)
+        {
+            LuaState state = LuaState.get(L);
+            string fileName = LuaDLL.lua_tostring(L, 1);
+            string absoluteFn = "";
+            byte[] bytes = state.loadFile(fileName, ref absoluteFn);
+            if (bytes != null)
+            {
+                bytes = CleanUTF8Bom(bytes);
+#if LUA_DEBUG
+				if (absoluteFn != "") {
+					fileName = absoluteFn;
+				}
+#endif
+                if (LuaDLL.luaL_loadbuffer(L, bytes, bytes.Length, "@" + fileName) == 0)
+                {
+                    LuaObject.pushValue(L, true);
+                    LuaDLL.lua_insert(L, -2);
+                    return 2;
+                }
+                else
+                {
+                    string errstr = LuaDLL.lua_tostring(L, -1);
+                    return LuaObject.error(L, errstr);
+                }
+            }
+            LuaObject.pushValue(L, true);
+            LuaDLL.lua_pushnil(L);
+            return 2;
+        }
+
+        public object doFile(string fn)
+        {
+            string absoluteFn = "";
+            byte[] bytes = loadFile(fn, ref absoluteFn);
+            if (bytes == null)
+            {
+                Logger.LogError(string.Format("Can't find {0}", fn));
+                return null;
+            }
+
+#if LUA_DEBUG
+			if (absoluteFn != "") {
+				fn = absoluteFn;
+			}
+#endif
+            object obj;
+            if (doBuffer(bytes, "@" + fn, out obj))
+                return obj;
+            return null;
+        }
+
+        /// <summary>
+        /// Ensure remove BOM from bytes
+        /// </summary>
+        /// <param name="bytes"></param>
+        /// <returns></returns>
+        public static byte[] CleanUTF8Bom(byte[] bytes)
+        {
+            if (bytes.Length > 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF)
+            {
+                var oldBytes = bytes;
+                bytes = new byte[bytes.Length - 3];
+                Array.Copy(oldBytes, 3, bytes, 0, bytes.Length);
+            }
+            return bytes;
+        }
+
+        public bool doBuffer(byte[] bytes, string fn, out object ret)
+        {
+            // ensure no utf-8 bom, LuaJIT can read BOM, but Lua cannot!
+            bytes = CleanUTF8Bom(bytes);
+            ret = null;
+            int errfunc = LuaObject.pushTry(L);
+            if (LuaDLL.luaL_loadbuffer(L, bytes, bytes.Length, fn) == 0)
+            {
+                if (LuaDLL.lua_pcall(L, 0, LuaDLL.LUA_MULTRET, errfunc) != 0)
+                {
+                    LuaDLL.lua_pop(L, 2);
+                    return false;
+                }
+                LuaDLL.lua_remove(L, errfunc); // pop error function
+                ret = topObjects(errfunc - 1);
+                return true;
+            }
+            string err = LuaDLL.lua_tostring(L, -1);
+            LuaDLL.lua_pop(L, 2);
+            throw new Exception(err);
+        }
+
+#if UNITY_EDITOR
+        static TextAsset loadAsset(string fn)
+        {
+            TextAsset asset;
+#if UNITY_5
+			asset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset> (fn);
+#else
+            asset = (TextAsset)UnityEditor.AssetDatabase.LoadAssetAtPath(fn, typeof(TextAsset));
+#endif
+            return asset;
+        }
+#endif
+
+        internal byte[] loadFile(string fn, ref string absoluteFn)
+        {
+            try
+            {
+                byte[] bytes;
+                if (loaderDelegate != null)
+                    bytes = loaderDelegate(fn, ref absoluteFn);
+                else
+                {
+#if !SLUA_STANDALONE
+                    fn = fn.Replace(".", "/");
+
+                    TextAsset asset = null;
+
+#if UNITY_EDITOR
+
+
+                    if (SLuaSetting.Instance.jitType == JITBUILDTYPE.none)
+                    {
+                        asset = (TextAsset)Resources.Load(fn);
+                    }
+                    else if (SLuaSetting.Instance.jitType == JITBUILDTYPE.X86)
+                    {
+                        asset = loadAsset("Assets/Slua/jit/jitx86/" + fn + ".bytes");
+                    }
+                    else if (SLuaSetting.Instance.jitType == JITBUILDTYPE.X64)
+                    {
+                        asset = loadAsset("Assets/Slua/jit/jitx64/" + fn + ".bytes");
+                    }
+                    else if (SLuaSetting.Instance.jitType == JITBUILDTYPE.GC64)
+                    {
+                        asset = loadAsset("Assets/Slua/jit/jitgc64/" + fn + ".bytes");
+                    }
+
+#if LUA_DEBUG
+					//get asset's absolute path
+					string assetFn = UnityEditor.AssetDatabase.GetAssetPath(asset);
+					if (assetFn != ""){
+						//find out asset path, remove assetFn's first "Asset/"
+						int idx = assetFn.IndexOf("/");
+						if(idx > 0){
+							absoluteFn = Application.dataPath + assetFn.Substring(idx);
+						}
+					}
+#endif
+#else
+					asset = (TextAsset)Resources.Load(fn);
+#endif
+
+                    if (asset == null)
+                        return null;
+                    bytes = asset.bytes;
+#else
+					bytes = File.ReadAllBytes(fn);
+#endif
+                }
+                return bytes;
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
+            }
+        }
+
+
+        internal object getObject(string key, bool wholekey = false, bool rawget = false)
+        {
+            LuaDLL.lua_pushglobaltable(L);
+            object o;
+            if (wholekey)
+                o = getObject(new string[] { key }, rawget);
+            else
+                o = getObject(key.Split(new char[] { '.' }), rawget);
+            LuaDLL.lua_pop(L, 1);
+            return o;
+        }
+
+        internal void setObject(string key, object v, bool wholekey = false, bool rawset = false)
+        {
+            LuaDLL.lua_pushglobaltable(L);
+            if (wholekey)
+                setObject(new string[] { key }, v, rawset);
+            else
+                setObject(key.Split(new char[] { '.' }), v, rawset);
+            LuaDLL.lua_pop(L, 1);
+        }
+
+        internal object getObject(string[] remainingPath, bool rawget = false)
+        {
+            object returnValue = null;
+            for (int i = 0; i < remainingPath.Length; i++)
+            {
+                LuaDLL.lua_pushstring(L, remainingPath[i]);
+                if (rawget)
+                    LuaDLL.lua_rawget(L, -2);
+                else
+                    LuaDLL.lua_gettable(L, -2);
+                returnValue = this.getObject(L, -1);
+                LuaDLL.lua_remove(L, -2);
+                if (returnValue == null) break;
+            }
+            return returnValue;
+        }
+
+
+        internal object getObject(int reference, string field, bool wholekey = false, bool rawget = false)
+        {
+            int oldTop = LuaDLL.lua_gettop(L);
+            LuaDLL.lua_getref(L, reference);
+            object returnValue;
+            if (wholekey)
+                returnValue = getObject(new string[] { field }, rawget);
+            else
+                returnValue = getObject(field.Split(new char[] { '.' }), rawget);
+            LuaDLL.lua_settop(L, oldTop);
+            return returnValue;
+        }
+
+        internal object getObject(int reference, int index, bool rawget = false)
+        {
+            if (index >= 1)
+            {
+                LuaDLL.lua_getref(L, reference);
+                if (rawget)
+                    LuaDLL.lua_rawgeti(L, -1, index);
+                else
+                {
+                    LuaDLL.lua_pushinteger(L, index);
+                    LuaDLL.lua_gettable(L, -2);
+                }
+                object returnValue = getObject(L, -1);
+                LuaDLL.lua_pop(L, 2);
+                return returnValue;
+            }
+            else
+            {
+                LuaDLL.lua_getref(L, reference);
+                LuaDLL.lua_pushinteger(L, index);
+                LuaDLL.lua_gettable(L, -2);
+                object returnValue = getObject(L, -1);
+                LuaDLL.lua_pop(L, 2);
+                return returnValue;
+            }
+        }
+
+        internal object getObject(int reference, object field, bool rawget = false)
+        {
+            int oldTop = LuaDLL.lua_gettop(L);
+            LuaDLL.lua_getref(L, reference);
+            LuaObject.pushObject(L, field);
+            if (rawget)
+                LuaDLL.lua_rawget(L, -2);
+            else
+                LuaDLL.lua_gettable(L, -2);
+            object returnValue = getObject(L, -1);
+            LuaDLL.lua_settop(L, oldTop);
+            return returnValue;
+        }
+
+        internal void setObject(string[] remainingPath, object o, bool rawset = false)
+        {
+            int top = LuaDLL.lua_gettop(L);
+            for (int i = 0; i < remainingPath.Length - 1; i++)
+            {
+                LuaDLL.lua_pushstring(L, remainingPath[i]);
+                if (rawset)
+                    LuaDLL.lua_rawget(L, -2);
+                else
+                    LuaDLL.lua_gettable(L, -2);
+            }
+            LuaDLL.lua_pushstring(L, remainingPath[remainingPath.Length - 1]);
+            LuaObject.pushVar(L, o);
+            if (rawset)
+                LuaDLL.lua_rawset(L, -3);
+            else
+                LuaDLL.lua_settable(L, -3);
+            LuaDLL.lua_settop(L, top);
+        }
+
+
+        internal void setObject(int reference, string field, object o, bool wholekey = false, bool rawset = false)
+        {
+            int oldTop = LuaDLL.lua_gettop(L);
+            LuaDLL.lua_getref(L, reference);
+            if (wholekey)
+                setObject(new string[] { field }, o, rawset);
+            else
+                setObject(field.Split(new char[] { '.' }), o, rawset);
+            LuaDLL.lua_settop(L, oldTop);
+        }
+
+        internal void setObject(int reference, int index, object o, bool rawset = false)
+        {
+            if (index >= 1)
+            {
+                LuaDLL.lua_getref(L, reference);
+
+                if (rawset)
+                {
+                    LuaObject.pushVar(L, o);
+                    LuaDLL.lua_rawseti(L, -2, index);
+                }
+                else
+                {
+                    LuaDLL.lua_pushinteger(L, index);
+                    LuaObject.pushVar(L, o);
+                    LuaDLL.lua_settable(L, -3);
+                }
+                LuaDLL.lua_pop(L, 1);
+            }
+            else
+            {
+                LuaDLL.lua_getref(L, reference);
+                LuaDLL.lua_pushinteger(L, index);
+                LuaObject.pushVar(L, o);
+                if (rawset)
+                    LuaDLL.lua_rawset(L, -3);
+                else
+                    LuaDLL.lua_settable(L, -3);
+                LuaDLL.lua_pop(L, 1);
+            }
+        }
+
+        internal void setObject(int reference, object field, object o, bool rawset)
+        {
+            int oldTop = LuaDLL.lua_gettop(L);
+            LuaDLL.lua_getref(L, reference);
+            LuaObject.pushObject(L, field);
+            LuaObject.pushObject(L, o);
+            LuaDLL.lua_settable(L, -3);
+            LuaDLL.lua_settop(L, oldTop);
+        }
+
+        internal object topObjects(int from)
+        {
+            int top = LuaDLL.lua_gettop(L);
+            int nArgs = top - from;
+            if (nArgs == 0)
+                return null;
+            else if (nArgs == 1)
+            {
+                object o = LuaObject.checkVar(L, top);
+                LuaDLL.lua_pop(L, 1);
+                return o;
+            }
+            else
+            {
+                object[] o = new object[nArgs];
+                for (int n = 1; n <= nArgs; n++)
+                {
+                    o[n - 1] = LuaObject.checkVar(L, from + n);
+
+                }
+                LuaDLL.lua_settop(L, from);
+                return o;
+            }
+        }
+
+        object getObject(IntPtr l, int p)
+        {
+            p = LuaDLL.lua_absindex(l, p);
+            return LuaObject.checkVar(l, p);
+        }
+
+        public LuaFunction getFunction(string key)
+        {
+            return (LuaFunction)this[key];
+        }
+
+        public LuaTable getTable(string key)
+        {
+            return (LuaTable)this[key];
+        }
+
+
+        public object this[string path]
+        {
+            get
+            {
+                return this.getObject(path);
+            }
+            set
+            {
+                this.setObject(path, value);
+            }
+        }
+
+        public void gcRef(UnRefAction act, int r)
+        {
+            UnrefPair u = new UnrefPair();
+            u.act = act;
+            u.r = r;
+            lock (refQueue)
+            {
+                refQueue.Enqueue(u);
+            }
+        }
+
+        public void checkRef()
+        {
+            int cnt = 0;
+            // fix il2cpp lock issue on iOS
+            lock (refQueue)
+            {
+                cnt = refQueue.Count;
+            }
+
+            var l = L;
+            for (int n = 0; n < cnt; n++)
+            {
+                UnrefPair u;
+                lock (refQueue)
+                {
+                    u = refQueue.Dequeue();
+                }
+                u.act(l, u.r);
+            }
+        }
+
+        public void regPushVar(Type t, PushVarDelegate d) { typePushMap[t] = d; }
+        public bool tryGetTypePusher(Type t, out PushVarDelegate d) { return typePushMap.TryGetValue(t, out d); }
+
+        void setupPushVar()
+        {
+            typePushMap[typeof(float)] = (IntPtr L, object o) =>
+            {
+                LuaDLL.lua_pushnumber(L, (float)o);
+            };
+            typePushMap[typeof(double)] = (IntPtr L, object o) =>
+            {
+                LuaDLL.lua_pushnumber(L, (double)o);
+            };
+
+            typePushMap[typeof(int)] =
+                (IntPtr L, object o) =>
+                {
+                    LuaDLL.lua_pushinteger(L, (int)o);
+                };
+
+            typePushMap[typeof(uint)] =
+                (IntPtr L, object o) =>
+                {
+                    LuaDLL.lua_pushnumber(L, Convert.ToUInt32(o));
+                };
+
+            typePushMap[typeof(short)] =
+                (IntPtr L, object o) =>
+                {
+                    LuaDLL.lua_pushinteger(L, (short)o);
+                };
+
+            typePushMap[typeof(ushort)] =
+               (IntPtr L, object o) =>
+               {
+                   LuaDLL.lua_pushinteger(L, (ushort)o);
+               };
+
+            typePushMap[typeof(sbyte)] =
+               (IntPtr L, object o) =>
+               {
+                   LuaDLL.lua_pushinteger(L, (sbyte)o);
+               };
+
+            typePushMap[typeof(byte)] =
+               (IntPtr L, object o) =>
+               {
+                   LuaDLL.lua_pushinteger(L, (byte)o);
+               };
+
+
+            typePushMap[typeof(Int64)] =
+                typePushMap[typeof(UInt64)] =
+                (IntPtr L, object o) =>
+                {
+#if LUA_5_3
+                    LuaDLL.lua_pushinteger(L, System.Convert.ToInt64(o));
+#else
+                    LuaDLL.lua_pushnumber(L, System.Convert.ToDouble(o));
+#endif
+                };
+
+            typePushMap[typeof(string)] = (IntPtr L, object o) =>
+            {
+                LuaDLL.lua_pushstring(L, (string)o);
+            };
+
+            typePushMap[typeof(bool)] = (IntPtr L, object o) =>
+            {
+                LuaDLL.lua_pushboolean(L, (bool)o);
+            };
+
+            typePushMap[typeof(LuaTable)] =
+                typePushMap[typeof(LuaFunction)] =
+                typePushMap[typeof(LuaThread)] =
+                (IntPtr L, object o) =>
+                {
+                    ((LuaVar)o).push(L);
+                };
+
+            typePushMap[typeof(LuaCSFunction)] = (IntPtr L, object o) =>
+            {
+                LuaObject.pushValue(L, (LuaCSFunction)o);
+            };
+
+#if !SLUA_STANDALONE
+            regPushVar(typeof(UnityEngine.Vector2), (IntPtr L, object o) => { LuaObject.pushValue(L, (UnityEngine.Vector2)o); });
+            regPushVar(typeof(UnityEngine.Vector3), (IntPtr L, object o) => { LuaObject.pushValue(L, (UnityEngine.Vector3)o); });
+            regPushVar(typeof(UnityEngine.Vector4), (IntPtr L, object o) => { LuaObject.pushValue(L, (UnityEngine.Vector4)o); });
+            regPushVar(typeof(UnityEngine.Quaternion), (IntPtr L, object o) => { LuaObject.pushValue(L, (UnityEngine.Quaternion)o); });
+            regPushVar(typeof(UnityEngine.Color), (IntPtr L, object o) => { LuaObject.pushValue(L, (UnityEngine.Color)o); });
+#endif
+        }
+
+        public int pushTry(IntPtr L)
+        {
+            if (errorRef == 0)
+            {
+                LuaDLL.lua_pushcfunction(L, LuaState.errorFunc);
+                LuaDLL.lua_pushvalue(L, -1);
+                errorRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
+            }
+            else
+            {
+                LuaDLL.lua_getref(L, errorRef);
+            }
+            return LuaDLL.lua_gettop(L);
+        }
+
+        public object run(string entry)
+        {
+            using (LuaFunction func = getFunction(entry))
+            {
+                if (func != null)
+                    return func.call();
+            }
+            return null;
+        }
+    }
+}

+ 1 - 1
server_battle/ServerLib/ServerLib.csproj

@@ -9,7 +9,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>ServerLib</RootNamespace>
     <AssemblyName>ServerLib</AssemblyName>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <TargetFrameworkProfile />
   </PropertyGroup>

+ 8 - 0
server_battle/打包.bat

@@ -0,0 +1,8 @@
+@echo off
+set MSBUILD="%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
+if not exist %MSBUILD% set MSBUILD="%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
+%MSBUILD% server_battle.sln /t:Rebuild /p:Configuration=Release /v:m
+if errorlevel 1 pause & exit /b 1
+echo.
+echo 打包完成: %~dp0_output.battle.server
+pause