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

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


  1
  200.小诊所(用毛皮铺盖种小诊所,可买药、住院、做手术)
  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个兔人尾巴制造