表概述

game_weather表属于Weather System,控制游戏中各区域的天气效果。每个区域(Zone)按春夏秋冬四个季节,分别配置三种天气类型(雨、雪、暴风雪)的触发概率。

主键为 zone,概率取值为0-100的整数(tinyint)。系统每隔一段时间根据概率随机触发天气效果。ScriptName可用于自定义天气脚本。

表结构

字段名数据类型默认值说明
zoneINT UNSIGNED0区域Zone ID(主键)
spring_rain_chanceTINYINT UNSIGNED25春季下雨概率
spring_snow_chanceTINYINT UNSIGNED25春季下雪概率
spring_storm_chanceTINYINT UNSIGNED25春季暴风雪概率
summer_rain_chanceTINYINT UNSIGNED25夏季下雨概率
summer_snow_chanceTINYINT UNSIGNED25夏季下雪概率
summer_storm_chanceTINYINT UNSIGNED25夏季暴风雪概率
fall_rain_chanceTINYINT UNSIGNED25秋季下雨概率
fall_snow_chanceTINYINT UNSIGNED25秋季下雪概率
fall_storm_chanceTINYINT UNSIGNED25秋季暴风雪概率
winter_rain_chanceTINYINT UNSIGNED25冬季下雨概率
winter_snow_chanceTINYINT UNSIGNED25冬季下雪概率
winter_storm_chanceTINYINT UNSIGNED25冬季暴风雪概率
ScriptNameCHAR(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控制。