代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2一七一.收妖镜(装备铥矿奖章对敌人按右键,将其收入镜中)
3
4 用MT管理器打开游戏目录/assets/scripts/prefabs/nightmare_timepiece.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function onequip(inst, owner)
7 owner.components.inventory:SetOverflow(inst)
8 inst.components.container:Open(owner)
9end
10local function onunequip(inst, owner)
11 owner.components.inventory:SetOverflow(nil)
12 inst.components.container:Close(owner)
13end
14local function itemtest(inst, item, slot)
15 if item:HasTag("catched") then
16 return true
17 end
18 return false
19end
20local slotpos = {}
21for y = 0, 9 do
22 table.insert(slotpos, Vector3(-162, -y*75 + 170 ,0))
23end
24local function cancatchmonster(inst, caster, target)
25 if target then
26 return target.components.locomotor and target.components.health and not target.components.health:IsDead() and not target:HasTag("smallbird") and not target:HasTag("chester")
27 end
28 return true
29end
30local function catchmonster(staff, target, pos)
31 if not inst.components.container:IsFull() then
32 if target.components.stackable then target:RemoveComponent("stackable") end
33 if target.components.inventoryitem then target:RemoveComponent("inventoryitem") end
34 target:AddComponent("inventoryitem")
35 target.components.inventoryitem.nobounce = true
36 target.components.inventoryitem.canbepickedup = true
37 target.components.inventoryitem:ChangeImageName("beard_monster")
38 target.components.health.canmurder = true
39 target:AddTag("catched")
40 target.components.inventoryitem:SetOnDroppedFn(function(target)
41 target:RemoveComponent("inventoryitem")
42 target:RemoveTag("catched")
43 if target.brain then target.brain:Start() end
44 if target.sg then target.sg:Start() end
45 end )
46 target.components.inventoryitem:SetOnPutInInventoryFn(function(target)
47 if target.sg then target.sg:GoToState("idle") end
48 if target.SoundEmitter then target.SoundEmitter:KillAllSounds() end
49 end )
50 inst.components.container:GiveItem(target)
51 end
52end
53 inst:AddComponent("spellcaster")
54 inst.components.spellcaster:SetSpellFn(catchmonster)
55 inst.components.spellcaster:SetSpellTestFn(cancatchmonster)
56 inst.components.spellcaster.canuseontargets = true
57 inst.components.spellcaster.canusefrominventory = false
58
59 inst:AddComponent("equippable")
60 inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
61 inst.components.equippable:SetOnEquip( onequip )
62 inst.components.equippable:SetOnUnequip( onunequip )
63
64 inst:AddComponent("container")
65 inst.components.container:SetNumSlots(#slotpos)
66 inst.components.container.widgetslotpos = slotpos
67 inst.components.container.widgetpos = Vector3(18,50,0)
68 inst.components.container.side_widget = true
69 inst.components.container.itemtestfn = itemtest
70 inst.components.container.acceptsstacks = false
71
72 即可在装备铥矿奖章时,对敌人按鼠标右键,将敌人收入镜中(画面右边的格子中,显示为烧焦的兔子),如果想杀死它,就对格子中的敌人按鼠标右键,会获得战利品;如果想释放它,就拿出敌人放在地上。“收妖镜”的格子全满后,无法再收新的敌人,可以将敌人放在物品栏或其他背包后再收妖。在存档退出前,请处置(杀掉或释放)全部收来的敌人,否则读档后,敌人将全部被放出。铥矿奖章在远古选项(画着远古祭坛)下,用2个铥矿石、2个噩梦燃料制造,制造时需要靠近远古祭坛