欢迎光临散文网 会员登陆 & 注册

【收获日2】如何撰写脚本型MOD (WIP)

2018-07-08 19:34 作者:TF2Video  | 我要投稿

0、前言

希望能让你对收获日2的LUA-MOD有初步认识。

由于我非专业,建议你把脑袋放空,按我的逻辑走。......................

1、脚本型MOD?

长这样子


https://github.com/segabl/pd2-third-person/blob/master/thirdperson.lua

2、如何開始

(1) 如果你属于『茶来伸手,饭来张口』,那你还是别搞吧。

(2) 大单字、基本文法要看的懂。你可以试试这个例子:

Download the Latest Release DLL, and place it in your PAYDAY 2 folder.

(3) 你需要BLT:https://superblt.znix.xyz ;(PS:现在没有理由不使用SuperBLT)

(4) 你或许也需要Beardlib:http://modwork.shop/14924

(5) Notepad++ \ Visual Studio Code 都会方便你进行撰写。

(6) 你会需要源代码参考:https://github.com/Nepgearsy/payday2-luajit

Notepad++
源代码

3、定义你的MOD

(1) 怎么被执行?是要在某个特定功能前执行吗?之后?用按键触发?

(2) 需要什么?你这MOD会动用到什么?特定功能?参数?资料表?

(3) 要修改什么?要覆盖什么?要显示什么?

4、实作101-' Hello World ' (按键触发)

按键触发就是当你按下特定按键,他就会执行特定脚本。

(1) 先创一个文件夹并给予以下档案(mod.txt、YEAH.lua)

(2) mod.txt:https://pastebin.com/raw/mUBZets8

(3) YEAH.lua:https://pastebin.com/raw/ZSJAfQPu

(4) 如果一切正确,那你应当可以完成。

创一个文件夹
mod.txt、YEAH.lua
找到按键
定义按键
使用按键

5、实作101-解释

你通过[mod.txt]定义了一个按键脚本,并且这按键执行的是[YEAH.lua],所以當你按下這按鍵時,它就跑一次[YEAH.lua]。

6、实作101-应用

假设,我今天想要在游戏内帮开启无敌模式,且一样是按键触发

managers.player:player_unit():character_damage():set_god_mode(true)

managers.player:player_unit():character_damage():set_invulnerable(true)

7、实作101-为什么你知道是这段代码?

经验和实例。经验告诉我,游戏内的「我」可以靠

managers.player:player_unit()

取得,且伤害控制相关的属于

PlayerDamage

而它的指向是靠

character_damage()

最后,开启无敌的功能有

set_god_mode ( https://git.io/JeljN )

set_invulnerable ( https://git.io/JeljA )

所以就完成这代码。

多写多尝试

8、实作102-覆盖

以[Lobby Tag]( http://modwork.shop/13400 )这MOD来举例

[mod.txt]

其中

顺着

lib/network/matchmaking/networkaccountsteam

去源代码找

长这样

那MOD做了些什么?

[LobbyTag.lua]

总之,就是修改了返回的答案

return "[" .. lobbyTag .. "] " .. Steam:username()

那我们可不可以自己乱改

当然

9、实作102-解释

今天游戏启动后,程序跑啊跑,跑到

lib/network/matchmaking/networkaccountsteam

就会因为我有[Hook]而去执行那脚本

"script_path" : "LobbyTag.lua"

而由于我是整个[覆盖]新的功能给它,所以不管原有是什么样,尔后就是长这样。

這觀念相當重要,因為還有其他的修改方式

[PreHook]、[PostHook]、[Add]...

10、[PreHook]、[PostHook]...

假想,一整个[Function]是一个大框框,而它具有的运作是放在其中的小框框,那在它的运作执行前的,[PreHook],之后,[PostHook],同时,[Add],而不管哪个都是跟这大框框[Function]有关。

常見的作法是把原來的大框框全部存起來,放回去,並按照需要做各種Hook或修改答案。

用下圖說明:

我把[skill_dodge_chance]整个存到[AABC],

所以[AABC]有[skill_dodge_chance]的功能

y = f(x) = x + 1

然后放回[skill_dodge_chance]或重新定义它

f(x) = y where y = x + 1

为什么要这么做?

[AABC]有[skill_dodge_chance]的功能

管它原来是怎么算的,最后结果加 99999 就对了
管它原来是怎么算的,算之前先运行这功能

99、总结

剩下就是编码除错、创意发想、复合混用、逻辑推展等。

【收获日2】如何撰写脚本型MOD (WIP)的评论 (共 条)

分享到微博请遵守国家法律