代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个铥矿石制造,制造时需要靠近远古祭坛