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

原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html



一七一.收妖镜(装备铥矿奖章对敌人按右键,将其收入镜中)

	用MT管理器打开游戏目录/assets/scripts/prefabs/nightmare_timepiece.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:

local function onequip(inst, owner) 
	owner.components.inventory:SetOverflow(inst)
	inst.components.container:Open(owner)
end
local function onunequip(inst, owner) 
	owner.components.inventory:SetOverflow(nil)
	inst.components.container:Close(owner)
end
local function itemtest(inst, item, slot)
	if item:HasTag("catched") then
	   return true
	end
	return false
end
local slotpos = {}
for y = 0, 9 do
	table.insert(slotpos, Vector3(-162, -y*75 + 170 ,0))
end
local function cancatchmonster(inst, caster, target)
	if target then
	   return target.components.locomotor and target.components.health and not target.components.health:IsDead() and not target:HasTag("smallbird") and not target:HasTag("chester")
	end
	return true
end
local function catchmonster(staff, target, pos)
	if not inst.components.container:IsFull() then
	   if target.components.stackable then target:RemoveComponent("stackable") end
	   if target.components.inventoryitem then target:RemoveComponent("inventoryitem") end
	   target:AddComponent("inventoryitem")
	   target.components.inventoryitem.nobounce = true
	   target.components.inventoryitem.canbepickedup = true
	   target.components.inventoryitem:ChangeImageName("beard_monster")
	   target.components.health.canmurder = true
	   target:AddTag("catched")
	   target.components.inventoryitem:SetOnDroppedFn(function(target)
		  target:RemoveComponent("inventoryitem")
		  target:RemoveTag("catched")
		  if target.brain then target.brain:Start() end
		  if target.sg then target.sg:Start() end
	   end )
	   target.components.inventoryitem:SetOnPutInInventoryFn(function(target)
		  if target.sg then target.sg:GoToState("idle") end
		  if target.SoundEmitter then target.SoundEmitter:KillAllSounds() end
	   end )
	   inst.components.container:GiveItem(target)
	end
end
	inst:AddComponent("spellcaster")
	inst.components.spellcaster:SetSpellFn(catchmonster)
	inst.components.spellcaster:SetSpellTestFn(cancatchmonster)
	inst.components.spellcaster.canuseontargets = true
	inst.components.spellcaster.canusefrominventory = false

	inst:AddComponent("equippable")
	inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
	inst.components.equippable:SetOnEquip( onequip )
	inst.components.equippable:SetOnUnequip( onunequip )

	inst:AddComponent("container")
	inst.components.container:SetNumSlots(#slotpos)
	inst.components.container.widgetslotpos = slotpos
	inst.components.container.widgetpos = Vector3(18,50,0)
	inst.components.container.side_widget = true
	inst.components.container.itemtestfn = itemtest
	inst.components.container.acceptsstacks = false

	即可在装备铥矿奖章时,对敌人按鼠标右键,将敌人收入镜中(画面右边的格子中,显示为烧焦的兔子),如果想杀死它,就对格子中的敌人按鼠标右键,会获得战利品;如果想释放它,就拿出敌人放在地上。“收妖镜”的格子全满后,无法再收新的敌人,可以将敌人放在物品栏或其他背包后再收妖。在存档退出前,请处置(杀掉或释放)全部收来的敌人,否则读档后,敌人将全部被放出。铥矿奖章在远古选项(画着远古祭坛)下,用2个铥矿石、2个噩梦燃料制造,制造时需要靠近远古祭坛