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

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



二九四.采矿场(用多功能工具种采矿场,打工赚黄金,买卖宝石)

	用MT管理器打开游戏目录/assets/scripts/prefabs/axe_pickaxe.lua文件,

	1.在Asset("ANIM", "anim/swap_multitool_axe_pickaxe.zip"),的下一行插入以下内容:

	Asset("ANIM", "anim/wolfgang.zip"),
	Asset("ANIM", "anim/wolfgang_skinny.zip"),
	Asset("ANIM", "anim/wolfgang_mighty.zip"),
	Asset("ANIM", "anim/player_wolfgang.zip"),
	Asset("SOUND", "sound/wolfgang.fsb"),

	
	2.在inst:AddComponent("inspectable")的下一行插入以下内容:

local function mining(inst)
	local pt = inst:GetPosition()
	local boss = SpawnPrefab("multitool_axe_pickaxe")
	boss.Transform:SetPosition(pt.x, pt.y, pt.z)
	boss.AnimState:SetBank("wilson")
	boss.AnimState:SetBuild("wolfgang")
	boss.AnimState:Hide("ARM_carry")
	boss.AnimState:Show("ARM_normal")
	boss.Transform:SetFourFaced()
	boss.AnimState:OverrideSymbol("swap_hat", "hat_miner", "swap_hat")
	boss.AnimState:Show("HAT")
	boss.AnimState:Show("HAT_HAIR")
	boss.AnimState:Hide("HAIR_NOHAT")
	boss.AnimState:Hide("HAIR")
	boss.AnimState:PlayAnimation("idle")
	boss:AddTag("boss")
	boss:RemoveComponent("weapon")
	boss:RemoveComponent("tool")
	boss:RemoveComponent("finiteuses")
	boss:RemoveComponent("inventoryitem")
	boss:RemoveComponent("equippable")
	boss:RemoveComponent("deployable")
	boss:RemoveTag("sharp")
	local light = boss.entity:AddLight()
	light:SetFalloff(1)
	light:SetIntensity(.8)
	light:SetRadius(5)
	light:SetColour(180/255, 195/255, 50/255)
	light:Enable(true)
	boss:AddComponent("trader")
	boss.components.trader:SetAcceptTest(function(boss, item) 
		if item.prefab == "goldnugget" then
		   return true
		end
		if item.prefab == "purplegem" or item.prefab == "bluegem" or item.prefab == "redgem" or item.prefab == "orangegem" or item.prefab == "yellowgem" or item.prefab == "greengem" then
		   return true
		end
		return false
	end )
	boss.components.trader.onaccept = function(boss, giver, item)
		boss.AnimState:PlayAnimation("give")
		if item.prefab == "goldnugget" then
		   SpawnPrefab("pickaxe").Transform:SetPosition(pt.x+0.5, 0, pt.z+0.5)
		end
		if item.prefab == "purplegem" or item.prefab == "bluegem" or item.prefab == "redgem" or item.prefab == "orangegem" or item.prefab == "yellowgem" or item.prefab == "greengem" then
		   SpawnPrefab("goldnugget").Transform:SetPosition(pt.x+0.5, 0, pt.z+0.5)
		end
	end
	boss.components.inspectable.getstatus = function(boss)
		boss.AnimState:PlayAnimation("give")
		local rock = SpawnPrefab("multitool_axe_pickaxe")
		rock.Transform:SetPosition(pt.x+1.5, 0, pt.z+1.5)
		rock.AnimState:SetBank("rock")
		rock.AnimState:SetBuild("rock")
		rock.AnimState:PlayAnimation("full")
		rock.Transform:SetScale(0.5, 0.5, 0.5)
		rock:AddTag("goodbye")
		rock:RemoveComponent("weapon")
		rock:RemoveComponent("tool")
		rock:RemoveComponent("finiteuses")
		rock:RemoveComponent("inventoryitem")
		rock:RemoveComponent("equippable")
		rock:RemoveComponent("deployable")
		rock:RemoveTag("sharp")
		rock:AddComponent("workable")
		rock.components.workable:SetWorkAction(ACTIONS.MINE)
		rock.components.workable:SetWorkLeft(30)
		rock.components.workable:SetOnWorkCallback(function(rock, worker, workleft)
			if rock.components.workable.workleft <= 0 then
			   rock.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
			   boss.AnimState:PlayAnimation("give")
			   for k = 1, 3 do
				   SpawnPrefab("goldnugget").Transform:SetPosition(pt.x+0.5, 0, pt.z-0.5)
			   end
			   rock:Remove()
			else
			   if rock.components.workable.workleft < 10 then
				  rock.AnimState:PlayAnimation("low")
			   elseif rock.components.workable.workleft < 20 then
				  rock.AnimState:PlayAnimation("med")
			   else
				  rock.AnimState:PlayAnimation("full")
			   end
			end
		end) 
	end
	local mountain = SpawnPrefab("multitool_axe_pickaxe")
	mountain.Transform:SetPosition(pt.x-2, 0, pt.z-2)
	mountain.AnimState:SetBank("rock2")
	mountain.AnimState:SetBuild("rock2")
	mountain.AnimState:PlayAnimation("full")
	mountain.Transform:SetScale(2, 2, 2)
	mountain:AddTag("goodbye")
	mountain:RemoveComponent("weapon")
	mountain:RemoveComponent("tool")
	mountain:RemoveComponent("finiteuses")
	mountain:RemoveComponent("inventoryitem")
	mountain:RemoveComponent("equippable")
	mountain:RemoveComponent("deployable")
	mountain:RemoveTag("sharp")
	local miner = SpawnPrefab("multitool_axe_pickaxe")
	miner.Transform:SetPosition(pt.x+3-2, 0, pt.z-3-2)
	miner.AnimState:SetBank("wilson")
	miner.AnimState:SetBuild("wes")
	miner.Transform:SetFourFaced()
	miner.AnimState:OverrideSymbol("swap_hat", "hat_miner", "swap_hat")
	miner.AnimState:Show("HAT")
	miner.AnimState:Show("HAT_HAIR")
	miner.AnimState:Hide("HAIR_NOHAT")
	miner.AnimState:Hide("HAIR")
	miner.AnimState:OverrideSymbol("swap_object", "swap_pickaxe", "swap_pickaxe")
	miner.AnimState:Show("ARM_carry") 
	miner.AnimState:Hide("ARM_normal") 
	miner.AnimState:PlayAnimation("pickaxe_pre")
	miner.AnimState:PlayAnimation("pickaxe_loop", true)
	miner.Transform:SetRotation( 270 )
	miner:AddTag("goodbye")
	miner:RemoveComponent("weapon")
	miner:RemoveComponent("tool")
	miner:RemoveComponent("finiteuses")
	miner:RemoveComponent("inventoryitem")
	miner:RemoveComponent("equippable")
	miner:RemoveComponent("deployable")
	miner:RemoveTag("sharp")
	miner:DoPeriodicTask(30, function()
		miner.AnimState:PlayAnimation("pickaxe_pre")
		miner.AnimState:PlayAnimation("pickaxe_loop", true)
		miner.Transform:SetRotation( 270 )
	end )
	miner:AddComponent("trader")
	miner.components.trader:SetAcceptTest(function(miner, item) 
		if item.prefab == "goldnugget" then
		   return true
		end
		return false
	end )
	miner.components.trader.onaccept = function(miner, giver, item)
		miner.AnimState:PlayAnimation("give")
		miner.Transform:SetRotation(GetPlayer().Transform:GetRotation() - 180)
		local names = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem"}
		local name = names[math.random(#names)]
		local gem = SpawnPrefab(name)
		GetPlayer().components.inventory:GiveItem(gem)
	end
end
local function OnDeploy (inst, pt)
	mining(inst)
	inst:Remove()
end
	inst:AddComponent("deployable")
	inst.components.deployable.ondeploy = OnDeploy
local function onsave(inst, data)
	if inst:HasTag("boss") then
		data.boss = true
	end
	if inst:HasTag("goodbye") then
		data.goodbye = true
	end
end
local function onload(inst, data)
	if data and data.boss then
	   mining(inst)
	   inst:Remove()
	end
	if data and data.goodbye then
	   inst:Remove()
	end
end
	inst.OnSave = onsave
	inst.OnLoad = onload
MakeLargeBurnable(inst)
MakeLargePropagator(inst)

	即可用多功能工具种采矿场,鼠标左键点工头(大力士),他会拿出要你加工的石头,用镐将石头凿碎,即可获得3个黄金的工钱(工头会扔在地上)。可以向工头购买镐(拿着黄金对工头点鼠标左键),每把1个黄金。也可以将自己的宝石卖给工头(拿着宝石对工头点鼠标左键),每颗1个黄金。当然也可以私下向矿工(维斯)购买宝石(拿着黄金对矿工点鼠标左键),同样每颗1个黄金(宝石将直接放入主角物品栏),颜色随机。不想要采矿场时,烧掉即可。多功能工具在远古选项(画着远古祭坛)下,用1把黄金斧头、1把黄金镐、2个铥矿石制造,制造时需要靠近远古祭坛