--[[
####
#####*
######
########
########
##########
*##########
############
*#############
################################################
##################################################
##################################################
##############################################
#########################################
####################################
###############################*
##########################
########################
#########################
##########################
###########################+
############################
############## ##############
########### ###########
########## ##########
####### #######
##### #####
| <========V=============================^=======> |
| ---------<-------POSEIDON-------------->-------- |
| <========V=============================^=======> |
]]
--[[
(\ written by wreyking /)
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣌
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⣙⠿
⠀⠙⢿⣿⣿⣿⣿⣿⣯⡛⣛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄
⣧⣼⡷⠮⢍⣛⠿⣿⣿⣿⣮⣙⢿⣶⡎⢩⣭⡛⠻⢿⣿⣿⣿⣿⣿
⡟⢡⣶⣶⣶⣦⡉⠲⣬⣙⠻⠿⣷⣝⠧⠈⢿⡷⠹⣷⣶⣭⣽⣿⣿
⠀⣿⣿⣿⡟⠁⠀⠀⠈⢻⣿⣷⣶⣬⣥⣄⢘⣷⡀⣿⣿⣿⣿⣿⡀
⠀⣿⣿⣿⡽⣿⣷⡔⢷⡀⢻⣿⣿⠿⢿⠿⣧⣹⣿⣽⣿⣿⣿⣿⡇
⠚⣿⣿⣿⣷⣴⣿⣦⠘⣷⢸⡿⢥⣶⣿⣇⣼⢿⣿⣿⣿⣿⣿⣿⠀
⢷⡌⢿⣿⣿⣿⣿⣿⣷⣿⣿⣷⣤⣼⣿⣿⡟⡈⣿⣿⣿⣿⣿⡏⠀
⡊⢻⣄⠹⣿⣿⣿⣿⣿⣿⣿⣷⡈⠉⡛⠋⠀⠃⢹⣿⣿⣿⡿⢁⣾
⢟⠮⡻⣦⡈⢿⣿⣿⣿⣿⣿⣿⣿⣦⡈⠀⣴⡖⣸⣿⣿⡿⠀⢾⣿
⡈⢿⣦⣌⣳⣦⡈⠿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣴⣿⣿⣿⣷⣦⡀⠻
(\ written by wreyking /)
--]]
--==[ CLIENT SCRIPT ]==--
--[ Services ]--
local ContextActionService = game:GetService("ContextActionService")
local Players = game:GetService("Players")
local RS = game:GetService("ReplicatedStorage")
local RuS = game:GetService("RunService")
local CAS = game:GetService("ContextActionService")
--[ SB ]--
local scriptArgs = table.pack(...)
local debug = scriptArgs[1]
print(debug, scriptArgs, ...)
if not debug then
print = function() end
warn = function() end
end
--[ Variables ]--
local owner = Players.LocalPlayer
local storeInScript = (game.PlaceId == 15589112741)
local scriptName = "poseidon"
local serverScript = workspace:WaitForChild(scriptName.."/"..owner.Name)
local scriptRemote = ((storeInScript and serverScript) or RS):WaitForChild("ScriptRemote".."/"..owner.Name)
local scriptRemoteF = ((storeInScript and serverScript) or RS):WaitForChild("ScriptRemoteFunction".."/"..owner.Name)
local VFXFolder = ((storeInScript and serverScript) or workspace):WaitForChild("VFXFolder".."/"..owner.Name)
local ObjectsFolder = ((storeInScript and serverScript) or workspace):WaitForChild("ObjectsFolder".."/"..owner.Name)
local abilityData = {
Aegis = {
Keybind = Enum.KeyCode.Q,
CD = 0.5,
},
Empyrean = {
Keybind = Enum.KeyCode.E,
CD = 0.1,
},
Jupiter = {
Keybind = Enum.KeyCode.R,
CD = 1,
MaxHoldTime = 5,
},
Zephyr = {
Keybind = Enum.KeyCode.F,
CD = 1,
RagdollTime = 5
}
}
local toolName = "Poseidon_Tool"
local abilityVariables = {}
abilityVariables.OnCooldown = {}
abilityVariables.UsedMoves = {}
abilityVariables.MagicColor = Color3.new(0, 0, 0)
local usingMove = false
local moveBeingUsed = nil
--[ Functions ]--
local abilities
abilities = {
Aegis = function(actionName, inputState, inputObject)
if abilityVariables.OnCooldown[actionName] then warn(tostring(actionName).." is currently on cooldown") return end
local char = owner.Character
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
local mouse = owner:GetMouse()
mouse.TargetFilter = VFXFolder
if inputState == Enum.UserInputState.Begin then
if usingMove then return end
if abilityVariables.UsedMoves[actionName] then return end
if not char:FindFirstChild(toolName) then return end
usingMove = true
moveBeingUsed = actionName
abilityVariables.UsedMoves[actionName] = tick()
print(actionName.." on client")
local rootAttachment = root:FindFirstChild("RootAttachment")
-- Freeze character in place using AlignPosition
local alignPosition = Instance.new("AlignPosition")
alignPosition.Name = "FreezePosition"
alignPosition.Attachment0 = rootAttachment
alignPosition.Mode = Enum.PositionAlignmentMode.OneAttachment
alignPosition.Position = root.Position
alignPosition.MaxForce = 50000000000 -- Adjust force limits to match needs
alignPosition.MaxVelocity = math.huge
alignPosition.Responsiveness = 50
alignPosition.ApplyAtCenterOfMass = true
alignPosition.RigidityEnabled = false
alignPosition.Parent = root
-- Create AlignOrientation for smooth turning
local alignOrientation = Instance.new("AlignOrientation")
alignOrientation.Name = "TrackMouseOrientation"
alignOrientation.Attachment0 = rootAttachment
alignOrientation.Mode = Enum.OrientationAlignmentMode.OneAttachment
alignOrientation.MaxTorque = 500000
alignOrientation.Responsiveness = 50
alignOrientation.Parent = root
-- Switch humanoid to PlatformStand to disable default movement
hum:ChangeState(Enum.HumanoidStateType.PlatformStanding)
-- Loop to update facing direction
task.spawn(function()
while usingMove do
local targetPosition = mouse.Hit.Position
alignOrientation.CFrame = CFrame.lookAt(root.Position, targetPosition)
task.wait(0.01)
end
end)
scriptRemote:FireServer(scriptName, actionName, "Begin")
print("fired server: ", actionName)
elseif inputState == Enum.UserInputState.End then
if not abilityVariables.UsedMoves[actionName] then return end
local alignPosition = root:FindFirstChild("FreezePosition")
local alignOrientation = root:FindFirstChild("TrackMouseOrientation")
task.delay(0.35, function()
if alignPosition then alignPosition:Destroy() end
if alignOrientation then alignOrientation:Destroy() end
scriptRemote:FireServer(scriptName, actionName, "End")
end)
task.delay(0.35, function()
usingMove = false
moveBeingUsed = nil
abilityVariables.UsedMoves[actionName] = nil
end)
abilityVariables.OnCooldown[actionName] = true
task.delay(abilityData[actionName].CD, function()
abilityVariables.OnCooldown[actionName] = nil
end)
end
end,
Empyrean = function(actionName, inputState, inputObject)
if abilityVariables.OnCooldown[actionName] then warn(tostring(actionName).." is currently on cooldown") return end
local char = owner.Character
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if inputState == Enum.UserInputState.Begin then
if usingMove then return end
if abilityVariables.UsedMoves[actionName] then return end
if not char:FindFirstChild(toolName) then return end
usingMove = true
moveBeingUsed = actionName
abilityVariables.UsedMoves[actionName] = tick()
print(actionName.." on client")
local walkPartConnection
walkPartConnection = RuS.Heartbeat:Connect(function()
if not usingMove or not abilityVariables.UsedMoves[actionName] then
walkPartConnection:Disconnect()
walkPartConnection = nil
end
local walkPart = Instance.new("Part")
walkPart.Name = "PoseidonWalkPart"
walkPart.Anchored = true
walkPart.CanCollide = true
walkPart.Transparency = 1
walkPart.Size = Vector3.new(5, 0.01, 5)
walkPart.CFrame = CFrame.new(root.Position + Vector3.new(0, -3.025, 0))
walkPart.Parent = VFXFolder
task.wait(0.1)
if walkPart then walkPart:Destroy() end
end)
scriptRemote:FireServer(scriptName, actionName, "Begin")
print("fired server: ", actionName)
elseif inputState == Enum.UserInputState.End then
if not abilityVariables.UsedMoves[actionName] then return end
task.delay(0.35, function()
scriptRemote:FireServer(scriptName, actionName, "End")
end)
task.delay(0, function()
usingMove = false
moveBeingUsed = nil
abilityVariables.UsedMoves[actionName] = nil
end)
abilityVariables.OnCooldown[actionName] = true
task.delay(abilityData[actionName].CD, function()
abilityVariables.OnCooldown[actionName] = nil
end)
end
end,
Jupiter = function(actionName, inputState, inputObject)
if abilityVariables.OnCooldown[actionName] then warn(tostring(actionName).." is currently on cooldown") return end
local char = owner.Character
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
local minJumpVelocity = 150
local maxJumpVelocity = 500
if inputState == Enum.UserInputState.Begin then
if usingMove then return end
if abilityVariables.UsedMoves[actionName] then return end
if not char:FindFirstChild(toolName) then return end
usingMove = true
moveBeingUsed = actionName
abilityVariables.UsedMoves[actionName] = tick()
local usedTime = abilityVariables.UsedMoves[actionName]
print(actionName.." on client")
abilityVariables.LastWS = hum.WalkSpeed
hum.WalkSpeed = 8
scriptRemote:FireServer(scriptName, actionName, "Begin")
task.spawn(function()
repeat task.wait() until not usedTime or ((tick() - usedTime) >= abilityData[actionName].MaxHoldTime)
if not usedTime then return end
abilities.Jupiter(actionName, Enum.UserInputState.End, inputObject)
end)
elseif inputState == Enum.UserInputState.End then
if not abilityVariables.UsedMoves[actionName] then return end
local usedTime = abilityVariables.UsedMoves[actionName]
local holdDuration = math.clamp(tick() - usedTime, 0, abilityData[actionName].MaxHoldTime)
-- Calculate jump velocity based on hold duration
local lerpFactor = holdDuration / abilityData[actionName].MaxHoldTime
scriptRemote:FireServer(scriptName, actionName, "End", lerpFactor)
local jumpVelocity = minJumpVelocity + (maxJumpVelocity - minJumpVelocity) * lerpFactor
-- Set up the LinearVelocity constraint
local linearVelocity = Instance.new("LinearVelocity")
local rootAttachment = root:FindFirstChild("RootAttachment") or Instance.new("Attachment")
rootAttachment.Parent = root
linearVelocity.Attachment0 = rootAttachment
linearVelocity.VectorVelocity = Vector3.new(0,jumpVelocity*2,0)
linearVelocity.RelativeTo = Enum.ActuatorRelativeTo.World
linearVelocity.MaxForce = 10000*50 -- Ensure it’s strong enough to counter gravity
linearVelocity.Parent = root
hum.WalkSpeed = abilityVariables.LastWS or 16
task.delay(0.2, function()
linearVelocity.VectorVelocity = Vector3.new(0,jumpVelocity,0)
--TS:Create(linearVelocity, TweenInfo.new(0.3, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {VectorVelocity = Vector3.new(0, jumpVelocity, 0)}):Play()
end)
task.delay(0.35, function()
usingMove = false
moveBeingUsed = nil
abilityVariables.UsedMoves[actionName] = nil
end)
task.delay(0.2, function()
if linearVelocity then linearVelocity:Destroy() end
end)
abilityVariables.OnCooldown[actionName] = true
task.delay(abilityData[actionName].CD, function()
abilityVariables.OnCooldown[actionName] = nil
end)
end
end,
Zephyr = function(actionName, inputState, inputObject)
if abilityVariables.OnCooldown[actionName] then warn(tostring(actionName).." is currently on cooldown") return end
local char = owner.Character
local root = char:FindFirstChild("HumanoidRootPart")
local hum = char:FindFirstChildOfClass("Humanoid")
if inputState ~= Enum.UserInputState.Begin then return end
--[[if usingMove then return end
if abilityVariables.UsedMoves[actionName] then return end]]
if not char:FindFirstChild(toolName) then return end
hum:ChangeState(Enum.HumanoidStateType.Ragdoll)
task.delay(abilityData[actionName].RagdollTime, function()
if hum:GetState() == Enum.HumanoidStateType.Ragdoll then
hum:ChangeState(Enum.HumanoidStateType.GettingUp)
end
end)
end,
}
local function load_abilities()
for name, data in pairs(abilityData) do
CAS:BindAction(name, abilities[name], false, data.Keybind)
end
end
--[ Script ]--
print(scriptName.." client script loaded on "..Players.LocalPlayer.Name)
repeat task.wait() until owner.Character or owner.CharacterAdded:Wait()
print("Owner character: "..owner.Character.Name.." gotten")
--[ Setup
load_abilities()
--[ Event Connections
owner.Backpack.ChildAdded:Connect(function(child)
if child.Name == toolName and moveBeingUsed then
abilities[moveBeingUsed](moveBeingUsed, Enum.UserInputState.End)
end
end)
--[[
####
#####*
######
########
########
##########
*##########
############
*#############
################################################
##################################################
##################################################
##############################################
#########################################
####################################
###############################*
##########################
########################
#########################
##########################
###########################+
############################
############## ##############
########### ###########
########## ##########
####### #######
##### #####
| <========V=============================^=======> |
| ---------<-------POSEIDON-------------->-------- |
| <========V=============================^=======> |
]]
--[[
(\ written by wreyking /)
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣌
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⣙⠿
⠀⠙⢿⣿⣿⣿⣿⣿⣯⡛⣛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄
⣧⣼⡷⠮⢍⣛⠿⣿⣿⣿⣮⣙⢿⣶⡎⢩⣭⡛⠻⢿⣿⣿⣿⣿⣿
⡟⢡⣶⣶⣶⣦⡉⠲⣬⣙⠻⠿⣷⣝⠧⠈⢿⡷⠹⣷⣶⣭⣽⣿⣿
⠀⣿⣿⣿⡟⠁⠀⠀⠈⢻⣿⣷⣶⣬⣥⣄⢘⣷⡀⣿⣿⣿⣿⣿⡀
⠀⣿⣿⣿⡽⣿⣷⡔⢷⡀⢻⣿⣿⠿⢿⠿⣧⣹⣿⣽⣿⣿⣿⣿⡇
⠚⣿⣿⣿⣷⣴⣿⣦⠘⣷⢸⡿⢥⣶⣿⣇⣼⢿⣿⣿⣿⣿⣿⣿⠀
⢷⡌⢿⣿⣿⣿⣿⣿⣷⣿⣿⣷⣤⣼⣿⣿⡟⡈⣿⣿⣿⣿⣿⡏⠀
⡊⢻⣄⠹⣿⣿⣿⣿⣿⣿⣿⣷⡈⠉⡛⠋⠀⠃⢹⣿⣿⣿⡿⢁⣾
⢟⠮⡻⣦⡈⢿⣿⣿⣿⣿⣿⣿⣿⣦⡈⠀⣴⡖⣸⣿⣿⡿⠀⢾⣿
⡈⢿⣦⣌⣳⣦⡈⠿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣴⣿⣿⣿⣷⣦⡀⠻
(\ written by wreyking /)
--]]
--==[ SERVER SCRIPT ]==--
--[ Services ]--
local Players = game:GetService("Players")
local RS = game:GetService("ReplicatedStorage")
local RuS = game:GetService("RunService")
local TS = game:GetService("TweenService")
local HTTP = game:GetService("HttpService")
local Chat = game:GetService("Chat")
--[ SB ]--
if not owner then owner = Players:WaitForChild(script:GetAttribute("owner")) end
local sandboxed = (game.PlaceId == 11510416200 or game.PlaceId == 15589112741 or game.PlaceId == 126783576555525 or game.PlaceId == 79868761121850)
local storeInScript = (game.PlaceId == 15589112741)
local scriptArgs = table.pack(...)
local debug = scriptArgs[1]
if not debug then
print = function() end
warn = function() end
end
--[ Assets ]--
local poseidonImageID = "rbxassetid://93092843927249"
local meshes = {
Shockwave = "rbxassetid://643098245",
HalfSphere = "rbxassetid://5479931928"
}
local textures = {
Shockwave = "rbxassetid://643064975"
}
local defaultSounds = {
Shining = "http://www.roblox.com/asset/?id=374289727",
Pulse = "http://www.roblox.com/asset/?id=431105970"
}
local gameSounds = {}
local sounds = gameSounds[game.PlaceId] or defaultSounds
if not gameSounds[game.PlaceId] then warn("No sounds for this place ID, falling back to default IDs") end
--[ Variables ]--
local scriptName = "poseidon"
local url = "http://coolaf.com/run/snippets/h9fdb674tu/raw/"
local clientScriptLink = game.HttpService:GetAsync(url.."client.lua")
local animations = loadstring(game.HttpService:GetAsync(url.."animations.lua"))
local animationTrack = loadstring(HTTP:GetAsync("https://raw.githubusercontent.com/MechaXYZ/Modules/main/Anitracker.lua"))()
local loadedAnimations = {}
local connectionsTable = {}
local scriptsTable = {}
local instancesTable = {}
-- Determine parents
local remoteParent = (storeInScript and script) or RS
local folderParent = (storeInScript and script) or workspace
-- ScriptRemote (RemoteEvent)
local scriptRemoteName = "ScriptRemote" .. "/" .. owner.Name
local scriptRemote = remoteParent:FindFirstChild(scriptRemoteName)
if not scriptRemote then
scriptRemote = Instance.new("RemoteEvent")
scriptRemote.Name = scriptRemoteName
scriptRemote.Parent = remoteParent
table.insert(instancesTable, scriptRemote)
end
-- ScriptRemoteFunction (RemoteFunction)
local scriptRemoteFName = "ScriptRemoteFunction" .. "/" .. owner.Name
local scriptRemoteF = remoteParent:FindFirstChild(scriptRemoteFName)
if not scriptRemoteF then
scriptRemoteF = Instance.new("RemoteFunction")
scriptRemoteF.Name = scriptRemoteFName
scriptRemoteF.Parent = remoteParent
table.insert(instancesTable, scriptRemoteF)
end
-- VFXFolder (Folder)
local VFXFolderName = "VFXFolder" .. "/" .. owner.Name
local VFXFolder = folderParent:FindFirstChild(VFXFolderName)
if not VFXFolder then
VFXFolder = Instance.new("Folder")
VFXFolder.Name = VFXFolderName
VFXFolder.Parent = folderParent
table.insert(instancesTable, VFXFolder)
end
-- ObjectsFolder (Folder)
local ObjectsFolderName = "ObjectsFolder" .. "/" .. owner.Name
local ObjectsFolder = folderParent:FindFirstChild(ObjectsFolderName)
if not ObjectsFolder then
ObjectsFolder = Instance.new("Folder")
ObjectsFolder.Name = ObjectsFolderName
ObjectsFolder.Parent = folderParent
table.insert(instancesTable, ObjectsFolder)
end
local userColors = {
wreyking = Color3.new(0,0,0)
}
local abilityVariables = {}
abilityVariables.OnCooldown = {}
abilityVariables.UsedMoves = {}
abilityVariables.MagicColor = userColors[owner.Name] or Color3.new(0, 1, 0.8)
local usingMove = false
--[ Functions ]--
local function self_destruct()
--destroying = true
-- Disconnect all connections in the connectionsTable
for i = 1, #connectionsTable do
local connection = connectionsTable[i]
if connection then
print("Disconnecting " .. tostring(connection))
connection:Disconnect()
end
end
-- Destroy all scripts in the scriptsTable
for i = 1, #scriptsTable do
local thatScript = scriptsTable[i]
if thatScript then
print("Destroying " .. thatScript.Name)
thatScript:Destroy()
end
end
-- Destroy all instances in the instancesTable
for i = 1, #instancesTable do
local instance = instancesTable[i]
if instance then
print("Destroying " .. instance.Name)
instance:Destroy()
end
end
-- Final cleanup
print("Cleaned up connections, scripts, and instances. Now deleting main script...")
script:Destroy()
end
local function load_animations(animationData)
local animations = animationData()
for i = 1, #animations do
local animData = animations[i]
local animation = animData.Data
local newTrack = animationTrack.new()
newTrack.lerpFactor = 0.15
newTrack.Name = animData.Name
if animData.Looped then
newTrack.Looped = true
end
if animData.Weight then
newTrack:AdjustWeight(animData.Weight)
end
newTrack:setAnimation(animation)
newTrack:setRig(owner.Character)
loadedAnimations[animData.Name] = newTrack
end
end
local function new_sound(id, vol, pitch, pitchFX)
if not id then warn("No ID, update gameSounds.") return end
local s = Instance.new("Sound")
s.SoundId = id
s.Volume = vol or 1
s.PlaybackSpeed = pitch or 1
if pitchFX then
local pitcher = Instance.new("PitchShiftSoundEffect")
pitcher.Name = "Shift"
pitcher.Octave = pitchFX
pitcher.Parent = s
end
return s
end
local function debris(instance, delay)
task.delay(delay, function()
if instance then instance:Destroy() end
end)
end
local function get_markers(animTrack)
local markers = animTrack.KeyframeMarkers
local markerTable = {}
for i = 1, #markers do
local marker = markers[i]
markerTable[marker.Name] = {
Name = marker.Name,
Value = marker.Value,
Time = marker.Time
}
end
return markerTable
end
local VFXFunctions
VFXFunctions = {
Shockwave = function(shockwaveData)
local shockwave = Instance.new("Part")
shockwave.Name = "Shockwave"
shockwave.Anchored = true
shockwave.Transparency = 0.015
shockwave.Size = Vector3.new(1,1,1)
shockwave.CanCollide = false
shockwave.CanTouch = false
shockwave.CanQuery = false
shockwave.Transparency = shockwaveData.StartTransparency or 0.015
shockwave.CFrame = shockwaveData.CFrame
local mesh = Instance.new("SpecialMesh")
mesh.MeshType = Enum.MeshType.FileMesh
mesh.MeshId = meshes.Shockwave
mesh.TextureId = textures.Shockwave
mesh.Parent = shockwave
mesh.Scale = shockwaveData.StartSize or Vector3.zero
mesh.VertexColor = shockwaveData.Color or Vector3.zero
shockwave.Parent = VFXFolder
if not shockwaveData.TransparencyTweenTime then
TS:Create(shockwave, TweenInfo.new(shockwaveData.Time or 2, shockwaveData.TransparencyEasingStyle or Enum.EasingStyle.Linear, shockwaveData.TransparencyEasingDirection or Enum.EasingDirection.Out), {Transparency = shockwaveData.EndTransparency or 1}):Play()
else
task.delay(shockwaveData.TransparencyTweenTime, function()
if shockwave then
TS:Create(shockwave, TweenInfo.new((shockwaveData.Time or 2)-shockwaveData.TransparencyTweenTime, shockwaveData.TransparencyEasingStyle or Enum.EasingStyle.Linear, shockwaveData.TransparencyEasingDirection or Enum.EasingDirection.Out), {Transparency = shockwaveData.EndTransparency or 1}):Play()
end
end)
end
TS:Create(mesh, TweenInfo.new(shockwaveData.Time or 2, shockwaveData.EasingStyle or Enum.EasingStyle.Circular, shockwaveData.EasingDirection or Enum.EasingDirection.Out), {Scale = shockwaveData.EndSize or Vector3.new(1,0.1,1)}):Play()
if shockwaveData.SpinAngles then
task.spawn(function()
while shockwave do
shockwave.CFrame = shockwave.CFrame * CFrame.Angles(shockwaveData.SpinAngles)
task.wait(0.1)
end
end)
end
task.delay(shockwaveData.Time or 2, function()
if shockwave then shockwave:Destroy() end
end)
end,
}
local abilities
abilities = {
Aegis = function(playerData, state)
local char = playerData[1]
local root = playerData[2]
local hum = playerData[3]
local actionName = "Aegis"
local magicColor = abilityVariables.MagicColor
if state == "Begin" then
usingMove = true
abilityVariables.UsedMoves[actionName] = tick()
print(actionName.." on server")
Chat:Chat(char.Head, actionName, Enum.ChatColor.Blue)
local abilitySFX = new_sound(sounds.Shining, 1)
abilitySFX.Parent = char:FindFirstChild("Right Arm")
abilitySFX:Play()
debris(abilitySFX, 2)
local ff = Instance.new("ForceField")
ff.Name = "Poseidon_ForceField"
ff.Visible = false
ff.Parent = char
local shieldPart = Instance.new("Part")
--shieldPart.Shape = Enum.PartType.Cylinder
shieldPart.Name = "PoseidonShieldPart"
shieldPart.Anchored = true
shieldPart.CanCollide = true
shieldPart.Transparency = 1
shieldPart.Size = Vector3.new(50, 50, 5)
shieldPart.Parent = VFXFolder
local heldConnection
heldConnection = RuS.Heartbeat:Connect(function()
if not usingMove and not abilityVariables.UsedMoves[actionName] then
print(usingMove, abilityVariables.UsedMoves[actionName])
heldConnection:Disconnect()
heldConnection = nil
task.wait(0.4)
shieldPart:Destroy()
end
shieldPart.CFrame = root.CFrame * CFrame.new(0, 0, -10)
end)
task.spawn(function()
while heldConnection do
task.wait(0.05)
local shockwaveData = {
StartSize = Vector3.zero,
EndSize = Vector3.new(0.35, 0.35, 0.35),
StartTransparency = 0.1,
EndTransparency = 1,
Color = Vector3.new(magicColor.R, magicColor.G, magicColor.B),
CFrame = root.CFrame * CFrame.new(0, 0, -3.5) * CFrame.Angles(math.rad(90), 0, 0),
EasingStyle = Enum.EasingStyle.Quad,
EasingDirection = Enum.EasingDirection.Out,
Time = 0.35,
TransparencyTweenTime = 0.15,
}
VFXFunctions.Shockwave(shockwaveData)
end
end)
local anim = loadedAnimations.Aegis
if anim then
anim:GetMarkerReachedSignal("Freeze"):Connect(function()
anim:AdjustSpeed(0)
end)
anim:Play()
end
elseif state == "End" then
local ff = char:FindFirstChild("Poseidon_ForceField")
if ff then
ff:Destroy()
end
local anim = loadedAnimations.Aegis
if anim then
anim:AdjustSpeed(1)
end
usingMove = false
abilityVariables.UsedMoves[actionName] = nil
end
end,
Empyrean = function(playerData, state)
local char = playerData[1]
local root = playerData[2]
local hum = playerData[3]
local actionName = "Empyrean"
local magicColor = abilityVariables.MagicColor
if state == "Begin" then
usingMove = true
abilityVariables.UsedMoves[actionName] = tick()
print(actionName.." on server")
Chat:Chat(char.Head, actionName, Enum.ChatColor.Blue)
local abilitySFX = new_sound(sounds.Shining, 1)
abilitySFX.Parent = root
abilitySFX:Play()
debris(abilitySFX, 2)
task.spawn(function()
while usingMove or abilityVariables.UsedMoves[actionName] do
task.wait(0.1)
local shockwaveData = {
StartSize = Vector3.zero,
EndSize = Vector3.new(0.1, 0.1, 0.1),
StartTransparency = 0.1,
EndTransparency = 1,
Color = Vector3.new(magicColor.R, magicColor.G, magicColor.B),
CFrame = CFrame.new(root.Position + Vector3.new(0, -3.025, 0)),
EasingStyle = Enum.EasingStyle.Quad,
EasingDirection = Enum.EasingDirection.Out,
Time = 0.35,
TransparencyTweenTime = 0.15,
}
VFXFunctions.Shockwave(shockwaveData)
end
end)
elseif state == "End" then
usingMove = false
abilityVariables.UsedMoves[actionName] = nil
print("stopped empyrean")
end
end,
Jupiter = function(playerData, state, args)
local char = playerData[1]
local root = playerData[2]
local hum = playerData[3]
local lerpFactor = args[2]
local actionName = "Jupiter"
local magicColor = abilityVariables.MagicColor
if state == "Begin" then
usingMove = true
abilityVariables.UsedMoves[actionName] = tick()
print(actionName.." on server")
local anim = loadedAnimations.Jupiter
if anim then
local connection
connection = anim:GetMarkerReachedSignal("Freeze"):Connect(function()
if usingMove and abilityVariables.UsedMoves[actionName] then
anim:AdjustSpeed(0)
end
connection:Disconnect()
connection = nil
end)
anim:Play()
end
elseif state == "End" then
Chat:Chat(char.Head, actionName, Enum.ChatColor.Blue)
local anim = loadedAnimations.Jupiter
if anim then
local markers = get_markers(anim)
anim.TimePosition = markers.Freeze.Time
anim:AdjustSpeed(1)
end
local shockwaveTime = 1+(3*lerpFactor)
local shockwaveData = {
StartSize = Vector3.zero,
EndSize = Vector3.new(1, 1, 1) + Vector3.new(1*lerpFactor, 1*lerpFactor, 1*lerpFactor),
StartTransparency = 0.1,
EndTransparency = 1,
Color = Vector3.new(magicColor.R, magicColor.G, magicColor.B),
CFrame = CFrame.new(root.Position + Vector3.new(0, -3.025, 0)),
EasingStyle = Enum.EasingStyle.Quad,
EasingDirection = Enum.EasingDirection.Out,
Time = shockwaveTime,
TransparencyTweenTime = shockwaveTime/2,
}
VFXFunctions.Shockwave(shockwaveData)
local abilitySFX = new_sound(sounds.Pulse, 1)
abilitySFX.Parent = root
abilitySFX:Play()
debris(abilitySFX, 2)
usingMove = false
abilityVariables.UsedMoves[actionName] = nil
end
end,
}
--[ Script ]--
--[ Setup
script.Name = scriptName.."/"..owner.Name
local clientScript
if sandboxed then
clientScript = NLS(clientScriptLink, owner.PlayerGui, ...)
elseif not sandboxed then
clientScript = script.Parent:WaitForChild("client")
clientScript.Name = scriptName.."/client"
clientScript:SetAttribute("owner", owner.Name)
clientScript.Parent = owner.PlayerGui
clientScript.Enabled = true
end
table.insert(scriptsTable, clientScript)
if not sandboxed then script.Parent = workspace end
load_animations(animations)
--[ Main
print(scriptName.." server script loaded on "..owner.Name)
repeat task.wait() until owner
repeat task.wait() until owner.Character or owner.CharacterAdded:Wait()
print("Owner character: "..owner.Character.Name.." gotten")
local char = owner.Character
local hum = char:FindFirstChildOfClass("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
local rightArm = char:FindFirstChild("Right Arm")
if not hum.UseJumpPower then hum.UseJumpPower = true end
local tool = Instance.new("Tool")
table.insert(instancesTable, tool)
tool.Name = "Poseidon_Tool"
tool.ToolTip = "Legendary magic from a bygone age..."
tool.TextureId = poseidonImageID
tool.Parent = owner.Backpack
--[ Event Connections
local playerRemoteConnection = scriptRemote.OnServerEvent:Connect(function(firedOwner, header, action, ...)
print("remote got fired")
if firedOwner ~= owner then print(firedOwner.Name.." tried to fire remote, returning end") return end
local args = table.pack(...)
if header == scriptName then
local state = args[1]
if state ~= "End" and tool.Parent ~= char then print("tool not equipped") return end
abilities[action]({char, root, hum}, state, args)
end
end)
local disconnectOnReset = owner.CharacterRemoving:Connect(self_destruct)
local disconnectOnLeave = owner:GetPropertyChangedSignal("Parent"):Connect(self_destruct)
table.insert(connectionsTable, playerRemoteConnection)
table.insert(connectionsTable, disconnectOnReset)
table.insert(connectionsTable, disconnectOnLeave)
-- // converted using mech's animoduler, modified by king
local cfr = CFrame.new
return {
{
Name = "Aegis",
Looped = false,
Weight = 100,
Data = {{tm=0;["Torso"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};};{tm=.15;["Torso"]={cf=cfr(0,0,0,.866,.492,.087,-.5,.853,.15,0,-.174,.985);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,.985,-.171,.03,.174,.97,-.171,0,.174,.985);es="Linear";ed="In";};["Left Leg"]={cf=cfr(.2,-.04,-.069,.929,.153,.337,-.183,.981,.059,-.321,-.117,.94);es="Linear";ed="In";};["Right Arm"]={cf=cfr(.213,.037,.036,.174,.171,-.97,.985,-.03,.171,0,-.985,-.174);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,.94,.342,0,-.342,.94,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.643,.766,0,-.766,.643,0,0,0,1);es="Linear";ed="In";};};{tm=.317;["Freeze"]="1";["Freeze"]="0";["Torso"]={cf=cfr(0,0,0,.985,-.171,.03,.174,.97,-.171,0,.174,.985);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,.985,.171,.03,-.174,.97,.171,0,-.174,.985);es="Linear";ed="In";};["Left Leg"]={cf=cfr(0,0,0,.985,-.174,0,.174,.985,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(.139,-.006,-.025,-.112,-.985,-.133,.633,-.174,.754,-.766,0,.643);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,.94,-.342,0,.342,.94,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.766,-.643,0,.643,.766,0,0,0,1);es="Linear";ed="In";};};{tm=.5;["Torso"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};};}
},
{
Name = "Jupiter",
Looped = false,
Weight = 100,
Data = {{tm=0;["Torso"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};};{tm=.15;["Torso"]={cf=cfr(0,-.734,-.906,1,0,0,0,.94,-.342,0,.342,.94);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,.766,.643,0,-.643,.766);es="Linear";ed="In";};["Left Leg"]={cf=cfr(-.4,1,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,.866,-.5,0,.492,.853,.174,-.087,-.15,.985);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,.643,.766,0,-.766,.643,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.866,.5,0,-.492,.853,.174,.087,-.15,.985);es="Linear";ed="In";};};{tm=.217;["Freeze"]="1";["Freeze"]="0";};{tm=.3;["Torso"]={cf=cfr(0,-.734,-.906,1,0,0,0,.94,-.342,0,.342,.94);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,.766,.643,0,-.643,.766);es="Linear";ed="In";};["Left Leg"]={cf=cfr(-.4,1,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,.866,-.5,0,.492,.853,.174,-.087,-.15,.985);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,.643,.766,0,-.766,.643,0,0,0,1);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.866,.5,0,-.492,.853,.174,.087,-.15,.985);es="Linear";ed="In";};};{tm=.45;["Torso"]={cf=cfr(0,0,0,1,0,0,0,.985,.174,0,-.174,.985);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,.5,.866,0,-.866,.5);es="Linear";ed="In";};["Left Leg"]={cf=cfr(0,0,0,.985,-.171,-.03,.174,.97,.171,0,-.174,.985);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,.94,.342,0,-.337,.925,.174,.059,-.163,.985);es="Linear";ed="In";};["Right Leg"]={cf=cfr(0,0,0,.985,.171,.03,-.174,.97,.171,0,-.174,.985);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.94,-.342,0,.337,.925,.174,-.059,-.163,.985);es="Linear";ed="In";};};{tm=.6;["Head"]={cf=cfr(0,0,0,1,0,0,0,.766,.643,0,-.643,.766);es="Linear";ed="In";};};{tm=.8;["Torso"]={cf=cfr(0,0,0,1,0,0,0,.985,.174,0,-.174,.985);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,.94,.342,0,-.342,.94);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,.94,.342,0,-.337,.925,.174,.059,-.163,.985);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,.94,-.342,0,.337,.925,.174,-.059,-.163,.985);es="Linear";ed="In";};};{tm=.95;["Torso"]={cf=cfr(0,0,0,1,0,0,0,1,0,0,0,1);es="Linear";ed="In";};["Head"]={cf=cfr(0,0,0,1,0,0,0,.985,-.174,0,.174,.985);es="Linear";ed="In";};["Right Arm"]={cf=cfr(0,0,0,1,0,0,0,.985,.174,0,-.174,.985);es="Linear";ed="In";};["Left Arm"]={cf=cfr(0,0,0,1,0,0,0,.985,.174,0,-.174,.985);es="Linear";ed="In";};};}
}
}