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

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


  1
  2.生鲜售卖机(用木板种生鲜售卖机,放入生鲜产品,每天清晨自动卖出换黄金)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/boards.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function OnDeploy (inst, pt)
  7	local vending = SpawnPrefab("boards")
  8	vending.Transform:SetPosition(pt.x, pt.y, pt.z)
  9	vending.AnimState:SetBank("icebox")
 10	vending.AnimState:SetBuild("ice_box")
 11	vending.AnimState:PlayAnimation("closed")
 12	vending.Transform:SetScale(1.3, 1.3, 1.3)
 13	vending.AnimState:SetMultColour(255/255,255/255,0/255,1)
 14	vending:RemoveComponent("stackable")
 15	vending:RemoveComponent("tradable")
 16	vending:RemoveComponent("edible")
 17	vending:RemoveComponent("inventoryitem")
 18	vending:RemoveComponent("repairer")
 19	vending:RemoveComponent("fuel")
 20	vending:RemoveComponent("burnable")
 21	vending:RemoveComponent("propagator")
 22	vending:RemoveComponent("deployable")
 23	vending.components.container.canbeopened = true
 24	vending:DoPeriodicTask(2, function(vending)
 25		vending.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 26		vending:DoTaskInTime(1, function() vending.AnimState:SetBloomEffectHandle("") end )
 27	end )
 28	vending:AddComponent("workable")
 29	vending.components.workable:SetWorkAction(ACTIONS.HAMMER)
 30	vending.components.workable:SetWorkLeft(3)
 31	vending.components.workable:SetOnFinishCallback(function(vending)
 32		SpawnPrefab("collapse_big").Transform:SetPosition(vending.Transform:GetWorldPosition())
 33		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 34		vending:Remove()
 35	end )
 36	vending:ListenForEvent( "daytime", function()
 37		local num_found = 0
 38		for k,v in pairs(vending.components.container.slots) do
 39			if v and v.prefab ~= "goldnugget" and v.prefab ~= "spoiled_food" then
 40			   num_found = num_found + v.components.stackable:StackSize()
 41			   v:Remove()
 42			end
 43		end
 44		for k = 1, num_found do
 45			local goldnugget = SpawnPrefab("goldnugget")
 46			vending.components.container:GiveItem(goldnugget)
 47		end
 48	end, GetWorld())
 49	vending:AddTag("vendings")
 50	inst.components.stackable:Get():Remove()
 51end
 52	inst:AddComponent("deployable")
 53	inst.components.deployable.ondeploy = OnDeploy
 54local function onsave(inst, data)
 55	if inst:HasTag("vendings") then
 56		data.vendings = true
 57	end
 58end
 59local function onload(inst, data)
 60  if data and data.vendings then
 61	inst.AnimState:SetBank("icebox")
 62	inst.AnimState:SetBuild("ice_box")
 63	inst.AnimState:PlayAnimation("closed")
 64	inst.Transform:SetScale(1.3, 1.3, 1.3)
 65	inst.AnimState:SetMultColour(255/255,255/255,0/255,1)
 66	inst:RemoveComponent("stackable")
 67	inst:RemoveComponent("tradable")
 68	inst:RemoveComponent("edible")
 69	inst:RemoveComponent("inventoryitem")
 70	inst:RemoveComponent("repairer")
 71	inst:RemoveComponent("fuel")
 72	inst:RemoveComponent("burnable")
 73	inst:RemoveComponent("propagator")
 74	inst:RemoveComponent("deployable")
 75	inst.components.container.canbeopened = true
 76	inst:DoPeriodicTask(2, function(inst)
 77		inst.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 78		inst:DoTaskInTime(1, function() inst.AnimState:SetBloomEffectHandle("") end )
 79	end )
 80	inst:AddComponent("workable")
 81	inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
 82	inst.components.workable:SetWorkLeft(3)
 83	inst.components.workable:SetOnFinishCallback(function(inst)
 84		SpawnPrefab("collapse_big").Transform:SetPosition(inst.Transform:GetWorldPosition())
 85		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 86		inst:Remove()
 87	end )
 88	inst:ListenForEvent( "daytime", function()
 89		local num_found = 0
 90		for k,v in pairs(inst.components.container.slots) do
 91			if v and v.prefab ~= "goldnugget" and v.prefab ~= "spoiled_food" then
 92			   num_found = num_found + v.components.stackable:StackSize()
 93			   v:Remove()
 94			end
 95		end
 96		for k = 1, num_found do
 97			local goldnugget = SpawnPrefab("goldnugget")
 98			inst.components.container:GiveItem(goldnugget)
 99		end
100	end, GetWorld())
101	inst:AddTag("vendings")
102  end
103end
104	inst.OnSave = onsave
105	inst.OnLoad = onload
106local slotpos = {}
107for y = 3, 0, -1 do
108	for x = 0, 2 do
109		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2+75,0))
110	end
111end
112	inst:AddComponent("container")
113	inst.components.container:SetNumSlots(#slotpos)
114	inst.components.container.widgetslotpos = slotpos
115	inst.components.container.widgetpos = Vector3(0,100,0)
116	inst.components.container.side_align_tip = 160
117	inst.components.container.canbeopened = false
118	inst.components.container.onopenfn = function(inst) inst.AnimState:PlayAnimation("open") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
119	inst.components.container.onclosefn = function(inst) inst.AnimState:PlayAnimation("close") GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold") end
120	inst.components.container.itemtestfn = function(inst, item, slot)
121		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
122		   return true
123		end
124		return false
125	end
126	inst:AddTag("fridge")
127
128	即可用木板种生鲜售卖机,鼠标左键点售卖机,可打开格子,将蔬菜和肉类等生鲜产品放入格子中,每天清晨将全部卖出,每个售价1个黄金,结算的黄金在售卖机中领取。有了生鲜售卖机,不用发愁过剩的产品不好销售了。可以出售的生鲜产品包括香蕉、胡萝卜、玉米、南瓜、茄子、榴莲、石榴、火龙果、浆果、仙人掌肉、西瓜、橡果、大肉、小肉、鱼、鳗鱼、鸡腿、鸟蛋、蛙腿、疯肉、黄油、蝴蝶翅膀、苔藓、叶子、蜂蜜、荧光果、红蘑菇、绿蘑菇、蓝蘑菇、花瓣、噩梦花瓣。不想要生鲜售卖机了,用锤子砸掉即可。不要与“用木板种鱼人房”一同修改