《欺诈之地》模组解析——无限天赋

昨天说到了要解析一下我的模组,说干就干!先从我的第一个模组——无限天赋说起!

modinit.lua

local function OnLoad()
	local self_dir = "InfinitePerk:file/"
	local LOAD_FILE_ORDER =
	{
		"codes",
	}
	for k, filepath in ipairs(LOAD_FILE_ORDER) do
		require(self_dir .. filepath)
	end
end
return {
	version = "0.1.3",
	alias = "InfinitePerk",
	OnPreLoad = OnPreLoad,
	OnLoad = OnLoad,
	OnNewGame = OnNewGame,
	OnGameStart = OnGameStart,
	title = "Infinite Perk",
	description = "Perk selecting hasn't limit any more!",
	previewImagePath = "preview.png",
}

整个modinit.lua都十分简单易懂,无视掉OnLoad()中的祖传代码,整个Onload()其实可以浓缩成一句话:

require( "InfinitePerk:file/codes" )

即”加载mod文件夹中file文件夹中的codes与codes.lua” ( require是一个相当智能的函数,省略.lua也是可以的)

modinit的返回值照猫画虎就行了,并不复杂,不讲也懂(懒

file/codes.lua

for tier, num in pairs(PERK_TIER_EQUIP_LIMITS) do
	PERK_TIER_EQUIP_LIMITS[tier] = 0
end
local num = 1
for _, graft in pairs(Content.GetAllGrafts()) do
	if graft.type == GRAFT_TYPE.PERK then
		PERK_SLOT_UNLOCK_THRESHOLDS[num] = 0
		num = num + 1
		PERK_TIER_EQUIP_LIMITS[graft.tier] = PERK_TIER_EQUIP_LIMITS[graft.tier] + 1
	end
end

看起来很轻松就能做出来,不是么?

不是

这种”看起来简单”的模组,远非不耗费时间,事实上制作此模组(以及其他所有的模组)的大量时间都会耗费在查阅代码上。


本模组所修改的几个全局变量来源于constants.lua

PERK_SLOT_UNLOCK_THRESHOLDS = {1, 4, 10}
PERK_TIER_EQUIP_LIMITS = {3, 3, 2, 2, 1}

其中PERK_SLOT_UNLOCK_THRESHOLDS用于控制总共可安装多少个天赋,PERK_TIER_EQUIP_LIMITS用于控制每级最多安装多少个天赋

首先,我们将PERK_TIER_EQUIP_LIMITS全部归零,然后将全部的移植物过一遍(是的,天赋属于移植物),没过一个便将PERK_SLOT_UNLOCK_THRESHOLDS的项数增加1并增加PERK_TIER_EQUIP_LIMITS中该级的项数


划重点:

1.constants.lua中以table形式直接赋值的全局变量可以随意更改(关于以函数方式赋值的,详见模组制作助手)

2.Content.GetAllGrafts()可以获取到所有的移植物,不仅是战斗和协商移植物,连手枪、硬币、天赋、气概、每日成就、突变器、社交恩赐与诅咒等等都是移植物

3.为了分辨这些移植物的类别,我们可以通过graft.type辨别,type如下:

GRAFT_TYPE = MakeEnum{"COMBAT", "NEGOTIATION", "MUTATOR", "SOCIAL", "COIN", "BLASTER", "STORY", "FEAT", "PERK", "METTLE_UPGRADE"}

好的,讲解完成,总体来讲这只是一个简单的微型模组,作弊性质中等(我想这也是成为整个创意工坊订阅最多的模组的最大的原因)

愿黑石的怒火在烧向你之前,先烧了你的敌人。

说点什么吧

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据