game_weather 表
game_weather表定义每个区域(Zone)的天气效果概率,按四季分别配置雨/雪/暴风雪的触发几率。
表概述
game_weather表属于Weather System,控制游戏中各区域的天气效果。每个区域(Zone)按春夏秋冬四个季节,分别配置三种天气类型(雨、雪、暴风雪)的触发概率。
主键为 zone,概率取值为0-100的整数(tinyint)。系统每隔一段时间根据概率随机触发天气效果。ScriptName可用于自定义天气脚本。
表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
| zone | INT UNSIGNED | 0 | 区域Zone ID(主键) |
| spring_rain_chance | TINYINT UNSIGNED | 25 | 春季下雨概率 |
| spring_snow_chance | TINYINT UNSIGNED | 25 | 春季下雪概率 |
| spring_storm_chance | TINYINT UNSIGNED | 25 | 春季暴风雪概率 |
| summer_rain_chance | TINYINT UNSIGNED | 25 | 夏季下雨概率 |
| summer_snow_chance | TINYINT UNSIGNED | 25 | 夏季下雪概率 |
| summer_storm_chance | TINYINT UNSIGNED | 25 | 夏季暴风雪概率 |
| fall_rain_chance | TINYINT UNSIGNED | 25 | 秋季下雨概率 |
| fall_snow_chance | TINYINT UNSIGNED | 25 | 秋季下雪概率 |
| fall_storm_chance | TINYINT UNSIGNED | 25 | 秋季暴风雪概率 |
| winter_rain_chance | TINYINT UNSIGNED | 25 | 冬季下雨概率 |
| winter_snow_chance | TINYINT UNSIGNED | 25 | 冬季下雪概率 |
| winter_storm_chance | TINYINT UNSIGNED | 25 | 冬季暴风雪概率 |
| ScriptName | CHAR(64) | '' | 自定义天气脚本 |
重要字段详解
zone (区域ID)
对应Map.dbc中定义的Zone ID。常见区域:
- 1 - 丹莫罗(雪区)
- 12 - 艾尔文森林(雨区)
- 215 - 莫高雷
- 85 - 提瑞斯法林地
- 493 - 嚎风峡湾
概率配置规则
概率值为0-100整数。当总概率超过100时,系统会进行归一化分配。实际天气触发机制:
- 服务器每隔约10分钟检测一次天气
- 根据当前游戏内季节选择对应的概率列
- 随机决定是否触发天气及触发哪种天气类型
实战案例
设置艾尔文森林只下雨从不下雪
INSERT INTO game_weather (zone, spring_rain_chance, spring_snow_chance, spring_storm_chance,
summer_rain_chance, summer_snow_chance, summer_storm_chance,
fall_rain_chance, fall_snow_chance, fall_storm_chance,
winter_rain_chance, winter_snow_chance, winter_storm_chance)
VALUES (12, 30, 0, 0, 25, 0, 0, 35, 0, 0, 20, 0, 0)
ON DUPLICATE KEY UPDATE
spring_rain_chance=30, spring_snow_chance=0, spring_storm_chance=0,
summer_rain_chance=25, summer_snow_chance=0, summer_storm_chance=0,
fall_rain_chance=35, fall_snow_chance=0, fall_storm_chance=0,
winter_rain_chance=20, winter_snow_chance=0, winter_storm_chance=0;
查询所有冬季会下雪的区域
SELECT zone, winter_snow_chance, winter_storm_chance
FROM game_weather
WHERE winter_snow_chance > 0 OR winter_storm_chance > 0;
常见问题
Q: 概率设为100是否每10分钟必下雨?
A: 如果rain_chance=100,系统约每10分钟检测时会高概率下雨,但仍受内部随机因素影响。天气持续时间由系统随机决定,不是精确每10分钟切换一次。
Q: 季节怎么确定?
A: 实际时间是按现实月份,而非游戏内季节。游戏内使用虚拟日期系统,具体季节对应关系由内核的WeatherMgr控制。