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

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


  1
  2三一0.疯狂躲避球(用浣熊尾巴种躲避球场,在圈内60秒不被球打到,赢50个黄金)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/coontail.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function makecourt(inst)
  7	local pt = inst:GetPosition()
  8	local caddie = SpawnPrefab("coontail")
  9	caddie.Transform:SetPosition(pt.x, pt.y, pt.z)
 10	caddie.AnimState:SetBank("wilson")
 11	caddie.AnimState:SetBuild("wes")
 12	caddie.AnimState:OverrideSymbol("swap_hat", "hat_football", "swap_hat")
 13	caddie.AnimState:OverrideSymbol("swap_body", "armor_sweatervest", "swap_body")
 14	caddie.AnimState:Show("HAT")
 15	caddie.AnimState:Show("HAT_HAIR")
 16	caddie.AnimState:Hide("HAIR_NOHAT")
 17	caddie.AnimState:Hide("HAIR")
 18	caddie.AnimState:Hide("ARM_carry")
 19	caddie.AnimState:Show("ARM_normal")
 20	caddie.Transform:SetFourFaced()
 21	caddie.AnimState:PlayAnimation("idle")
 22	caddie:RemoveComponent("inventoryitem")
 23	caddie:RemoveComponent("stackable")
 24	caddie:RemoveComponent("deployable")
 25	caddie:RemoveTag("cattoy")
 26	caddie:AddComponent("workable")
 27	caddie.components.workable:SetWorkAction(ACTIONS.HAMMER)
 28	caddie.components.workable:SetWorkLeft(1)
 29	caddie.components.workable:SetOnFinishCallback(function(caddie)
 30		SpawnPrefab("collapse_big").Transform:SetPosition(caddie.Transform:GetWorldPosition())
 31		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 32		GetPlayer().SoundEmitter:KillSound("beavermusic")
 33		local pos = Vector3(caddie.Transform:GetWorldPosition())
 34		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 10)
 35		for k,v in pairs(ents) do
 36			if v:HasTag("border") or v:HasTag("landmine") then
 37			   SpawnPrefab("collapse_big").Transform:SetPosition(v.Transform:GetWorldPosition())
 38			   v:Remove()
 39			end
 40		end
 41		caddie:Remove()
 42	end )
 43	caddie:AddComponent("named")
 44	caddie.components.named:SetName("Pitcher")
 45	caddie:AddComponent("talker")
 46	caddie:AddComponent("trader")
 47	caddie.components.trader:SetAcceptTest(function(caddie, item)
 48		if not caddie:HasTag("startgame") then
 49		   if GetPlayer().components.inventory:Has("goldnugget", 10) then
 50			  if item.prefab == "goldnugget" then
 51				 return true
 52			  end
 53		   end
 54		end
 55		return false
 56	end )
 57	caddie.components.trader.onaccept = function(caddie, giver, item)
 58		caddie:AddTag("startgame")
 59		GetPlayer().components.inventory:ConsumeByName("goldnugget", 9)
 60		GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
 61		caddie.components.talker:Say("Are you ready ?", 3, false)
 62		GetPlayer().SoundEmitter:PlaySound("dontstarve/music/music_hoedown", "beavermusic")
 63		for k = 1, 10 do
 64			local landmine = SpawnPrefab("coontail")
 65			landmine.Transform:SetPosition(pt.x+(math.random(7)-math.random(7)), 0, pt.z+(math.random(7)-math.random(7)))
 66			landmine.AnimState:SetBank("bee_mine")
 67			landmine.AnimState:SetBuild("bee_mine")
 68			landmine.AnimState:PlayAnimation("idle")
 69			landmine.Transform:SetScale(1.2, 1.2, 1.2)
 70			landmine.AnimState:SetMultColour(255/255,105/255,0/255,1)
 71			landmine.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
 72			landmine:RemoveComponent("inventoryitem")
 73			landmine:RemoveComponent("stackable")
 74			landmine:RemoveComponent("deployable")
 75			landmine:RemoveTag("cattoy")
 76			landmine.persists = false
 77		landmine:DoPeriodicTask(0.01, function()
 78				local pos0 = Vector3(landmine.Transform:GetWorldPosition())
 79				local ents0 = TheSim:FindEntities(pos0.x,pos0.y,pos0.z, 1)
 80				for k,v in pairs(ents0) do
 81					if v and v:HasTag("player") and not v:HasTag("pain")then
 82					   v:AddTag("pain")
 83					   v.sg:GoToState("hit")
 84					   if v.components.health then v.components.health:DoDelta(-3) end
 85					   v:DoTaskInTime(0.5, function() v:RemoveTag("pain") end )
 86					end
 87				end
 88		end )
 89			landmine:AddTag("landmine")
 90		end
 91		caddie:DoTaskInTime(3, function()
 92			caddie.components.talker:Say("Go !", 1, false)
 93			GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold")
 94			caddie.task = caddie:DoPeriodicTask(0.4, function(caddie)
 95				local target = FindEntity(caddie, 9, function(guy) 
 96					return guy:HasTag("player")
 97				end )
 98				if target then
 99				   caddie.Transform:SetRotation(GetPlayer().Transform:GetRotation() - 180)
100				   caddie.AnimState:PlayAnimation("give")
101				   local dodgeball = SpawnPrefab("coontail")
102				   dodgeball.AnimState:SetBank("bulb")
103				   dodgeball.AnimState:SetBuild("bulb")
104				   dodgeball.AnimState:PlayAnimation("idle")
105				   dodgeball.Transform:SetPosition(pt.x, 0, pt.z)
106				   dodgeball:RemoveComponent("inventoryitem")
107				   dodgeball:RemoveComponent("stackable")
108				   dodgeball:RemoveComponent("deployable")
109				   dodgeball:RemoveTag("cattoy")
110				   dodgeball.persists = false
111			   dodgeball:AddComponent("complexprojectile")
112			   dodgeball.components.complexprojectile.yOffset = 1
113				   if math.random()<.5 then
114					  local targetpos = target:GetPosition()
115					  dodgeball.components.complexprojectile:Launch(targetpos)
116				   else
117					  dodgeball.components.complexprojectile:Launch(Point(pt.x+(math.random(9)-math.random(9)), 0, pt.z+(math.random(9)-math.random(9))))
118				   end
119			   dodgeball.components.complexprojectile:SetOnHit(function()
120					   SpawnPrefab("small_puff").Transform:SetPosition(dodgeball.Transform:GetWorldPosition())
121					   dodgeball:Remove()
122				   end )
123			   dodgeball:DoPeriodicTask(0.01, function()
124					   local pos = Vector3(dodgeball.Transform:GetWorldPosition())
125					   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 1)
126					   for k,v in pairs(ents) do
127						   if v and v:HasTag("player") then
128							  v.sg:GoToState("hit")
129							  if caddie.task then caddie.task:Cancel() caddie.task = nil end
130							  if caddie.task2 then caddie.task2:Cancel() caddie.task2 = nil end
131							  caddie.Transform:SetRotation( 0 )
132							  caddie.AnimState:PlayAnimation("idle_onemanband1_loop",true)
133							  caddie:DoTaskInTime(2, function() caddie.AnimState:PlayAnimation("idle") end )
134							  caddie.components.talker:Say("Game over !", 3, false)
135							  GetPlayer().SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo")
136							  GetPlayer().SoundEmitter:KillSound("beavermusic")
137							  SpawnPrefab("collapse_small").Transform:SetPosition(dodgeball.Transform:GetWorldPosition())
138							  dodgeball:Remove()
139							  local pos1 = Vector3(caddie.Transform:GetWorldPosition())
140							  local ents1 = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 10)
141							  for k,v in pairs(ents1) do
142								  if v:HasTag("landmine") then
143									 v:Remove()
144								  end
145							  end
146							  caddie:RemoveTag("startgame")
147						   end
148					   end
149			   end )
150				else
151				   if caddie.task then caddie.task:Cancel() caddie.task = nil end
152				   if caddie.task2 then caddie.task2:Cancel() caddie.task2 = nil end
153				   caddie.Transform:SetRotation( 0 )
154				   caddie.AnimState:PlayAnimation("idle_onemanband1_loop",true)
155				   caddie:DoTaskInTime(2, function() caddie.AnimState:PlayAnimation("idle") end )
156				   caddie.components.talker:Say("Game over !", 3, false)
157				   GetPlayer().SoundEmitter:PlaySound("dontstarve/creatures/eyeballturret/shotexplo")
158				   GetPlayer().SoundEmitter:KillSound("beavermusic")
159				   local pos1 = Vector3(caddie.Transform:GetWorldPosition())
160				   local ents1 = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 10)
161				   for k,v in pairs(ents1) do
162					   if v:HasTag("landmine") then
163						  v:Remove()
164					   end
165				   end
166				   caddie:RemoveTag("startgame")
167				end
168			end )
169		end )
170		caddie.task2 = caddie:DoTaskInTime(63, function()
171			if caddie:HasTag("startgame") then
172			   if caddie.task then caddie.task:Cancel() caddie.task = nil end
173			   if caddie.task2 then caddie.task2:Cancel() caddie.task2 = nil end
174			   caddie.Transform:SetRotation( 0 )
175			   caddie.AnimState:PlayAnimation("give")
176			   caddie.components.talker:Say("You win !", 3, false)
177			   GetPlayer().SoundEmitter:KillSound("beavermusic")
178			   caddie:StartThread(function()
179				   for k = 1, 10 do
180					   GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold")
181					   Sleep(0.15)
182				   end
183			   end )
184			   for k = 1, 50 do
185				   local goldnugget = SpawnPrefab("goldnugget")
186				   GetPlayer().components.inventory:GiveItem(goldnugget)
187			   end
188			   local pos1 = Vector3(caddie.Transform:GetWorldPosition())
189			   local ents1 = TheSim:FindEntities(pos1.x,pos1.y,pos1.z, 10)
190			   for k,v in pairs(ents1) do
191				   if v:HasTag("landmine") then
192					  v:Remove()
193				   end
194			   end
195			   caddie:RemoveTag("startgame")
196			end
197		end )
198	end
199	caddie:AddTag("caddie")
200	for k = 1, 50 do
201		local result_offset = FindValidPositionByFan(1 * 2 * PI, 8.5, 50, function(offset)
202			local x,y,z = (pt + offset):Get()
203			local ents = TheSim:FindEntities(x,y,z , 1)
204			return not next(ents) 
205		end)
206		if result_offset then
207		   local border = SpawnPrefab("coontail")
208		   border.Transform:SetPosition((pt + result_offset):Get())
209		   border.AnimState:SetBank("bulb")
210		   border.AnimState:SetBuild("bulb")
211		   border.AnimState:PlayAnimation("idle")
212		   border.Transform:SetScale(1.2, 1.2, 1.2)
213		   border.AnimState:SetMultColour(255/255,0/255,0/255,1)
214		   border.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
215		   border.AnimState:SetLayer( LAYER_BACKGROUND )
216		   border.AnimState:SetSortOrder( 1 )
217		   border:RemoveComponent("inventoryitem")
218		   border:RemoveComponent("stackable")
219		   border:RemoveComponent("deployable")
220		   border:RemoveTag("cattoy")
221		   border:DoPeriodicTask(2, function(shopsign)
222			   border.AnimState:SetMultColour(0/255,255/255,0/255,1)
223			   border:DoTaskInTime(1, function() border.AnimState:SetMultColour(255/255,0/255,0/255,1) end )
224		   end )
225		   border:AddTag("NOCLICK")
226		   border:AddTag("border")
227		end
228	end
229end
230local function OnDeploy (inst, pt)
231	makecourt(inst)
232	inst.components.stackable:Get():Remove()
233end
234	inst:AddComponent("deployable")
235	inst.components.deployable.ondeploy = OnDeploy
236local function onsave(inst, data)
237	if inst:HasTag("caddie") then
238	   data.caddie = true
239	end
240	if inst:HasTag("border") then
241	   data.border = true
242	end
243end
244local function onload(inst, data)
245  if data and data.caddie then
246	 makecourt(inst)
247	 inst:Remove()
248  end
249  if data and data.border then
250	 inst:Remove()
251  end
252end
253	inst.OnSave = onsave
254	inst.OnLoad = onload
255
256	即可在空旷的地上,用浣熊尾巴种躲避球场(拿着1个浣熊尾巴对地面点鼠标右键,如果拿着多个,则不会种出来)。给投手10个黄金玩一次(拿着黄金对投手点鼠标左键),他会不断向你扔球,在不跑出圆圈边界、不被砸到的情况下,坚持60秒,就可赢得50个黄金的奖励。球场内会随机出现障碍物,碰到会被扎伤(减3点血),绕着点跑吧。不想要躲避球场了,用锤子砸投手即可