修改为luban
This commit is contained in:
441
CODELY.md
Normal file
441
CODELY.md
Normal file
@@ -0,0 +1,441 @@
|
|||||||
|
# Fishing2Server 项目文档
|
||||||
|
|
||||||
|
## 项目概述
|
||||||
|
|
||||||
|
Fishing2Server 是一个基于 **Fantasy.Net** 框架开发的分布式钓鱼游戏服务器。采用 .NET 9.0 构建,使用 MongoDB 作为数据库存储,支持热更新机制。
|
||||||
|
|
||||||
|
### 技术栈
|
||||||
|
|
||||||
|
- **.NET 版本**: .NET 9.0
|
||||||
|
- **框架**: Fantasy.Net (v2025.2.1423) - 分布式游戏服务器框架
|
||||||
|
- **数据库**: MongoDB
|
||||||
|
- **日志系统**: NLog
|
||||||
|
- **网络协议**: TCP (内部通信), KCP (外部通信)
|
||||||
|
- **身份认证**: JWT (System.IdentityModel.Tokens.Jwt v8.14.0)
|
||||||
|
- **序列化**: LightProto, MemoryPack
|
||||||
|
- **第三方库**: Unity.Mathematics
|
||||||
|
|
||||||
|
### 项目架构
|
||||||
|
|
||||||
|
项目采用分层架构,包含四个主要项目:
|
||||||
|
|
||||||
|
| 项目 | 命名空间 | 说明 |
|
||||||
|
|------|---------|------|
|
||||||
|
| Main | NBF | 应用程序入口,负责初始化和启动框架 |
|
||||||
|
| Entity | NB | 实体层,定义所有数据结构和实体 |
|
||||||
|
| Hotfix | NB | 热更新层,包含所有业务逻辑、Handler 和 System |
|
||||||
|
| ThirdParty | - | 第三方依赖库(Unity.Mathematics) |
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
Fishing2Server/
|
||||||
|
├── Main/ # 主程序入口
|
||||||
|
│ ├── Program.cs # 应用程序入口点
|
||||||
|
│ ├── NLog.config # 日志配置
|
||||||
|
│ ├── configs.json # 游戏配置(物品、鱼竿等)
|
||||||
|
│ └── Fantasy.config # Fantasy 框架配置
|
||||||
|
├── Entity/ # 实体层(数据定义)
|
||||||
|
│ ├── Authentication/ # 认证相关实体
|
||||||
|
│ ├── Game/ # 游戏实体
|
||||||
|
│ │ ├── Player/ # 玩家实体
|
||||||
|
│ │ ├── Item/ # 物品系统
|
||||||
|
│ │ ├── Map/ # 地图和房间系统
|
||||||
|
│ │ ├── Fish/ # 钓鱼系统
|
||||||
|
│ │ ├── Skill/ # 技能系统
|
||||||
|
│ │ ├── Mission/ # 任务系统
|
||||||
|
│ │ ├── Achievement/ # 成就系统
|
||||||
|
│ │ ├── Cache/ # 玩家缓存
|
||||||
|
│ │ ├── Statistics/ # 统计数据
|
||||||
|
│ │ └── Activity/ # 活动系统
|
||||||
|
│ ├── Gate/ # 网关实体
|
||||||
|
│ ├── Social/ # 社交实体
|
||||||
|
│ │ ├── Chat/ # 聊天系统
|
||||||
|
│ │ ├── Club/ # 俱乐部系统
|
||||||
|
│ │ └── Mail/ # 邮件系统
|
||||||
|
│ ├── Def/ # 配置定义
|
||||||
|
│ ├── Generate/ # 自动生成的代码
|
||||||
|
│ │ ├── NetworkProtocol/ # 网络协议定义
|
||||||
|
│ │ └── ConfigTable/ # 配置表代码
|
||||||
|
│ └── Modules/ # 配置表模块
|
||||||
|
├── Hotfix/ # 热更新层(业务逻辑)
|
||||||
|
│ ├── Authentication/ # 认证逻辑
|
||||||
|
│ │ ├── Handler/ # 认证消息处理器
|
||||||
|
│ │ └── System/ # 认证系统
|
||||||
|
│ ├── Game/ # 游戏业务逻辑
|
||||||
|
│ │ ├── Handler/ # 游戏消息处理器
|
||||||
|
│ │ ├── Item/ # 物品逻辑
|
||||||
|
│ │ ├── Map/ # 地图逻辑
|
||||||
|
│ │ ├── Player/ # 玩家逻辑
|
||||||
|
│ │ ├── Wallet/ # 钱包逻辑
|
||||||
|
│ │ └── Cache/ # 缓存逻辑
|
||||||
|
│ ├── Gate/ # 网关业务逻辑
|
||||||
|
│ │ ├── Handler/ # 网关消息处理器
|
||||||
|
│ │ │ ├── Inner/ # 内部消息
|
||||||
|
│ │ │ └── Outer/ # 外部消息
|
||||||
|
│ │ └── System/ # 网关系统
|
||||||
|
│ ├── Social/ # 社交业务逻辑
|
||||||
|
│ │ ├── Chat/ # 聊天逻辑
|
||||||
|
│ │ ├── Mail/ # 邮件逻辑
|
||||||
|
│ │ └── Club/ # 俱乐部逻辑
|
||||||
|
│ ├── Common/ # 通用逻辑
|
||||||
|
│ └── HTTPHandler/ # HTTP 接口
|
||||||
|
├── ThirdParty/ # 第三方库
|
||||||
|
└── Tools/ # 工具集
|
||||||
|
├── NetworkProtocol/ # 协议配置
|
||||||
|
└── ProtocolExportTool/ # 协议导出工具
|
||||||
|
```
|
||||||
|
|
||||||
|
## 服务器架构
|
||||||
|
|
||||||
|
### 场景类型(Scene Types)
|
||||||
|
|
||||||
|
服务器采用分布式场景架构,包含以下场景类型:
|
||||||
|
|
||||||
|
| Scene ID | 场景类型 | 外网端口 | 内网端口 | 说明 |
|
||||||
|
|----------|---------|---------|---------|------|
|
||||||
|
| 1001 | Authentication | 20001 | 11001 | 登录认证服务器(KCP) |
|
||||||
|
| 1002 | Addressable | - | 11011 | 地址服务器 |
|
||||||
|
| 1003 | Gate | 20000 | 11021 | 网关服务器(KCP) |
|
||||||
|
| 1004 | Game | - | 11031 | 游戏逻辑服务器 |
|
||||||
|
| 1006 | Social | - | 11051 | 社交服务器 |
|
||||||
|
| 1007 | Map | - | 11061 | 地图服务器(已注释) |
|
||||||
|
|
||||||
|
### 登录流程
|
||||||
|
|
||||||
|
1. 客户端连接到 **Authentication** 服务器(端口 20001)
|
||||||
|
2. 用户名密码验证,支持自动注册
|
||||||
|
3. 验证成功后颁发 JWT Token
|
||||||
|
4. 客户端使用 Token 连接到 **Gate** 服务器(端口 20000)
|
||||||
|
5. Gate 验证 Token 并建立会话
|
||||||
|
6. 客户端通过 Gate 与其他服务器通信
|
||||||
|
|
||||||
|
### 通信架构
|
||||||
|
|
||||||
|
- **内部通信**: 使用 TCP 协议,各服务器之间通过 Scene ID 路由
|
||||||
|
- **外部通信**: 使用 KCP 协议,客户端通过 Gate 服务器连接
|
||||||
|
- **消息路由**: 支持自定义路由(ICustomRouteRequest 接口)
|
||||||
|
|
||||||
|
## 构建和运行
|
||||||
|
|
||||||
|
### 前置要求
|
||||||
|
|
||||||
|
- .NET 9.0 SDK
|
||||||
|
- MongoDB 服务器
|
||||||
|
- Visual Studio 2022 或 Rider
|
||||||
|
|
||||||
|
### 构建项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 构建整个解决方案
|
||||||
|
dotnet build Server.sln
|
||||||
|
|
||||||
|
# 构建特定项目
|
||||||
|
dotnet build Main/Main.csproj
|
||||||
|
dotnet build Entity/Entity.csproj
|
||||||
|
dotnet build Hotfix/Hotfix.csproj
|
||||||
|
```
|
||||||
|
|
||||||
|
### 运行项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 运行主程序
|
||||||
|
dotnet run --project Main/Main.csproj
|
||||||
|
|
||||||
|
# 或直接编译运行
|
||||||
|
cd Main/bin/Debug/net9.0
|
||||||
|
Main.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置说明
|
||||||
|
|
||||||
|
#### 1. MongoDB 配置
|
||||||
|
|
||||||
|
在 `Entity/Fantasy.config` 中配置数据库连接:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<database dbType="MongoDB" dbName="fantasy_main" dbConnection="mongodb://127.0.0.1" />
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 服务器配置
|
||||||
|
|
||||||
|
在 `Entity/Fantasy.config` 中配置服务器地址:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<machines>
|
||||||
|
<machine id="1" outerIP="127.0.0.1" outerBindIP="127.0.0.1" innerBindIP="127.0.0.1" />
|
||||||
|
</machines>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. 日志配置
|
||||||
|
|
||||||
|
在 `Main/NLog.config` 中配置日志输出位置和格式。日志文件保存在:
|
||||||
|
|
||||||
|
```
|
||||||
|
Main/bin/Debug/Logs/Server/Server{yyyyMMdd}/{logger}.{appId}.{yyyyMMddHH}.{level}.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## 开发规范
|
||||||
|
|
||||||
|
### 命名约定
|
||||||
|
|
||||||
|
- **命名空间**:
|
||||||
|
- Entity 层使用 `NB` 前缀(如 `NB.Game`, `NB.Authentication`)
|
||||||
|
- Hotfix 层使用 `NB` 前缀(如 `NB.Game`, `NB.Gate`)
|
||||||
|
- **Handler**: 使用 `{RequestType}Handler` 格式(如 `C2A_LoginRequestHandler`)
|
||||||
|
- **System**: 使用 `{Entity}System` 格式(如 `PlayerSystem`, `MapSystem`)
|
||||||
|
- **Helper**: 使用 `{Module}Helper` 格式(如 `AuthenticationHelper`, `PlayerHelper`)
|
||||||
|
|
||||||
|
### 消息处理
|
||||||
|
|
||||||
|
所有消息处理器继承自 `MessageRPC<Request, Response>`:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class C2Game_GetItemsRequestHandler : MessageRPC<C2Game_GetItemsRequest, G2C_GetItemsResponse>
|
||||||
|
{
|
||||||
|
protected override async FTask Run(Session session, C2Game_GetItemsRequest request, G2C_GetItemsResponse response, Action reply)
|
||||||
|
{
|
||||||
|
// 业务逻辑
|
||||||
|
response.ErrorCode = ErrorCode.Successful;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 实体系统
|
||||||
|
|
||||||
|
所有实体继承自 `Entity` 基类:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public sealed class Player : Entity
|
||||||
|
{
|
||||||
|
[BsonElement("name")] public string NickName = "";
|
||||||
|
[BsonElement("lv")] public int Level;
|
||||||
|
[BsonIgnore] public long SessionRunTimeId;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### System 系统
|
||||||
|
|
||||||
|
- **DestroySystem**: 处理实体销毁逻辑(如 `PlayerDestroySystem`)
|
||||||
|
- **静态 System**: 扩展方法,提供实体操作(如 `PlayerSystem.AddItems()`)
|
||||||
|
|
||||||
|
### 配置表
|
||||||
|
|
||||||
|
配置表使用 JSON 格式定义在 `Main/configs.json`,自动生成代码到 `Entity/Generate/ConfigTable/`。
|
||||||
|
|
||||||
|
常用配置类型:
|
||||||
|
- `ItemConfig` - 物品配置
|
||||||
|
- `LureConfig` - 诱饵配置
|
||||||
|
- `RodRingConfig` - 鱼竿环配置
|
||||||
|
|
||||||
|
## 核心功能模块
|
||||||
|
|
||||||
|
### 1. 认证系统(Authentication)
|
||||||
|
|
||||||
|
- 账号登录/注册
|
||||||
|
- JWT Token 颁发和验证
|
||||||
|
- 账号缓存管理
|
||||||
|
- 区域选择支持
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Authentication/Entity/Account.cs`
|
||||||
|
- `Hotfix/Authentication/Handler/C2A_LoginRequestHandler.cs`
|
||||||
|
- `Hotfix/Authentication/System/AuthenticationHelper.cs`
|
||||||
|
|
||||||
|
### 2. 网关系统(Gate)
|
||||||
|
|
||||||
|
- 客户端连接管理
|
||||||
|
- Session 管理
|
||||||
|
- 消息路由转发
|
||||||
|
- JWT Token 验证
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Gate/GateUnit.cs`
|
||||||
|
- `Hotfix/Gate/Handler/Outer/C2G_LoginRequestHandler.cs`
|
||||||
|
- `Hotfix/Gate/System/GateUnitManageComponentSystem.cs`
|
||||||
|
|
||||||
|
### 3. 玩家系统(Player)
|
||||||
|
|
||||||
|
- 玩家基本数据管理
|
||||||
|
- 等级和经验系统
|
||||||
|
- VIP 系统
|
||||||
|
- 玩家缓存
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Game/Player/Player.cs`
|
||||||
|
- `Hotfix/Game/Player/Helper/PlayerFactory.cs`
|
||||||
|
- `Hotfix/Game/Player/Entity/PlayerSystem.cs`
|
||||||
|
|
||||||
|
### 4. 物品系统(Item)
|
||||||
|
|
||||||
|
- 物品容器管理
|
||||||
|
- 物品添加/使用
|
||||||
|
- 物品类型分类
|
||||||
|
- 奖励物品处理
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Game/Item/Item.cs`
|
||||||
|
- `Entity/Game/Item/PlayerItemContainerComponent.cs`
|
||||||
|
- `Hotfix/Game/Item/ItemSystem.cs`
|
||||||
|
|
||||||
|
### 5. 地图和房间系统(Map)
|
||||||
|
|
||||||
|
- 地图管理
|
||||||
|
- 房间创建和销毁
|
||||||
|
- 玩家移动和同步
|
||||||
|
- 地图单元管理
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Game/Map/Entity/Map.cs`
|
||||||
|
- `Entity/Game/Map/Entity/MapRoom.cs`
|
||||||
|
- `Hotfix/Game/Map/Handler/C2Map_CreateRoomRequestHandler.cs`
|
||||||
|
|
||||||
|
### 6. 社交系统(Social)
|
||||||
|
|
||||||
|
#### 聊天系统(Chat)
|
||||||
|
- 多频道聊天
|
||||||
|
- 聊天消息路由
|
||||||
|
- 聊天单元管理
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Social/Chat/Model/ChatUnit.cs`
|
||||||
|
- `Hotfix/Social/Chat/Handler/Outer/C2Chat_SendMessageRequestHandler.cs`
|
||||||
|
|
||||||
|
#### 邮件系统(Mail)
|
||||||
|
- 邮件发送
|
||||||
|
- 邮件箱管理
|
||||||
|
- 会话管理
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Social/Mail/Entity/Mail.cs`
|
||||||
|
- `Entity/Social/Mail/Entity/MailBox.cs`
|
||||||
|
- `Hotfix/Social/Mail/Handler/C2S_SendMailRequestHandler.cs`
|
||||||
|
|
||||||
|
### 7. 钓鱼系统(Fish)
|
||||||
|
|
||||||
|
- 鱼类数据管理
|
||||||
|
- 钓鱼容器
|
||||||
|
- 鱼竿和诱饵配置
|
||||||
|
|
||||||
|
**关键文件**:
|
||||||
|
- `Entity/Game/Fish/Fish.cs`
|
||||||
|
- `Entity/Game/Fish/FishContainer.cs`
|
||||||
|
|
||||||
|
## 网络协议
|
||||||
|
|
||||||
|
### 协议生成
|
||||||
|
|
||||||
|
网络协议定义在 `Tools/NetworkProtocol/` 目录,使用 `Tools/ProtocolExportTool/` 工具导出。
|
||||||
|
|
||||||
|
自动生成的代码位于:
|
||||||
|
- `Entity/Generate/NetworkProtocol/OuterMessage.cs` - 外部消息(客户端-服务器)
|
||||||
|
- `Entity/Generate/NetworkProtocol/InnerMessage.cs` - 内部消息(服务器-服务器)
|
||||||
|
|
||||||
|
### 消息命名约定
|
||||||
|
|
||||||
|
- `C2X_Request` - 客户端到服务器请求
|
||||||
|
- `X2C_Response` - 服务器到客户端响应
|
||||||
|
- `X2Y_Request` - 服务器间请求
|
||||||
|
|
||||||
|
例如:
|
||||||
|
- `C2A_LoginRequest` - 客户端到认证服务器登录请求
|
||||||
|
- `A2C_LoginResponse` - 认证服务器到客户端登录响应
|
||||||
|
- `G2Map_EnterMapRequest` - 网关到地图服务器进入地图请求
|
||||||
|
|
||||||
|
## 日志系统
|
||||||
|
|
||||||
|
### 日志级别
|
||||||
|
|
||||||
|
- **Trace**: 最详细的调试信息
|
||||||
|
- **Debug**: 调试信息
|
||||||
|
- **Info**: 一般信息
|
||||||
|
- **Warn**: 警告信息
|
||||||
|
- **Error**: 错误信息
|
||||||
|
- **Fatal**: 致命错误
|
||||||
|
|
||||||
|
### 日志使用
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
using Fantasy;
|
||||||
|
|
||||||
|
Log.Debug("调试信息");
|
||||||
|
Log.Info("一般信息");
|
||||||
|
Log.Warn("警告信息");
|
||||||
|
Log.Error("错误信息");
|
||||||
|
```
|
||||||
|
|
||||||
|
### 日志输出位置
|
||||||
|
|
||||||
|
- **控制台**: 开发环境彩色输出
|
||||||
|
- **文件**: 生产环境按日期和级别分类存储
|
||||||
|
|
||||||
|
## 热更新机制
|
||||||
|
|
||||||
|
项目支持热更新,Hotfix 层可以动态加载和卸载。热更新逻辑位于 `Hotfix/` 目录。
|
||||||
|
|
||||||
|
### Hotfix 层特点
|
||||||
|
|
||||||
|
- 不包含实体定义(Entity 层)
|
||||||
|
- 包含所有 Handler、System 和 Helper
|
||||||
|
- 可以独立编译和部署
|
||||||
|
|
||||||
|
## 常见问题
|
||||||
|
|
||||||
|
### 1. 如何添加新的消息处理器?
|
||||||
|
|
||||||
|
1. 在 `Tools/NetworkProtocol/` 定义消息结构
|
||||||
|
2. 运行协议导出工具生成代码
|
||||||
|
3. 在 `Hotfix/{Module}/Handler/` 创建 Handler 类
|
||||||
|
4. 继承 `MessageRPC<Request, Response>`
|
||||||
|
|
||||||
|
### 2. 如何添加新的实体?
|
||||||
|
|
||||||
|
1. 在 `Entity/{Module}/Entity/` 创建实体类
|
||||||
|
2. 继承 `Entity` 基类
|
||||||
|
3. 在 `Hotfix/{Module}/` 创建对应的 System
|
||||||
|
|
||||||
|
### 3. 如何配置数据库?
|
||||||
|
|
||||||
|
修改 `Entity/Fantasy.config` 中的数据库连接字符串:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<database dbType="MongoDB" dbName="fantasy_main" dbConnection="mongodb://127.0.0.1" />
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 如何修改服务器端口?
|
||||||
|
|
||||||
|
修改 `Entity/Fantasy.config` 中对应场景的端口配置:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<scene id="1003" sceneTypeString="Gate" outerPort="20000" innerPort="11021" />
|
||||||
|
```
|
||||||
|
|
||||||
|
## 开发工具
|
||||||
|
|
||||||
|
### 协议导出工具
|
||||||
|
|
||||||
|
位置: `Tools/ProtocolExportTool/`
|
||||||
|
|
||||||
|
用于从配置文件导出网络协议代码。
|
||||||
|
|
||||||
|
### 配置表工具
|
||||||
|
|
||||||
|
配置表定义在 `Main/configs.json`,代码自动生成到 `Entity/Generate/ConfigTable/`。
|
||||||
|
|
||||||
|
## 贡献指南
|
||||||
|
|
||||||
|
1. 遵循现有的命名约定和代码风格
|
||||||
|
2. 添加必要的注释和文档
|
||||||
|
3. 确保代码编译通过
|
||||||
|
4. 测试新功能
|
||||||
|
5. 更新相关文档
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
本项目为内部项目,版权所有。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**: 1.0
|
||||||
|
**最后更新**: 2026-03-05
|
||||||
|
**维护者**: Fishing2Server Team
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Fantasy-Net" Version="2025.2.1422" />
|
<PackageReference Include="Fantasy-Net" Version="2025.2.1423" />
|
||||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
|
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" />
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
|
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Game\Map\" />
|
<Folder Include="Game\Map\" />
|
||||||
|
<Folder Include="Generate\ConfigTable\" />
|
||||||
<Folder Include="Generate\NetworkProtocol\" />
|
<Folder Include="Generate\NetworkProtocol\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class Item : Entity
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 配置id
|
/// 配置id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[BsonElement("cid")] public uint ConfigId;
|
[BsonElement("cid")] public int ConfigId;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否绑定
|
/// 是否绑定
|
||||||
|
|||||||
@@ -14,5 +14,5 @@ public class PlayerWalletComponent : Entity
|
|||||||
/// 所有货币
|
/// 所有货币
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
|
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
|
||||||
public Dictionary<uint, int> Currency = new();
|
public Dictionary<int, int> Currency = new();
|
||||||
}
|
}
|
||||||
70
Entity/Generate/ConfigTable/Bait.cs
Normal file
70
Entity/Generate/ConfigTable/Bait.cs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Bait : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Bait(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
EfficacyBase = (int)_obj.GetValue("efficacy_base");
|
||||||
|
{ var __json0 = _obj.GetValue("arr"); Arr = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Arr.Add(__v0); } }
|
||||||
|
Strength = (int)_obj.GetValue("strength");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bait DeserializeBait(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Bait(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 吸引力
|
||||||
|
/// </summary>
|
||||||
|
public readonly int EfficacyBase;
|
||||||
|
/// <summary>
|
||||||
|
/// 导线圈
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Arr;
|
||||||
|
/// <summary>
|
||||||
|
/// 强度
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Strength;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2062794;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "efficacyBase:" + EfficacyBase + ","
|
||||||
|
+ "arr:" + Luban.StringUtil.CollectionToString(Arr) + ","
|
||||||
|
+ "strength:" + Strength + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
73
Entity/Generate/ConfigTable/BasicConfig.cs
Normal file
73
Entity/Generate/ConfigTable/BasicConfig.cs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class BasicConfig : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public BasicConfig(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
X1 = (int)_obj.GetValue("x1");
|
||||||
|
X2 = (int)_obj.GetValue("x2");
|
||||||
|
X3 = (int)_obj.GetValue("x3");
|
||||||
|
X4 = (int)_obj.GetValue("x4");
|
||||||
|
X5 = (int)_obj.GetValue("x5");
|
||||||
|
X6 = (int)_obj.GetValue("x6");
|
||||||
|
{ var __json0 = _obj.GetValue("x7"); X7 = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; X7.Add(__v0); } }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BasicConfig DeserializeBasicConfig(JToken _buf)
|
||||||
|
{
|
||||||
|
return new BasicConfig(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 参数1
|
||||||
|
/// </summary>
|
||||||
|
public readonly int X1;
|
||||||
|
/// <summary>
|
||||||
|
/// 道具
|
||||||
|
/// </summary>
|
||||||
|
public readonly int X2;
|
||||||
|
public readonly int X3;
|
||||||
|
public readonly int X4;
|
||||||
|
public readonly int X5;
|
||||||
|
public readonly int X6;
|
||||||
|
public readonly System.Collections.Generic.List<int> X7;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 378573040;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "x1:" + X1 + ","
|
||||||
|
+ "x2:" + X2 + ","
|
||||||
|
+ "x3:" + X3 + ","
|
||||||
|
+ "x4:" + X4 + ","
|
||||||
|
+ "x5:" + X5 + ","
|
||||||
|
+ "x6:" + X6 + ","
|
||||||
|
+ "x7:" + Luban.StringUtil.CollectionToString(X7) + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
64
Entity/Generate/ConfigTable/Bobber.cs
Normal file
64
Entity/Generate/ConfigTable/Bobber.cs
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Bobber : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Bobber(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Displacement = (int)_obj.GetValue("displacement");
|
||||||
|
{ var __json0 = _obj.GetValue("night_light"); NightLight = new System.Collections.Generic.List<float>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { float __v0; __v0 = (float)__e0; NightLight.Add(__v0); } }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bobber DeserializeBobber(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Bobber(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 位移
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Displacement;
|
||||||
|
/// <summary>
|
||||||
|
/// 是否夜光
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<float> NightLight;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 1995051738;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "displacement:" + Displacement + ","
|
||||||
|
+ "nightLight:" + Luban.StringUtil.CollectionToString(NightLight) + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class BaitConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint EfficacyBase { get; set; } // 吸引力
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint[] Arr { get; set; } = Array.Empty<uint>(); // 重量(克)
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public string[] ArrStr { get; set; } = Array.Empty<string>(); // 重量(克)
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<BaitConfig> Context => ConfigTableHelper.Table<BaitConfig>();
|
|
||||||
|
|
||||||
public static BaitConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BaitConfig Get(Predicate<BaitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BaitConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BaitConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BaitConfig Fist(Predicate<BaitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BaitConfig Last(Predicate<BaitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<BaitConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BaitConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BaitConfig> GetList(Predicate<BaitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<BaitConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class BasicConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string Name { get; set; } // 参数名
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public string[] Val { get; set; } = Array.Empty<string>(); // 参数值
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<BasicConfig> Context => ConfigTableHelper.Table<BasicConfig>();
|
|
||||||
|
|
||||||
public static BasicConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BasicConfig Get(Predicate<BasicConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BasicConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BasicConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BasicConfig Fist(Predicate<BasicConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BasicConfig Last(Predicate<BasicConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<BasicConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BasicConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BasicConfig> GetList(Predicate<BasicConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<BasicConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class BobberConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint Displacement { get; set; } // 位移
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint NightLight { get; set; } // 是否夜光
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<BobberConfig> Context => ConfigTableHelper.Table<BobberConfig>();
|
|
||||||
|
|
||||||
public static BobberConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BobberConfig Get(Predicate<BobberConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BobberConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BobberConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BobberConfig Fist(Predicate<BobberConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BobberConfig Last(Predicate<BobberConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<BobberConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BobberConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<BobberConfig> GetList(Predicate<BobberConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<BobberConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class FeederConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint Capacity { get; set; } // 能力
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Weight { get; set; } // 重量(克)
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<FeederConfig> Context => ConfigTableHelper.Table<FeederConfig>();
|
|
||||||
|
|
||||||
public static FeederConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FeederConfig Get(Predicate<FeederConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FeederConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FeederConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FeederConfig Fist(Predicate<FeederConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FeederConfig Last(Predicate<FeederConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<FeederConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<FeederConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<FeederConfig> GetList(Predicate<FeederConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<FeederConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class FishConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string[] Model { get; set; } = Array.Empty<string>(); // 模型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Type { get; set; } // 类型
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint SpeciesName { get; set; } // 鱼类型Id
|
|
||||||
[ProtoMember(5)]
|
|
||||||
public uint MinWeight { get; set; } // 最小重量(克)
|
|
||||||
[ProtoMember(6)]
|
|
||||||
public uint MaxWeight { get; set; } // 最大重量(克)
|
|
||||||
[ProtoMember(7)]
|
|
||||||
public uint Accept { get; set; } // 接受饵
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<FishConfig> Context => ConfigTableHelper.Table<FishConfig>();
|
|
||||||
|
|
||||||
public static FishConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FishConfig Get(Predicate<FishConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FishConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FishConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FishConfig Fist(Predicate<FishConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FishConfig Last(Predicate<FishConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<FishConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<FishConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<FishConfig> GetList(Predicate<FishConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<FishConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class GoodsConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint[] Shop { get; set; } = Array.Empty<uint>(); // 出现商店
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Group { get; set; } // 组
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public string[] Items { get; set; } = Array.Empty<string>(); // 物品
|
|
||||||
[ProtoMember(5)]
|
|
||||||
public uint Price1 { get; set; } // 银币价格
|
|
||||||
[ProtoMember(6)]
|
|
||||||
public uint Price2 { get; set; } // 金币价格
|
|
||||||
[ProtoMember(7)]
|
|
||||||
public uint[] Label { get; set; } = Array.Empty<uint>(); // 标签
|
|
||||||
[ProtoMember(8)]
|
|
||||||
public uint Number { get; set; } // 可购买数量
|
|
||||||
[ProtoMember(9)]
|
|
||||||
public uint Disable { get; set; } // 禁用状态
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<GoodsConfig> Context => ConfigTableHelper.Table<GoodsConfig>();
|
|
||||||
|
|
||||||
public static GoodsConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GoodsConfig Get(Predicate<GoodsConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GoodsConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GoodsConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GoodsConfig Fist(Predicate<GoodsConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static GoodsConfig Last(Predicate<GoodsConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<GoodsConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<GoodsConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<GoodsConfig> GetList(Predicate<GoodsConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<GoodsConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class HookConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint Zadzior { get; set; } // 长钉
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<HookConfig> Context => ConfigTableHelper.Table<HookConfig>();
|
|
||||||
|
|
||||||
public static HookConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HookConfig Get(Predicate<HookConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HookConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HookConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HookConfig Fist(Predicate<HookConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HookConfig Last(Predicate<HookConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<HookConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<HookConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<HookConfig> GetList(Predicate<HookConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<HookConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class InitConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public int Amount { get; set; } // 数量
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<InitConfig> Context => ConfigTableHelper.Table<InitConfig>();
|
|
||||||
|
|
||||||
public static InitConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InitConfig Get(Predicate<InitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InitConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InitConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InitConfig Fist(Predicate<InitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InitConfig Last(Predicate<InitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<InitConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<InitConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<InitConfig> GetList(Predicate<InitConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<InitConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class ItemConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string Model { get; set; } // 模型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Type { get; set; } // 子类型
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint Quality { get; set; } // 品质
|
|
||||||
[ProtoMember(5)]
|
|
||||||
public uint Brand { get; set; } // 品牌
|
|
||||||
[ProtoMember(6)]
|
|
||||||
public uint Weight { get; set; } // 重量(克)
|
|
||||||
[ProtoMember(7)]
|
|
||||||
public uint Length { get; set; } // 长度(毫米)
|
|
||||||
[ProtoMember(8)]
|
|
||||||
public uint Max { get; set; } // 最大堆叠数量
|
|
||||||
[ProtoMember(9)]
|
|
||||||
public uint AutoUse { get; set; } // 获得自动使用
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<ItemConfig> Context => ConfigTableHelper.Table<ItemConfig>();
|
|
||||||
|
|
||||||
public static ItemConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemConfig Get(Predicate<ItemConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemConfig Fist(Predicate<ItemConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ItemConfig Last(Predicate<ItemConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<ItemConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<ItemConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<ItemConfig> GetList(Predicate<ItemConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<ItemConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class LineConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint Strength { get; set; } // 强度
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Size { get; set; } // 尺寸
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<LineConfig> Context => ConfigTableHelper.Table<LineConfig>();
|
|
||||||
|
|
||||||
public static LineConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LineConfig Get(Predicate<LineConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LineConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LineConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LineConfig Fist(Predicate<LineConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LineConfig Last(Predicate<LineConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<LineConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<LineConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<LineConfig> GetList(Predicate<LineConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<LineConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class LureConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint[] Hook { get; set; } = Array.Empty<uint>(); // 勾
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint HookNum { get; set; } // 装配鱼钩数量
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint EfficacyBase { get; set; } // 吸引力
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<LureConfig> Context => ConfigTableHelper.Table<LureConfig>();
|
|
||||||
|
|
||||||
public static LureConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LureConfig Get(Predicate<LureConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LureConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LureConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LureConfig Fist(Predicate<LureConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LureConfig Last(Predicate<LureConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<LureConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<LureConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<LureConfig> GetList(Predicate<LureConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<LureConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class ReelConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint ReelType { get; set; } // 鱼轮类型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public float[] GearRatio { get; set; } = Array.Empty<float>(); // 组件比
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint Strength { get; set; } // 强度
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<ReelConfig> Context => ConfigTableHelper.Table<ReelConfig>();
|
|
||||||
|
|
||||||
public static ReelConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReelConfig Get(Predicate<ReelConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReelConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReelConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReelConfig Fist(Predicate<ReelConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ReelConfig Last(Predicate<ReelConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<ReelConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<ReelConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<ReelConfig> GetList(Predicate<ReelConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<ReelConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class RingConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string Model { get; set; } // 模型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public string Icon { get; set; } // 图标
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<RingConfig> Context => ConfigTableHelper.Table<RingConfig>();
|
|
||||||
|
|
||||||
public static RingConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RingConfig Get(Predicate<RingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RingConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RingConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RingConfig Fist(Predicate<RingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RingConfig Last(Predicate<RingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<RingConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RingConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RingConfig> GetList(Predicate<RingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<RingConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class RodConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public uint RodType { get; set; } // 鱼竿类型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Ring { get; set; } // 导线圈
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint Strength { get; set; } // 强度
|
|
||||||
[ProtoMember(5)]
|
|
||||||
public uint MaxRange { get; set; } // 最大范围
|
|
||||||
[ProtoMember(6)]
|
|
||||||
public uint ConstructionType { get; set; } // 结构类型
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<RodConfig> Context => ConfigTableHelper.Table<RodConfig>();
|
|
||||||
|
|
||||||
public static RodConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodConfig Get(Predicate<RodConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodConfig Fist(Predicate<RodConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodConfig Last(Predicate<RodConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<RodConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RodConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RodConfig> GetList(Predicate<RodConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<RodConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class RodRingConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string Model { get; set; } // 模型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public uint Strength { get; set; } // 强度
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<RodRingConfig> Context => ConfigTableHelper.Table<RodRingConfig>();
|
|
||||||
|
|
||||||
public static RodRingConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodRingConfig Get(Predicate<RodRingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodRingConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodRingConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodRingConfig Fist(Predicate<RodRingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RodRingConfig Last(Predicate<RodRingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<RodRingConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RodRingConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<RodRingConfig> GetList(Predicate<RodRingConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<RodRingConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
using System;
|
|
||||||
using LightProto;
|
|
||||||
using Fantasy;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using Fantasy.Serialize;
|
|
||||||
using NBF.ConfigTable;
|
|
||||||
|
|
||||||
namespace NBF
|
|
||||||
{
|
|
||||||
[ProtoContract]
|
|
||||||
public sealed partial class WeightConfig : ASerialize, IConfigTable
|
|
||||||
{
|
|
||||||
|
|
||||||
[ProtoMember(1)]
|
|
||||||
public uint Id { get; set; } // Id
|
|
||||||
[ProtoMember(2)]
|
|
||||||
public string Model { get; set; } // 模型
|
|
||||||
[ProtoMember(3)]
|
|
||||||
public string Icon { get; set; } // 图标
|
|
||||||
[ProtoMember(4)]
|
|
||||||
public uint Type { get; set; } // 类型
|
|
||||||
[ProtoMember(5)]
|
|
||||||
public uint Weight { get; set; } // 重量(克)
|
|
||||||
[ProtoIgnore]
|
|
||||||
public uint Key => Id;
|
|
||||||
|
|
||||||
#region Static
|
|
||||||
|
|
||||||
private static ConfigContext<WeightConfig> Context => ConfigTableHelper.Table<WeightConfig>();
|
|
||||||
|
|
||||||
public static WeightConfig Get(uint key)
|
|
||||||
{
|
|
||||||
return Context.Get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WeightConfig Get(Predicate<WeightConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Get(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WeightConfig Fist()
|
|
||||||
{
|
|
||||||
return Context.Fist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WeightConfig Last()
|
|
||||||
{
|
|
||||||
return Context.Last();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WeightConfig Fist(Predicate<WeightConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Fist(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WeightConfig Last(Predicate<WeightConfig> match)
|
|
||||||
{
|
|
||||||
return Context.Last(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count()
|
|
||||||
{
|
|
||||||
return Context.Count();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int Count(Func<WeightConfig, bool> predicate)
|
|
||||||
{
|
|
||||||
return Context.Count(predicate);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<WeightConfig> GetList()
|
|
||||||
{
|
|
||||||
return Context.GetList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<WeightConfig> GetList(Predicate<WeightConfig> match)
|
|
||||||
{
|
|
||||||
return Context.GetList(match);
|
|
||||||
}
|
|
||||||
public static void ParseJson(Newtonsoft.Json.Linq.JArray arr)
|
|
||||||
{
|
|
||||||
ConfigTableHelper.ParseLine<WeightConfig>(arr);
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
64
Entity/Generate/ConfigTable/Feeder.cs
Normal file
64
Entity/Generate/ConfigTable/Feeder.cs
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Feeder : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Feeder(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Capacity = (int)_obj.GetValue("capacity");
|
||||||
|
Weight = (int)_obj.GetValue("weight");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Feeder DeserializeFeeder(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Feeder(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 能力
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Capacity;
|
||||||
|
/// <summary>
|
||||||
|
/// 重量(克)
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Weight;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2100424427;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "capacity:" + Capacity + ","
|
||||||
|
+ "weight:" + Weight + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
76
Entity/Generate/ConfigTable/Fish.cs
Normal file
76
Entity/Generate/ConfigTable/Fish.cs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Fish : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Fish(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Name = (string)_obj.GetValue("name");
|
||||||
|
MinWeight = (int)_obj.GetValue("min_weight");
|
||||||
|
MaxWeight = (int)_obj.GetValue("max_weight");
|
||||||
|
Accept = (int)_obj.GetValue("accept");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Fish DeserializeFish(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Fish(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼名字
|
||||||
|
/// </summary>
|
||||||
|
public readonly string Name;
|
||||||
|
/// <summary>
|
||||||
|
/// 最小重量(克)
|
||||||
|
/// </summary>
|
||||||
|
public readonly int MinWeight;
|
||||||
|
/// <summary>
|
||||||
|
/// 最大重量(克)
|
||||||
|
/// </summary>
|
||||||
|
public readonly int MaxWeight;
|
||||||
|
/// <summary>
|
||||||
|
/// 接受的鱼饵配置组
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Accept;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2189944;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "name:" + Name + ","
|
||||||
|
+ "minWeight:" + MinWeight + ","
|
||||||
|
+ "maxWeight:" + MaxWeight + ","
|
||||||
|
+ "accept:" + Accept + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
94
Entity/Generate/ConfigTable/Goods.cs
Normal file
94
Entity/Generate/ConfigTable/Goods.cs
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Goods : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Goods(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Group = (int)_obj.GetValue("group");
|
||||||
|
{ var __json0 = _obj.GetValue("items"); Items = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Items.Add(__v0); } }
|
||||||
|
Price1 = (int)_obj.GetValue("price1");
|
||||||
|
Price2 = (int)_obj.GetValue("price2");
|
||||||
|
{ var __json0 = _obj.GetValue("label"); Label = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Label.Add(__v0); } }
|
||||||
|
Number = (int)_obj.GetValue("number");
|
||||||
|
Disable = (int)_obj.GetValue("disable");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Goods DeserializeGoods(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Goods(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 组
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Group;
|
||||||
|
/// <summary>
|
||||||
|
/// 物品
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Items;
|
||||||
|
/// <summary>
|
||||||
|
/// 银币价格
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Price1;
|
||||||
|
/// <summary>
|
||||||
|
/// 金币价格
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Price2;
|
||||||
|
/// <summary>
|
||||||
|
/// 标签
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Label;
|
||||||
|
/// <summary>
|
||||||
|
/// 可购买数量
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Number;
|
||||||
|
/// <summary>
|
||||||
|
/// 禁用状态
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Disable;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 68986678;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "group:" + Group + ","
|
||||||
|
+ "items:" + Luban.StringUtil.CollectionToString(Items) + ","
|
||||||
|
+ "price1:" + Price1 + ","
|
||||||
|
+ "price2:" + Price2 + ","
|
||||||
|
+ "label:" + Luban.StringUtil.CollectionToString(Label) + ","
|
||||||
|
+ "number:" + Number + ","
|
||||||
|
+ "disable:" + Disable + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/Hook.cs
Normal file
58
Entity/Generate/ConfigTable/Hook.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Hook : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Hook(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Ding = (int)_obj.GetValue("ding");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Hook DeserializeHook(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Hook(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 长钉
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Ding;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2255171;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "ding:" + Ding + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/InitItemConfig.cs
Normal file
58
Entity/Generate/ConfigTable/InitItemConfig.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class InitItemConfig : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public InitItemConfig(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Count = (int)_obj.GetValue("count");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static InitItemConfig DeserializeInitItemConfig(JToken _buf)
|
||||||
|
{
|
||||||
|
return new InitItemConfig(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 数量
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Count;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 1451166085;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "count:" + Count + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
106
Entity/Generate/ConfigTable/Item.cs
Normal file
106
Entity/Generate/ConfigTable/Item.cs
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Item : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Item(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Type = (int)_obj.GetValue("type");
|
||||||
|
Quality = (int)_obj.GetValue("quality");
|
||||||
|
Brand = (int)_obj.GetValue("brand");
|
||||||
|
Weight = (int)_obj.GetValue("weight");
|
||||||
|
Length = (int)_obj.GetValue("length");
|
||||||
|
Max = (int)_obj.GetValue("max");
|
||||||
|
AutoUse = (int)_obj.GetValue("auto_use");
|
||||||
|
{ var __json0 = _obj.GetValue("result1"); Result1 = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Result1.Add(__v0); } }
|
||||||
|
{ var __json0 = _obj.GetValue("result2"); Result2 = new System.Collections.Generic.List<string>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { string __v0; __v0 = (string)__e0; Result2.Add(__v0); } }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Item DeserializeItem(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Item(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 子类型
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Type;
|
||||||
|
/// <summary>
|
||||||
|
/// 品质
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Quality;
|
||||||
|
/// <summary>
|
||||||
|
/// 品牌
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Brand;
|
||||||
|
/// <summary>
|
||||||
|
/// 重量(克)
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Weight;
|
||||||
|
/// <summary>
|
||||||
|
/// 长度(毫米)
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Length;
|
||||||
|
/// <summary>
|
||||||
|
/// 最大堆叠数量
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Max;
|
||||||
|
/// <summary>
|
||||||
|
/// 获得自动使用
|
||||||
|
/// </summary>
|
||||||
|
public readonly int AutoUse;
|
||||||
|
/// <summary>
|
||||||
|
/// 使用参数1
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Result1;
|
||||||
|
/// <summary>
|
||||||
|
/// 使用参数2
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<string> Result2;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2289459;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "type:" + Type + ","
|
||||||
|
+ "quality:" + Quality + ","
|
||||||
|
+ "brand:" + Brand + ","
|
||||||
|
+ "weight:" + Weight + ","
|
||||||
|
+ "length:" + Length + ","
|
||||||
|
+ "max:" + Max + ","
|
||||||
|
+ "autoUse:" + AutoUse + ","
|
||||||
|
+ "result1:" + Luban.StringUtil.CollectionToString(Result1) + ","
|
||||||
|
+ "result2:" + Luban.StringUtil.CollectionToString(Result2) + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
64
Entity/Generate/ConfigTable/Line.cs
Normal file
64
Entity/Generate/ConfigTable/Line.cs
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Line : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Line(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Strength = (int)_obj.GetValue("strength");
|
||||||
|
Size = (int)_obj.GetValue("size");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Line DeserializeLine(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Line(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 强度
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Strength;
|
||||||
|
/// <summary>
|
||||||
|
/// 尺寸
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Size;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2368532;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "strength:" + Strength + ","
|
||||||
|
+ "size:" + Size + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
70
Entity/Generate/ConfigTable/Lure.cs
Normal file
70
Entity/Generate/ConfigTable/Lure.cs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Lure : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Lure(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
{ var __json0 = _obj.GetValue("hook"); Hook = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Hook.Add(__v0); } }
|
||||||
|
HookNum = (int)_obj.GetValue("hook_num");
|
||||||
|
EfficacyBase = (int)_obj.GetValue("efficacy_base");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Lure DeserializeLure(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Lure(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼钩
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Hook;
|
||||||
|
/// <summary>
|
||||||
|
/// 装配鱼钩数量
|
||||||
|
/// </summary>
|
||||||
|
public readonly int HookNum;
|
||||||
|
/// <summary>
|
||||||
|
/// 吸引力
|
||||||
|
/// </summary>
|
||||||
|
public readonly int EfficacyBase;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2380188;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "hook:" + Luban.StringUtil.CollectionToString(Hook) + ","
|
||||||
|
+ "hookNum:" + HookNum + ","
|
||||||
|
+ "efficacyBase:" + EfficacyBase + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
70
Entity/Generate/ConfigTable/Reel.cs
Normal file
70
Entity/Generate/ConfigTable/Reel.cs
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Reel : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Reel(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
ReelType = (int)_obj.GetValue("reel_type");
|
||||||
|
{ var __json0 = _obj.GetValue("gear_ratio"); GearRatio = new System.Collections.Generic.List<float>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { float __v0; __v0 = (float)__e0; GearRatio.Add(__v0); } }
|
||||||
|
Strength = (int)_obj.GetValue("strength");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Reel DeserializeReel(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Reel(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼轮类型
|
||||||
|
/// </summary>
|
||||||
|
public readonly int ReelType;
|
||||||
|
/// <summary>
|
||||||
|
/// 组件比
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<float> GearRatio;
|
||||||
|
/// <summary>
|
||||||
|
/// 强度
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Strength;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2543162;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "reelType:" + ReelType + ","
|
||||||
|
+ "gearRatio:" + Luban.StringUtil.CollectionToString(GearRatio) + ","
|
||||||
|
+ "strength:" + Strength + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
82
Entity/Generate/ConfigTable/Rod.cs
Normal file
82
Entity/Generate/ConfigTable/Rod.cs
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Rod : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Rod(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
RodType = (int)_obj.GetValue("rod_type");
|
||||||
|
Ring = (int)_obj.GetValue("ring");
|
||||||
|
Strength = (int)_obj.GetValue("strength");
|
||||||
|
MaxRange = (int)_obj.GetValue("max_range");
|
||||||
|
ConstructionType = (int)_obj.GetValue("construction_type");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Rod DeserializeRod(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Rod(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼竿类型
|
||||||
|
/// </summary>
|
||||||
|
public readonly int RodType;
|
||||||
|
/// <summary>
|
||||||
|
/// 导线圈
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Ring;
|
||||||
|
/// <summary>
|
||||||
|
/// 强度
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Strength;
|
||||||
|
/// <summary>
|
||||||
|
/// 最大范围
|
||||||
|
/// </summary>
|
||||||
|
public readonly int MaxRange;
|
||||||
|
/// <summary>
|
||||||
|
/// 结构类型
|
||||||
|
/// </summary>
|
||||||
|
public readonly int ConstructionType;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 82343;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "rodType:" + RodType + ","
|
||||||
|
+ "ring:" + Ring + ","
|
||||||
|
+ "strength:" + Strength + ","
|
||||||
|
+ "maxRange:" + MaxRange + ","
|
||||||
|
+ "constructionType:" + ConstructionType + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
94
Entity/Generate/ConfigTable/Shop.cs
Normal file
94
Entity/Generate/ConfigTable/Shop.cs
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public sealed partial class Shop : Luban.BeanBase
|
||||||
|
{
|
||||||
|
public Shop(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
Id = (int)_obj.GetValue("id");
|
||||||
|
Group = (int)_obj.GetValue("group");
|
||||||
|
{ var __json0 = _obj.GetValue("items"); Items = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Items.Add(__v0); } }
|
||||||
|
Price1 = (int)_obj.GetValue("price1");
|
||||||
|
Price2 = (int)_obj.GetValue("price2");
|
||||||
|
{ var __json0 = _obj.GetValue("label"); Label = new System.Collections.Generic.List<int>((__json0 as JArray).Count); foreach(JToken __e0 in __json0) { int __v0; __v0 = (int)__e0; Label.Add(__v0); } }
|
||||||
|
Number = (int)_obj.GetValue("number");
|
||||||
|
Disable = (int)_obj.GetValue("disable");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Shop DeserializeShop(JToken _buf)
|
||||||
|
{
|
||||||
|
return new Shop(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Id
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Id;
|
||||||
|
/// <summary>
|
||||||
|
/// 组
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Group;
|
||||||
|
/// <summary>
|
||||||
|
/// 物品
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Items;
|
||||||
|
/// <summary>
|
||||||
|
/// 银币价格
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Price1;
|
||||||
|
/// <summary>
|
||||||
|
/// 金币价格
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Price2;
|
||||||
|
/// <summary>
|
||||||
|
/// 标签
|
||||||
|
/// </summary>
|
||||||
|
public readonly System.Collections.Generic.List<int> Label;
|
||||||
|
/// <summary>
|
||||||
|
/// 可购买数量
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Number;
|
||||||
|
/// <summary>
|
||||||
|
/// 禁用状态
|
||||||
|
/// </summary>
|
||||||
|
public readonly int Disable;
|
||||||
|
|
||||||
|
|
||||||
|
public const int __ID__ = 2576150;
|
||||||
|
public override int GetTypeId() => __ID__;
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "id:" + Id + ","
|
||||||
|
+ "group:" + Group + ","
|
||||||
|
+ "items:" + Luban.StringUtil.CollectionToString(Items) + ","
|
||||||
|
+ "price1:" + Price1 + ","
|
||||||
|
+ "price2:" + Price2 + ","
|
||||||
|
+ "label:" + Luban.StringUtil.CollectionToString(Label) + ","
|
||||||
|
+ "number:" + Number + ","
|
||||||
|
+ "disable:" + Disable + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
113
Entity/Generate/ConfigTable/Tables.cs
Normal file
113
Entity/Generate/ConfigTable/Tables.cs
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
public partial class Tables
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼饵
|
||||||
|
/// </summary>
|
||||||
|
public TbBait TbBait {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 全局常量配置表
|
||||||
|
/// </summary>
|
||||||
|
public TbBasicConfig TbBasicConfig {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 浮漂
|
||||||
|
/// </summary>
|
||||||
|
public TbBobber TbBobber {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 菲德
|
||||||
|
/// </summary>
|
||||||
|
public TbFeeder TbFeeder {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼
|
||||||
|
/// </summary>
|
||||||
|
public TbFish TbFish {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 商品
|
||||||
|
/// </summary>
|
||||||
|
public TbGoods TbGoods {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼钩
|
||||||
|
/// </summary>
|
||||||
|
public TbHook TbHook {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 初始物品表
|
||||||
|
/// </summary>
|
||||||
|
public TbInitItemConfig TbInitItemConfig {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 物品表
|
||||||
|
/// </summary>
|
||||||
|
public TbItem TbItem {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼线
|
||||||
|
/// </summary>
|
||||||
|
public TbLine TbLine {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 路亚饵
|
||||||
|
/// </summary>
|
||||||
|
public TbLure TbLure {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 渔轮
|
||||||
|
/// </summary>
|
||||||
|
public TbReel TbReel {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼竿
|
||||||
|
/// </summary>
|
||||||
|
public TbRod TbRod {get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 商店
|
||||||
|
/// </summary>
|
||||||
|
public TbShop TbShop {get; }
|
||||||
|
|
||||||
|
|
||||||
|
public Tables(System.Func<string, JArray> loader)
|
||||||
|
{
|
||||||
|
TbBait = new TbBait(loader("tbbait"));
|
||||||
|
TbBasicConfig = new TbBasicConfig(loader("tbbasicconfig"));
|
||||||
|
TbBobber = new TbBobber(loader("tbbobber"));
|
||||||
|
TbFeeder = new TbFeeder(loader("tbfeeder"));
|
||||||
|
TbFish = new TbFish(loader("tbfish"));
|
||||||
|
TbGoods = new TbGoods(loader("tbgoods"));
|
||||||
|
TbHook = new TbHook(loader("tbhook"));
|
||||||
|
TbInitItemConfig = new TbInitItemConfig(loader("tbinititemconfig"));
|
||||||
|
TbItem = new TbItem(loader("tbitem"));
|
||||||
|
TbLine = new TbLine(loader("tbline"));
|
||||||
|
TbLure = new TbLure(loader("tblure"));
|
||||||
|
TbReel = new TbReel(loader("tbreel"));
|
||||||
|
TbRod = new TbRod(loader("tbrod"));
|
||||||
|
TbShop = new TbShop(loader("tbshop"));
|
||||||
|
ResolveRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResolveRef()
|
||||||
|
{
|
||||||
|
TbBait.ResolveRef(this);
|
||||||
|
TbBasicConfig.ResolveRef(this);
|
||||||
|
TbBobber.ResolveRef(this);
|
||||||
|
TbFeeder.ResolveRef(this);
|
||||||
|
TbFish.ResolveRef(this);
|
||||||
|
TbGoods.ResolveRef(this);
|
||||||
|
TbHook.ResolveRef(this);
|
||||||
|
TbInitItemConfig.ResolveRef(this);
|
||||||
|
TbItem.ResolveRef(this);
|
||||||
|
TbLine.ResolveRef(this);
|
||||||
|
TbLure.ResolveRef(this);
|
||||||
|
TbReel.ResolveRef(this);
|
||||||
|
TbRod.ResolveRef(this);
|
||||||
|
TbShop.ResolveRef(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbBait.cs
Normal file
58
Entity/Generate/ConfigTable/TbBait.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼饵
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbBait
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Bait> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Bait> _dataList;
|
||||||
|
|
||||||
|
public TbBait(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Bait>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Bait>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Bait _v;
|
||||||
|
_v = global::cfg.Bait.DeserializeBait(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Bait> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Bait> DataList => _dataList;
|
||||||
|
|
||||||
|
public Bait GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Bait Get(int key) => _dataMap[key];
|
||||||
|
public Bait this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbBasicConfig.cs
Normal file
58
Entity/Generate/ConfigTable/TbBasicConfig.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 全局常量配置表
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbBasicConfig
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, BasicConfig> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<BasicConfig> _dataList;
|
||||||
|
|
||||||
|
public TbBasicConfig(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, BasicConfig>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<BasicConfig>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
BasicConfig _v;
|
||||||
|
_v = global::cfg.BasicConfig.DeserializeBasicConfig(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.X1, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, BasicConfig> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<BasicConfig> DataList => _dataList;
|
||||||
|
|
||||||
|
public BasicConfig GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public BasicConfig Get(int key) => _dataMap[key];
|
||||||
|
public BasicConfig this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbBobber.cs
Normal file
58
Entity/Generate/ConfigTable/TbBobber.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 浮漂
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbBobber
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Bobber> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Bobber> _dataList;
|
||||||
|
|
||||||
|
public TbBobber(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Bobber>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Bobber>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Bobber _v;
|
||||||
|
_v = global::cfg.Bobber.DeserializeBobber(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Bobber> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Bobber> DataList => _dataList;
|
||||||
|
|
||||||
|
public Bobber GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Bobber Get(int key) => _dataMap[key];
|
||||||
|
public Bobber this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbFeeder.cs
Normal file
58
Entity/Generate/ConfigTable/TbFeeder.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菲德
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbFeeder
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Feeder> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Feeder> _dataList;
|
||||||
|
|
||||||
|
public TbFeeder(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Feeder>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Feeder>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Feeder _v;
|
||||||
|
_v = global::cfg.Feeder.DeserializeFeeder(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Feeder> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Feeder> DataList => _dataList;
|
||||||
|
|
||||||
|
public Feeder GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Feeder Get(int key) => _dataMap[key];
|
||||||
|
public Feeder this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbFish.cs
Normal file
58
Entity/Generate/ConfigTable/TbFish.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbFish
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Fish> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Fish> _dataList;
|
||||||
|
|
||||||
|
public TbFish(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Fish>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Fish>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Fish _v;
|
||||||
|
_v = global::cfg.Fish.DeserializeFish(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Fish> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Fish> DataList => _dataList;
|
||||||
|
|
||||||
|
public Fish GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Fish Get(int key) => _dataMap[key];
|
||||||
|
public Fish this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbGoods.cs
Normal file
58
Entity/Generate/ConfigTable/TbGoods.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 商品
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbGoods
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Goods> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Goods> _dataList;
|
||||||
|
|
||||||
|
public TbGoods(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Goods>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Goods>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Goods _v;
|
||||||
|
_v = global::cfg.Goods.DeserializeGoods(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Goods> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Goods> DataList => _dataList;
|
||||||
|
|
||||||
|
public Goods GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Goods Get(int key) => _dataMap[key];
|
||||||
|
public Goods this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbHook.cs
Normal file
58
Entity/Generate/ConfigTable/TbHook.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼钩
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbHook
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Hook> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Hook> _dataList;
|
||||||
|
|
||||||
|
public TbHook(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Hook>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Hook>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Hook _v;
|
||||||
|
_v = global::cfg.Hook.DeserializeHook(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Hook> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Hook> DataList => _dataList;
|
||||||
|
|
||||||
|
public Hook GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Hook Get(int key) => _dataMap[key];
|
||||||
|
public Hook this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbInitItemConfig.cs
Normal file
58
Entity/Generate/ConfigTable/TbInitItemConfig.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始物品表
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbInitItemConfig
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, InitItemConfig> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<InitItemConfig> _dataList;
|
||||||
|
|
||||||
|
public TbInitItemConfig(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, InitItemConfig>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<InitItemConfig>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
InitItemConfig _v;
|
||||||
|
_v = global::cfg.InitItemConfig.DeserializeInitItemConfig(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, InitItemConfig> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<InitItemConfig> DataList => _dataList;
|
||||||
|
|
||||||
|
public InitItemConfig GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public InitItemConfig Get(int key) => _dataMap[key];
|
||||||
|
public InitItemConfig this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbItem.cs
Normal file
58
Entity/Generate/ConfigTable/TbItem.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物品表
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbItem
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Item> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Item> _dataList;
|
||||||
|
|
||||||
|
public TbItem(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Item>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Item>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Item _v;
|
||||||
|
_v = global::cfg.Item.DeserializeItem(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Item> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Item> DataList => _dataList;
|
||||||
|
|
||||||
|
public Item GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Item Get(int key) => _dataMap[key];
|
||||||
|
public Item this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbLine.cs
Normal file
58
Entity/Generate/ConfigTable/TbLine.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼线
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbLine
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Line> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Line> _dataList;
|
||||||
|
|
||||||
|
public TbLine(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Line>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Line>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Line _v;
|
||||||
|
_v = global::cfg.Line.DeserializeLine(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Line> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Line> DataList => _dataList;
|
||||||
|
|
||||||
|
public Line GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Line Get(int key) => _dataMap[key];
|
||||||
|
public Line this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbLure.cs
Normal file
58
Entity/Generate/ConfigTable/TbLure.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 路亚饵
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbLure
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Lure> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Lure> _dataList;
|
||||||
|
|
||||||
|
public TbLure(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Lure>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Lure>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Lure _v;
|
||||||
|
_v = global::cfg.Lure.DeserializeLure(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Lure> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Lure> DataList => _dataList;
|
||||||
|
|
||||||
|
public Lure GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Lure Get(int key) => _dataMap[key];
|
||||||
|
public Lure this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbReel.cs
Normal file
58
Entity/Generate/ConfigTable/TbReel.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 渔轮
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbReel
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Reel> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Reel> _dataList;
|
||||||
|
|
||||||
|
public TbReel(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Reel>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Reel>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Reel _v;
|
||||||
|
_v = global::cfg.Reel.DeserializeReel(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Reel> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Reel> DataList => _dataList;
|
||||||
|
|
||||||
|
public Reel GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Reel Get(int key) => _dataMap[key];
|
||||||
|
public Reel this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbRod.cs
Normal file
58
Entity/Generate/ConfigTable/TbRod.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 鱼竿
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbRod
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Rod> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Rod> _dataList;
|
||||||
|
|
||||||
|
public TbRod(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Rod>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Rod>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Rod _v;
|
||||||
|
_v = global::cfg.Rod.DeserializeRod(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Rod> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Rod> DataList => _dataList;
|
||||||
|
|
||||||
|
public Rod GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Rod Get(int key) => _dataMap[key];
|
||||||
|
public Rod this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
58
Entity/Generate/ConfigTable/TbShop.cs
Normal file
58
Entity/Generate/ConfigTable/TbShop.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using Luban;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 商店
|
||||||
|
/// </summary>
|
||||||
|
public partial class TbShop
|
||||||
|
{
|
||||||
|
private readonly System.Collections.Generic.Dictionary<int, Shop> _dataMap;
|
||||||
|
private readonly System.Collections.Generic.List<Shop> _dataList;
|
||||||
|
|
||||||
|
public TbShop(JArray _buf)
|
||||||
|
{
|
||||||
|
_dataMap = new System.Collections.Generic.Dictionary<int, Shop>(_buf.Count);
|
||||||
|
_dataList = new System.Collections.Generic.List<Shop>(_buf.Count);
|
||||||
|
|
||||||
|
foreach(JObject _ele in _buf)
|
||||||
|
{
|
||||||
|
Shop _v;
|
||||||
|
_v = global::cfg.Shop.DeserializeShop(_ele);
|
||||||
|
_dataList.Add(_v);
|
||||||
|
_dataMap.Add(_v.Id, _v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public System.Collections.Generic.Dictionary<int, Shop> DataMap => _dataMap;
|
||||||
|
public System.Collections.Generic.List<Shop> DataList => _dataList;
|
||||||
|
|
||||||
|
public Shop GetOrDefault(int key) => _dataMap.TryGetValue(key, out var v) ? v : default;
|
||||||
|
public Shop Get(int key) => _dataMap[key];
|
||||||
|
public Shop this[int key] => _dataMap[key];
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
foreach(var _v in _dataList)
|
||||||
|
{
|
||||||
|
_v.ResolveRef(tables);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
50
Entity/Generate/ConfigTable/vector2.cs
Normal file
50
Entity/Generate/ConfigTable/vector2.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial struct vector2
|
||||||
|
{
|
||||||
|
public vector2(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
X = (float)_obj.GetValue("x");
|
||||||
|
Y = (float)_obj.GetValue("y");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static vector2 Deserializevector2(JToken _buf)
|
||||||
|
{
|
||||||
|
return new vector2(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly float X;
|
||||||
|
public readonly float Y;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "x:" + X + ","
|
||||||
|
+ "y:" + Y + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
53
Entity/Generate/ConfigTable/vector3.cs
Normal file
53
Entity/Generate/ConfigTable/vector3.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial struct vector3
|
||||||
|
{
|
||||||
|
public vector3(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
X = (float)_obj.GetValue("x");
|
||||||
|
Y = (float)_obj.GetValue("y");
|
||||||
|
Z = (float)_obj.GetValue("z");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static vector3 Deserializevector3(JToken _buf)
|
||||||
|
{
|
||||||
|
return new vector3(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly float X;
|
||||||
|
public readonly float Y;
|
||||||
|
public readonly float Z;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "x:" + X + ","
|
||||||
|
+ "y:" + Y + ","
|
||||||
|
+ "z:" + Z + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
56
Entity/Generate/ConfigTable/vector4.cs
Normal file
56
Entity/Generate/ConfigTable/vector4.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Luban;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace cfg
|
||||||
|
{
|
||||||
|
|
||||||
|
public partial struct vector4
|
||||||
|
{
|
||||||
|
public vector4(JToken _buf)
|
||||||
|
{
|
||||||
|
JObject _obj = _buf as JObject;
|
||||||
|
X = (float)_obj.GetValue("x");
|
||||||
|
Y = (float)_obj.GetValue("y");
|
||||||
|
Z = (float)_obj.GetValue("z");
|
||||||
|
W = (float)_obj.GetValue("w");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static vector4 Deserializevector4(JToken _buf)
|
||||||
|
{
|
||||||
|
return new vector4(_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly float X;
|
||||||
|
public readonly float Y;
|
||||||
|
public readonly float Z;
|
||||||
|
public readonly float W;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void ResolveRef(Tables tables)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "{ "
|
||||||
|
+ "x:" + X + ","
|
||||||
|
+ "y:" + Y + ","
|
||||||
|
+ "z:" + Z + ","
|
||||||
|
+ "w:" + W + ","
|
||||||
|
+ "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -589,4 +589,93 @@ namespace Fantasy
|
|||||||
[ProtoMember(1)]
|
[ProtoMember(1)]
|
||||||
public uint ErrorCode { get; set; }
|
public uint ErrorCode { get; set; }
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Chat通知Gate发送一个全服广播的聊天信息
|
||||||
|
/// </summary>
|
||||||
|
////////// ******** 聊天 *******/////////////
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class Chat2G_ChatMessage : AMessage, IAddressMessage
|
||||||
|
{
|
||||||
|
public static Chat2G_ChatMessage Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chat2G_ChatMessage = MessageObjectPool<Chat2G_ChatMessage>.Rent();
|
||||||
|
chat2G_ChatMessage.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chat2G_ChatMessage.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chat2G_ChatMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
ChatInfoTree = default;
|
||||||
|
MessageObjectPool<Chat2G_ChatMessage>.Return(this);
|
||||||
|
}
|
||||||
|
public uint OpCode() { return InnerOpcode.Chat2G_ChatMessage; }
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public ChatInfoTree ChatInfoTree { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 其他服务器发送聊天消息到Chat
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class Other2Chat_ChatMessage : AMessage, IAddressMessage
|
||||||
|
{
|
||||||
|
public static Other2Chat_ChatMessage Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var other2Chat_ChatMessage = MessageObjectPool<Other2Chat_ChatMessage>.Rent();
|
||||||
|
other2Chat_ChatMessage.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
other2Chat_ChatMessage.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return other2Chat_ChatMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
ChatInfoTree = default;
|
||||||
|
MessageObjectPool<Other2Chat_ChatMessage>.Return(this);
|
||||||
|
}
|
||||||
|
public uint OpCode() { return InnerOpcode.Other2Chat_ChatMessage; }
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public ChatInfoTree ChatInfoTree { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -18,5 +18,7 @@ namespace Fantasy
|
|||||||
public const uint Map2G_EnterMapResponse = 1207969556;
|
public const uint Map2G_EnterMapResponse = 1207969556;
|
||||||
public const uint G2Map_ExitRoomRequest = 1073751829;
|
public const uint G2Map_ExitRoomRequest = 1073751829;
|
||||||
public const uint Map2G_ExiRoomResponse = 1207969557;
|
public const uint Map2G_ExiRoomResponse = 1207969557;
|
||||||
|
public const uint Chat2G_ChatMessage = 939534099;
|
||||||
|
public const uint Other2Chat_ChatMessage = 939534100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2839,7 +2839,398 @@ namespace Fantasy
|
|||||||
[ProtoMember(2)]
|
[ProtoMember(2)]
|
||||||
public long MailId { get; set; }
|
public long MailId { get; set; }
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 发送一个聊天消息给Chat服务器,中间是经过Gate中转的
|
||||||
|
/// </summary>
|
||||||
////////// ******** 频道聊天 *******/////////////
|
////////// ******** 频道聊天 *******/////////////
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class C2Chat_SendMessageRequest : AMessage, ICustomRouteRequest
|
||||||
|
{
|
||||||
|
public static C2Chat_SendMessageRequest Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var c2Chat_SendMessageRequest = MessageObjectPool<C2Chat_SendMessageRequest>.Rent();
|
||||||
|
c2Chat_SendMessageRequest.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
c2Chat_SendMessageRequest.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return c2Chat_SendMessageRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
if (ChatInfoTree != null)
|
||||||
|
{
|
||||||
|
ChatInfoTree.Dispose();
|
||||||
|
ChatInfoTree = null;
|
||||||
|
}
|
||||||
|
MessageObjectPool<C2Chat_SendMessageRequest>.Return(this);
|
||||||
|
}
|
||||||
|
public uint OpCode() { return OuterOpcode.C2Chat_SendMessageRequest; }
|
||||||
|
[ProtoIgnore]
|
||||||
|
public Chat2C_SendMessageResponse ResponseType { get; set; }
|
||||||
|
[ProtoIgnore]
|
||||||
|
public int RouteType => Fantasy.RouteType.SocialRoute;
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public ChatInfoTree ChatInfoTree { get; set; }
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class Chat2C_SendMessageResponse : AMessage, ICustomRouteResponse
|
||||||
|
{
|
||||||
|
public static Chat2C_SendMessageResponse Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chat2C_SendMessageResponse = MessageObjectPool<Chat2C_SendMessageResponse>.Rent();
|
||||||
|
chat2C_SendMessageResponse.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chat2C_SendMessageResponse.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chat2C_SendMessageResponse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
ErrorCode = 0;
|
||||||
|
MessageObjectPool<Chat2C_SendMessageResponse>.Return(this);
|
||||||
|
}
|
||||||
|
public uint OpCode() { return OuterOpcode.Chat2C_SendMessageResponse; }
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public uint ErrorCode { get; set; }
|
||||||
|
}
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class Chat2C_Message : AMessage, ICustomRouteMessage
|
||||||
|
{
|
||||||
|
public static Chat2C_Message Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chat2C_Message = MessageObjectPool<Chat2C_Message>.Rent();
|
||||||
|
chat2C_Message.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chat2C_Message.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chat2C_Message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
if (ChatInfoTree != null)
|
||||||
|
{
|
||||||
|
ChatInfoTree.Dispose();
|
||||||
|
ChatInfoTree = null;
|
||||||
|
}
|
||||||
|
MessageObjectPool<Chat2C_Message>.Return(this);
|
||||||
|
}
|
||||||
|
public uint OpCode() { return OuterOpcode.Chat2C_Message; }
|
||||||
|
[ProtoIgnore]
|
||||||
|
public int RouteType => Fantasy.RouteType.SocialRoute;
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public ChatInfoTree ChatInfoTree { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天消息树
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class ChatInfoTree : AMessage, IDisposable
|
||||||
|
{
|
||||||
|
public static ChatInfoTree Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chatInfoTree = MessageObjectPool<ChatInfoTree>.Rent();
|
||||||
|
chatInfoTree.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chatInfoTree.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatInfoTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
ChatChannelType = default;
|
||||||
|
ChatChannelId = default;
|
||||||
|
UnitId = default;
|
||||||
|
UserName = default;
|
||||||
|
Target.Clear();
|
||||||
|
Node.Clear();
|
||||||
|
MessageObjectPool<ChatInfoTree>.Return(this);
|
||||||
|
}
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public int ChatChannelType { get; set; }
|
||||||
|
[ProtoMember(2)]
|
||||||
|
public long ChatChannelId { get; set; }
|
||||||
|
[ProtoMember(3)]
|
||||||
|
public long UnitId { get; set; }
|
||||||
|
[ProtoMember(4)]
|
||||||
|
public string UserName { get; set; }
|
||||||
|
[ProtoMember(5)]
|
||||||
|
public List<long> Target { get; set; } = new List<long>();
|
||||||
|
[ProtoMember(6)]
|
||||||
|
public List<ChatInfoNode> Node { get; set; } = new List<ChatInfoNode>();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天信息节点
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class ChatInfoNode : AMessage, IDisposable
|
||||||
|
{
|
||||||
|
public static ChatInfoNode Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chatInfoNode = MessageObjectPool<ChatInfoNode>.Rent();
|
||||||
|
chatInfoNode.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chatInfoNode.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatInfoNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
ChatNodeType = default;
|
||||||
|
ChatNodeEvent = default;
|
||||||
|
Content = default;
|
||||||
|
Color = default;
|
||||||
|
Data = null;
|
||||||
|
MessageObjectPool<ChatInfoNode>.Return(this);
|
||||||
|
}
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public int ChatNodeType { get; set; }
|
||||||
|
[ProtoMember(2)]
|
||||||
|
public int ChatNodeEvent { get; set; }
|
||||||
|
[ProtoMember(3)]
|
||||||
|
public string Content { get; set; }
|
||||||
|
[ProtoMember(4)]
|
||||||
|
public string Color { get; set; }
|
||||||
|
[ProtoMember(5)]
|
||||||
|
public byte[] Data { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天位置信息节点
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class ChatPositionNode : AMessage, IDisposable
|
||||||
|
{
|
||||||
|
public static ChatPositionNode Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chatPositionNode = MessageObjectPool<ChatPositionNode>.Rent();
|
||||||
|
chatPositionNode.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chatPositionNode.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatPositionNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
MapName = default;
|
||||||
|
PosX = default;
|
||||||
|
PosY = default;
|
||||||
|
PosZ = default;
|
||||||
|
MessageObjectPool<ChatPositionNode>.Return(this);
|
||||||
|
}
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public string MapName { get; set; }
|
||||||
|
[ProtoMember(2)]
|
||||||
|
public float PosX { get; set; }
|
||||||
|
[ProtoMember(3)]
|
||||||
|
public float PosY { get; set; }
|
||||||
|
[ProtoMember(4)]
|
||||||
|
public float PosZ { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天位置信息节点
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class ChatOpenUINode : AMessage, IDisposable
|
||||||
|
{
|
||||||
|
public static ChatOpenUINode Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chatOpenUINode = MessageObjectPool<ChatOpenUINode>.Rent();
|
||||||
|
chatOpenUINode.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chatOpenUINode.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatOpenUINode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
UIName = default;
|
||||||
|
MessageObjectPool<ChatOpenUINode>.Return(this);
|
||||||
|
}
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public string UIName { get; set; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天连接信息节点
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
[ProtoContract]
|
||||||
|
public partial class ChatLinkNode : AMessage, IDisposable
|
||||||
|
{
|
||||||
|
public static ChatLinkNode Create(bool autoReturn = true)
|
||||||
|
{
|
||||||
|
var chatLinkNode = MessageObjectPool<ChatLinkNode>.Rent();
|
||||||
|
chatLinkNode.AutoReturn = autoReturn;
|
||||||
|
|
||||||
|
if (!autoReturn)
|
||||||
|
{
|
||||||
|
chatLinkNode.SetIsPool(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chatLinkNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Return()
|
||||||
|
{
|
||||||
|
if (!AutoReturn)
|
||||||
|
{
|
||||||
|
SetIsPool(true);
|
||||||
|
AutoReturn = true;
|
||||||
|
}
|
||||||
|
else if (!IsPool())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!IsPool()) return;
|
||||||
|
Link = default;
|
||||||
|
MessageObjectPool<ChatLinkNode>.Return(this);
|
||||||
|
}
|
||||||
|
[ProtoMember(1)]
|
||||||
|
public string Link { get; set; }
|
||||||
|
}
|
||||||
[Serializable]
|
[Serializable]
|
||||||
[ProtoContract]
|
[ProtoContract]
|
||||||
public partial class ChatUserInfo : AMessage, IDisposable
|
public partial class ChatUserInfo : AMessage, IDisposable
|
||||||
@@ -4581,7 +4972,7 @@ namespace Fantasy
|
|||||||
MessageObjectPool<ItemInfo>.Return(this);
|
MessageObjectPool<ItemInfo>.Return(this);
|
||||||
}
|
}
|
||||||
[ProtoMember(1)]
|
[ProtoMember(1)]
|
||||||
public uint ConfigId { get; set; }
|
public int ConfigId { get; set; }
|
||||||
[ProtoMember(2)]
|
[ProtoMember(2)]
|
||||||
public long Id { get; set; }
|
public long Id { get; set; }
|
||||||
[ProtoMember(3)]
|
[ProtoMember(3)]
|
||||||
@@ -4631,18 +5022,18 @@ namespace Fantasy
|
|||||||
{
|
{
|
||||||
if (!IsPool()) return;
|
if (!IsPool()) return;
|
||||||
ConfigId = default;
|
ConfigId = default;
|
||||||
Price = default;
|
Price1 = default;
|
||||||
Currency = default;
|
Price2 = default;
|
||||||
Sort = default;
|
Sort = default;
|
||||||
Tag = default;
|
Tag = default;
|
||||||
MessageObjectPool<ShopItemInfo>.Return(this);
|
MessageObjectPool<ShopItemInfo>.Return(this);
|
||||||
}
|
}
|
||||||
[ProtoMember(1)]
|
[ProtoMember(1)]
|
||||||
public uint ConfigId { get; set; }
|
public int ConfigId { get; set; }
|
||||||
[ProtoMember(2)]
|
[ProtoMember(2)]
|
||||||
public uint Price { get; set; }
|
public uint Price1 { get; set; }
|
||||||
[ProtoMember(3)]
|
[ProtoMember(3)]
|
||||||
public uint Currency { get; set; }
|
public uint Price2 { get; set; }
|
||||||
[ProtoMember(4)]
|
[ProtoMember(4)]
|
||||||
public uint Sort { get; set; }
|
public uint Sort { get; set; }
|
||||||
[ProtoMember(5)]
|
[ProtoMember(5)]
|
||||||
@@ -4693,7 +5084,7 @@ namespace Fantasy
|
|||||||
MessageObjectPool<FishInfo>.Return(this);
|
MessageObjectPool<FishInfo>.Return(this);
|
||||||
}
|
}
|
||||||
[ProtoMember(1)]
|
[ProtoMember(1)]
|
||||||
public uint ConfigId { get; set; }
|
public int ConfigId { get; set; }
|
||||||
[ProtoMember(2)]
|
[ProtoMember(2)]
|
||||||
public long Id { get; set; }
|
public long Id { get; set; }
|
||||||
[ProtoMember(3)]
|
[ProtoMember(3)]
|
||||||
@@ -4795,7 +5186,7 @@ namespace Fantasy
|
|||||||
MessageObjectPool<SkillInfo>.Return(this);
|
MessageObjectPool<SkillInfo>.Return(this);
|
||||||
}
|
}
|
||||||
[ProtoMember(1)]
|
[ProtoMember(1)]
|
||||||
public uint ConfigId { get; set; }
|
public int ConfigId { get; set; }
|
||||||
[ProtoMember(2)]
|
[ProtoMember(2)]
|
||||||
public int Level { get; set; }
|
public int Level { get; set; }
|
||||||
[ProtoMember(3)]
|
[ProtoMember(3)]
|
||||||
|
|||||||
@@ -61,29 +61,32 @@ namespace Fantasy
|
|||||||
public const uint S2C_DeleteMailResponse = 2415929119;
|
public const uint S2C_DeleteMailResponse = 2415929119;
|
||||||
public const uint S2C_HaveMail = 2147493663;
|
public const uint S2C_HaveMail = 2147493663;
|
||||||
public const uint S2C_MailState = 2147493664;
|
public const uint S2C_MailState = 2147493664;
|
||||||
public const uint C2S_CreateChannelRequest = 2281711392;
|
public const uint C2Chat_SendMessageRequest = 2281711392;
|
||||||
public const uint S2C_CreateChannelResponse = 2415929120;
|
public const uint Chat2C_SendMessageResponse = 2415929120;
|
||||||
public const uint C2S_JoinChannelRequest = 2281711393;
|
public const uint Chat2C_Message = 2147493665;
|
||||||
public const uint S2C_JoinChannelResponse = 2415929121;
|
public const uint C2S_CreateChannelRequest = 2281711393;
|
||||||
public const uint C2S_SendMessageRequest = 2281711394;
|
public const uint S2C_CreateChannelResponse = 2415929121;
|
||||||
public const uint S2C_SendMessageResponse = 2415929122;
|
public const uint C2S_JoinChannelRequest = 2281711394;
|
||||||
public const uint S2C_Message = 2147493665;
|
public const uint S2C_JoinChannelResponse = 2415929122;
|
||||||
public const uint C2S_CreateClubRequest = 2281711395;
|
public const uint C2S_SendMessageRequest = 2281711395;
|
||||||
public const uint S2C_CreateClubResponse = 2415929123;
|
public const uint S2C_SendMessageResponse = 2415929123;
|
||||||
public const uint C2S_GetClubInfoRequest = 2281711396;
|
public const uint S2C_Message = 2147493666;
|
||||||
public const uint S2C_GetClubInfoResponse = 2415929124;
|
public const uint C2S_CreateClubRequest = 2281711396;
|
||||||
public const uint C2S_GetMemberListRequest = 2281711397;
|
public const uint S2C_CreateClubResponse = 2415929124;
|
||||||
public const uint S2C_GetMemberListResponse = 2415929125;
|
public const uint C2S_GetClubInfoRequest = 2281711397;
|
||||||
public const uint C2S_GetClubListRequest = 2281711398;
|
public const uint S2C_GetClubInfoResponse = 2415929125;
|
||||||
public const uint S2C_GetClubListResponse = 2415929126;
|
public const uint C2S_GetMemberListRequest = 2281711398;
|
||||||
public const uint C2S_JoinClubRequest = 2281711399;
|
public const uint S2C_GetMemberListResponse = 2415929126;
|
||||||
public const uint S2C_JoinClubResponse = 2415929127;
|
public const uint C2S_GetClubListRequest = 2281711399;
|
||||||
public const uint C2S_LeaveClubRequest = 2281711400;
|
public const uint S2C_GetClubListResponse = 2415929127;
|
||||||
public const uint S2C_LeaveClubResponse = 2415929128;
|
public const uint C2S_JoinClubRequest = 2281711400;
|
||||||
public const uint C2S_DissolveClubRequest = 2281711401;
|
public const uint S2C_JoinClubResponse = 2415929128;
|
||||||
public const uint S2C_DissolveClubResponse = 2415929129;
|
public const uint C2S_LeaveClubRequest = 2281711401;
|
||||||
public const uint C2S_DisposeJoinRequest = 2281711402;
|
public const uint S2C_LeaveClubResponse = 2415929129;
|
||||||
public const uint S2C_DisposeJoinResponse = 2415929130;
|
public const uint C2S_DissolveClubRequest = 2281711402;
|
||||||
public const uint S2C_ClubChange = 2147493666;
|
public const uint S2C_DissolveClubResponse = 2415929130;
|
||||||
|
public const uint C2S_DisposeJoinRequest = 2281711403;
|
||||||
|
public const uint S2C_DisposeJoinResponse = 2415929131;
|
||||||
|
public const uint S2C_ClubChange = 2147493667;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
20
Entity/Modules/ConfigTable/Configs.cs
Normal file
20
Entity/Modules/ConfigTable/Configs.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace NBF;
|
||||||
|
|
||||||
|
public static class Configs
|
||||||
|
{
|
||||||
|
private static cfg.Tables _tables;
|
||||||
|
public static cfg.Tables Tables => _tables;
|
||||||
|
|
||||||
|
public static void Initialize()
|
||||||
|
{
|
||||||
|
_tables = new cfg.Tables(LoadJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JArray LoadJson(string file)
|
||||||
|
{
|
||||||
|
var gameConfigText = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "cfg", $"{file}.Json"));
|
||||||
|
return JArray.Parse(gameConfigText);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,6 @@ namespace NBF.ConfigTable
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IConfigTable
|
public interface IConfigTable
|
||||||
{
|
{
|
||||||
public uint Key { get; }
|
public int Key { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Fantasy.Entitas;
|
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 聊天频道实体
|
|
||||||
/// </summary>
|
|
||||||
public class ChatChannel : Entity
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 频道绑定id
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("cid")] public long ChannelId;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 频道类型 0.地图 1.工会频道
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("type")] public uint ChannelType;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 频道名称
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("name")] public string Name = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 频道密码
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("pass")] public string Password = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 创建者
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("cr")] public long Creator;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 创建时间
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("ct")] public long CreateTime;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 频道地区 0,全球 非0地区 如果是地图频道则表示地图位置
|
|
||||||
/// </summary>
|
|
||||||
[BsonElement("region")] public int Region;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 当前频道在线人数
|
|
||||||
/// </summary>
|
|
||||||
[BsonIgnore] public readonly HashSet<long> Units = new HashSet<long>();
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Fantasy.Entitas;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 聊天频道管理
|
|
||||||
/// </summary>
|
|
||||||
public class ChatChannelCenterComponent : Entity
|
|
||||||
{
|
|
||||||
public readonly Dictionary<long, ChatChannel> Channels = new Dictionary<long, ChatChannel>();
|
|
||||||
}
|
|
||||||
14
Entity/Social/Chat/Components/ChatChannelCenterComponent.cs
Normal file
14
Entity/Social/Chat/Components/ChatChannelCenterComponent.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Fantasy.Entitas;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天中控中心
|
||||||
|
/// 1、申请、创建、解散聊天频道。
|
||||||
|
/// 2、管理聊天频道成员。
|
||||||
|
/// 3、根据频道ID找到对应的频道。
|
||||||
|
/// </summary>
|
||||||
|
public class ChatChannelCenterComponent : Entity
|
||||||
|
{
|
||||||
|
public readonly Dictionary<long, ChatChannelComponent> Channels = new();
|
||||||
|
}
|
||||||
14
Entity/Social/Chat/Components/ChatChannelComponent.cs
Normal file
14
Entity/Social/Chat/Components/ChatChannelComponent.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Fantasy.Entitas;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天频道实体
|
||||||
|
/// 1、根据频道内的玩家进行广播聊天信息。
|
||||||
|
/// 2、当前频道如果没有玩家的话,则自动销毁。
|
||||||
|
/// 3、存放当前频道的玩家信息。
|
||||||
|
/// </summary>
|
||||||
|
public sealed class ChatChannelComponent : Entity
|
||||||
|
{
|
||||||
|
public readonly HashSet<long> Units = new HashSet<long>();
|
||||||
|
}
|
||||||
50
Entity/Social/Chat/Enum/ChatChannelType.cs
Normal file
50
Entity/Social/Chat/Enum/ChatChannelType.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天频道类型
|
||||||
|
/// </summary>
|
||||||
|
[Flags]
|
||||||
|
public enum ChatChannelType
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
World = 1 << 1, // 世界频道
|
||||||
|
Private = 1 << 2, // 私聊频道
|
||||||
|
System = 1 << 3, // 系统频道
|
||||||
|
Broadcast = 1 << 4, // 广播频道
|
||||||
|
Notice = 1 << 5, // 公告频道
|
||||||
|
Team = 1 << 6, // 队伍频道
|
||||||
|
Near = 1 << 7, // 附近频道
|
||||||
|
CurrentMap = 1 << 8, // 当前地图频道
|
||||||
|
|
||||||
|
// 所有频道
|
||||||
|
All = World | Private | System | Broadcast | Notice | Team | Near,
|
||||||
|
|
||||||
|
// 其他聊天栏显示的频道
|
||||||
|
Display = World | Private | System | Broadcast | Notice | Team | Near | CurrentMap
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天节点类型
|
||||||
|
/// </summary>
|
||||||
|
public enum ChatNodeType
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Position = 1, // 位置节点
|
||||||
|
OpenUI = 2, // 打开UI节点
|
||||||
|
Link = 3, // 链接节点
|
||||||
|
Item = 4, // 物品节点
|
||||||
|
Text = 5, // 文本节点
|
||||||
|
Image = 6, // 图片节点
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天节点事件类型
|
||||||
|
/// </summary>
|
||||||
|
public enum ChatNodeEvent
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
OpenUI = 1, // 打开UI节点
|
||||||
|
OpenLink = 2, // 点击链接节点
|
||||||
|
UseItem = 3, // 使用物品节点
|
||||||
|
Position = 4, // 位置节点
|
||||||
|
}
|
||||||
17
Entity/Social/Chat/Model/ChatInfoTree.cs
Normal file
17
Entity/Social/Chat/Model/ChatInfoTree.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Runtime.Serialization;
|
||||||
|
using Fantasy;
|
||||||
|
using LightProto;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
|
||||||
|
namespace Fantasy;
|
||||||
|
|
||||||
|
public partial class ChatInfoTree
|
||||||
|
{
|
||||||
|
[BsonIgnore]
|
||||||
|
[JsonIgnore]
|
||||||
|
[ProtoIgnore]
|
||||||
|
[IgnoreDataMember]
|
||||||
|
public Scene Scene { get; set; }
|
||||||
|
}
|
||||||
11
Entity/Social/Chat/Model/ChatUnit.cs
Normal file
11
Entity/Social/Chat/Model/ChatUnit.cs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// using Fantasy.Entitas;
|
||||||
|
//
|
||||||
|
// namespace NB.Chat;
|
||||||
|
//
|
||||||
|
// public class ChatUnit : Entity
|
||||||
|
// {
|
||||||
|
// public string UserName;
|
||||||
|
// public long GateRouteId;
|
||||||
|
// public readonly Dictionary<long, ChatChannelComponent> Channels = new();
|
||||||
|
// public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
|
||||||
|
// }
|
||||||
@@ -13,11 +13,11 @@ public sealed class SocialUnit : Entity
|
|||||||
/// 当前所在地图
|
/// 当前所在地图
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long MapId;
|
public long MapId;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 当前频道
|
public readonly Dictionary<long, ChatChannelComponent> Channels = new();
|
||||||
/// </summary>
|
public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
|
||||||
public long CurrentChannel;
|
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Fantasy.Async;
|
|||||||
using Fantasy.Network.Interface;
|
using Fantasy.Network.Interface;
|
||||||
using NB.Chat;
|
using NB.Chat;
|
||||||
using NB.Game;
|
using NB.Game;
|
||||||
|
using NBF.Social;
|
||||||
|
|
||||||
namespace NB.Common;
|
namespace NB.Common;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Fantasy.Async;
|
|||||||
using Fantasy.Network.Interface;
|
using Fantasy.Network.Interface;
|
||||||
using NB.Chat;
|
using NB.Chat;
|
||||||
using NB.Game;
|
using NB.Game;
|
||||||
|
using NBF.Social;
|
||||||
|
|
||||||
namespace NB.Common;
|
namespace NB.Common;
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public static class ItemFactory
|
|||||||
/// <param name="configId"></param>
|
/// <param name="configId"></param>
|
||||||
/// <param name="count"></param>
|
/// <param name="count"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Item Create(Scene scene, uint configId, int count = 1)
|
public static Item Create(Scene scene, int configId, int count = 1)
|
||||||
{
|
{
|
||||||
var item = Entity.Create<Item>(scene, true, true);
|
var item = Entity.Create<Item>(scene, true, true);
|
||||||
item.ConfigId = configId;
|
item.ConfigId = configId;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ namespace NB.Game;
|
|||||||
|
|
||||||
public static class ItemHelper
|
public static class ItemHelper
|
||||||
{
|
{
|
||||||
public static ItemBasicType GetType(uint id)
|
public static ItemBasicType GetType(int id)
|
||||||
{
|
{
|
||||||
return (ItemBasicType)(id / 10000);
|
return (ItemBasicType)(id / 10000);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public static class PlayerItemContainerComponentSystem
|
|||||||
|
|
||||||
#region Add
|
#region Add
|
||||||
|
|
||||||
public static async FTask Add(this PlayerItemContainerComponent self, Dictionary<uint, int> items)
|
public static async FTask Add(this PlayerItemContainerComponent self, Dictionary<int, int> items)
|
||||||
{
|
{
|
||||||
foreach (var (configId, count) in items)
|
foreach (var (configId, count) in items)
|
||||||
{
|
{
|
||||||
@@ -105,7 +105,7 @@ public static class PlayerItemContainerComponentSystem
|
|||||||
await self.Save();
|
await self.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async FTask Add(this PlayerItemContainerComponent self, uint configId, int count,
|
public static async FTask Add(this PlayerItemContainerComponent self, int configId, int count,
|
||||||
bool needSave = true)
|
bool needSave = true)
|
||||||
{
|
{
|
||||||
var item = ItemFactory.Create(self.Scene, configId, count);
|
var item = ItemFactory.Create(self.Scene, configId, count);
|
||||||
|
|||||||
@@ -158,27 +158,28 @@ public static class PlayerManageComponentSystem
|
|||||||
player.Exp = 999;
|
player.Exp = 999;
|
||||||
player.Head = "xxx.png";
|
player.Head = "xxx.png";
|
||||||
|
|
||||||
var list = InitConfig.GetList();
|
// var list = InitConfig.GetList();
|
||||||
|
var list = Configs.Tables.TbInitItemConfig.DataList;
|
||||||
|
|
||||||
|
|
||||||
Dictionary<ItemBasicType, Dictionary<uint, int>>
|
Dictionary<ItemBasicType, Dictionary<int, int>>
|
||||||
addDic = new Dictionary<ItemBasicType, Dictionary<uint, int>>();
|
addDic = new Dictionary<ItemBasicType, Dictionary<int, int>>();
|
||||||
foreach (var initConfig in list)
|
foreach (var initConfig in list)
|
||||||
{
|
{
|
||||||
var itemType = ItemHelper.GetType(initConfig.Id);
|
var itemType = ItemHelper.GetType(initConfig.Id);
|
||||||
if (!addDic.TryGetValue(itemType, out var dic))
|
if (!addDic.TryGetValue(itemType, out var dic))
|
||||||
{
|
{
|
||||||
dic = new Dictionary<uint, int>();
|
dic = new Dictionary<int, int>();
|
||||||
addDic.Add(itemType, dic);
|
addDic.Add(itemType, dic);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dic.ContainsKey(initConfig.Id))
|
if (!dic.ContainsKey(initConfig.Id))
|
||||||
{
|
{
|
||||||
dic.Add(initConfig.Id, initConfig.Amount);
|
dic.Add(initConfig.Id, initConfig.Count);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dic[initConfig.Id] += initConfig.Amount;
|
dic[initConfig.Id] += initConfig.Count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public static class PlayerSystem
|
|||||||
/// <param name="self"></param>
|
/// <param name="self"></param>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <param name="items"></param>
|
/// <param name="items"></param>
|
||||||
public static async FTask AddItems(this Player self, Dictionary<uint, int> items)
|
public static async FTask AddItems(this Player self, Dictionary<int, int> items)
|
||||||
{
|
{
|
||||||
|
|
||||||
var itemContainer = self.GetComponent<PlayerItemContainerComponent>();
|
var itemContainer = self.GetComponent<PlayerItemContainerComponent>();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public static class PlayerWalletComponentSystem
|
|||||||
/// <param name="configId"></param>
|
/// <param name="configId"></param>
|
||||||
/// <param name="count"></param>
|
/// <param name="count"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static bool Have(this PlayerWalletComponent self, uint configId, int count)
|
public static bool Have(this PlayerWalletComponent self, int configId, int count)
|
||||||
{
|
{
|
||||||
if (self.Currency.TryGetValue(configId, out var value))
|
if (self.Currency.TryGetValue(configId, out var value))
|
||||||
{
|
{
|
||||||
@@ -38,7 +38,7 @@ public static class PlayerWalletComponentSystem
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async FTask Add(this PlayerWalletComponent self, uint configId, int count)
|
public static async FTask Add(this PlayerWalletComponent self, int configId, int count)
|
||||||
{
|
{
|
||||||
if (count < 1)
|
if (count < 1)
|
||||||
{
|
{
|
||||||
@@ -54,7 +54,7 @@ public static class PlayerWalletComponentSystem
|
|||||||
await self.Save();
|
await self.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async FTask Sub(this PlayerWalletComponent self, uint configId, int count)
|
public static async FTask Sub(this PlayerWalletComponent self, int configId, int count)
|
||||||
{
|
{
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,4 +12,8 @@
|
|||||||
<ProjectReference Include="..\Entity\Entity.csproj" />
|
<ProjectReference Include="..\Entity\Entity.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Social\Chat\Handler\Inner\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -140,8 +140,10 @@ public sealed class OnCreateSceneEvent : AsyncEventSystem<OnCreateScene>
|
|||||||
Log.Info($"初始化 Social 场景: {scene.Id}");
|
Log.Info($"初始化 Social 场景: {scene.Id}");
|
||||||
//用于管理玩家的组件
|
//用于管理玩家的组件
|
||||||
scene.AddComponent<SocialUnitManageComponent>();
|
scene.AddComponent<SocialUnitManageComponent>();
|
||||||
scene.AddComponent<ChatChannelCenterComponent>();
|
|
||||||
scene.AddComponent<MailManageComponent>();
|
scene.AddComponent<MailManageComponent>();
|
||||||
|
//聊天
|
||||||
|
// 聊天频道中控中心组件。
|
||||||
|
scene.AddComponent<ChatChannelCenterComponent>();
|
||||||
await FTask.CompletedTask;
|
await FTask.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Fantasy;
|
|
||||||
using Fantasy.Async;
|
|
||||||
using Fantasy.Network.Interface;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求创建频道
|
|
||||||
/// </summary>
|
|
||||||
public class
|
|
||||||
C2S_CreateChannelRequestHandler : AddressRPC<SocialUnit, C2S_CreateChannelRequest, S2C_CreateChannelResponse>
|
|
||||||
{
|
|
||||||
protected override async FTask Run(SocialUnit entity, C2S_CreateChannelRequest request,
|
|
||||||
S2C_CreateChannelResponse response, Action reply)
|
|
||||||
{
|
|
||||||
var channelCenter = entity.Scene.GetComponent<ChatChannelCenterComponent>();
|
|
||||||
if (channelCenter == null)
|
|
||||||
{
|
|
||||||
response.ErrorCode = ErrorCode.ErrServer;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var channel = await channelCenter.Create(entity);
|
|
||||||
|
|
||||||
response.ChannelId = channel.Id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
// using Fantasy;
|
|
||||||
// using Fantasy.Async;
|
|
||||||
// using Fantasy.Network.Interface;
|
|
||||||
//
|
|
||||||
// namespace NB.Chat;
|
|
||||||
//
|
|
||||||
// public class
|
|
||||||
// C2S_GetOfflineMessageRequestHandler : AddressRPC<SocialUnit, C2S_GetOfflineMessageRequest,
|
|
||||||
// S2C_GetOfflineMessageResponse>
|
|
||||||
// {
|
|
||||||
// protected override async FTask Run(SocialUnit entity, C2S_GetOfflineMessageRequest request,
|
|
||||||
// S2C_GetOfflineMessageResponse response,
|
|
||||||
// Action reply)
|
|
||||||
// {
|
|
||||||
// var chatUnitManage = entity.Scene.GetComponent<SocialUnitManageComponent>();
|
|
||||||
// if (chatUnitManage.NotSendMessage.TryGetValue(entity.Id, out var list))
|
|
||||||
// {
|
|
||||||
// response.Message.AddRange(list);
|
|
||||||
// chatUnitManage.NotSendMessage.RemoveByKey(entity.Id);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// await FTask.CompletedTask;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Fantasy;
|
|
||||||
using Fantasy.Async;
|
|
||||||
using Fantasy.Network.Interface;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 请求进入频道
|
|
||||||
/// </summary>
|
|
||||||
public class
|
|
||||||
C2S_JoinChannelRequestHandler : AddressRPC<SocialUnit, C2S_JoinChannelRequest, S2C_JoinChannelResponse>
|
|
||||||
{
|
|
||||||
protected override async FTask Run(SocialUnit entity, C2S_JoinChannelRequest request,
|
|
||||||
S2C_JoinChannelResponse response, Action reply)
|
|
||||||
{
|
|
||||||
if (request.Target < 1)
|
|
||||||
{
|
|
||||||
response.ErrorCode = ErrorCode.ErrArgs;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var channelCenter = entity.Scene.GetComponent<ChatChannelCenterComponent>();
|
|
||||||
if (channelCenter == null)
|
|
||||||
{
|
|
||||||
response.ErrorCode = ErrorCode.ErrServer;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var oldChannelId = entity.CurrentChannel;
|
|
||||||
if (oldChannelId > 0)
|
|
||||||
{
|
|
||||||
//退出旧的频道
|
|
||||||
var oldChannel = await channelCenter.Get(oldChannelId);
|
|
||||||
if (oldChannel != null)
|
|
||||||
{
|
|
||||||
oldChannel.Exit(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//加入新频道
|
|
||||||
var newChannel = await channelCenter.Get(request.Target);
|
|
||||||
if (newChannel != null)
|
|
||||||
{
|
|
||||||
if (newChannel.ChannelType == 1)
|
|
||||||
{
|
|
||||||
//工会频道需要再工会才能加入
|
|
||||||
}
|
|
||||||
else if (newChannel.ChannelType == 0)
|
|
||||||
{
|
|
||||||
//地图频道需要判断在这个地图才能加入
|
|
||||||
}
|
|
||||||
|
|
||||||
newChannel.Enter(entity);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
response.ErrorCode = ErrorCode.ChatNotChannel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Text;
|
|
||||||
using Fantasy;
|
|
||||||
using Fantasy.Async;
|
|
||||||
using Fantasy.Helper;
|
|
||||||
using Fantasy.Network.Interface;
|
|
||||||
using NB.Game;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
public sealed class
|
|
||||||
C2S_SendMessageRequestHandler : AddressRPC<SocialUnit, C2S_SendMessageRequest, S2C_SendMessageResponse>
|
|
||||||
{
|
|
||||||
protected override async FTask Run(SocialUnit socialUnit, C2S_SendMessageRequest request,
|
|
||||||
S2C_SendMessageResponse response, Action reply)
|
|
||||||
{
|
|
||||||
if (request.Target < 1)
|
|
||||||
{
|
|
||||||
response.ErrorCode = ErrorCode.ErrArgs;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SocialSceneHelper.BroadcastChannel(socialUnit.Scene, request.Target, new ChatMessageInfo()
|
|
||||||
{
|
|
||||||
SendTime = TimeHelper.Now,
|
|
||||||
Content = request.Message,
|
|
||||||
});
|
|
||||||
// if (request.Type == 0) //频道聊天
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
// else if (request.Type == 1) //私聊
|
|
||||||
// {
|
|
||||||
// //发送私聊
|
|
||||||
// SocialSceneHelper.PrivateMessage(socialUnit.Scene, socialUnit.Id, request.Target, new ChatMessageInfo()
|
|
||||||
// {
|
|
||||||
// SendTime = TimeHelper.Now,
|
|
||||||
// Content = request.Message,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
// var list = new List<long>()
|
|
||||||
// {
|
|
||||||
// 337951357380329472,
|
|
||||||
// 337951357380329473,
|
|
||||||
// 337951357380329474,
|
|
||||||
// 337951357380329475,
|
|
||||||
// 337951357380329476,
|
|
||||||
// 337951357380329477,
|
|
||||||
// 337951357380329478,
|
|
||||||
// 337951357380329479,
|
|
||||||
// 337951357380329480,
|
|
||||||
// 337951357380329481,
|
|
||||||
// 337951357380329482,
|
|
||||||
// 337951357380329483,
|
|
||||||
// 337951357380329484,
|
|
||||||
// 337951357380329485,
|
|
||||||
// 337951357380329486,
|
|
||||||
// 337951357380329487,
|
|
||||||
// 337951357380329488,
|
|
||||||
// 337951357380329489,
|
|
||||||
// 337951357380329490,
|
|
||||||
// 337951357380329491,
|
|
||||||
// 337951357380329492,
|
|
||||||
// 337951357380329493,
|
|
||||||
// 337951357380329494,
|
|
||||||
// 337951357380329495,
|
|
||||||
// 337951357380329496,
|
|
||||||
// 337951357380329497,
|
|
||||||
// 337951357380329498,
|
|
||||||
// 337951357380329499,
|
|
||||||
// 337951357380329500,
|
|
||||||
// 337951357380329501,
|
|
||||||
// 337951357380329502,
|
|
||||||
// 337951357380329503,
|
|
||||||
// 337951357380329504,
|
|
||||||
// 337951357380329505,
|
|
||||||
// 337951357380329506,
|
|
||||||
// 337951357380329507,
|
|
||||||
// 337951357380329508,
|
|
||||||
// 337951357380329509,
|
|
||||||
// 337951357380329510,
|
|
||||||
// 337951357380329511,
|
|
||||||
// 337951357380329512,
|
|
||||||
// 337951357380329513,
|
|
||||||
// 337951357380329514,
|
|
||||||
// 337951357380329515,
|
|
||||||
// 337951357380329516,
|
|
||||||
// 337951357380329517,
|
|
||||||
// 337951357380329518,
|
|
||||||
// 337951357380329519,
|
|
||||||
// 337951357380329520,
|
|
||||||
// 337951357380329521,
|
|
||||||
// 337951357380329522,
|
|
||||||
// 337951357380329523,
|
|
||||||
// 337951357380329524,
|
|
||||||
// 337951357380329525,
|
|
||||||
// 337951357380329526,
|
|
||||||
// 337951357380329527,
|
|
||||||
// 337951357380329528,
|
|
||||||
// 337951357380329529,
|
|
||||||
// 337951357380329530,
|
|
||||||
// 337951357380329531,
|
|
||||||
// 337951357380329532,
|
|
||||||
// 337951357380329533,
|
|
||||||
// 337951357380329534,
|
|
||||||
// 337951357380329535,
|
|
||||||
// 337951357380329536,
|
|
||||||
// 337951357380329537,
|
|
||||||
// 337951357380329538,
|
|
||||||
// 337951357380329539,
|
|
||||||
// 337951357380329540,
|
|
||||||
// 337951357380329541,
|
|
||||||
// 337951357380329542,
|
|
||||||
// 337951357380329543,
|
|
||||||
// 337951357380329544,
|
|
||||||
// 337951357380329545,
|
|
||||||
// 337951357380329546,
|
|
||||||
// 337951357380329547,
|
|
||||||
// 337951357380329548,
|
|
||||||
// 337951357380329549,
|
|
||||||
// 337951357380329550,
|
|
||||||
// 337951357380329551,
|
|
||||||
// 337951357380329552,
|
|
||||||
// 337951357380329553,
|
|
||||||
// 337951357380329554,
|
|
||||||
// 337951357380329555,
|
|
||||||
// 337951357380329556,
|
|
||||||
// 337951357380329557,
|
|
||||||
// 337951357380329558,
|
|
||||||
// 337951357380329559,
|
|
||||||
// 337951357380329560,
|
|
||||||
// 337951357380329561,
|
|
||||||
// 337951357380329562,
|
|
||||||
// 337951357380329563,
|
|
||||||
// 337951357380329564,
|
|
||||||
// 337951357380329565,
|
|
||||||
// 337951357380329566,
|
|
||||||
// 337951357380329567,
|
|
||||||
// 337951357380329568,
|
|
||||||
// 337951357380329569,
|
|
||||||
// 337951357380329570,
|
|
||||||
// 337951357380329571
|
|
||||||
// };
|
|
||||||
//
|
|
||||||
// Stopwatch stopwatch = new Stopwatch();
|
|
||||||
// stopwatch.Start();
|
|
||||||
// var infoList = await CacheHandler.GetPlayerBasicCacheInfos(socialUnit.Scene,list);
|
|
||||||
// stopwatch.Stop();
|
|
||||||
// Log.Info($"查询数量={infoList.Count} 耗时={stopwatch.ElapsedMilliseconds}");
|
|
||||||
//
|
|
||||||
|
|
||||||
await FTask.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
// using Fantasy;
|
||||||
|
// using Fantasy.Async;
|
||||||
|
// using Fantasy.Entitas;
|
||||||
|
// using Fantasy.Network.Interface;
|
||||||
|
//
|
||||||
|
// namespace NB.Chat;
|
||||||
|
//
|
||||||
|
// public sealed class G2Chat_LoginRequestHandler : AddressRPC<Scene, G2Chat_LoginRequest, Chat2G_LoginResponse>
|
||||||
|
// {
|
||||||
|
// protected override async FTask Run(Scene scene, G2Chat_LoginRequest request, Chat2G_LoginResponse response, Action reply)
|
||||||
|
// {
|
||||||
|
// var chatUnit = scene.GetComponent<ChatUnitManageComponent>().Add(request.UnitId, request.UserName, request.GateRouteId);
|
||||||
|
// response.ChatRouteId = chatUnit.RunTimeId;
|
||||||
|
// // 这里模拟创建一个频道用于测试用
|
||||||
|
// var chatChannelCenterComponent = scene.GetComponent<ChatChannelCenterComponent>();
|
||||||
|
// var chatChannelComponent = chatChannelCenterComponent.Apply(1);
|
||||||
|
// // 加入到聊天频道
|
||||||
|
// chatChannelComponent.JoinChannel(request.UnitId);
|
||||||
|
// await FTask.CompletedTask;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// using Fantasy.Async;
|
||||||
|
// using Fantasy.Network.Interface;
|
||||||
|
//
|
||||||
|
// namespace NB.Chat;
|
||||||
|
//
|
||||||
|
// public sealed class G2Chat_OfflineRequestHandler : AddressRPC<ChatUnit, G2Chat_OfflineRequest, Chat2G_OfflineResponse>
|
||||||
|
// {
|
||||||
|
// protected override async FTask Run(ChatUnit chatUnit, G2Chat_OfflineRequest request, Chat2G_OfflineResponse response, Action reply)
|
||||||
|
// {
|
||||||
|
// await FTask.CompletedTask;
|
||||||
|
// chatUnit.Scene.GetComponent<ChatUnitManageComponent>().Remove(chatUnit.Id);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Async;
|
||||||
|
using Fantasy.Network.Interface;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public sealed class Other2Chat_ChatMessageHandler : Address<SocialUnit, Other2Chat_ChatMessage>
|
||||||
|
{
|
||||||
|
protected override async FTask Run(SocialUnit chatUnit, Other2Chat_ChatMessage message)
|
||||||
|
{
|
||||||
|
var result = ChatSceneHelper.Distribution(chatUnit, message.ChatInfoTree, false);
|
||||||
|
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
Log.Warning($"Other2Chat_ChatMessageHandler: Distribution failed, result: {result}");
|
||||||
|
}
|
||||||
|
|
||||||
|
await FTask.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Async;
|
||||||
|
using Fantasy.Network.Interface;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public sealed class C2Chat_SendMessageRequestHandler : AddressRPC<SocialUnit, C2Chat_SendMessageRequest, Chat2C_SendMessageResponse>
|
||||||
|
{
|
||||||
|
protected override async FTask Run(SocialUnit chatUnit, C2Chat_SendMessageRequest request, Chat2C_SendMessageResponse response, Action reply)
|
||||||
|
{
|
||||||
|
response.ErrorCode = ChatSceneHelper.Distribution(chatUnit, request.ChatInfoTree);
|
||||||
|
await FTask.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
Hotfix/Social/Chat/Helper/ChatChannelCenterHelper.cs
Normal file
39
Hotfix/Social/Chat/Helper/ChatChannelCenterHelper.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Fantasy;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public static class ChatChannelCenterHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 申请一个频道
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="channelId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatChannelComponent Apply(Scene scene, long channelId)
|
||||||
|
{
|
||||||
|
return scene.GetComponent<ChatChannelCenterComponent>().Apply(channelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 尝试获取一个频道
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="channelId"></param>
|
||||||
|
/// <param name="channel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool TryGet(Scene scene, long channelId, out ChatChannelComponent channel)
|
||||||
|
{
|
||||||
|
return scene.GetComponent<ChatChannelCenterComponent>().TryGet(channelId, out channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 解散一个频道
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="channelId"></param>
|
||||||
|
public static void Disband(Scene scene, long channelId)
|
||||||
|
{
|
||||||
|
scene.GetComponent<ChatChannelCenterComponent>().Disband(channelId);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
Hotfix/Social/Chat/Helper/ChatHelper.cs
Normal file
30
Hotfix/Social/Chat/Helper/ChatHelper.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Platform.Net;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public static class ChatHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 发送一个聊天消息给ChatScene(不能在ChatScene中调用)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="chatUnitRouteId"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
public static void SendChatMessage(Scene scene, long chatUnitRouteId, ChatInfoTree tree)
|
||||||
|
{
|
||||||
|
if (scene.SceneType == SceneType.Social)
|
||||||
|
{
|
||||||
|
Log.Warning("ChatHelper.SendChatMessage: scene is not a chat scene.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var other2ChatChatMessage = new Other2Chat_ChatMessage()
|
||||||
|
{
|
||||||
|
ChatInfoTree = tree
|
||||||
|
};
|
||||||
|
|
||||||
|
// scene.NetworkMessagingComponent.SendInnerRoute(chatUnitRouteId, other2ChatChatMessage);
|
||||||
|
scene.NetworkMessagingComponent.Send(chatUnitRouteId, other2ChatChatMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
128
Hotfix/Social/Chat/Helper/ChatNodeFactory.cs
Normal file
128
Hotfix/Social/Chat/Helper/ChatNodeFactory.cs
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
// using Fantasy;
|
||||||
|
//
|
||||||
|
// namespace NB.Chat
|
||||||
|
// {
|
||||||
|
// /// <summary>
|
||||||
|
// /// 聊天信息节点
|
||||||
|
// /// </summary>
|
||||||
|
// public static class ChatNodeFactory
|
||||||
|
// {
|
||||||
|
// /// <summary>
|
||||||
|
// /// 添加文本节点
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="chatInfoTree"></param>
|
||||||
|
// /// <param name="content"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public static ChatInfoTree AddendTextNode(this ChatInfoTree chatInfoTree, string content)
|
||||||
|
// {
|
||||||
|
// var chatInfoNode = new ChatInfoNode()
|
||||||
|
// {
|
||||||
|
// ChatNodeType = (int)ChatNodeType.Text,
|
||||||
|
// Content = content
|
||||||
|
// };
|
||||||
|
// chatInfoTree.Node.Add(chatInfoNode);
|
||||||
|
// return chatInfoTree;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /// <summary>
|
||||||
|
// /// 添加链接节点
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="chatInfoTree"></param>
|
||||||
|
// /// <param name="content"></param>
|
||||||
|
// /// <param name="link"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public static ChatInfoTree AddendLinkNode(this ChatInfoTree chatInfoTree, string content, string link)
|
||||||
|
// {
|
||||||
|
// var chatLinkNode = new ChatLinkNode()
|
||||||
|
// {
|
||||||
|
// Link = link
|
||||||
|
// };
|
||||||
|
// var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
|
||||||
|
// var chatInfoNode = new ChatInfoNode()
|
||||||
|
// {
|
||||||
|
// ChatNodeType = (int)ChatNodeType.Link,
|
||||||
|
// ChatNodeEvent = (int)ChatNodeEvent.OpenLink,
|
||||||
|
// Content = content,
|
||||||
|
// Data = serializerComponent.Serialize(chatLinkNode)
|
||||||
|
// };
|
||||||
|
// chatInfoTree.Node.Add(chatInfoNode);
|
||||||
|
// return chatInfoTree;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /// <summary>
|
||||||
|
// /// 添加图片节点
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="chatInfoTree"></param>
|
||||||
|
// /// <param name="content"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public static ChatInfoTree AddendImageNode(this ChatInfoTree chatInfoTree, string content)
|
||||||
|
// {
|
||||||
|
// var chatInfoNode = new ChatInfoNode()
|
||||||
|
// {
|
||||||
|
// ChatNodeType = (int)ChatNodeType.Image,
|
||||||
|
// Content = content
|
||||||
|
// };
|
||||||
|
// chatInfoTree.Node.Add(chatInfoNode);
|
||||||
|
// return chatInfoTree;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /// <summary>
|
||||||
|
// /// 添加打开UI节点
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="chatInfoTree"></param>
|
||||||
|
// /// <param name="content"></param>
|
||||||
|
// /// <param name="uiName"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public static ChatInfoTree AddendOpenUINode(this ChatInfoTree chatInfoTree, string content, string uiName)
|
||||||
|
// {
|
||||||
|
// var chatOpenUINode = new ChatOpenUINode()
|
||||||
|
// {
|
||||||
|
// UIName = uiName
|
||||||
|
// };
|
||||||
|
// var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
|
||||||
|
// var chatInfoNode = new ChatInfoNode()
|
||||||
|
// {
|
||||||
|
// ChatNodeType = (int)ChatNodeType.OpenUI,
|
||||||
|
// ChatNodeEvent = (int)ChatNodeEvent.OpenUI,
|
||||||
|
// Content = content,
|
||||||
|
// Data = serializerComponent.Serialize(chatOpenUINode)
|
||||||
|
// };
|
||||||
|
// chatInfoTree.Node.Add(chatInfoNode);
|
||||||
|
// return chatInfoTree;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /// <summary>
|
||||||
|
// /// 添加位置节点
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="chatInfoTree"></param>
|
||||||
|
// /// <param name="content"></param>
|
||||||
|
// /// <param name="mapName"></param>
|
||||||
|
// /// <param name="mapX"></param>
|
||||||
|
// /// <param name="mapY"></param>
|
||||||
|
// /// <param name="mapZ"></param>
|
||||||
|
// /// <returns></returns>
|
||||||
|
// public static ChatInfoTree AddendPositionNode(this ChatInfoTree chatInfoTree, string content, string mapName,
|
||||||
|
// float mapX, float mapY, float mapZ)
|
||||||
|
// {
|
||||||
|
// var chatPositionNode = new ChatPositionNode()
|
||||||
|
// {
|
||||||
|
// MapName = mapName,
|
||||||
|
// PosX = mapX,
|
||||||
|
// PosY = mapY,
|
||||||
|
// PosZ = mapZ,
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
|
||||||
|
// var chatInfoNode = new ChatInfoNode()
|
||||||
|
// {
|
||||||
|
// ChatNodeType = (int)ChatNodeType.Position,
|
||||||
|
// ChatNodeEvent = (int)ChatNodeEvent.Position,
|
||||||
|
// Content = content,
|
||||||
|
// Data = serializerComponent.Serialize(chatPositionNode)
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// chatInfoTree.Node.Add(chatInfoNode);
|
||||||
|
// return chatInfoTree;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
258
Hotfix/Social/Chat/Helper/ChatSceneHelper.cs
Normal file
258
Hotfix/Social/Chat/Helper/ChatSceneHelper.cs
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
using System.Threading.Channels;
|
||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Helper;
|
||||||
|
using Fantasy.Platform.Net;
|
||||||
|
using NBF.Social;
|
||||||
|
|
||||||
|
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public static class ChatSceneHelper
|
||||||
|
{
|
||||||
|
private const int ChatCD = 1000;
|
||||||
|
private const int MaxTextLength = 10;
|
||||||
|
private const int MaxShowItemCount = 2;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天消息分发入口
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="chatUnit"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
/// <param name="isCheckSendTime"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static uint Distribution(SocialUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
|
||||||
|
{
|
||||||
|
var result = Condition(chatUnit, tree, isCheckSendTime);
|
||||||
|
|
||||||
|
if (result != 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ((ChatChannelType)tree.ChatChannelType)
|
||||||
|
{
|
||||||
|
case ChatChannelType.Broadcast:
|
||||||
|
{
|
||||||
|
Broadcast(chatUnit.Scene, tree);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case ChatChannelType.Team:
|
||||||
|
{
|
||||||
|
return Channel(chatUnit, tree);
|
||||||
|
}
|
||||||
|
case ChatChannelType.Private:
|
||||||
|
{
|
||||||
|
return Private(chatUnit, tree);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// 这个1代表当前频道不存在。
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天消息条件判断
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="chatUnit"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
/// <param name="isCheckSendTime"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static uint Condition(SocialUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
|
||||||
|
{
|
||||||
|
// 每个频道可能聊天的间隔都不一样。
|
||||||
|
// 这里的条件判断,是根据频道的类型,来判断是否到达了聊天的间隔。
|
||||||
|
var now = TimeHelper.Now;
|
||||||
|
|
||||||
|
if (isCheckSendTime)
|
||||||
|
{
|
||||||
|
// 这里的间隔时间,是根据频道的类型,来获取的。
|
||||||
|
chatUnit.SendTime.TryGetValue(tree.ChatChannelType, out var sendTime);
|
||||||
|
// 判定聊天间隔是否到达
|
||||||
|
// 其实的话,这个ChatCD应该是根据频道的类型,来获取的。
|
||||||
|
// 一般的话都是做一个配置表,通过配置表来获取不同频道的时间间隔。
|
||||||
|
if (now - sendTime < ChatCD)
|
||||||
|
{
|
||||||
|
// 这个1代表当前频道聊天的间隔过短
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判定聊天内容是否超长
|
||||||
|
|
||||||
|
var itemCount = 0;
|
||||||
|
var chatTextSize = 0;
|
||||||
|
|
||||||
|
foreach (var chatInfoNode in tree.Node)
|
||||||
|
{
|
||||||
|
switch ((ChatNodeType)chatInfoNode.ChatNodeType)
|
||||||
|
{
|
||||||
|
case ChatNodeType.Text:
|
||||||
|
{
|
||||||
|
chatTextSize += chatInfoNode.Content.Length;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ChatNodeType.Image:
|
||||||
|
{
|
||||||
|
// 规定图片占聊天消息的5个字符长度
|
||||||
|
chatTextSize += 5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ChatNodeType.OpenUI:
|
||||||
|
{
|
||||||
|
// 规定OpenUI占聊天消息的10个字符长度
|
||||||
|
chatTextSize += 10;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ChatNodeType.Item:
|
||||||
|
{
|
||||||
|
itemCount++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chatTextSize > MaxTextLength)
|
||||||
|
{
|
||||||
|
// 这个2代表当前频道聊天内容超长
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemCount > MaxShowItemCount)
|
||||||
|
{
|
||||||
|
// 这个3代表当前频道聊天里道具数量过多
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isCheckSendTime)
|
||||||
|
{
|
||||||
|
// 更新当前频道的发送时间
|
||||||
|
chatUnit.SendTime[tree.ChatChannelType] = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region 不同聊天频道的实现
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 广播消息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
private static void Broadcast(Scene scene, ChatInfoTree tree)
|
||||||
|
{
|
||||||
|
var networkMessagingComponent = scene.NetworkMessagingComponent;
|
||||||
|
var chatMessage = new Chat2G_ChatMessage()
|
||||||
|
{
|
||||||
|
ChatInfoTree = tree
|
||||||
|
};
|
||||||
|
|
||||||
|
if (tree.Target.Count > 0)
|
||||||
|
{
|
||||||
|
var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>();
|
||||||
|
// 给一部分人广播消息
|
||||||
|
foreach (var chatUnitId in tree.Target)
|
||||||
|
{
|
||||||
|
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
|
||||||
|
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送给所有Gate服务器,让Gate服务器转发给其他客户端
|
||||||
|
var gateConfigs = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Gate);
|
||||||
|
foreach (var gateSceneConfig in gateConfigs)
|
||||||
|
{
|
||||||
|
// 这里是要发送一个消息给Gate服务器,Gate服务器再转发给其他客户端
|
||||||
|
// networkMessagingComponent.SendInnerRoute(gateSceneConfig.RouteId, chatMessage);
|
||||||
|
networkMessagingComponent.Send(gateSceneConfig.Address, chatMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送频道消息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="chatUnit"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
private static uint Channel(SocialUnit chatUnit, ChatInfoTree tree)
|
||||||
|
{
|
||||||
|
// 那组队,公会、地图、等这个的聊天,如何使用频道呢?
|
||||||
|
// 这里的频道,是指一个频道,比如一个公会的频道,一个队伍的频道,一个地图的频道。
|
||||||
|
// 1、一般组队工会、地图等,都是有一个创建的一个逻辑,咱们个在这个创建的逻辑中,根据队伍、公会、地图的ID
|
||||||
|
// 把这些ID当做频道ID,然后发送到Chat服务器,先申请一个频道,把这个频道ID返回给创建公会队伍的逻辑。
|
||||||
|
// 这时候,队伍公会、发送聊天消息的时候,就会根据这个ID来进行发送。
|
||||||
|
// 2、地图同样道理,创建地图的时候,也会有一个创建的逻辑,这个逻辑会返回一个地图的ID,这个ID就是地图的频道ID。
|
||||||
|
// 3、这这些ID根据频道类型,发送给客户端,客户端发送的时候,根据频道不同,拿不同的ID来发送。
|
||||||
|
|
||||||
|
// 课外:
|
||||||
|
// 客户端创建一个频道、拿到这个频道号,告诉其他人,其他人通过这个频道ID加入到这个频道。
|
||||||
|
// 客户端创建一个频道,邀请其他人加入到这个频道,其他人可能客户端会接收一个协议,就是邀请你加入到这个频道,如果同意,
|
||||||
|
// 你就加入到这个频道(你点同意后,会发送一个消息给聊天服务器,聊天服务器会把你加入到这个频道)。
|
||||||
|
|
||||||
|
if (!chatUnit.Channels.TryGetValue(tree.ChatChannelId, out var channel))
|
||||||
|
{
|
||||||
|
// 这个1代表当前频道不存在。
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
channel.Send(tree);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送私聊消息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="chatUnit"></param>
|
||||||
|
/// <param name="tree"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static uint Private(SocialUnit chatUnit, ChatInfoTree tree)
|
||||||
|
{
|
||||||
|
// 私聊,就是两个玩家之间,直接聊天。
|
||||||
|
// 1、首先,客户端需要知道对方的ID,这个ID是通过什么方式获取的呢?
|
||||||
|
// 2、客户端需要发送一个私聊消息给聊天服务器,聊天服务器需要把这个消息转发给对方。
|
||||||
|
// 3、对方收到消息后,需要显示出来。
|
||||||
|
// 4、聊天服务器需要记录这个私聊消息,并把这个消息转发给两个玩家。
|
||||||
|
// 5、两个玩家收到消息后,需要显示出来。
|
||||||
|
|
||||||
|
if (tree.Target == null || tree.Target.Count <= 0)
|
||||||
|
{
|
||||||
|
// 这个1代表对方ID不的合法的。
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
var targetChatUnitId = tree.Target[0];
|
||||||
|
var scene = chatUnit.Scene;
|
||||||
|
if (!scene.GetComponent<SocialUnitManageComponent>().TryGet(targetChatUnitId, out var targetChatUnit))
|
||||||
|
{
|
||||||
|
// 这个2代表对方不在线。
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
var networkMessagingComponent = scene.NetworkMessagingComponent;
|
||||||
|
var chatMessage = new Chat2C_Message()
|
||||||
|
{
|
||||||
|
ChatInfoTree = tree
|
||||||
|
};
|
||||||
|
|
||||||
|
// // 先给自己发送一个聊天消息。
|
||||||
|
// networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
|
||||||
|
// // 然后再给对方发送一个聊天消息。
|
||||||
|
// networkMessagingComponent.SendInnerRoute(targetChatUnit.GateRouteId, chatMessage);
|
||||||
|
|
||||||
|
// 先给自己发送一个聊天消息。
|
||||||
|
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage);
|
||||||
|
// 然后再给对方发送一个聊天消息。
|
||||||
|
networkMessagingComponent.Send(targetChatUnit.GateRouteId, chatMessage);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
121
Hotfix/Social/Chat/Helper/ChatTreeFactory.cs
Normal file
121
Hotfix/Social/Chat/Helper/ChatTreeFactory.cs
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
using Fantasy;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建聊天树的总入口
|
||||||
|
/// </summary>
|
||||||
|
public static class ChatTreeFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 创建世界聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree World(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.World,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建私聊聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree Private(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.Private,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建系统聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree System(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.System,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建公广播聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree Broadcast(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.Broadcast,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建公告聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree Notice(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.Notice,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建队伍聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree Team(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.Team,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建附近人聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree Near(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.Near,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建当前地图聊天树
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static ChatInfoTree CurrentMap(Scene scene)
|
||||||
|
{
|
||||||
|
return new ChatInfoTree()
|
||||||
|
{
|
||||||
|
Scene = scene,
|
||||||
|
ChatChannelType = (int)ChatChannelType.CurrentMap,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
using Fantasy;
|
|
||||||
using Fantasy.Entitas;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
public static class ChatUnitFactory
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 创建一个新的Player
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="scene"></param>
|
|
||||||
/// <param name="aId">ToKen令牌传递过来的aId</param>
|
|
||||||
/// <param name="isSaveDataBase">是否在创建的过程中保存到数据库</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static SocialUnit Create(Scene scene, long aId)
|
|
||||||
{
|
|
||||||
var player = Entity.Create<SocialUnit>(scene, aId, true, true);
|
|
||||||
return player;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Fantasy;
|
|
||||||
using Fantasy.Async;
|
|
||||||
using Fantasy.Platform.Net;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
public static class SocialSceneHelper
|
|
||||||
{
|
|
||||||
#region 消息发送
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 发送一条私聊
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="scene"></param>
|
|
||||||
/// <param name="selfId"></param>
|
|
||||||
/// <param name="targetId"></param>
|
|
||||||
/// <param name="message"></param>
|
|
||||||
public static void PrivateMessage(Scene scene, long selfId, long targetId, ChatMessageInfo message)
|
|
||||||
{
|
|
||||||
var chatUnitManage = scene.GetComponent<SocialUnitManageComponent>();
|
|
||||||
if (chatUnitManage == null) return;
|
|
||||||
var chatUnit = chatUnitManage.Get(targetId);
|
|
||||||
message.Type = 1;
|
|
||||||
message.Source = selfId;
|
|
||||||
if (chatUnit != null)
|
|
||||||
{
|
|
||||||
//对方在线
|
|
||||||
BroadcastAll(scene, message, [targetId]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//对方不在线,存入待领取列表,等待玩家下次登录领取
|
|
||||||
chatUnitManage.SaveOfflineMessage(targetId, message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 发送一条地图消息
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="scene"></param>
|
|
||||||
/// <param name="mapId"></param>
|
|
||||||
/// <param name="message"></param>
|
|
||||||
public static void BroadcastMap(Scene scene, long mapId, ChatMessageInfo message)
|
|
||||||
{
|
|
||||||
var chatUnitManage = scene.GetComponent<SocialUnitManageComponent>();
|
|
||||||
if (chatUnitManage == null) return;
|
|
||||||
HashSet<long> targets = new HashSet<long>();
|
|
||||||
foreach (var (_, chatUnit) in chatUnitManage.Units)
|
|
||||||
{
|
|
||||||
if (chatUnit.MapId == mapId)
|
|
||||||
{
|
|
||||||
targets.Add(chatUnit.Id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targets.Count < 1)
|
|
||||||
{
|
|
||||||
Log.Info("地图在线人数为0,群发取消");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
BroadcastAll(scene, message, targets);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 发送一条频道消息
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="scene"></param>
|
|
||||||
/// <param name="channelId"></param>
|
|
||||||
/// <param name="message"></param>
|
|
||||||
public static void BroadcastChannel(Scene scene, long channelId, ChatMessageInfo message)
|
|
||||||
{
|
|
||||||
var chatUnitManage = scene.GetComponent<SocialUnitManageComponent>();
|
|
||||||
if (chatUnitManage == null) return;
|
|
||||||
HashSet<long> targets = new HashSet<long>();
|
|
||||||
foreach (var (_, chatUnit) in chatUnitManage.Units)
|
|
||||||
{
|
|
||||||
if (chatUnit.CurrentChannel == channelId)
|
|
||||||
{
|
|
||||||
targets.Add(chatUnit.Id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (targets.Count < 1)
|
|
||||||
{
|
|
||||||
Log.Info("频道在线人数为0,群发取消");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
BroadcastAll(scene, message, targets);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 广播消息给所有人
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="scene"></param>
|
|
||||||
/// <param name="message"></param>
|
|
||||||
/// <param name="targets"></param>
|
|
||||||
public static void BroadcastAll(Scene scene, ChatMessageInfo message, HashSet<long>? targets = null)
|
|
||||||
{
|
|
||||||
//发送给所有Gate服务器,让Gate转发给其他客户端
|
|
||||||
var gateConfigs = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Gate);
|
|
||||||
var sendMessage = new S2G_ChatMessage()
|
|
||||||
{
|
|
||||||
Message = message,
|
|
||||||
};
|
|
||||||
if (targets != null && targets.Count > 0)
|
|
||||||
{
|
|
||||||
sendMessage.IdList.AddRange(targets);
|
|
||||||
}
|
|
||||||
|
|
||||||
var networkMessagingComponent = scene.NetworkMessagingComponent;
|
|
||||||
foreach (var config in gateConfigs)
|
|
||||||
{
|
|
||||||
//发送给Gate服务器转发消息
|
|
||||||
networkMessagingComponent.Send(config.Address, sendMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
#region 上线下线
|
|
||||||
|
|
||||||
// public static async FTask<(long, long)> Online(Scene scene, RoleSimpleInfo roleSimple, long gateRuntimeId)
|
|
||||||
// {
|
|
||||||
// var gameSceneConfig = GetSceneConfig();
|
|
||||||
// var gameRouteId = gameSceneConfig.RouteId;
|
|
||||||
// //连接到游戏中心服
|
|
||||||
// var gameResponse = (S2G_EnterResponse)await scene.NetworkMessagingComponent.CallInnerRoute(
|
|
||||||
// gameRouteId, new G2S_EnterRequest()
|
|
||||||
// {
|
|
||||||
// Role = roleSimple,
|
|
||||||
// GateRouteId = gateRuntimeId
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// if (gameResponse.ErrorCode != 0)
|
|
||||||
// {
|
|
||||||
// return (0, 0);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return (gameResponse.RoleRouteId, gameRouteId);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public static async FTask Offline(Scene scene, long accountId, long gateRuntimeId, long sceneRouteId)
|
|
||||||
// {
|
|
||||||
// for (int i = 0; i < 10; i++)
|
|
||||||
// {
|
|
||||||
// var gameResponse = (S2G_ExitResponse)await scene.NetworkMessagingComponent.CallInnerRoute(
|
|
||||||
// sceneRouteId, new G2S_ExitRequest()
|
|
||||||
// {
|
|
||||||
// AccountId = accountId,
|
|
||||||
// GateRouteId = gateRuntimeId
|
|
||||||
// });
|
|
||||||
// if (gameResponse.ErrorCode == 0)
|
|
||||||
// {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Log.Error("重试多次还是退出失败,需检查");
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private static SceneConfig GetSceneConfig()
|
|
||||||
// {
|
|
||||||
// var gameSceneConfigs = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Social);
|
|
||||||
//
|
|
||||||
// return gameSceneConfigs.First();
|
|
||||||
// }
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
@@ -1,74 +1,42 @@
|
|||||||
using Fantasy.Async;
|
using Fantasy.Entitas;
|
||||||
using Fantasy.Entitas;
|
|
||||||
using Fantasy.Entitas.Interface;
|
using Fantasy.Entitas.Interface;
|
||||||
using Fantasy.Helper;
|
|
||||||
|
#pragma warning disable CS8602 // Dereference of a possibly null reference.
|
||||||
|
#pragma warning disable CS8601 // Possible null reference assignment.
|
||||||
|
|
||||||
namespace NB.Chat;
|
namespace NB.Chat;
|
||||||
|
|
||||||
public class ChatChannelCenterComponentAwakeSystem : AwakeSystem<ChatChannelCenterComponent>
|
public sealed class ChatChannelCenterComponentDestroySystem : DestroySystem<ChatChannelCenterComponent>
|
||||||
{
|
|
||||||
protected override void Awake(ChatChannelCenterComponent self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ChatChannelCenterComponentDestroySystem : DestroySystem<ChatChannelCenterComponent>
|
|
||||||
{
|
{
|
||||||
protected override void Destroy(ChatChannelCenterComponent self)
|
protected override void Destroy(ChatChannelCenterComponent self)
|
||||||
{
|
{
|
||||||
|
foreach (var chatChannelComponent in self.Channels.Values.ToArray())
|
||||||
|
{
|
||||||
|
chatChannelComponent.Dispose();
|
||||||
|
}
|
||||||
self.Channels.Clear();
|
self.Channels.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ChatChannelCenterComponentSystem
|
public static class ChatChannelCenterComponentSystem
|
||||||
{
|
{
|
||||||
/// <summary>
|
public static ChatChannelComponent Apply(this ChatChannelCenterComponent self, long channelId)
|
||||||
/// 获取一个频道
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="self"></param>
|
|
||||||
/// <param name="channelId"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static async FTask<ChatChannel?> Get(this ChatChannelCenterComponent self, long channelId)
|
|
||||||
{
|
{
|
||||||
if (self.Channels.TryGetValue(channelId, out var channel))
|
if (self.Channels.TryGetValue(channelId, out var channel))
|
||||||
{
|
{
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
//查数据库
|
channel = Entity.Create<ChatChannelComponent>(self.Scene, channelId, true, true);
|
||||||
channel = await self.Scene.World.Database.Query<ChatChannel>(channelId, true);
|
self.Channels.Add(channelId, channel);
|
||||||
if (channel != null)
|
|
||||||
{
|
|
||||||
self.Channels.Add(channel.Id, channel);
|
|
||||||
}
|
|
||||||
|
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
public static bool TryGet(this ChatChannelCenterComponent self, long channelId, out ChatChannelComponent channel)
|
||||||
/// 申请创建一个频道
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="self"></param>
|
|
||||||
/// <param name="unit"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static async FTask<ChatChannel> Create(this ChatChannelCenterComponent self, SocialUnit unit)
|
|
||||||
{
|
{
|
||||||
var channel = Entity.Create<ChatChannel>(self.Scene, true, true);
|
return self.Channels.TryGetValue(channelId, out channel);
|
||||||
channel.Creator = unit.Role.RoleId;
|
|
||||||
channel.CreateTime = TimeHelper.Now;
|
|
||||||
self.Channels.Add(channel.Id, channel);
|
|
||||||
//保存到数据库
|
|
||||||
await self.Scene.World.Database.Save(channel);
|
|
||||||
|
|
||||||
return channel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 解散
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="self"></param>
|
|
||||||
/// <param name="channelId"></param>
|
|
||||||
public static void Disband(this ChatChannelCenterComponent self, long channelId)
|
public static void Disband(this ChatChannelCenterComponent self, long channelId)
|
||||||
{
|
{
|
||||||
if (self.Channels.Remove(channelId, out var channel))
|
if (self.Channels.Remove(channelId, out var channel))
|
||||||
@@ -76,6 +44,6 @@ public static class ChatChannelCenterComponentSystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel?.Dispose();
|
channel.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
89
Hotfix/Social/Chat/System/ChatChannelComponentSystem.cs
Normal file
89
Hotfix/Social/Chat/System/ChatChannelComponentSystem.cs
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Entitas;
|
||||||
|
using NBF.Social;
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public class MemoryEntity : Entity
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class ChatChannelComponentSystem
|
||||||
|
{
|
||||||
|
public static void Send(this ChatChannelComponent self, ChatInfoTree tree)
|
||||||
|
{
|
||||||
|
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>();
|
||||||
|
var networkMessagingComponent = self.Scene.NetworkMessagingComponent;
|
||||||
|
var chatMessage = new Chat2C_Message()
|
||||||
|
{
|
||||||
|
ChatInfoTree = tree
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var unitId in self.Units)
|
||||||
|
{
|
||||||
|
if (!chatUnitManageComponent.Units.TryGetValue(unitId, out var chatUnit))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
|
||||||
|
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool JoinChannel(this ChatChannelComponent self, long chatUnitId)
|
||||||
|
{
|
||||||
|
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>();
|
||||||
|
|
||||||
|
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将当前频道中加入该用户。
|
||||||
|
self.Units.Add(chatUnitId);
|
||||||
|
// 给用户添加频道。
|
||||||
|
if (!chatUnit.Channels.ContainsKey(self.Id))
|
||||||
|
{
|
||||||
|
chatUnit.Channels.Add(self.Id, self);
|
||||||
|
}
|
||||||
|
// 可以在这里给客户端发送一个加入频道成功的消息。
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsJoinedChannel(this ChatChannelComponent self, long chatUnitId)
|
||||||
|
{
|
||||||
|
return self.Units.Contains(chatUnitId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ExitChannel(this ChatChannelComponent self, long chatUnitId, bool isRemoveUnitChannel = true)
|
||||||
|
{
|
||||||
|
if (!self.Units.Contains(chatUnitId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>();
|
||||||
|
|
||||||
|
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRemoveUnitChannel)
|
||||||
|
{
|
||||||
|
// 给用户移除频道。
|
||||||
|
chatUnit.Channels.Remove(self.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在当前频道中移除该用户。
|
||||||
|
self.Units.Remove(chatUnitId);
|
||||||
|
// 如果当前频道中没有用户了,则销毁该频道。
|
||||||
|
if (self.Units.Count == 0)
|
||||||
|
{
|
||||||
|
self.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
using Fantasy;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
public static class ChatChannelSystem
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 进入频道
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="channel"></param>
|
|
||||||
/// <param name="unit"></param>
|
|
||||||
public static void Enter(this ChatChannel channel, SocialUnit unit)
|
|
||||||
{
|
|
||||||
channel.Units.Add(unit.Id);
|
|
||||||
unit.CurrentChannel = channel.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 离开频道
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="channel"></param>
|
|
||||||
/// <param name="unit"></param>
|
|
||||||
public static void Exit(this ChatChannel channel, SocialUnit unit)
|
|
||||||
{
|
|
||||||
channel.Units.Remove(unit.Id);
|
|
||||||
unit.CurrentChannel = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,132 +1,70 @@
|
|||||||
using System.Collections.Generic;
|
// using Fantasy;
|
||||||
using Fantasy;
|
// using Fantasy.Entitas;
|
||||||
using Fantasy.Async;
|
// using Fantasy.Entitas.Interface;
|
||||||
using Fantasy.Entitas;
|
//
|
||||||
using NB.Game;
|
// #pragma warning disable CS8601 // Possible null reference assignment.
|
||||||
|
//
|
||||||
|
// namespace NB.Chat;
|
||||||
|
//
|
||||||
|
// public sealed class ChatUnitManageComponentDestroySystem : DestroySystem<ChatUnitManageComponent>
|
||||||
|
// {
|
||||||
|
// protected override void Destroy(ChatUnitManageComponent self)
|
||||||
|
// {
|
||||||
|
// foreach (var chatUnit in self.Units.Values.ToArray())
|
||||||
|
// {
|
||||||
|
// chatUnit.Dispose();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// self.Units.Clear();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
namespace NB.Chat;
|
// public static class ChatUnitManageComponentSystem
|
||||||
|
// {
|
||||||
public static class ChatUnitManageComponentSystem
|
// public static ChatUnit Add(this ChatUnitManageComponent self, long unitId, string userName, long gateRouteId)
|
||||||
{
|
// {
|
||||||
#region 消息缓存
|
// if (!self.Units.TryGetValue(unitId, out var chatUnit))
|
||||||
|
// {
|
||||||
/// <summary>
|
// chatUnit = Entity.Create<ChatUnit>(self.Scene, unitId, true, true);
|
||||||
/// 离线消息,进入待领取队列
|
// self.Units.Add(unitId, chatUnit);
|
||||||
/// </summary>
|
// Log.Debug(
|
||||||
/// <param name="self"></param>
|
// $"Add ChatUnit Count: {self.Units.Count} UnitId: {unitId} UserName: {userName} GateRouteId: {gateRouteId}");
|
||||||
/// <param name="targetId"></param>
|
// }
|
||||||
/// <param name="message"></param>
|
// else
|
||||||
public static void SaveOfflineMessage(this SocialUnitManageComponent self, long targetId, ChatMessageInfo message)
|
// {
|
||||||
{
|
// Log.Debug($"ChatUnit: {chatUnit.UserName}({chatUnit.GateRouteId})");
|
||||||
// self.NotSendMessage.Add(targetId, message);
|
// }
|
||||||
}
|
//
|
||||||
|
// chatUnit.UserName = userName;
|
||||||
#endregion
|
// chatUnit.GateRouteId = gateRouteId;
|
||||||
|
// return chatUnit;
|
||||||
#region 上线下线
|
// }
|
||||||
|
//
|
||||||
/// <summary>
|
// public static ChatUnit? Get(this ChatUnitManageComponent self, long unitId)
|
||||||
/// 玩家上线
|
// {
|
||||||
/// </summary>
|
// return self.Units.GetValueOrDefault(unitId);
|
||||||
/// <param name="self"></param>
|
// }
|
||||||
/// <param name="scene"></param>
|
//
|
||||||
/// <param name="accountId"></param>
|
// public static bool TryGet(this ChatUnitManageComponent self, long unitId, out ChatUnit chatUnit)
|
||||||
/// <param name="gateRouteId"></param>
|
// {
|
||||||
public static async FTask<SocialUnit?> Online(this SocialUnitManageComponent self, Scene scene,
|
// return self.Units.TryGetValue(unitId, out chatUnit);
|
||||||
long accountId,
|
// }
|
||||||
long gateRouteId)
|
//
|
||||||
{
|
// public static void Remove(this ChatUnitManageComponent self, long unitId, bool isDispose = true)
|
||||||
// var accountId = roleSimpleInfo.RoleId;
|
// {
|
||||||
if (!self.TryGet(accountId, out var account))
|
// // 由于退出频道的时候,也会检查该玩家是否在ChatUnitManageComponent中,所以这里不做移除操作。
|
||||||
{
|
// if (!self.Units.TryGetValue(unitId, out var chatUnit))
|
||||||
account = ChatUnitFactory.Create(scene, accountId);
|
// {
|
||||||
self.Add(account);
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (account != null)
|
// if (isDispose)
|
||||||
{
|
// {
|
||||||
await account.TryComponent<MailComponent>();
|
// chatUnit.Dispose();
|
||||||
account.GateRouteId = gateRouteId;
|
// }
|
||||||
// account.Role = roleSimpleInfo;
|
//
|
||||||
}
|
// // 因为玩家已经执行了退出频道的操作了,所以要清除一下这个数据。
|
||||||
|
// self.Units.Remove(unitId);
|
||||||
await FTask.CompletedTask;
|
// Log.Debug($"Remove ChatUnit: {chatUnit.UserName}({chatUnit.GateRouteId}) Count: {self.Units.Count}");
|
||||||
return account;
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
public static async FTask Offline(this SocialUnitManageComponent self, Scene scene, long accountId, long gateRouteId)
|
|
||||||
{
|
|
||||||
if (self.TryGet(accountId, out var unit) && unit != null)
|
|
||||||
{
|
|
||||||
if (unit.GateRouteId == gateRouteId)
|
|
||||||
{
|
|
||||||
Log.Info("退出当前聊天服==");
|
|
||||||
self.Remove(accountId); //如果当前网关和下线的网关一致
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await FTask.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 获取&移除
|
|
||||||
|
|
||||||
public static void Add(this SocialUnitManageComponent self, SocialUnit account)
|
|
||||||
{
|
|
||||||
self.Units.Add(account.Id, account);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SocialUnit? Get(this SocialUnitManageComponent self, long accountId)
|
|
||||||
{
|
|
||||||
return self.Units.GetValueOrDefault(accountId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool TryGet(this SocialUnitManageComponent self, long accountId, out SocialUnit? account)
|
|
||||||
{
|
|
||||||
return self.Units.TryGetValue(accountId, out account);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Remove(this SocialUnitManageComponent self, long accountId, bool isDispose = true)
|
|
||||||
{
|
|
||||||
if (!self.Units.Remove(accountId, out var account))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isDispose)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
account.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region 组件
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 尝试给增加相关组件
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="socialUnit"></param>
|
|
||||||
/// <typeparam name="T"></typeparam>
|
|
||||||
public static async FTask TryComponent<T>(this SocialUnit socialUnit) where T : Entity, new()
|
|
||||||
{
|
|
||||||
if (socialUnit.GetComponent<T>() == null)
|
|
||||||
{
|
|
||||||
var mailComponent = await socialUnit.Scene.World.Database.Query<T>(socialUnit.Id, true);
|
|
||||||
if (mailComponent == null)
|
|
||||||
{
|
|
||||||
//如果没有邮件组件
|
|
||||||
socialUnit.AddComponent<T>();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
socialUnit.AddComponent(mailComponent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
using Fantasy.Entitas.Interface;
|
|
||||||
|
|
||||||
namespace NB.Chat;
|
|
||||||
|
|
||||||
public class ChatUnitSystem : AwakeSystem<SocialUnit>
|
|
||||||
{
|
|
||||||
protected override void Awake(SocialUnit self)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -58,12 +58,12 @@ public class C2S_SendMailRequestHandler : AddressRPC<SocialUnit, C2S_SendMailReq
|
|||||||
//同步客户端
|
//同步客户端
|
||||||
entity.Scene.NetworkMessagingComponent.Send(entity.GateRouteId, res);
|
entity.Scene.NetworkMessagingComponent.Send(entity.GateRouteId, res);
|
||||||
|
|
||||||
var chatUnit = chatUnitManage.Get(request.Target);
|
// var chatUnit = chatUnitManage.Get(request.Target);
|
||||||
|
//
|
||||||
if (chatUnit != null)
|
// if (chatUnit != null)
|
||||||
{
|
// {
|
||||||
//对方在线
|
// //对方在线
|
||||||
entity.Scene.NetworkMessagingComponent.Send(chatUnit.GateRouteId, res);
|
// entity.Scene.NetworkMessagingComponent.Send(chatUnit.GateRouteId, res);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
146
Hotfix/Social/SocialUnitManageComponentSystem.cs
Normal file
146
Hotfix/Social/SocialUnitManageComponentSystem.cs
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
using Fantasy;
|
||||||
|
using Fantasy.Async;
|
||||||
|
using Fantasy.Entitas;
|
||||||
|
using Fantasy.Entitas.Interface;
|
||||||
|
using NB.Chat;
|
||||||
|
|
||||||
|
namespace NBF.Social;
|
||||||
|
|
||||||
|
public sealed class ChatUnitManageComponentDestroySystem : DestroySystem<SocialUnitManageComponent>
|
||||||
|
{
|
||||||
|
protected override void Destroy(SocialUnitManageComponent self)
|
||||||
|
{
|
||||||
|
foreach (var chatUnit in self.Units.Values.ToArray())
|
||||||
|
{
|
||||||
|
chatUnit.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
self.Units.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SocialUnitManageComponentSystem
|
||||||
|
{
|
||||||
|
#region 消息缓存
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 离线消息,进入待领取队列
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="self"></param>
|
||||||
|
/// <param name="targetId"></param>
|
||||||
|
/// <param name="message"></param>
|
||||||
|
public static void SaveOfflineMessage(this SocialUnitManageComponent self, long targetId, ChatMessageInfo message)
|
||||||
|
{
|
||||||
|
// self.NotSendMessage.Add(targetId, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 上线下线
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 玩家上线
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="self"></param>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="accountId"></param>
|
||||||
|
/// <param name="gateRouteId"></param>
|
||||||
|
public static async FTask<SocialUnit?> Online(this SocialUnitManageComponent self, Scene scene,
|
||||||
|
long accountId,
|
||||||
|
long gateRouteId)
|
||||||
|
{
|
||||||
|
// var accountId = roleSimpleInfo.RoleId;
|
||||||
|
if (!self.TryGet(accountId, out var account))
|
||||||
|
{
|
||||||
|
account = Entity.Create<SocialUnit>(scene, accountId, true, true);
|
||||||
|
self.Add(account);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (account != null)
|
||||||
|
{
|
||||||
|
await account.TryComponent<MailComponent>();
|
||||||
|
account.GateRouteId = gateRouteId;
|
||||||
|
// account.Role = roleSimpleInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
await FTask.CompletedTask;
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async FTask Offline(this SocialUnitManageComponent self, Scene scene, long accountId,
|
||||||
|
long gateRouteId)
|
||||||
|
{
|
||||||
|
if (self.TryGet(accountId, out var unit) && unit != null)
|
||||||
|
{
|
||||||
|
if (unit.GateRouteId == gateRouteId)
|
||||||
|
{
|
||||||
|
Log.Info("退出当前聊天服==");
|
||||||
|
self.Remove(accountId); //如果当前网关和下线的网关一致
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await FTask.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 获取&移除
|
||||||
|
|
||||||
|
public static void Add(this SocialUnitManageComponent self, SocialUnit account)
|
||||||
|
{
|
||||||
|
self.Units.Add(account.Id, account);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SocialUnit? Get(this SocialUnitManageComponent self, long accountId)
|
||||||
|
{
|
||||||
|
return self.Units.GetValueOrDefault(accountId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool TryGet(this SocialUnitManageComponent self, long accountId, out SocialUnit? account)
|
||||||
|
{
|
||||||
|
return self.Units.TryGetValue(accountId, out account);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Remove(this SocialUnitManageComponent self, long accountId, bool isDispose = true)
|
||||||
|
{
|
||||||
|
if (!self.Units.Remove(accountId, out var account))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isDispose)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
account.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 组件
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 尝试给增加相关组件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="socialUnit"></param>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
public static async FTask TryComponent<T>(this SocialUnit socialUnit) where T : Entity, new()
|
||||||
|
{
|
||||||
|
if (socialUnit.GetComponent<T>() == null)
|
||||||
|
{
|
||||||
|
var mailComponent = await socialUnit.Scene.World.Database.Query<T>(socialUnit.Id, true);
|
||||||
|
if (mailComponent == null)
|
||||||
|
{
|
||||||
|
//如果没有邮件组件
|
||||||
|
socialUnit.AddComponent<T>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
socialUnit.AddComponent(mailComponent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
22
Hotfix/Social/SocialUnitSystem.cs
Normal file
22
Hotfix/Social/SocialUnitSystem.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Fantasy.Entitas.Interface;
|
||||||
|
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||||
|
|
||||||
|
namespace NB.Chat;
|
||||||
|
|
||||||
|
public sealed class SocialUnitDestroySystem : DestroySystem<SocialUnit>
|
||||||
|
{
|
||||||
|
protected override void Destroy(SocialUnit self)
|
||||||
|
{
|
||||||
|
self.Role.Return();
|
||||||
|
self.Role = null;
|
||||||
|
self.GateRouteId = 0;
|
||||||
|
// 退出当前ChatUnit拥有的所有频道
|
||||||
|
foreach (var (_,chatChannelComponent) in self.Channels)
|
||||||
|
{
|
||||||
|
chatChannelComponent.ExitChannel(self.Id, false);
|
||||||
|
}
|
||||||
|
// 理论情况下,这个self.Channels不会存在因为数据的,因为上面已经给清空掉了。
|
||||||
|
// 但是self.Channels.Clear();还是加上吧,防止以后忘记了。
|
||||||
|
self.Channels.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,5 +24,47 @@
|
|||||||
<None Update="configs.json">
|
<None Update="configs.json">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="cfg\tbbait.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbbasicconfig.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbbobber.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbfeeder.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbfish.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbgoods.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbhook.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbinititemconfig.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbitem.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbline.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tblure.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbreel.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbrod.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="cfg\tbshop.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user