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

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


  1
  2一九九.人工女友(用蜂刺种三个女友之一,可背东西、做饭、换衣帽)
  3
  4	MT管理器打开游戏目录/assets/scripts/prefabs/stinger.lua文件
  5
  6	1.Asset("ANIM", "anim/stinger.zip"),的下一行插入以下内容:
  7
  8	Asset("ANIM", "anim/wathgrithr.zip"),
  9	Asset("SOUND", "sound/wathgrithr.fsb"),
 10
 11
 12	2.inst:AddComponent("inspectable")的下一行插入以下内容:
 13
 14local slotpos = {}
 15for y = 5, 0, -1 do
 16	for x = 0, 2 do
 17		table.insert(slotpos, Vector3(75*x-75*2+75, 75*y-75*2+75,0))
 18	end
 19end
 20local widgetbuttoninfo = {
 21	text = "Do",
 22	position = Vector3(68, 361, 0),
 23	fn = function(inst)
 24		GetPlayer().SoundEmitter:PlaySound("dontstarve/wilson/equip_item_gold")
 25		if not inst:HasTag("withme") then
 26		   inst:AddTag("withme")
 27		   local brain = require "brains/chesterbrain"
 28		   inst:SetBrain(brain)
 29		   inst:RestartBrain()
 30		   inst.components.follower:SetLeader(GetPlayer())
 31		else
 32		   inst:RemoveTag("withme")
 33		   inst.components.locomotor:Stop()
 34		   inst:SetBrain(nil)
 35		   inst.components.follower:SetLeader(nil)
 36		end
 37end }
 38local function OnDeploy (inst, pt)
 39	local girl = SpawnPrefab("stinger")
 40	girl.Transform:SetPosition(pt.x, pt.y, pt.z)
 41	girl.AnimState:SetBank("wilson")
 42	local girlnames = {"wendy","willow","wathgrithr"}
 43	girl.buildname = girlnames[math.random(#girlnames)]
 44	girl.AnimState:SetBuild(girl.buildname)
 45	girl.AnimState:PlayAnimation("idle")
 46	girl.AnimState:Show("ARM_normal") 
 47	girl.AnimState:Hide("ARM_carry")
 48	girl.Transform:SetFourFaced()
 49	girl.entity:AddSoundEmitter()
 50	local shadow = girl.entity:AddDynamicShadow()
 51	shadow:SetSize( 1.3, .6 )
 52	MakeCharacterPhysics(girl, 75, .5)
 53	local minimap = girl.entity:AddMiniMapEntity()
 54	minimap:SetIcon( "wendy.png" )
 55	girl:RemoveComponent("stackable")
 56	girl:RemoveComponent("inventoryitem")
 57	girl:RemoveComponent("deployable")
 58	girl:AddComponent("named")
 59	girl.components.named:SetName("My Baby")
 60	girl:AddComponent("knownlocations")
 61	girl:AddComponent("follower")
 62	girl.components.follower:SetLeader(GetPlayer())
 63	girl:AddComponent("inventory")
 64	girl.components.container.canbeopened = true
 65	girl:AddComponent("locomotor")
 66	girl.components.locomotor.walkspeed = 8
 67	girl.components.locomotor.runspeed = 12
 68	girl:SetStateGraph("SGshadowwaxwell")
 69	local brain = require "brains/chesterbrain"
 70	girl:SetBrain(brain)
 71	girl:AddComponent("combat")
 72	girl:AddComponent("health")
 73	girl.components.health:SetMaxHealth(2000)
 74	girl:ListenForEvent("death", function()
 75		girl.components.container:DropEverything()
 76	end )
 77	girl:AddComponent("talker")
 78	girl:DoPeriodicTask(60, function()
 79		local words = {"I love you","You are my love","I like you","I want stay with you","I miss you","you are my darling","I am your sweetheart","You have to love me","Don't go","Are you hungry"}
 80		local word = words[math.random(#words)]
 81		girl.components.talker:Say(word, 4, false)
 82		girl.components.health:DoDelta(2000)
 83	end)
 84	girl:DoPeriodicTask(400, function()
 85		local names = {"waffles","turkeydinner","baconeggs"}
 86		local name = names[math.random(#names)]
 87		local foods = SpawnPrefab(name)
 88		girl.components.container:GiveItem(foods)
 89		girl.components.talker:Say("Come to eat", 4, false)
 90	end)
 91	girl:AddComponent("machine")
 92	girl.components.machine.turnonfn = function(girl)
 93		girl.components.machine.ison = true
 94		girl:AddTag("neat")
 95		local hats = {"hat_flower","hat_earmuffs","hat_feather","hat_slurper","hat_spider","hat_straw","hat_top","hat_walrus","hat_winter","hat_beefalo","hat_rain","hat_catcoon"}
 96		girl.hat = hats[math.random(#hats)]
 97		local armors = {"armor_sweatervest","armor_trunkvest_summer","armor_trunkvest_winter","armor_sanity","armor_slurper","torso_rain"}
 98		girl.armor = armors[math.random(#armors)]
 99		girl.sg:GoToState("hit")
100		girl.AnimState:OverrideSymbol("swap_hat", girl.hat, "swap_hat")
101		girl.AnimState:OverrideSymbol("swap_body", girl.armor, "swap_body")
102		girl.AnimState:Show("HAT")
103		girl.AnimState:Show("HAT_HAIR")
104		girl.AnimState:Hide("HAIR_NOHAT")
105		girl.AnimState:Hide("HAIR")
106		local words = {"I like it","I don't loke it"}
107		local word = words[math.random(#words)]
108		girl.components.talker:Say(word, 4, false)
109	end
110	girl.components.machine.turnofffn = function(girl)
111		girl.components.machine.ison = false
112		girl:RemoveTag("neat")
113		girl.sg:GoToState("stunned")
114		girl.AnimState:Hide("HAT")
115		girl.AnimState:Hide("HAT_HAIR")
116		girl.AnimState:Show("HAIR_NOHAT")
117		girl.AnimState:Show("HAIR")
118		girl.AnimState:ClearOverrideSymbol("swap_body")
119		girl.SoundEmitter:PlaySound("dontstarve/characters/wendy/hurt")
120		girl.components.talker:Say("Don't, Don't, Don't", 4, false)
121	end
122	girl:AddComponent("sanityaura")
123	girl.components.sanityaura.aura = TUNING.SANITYAURA_HUGE
124	girl:ListenForEvent("attacked", function(girl, data)
125	   girl.sg:GoToState("stunned")
126	   girl.SoundEmitter:PlaySound("dontstarve/characters/wendy/hurt")
127	   girl.components.talker:Say("Don't, Don't, Don't", 4, false)
128	end )
129	girl:AddTag("fridge")
130	girl:AddTag("withme")
131	girl:AddTag("companion")
132	girl:AddTag("girls")
133	inst.components.stackable:Get():Remove()
134end
135	inst:AddComponent("deployable")
136	inst.components.deployable.ondeploy = OnDeploy
137	inst:AddComponent("container")
138	inst.components.container.widgetbuttoninfo = widgetbuttoninfo
139	inst.components.container:SetNumSlots(#slotpos)
140	inst.components.container.widgetslotpos = slotpos
141	inst.components.container.widgetpos = Vector3(0,150,0)
142	inst.components.container.side_align_tip = 160
143	inst.components.container.canbeopened = false
144local function onsave(inst, data)
145	if inst:HasTag("girls") then
146		data.girls = true
147	end
148	if inst:HasTag("withme") then
149		data.withme = true
150	end
151	if inst:HasTag("neat") then
152		data.neat = true
153	end
154	data.buildname = inst.buildname
155	data.hat = inst.hat
156	data.armor = inst.armor
157end
158local function onload(inst, data)
159  if data and data.girls then
160	inst.AnimState:SetBank("wilson")
161	local girlnames = {"wendy","willow","wathgrithr"}
162	inst.buildname = girlnames[math.random(#girlnames)]
163	inst.AnimState:SetBuild(inst.buildname)
164	inst.AnimState:PlayAnimation("idle")
165	inst.AnimState:Show("ARM_normal") 
166	inst.AnimState:Hide("ARM_carry")
167	inst.Transform:SetFourFaced()
168	inst.entity:AddSoundEmitter()
169	local shadow = inst.entity:AddDynamicShadow()
170	shadow:SetSize( 1.3, .6 )
171	MakeCharacterPhysics(inst, 75, .5)
172	local minimap = inst.entity:AddMiniMapEntity()
173	minimap:SetIcon( "wendy.png" )
174	inst:RemoveComponent("stackable")
175	inst:RemoveComponent("inventoryitem")
176	inst:RemoveComponent("deployable")
177	inst:AddComponent("named")
178	inst.components.named:SetName("My Baby")
179	inst:AddComponent("knownlocations")
180	inst:AddComponent("follower")
181	inst:AddComponent("inventory")
182	inst.components.container.canbeopened = true
183	inst:AddComponent("locomotor")
184	inst.components.locomotor.walkspeed = 8
185	inst.components.locomotor.runspeed = 12
186	inst:SetStateGraph("SGshadowwaxwell")
187	inst:AddComponent("combat")
188	inst:AddComponent("health")
189	inst.components.health:SetMaxHealth(2000)
190	inst:ListenForEvent("death", function()
191		inst.components.container:DropEverything()
192	end )
193	inst:AddComponent("talker")
194	inst:DoPeriodicTask(60, function()
195		local words = {"I love you","You are my love","I like you","I want stay with you","I miss you","you are my darling","I am your sweetheart","You have to love me","Don't go","Are you hungry"}
196		local word = words[math.random(#words)]
197		inst.components.talker:Say(word, 4, false)
198		inst.components.health:DoDelta(2000)
199	end)
200	inst:DoPeriodicTask(400, function()
201		local names = {"waffles","turkeydinner","baconeggs"}
202		local name = names[math.random(#names)]
203		local foods = SpawnPrefab(name)
204		inst.components.container:GiveItem(foods)
205		inst.components.talker:Say("Come to eat", 4, false)
206	end)
207	inst:AddComponent("machine")
208	inst.components.machine.turnonfn = function(inst)
209		inst.components.machine.ison = true
210		inst:AddTag("neat")
211		local hats = {"hat_flower","hat_earmuffs","hat_feather","hat_slurper","hat_spider","hat_straw","hat_top","hat_walrus","hat_winter","hat_beefalo","hat_rain","hat_catcoon"}
212		inst.hat = hats[math.random(#hats)]
213		local armors = {"armor_sweatervest","armor_trunkvest_summer","armor_trunkvest_winter","armor_sanity","armor_slurper","torso_rain"}
214		inst.armor = armors[math.random(#armors)]
215		inst.sg:GoToState("hit")
216		inst.AnimState:OverrideSymbol("swap_hat", inst.hat, "swap_hat")
217		inst.AnimState:OverrideSymbol("swap_body", inst.armor, "swap_body")
218		inst.AnimState:Show("HAT")
219		inst.AnimState:Show("HAT_HAIR")
220		inst.AnimState:Hide("HAIR_NOHAT")
221		inst.AnimState:Hide("HAIR")
222		local words = {"I like it","I don't loke it"}
223		local word = words[math.random(#words)]
224		inst.components.talker:Say(word, 4, false)
225	end
226	inst.components.machine.turnofffn = function(inst)
227		inst.components.machine.ison = false
228		inst:RemoveTag("neat")
229		inst.sg:GoToState("stunned")
230		inst.AnimState:Hide("HAT")
231		inst.AnimState:Hide("HAT_HAIR")
232		inst.AnimState:Show("HAIR_NOHAT")
233		inst.AnimState:Show("HAIR")
234		inst.AnimState:ClearOverrideSymbol("swap_body")
235		inst.SoundEmitter:PlaySound("dontstarve/characters/wendy/hurt")
236		inst.components.talker:Say("Don't, Don't, Don't", 4, false)
237	end
238	inst:AddComponent("sanityaura")
239	inst.components.sanityaura.aura = TUNING.SANITYAURA_HUGE
240	inst:ListenForEvent("attacked", function(inst, data)
241	   inst.sg:GoToState("stunned")
242	   inst.SoundEmitter:PlaySound("dontstarve/characters/wendy/hurt")
243	   inst.components.talker:Say("Don't, Don't, Don't", 4, false)
244	end )
245	inst:AddTag("fridge")
246	inst:AddTag("companion")
247	inst:AddTag("girls")
248  end
249  if data and data.withme then
250	inst:AddTag("withme")
251	local brain = require "brains/chesterbrain"
252	inst:SetBrain(brain)
253	inst:RestartBrain()
254	inst.components.follower:SetLeader(GetPlayer())
255  end
256  if data and data.neat then
257	inst.components.machine.ison = true
258	inst:AddTag("neat")
259	inst.AnimState:Show("HAT")
260	inst.AnimState:Show("HAT_HAIR")
261	inst.AnimState:Hide("HAIR_NOHAT")
262	inst.AnimState:Hide("HAIR")
263	if data and data.hat then
264	   inst.hat = data.hat
265	   inst.AnimState:OverrideSymbol("swap_hat", inst.hat, "swap_hat")
266	end
267	if data and data.armor then
268	   inst.armor = data.armor
269	   inst.AnimState:OverrideSymbol("swap_body", inst.armor, "swap_body")
270	end
271  end
272  if data and data.buildname then
273	 inst.buildname = data.buildname
274	 inst.AnimState:SetBuild(inst.buildname)
275  end
276end
277	inst.OnSave = onsave
278	inst.OnLoad = onload
279
280	即可用蜂刺种人工女友,随机为温蒂、薇洛、瓦丝格雷斯三人之一。鼠标左键点女友,可打开她的背包格(18格),让她帮你背东西,她的背包带有冷藏功能。点格子右上方的“Do”按钮,可让女友停留在原地,再次点“Do”按钮可继续跟随,如果你殴打她,她不再跟随你,也可通过点“Do”按钮让她继续跟随。鼠标右键点女友,可为她随机更换衣帽,再次点击可脱下衣帽,搭配好的衣帽会一直保留在她身上,不受存读档影响。每天女友会为你做一份料理,在她的背包格中拿取。女友会不时对你说话,与她紧紧依偎可以补脑(不再孤独了)。女友没有战斗能力,如果遇到敌人,要保护好她哦,你也可以选择逃跑,她会努力跟上你的,如果她遇难了,背包里的物品将掉在地上。不想要女友了,杀掉即可(按Ctrl + 鼠标左键攻击)。不要与“用蜂刺种杀人蜂窝”一同修改