Advertisement
Guest User

dst-ruins-mod-indestructable-fix

a guest
Apr 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.16 KB | None | 0 0
  1. local assets =
  2. {
  3.     Asset("ANIM", "anim/atrium_light.zip")
  4. }
  5.  
  6. local prefabs =
  7. {
  8.     "atrium_light_back",
  9.     "atrium_light_light",
  10.     "collapse_big",
  11. }
  12.  
  13. local function getstatus(inst)
  14.     return inst.Light:IsEnabled() and "ON" or "OFF"
  15. end
  16.  
  17. local function onhammered(inst)
  18.     if inst.components.burnable ~= nil and inst.components.burnable:IsBurning() then
  19.         inst.components.burnable:Extinguish()
  20.     end
  21.      local pt = inst:GetPosition()
  22.     inst.components.lootdropper:DropLoot(pt)
  23.     --close it
  24.     local fx = SpawnPrefab("collapse_big")
  25.     fx.Transform:SetPosition(inst.Transform:GetWorldPosition())
  26.     fx:SetMaterial("rock")
  27.     inst:Remove()
  28. end
  29.  
  30. local function onhit(inst, worker, workleft)
  31.     if not inst:HasTag("burnt") then
  32.         inst.SoundEmitter:PlaySound("dontstarve/common/wardrobe_hit")
  33.     end
  34. end
  35.  
  36. local function fn()
  37.     local inst = CreateEntity()
  38.  
  39.     inst.entity:AddTransform()
  40.     inst.entity:AddAnimState()
  41.     inst.entity:AddLight()
  42.     inst.entity:AddMiniMapEntity()
  43.     inst.entity:AddNetwork()
  44.  
  45.     MakeObstaclePhysics(inst, .45)
  46.  
  47.     inst.AnimState:SetBank("atrium_light")
  48.     inst.AnimState:SetBuild("atrium_light")
  49.     inst.AnimState:PlayAnimation("idle")
  50.     inst.AnimState:Hide("back")
  51.     inst.AnimState:SetFinalOffset(2)
  52.  
  53.     inst.MiniMapEntity:SetIcon("atrium_light.png")
  54.  
  55.     inst.Light:Enable(false)
  56.     inst.Light:SetRadius(8)
  57.     inst.Light:SetFalloff(.9)
  58.     inst.Light:SetIntensity(.65)
  59.     inst.Light:SetColour(200 / 255, 140 / 255, 140 / 255)
  60.     inst:AddTag("boulder") -- obj being desctrubtable by pickaxe
  61.     -- inst:AddTag("structure") for obj being destructable by hammer
  62.  
  63.     inst.entity:SetPristine()
  64.  
  65.  
  66.  
  67.     if not TheWorld.ismastersim then
  68.         inst.highlightchildren = {}
  69.  
  70.         return inst
  71.     end
  72.  
  73.  
  74.     inst._back = SpawnPrefab("atrium_light_back")
  75.     inst._back.entity:SetParent(inst.entity)
  76.  
  77.     inst._light = SpawnPrefab("atrium_light_light")
  78.     inst._light.entity:SetParent(inst.entity)
  79.  
  80.     inst.highlightchildren = { inst._back, inst._light }
  81.    
  82.  
  83.     inst:AddComponent("lootdropper")
  84.     inst:AddComponent("workable")
  85.     inst.components.workable:SetWorkAction(ACTIONS.MINE) -- ACTIONS.HAMMER
  86.     inst.components.workable:SetWorkLeft(4) -- TUNING.ROCKS_MINE
  87.     inst.components.workable:SetOnFinishCallback(onhammered)
  88.     --inst.components.workable:SetOnWorkCallback(onhit)
  89.  
  90.     inst:AddComponent("inspectable")
  91.     inst.components.inspectable.getstatus = getstatus
  92.  
  93.     MakeHauntableWork(inst)
  94.  
  95.     local function OnTurnedOff(_light)
  96.         inst:RemoveEventCallback("animover", OnTurnedOff, _light)
  97.         inst.AnimState:PlayAnimation("idle")
  98.         inst._back.AnimState:PlayAnimation("idle")
  99.         _light.AnimState:PlayAnimation("light_idle")
  100.     end
  101.  
  102.     inst:ListenForEvent("atriumpowered", function(_, ispowered)
  103.         if ispowered then
  104.             if not inst.Light:IsEnabled() then
  105.                 inst.Light:Enable(true)
  106.                 inst:RemoveEventCallback("animover", OnTurnedOff, inst._light)
  107.                 inst.AnimState:PlayAnimation("idle_active")
  108.                 inst._back.AnimState:PlayAnimation("idle_active")
  109.                 inst._light.AnimState:PlayAnimation("light_turn_on")
  110.                 inst._light.AnimState:PushAnimation("light_idle_active", false)
  111.             end
  112.         elseif inst.Light:IsEnabled() then
  113.             inst.Light:Enable(false)
  114.             inst:ListenForEvent("animover", OnTurnedOff, inst._light)
  115.             inst._light.AnimState:PlayAnimation("light_turn_off")
  116.         end
  117.     end, TheWorld)
  118.  
  119.     return inst
  120. end
  121.  
  122. local function OnEntityReplicated(inst)
  123.     local parent = inst.entity:GetParent()
  124.     if parent ~= nil and parent.prefab == "atrium_light" then
  125.         table.insert(parent.highlightchildren, inst)
  126.     end
  127. end
  128.  
  129. local function back_fn()
  130.     local inst = CreateEntity()
  131.  
  132.     inst.entity:AddTransform()
  133.     inst.entity:AddAnimState()
  134.     inst.entity:AddNetwork()
  135.  
  136.     inst.AnimState:SetBank("atrium_light")
  137.     inst.AnimState:SetBuild("atrium_light")
  138.     inst.AnimState:PlayAnimation("idle")
  139.     inst.AnimState:Hide("front")
  140.  
  141.     inst:AddTag("FX")
  142.     --inst:AddTag("NOCLICK")
  143.  
  144.     inst.entity:SetPristine()
  145.  
  146.     if not TheWorld.ismastersim then
  147.         inst.OnEntityReplicated = OnEntityReplicated
  148.  
  149.         return inst
  150.     end
  151.  
  152.     inst.persists = false
  153.  
  154.     return inst
  155. end
  156.  
  157. local function light_fn()
  158.     local inst = CreateEntity()
  159.  
  160.     inst.entity:AddTransform()
  161.     inst.entity:AddAnimState()
  162.     inst.entity:AddNetwork()
  163.  
  164.     inst.AnimState:SetBank("atrium_light")
  165.     inst.AnimState:SetBuild("atrium_light")
  166.     inst.AnimState:PlayAnimation("light_idle")
  167.     inst.AnimState:SetFinalOffset(1)
  168.  
  169.    
  170.  
  171.     inst:AddTag("DECOR") --"FX" will catch mouseover
  172.     --inst:AddTag("NOCLICK")
  173.  
  174.     inst.entity:SetPristine()
  175.  
  176.     if not TheWorld.ismastersim then
  177.         inst.OnEntityReplicated = OnEntityReplicated
  178.  
  179.         return inst
  180.     end
  181.  
  182.  
  183.  
  184.     inst.persists = false
  185.  
  186.     return inst
  187. end
  188.  
  189. return Prefab("atrium_light", fn, assets, prefabs),
  190.     Prefab("atrium_light_back", back_fn, assets),
  191.     Prefab("atrium_light_light", light_fn, assets)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement