查看: 381|回复: 3

【MOD制作】如何添加新的游戏模式&添加生成物品事件

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

    [LV.4]

    473

    积分

    363

    子弹

    35

    武士刀

    Lv.M 版主

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

    积分
    473
    QQ
    发表于 2017-7-24 21:32:23 | 显示全部楼层 |阅读模式
    工作目录
    为了保证最后得到的服务端的版本号不会和原版版本号发生差异,建议修改文件的时候仅对
    /src/game/server 下的文件进行操作。
    当然过程中我们可能会对/game/varibles.h进行修改,那当然没有问题。


    /src/game/server/gamemodes/ 中放了我们所有的游戏模式。
    对于每个游戏模式 XXX
    都存在两个文件
    XXX.cpp 和 XXX.h
    分别存放了对于模式XXX需要用到的事件处理的定义和声明。


    创建一个新的游戏模式类
    Teeworlds中所有的游戏模式均基于类(一个游戏模式就是一个类),通过对于
    IGameController继承然后重载部分函数来实现一个新的游戏模式。


    找到IGameController声明的位置,我们来看看有些什么东西,这些东西可以通过重载然后得到一个截然不同的游戏模式。

    首先我们新建两个文件位于gamemodes下我们就叫做XXX.cpp
    然后仿照另外的游戏模式的源代码然后写好宏定义和头文件(防止重复定义)
    然后我们开始开发游戏模式

    class CGameControllerXXX : public IGameController{
    }

    这样我们就继承了来自IGameController的属性。

    修改游戏的模式名称,修改游戏的主要内容均在这个类的构造函数中进行。
    我们重载之。
    CGameControllerXXX::CGameControllerXXX(class CGameContext *pGameServer) : IGameController(pGameServer){
         //添加新的内容
    }

    在这之中我们加入
    m_pGameType = "XXX" 这样在运行游戏服务器的时候 服务器列表中的游戏模式就会显示为XXX了。
    m_GameFlags = .... 这里填写你需要的游戏类型,通过或运算来合并需要的特性,
    举例:m_GameFlags = GAMEFLAG_TEAMS|GAMEFLAG_FLAGS;
    表示游戏中存在旗子,并且游戏是分队的。

    当然游戏此时的其他公共还使用的IGameController中没有重载的内容。


    重载一个事件(生成物品)
    假如我们需要在物品生成的时候进行操作,那么我们就要重载OnEntity
    在类中我们可以通过调用IGameController::XXX()来调用原来的定义。
    这样

    我们在新的函数中写成这样。
    bool CGameControllerICTF::OnEntity(int Index, vec2 Pos)
    {
            if(IGameController::OnEntity(Index, Pos))
                    return true;
            //在此处
    }
    那么我们就可以利用原来的代码实现了一个简单的物品生成在地图中的事件
    其他的事件下一篇帖子再说,我要睡觉啦



    点评

    之前一直翻国外网找这种教程终于在中国论坛找到了好感动QAQ  发表于 2017-8-25 20:08
    欢迎来到Teeworlds 中国社区!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-7-25 20:20
  • 签到天数: 3 天

    [LV.2]

    489

    积分

    395

    子弹

    15

    武士刀

    Lv.M 版主

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

    积分
    489

    第一届FNG团队祭祀2017存活勋章第二届DDN初级组第一届CTF夺旗对抗2017跨年勋章2017年照勋章第二届FNG团队祭祀2016一周年勋章DDN 500pts

    发表于 2017-7-25 09:13:32 | 显示全部楼层
    大佬(*/ω\*)
    "摘取鲜花撒遍全身"
    回复

    使用道具 举报

  • TA的每日心情

    2016-7-24 09:14
  • 签到天数: 3 天

    [LV.2]

    128

    积分

    120

    子弹

    6

    武士刀

    Lv.2 手枪

    Rank: 1

    积分
    128
    发表于 2017-10-3 14:59:37 | 显示全部楼层
    大……大佬……orz
    欢迎来到Teeworlds 中国社区!
    回复

    使用道具 举报

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

    本版积分规则

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