代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2三00.小诊所(用毛皮铺盖种小诊所,可买药、住院、做手术)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/bedroll_furry.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function createhospital(inst)
7 local pt = inst:GetPosition()
8 local nurse = SpawnPrefab("bedroll_furry")
9 nurse.Transform:SetPosition(pt.x, pt.y, pt.z)
10 nurse.AnimState:SetBank("wilson")
11 nurse.AnimState:SetBuild("wendy")
12 nurse.AnimState:OverrideSymbol("swap_body", "armor_sweatervest", "swap_body")
13 nurse.AnimState:Hide("ARM_carry")
14 nurse.AnimState:Show("ARM_normal")
15 nurse.Transform:SetFourFaced()
16 nurse.AnimState:PlayAnimation("idle")
17 nurse:RemoveComponent("inventoryitem")
18 nurse:RemoveComponent("finiteuses")
19 nurse:RemoveComponent("fuel")
20 nurse:RemoveComponent("sleepingbag")
21 nurse:RemoveComponent("deployable")
22 MakeLargeBurnable(nurse)
23 MakeLargePropagator(nurse)
24 nurse:AddTag("nurse")
25 local light = nurse.entity:AddLight()
26 light:SetFalloff(1)
27 light:SetIntensity(.8)
28 light:SetRadius(5)
29 light:SetColour(180/255, 195/255, 50/255)
30 light:Enable(true)
31 nurse:AddComponent("trader")
32 nurse.components.trader:SetAcceptTest(function(nurse, item)
33 if GetPlayer().components.inventory:Has("goldnugget", 5) then
34 if item.prefab == "goldnugget" then
35 return true
36 end
37 end
38 return false
39 end )
40 nurse.components.trader.onaccept = function(nurse, giver, item)
41 GetPlayer().components.inventory:ConsumeByName("goldnugget", 4)
42 GetPlayer().components.playercontroller:Enable(false)
43 nurse.AnimState:OverrideSymbol("swap_object", "swap_hammer", "swap_hammer")
44 nurse.AnimState:Hide("ARM_normal")
45 nurse.AnimState:Show("ARM_carry")
46 nurse.task = nurse:DoPeriodicTask(1, function(nurse)
47 nurse.Transform:SetRotation(GetPlayer().Transform:GetRotation() - 180)
48 nurse.AnimState:PlayAnimation("pickaxe_pre")
49 nurse.AnimState:PlayAnimation("pickaxe_loop", false)
50 GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/rock_break")
51 GetPlayer().sg:GoToState("hit")
52 end )
53 nurse:DoTaskInTime(5, function()
54 TheFrontEnd:Fade(false,1)
55 if nurse.task then nurse.task:Cancel() nurse.task = nil end
56 nurse.Transform:SetRotation(0)
57 nurse:DoTaskInTime(1, function()
58 nurse.AnimState:Hide("ARM_carry")
59 nurse.AnimState:Show("ARM_normal")
60 nurse.AnimState:PlayAnimation("idle_onemanband1_loop",true)
61 nurse:DoTaskInTime(3, function() nurse.AnimState:PlayAnimation("idle") end )
62 TheFrontEnd:Fade(true,1)
63 GetPlayer().components.health:DoDelta(GetPlayer().components.health.maxhealth)
64 if GetPlayer():HasTag("poisoning") or GetPlayer():HasTag("fever") then
65 if GetPlayer():HasTag("poisoning") then GetPlayer():RemoveTag("poisoning") end
66 if GetPlayer():HasTag("fever") then GetPlayer():RemoveTag("fever") end
67 if GetPlayer().poison then GetPlayer().poison:Cancel() GetPlayer().poison = nil end
68 if GetPlayer().fever then GetPlayer().fever:Cancel() GetPlayer().fever = nil end
69 GetPlayer().AnimState:SetMultColour(255/255,255/255,255/255,1)
70 GetPlayer().components.locomotor.walkspeed = TUNING.WILSON_WALK_SPEED
71 GetPlayer().components.locomotor.runspeed = TUNING.WILSON_RUN_SPEED
72 GetPlayer().components.combat:SetAttackPeriod(TUNING.WILSON_ATTACK_PERIOD)
73 end
74 GetPlayer().sg:GoToState("wakeup")
75 GetPlayer().components.playercontroller:Enable(true)
76 end )
77 end )
78 end
79 local medicinebox = SpawnPrefab("bedroll_furry")
80 medicinebox.Transform:SetPosition(pt.x+1.2, 0, pt.z-1.2)
81 medicinebox.AnimState:SetBank("icebox")
82 medicinebox.AnimState:SetBuild("ice_box")
83 medicinebox.AnimState:PlayAnimation("closed")
84 medicinebox.Transform:SetScale(0.5, 0.5, 0.5)
85 medicinebox:RemoveComponent("inventoryitem")
86 medicinebox:RemoveComponent("finiteuses")
87 medicinebox:RemoveComponent("fuel")
88 medicinebox:RemoveComponent("sleepingbag")
89 medicinebox:RemoveComponent("deployable")
90 MakeLargeBurnable(medicinebox)
91 MakeLargePropagator(medicinebox)
92 medicinebox:AddTag("goodbye")
93 medicinebox:AddComponent("trader")
94 medicinebox.components.trader:SetAcceptTest(function(medicinebox, item)
95 if GetPlayer().components.inventory:Has("goldnugget", 5) then
96 if item.prefab == "goldnugget" then
97 return true
98 end
99 end
100 return false
101 end )
102 medicinebox.components.trader.onaccept = function(medicinebox, giver, item)
103 GetPlayer().components.inventory:ConsumeByName("goldnugget", 4)
104 local medicine = SpawnPrefab("bedroll_furry")
105 medicine.AnimState:SetBank("carrot")
106 medicine.AnimState:SetBuild("carrot")
107 medicine.AnimState:PlayAnimation("cooked")
108 medicine.components.inventoryitem:ChangeImageName("carrot_cooked")
109 medicine:RemoveComponent("finiteuses")
110 medicine:RemoveComponent("fuel")
111 medicine:RemoveComponent("sleepingbag")
112 medicine:RemoveComponent("burnable")
113 medicine:RemoveComponent("propagator")
114 medicine:RemoveComponent("deployable")
115 medicine:AddComponent("edible")
116 medicine.components.edible.healthvalue = GetPlayer().components.health.maxhealth *0.5
117 medicine.components.edible.hungervalue = 0
118 medicine.components.edible.sanityvalue = GetPlayer().components.sanity.max *0.5
119 medicine.components.edible.foodtype = "VEGGIE"
120 medicine:AddTag("medicine")
121 GetPlayer().components.inventory:GiveItem(medicine)
122 end
123 local hospital = SpawnPrefab("bedroll_furry")
124 hospital.Transform:SetPosition(pt.x-2, 0, pt.z-2)
125 hospital.AnimState:SetBank("tent")
126 hospital.AnimState:SetBuild("tent")
127 hospital.AnimState:PlayAnimation("idle", true)
128 hospital.Transform:SetScale(1.2, 1.2, 1.2)
129 hospital:RemoveComponent("inventoryitem")
130 hospital:RemoveComponent("finiteuses")
131 hospital:RemoveComponent("fuel")
132 hospital:RemoveComponent("sleepingbag")
133 hospital:RemoveComponent("deployable")
134 MakeLargeBurnable(hospital)
135 MakeLargePropagator(hospital)
136 hospital:AddTag("goodbye")
137 hospital:AddComponent("trader")
138 hospital.components.trader:SetAcceptTest(function(hospital, item)
139 if GetPlayer().components.inventory:Has("goldnugget", 5) then
140 if item.prefab == "goldnugget" then
141 return true
142 end
143 end
144 return false
145 end )
146 hospital.components.trader.onaccept = function(hospital, giver, item)
147 GetPlayer().components.inventory:ConsumeByName("goldnugget", 4)
148 GetPlayer().components.playercontroller:Enable(false)
149 TheFrontEnd:Fade(false,1)
150 hospital:DoTaskInTime(2, function()
151 TheFrontEnd:Fade(true,1)
152 GetPlayer().components.sanity:DoDelta(GetPlayer().components.sanity.max)
153 GetPlayer().components.playercontroller:Enable(true)
154 end )
155 end
156end
157local function OnDeploy (inst, pt)
158 createhospital(inst)
159 inst:Remove()
160end
161 inst:AddComponent("deployable")
162 inst.components.deployable.ondeploy = OnDeploy
163local function onsave(inst, data)
164 if inst:HasTag("goodbye") then
165 data.goodbye = true
166 end
167 if inst:HasTag("nurse") then
168 data.nurse = true
169 end
170 if inst:HasTag("medicine") then
171 data.medicine = true
172 end
173end
174local function onload(inst, data)
175 if data and data.goodbye then
176 inst:Remove()
177 end
178 if data and data.nurse then
179 createhospital(inst)
180 inst:Remove()
181 end
182 if data and data.medicine then
183 inst.AnimState:SetBank("carrot")
184 inst.AnimState:SetBuild("carrot")
185 inst.AnimState:PlayAnimation("cooked")
186 inst.components.inventoryitem:ChangeImageName("carrot_cooked")
187 inst:RemoveComponent("finiteuses")
188 inst:RemoveComponent("fuel")
189 inst:RemoveComponent("sleepingbag")
190 inst:RemoveComponent("burnable")
191 inst:RemoveComponent("propagator")
192 inst:RemoveComponent("deployable")
193 inst:AddComponent("edible")
194 inst.components.edible.healthvalue = GetPlayer().components.health.maxhealth *0.5
195 inst.components.edible.hungervalue = 0
196 inst.components.edible.sanityvalue = GetPlayer().components.sanity.max *0.5
197 inst.components.edible.foodtype = "VEGGIE"
198 inst:AddTag("medicine")
199 end
200end
201 inst.OnSave = onsave
202 inst.OnLoad = onload
203
204 即可用毛皮铺盖种小诊所,给护士5个黄金(拿着黄金对护士点鼠标左键),会为你麻醉并做手术,将生命值恢复到最大,如果同时修改了“小病小灾”,也可治愈感冒和食物中毒。给帐篷5个黄金可以住院,将脑值恢复到最大。给左侧的药箱5个黄金,可以买一份药,吃了可补一半的生命和脑值。不想要小诊所时,烧掉即可。毛皮铺盖在生存选项(画着绳套)下,用1个草席卷、2个兔人尾巴制造