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

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



二六0.奶报箱(用苔藓种奶报箱,放入黄金,每天清晨送来报纸和5瓶牛奶,读报纸可补脑)

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

local function itemtest(inst, item, slot)
	if item.prefab == "goldnugget" or item.prefab == "goatmilk" or item.prefab == "cutlichen" then
	   return true
	end
	return false
end
local slotpos = { Vector3(0,32+4,0), Vector3(0,-(32+4),0), Vector3(0,-(64+32+8+4),0)}
local widgetbuttoninfo = {
	text = "Buy",
	position = Vector3(0, 95, 0),
	fn = function(inst)
		if inst:HasTag("milkcartons") and inst.components.container:Has("goldnugget", 1) then
		   inst.components.container:ConsumeByName("goldnugget", 1)
		   GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
		   local newspaper = SpawnPrefab("cutlichen")
		   newspaper.AnimState:SetBank("blueprint")
		   newspaper.AnimState:SetBuild("blueprint")
		   newspaper.AnimState:PlayAnimation("idle")
		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
		   newspaper:AddComponent("named")
		   newspaper.components.named:SetName("Newspaper")
		   newspaper:RemoveComponent("stackable")
		   newspaper:RemoveComponent("edible")
		   newspaper:RemoveComponent("perishable")
		   newspaper:RemoveComponent("container")
		   newspaper:RemoveComponent("deployable")
		   newspaper.components.inspectable.getstatus = function(newspaper)
			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
			   newspaper:Remove()
		   end
		   newspaper:AddTag("newspapers")
		   GetPlayer().components.inventory:GiveItem(newspaper)
		end
	end }
local function OnDeploy (inst, pt)
	local milkcarton = SpawnPrefab("cutlichen")
	milkcarton.Transform:SetPosition(pt.x, pt.y, pt.z)
	milkcarton.AnimState:SetBank("icebox")
	milkcarton.AnimState:SetBuild("ice_box")
	milkcarton.AnimState:PlayAnimation("closed")
	milkcarton.Transform:SetScale(0.6, 0.6, 0.6)
	milkcarton.AnimState:SetMultColour(0/255,185/255,255/255,1)
	milkcarton:AddComponent("named")
	milkcarton.components.named:SetName("Milk carton")
	milkcarton:RemoveComponent("stackable")
	milkcarton:RemoveComponent("inventoryitem")
	milkcarton:RemoveComponent("edible")
	milkcarton:RemoveComponent("perishable")
	milkcarton:RemoveComponent("deployable")
	milkcarton.components.container.canbeopened = true
	milkcarton:AddComponent("workable")
	milkcarton.components.workable:SetWorkAction(ACTIONS.HAMMER)
	milkcarton.components.workable:SetWorkLeft(3)
	milkcarton.components.workable:SetOnFinishCallback(function(milkcarton)
		SpawnPrefab("collapse_big").Transform:SetPosition(milkcarton.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
		milkcarton:Remove()
	end )
	milkcarton:ListenForEvent( "daytime", function()
		if milkcarton.components.container:Has("goldnugget", 5) then
		   milkcarton.components.container:ConsumeByName("goldnugget", 5)
		   for k = 1, 5 do
			   local goatmilk = SpawnPrefab("goatmilk")
			   milkcarton.components.container:GiveItem(goatmilk)
		   end
		   local newspaper = SpawnPrefab("cutlichen")
		   newspaper.AnimState:SetBank("blueprint")
		   newspaper.AnimState:SetBuild("blueprint")
		   newspaper.AnimState:PlayAnimation("idle")
		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
		   newspaper:AddComponent("named")
		   newspaper.components.named:SetName("Newspaper")
		   newspaper:RemoveComponent("stackable")
		   newspaper:RemoveComponent("edible")
		   newspaper:RemoveComponent("perishable")
		   newspaper:RemoveComponent("container")
		   newspaper:RemoveComponent("deployable")
		   newspaper.components.inspectable.getstatus = function(newspaper)
			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
			   newspaper:Remove()
		   end
		   newspaper:AddTag("newspapers")
		   milkcarton.components.container:GiveItem(newspaper)
		end
	end, GetWorld())
	milkcarton:AddTag("milkcartons")
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
	inst.components.deployable.min_spacing = 1
	inst:AddComponent("container")
	inst.components.container.widgetbuttoninfo = widgetbuttoninfo
	inst.components.container:SetNumSlots(#slotpos)
	inst.components.container.widgetslotpos = slotpos
	inst.components.container.widgetpos = Vector3(0,150,0)
	inst.components.container.side_align_tip = 160
	inst.components.container.canbeopened = false
	inst.components.container.onopenfn = function(inst) inst.AnimState:PlayAnimation("open") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
	inst.components.container.onclosefn = function(inst) inst.AnimState:PlayAnimation("close") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
	inst.components.container.itemtestfn = itemtest
	inst:AddTag("fridge")
local function onsave(inst, data)
	if inst:HasTag("milkcartons") then
		data.milkcartons = true
	end
	if inst:HasTag("newspapers") then
		data.newspapers = true
	end
end
local function onload(inst, data)
  if data and data.milkcartons then
	inst.AnimState:SetBank("icebox")
	inst.AnimState:SetBuild("ice_box")
	inst.AnimState:PlayAnimation("closed")
	inst.Transform:SetScale(0.6, 0.6, 0.6)
	inst.AnimState:SetMultColour(0/255,185/255,255/255,1)
	inst:AddComponent("named")
	inst.components.named:SetName("Milk carton")
	inst:RemoveComponent("stackable")
	inst:RemoveComponent("inventoryitem")
	inst:RemoveComponent("edible")
	inst:RemoveComponent("perishable")
	inst:RemoveComponent("deployable")
	inst.components.container.canbeopened = true
	inst:AddComponent("workable")
	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
	inst.components.workable:SetWorkLeft(3)
	inst.components.workable:SetOnFinishCallback(function(inst)
		SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
		inst:Remove()
	end )
	inst:ListenForEvent( "daytime", function()
		if inst.components.container:Has("goldnugget", 5) then
		   inst.components.container:ConsumeByName("goldnugget", 5)
		   for k = 1, 5 do
			   local goatmilk = SpawnPrefab("goatmilk")
			   inst.components.container:GiveItem(goatmilk)
		   end
		   local newspaper = SpawnPrefab("cutlichen")
		   newspaper.AnimState:SetBank("blueprint")
		   newspaper.AnimState:SetBuild("blueprint")
		   newspaper.AnimState:PlayAnimation("idle")
		   newspaper.components.inventoryitem:ChangeImageName("blueprint")
		   newspaper.Transform:SetScale(1.2, 1.2, 1.2)
		   newspaper:AddComponent("named")
		   newspaper.components.named:SetName("Newspaper")
		   newspaper:RemoveComponent("stackable")
		   newspaper:RemoveComponent("edible")
		   newspaper:RemoveComponent("perishable")
		   newspaper:RemoveComponent("container")
		   newspaper:RemoveComponent("deployable")
		   newspaper.components.inspectable.getstatus = function(newspaper)
			   GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
			   GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
			   newspaper:Remove()
		   end
		   newspaper:AddTag("newspapers")
		   inst.components.container:GiveItem(newspaper)
		end
	end, GetWorld())
	inst:AddTag("milkcartons")
  end
  if data and data.newspapers then
	inst.AnimState:SetBank("blueprint")
	inst.AnimState:SetBuild("blueprint")
	inst.AnimState:PlayAnimation("idle")
	inst.components.inventoryitem:ChangeImageName("blueprint")
	inst.Transform:SetScale(1.2, 1.2, 1.2)
	inst:AddComponent("named")
	inst.components.named:SetName("Newspaper")
	inst:RemoveComponent("stackable")
	inst:RemoveComponent("edible")
	inst:RemoveComponent("perishable")
	inst:RemoveComponent("container")
	inst:RemoveComponent("deployable")
	inst.components.inspectable.getstatus = function(inst)
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_clothing")
		GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
		inst:Remove()
	end
	inst:AddTag("newspapers")
  end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可用苔藓种奶报箱,鼠标左键点奶报箱可打开格子,在格子中放入黄金(订奶预付款,最少5个黄金),第二天清晨将送来5瓶牛奶,并免费赠送一份报纸,同时扣除5个黄金。将报纸放入物品栏,对其点鼠标右键可读报,将补满脑值。如果格子中有黄金,点格子上方的“Buy”按钮,可以额外购买报纸,每份1个黄金。如果每天想多订牛奶和报纸,就多种几个奶报箱吧。不想要奶报箱了,用锤子砸毁即可。苔藓可在洞穴中采到。不要与“用苔藓种苔藓(苔藓可移植)”一同修改