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

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



六.生鲜售卖机(用木板种生鲜售卖机,放入生鲜产品,每天清晨自动卖出换黄金)

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

local function OnDeploy (inst, pt)
	local vending = SpawnPrefab("boards")
	vending.Transform:SetPosition(pt.x, pt.y, pt.z)
	vending.AnimState:SetBank("icebox")
	vending.AnimState:SetBuild("ice_box")
	vending.AnimState:PlayAnimation("closed")
	vending.Transform:SetScale(1.3, 1.3, 1.3)
	vending.AnimState:SetMultColour(255/255,255/255,0/255,1)
	vending:RemoveComponent("stackable")
	vending:RemoveComponent("tradable")
	vending:RemoveComponent("edible")
	vending:RemoveComponent("inventoryitem")
	vending:RemoveComponent("repairer")
	vending:RemoveComponent("fuel")
	vending:RemoveComponent("burnable")
	vending:RemoveComponent("propagator")
	vending:RemoveComponent("deployable")
	vending.components.container.canbeopened = true
	vending:DoPeriodicTask(2, function(vending)
		vending.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
		vending:DoTaskInTime(1, function() vending.AnimState:SetBloomEffectHandle("") end )
	end )
	vending:AddComponent("workable")
	vending.components.workable:SetWorkAction(ACTIONS.HAMMER)
	vending.components.workable:SetWorkLeft(3)
	vending.components.workable:SetOnFinishCallback(function(vending)
		SpawnPrefab("collapse_big").Transform:SetPosition(vending.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
		vending:Remove()
	end )
	vending:ListenForEvent( "daytime", function()
		local num_found = 0
		for k,v in pairs(vending.components.container.slots) do
			if v and v.prefab ~= "goldnugget" and v.prefab ~= "spoiled_food" then
			   num_found = num_found + v.components.stackable:StackSize()
			   v:Remove()
			end
		end
		for k = 1, num_found do
			local goldnugget = SpawnPrefab("goldnugget")
			vending.components.container:GiveItem(goldnugget)
		end
	end, GetWorld())
	vending:AddTag("vendings")
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("vendings") then
		data.vendings = true
	end
end
local function onload(inst, data)
  if data and data.vendings then
	inst.AnimState:SetBank("icebox")
	inst.AnimState:SetBuild("ice_box")
	inst.AnimState:PlayAnimation("closed")
	inst.Transform:SetScale(1.3, 1.3, 1.3)
	inst.AnimState:SetMultColour(255/255,255/255,0/255,1)
	inst:RemoveComponent("stackable")
	inst:RemoveComponent("tradable")
	inst:RemoveComponent("edible")
	inst:RemoveComponent("inventoryitem")
	inst:RemoveComponent("repairer")
	inst:RemoveComponent("fuel")
	inst:RemoveComponent("burnable")
	inst:RemoveComponent("propagator")
	inst:RemoveComponent("deployable")
	inst.components.container.canbeopened = true
	inst:DoPeriodicTask(2, function(inst)
		inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
		inst:DoTaskInTime(1, function() inst.AnimState:SetBloomEffectHandle("") end )
	end )
	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()
		local num_found = 0
		for k,v in pairs(inst.components.container.slots) do
			if v and v.prefab ~= "goldnugget" and v.prefab ~= "spoiled_food" then
			   num_found = num_found + v.components.stackable:StackSize()
			   v:Remove()
			end
		end
		for k = 1, num_found do
			local goldnugget = SpawnPrefab("goldnugget")
			inst.components.container:GiveItem(goldnugget)
		end
	end, GetWorld())
	inst:AddTag("vendings")
  end
end
	inst.OnSave = onsave
	inst.OnLoad = onload
local slotpos = {}
for y = 3, 0, -1 do
	for x = 0, 2 do
		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2+75,0))
	end
end
	inst:AddComponent("container")
	inst.components.container:SetNumSlots(#slotpos)
	inst.components.container.widgetslotpos = slotpos
	inst.components.container.widgetpos = Vector3(0,100,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 = function(inst, item, slot)
		if item.prefab == "cave_banana" or item.prefab == "carrot" or item.prefab == "corn" or item.prefab == "pumpkin" or item.prefab == "eggplant" or item.prefab == "durian" or item.prefab == "pomegranate" or item.prefab == "dragonfruit" or item.prefab == "berries" or item.prefab == "cactus_meat" or item.prefab == "watermelon" or item.prefab == "acorn" or item.prefab == "meat" or item.prefab == "smallmeat" or item.prefab == "fish" or item.prefab == "eel" or item.prefab == "drumstick" or item.prefab == "bird_egg" or item.prefab == "froglegs" or item.prefab == "monstermeat" or item.prefab == "spoiled_food" or item.prefab == "butter" or item.prefab == "butterflywings" or item.prefab == "cutlichen" or item.prefab == "foliage" or item.prefab == "honey" or item.prefab == "lightbulb" or item.prefab == "red_cap" or item.prefab == "green_cap" or item.prefab == "blue_cap" or item.prefab == "petals" or item.prefab == "petals_evil" or item.prefab == "goatmilk" or item.prefab == "goldnugget" then
		   return true
		end
		return false
	end
	inst:AddTag("fridge")

	即可用木板种生鲜售卖机,鼠标左键点售卖机,可打开格子,将蔬菜和肉类等生鲜产品放入格子中,每天清晨将全部卖出,每个售价1个黄金,结算的黄金在售卖机中领取。有了生鲜售卖机,不用发愁过剩的产品不好销售了。可以出售的生鲜产品包括香蕉、胡萝卜、玉米、南瓜、茄子、榴莲、石榴、火龙果、浆果、仙人掌肉、西瓜、橡果、大肉、小肉、鱼、鳗鱼、鸡腿、鸟蛋、蛙腿、疯肉、黄油、蝴蝶翅膀、苔藓、叶子、蜂蜜、荧光果、红蘑菇、绿蘑菇、蓝蘑菇、花瓣、噩梦花瓣。不想要生鲜售卖机了,用锤子砸掉即可。不要与“用木板种鱼人房”一同修改