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

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



五.环保公司(用草种环保公司,将接收的垃圾搬到粉碎区,点铃粉碎后得黄金)

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

local function makegrinder(inst)
	local pt = inst:GetPosition()
	local redmark = SpawnPrefab("cutgrass")
	redmark.Transform:SetPosition(pt.x, pt.y, pt.z)
	redmark.AnimState:SetBank("gridplacer")
	redmark.AnimState:SetBuild("gridplacer")
	redmark.AnimState:PlayAnimation("anim", true)
	redmark.Transform:SetScale(1.5, 1.5, 1.5)
	redmark.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
	redmark.AnimState:SetLayer( LAYER_BACKGROUND )
	redmark.AnimState:SetSortOrder( 3 )
	redmark.Transform:SetRotation( 45 )
	redmark.AnimState:SetMultColour(255/255,0/255,0/255,1)
	redmark.AnimState:SetLightOverride(1)
	redmark:AddTag("NOCLICK")
	redmark:RemoveComponent("stackable")
	redmark:RemoveComponent("edible")
	redmark:RemoveComponent("tradable")
	redmark:RemoveComponent("fuel")
	redmark:RemoveComponent("burnable")
	redmark:RemoveComponent("propagator")
	redmark:RemoveComponent("repairer")
	redmark:RemoveComponent("inventoryitem")
	redmark:RemoveComponent("deployable")
	redmark:RemoveTag("cattoy")
	redmark:AddTag("redmark")
	local yellowmark = SpawnPrefab("cutgrass")
	yellowmark.Transform:SetPosition(pt.x-12.5, 0, pt.z+12.5)
	yellowmark.AnimState:SetBank("gridplacer")
	yellowmark.AnimState:SetBuild("gridplacer")
	yellowmark.AnimState:PlayAnimation("anim", true)
	yellowmark.Transform:SetScale(2, 2, 2)
	yellowmark.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
	yellowmark.AnimState:SetLayer( LAYER_BACKGROUND )
	yellowmark.AnimState:SetSortOrder( 3 )
	yellowmark.Transform:SetRotation( 45 )
	yellowmark.AnimState:SetMultColour(255/255,255/255,0/255,1)
	yellowmark.AnimState:SetLightOverride(1)
	yellowmark:AddTag("NOCLICK")
	yellowmark:RemoveComponent("stackable")
	yellowmark:RemoveComponent("edible")
	yellowmark:RemoveComponent("tradable")
	yellowmark:RemoveComponent("fuel")
	yellowmark:RemoveComponent("burnable")
	yellowmark:RemoveComponent("propagator")
	yellowmark:RemoveComponent("repairer")
	yellowmark:RemoveComponent("inventoryitem")
	yellowmark:RemoveComponent("deployable")
	yellowmark:RemoveTag("cattoy")
	yellowmark:ListenForEvent( "daytime", function()
		for k = 1,math.random(6,12) do
			local pt1 = yellowmark:GetPosition()
			local trash = SpawnPrefab("cutgrass")
			trash.Transform:SetPosition(pt1.x+(math.random(6)-math.random(6)), 0, pt1.z+(math.random(6)-math.random(6)))
			trash.AnimState:SetBank("fertilizer")
			trash.AnimState:SetBuild("fertilizer")
			trash.AnimState:PlayAnimation("idle")
			trash.Transform:SetScale(1.5, 1.5, 1.5)
			trash.AnimState:SetMultColour(0/255,255/255,0/255,1)
			trash.components.inventoryitem:ChangeImageName("fertilizer")
			trash:RemoveComponent("stackable")
			trash:RemoveComponent("edible")
			trash:RemoveComponent("tradable")
			trash:RemoveComponent("fuel")
			trash:RemoveComponent("burnable")
			trash:RemoveComponent("propagator")
			trash:RemoveComponent("repairer")
			trash:RemoveComponent("deployable")
			trash:RemoveTag("cattoy")
			trash:AddComponent("named")
			trash.components.named:SetName("Refuse")
			trash.flies = trash:SpawnChild("flies")
			trash.components.inventoryitem:SetOnDroppedFn(function() trash.flies = trash:SpawnChild("flies") end )
			trash.components.inventoryitem:SetOnPickupFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			trash.components.inventoryitem:SetOnPutInInventoryFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			MakeSmallBurnable(trash)
			MakeSmallPropagator(trash)
			trash:AddTag("trash")
		end
	end , GetWorld() )
	yellowmark:ListenForEvent( "nighttime", function()
		for k = 1,math.random(3,5) do
			local pt1 = yellowmark:GetPosition()
			local trash = SpawnPrefab("cutgrass")
			trash.Transform:SetPosition(pt1.x+(math.random(6)-math.random(6)), 0, pt1.z+(math.random(6)-math.random(6)))
			trash.AnimState:SetBank("fertilizer")
			trash.AnimState:SetBuild("fertilizer")
			trash.AnimState:PlayAnimation("idle")
			trash.Transform:SetScale(1.5, 1.5, 1.5)
			trash.AnimState:SetMultColour(0/255,255/255,0/255,1)
			trash.components.inventoryitem:ChangeImageName("fertilizer")
			trash:RemoveComponent("stackable")
			trash:RemoveComponent("edible")
			trash:RemoveComponent("tradable")
			trash:RemoveComponent("fuel")
			trash:RemoveComponent("burnable")
			trash:RemoveComponent("propagator")
			trash:RemoveComponent("repairer")
			trash:RemoveComponent("deployable")
			trash:RemoveTag("cattoy")
			trash:AddComponent("named")
			trash.components.named:SetName("Refuse")
			trash.flies = trash:SpawnChild("flies")
			trash.components.inventoryitem:SetOnDroppedFn(function() trash.flies = trash:SpawnChild("flies") end )
			trash.components.inventoryitem:SetOnPickupFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			trash.components.inventoryitem:SetOnPutInInventoryFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			MakeSmallBurnable(trash)
			MakeSmallPropagator(trash)
			trash:AddTag("trash")
		end
	end , GetWorld() )
	yellowmark:ListenForEvent( "dusktime", function()
		for k = 1,math.random(5,7) do
			local pt1 = yellowmark:GetPosition()
			local trash = SpawnPrefab("cutgrass")
			trash.Transform:SetPosition(pt1.x+(math.random(6)-math.random(6)), 0, pt1.z+(math.random(6)-math.random(6)))
			trash.AnimState:SetBank("fertilizer")
			trash.AnimState:SetBuild("fertilizer")
			trash.AnimState:PlayAnimation("idle")
			trash.Transform:SetScale(1.5, 1.5, 1.5)
			trash.AnimState:SetMultColour(0/255,255/255,0/255,1)
			trash.components.inventoryitem:ChangeImageName("fertilizer")
			trash:RemoveComponent("stackable")
			trash:RemoveComponent("edible")
			trash:RemoveComponent("tradable")
			trash:RemoveComponent("fuel")
			trash:RemoveComponent("burnable")
			trash:RemoveComponent("propagator")
			trash:RemoveComponent("repairer")
			trash:RemoveComponent("deployable")
			trash:RemoveTag("cattoy")
			trash:AddComponent("named")
			trash.components.named:SetName("Refuse")
			trash.flies = trash:SpawnChild("flies")
			trash.components.inventoryitem:SetOnDroppedFn(function() trash.flies = trash:SpawnChild("flies") end )
			trash.components.inventoryitem:SetOnPickupFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			trash.components.inventoryitem:SetOnPutInInventoryFn(function() if trash.flies then trash.flies:Remove() trash.flies = nil end end )
			MakeSmallBurnable(trash)
			MakeSmallPropagator(trash)
			trash:AddTag("trash")
		end
	end , GetWorld() )
	yellowmark:AddTag("yellowmark")
	local footbell = SpawnPrefab("cutgrass")
	footbell.Transform:SetPosition(pt.x-5, 0, pt.z+5)
	footbell.AnimState:SetBank("bell")
	footbell.AnimState:SetBuild("bell")
	footbell.AnimState:PlayAnimation("idle")
	footbell.AnimState:SetMultColour(255/255,255/255,0/255,1)
	footbell.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
	footbell:RemoveComponent("stackable")
	footbell:RemoveComponent("edible")
	footbell:RemoveComponent("tradable")
	footbell:RemoveComponent("fuel")
	footbell:RemoveComponent("burnable")
	footbell:RemoveComponent("propagator")
	footbell:RemoveComponent("repairer")
	footbell:RemoveComponent("inventoryitem")
	footbell:RemoveComponent("deployable")
	footbell:RemoveTag("cattoy")
	footbell:AddComponent("named")
	footbell.components.named:SetName("Bell")
	footbell:AddTag("footbell")
	footbell:AddComponent("workable")
	footbell.components.workable:SetWorkAction(ACTIONS.HAMMER)
	footbell.components.workable:SetWorkLeft(3)
	footbell.components.workable:SetOnFinishCallback(function()
		SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(footbell.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
		local pos2 = Vector3(footbell.Transform:GetWorldPosition())
		local ents2 = TheSim:FindEntities(pos2.x,pos2.y,pos2.z, 30)
		for k,v in pairs(ents2) do
			if v:HasTag("redmark") or v:HasTag("yellowmark") or v:HasTag("trash") or v:HasTag("footfoot") then
			   SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
			   v:Remove()
			end
		end
		footbell:Remove()
	end )
	footbell.components.inspectable.getstatus = function()
		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold")
		local foot = SpawnPrefab("cutgrass")
		foot.Transform:SetPosition(pt.x, 10, pt.z)
		foot.AnimState:SetBank("foot")
		foot.AnimState:SetBuild("foot_build")
		foot.AnimState:PlayAnimation("idle")
		foot.Transform:SetFourFaced()
		foot.Transform:SetRotation( 270 )
		foot:RemoveComponent("stackable")
		foot:RemoveComponent("edible")
		foot:RemoveComponent("tradable")
		foot:RemoveComponent("fuel")
		foot:RemoveComponent("burnable")
		foot:RemoveComponent("propagator")
		foot:RemoveComponent("repairer")
		foot:RemoveComponent("inventoryitem")
		foot:RemoveComponent("deployable")
		foot:RemoveTag("cattoy")
		foot:AddTag("footfoot")
		foot.falling = foot:DoPeriodicTask(.01, function() foot.Physics:SetMotorVelOverride(0,-55,0) end)
		foot:DoTaskInTime(0.1, function()
			if foot.falling then foot.falling:Cancel() foot.falling = nil end
			GetPlayer().SoundEmitter:PlaySound("dontstarve_DLC001/creatures/glommer/foot_ground")
			GetPlayer().components.playercontroller:ShakeCamera(foot, "FULL", 0.5, 0.05, 2, 40)
			SpawnPrefab("collapse_big").Transform:SetPosition(pt.x, 0, pt.z)
			local pos = Vector3(foot.Transform:GetWorldPosition())
			local ents = TheSim:FindEntities(pos.x,0,pos.z, 5)
			for k,v in pairs(ents) do
				if v:HasTag("trash") and v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then
				   SpawnPrefab("goldnugget").Transform:SetPosition(v.Transform:GetWorldPosition())
				   v:Remove()
				end
				if v:HasTag("player") then
				   v.AnimState:PlayAnimation("hit")
				   v.components.health:DoDelta(-5)
				end
			end
			foot:DoTaskInTime(0.5, function()
				GetPlayer().SoundEmitter:PlaySound("dontstarve/common/stone_drop")
				SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(foot.Transform:GetWorldPosition())
				foot:Remove()
			end )
		end )
	end
end
local function OnDeploy (inst, pt)
	makegrinder(inst)
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("redmark") then
		data.redmark = true
	end
	if inst:HasTag("yellowmark") then
		data.yellowmark = true
	end
	if inst:HasTag("trash") then
		data.trash = true
	end
	if inst:HasTag("footbell") then
		data.footbell = true
	end
	if inst:HasTag("footfoot") then
		data.footfoot = true
	end
end
local function onload(inst, data)
	if data and data.redmark then
	   makegrinder(inst)
	   inst:Remove()
	end
	if data and data.yellowmark then
	   inst:Remove()
	end
	if data and data.footbell then
	   inst:Remove()
	end
	if data and data.footfoot then
	   inst:Remove()
	end
	if data and data.trash then
	   inst.AnimState:SetBank("fertilizer")
	   inst.AnimState:SetBuild("fertilizer")
	   inst.AnimState:PlayAnimation("idle")
	   inst.Transform:SetScale(1.5, 1.5, 1.5)
	   inst.AnimState:SetMultColour(0/255,255/255,0/255,1)
	   inst.components.inventoryitem:ChangeImageName("fertilizer")
	   inst:RemoveComponent("stackable")
	   inst:RemoveComponent("edible")
	   inst:RemoveComponent("tradable")
	   inst:RemoveComponent("fuel")
	   inst:RemoveComponent("burnable")
	   inst:RemoveComponent("propagator")
	   inst:RemoveComponent("repairer")
	   inst:RemoveComponent("deployable")
	   inst:RemoveTag("cattoy")
	   inst:AddComponent("named")
	   inst.components.named:SetName("Refuse")
	   inst.flies = inst:SpawnChild("flies")
	   inst.components.inventoryitem:SetOnDroppedFn(function() inst.flies = inst:SpawnChild("flies") end )
	   inst.components.inventoryitem:SetOnPickupFn(function() if inst.flies then inst.flies:Remove() inst.flies = nil end end )
	   inst.components.inventoryitem:SetOnPutInInventoryFn(function() if inst.flies then inst.flies:Remove() inst.flies = nil end end )
	   MakeSmallBurnable(inst)
	   MakeSmallPropagator(inst)
	   inst:AddTag("trash")
	end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可在开阔的空地上,用草种环保公司(拿着1个草对地面点鼠标右键,如果拿着多个,则不会种出来),每天白天、傍晚、黑夜都会有垃圾被送到黄区,将它们搬到红区后,鼠标左键点地上的铃,可将垃圾粉碎,其中的贵金属(黄金)将留在地上,这就是环保公司的收入来源。粉碎垃圾时,不要站在红区附近,会被砸伤(减5点血)。黄区的垃圾如不及时清理,会越来越多,如果实在处理不过来,可以将垃圾烧掉,但那样就没有收入了。这是饥荒世界唯一一家环保公司,整块大陆的清洁就仰赖你了,承担起这肮脏而又崇高的事业吧。不想要环保公司了,用锤子砸掉铃即可