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

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


  1
  2.度假营地(按键盘B键租赁度假营地,各种设施一应俱全,再按B键退房
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playeractionpicker")的下一行插入以下内容:
  5
  6TheInput:AddKeyUpHandler(KEY_B, function()
  7	if not inst:HasTag("campsite") then
  8	   if inst.components.inventory:Has("goldnugget", 50) then
  9		  inst.components.inventory:ConsumeByName("goldnugget", 50)
 10		  GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
 11		  inst:AddTag("campsite")
 12		  local pt = inst:GetPosition()
 13		  local pt0 = Vector3(inst.Transform:GetWorldPosition())
 14		  for k = 1, 50 do
 15			  local result_offset = FindValidPositionByFan(1 * 2 * PI, 8.5, 50, function(offset)
 16				  local x,y,z = (pt0 + offset):Get()
 17				  local ents = TheSim:FindEntities(x,y,z , 1)
 18				  return not next(ents) 
 19			  end )
 20			  if result_offset then
 21				 local wall = SpawnPrefab("wall_wood")
 22				 wall.Transform:SetScale(0.65,0.65,0.65)
 23				 MakeObstaclePhysics(wall, .25)
 24				 wall:RemoveComponent("workable")
 25				 wall.components.health:SetInvincible(true)
 26				 wall.persists = false
 27				 wall:AddTag("tempbuilding")
 28				 wall.Transform:SetPosition((pt0 + result_offset):Get())
 29				 wall.components.inspectable.getstatus = function(wall)
 30					 wall.Transform:SetScale(0.65, 0.1, 0.65)
 31					 wall.Physics:SetActive(false)
 32					 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 33					 wall:DoTaskInTime(5, function(wall)
 34						 wall.Transform:SetScale(0.65, 0.65, 0.65)
 35						 wall.Physics:SetActive(true)
 36						 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 37					 end )
 38				 end
 39			  end
 40		  end
 41		  local building1 = SpawnPrefab("tent")
 42		  building1.Transform:SetPosition(pt.x-4, 0, pt.z-4)
 43		  building1.AnimState:SetMultColour(255/255,105/255,0/255,1)
 44		  building1.persists = false
 45		  building1:AddTag("tempbuilding")
 46		  local building2 = SpawnPrefab("ancient_altar")
 47		  building2.Transform:SetPosition(pt.x-4+2.5, 0, pt.z-4-2.5)
 48		  building2.Transform:SetScale(0.45,0.45,0.45)
 49		  building2.persists = false
 50		  building2:AddTag("NOCLICK")
 51		  building2:AddTag("tempbuilding")
 52		  local building3 = SpawnPrefab("lightning_rod")
 53		  building3.Transform:SetPosition(pt.x-4-2.4, 0, pt.z-4+2.4)
 54		  building3.Transform:SetScale(0.7,0.7,0.7)
 55		  building3.persists = false
 56		  building3:AddTag("NOCLICK")
 57		  building3:AddTag("tempbuilding")
 58		  local building4 = SpawnPrefab("ruins_table")
 59		  building4.Transform:SetPosition(pt.x+3.3, 0, pt.z-3.3)
 60		  building4.persists = false
 61		  building4:AddTag("NOCLICK")
 62		  building4:AddTag("tempbuilding")
 63		  local building5 = SpawnPrefab("ruins_chair")
 64		  building5.Transform:SetPosition(pt.x+4.9, 0, pt.z-4.9)
 65		  building5.persists = false
 66		  building5:AddTag("NOCLICK")
 67		  building5:AddTag("tempbuilding")
 68		  local building6 = SpawnPrefab("cookpot")
 69		  building6.Transform:SetPosition(pt.x+4.3, 0, pt.z+4.3)
 70		  building6.Transform:SetScale(0.7,0.7,0.7)
 71		  building6.persists = false
 72		  building6:AddTag("tempbuilding")
 73		  local building7 = SpawnPrefab("icebox")
 74		  building7.Transform:SetPosition(pt.x+4.5-1.3, 0, pt.z+4.5+1.3)
 75		  building7.persists = false
 76		  building7:AddTag("tempbuilding")
 77		  for k = 1, 3 do
 78			  local foodnames = {"butterflymuffin","frogglebunwich","taffy","pumpkincookie","stuffedeggplant","fishsticks","honeynuggets","honeyham","dragonpie","kabobs","mandrakesoup","baconeggs","meatballs","bonestew","perogies","turkeydinner","ratatouille","jammypreserves","fruitmedley","fishtacos","waffles","unagi","flowersalad","icecream","watermelonicle","trailmix","hotchili","guacamole"}
 79			  local foodname = foodnames[math.random(#foodnames)]
 80			  local food = SpawnPrefab(foodname)
 81			  building7.components.container:GiveItem(food)
 82		  end
 83		  local building8 = SpawnPrefab("dragonflychest")
 84		  building8.Transform:SetPosition(pt.x+3.8+3, 0, pt.z-3.8+3)
 85		  building8.persists = false
 86		  building8:AddTag("tempbuilding")
 87		  local lantern = SpawnPrefab("lantern")
 88		  building8.components.container:GiveItem(lantern)
 89		  if not GetSeasonManager():IsSummer() then
 90			 local building9 = SpawnPrefab("firepit")
 91			 building9.Transform:SetPosition(pt.x, 0, pt.z)
 92			 building9:RemoveAllEventCallbacks()
 93			 building9:ListenForEvent("onextinguish", function(building9)
 94				 if building9.components.cooker then
 95					building9:RemoveComponent("cooker")
 96				 end
 97				 if building9.components.fueled then
 98					building9.components.fueled:InitializeFuelLevel(0)
 99				 end
100			 end )
101			 building9:ListenForEvent("onignite", function(building9)
102				 if not building9.components.cooker then
103					building9:AddComponent("cooker")
104				 end
105			 end )
106			 building9.persists = false
107			 building9:AddTag("tempbuilding")
108			 for k = 1, 10 do
109				 local log = SpawnPrefab("log")
110				 building8.components.container:GiveItem(log)
111			 end
112		  else
113			 local building9 = SpawnPrefab("coldfirepit")
114			 building9.Transform:SetPosition(pt.x, 0, pt.z)
115			 building9.persists = false
116			 building9:AddTag("tempbuilding")
117			 for k = 1, 10 do
118				 local nitre = SpawnPrefab("nitre")
119				 building8.components.container:GiveItem(nitre)
120			 end
121		  end
122		  local building10 = SpawnPrefab("firesuppressor")
123		  building10.Transform:SetPosition(pt.x-4+3, 0, pt.z+4+3)
124		  building10.Transform:SetScale(0.8,0.8,0.8)
125		  building10.persists = false
126		  building10:AddTag("tempbuilding")
127		  local building11 = SpawnPrefab("eyeturret")
128		  building11.Transform:SetPosition(pt.x-4+1, 0, pt.z+4+1)
129		  building11.components.combat:SetAttackPeriod(0.5)
130		  if building11.components.machine then building11:RemoveComponent("machine") end
131		  building11.persists = false
132		  building11:AddTag("tempbuilding")
133		  local building12 = SpawnPrefab("pumpkin_lantern")
134		  building12.Transform:SetPosition(pt.x-4-2, 0, pt.z+4-2)
135		  building12.Transform:SetScale(1.5,1.5,1.5)
136		  building12.components.inventoryitem.canbepickedup = false
137		  building12.persists = false
138		  building12:AddTag("NOCLICK")
139		  building12:AddTag("tempbuilding")
140	   end
141	else
142	   GetPlayer().SoundEmitter:PlaySound("dontstarve/HUD/research_available")
143	   inst:RemoveTag("campsite")
144	   local pos = Vector3(inst.Transform:GetWorldPosition())
145	   local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 3000)
146	   for k,v in pairs(ents) do
147		   if v:HasTag("tempbuilding") then
148			  v:Remove()
149		   end
150	   end
151	end
152end )
153
154	即可在身上有50个黄金时,在空旷的地方,按键盘B键租赁度假营地(身上黄金不足时无法租赁),再次按B键退房。度假营地外有围墙保护(鼠标左键点围墙可开门,5秒后自动关门),内有火堆、帐篷、锅、箱子、冰箱、南瓜灯等生活设施,还配有眼睛炮塔、灭火器、避雷针等安全设备,其中箱子里有火堆燃料(夏天为硝石,其余季节为木头),还提供一盏提灯供你外出使用,冰箱里有3份料理(品种随机),让你在野外也可以品尝新鲜美味。由于环保原因,度假营地为临时设施,存档退出后再读档,度假营地将消失,记得之前取出箱子中的私人物品哦