代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。

原帖链接: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个噩梦燃料制造,制造时需要靠近远古祭坛