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

原帖链接: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个噩梦燃料制造,制造时须靠近远古祭坛