查看: 128|回复: 0

【从零开始】创建一个MOD&让服务器列表中正常显示

[复制链接]
  • TA的每日心情
    开心
    2017-9-11 20:38
  • 签到天数: 22 天

    [LV.4]

    468

    积分

    357

    子弹

    34

    武士刀

    Lv.M 版主

    Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

    积分
    468
    QQ
    发表于 2017-8-26 09:24:11 | 显示全部楼层 |阅读模式
    本帖最后由 JeremyGuo 于 2017-8-26 10:18 编辑

    承接上文,我们开始开发一个瞬杀服务器iDM
    Part0.创建一个新的MOD文件
    转到\src\game\server\gamemodes\文件夹下
    然后我们创建文件idm.cpp和idm.h
    然后我们打开idm.h进行第一步操作,为了避免重复定义,我们使用宏定义来限制。
    为了美观和便于识别,宏定义的格式我们参照另外的游戏模式。
    #ifndef GAME_SERVER_GAMEMODES_IDM_H

    #define GAME_SERVER_GAMEMODES_IDM_H
    //此处是你的代码
    #endif
    但是我们并不能直接开始码代码,我们考虑到前面我说我们要通过重载GameController来实现开发。

    Part1.继承原生的GameController
    为什么要通过继承来搞事情呢?当然是为了兼容性,原版的作者应该并不想自己的服务器只能用一个模式的游戏。
    所我们在上述位置打

    #include <game/server/gamecontroller.h>


    class CGameControllerIDM : public IGameController
    {
    public:
            CGameControllerDM(class CGameContext *pGameServer);
    }


    这样我们就创建了一个属于我们自己的游戏模式,当然如果你此时编译时不会报错的因为我们还没有引用这个文件。

    Part2.重载构造函数
    构造函数即创建class时会自动调用的函数,重载就是字面含义就是对原来已经有定义的函数进行覆盖定义。如果没有覆盖定义的话将会继续调用父类的函数。
    这里我们重载一下构造函数,我们打开\src\game\server\gamemodes\idm.cpp
    定义在idm.h中,声明在idm.cpp中。

    然后我们写下

    CGameControllerIDM::CGameControllerIDM(class CGameContext *pGameServer)
    : IGameController(pGameServer){
    }

    这里使用的:的意思就是初始化的意思:IGameController可以理解为直接调用父类的构造函数。
    GameContext是为了以后游戏比如输出公告什么的操作的时候进行调用所以保存一个GameContext的指针

    GameContext从字面理解就知道大概是管理游戏显示的内容什么的

    两个冒号前的是类的名称,冒号后的是函数的名称由于构造函数不存在返回值所以我们并不需要打返回值(别嫌我啰嗦)。

    Part3.修改在服务器列表中的游戏模式显示
    将构造函数中写成这个样子:
    m_pGameType = "IDM";
    这个同样是重载的变量,在哪里会使用到呢?

    游戏的GameController的引用是存在于GameContext中的,我们打开可以发现当服务器运行的时候通过对sv_gametype的识别然后引用对应的GameController,并将m_pGameType中的内容识别为运行时的游戏模式的显示内容。

    在GameContext中首先
    1、加入头文件#include "gamemodes/idm.h"
    2、添加游戏模式的识别
    操作如下:
    1、找到OnInit函数
    2、找到一大堆if的地方。
    3、在中间插入
    else if(str_comp(g_Config.m_SvGametype, "idm") == 0)
    欢迎来到Teeworlds 中国社区!
    回复

    使用道具 举报

    游客
    请先登录
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    快速回复 返回顶部 返回列表