```lua
local assets =
{
Asset("ANIM", "anim/tree_christmas.zip"),
}
local function oninit(inst)
inst.AnimState:PlayAnimation("idle", true)
inst.AnimState:PushAnimation("festive_loop", true)
end
local function fn()
local inst = CreateEntity()
inst.entity:AddTransform()
inst.entity:AddAnimState()
inst.entity:AddSoundEmitter()
inst.entity:AddNetwork()
MakeObstaclePhysics(inst, 1)
inst.AnimState:SetBank("tree_christmas")
inst.AnimState:SetBuild("tree_christmas")
inst.AnimState:PlayAnimation("idle", true)
MakeSnowCoveredPristine(inst)
if not TheWorld.ismastersim then
return inst
end
inst:AddComponent("inspectable")
inst:AddComponent("burnable")
inst.components.burnable:AddBurnFX("tree_christmas_fireFx", Vector3(0, 5, 0), "tree_christmas_burn")
inst:ListenForEvent("onignite", function(inst) inst.AnimState:PlayAnimation("fire_loop", true) end)
inst:ListenForEvent("onextinguish", function(inst) inst.AnimState:PlayAnimation("idle", true) end)
inst:AddComponent("transformer")
inst.components.transformer:SetBeast("crocodile")
inst.components.transformer.cantags = {"prey"}
inst.components.transformer.onchargedelta = {1, 1.5} --回复两个百分比能量
inst:AddComponent("workable")
inst.components.workable:SetWorkAction(ACTIONS.CHOP)
inst.components.workable:SetWorkLeft(10)
inst.components.workable:SetOnWorkCallback(function(inst, worker, workleft)
inst.AnimState:PlayAnimation("chop")
inst.AnimState:PushAnimation("idle", true)
inst.SoundEmitter:PlaySound("dontstarve/winter/destroy_orb")
inst.components.lootdropper:SpawnLootPrefab("log")
end)
inst.components.workable:SetOnFinishCallback(function(inst, worker)
inst:Remove()
end)
inst:AddComponent("lootdropper")
---------------------winter's feast-----------------------------
inst.AnimState:Hide("BIRD") -- 隐藏鸟
inst:AddTag("winter_treestar")
inst:ListenForEvent("ornamenttransform", function()
inst.AnimState:OverrideSymbol("tree_christmas_01", "tree_christmas", "tree_christmas_star")
end)
MakeSnowCovered(inst)
inst.OnSave = function(inst, data)
data.isstar = inst.starhide
end
inst.OnLoad = function(inst, data)
if data and data.isstar then
inst.starhide = data.isstar
else -- 默认状态即 starhide == nil
inst:RemoveComponent("winter_tree") -- 掉落 isstar=true 材料
end
end
MakeHauntableIgnite(inst)
inst.OnEntityReplicated = inst.OnEntityReplicated or function(inst)
if inst._winter_tree_decor then
inst._winter_tree_decor:Remove()
inst._winter_tree_decor = nil
end
if inst._Task ~= nil then
inst._Task:Cancel()
inst._Task = nil
end
inst:RestartWinterLight()
end
inst.RestartWinterLight = function(inst)
if not inst:IsValid() then
inst._Task:Cancel()
return
end
if inst._winter_tree_decor == nil then
inst._winter_tree_decor = SpawnPrefab("winter_tree_decor")
inst._winter_tree_decor.entity:SetParent(inst.entity)
end
local x, y, z = inst.Transform:GetWorldPosition()
inst._winter_tree_decor.Transform:SetPosition(x, y + 10, z)
if inst.components.winter_tree ~= nil and inst.components.winter_tree.status == "light" then
if inst._Task == nil then
local offset = math.random(0, 2 * PI)
inst._Task = inst:DoPeriodicTask((3 + 4 * math.random()) * FRAMES, function(inst)
inst:PushEvent("lightchange", {offset = offset})
end)
end
elseif inst._Task ~= nil then
inst._Task:Cancel()
inst._Task = nil
end
end
---------------------winter's feast-----------------------------
inst:DoTaskInTime(0, oninit)
inst:SetPrefabNameOverride("tree")
return inst
end
local function fn_decor()
local inst = CreateEntity()
inst.entity:AddTransform()
--[[Non-networked entity]]
inst:AddTag("CLASSIFIED")
inst:AddTag("FX")
inst:AddTag("NOCLICK")
inst:AddTag("NOBLOCK")
inst:AddTag("DECOR")
inst:AddTag("NOPLAYERS")
inst:AddTag("sittable")
inst:AddTag("nosteal")
return inst
end
return Prefab("tree_christmas", fn, assets, prefabs),
Prefab("winter_tree_decor", fn_decor, MakeDecor) -- "winter_tree_decor" 实际基础是 "generic_snowfall", 因为都是在雪中飘的
```
查看详情
查看详情