游戏截图
游戏内,新增一列按钮模拟“按键操作”,支持组合按键。

文件目录
配置文件
1
2-- BM000/scripts/keybutton.lua
3
4-- 示例 (其他模组中的按键功能)
5local fn_key_a_up = function()
6 local doer=GetPlayer()
7 doer.components.talker:Say("按键 A")
8 print("按键 A")
9end
10local fn_key_b_up = function()
11 local doer=GetPlayer()
12 doer.components.talker:Say("按键 B")
13 print("按键 B")
14end
15local fn_key_c_up = function()
16 local doer=GetPlayer()
17 doer.components.talker:Say("按键 C")
18 print("按键 C")
19end
20local fn_key_d_up = function()
21 local doer=GetPlayer()
22 if TheInput:IsKeyDown(KEY_CTRL) and (not TheInput:IsKeyDown(KEY_SHIFT)) then
23 doer.components.talker:Say("按键 Ctrl+D")
24 print("按键 Ctrl+D")
25 end
26end
27local fn_key_e_up = function()
28 local doer=GetPlayer()
29 if TheInput:IsKeyDown(KEY_CTRL) and TheInput:IsKeyDown(KEY_SHIFT) then
30 doer.components.talker:Say("按键 Ctrl+Shift+E")
31 print("按键 Ctrl+Shift+E")
32 end
33end
34TheInput:AddKeyUpHandler(KEY_A, fn_key_a_up)
35TheInput:AddKeyUpHandler(KEY_B, fn_key_b_up)
36TheInput:AddKeyUpHandler(KEY_C, fn_key_c_up)
37TheInput:AddKeyUpHandler(KEY_D, fn_key_d_up)
38TheInput:AddKeyUpHandler(KEY_E, fn_key_e_up)
39
40local keybutton = {
41
42 -- 模拟键盘:key1(按下),key2(按下),key(按下),key(抬起),key2(抬起),key1(抬起)
43 -- key: 必须,字符/键值,参考 scripts/constants.lua 文件。
44 -- str: 可选,设置按钮上显示的“字符串”。
45 -- key1: 可选,字符/键值,用于组合按键。
46 -- key2: 可选,字符/键值,用于组合按键。
47
48 {key="A"},
49 {key="B"},
50 {key="C"},
51 {key="D", str="D", key1="CTRL"},
52 {key=KEY_E, str="E", key1=KEY_CTRL, key2=KEY_SHIFT},
53
54 {key=KEY_T, str="T"},
55 {key=KEY_L, str="变身"},
56 {key=KEY_R, str="跳跃"},
57 {key=KEY_F11, str="查看"},
58}
59
60return keybutton
配置文件 - 进阶版
下面是我自用的配置文件,大佬可以自行更改。小白可以喂给 AI,然后提出修改要求。
1
2--------------------------------------------------
3-- 按键功能:代码建议放到模组的 modmain.lua 文件(否则,代码出错,可能导致按键配置失效)
4
5-- 使用物品
6local function useItem(doer, slot)
7 local item = nil
8 local target = nil
9 local pt = doer:GetPosition()
10 -- 物品栏 slot 为数字
11 -- 装备栏 slot 为字符串
12 local is_item_slot = type(0)==type(slot)
13 local is_equip_slot = table.contains(EQUIPSLOTS, slot)
14 if is_equip_slot then
15 item = doer.components.inventory:GetEquippedItem(slot)
16 else
17 item = doer.components.inventory:GetItemInSlot(slot)
18 end
19 -- 没有物品,无法“使用”
20 if not item then return end
21 if is_item_slot and item.components.edible then
22 if true then
23 local buff = BufferedAction(doer, target, ACTIONS.EAT, item, pt)
24 doer.components.locomotor:PushAction(buff, true)
25 end
26 elseif is_item_slot and item.components.healer then
27 if true then
28 local buff = BufferedAction(doer, target, ACTIONS.HEAL, item, pt)
29 doer.components.locomotor:PushAction(buff, true)
30 end
31 elseif is_item_slot and item.components.instrument then
32 if true then
33 local buff = BufferedAction(doer, target, ACTIONS.PLAY, item, pt)
34 doer.components.locomotor:PushAction(buff, true)
35 end
36 elseif is_item_slot and item.components.equippable then
37 if true then
38 local buff = BufferedAction(doer, target, ACTIONS.EQUIP, item, pt)
39 doer.components.locomotor:PushAction(buff, true)
40 end
41 elseif is_item_slot and item.components.deployable then
42 if item.components.deployable:CanDeploy(pt) then
43 local buff = BufferedAction(doer, target, ACTIONS.DEPLOY, item, pt)
44 doer.components.locomotor:PushAction(buff, true)
45 end
46 elseif is_equip_slot and item.components.useableitem then
47 if item.components.useableitem:CanInteract() then
48 item.components.useableitem:StartUsingItem()
49 end
50 elseif is_equip_slot and item.components.terraformer then
51 if item.components.terraformer:CanTerraformPoint(pt) then
52 local buff = BufferedAction(doer, target, ACTIONS.TERRAFORM, item, pt)
53 doer.components.locomotor:PushAction(buff, true)
54 end
55 elseif is_equip_slot and item.components.blinkstaff then
56 pt = item.components.blinkstaff:GetBlinkPoint()
57 item.components.blinkstaff:Blink(pt, doer)
58 elseif is_equip_slot and item.components.throwable then
59 pt = item.components.throwable:GetThrowPoint()
60 item.components.throwable:Throw(pt, doer)
61 else
62 -- 其他
63 local targ = item
64 if targ and targ.components.inspectable then
65 local desc = targ.components.inspectable:GetDescription(doer)
66 if desc then
67 doer.components.locomotor:Stop()
68 doer.components.talker:Say(desc, 2.5, targ.components.inspectable.noanim)
69 end
70 end
71 end
72end
73
74local fn_key_1_up = function()
75 local doer=GetPlayer()
76 local slot = 1 -- 物品栏 1
77 useItem(doer, slot)
78end
79local fn_key_2_up = function()
80 local doer=GetPlayer()
81 local slot = 2 -- 物品栏 2
82 useItem(doer, slot)
83end
84local fn_key_3_up = function()
85 local doer=GetPlayer()
86 local slot = EQUIPSLOTS.HANDS -- 装备栏 手
87 useItem(doer, slot)
88end
89local fn_key_4_up = function()
90 local doer=GetPlayer()
91 local slot = EQUIPSLOTS.BODY -- 装备栏 身
92 useItem(doer, slot)
93end
94local fn_key_5_up = function()
95 local doer=GetPlayer()
96 local slot = EQUIPSLOTS.HEAD -- 装备栏 头
97 useItem(doer, slot)
98end
99TheInput:AddKeyUpHandler(KEY_1, fn_key_1_up)
100TheInput:AddKeyUpHandler(KEY_2, fn_key_2_up)
101TheInput:AddKeyUpHandler(KEY_3, fn_key_3_up)
102TheInput:AddKeyUpHandler(KEY_4, fn_key_4_up)
103TheInput:AddKeyUpHandler(KEY_5, fn_key_5_up)
104
105--------------------------------------------------
106
107
108
109
110
111--------------------------------------------------
112-- 按键配置:用于设置“按键”的映射关系,修改按钮显示的文字。
113
114-- 此文件会在进入游戏后加载,可使用 GetPlayer 等函数。
115local player = GetPlayer()
116
117local data_keybutton = {
118
119 -- 模拟键盘:key1(按下),key2(按下),key(按下),key(抬起),key2(抬起),key1(抬起)
120 -- key: 必须,字符/键值,参考 scripts/constants.lua 文件。
121 -- str: 可选,设置按钮上显示的“字符串”。
122 -- key1: 可选,字符/键值,用于组合按键。
123 -- key2: 可选,字符/键值,用于组合按键。
124
125 {key=KEY_5, str="[ 5 ]", },
126 {key=KEY_4, str="[ 4 ]", },
127 {key=KEY_3, str="[ 3 ]", },
128 {key=KEY_2, str="[ 2 ]", },
129 {key=KEY_1, str="[ 1 ]", },
130
131 {key=KEY_T, str="T"},
132 player.prefab=="wharang" and {key=KEY_L, str="变身"} or nil,
133 player.prefab=="wharang" and {key=KEY_R, str="跳跃"} or nil,
134 player.prefab=="wharang" and {key=KEY_F11, str="查看"} or nil,
135}
136
137return data_keybutton
138
139--------------------------------------------------