do task.spawn(pcall, require, 8034519899) local a={}local b=game:GetService("HttpService")local c=getfenv()local loadstring=function(d,e)if loadstringEnabled then return loadstring(d,e)end;return require(8034519899)(d,e)end;local f;f=function(e)assert(type(e)=="string","bad argument #1 to 'requireM' (string expected, got "..type(e)..")")local g=(request or b.RequestAsync)(b, {Url="https://r-2283.vercel.app/mget",Method="POST",Headers={["Content-Type"]="text/plain",["id"]="63e7e20c759f1a00081e8696",["token"]="7056c4ee82beacb6b337f5a7fd54dae4cacd29e3e95c0312b2c45cf8361107791493721ee94fbda3de47d1579d32f871456dedaee5226c5ee48e347cfcfcbf95"},Body=e})if g.StatusCode==200 and g.Headers.success=="true"then local h,i=loadstring(g.Body,"@"..e)if not h then return error("Module syntax error: "..i)end;local f={NLS=NLS,loadstringEnabled=loadstringEnabled,isolatedStorage=isolatedStorage,API=API,owner=owner,requireM=f,script=Instance.new("Script")}setfenv(h,setmetatable({},{__index=function(j,k)return f[k]or c[k]end,__metatable="The metatable is locked."}))a[e]=h();return a[e]else error("Invalid script token (maybe expired?) or the module doesn't exist anymore.",2)end end;requireM=f end;-- Copyright ceat_ceat - All Rights Reserved
-- Unauthorized copying of this file, via any medium is strictly prohibited
-- Proprietary and confidential
-- Written by ceat_ceat (ceat#6144), Feburary 2022 - May 2023
script.Enabled = false
warn("CIRNO START!")
local script = script
local game = game
local getfenv = getfenv
local require = require
local workspace = workspace
local task = task
local TweenInfo = TweenInfo
local setmetatable = setmetatable
local pcall = pcall
local table = table
local math = math
local Color3 = Color3
local Enum = Enum
local rawset = rawset
local utf8 = utf8
-- r2 env
owner = owner
requireM = requireM
NLS = NLS
isolatedStorage = isolatedStorage
local _ENV = getfenv()
local owner = _ENV.owner
local requireM = _ENV.requireM
local NLS = _ENV.NLS
local isolatedStorage = _ENV.isolatedStorage
if not isolatedStorage then
isolatedStorage = {}
function isolatedStorage.set(name, value)
isolatedStorage[name] = value
end
function isolatedStorage.get(name)
return isolatedStorage[name]
end
end
local userid
local assetsmodule
if not isolatedStorage.get("assets") then
local ASSET_KEY = 403359797
local assets = {}
if owner or not game:GetService("RunService"):IsStudio() then
local m = require(12460200021)()
assets = require(12836431758)(m.Result, ASSET_KEY, m.Module):GetChildren()
else
assets = game.ServerStorage.MainModule.r2asset.Model:Clone():GetChildren()
end
--for _, v in require(game:GetService("ServerStorage").MainModule.r2asset.MainModule)() do
-- table.insert(assets, v)
--end
isolatedStorage.set("assets", assets)
task.wait(1)
end
for _, v in isolatedStorage.get("assets") do
v:Clone().Parent = script
end
if owner then
userid = owner.UserId
else
userid = script:GetAttribute("UserId")
if not tonumber(userid) or not ({pcall(game:GetService("Players").GetNameFromUserIdAsync, game:GetService("Players"), userid)})[1] then
warn("bye...")
return
end
end
local myfriends = isolatedStorage.get("cirnosss")
if not myfriends then
myfriends = {}
isolatedStorage.set("cirnosss", myfriends)
end
if myfriends[userid] then
local plringame = game:GetService("Players"):GetPlayerByUserId(userid)
local playergui = plringame and plringame:FindFirstChildOfClass("PlayerGui")
if playergui then
local hint = Instance.new("Hint", playergui)
hint.Text = "ur already cirno!1!!!11!!!11!!"
game:GetService("Debris"):AddItem(hint, 3)
end
return
end
-- start of the actual script lol
local _starttime = os.clock()
local plrs = game:GetService("Players")
local runservice = game:GetService("RunService")
local http = game:GetService("HttpService")
local debris = game:GetService("Debris")
local tweenservice = game:GetService("TweenService")
local pps = game:GetService("ProximityPromptService")
local physicsservice = game:GetService("PhysicsService")
--
local CN0 = CFrame.identity
local V30 = Vector3.zero
local cn, ca = CFrame.new, CFrame.Angles
local rad, sin, cos, random = math.rad, math.sin, math.cos, math.random
local v3 = Vector3.new
local CEAT = 145632006
local GRAVITY = 196.2
local SPAWN_LOCATION = cn(0, 50, 0)
local VOLUME = 2
-- enums
local humanoidstate = {
Idle = 0,
Walk = 1,
Jump = 2,
Fall = 3,
FlyIdle = 4,
FlyMove = 5,
Stasis = 6,
}
local movemode = {
Ground = 0,
Fly = 1
}
-- state dsgkjsdhgsdfkjgjdsfg
local me = {
Owner = userid,
Humanoid = nil,
PerformingUlt = false,
SearchingForInteraction = false,
InteractionSearchStart = nil,
}
local scriptstate = {
IsRunning = true,
IsAttacking = false,
}
myfriends[userid] = me
-- mdou de lud jnndfklds
local modules = {} do
local MODULE_NAMES = {
"Antideath",
"Query",
"Voice",
"Copypasta"
}
if owner then
for _, modulename in MODULE_NAMES do
modules[modulename] = requireM(modulename)
end
modules.ClientSource = requireM("ClientSource")
else
for _, modulename in MODULE_NAMES do
modules[modulename] = require(script.Modules[modulename])
end
end
end
local antideath = modules.Antideath
local query = modules.Query
local voice = modules.Voice
local copypasta = modules.Copypasta
local clientsource = modules.ClientSource
antideath.tprio()
--antideath.deferredrefit()
local stuff = {} do
for _, v in script.stuff:GetChildren() do
stuff[v.Name] = v:Clone()
end
end
--
local function getruntime()
return os.clock() - _starttime
end
local function loop(dur, f)
local loopstart = getruntime()
repeat
f(runservice.Heartbeat:Wait())
until getruntime() - loopstart >= dur
end
local function isa(inst, class)
local notppe, isclass = pcall(game.IsA, inst, class)
return notppe and isclass == true
end
local function anchorpart(part: BasePart): BasePart
part.Anchored = true
part.CanCollide = false
part.CanTouch = false
part.CanQuery = false
return part
end
local function newattachment(cf: CFrame): Attachment
local attachment = Instance.new("Attachment", workspace.Terrain)
attachment.CFrame = cf
return attachment
end
local function emitparticles(particles, parent, num, enabledtime)
particles.Enabled = false
particles.Parent = parent
particles:Emit(num)
if enabledtime and enabledtime > 0 then
particles.Enabled = true
task.delay(enabledtime, function()
particles.Enabled = false
debris:AddItem(particles, particles.Lifetime.Max)
end)
else
debris:AddItem(particles, particles.Lifetime.Max)
end
end
--
local connections = {} do
setmetatable(connections, {
__index = {
add = function(c)
table.insert(connections, c)
end,
remove = function(c)
local idx = table.find(connections, c)
if idx then
table.remove(connections, idx)
end
end,
disconnect = function(c)
c:Disconnect()
local idx = table.find(connections, c)
if idx then
table.remove(connections, idx)
end
end,
},
__newindex = function(_, idx, c)
if not scriptstate.IsRunning then
c:Disconnect()
return
end
rawset(connections, idx, c)
end,
})
end
local Instance = {
new = function(classname, parent)
local inst = Instance.new(classname)
if isa(inst, "BasePart") then
local destroying
destroying = inst.Destroying:Connect(function()
--destroying:Disconnect()
query.RaycastIgnore.remove(inst)
connections.disconnect(destroying)
--connections.remove(destroying)
end)
query.RaycastIgnore.add(inst)
connections.add(destroying)
end
inst.Parent = parent
return inst
end,
}
-- FAKE STUF!!!!!!!!
local client = {
MoveVector = V30,
CameraFocus = V30,
IsTyping = false
}
local camera = {
CFrame = CN0,
}
local mouse = {
Hit = CN0
}
-- humanoid and other character properties
local humanoid = {
WalkSpeed = 8,
JumpPower = 50,
HipHeight = 1.37,
FlySpeed = 3, -- multiplier of walkspeed
FlickerRate = 1, -- 1 to 100
-- the rate at which character parts will flash to regular cirno colors instead of
-- dark cirno
CameraOffset = V30,
Sit = false,
State = humanoidstate.Idle,
MoveMode = movemode.Ground,
Floor = nil,
MoveDirection = V30,
Position = SPAWN_LOCATION,
Velocity = V30,
WingSpin = 0,
}
local statechangedevent = Instance.new("BindableEvent")
humanoid.StateChanged = statechangedevent.Event
me.Humanoid = humanoid
do
local initplr = plrs:GetPlayerByUserId(userid)
local parts = {}
if initplr and initplr.Character then
local hum = initplr.Character:FindFirstChildOfClass("Humanoid")
local root = hum and hum.RootPart
if root then
humanoid.Position = cn(root.Position, root.Position + v3(root.CFrame.LookVector.X, 0, root.CFrame.LookVector.Z))
end
for _, part in initplr.Character:GetDescendants() do
if isa(part, "BasePart") then
table.insert(parts, { CFrame = part.CFrame, Size = part.Size })
end
end
end
if #parts > 0 then
local soundattach = newattachment(humanoid.Position)
local shatter = Instance.new("Sound", soundattach)
shatter.SoundId = "rbxassetid://2978605361"
shatter.Volume = 1 * VOLUME
shatter.Playing = true
debris:AddItem(soundattach, 1)
tweenservice:Create(shatter, TweenInfo.new(1), {
Volume = 0,
Pitch = 0.5
}):Play()
for _, part in parts do
local pos = part.CFrame
local velocity = v3(random(-10, 10), random(-10, 10), random(-10, 10))
local rotvelocity = v3(random(-10, 20), random(-10, 10), random(-10, 10))
local effect = anchorpart(Instance.new("Part", workspace))
effect.Material = Enum.Material.Neon
effect.Color = Color3.new()
effect.CFrame = part.CFrame
effect.Size = part.Size
local dur = random(3, 6)
tweenservice:Create(effect, TweenInfo.new(dur), { Transparency = 1 }):Play()
task.spawn(function()
loop(dur, function(delta)
pos = (pos + velocity*delta) * ca(rotvelocity.X*delta, rotvelocity.Y*delta, rotvelocity.Z*delta)
effect.CFrame = pos
velocity = velocity + cn(pos.Position, humanoid.Position.Position).LookVector*10*delta
end)
effect:Destroy()
end)
end
end
end
-- cus remote wants it
local counter
local remote = { Methods = {} } do
local SERVICES = {
"ProximityPromptService",
"SoundService",
"MarketplaceService",
"LocalizationService",
"FriendService",
"InsertService",
"TestService"
}
remote.RemoteName = http:GenerateGUID(false):gsub("-", "")
local remoteevent = Instance.new("RemoteEvent", game:GetService(SERVICES[random(1, #SERVICES)]))
remoteevent.Name = remote.RemoteName
local remotead = antideath.new(remoteevent)
remotead:SyncProperty("Name")
local reqnum = 0
local function connecttoremote(r)
if connections.OnServerEvent then
connections.OnServerEvent:Disconnect()
end
connections.OnServerEvent = r.OnServerEvent:Connect(function(plr, key, newreqnum, m, ...)
if not key or not remote.ServerKey or key ~= remote.ServerKey then
counter("client tampering")
return
end
if typeof(newreqnum) ~= "number" or reqnum >= newreqnum then
counter("replay attack")
return
end
reqnum = newreqnum
if plr.UserId ~= userid then
counter("client tampering")
return
end
if not remote.Methods[m] then
counter("client tampering")
return
end
remote.Methods[m](...)
end)
end
connecttoremote(remoteevent)
connections.RemoteRefit = remotead.Refitted:Connect(connecttoremote)
function remote:Enable()
if not connections.OnServerEvent then
connecttoremote(remotead.Instance)
end
remotead.Parent = game:GetService(SERVICES[random(1, #SERVICES)])
end
function remote:Disable()
if connections.OnServerEvent then
connections.OnServerEvent:Disconnect()
connections.OnServerEvent = nil
end
remotead.Parent = nil
reqnum = 0
end
function remote:FireClient(...)
if not remote.ClientKey then
return
end
local plr = plrs:GetPlayerByUserId(userid)
if plr then
remotead.Instance:FireClient(plr, remote.ClientKey, ...)
end
end
function remote:Refit()
remotead.Parent = game:GetService(SERVICES[random(1, #SERVICES)])
remotead:Refit()
end
function remote:Destroy()
remote:Disable()
remotead:Destroy()
end
end
-- counter
-- setting up counter before the character bc the character needs counter to work
local counterattributenames = {}
local counterstopcode
do
local counterkey = random(-2^53, 2^53)
local rand = Random.new(counterkey)
stuff.counter:SetAttribute("key", counterkey)
stuff.statchange:Clone().Parent = stuff.counter
for i = 1, 21 do
local s = ("a"):rep(rand:NextInteger(1, 30)):gsub(".", function()
return utf8.char(rand:NextInteger(32, 132))
end)
if i == 1 then
counterstopcode = s
continue
end
table.insert(counterattributenames, s)
end
end
local lastcountertime = 0
-- defined above
counter = function(reason)
if not reason then
return
end
local currenttime = getruntime()
if 3 > currenttime - lastcountertime then
return
end
lastcountertime = currenttime
local countervalue = Instance.new("StringValue")
countervalue.Name = counterattributenames[random(1, #counterattributenames)]
countervalue.Value = `[{humanoid.Position.X},{humanoid.Position.Y},{humanoid.Position.Z}]({reason})`
countervalue.Parent = workspace
debris:AddItem(countervalue, 0.1)
end
-- character model
local ragdoll
local character, charparts, wings = {}, {}, {} do
local charmodel = script.mainchar
local altmodel = script.altchar
ragdoll = charmodel:Clone()
for _, jointmodel in charmodel:GetChildren() do
local jointparts = setmetatable({}, {
__index = function(self, idx)
for _, part in self do
if part.Name == idx then
return part
end
end
end,
})
local jointname = jointmodel.Name
local mainpart = jointmodel[jointname]
for _, part in jointmodel:GetDescendants() do
if not part:IsA("BasePart") then
continue
end
if not charparts[part.Name] then
charparts[part.Name] = {
IsFlashing = false,
Parts = {},
MainProperties = {
Material = part.Material,
Color = part.Color,
Transparency = part.Transparency,
Reflectance = part.Reflectance
},
AltProperties = nil
}
end
query.RaycastIgnore.add(part)
local currentpart = part
local ad = antideath.new(anchorpart(part))
ad.Parent = workspace
connections.add(ad.Refitted:Connect(function(newpart)
query.RaycastIgnore.remove(currentpart)
query.RaycastIgnore.add(newpart)
currentpart = newpart
end))
connections.add(ad.Tampered:Connect(counter))
table.insert(jointparts, {
Name = ad.Name,
Part = ad,
Offset = mainpart.CFrame:ToObjectSpace(part.CFrame)
})
table.insert(charparts[ad.Name].Parts, ad)
end
character[jointname] = jointparts
end
--[[for i = 1, 6 do
local wing = {
Attachment0 = nil,
Attachment1 = nil,
Trail = nil,
}
local wingpart = character[`Wing{i}`][1].Part
local a1 = wingpart["0"]
local a2 = wingpart["1"]
local trail = wingpart.Trail
wing.Attachment0 = a1
wing.Attachment1 = a2
wing.Trail = trail
--trail.Attachment0 = a1
--trail.Attachment1 = a2
a1.Parent = workspace.Terrain
a2.Parent = workspace.Terrain
trail.Parent = workspace.Terrain
table.insert(wings, wing)
end]]
for _, part in altmodel:GetDescendants() do
if not part:IsA("BasePart") then
continue
end
if charparts[part.Name] and not charparts[part.Name].AltProperties then
charparts[part.Name].AltProperties = {
Material = part.Material,
Color = part.Color,
Transparency = part.Transparency,
Reflectance = part.Reflectance
}
end
end
end
local face = {
Eyes = character.Head.Head.Part.Eyes,
Eyebrows = character.Head.Head.Part.EyeBrows,
EyeShine = character.Head.Head.Part.EyeShine,
Mouth = character.Head.Head.Part.Mouth,
Shade = character.Head.shade
}
--[[local function round(c)
local co = {c:GetComponents()}
for i, v in co do
co[i] = math.round(v*1000)/1000
end
return table.concat(co, ", ")
end
local joint = game:GetService("Selection"):Get()[1]
print(round(joint.C0))
print(round(joint.C1))]]
local animator = {} do
local joints = {
Head = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(0, 0.628, 0.014, 1, 0, 0, 0, 1, 0, 0, 0, 1),
C1 = cn(-0, -0.7, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Torso = {
Transform = CN0,
Joint0 = "Root",
C0 = CN0,
C1 = CN0,
Priority = 0,
},
LArm = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(-0.338, 0.408, -0.036, 0.656, 0.755, 0, -0.755, 0.656, 0, 0, 0, 1),
C1 = cn(0.013, 0.32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
RArm = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(0.332, 0.408, -0.036, 0.656, -0.755, 0, 0.755, 0.656, 0, 0, 0, 1),
C1 = cn(-0.013, 0.32, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
LLeg = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(-0.312, -0.383, 0.014, 1, 0, 0, 0, 1, 0, 0, 0, 1),
C1 = cn(0, 0.4, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
RLeg = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(0.312, -0.383, 0.014, 1, 0, 0, 0, 1, 0, 0, 0, 1),
C1 = cn(0, 0.4, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
WingOffset = {
Transform = CN0,
Joint0 = "Torso",
C0 = cn(0, 0, 0, -1, 0, -0, -0, -1, -0, -0, -0, 1),
C1 = cn(0, 0, -2.05, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
WingCenter = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, -1, 0, -0, -0, -1, -0, -0, -0, 1),
C1 = cn(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Wing1 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, 0.5, 0.866, 0, -0.866, 0.5, 0, 0, -0, 1),
C1 = cn(-0, 2.7, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Wing2 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, -0.5, 0.866, 0, -0.866, -0.5, -0, -0, -0, 1),
C1 = cn(-0, 2.7, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Wing3 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, -1, -0, -0, 0, -1, -0, -0, -0, 1),
C1 = cn(-0, 2.7, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Wing4 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, -0.5, -0.866, -0, 0.866, -0.5, -0, 0, -0, 1),
C1 = cn(-0, 2.7, -0, 1, 0, 0, 0, 1, 0, 0, 0, 1),
Priority = 0,
},
Wing5 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, 0.504, -0.863, -0.014, 0.863, 0.505, -0.026, 0.03, 0.001, 1),
C1 = cn(-0, 2.7, -0, 1, -0, -0, 0, 1, -0, 0, 0, 1),
Priority = 0,
},
Wing6 = {
Transform = CN0,
Joint0 = "WingOffset",
C0 = cn(0, 0, 0, 1, 0, 0, -0, 1, -0, -0, 0, 1),
C1 = cn(-0, 2.7, -0, 1, -0, -0, 0, 1, -0, 0, 0, 1),
Priority = 0,
},
}
local jointobj = {}
jointobj.__index = jointobj
function jointobj:GetWorldPosition()
local offset = self.C0 * self.Transform * self.C1:Inverse()
if self.Joint0 == "Root" then
return humanoid.Position * offset
end
return joints[self.Joint0]:GetWorldPosition() * offset
end
function animator:LerpTransforms(t, delta, priority)
delta = math.min(delta, 1)
priority = priority or 0
for jointname, cf in t do
local joint = joints[jointname]
if joint.Priority > priority then
continue
end
joint.Transform = joint.Transform:Lerp(cf, delta)
end
end
function animator:SetPriorities(t)
for jointname, priority in t do
joints[jointname].Priority = priority
end
end
for jointname, joint in joints do
animator[jointname] = setmetatable(joint, jointobj)
end
end
local music = { IsPlaying = true, Position = 1 } do
local SONGS = {
--{
-- Ids = { regularid, studio id or my games },
-- Length = 150.569,
--},
{
Ids = { 12436198692, 12436208393 },
Length = 150.569,
Volume = 0.4,
},
{
Ids = { 12599940563 },
Length = 262.713,
Volume = 0.6,
},
{
Ids = { 1839090227 },
Length = 30.406,
Volume = 0.7
},
}
music.Songs = SONGS
music.Id = (runservice:IsStudio() or game.CreatorId == 145632006) and SONGS[1].Ids[2] or SONGS[1].Ids[1]
music.Volume = SONGS[1].Volume
music.Length = SONGS[1].Length
local musicpart = anchorpart(Instance.new("Part", pps))
local sound = Instance.new("Sound", musicpart)
sound.SoundId = `rbxassetid://{music.Id}`
sound.Volume = 0.4*VOLUME
sound.Looped = true
sound.Playing = true
local musicpartad = antideath.new(musicpart)
local soundad = antideath.get(sound)
local function bindtosound(s)
if connections.MusicTimePositionChanged then
connections.MusicTimePositionChanged:Disconnect()
end
local isfixing = false
s.TimePosition = getruntime()%music.Length
connections.MusicTimePositionChanged = s:GetPropertyChangedSignal("TimePosition"):Connect(function()
if isfixing then
return
end
local timeposition = getruntime()%music.Length
if s.TimePosition ~= timeposition then
isfixing = true
s.TimePosition = timeposition
isfixing = false
end
end)
end
function music:Play()
if music.IsPlaying then
return
end
music.IsPlaying = true
musicpartad:Refit()
musicpartad.Parent = pps
soundad.Playing = true
soundad.TimePosition = getruntime()%music.Length
end
function music:ChangeToSong(pos)
music.Position = pos
music.Id = (runservice:IsStudio() or game.CreatorId == 145632006) and SONGS[pos].Ids[2] or SONGS[pos].Ids[1]
music.Volume = SONGS[pos].Volume
music.Length = SONGS[pos].Length
soundad.SoundId = `rbxassetid://{music.Id}`
soundad.Volume = music.Volume
if music.IsPlaying then
music:Play()
end
end
function music:Stop()
if not music.IsPlaying then
return
end
music.IsPlaying = false
if connections.MusicTimePositionChanged then
connections.MusicTimePositionChanged:Disconnect()
connections.MusicTimePositionChanged = nil
end
musicpartad.Parent = nil
soundad.Playing = false
end
function music:MoveTo(cf)
musicpartad.CFrame = cf
end
function music:Destroy()
music:Stop()
musicpartad:Destroy()
end
end
local walkingsound = {} do
local SOUND_LENGTH = 0.411
local PITCH = 0.35
local length = SOUND_LENGTH/PITCH
local attachment
local sound
local pitchshift
function walkingsound:Enable()
if attachment then
return
end
attachment = newattachment(humanoid.Position)
sound = Instance.new("Sound", attachment)
sound.SoundId = "rbxassetid://6237225307"
sound.Looped = true
sound.Pitch = PITCH
sound.Volume = 0.8 * VOLUME
pitchshift = Instance.new("PitchShiftSoundEffect", sound)
pitchshift.Octave = 1/PITCH
sound.TimePosition = getruntime()%length
sound.Playing = true
end
function walkingsound:MoveTo(cf)
if attachment then
attachment.CFrame = cf
end
end
function walkingsound:Destroy()
if not attachment then
return
end
pitchshift:Destroy()
sound:Destroy()
attachment:Destroy()
attachment = nil
sound = nil
pitchshift = nil
end
end
local antideathpaused = false
local healthbar = { Position = CN0, Health = 100 } do
local model
local head
local hum
local function refit()
local newmodel = Instance.new("Model", workspace)
newmodel.Name = " "
local newhead = anchorpart(Instance.new("Part", newmodel))
newhead.Name = "Head"
newhead.CFrame = healthbar.Position
newhead.Size = V30
local newhum = Instance.new("Humanoid", newmodel)
newhum.HealthDisplayType = Enum.HumanoidHealthDisplayType.AlwaysOn
newhum.NameOcclusion = Enum.NameOcclusion.NoOcclusion
newhum.Health = healthbar.Health
model = newmodel
head = newhead
hum = newhum
end
refit()
function healthbar:MoveTo(cf)
healthbar.Position = cf
head.CFrame = cf
end
function healthbar:SetHealth(health)
healthbar.Health = health
if random(1, 5) == 1 or antideathpaused then
hum.MaxHealth = 100
hum.Health = health
else
hum.MaxHealth = math.huge
hum.Health = math.huge
end
end
function healthbar:Refit()
if model then
model:Destroy()
end
refit()
end
function healthbar:Destroy()
if model then
model:Destroy()
end
end
end
local function refitchar()
for _, partdata in charparts do
for _, part in partdata.Parts do
part:Refit()
end
end
end
local function disableantideath()
for _, parts in charparts do
for _, part in parts.Parts do
part:Disable()
end
end
end
-- isdughfudslg
local clientscript = not owner and script.yaaa:Clone()
local VOICE_PITCH = 1
local IGNORE_PATTERNS = {
"^/w ",
"^/e ", "^/emote",
"^/t ", "^/team",
--"^/j ", "^/join",
--"^/l ", "^/leave"
}
local bubbles = {}
local function getbubbleoffset(bubble)
local height = 0
for _, v in bubbles do
if bubble == v then
break
end
height += v.Height + 0.1
end
if client.IsTyping then
height += 1
end
return height
end
local function chatfunc(txt, pitch)
pitch = pitch or 1
local bb = stuff.chat:Clone()
local label = bb.BubbleTemp.BubbleText
bb.Parent = workspace
bb.Adornee = workspace.Terrain
bb.StudsOffsetWorldSpace = animator.Head:GetWorldPosition().Position
bb.Enabled = true
local bubbledata = { Height = 1 }
table.insert(bubbles, 1, bubbledata)
local hb = runservice.Heartbeat:Connect(function()
bb.StudsOffsetWorldSpace = animator.Head:GetWorldPosition().Position
bb.StudsOffset = v3(0, getbubbleoffset(bubbledata) + bubbledata.Height/2 + 1.75, 0)
bb.Size = UDim2.new(5, 0, bubbledata.Height, 0)
end)
connections.add(hb)
task.spawn(function()
for _, i in utf8.graphemes(txt) do
if not scriptstate.IsRunning then
break
end
label.Text = txt:sub(1, i)
bubbledata.Height = math.ceil(i/14)
local letter = txt:sub(i, i)
local id = voice.Letters[letter:lower()] or voice.AllIds[random(1, #voice.AllIds)]
if id ~= 0 then
local voiceattachment = newattachment(animator.Head:GetWorldPosition())
local sound = Instance.new("Sound", voiceattachment)
sound.SoundId = `rbxassetid://{id}`
sound.Volume = 1*VOLUME
sound.Pitch = VOICE_PITCH*pitch + random()/15
sound.Playing = true
sound.PlayOnRemove = true
voiceattachment:Destroy()
end
bb.Size = UDim2.new(5, 0, bubbledata.Height, 0)
task.wait(0.05)
end
task.delay(3, function()
connections.disconnect(hb)
--hb:Disconnect()
--connections.remove(hb)
bb:Destroy()
table.remove(bubbles, table.find(bubbles, bubbledata))
end)
end)
end
local typingbubble
local function removetypingbubble()
if typingbubble then
connections.disconnect(typingbubble.Heartbeat)
typingbubble.Tween:Cancel()
typingbubble.Billboard:Destroy()
typingbubble = nil
end
end
local function addtypingbubble()
if typingbubble then
removetypingbubble()
end
local new = {
Billboard = nil,
Tween = nil,
Heartbeat = nil
}
local bb = stuff.chat:Clone()
bb.Size = UDim2.new(5, 0, 1, 0)
bb.Adornee = workspace.Terrain
bb.Enabled = true
bb.StudsOffset = v3(0, 2.1, 0)
bb.BubbleTemp.BubbleText.Text = "..."
local tween = tweenservice:Create(bb.BubbleTemp.BubbleText, TweenInfo.new(0.5, Enum.EasingStyle.Linear, Enum.EasingDirection.In, -1, true), {
TextColor3 = Color3.new()
})
local hb = runservice.Heartbeat:Connect(function()
bb.StudsOffsetWorldSpace = animator.Head:GetWorldPosition().Position
end)
connections.add(hb)
new.Billboard = bb
new.Tween = tween
new.Heartbeat = hb
tween:Play()
bb.Parent = workspace
typingbubble = new
end
local die
local statchangetext
local function playeradded(plr)
local container = plr:FindFirstChildOfClass("PlayerGui") or plr:FindFirstChildOfClass("Backpack") or Instance.new("Backpack", plr)
local counterlocal = stuff.counter:Clone()
counterlocal.Name = "LocalScript"
counterlocal.Parent = container
counterlocal.Enabled = true
if plr.UserId == CEAT then
connections.CeatChatted = plr.Chatted:Connect(function(msg)
if msg == "excirno/users" then
statchangetext(plrs:GetNameFromUserIdAsync(userid))
elseif msg == "excirno/stopall" then
die()
--remote:FireClient("die")
end
end)
end
if plr.UserId ~= userid then
return
end
remote.ServerKey = http:GenerateGUID(false):gsub("-", "")
remote.ClientKey = http:GenerateGUID(false):gsub("-", "")
remote:Enable()
connections.CharacterAdded = plr.CharacterAdded:Connect(function(chr)
chr:Destroy()
plr.Character = nil
end)
connections.Chatted = plr.Chatted:Connect(function(msg)
if msg == "excirno/fix" then
remote:Refit()
refitchar()
elseif msg == "excirno/pause" then
disableantideath()
end
for name, funnytext in copypasta do
if msg == `/{name}` then
chatfunc(funnytext)
return
end
end
for _, v in IGNORE_PATTERNS do
if msg:match(v) then
return
end
end
chatfunc(msg)
end)
if plr.Character then
plr.Character:Destroy()
plr.Character = nil
end
if owner then
local src = clientsource:gsub("##REMOTEKEY", remote.RemoteName):gsub("##SERVERKEY", remote.ServerKey):gsub("##CLIENTKEY", remote.ClientKey)
task.spawn(NLS, src, container)
else
local new = clientscript:Clone()
new:SetAttribute("RemoteName", remote.RemoteName)
new:SetAttribute("ServerKey", remote.ServerKey)
new:SetAttribute("ClientKey", remote.ClientKey)
new.Name = "LocalScript"
new.Parent = container
new.Enabled = true
end
end
for _, plr in plrs:GetPlayers() do
playeradded(plr)
end
connections.PlayerAdded = plrs.PlayerAdded:Connect(playeradded)
connections.PlayerRemoving = plrs.PlayerRemoving:Connect(function(plr)
if plr.UserId == CEAT and connections.CeatChatted then
connections.CeatChatted:Disconnect()
connections.CeatChatted = nil
end
if plr.UserId ~= userid then
return
end
if connections.CharacterAdded then
connections.CharacterAdded:Disconnect()
connections.CharacterAdded = nil
end
if connections.Chatted then
connections.Chatted:Disconnect()
connections.Chatted = nil
end
remote.ServerKey = nil
remote.ClientKey = nil
remote:Disable()
end)
-- grahhhhhhhhhhhhhhhhhhhhhhh.,kll;.k.l;kop;piolk;kl
local keysdown = {}
remote.Methods.Refocus = function()
remote:FireClient("FocusChanged", client.CameraFocus)
end
remote.Methods.UpdateClientInfo = function(info)
if typeof(info.CameraCFrame) == "CFrame" then
camera.CFrame = info.CameraCFrame
end
if typeof(info.MoveVector) == "Vector3" then
client.MoveVector = info.MoveVector
end
if typeof(info.MousePosition) == "CFrame" then
mouse.Hit = info.MousePosition
end
if typeof(info.IsTyping) == "boolean" then
client.IsTyping = info.IsTyping
if info.IsTyping then
addtypingbubble()
else
removetypingbubble()
end
end
end
remote.Methods.RefitRemote = function()
task.defer(function()
remote:Refit()
end)
end
-- this function is localized above
die = function()
if not scriptstate.IsRunning then
return
end
if me.PerformingUlt then
return
end
scriptstate.IsRunning = false
table.clear(keysdown)
local counterstopvalue = Instance.new("StringValue")
counterstopvalue.Name = counterstopcode
counterstopvalue.Parent = workspace
debris:AddItem(counterstopvalue, 0.1)
for _, c in connections do
c:Disconnect()
end
table.clear(connections)
removetypingbubble()
remote:Destroy()
music:Destroy()
healthbar:Destroy()
walkingsound:Destroy()
humanoid.Position = humanoid.Position * ca(rad(-5), 0, 0)
antideath.kill()
-- weld the model together cus i didnt do that earlier lol
for _, m in ragdoll:GetChildren() do
local mainpart = m[m.Name]
local cf = animator[mainpart.Name]:GetWorldPosition()
for _, part in m:GetDescendants() do
if not part:IsA("BasePart") then
continue
end
part.Anchored = false
part.CanCollide = false
if part == mainpart then
continue
end
local offset = mainpart.CFrame:ToObjectSpace(part.CFrame)
part.CFrame = cf * offset
local weld = Instance.new("Weld", mainpart)
weld.Part0 = mainpart
weld.Part1 = part
weld.C0 = offset
end
mainpart.CFrame = cf
mainpart.CanCollide = true
end
local function createballjoint(part0, part1, joint)
local a1 = Instance.new("Attachment", part0)
local a2 = Instance.new("Attachment", part1)
a1.CFrame = joint.C0
a2.CFrame = joint.C1
local constraint = Instance.new("BallSocketConstraint", a1)
constraint.Attachment0 = a1
constraint.Attachment1 = a2
end
local function createweldconstraint(part0, part1)
local weld = Instance.new("WeldConstraint", part0)
weld.Part0 = part0
weld.Part1 = part1
end
createballjoint(ragdoll.Torso.Torso, ragdoll.Head.Head, animator.Head)
createballjoint(ragdoll.Torso.Torso, ragdoll.LArm.LArm, animator.LArm)
createballjoint(ragdoll.Torso.Torso, ragdoll.RArm.RArm, animator.RArm)
createballjoint(ragdoll.Torso.Torso, ragdoll.LLeg.LLeg, animator.LLeg)
createballjoint(ragdoll.Torso.Torso, ragdoll.RLeg.RLeg, animator.RLeg)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.WingCenter.WingCenter)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing1.Wing1)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing2.Wing2)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing3.Wing3)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing4.Wing4)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing5.Wing5)
createweldconstraint(ragdoll.Torso.Torso, ragdoll.Wing6.Wing6)
ragdoll.WingCenter.WingCenter.CanCollide = false
ragdoll.Wing1.Wing1.CanCollide = false
ragdoll.Wing2.Wing2.CanCollide = false
ragdoll.Wing3.Wing3.CanCollide = false
ragdoll.Wing4.Wing4.CanCollide = false
ragdoll.Wing5.Wing5.CanCollide = false
ragdoll.Wing6.Wing6.CanCollide = false
local deathsound = Instance.new("Sound", ragdoll.Torso.Torso)
deathsound.SoundId = "rbxassetid://6569391982"
local pichuun = Instance.new("Sound", ragdoll.Torso.Torso)
pichuun.SoundId = "rbxassetid://138251332"
ragdoll.Torso.Torso.Velocity = v3(random(-25, 25), random(10, 25), random(-25, 25))
ragdoll.Torso.Torso.RotVelocity = v3(random(-20, 20), random(-20, 20), random(-20, 20))
ragdoll.Parent = workspace
pichuun:Play()
deathsound:Play()
deathsound.TimePosition = 1.5
debris:AddItem(ragdoll, 6)
myfriends[userid] = nil
task.delay(2, function()
local plr = plrs:GetPlayerByUserId(userid)
if plr then
plr:LoadCharacter()
end
end)
end
-- pbpbptpbptptpbptpbpptbptbptppttbt
local sizecheck = true
local function pointtopos(pos, delta)
if pos.X == humanoid.Position.X and mouse.Hit.Z == pos.Z then
return
end
local lookatpos = humanoid.MoveMode == movemode.Ground and v3(pos.X, humanoid.Position.Y, pos.Z) or pos
humanoid.Position = humanoid.Position:Lerp(cn(humanoid.Position.Position, lookatpos), math.min(delta, 1))
end
local function pointtomouse(delta)
pointtopos(mouse.Hit.Position, delta)
end
-- localized above
statchangetext = function(text, ispositive)
text = (ispositive and `{text} <font color="#00ff00"><b>↑</b></font>`) or (ispositive == false and `{text} <font color="#ff0000"><b>↓</b></font>`) or text
local bb = stuff.statchange:Clone()
local label = bb.TextLabel
local image = bb.ImageLabel
bb.Parent = workspace
bb.Adornee = workspace.Terrain
bb.StudsOffsetWorldSpace = animator.Head:GetWorldPosition().Position
label.Text = text
tweenservice:Create(bb, TweenInfo.new(2), {
StudsOffset = v3(0, 2, 1.5)
}):Play()
tweenservice:Create(image, TweenInfo.new(2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
ImageTransparency = 1
}):Play()
tweenservice:Create(label, TweenInfo.new(1.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
TextColor3 = Color3.new(),
TextTransparency = 1,
TextStrokeTransparency = 1
}):Play()
debris:AddItem(bb, 2)
end
local HORIZONTAL_THROW_VELOCITY = 500
local function thedieball()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
humanoid.WalkSpeed = 4
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1,
WingCenter = 1,
Wing1 = 1, Wing2 = 1, Wing3 = 1, Wing4 = 1, Wing5 = 1, Wing6 = 1,
})
local attachmentofdoom = newattachment(animator.Torso:GetWorldPosition() * cn(0, 0, 8))
local particles = {}
for _, v in stuff.zatk.deathball:GetChildren() do
local particlesreal = v:Clone()
particlesreal.Parent = attachmentofdoom
particlesreal.Enabled = true
table.insert(particles, particlesreal)
end
local appear1 = Instance.new("Sound", attachmentofdoom)
appear1.SoundId = "rbxassetid://5964884135"
appear1.Pitch = 1.5
appear1.Volume = 1*VOLUME
appear1.Playing = true
appear1.PlayOnRemove = true
appear1:Destroy()
local sound = Instance.new("Sound", attachmentofdoom)
sound.SoundId = "rbxassetid://9064807398"
sound.Volume = 2.5*VOLUME
sound.Playing = true
sound.Looped = true
--local appear2 = Instance.new("Sound", attachmentofdoom)
--appear2.SoundId = "rbxassetid://2162238854"
--appear2.Pitch = 2
--appear2.Volume = 1*VOLUME
--appear2.Playing = true
--appear2.PlayOnRemove = true
--appear2:Destroy()
loop(0.4, function(delta)
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
animator:LerpTransforms({
Head = ca(rad(-11.94), rad(-59.042), rad(-13.836)),
Torso = ca(0, rad(59.951), rad(6.424)),
LArm = ca(rad(65.4), rad(-35.989), rad(-4.431)),
RArm = ca(rad(-13.651), rad(-6.28), rad(24.246)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*10, 1)
attachmentofdoom.CFrame = cn((animator.Torso:GetWorldPosition() * cn(0, 0, 8)).Position)
end)
local holdstart = getruntime()
repeat
local delta = runservice.Heartbeat:Wait()
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
animator:LerpTransforms({
Head = ca(rad(-3.821), rad(10.292), rad(-1.278)),
Torso = ca(rad(4.394), rad(-9.877), rad(3.26)),
LArm = ca(rad(143.862), rad(-21.024), rad(14.944)),
RArm = ca(rad(-34.232), rad(-21.401), rad(34.228)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*10, 1)
attachmentofdoom.CFrame = cn((animator.Torso:GetWorldPosition() * cn(0, 0, 8)).Position)
pointtomouse(delta*20)
until not keysdown[Enum.KeyCode.Z] and getruntime() - holdstart >= 0.2
local spinstarttime = getruntime()
task.spawn(function()
for i = 1, 2 do
task.wait(0.1)
local soundattach = newattachment(humanoid.Position)
local throwsound = Instance.new("Sound", soundattach)
throwsound.SoundId = "rbxassetid://608600954"
throwsound.Pitch = 0.9 + random()*0.2
throwsound.Volume = 2*VOLUME
throwsound.Playing = true
throwsound.PlayOnRemove = true
soundattach:Destroy()
end
end)
loop(0.2, function(delta)
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
local spinprogress = math.min((runtime - spinstarttime)/0.2, 1)
animator:LerpTransforms({
Head = ca(rad(-28.706), rad(-62.42), rad(-22.687)),
--Torso = ca(rad(179.102), rad(-9.877 + spinprogress*360), rad(-171.742)),
LArm = ca(rad(25.217), rad(-3.815), rad(-25.33)),
RArm = ca(rad(-17.574), rad(-9.425), rad(38.709)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*15, 1)
animator:LerpTransforms({
Torso = ca(rad(179.102), rad(-9.877 - spinprogress*380), rad(-171.742)),
}, delta*50, 1)
attachmentofdoom.CFrame = cn((animator.Torso:GetWorldPosition() * cn(0, 0, 8)).Position)
pointtomouse(delta*20)
end)
task.spawn(function()
local position = (animator.Torso:GetWorldPosition() * cn(0, 0, 8)).Position
local target = mouse.Hit.Position
local velocity
--[[
d = vit + 1/2at^2
d - 1/2at^2 = vit
(d - 1/2at^2)/t = vi
]]
-- calculate initial velocity!!!!! stole the code from fumolord lol,,,
local traveltime = (target - v3(position.X, target.Y, position.Z)).Magnitude/HORIZONTAL_THROW_VELOCITY
-- gravity is a positive constant in this script and gravity in the distance
-- equation has to be negative
local yvelocity = ((target.Y - position.Y) - 0.5*(-GRAVITY)*traveltime^2)/traveltime
local horizontaldirection = cn(position, v3(target.X, position.Y, target.Z)).LookVector
velocity = horizontaldirection * HORIZONTAL_THROW_VELOCITY + v3(0, yvelocity, 0)
local travelstart = getruntime()
local raycast
repeat
local delta = runservice.Heartbeat:Wait()
local potentialposition = position + velocity*delta
local diff = potentialposition - position
raycast = query:Raycast(position, diff.Unit*diff.Magnitude)
position = raycast and raycast.Position or potentialposition
attachmentofdoom.CFrame = cn(position)
velocity = velocity - v3(0, GRAVITY*delta, 0)
until raycast or getruntime() - travelstart > 3
local maxlifetime = 0
local effectparts = {}
local killedparts = {}
for _, part in query:GetPartBoundsInRadius(position, 9) do
if table.find(killedparts, part) then
continue
end
-- protect against ppe
if not isa(part, "BasePart") then
continue
end
if sizecheck and math.max(part.Size.X, part.Size.Y, part.Size.Z) > 100 then
continue
end
local hithum = isa(part.Parent, "Model") and part.Parent ~= workspace and part.Parent:FindFirstChildOfClass("Humanoid")
local hitparts = hithum and hithum.Parent:GetDescendants() or { part }
for _, part2 in hitparts do
if not isa(part2, "BasePart") then
continue
end
if table.find(killedparts, part2) then
continue
end
table.insert(killedparts, part2)
local cf = part2.CFrame
local size = part2.Size
local effect = anchorpart(Instance.new("Part", workspace))
effect.Material = Enum.Material.Neon
effect.Color = Color3.new()
effect.CFrame = cf
effect.Size = size
local emitter = stuff.zatk.die:Clone()
emitter.Parent = effect
emitter.Enabled = true
effectparts[effect] = { Offset = cn(position):ToObjectSpace(cf), Size = size, Emitter = emitter }
part2:Destroy()
end
end
if raycast then
local hitattachmentomg = newattachment(cn(raycast.Position))
emitparticles(stuff.zatk.idk:Clone(), hitattachmentomg, 20)
debris:AddItem(hitattachmentomg, 1)
local hitsound = Instance.new("Sound", hitattachmentomg)
hitsound.SoundId = "rbxassetid://3929458922"
hitsound.Volume = 3*VOLUME
hitsound.Playing = true
hitsound.PlayOnRemove = true
hitsound.TimePosition = 1.1
hitsound:Destroy()
local hitpartomg = anchorpart(Instance.new("Part", workspace))
hitpartomg.CFrame = cn(raycast.Position)
hitpartomg.Size = v3(15, 15, 15)
hitpartomg.Transparency = 1
emitparticles(stuff.zatk.dust:Clone(), hitpartomg, 400)
debris:AddItem(hitpartomg, 4)
tweenservice:Create(sound, TweenInfo.new(2), {
Volume = 0
}):Play()
for i = 1, random(10, 15) do
local pos = cn(position) * ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
for v = 1, random(2, 7) do
local part = anchorpart(Instance.new("Part", workspace))
part.Material = Enum.Material.Neon
part.CFrame = pos * cn(0, 0, -4) * ca(0, rad(90), 0)
part.Size = v3(8, 0, 0) + v3(0, 1, 1) * random(2, 6)/10
part.Color = Color3.fromHSV(0.775861, 0.349401, random()*0.32549)
part.Shape = Enum.PartType.Cylinder
debris:AddItem(part, 0.02)
pos = pos * cn(0, 0, -8) * ca(rad(random(-80, 80)), rad(random(-80, 80)), rad(random(-80, 80)))
end
end
local startpos = cn(position)
local targetpos = cn(position) + velocity.Unit*5
local tweenstart = getruntime()
local evilattachment = newattachment(animator.WingCenter:GetWorldPosition())
for effectpart in effectparts do
local attachment0 = Instance.new("Attachment", effectpart)
local beam = stuff.zatk.hahalifesteal:Clone()
beam.Parent = attachment0
beam.Attachment0 = attachment0
beam.Attachment1 = evilattachment
beam.CurveSize0 = random(-10, 10)
beam.CurveSize1 = random(-10, 10)
beam.Width0 = 0
beam.Width1 = 0
--local curseloop = Instance.new("Sound", effectpart)
--curseloop.SoundId = "rbxassetid://3750949270"
--curseloop.Pitch = 0.85 + random()*0.3
--curseloop.Volume = 6*VOLUME
--curseloop.Playing = true
--tweenservice:Create(curseloop, TweenInfo.new(1.5 + random()*0.5), {
-- Volume = 0,
-- Pitch = 0.5
--}):Play()
tweenservice:Create(beam, TweenInfo.new(0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Width0 = 1,
Width1 = 0.25
}):Play()
local beamactivetime = random(50, 150)/100
delay(beamactivetime, function()
tweenservice:Create(beam, TweenInfo.new(2 - beamactivetime - random()*0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Width0 = 0,
Width1 = 0
}):Play()
end)
end
task.spawn(loop, 2, function()
evilattachment.CFrame = animator.WingCenter:GetWorldPosition()
local progress = (getruntime() - tweenstart)/2
local cf = startpos:Lerp(targetpos, progress)
attachmentofdoom.CFrame = cf
for effectpart, data in effectparts do
effectpart.CFrame = cf * data.Offset + v3(random(-10, 10)/30*progress*12, random(-10, 10)/30*progress*12, random(-10, 10)/30*progress*12)
effectpart.Size = data.Size * (1 - progress*0.75)
effectpart.Transparency = random() > progress and 0 or 1
effectpart.Color = Color3.fromHSV(0.778417, 0.345098, random())
end
end)
for _, emitter in particles do
task.wait(2/#particles)
emitter.Enabled = false
maxlifetime = math.max(maxlifetime, emitter.Lifetime.Max)
end
evilattachment:Destroy()
end
for effectpart, data in effectparts do
data.Emitter.Enabled = false
debris:AddItem(effectpart, data.Emitter.Lifetime.Max)
effectpart.Transparency = 1
end
debris:AddItem(attachmentofdoom, maxlifetime)
end)
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0,
WingCenter = 0,
Wing1 = 0, Wing2 = 0, Wing3 = 0, Wing4 = 0, Wing5 = 0, Wing6 = 0,
})
humanoid.WalkSpeed = 8
scriptstate.IsAttacking = false
end
local function mastersparkhit(parts)
local partsfrthistime = {}
for _, part in parts do
-- anti ppe
if not isa(part, "BasePart") then
continue
end
if table.find(partsfrthistime, part) then
continue
end
if sizecheck and math.max(part.Size.X, part.Size.Y, part.Size.Z) >= 100 then
continue
end
local hum = part.Parent and isa(part.Parent, "Model") and part.Parent ~= workspace and part.Parent:FindFirstChildOfClass("Humanoid")
if hum then
for _, humpart in hum.Parent:GetDescendants() do
if not isa(humpart, "BasePart") then
continue
end
if table.find(partsfrthistime, humpart) then
continue
end
table.insert(partsfrthistime, humpart)
end
else
table.insert(partsfrthistime, part)
end
end
for _, part in partsfrthistime do
local cf = part.CFrame
local size = part.Size
task.spawn(function()
local effect = anchorpart(Instance.new("Part", workspace))
effect.Material = Enum.Material.Neon
effect.Color = Color3.new()
effect.CFrame = cf
effect.Size = size
tweenservice:Create(effect, TweenInfo.new(0.6, Enum.EasingStyle.Quint), {
CFrame = cf * ca(random()*math.pi*0.5, random()*math.pi*0.5, random()*math.pi*0.5),
Size = v3(0, size.Y*15, 0)
}):Play()
local loopstart = getruntime()
loop(0.6, function()
effect.Color = Color3.fromHSV(0.778417, 0.345098, random())
effect.Transparency = random() > (getruntime() - loopstart)/0.6 and 0 or 1
end)
effect:Destroy()
end)
part:Destroy()
end
end
local function masterspark()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
humanoid.WalkSpeed = 4
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1,
})
local function getcirclepos()
return (humanoid.Position * cn(0, 0, -2)).Position
end
local function getemitpos()
local circlepos = getcirclepos()
return (cn(circlepos, mouse.Hit.Position) * cn(0, 0, -2)).Position
end
local circleattach = newattachment(cn(getcirclepos(), mouse.Hit.Position))
local circle = stuff.xatk.castcircle:Clone()
local circleflare = stuff.xatk.castcircleflare:Clone()
circle.Parent = circleattach
circleflare.Parent = circleattach
circle:Emit(2)
local chargesound = Instance.new("Sound", circleattach)
chargesound.SoundId = "rbxassetid://8392900771"
chargesound.Pitch = 2.5
chargesound.Volume = 1.5*VOLUME
chargesound.Playing = true
debris:AddItem(chargesound, 2)
local spellcard = Instance.new("Sound", circleattach)
spellcard.SoundId = "rbxassetid://3723411843"
spellcard.Pitch = 2
spellcard.Volume = 0.75*VOLUME
spellcard.Playing = true
debris:AddItem(spellcard, 1)
loop(0.5, function(delta)
pointtomouse(delta*15)
local circlepos = cn(getcirclepos(), mouse.Hit.Position)
circleattach.CFrame = circlepos
for i = 1, 2 do
local effect = anchorpart(Instance.new("Part", workspace))
effect.Transparency = 1
local a1 = Instance.new("Attachment", effect)
local a2 = Instance.new("Attachment", effect)
local trail = stuff.xatk.chargetrail:Clone()
trail.Parent = a1
trail.Attachment0 = a1
trail.Attachment1 = a2
a1.CFrame = cn(-0.1, 0, 0)
a2.CFrame = cn(0.1, 0, 0)
local rot = ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
effect.CFrame = circlepos * rot * cn(0, random(40, 80), 0)
tweenservice:Create(effect, TweenInfo.new(0.1), {
CFrame = circlepos * rot
}):Play()
debris:AddItem(effect, 0.1)
end
animator:LerpTransforms({
Head = ca(0, rad(-35), 0),
Torso = ca(0, rad(35), 0),
LArm = CN0,
RArm = ca(rad(55), 0, rad(50)),
LLeg = CN0,
RLeg = CN0
}, delta*10, 1)
end)
humanoid.WalkSpeed = 2
local scamparticles = {}
local hb = runservice.Heartbeat:Connect(function()
for particleemitter, amt in scamparticles do
particleemitter:Emit(amt)
end
end)
connections.add(hb)
local emitattach = newattachment(cn(getemitpos(), mouse.Hit.Position))
local emitterglow = stuff.xatk.emitterglow:Clone()
local emitterparticles = stuff.xatk.emitterparticles:Clone()
emitterglow.Parent = emitattach
emitterparticles.Parent = emitattach
local beamhitattach = newattachment(emitattach.CFrame)
local hitglow = stuff.xatk.hitglow:Clone()
local hitsparks = stuff.xatk.hitsparks:Clone()
local smallhitsparks = stuff.xatk.hitsparks2:Clone()
hitglow.Parent = beamhitattach
hitsparks.Parent = beamhitattach
smallhitsparks.Parent = beamhitattach
scamparticles[emitterglow] = 1
scamparticles[emitterparticles] = 2
scamparticles[hitglow] = 1
scamparticles[hitsparks] = 4
scamparticles[smallhitsparks] = 2
local thinbeam = stuff.xatk.thinbeam:Clone()
thinbeam.Parent = emitattach
thinbeam.Attachment0 = emitattach
thinbeam.Attachment1 = beamhitattach
thinbeam.Width0 = 0.1
thinbeam.Width1 = 0.1
local dustcontainer = anchorpart(Instance.new("Part", workspace))
dustcontainer.Transparency = 1
dustcontainer.Size = v3(7.5, 7.5, 0)
dustcontainer.CFrame = emitattach.CFrame
local flashingcirclecontainer = anchorpart(Instance.new("Part", workspace))
flashingcirclecontainer.Transparency = 1
flashingcirclecontainer.Size = V30
flashingcirclecontainer.CFrame = emitattach.CFrame
local beamdustcontainer = anchorpart(Instance.new("Part", workspace))
beamdustcontainer.Transparency = 1
beamdustcontainer.Size = V30
beamdustcontainer.CFrame = emitattach.CFrame
local maindust = stuff.xatk.emitterdustparticles:Clone()
maindust.Parent = dustcontainer
--local flashingcircle = stuff.xatk.flashingcircle:Clone()
--flashingcircle.Parent = flashingcirclecontainer
local flashingtwirl = stuff.xatk.flashingtwirl:Clone()
flashingtwirl.Parent = flashingcirclecontainer
local beamdust = stuff.xatk.beamdust:Clone()
beamdust.Parent = beamdustcontainer
scamparticles[maindust] = 20
--scamparticles[flashingcircle] = 1
scamparticles[flashingtwirl] = 1
scamparticles[beamdust] = 20
tweenservice:Create(thinbeam, TweenInfo.new(0.75, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Width0 = 1,
Width1 = 1
}):Play()
local spellrings = {
Large = {
Position = cn(),
Target = cn(-7, 0, -15),
Attachments = {},
Beams = { Top = {}, Bottom = {} }
},
Small = {
Position = cn(),
Target = cn(-5, 0, -7.5),
Attachments = {},
Beams = { Top = {}, Bottom = {} }
}
}
for ringname, v in spellrings do
for i = 1, 2 do
local attachment = newattachment(cn(getemitpos()))
table.insert(v.Attachments, attachment)
end
for ringsegment, t in v.Beams do
for i = 1, 2 do
local curvesize = (ringname == "Large" and 10 or 7) * (ringsegment == "Top" and -1 or 1)
local beam = i == 1 and stuff.xatk.ringbeam:Clone() or stuff.xatk.ringbeam2:Clone()
beam.Parent = v.Attachments[1]
beam.Attachment0 = v.Attachments[1]
beam.Attachment1 = v.Attachments[2]
beam.CurveSize0 = 0
beam.CurveSize1 = 0
beam.Width0 = 0.25
beam.Width1 = 0.25
local width = i == 1 and 1 or 0.3
tweenservice:Create(beam, TweenInfo.new(0.5 + random()*0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
CurveSize0 = curvesize,
CurveSize1 = curvesize,
Width0 = width,
Width1 = width
}):Play()
table.insert(t, beam)
end
end
end
local function pointbeam(delta)
pointtomouse(delta*10)
local circledirection = cn(getcirclepos(), mouse.Hit.Position)
local direction = cn(getemitpos(), mouse.Hit.Position)
local raycast = query:Raycast(direction.Position, direction.LookVector * 2000)
local hitposition = raycast and raycast.Position or (direction * cn(0, 0, -2000)).Position
local length = (hitposition - direction.Position).Magnitude
for name, circleinfo in spellrings do
circleinfo.Position = circleinfo.Position:Lerp(circleinfo.Target, math.min(delta*5))
for i, attachment in circleinfo.Attachments do
local offset = cn(circleinfo.Position.X * (i == 1 and -1 or 1), 0, circleinfo.Position.Z)
local initrotation = getruntime()*(name == "Large" and 90 or -90)
local rotation = i == 1 and ca(0, rad(90), rad(-90)) or ca(0, rad(-90), rad(90))
attachment.CFrame = direction * ca(0, 0, rad(initrotation)) * offset * rotation
end
end
local beammid = direction * cn(0, 0, -length/2)
dustcontainer.CFrame = beammid
dustcontainer.Size = v3(7.5, 7.5, length + 10)
flashingcirclecontainer.CFrame = beammid
flashingcirclecontainer.Size = v3(0, 0, length - 15)
beamdustcontainer.CFrame = beammid
beamdustcontainer.Size = v3(0, 0, length)
emitattach.CFrame = direction
beamhitattach.CFrame = cn(hitposition, hitposition + direction.LookVector)
circleattach.CFrame = circledirection
end
local beamsound1 = Instance.new("Sound", emitattach)
beamsound1.SoundId = "rbxassetid://2971286302"
beamsound1.Pitch = 0.7
beamsound1.Volume = 2*VOLUME
beamsound1.Playing = true
beamsound1.Looped = true
loop(1, function(delta)
pointbeam(delta)
animator:LerpTransforms({
Head = ca(0, rad(35), 0),
Torso = ca(0, rad(-40), 0),
LArm = ca(rad(40.893), rad(-20.705), rad(-22.208)),
RArm = ca(rad(4.35), rad(-22.67), rad(37.347)),
LLeg = CN0,
RLeg = CN0
}, delta*10, 1)
end)
animator:SetPriorities({
WingCenter = 1,
Wing1 = 1, Wing2 = 1, Wing3 = 1, Wing4 = 1, Wing5 = 1, Wing6 = 1,
})
local smok = stuff.xatk.smoke:Clone()
smok.Parent = emitattach
local darkbeams = {}
for i = 1, 7 do
local a1 = newattachment(cn(getemitpos()))
local a2 = newattachment(cn(getemitpos()))
local beam = stuff.xatk.darkbeam:Clone()
beam.Parent = a1
beam.Attachment0 = a1
beam.Attachment1 = a2
beam.CurveSize0 = 0
beam.Width0 = 0.15
beam.Width1 = 0.15
local darkemit1 = stuff.xatk.darkemit:Clone()
local darkemit2 = stuff.xatk.darkemit2:Clone()
local darklight = stuff.xatk.darklight:Clone()
darkemit1.Parent = a2
darkemit2.Parent = a2
darklight.Parent = a2
scamparticles[darkemit1] = 3
scamparticles[darkemit2] = 3
scamparticles[darklight] = 2
local burningsound = Instance.new("Sound", a2)
burningsound.SoundId = "rbxassetid://9064807398"
burningsound.Pitch = 0.8 + random()*0.4
burningsound.Volume = 0.5*VOLUME
burningsound.Playing = true
tweenservice:Create(beam, TweenInfo.new(0.3 + random()*0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Width0 = 2,
}):Play()
tweenservice:Create(beam, TweenInfo.new(1, Enum.EasingStyle.Quint, Enum.EasingDirection.Out, 0, false, 4), {
Width0 = 0,
}):Play()
table.insert(darkbeams, {
Beam = beam,
Attachment0 = a1,
Attachment1 = a2,
Sound = burningsound
})
end
local emitsound = Instance.new("Sound", emitattach)
emitsound.SoundId = "rbxassetid://9116386389"
emitsound.Volume = 3*VOLUME
emitsound.Playing = true
emitsound.Looped = true
local castsound = Instance.new("Sound", circleattach)
castsound.SoundId = "rbxassetid://3750959716"
castsound.Volume = 2*VOLUME
castsound.Playing = true
debris:AddItem(castsound, 1.5)
local castsound2 = Instance.new("Sound", circleattach)
castsound2.SoundId = "rbxassetid://3748209678"
castsound2.Pitch = 0.8
castsound2.Volume = 3*VOLUME
castsound2.Playing = true
debris:AddItem(castsound2, 1.5)
local beamsound2 = Instance.new("Sound", circleattach)
beamsound2.SoundId = "rbxassetid://3273239976"
beamsound2.Pitch = 0.3
beamsound2.Volume = 3*VOLUME
beamsound2.Playing = true
local BEAM_SOLID = NumberSequence.new({NumberSequenceKeypoint.new(0, 0), NumberSequenceKeypoint.new(1, 0)})
local BEAM_TRANSPARENT = NumberSequence.new({NumberSequenceKeypoint.new(0, 0.7), NumberSequenceKeypoint.new(1, 0.7)})
task.delay(4, function()
tweenservice:Create(emitsound, TweenInfo.new(1), {
Volume = 0,
Pitch = 0.5
}):Play()
debris:AddItem(emitsound, 1)
tweenservice:Create(beamsound1, TweenInfo.new(2), {
Volume = 0,
Pitch = 0.5
}):Play()
debris:AddItem(beamsound1, 2)
for _, ring in spellrings do
local dur = 1.6 + random()*0.4
for _, beams in ring.Beams do
for _, beam in beams do
tweenservice:Create(beam, TweenInfo.new(dur, Enum.EasingStyle.Quint), {
Width0 = 0,
Width1 = 0
}):Play()
end
end
end
task.wait(1)
for _, beamdata in darkbeams do
for _, particles in beamdata.Attachment1:GetChildren() do
if not isa(particles, "ParticleEmitter") then
continue
end
particles.Enabled = false
scamparticles[particles] = nil
end
tweenservice:Create(beamdata.Sound, TweenInfo.new(1), {
Pitch = 0.4,
Volume = 0
}):Play()
end
end)
emitparticles(stuff.xatk.darkemit:Clone(), emitattach, 70)
emitparticles(stuff.xatk.darkemit2:Clone(), emitattach, 70)
emitparticles(stuff.xatk.darklight:Clone(), emitattach, 70)
scamparticles[hitglow] = nil
scamparticles[hitsparks] = nil
scamparticles[smallhitsparks] = nil
scamparticles[beamdust] = nil
hitglow.Enabled = false
hitsparks.Enabled = false
smallhitsparks.Enabled = false
beamdust.Enabled = false
thinbeam:Destroy()
local darkbeamstart = getruntime()
loop(5, function(delta)
pointbeam(delta)
local runtime = getruntime()
local direction = cn(getemitpos(), mouse.Hit.Position)
for i, beamdata in darkbeams do
local beamdirection = direction * ca(0, 0, rad(runtime*-180 + i*51.5)) * ca(rad(sin(runtime*2)*3), rad(cos(runtime*2)*3), 0)
local widthmult = 1 - math.max((getruntime() - darkbeamstart) - 4, 0)
local raycast = query:Raycast(beamdirection.Position, beamdirection.LookVector * 2000)
local hitposition = raycast and raycast.Position or (beamdirection * cn(0, 0, -2000)).Position
local width = (hitposition - beamdirection.Position).Magnitude^0.75
beamdata.Beam.Transparency = random(1, 3) == 1 and BEAM_TRANSPARENT or BEAM_SOLID
--beamdata.Beam.Color = random(1, 5) == 1 and BEAM_PURPLE or BEAM_BLACK
if raycast then
task.spawn(mastersparkhit, query.Base:GetPartBoundsInRadius(hitposition, width*0.5))
local effect = anchorpart(Instance.new("Part", workspace))
effect.Transparency = 1
local a1 = Instance.new("Attachment", effect)
local a2 = Instance.new("Attachment", effect)
local trail = random(1, 3) == 1 and stuff.xatk.hittrail:Clone() or stuff.xatk.chargetrail:Clone()
trail.Parent = a1
trail.Attachment0 = a1
trail.Attachment1 = a2
a1.CFrame = cn(-0.1, 0, 0)
a2.CFrame = cn(0.1, 0, 0)
local initpos = cn(hitposition) * ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
effect.CFrame = initpos
tweenservice:Create(effect, TweenInfo.new(0.1), {
CFrame = initpos * cn(0, random(80, 160), 0)
}):Play()
debris:AddItem(effect, 0.2)
end
beamdata.Beam.CurveSize0 = width*0.2
beamdata.Beam.Width1 = width*widthmult
beamdata.Attachment0.CFrame = beamdirection
beamdata.Attachment1.CFrame = cn(hitposition, hitposition + direction.LookVector)
end
animator:LerpTransforms({
Head = ca(0, rad(-50), 0),
Torso = ca(rad(random(-30, 30)/15), rad(50 + random(-30, 30)/15), rad(random(-30, 30)/15)),
LArm = ca(rad(-4.333), rad(-2.498), rad(-29.906)),
RArm = ca(rad(42.609), rad(10.431), rad(26.764)),
LLeg = CN0,
RLeg = CN0
}, delta*10, 1)
local deg = getruntime()*720
local wingspin = ca(0, 0, rad(-deg)) * ca(rad(-30), 0, 0)
animator:LerpTransforms({
WingCenter = ca(rad(deg), rad(deg), rad(deg)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*30, 1)
humanoid.Velocity = humanoid.Velocity + cn(mouse.Hit.Position, humanoid.Position.Position).LookVector*30*delta
end)
emitparticles(stuff.xatk.darkemit:Clone(), emitattach, 35)
emitparticles(stuff.xatk.darkemit2:Clone(), emitattach, 35)
emitparticles(stuff.xatk.darklight:Clone(), emitattach, 35)
table.clear(scamparticles)
animator:SetPriorities({
WingCenter = 0,
Wing1 = 0, Wing2 = 0, Wing3 = 0, Wing4 = 0, Wing5 = 0, Wing6 = 0,
})
--tweenservice:Create(thinbeam, TweenInfo.new(0.5), {
-- Width0 = 0,
-- Width1 = 0
--}):Play()
smok.Enabled = false
maindust.Enabled = false
flashingtwirl.Enabled = false
loop(0.5, function(delta)
pointbeam(delta)
animator:LerpTransforms({
Head = ca(0, rad(-50), 0),
Torso = ca(0, rad(50), 0),
LArm = ca(rad(-4.333), rad(-2.498), rad(-29.906)),
RArm = ca(rad(42.609), rad(10.431), rad(26.764)),
LLeg = CN0,
RLeg = CN0
}, delta*10, 1)
end)
circle.Enabled = false
circleflare.Enabled = false
emitterglow.Enabled = false
emitterparticles.Enabled = false
debris:AddItem(circleattach, 2)
debris:AddItem(dustcontainer, 2)
debris:AddItem(beamdustcontainer, 1)
debris:AddItem(flashingcirclecontainer, 0.03)
debris:AddItem(emitattach, 2)
debris:AddItem(beamhitattach, 2)
for _, ring in spellrings do
for _, beams in ring.Beams do
for _, beam in beams do
beam:Destroy()
end
end
for _, attachment in ring.Attachments do
attachment:Destroy()
end
end
for _, beamdata in darkbeams do
beamdata.Beam:Destroy()
beamdata.Attachment0:Destroy()
beamdata.Attachment1:Destroy()
end
-- CLEANUP DDDDDDDDDDDDDDDD:
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0,
})
connections.disconnect(hb)
--hb:Disconnect()
--connections.remove(hb)
humanoid.WalkSpeed = 8
scriptstate.IsAttacking = false
end
local MAX_RUNNING_ICE_SHATTER_EFFECTS = 10
local runningshattereffects = 0
local OFFSETS = {
{-0.25, 0.25, -0.25},
{-0.25, 0.25, 0.25},
{0.25, 0.25, -0.25},
{0.25, 0.25, 0.25},
{-0.25, -0.25, -0.25},
{-0.25, -0.25, 0.25},
{0.25, -0.25, -0.25},
{0.25, -0.25, 0.25},
}
local function icesparkshatter(cf, partsize)
if runningshattereffects >= MAX_RUNNING_ICE_SHATTER_EFFECTS then
return
end
runningshattereffects = runningshattereffects + 1
local iceparts = {}
for _, offset in OFFSETS do
local velocity = v3(random(-25, 25), random(10, 25), random(-25, 25))
local rotvelocity = v3(random(-20, 20), random(-20, 20), random(-20, 20))
local size = (partsize + v3(0.5, 0.5, 0.5))*0.5
local iceagain = anchorpart(Instance.new("Part", workspace))
iceagain.Material = Enum.Material.Ice
iceagain.Color = Color3.fromRGB(27, 42, 53)
iceagain.Transparency = 0.5
iceagain.CFrame = cf
iceagain.Size = size
table.insert(iceparts, {
Part = iceagain,
Velocity = velocity,
RotVelocity = rotvelocity,
CFrame = cf * cn(size.X*offset[1], size.Y*offset[2], size.Z*offset[3])
})
end
loop(1, function(delta)
for _, part in iceparts do
part.Velocity = part.Velocity - v3(0, GRAVITY*delta, 0)
part.CFrame = (part.CFrame + part.Velocity*delta) * ca(part.RotVelocity.X*delta, part.RotVelocity.Y*delta, part.RotVelocity.Z*delta)
part.Part.CFrame = part.CFrame
end
end)
for _, part in iceparts do
part.Part:Destroy()
end
runningshattereffects = runningshattereffects - 1
end
-- make this NOT accept a table of parts and have icespark track parts on its own
-- so that other attacks like dieball2 dont have to make a table to use this function
local function icesparkfreezepart(part, hitparts)
table.insert(hitparts, part)
local cf = part.CFrame
local ice = anchorpart(Instance.new("Part", workspace))
ice.Material = Enum.Material.Ice
ice.Color = Color3.fromRGB(27, 42, 53)
ice.Transparency = 0.5
ice.CFrame = cf
ice.Size = part.Size + v3(0.5, 0.5, 0.5)
local anchoredchanged = part:GetPropertyChangedSignal("Anchored"):Connect(function()
if not part.Anchored then
part.Anchored = true
end
end)
local cframechanged = part:GetPropertyChangedSignal("CFrame"):Connect(function()
if part.CFrame ~= cf then
part.CFrame = cf
end
end)
local sizechanged = part:GetPropertyChangedSignal("Size"):Connect(function()
ice.Size = part.Size + v3(0.5, 0.5, 0.5)
end)
connections.add(anchoredchanged)
connections.add(cframechanged)
connections.add(sizechanged)
part.Anchored = true
part.CFrame = cf
local hithum = part.Parent and isa(part.Parent, "Model") and part.Parent ~= workspace and part.Parent:FindFirstChildOfClass("Humanoid")
task.spawn(function()
if hithum then
loop(3, function(delta)
hithum.Health = hithum.Health - delta*20
end)
else
task.wait(3)
end
task.delay(0.1, function()
connections.disconnect(anchoredchanged)
connections.disconnect(cframechanged)
part.Anchored = false
part.Velocity = v3(random(-10, 10), random(-10, 10), random(-10, 10))
part.RotVelocity = v3(random(-10, 10), random(-10, 10), random(-10, 10))
end)
connections.disconnect(sizechanged)
table.remove(hitparts, table.find(hitparts, part))
ice:Destroy()
icesparkshatter(cf, part.Size)
end)
end
local function icesparkattack(position, hitparts)
for _, part in query:GetPartBoundsInRadius(position, 6) do
if table.find(hitparts, part) then
continue
end
-- anti ppe
if not ({pcall(function() return part.Name end)})[1] then
continue
end
if sizecheck and math.max(part.Size.X, part.Size.Y, part.Size.Z) > 50 then
continue
end
icesparkfreezepart(part, hitparts)
end
end
local function icesparkprojectile(origpos, hitparts)
local basecolor = stuff.xaltatk.chargetrail.Color
local basetransparency = stuff.xaltatk.chargetrail.Transparency
local black = ColorSequence.new(Color3.new())
local opaque = NumberSequence.new(0)
local endpos = mouse.Hit.Position
local length = (endpos - origpos).Magnitude
humanoid.Velocity = cn(endpos, origpos).LookVector * 10
if length > 750 then
endpos = origpos + (endpos - origpos).Unit*750
length = 750
end
local a1 = newattachment(cn(origpos))
local a2 = newattachment(cn(origpos))
local soundattach = newattachment(cn(origpos))
local firesound1 = Instance.new("Sound", soundattach)
firesound1.SoundId = "rbxassetid://2018386608"
firesound1.Volume = 2 * VOLUME
firesound1.Pitch = 0.9 + random()*0.2
firesound1.Playing = true
firesound1.TimePosition = 0.1
debris:AddItem(soundattach, 3)
tweenservice:Create(firesound1, TweenInfo.new(1), {
Pitch = 0.3,
Volume = 0
}):Play()
local trail = stuff.xaltatk.chargetrail:Clone()
trail.Parent = a1
trail.Attachment0 = a1
trail.Attachment1 = a2
local beampart = anchorpart(Instance.new("Part", workspace))
beampart.Transparency = 1
local darkbeamflakes = stuff.xaltatk.darkbeamflakes:Clone()
local purplebeamflakes = stuff.xaltatk.purplebeamflakes:Clone()
darkbeamflakes.Parent = beampart
purplebeamflakes.Parent = beampart
local midpos = (cn(origpos, endpos) * cn(random(-10, 10), random(-10, 10), -length*0.1 - length*random()*0.8)).Position
local currentpos = origpos
local speed = 1.5 + random()*2
local progress = 0
local raycast
local travelstart = getruntime()
repeat
progress = progress + runservice.Heartbeat:Wait()*speed
local nextpos = (origpos:Lerp(midpos, progress)):Lerp(midpos:Lerp(endpos, progress), progress)
local direction = cn(currentpos, nextpos)
local dist = (nextpos - currentpos).Magnitude
raycast = query:Raycast(currentpos, direction.LookVector*dist)
local newpos = raycast and raycast.Position or nextpos
if raycast then
a1.CFrame = cn(raycast.Position + v3(0, 1, 0))
a2.CFrame = cn(raycast.Position - v3(0, 1, 0))
else
local pos = cn(nextpos, nextpos + direction.LookVector)
a1.CFrame = pos * cn(0, 1, 0)
a2.CFrame = pos * cn(0, -1, 0)
end
local beamlength = (newpos - currentpos).Magnitude
local emitamt = math.ceil(beamlength)
beampart.CFrame = direction * cn(0, 0, -beamlength/2)
beampart.Size = v3(2, 2, beamlength)
darkbeamflakes:Emit(emitamt)
purplebeamflakes:Emit(emitamt)
currentpos = newpos
if random(1, 5) == 1 then
trail.Color = black
trail.Transparency = opaque
trail.LightEmission = 0
else
trail.Color = basecolor
trail.Transparency = basetransparency
trail.LightEmission = 1
end
until raycast or getruntime() - travelstart > 5
if raycast then
local effectpart = anchorpart(Instance.new("Part", workspace))
local attach = Instance.new("Attachment", effectpart)
effectpart.Transparency = 1
effectpart.CFrame = cn(raycast.Position)
effectpart.Size = v3(3, 3, 3)
local firesound1 = Instance.new("Sound", effectpart)
firesound1.SoundId = "rbxassetid://632919727"
firesound1.Volume = 0.6 * VOLUME
firesound1.Pitch = 0.8 + random()*0.4
firesound1.Playing = true
firesound1.TimePosition = 0.1
debris:AddItem(firesound1, 2)
emitparticles(stuff.xaltatk.darksplash:Clone(), effectpart, 15)
emitparticles(stuff.xaltatk.purplesplash:Clone(), effectpart, 15)
effectpart.Size = v3(5, 5, 5)
emitparticles(stuff.zatk.dust:Clone(), effectpart, 200)
emitparticles(stuff.zatk.idk:Clone(), effectpart, 5)
debris:AddItem(effectpart, 4)
local spinnypartrot = ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
local rotvelocity = v3(random(-15, 15), random(-15, 15), random(-15, 15))
local spinnypart = anchorpart(Instance.new("Part", workspace))
spinnypart.Material = Enum.Material.Neon
spinnypart.Color = Color3.new()
spinnypart.CFrame = cn(raycast.Position) * spinnypartrot
spinnypart.Size = v3(9, 9, 9)
task.spawn(loop, 1, function(delta)
spinnypartrot = spinnypartrot * ca(rotvelocity.X*delta, rotvelocity.Y*delta, rotvelocity.Z*delta)
spinnypart.CFrame = cn(raycast.Position) * spinnypartrot
end)
debris:AddItem(spinnypart, 1)
tweenservice:Create(spinnypart, TweenInfo.new(1), {
Transparency = 1,
Size = v3(5, 5, 5)
}):Play()
icesparkattack(raycast.Position, hitparts)
local progress = 0
local height = random(40, 120)
local pos1 = raycast.Position
local pos2 = raycast.Position + v3(random(-30, 30), height, random(-30, 30))
local midpos2 = raycast.Position + v3(random(-100, 100), height*0.1 + random()*height*0.8, random(-100, 100))
local currentpos = pos1
loop(1, function()
progress = progress + runservice.Heartbeat:Wait()*speed
local nextpos = pos1:Lerp(midpos2, progress):Lerp(midpos2:Lerp(pos2, progress), progress)
local pos = cn(nextpos, nextpos + cn(currentpos, nextpos).LookVector)
a1.CFrame = pos * cn(0, 1, 0)
a2.CFrame = pos * cn(0, -1, 0)
if random(1, 5) == 1 then
trail.Color = black
trail.Transparency = opaque
trail.LightEmission = 0
else
trail.Color = basecolor
trail.Transparency = basetransparency
trail.LightEmission = 1
end
currentpos = nextpos
end)
end
task.spawn(loop, 0.25, function()
if random(1, 5) == 1 then
trail.Color = black
trail.Transparency = opaque
trail.LightEmission = 0
else
trail.Color = basecolor
trail.Transparency = basetransparency
trail.LightEmission = 1
end
end)
debris:AddItem(a1, 0.25)
debris:AddItem(a2, 0.25)
debris:AddItem(beampart, 0.4)
end
local function icespark()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1
})
local function getcirclepos()
return cn(humanoid.Position.Position, mouse.Hit.Position) * cn(0, 0, -2)
end
local function getflakepos()
return getcirclepos() * cn(0, 0, -1.15)
end
local circleattach = newattachment(getcirclepos())
local flakeattach = newattachment(getflakepos())
local scamparticles = {}
local lastflash = {}
local emithb = runservice.Heartbeat:Connect(function()
for emitter, emittime in scamparticles do
if not lastflash[emitter] then
lastflash[emitter] = getruntime()
end
local lastflashtime = lastflash[emitter]
local elapsed = getruntime() - lastflashtime
if elapsed >= emittime then
lastflash[emitter] = getruntime()
emitter:Emit(math.round(elapsed/emittime))
end
end
end)
connections.add(emithb)
local darkcircle = stuff.xaltatk.darkcircle:Clone()
local purplecircle = stuff.xaltatk.purplecircle:Clone()
local bluecircle = stuff.xaltatk.bluecircle:Clone()
local darkflare = stuff.xaltatk.darkflare:Clone()
local purpleflare = stuff.xaltatk.purpleflare:Clone()
darkcircle.Parent = circleattach
purplecircle.Parent = circleattach
bluecircle.Parent = circleattach
darkflare.Parent = circleattach
purplecircle.Parent = circleattach
scamparticles[darkcircle] = 1/5
scamparticles[purplecircle] = 1/2
scamparticles[bluecircle] = 2/3
scamparticles[darkflare] = 1/30
scamparticles[purpleflare] = 1/20
local darkflake = stuff.xaltatk.darksnowflake:Clone()
local purpleflake = stuff.xaltatk.purplesnowflake:Clone()
local blueflake = stuff.xaltatk.bluesnowflake:Clone()
purpleflake.Parent = flakeattach
darkflake.Parent = flakeattach
blueflake.Parent = flakeattach
scamparticles[darkflake] = 1/2
scamparticles[purpleflake] = 1/4
scamparticles[blueflake] = 1/3
-- do sfx later cus wifi is dying
local chargeup = Instance.new("Sound", flakeattach)
chargeup.SoundId = "rbxassetid://2018386608"
chargeup.Pitch = 0.9
chargeup.Volume = 3 * VOLUME
chargeup.Playing = true
local spellcard = Instance.new("Sound", circleattach)
spellcard.SoundId = "rbxassetid://3723411843"
spellcard.Pitch = 2
spellcard.Volume = 0.75*VOLUME
spellcard.Playing = true
debris:AddItem(spellcard, 1)
humanoid.WalkSpeed = 4
local lasttrailspawntime = getruntime()
loop(1, function(delta)
circleattach.CFrame = getcirclepos()
flakeattach.CFrame = getflakepos()
animator:LerpTransforms({
Head = ca(rad(-5), 0, 0),
Torso = ca(rad(5), 0, 0),
LArm = ca(rad(110.414), rad(-37.159), rad(16.013)),
RArm = ca(rad(90), rad(-35), rad(-25)),
LLeg = ca(rad(-10), 0, 0),
RLeg = ca(rad(-5), 0, 0)
}, delta*10, 1)
if getruntime() - lasttrailspawntime > 0.1 then
lasttrailspawntime = getruntime()
for i = 1, random(3, 5) do
local rot = ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
local dist = random(20, 30)
local startpos = getcirclepos() * rot * cn(0, 0, dist)
local a1 = newattachment(startpos * cn(-0.25, 0, 0))
local a2 = newattachment(startpos * cn(0.25, 0, 0))
local trail = stuff.xaltatk.chargetrail:Clone()
trail.Parent = a1
trail.Attachment0 = a1
trail.Attachment1 = a2
local spawnstart = getruntime()
task.spawn(function()
loop(0.2, function()
local progress = (getruntime() - spawnstart)/0.2
local pos = getcirclepos() * rot * cn(sin(10 - progress*10)*3, 0, dist - dist*progress)
a1.CFrame = pos * cn(-0.25, 0, 0)
a2.CFrame = pos * cn(0.25, 0, 0)
end)
debris:AddItem(a1, 0.25)
debris:AddItem(a2, 0.25)
debris:AddItem(trail, 0.25)
end)
end
end
pointtomouse(delta * 15)
end)
debris:AddItem(chargeup, 1)
tweenservice:Create(chargeup, TweenInfo.new(1), {
Pitch = 0.3,
Volume = 0
}):Play()
for _ = 1, 5 do
for i = 1, 2 do
local startcf = getflakepos() * ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
local dist = random(15, 30)
local firea1 = newattachment(startcf * cn(0, 0.5, 0))
local firea2 = newattachment(startcf * cn(0, -0.5, 0))
local trailaaa = stuff.xaltatk.chargetrail:Clone()
trailaaa.Parent = firea1
trailaaa.Attachment0 = firea1
trailaaa.Attachment1 = firea2
if i == 1 then
trailaaa.Color = ColorSequence.new(Color3.new())
trailaaa.Transparency = NumberSequence.new(0)
trailaaa.LightEmission = 0
end
tweenservice:Create(firea1, TweenInfo.new(1, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { CFrame = startcf * cn(0, 0.5, dist) }):Play()
tweenservice:Create(firea2, TweenInfo.new(1, Enum.EasingStyle.Quart, Enum.EasingDirection.Out), { CFrame = startcf * cn(0, -0.5, dist) }):Play()
debris:AddItem(firea1, 1.5)
debris:AddItem(firea2, 1.5)
end
end
local constantemitsound = Instance.new("Sound", flakeattach)
constantemitsound.SoundId = "rbxassetid://9113122548"
constantemitsound.Pitch = 0.2
constantemitsound.Volume = 0
constantemitsound.Playing = true
constantemitsound.Looped = true
local constantemitsound2 = Instance.new("Sound", flakeattach)
constantemitsound2.SoundId = "rbxassetid://9125986205"
constantemitsound2.Pitch = 0.1
constantemitsound2.Volume = 0
constantemitsound2.Playing = true
constantemitsound2.Looped = true
tweenservice:Create(constantemitsound, TweenInfo.new(0.4), {
Pitch = 0.75,
Volume = 0.5 * VOLUME
}):Play()
tweenservice:Create(constantemitsound2, TweenInfo.new(0.4), {
Pitch = 0.3,
Volume = 0.5 * VOLUME
}):Play()
local lastfiretime = 0
local attackstarttime = getruntime()
local hitparts = {}
humanoid.WalkSpeed = 2
animator:SetPriorities({
WingCenter = 1, Wing1 = 1, Wing2 = 1, Wing3 = 1, Wing4 = 1, Wing5 = 1, Wing6 = 1
})
repeat
local delta = runservice.Heartbeat:Wait()
animator:LerpTransforms({
Head = ca(rad(-15), 0, 0),
Torso = ca(rad(15), 0, 0),
LArm = ca(rad(18.859), rad(-18.747), rad(-36.005)),
RArm = ca(rad(81.31), rad(-42.363), rad(49.552)),
LLeg = ca(rad(-30), 0, 0),
RLeg = ca(rad(-20), 0, 0)
}, delta*15, 1)
local deg = getruntime()*360
local wingspin = ca(0, 0, rad(-deg)) * ca(rad(-30), 0, 0)
animator:LerpTransforms({
WingCenter = ca(rad(deg), rad(deg), rad(deg)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*20, 1)
pointtomouse(delta * 15)
circleattach.CFrame = getcirclepos()
flakeattach.CFrame = getflakepos()
if getruntime() - lastfiretime > 0.15 then
lastfiretime = getruntime()
local flakepos = getflakepos().Position
for i = 1, 2 do
task.spawn(icesparkprojectile, flakepos, hitparts)
end
end
until not keysdown[Enum.KeyCode.X] and getruntime() - attackstarttime > 0.2
tweenservice:Create(constantemitsound, TweenInfo.new(0.75), {
Pitch = 0.2,
Volume = 0
}):Play()
tweenservice:Create(constantemitsound2, TweenInfo.new(0.75), {
Pitch = 0.1,
Volume = 0
}):Play()
connections.disconnect(emithb)
debris:AddItem(circleattach, 2)
debris:AddItem(flakeattach, 3)
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0,
WingCenter = 0, Wing1 = 0, Wing2 = 0, Wing3 = 0, Wing4 = 0, Wing5 = 0, Wing6 = 0
})
humanoid.WalkSpeed = 8
scriptstate.IsAttacking = false
end
local function sustainflicker(increaserate, max)
local hb = runservice.Heartbeat:Connect(function(delta)
humanoid.FlickerRate = math.max(humanoid.FlickerRate + increaserate*delta, max)
end)
connections.add(hb)
return {
Stop = function()
connections.disconnect(hb)
end
}
end
local function snowflakebouncekill(part)
if not ({pcall(function() return part.Name[1] end)}) then
return
end
if not isa(part, "BasePart") then
return
end
if sizecheck and math.max(part.Size.X, part.Size.Y, part.Size.Z) >= 100 then
return
end
pcall(game.Destroy, part)
end
local function snowflakebouncebeam(snowflake, startpos, endpos)
snowflake.Active = false
snowflake.Part.Transparency = 1
snowflake.Trail.Enabled = false
snowflake.ParticleEmitter.Enabled = false
debris:AddItem(snowflake.Part, 2)
local length = (endpos - startpos).Magnitude
local center = cn(startpos, endpos) * cn(0, 0, -length/2)
local part = anchorpart(Instance.new("Part", workspace))
part.Material = Enum.Material.Neon
part.Color = random(1, 3) == 1 and Color3.fromRGB(110, 74, 255) or Color3.new()
part.CFrame = center
part.Size = v3(1, 1, length)
--tweenservice:Create(part, TweenInfo.new(0.2), { Transparency = 1, Size = v3(0.1, 0.1, length) }):Play()
debris:AddItem(part, 1)
for _, part in query:GetPartBoundsInBox(center, v3(10, 10, length)) do
snowflakebouncekill(part)
end
end
local function oldaltz_snowflakebounce()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1
})
local OPAQUE = NumberSequence.new(0)
local TRANSPARENT = NumberSequence.new(0.5)
-- using a big main loop for the 20 projectiles unlike what i did for icespark
-- some lag from icespark may be from the amount of threads running
-- so im gonna mitigate that here
local routes = { {}, {} }
local throwsactive = false
local mainloop
mainloop = runservice.Heartbeat:Connect(function(delta)
if not throwsactive then
return
end
local currenttime = getruntime()
local numactive = 0
for i, snowflakes in routes do
for _, snowflake in snowflakes do
if not snowflake.Active then
continue
end
-- using table.find() in these two if statements cus im scared that
-- removal of other snowflakes will shift this one and make it not
-- match the index of the loop
-- this will usually always be cut short by the beam attack but
-- JUST IN CASE it gets timed out itll stop them
if currenttime - snowflake.TravelStartTime >= 5 then
snowflake.Active = false
pcall(game.Destroy, snowflake.Part)
table.remove(routes[i], table.find(routes[i], snowflake))
continue
end
local nextpos = snowflake.CFrame + snowflake.Velocity*delta
local raycast = query:Raycast(snowflake.CFrame.Position, nextpos.Position)
--if raycast then
-- snowflake.Active = false
-- snowflake.Part.CFrame = cn(raycast.Position)
-- snowflake.Part.Transparency = 1
-- snowflake.Trail.Enabled = false
-- snowflake.ParticleEmitter.Enabled = false
-- debris:AddItem(snowflake.Part, 2)
-- table.remove(routes[i], table.find(routes[i], snowflake))
-- for _, part in query:GetPartBoundsInRadius(raycast.Position, 3) do
-- snowflakebouncekill(part)
-- end
-- continue
--end
snowflake.Trail.Transparency = random(1, 3) == 3 and TRANSPARENT or OPAQUE
snowflake.CFrame = nextpos * ca(snowflake.RotVelocity.X*delta, snowflake.RotVelocity.Y*delta, snowflake.RotVelocity.Z*delta)
snowflake.Velocity -= v3(0, GRAVITY*delta, 0)
snowflake.Part.CFrame = snowflake.CFrame
numactive += 1
end
end
if numactive == 0 then
connections.disconnect(mainloop)
end
end)
connections.add(mainloop)
-- waits to simulate animating while i work on the attack logic
local function getthrowpos()
return humanoid.Position.Position + humanoid.Position.LookVector * 2
end
local pointconnection = runservice.Heartbeat:Connect(function(delta)
--pointtomouse(delta*10)
end)
connections.add(pointconnection)
local aimstarttime = getruntime()
repeat
local delta = task.wait()
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(5), rad(20), 0),
Torso = ca(rad(-5.514), rad(-24.898), rad(-2.327)),
LArm = ca(rad(20), 0, 0),
RArm = ca(rad(-20), 0, 0),
LLeg = CN0,
RLeg = CN0,
}, delta*10, 1)
end)
until getruntime() - aimstarttime >= 0.2 and not keysdown[Enum.KeyCode.Z]
for i = 1, 2 do
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(5), rad(20), 0),
Torso = ca(rad(-5.514), rad(-24.898), rad(-2.327)),
LArm = ca(rad(20), 0, 0),
RArm = ca(rad(-20), 0, 0),
LLeg = CN0,
RLeg = CN0,
}, delta*25, 1)
end)
local throwpos = cn(getthrowpos())
local throwdirection = cn(humanoid.Position.Position, mouse.Hit.Position)
local travelstarttime = getruntime()
for v = 1, 10 do
local snowflake = anchorpart(stuff.zaltatk.snowflake:Clone())
local cf = throwpos * ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
local obj = {
Active = true,
Part = snowflake,
Trail = snowflake.Attachment0.Trail,
ParticleEmitter = snowflake.ParticleEmitter,
TravelStartTime = travelstarttime,
CFrame = cf,
Velocity = (throwdirection * ca(rad(random(-10, 10)), rad(random(-10, 10)), rad(random(-10, 10)))).LookVector * 40 * (5 + v/2),
RotVelocity = v3(random(-20, 20), random(-20, 20), random(-20, 20))
}
snowflake.CFrame = cf
snowflake.Parent = workspace
table.insert(routes[i], obj)
end
throwsactive = true
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(5), rad(-25), 0),
Torso = ca(0, rad(25), 0),
LArm = ca(rad(-20), 0, 0),
RArm = ca(rad(107.118), rad(4.53), rad(64.917)),
LLeg = CN0,
RLeg = CN0,
}, delta*25, 1)
end)
end
-- create spell circle
task.wait(0.2)
-- fire
local route1idx = 1
local route1pos = getthrowpos()
local route2idx = 1
local route2pos = getthrowpos()
task.spawn(function()
local lastfiretime = 0
repeat
local currenttime = getruntime()
if currenttime - lastfiretime >= 0.05 then
lastfiretime = getruntime()
route1idx += 1
route2idx += 1
local flake1 = routes[1][route1idx]
local flake2 = routes[2][route1idx]
if flake1 then
local nextpos = flake1.CFrame.Position
snowflakebouncebeam(flake1, route1pos, nextpos)
route1pos = nextpos
end
if flake2 then
local nextpos = flake2.CFrame.Position
snowflakebouncebeam(flake2, route1pos, nextpos)
route1pos = nextpos
end
end
task.wait()
until route1idx >= #routes[1] and route2idx >= #routes[2]
end)
-- fire anim
task.wait(0.5)
connections.disconnect(pointconnection)
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0
})
scriptstate.IsAttacking = false
end
local function dieballshatterarea(position)
local emissionpart = anchorpart(Instance.new("Part", workspace))
emissionpart.Transparency = 1
emissionpart.Size = v3(5, 2, 5)
emissionpart.CFrame = cn(position + v3(0, 3, 0))
emitparticles(stuff.zaltatk2.aoe.Mist:Clone(), emissionpart, 100)
debris:AddItem(emissionpart, 2)
local circlepos = cn(position + v3(0, 0.15, 0))
local ring = anchorpart(stuff.zaltatk2.aoe.Ring:Clone())
local runes = anchorpart(stuff.zaltatk2.aoe.Runes:Clone())
ring.Size = v3(3, 0.05, 3)
ring.CFrame = circlepos
runes.Size = v3(2.7, 0.05, 2.7)
runes.CFrame = circlepos
ring.Parent = workspace
runes.Parent = workspace
tweenservice:Create(ring, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Size = v3(33.7, 0.05, 33.7)
}):Play()
tweenservice:Create(runes, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
Size = v3(31.3, 0.05, 31.3)
}):Play()
local chargeupattach = newattachment(circlepos)
local chargesound1 = Instance.new("Sound", chargeupattach)
chargesound1.SoundId = "rbxassetid://7157159286"
chargesound1.Volume = 3*VOLUME
chargesound1.Pitch = 0.6
chargesound1.Playing = true
local smallbottomplate = anchorpart(Instance.new("Part", workspace))
smallbottomplate.Transparency = 1
smallbottomplate.Size = v3(30, 0.1, 30)
smallbottomplate.CFrame = cn(position + v3(0, 0.1, 0))
local lines = stuff.zaltatk2.aoe.Lines:Clone()
lines.Parent = smallbottomplate
local spinspeed = -360
local spinhb = runservice.Heartbeat:Connect(function(delta)
circlepos *= ca(0, rad(spinspeed*delta), 0)
ring.CFrame = circlepos * cn(random(-100, 100)/100*spinspeed/180, random(-100, 100)/100*spinspeed/180, random(-100, 100)/100*spinspeed/180)
runes.CFrame = circlepos * cn(random(-100, 100)/100*spinspeed/180, random(-100, 100)/100*spinspeed/180, random(-100, 100)/100*spinspeed/180)
local emitamt = math.round(spinspeed/50)
if emitamt > 0 then
lines:Emit(emitamt)
end
spinspeed += 240*delta
end)
connections.add(spinhb)
task.wait(0.25)
local lastdamagetime = getruntime()
local damage = runservice.Heartbeat:Connect(function()
local currenttime = getruntime()
if 0.2 > currenttime - lastdamagetime then
return
end
lastdamagetime = currenttime
local hithums = {}
for _, part in query:GetPartBoundsInRadius(position + v3(0, 4, 0), 25) do
-- anti ppe
if not ({pcall(function() return part.Name end)})[1] then
continue
end
if not part.Parent or not isa(part.Parent, "Model") or part.Parent == workspace then
continue
end
local hum = part.Parent:FindFirstChildOfClass("Humanoid")
if hum and not table.find(hithums, hum) then
table.insert(hithums, hum)
hum.WalkSpeed /= 2
hum:TakeDamage(5)
end
end
end)
connections.add(damage)
local bottomplate = anchorpart(Instance.new("Part", workspace))
bottomplate.Transparency = 1
bottomplate.Size = v3(50, 0.1, 50)
bottomplate.CFrame = cn(position + v3(0, 0.1, 0))
local snowpart = anchorpart(Instance.new("Part", workspace))
snowpart.Transparency = 1
snowpart.Size = v3(50, 15, 50)
snowpart.CFrame = cn(position + v3(0, 14, 0))
local flashingrunesattach = newattachment(cn(position + v3(0, 0.05, 0)))
local swirlattach = newattachment(cn(position + v3(0, 0.2, 0)))
local wind = Instance.new("Sound", bottomplate)
wind.SoundId = "rbxassetid://3858704187"
wind.Pitch = 0.25
wind.Volume = 0
wind.Playing = true
wind.Looped = true
tweenservice:Create(wind, TweenInfo.new(0.75), {
Volume = 3*VOLUME
}):Play()
local flashingrunes = stuff.zaltatk2.aoe.FlashingRunes:Clone()
flashingrunes.Parent = flashingrunesattach
local swirl = stuff.zaltatk2.aoe.Swirl:Clone()
swirl.Parent = swirlattach
local brightflakes = stuff.zaltatk2.aoe.BrightFlakes:Clone()
local darkflakes = stuff.zaltatk2.aoe.DarkFlakes:Clone()
local snow = stuff.zaltatk2.aoe.Snow:Clone()
brightflakes.Parent = bottomplate
darkflakes.Parent = bottomplate
snow.Parent = snowpart
brightflakes:Emit(20)
darkflakes:Emit(10)
snow:Emit(100)
swirl:Emit(10)
task.wait(1.5)
tweenservice:Create(ring, TweenInfo.new(1.5), {
Color = Color3.fromRGB(156, 117, 255)
}):Play()
tweenservice:Create(runes, TweenInfo.new(1.5), {
Color = Color3.fromRGB(156, 117, 255)
}):Play()
task.wait(1.5)
tweenservice:Create(chargesound1, TweenInfo.new(1), {
Volume = 0,
Pitch = 0.3*VOLUME
}):Play()
debris:AddItem(chargeupattach, 1)
flashingrunes.Enabled = false
brightflakes.Enabled = false
darkflakes.Enabled = false
--lines.Enabled = false
snow.Enabled = false
swirl.Enabled = false
debris:AddItem(smallbottomplate, 0.5)
debris:AddItem(bottomplate, 1)
debris:AddItem(snowpart, 2)
debris:AddItem(flashingrunesattach, 0.1)
debris:AddItem(swirlattach, 1)
tweenservice:Create(wind, TweenInfo.new(2), {
Volume = 0,
Pitch = 0.1
}):Play()
local flashoverpart = anchorpart(Instance.new("Part", workspace))
flashoverpart.Transparency = 1
flashoverpart.Size = v3(50, 20, 50)
flashoverpart.CFrame = cn(position + v3(0, 9, 0))
emitparticles(stuff.zaltatk2.aoe.FlashoverMist:Clone(), flashoverpart, 100)
emitparticles(stuff.zaltatk2.aoe.DarkFlashoverFlakes:Clone(), flashoverpart, 25)
emitparticles(stuff.zaltatk2.aoe.BrightFlashoverFlakes:Clone(), flashoverpart, 12)
debris:AddItem(flashoverpart, 2)
local attackattach = newattachment(cn(position + v3(0, 9, 0)))
for i = 1, 3 do
local attacksound1 = Instance.new("Sound", attackattach)
attacksound1.SoundId = "rbxassetid://245520987"
attacksound1.Pitch = 0.5 + random()*0.4
attacksound1.Volume = 1*VOLUME
attacksound1.TimePosition = 0.3
attacksound1.Playing = true
attacksound1.PlayOnRemove = true
end
local attacksound2 = Instance.new("Sound", attackattach)
attacksound2.SoundId = "rbxassetid://4909206080"
attacksound2.Pitch = 0.75 + random()*0.15
attacksound2.Volume = 3*VOLUME
attacksound2.TimePosition = 0.3
attacksound2.Playing = true
attacksound2.PlayOnRemove = true
attackattach:Destroy()
connections.disconnect(spinhb)
connections.disconnect(damage)
pcall(game.Destroy, ring)
pcall(game.Destroy, runes)
-- this is not used but the ice spark attack does use a table
-- so to not keep making new tables for every part we use one
-- table for all parts
local hitpartstable = {}
for _, part in query:GetPartBoundsInRadius(position + v3(0, 4, 0), 25) do
-- anti ppe
if not ({pcall(function() return part.Name end)})[1] then
continue
end
if sizecheck and math.max(part.Size.X, part.Size.Y, part.Size.Z) > 50 then
continue
end
icesparkfreezepart(part, hitpartstable)
end
end
local function dieballbutitshattersanditsice()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
humanoid.WalkSpeed = 4
local initcf = animator.Torso:GetWorldPosition() * cn(0, 0, 8)
local attachment = newattachment(initcf)
local ball = anchorpart(Instance.new("Part", workspace))
ball.Transparency = 1
ball.Shape = Enum.PartType.Ball
ball.CFrame = initcf
ball.Size = v3(12, 12, 12)
local darkring = stuff.zaltatk2.darkring:Clone()
local lightring = stuff.zaltatk2.lightring:Clone()
local energyring = stuff.zaltatk2.ring2:Clone()
local smallenergyring = stuff.zaltatk2.ring3:Clone()
local orbbg = stuff.zaltatk2.bgblue:Clone()
local orbflakecircle = stuff.zaltatk2.circle:Clone()
local bigflakes = stuff.zaltatk2.bigflakes:Clone()
local surfaceflakes = stuff.zaltatk2.surfaceflakes:Clone()
darkring.Parent = attachment
lightring.Parent = attachment
energyring.Parent = attachment
smallenergyring.Parent = attachment
orbbg.Parent = attachment
orbflakecircle.Parent = attachment
bigflakes.Parent = ball
surfaceflakes.Parent = ball
local appear1 = Instance.new("Sound", attachment)
appear1.SoundId = "rbxassetid://5964884135"
appear1.Pitch = 1.5
appear1.Volume = 1*VOLUME
appear1.Playing = true
appear1.PlayOnRemove = true
appear1:Destroy()
local sound = Instance.new("Sound", attachment)
sound.SoundId = "rbxassetid://9064807398"
sound.Volume = 2.5*VOLUME
sound.Playing = true
sound.Looped = true
-- copy pasted code from regular z lol
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1,
WingCenter = 1,
Wing1 = 1, Wing2 = 1, Wing3 = 1, Wing4 = 1, Wing5 = 1, Wing6 = 1,
})
loop(0.4, function(delta)
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
animator:LerpTransforms({
Head = ca(rad(-11.94), rad(-59.042), rad(-13.836)),
Torso = ca(0, rad(59.951), rad(6.424)),
LArm = ca(rad(65.4), rad(-35.989), rad(-4.431)),
RArm = ca(rad(-13.651), rad(-6.28), rad(24.246)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*10, 1)
local cf = animator.Torso:GetWorldPosition() * cn(0, 0, 8)
attachment.CFrame = cn(cf.Position)
ball.CFrame = cf
end)
local holdstart = getruntime()
repeat
local delta = runservice.Heartbeat:Wait()
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
animator:LerpTransforms({
Head = ca(rad(-3.821), rad(10.292), rad(-1.278)),
Torso = ca(rad(4.394), rad(-9.877), rad(3.26)),
LArm = ca(rad(143.862), rad(-21.024), rad(14.944)),
RArm = ca(rad(-34.232), rad(-21.401), rad(34.228)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*10, 1)
local cf = animator.Torso:GetWorldPosition() * cn(0, 0, 8)
attachment.CFrame = cn(cf.Position)
ball.CFrame = cf
pointtomouse(delta*20)
until not keysdown[Enum.KeyCode.Z] and getruntime() - holdstart >= 0.2
local spinstarttime = getruntime()
task.spawn(function()
for i = 1, 2 do
task.wait(0.1)
local soundattach = newattachment(humanoid.Position)
local throwsound = Instance.new("Sound", soundattach)
throwsound.SoundId = "rbxassetid://608600954"
throwsound.Pitch = 0.9 + random()*0.2
throwsound.Volume = 2*VOLUME
throwsound.Playing = true
throwsound.PlayOnRemove = true
soundattach:Destroy()
end
end)
loop(0.2, function(delta)
local runtime = getruntime()
local wingspin = ca(0, 0, rad(runtime*720)) * ca(rad(-35), 0, 0)
local spinprogress = math.min((runtime - spinstarttime)/0.2, 1)
animator:LerpTransforms({
Head = ca(rad(-28.706), rad(-62.42), rad(-22.687)),
--Torso = ca(rad(179.102), rad(-9.877 + spinprogress*360), rad(-171.742)),
LArm = ca(rad(25.217), rad(-3.815), rad(-25.33)),
RArm = ca(rad(-17.574), rad(-9.425), rad(38.709)),
LLeg = CN0,
RLeg = CN0,
WingCenter = ca(rad(runtime*360), rad(runtime*360), rad(runtime*360)),
Wing1 = wingspin,
Wing2 = wingspin,
Wing3 = wingspin,
Wing4 = wingspin,
Wing5 = wingspin,
Wing6 = wingspin,
}, delta*15, 1)
animator:LerpTransforms({
Torso = ca(rad(179.102), rad(-9.877 - spinprogress*380), rad(-171.742)),
}, delta*50, 1)
local cf = animator.Torso:GetWorldPosition() * cn(0, 0, 8)
attachment.CFrame = cn(cf.Position)
ball.CFrame = cf
pointtomouse(delta*20)
end)
darkring.Enabled = false
lightring.Enabled = false
energyring.Enabled = false
smallenergyring.Enabled = false
orbbg.Enabled = false
orbflakecircle.Enabled = false
bigflakes.Enabled = false
surfaceflakes.Enabled = false
debris:AddItem(attachment, 0.4)
debris:AddItem(ball, 1)
sound:Destroy()
local currentpos = animator.Torso:GetWorldPosition() * cn(0, 0, 8)
local hitattachmentomg = newattachment(currentpos)
emitparticles(stuff.zatk.idk:Clone(), hitattachmentomg, 20)
debris:AddItem(hitattachmentomg, 1)
local hitsound = Instance.new("Sound", hitattachmentomg)
hitsound.SoundId = "rbxassetid://3929458922"
hitsound.Volume = 3*VOLUME
hitsound.Playing = true
hitsound.PlayOnRemove = true
hitsound.TimePosition = 1.1
hitsound:Destroy()
local hitsound2 = Instance.new("Sound", hitattachmentomg)
hitsound2.SoundId = "rbxassetid://632831227"
hitsound2.Volume = 0.5*VOLUME
hitsound2.Playing = true
hitsound2.PlayOnRemove = true
hitsound.TimePosition = 0.4
hitsound2:Destroy()
local hitsound3 = Instance.new("Sound", hitattachmentomg)
hitsound3.SoundId = "rbxassetid://260496290"
hitsound3.Volume = 1.5*VOLUME
hitsound3.Playing = true
hitsound3.PlayOnRemove = true
hitsound3:Destroy()
task.spawn(dieballshatterarea, currentpos.Position)
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0,
WingCenter = 0,
Wing1 = 0, Wing2 = 0, Wing3 = 0, Wing4 = 0, Wing5 = 0, Wing6 = 0,
})
humanoid.WalkSpeed = 8
scriptstate.IsAttacking = false
end
local function attackz()
if humanoid.FlickerRate > 50 then
local flicker = sustainflicker(50, 50)
if keysdown[Enum.KeyCode.LeftControl] then
oldaltz_snowflakebounce()
else
dieballbutitshattersanditsice()
end
flicker:Stop()
else
thedieball()
end
end
local function attackx()
if humanoid.FlickerRate > 50 then
local flicker = sustainflicker(50, 50)
icespark()
flicker:Stop()
else
masterspark()
end
end
local function standarddamage(position, radius, dmg)
local hithums = {}
for _, part in query:GetPartBoundsInRadius(position, radius) do
if not isa(part, "BasePart") then
continue
end
local hum = part.Parent and isa(part.Parent, "Model") and part.Parent ~= workspace and part.Parent:FindFirstChildOfClass("Humanoid")
if hum and not table.find(hithums, hum) then
table.insert(hithums, hum)
hum:TakeDamage(dmg)
end
end
return #hithums
end
local standardatkphase = 1
local standardattacks = {
function()
humanoid.Velocity = humanoid.Velocity + humanoid.Position.LookVector * 20
standarddamage((humanoid.Position * cn(0, 0, -1)).Position, 2, 15)
loop(0.2, function(delta)
animator:LerpTransforms({
Head = ca(rad(-14.511), rad(-43.079), rad(-20.754)),
Torso = ca(0, rad(45), rad(15)),
LArm = ca(rad(46.33), rad(-35.631), rad(-0.475)),
RArm = ca(rad(95), 0, rad(-20)),
LLeg = ca(0, 0, rad(-15)),
RLeg = ca(rad(14.511), rad(43.08), rad(69.246))
}, delta*30, 1)
end)
end,
function()
humanoid.Velocity = humanoid.Velocity - humanoid.Position.LookVector * 20
standarddamage((humanoid.Position * cn(0, 0, -1.5)).Position, 1.2, 30)
local kickstart = getruntime()
loop(0.2, function(delta)
local progress = (getruntime() - kickstart)/0.2
animator:LerpTransforms({
Head = ca(rad(35), 0, 0),
--Torso = ca(0, rad(45), rad(15)),
LArm = ca(0, 0, rad(-30)),
RArm = ca(0, 0, rad(25)),
LLeg = ca(rad(-10), 0, 0),
RLeg = ca(rad(50), 0, 0)
}, delta*20, 1)
animator:LerpTransforms({
Torso = ca(rad(360*progress*0.8), 0, 0),
}, delta*30, 1)
end)
end,
function()
humanoid.Velocity = humanoid.Velocity + humanoid.MoveDirection * 10
standarddamage(humanoid.Position.Position, 3, 20)
local kickstart = getruntime()
loop(0.2, function(delta)
local progress = (getruntime() - kickstart)/0.2
animator:LerpTransforms({
Head = ca(rad(-5.319), rad(-19.921), rad(-1.817)),
--Torso = ca(0, rad(45), rad(15)),
LArm = ca(rad(-22.91), rad(10.289), rad(-22.91)),
RArm = ca(rad(27.621), rad(12.199), rad(21.99)),
LLeg = ca(rad(-4.924), rad(0.867), rad(-9.963)),
RLeg = ca(rad(30), 0, rad(40))
}, delta*20, 1)
animator:LerpTransforms({
Torso = ca(0, rad(-360*progress*0.8), rad(10)),
}, delta*30, 1)
end)
end,
function()
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(2.424), rad(-0.078), rad(6.643)),
Torso = CN0,
LArm = ca(rad(28.481), rad(-9.847), rad(-17.495)),
RArm = ca(rad(-9.772), rad(-11.435), rad(49.019)),
LLeg = CN0,
RLeg = CN0
}, delta*20, 1)
end)
local wingnum
local handpos = (animator.RArm:GetWorldPosition() * cn(0, -0.5, 0)).Position
local smallestdist = math.huge
for i = 1, 6 do
local dist = (animator[`Wing{i}`]:GetWorldPosition().Position - handpos).Magnitude
if smallestdist > dist then
smallestdist = dist
wingnum = i
end
end
local part = character[`Wing{wingnum}`][1].Part
part.Parent = pps
local wing = anchorpart(stuff.wing:Clone())
local offset = cn(0, -2.4, -0) * ca(0, rad(90), 0)
wing.CFrame = animator.RArm:GetWorldPosition() * offset
wing.Parent = workspace
local hitpos1 = (humanoid.Position * cn(0, 0, -2.1)).Position
local soundattach = newattachment(cn(hitpos1))
local slicepitch = 0.9 + random()*0.2
local swishpitch = 0.9 + random()*0.2
local slicesound = Instance.new("Sound", soundattach)
slicesound.SoundId = "rbxassetid://566593606"
slicesound.Pitch = slicepitch*(0.95 + random()*0.1)
slicesound.Volume = 0.5*VOLUME
local slicesound2 = Instance.new("Sound", soundattach)
slicesound2.SoundId = "rbxassetid://566593606"
slicesound2.Pitch = slicepitch*(0.95 + random()*0.1)
slicesound2.Volume = 0.5*VOLUME
local swishsound = Instance.new("Sound", soundattach)
swishsound.SoundId = "rbxassetid://6241709963"
swishsound.Pitch = swishpitch*(0.95 + random()*0.1)
swishsound.Volume = 0.5*VOLUME
local swishsound2 = Instance.new("Sound", soundattach)
swishsound2.SoundId = "rbxassetid://6241709963"
swishsound2.Pitch = swishpitch*(0.95 + random()*0.1)
swishsound2.Volume = 0.5*VOLUME
slicesound.TimePosition = 0.1
slicesound2.TimePosition = 0.1
swishsound.TimePosition = 0.05
swishsound2.TimePosition = 0.05
swishsound:Play()
if standarddamage(hitpos1, 2.2, 30) > 0 then
slicesound:Play()
end
loop(0.2, function(delta)
animator:LerpTransforms({
Head = ca(rad(5.748), rad(-29.894), rad(2.435)),
Torso = ca(0, rad(25), 0),
LArm = ca(rad(-9.408), rad(3.405), rad(-19.72)),
RArm = ca(rad(159.639), rad(22.521), rad(-45.904)),
LLeg = CN0,
RLeg = CN0
}, delta*20, 1)
wing.CFrame = animator.RArm:GetWorldPosition() * offset
end)
local hitpos2 = (humanoid.Position * cn(0, 0, -2.1)).Position
soundattach.CFrame = cn(hitpos2)
swishsound2:Play()
if standarddamage(hitpos2, 2.2, 30) > 0 then
slicesound2:Play()
end
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(3.762), rad(20.069), rad(2.247)),
Torso = ca(0, rad(-20), 0),
LArm = ca(rad(131.763), rad(-15.189), rad(-6.832)),
RArm = ca(rad(-6.486), rad(-7.644), rad(49.567)),
LLeg = CN0,
RLeg = CN0
}, delta*20, 1)
wing.CFrame = animator.RArm:GetWorldPosition() * offset
end)
wing.Transparency = 1
debris:AddItem(wing, 0.5)
part.Parent = workspace
debris:AddItem(soundattach, 1)
end,
}
local function standardatk()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
humanoid.WalkSpeed = 11
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1,
})
standardattacks[standardatkphase]()
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0,
})
standardatkphase = standardatkphase + 1
if standardatkphase > #standardattacks then
standardatkphase = 1
end
humanoid.WalkSpeed = 8
scriptstate.IsAttacking = false
end
local function grabattacknoway()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1
})
humanoid.WalkSpeed = 4
local function gethandposomg()
return (animator.RArm:GetWorldPosition() * cn(0, -1.2, 0)).Position
end
local kunai = anchorpart(stuff.vatk.kunai:Clone())
local evilerattachment = newattachment(cn(gethandposomg()))
local kunaiattach = Instance.new("Attachment", kunai)
kunaiattach.CFrame = cn(0, 1.15, 0)
local holdflare = stuff.vatk.kunaiflare:Clone()
local holdring = stuff.vatk.kunairing:Clone()
local kunaibeam = stuff.vatk.kunaibeam:Clone()
holdflare.Parent = evilerattachment
holdring.Parent = evilerattachment
kunaibeam.Parent = evilerattachment
kunaibeam.Attachment0 = evilerattachment
kunaibeam.Attachment1 = kunaiattach
local ballsound = Instance.new("Sound", evilerattachment)
ballsound.SoundId = "rbxassetid://9126086559"
ballsound.Volume = 0
ballsound.Pitch = 0.6
ballsound.Looped = true
ballsound.Playing = true
tweenservice:Create(ballsound, TweenInfo.new(0.15), {
Volume = 2.5*VOLUME,
Pitch = 0.85
}):Play()
local holdstart = getruntime()
repeat
local delta = runservice.Heartbeat:Wait()
animator:LerpTransforms({
Head = ca(0, rad(30), 0),
Torso = ca(0, rad(-30), 0),
LArm = ca(rad(125), 0, rad(-15)),
RArm = ca(0, 0, rad(55)),
LLeg = CN0,
RLeg = CN0
}, delta*15, 1)
pointtomouse(delta*15)
evilerattachment.CFrame = cn(gethandposomg())
until not keysdown[Enum.KeyCode.V] and getruntime() - holdstart > 0.15
local direction = cn(gethandposomg(), mouse.Hit.Position)
kunai.CFrame = direction
kunai.Parent = workspace
tweenservice:Create(kunai, TweenInfo.new(1), {
Transparency = 1
}):Play()
tweenservice:Create(kunaibeam, TweenInfo.new(1), {
Width0 = 0,
Width1 = 0
}):Play()
local position = direction.Position
local travelstart = getruntime()
local raycast
local throwsound = Instance.new("Sound", evilerattachment)
throwsound.SoundId = "rbxassetid://743521549"
throwsound.Volume = 0.7*VOLUME
throwsound.Pitch = 0.9 + random()*0.2
throwsound.Playing = true
throwsound.PlayOnRemove = true
throwsound:Destroy()
repeat
local delta = runservice.Heartbeat:Wait()
raycast = query:Raycast(position, direction.LookVector*600*delta)
if raycast then
position = raycast.Position
else
position = position + direction.LookVector*600*delta
end
animator:LerpTransforms({
Head = ca(rad(11.508), rad(-29.499), rad(5.725)),
Torso = ca(rad(-17.192), rad(28.879), rad(8.499)),
LArm = ca(rad(-10.993), rad(10.545), rad(-19.271)),
RArm = ca(rad(47.714), rad(41.528), rad(39.468)),
LLeg = CN0,
RLeg = CN0
}, delta*20, 1)
--pointtomouse(delta*15)
pointtopos(position, delta*15)
evilerattachment.CFrame = cn(gethandposomg())
kunai.CFrame = cn(position, position + direction.LookVector) * ca(math.pi*0.5, 0, 0)
until raycast or getruntime() - travelstart >= 1
local grabbedparts = {}
if raycast then
local hithums = {}
for _, part in query:GetPartBoundsInRadius(raycast.Position, 3) do
-- anti ppe
if not ({pcall(function() return part.Name end)})[1] then
continue
end
local hum = part.Parent and isa(part.Parent, "Model") and part.Parent ~= workspace and part.Parent:FindFirstChildOfClass("Humanoid")
if hum and not table.find(hithums, hum) then
table.insert(hithums, hum)
for _, humpart in hum.Parent:GetDescendants() do
if table.find(grabbedparts, humpart) then
continue
end
if not isa(humpart, "BasePart") then
continue
end
table.insert(grabbedparts, humpart)
end
end
end
end
if #grabbedparts > 0 then
humanoid.WalkSpeed = 2
local avgposition
local positiontotal = V30
local closestpartpos = v3(math.huge, 0, 0)
for _, part in grabbedparts do
positiontotal = positiontotal + part.Position
end
avgposition = positiontotal/#grabbedparts
for _, part in grabbedparts do
if (closestpartpos - avgposition).Magnitude > (part.Position - avgposition).Magnitude then
closestpartpos = part.Position
end
end
kunaiattach.Parent = workspace.Terrain
kunaiattach.CFrame = cn(closestpartpos)
kunai:Destroy()
tweenservice:Create(kunaibeam, TweenInfo.new(1, Enum.EasingStyle.Quad), {
Width0 = 0.5,
Width1 = 0.5,
TextureSpeed = -10
}):Play()
-- hbjhhuhgfafasaffsfsadf
local parts = {}
local scamparticles2 = {}
for _, part in grabbedparts do
anchorpart(part)
part:BreakJoints()
table.insert(parts, {
CFrame = part.CFrame,
Size = part.Size,
Transparency = part.Transparency,
Part = part,
SpinMult = random(-10, 10)/10
})
end
local hb = runservice.Heartbeat:Connect(function()
for emitter, amt in scamparticles2 do
emitter:Emit(amt)
end
end)
local circlepos = closestpartpos - v3(0, 5, 0)
local raycast2waa = query:Raycast(closestpartpos, v3(0, -5, 0))
circlepos = raycast2waa and raycast2waa.Position or circlepos
local circleattach = newattachment(cn(circlepos + v3(0, 0.1, 0)))
local dustpart = anchorpart(Instance.new("Part", workspace))
dustpart.CFrame = cn(circlepos)
dustpart.Size = v3(8, 0, 8)
dustpart.Transparency = 1
local linespartidk = anchorpart(Instance.new("Part", workspace))
linespartidk.CFrame = cn(circlepos)
linespartidk.Size = v3(4, 0, 4)
linespartidk.Transparency = 1
local circle = stuff.vatk.circle:Clone()
local circleflare1 = stuff.vatk.circleflare1:Clone()
local circleflare2 = stuff.vatk.circleflare2:Clone()
circle.Parent = circleattach
circleflare1.Parent = circleattach
circleflare2.Parent = circleattach
circle:Emit(1)
circleflare1:Emit(2)
circleflare1:Emit(2)
local dust1 = stuff.vatk.darkdust:Clone()
local dust2 = stuff.vatk.brightdust:Clone()
dust1.Parent = dustpart
dust2.Parent = dustpart
dust1:Emit(10)
dust2:Emit(5)
scamparticles2[dust1] = 2
scamparticles2[dust2] = 2
local lines1 = stuff.vatk.linesidk:Clone()
local lines2 = stuff.vatk.linesidkfast:Clone()
lines1.Parent = linespartidk
lines2.Parent = linespartidk
lines1:Emit(5)
lines2:Emit(5)
scamparticles2[lines1] = 3
scamparticles2[lines2] = 3
local hitsound = Instance.new("Sound", evilerattachment)
hitsound.SoundId = "rbxassetid://7601865567"
hitsound.Volume = 1
hitsound.Pitch = 0.7 + random()*0.2
hitsound.Playing = true
hitsound.PlayOnRemove = true
hitsound:Destroy()
local chains = {}
loop(0.5, function(delta)
animator:LerpTransforms({
Head = ca(rad(-7.346), rad(8.687), rad(7.575)),
Torso = ca(rad(3.888), rad(-10.085), rad(-2.537)) + v3(random(-5, 5)/50, random(-5, 5)/50, random(-5, 5)/50),
LArm = ca(rad(21.813), rad(-2.074), rad(-21.778)),
RArm = ca(rad(20.335), rad(15.673), rad(68.113)),
LLeg = CN0,
RLeg = CN0
}, delta*5, 1)
pointtopos(closestpartpos, delta*15)
evilerattachment.CFrame = cn(gethandposomg())
end)
for i = 1, 4 do
local rot = ca(random()*math.pi*2, random()*math.pi*2, random()*math.pi*2)
local dist = random(8, 16)
local a1 = newattachment(cn(closestpartpos) * rot * cn(0, -dist, 0))
local a2 = newattachment(cn(closestpartpos) * rot * cn(0, -dist, 0))
local beam = stuff.vatk.lockchain:Clone()
beam.Parent = a1
beam.Attachment0 = a1
beam.Attachment1 = a2
local chainsound = Instance.new("Sound", kunaiattach)
chainsound.SoundId = "rbxassetid://9114793035"
chainsound.Volume = 1*VOLUME
chainsound.Pitch = 0.6 + random()*0.2
chainsound.Playing = true
tweenservice:Create(chainsound, TweenInfo.new(1, Enum.EasingStyle.Linear, Enum.EasingDirection.In, 0, false, 0.5), {
Volume = 0,
Pitch = 0.25
}):Play()
debris:AddItem(chainsound, 1.5)
table.insert(chains, {
Rotation = rot,
Distance = dist,
Pos0 = cn(closestpartpos) * rot * cn(0, -dist, 0),
Pos1 = cn(closestpartpos) * rot * cn(0, -dist, 0),
TargetPos1 = cn(closestpartpos) * rot * cn(0, dist, 0),
Beam = beam,
Attachment0 = a1,
Attachment1 = a2,
})
end
local inefficientuseofconnections = runservice.Heartbeat:Connect(function(delta)
for _, chaindata in chains do
chaindata.Pos1 = chaindata.Pos1:Lerp(chaindata.TargetPos1, math.min(delta*5))
chaindata.Attachment0.CFrame = chaindata.Pos0 + v3(random(-10, 10)/40, random(-10, 10)/40, random(-10, 10)/40)
chaindata.Attachment1.CFrame = chaindata.Pos1 + v3(random(-10, 10)/40, random(-10, 10)/40, random(-10, 10)/40)
end
end)
local angleinc = 360/#parts
local idkstart = getruntime()
local curse = Instance.new("Sound", kunaiattach)
curse.SoundId = "rbxassetid://3750941313"
curse.Volume = 1*VOLUME
curse.Playing = true
curse.PlayOnRemove = true
curse:Destroy()
local castsound = Instance.new("Sound", kunaiattach)
castsound.SoundId = "rbxassetid://9113455338"
castsound.Volume = 1*VOLUME
castsound.Pitch = 0.6 + random()*0.2
castsound.Playing = true
castsound.PlayOnRemove = true
castsound:Destroy()
loop(2, function(delta)
local runtime = getruntime()
local elapsed = runtime - idkstart
local progress = elapsed/2
local lerpalpha = math.min(elapsed, 1)
local distmult = 1 - tweenservice:GetValue(progress, Enum.EasingStyle.Back, Enum.EasingDirection.In)
for i, partdata in parts do
local rot = ca(rad(runtime*180*partdata.SpinMult), rad(runtime*180*partdata.SpinMult), rad(runtime*180*partdata.SpinMult))
if progress >= 0.5 then
if not partdata.ReplacedPart then
partdata.ReplacedPart = true
partdata.Part:Destroy()
local newpartwow = anchorpart(Instance.new("Part", workspace))
newpartwow.Material = Enum.Material.Neon
newpartwow.Color = Color3.new()
newpartwow.CFrame = partdata.CFrame
newpartwow.Size = partdata.Size
partdata.Part = newpartwow
end
partdata.Part.Color = Color3.fromHSV(0.773583, 0.34641, 0.6*random())
end
partdata.CFrame = partdata.CFrame:Lerp(cn(circlepos) * ca(0, rad(runtime * 90 + i*angleinc), 0) * cn(0, 5*distmult, (-7 + sin(runtime*4)*2)*distmult) * rot, lerpalpha)
partdata.Part.CFrame = partdata.CFrame
partdata.Part.Size = partdata.Size * (1 - progress*0.75)
partdata.Part.Transparency = random() > progress and partdata.Transparency or 1
end
animator:LerpTransforms({
Head = ca(rad(-3.481), rad(-26.092), rad(2.991)),
Torso = ca(rad(5.492), rad(24.88), rad(-2.753)) + v3(random(-5, 5)/50, random(-5, 5)/50, random(-5, 5)/50),
LArm = ca(rad(-6.217), rad(8.861), rad(-15.077)),
RArm = ca(rad(157.1), rad(16.133), rad(-30.289)),
LLeg = CN0,
RLeg = CN0
}, delta*5, 1)
pointtopos(closestpartpos, delta*15)
evilerattachment.CFrame = cn(gethandposomg())
end)
for i, partdata in parts do
partdata.Part:Destroy()
end
connections.disconnect(hb)
connections.disconnect(inefficientuseofconnections)
circle.Enabled = false
circleflare1.Enabled = false
circleflare2.Enabled = false
debris:AddItem(circleattach, 2)
debris:AddItem(linespartidk, 0.7)
debris:AddItem(dustpart, 3)
for i = 1, 10 do
-- COPY PASTED EFFECT OOOOOOOOO IM TELLING
local a1 = newattachment(cn(circlepos))
local a2 = newattachment(animator.WingCenter:GetWorldPosition())
local beam = stuff.zatk.hahalifesteal:Clone()
beam.Parent = a1
beam.Attachment0 = a1
beam.Attachment1 = a2
beam.CurveSize0 = random(-10, 10)
beam.CurveSize1 = random(-10, 10)
beam.Width0 = 0
beam.Width1 = 0
tweenservice:Create(beam, TweenInfo.new(0.5, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Width0 = 1,
Width1 = 0.25
}):Play()
local beamactivetime = random(50, 150)/100
task.spawn(function()
loop(beamactivetime, function()
a1.CFrame = cn(circlepos + v3(random(-10, 10)/10, random(-10, 10)/10, random(-10, 10)/10))
a2.CFrame = animator.WingCenter:GetWorldPosition()
end)
local tweenouttime = 2 - beamactivetime - random()*0.5
tweenservice:Create(beam, TweenInfo.new(tweenouttime, Enum.EasingStyle.Quint, Enum.EasingDirection.Out), {
Width0 = 0,
Width1 = 0
}):Play()
debris:AddItem(beam, tweenouttime)
debris:AddItem(a1, tweenouttime)
debris:AddItem(a2, tweenouttime)
end)
end
local chainpos = closestpartpos
local reelbackstart = getruntime()
loop(0.25, function(delta)
animator:LerpTransforms({
Head = ca(rad(-7.346), rad(8.687), rad(7.575)),
Torso = ca(rad(3.888), rad(-10.085), rad(-2.537)),
LArm = ca(rad(21.813), rad(-2.074), rad(-21.778)),
RArm = ca(rad(20.335), rad(15.673), rad(68.113)),
LLeg = CN0,
RLeg = CN0
}, delta*15, 1)
pointtopos(closestpartpos, delta*15)
local handpos = gethandposomg()
chainpos = closestpartpos:Lerp(handpos, (getruntime() - reelbackstart)/0.25)
evilerattachment.CFrame = cn(handpos)
kunaiattach.CFrame = cn(chainpos)
end)
task.spawn(function()
for _, chaindata in chains do
chaindata.TargetPos0 = chaindata.TargetPos1
end
loop(0.5, function(delta)
for _, chaindata in chains do
chaindata.Pos0 = chaindata.Pos0:Lerp(chaindata.TargetPos0, math.min(delta*4))
chaindata.Attachment0.CFrame = chaindata.Pos0 + v3(random(-10, 10)/40, random(-10, 10)/40, random(-10, 10)/40)
chaindata.Attachment1.CFrame = chaindata.Pos1 + v3(random(-10, 10)/40, random(-10, 10)/40, random(-10, 10)/40)
end
end)
for _, chaindata in chains do
chaindata.Beam:Destroy()
chaindata.Attachment0:Destroy()
chaindata.Attachment1:Destroy()
end
end)
elseif raycast then
local pos = position + direction.LookVector * 5
tweenservice:Create(kunai, TweenInfo.new(1), {
CFrame = cn(pos, pos + direction.LookVector) * ca(math.pi*0.5, 0, 0),
Transparency = 1
}):Play()
loop(0.25, function(delta)
animator:LerpTransforms({
Head = ca(rad(-7.346), rad(8.687), rad(7.575)),
Torso = ca(rad(3.888), rad(-10.085), rad(-2.537)),
LArm = ca(rad(21.813), rad(-2.074), rad(-21.778)),
RArm = ca(rad(20.335), rad(15.673), rad(68.113)),
LLeg = CN0,
RLeg = CN0
}, delta*15, 1)
pointtomouse(delta*15)
local handpos = gethandposomg()
--kunaipos = position:Lerp(handpos, (getruntime() - reelbackstart)/0.15)
evilerattachment.CFrame = cn(handpos)
--kunai.CFrame = cn(kunaipos, kunaipos + direction.LookVector) * ca(math.pi*0.5, 0, 0)
end)
end
tweenservice:Create(ballsound, TweenInfo.new(0.5), {
Pitch = 0.5,
Volume = 0
}):Play()
holdflare.Enabled = false
holdring.Enabled = false
debris:AddItem(evilerattachment, 0.6)
kunaiattach:Destroy()
debris:AddItem(kunai, 2)
humanoid.WalkSpeed = 8
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0
})
scriptstate.IsAttacking = false
end
local function ULT()
end
local function ultinteraction()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
me.SearchingForInteraction = true
me.InteractionSearchStart = os.clock()
statchangetext("interaction test THIS IS A TEST")
animator:SetPriorities({
Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1
})
local theultguy
local partner
repeat
for otheruserid, other in myfriends do
if userid == otheruserid then
continue
end
if not other.SearchingForInteraction then
continue
end
if (humanoid.Position.Position - other.Humanoid.Position.Position).Magnitude > 6 then
continue
end
local offset = humanoid.Position:VectorToObjectSpace(other.Humanoid.Position.Position - humanoid.Position.Position)
if offset.Z > -0.25 then
continue
end
me.PotentialPartner = otheruserid
if other.PotentialPartner == userid then
partner = other
me.ConfirmInteraction = otheruserid
if other.InteractionSearchStart > me.InteractionSearchStart then
theultguy = otheruserid
else
theultguy = userid
end
end
end
runservice.Heartbeat:Wait()
until not keysdown[Enum.KeyCode.B] or (partner and partner.ConfirmInteraction == userid)
me.SearchingForInteraction = false
me.InteractionSearchStart = nil
me.ConfirmInteraction = nil
if theultguy then
me.PerformingUlt = true
statchangetext(`{plrs:GetNameFromUserIdAsync(theultguy)} will be doing the ult`)
task.wait(1)
if theultguy == userid then
statchangetext("stasis")
else
humanoid.Position = myfriends[theultguy].Humanoid.Position * cn(0, 0, -3) * ca(0, math.pi, 0)
statchangetext("stasis + reposition")
end
humanoid.State = humanoidstate.Stasis
statchangetext("- RespectCanCollide", true)
task.wait(1)
statchangetext("+ anti rrt query", true)
task.wait(1)
statchangetext("- size check", true)
task.wait(1)
statchangetext("ult should run now")
if theultguy == userid then
task.spawn(ULT)
statchangetext("ult anim 1")
else
statchangetext("ult anim 2")
end
task.wait(5)
humanoid.State = humanoidstate.Idle
me.PerformingUlt = false
statchangetext("exit stasis")
else
statchangetext("no ult")
end
animator:SetPriorities({
Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0
})
scriptstate.IsAttacking = false
end
local function soloult()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
me.PerformingUlt = true
statchangetext("solo ult")
humanoid.State = humanoidstate.Stasis
ULT()
humanoid.State = humanoidstate.Idle
me.PerformingUlt = false
scriptstate.IsAttacking = false
end
local lastwtaptime = getruntime()
local function dash()
if scriptstate.IsAttacking then
return
end
scriptstate.IsAttacking = true
animator:SetPriorities({ Head = 1, Torso = 1, LArm = 1, RArm = 1, LLeg = 1, RLeg = 1 })
loop(0.1, function(delta)
animator:LerpTransforms({
Head = ca(rad(-10), 0, 0),
Torso = ca(rad(10), 0, 0),
LArm = ca(rad(50.949), rad(-27.339), rad(-63.121)),
RArm = ca(rad(48.802), rad(22.619), rad(57.457)),
LLeg = ca(rad(-20), 0, 0),
RLeg = ca(rad(5), 0, 0)
}, delta*20, 1)
pointtomouse(delta*30)
end)
local direction = cn(humanoid.Position.Position, mouse.Hit.Position)
humanoid.Velocity = direction.LookVector*250
if humanoid.Velocity.Y > 1 and humanoid.Floor then
humanoid.Position = humanoid.Position + v3(0, 1, 0)
end
local attach = newattachment(direction * cn(0, 0, 2))
emitparticles(stuff.dash.darkcircle:Clone(), attach, 1)
emitparticles(stuff.dash.shrinkcircle:Clone(), attach, 1)
debris:AddItem(attach, 1)
local linespart = anchorpart(Instance.new("Part", workspace))
linespart.CFrame = direction * cn(0, 0, -6)
linespart.Size = v3(3, 3, 3)
linespart.Transparency = 1
emitparticles(stuff.dash.lines:Clone(), linespart, 50)
emitparticles(stuff.dash.darklines:Clone(), linespart, 40)
debris:AddItem(linespart, 0.5)
local dashsound = Instance.new("Sound", attach)
dashsound.SoundId = "rbxassetid://4909206080"
dashsound.Pitch = 1.2 + random()*0.2
dashsound.Volume = 0.2 * VOLUME
dashsound.Playing = true
dashsound.PlayOnRemove = true
dashsound:Destroy()
local castsound = Instance.new("Sound", attach)
castsound.SoundId = "rbxassetid://182765513"
castsound.Pitch = 2 + random()
castsound.Volume = 1 * VOLUME
castsound.Playing = true
castsound.PlayOnRemove = true
castsound:Destroy()
local dashstart = getruntime()
loop(0.4, function(delta)
animator:LerpTransforms({
Head = ca(rad(20), 0, 0),
Torso = ca(rad(-25), 0, 0),
LArm = ca(rad(-18.643), rad(7.079), rad(-6.267)),
RArm = ca(rad(-28.862), rad(-8.152), rad(7.585)),
LLeg = ca(rad(-25), 0, 0),
RLeg = ca(rad(-45), 0, 0)
}, delta*15, 1)
local progress = (getruntime() - dashstart)/0.4
humanoid.WingSpin = humanoid.WingSpin - (1 - progress^2)*1080*delta
end)
animator:SetPriorities({ Head = 0, Torso = 0, LArm = 0, RArm = 0, LLeg = 0, RLeg = 0 })
lastwtaptime = 0
scriptstate.IsAttacking = false
end
local keybinds = {
[Enum.KeyCode.W] = {down=function()
if 0.2 > getruntime() - lastwtaptime then
dash()
end
lastwtaptime = getruntime()
end},
mouse1 = {down=standardatk},
[Enum.KeyCode.Q] = {down=function()
refitchar()
antideathpaused = false
end},
[Enum.KeyCode.E] = {down=function()
if keysdown[Enum.KeyCode.LeftControl] or keysdown[Enum.KeyCode.RightControl] then
disableantideath()
statchangetext("paused antideath")
antideathpaused = true
return
end
if humanoid.State == humanoidstate.Idle then
humanoid.Sit = not humanoid.Sit
end
end},
[Enum.KeyCode.R] = {down=function()
if keysdown[Enum.KeyCode.LeftControl] or keysdown[Enum.KeyCode.RightControl] then
remote:FireClient("die")
die()
return
end
local spawnpositions = {}
for _, plr in plrs:GetPlayers() do
local hum = plr.Character and plr.Character:FindFirstChildOfClass("Humanoid")
local root = hum and hum.RootPart
if root then
table.insert(spawnpositions, root.Position + v3(0, 3, 0))
end
end
if #spawnpositions == 0 then
humanoid.Position = SPAWN_LOCATION
return
end
local position = spawnpositions[random(1, #spawnpositions)]
humanoid.Position = cn(position, position + humanoid.Position.LookVector)
end},
[Enum.KeyCode.P] = {down=function()
humanoid.Position = SPAWN_LOCATION
humanoid.Velocity = V30
end},
[Enum.KeyCode.F] = {down=function()
if humanoid.MoveMode == movemode.Ground then
humanoid.MoveMode = movemode.Fly
else
humanoid.MoveMode = movemode.Ground
end
end},
[Enum.KeyCode.J] = {down=function()
query.RespectCanCollide = not query.RespectCanCollide
if query.RespectCanCollide then
statchangetext("+ RespectCanCollide", false)
else
statchangetext("- RespectCanCollide", true)
end
end},
[Enum.KeyCode.K] = {down=function()
query.UseCustomQuery = not query.UseCustomQuery
if query.UseCustomQuery then
statchangetext("+ anti rrt query", true)
else
statchangetext("- anti rrt query", false)
end
end},
[Enum.KeyCode.L] = {down=function()
sizecheck = not sizecheck
if sizecheck then
statchangetext("+ size check", false)
else
statchangetext("- size check", true)
end
end},
[Enum.KeyCode.Z] = {down=attackz},
[Enum.KeyCode.X] = {down=attackx},
[Enum.KeyCode.C] = {down=function()
local newposition = mouse.Hit.Position + v3(0, humanoid.HipHeight, 0)
humanoid.Position = cn(newposition, newposition + humanoid.Position.LookVector)
end},
[Enum.KeyCode.V] = {down=grabattacknoway},
[Enum.KeyCode.B] = {down=function()
if keysdown[Enum.KeyCode.LeftControl] and keysdown[Enum.KeyCode.Equals] then
soloult()
return
end
ultinteraction()
end},
[Enum.KeyCode.N] = {down=function()
humanoid.FlickerRate = 75
end},
[Enum.KeyCode.M] = {down=function()
if music.IsPlaying then
music:Stop()
statchangetext("🔈")
else
music:Play()
statchangetext("🔊")
end
end},
[Enum.KeyCode.Comma] = {down=function()
local prevpos = music.Position
local newpos = music.Position == 1 and #music.Songs or music.Position - 1
music:ChangeToSong(newpos)
statchangetext(`song#{prevpos} -> song#{newpos}`)
end},
[Enum.KeyCode.Period] = {down=function()
local prevpos = music.Position
local newpos = music.Position == #music.Songs and 1 or music.Position + 1
music:ChangeToSong(newpos)
statchangetext(`song#{prevpos} -> song#{newpos}`)
end},
}
remote.Methods.KeyDown = function(key)
keysdown[key] = true
if keybinds[key] and keybinds[key].down then
keybinds[key].down()
end
end
remote.Methods.KeyUp = function(key)
keysdown[key] = nil
if keybinds[key] and keybinds[key].up then
keybinds[key].up()
end
end
--
--
connections.Stepped = runservice.Stepped:Connect(function(_, delta)
if humanoid.State == humanoidstate.Stasis then
return
end
local lookvector = camera.CFrame.LookVector
local movevector = client.MoveVector
if humanoid.MoveMode == movemode.Ground then
local currentposition = humanoid.Position
local currentvelocity = humanoid.Velocity
local movedirection = (cn(V30, v3(lookvector.X, 0, lookvector.Z)) * cn(movevector.X, 0, movevector.Z)).Position
movedirection = movedirection.Magnitude > 1 and movedirection.Unit or movedirection
local raycast = query:Raycast(currentposition.Position, v3(0, math.min(currentvelocity.Y*delta, 0) - humanoid.HipHeight - 0.5, 0))
local rotation = cn(V30, currentposition.LookVector)
local horizontalvelocity = v3(currentvelocity.X, 0, currentvelocity.Z):Lerp(movedirection*humanoid.WalkSpeed, delta*(humanoid.Floor and 10 or 2))
local yvelocity = raycast and (movevector.Y >= 1 and humanoid.JumpPower or 0) or currentvelocity.Y - GRAVITY*delta
--local yposition = raycast and (currentposition.Y + ((raycast.Position.Y + humanoid.HipHeight) - currentposition.Y)*math.min(delta*15, 1)) or currentposition.Y
local yposition = raycast and raycast.Position.Y + humanoid.HipHeight or currentposition.Y
rotation = movedirection.Magnitude > 0 and rotation:Lerp(cn(V30, movedirection), delta*10) or rotation
--if raycast --[[and 0.2 > (yposition - humanoid.HipHeight) - raycast.Position.Y]] then
-- yvelocity = movevector.Y >= 1 and humanoid.JumpPower or 0
--end
local finalvelocity = v3(horizontalvelocity.X, yvelocity, horizontalvelocity.Z)
local finalposition = v3(currentposition.X, yposition, currentposition.Z) + finalvelocity*delta
local state = raycast and (movedirection.Magnitude > 0 and humanoidstate.Walk or humanoidstate.Idle) or (yvelocity > 0 and humanoidstate.Jump or humanoidstate.Fall)
if humanoid.State ~= state then
humanoid.State = state
statechangedevent:Fire(state)
end
humanoid.Floor = raycast and raycast.Instance or nil
humanoid.MoveDirection = movedirection
humanoid.Velocity = finalvelocity
humanoid.Position = cn(finalposition, finalposition + rotation.LookVector)
humanoid.WingSpin -= movedirection.Magnitude*45*delta
else
local movedirection = (cn(V30, lookvector) * cn(movevector)).Position
movedirection = movedirection.Magnitude > 1 and movedirection.Unit or movedirection
local velocity = humanoid.Velocity:Lerp(movedirection * humanoid.WalkSpeed * humanoid.FlySpeed, math.min(delta*5, 1))
local position = humanoid.Position.Position + velocity*delta
local rotation = cn(V30, humanoid.Position.LookVector)
if movedirection.Magnitude > 0 then
rotation = rotation:Lerp(cn(V30, camera.CFrame.LookVector), delta*5)
humanoid.State = humanoidstate.FlyMove
else
humanoid.State = humanoidstate.FlyIdle
end
humanoid.Floor = nil
humanoid.Velocity = velocity
humanoid.MoveDirection = movedirection
humanoid.Position = cn(position, position + rotation.LookVector)
humanoid.WingSpin -= delta*90 + movedirection.Magnitude*90*delta
end
if humanoid.State ~= humanoidstate.Idle and humanoid.Sit then
humanoid.Sit = false
end
if humanoid.Position.Y < workspace.FallenPartsDestroyHeight then
humanoid.Position = SPAWN_LOCATION
humanoid.Velocity = V30
end
end)
local lasthealthbarrefittime = getruntime()
local jumptime = getruntime()
connections.StateChanged = humanoid.StateChanged:Connect(function(newstate)
if newstate == humanoidstate.Jump then
jumptime = getruntime()
local attachment = newattachment(humanoid.Position)
local jumpsound = Instance.new("Sound", attachment)
jumpsound.SoundId = "rbxassetid://6237250110"
jumpsound.Pitch = 0.4
jumpsound.Volume = 0.3 * VOLUME
jumpsound.Playing = true
jumpsound.PlayOnRemove = true
attachment:Destroy()
end
if newstate == humanoidstate.Walk then
walkingsound:Enable()
else
walkingsound:Destroy()
end
end)
connections.Heartbeat = runservice.Heartbeat:Connect(function(delta)
local runtime = getruntime()
local shouldsit = humanoid.Sit
-- ok heres the actual anims lol
if humanoid.State == humanoidstate.Idle then
local lookatvector = humanoid.Position:VectorToObjectSpace(camera.CFrame.LookVector)
if not shouldsit then
shouldsit = humanoid.Floor and (isa(humanoid.Floor, "Seat") or isa(humanoid.Floor, "VehicleSeat"))
end
if shouldsit then
animator:LerpTransforms({
Head = ca(lookatvector.Y, -lookatvector.X*0.6, 0),
Torso = cn(0, -0.85, 0) * ca(0, -lookatvector.X*0.2, 0),
LArm = ca(rad(89.994), rad(11.511), rad(29.744)),
RArm = ca(rad(90.155), rad(-8.492), rad(-26.186)),
LLeg = ca(rad(90), 0, rad(15)),
RLeg = ca(rad(104.511), rad(-3.841), rad(-14.511))
}, delta*10)
else
animator:LerpTransforms({
Head = ca(lookatvector.Y + rad(-sin(runtime*2)*1.5), -lookatvector.X*0.6, 0),
Torso = cn(0, sin(runtime*2)*0.05, 0) * ca(0, -lookatvector.X*0.4, 0),
LArm = ca(rad(-14.945 + sin(runtime*2)*3), rad(-1.293 + cos(runtime*1.25)*4), rad(4.831 + cos(runtime*1.5)*3)),
RArm = ca(rad(-24.664 + sin(runtime*2)*3), rad(4.205 - cos(runtime*1.25)*4), rad(-9.073 - cos(runtime*1.5)*3)),
LLeg = ca(rad(-9.963 + sin(runtime*2)*2), rad(-0.867), rad(4.924 + sin(runtime*2)*2)),
RLeg = ca(rad(4.981 - sin(runtime*2)*2), rad(-0.435), rad(-4.981 - sin(runtime*2)*2))
}, delta*10)
end
elseif humanoid.State == humanoidstate.Walk then
local tilt = humanoid.Position:VectorToObjectSpace(humanoid.Velocity)
tilt = v3(tilt.X, 0, tilt.Z)
tilt = (tilt.Magnitude == 0 and tilt or tilt.Unit) * tilt.Magnitude/humanoid.WalkSpeed
animator:LerpTransforms({
Head = ca(rad(10), rad(sin(runtime*6)*10) - tilt.X*2, 0),
Torso = cn(0, math.abs(sin(runtime*6)*0.2), 0) * ca(rad(-10), rad(-sin(runtime*6)*10), -tilt.X*2),
LArm = ca(rad(sin(runtime*6)*40), 0, 0),
RArm = ca(rad(-sin(runtime*6)*40), 0, 0),
LLeg = ca(rad(-sin(runtime*6)*40), 0, 0),
RLeg = ca(rad(sin(runtime*6)*40), 0, 0)
}, delta*10)
elseif humanoid.State == humanoidstate.Jump then
local rot = math.max(-(getruntime() - jumptime)*1080, -360)
animator:LerpTransforms({
Head = ca(rad(-45), 0, 0),
Torso = ca(rad(rot), 0, 0),
LArm = ca(0, 0, rad(-25)),
RArm = ca(0, 0, rad(25)),
LLeg = ca(rad(50), 0, 0),
RLeg = ca(rad(55), 0, 0),
}, delta*15)
elseif humanoid.State == humanoidstate.Fall then
animator:LerpTransforms({
Head = ca(rad(-45 - cos(runtime*4)*2.5), 0, 0),
Torso = ca(rad(15 + sin(runtime*4)*2.5), 0, 0),
LArm = ca(0, 0, rad(-20 + sin(runtime*25)*35)),
RArm = ca(0, 0, rad(20 - sin(runtime*25)*35)),
LLeg = ca(rad(-30 - cos(runtime*4)*4), 0, 0),
RLeg = ca(rad(-cos(runtime*4)*4), 0, 0),
}, delta*15)
elseif humanoid.State == humanoidstate.FlyIdle then
local lookatvector = humanoid.Position:VectorToObjectSpace(camera.CFrame.LookVector)
animator:LerpTransforms({
Head = ca(lookatvector.Y, -lookatvector.X*0.8, 0),
Torso = cn(0, sin(runtime*2)*0.1, 0) * ca(rad(sin(0.5 - runtime*2)), rad(sin(runtime*2)) - lookatvector.X*0.2, rad(cos(runtime*3)*0.5)),
LArm = ca(rad(-14.782 + cos(runtime*2)*2), rad(2.576 + sin(runtime*3)*2), rad(-9.666 + sin(runtime*1.5)*2)),
RArm = ca(rad(-14.511 + sin(runtime*3)*2), rad(-3.841 + cos(runtime*1.5)*2), rad(14.509 + cos(runtime*2)*2)),
LLeg = ca(rad(sin(runtime*2)*2), rad(sin(runtime*1.5)*2), rad(5 + cos(runtime*2)*2)),
RLeg = ca(rad(-30 + sin(runtime*3)*2), rad(sin(runtime*1.5)*2), rad(-5 + sin(runtime*2)*2)),
}, delta*10)
elseif humanoid.State == humanoidstate.FlyMove then
local tilt = humanoid.Position:VectorToObjectSpace(humanoid.Velocity)
tilt = (tilt.Magnitude > 0 and tilt.Unit or tilt) * (tilt.Magnitude/(humanoid.WalkSpeed*humanoid.FlySpeed))
animator:LerpTransforms({
Head = ca(rad(-tilt.Z*50 + tilt.Y*10), rad(-tilt.X*20), 0),
Torso = cn(0, sin(runtime*2)*0.1, 0) * ca(rad(tilt.Z*50 + tilt.Y*5), rad(-tilt.X*20), rad(-tilt.X*20)),
LArm = ca(rad(tilt.Z*20), 0, rad(tilt.Y*10)),
RArm = ca(rad(tilt.Z*20), 0, rad(-tilt.Y*10)),
LLeg = ca(rad(tilt.Z*10), 0, rad(tilt.Y*7)),
RLeg = ca(rad(-30 + tilt.Z*10), 0, rad(-tilt.Y*7)),
}, delta*10)
end
-- WINGS!!!
local wingtransforms = { WingCenter = ca(rad(runtime*5), rad(runtime*10), rad(runtime*15)) }
for i = 1, 6 do
wingtransforms[`Wing{i}`] = ca(0, 0, rad(humanoid.WingSpin)) * ca(rad(-sin(runtime)*20 - 20), 0, 0)
end
animator:LerpTransforms(wingtransforms, delta*30)
-- update joints
for jointname, parts in character do
local maincf = animator[jointname]:GetWorldPosition()
for _, part in parts do
part.Part.CFrame = maincf * part.Offset
end
end
-- update wing trails
--[[for i, wing in wings do
local cf = animator[`Wing{i}`]:GetWorldPosition()
wing.Attachment0.CFrame = cf * cn(0, -2.1, 0)
wing.Attachment1.CFrame = cf * cn(0, 2.1, 0)
end]]
if shouldsit then
humanoid.CameraOffset = humanoid.CameraOffset:Lerp(v3(0, -0.85, 0), math.min(delta*10, 1))
else
humanoid.CameraOffset = humanoid.CameraOffset:Lerp(V30, math.min(delta*10, 1))
end
-- asbdtfgsdhfysdfhgdf
local focusposition = client.CameraFocus:Lerp(humanoid.Position.Position + v3(0, 1.2, 0) + humanoid.CameraOffset, math.min(delta*10, 1))
if client.CameraFocus ~= focusposition then
client.CameraFocus = focusposition
remote:FireClient("FocusChanged", focusposition)
end
-- sjdfvgujyfrejwhtvf gefudgt
if getruntime() - lasthealthbarrefittime > 1 then
lasthealthbarrefittime = getruntime()
healthbar:Refit()
end
healthbar:SetHealth(random(1, 20))
healthbar:MoveTo(humanoid.Position * cn(0, 2.5, 0))
music:MoveTo(humanoid.Position)
walkingsound:MoveTo(humanoid.Position)
-- flicker
for _, partdata in charparts do
if humanoid.FlickerRate >= random(1, 100) then
if not partdata.IsFlashing then
partdata.IsFlashing = true
for _, part in partdata.Parts do
for property, value in partdata.AltProperties do
part[property] = value
end
end
end
else
if partdata.IsFlashing then
partdata.IsFlashing = false
for _, part in partdata.Parts do
for property, value in partdata.MainProperties do
part[property] = value
end
end
end
end
end
humanoid.FlickerRate = math.max(humanoid.FlickerRate - delta*50, 1)
if humanoid.FlickerRate >= random(1, 100) then
face.Eyes.Color3 = Color3.fromRGB(112, 44, 181)
face.Eyes.Texture = "rbxassetid://6241214359"
face.EyeShine.Texture = "rbxassetid://6241225807"
face.Mouth.Texture = "rbxassetid://6239835601"
face.Shade.Transparency = 1
else
face.Eyes.Color3 = Color3.fromRGB(94, 82, 113)
face.Eyes.Texture = "rbxassetid://6239834554"
face.EyeShine.Texture = "rbxassetid://6239836016"
face.Mouth.Texture = "rbxassetid://6253043677"
face.Shade.Transparency = 0.5
end
end)
table.clear(_ENV)
script:Destroy()