Garry’s Mod|Gmod服务器架设教程(五)工坊插件的解压与游戏模式的简单修改

上一篇讲了挂载创意工坊插件,但有时我们需要对插件做出一些修改(例如最常见的对插件进行汉化,需要一点lua基础),本期将以汉化躲猫猫这个游戏模式为例讲解如何操作。

1、下载工坊插件

本文用到的例子,经典模式躲猫猫(紫枫堂第一个gmod服务器也是从躲猫猫开始的),链接地址:
https://steamcommunity.com/sharedfiles/filedetails/?id=135509255

我们有两种方式下载插件,第一种是订阅插件,打开游戏等待下载完成后(一定要打开游戏),可以在游戏目录GarrysMod\garrysmod\addons内找到prophunt_(hidenseek)_-_original_135509255.gma这个以.gma结尾的文件。

小技巧:当我们订阅了大量插件后可以在addons这个文件件内直接搜索插件id,就是链接结尾的那串数字。

第二种是使用工坊下载站进行下载,这样你可以不打开steam和游戏,此类网站有很多,这里以
https://steamworkshopdownloader.io/ 为例,打开后将插件链接复制进去,然后点击Download下载,如图所示:

下载后我们得到了135509255_prophunt_hide_n_seek_original.zip,直接解压就可以了,使用本方法下载插件请跳过第二步。

2、解压插件

首先我们新建一个空文件夹把插件复制过来,然后找到游戏目录
GarrysMod\bin\gmad.exe这个文件,把它也复制到我们刚才新建的文件夹,和插件放到一起,最后一步,把插件拖到gmad.exe上面,这样插件就被解压出来了,如图所示:

3、游戏模式(gamemode)结构简介

我们进入到刚解压出来的文件夹\gamemodes,可以看到有两个mode,我们打开prop_hunt这个文件夹,先了解一下目录结构:

我们可以先打开最下面的配置文件看一看,先不必做修改,这里主要是模式的基础配置之类的信息,你如果想了解更多推荐阅读官方的wiki:
https://wiki.garrysmod.com/page/Gamemode_Creation

我们着重去了解gamemode目录下的脚本,gmod以lua语言作为脚本引擎,对插件修改或者开发感兴趣的同学建议去学习一下。

  • 所有的模式都是从init.lua这个脚本作为入口启动的
  • 大部分开发者会根据脚本的可执行位置给文件名前缀,例如cl_(客户端执行),sv_(服务器执行),sh_(共享,即两边都可以运行)
  • 大部分开发者还会根据功能命名完脚本,例如cl_init(客户端初始化),sh_config(全局配置),sh_player(全局玩家方法)

刚开始了解一下就可以了,我们本次的目的主要是简单的修改一些字符串,也就是汉化,文字都是展示给玩家的,所以基本都在客户端脚本中(复习一下上面学到的,cl_开头的文件),我们先打开cl_init.lua,找到function HUDPaint()这个方法,如图所示,这个方法内有双引号括起来的字符串,影响的是blindlock_time_left_msg这个变量,作为参数被传入下方的draw.DrawText方法。

draw.DrawText是在屏幕显示文字的方法,我们再读一下引号里的句子就明白了这是游戏开局的提示文字,我们把英文替换成中文,如下图所示,第二行我们做了些改变,因为要适应语义,我们需要把秒这个值放到中文语句的中间,注意看,我们使用..连接了三段字符串。 这样我们就汉化了两行文字,英文不好的玩家也能知道本局游戏快开始了。

请注意我们上文反复提到的draw.DrawText方法,是用于在屏幕上显示文字的,所以基本可以断定我们要修改的字符串是展示给玩家的,而没有改附近别的几个字符串:GetGlobalBool(“InRound”, false)、GetGlobalFloat(“RoundStartTime”, 0)、surface.SetFont(“MyFont”)、hook.Add(“HUDPaint”, “PH_HUDPaint”, HUDPaint),这些双引号里的字符串你如果改动了那么这个显示倒计时的方法就无法正确执行,甚至整个模式都会坏掉。

我们在进行汉化时要结合所在方法和语句的语义进行判断,哪些是展示在玩家屏幕上的才需要汉化,当然如果你没有编程基础可能还无法理解方法这些,那就先挑长句子汉化。

打开init.lua,自己尝试找下需要汉化的地方,保存后我们把prop_hunt文件夹放到服务器目录的gamemodes下面,修改启动脚本+gamemode prop_hunt启动服务器测试下吧!

Post a Comment

Your email is never shared. Required fields are marked *

*
*