Compare commits

...
This repository has been archived on 2025-01-22. You can view files and clone it, but cannot push or open issues or pull requests.

15 Commits
dev ... master

Author SHA1 Message Date
raphaeIl 506ba719d2 eos (real) 2025-01-22 08:20:39 -05:00
Raphael 7e5a90b89c Merge pull request 'master' (#5) from wangeyun/SCHALE.GameServer:master into master
Reviewed-on: #5
2025-01-22 11:19:51 +00:00
挽歌歌吖 3db67118f9 Update Readme (I'm so careful, hehe)
Update Readme (I'm so careful, hehe)
2025-01-22 11:10:14 +00:00
北野樱奈 e2447b0af4 Merge branch 'master' of https://git.lewd.wtf/wangeyun/SCHALE.GameServer 2025-01-22 19:06:19 +08:00
北野樱奈 4a74c6e49e Update the import of official server documentation data and update the README
Update the import of official server documentation data and update the README
2025-01-22 19:06:12 +08:00
挽歌歌吖 b21a3de9aa Update and translate all Readme
Update and translate all Readme
2025-01-22 11:01:07 +00:00
北野樱奈 9cb8561b1b Update and translate all Readme
Update and translate all Readme
2025-01-22 18:58:53 +08:00
挽歌歌吖 c3f628b094 Update the Mitrproxy solution to enhance its aesthetic appeal
Update the Mitrproxy solution to enhance its aesthetic appeal
2025-01-22 10:38:38 +00:00
Raphael 8b28682624 Merge pull request '上传文件至 /' (#4) from xjkxjk/SCHALE.GameServer:master into master
Reviewed-on: #4
2025-01-20 14:30:38 +00:00
xjkxjk 58d6ba2312 上传文件至 /
First release of complete command documentation
- Added instructions for all basic commands
- Optimized document layout and style
- Supplemented detailed usage examples
- Added more usage examples
- Improved notes
2025-01-20 14:24:14 +00:00
raphaeIl 5479b8b3e8 update dbs, unlock raid lunatic mode 2025-01-20 09:13:01 -05:00
raphaeIl 1fda0691d7 oops wrong config id 2025-01-20 06:42:08 -05:00
Raphael 7a722825c8 Merge pull request 'r76 update' (#3) from dev into master
Reviewed-on: #3
2025-01-20 10:37:53 +00:00
挽歌歌吖 8a1a7b811c Update Mitrproxy solution (#2)
Update Mitrproxy solution

Reviewed-on: #2
Co-authored-by: 挽歌歌吖 <wangeyun@outlook.com>
Co-committed-by: 挽歌歌吖 <wangeyun@outlook.com>
2025-01-01 06:10:56 +00:00
Raphael 40846cca3c r75 update changelog - https://git.lewd.wtf/attachments/a20ccf0a-7f92-4f0d-948c-9fae8dc7b8c0
Reviewed-on: #1
2024-12-31 02:20:50 +00:00
12 changed files with 1121 additions and 185 deletions

View File

@ -0,0 +1,25 @@
**How to Save and Load Your Official Account Data into SCHALE(EN)**
By Raphael
1. Use any Pcap program, turn it on, log into your official account, and capture the packets.
The Pcap file should look something like this:
[Example Pcap file](https://gist.github.com/raphaeIl/b85185098b6ef0d569c794f49c8f910c)
2. Save the file as a JSON and place it in the `Resources\account_data` folder. If the folder does not exist, create it.
Example file path: `Resources\account_data\accountdata_Raphael.json`
3. Start the server, log into the game, and run:
```
/loaddata list
```
If the log displays your JSON file name, the file is in the correct folder.
4. Run the following command to load the data:
```
/loaddata <your_json_filename.json>
```
This will load the data from your official servers Pcap file into the PS. If successful, restart the client, and all your data should be loaded.
**Tip:** If your custom Pcap file doesnt work, please try using my example JSON file first.
---

View File

@ -0,0 +1,24 @@
**如何将官方账号数据保存并加载到 SCHALE (ZHCN)**
- CN-By 北野桜奈
1. 使用任何 Pcap 程序,打开它并登录到你的官方账号,抓取数据包。
Pcap 文件应类似于以下示例:
[示例 Pcap 文件](https://gist.github.com/raphaeIl/b85185098b6ef0d569c794f49c8f910c)
2. 将该文件保存为 JSON 格式,并放置到 `Resources\account_data` 文件夹中。如果文件夹不存在,请自行创建。
示例文件路径:`Resources\account_data\accountdata_Raphael.json`
3. 启动服务器,进入游戏并运行以下命令:
```
/loaddata list
```
如果日志显示了你的 JSON 文件名,说明该文件已正确放置。
4. 运行以下命令加载数据:
```
/loaddata <your_json_filename.json>
```
这将从官方服务器的 Pcap 数据加载到 PS。如果加载成功请重启客户端所有数据应该已加载。
**提示:** 如果你的自定义 Pcap 文件无法正常工作,请先尝试我的示例 JSON 文件。

480
Command.md Normal file
View File

@ -0,0 +1,480 @@
# 💻 蔚蓝档案命令手册
*📝 作者:阁主*
---
## 📑 目录
- [📑 English version of Command](Command_EN.md)
- [🏰 咖啡厅命令 (Cafe)](#咖啡厅-cafe-命令)
- [👥 角色命令 (Character)](#角色-character-命令)
- [💎 货币命令 (Currency)](#货币-currency-命令)
- [❓ 帮助命令 (Help)](#帮助-help-命令)
- [📦 库存命令 (Inventory)](#库存-inventory-命令)
- [💾 加载数据命令 (LoadData)](#加载数据-loaddata-命令)
- [⚙️ 设置账号命令 (SetAccount)](#设置账号-setaccount-命令)
- [🔓 解锁全部命令 (UnlockAll)](#解锁全部-unlockall-命令)
---
# 🏰 咖啡厅 (Cafe) 命令
> 打造您的理想咖啡厅,创造独特的休憩空间
## ⌨️ 命令格式
```
/cafe <character|furniture> <add|addall|removeall> [id/amount]
```
## 🎯 功能说明
此命令用于管理游戏中的咖啡厅系统,让您能够自由布置角色和家具。
## 📋 可用子命令
### 👥 角色管理 (character)
#### 1. 添加单个角色
```
/cafe character add <角色ID>
```
- 💫 功能向咖啡厅添加指定ID的角色
- 📝 示例:`/cafe character add 123`
- 说明:重复添加会收到提示
#### 2. ✨ 批量添加角色
```
/cafe character addall [数量]
```
- 💫 功能:向咖啡厅批量添加可用角色
- 📝 示例:
- `/cafe character addall` (添加50个角色)
- `/cafe character addall 100` (添加100个角色)
- 说明:仅添加满足条件的角色:
- ✅ 可玩角色
- ✅ 非NPC角色
- ✅ 已正式发布的角色
#### 3. 🗑️ 移除所有角色
```
/cafe character removeall
```
- 💫 功能:清空咖啡厅中的所有角色
- ⚠️ 注意:此操作不可撤销
## ⚡ 注意事项
1. 🔄 所有命令执行后自动保存
2. 📝 命令不区分大小写
3. 添加重复角色会收到提示
4. 🚧 家具功能尚在开发中
---
# 👥 角色 (Character) 命令
> 管理您的角色系统,打造完美的战斗团队
## ⌨️ 命令格式
```
/character <add|clear> [all|characterId]
```
## 🎯 功能说明
此命令用于管理玩家的角色系统,支持添加和清除角色功能。
## 📋 可用子命令
### ✨ 添加角色 (add)
#### 1. 🌟 添加所有角色
```
/character add all
```
- 💫 功能:添加所有可用角色
- ✨ 特点:角色将以最强状态添加
- ✅ 最大等级
- ✅ 完全培养
- ✅ 技能满级
#### 2. 添加指定角色
```
/character add <角色ID>
```
- 💫 功能添加指定ID的角色
- 📝 示例:`/character add 1`
- 说明:角色将以最强状态添加
### 🗑️ 清除角色 (clear)
```
/character clear
```
- 💫 功能:清空所有角色
- ⚠️ 警告:此操作不可撤销
## ⚡ 注意事项
1. 🔄 操作自动保存
2. 📝 命令不区分大小写
3. 重复添加会提示
4. ⚠️ 清除操作需谨慎
---
# 💎 货币 (Currency) 命令
> 自由调整各类货币数量,畅享游戏体验
## ⌨️ 命令格式
```
/currency <货币类型> <数量>
```
## 🎯 功能说明
此命令用于修改账号中各类货币的数量。
## 💰 可用货币类型
### 💫 基础货币
- `Gold` - 💰 金币
- `Gem` - 💎 青辉石(总数)
- `GemPaid` - 💳 付费青辉石
- `GemBonus` - 🎁 奖励青辉石
### 🎫 体力票券
- `ActionPoint` - ⚡ 体力值
- `AcademyTicket` - 📚 学院券
- `ArenaTicket` - ⚔️ 竞技场券
- `RaidTicket` - 🎯 总力战券
### 🗺️ 每周副本券
- `WeekDungeonChaserATicket` - 🏃‍♂️ 追击战A券
- `WeekDungeonChaserBTicket` - 🏃‍♀️ 追击战B券
- `WeekDungeonChaserCTicket` - 🏃 追击战C券
- `WeekDungeonFindGiftTicket` - 🎁 寻宝战券
- `WeekDungeonBloodTicket` - 🗡️ 血战券
- `ChaserTotalTicket` - 🎯 追击战总券
### 🏫 学院副本券
- `SchoolDungeonATicket` - 📘 学院副本A券
- `SchoolDungeonBTicket` - 📗 学院副本B券
- `SchoolDungeonCTicket` - 📙 学院副本C券
- `SchoolDungeonTotalTicket` - 📚 学院副本总券
### 🌟 特殊副本券
- `TimeAttackDungeonTicket` - ⏱️ 限时挑战券
- `WorldRaidTicketA` - 🌍 世界副本A券
- `WorldRaidTicketB` - 🌎 世界副本B券
- `WorldRaidTicketC` - 🌏 世界副本C券
### ⚔️ 清除战券
- `EliminateTicketA` - 🗡️ 清除战A券
- `EliminateTicketB` - ⚔️ 清除战B券
- `EliminateTicketC` - 🛡️ 清除战C券
- `EliminateTicketD` - 🔰 清除战D券
### 🏆 其他
- `MasterCoin` - 🎖️ 大师币
## 📝 使用示例
```
/currency Gem 99999 # 设置青辉石为99999
/currency ActionPoint 9999 # 设置体力值为9999
/currency Gold 99999999 # 设置金币为99999999
```
## ⚡ 注意事项
1. 📝 货币类型区分大小写
2. 🔢 数量必须为整数
3. 🔄 修改立即生效并保存
4. ⚠️ 无效输入将提示错误
5. 💡 请合理使用此功能
---
# ❓ 帮助 (Help) 命令
> 获取详细的命令使用说明,助您轻松上手
## ⌨️ 命令格式
```
/help [命令名称]
```
## 🎯 功能说明
此命令用于查看所有可用命令的帮助信息,或获取特定命令的详细说明。
## 📋 使用方法
### 1. 📑 查看所有命令
```
/help
```
- 💫 功能:显示完整命令列表
- 📝 显示格式:
- 命令名称
- 简要说明
- 基本用法
### 2. 🔍 查看特定命令
```
/help <命令名称>
```
- 💫 功能:显示指定命令的详细信息
- 📝 示例:`/help currency`
- 显示内容:
- 📌 命令说明
- ⌨️ 使用方法
- 📑 参数详解
## ⚡ 注意事项
1. 📝 命令名称不区分大小写
2. 🔤 仅支持英文命令名
3. ⚠️ 无效命令将提示错误
4. 💡 默认显示所有命令概览
---
# 📦 库存 (Inventory) 命令
> 一键管理所有游戏物品,打造完美账号
## ⌨️ 命令格式
```
/inventory <addall|addallmax|removeall>
```
## 🎯 功能说明
此命令用于管理玩家的所有库存物品,包括角色、武器、装备等全部游戏内容。
## 📋 可用子命令
### 1. ✨ 添加所有物品(普通)
```
/inventory addall
```
- 💫 功能:添加所有游戏内容
- 📦 添加内容:
- 👥 所有角色(基础状态)
- ⚔️ 所有武器(基础状态)
- 🛡️ 所有装备
- 🎁 所有道具
- 🔧 所有装置
- 🏰 所有记忆大厅
- 📚 所有剧情
### 2. 🌟 添加所有物品(最大化)
```
/inventory addallmax
```
- 💫 功能:添加所有内容(最强状态)
- 📦 添加内容:
- 👥 所有角色(满级满培养)
- ⚔️ 所有武器(满级满突破)
- 🛡️ 所有装备
- 🎁 所有道具
- 🔧 所有装置(满级)
- 🏰 所有记忆大厅
- 📚 所有剧情
### 3. 🗑️ 移除所有物品
```
/inventory removeall
```
- 💫 功能:清空所有物品
- ⚠️ 移除内容:
- 👥 所有角色
- ⚔️ 所有武器
- 🛡️ 所有装备
- 🎁 所有道具
- 🔧 所有装置
- 🏰 所有记忆大厅
- 📚 所有剧情
## ⚡ 注意事项
1. 🔄 操作自动保存
2. 📝 命令不区分大小写
3. ⚠️ 清空操作不可撤销
4. ✨ 最大化会将可培养内容提升至最高等级
---
# 💾 加载数据 (LoadData) 命令
> 轻松导入存档数据,快速恢复游戏进度
## ⌨️ 命令格式
```
/loaddata <文件名|list>
```
## 🎯 功能说明
此命令用于从保存的数据文件中加载账号数据,包括角色、武器、装备等全部游戏内容。
## 📋 使用方法
### 1. 📑 查看可用数据文件
```
/loaddata list
```
- 💫 功能:显示可用存档列表
- 📂 位置Resources/account_data/
- 📝 显示:所有可加载的存档文件
### 2. 📥 加载指定数据文件
```
/loaddata <文件名>
```
- 💫 功能:加载指定存档数据
- 📝 示例:`/loaddata save1.json`
- 📦 加载内容:
- 👤 账号信息(昵称、等级等)
- 👥 角色数据
- ⚔️ 武器数据
- 🎁 道具数据
- 🔧 装置数据
- 🛡️ 装备数据
- 🏰 记忆大厅数据
- ☕ 咖啡厅数据
- 👥 梯队编成数据
## ⚡ 注意事项
1. 📂 文件必须在指定目录
2. 📄 需包含文件扩展名
3. 🔄 会覆盖当前账号数据
4. 🔗 自动处理ID映射
5. ⚠️ 无效文件将提示错误
6. ✅ 成功后显示确认消息
---
# ⚙️ 设置账号 (SetAccount) 命令
> 自定义您的账号信息,打造个性化体验
## ⌨️ 命令格式
```
/setaccount <属性名> <>
```
## 🎯 功能说明
此命令用于修改玩家账号的各项属性数据。
## 📋 可用属性
### 👤 基础信息
- `Nickname` - 📝 昵称
- 类型:文本
- 示例:`/setaccount Nickname Sensei`
- `Level` - 📊 等级
- 类型:整数
- 示例:`/setaccount Level 75`
- `Exp` - ✨ 经验值
- 类型:整数
- 示例:`/setaccount Exp 999999`
### 🎨 个人设置
- `CallName` - 📢 称呼名称
- 类型:文本
- 示例:`/setaccount CallName Teacher`
- `Comment` - 📝 个人简介
- 类型:文本
- 示例:`/setaccount Comment "Hello World"`
- `LobbyMode` - 🏰 大厅模式
- 类型:整数
- 示例:`/setaccount LobbyMode 1`
### 🎭 展示相关
- `RepresentCharacterServerId` - 👥 代表角色ID
- 类型:整数
- 示例:`/setaccount RepresentCharacterServerId 10000`
- `MemoryLobbyUniqueId` - 🏰 记忆大厅ID
- 类型:整数
- 示例:`/setaccount MemoryLobbyUniqueId 1`
### 📊 账号状态
- `State` - 🔰 账号状态
- 类型AccountState枚举
- 示例:`/setaccount State Normal`
- `VIPLevel` - 👑 VIP等级
- 类型:整数
- 示例:`/setaccount VIPLevel 5`
### ⏰ 时间相关
- `BirthDay` - 🎂 生日
- 类型:日期时间
- 示例:`/setaccount BirthDay 2024-01-01`
- `LastConnectTime` - 🔄 最后连接时间
- 类型:日期时间
- 示例:`/setaccount LastConnectTime "2024-01-01 12:00:00"`
## ⚡ 注意事项
1. 📝 属性名区分大小写
2. 🔢 值类型必须匹配
3. 🔄 修改立即生效
4. ⚠️ 无效输入将提示错误
5. 📅 日期格式需正确
6. 💡 谨慎修改重要属性
---
# 🔓 解锁全部 (UnlockAll) 命令
> 一键解锁所有游戏内容,畅玩无限可能
## ⌨️ 命令格式
```
/unlockall <内容类型>
```
## 🎯 功能说明
此命令用于解锁游戏中的各类关卡内容,包括主线剧情、每周副本、学院副本等。
## 📋 可用内容类型
### 1. 📚 主线剧情 (campaign)
```
/unlockall campaign
```
- 💫 功能:解锁所有主线关卡
- 📦 解锁内容:
- 🔰 普通难度关卡
- ⚔️ 困难难度关卡
- ✨ 额外关卡
- 🌟 超困难关卡
- ✅ 完成状态:
- 🎯 已通关
- ⭐ 获得全部三星
- 🎁 已领取首次通关奖励
- 🏆 已领取星级奖励
### 2. 🗺️ 每周副本 (weekdungeon)
```
/unlockall weekdungeon
```
- 💫 功能:解锁所有每周副本
- ✅ 完成状态:
- 🎯 关卡已完成
- ⭐ 星级目标达成
- 📦 宝箱收集最大值
### 3. 🏫 学院副本 (schooldungeon)
```
/unlockall schooldungeon
```
- 💫 功能:解锁所有学院副本
- ✅ 完成状态:
- 🎯 关卡已完成
- ⭐ 星级目标达成
## ⚡ 注意事项
1. 📝 类型名不区分大小写
2. 🔄 解锁立即生效并保存
3. ⚠️ 无效类型将提示错误
4. 💡 解锁后无法撤销
---
## 📝 文档更新记录
### v1.0.0 (2025-01-20)
- ✨ 首次发布完整命令文档
- 📚 添加所有基础命令说明
- 🎨 优化文档排版和样式
- 🔍 补充详细使用示例
- 🐛 修复文档格式问题
- ✨ 添加更多使用示例
- 📝 完善注意事项说明
---
*💡 如有任何问题或建议,欢迎随时反馈!*

187
Command_EN.md Normal file
View File

@ -0,0 +1,187 @@
# 💻 Blue Archive Command Manual
*📝 Author: Ge Zhu*
*📝 Translate: Kitano Sakura*
---
## 📑 Table of Contents
- [🏰 Cafe Commands (Cafe)](#cafe-commands-cafe)
- [👥 Character Commands (Character)](#character-commands-character)
- [💎 Currency Commands (Currency)](#currency-commands-currency)
- [❓ Help Commands (Help)](#help-commands-help)
- [📦 Inventory Commands (Inventory)](#inventory-commands-inventory)
- [💾 Load Data Commands (LoadData)](#load-data-commands-loaddata)
- [⚙️ Set Account Commands (SetAccount)](#set-account-commands-setaccount)
- [🔓 Unlock All Commands (UnlockAll)](#unlock-all-commands-unlockall)
---
# 🏰 Cafe Commands (Cafe)
> Build your ideal cafe and create a unique relaxation space
## ⌨️ Command Format
```
/cafe <character|furniture> <add|addall|removeall> [id/amount]
```
## 🎯 Function Description
This command allows you to manage the in-game Cafe system, enabling you to freely arrange characters and furniture.
## 📋 Available Subcommands
### 👥 Character Management (character)
#### 1. Add a Single Character
```
/cafe character add <CharacterID>
```
- 💫 Function: Adds a specified character ID to the Cafe
- 📝 Example: `/cafe character add 123`
- Note: Adding a duplicate character will prompt a message
#### 2. ✨ Batch Add Characters
```
/cafe character addall [amount]
```
- 💫 Function: Adds multiple eligible characters to the Cafe
- 📝 Examples:
- `/cafe character addall` (Adds 50 characters)
- `/cafe character addall 100` (Adds 100 characters)
- Conditions for addition:
- ✅ Playable characters only
- ✅ Non-NPC characters
- ✅ Officially released characters
#### 3. 🗑️ Remove All Characters
```
/cafe character removeall
```
- 💫 Function: Clears all characters from the Cafe
- ⚠️ Warning: This action is irreversible
## ⚡ Notes
1. 🔄 All commands automatically save changes
2. 📝 Commands are case-insensitive
3. Duplicate characters cannot be added
4. 🚧 Furniture functionality is under development
---
# 👥 Character Commands (Character)
> Manage your character system and build the perfect combat team
## ⌨️ Command Format
```
/character <add|clear> [all|characterId]
```
## 🎯 Function Description
This command manages the players character system, supporting the addition and clearing of characters.
## 📋 Available Subcommands
### ✨ Add Characters (add)
#### 1. 🌟 Add All Characters
```
/character add all
```
- 💫 Function: Adds all available characters
- ✨ Features: Characters are added in their strongest state:
- ✅ Max level
- ✅ Fully developed
- ✅ Skills maxed out
#### 2. Add a Specific Character
```
/character add <CharacterID>
```
- 💫 Function: Adds a specific character by ID
- 📝 Example: `/character add 1`
- Note: Characters are added in their strongest state
### 🗑️ Clear All Characters (clear)
```
/character clear
```
- 💫 Function: Clears all characters
- ⚠️ Warning: This action is irreversible
## ⚡ Notes
1. 🔄 Operations save automatically
2. 📝 Commands are case-insensitive
3. Duplicate additions prompt a message
4. ⚠️ Use clear commands with caution
---
# 💎 Currency Commands (Currency)
> Freely adjust the amount of various currencies for a better gaming experience
## ⌨️ Command Format
```
/currency <currencyType> <amount>
```
## 🎯 Function Description
This command modifies the amounts of various currencies in your account.
## 💰 Available Currency Types
### 💫 Basic Currencies
- `Gold` - 💰 Gold
- `Gem` - 💎 Pyroxene (total)
- `GemPaid` - 💳 Paid Pyroxene
- `GemBonus` - 🎁 Bonus Pyroxene
### 🎫 Stamina Tickets
- `ActionPoint` - ⚡ Stamina
- `AcademyTicket` - 📚 Academy Tickets
- `ArenaTicket` - ⚔️ Arena Tickets
- `RaidTicket` - 🎯 Raid Tickets
### 🗺️ Weekly Dungeon Tickets
- `WeekDungeonChaserATicket` - 🏃‍♂️ Chase Battle A Ticket
- `WeekDungeonChaserBTicket` - 🏃‍♀️ Chase Battle B Ticket
- `WeekDungeonChaserCTicket` - 🏃 Chase Battle C Ticket
- `WeekDungeonFindGiftTicket` - 🎁 Treasure Hunt Ticket
- `WeekDungeonBloodTicket` - 🗡️ Blood Battle Ticket
- `ChaserTotalTicket` - 🎯 Total Chase Battle Ticket
### 🏫 Academy Dungeon Tickets
- `SchoolDungeonATicket` - 📘 Academy Dungeon A Ticket
- `SchoolDungeonBTicket` - 📗 Academy Dungeon B Ticket
- `SchoolDungeonCTicket` - 📙 Academy Dungeon C Ticket
- `SchoolDungeonTotalTicket` - 📚 Total Academy Dungeon Ticket
### 🌟 Special Dungeon Tickets
- `TimeAttackDungeonTicket` - ⏱️ Time Attack Dungeon Ticket
- `WorldRaidTicketA` - 🌍 World Raid A Ticket
- `WorldRaidTicketB` - 🌎 World Raid B Ticket
- `WorldRaidTicketC` - 🌏 World Raid C Ticket
### ⚔️ Elimination Tickets
- `EliminateTicketA` - 🗡️ Elimination A Ticket
- `EliminateTicketB` - ⚔️ Elimination B Ticket
- `EliminateTicketC` - 🛡️ Elimination C Ticket
- `EliminateTicketD` - 🔰 Elimination D Ticket
### 🏆 Others
- `MasterCoin` - 🎖️ Master Coin
## 📝 Usage Examples
```
/currency Gem 99999 # Set Pyroxene to 99999
/currency ActionPoint 9999 # Set Stamina to 9999
/currency Gold 99999999 # Set Gold to 99999999
```
## ⚡ Notes
1. 📝 Currency types are case-sensitive
2. 🔢 Amounts must be integers
3. 🔄 Changes are effective immediately
4. ⚠️ Invalid inputs will prompt an error
5. 💡 Use responsibly
---
(Translation continued upon request!)

128
Mitmproxy_Readme_EN.md Normal file
View File

@ -0,0 +1,128 @@
---
# 🌐 **Mitmproxy Usage Guide**
* (By Kitano Sakura)*
---
## 🛠️ **Prerequisites**
- Download and install [**Mitmproxy**](https://mitmproxy.org/).
- Basic knowledge of **WireGuard** and **Python scripting**.
- Required devices:
- A host machine to run **Mitmproxy**.
- A client device (e.g., Android emulator or smartphone).
---
## 📥 **Step 1: Install Mitmproxy**
### 📂 Installation
#### Linux / macOS
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install mitmproxy
# macOS
brew install mitmproxy
```
#### Windows
Download the `.exe` installer from [**mitmproxy.org**](https://mitmproxy.org/) and follow the setup instructions.
### ✅ Verify Installation
Run the following command to confirm successful installation:
```bash
mitmproxy --version
```
---
## 🔑 **Step 2: Install the CA Certificate**
### 📜 Steps
1. Start `mitmproxy` to generate the CA certificate:
```bash
mitmdump
```
2. Locate the generated certificate:
- Certificate path:
- `C:\Users\<Username>\.mitmproxy\mitmproxy-ca-cert.crt` (Windows)
- `~/.mitmproxy/` (Linux / macOS)
3. Rename `mitmproxy-ca-cert.crt` to `c8750f0d.0`.
4. Move the certificate to the system CA directory and set permissions:
```bash
adb root
adb remount
adb shell mv /sdcard/c8750f0d.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/c8750f0d.0
adb reboot
```
---
## 🔧 **Step 3: Configure the Redirect Script**
Download `redirect_server.py` from the repository and modify the `SERVER_HOST` field:
```python
import gzip
import json
from mitmproxy import http
SERVER_HOST = 'Update here' # Replace with your server IP
SERVER_PORT = 80
REWRITE_HOST_LIST = [
'ba-jp-sdk.bluearchive.jp',
'prod-gateway.bluearchiveyostar.com',
'prod-game.bluearchiveyostar.com',
]
```
---
## 🚀 **Step 4: Start Mitmproxy**
Run the following command to launch Mitmproxy with the redirect script:
```bash
mitmweb -m wireguard --no-http2 -s redirect_server.py --set termlog_verbosity=warn --ignore <your IP address>
```
### 📝 Parameter Explanation:
- `-m wireguard`: Use WireGuard as the network layer.
- `--no-http2`: Disable HTTP/2 for better compatibility.
- `-s redirect_server.py`: Load the redirect script.
- `--set termlog_verbosity=warn`: Show warnings only in logs.
Access the Mitmproxy web interface at `http://localhost:8081` to monitor traffic.
---
## 🔄 **Step 5: Install WireGuard**
### 📥 Installation
- **Android**: Download from [**Google Play**](https://play.google.com/store/apps/details?id=com.wireguard.android).
- **Other Platforms**: Refer to the [**official WireGuard installation guide**](https://www.wireguard.com/install/).
### ⚙️ Configuration
1. Open the WireGuard client and scan the QR code provided by Mitmproxy.
2. Apply the configuration to route all traffic through Mitmproxy.
---
## 🛠️ **Troubleshooting**
### ❌ Error: Client TLS handshake failed
- Ensure the same CA certificate is installed on both the host and client devices.
- Verify that the CA certificate is installed as a system certificate.
### ❌ Certificate disappears on Android
- Use MT Manager to grant SU permissions.
- Manually navigate to `/system/etc/security/cacerts/` and reset permissions to `644`.
---
🎉 **Done!**

128
Mitmproxy_Readme_ZH.md Normal file
View File

@ -0,0 +1,128 @@
---
# 🌐 **Mitmproxy 方案使用教程**
* (By 北野樱奈)*
---
## 🛠️ **前置要求**
- 下载并安装 [**Mitmproxy**](https://mitmproxy.org/)。
- 熟悉 **WireGuard** 和 **Python 脚本**的基本操作。
- 准备以下设备:
- 一台运行 **Mitmproxy** 的主机。
- 一台客户端设备(如 Android 模拟器或手机)。
---
## 📥 **第一步:安装 Mitmproxy**
### 📂 安装步骤
#### Linux / MacOS
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install mitmproxy
# macOS
brew install mitmproxy
```
#### Windows
从 [**mitmproxy.org**](https://mitmproxy.org/) 下载 `.exe` 安装程序并按说明完成安装。
### ✅ 验证安装
运行以下命令确保安装成功:
```bash
mitmproxy --version
```
---
## 🔑 **第二步:安装 CA 证书**
### 📜 操作步骤
1. 启动 `mitmproxy` 并生成证书:
```bash
mitmdump
```
2. 找到生成的证书文件:
- 证书位于:
`C:\Users\<用户名>\.mitmproxy\mitmproxy-ca-cert.crt`Windows
`~/.mitmproxy/`Linux / MacOS
3. 将 `mitmproxy-ca-cert.crt` 重命名为 `c8750f0d.0`
4. 使用以下命令将证书移动到系统 CA 目录并设置权限:
```bash
adb root
adb remount
adb shell mv /sdcard/c8750f0d.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/c8750f0d.0
adb reboot
```
---
## 🔧 **第三步:配置重定向脚本**
从仓库下载 `redirect_server.py` 并修改其中的 `SERVER_HOST`
```python
import gzip
import json
from mitmproxy import http
SERVER_HOST = '修改这里' # 替换为你的服务器 IP
SERVER_PORT = 80
REWRITE_HOST_LIST = [
'ba-jp-sdk.bluearchive.jp',
'prod-gateway.bluearchiveyostar.com',
'prod-game.bluearchiveyostar.com',
]
```
---
## 🚀 **第四步:启动 Mitmproxy**
使用以下命令加载重定向脚本并启动代理:
```bash
mitmweb -m wireguard --no-http2 -s redirect_server.py --set termlog_verbosity=warn --ignore <你的IP地址>
```
### 📝 参数说明:
- `-m wireguard`: 使用 WireGuard 作为网络层协议。
- `--no-http2`: 禁用 HTTP/2 提高兼容性。
- `-s redirect_server.py`: 加载重定向脚本。
- `--set termlog_verbosity=warn`: 仅显示警告级别日志。
访问 `http://localhost:8081` 查看 Mitmproxy 界面。
---
## 🔄 **第五步:安装 WireGuard**
### 📥 安装步骤
- **Android**: 从 [**Google Play**](https://play.google.com/store/apps/details?id=com.wireguard.android) 下载。
- **其他平台**: 参考 [**WireGuard 官方安装指南**](https://www.wireguard.com/install/)。
### ⚙️ 配置步骤
1. 打开 WireGuard 客户端并扫描 Mitmproxy 提供的二维码。
2. 完成后启用该配置,将所有流量路由到 `Mitmproxy`
---
## 🛠️ **故障排查**
### ❌ 错误Client TLS handshake failed
- 检查电脑与客户端是否安装了相同的 CA 证书。
- 确保 CA 证书安装为系统证书。
### ❌ 安卓端证书消失
- 使用 MT 管理器授予 SU 权限。
- 手动前往 `/system/etc/security/cacerts/`,重新设置权限为 `644`
---
🎉 **完成!**

View File

@ -1,68 +1,47 @@
# SCHALE.GameServer
### [中文教程](README_zh.md) (by shunner114514) # This Project is now Outdated and Archived, for the Newest Maintained version, Please Use https://git.fufufu.moe/KaniPS/
## Prerequisites # 此项目已停止维护,最新版本请用 https://git.fufufu.moe/KaniPS/
- Some computer knowledge # 🌌 **SCHALE.GameServer** 🌟
- [.NET SDK 8.0](https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0)
- [SQL Express](https://www.microsoft.com/zh-tw/sql-server/sql-server-downloads)
- [SQL Server Management Studio (SSMS)](https://learn.microsoft.com/zh-tw/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)
- [LD Player 9](https://www.ldplayer.tw/)
- [Python](https://www.python.org/)
- [Frida](https://frida.re/)
- [frida-server-16.2.5-android-x86_64](https://github.com/frida/frida/releases)
## Steps
1. Start SQL server # 📚 Project Documentation Directory
2. Start private game server
3. Start LD Player
4. Start Frida server
5. Start ブルアカ
6. Inject Frida script
7. Enjoy :smile:
### SQL server ## 📌 Directory
Use SSMS to connect with default settings except that you have to check "Trust server certificate". - [🔧 Environment Installation](#environment-installation)
- [🚀 Command List](Command.md)
- [📦 Mitmproxy Solution](Mitmproxy_Readme_ZH.md)
- [🎟 Import Official Server Data](Account_Data_into_SCHALE.md)
- [📞 DISCORD](#DISCORD)
### Game server ---
```bash ## 🔧 Environment Installation
# in this repo
cd SCHALE.GameServer
dotnet run
```
### Frida server ### 1. Install [SQL Server Express 2022](https://go.microsoft.com/fwlink/p/?linkid=2216019&clcid=0x804&culture=zh-cn&country=cn)
* Open the downloaded installer
* Select "Basic"
* Choose your preferred installation path
* Start the installation
1. Extract `frida-server-16.2.5-android-x86_64.xz` ### 2. Install [SSMS (SQL Server Management Studio 20)](https://aka.ms/ssmsfullsetup)
to `LDPlayer/frida-server-16.2.5-android-x86_64`. * Keep the default installation path
2. Turn on LD Player * Install
3. Turn on root and adb in the settings of LD Player.
4.
```bash ### 3. Install [Microsoft Visual Studio 2022](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false)
# in LDPlayer * Install the Community version
cd LDPlayer9 * Select all components related to C# and "Visual Studio Extensions Development" for the workload
./adb.exe push ../frida-server-16.2.5-android-x86_64 /data/local/tmp/frida-server * Install with the default path
./adb.exe shell
su
cd /data/local/tmp
chmod 755 frida-server
./frida-server
```
### Inject Frida script ### 4. Install [LDPlayer 9](https://lddl01.ldmnq.com/downloader/ldplayerinst9.exe?n=ldplayer9_ld_999_ld.exe)
* Download game updates normally after installation is complete
> [!NOTE] ### 5. Install [Python](https://www.python.org/ftp/python/3.12.3/python-3.12.3-amd64.exe)
> Edit line 5 of [ba.js](./ba.js) to your own server IP. * Choose custom installation, leave other settings as default
* Choose the installation path
* Install and wait for completion
> [!WARNING] ## 📞 DISCORD
> Do this fast when you open ブルアカ and see the Yostar logo. - [Discord](https://discord.gg/URaXJpS5gd)
```bash
# in this repo
frida -U "ブルアカ" -l ba.js --realm=emulated
```

View File

@ -1,6 +1,19 @@
# SCHALE.GameServer # 🌌 **SCHALE.GameServer** 🌟
**本文基于[https://github.com/rafi1212122/SCHALE.GameServer](https://github.com/rafi1212122/SCHALE.GameServer)及个人操作经验编写资源配置文件请到以上链接获取若有任何疑问请到Discord社群询问**
## 安装准备阶段 # 📚 项目文档目录
## 📌 目录
- [🔧 环境安装](#环境安装)
- [🚀 命令列表](Command.md)
- [📦 Mitmproxy方案](Mitmproxy_Readme_ZH.md)
- [🎟 导入官服数据](Account_Data_into_SCHALE_ZHCN.md)
- [📞 DISCORD](#DISCORD)
---
## 🔧 环境安装
### 1.安装[SQL Server Express 2022](https://go.microsoft.com/fwlink/p/?linkid=2216019&clcid=0x804&culture=zh-cn&country=cn) ### 1.安装[SQL Server Express 2022](https://go.microsoft.com/fwlink/p/?linkid=2216019&clcid=0x804&culture=zh-cn&country=cn)
* 打开你下载的安装程序 * 打开你下载的安装程序
* 选择“基础” * 选择“基础”
@ -14,76 +27,11 @@
* 工作负荷选择所有带有C#的组件以及“Visual Studio扩展开发” * 工作负荷选择所有带有C#的组件以及“Visual Studio扩展开发”
* 直接默认路径安装 * 直接默认路径安装
### 4.安装[雷电模拟器9](https://lddl01.ldmnq.com/downloader/ldplayerinst9.exe?n=ldplayer9_ld_999_ld.exe) ### 4.安装[雷电模拟器9](https://lddl01.ldmnq.com/downloader/ldplayerinst9.exe?n=ldplayer9_ld_999_ld.exe)
* 安装完成后正常下载游戏更新
### 5.安装[Python](https://www.python.org/ftp/python/3.12.3/python-3.12.3-amd64.exe) ### 5.安装[Python](https://www.python.org/ftp/python/3.12.3/python-3.12.3-amd64.exe)
* 选择自定义安装,其余默认 * 选择自定义安装,其余默认
* 选择安装路径 * 选择安装路径
* 安装,等待完成 * 安装,等待完成
### 6.安装Frida
* win+R打开运行键入cmd
* 在cmd中输入`pip install frida`回车
* 等待下载安装完成
* 再输入`pip install frida-tools`回车
* 等待下载安装完成(时间可能较长)
### 7.推送Frida-server至模拟器
* 下载[frida-server-16.x.x-android-x86_64.xz](https://github.com/frida/frida/releases/download/16.3.1/frida-server-16.3.1-android-x86_64.xz)并解压
* 把frida-server-16.x.x-android-x86_64放入`\leidian\LDPlayer9`路径下
* 打开模拟器并在设置中打开ADB调试和ROOT权限
* 在(你安装时的盘):\leidian\LDPlayer9路径下的导航栏中输入cmd并回车
* 输入`adb push frida-server-16.x.x-android-x86_64 /data/local/tmp`
* 等待传输完成
## 资源配置阶段
* 打开并解压所下载的SCHALE.GameServer-master.zip
* 使用Microsoft Visual Studio 2022打开包中的SCHALE.GameServer.sln
* 选择顶部菜单栏“视图”下拉“终端”
* 若在`...\SCHALE.GameServer-master>`下,请输入`cd SCHALE.GameServer`转到以下路径
* 在`\SCHALE.GameServer-master\SCHALE.GameServer`路径下输入:
`dotnet publish -a x64 --use-current-runtime --self-contained false -p:InvariantGlobalization=false`
* ~~找到并在`\SCHALE.GameServer-master\SCHALE.GameServer\bin\Release\net8.0\win-x64`路径下创建Resources文件夹再在其下创建excel文件夹将Excel.zip解压至此文件夹~~(最新版该步骤已集成于`SCHALE.GameServer.exe`
* 打开SSMS默认连接注意勾选信任服务器证书
* 运行`\SCHALE.GameServer-master\SCHALE.GameServer\bin\Release\net8.0\win-x64\SCHALE.GameServer.exe` (后台挂起)(首次运行请允许通过防火墙)
* 找到ba.js文件使用记事本打开修改第5行`REPLACE THIS WITH YOUR LOCAL IP`为你此时的IPV4地址网络和Internet设置中可查看
## 启动游戏阶段
*建议把ba.js放入\leidian\LDPlayer9路径下*
**以下操作每次启动都要执行!** ## 📞 DISCORD
* 打开雷电模拟器 - [Discord](https://discord.gg/URaXJpS5gd)
* 启动frida
* 在(你安装时的盘):\leidian\LDPlayer9路径下的导航栏中输入cmd并回车
* 在所打开的cmd中键入:
```
adb shell
su //超级管理员
cd /data/local/tmp //转到此路径下
chmod 755 frida-server-16.x.x-android-x86_64
./frida-server-16.x.x-android-x86_64 //启动frida
```
**注意此步骤完成后不要关闭该cmd**
* PC重新打开一个路径相同的cmd
* (模拟器)启动游戏 ブルアカ
* 在出现Yostar徽标时键入并回车
`frida -U "ブルアカ" -l ba.js --realm=emulated`(后台挂起)
* 出现`Attatching...`并且SCHALE.GameServer.exe出现Ping时基本成功
**###进入私服前需要先连接官服下载资源并通过新手教程###**
**###首次登录设置完名称和发音档时会抛出错误,此时重启`SCHALE.GameServer.exe`、关闭游戏,从“启动游戏ブルアカ”步骤再次开始即可正常进入###**
## 注意事项
* 此项目还处于初期阶段,存在大量不可使用选项,出现问题请尝试重新登录或重启
* 若出现`SCHALE.GameServer.exe`没有Ping的情况请检查ba.js中的IPV4地址与你当前地址是否一致
* 若已成功安装SQL Server Express请不要轻易自行尝试卸载或删除它否则可能无法再次成功安装
* 如果很不幸你的电脑上已经多次无法成功安装SQL Server Express且不愿意重装系统以下提供一个平替方案
*需要较高性能的电脑和足够的硬盘存储*
* 安装[VMware Workstation Pro](https://blog.csdn.net/weixin_74195551/article/details/127288338)
* 网络搜索许可证密钥填入
* 前往Windows官网或其他正规渠道获取Windows 10/11镜像
* 创建并安装Windows虚拟机
参阅[VMware中安装win10教程_vmware安装win10-CSDN博客](https://blog.csdn.net/lvlheike/article/details/120398259)
* 创建完虚拟机需设置:
* 你的电脑:设置-系统-屏幕-显示卡-默认图形设置启用“硬件加速GPU计划”
* 虚拟机设置处理器勾选虚拟化Intel VT-x/EPT或AMD-V/RVI(V)
* 虚拟机设置显示器勾选“加速3D图形”选择“指定监视器设置”监视器数量为1个图形内存改为所给**内存**的一半
* 启动虚拟机
* 使用[KMS](https://github.com/zbezj/HEU_KMS_Activator/releases/tag/42.0.4)激活Windows
* 完成后即可开始安装

View File

@ -11,7 +11,6 @@ using SCHALE.Common.NetworkProtocol;
namespace SCHALE.Common.Database namespace SCHALE.Common.Database
{ {
public abstract class HexaCommand public abstract class HexaCommand
{ {
public long CommandId { get; set; } public long CommandId { get; set; }
@ -19,22 +18,22 @@ namespace SCHALE.Common.Database
} }
public enum HexaCommandType public enum HexaCommandType
{ {
None = 0, None = 0,
UnitSpawn = 1, UnitSpawn = 1,
PlayScenario = 2, PlayScenario = 2,
StrategySpawn = 3, StrategySpawn = 3,
TileSpawn = 4, TileSpawn = 4,
TileHide = 5, TileHide = 5,
EndBattle = 6, EndBattle = 6,
WaitTurn = 7, WaitTurn = 7,
StrategyHide = 8, StrategyHide = 8,
UnitDie = 9, UnitDie = 9,
UnitMove = 10, UnitMove = 10,
CharacterEmoji = 11, CharacterEmoji = 11,
} }
public abstract class HexaCondition public abstract class HexaCondition
{ {
public long ConditionId { get; set; } public long ConditionId { get; set; }
public abstract HexaConditionType Type { get; } public abstract HexaConditionType Type { get; }
@ -407,7 +406,7 @@ namespace SCHALE.Common.Database
public class CampaignMainStageSaveDB : ContentSaveDB public class CampaignMainStageSaveDB : ContentSaveDB
{ {
public override ContentType ContentType { get => ContentType.CampaignMainStage; } public override ContentType ContentType { get => ContentType.CampaignMainStage; }
public CampaignState CampaignState { get; set; } public CampaignState CampaignState { get; set; }
public int CurrentTurn { get; set; } public int CurrentTurn { get; set; }
public int EnemyClearCount { get; set; } public int EnemyClearCount { get; set; }
public int LastEnemyEntityId { get; set; } public int LastEnemyEntityId { get; set; }
@ -1530,6 +1529,7 @@ namespace SCHALE.Common.Database
public class SingleRaidLobbyInfoDB : RaidLobbyInfoDB public class SingleRaidLobbyInfoDB : RaidLobbyInfoDB
{ {
public List<Difficulty> ClearDifficulty { get; set; }
} }
public class EliminateRaidLobbyInfoDB : RaidLobbyInfoDB public class EliminateRaidLobbyInfoDB : RaidLobbyInfoDB
@ -4849,7 +4849,7 @@ namespace SCHALE.Common.Database
public int PassiveSkillLevel { get; set; } public int PassiveSkillLevel { get; set; }
public int ExtraPassiveSkillLevel { get; set; } public int ExtraPassiveSkillLevel { get; set; }
public int FavorRank { get; set; } public int FavorRank { get; set; }
public StatSnapshotCollection StatSnapshotCollection { get; set; } public List<StatSnapshot> StatSnapshotCollection { get; set; }
public long HPRateBefore { get; set; } public long HPRateBefore { get; set; }
public long HPRateAfter { get; set; } public long HPRateAfter { get; set; }
public int CrowdControlCount { get; set; } public int CrowdControlCount { get; set; }
@ -4883,7 +4883,7 @@ namespace SCHALE.Common.Database
[JsonIgnore] [JsonIgnore]
public int ExSkillUseCount { get; } public int ExSkillUseCount { get; }
public KillLogCollection KillLog { get; set; } public Dictionary<long, int> KillLog { get; set; }
[JsonIgnore] [JsonIgnore]
public int KillCount { get; } public int KillCount { get; }
@ -4901,7 +4901,7 @@ namespace SCHALE.Common.Database
public class SkillCostSummary public class SkillCostSummary
{ {
public float InitialCost { get; set; } public float InitialCost { get; set; }
public CostRegenSnapshotCollection CostPerFrameSnapshots { get; set; } public List<SkillCostRegenSnapshot> CostPerFrameSnapshots { get; set; }
public List<SkillCostAddSnapshot> CostAddSnapshots { get; set; } public List<SkillCostAddSnapshot> CostAddSnapshots { get; set; }
public List<SkillCostUseSnapshot> CostUseSnapshots { get; set; } public List<SkillCostUseSnapshot> CostUseSnapshots { get; set; }
} }
@ -5167,6 +5167,7 @@ namespace SCHALE.Common.Database
private int CurrentCount { get; set; } private int CurrentCount { get; set; }
public LogicEffect LogicEffectToDispel { get; } public LogicEffect LogicEffectToDispel { get; }
public bool IsDispellable { get; } public bool IsDispellable { get; }
public EntityId DotInvokerEntityId { get; set; }
public Func<bool> ExpirationCheck { get; set; } public Func<bool> ExpirationCheck { get; set; }
public Entity ExpirationCheckOwner { get; set; } public Entity ExpirationCheckOwner { get; set; }
public int StackSameEffectCount { get; } public int StackSameEffectCount { get; }
@ -5192,6 +5193,12 @@ namespace SCHALE.Common.Database
public abstract class SkillCard : IDisposable public abstract class SkillCard : IDisposable
{ {
private EventHandler<EventArgs> StateChanged; private EventHandler<EventArgs> StateChanged;
private EventHandler<UpdateEvent> CardCopyUpdated;
public LogicEffectValue[] CopyApplyLogicEffectValues;
public SkillSpecification CopySkillSpecification;
public bool DeductRedrawGaugeWhenHandExist;
public int CopyUseMaxCount;
public int CopyUseCount;
private static int SkillUniqueIndex; private static int SkillUniqueIndex;
public int SkillCardUniqueId; public int SkillCardUniqueId;
public int Cost; public int Cost;
@ -5200,6 +5207,14 @@ namespace SCHALE.Common.Database
public int ExtraEnemyCost; public int ExtraEnemyCost;
public int NPCCost; public int NPCCost;
public int ExtraNPCCost; public int ExtraNPCCost;
public BattleEntity CastOwnerEntity { get; }
public long CastCharacterId { get; }
public long CastOwnerCostumeId { get; }
public SkillDataPack CastSkillData { get; }
public string CastSkillGroupId { get; }
public CharacterSkillListKey CastSkillListKey { get; }
public TargetCandidateRule CastCandidateRule { get; }
public SkillSlot CastSkillSlot { get; }
public abstract BattleEntity OwnerEntity { get; } public abstract BattleEntity OwnerEntity { get; }
public abstract long OwnerCostumeId { get; } public abstract long OwnerCostumeId { get; }
public SkillDataPack SkillData { get; } public SkillDataPack SkillData { get; }
@ -5222,10 +5237,14 @@ namespace SCHALE.Common.Database
public bool IsAutoUse { get; set; } public bool IsAutoUse { get; set; }
public abstract EntityId OwnerEntityId { get; } public abstract EntityId OwnerEntityId { get; }
public abstract long CharacterId { get; } public abstract long CharacterId { get; }
public int OriginalCost { get; } public string CopyLogicEffectGroupId { get; set; }
public SkillCard CopyCard { get; set; }
public List<SkillCard> CopiedCard { get; set; }
public int OriginalCost { get; set; }
public int CostUsed { get; set; } public int CostUsed { get; set; }
public bool IsNPCCard { get; set; } public bool IsNPCCard { get; set; }
public int SkillRemainCount { get; set; } public int SkillRemainCount { get; set; }
public bool IsCopyCard { get; }
public void Dispose() public void Dispose()
{ {
} }
@ -5420,6 +5439,7 @@ namespace SCHALE.Common.Database
public class Circle : Shape, IEquatable<Circle> public class Circle : Shape, IEquatable<Circle>
{ {
private Vector2 forward;
public static Circle Empty { get; } public static Circle Empty { get; }
public static Circle Default { get; } public static Circle Default { get; }
@ -5430,6 +5450,8 @@ namespace SCHALE.Common.Database
public override ValueTuple<float, float> Size { get; } public override ValueTuple<float, float> Size { get; }
public override Vector2 Center { get; set; } public override Vector2 Center { get; set; }
public float Radius { get; set; } public float Radius { get; set; }
public override Vector2 Right { get; set; }
public override Vector2 Forward { get; set; }
public bool Equals(Circle other) public bool Equals(Circle other)
{ {
return default; return default;
@ -5607,6 +5629,7 @@ namespace SCHALE.Common.Database
public TagConstraint TagConstraint { get; } public TagConstraint TagConstraint { get; }
public HPRateConstraint HPRateConstraint { get; } public HPRateConstraint HPRateConstraint { get; }
public TacticRoleConstraint TacticRoleConstraint { get; } public TacticRoleConstraint TacticRoleConstraint { get; }
public bool IsPlayerSquadConstraint { get; }
public CoverState CoverState { get; } public CoverState CoverState { get; }
public bool NeedSearchTarget { get; } public bool NeedSearchTarget { get; }
public bool Equals(TargetCandidateRule other) public bool Equals(TargetCandidateRule other)
@ -6988,7 +7011,7 @@ namespace SCHALE.Common.Database
public class BattleNumericLog : IEquatable<BattleNumericLog> public class BattleNumericLog : IEquatable<BattleNumericLog>
{ {
public BattleEntityType EntityType { get; set; } public string EntityType { get; set; } // original type: BattleEntityType, too lazy to write Enum to string converter
public BattleLogCategory Category { get; set; } public BattleLogCategory Category { get; set; }
public BattleLogSourceType Source { get; set; } public BattleLogSourceType Source { get; set; }
public long CalculatedSum { get; set; } public long CalculatedSum { get; set; }
@ -7264,6 +7287,14 @@ namespace SCHALE.Common.Database
public bool IsDisabled { get; } public bool IsDisabled { get; }
} }
public enum UpdateEvent
{
New = 0,
Modify = 1,
Dispell = 2,
Remove = 3,
}
public class SkillDataPack public class SkillDataPack
{ {
public NewSkillAction Action { get; } public NewSkillAction Action { get; }
@ -8557,6 +8588,7 @@ namespace SCHALE.Common.Database
public bool Dispellable { get; } public bool Dispellable { get; }
public string UIPath { get; } public string UIPath { get; }
public List<AttackLogicEffectType> LogicEffectTypeReduceGauge { get; } public List<AttackLogicEffectType> LogicEffectTypeReduceGauge { get; }
public GaugeTraceType GaugeTraceElement { get; }
public override bool IsDurationChangedByStat { get; } public override bool IsDurationChangedByStat { get; }
} }
@ -8594,6 +8626,7 @@ namespace SCHALE.Common.Database
public CoverState CoverState; public CoverState CoverState;
public HPRateConstraint HPRateConstraint; public HPRateConstraint HPRateConstraint;
public TacticRoleConstraint TacticRoleConstraint; public TacticRoleConstraint TacticRoleConstraint;
public bool IsPlayerSquadConstraint;
public bool Equals(OptionalCandidateRule other) public bool Equals(OptionalCandidateRule other)
{ {
return default; return default;
@ -8639,7 +8672,6 @@ namespace SCHALE.Common.Database
public abstract class ExpressionContainer public abstract class ExpressionContainer
{ {
protected Expression expression; protected Expression expression;
public Stack<string> StackTrace { get; }
} }
public abstract class BehaviorNode public abstract class BehaviorNode
@ -8732,6 +8764,13 @@ namespace SCHALE.Common.Database
public bool Dispellable { get; } public bool Dispellable { get; }
public List<AttackLogicEffectType> LogicEffectTypeReduceGauge { get; } public List<AttackLogicEffectType> LogicEffectTypeReduceGauge { get; }
public string UIPath { get; } public string UIPath { get; }
public GaugeTraceType GaugeTraceElement { get; }
}
public enum GaugeTraceType
{
None = 0,
HPRate = 1,
} }
public enum DiffOperatorType public enum DiffOperatorType
@ -8753,14 +8792,12 @@ namespace SCHALE.Common.Database
private EvaluateFunctionHandler EvaluateFunction; private EvaluateFunctionHandler EvaluateFunction;
private EvaluateParameterHandler EvaluateParameter; private EvaluateParameterHandler EvaluateParameter;
private Dictionary<string, object> _parameters; private Dictionary<string, object> _parameters;
private Stack<string> stackTrace;
public EvaluateOptions Options { get; set; } public EvaluateOptions Options { get; set; }
protected string OriginalExpression { get; } protected string OriginalExpression { get; }
public static bool CacheEnabled { get; set; } public static bool CacheEnabled { get; set; }
public string Error { get; set; } public string Error { get; set; }
public LogicalExpression ParsedExpression { get; set; } public LogicalExpression ParsedExpression { get; set; }
public Dictionary<string, object> Parameters { get; set; } public Dictionary<string, object> Parameters { get; set; }
public Stack<string> StackTrace { get; }
} }
public sealed class EvaluateFunctionHandler public sealed class EvaluateFunctionHandler

View File

@ -9891,7 +9891,7 @@ namespace SCHALE.Common.NetworkProtocol
public IEnumerable<RaidDamage> RaidBossDamages { get; } public IEnumerable<RaidDamage> RaidBossDamages { get; }
[JsonIgnore] [JsonIgnore]
public RaidBossResultCollection RaidBossResults { get; } public List<RaidBossResult> RaidBossResults { get; }
public BattleSummary Summary { get; set; } public BattleSummary Summary { get; set; }
public ClanAssistUseInfo AssistUseInfo { get; set; } public ClanAssistUseInfo AssistUseInfo { get; set; }
} }

View File

@ -28,7 +28,7 @@ namespace SCHALE.GameServer.Managers
ReceiveRewardIds = targetSeasonData.SeasonRewardId, ReceiveRewardIds = targetSeasonData.SeasonRewardId,
PlayableHighestDifficulty = new() PlayableHighestDifficulty = new()
{ {
{ targetSeasonData.OpenRaidBossGroup.FirstOrDefault(), Difficulty.Torment } { targetSeasonData.OpenRaidBossGroup.FirstOrDefault(), Difficulty.Lunatic }
} }
}; };
} }

View File

@ -14,7 +14,7 @@ namespace SCHALE.GameServer.Utils
public string IRCAddress { get; set; } = "127.0.0.1"; public string IRCAddress { get; set; } = "127.0.0.1";
public int IRCPort { get; set; } = 6667; public int IRCPort { get; set; } = 6667;
public string VersionId { get; set; } = "r76_odfuvebzfonktr6yf71a/"; public string VersionId { get; set; } = "r76_odfuvebzfonktr6yf71a";
public static void Load() public static void Load()
{ {