代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二五一.我的王国(用远古短棒种国王雕像,可获得税收,有警察巡逻并听你调遣)
3
4 用MT管理器打开游戏目录/assets/scripts/prefabs/ruins_bat.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local items = { SWORD = "swap_spear" }
7local function EquipItem(inst, item)
8 if item then
9 inst.AnimState:OverrideSymbol("swap_object", item, item)
10 inst.AnimState:Show("ARM_carry")
11 inst.AnimState:Hide("ARM_normal")
12 end
13end
14 inst.items = items
15 inst.equipfn = EquipItem
16 EquipItem(inst)
17local function createguru(inst)
18 local pt = inst:GetPosition()
19 local guru = SpawnPrefab("ruins_bat")
20 guru.Transform:SetPosition(pt.x, pt.y, pt.z)
21 guru.AnimState:SetBank("wilson")
22 if GetPlayer().prefab == "wilson" then guru.AnimState:SetBuild("wilson") end
23 if GetPlayer().prefab == "wendy" then guru.AnimState:SetBuild("wendy") end
24 if GetPlayer().prefab == "wes" then guru.AnimState:SetBuild("wes") end
25 if GetPlayer().prefab == "wickerbottom" then guru.AnimState:SetBuild("wickerbottom") end
26 if GetPlayer().prefab == "willow" then guru.AnimState:SetBuild("willow") end
27 if GetPlayer().prefab == "wolfgang" then guru.AnimState:SetBuild("wolfgang") end
28 if GetPlayer().prefab == "wx78" then guru.AnimState:SetBuild("wx78") end
29 if GetPlayer().prefab == "woodie" then guru.AnimState:SetBuild("woodie") end
30 if GetPlayer().prefab == "waxwell" then guru.AnimState:SetBuild("waxwell") end
31 if GetPlayer().prefab == "wathgrithr" then guru.AnimState:SetBuild("wathgrithr") end
32 if GetPlayer().prefab == "webber" then guru.AnimState:SetBuild("webber") end
33 guru.AnimState:PlayAnimation("idle")
34 guru.AnimState:OverrideSymbol("swap_object", "swap_cane", "swap_cane")
35 guru.AnimState:Hide("ARM_normal")
36 guru.AnimState:Show("ARM_carry")
37 guru.AnimState:OverrideSymbol("swap_hat", "hat_ruins", "swap_hat")
38 guru.AnimState:Show("HAT")
39 guru.AnimState:Show("HAT_HAIR")
40 guru.AnimState:Hide("HAIR_NOHAT")
41 guru.AnimState:Hide("HAIR")
42 guru.Transform:SetFourFaced()
43 guru.Transform:SetRotation( 0 )
44 guru.Transform:SetScale(3.5, 3.5, 3.5)
45 local shadow = guru.entity:AddDynamicShadow()
46 shadow:SetSize( 6, 3.5 )
47 local minimap = guru.entity:AddMiniMapEntity()
48 minimap:SetIcon( "obelisk.png" )
49 guru.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
50 guru:AddTag("guru")
51 guru:RemoveTag("sharp")
52 guru:RemoveComponent("weapon")
53 guru:RemoveComponent("finiteuses")
54 guru:RemoveComponent("inventoryitem")
55 guru:RemoveComponent("equippable")
56 guru:RemoveComponent("deployable")
57 local light = guru.entity:AddLight()
58 light:SetFalloff(1)
59 light:SetIntensity(.8)
60 light:SetRadius(10)
61 light:SetColour(180/255, 195/255, 50/255)
62 light:Enable(true)
63 guru:AddComponent("workable")
64 guru.components.workable:SetWorkAction(ACTIONS.HAMMER)
65 guru.components.workable:SetWorkLeft(5)
66 guru.components.workable:SetOnFinishCallback(function(guru)
67 SpawnPrefab("collapse_big").Transform:SetPosition(guru.Transform:GetWorldPosition())
68 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
69 guru:Remove()
70 end )
71 guru:AddComponent("pickable")
72 guru.components.pickable:SetUp("goldnugget", 480, math.random(15,25))
73 guru.components.pickable:SetOnPickedFn(function(guru) guru.AnimState:SetBloomEffectHandle("") end )
74 guru.components.pickable:SetOnRegenFn(function(guru) guru.AnimState:SetBloomEffectHandle("shaders/anim.ksh") end )
75 guru:ListenForEvent( "daytime", function()
76 for k = 1,math.random(10,25) do
77 local pt0 = guru:GetPosition()
78 local ground = GetWorld()
79 local x = pt0.x+(math.random(50)-math.random(50))
80 local z = pt0.z+(math.random(50)-math.random(50))
81 local tile = ground.Map:GetTileAtPoint(x,0, z)
82 if tile ~= GROUND.IMPASSABLE and tile ~= GROUND.INVALID then
83 local militia = SpawnPrefab("ruins_bat")
84 militia.Transform:SetPosition(x,0,z)
85 militia.AnimState:SetBank("wilson")
86 local buildnames = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
87 local buildname = buildnames[math.random(#buildnames)]
88 militia.AnimState:SetBuild(buildname)
89 militia.AnimState:OverrideSymbol("swap_hat", "hat_walrus", "swap_hat")
90 militia.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body")
91 militia.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear")
92 militia.AnimState:Show("HAT")
93 militia.AnimState:Show("HAT_HAIR")
94 militia.AnimState:Hide("HAIR_NOHAT")
95 militia.AnimState:Hide("HAIR")
96 militia.AnimState:Hide("ARM_normal")
97 militia.AnimState:Show("ARM_carry")
98 militia.AnimState:PlayAnimation("idle")
99 militia.Transform:SetFourFaced()
100 local shadow = militia.entity:AddDynamicShadow()
101 shadow:SetSize( 1.3, .6 )
102 MakeCharacterPhysics(militia, 75, .5)
103 local minimap = militia.entity:AddMiniMapEntity()
104 minimap:SetIcon( "statue_small.png" )
105 militia:AddTag("militia")
106 militia:AddComponent("locomotor")
107 militia.components.locomotor.walkspeed = 5
108 militia.components.locomotor.runspeed = 10
109 militia:SetStateGraph("SGshadowwaxwell")
110 local brain = require "brains/frogbrain"
111 militia:SetBrain(brain)
112 militia:RemoveTag("sharp")
113 militia:RemoveComponent("weapon")
114 militia:RemoveComponent("finiteuses")
115 militia:RemoveComponent("inventoryitem")
116 militia:RemoveComponent("equippable")
117 militia:RemoveComponent("deployable")
118 militia:AddComponent("follower")
119 militia:AddComponent("knownlocations")
120 militia:AddComponent("health")
121 militia.components.health:SetMaxHealth(1200)
122 militia.components.health.nofadeout = true
123 militia:AddComponent("combat")
124 militia.components.combat:SetDefaultDamage(20)
125 militia.components.combat:SetAttackPeriod(1)
126 militia.components.combat.hiteffectsymbol = "torso"
127 militia.components.combat:SetRange(2, 3)
128 militia.components.combat:SetRetargetFunction(2, function(militia)
129 if not militia.components.health:IsDead() then
130 return FindEntity(militia, 25, function(guy)
131 if guy.components.health and not guy.components.health:IsDead() then
132 return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
133 end
134 end )
135 end
136 end )
137 militia.components.combat:SetKeepTargetFunction(function(militia, target) return target and target:IsValid() end )
138 militia:ListenForEvent("attacked", function(militia, data)
139 militia.components.combat:SetTarget(data.attacker)
140 end )
141 militia.components.inspectable.getstatus = function(militia)
142 if not militia:HasTag("letsgo") then
143 local brain = require "brains/abigailbrain"
144 militia:SetBrain(brain)
145 militia:RestartBrain()
146 militia.components.follower:SetLeader(GetPlayer())
147 militia:AddTag("letsgo")
148 else
149 local brain = require "brains/frogbrain"
150 militia:SetBrain(brain)
151 militia:RestartBrain()
152 militia.components.follower:SetLeader(nil)
153 militia:RemoveTag("letsgo")
154 end
155 end
156 militia:ListenForEvent( "nighttime", function() militia:Remove() end , GetWorld())
157 end
158 end
159 end , GetWorld())
160end
161local function OnDeploy (inst, pt)
162 if GetPlayer().components.inventory:Has("goldnugget", 1000) then
163 GetPlayer().components.inventory:ConsumeByName("goldnugget", 1000)
164 createguru(inst)
165 inst:Remove()
166 end
167end
168 inst:AddComponent("deployable")
169 inst.components.deployable.ondeploy = OnDeploy
170local function onsave(inst, data)
171 if inst:HasTag("guru") then
172 data.guru = true
173 end
174 if inst:HasTag("militia") then
175 data.militia = true
176 end
177 if inst:HasTag("letsgo") then
178 data.letsgo = true
179 end
180end
181local function onload(inst, data)
182 if data and data.guru then
183 createguru(inst)
184 inst:Remove()
185 end
186 if data and data.militia then
187 inst.AnimState:SetBank("wilson")
188 local buildnames = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
189 local buildname = buildnames[math.random(#buildnames)]
190 inst.AnimState:SetBuild(buildname)
191 inst.AnimState:OverrideSymbol("swap_hat", "hat_walrus", "swap_hat")
192 inst.AnimState:OverrideSymbol("swap_body", "armor_wood", "swap_body")
193 inst.AnimState:OverrideSymbol("swap_object", "swap_spear", "swap_spear")
194 inst.AnimState:Show("HAT")
195 inst.AnimState:Show("HAT_HAIR")
196 inst.AnimState:Hide("HAIR_NOHAT")
197 inst.AnimState:Hide("HAIR")
198 inst.AnimState:Hide("ARM_normal")
199 inst.AnimState:Show("ARM_carry")
200 inst.AnimState:PlayAnimation("idle")
201 inst.Transform:SetFourFaced()
202 local shadow = inst.entity:AddDynamicShadow()
203 shadow:SetSize( 1.3, .6 )
204 MakeCharacterPhysics(inst, 75, .5)
205 local minimap = inst.entity:AddMiniMapEntity()
206 minimap:SetIcon( "statue_small.png" )
207 inst:AddTag("militia")
208 inst:AddComponent("locomotor")
209 inst.components.locomotor.walkspeed = 5
210 inst.components.locomotor.runspeed = 10
211 inst:SetStateGraph("SGshadowwaxwell")
212 local brain = require "brains/frogbrain"
213 inst:SetBrain(brain)
214 inst:RemoveTag("sharp")
215 inst:RemoveComponent("weapon")
216 inst:RemoveComponent("finiteuses")
217 inst:RemoveComponent("inventoryitem")
218 inst:RemoveComponent("equippable")
219 inst:RemoveComponent("deployable")
220 inst:AddComponent("follower")
221 inst:AddComponent("knownlocations")
222 inst:AddComponent("health")
223 inst.components.health:SetMaxHealth(1200)
224 inst.components.health.nofadeout = true
225 inst:AddComponent("combat")
226 inst.components.combat:SetDefaultDamage(20)
227 inst.components.combat:SetAttackPeriod(1)
228 inst.components.combat.hiteffectsymbol = "torso"
229 inst.components.combat:SetRange(2, 3)
230 inst.components.combat:SetRetargetFunction(2, function(inst)
231 if not inst.components.health:IsDead() then
232 return FindEntity(inst, 25, function(guy)
233 if guy.components.health and not guy.components.health:IsDead() then
234 return guy.components.combat.target == GetPlayer() or GetPlayer().components.combat.target == guy or guy:HasTag("monster")
235 end
236 end )
237 end
238 end )
239 inst.components.combat:SetKeepTargetFunction(function(inst, target) return target and target:IsValid() end )
240 inst:ListenForEvent("attacked", function(inst, data)
241 inst.components.combat:SetTarget(data.attacker)
242 end )
243 inst.components.inspectable.getstatus = function(inst)
244 if not inst:HasTag("letsgo") then
245 local brain = require "brains/abigailbrain"
246 inst:SetBrain(brain)
247 inst:RestartBrain()
248 inst.components.follower:SetLeader(GetPlayer())
249 inst:AddTag("letsgo")
250 else
251 local brain = require "brains/frogbrain"
252 inst:SetBrain(brain)
253 inst:RestartBrain()
254 inst.components.follower:SetLeader(nil)
255 inst:RemoveTag("letsgo")
256 end
257 end
258 inst:ListenForEvent( "nighttime", function() inst:Remove() end , GetWorld())
259 end
260 if data and data.letsgo then
261 local brain = require "brains/abigailbrain"
262 inst:SetBrain(brain)
263 inst:RestartBrain()
264 inst.components.follower:SetLeader(GetPlayer())
265 inst:AddTag("letsgo")
266 end
267end
268 inst.OnSave = onsave
269 inst.OnLoad = onload
270
271 即可在身上有1000个黄金时,用远古短棒种国王雕像(你自己的形象),宣誓你在这块大陆上的主权,将消费1000个黄金,身上黄金数不足时,不会种出雕像。当雕像发光时,代表当地的税收已经上缴(每日一次),用鼠标左键点雕像,可收到税款。每天白天,雕像周围会有警察巡逻,黑夜将离去,他们会攻击任何来犯的敌人。鼠标左键点警察(不要拿武器,以免误伤),可让他跟随你(黑夜离去),再次点击可解除跟随。在大陆各地树起国王雕像,建立你的王国,统治整块大陆吧。可通过小地图查看你的势力范围,国王雕像在小地图上显示为方尖碑图标,警察显示为天使雕像图标。不想要国王雕像时,用锤子砸掉即可。远古短棒在远古选项(画着远古祭坛)下,用3个活木头、4个铥矿石、4个噩梦燃料制造,制造时须靠近远古祭坛