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

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


 1
 2一八六.智能围墙(按键盘F11键造一圈大理石围墙,点围墙可开门,5秒自动关门,夜晚启动照明)
 3
 4	1.MT管理器打开游戏目录/assets/scripts/prefabs/marblepillar.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
 5
 6local function GetStatus(inst, viewer)
 7	local pt = inst:GetPosition()
 8	inst:Remove()
 9	inst:DoTaskInTime(5, function() 
10		SpawnPrefab("marblepillar").Transform:SetPosition(pt.x, pt.y, pt.z)
11		inst.SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
12	end)
13end
14local function LightsOn(inst)
15	inst.Light:Enable(true)
16end
17local function LightsOff(inst)
18	inst.Light:Enable(false)
19end
20	local light = inst.entity:AddLight()
21	light:SetFalloff(1)
22	light:SetIntensity(.8)
23	light:SetRadius(10)
24	light:Enable(false)
25	light:SetColour(180/255, 195/255, 50/255)
26	inst.components.inspectable.getstatus = GetStatus
27	inst:ListenForEvent( "daytime", function() LightsOff(inst) end, GetWorld())
28	inst:ListenForEvent( "dusktime", function() LightsOn(inst) end, GetWorld())
29
30
31	2.MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/player_common.lua文件,在inst:AddComponent("playercontroller")的下一行插入以下内容:
32
33TheInput:AddKeyUpHandler(KEY_F11, function()
34	local player = GetPlayer()
35	local pt = Vector3(player.Transform:GetWorldPosition())
36		for k = 1, 75 do
37			local theta = 1 * 2 * PI
38			local radius = 18
39			local result_offset = FindValidPositionByFan(theta, radius, 75, function(offset)
40				local x,y,z = (pt + offset):Get()
41				local ents = TheSim:FindEntities(x,y,z , 1)
42				return not next(ents) 
43			end)
44			if result_offset then
45				local tentacle = SpawnPrefab("marblepillar")
46				tentacle.Transform:SetPosition((pt + result_offset):Get())
47				GetPlayer().components.playercontroller:ShakeCamera(inst, "FULL", 0.2, 0.02, .25, 40)
48			end
49			inst.SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
50		end
51end)
52TheInput:AddKeyUpHandler(KEY_F12, function()
53	local player = GetPlayer()
54	local range = 30
55	local pos = Vector3(player.Transform:GetWorldPosition())
56	local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, range)
57	for k,v in pairs(ents) do
58		if v.prefab == "marblepillar" then
59		   v:Remove()
60		end
61	end
62	inst.SoundEmitter:PlaySound("dontstarve/characters/wx78/levelup")
63end)
64
65	即可在开阔的空地上按键盘F11键,建造一圈大理石围墙,按F12键可消去。对围墙按鼠标左键可开门,5秒后自动关门,夜晚自动启动照明系统,用作自宅围墙或圈养动物都适宜。注意不要拿着镐点围墙,除非你想获得大理石