代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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个燧石制造