使用MUDCORE框架从零开发LPMUD游戏:天气守护进程(CORE_NATURE_D)

天气系统目前图形网游越来越重视,这样表现的更为自然,在MUD中很多游戏也有天时系统,随着时间的流逝在游戏中表现出白天和晚上,当然,如果要完善这个功能,有很多细节需要配合开发,这里简单介绍一下MUDCORE框架提供的自然天气系统CORE_NATURE_D

在自己的MUD中只需要增加一个自然天气守护进程nature_d.c并继承CORE_NATURE_D即可,代码如下:

inherit CORE_NATURE_D;

然后游戏自动预加载这个文件,在游戏中就可以使用自然天气功能了,注意自然天气系统是需要时间守护进程支持的。

因为不同游戏在自然天气表现不同,框架只提供了基础的描述,包括四季(春spring、夏summer、秋autumn、冬winter)和三种天气(晴sun、阴wind、雨或雪rain)一共12个组合,相关文件在mudcore/system/etc/nature/目录中,另外还有一个基础的day_phase在初始化时调用。

如果你需要自定义描述,请参考目录中的文件结构改写所有文件描述,并定义宏NATURE_DIR到你的描述目录即可。

除了基础的自然天气描述,系统还提供了功能接口,在特定时间自动调用,但具体功能需要你自己实现,你可以在自己的nature_d文件中实现具体功能,相关接口如下:

void event_midnight(object file)
{
    // 午夜0点触发
    // 注意不要覆盖了框架中这个方法的代码,除非你确认不需要框架中的功能了
    ::event_midnight(file);
}

void event_dawn(object file)
{
    // 凌晨3点触发
    light = 3;
}

void event_sunrise(object file)
{
    // 早上6点触发
    light = 6;
}

void event_morning(object file)
{
    // 上午9点触发
    light = 9;
}

void event_noon(object file)
{
    // 中午12点触发
    light = 12;
}

void event_afternoon(object file)
{
    // 下午3点触发
    light = 9;
}

void event_evening(object file)
{
    // 下午6点触发
    light = 6;
}

void event_night(object file)
{
    // 晚上9点触发
    light = 3;
}

// 环境ob光线,可重写此方法
int light(object ob)
{
    return light;
}

注意CORE_NATURE_D中定义了一个光线变量light,光线系统参考了我的世界从0到15,设置的是中午时间为12,上午下午为9,黎明黄昏为6,晚上为3,你可以根据需要开发设置你的游戏环境的光线随时间变化,再结合道具光线实现光线系统。

提示:自然天气系统中的event_*事件触发时间并不精确,比如event_noon在游戏时间12:00触发,但是有较小的几率会晚一点时间触发,但足以满足需求。如果你需要非常精确的时间触发事件,请用时间守护进程中的计划任务系统。

京ICP备13031296号-4