《欺诈之地》模组解析——无限天赋
昨天说到了要解析一下我的模组,说干就干!先从我的第一个模组——无限天赋说起!
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"}
好的,讲解完成,总体来讲这只是一个简单的微型模组,作弊性质中等(我想这也是成为整个创意工坊订阅最多的模组的最大的原因)
愿黑石的怒火在烧向你之前,先烧了你的敌人。