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

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


  1
  2二九九.跳蚤市场(用木炭种跳蚤市场摊位,上百种商品30秒刷新一次,全场一律3个黄金)
  3
  4	MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/charcoal.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
  5
  6local function createfleashop(inst)
  7	local pt = inst:GetPosition()
  8	local seller = SpawnPrefab("charcoal")
  9	seller.Transform:SetPosition(pt.x, pt.y, pt.z)
 10	seller.AnimState:SetBank("wilson")
 11	local buildnames = {"wilson","wendy","wes","wickerbottom","willow","wolfgang","wx78"}
 12	local buildname = buildnames[math.random(#buildnames)]
 13	seller.AnimState:SetBuild(buildname)
 14	local hats = {"hat_bee","hat_beefalo","hat_bush","hat_earmuffs","hat_feather","hat_flower","hat_football","hat_miner","hat_ruins","hat_slurper","hat_slurtle","hat_spider","hat_straw","hat_top","hat_walrus","hat_winter","hat_rain","hat_watermelon","hat_ice","hat_catcoon","hat_wathgrithr"}
 15	local hat = hats[math.random(#hats)]
 16	seller.AnimState:OverrideSymbol("swap_hat", hat, "swap_hat")
 17	local armors = {"armor_grass","armor_marble","armor_onemanband","armor_ruins","armor_sanity","armor_slurper","armor_slurtleshell","armor_sweatervest","armor_trunkvest_summer","armor_trunkvest_winter","armor_wood","torso_rain"}
 18	local armor = armors[math.random(#armors)]
 19	seller.AnimState:OverrideSymbol("swap_body", armor, "swap_body")
 20	seller.AnimState:Show("HAT")
 21	seller.AnimState:Show("HAT_HAIR")
 22	seller.AnimState:Hide("HAIR_NOHAT")
 23	seller.AnimState:Hide("HAIR")
 24	seller.AnimState:Hide("ARM_carry")
 25	seller.AnimState:Show("ARM_normal")
 26	seller.AnimState:PlayAnimation("idle")
 27	seller.Transform:SetFourFaced()
 28	seller:RemoveComponent("stackable")
 29	seller:RemoveComponent("fuel")
 30	seller:RemoveComponent("inventoryitem")
 31	seller:RemoveComponent("burnable")
 32	seller:RemoveComponent("propagator")
 33	seller:RemoveComponent("deployable")
 34	seller:RemoveComponent("bait")
 35	seller:RemoveTag("molebait")
 36	seller:AddComponent("talker")
 37	seller:AddComponent("workable")
 38	seller.components.workable:SetWorkAction(ACTIONS.HAMMER)
 39	seller.components.workable:SetWorkLeft(3)
 40	seller.components.workable:SetOnFinishCallback(function(seller)
 41		SpawnPrefab("collapse_big").Transform:SetPosition(seller.Transform:GetWorldPosition())
 42		GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
 43		local pos = Vector3(seller.Transform:GetWorldPosition())
 44		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 6)
 45		for k,v in pairs(ents) do
 46			if v:HasTag("commodity") then
 47			   v:Remove()
 48			end
 49			if v:HasTag("fleas") then
 50			   v:Remove()
 51			end
 52		end
 53		seller:Remove()
 54	end )
 55	seller:AddTag("sellers")
 56	local flea = SpawnPrefab("charcoal")
 57	flea.Transform:SetPosition(pt.x+2.8+1.2, 0, pt.z-2.8+1.2)
 58	flea.AnimState:SetBank("winter_meter")
 59	flea.AnimState:SetBuild("winter_meter")
 60	flea.AnimState:SetPercent("meter", 0)
 61	flea.Transform:SetScale(1.5, 1.5, 1.5)
 62	flea.AnimState:SetOrientation( ANIM_ORIENTATION.OnGround )
 63	flea.AnimState:SetLayer( LAYER_BACKGROUND )
 64	flea.AnimState:SetSortOrder( 1 )
 65	flea.Transform:SetRotation( 135 )
 66	flea.AnimState:SetMultColour(255/255,255/255,255/255,0)
 67	flea:RemoveComponent("stackable")
 68	flea:RemoveComponent("fuel")
 69	flea:RemoveComponent("inventoryitem")
 70	flea:RemoveComponent("burnable")
 71	flea:RemoveComponent("propagator")
 72	flea:RemoveComponent("deployable")
 73	flea:RemoveComponent("bait")
 74	flea:RemoveTag("molebait")
 75	flea:AddTag("NOCLICK")
 76	flea:AddTag("fleas")
 77	local light = flea.entity:AddLight()
 78	light:SetFalloff(1)
 79	light:SetIntensity(.8)
 80	light:SetRadius(5)
 81	light:SetColour(180/255, 195/255, 50/255)
 82	light:Enable(true)
 83	for k = 0,4 do
 84		local names = {"amulet","blueamulet","purpleamulet","orangeamulet","greenamulet","yellowamulet","armorgrass","armormarble","armorruins","armor_sanity","armorslurper","armorsnurtleshell","armorwood","axe","goldenaxe","multitool_axe_pickaxe","bandage","batbat","bedroll_furry","bedroll_straw","trunkvest_summer","blowdart_sleep","blowdart_fire","blowdart_pipe","boomerang","bugnet","butter","cane","compass","deerclops_eyeball","diviningrod","eyeturret_item","fishingrod","gunpowder","hambat","hammer","footballhat","strawhat","tophat","flowerhat","beefalohat","featherhat","beehat","walrushat","earmuffshat","winterhat","minerhat","spiderhat","bushhat","slurtlehat","ruinshat","healingsalve","heatrock","nightsword","lantern","panflute","pickaxe","goldenpickaxe","pitchfork","razor","ruins_bat","shovel","goldenshovel","spear","icestaff","firestaff","telestaff","orangestaff","greenstaff","yellowstaff","sweatervest","teleportato_ring","teleportato_box","teleportato_crank","teleportato_potato","tentaclespike","torch","trunkvest_winter","umbrella","fertilizer","bell","spear_wathgrithr","grass_umbrella","rainhat","icehat","watermelonhat","catcoonhat","wathgrithrhat","raincoat","molehat","armordragonfly","beargervest","featherfan","staff_tornado","nightstick","eyebrellahat","reflectivevest","hawaiianshirt"}
 85		local name = names[math.random(#names)]
 86		local commodity = SpawnPrefab(name)
 87		commodity.Transform:SetPosition(pt.x+2+1.3-k*1, 0, pt.z-2+1.3+k*1)
 88		commodity.components.inventoryitem.canbepickedup = false
 89		commodity.persists = false
 90		commodity:AddComponent("trader")
 91		commodity.components.trader:SetAcceptTest(function(commodity, item) 
 92			if GetPlayer().components.inventory:Has("goldnugget", 3) then
 93			   if item.prefab == "goldnugget" then
 94				  return true
 95			   end
 96			end
 97			return false
 98		end )
 99		commodity.components.trader.onaccept = function(commodity, giver, item)
100			GetPlayer().components.inventory:ConsumeByName("goldnugget", 2)
101			commodity.components.inventoryitem.canbepickedup = true
102			commodity:RemoveTag("commodity")
103			GetPlayer().components.inventory:GiveItem(commodity)
104			commodity:RemoveComponent("trader")
105			commodity.persists = true
106		end
107		commodity:AddTag("commodity")
108	end
109	seller:DoPeriodicTask(30, function(seller)
110		seller.components.talker:Say("everythings, 3 golds", 5, false)
111		seller.AnimState:PlayAnimation("give")
112		local pos = Vector3(seller.Transform:GetWorldPosition())
113		local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 6)
114		for k,v in pairs(ents) do
115			if v:HasTag("commodity") then
116			   v:Remove()
117			end
118		end
119		for k = 0,4 do
120			local names = {"amulet","blueamulet","purpleamulet","orangeamulet","greenamulet","yellowamulet","armorgrass","armormarble","armorruins","armor_sanity","armorslurper","armorsnurtleshell","armorwood","axe","goldenaxe","multitool_axe_pickaxe","bandage","batbat","bedroll_furry","bedroll_straw","trunkvest_summer","blowdart_sleep","blowdart_fire","blowdart_pipe","boomerang","bugnet","butter","cane","compass","deerclops_eyeball","diviningrod","eyeturret_item","fishingrod","gunpowder","hambat","hammer","footballhat","strawhat","tophat","flowerhat","beefalohat","featherhat","beehat","walrushat","earmuffshat","winterhat","minerhat","spiderhat","bushhat","slurtlehat","ruinshat","healingsalve","heatrock","nightsword","lantern","panflute","pickaxe","goldenpickaxe","pitchfork","razor","ruins_bat","shovel","goldenshovel","spear","icestaff","firestaff","telestaff","orangestaff","greenstaff","yellowstaff","sweatervest","teleportato_ring","teleportato_box","teleportato_crank","teleportato_potato","tentaclespike","torch","trunkvest_winter","umbrella","fertilizer","bell","spear_wathgrithr","grass_umbrella","rainhat","icehat","watermelonhat","catcoonhat","wathgrithrhat","raincoat","molehat","armordragonfly","beargervest","featherfan","staff_tornado","nightstick","eyebrellahat","reflectivevest","hawaiianshirt"}
121			local name = names[math.random(#names)]
122			local commodity = SpawnPrefab(name)
123			commodity.Transform:SetPosition(pt.x+2+1.3-k*1, 0, pt.z-2+1.3+k*1)
124			commodity.components.inventoryitem.canbepickedup = false
125			commodity.persists = false
126			commodity:AddTag("commodity")
127			commodity:AddComponent("trader")
128			commodity.components.trader:SetAcceptTest(function(commodity, item) 
129				if GetPlayer().components.inventory:Has("goldnugget", 3) then
130				   if item.prefab == "goldnugget" then
131					  return true
132				   end
133				end
134				return false
135			end )
136			commodity.components.trader.onaccept = function(commodity, giver, item)
137				GetPlayer().components.inventory:ConsumeByName("goldnugget", 2)
138				commodity.components.inventoryitem.canbepickedup = true
139				commodity:RemoveTag("commodity")
140				GetPlayer().components.inventory:GiveItem(commodity)
141				commodity:RemoveComponent("trader")
142				commodity.persists = true
143			end
144		end
145	end)
146end
147local function OnDeploy (inst, pt)
148   createfleashop(inst)
149   inst.components.stackable:Get():Remove()
150end
151	inst:AddComponent("deployable")
152	inst.components.deployable.ondeploy = OnDeploy
153local function onsave(inst, data)
154	if inst:HasTag("sellers") then
155		data.sellers = true
156	end
157	if inst:HasTag("fleas") then
158		data.fleas = true
159	end
160end
161local function onload(inst, data)
162	if data and data.sellers then
163	   createfleashop(inst)
164	   inst:Remove()
165	end
166	if data and data.fleas then
167	   inst:Remove()
168	end
169end
170	inst.OnSave = onsave
171	inst.OnLoad = onload
172
173	即可拿着1个木炭对空地点鼠标右键,种出跳蚤市场的摊位(手里拿多个木炭不会种出来),每30秒展示5种商品,看上哪件,就拿着黄金对那件商品点鼠标左键购买,全场一律3个黄金。店主为随机人物,可以种多个跳蚤市场摊位,形成商品一条街(摊位间不要太近,否则影响展示商品)。不想要跳蚤市场时,用锤子砸店主即可(暴力拆迁)