[KF2][Mut&Gm Tutorial]Modding第二步:开始制作你的第一个简易Mutator

在这之前请确保

[KF2][Mut&Gm Tutorial]Modding第一步:设置好KF2的UnrealScript编译环境

如果你是一个电脑爱好者但是没有编程基础,请打开记事本或者npp跟着学习(下文统称初级玩家);如果你是一个编程爱好者或者Experienced Programmer(高级玩家),请按照以上文章配置好UsIDE跟着学习

注意:此教程制作出来的插件只适用于单人单机SOLO模式

涉及到服务器以及多人的插件

因为涉及到PRI和GRI等网络流对象(玩家网络复制信息 游戏网络复制信息),所有教程将不会讲解,请自行学习

在此,我将会根据一个实例来讲解Mutator的基本结构,包括:

1.类继承以及基本命名

2.工作原理

3.基本框架

4.常用函数以及用法

开始吧,我们首先从一个最基本的插件开始讲,我将这个插件命名为BBMut,效果为每隔5秒钟自动BB一句自定义的话,如图所示:

工作原理以及基本命名

UnrealScript中,所有函数都是虚函数,这意味着每个函数都能够通过重写来实现自己想要的功能,这也决定了整个US内容皆以 类(Class)来包装

在US中,类的声明如下

class ClassName extends FatherClass;

其中ClassName是你写的这个类的类名,FatherClass是这个类的父类,也就是所继承的类

继承出来的类包含了父类的所有功能,并且能够独立的在父类的基础上增加一些自定功能,这也是KF2中插件编写及运行的基本靠山

对于Mutator来说,它是一个独立的类,继承(扩展)自Object,而KF2因为有自己的独立特性,所以有一个自己的KFMutator类,继承自Mutator,专门容纳KF2中Mutator的特性及功能

我们的目的就是通过重写(新手可以理解成覆盖原先的内容)KFMutator里面的函数来实现自己的功能,但是又不能丢掉官方自己的一些东西,所以有必要引入Super这一概念

Super:可以笼统的理解为父级的意思,没有大碍

在重写非自己创建的函数的时候,如果不是全部重写,而是想在官方的基础上加一些功能或者更改部分功能(比如说更改401回血一针100,或者给401增加一个新功能),请使用Super.function(parameter)来调用父级函数!

_>STEP-ONE

我将这个插件的包名取名为ArTest(我昵称的缩写Ar+Test),也就是说以后我在教程里面制作的插件将会放到这个包里面;

我将这个插件命名为BBMut,也就是这个插件的类名

1.建立好插件的文件夹结构(详见 [KF2][Mut&Gm Tutorial]Modding第一步),如图所示(注意此时文件夹内没有BBMut.uc)

2.建立BBMut.uc:对于初级玩家,请直接右键新建文本文档,重命名为BBMut.uc;对于高级玩家,请依照下列方式在UsIDE建立uc文件并命名为BBMut.uc

3.写入基本内容:对于高级玩家,在UsIDE新建uc文件过后IDE会自动填充以下代码

class Class extends Object;

defaultproperties
{
}

如前文所说,这个插件的类名我命名为BBMut,这个插件类型是Mutator,所以请将class后面的Class替换为BBMut(uc文件同名),extends后面的Object改为KFMutator,如下

class BBMut extends KFMutator;

defaultproperties
{
}

对于初级玩家,请直接将上述代码复制粘贴进入记事本并保存

4.写入基本框架

我们想一想,如果要写一个MUT,那么首先必须要这个MUT能和其他MUT兼容,也就是说使用自己这个MUT的时候其他的MUT也能够一起运行并且不会出错,那么我们就引入一个函数如下:

function InitMutator(string Options, out string ErrorMessage)

这个函数的作用是初始化MUT并且检查MUT队列,看看是否有下一个MUT,有的话就继续初始化下一个,一直循环;

其次,我们需要设置一个计时器,以便每5秒钟调用一次BB函数来说话——那么这个计时器设置在哪儿呢?很明显,如果我们要让它精确运行的话必须设置在我们出生(或者重生)的那一刻,所以有必要引入另一个函数如下:

function ModifyPlayer(Pawn Other)

这个函数被另外一个函数RestartPlayer(...)调用,而RestartPlayer(...)会在玩家重生或者出生的时候被调用,所以我们借此间接地来设置一个计时器来实现这个功能(为什么不能直接设置?这涉及到更高深的内容,以后会讲解)

然后就是计时器函数

/**
 * Sets a timer to call the given function at a set
 * interval.  Defaults to calling the ‘Timer‘ event if
 * no function is specified.  If InRate is set to
 * 0.f it will effectively disable the previous timer.
 *
 * NOTE: Functions with parameters are not supported!
 *
 * @param InRate the amount of time to pass between firing
 * @param inbLoop whether to keep firing or only fire once
 * @param inTimerFunc the name of the function to call when the timer fires
 */
native(280) final function SetTimer(float InRate, optional bool inbLoop, optional Name inTimerFunc=‘Timer‘, optional Object inObj);

不要被这么大一堆参数困住了,其实用法很简单,第一个参数是计数时间,第二个参数是是否循环,第三个参数是想调用的函数的名称,后面参数超出本教程范围所以不用管

那么我们现在明确了,如果要每隔5秒BB一次,那么时间要设置成5s,计时器要循环,调用的函数名称就是我们的BB函数!如下:

SetTimer(5, True, "BBFunction");

然后参考上面的 工作原理以及基本命名 ,写好基本框架之后的代码如下:

class BBMut extends KFMutator;

function InitMutator(string Options, string ErrorMessage)
{
    super.InitMutator(Options, ErrorMessage);
}

function ModifyPlayer(Pawn Other)
{
    SetTimer(5, True, "BBFunction");
    super.ModifyPlayer(Other);
}

defaultproperties
{
}

5.编写BB函数

计时器写好了,那么就开始BB啦!

KF2里面BB的原理是这样的:

每个玩家进入游戏的时候,UE3会给你分配一个 棋子(Pawn),这个棋子包含了你选择的所有信息(职业、等级、武器、饰品等等等....)

然后UE3会给这个棋子分配一个 KF2玩家控制器(KFPlayerController),这个控制器包含了所有“这个棋子应该怎么反应你做出的动作”的所有信息和函数,而我们所需要的BB函数就在里面,如下

reliable client event TeamMessage( PlayerReplicationInfo PRI, coerce string S, name Type, optional float MsgLifeTime  ) : KFPlayerController

也不要因为这么一长串就头晕了,你大可只复制我下面给出的代码就行,如果你想知道原理的话我下面也会详细讲解;

写好的如下:

class BBMut extends KFMutator;

var Pawn KFP;
var KFPlayerController KFPC;

function InitMutator(string Options, string ErrorMessage)
{
    super.InitMutator(Options, ErrorMessage);
}

function ModifyPlayer(Pawn Other)
{
    KFP=Other;
    SetTimer(5, True, "BBFunction");
    super.ModifyPlayer(Other);
}

function BBFunction()
{
    KFPC=KFPlayerController(KFP.Controller);
    KFPC.TeamMessage(KFPC.PlayerReplicationInfo, "I Love FCY!", ‘TeamSay‘);
}

defaultproperties
{
}

原理:

首先我们要获取重生或者复活的这个玩家的棋子,然后获取他的KF2玩家控制器,然后利用里面的TeamMessage(团队消息)函数来BB

我们在开头声明两个变量,一个是KFP(类型Pawn),一个是KFPC(类型KFPlayerController),然后在ModifyPlayer中将传入的Other赋值给KFP,然后获取KFP中的KFPlayerController赋值给KFPC,这样就成功了

然后调用KFPlayerController中的方法TeamMessage开始BB,参数为

1.KFPRI(KF2玩家网络复制信息,高级进阶用法,涉及到网络流,所有教程不做讲解,请自行学习,在此你只需要看看就好,撰写请记住套路复制粘贴: KFPC.PlayerReplicationInfo)

2.要说的话

3.说话类型:TeamSay 团队消息(效果是 自己说出来一句话) Event(效果和CD的每波总结一样,是系统消息)

_>STEP-TWO

开始编译吧!

编译成功后, 你在

\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC\Script 中找到一个 (你自己的包名).u

比如说我这个就是ArTest.u

_>STEP-TWO

此步当然是运行试试看啦

命令行:

Open MapName?Mutator=PackageName.ClassName

对于此教程,如果你是完全按照步骤来的话命令行应该是:

Open KF-Outpost?Mutator=ArTest.BBMut (其中地图请随意)

注意:此教程制作出来的插件只适用于单人单机SOLO模式

涉及到服务器以及多人的插件

因为涉及到PRI和GRI等网络流对象(玩家网络复制信息 游戏网络复制信息),所有教程将不会讲解,请自行学习

时间: 2024-10-20 22:11:32

[KF2][Mut&Gm Tutorial]Modding第二步:开始制作你的第一个简易Mutator的相关文章

INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页

INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页 作者:xin 日期:2005-09-23 字体大小: 小 中 大   VPatch 在 INNO 中的应用. VPatch 属于专为NSIS开发的补丁插件,通过本人开发的调用插件 callvpatch.dll 进行调用.在 INNO 中得到很好的应用.(注意:你可以在 VPatch 的官方网站“http://www.tibed.net/vpatch/”得到源代码,从而编译成一个适合在 INNO 中直接利用的 DLL,这里我为了通用性

制作静态网页第一天

一.开发前的准备工作: 1.配置开发环境: sublime webstrom (vecode hbuilder atrom) 2.建立项目文件夹: index.html     default.html css文件夹:base.css  global.css images文件夹:放图片 JS文件夹:放音频或者视频 3.样式初始化:   4.分析网站结构: 布局一般是从上到下,从左到右. 在写页面的时候,一般考虑使用标准流的元素,其次才使用浮动或是定位. 二.开发过程的语法和注意事项: 1.网站快

每天学一点Docker(3)(制作你的第一个容器)

今天开始制作第一个容器,其实很简单 首先你要准备这些条件: 1.一个Ubuntu系统 2.这个系统能够联网,最起码ping www.baidu.com是可以的 这些准备条件准备好了,接下来就开始做准备工作. Docker 分为开源免费的 CE(Community Edition)版本和收费的 EE(Enterprise Edition)版本.下面我们将按照文档,通过以下步骤在 Ubuntu 16.04 上安装 Docker CE 版本. 这里下载的是CE版本. 配置Docker的apt源 打开u

怎样制作自己的第一个程序?

(纯小白教程,大神勿喷) 第一步:下载并解压vs2005 第二步:双击进入Visual Studio 2005安装包,单击进入setup文件夹,单击setup.exe进入安装界面并安装好vs2005 第三步:双击打开vs2005 第四步:打开后我们点击软件菜单栏的[文件],然后单击[新建]里面的[项目]选项打开新建项目对话框. 第五步:在新建的窗体中,在左侧工具箱[公共控件]里面找到[Button按钮]按下鼠标左键不放拖入Button按钮到窗体中然后松开鼠标. 第六步:双击button按钮,在光

狗狗历险记制作过程(第一天控制3d模型移动)

转http://blog.csdn.net/games_maker/article/details/43953879 心血来潮,准备写个小游戏来玩哈, 第一天花了大约20分钟,做了下面这个效果 访问网站可直接运行 http://www.feekood.com/?path=:/tiantian/KeyMove/MoveDog.ais 按上下左右可以控制狗狗移动(镜头跟随狗狗) 注册www.wooyoogame.com的账户,然后进http://www.wooyoogame.com/resource

学习制作iOS程序第一天:建立主目录、源代码管理、Pod安装第三方组件

前言 俗话说,看过的能记住20%,用过的能记住40%,解决过错误的能记住60%,为此加班好几天解决问题的能记住80%.利用自学的iOS知识搭建一个中介查房的软件.学以致用. 一.建立文件目录 打开XCode,新建一个“Single View Application”.保存到桌面新建的目录“randy.company.customerappios”里,本文只考虑iOS7.0及以上,以下的暂不考虑了. 二.连接到git服务器(Bitbucket) 1.进入Bitbucket后台管理,新建一个repo

Unity UGUI Canvas 使用Slider制作角色血条

最近课程实训选修Unity,讲解的是Unity官方案例--SpaceShoot,培训无聊,便想着给游戏角色制作一下血条,以此增加游戏的可玩性. Unity版本:5.4.1 案例模版:太空射击 原文作者:茄阁云云 原文连接:http://www.cnblogs.com/vmoor2016/p/6044941.html 把一个大象装进冰箱里需要三步:①把冰箱门打开:②把大象塞冰箱里:③关上冰箱门. 那么制作一个角色的血条需要几部呢?在这里也划分为三步:①制作血条:②摆放血条:③操作血条. 下面就来给

为Linux手动制作U盘启动及基本原理

制作成功后的基本最简目录文件图 一.系统的基本引导流程: 首先系统要引导isolinux.bin可执行程序,此程序是移动介质上引导用的,isolinux.bin运行成功后会加载其配置文件syslinux.cfg,该文件中定义了vmlinuz和initrd.img的调用方式.vmlinuz是vmlinux的压缩版,二者都是linux内核.isolinux.bin根据其配置方式中定义的initrd.img的参数传给vmlinuz即Linux内核并加载内核,然后Linux内核会根据获得的initrd.

关于动态库的制作介绍

今天简单的介绍下动态的制作,主要介绍windows平台下借助vs进行动态库制作和使用,以及linux下动态库的制作和使用,闲话少说下面开始吧 在windows环境下进行制作 1.首先打开vs2013,新建一个win32控制台项目 第二步,新建选择动态库(dll)选项,生成空项目 第三步:将提供的源码文件添加到项目中,其中keymng_msg.h和keymng_msg.c是最外层封装的文件,底层实现是另外两个文件,所以只需要给用户提供动态库和keymng_msg.h就可以调用. 第四步:在需要导出