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

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



四.商业采矿机(用晶体管种商业采矿机,20个黄金租用一次,收购采出的矿石,赔钱、赚钱天注定)

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

local function makeluckypit(inst)
	local pt = inst:GetPosition()
	local luckypit = SpawnPrefab("transistor")
	luckypit.Transform:SetPosition(pt.x, pt.y, pt.z)
	luckypit.AnimState:SetBank("coldfirepit")
	luckypit.AnimState:SetBuild("coldfirepit")
	luckypit.AnimState:PlayAnimation("idle",false)
	luckypit.entity:AddSoundEmitter()
	luckypit.Transform:SetScale(1.5,1.5,1.5)
	luckypit:RemoveComponent("stackable")
	luckypit:RemoveComponent("inventoryitem")
	luckypit:RemoveComponent("deployable")
	luckypit:AddComponent("workable")
	luckypit.components.workable:SetWorkAction(ACTIONS.HAMMER)
	luckypit.components.workable:SetWorkLeft(3)
	luckypit.components.workable:SetOnFinishCallback(function(luckypit)
		SpawnPrefab("collapse_big").Transform:SetPosition(luckypit.Transform:GetWorldPosition())
		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
		luckypit:Remove()
	end )
	luckypit:AddComponent("trader")
	luckypit.components.trader:SetAcceptTest(function(luckypit, item) 
		if GetPlayer().components.inventory:Has("goldnugget", 20) then
		   if not luckypit:HasTag("domining") then
			  if item.prefab == "goldnugget" then
				 return true
			  end
		   end
		end
		if item.prefab == "rocks" or item.prefab == "nitre" or item.prefab == "flint" or item.prefab == "redgem" or item.prefab == "bluegem" or item.prefab == "purplegem" or item.prefab == "greengem" or item.prefab == "orangegem" or item.prefab == "yellowgem" or item.prefab == "thulecite" or item.prefab == "ice" then
		   return true
		end
		return false
	end )
	luckypit.components.trader.onaccept = function(luckypit, giver, item)
		if item.prefab == "goldnugget" then
		   giver.components.inventory:ConsumeByName("goldnugget", 19)
		   GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
		   luckypit:AddTag("domining")
		   luckypit.task = luckypit:DoPeriodicTask(1, function()
			   local pt0 = luckypit:GetPosition()
			   luckypit.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
			   luckypit:DoTaskInTime(0.5, function() luckypit.AnimState:SetBloomEffectHandle("") end )
			   SpawnPrefab("collapse_small").Transform:SetPosition(pt0.x, 1, pt0.z)
			   luckypit.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
			   GetPlayer().components.playercontroller:ShakeCamera(luckypit, "FULL", 0.7, 0.02, .5, 40)
			   local ores = {"rocks","nitre","flint","redgem","bluegem","purplegem","greengem","orangegem","yellowgem","thulecite","ice","goldnugget","ash"}
			   local ore = ores[math.random(#ores)]
			   local myore = SpawnPrefab(ore)
			   myore.Transform:SetPosition(pt0.x, 0, pt0.z)
			   myore.components.inventoryitem.canbepickedup = false
		   myore:AddComponent("complexprojectile")
		   myore.components.complexprojectile.yOffset = 2.5
			   myore.components.complexprojectile:Launch(Point(pt0.x+(math.random(10)-math.random(10)), 0, pt0.z+(math.random(10)-math.random(10))))
		   myore.components.complexprojectile:SetOnHit(function()
				   SpawnPrefab("ground_chunks_breaking").Transform:SetPosition(myore.Transform:GetWorldPosition())
				   myore:RemoveComponent("complexprojectile")
				   myore.components.inventoryitem.canbepickedup = true
			   end )
		   end )
		   luckypit:DoTaskInTime(math.random(10,60), function()
			   SpawnPrefab("collapse_big").Transform:SetPosition(luckypit.Transform:GetWorldPosition())
			   luckypit.SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
			   if luckypit.task then luckypit.task:Cancel() luckypit.task = nil end
			   luckypit:RemoveTag("domining")
		   end )
		end
		if item.prefab == "thulecite" then
		   for k = 1, 3 do
			   local goldnugget = SpawnPrefab("goldnugget")
			   giver.components.inventory:GiveItem(goldnugget)
		   end
		end
		if item.prefab == "rocks" or item.prefab == "nitre" or item.prefab == "flint" or item.prefab == "redgem" or item.prefab == "bluegem" or item.prefab == "purplegem" or item.prefab == "greengem" or item.prefab == "orangegem" or item.prefab == "yellowgem" or item.prefab == "ice" then
		   local goldnugget = SpawnPrefab("goldnugget")
		   giver.components.inventory:GiveItem(goldnugget)
		end
	end
	luckypit:AddTag("luckypit")
end
local function OnDeploy (inst, pt)
	makeluckypit(inst)
	inst.components.stackable:Get():Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("luckypit") then
	   data.luckypit = true
	end
end
local function onload(inst, data)
  if data and data.luckypit then
	 makeluckypit(inst)
	 inst:Remove()
  end
end
	inst.OnSave = onsave
	inst.OnLoad = onload

	即可用晶体管种商业采矿机(拿着1个晶体管对地面点鼠标右键,如果拿着多个,则不会种出来),给它20个黄金(拿着黄金对采矿机点鼠标左键)可租用一次,采出的矿石数量不确定,还有一定概率采出灰。你可以将矿石留下自用,也可以卖给商业采矿机(拿着矿石对采矿机点鼠标左键),除铥矿石可卖3个黄金外,其余每个矿石可卖1个黄金,能否平衡你支付的租金,就要看天意了,开启矿业大亨的生涯吧。不想要商业采矿机了,用锤子砸掉即可。晶体管在精炼选项(画着白色宝石)下,用2个黄金、1个石砖制造