代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接: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秒后自动关门,夜晚自动启动照明系统,用作自宅围墙或圈养动物都适宜。注意不要拿着镐点围墙,除非你想获得大理石