- 精华
- 阅读权限
- 80
- 贡献
- 人
- 好友
- 相册
- 分享
- 听众
- 收听
- 注册时间
- 2017-8-5
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
# 国战问题修复总结
## 一、问题现象
1. crossx端国战已开启(SignUp报名阶段)
2. gamexshard端日志显示 "country is country open war zone not open"
3. 客户端看不到国战按钮
4. 部分国战相关功能未正常显示
## 二、根本原因
**战区未开启** - 国战功能依赖于战区(war zone),战区未开启导致国战按钮不显示。
### 矛盾点
- **crossx端**: 认为战区已开启(status: Opened)
- **gamexshard端**: 认为战区未开启,查询战区时间返回0
## 三、核心修复步骤
### 步骤1:修复crossx配置路径问题
**问题**: crossx期望配置文件在 `confd/conf/` 目录下,但实际在 `conf/` 目录下
**解决方案**:
```bash
cd /data/jws_server/server/jws2/crossx/
mkdir -p confd/conf
cp conf/*.toml confd/conf/
cp conf/*.yaml confd/conf/ 2>/dev/null
```
**注意**: 用户要求复制文件,不使用软链接
### 步骤2:修复crossx启动环境变量
**问题**: crossx启动时缺少环境变量,导致启动失败
**解决方案**:
```bash
# 启动时添加环境变量
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_leader.toml > /tmp/crossx_leader.log 2>&1 &
```
### 步骤3:修改国战分组(关键!)
**问题**: 国战(mod 421)的分组是单服分组120001,而不是战区分组1005922
**解决方案**:
通过GM接口或修改etcd数据,将国战分组从120001改为1005922
```bash
# GM接口方式
curl -X POST 'http://127.0.0.1:8809/api/servergroup/v2/shard_reset' \
-H 'Content-Type: application/json' \
-d '{"param":{}}'
```
### 步骤4:设置战区cheat分组
**问题**: 战区没有正确的分组配置
**解决方案**:
```bash
curl -X POST 'http://127.0.0.1:8809/api/warzone/v2/set_cheat_warzone_groups' \
-H 'Content-Type: application/json' \
-d '{"param":{"GroupIDsStr":"1005922"}}'
```
### 步骤5:调整系统时间触发国战开启
**问题**: 国战处于StageNull状态,未开启
**解决方案**:
调整系统时间到国战开启时间点,触发国战自动进入SignUp阶段
```bash
# 设置时间
date -s '2026-06-21 06:00:00'
hwclock --systohc
```
### 步骤6:停止NTP服务防止时间自动同步
**问题**: NTP服务会自动同步时间,导致手动设置的时间失效
**解决方案**:
```bash
# 停止并禁用NTP服务
systemctl stop ntpd
systemctl disable ntpd
systemctl stop chronyd
systemctl disable chronyd
systemctl stop systemd-timesyncd
systemctl disable systemd-timesyncd
```
### 步骤7:刷新跨服分组
```bash
curl -X POST 'http://127.0.0.1:8809/api/servergroup/v2/shard_reset' \
-H 'Content-Type: application/json' \
-d '{"param":{}}'
```
## 四、重置国战赛季(2026-06-22新增)
### 场景
赛季日期不对,需要重新设置赛季开始时间
### 操作步骤
1. **停止crossx服务**
```bash
pkill -f 'crossx cross'
# 确认停止
pgrep -f 'crossx cross' | wc -l
```
2. **清理Redis中的国战数据**
```bash
# 查找并删除所有国战相关key
redis-cli keys '*Country*'
redis-cli keys '*country*'
# 逐个删除
```
3. **调整系统时间到赛季开始日期**
```bash
# 例如:让赛季从昨天开始
date -s '2026-06-21 06:00:00'
hwclock --systohc
```
4. **启动crossx服务**
```bash
# 启动leader
cd /data/jws_server/server/jws2/crossx/
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_leader.toml > /tmp/crossx_leader.log 2>&1 &
# 启动member1
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_member.toml > /tmp/crossx_member1.log 2>&1 &
# 启动member2
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_member2.toml > /tmp/crossx_member2.log 2>&1 &
```
5. **等待国战初始化(约30-60秒)**
6. **把时间调回正常时间**
```bash
date -s '2026-06-22 08:00:00'
hwclock --systohc
```
### 注意事项
- 国战阶段是根据固定周期计算的,不是从第1阶段重新开始
- 赛季开始日期由设置的系统时间决定
- crossx启动较慢,需要耐心等待
## 五、修改的文件和数据
### 配置文件
- `/data/jws_server/server/jws2/crossx/confd/conf/` - crossx配置目录(新建)
- config_leader.toml
- config_member.toml
- config_member2.toml
### etcd数据
- `root/server/12/server_groups/war_zone` - 战区分组信息
- `root/server/12/server_groups/120001` - 单服分组信息(国战mod 421分组)
- `root/server/12/cross_cheat_warzone_groups` - 战区cheat分组
- `root/server/12/shards/120001/warZoneOpenTime` - 战区开启时间
### Redis数据
- `crossx:1005922:Country:*` - 国战相关数据
- `crossx:0:crossmodules:servergroup:servergroup` - 服务器分组数据
## 六、关键配置参数
### 战区时间
- 预告时间(noticeTime): 1672520400(2023-01-01 05:00:00)
- 开始时间(startTime): 1672606800(2023-01-02 05:00:00)
### 战区分组
- 分组ID: 1005922
- 包含服务器: 120001, 120002
### 国战分组
- Mod ID: 421(国战)
- 分组ID: 1005922(战区分组)
## 七、验证方法
### 1. 检查crossx进程
```bash
ps aux | grep 'crossx cross' | grep -v grep
```
应该有3个进程:leader, member1, member2
### 2. 检查国战状态
```bash
grep '\[Country.1005922\]' /data/jws_server/server/jws2/crossx/cross.log | tail -5
```
应该能看到国战模块正常运行,有赛季和阶段信息
### 3. 检查gamex端战区状态
```bash
grep 'WarZoneModule query time info' /data/jws_server/server/jws2/gamexshard/gamex.log | tail -3
```
noticeTime和startTime应该不为0
### 4. 检查GM接口
```bash
curl -X POST 'http://127.0.0.1:8809/api/warzone/v2/query' \
-H 'Content-Type: application/json' \
-d '{"param":{}}'
```
### 5. 客户端验证
登录游戏,检查国战按钮是否显示,国战功能是否正常
## 八、国战阶段说明(CountrySeasonStage)
| 阶段值 | 阶段名称 | 说明 |
|--------|----------|------|
| 0 | StageNull | 判空默认值 |
| 1 | SignUp | 报名阶段 |
| 2 | SovereignChooseBefore | 君主选国开始到君主1选国 |
| 3 | Sovereign1Choose | 君主1选国 |
| 4 | Sovereign2Choose | 君主2选国 |
| 5 | Sovereign3Choose | 君主3选国 |
| 6 | SovereignChooseAfter | 君主3选国结束到君主选国结束 |
| 7 | CoreChoose | 核心帮选国 |
| 8 | AdjustmentChoose | 增补调整 |
| 9 | CountryBuildFight | 建国对战 |
| 10 | CountryBuildPreBalance | 建国预结算 |
| 11 | CountryRest | 休赛期 |
## 九、战区状态说明(WarzoneStatus)
| 状态值 | 状态名称 | 说明 |
|--------|----------|------|
| 0 | NotStart | 未启动 |
| 1 | NotOpen | 未开服 |
| 2 | NotNotice | 未进入预告 |
| 3 | NoConfig | 没有对应配置 |
| 4 | Noticed | 已预告未开服 |
| 5 | Opened | 已开启 |
## 十、注意事项
### 高风险操作(禁止)
1. 禁止运行 `startWithWarZone.sh` - 会清理etcd和redis,导致删档
2. 禁止清理etcd和redis数据
3. 禁止使用软链接(用户要求复制文件)
4. 禁止随意调整系统时间(可能导致crossx退出或数据异常)
### 性能说明
- crossx启动较慢,需要耐心等待(约30-60秒)
- 游戏数据文件很多,加载需要时间
- 4核7.5G配置可能略显紧张
### 时间同步
- 必须停止NTP服务,否则手动设置的时间会被自动同步回去
- 停止的服务:ntpd, chronyd, systemd-timesyncd
## 十一、常用命令速查
### 服务管理
```bash
# 查看crossx进程
ps aux | grep 'crossx cross' | grep -v grep
# 停止crossx
pkill -f 'crossx cross'
# 启动crossx(带环境变量)
cd /data/jws_server/server/jws2/crossx/
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_leader.toml > /tmp/crossx_leader.log 2>&1 &
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_member.toml > /tmp/crossx_member1.log 2>&1 &
TZ=Asia/Shanghai Lang=en-US nohup ./crossx cross -c config_member2.toml > /tmp/crossx_member2.log 2>&1 &
```
### 日志查看
```bash
# crossx日志
tail -f /data/jws_server/server/jws2/crossx/cross.log
# gamex日志
tail -f /data/jws_server/server/jws2/gamexshard/gamex.log
# 启动日志
tail -f /tmp/crossx_leader.log
tail -f /tmp/crossx_member1.log
tail -f /tmp/crossx_member2.log
```
### 时间管理
```bash
# 查看当前时间
date '+%Y-%m-%d %H:%M:%S %Z'
# 设置时间
date -s '2026-06-22 08:00:00'
# 同步硬件时间
hwclock --systohc
# 停止NTP服务
systemctl stop ntpd
systemctl disable ntpd
```
### etcd操作
```bash
# 查看所有key
etcdctl get "" --prefix --keys-only | wc -l
# 查看战区配置
etcdctl get root/server/12/server_groups/war_zone
# 查看服务器分组
etcdctl get root/server/12/server_groups/120001
```
### Redis操作
```bash
# 查看国战相关key
redis-cli keys '*Country*'
# 查看服务器分组
redis-cli hgetall 'crossx:0:crossmodules:servergroup:servergroup'
```
## 十二、GM接口清单
### 服务器分组相关(前缀: /api/servergroup/v2/)
- `POST /api/servergroup/v2/query` - 查询所有玩法周期
- `POST /api/servergroup/v2/reset` - 重置指定玩法周期
- `POST /api/servergroup/v2/shard_reset` - 刷新指定服的跨服分组
- `POST /api/servergroup/v2/reset_all` - 重置所有分组
- `POST /api/servergroup/v2/close_country_and_reset_warzone_mods` - 关闭国家并重置战区玩法
### 战区相关(前缀: /api/warzone/v2/)
- `POST /api/warzone/v2/query` - 查询战区信息
- `POST /api/warzone/v2/query_for_shard` - 查询单服战区信息
- `POST /api/warzone/v2/query_cheat_warzone_groups` - 查询战区cheat分组
- `POST /api/warzone/v2/set_cheat_warzone_groups` - 设置战区cheat分组
### 功能开关相关(前缀: /api/game_switch/)
- `GET /api/game_switch/get` - 获取功能开关状态
- `POST /api/game_switch/set` - 设置功能开关
- `POST /api/game_switch/reset` - 重置功能开关
- `POST /api/game_switch/query` - 查询功能开关列表
### 虚拟战区
- `POST /api/switch_virtual_war_zone` - 开关虚拟战区
- `POST /api/query_virtual_war_zone` - 查询虚拟战区状态
### GM后台访问
- **HTTP端口**: 8809
- **配置端口**: 8801
---
**文档版本**: v4.0
**最后更新**: 2026-06-22
**适用服务器**: 111.229.7.137 (gid:12, sid:120001)
**当前状态**: 国战正常运行,赛季从2026-06-21开始
实在不行我把我修复好了的云服务器备份的发出来 不知道你们行不行会不会用云服务器的 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|