Starly124

Untitled

Feb 12th, 2015
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. local assets =
  2. {
  3. Asset("ANIM", "anim/books.zip"),
  4.  
  5. Asset("ATLAS", "images/inventoryimages/book_rabbit.xml"),
  6. Asset("IMAGE", "images/inventoryimages/book_rabbit.tex"),
  7.  
  8. }
  9.  
  10. local prefabs =
  11. {
  12. "book_fx",
  13. }
  14.  
  15. local rabbit_uses = 5
  16.  
  17. local max_rabbits = 20
  18.  
  19. local med_rabbits = 10
  20.  
  21. local function getspawnpoint(pt)
  22.  
  23. local theta = math.random() * 2 * PI
  24. local radius = 6+math.random()*6
  25.  
  26. local result_offset = FindValidPositionByFan(theta, radius, 12, function(offset)
  27. local ground = GetWorld()
  28. local spawn_point = pt + offset
  29. if not (ground.Map and ground.Map:GetTileAtPoint(spawn_point.x, spawn_point.y, spawn_point.z) == GROUND.IMPASSABLE) then
  30. return true
  31. end
  32. return false
  33. end)
  34.  
  35. if result_offset then
  36. return pt+result_offset
  37. end
  38. end
  39.  
  40. local function rabbitfn(inst, reader)
  41.  
  42. reader.components.sanity:DoDelta(-TUNING.SANITY_HUGE)
  43. local num = 20 + math.random(10)
  44.  
  45. local x, y, z = reader.Transform:GetWorldPosition()
  46. local ents = TheSim:FindEntities(x,y,z, 10, nil, nil, {'magicalrabbit'})
  47. if #ents > max_rabbits then
  48. num = 0
  49. reader.components.talker:Say(GetString(reader.prefab, "There's too many rabbits already!"))
  50. elseif #ents > med_rabbits then
  51. reader.components.talker:Say(GetString(reader.prefab, "There's already a lot of rabbits."))
  52. num = 10 + math.random(10)
  53. end
  54.  
  55. if num > 0 then
  56. reader:StartThread(function()
  57. for k = 1, num do
  58. local pt = getspawnpoint(Vector3(reader.Transform:GetWorldPosition()))
  59. if pt then
  60. local rabbit = SpawnPrefab("rabbit")
  61. rabbit:AddTag("magicalrabbit")
  62. local spawn_point = Vector3(pt.x, pt.y, pt.z)
  63. rabbit.Transform:SetPosition(spawn_point)
  64. end
  65. Sleep(math.random(.2, .25))
  66. end
  67. end)
  68. end
  69.  
  70. return true
  71.  
  72. end
  73.  
  74. local function onfinished(inst)
  75. inst:Remove()
  76. end
  77.  
  78. local function fn(Sim)
  79.  
  80. local inst = CreateEntity()
  81. local trans = inst.entity:AddTransform()
  82. local anim = inst.entity:AddAnimState()
  83. local sound = inst.entity:AddSoundEmitter()
  84. anim:SetBank("books")
  85. anim:SetBuild("books")
  86.  
  87. anim:PlayAnimation(name)
  88. MakeInventoryPhysics(inst)
  89.  
  90. -----------------------------------
  91.  
  92. inst:AddComponent("inspectable")
  93. inst:AddComponent("book")
  94. inst.components.book.onread = rabbitfn
  95.  
  96. inst:AddComponent("characterspecific")
  97. inst.components.characterspecific:SetOwner("wickerbottom")
  98.  
  99. inst:AddComponent("inventoryitem")
  100. inst.components.inventoryitem.imagename = "book_rabbit"
  101. inst.components.inventoryitem.atlasname = "images/inventoryimages/book_rabbit.xml"
  102.  
  103. inst:AddComponent("finiteuses")
  104. inst.components.finiteuses:SetMaxUses(rabbit_uses)
  105. inst.components.finiteuses:SetUses(rabbit_uses)
  106. inst.components.finiteuses:SetOnFinished(onfinished)
  107.  
  108. MakeSmallBurnable(inst)
  109. MakeSmallPropagator(inst)
  110.  
  111. return inst
  112.  
  113. end
  114.  
  115. return Prefab( "common/book_rabbit", fn, assets, prefabs)
Advertisement
Add Comment
Please, Sign In to add comment