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

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


  1
  2二九一.小酒馆(用剃刀种小酒馆,听音乐、喝烧酒、吃料理、小憩一下)
  3
  4	MT管理器打开游戏目录/assets/scripts/prefabs/razor.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function bar(inst)
  7	local pt = inst:GetPosition()
  8	local waiter = SpawnPrefab("razor")
  9	waiter.Transform:SetPosition(pt.x, pt.y, pt.z)
 10	waiter.AnimState:SetBank("wilson")
 11	waiter.AnimState:SetBuild("wes")
 12	waiter.AnimState:Hide("ARM_carry")
 13	waiter.AnimState:Show("ARM_normal")
 14	waiter.Transform:SetFourFaced()
 15	waiter.AnimState:PlayAnimation("idle")
 16	waiter:AddTag("waiter")
 17	waiter:RemoveComponent("inventoryitem")
 18	waiter:RemoveComponent("shaver")
 19	waiter:RemoveComponent("deployable")
 20	waiter:AddComponent("trader")
 21	waiter.components.trader:SetAcceptTest(function(waiter, item) 
 22		if GetPlayer().components.inventory:Has("goldnugget", 1) then
 23		   if item.prefab == "goldnugget" then
 24			  return true
 25		   end
 26		end
 27		return false
 28	end )
 29	waiter.components.trader.onaccept = function(waiter, giver, item)
 30		waiter.AnimState:PlayAnimation("idle_onemanband1_loop",true)
 31		waiter:DoTaskInTime(5, function() waiter.AnimState:PlayAnimation("idle") end )
 32		GetPlayer().components.sanity:DoDelta(3)
 33	end
 34	local bar = SpawnPrefab("razor")
 35	bar.Transform:SetPosition(pt.x+0.8, 0, pt.z+0.8)
 36	bar.AnimState:SetBank("ruins_table")
 37	bar.AnimState:SetBuild("ruins_table")
 38	bar.AnimState:PlayAnimation("idle")
 39	bar:AddTag("goodbye")
 40	bar:RemoveComponent("inventoryitem")
 41	bar:RemoveComponent("shaver")
 42	bar:RemoveComponent("deployable")
 43	bar:AddComponent("trader")
 44	bar.components.trader:SetAcceptTest(function(bar, item) 
 45		if GetPlayer().components.inventory:Has("goldnugget", 5) then
 46		   if item.prefab == "goldnugget" then
 47			  return true
 48		   end
 49		end
 50		return false
 51	end )
 52	bar.components.trader.onaccept = function(bar, giver, item)
 53		GetPlayer().components.inventory:ConsumeByName("goldnugget", 4)
 54		waiter.AnimState:PlayAnimation("give")
 55		local wine = SpawnPrefab("razor")
 56		wine.AnimState:SetBank("ruins_vase")
 57		wine.AnimState:SetBuild("ruins_vase")
 58		wine.AnimState:PlayAnimation("idle")
 59		wine.Transform:SetScale(0.5, 0.5, 0.5)
 60		wine.Physics:SetActive(false)
 61		wine:AddTag("goodbye")
 62		wine.components.inventoryitem.canbepickedup = false
 63		local follower = wine.entity:AddFollower()
 64		follower:FollowSymbol( bar.GUID, "swap_object", -100, -170, 0 )
 65		wine.components.inspectable.getstatus = function(wine)
 66			wine:Remove()
 67			wine = nil
 68			GetPlayer().sg:GoToState("eat")
 69			GetPlayer().components.sanity:DoDelta(-5)
 70			GetPlayer().components.health:DoDelta(20)
 71		end
 72	end
 73	local icebox = SpawnPrefab("razor")
 74	icebox.Transform:SetPosition(pt.x-1.6+0.8, 0, pt.z+1.6+0.8)
 75	icebox.AnimState:SetBank("icebox")
 76	icebox.AnimState:SetBuild("ice_box")
 77	icebox.AnimState:PlayAnimation("closed")
 78	icebox.AnimState:SetMultColour(255/255,255/255,255/255,1)
 79	icebox:AddTag("goodbye")
 80	icebox:RemoveComponent("inventoryitem")
 81	icebox:RemoveComponent("shaver")
 82	icebox:RemoveComponent("deployable")
 83	icebox:AddComponent("trader")
 84	icebox.components.trader:SetAcceptTest(function(icebox, item) 
 85		if GetPlayer().components.inventory:Has("goldnugget", 5) then
 86		   if item.prefab == "goldnugget" then
 87			  return true
 88		   end
 89		end
 90		return false
 91	end )
 92	icebox.components.trader.onaccept = function(icebox, giver, item)
 93		GetPlayer().components.inventory:ConsumeByName("goldnugget", 4)
 94		waiter.AnimState:PlayAnimation("give")
 95		local names = {"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"}
 96		local name = names[math.random(#names)]
 97		local snack = SpawnPrefab(name)
 98		giver.components.inventory:GiveItem(snack)
 99	end
100	local chair = SpawnPrefab("razor")
101	chair.Transform:SetPosition(pt.x+1.5+0.8, 0, pt.z-1.5+0.8)
102	chair.AnimState:SetBank("ruins_chair")
103	chair.AnimState:SetBuild("ruins_chair")
104	chair.AnimState:PlayAnimation("idle")
105	chair:AddTag("goodbye")
106	chair:RemoveComponent("inventoryitem")
107	chair:RemoveComponent("shaver")
108	chair:RemoveComponent("deployable")
109	chair.components.inspectable.getstatus = function()
110		TheFrontEnd:Fade(true,1)
111		GetClock():NextPhase()
112		GetPlayer().components.hunger:DoDelta(-10)
113		GetPlayer().components.sanity:DoDelta(25)
114	end
115	local music = SpawnPrefab("razor")
116	music.Transform:SetPosition(pt.x+1.5-0.8, 0, pt.z-1.5-0.8)
117	music.AnimState:SetBank("phonograph")
118	music.AnimState:SetBuild("phonograph")
119	music.AnimState:PlayAnimation("idle")
120	music:AddTag("goodbye")
121	music:RemoveComponent("inventoryitem")
122	music:RemoveComponent("shaver")
123	music:RemoveComponent("deployable")
124	music.entity:AddSoundEmitter()
125	music:AddComponent("machine")
126	music.components.machine.turnonfn = function(music)
127		music.AnimState:PlayAnimation("play_loop", true)
128		music.SoundEmitter:PlaySound("dontstarve/maxwell/ragtime", "ragtime")
129	end
130	music.components.machine.turnofffn = function(music)
131		music.AnimState:PlayAnimation("idle")
132		music.SoundEmitter:KillSound("ragtime")
133		music.SoundEmitter:PlaySound("dontstarve/music/gramaphone_end")
134	end
135	music.components.machine:TurnOff()
136	local pot = SpawnPrefab("razor")
137	pot.Transform:SetPosition(pt.x-1.5-1.1, 0, pt.z+1.5-1.1)
138	pot.AnimState:SetBank("cook_pot")
139	pot.AnimState:SetBuild("cook_pot")
140	pot.Transform:SetScale(0.8, 0.8, 0.8)
141	pot.AnimState:PlayAnimation("cooking_loop", true)
142	pot:AddTag("goodbye")
143	pot:RemoveComponent("inventoryitem")
144	pot:RemoveComponent("shaver")
145	pot:RemoveComponent("deployable")
146	pot.AnimState:SetBloomEffectHandle("shaders/anim.ksh")
147	local light = pot.entity:AddLight()
148	light:SetFalloff(1)
149	light:SetIntensity(.8)
150	light:SetRadius(10)
151	light:SetColour(180/255, 195/255, 50/255)
152	light:Enable(true)
153end
154local function OnDeploy (inst, pt)
155	bar(inst)
156	inst:Remove()
157end
158	inst:AddComponent("deployable")
159	inst.components.deployable.ondeploy = OnDeploy
160local function onsave(inst, data)
161	if inst:HasTag("waiter") then
162		data.waiter = true
163	end
164	if inst:HasTag("goodbye") then
165		data.goodbye = true
166	end
167end
168local function onload(inst, data)
169	if data and data.waiter then
170	   bar(inst)
171	   inst:Remove()
172	end
173	if data and data.goodbye then
174	   inst:Remove()
175	end
176end
177	inst.OnSave = onsave
178	inst.OnLoad = onload
179MakeLargeBurnable(inst)
180MakeLargePropagator(inst)
181
182	即可用剃刀种小酒馆,给桌子5个黄金(拿着黄金对桌子点鼠标左键),服务员会为你热1瓶烧酒,左键点桌上的酒瓶即可喝掉,补20点血,但会减5点脑(喝多了会头晕)。给冰箱5个黄金,可以购买料理(直接放入物品栏)。如果你满意酒馆的服务,可以向服务员支付小费(拿着黄金对服务员点鼠标左键),每次1个黄金,补3点脑。如果想休息一下,就用左键点椅子,时间会跳到下一时段,补25点脑,减少10点饥饿。鼠标右键点留声机,可以开关音乐。冬天天冷时,靠近锅会很暖和。不想要小酒馆时,烧掉即可。剃刀在工具选项(画着斧子和镐)下,用2个树枝、2个燧石制造