Advertisement
Cat_in_the_hat

soul seeker ability (beta testing )

Jun 14th, 2024 (edited)
167
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.76 KB | Gaming | 0 0
  1. local skulls = {}
  2.  
  3. local function getRandomSpeed()
  4.     return math.random() * 0.2 + 0.4
  5. end
  6.  
  7. local function getRandomRadius()
  8.     return math.random(7, 12)
  9. end
  10.  
  11. local function getRandomAxis()
  12.     local axes = {
  13.         Vector3.new(1, 0, 0),
  14.         Vector3.new(0, 1, 0),
  15.         Vector3.new(0, 0, 1)
  16.     }
  17.     return axes[math.random(1, #axes)]
  18. end
  19.  
  20. local function getRandomScale()
  21.     return math.random(3.2, 5)
  22. end
  23.  
  24. local shotSoundList = {
  25.     "CHRISTMAS_ELDERTREE_PICKUP",
  26.     "CHRISTMAS_ELDERTREE_PICKUP_2",
  27.     "CHRISTMAS_ELDERTREE_PICKUP_3"
  28. }
  29. local currentShotSoundIndex = 1
  30.  
  31. local function spawnOrbitingSkull(player)
  32.     local playerEntity = player:getEntity()
  33.     local model = ModelService.createModel("eldertree_orb", playerEntity:getPosition() + Vector3.new(0, 3.2, 0))
  34.     model:setScale(getRandomScale())
  35.     model:setAnchored(true)
  36.     model:setCollidable(false)
  37.     SoundService.playSound(SoundType.WARLOCK_SIPHON_START, model:getPosition())
  38.  
  39.     local radius = getRandomRadius()
  40.     local angle = 0
  41.     local angleIncrement = getRandomSpeed()
  42.     local spinAxis = getRandomAxis()
  43.     local spinSpeed = getRandomSpeed()
  44.  
  45.     local function orbit()
  46.         while playerEntity:isAlive() do
  47.             wait(0.01)
  48.             local playerPosition = playerEntity:getPosition()
  49.             local newX = playerPosition.x + radius * math.cos(angle)
  50.             local newZ = playerPosition.z + radius * math.sin(angle)
  51.  
  52.             model:setPosition(Vector3.new(newX, playerPosition.y + 2, newZ))
  53.             angle = angle + angleIncrement
  54.  
  55.             if angle > 2 * math.pi then
  56.                 angle = angle - 2 * math.pi
  57.             end
  58.  
  59.             model:setRotation(model:getRotation() + spinAxis * spinSpeed)
  60.         end
  61.         model:destroy()
  62.     end
  63.  
  64.     task.spawn(orbit)
  65.  
  66.     task.spawn(function()
  67.         while playerEntity:isAlive() do
  68.             wait(3)
  69.             radius = getRandomRadius()
  70.             angleIncrement = getRandomSpeed()
  71.         end
  72.     end)
  73.  
  74.     task.spawn(function()
  75.         while playerEntity:isAlive() do
  76.             wait(1.5)
  77.             spinAxis = getRandomAxis()
  78.             spinSpeed = getRandomSpeed()
  79.         end
  80.     end)
  81.  
  82.     task.spawn(function()
  83.         while playerEntity:isAlive() do
  84.             wait(math.random(1, 4))
  85.             SoundService.playSound(SoundType.BLOOD_HARVEST_GRIM_REAPER_CHANNEL, model:getPosition())
  86.         end
  87.     end)
  88.  
  89.     task.spawn(function()
  90.         while playerEntity:isAlive() do
  91.             wait(1)
  92.             model:setScale(getRandomScale())
  93.         end
  94.     end)
  95.  
  96.     if not skulls[player] then
  97.         skulls[player] = {}
  98.     end
  99.     table.insert(skulls[player], {model = model, orbitTask = orbit})
  100. end
  101.  
  102. Events.EntityDeath(function(event)
  103.     local killer = event.killer
  104.     if killer then
  105.         local player = killer:getPlayer()
  106.         if player then
  107.             spawnOrbitingSkull(player)
  108.         end
  109.     end
  110. end)
  111.  
  112. local soulSeekerAbilityName = "soul seeker"
  113.  
  114. AbilityService.createAbility(soulSeekerAbilityName, KeyCode.Z, {
  115.     maxProgress = 30,
  116.     progressPerUse = 10,
  117.     iconImage = "rbxassetid://10653373712"
  118. })
  119.  
  120. local function enableSoulSeekerForPlayer(player)
  121.     AbilityService.enableAbility(player, soulSeekerAbilityName)
  122. end
  123.  
  124. local function enableSoulSeekerForAllPlayers()
  125.     for _, player in pairs(PlayerService.getPlayers()) do
  126.         enableSoulSeekerForPlayer(player)
  127.     end
  128. end
  129.  
  130. enableSoulSeekerForAllPlayers()
  131.  
  132. Events.PlayerAdded(function(event)
  133.     local player = event.player
  134.     task.spawn(function()
  135.         wait(5)
  136.         enableSoulSeekerForPlayer(player)
  137.     end)
  138. end)
  139.  
  140. Events.UseAbility(function(event)
  141.     if event.abilityName == soulSeekerAbilityName then
  142.         local player = event.entity:getPlayer()
  143.  
  144.         local function useSoulSeeker(player)
  145.             local playerSkulls = skulls[player]
  146.             if not playerSkulls or #playerSkulls == 0 then
  147.                 MessageService.sendError(player, "You need to kill someone first to use the ability.")
  148.                 return false
  149.             end
  150.  
  151.             local skullData = table.remove(playerSkulls, math.random(1, #playerSkulls))
  152.             skullData.model:destroy()
  153.             return true
  154.         end
  155.  
  156.         if not useSoulSeeker(player) then
  157.             return
  158.         end
  159.  
  160.         local function createNewSkull()
  161.             local offset = Vector3.new(0, -1, -2.5)
  162.             local position = (event.entity:getCFrame() * CFrame.new(offset))
  163.             local newSkullModel = ModelService.createItemModel("headhunt_skull", Vector3.new(0, 0, 0))
  164.             newSkullModel:setAnchored(true)
  165.             newSkullModel:setCollidable(false)
  166.             newSkullModel:setScale(3.7)
  167.             newSkullModel:setCFrame(position)
  168.             local stepSize = Vector3.new(0, 0, -2)
  169.             local moveInterval = 0.003
  170.  
  171.             SoundService.playSound(SoundType.FIRE_SHEEP_BREAK, newSkullModel:getPosition())
  172.  
  173.             task.spawn(function()
  174.                 repeat
  175.                     local newPosition = newSkullModel:getCFrame() * CFrame.new(stepSize)
  176.                     newSkullModel:setCFrame(newPosition)
  177.                     task.wait(moveInterval)
  178.                 until not newSkullModel
  179.             end)
  180.  
  181.             task.spawn(function()
  182.                 while newSkullModel do
  183.                     SoundService.playSound(SoundType[shotSoundList[currentShotSoundIndex]], newSkullModel:getPosition())
  184.                     currentShotSoundIndex = (currentShotSoundIndex % #shotSoundList) + 1
  185.                     task.wait(0.3)
  186.                 end
  187.             end)
  188.  
  189.             task.spawn(function()
  190.                 while newSkullModel do
  191.                     local nearbyEntities = EntityService.getNearbyEntities(newSkullModel:getPosition(), 8)
  192.                     if nearbyEntities then
  193.                         for _, entity in pairs(nearbyEntities) do
  194.                             local entityPlayer = entity:getPlayer()
  195.                             local entityTeam = TeamService.getTeam(entityPlayer)
  196.                             local eventTeam = TeamService.getTeam(event.entity:getPlayer())
  197.  
  198.                             if entityPlayer and entityTeam and eventTeam and entityTeam == eventTeam then
  199.                                 print("can't damge player teammates")
  200.                             else
  201.                                 CombatService.damage(entity, 50)
  202.  
  203.                                 local reaperLightPosition = entity:getPosition() + Vector3.new(0, 6, 0)
  204.                                 local reaperLightModel = ModelService.createItemModel("cluster_bomb", reaperLightPosition)
  205.                                 reaperLightModel:setAnchored(true)
  206.                                 reaperLightModel:setCollidable(false)
  207.                                 reaperLightModel:setScale(5)
  208.  
  209.                                 StatusEffectService.giveEffect(entity, "werewolf_fear", 1)
  210.                                 StatusEffectService.giveEffect(entity, "greased", 2)
  211.                                 StatusEffectService.giveEffect(entity, "poison", 6)
  212.                                 StatusEffectService.giveEffect(entity, "grounded", 1)
  213.                                 StatusEffectService.giveEffect(entity, "bleed", 4)
  214.                                 StatusEffectService.giveEffect(entity, "forest_4", 5)
  215.                                 StatusEffectService.giveEffect(entity, "dizzy", 3)
  216.  
  217.                                 SoundService.playSound(SoundType.GRIMOIRE_CAST_COMPLETE, entity:getPosition() + Vector3.new(0, 2, 0))
  218.  
  219.                                 task.spawn(function()
  220.                                     local timer = 5
  221.                                     while timer > 0 do
  222.                                         task.wait(1)
  223.                                         timer = timer - 1
  224.                                     end
  225.                                     reaperLightModel:destroy()
  226.                                 end)
  227.  
  228.                                 task.spawn(function()
  229.                                     while reaperLightModel do
  230.                                         local newPosition = entity:getPosition() + Vector3.new(0, 7, 0)
  231.                                         reaperLightModel:setPosition(newPosition)
  232.                                         task.wait(0)
  233.                                     end
  234.                                 end)
  235.                             end
  236.                         end
  237.                     end
  238.                     task.wait(0.15)
  239.                 end
  240.             end)
  241.  
  242.             task.spawn(function()
  243.                 task.wait(10)
  244.                 newSkullModel:destroy()
  245.             end)
  246.         end
  247.  
  248.         createNewSkull()
  249.  
  250.         task.wait(0.5)
  251.     end
  252. end)
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement