跳到主要内容

游戏阶段

待重构 我们将游戏分成若干阶段,可以在数据编辑器中修改各阶段的最长时间

    ['game_stage']
mode=1
time_score_init=3000
time_loading=90000
time_selecthero=15000
time_selectfinish=1000
time_run=9999999
time_end=1000

首先是初始化阶段(或者说积分初始化阶段),时长由time_score_init配置。表会在该阶段开始前就读好,但Lua暂时还没有加载。如果配了自动加载碰撞和视野等场景信息(config.ini配置['map']auto_load_scene,默认1),那么也在改阶段前就会加载。在表里填的要初始化好的积分信息会在这个阶段取好。包括昵称也是在这个阶段取好,因为一旦进游戏显示可能就会要用。顺利的话取积分要不了多久,积分取好后该阶段就提前结束。如果本地调试的时候用命令行参数指定了不使用积分,那么该阶段会瞬间结束。

初始化阶段结束后,才会通知各客户端来登录Host,服务器Lua才被加载运行。

初始化阶段结束的那一刻,Loading阶段(time_loading)就开始了。相当于服务器Lua是在Loading阶段的第一帧加载的。除此之外,Loading阶段的主要任务就是等所有玩家都声称自己已Loading完毕。所有人Loading完毕的话就提前进入下一阶段。如果表里配置了不自动加载场景信息,这时候可以加载了(通常用于随机场景),并通过游戏局属性通知客户端,让客户端也加载对应的视野。

选人阶段(time_selecthero)如果是Lua控制,那么由Lua判断是否提前结束。如果是C++的选人逻辑,那么所有人选完英雄即提前结束。

选人倒计时(time_selectfinish)目前没什么用(将废弃)。

以前还有个time_start字段,现在已废弃

接下来是游戏运行阶段(time_run)。被set_winner设置胜负后,改阶段会提前结束。注意到了time_run指定的时间的话,游戏会强行结束,避免因为逻辑错误没正常结束而一直占用服务器资源

游戏结束阶段(time_end)。最后个阶段。算算战报什么的。到该阶段结束后,游戏局才会真正释放。

另外通过mode字段,可以控制是否要跳过选人(mode = 4),以及Loading和选人的顺序等。