Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "prefabutil"
- local assets =
- {
- Asset("ANIM", "anim/VacuumChest.zip"),
- Asset("ANIM", "anim/firefighter_placement.zip"),
- Asset("ATLAS", "images/inventoryimages/vacuum_chest.xml"),
- Asset("IMAGE", "images/inventoryimages/vacuum_chest.tex"),
- }
- local prefabs =
- {
- "collapse_small",
- }
- local function onopen(inst)
- inst.AnimState:PlayAnimation("open")
- inst.SoundEmitter:PlaySound("dontstarve/wilson/chest_open")
- end
- local function onclose(inst)
- inst.AnimState:PlayAnimation("close")
- inst.SoundEmitter:PlaySound("dontstarve/wilson/chest_close")
- end
- local function onhammered(inst, worker)
- inst.components.lootdropper:DropLoot()
- inst.components.container:DropEverything()
- SpawnPrefab("collapse_small").Transform:SetPosition(inst.Transform:GetWorldPosition())
- inst.SoundEmitter:PlaySound("dontstarve/common/destroy_wood")
- inst:Remove()
- end
- local function onhit(inst, worker)
- inst.AnimState:PlayAnimation("hit")
- inst.components.container:DropEverything()
- inst.AnimState:PushAnimation("closed", false)
- inst.components.container:Close()
- end
- local function onbuilt(inst)
- inst.AnimState:PlayAnimation("place")
- inst.AnimState:PushAnimation("closed", false)
- end
- --------------------------------------------------------------------------
- --9.67741935483871 is the default scale of the placer outline thing since its sets the scale to 1.55 and 15 / 1.55 = 9.67741935483871
- local PLACER_SCALE = TUNING.VACUUM_RANGE / (15 / 1.55)
- local function OnEnableHelper(inst, enabled)
- if enabled then
- if inst.helper == nil then
- inst.helper = CreateEntity()
- --[[Non-networked entity]]
- inst.helper.entity:SetCanSleep(false)
- inst.helper.persists = false
- inst.helper.entity:AddTransform()
- inst.helper.entity:AddAnimState()
- inst.helper:AddTag("CLASSIFIED")
- inst.helper:AddTag("NOCLICK")
- inst.helper:AddTag("placer")
- inst.helper.Transform:SetScale(PLACER_SCALE, PLACER_SCALE, PLACER_SCALE)
- inst.helper.AnimState:SetBank("firefighter_placement")
- inst.helper.AnimState:SetBuild("firefighter_placement")
- inst.helper.AnimState:PlayAnimation("idle")
- inst.helper.AnimState:SetLightOverride(1)
- inst.helper.AnimState:SetOrientation(ANIM_ORIENTATION.OnGround)
- inst.helper.AnimState:SetLayer(LAYER_BACKGROUND)
- inst.helper.AnimState:SetSortOrder(1)
- inst.helper.AnimState:SetAddColour(0, .2, .5, 0)
- inst.helper.entity:SetParent(inst.entity)
- end
- elseif inst.helper ~= nil then
- inst.helper:Remove()
- inst.helper = nil
- end
- end
- --------------------------------------------------------------------------
- local function fn(Sim)
- local inst = CreateEntity()
- inst.entity:AddTransform()
- inst.entity:AddAnimState()
- inst.entity:AddSoundEmitter()
- inst.entity:AddMiniMapEntity()
- inst.entity:AddNetwork()
- inst.MiniMapEntity:SetIcon( "vacuum_chest.tex" )
- inst.AnimState:SetBank("chest")
- inst.AnimState:SetBuild("VacuumChest")
- inst.AnimState:PlayAnimation("closed")
- inst:AddTag("structure")
- inst:AddTag("chest")
- --Dedicated server does not need deployhelper
- if not TheNet:IsDedicated() then
- inst:AddComponent("deployhelper")
- inst.components.deployhelper.onenablehelper = OnEnableHelper
- end
- inst.entity:SetPristine()
- if not TheWorld.ismastersim then
- inst.OnEntityReplicated = function(inst)
- inst.replica.container:WidgetSetup("chester")
- end
- return inst
- end
- inst:AddComponent("inspectable")
- inst:AddComponent("container")
- inst.components.container:WidgetSetup("chester")
- inst.components.container.onopenfn = onopen
- inst.components.container.onclosefn = onclose
- inst:AddComponent("lootdropper")
- inst:AddComponent("workable")
- inst.components.workable:SetWorkAction(ACTIONS.HAMMER)
- inst.components.workable:SetWorkLeft(2)
- inst.components.workable:SetOnFinishCallback(onhammered)
- inst.components.workable:SetOnWorkCallback(onhit)
- inst:ListenForEvent( "onbuilt", onbuilt)
- MakeSnowCovered(inst, .01)
- local function suckit(item)
- if inst.AnimState:IsCurrentAnimation("closed") or inst.AnimState:IsCurrentAnimation("close") then
- inst.AnimState:PlayAnimation("hit")
- inst.AnimState:PushAnimation("closed", false)
- end
- inst.SoundEmitter:PlaySound("dontstarve/wilson/chest_open")
- inst.components.container:GiveItem(item)
- end
- local function vacuum(inst)
- local x,y,z = inst.Transform:GetWorldPosition()
- local SEARCH_RADIUS = TUNING.VACUUM_RANGE
- local ents = TheSim:FindEntities(x, y, z, SEARCH_RADIUS, nil, {"minesprung", "mineactive", "FX", "NOCLICK", "DECOR", "INLIMBO"})
- local function IsItem(ent)
- return ent.components.inventoryitem and ent.components.inventoryitem.canbepickedup and ent.components.inventoryitem.cangoincontainer and ent or nil
- end
- local count = 0
- for i, v in ipairs(ents) do
- --only pickup a couple items at a time
- count = count + 1
- if count > 5 then return end
- local Item = IsItem(v)
- if Item then
- if not inst.components.container:IsFull() then
- suckit(Item)
- return
- elseif Item.components.stackable then
- local stack = inst.components.container:FindItem(function(i) return (i.prefab == Item.prefab and not i.components.stackable:IsFull()) end)
- if stack then
- suckit(Item)
- return
- end
- end
- end
- end
- end
- inst:DoPeriodicTask(0.5, vacuum)
- return inst
- end
- local function placer_postinit_fn(inst)
- --Show the vacuum chest placer on top of the vacuum chest range ground placer
- local placer2 = CreateEntity()
- --[[Non-networked entity]]
- placer2.entity:SetCanSleep(false)
- placer2.persists = false
- placer2.entity:AddTransform()
- placer2.entity:AddAnimState()
- placer2:AddTag("CLASSIFIED")
- placer2:AddTag("NOCLICK")
- placer2:AddTag("placer")
- local s = 1 / PLACER_SCALE
- placer2.Transform:SetScale(s, s, s)
- placer2.AnimState:SetBank("chest")
- placer2.AnimState:SetBuild("VacuumChest")
- placer2.AnimState:PlayAnimation("closed")
- placer2.AnimState:SetLightOverride(1)
- placer2.entity:SetParent(inst.entity)
- inst.components.placer:LinkEntity(placer2)
- end
- return Prefab( "common/vacuum_chest", fn, assets),
- MakePlacer("common/vacuum_chest_placer", "firefighter_placement", "firefighter_placement", "idle", true, nil, nil, PLACER_SCALE, nil, nil, placer_postinit_fn)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement