代码来源于“易宁”大佬的分享,仅供学习,不要直接复制粘贴。
原帖链接:http://bbs.3dmgame.com/thread-3859071-1-1.html
1
2二四九.橡树盆栽(用化肥种橡树盆栽,每天掉落橡果,靠近可补脑,鼠标左键点击树叶可变色)
3
4 用MT管理器打开游戏目录/assets/DLC0002/scripts/prefabs/fertilizer.lua文件,在inst:AddComponent("inspectable")的下一行插入以下内容:
5
6local function createoak(inst)
7 local pt = inst:GetPosition()
8 local oak = SpawnPrefab("fertilizer")
9 oak.Transform:SetPosition(pt.x, pt.y, pt.z)
10 oak.AnimState:SetBank("fertilizer")
11 oak.AnimState:SetBuild("fertilizer")
12 oak.AnimState:PlayAnimation("idle")
13 oak.Transform:SetScale(1.2, 1.2, 1.2)
14 oak:RemoveComponent("inventoryitem")
15 oak:RemoveComponent("finiteuses")
16 oak:RemoveComponent("fertilizer")
17 oak:RemoveComponent("smotherer")
18 oak:RemoveComponent("deployable")
19 oak:AddTag("NOCLICK")
20 oak:ListenForEvent( "daytime", function()
21 local pos = Vector3(oak.Transform:GetWorldPosition())
22 local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 2)
23 for k,v in pairs(ents) do
24 if v.components.inventoryitem and not v.components.inventoryitem:IsHeld() then
25 if v.prefab == "acorn" then
26 v:Remove()
27 end
28 end
29 end
30 oak:DoTaskInTime(0.3, function(oak)
31 oak:StartThread(function()
32 for k = 1,math.random(3,6) do
33 local pt1 = oak:GetPosition()
34 local acorn = SpawnPrefab("acorn")
35 acorn.Transform:SetPosition(pt1.x+(math.random(2)-math.random(2)), 5, pt1.z+(math.random(2)-math.random(2)))
36 Sleep(0.3)
37 end
38 end )
39 end )
40 end , GetWorld() )
41 oak:AddTag("oak")
42 oak.tree = SpawnPrefab("fertilizer")
43 oak.tree.AnimState:SetBank("tree_leaf")
44 oak.tree.AnimState:SetBuild("tree_leaf_trunk_build")
45 local names = {"tree_leaf_green_build","tree_leaf_red_build","tree_leaf_orange_build","tree_leaf_yellow_build"}
46 local name = names[math.random(#names)]
47 oak.tree.AnimState:OverrideSymbol("swap_leaves", name, "swap_leaves")
48 oak.tree.AnimState:PlayAnimation("idle_tall")
49 oak.tree.Transform:SetScale(0.8, 0.8, 0.8)
50 oak.tree.Physics:SetActive(false)
51 oak.tree:RemoveComponent("inventoryitem")
52 oak.tree:RemoveComponent("finiteuses")
53 oak.tree:RemoveComponent("fertilizer")
54 oak.tree:RemoveComponent("smotherer")
55 oak.tree:RemoveComponent("deployable")
56 local follower = oak.tree.entity:AddFollower()
57 follower:FollowSymbol( oak.GUID, "swap_object", -1, -115, 0 )
58 oak.tree:AddComponent("sanityaura")
59 oak.tree.components.sanityaura.aura = TUNING.SANITYAURA_MED
60 oak.tree:AddComponent("workable")
61 oak.tree.components.workable:SetWorkAction(ACTIONS.CHOP)
62 oak.tree.components.workable:SetWorkLeft(1)
63 oak.tree.components.workable:SetOnFinishCallback(function()
64 SpawnPrefab("collapse_big").Transform:SetPosition(oak.tree.Transform:GetWorldPosition())
65 GetPlayer().SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
66 local pos = Vector3(oak.tree.Transform:GetWorldPosition())
67 local ents = TheSim:FindEntities(pos.x,pos.y,pos.z, 1)
68 for k,v in pairs(ents) do
69 if v:HasTag("oak") then
70 v:Remove()
71 end
72 end
73 oak.tree:Remove()
74 end )
75 oak.tree.components.inspectable.getstatus = function()
76 local names = {"tree_leaf_green_build","tree_leaf_red_build","tree_leaf_orange_build","tree_leaf_yellow_build"}
77 local name = names[math.random(#names)]
78 oak.tree.AnimState:OverrideSymbol("swap_leaves", name, "swap_leaves")
79 end
80 oak.tree:AddTag("goodbye")
81end
82local function OnDeploy (inst, pt)
83 createoak(inst)
84 inst:Remove()
85end
86 inst:AddComponent("deployable")
87 inst.components.deployable.ondeploy = OnDeploy
88local function onsave(inst, data)
89 if inst:HasTag("goodbye") then
90 data.goodbye = true
91 end
92 if inst:HasTag("oak") then
93 data.oak = true
94 end
95end
96local function onload(inst, data)
97 if data and data.goodbye then
98 inst:Remove()
99 end
100 if data and data.oak then
101 createoak(inst)
102 inst:Remove()
103 end
104end
105 inst.OnSave = onsave
106 inst.OnLoad = onload
107
108 即可用化肥种橡树盆栽,四季常青,每天清晨掉落橡果,靠近可补脑。鼠标左键点橡树,可改变树叶的颜色。不想要橡树盆栽了,用斧子砍掉即可。化肥在种植选项(画着胡萝卜)下,用3个便便、2个硬骨头、4个木头制造