代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2三0九.度假营地(按键盘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份料理(品种随机),让你在野外也可以品尝新鲜美味。由于环保原因,度假营地为临时设施,存档退出后再读档,度假营地将消失,记得之前取出箱子中的私人物品哦