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

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


  1
  2二九四.采矿场(用多功能工具种采矿场,打工赚黄金,买卖宝石)
  3
  4	MT管理器打开游戏目录/assets/scripts/prefabs/axe_pickaxe.lua文件
  5
  6	1.Asset("ANIM", "anim/swap_multitool_axe_pickaxe.zip"),的下一行插入以下内容:
  7
  8	Asset("ANIM", "anim/wolfgang.zip"),
  9	Asset("ANIM", "anim/wolfgang_skinny.zip"),
 10	Asset("ANIM", "anim/wolfgang_mighty.zip"),
 11	Asset("ANIM", "anim/player_wolfgang.zip"),
 12	Asset("SOUND", "sound/wolfgang.fsb"),
 13
 14	
 15	2.inst:AddComponent("inspectable")的下一行插入以下内容:
 16
 17local function mining(inst)
 18	local pt = inst:GetPosition()
 19	local boss = SpawnPrefab("multitool_axe_pickaxe")
 20	boss.Transform:SetPosition(pt.x, pt.y, pt.z)
 21	boss.AnimState:SetBank("wilson")
 22	boss.AnimState:SetBuild("wolfgang")
 23	boss.AnimState:Hide("ARM_carry")
 24	boss.AnimState:Show("ARM_normal")
 25	boss.Transform:SetFourFaced()
 26	boss.AnimState:OverrideSymbol("swap_hat", "hat_miner", "swap_hat")
 27	boss.AnimState:Show("HAT")
 28	boss.AnimState:Show("HAT_HAIR")
 29	boss.AnimState:Hide("HAIR_NOHAT")
 30	boss.AnimState:Hide("HAIR")
 31	boss.AnimState:PlayAnimation("idle")
 32	boss:AddTag("boss")
 33	boss:RemoveComponent("weapon")
 34	boss:RemoveComponent("tool")
 35	boss:RemoveComponent("finiteuses")
 36	boss:RemoveComponent("inventoryitem")
 37	boss:RemoveComponent("equippable")
 38	boss:RemoveComponent("deployable")
 39	boss:RemoveTag("sharp")
 40	local light = boss.entity:AddLight()
 41	light:SetFalloff(1)
 42	light:SetIntensity(.8)
 43	light:SetRadius(5)
 44	light:SetColour(180/255, 195/255, 50/255)
 45	light:Enable(true)
 46	boss:AddComponent("trader")
 47	boss.components.trader:SetAcceptTest(function(boss, item) 
 48		if item.prefab == "goldnugget" then
 49		   return true
 50		end
 51		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
 52		   return true
 53		end
 54		return false
 55	end )
 56	boss.components.trader.onaccept = function(boss, giver, item)
 57		boss.AnimState:PlayAnimation("give")
 58		if item.prefab == "goldnugget" then
 59		   SpawnPrefab("pickaxe").Transform:SetPosition(pt.x+0.5, 0, pt.z+0.5)
 60		end
 61		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
 62		   SpawnPrefab("goldnugget").Transform:SetPosition(pt.x+0.5, 0, pt.z+0.5)
 63		end
 64	end
 65	boss.components.inspectable.getstatus = function(boss)
 66		boss.AnimState:PlayAnimation("give")
 67		local rock = SpawnPrefab("multitool_axe_pickaxe")
 68		rock.Transform:SetPosition(pt.x+1.5, 0, pt.z+1.5)
 69		rock.AnimState:SetBank("rock")
 70		rock.AnimState:SetBuild("rock")
 71		rock.AnimState:PlayAnimation("full")
 72		rock.Transform:SetScale(0.5, 0.5, 0.5)
 73		rock:AddTag("goodbye")
 74		rock:RemoveComponent("weapon")
 75		rock:RemoveComponent("tool")
 76		rock:RemoveComponent("finiteuses")
 77		rock:RemoveComponent("inventoryitem")
 78		rock:RemoveComponent("equippable")
 79		rock:RemoveComponent("deployable")
 80		rock:RemoveTag("sharp")
 81		rock:AddComponent("workable")
 82		rock.components.workable:SetWorkAction(ACTIONS.MINE)
 83		rock.components.workable:SetWorkLeft(30)
 84		rock.components.workable:SetOnWorkCallback(function(rock, worker, workleft)
 85			if rock.components.workable.workleft <= 0 then
 86			   rock.SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
 87			   boss.AnimState:PlayAnimation("give")
 88			   for k = 1, 3 do
 89				   SpawnPrefab("goldnugget").Transform:SetPosition(pt.x+0.5, 0, pt.z-0.5)
 90			   end
 91			   rock:Remove()
 92			else
 93			   if rock.components.workable.workleft < 10 then
 94				  rock.AnimState:PlayAnimation("low")
 95			   elseif rock.components.workable.workleft < 20 then
 96				  rock.AnimState:PlayAnimation("med")
 97			   else
 98				  rock.AnimState:PlayAnimation("full")
 99			   end
100			end
101		end) 
102	end
103	local mountain = SpawnPrefab("multitool_axe_pickaxe")
104	mountain.Transform:SetPosition(pt.x-2, 0, pt.z-2)
105	mountain.AnimState:SetBank("rock2")
106	mountain.AnimState:SetBuild("rock2")
107	mountain.AnimState:PlayAnimation("full")
108	mountain.Transform:SetScale(2, 2, 2)
109	mountain:AddTag("goodbye")
110	mountain:RemoveComponent("weapon")
111	mountain:RemoveComponent("tool")
112	mountain:RemoveComponent("finiteuses")
113	mountain:RemoveComponent("inventoryitem")
114	mountain:RemoveComponent("equippable")
115	mountain:RemoveComponent("deployable")
116	mountain:RemoveTag("sharp")
117	local miner = SpawnPrefab("multitool_axe_pickaxe")
118	miner.Transform:SetPosition(pt.x+3-2, 0, pt.z-3-2)
119	miner.AnimState:SetBank("wilson")
120	miner.AnimState:SetBuild("wes")
121	miner.Transform:SetFourFaced()
122	miner.AnimState:OverrideSymbol("swap_hat", "hat_miner", "swap_hat")
123	miner.AnimState:Show("HAT")
124	miner.AnimState:Show("HAT_HAIR")
125	miner.AnimState:Hide("HAIR_NOHAT")
126	miner.AnimState:Hide("HAIR")
127	miner.AnimState:OverrideSymbol("swap_object", "swap_pickaxe", "swap_pickaxe")
128	miner.AnimState:Show("ARM_carry") 
129	miner.AnimState:Hide("ARM_normal") 
130	miner.AnimState:PlayAnimation("pickaxe_pre")
131	miner.AnimState:PlayAnimation("pickaxe_loop", true)
132	miner.Transform:SetRotation( 270 )
133	miner:AddTag("goodbye")
134	miner:RemoveComponent("weapon")
135	miner:RemoveComponent("tool")
136	miner:RemoveComponent("finiteuses")
137	miner:RemoveComponent("inventoryitem")
138	miner:RemoveComponent("equippable")
139	miner:RemoveComponent("deployable")
140	miner:RemoveTag("sharp")
141	miner:DoPeriodicTask(30, function()
142		miner.AnimState:PlayAnimation("pickaxe_pre")
143		miner.AnimState:PlayAnimation("pickaxe_loop", true)
144		miner.Transform:SetRotation( 270 )
145	end )
146	miner:AddComponent("trader")
147	miner.components.trader:SetAcceptTest(function(miner, item) 
148		if item.prefab == "goldnugget" then
149		   return true
150		end
151		return false
152	end )
153	miner.components.trader.onaccept = function(miner, giver, item)
154		miner.AnimState:PlayAnimation("give")
155		miner.Transform:SetRotation(GetPlayer().Transform:GetRotation() - 180)
156		local names = {"purplegem","bluegem","redgem","orangegem","yellowgem","greengem"}
157		local name = names[math.random(#names)]
158		local gem = SpawnPrefab(name)
159		GetPlayer().components.inventory:GiveItem(gem)
160	end
161end
162local function OnDeploy (inst, pt)
163	mining(inst)
164	inst:Remove()
165end
166	inst:AddComponent("deployable")
167	inst.components.deployable.ondeploy = OnDeploy
168local function onsave(inst, data)
169	if inst:HasTag("boss") then
170		data.boss = true
171	end
172	if inst:HasTag("goodbye") then
173		data.goodbye = true
174	end
175end
176local function onload(inst, data)
177	if data and data.boss then
178	   mining(inst)
179	   inst:Remove()
180	end
181	if data and data.goodbye then
182	   inst:Remove()
183	end
184end
185	inst.OnSave = onsave
186	inst.OnLoad = onload
187MakeLargeBurnable(inst)
188MakeLargePropagator(inst)
189
190	即可用多功能工具种采矿场,鼠标左键点工头(大力士),他会拿出要你加工的石头,用镐将石头凿碎,即可获得3个黄金的工钱(工头会扔在地上)。可以向工头购买镐(拿着黄金对工头点鼠标左键),每把1个黄金。也可以将自己的宝石卖给工头(拿着宝石对工头点鼠标左键),每颗1个黄金。当然也可以私下向矿工(维斯)购买宝石(拿着黄金对矿工点鼠标左键),同样每颗1个黄金(宝石将直接放入主角物品栏),颜色随机。不想要采矿场时,烧掉即可。多功能工具在远古选项(画着远古祭坛)下,用1把黄金斧头、1把黄金镐、2个铥矿石制造,制造时需要靠近远古祭坛