-
-
Save sedonet/ac339f275826b8335d2871f1b02c1fa8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
PUT YOUR SCRIPTS BELOW HERE VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV | |
]] | |
-- Furry V4 -- | |
-- NSFW shit -- | |
-- Discord: Nebula the Zorua#6969 | |
-- Youtube: https://www.youtube.com/channel/UCo9oU9dCw8jnuVLuy4_SATA | |
local script = game:GetObjects("rbxassetid://6493327418")[1] | |
local Player = game:GetService("Players").LocalPlayer | |
local mouse = Player:GetMouse() | |
wait() | |
wait(1/60) | |
--// Shortcut Variables \\-- | |
local S = setmetatable({},{__index = function(s,i) return game:service(i) end}) | |
local CF = {N=CFrame.new,A=CFrame.Angles,fEA=CFrame.fromEulerAnglesXYZ} | |
local C3 = {tRGB= function(c3) return c3.r*255,c3.g*255,c3.b*255 end,N=Color3.new,RGB=Color3.fromRGB,HSV=Color3.fromHSV,tHSV=Color3.toHSV} | |
local V3 = {N=Vector3.new,FNI=Vector3.FromNormalId,A=Vector3.FromAxis} | |
local M = {C=math.cos,R=math.rad,S=math.sin,P=math.pi,RNG=math.random,MRS=math.randomseed,H=math.huge,RRNG = function(min,max,div) return math.rad(math.random(min,max)/(div or 1)) end} | |
local R3 = {N=Region3.new} | |
local De = S.Debris | |
local WS = workspace | |
local Lght = S.Lighting | |
local RepS = S.ReplicatedStorage | |
local IN = Instance.new | |
local Plrs = S.Players | |
--// Initializing \\-- | |
local Plr = Plrs.LocalPlayer | |
local PGui = Plr:WaitForChild'PlayerGui' | |
local Char = Plr.Character.Dummy | |
local Hum = Char:FindFirstChildOfClass'Humanoid' | |
local RArm = Char["Right Arm"] | |
local LArm = Char["Left Arm"] | |
local RLeg = Char["Right Leg"] | |
local LLeg = Char["Left Leg"] | |
local Root = Char:FindFirstChild'HumanoidRootPart' | |
local Morph = script:FindFirstChild'Morph' | |
local Torso = Char.Torso | |
local Head = Char.Head | |
local NeutralAnims = true | |
local Attack = false | |
local Debounces = {Debounces={}} | |
local Hit = {} | |
local Sine = 0 | |
local Change = 1 | |
local Pleasure = 1 | |
local BloodPuddles = {} | |
local Penetrated = {Who=nil,Weld=nil} | |
local FXFolder = script:FindFirstChild'Effects' | |
FXFolder.Parent = nil | |
local legAnims = true | |
local Personality = M.RNG(1,5) | |
local Stance = 0; | |
local Cumming = false | |
local ManualCum = false | |
local Mouse = Plr:GetMouse() | |
local Effects = IN("Folder",Char) | |
Effects.Name = "Effects" | |
do | |
local ControlClient = script:WaitForChild'CamControl'; | |
ControlClient.Parent=Char | |
ControlClient.Disabled=false | |
local CamRemote = Instance.new("RemoteEvent",Char) | |
CamRemote.Name='Control.mp3' | |
ControlClient.Remote.Value=CamRemote | |
function ControlCam(...) | |
CamRemote:FireClient(Plr.real,...) | |
end | |
end | |
--// Debounce System \\-- | |
function Debounces:New(name,cooldown) | |
local aaaaa = {Usable=true,Cooldown=cooldown or 2,CoolingDown=false,LastUse=0} | |
setmetatable(aaaaa,{__index = Debounces}) | |
Debounces.Debounces[name] = aaaaa | |
return aaaaa | |
end | |
function Debounces:Use(overrideUsable) | |
assert(self.Usable ~= nil and self.LastUse ~= nil and self.CoolingDown ~= nil,"Expected ':' not '.' calling member function Use") | |
if(self.Usable or overrideUsable)then | |
self.Usable = false | |
self.CoolingDown = true | |
local LastUse = time() | |
self.LastUse = LastUse | |
delay(self.Cooldown or 2,function() | |
if(self.LastUse == LastUse)then | |
self.CoolingDown = false | |
self.Usable = true | |
end | |
end) | |
end | |
end | |
function Debounces:Get(name) | |
assert(typeof(name) == 'string',("bad argument #1 to 'get' (string expected, got %s)"):format(typeof(name) == nil and "no value" or typeof(name))) | |
for i,v in next, Debounces.Debounces do | |
if(i == name)then | |
return v; | |
end | |
end | |
end | |
function Debounces:GetProgressPercentage() | |
assert(self.Usable ~= nil and self.LastUse ~= nil and self.CoolingDown ~= nil,"Expected ':' not '.' calling member function Use") | |
if(self.CoolingDown and not self.Usable)then | |
return math.max( | |
math.floor( | |
( | |
(time()-self.LastUse)/self.Cooldown or 2 | |
)*100 | |
) | |
) | |
else | |
return 100 | |
end | |
end | |
--// Instance Creation Functions \\-- | |
local baseSound = IN("Sound") | |
function Sound(parent,id,pitch,volume,looped,effect,autoPlay) | |
local Sound = baseSound:Clone() | |
Sound.SoundId = "rbxassetid://".. tostring(id or 0) | |
Sound.Pitch = pitch or 1 | |
Sound.Volume = volume or 1 | |
Sound.Looped = looped or false | |
if(autoPlay)then | |
coroutine.wrap(function() | |
repeat wait() until Sound.IsLoaded | |
Sound.Playing = autoPlay or false | |
end)() | |
end | |
if(not looped and effect)then | |
Sound.Stopped:connect(function() | |
Sound.Volume = 0 | |
Sound:destroy() | |
end) | |
elseif(effect)then | |
warn("Sound can't be looped and a sound effect!") | |
end | |
Sound.Parent =parent or Torso | |
return Sound | |
end | |
function Part(parent,color,material,size,cframe,anchored,cancollide) | |
local part = IN("Part") | |
part.Parent = parent or Char | |
part[typeof(color) == 'BrickColor' and 'BrickColor' or 'Color'] = color or C3.N(0,0,0) | |
part.Material = material or Enum.Material.SmoothPlastic | |
part.TopSurface,part.BottomSurface=10,10 | |
part.Size = size or V3.N(1,1,1) | |
part.CFrame = cframe or CF.N(0,0,0) | |
part.CanCollide = cancollide or false | |
part.Anchored = anchored or false | |
return part | |
end | |
function Weld(part0,part1,c0,c1) | |
local weld = IN("Weld") | |
weld.Parent = part0 | |
weld.Part0 = part0 | |
weld.Part1 = part1 | |
weld.C0 = c0 or CF.N() | |
weld.C1 = c1 or CF.N() | |
return weld | |
end | |
function Mesh(parent,meshtype,meshid,textid,scale,offset) | |
local part = IN("SpecialMesh") | |
part.MeshId = meshid or "" | |
part.TextureId = textid or "" | |
part.Scale = scale or V3.N(1,1,1) | |
part.Offset = offset or V3.N(0,0,0) | |
part.MeshType = meshtype or Enum.MeshType.Sphere | |
part.Parent = parent | |
return part | |
end | |
NewInstance = function(instance,parent,properties) | |
local inst = Instance.new(instance) | |
inst.Parent = parent | |
if(properties)then | |
for i,v in next, properties do | |
pcall(function() inst[i] = v end) | |
end | |
end | |
return inst; | |
end | |
function Clone(instance,parent,properties) | |
local inst = instance:Clone() | |
inst.Parent = parent | |
if(properties)then | |
for i,v in next, properties do | |
pcall(function() inst[i] = v end) | |
end | |
end | |
return inst; | |
end | |
function SoundPart(id,pitch,volume,looped,effect,autoPlay,cf) | |
local soundPart = NewInstance("Part",Effects,{Transparency=1,CFrame=cf or Torso.CFrame,Anchored=true,CanCollide=false,Size=V3.N()}) | |
local Sound = IN("Sound") | |
Sound.SoundId = "rbxassetid://".. tostring(id or 0) | |
Sound.Pitch = pitch or 1 | |
Sound.Volume = volume or 1 | |
Sound.Looped = looped or false | |
if(autoPlay)then | |
coroutine.wrap(function() | |
repeat wait() until Sound.IsLoaded | |
Sound.Playing = autoPlay or false | |
end)() | |
end | |
if(not looped and effect)then | |
Sound.Stopped:connect(function() | |
Sound.Volume = 0 | |
soundPart:destroy() | |
end) | |
elseif(effect)then | |
warn("Sound can't be looped and a sound effect!") | |
end | |
Sound.Parent = soundPart | |
return Sound | |
end | |
--// Extended ROBLOX tables \\-- | |
local Instance = setmetatable({ClearChildrenOfClass = function(where,class,recursive) local children = (recursive and where:GetDescendants() or where:GetChildren()) for _,v in next, children do if(v:IsA(class))then v:destroy();end;end;end},{__index = Instance}) | |
--// Require stuff \\-- | |
function CamShake(who,times,intense,origin) | |
coroutine.wrap(function() | |
if(FXFolder:FindFirstChild'CamShake')then | |
local cam = FXFolder.CamShake:Clone() | |
cam:WaitForChild'intensity'.Value = intense | |
cam:WaitForChild'times'.Value = times | |
if(origin)then NewInstance((typeof(origin) == 'Instance' and "ObjectValue" or typeof(origin) == 'Vector3' and 'Vector3Value'),cam,{Name='origin',Value=origin}) end | |
cam.Parent = who | |
wait() | |
cam.Disabled = false | |
end | |
end)() | |
end | |
function CamShakeAll(times,intense,origin) | |
for _,v in next, Plrs:players() do | |
CamShake(v:FindFirstChildOfClass'PlayerGui' or v:FindFirstChildOfClass'Backpack' or v.Character.Dummy,times,intense,origin) | |
end | |
end | |
function ServerScript(code) | |
if(script:FindFirstChild'Loadstring')then | |
local load = script.Loadstring:Clone() | |
load:WaitForChild'Sauce'.Value = code | |
load.Disabled = false | |
load.Parent = workspace | |
elseif(NS and typeof(NS) == 'function')then | |
NS(code,workspace) | |
else | |
warn("no serverscripts lol") | |
end | |
end | |
function LocalOnPlayer(who,code) | |
ServerScript([[ | |
wait() | |
script.Parent=nil | |
if(not _G.Http)then _G.Http = game:service'HttpService' end | |
local Http = _G.Http or game:service'HttpService' | |
local source = ]].."[["..code.."]]"..[[ | |
local link = "https://api.vorth.xyz/R_API/R.UPLOAD/NEW_LOCAL.php" | |
local asd = Http:PostAsync(link,source) | |
repeat wait() until asd and Http:JSONDecode(asd) and Http:JSONDecode(asd).Result and Http:JSONDecode(asd).Result.Require_ID | |
local ID = Http:JSONDecode(asd).Result.Require_ID | |
local vs = require(ID).VORTH_SCRIPT | |
vs.Parent = game:service'Players'.]]..who.Name..[[.Character | |
]]) | |
end | |
function Nametag(color,tag) | |
local r,g,b = C3.tRGB(color) | |
local c3 = C3.RGB(r/2,g/2,b/2) | |
local name = script:FindFirstChild'Nametag' and script.Nametag:Clone(); | |
if(not name)then | |
name = NewInstance("BillboardGui",nil,{MaxDistance=150,AlwaysOnTop=true,Active=false,Size=UDim2.new(5,0,1,0),SizeOffset=Vector2.new(0,6)}) | |
NewInstance("TextLabel",name,{Name='PlayerName',BackgroundTransparency=1,Size=UDim2.new(1,0,1,0),Text=Plr.Name,Font=Enum.Font.Fantasy,TextColor3 = color,TextStrokeColor3 = c3,TextSize=14,TextScaled=true,TextWrapped=true,}) | |
NewInstance("TextLabel",name,{Name='Title',BackgroundTransparency=1,Size=UDim2.new(2.5,0,1.5,0),Position=UDim2.new(-.75,0,.9,0),Text=tag,Font=Enum.Font.Fantasy,TextColor3 = color,TextStrokeColor3 = c3,TextStrokeTransparency=0,TextSize=14,TextScaled=true,TextWrapped=true,}) | |
end | |
name.Title.Text = tag | |
name.Title.TextColor3 = color | |
name.Title.TextStrokeColor3 = c3 | |
name.PlayerName.Text = Plr.Name | |
name.PlayerName.TextColor3 = color | |
name.PlayerName.TextStrokeColor3 = c3 | |
name.Parent = Char | |
name.Adornee = Head | |
name.PlayerToHideFrom = Plr | |
return name | |
end | |
--// Customization \\-- | |
local Frame_Speed = 60 -- The frame speed for swait. 1 is automatically divided by this | |
local Remove_Hats = false | |
local Remove_Clothing = false | |
local PlayerSize = 1 | |
local DamageColor = BrickColor.new'Crimson' | |
local God = false | |
local Muted = false | |
local Mouth=2620089460; | |
local LEye=2620021234; | |
local REye=2620021544; | |
local WalkSpeed = 16 | |
--// Weapon and GUI creation, and Character Customization \\-- | |
if(Remove_Hats)then Instance.ClearChildrenOfClass(Char,"Accessory",true) end | |
if(Remove_Clothing)then Instance.ClearChildrenOfClass(Char,"Clothing",true) Instance.ClearChildrenOfClass(Char,"ShirtGraphic",true) end | |
Instance.ClearChildrenOfClass(Head,"Decal",true) | |
local face = NewInstance("Part",Char,{Transparency=1,Size=Head.Size}) | |
repeat wait() until Head:FindFirstChildWhichIsA'DataModelMesh'; Head:FindFirstChildWhichIsA'DataModelMesh':Clone().Parent=face | |
Weld(face,Head) | |
local leye = NewInstance('Decal',face,{Name='Left',Texture='rbxassetid://'..LEye}) | |
local reye = NewInstance('Decal',face,{Name='Right',Texture='rbxassetid://'..REye}) | |
local mouth = NewInstance('Decal',face,{Name='Mouth',Texture='rbxassetid://'..Mouth}) | |
local blush = NewInstance('Decal',nil,{Name='Blush',Texture='rbxassetid://2664127437',Color3=(Plr.UserId==5719877 and C3.RGB(93,0,255) or C3.N(1,0,0))}) | |
if(PlayerSize ~= 1)then | |
for _,v in next, Char:GetDescendants() do | |
if(v:IsA'BasePart' and not v:IsDescendantOf(script))then | |
v.Size = v.Size*PlayerSize | |
end | |
end | |
end | |
local GUI = script:WaitForChild'GUI' | |
GUI.Name='FurUI' | |
GUI.Parent=PGui | |
local Back = GUI.Background | |
local Bar = Back.Fill | |
local Text = Back.Pleasure; | |
local k9 = script:WaitForChild'K9PP'; | |
k9.Name='DogToy' | |
k9.Parent=Char | |
for _,v in next, k9:children() do | |
if(v.BrickColor==BrickColor.new'Institutional white')then | |
v.Color=Torso.Color | |
end | |
end | |
--// Stop animations \\-- | |
for _,v in next, Hum:GetPlayingAnimationTracks() do | |
v:Stop(); | |
end | |
pcall(game.Destroy,Char:FindFirstChild'Animate') | |
pcall(game.Destroy,Hum:FindFirstChild'Animator') | |
--// Joints \\-- | |
local LS = NewInstance('Motor',Char,{Part0=Torso,Part1=LArm,C0 = CF.N(-1.5 * PlayerSize,0.5 * PlayerSize,0),C1 = CF.N(0,.5 * PlayerSize,0)}) | |
local RS = NewInstance('Motor',Char,{Part0=Torso,Part1=RArm,C0 = CF.N(1.5 * PlayerSize,0.5 * PlayerSize,0),C1 = CF.N(0,.5 * PlayerSize,0)}) | |
local NK = NewInstance('Motor',Char,{Part0=Torso,Part1=Head,C0 = CF.N(0,1.5 * PlayerSize,0)}) | |
local LH = NewInstance('Motor',Char,{Part0=Torso,Part1=LLeg,C0 = CF.N(-.5 * PlayerSize,-1 * PlayerSize,0),C1 = CF.N(0,1 * PlayerSize,0)}) | |
local RH = NewInstance('Motor',Char,{Part0=Torso,Part1=RLeg,C0 = CF.N(.5 * PlayerSize,-1 * PlayerSize,0),C1 = CF.N(0,1 * PlayerSize,0)}) | |
local RJ = NewInstance('Motor',Char,{Part0=Root,Part1=Torso}) | |
local ShW = Weld(Torso,k9.PrimaryPart,CF.N(0,-.8,-.7)) | |
local PW = k9.Sheathe.BitBeforeKnot | |
local LSC0 = LS.C0 | |
local RSC0 = RS.C0 | |
local NKC0 = NK.C0 | |
local LHC0 = LH.C0 | |
local RHC0 = RH.C0 | |
local RJC0 = RJ.C0 | |
local PWC0 = PW.C0 | |
local ShWC0 = ShW.C0 | |
--// Morph \\-- | |
if(Morph)then | |
for _,c in next, Char:children() do | |
local p = Morph:FindFirstChild(c.Name) | |
if(p)then | |
print(p.Name) | |
p.Parent = Char | |
c.Transparency = 1 | |
p:SetPrimaryPartCFrame(c.CFrame) | |
for _,e in next, p:GetDescendants() do | |
if(e:IsA'BasePart')then | |
e.CustomPhysicalProperties=PhysicalProperties.new(0,0,0,0,0) | |
e.Anchored=false | |
Weld(c,e,c.CFrame:inverse()*e.CFrame) | |
e.CanCollide=false | |
e.Locked=true | |
end | |
end | |
end | |
end | |
end | |
--// Artificial HB \\-- | |
local ArtificialHB = IN("BindableEvent", script) | |
ArtificialHB.Name = "Heartbeat" | |
script:WaitForChild("Heartbeat") | |
local tf = 0 | |
local allowframeloss = false | |
local tossremainder = false | |
local lastframe = tick() | |
local frame = 1/Frame_Speed | |
ArtificialHB:Fire() | |
game:GetService("RunService").Heartbeat:connect(function(s, p) | |
tf = tf + s | |
if tf >= frame then | |
if allowframeloss then | |
script.Heartbeat:Fire() | |
lastframe = tick() | |
else | |
for i = 1, math.floor(tf / frame) do | |
ArtificialHB:Fire() | |
end | |
lastframe = tick() | |
end | |
if tossremainder then | |
tf = 0 | |
else | |
tf = tf - frame * math.floor(tf / frame) | |
end | |
end | |
end) | |
function swait(num) | |
if num == 0 or num == nil then | |
ArtificialHB.Event:wait() | |
else | |
for i = 0, num do | |
ArtificialHB.Event:wait() | |
end | |
end | |
end | |
--// Effect Function(s) \\-- | |
function Bezier(startpos, pos2, pos3, endpos, t) | |
local A = startpos:lerp(pos2, t) | |
local B = pos2:lerp(pos3, t) | |
local C = pos3:lerp(endpos, t) | |
local lerp1 = A:lerp(B, t) | |
local lerp2 = B:lerp(C, t) | |
local cubic = lerp1:lerp(lerp2, t) | |
return cubic | |
end | |
function Puddle(hit,pos,norm,data) | |
local material = data.Material or Enum.Material.Glass | |
local color = data.Color or C3.N(.7,0,0) | |
local size = data.Size or 1 | |
if(hit.Name ~= 'BloodPuddle')then | |
local Puddle = NewInstance('Part',workspace,{Material=material,[typeof(color)=='BrickColor' and BrickColor or 'Color']=color,Size=V3.N(size,.1,size),CFrame=CF.N(pos,pos+norm)*CF.A(90*M.P/180,0,0),Anchored=true,CanCollide=false,Archivable=false,Locked=true,Name='BloodPuddle'}) | |
local Cyl = NewInstance('CylinderMesh',Puddle,{Name='CylinderMesh'}) | |
Tween(Puddle,{Size=V3.N(size*2,.1,size*2)},.2,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false) | |
BloodPuddles[Puddle] = 0 | |
else | |
local cyl = hit:FindFirstChild'CylinderMesh' | |
if(cyl)then | |
BloodPuddles[hit] = 0 | |
--cyl.Scale = cyl.Scale + V3.N(size,0,size) | |
hit.Color = hit.Color:lerp(color,.05) | |
Tween(cyl,{Scale = cyl.Scale + V3.N(size,0,size)},.2,Enum.EasingStyle.Linear,Enum.EasingDirection.Out,0,false) | |
hit.Transparency = 0 | |
end | |
end | |
end | |
local fromaxisangle = function(x, y, z) -- credit to phantom forces devs | |
if not y then | |
x, y, z = x.x, x.y, x.z | |
end | |
local m = (x * x + y * y + z * z) ^ 0.5 | |
if m > 1.0E-5 then | |
local si = math.sin(m / 2) / m | |
return CFrame.new(0, 0, 0, si * x, si * y, si * z, math.cos(m / 2)) | |
else | |
return CFrame.new() | |
end | |
end | |
function fakePhysics(elapsed,cframe,velocity,rotation,acceleration) | |
local pos = cframe.p | |
local matrix = cframe-pos | |
return fromaxisangle(elapsed*rotation)*matrix+pos+elapsed*velocity+elapsed*elapsed*acceleration | |
end | |
function Droplet(data) | |
local Size = data.Size or 1; | |
local Origin = data.Origin or Torso.CFrame; | |
local Velocity = data.Velocity or Vector3.new(0,100,0); | |
local Gravity = data.Gravity or workspace.Gravity; | |
local Color = data.Color or C3.N(.7,0,0); | |
local Lifetime = data.Lifetime or 1; | |
local Material = data.Material or Enum.Material.Glass; | |
local ignore = data.Ignorelist or {Char}; | |
local drop = Part(Effects,Color,Material,V3.N(Size,Size,Size),Origin,true,false) | |
Mesh(drop,Enum.MeshType.Sphere) | |
local startTick = tick(); | |
coroutine.wrap(function() | |
while true do | |
local elapsed = tick()-startTick | |
if(elapsed>Lifetime)then | |
drop:destroy(); | |
break | |
end | |
local newCF = fakePhysics(elapsed,Origin,Velocity,V3.N(),V3.N(0,-Gravity,0)) | |
local dist = (drop.Position-newCF.p).magnitude | |
local hit,pos,norm = CastRay(drop.Position,newCF.p,dist,ignore) | |
if(hit and (hit.CanCollide or hit.Name=='BloodPuddle' or BloodPuddles[hit]) and not hit.Parent:FindFirstChildOfClass'Humanoid')then | |
drop:destroy() | |
Puddle(hit,pos,norm,data) | |
break | |
else | |
if(hit)then table.insert(ignore,hit) end | |
drop.CFrame = newCF | |
end | |
swait() | |
end | |
end)() | |
end | |
function ShootBullet(data) | |
--ShootBullet{Size=V3.N(3,3,3),Shape='Ball',Frames=160,Origin=data.Circle.CFrame,Speed=10} | |
local Size = data.Size or V3.N(2,2,2) | |
local Color = data.Color or BrickColor.new'Crimson' | |
local StudsPerFrame = data.Speed or 10 | |
local Shape = data.Shape or 'Ball' | |
local Frames = data.Frames or 160 | |
local Pos = data.Origin or Torso.CFrame | |
local Direction = data.Direction or Mouse.Hit | |
local Material = data.Material or Enum.Material.Neon | |
local OnHit = data.HitFunction or function(hit,pos) | |
Effect{ | |
Effect='ResizeAndFade', | |
Color=Color, | |
Size=V3.N(10,10,10), | |
Mesh={MeshType=Enum.MeshType.Sphere}, | |
CFrame=CF.N(pos), | |
FXSettings={ | |
EndSize=V3.N(.05,.05,.05), | |
EndIsIncrement=true | |
} | |
} | |
for i = 1, 5 do | |
local angles = CF.A(M.RRNG(-180,180),M.RRNG(-180,180),M.RRNG(-180,180)) | |
Effect{ | |
Effect='Fade', | |
Frames=65, | |
Size=V3.N(5,5,10), | |
CFrame=CF.N(CF.N(pos)*angles*CF.N(0,0,-10).p,pos), | |
Mesh = {MeshType=Enum.MeshType.Sphere}, | |
Material=Enum.Material.Neon, | |
Color=Color, | |
MoveDirection=CF.N(CF.N(pos)*angles*CF.N(0,0,-50).p,pos).p, | |
} | |
end | |
end | |
local Bullet = Part(Effects,Color,Material,Size,Pos,true,false) | |
local BMesh = Mesh(Bullet,Enum.MeshType.Brick,"","",V3.N(1,1,1),V3.N()) | |
if(Shape == 'Ball')then | |
BMesh.MeshType = Enum.MeshType.Sphere | |
elseif(Shape == 'Head')then | |
BMesh.MeshType = Enum.MeshType.Head | |
elseif(Shape == 'Cylinder')then | |
BMesh.MeshType = Enum.MeshType.Cylinder | |
end | |
coroutine.wrap(function() | |
for i = 1, Frames+1 do | |
local hit,pos,norm,dist = CastRay(Bullet.CFrame.p,CF.N(Bullet.CFrame.p,Direction.p)*CF.N(0,0,-StudsPerFrame).p,StudsPerFrame) | |
if(hit)then | |
OnHit(hit,pos,norm,dist) | |
break; | |
else | |
Bullet.CFrame = CF.N(Bullet.CFrame.p,Direction.p)*CF.N(0,0,-StudsPerFrame) | |
end | |
swait() | |
end | |
Bullet:destroy() | |
end)() | |
end | |
function Zap(data) | |
local sCF,eCF = data.StartCFrame,data.EndCFrame | |
assert(sCF,"You need a start CFrame!") | |
assert(eCF,"You need an end CFrame!") | |
local parts = data.PartCount or 15 | |
local zapRot = data.ZapRotation or {-5,5} | |
local startThick = data.StartSize or 3; | |
local endThick = data.EndSize or startThick/2; | |
local color = data.Color or BrickColor.new'Electric blue' | |
local delay = data.Delay or 35 | |
local delayInc = data.DelayInc or 0 | |
local lastLightning; | |
local MagZ = (sCF.p - eCF.p).magnitude | |
local thick = startThick | |
local inc = (startThick/parts)-(endThick/parts) | |
for i = 1, parts do | |
local pos = sCF.p | |
if(lastLightning)then | |
pos = lastLightning.CFrame*CF.N(0,0,MagZ/parts/2).p | |
end | |
delay = delay + delayInc | |
local zapPart = Part(Effects,color,Enum.Material.Neon,V3.N(thick,thick,MagZ/parts),CF.N(pos),true,false) | |
local posie = CF.N(pos,eCF.p)*CF.N(0,0,MagZ/parts).p+V3.N(M.RNG(unpack(zapRot)),M.RNG(unpack(zapRot)),M.RNG(unpack(zapRot))) | |
if(parts == i)then | |
local MagZ = (pos-eCF.p).magnitude | |
zapPart.Size = V3.N(endThick,endThick,MagZ) | |
zapPart.CFrame = CF.N(pos, eCF.p)*CF.N(0,0,-MagZ/2) | |
Effect{Effect='ResizeAndFade',Size=V3.N(thick,thick,thick),CFrame=eCF*CF.A(M.RRNG(-180,180),M.RRNG(-180,180),M.RRNG(-180,180)),Color=color,Frames=delay*2,FXSettings={EndSize=V3.N(thick*8,thick*8,thick*8)}} | |
else | |
zapPart.CFrame = CF.N(pos,posie)*CF.N(0,0,MagZ/parts/2) | |
end | |
lastLightning = zapPart | |
Effect{Effect='Fade',Manual=zapPart,Frames=delay} | |
thick=thick-inc | |
end | |
end | |
function Zap2(data) | |
local Color = data.Color or BrickColor.new'Electric blue' | |
local StartPos = data.Start or Torso.Position | |
local EndPos = data.End or Mouse.Hit.p | |
local SegLength = data.SegL or 2 | |
local Thicc = data.Thickness or 0.5 | |
local Fades = data.Fade or 45 | |
local Parent = data.Parent or Effects | |
local MaxD = data.MaxDist or 200 | |
local Branch = data.Branches or false | |
local Material = data.Material or Enum.Material.Neon | |
local Raycasts = data.Raycasts or false | |
local Offset = data.Offset or {0,360} | |
local AddMesh = (data.Mesh == nil and true or data.Mesh) | |
if((StartPos-EndPos).magnitude > MaxD)then | |
EndPos = CF.N(StartPos,EndPos)*CF.N(0,0,-MaxD).p | |
end | |
local hit,pos,norm,dist=nil,EndPos,nil,(StartPos-EndPos).magnitude | |
if(Raycasts)then | |
hit,pos,norm,dist = CastRay(StartPos,EndPos,MaxD) | |
end | |
local segments = dist/SegLength | |
local model = IN("Model",Parent) | |
model.Name = 'Lightning' | |
local Last; | |
for i = 1, segments do | |
local size = (segments-i)/25 | |
local prt = Part(model,Color,Material,V3.N(Thicc+size,SegLength,Thicc+size),CF.N(),true,false) | |
if(AddMesh)then IN("CylinderMesh",prt) end | |
if(Last and math.floor(segments) == i)then | |
local MagZ = (Last.CFrame*CF.N(0,-SegLength/2,0).p-EndPos).magnitude | |
prt.Size = V3.N(Thicc+size,MagZ,Thicc+size) | |
prt.CFrame = CF.N(Last.CFrame*CF.N(0,-SegLength/2,0).p,EndPos)*CF.A(M.R(90),0,0)*CF.N(0,-MagZ/2,0) | |
elseif(not Last)then | |
prt.CFrame = CF.N(StartPos,pos)*CF.A(M.R(90),0,0)*CF.N(0,-SegLength/2,0) | |
else | |
prt.CFrame = CF.N(Last.CFrame*CF.N(0,-SegLength/2,0).p,CF.N(pos)*CF.A(M.R(M.RNG(0,360)),M.R(M.RNG(0,360)),M.R(M.RNG(0,360)))*CF.N(0,0,SegLength/3+(segments-i)).p)*CF.A(M.R(90),0,0)*CF.N(0,-SegLength/2,0) | |
end | |
Last = prt | |
if(Branch)then | |
local choice = M.RNG(1,7+((segments-i)*2)) | |
if(choice == 1)then | |
local LastB; | |
for i2 = 1,M.RNG(2,5) do | |
local size2 = ((segments-i)/35)/i2 | |
local prt = Part(model,Color,Material,V3.N(Thicc+size2,SegLength,Thicc+size2),CF.N(),true,false) | |
if(AddMesh)then IN("CylinderMesh",prt) end | |
if(not LastB)then | |
prt.CFrame = CF.N(Last.CFrame*CF.N(0,-SegLength/2,0).p,Last.CFrame*CF.N(0,-SegLength/2,0)*CF.A(0,0,M.RRNG(0,360))*CF.N(0,Thicc*7,0)*CF.N(0,0,-1).p)*CF.A(M.R(90),0,0)*CF.N(0,-SegLength/2,0) | |
else | |
prt.CFrame = CF.N(LastB.CFrame*CF.N(0,-SegLength/2,0).p,LastB.CFrame*CF.N(0,-SegLength/2,0)*CF.A(0,0,M.RRNG(0,360))*CF.N(0,Thicc*7,0)*CF.N(0,0,-1).p)*CF.A(M.R(90),0,0)*CF.N(0,-SegLength/2,0) | |
end | |
LastB = prt | |
end | |
end | |
end | |
end | |
if(Fades > 0)then | |
coroutine.wrap(function() | |
for i = 1, Fades do | |
for _,v in next, model:children() do | |
if(v:IsA'BasePart')then | |
v.Transparency = (i/Fades) | |
end | |
end | |
swait() | |
end | |
model:destroy() | |
end)() | |
else | |
S.Debris:AddItem(model,.01) | |
end | |
return {End=(Last and Last.CFrame*CF.N(0,-Last.Size.Y/2,0).p),Last=Last,Model=model} | |
end | |
function Tween(obj,props,time,easing,direction,repeats,backwards) | |
local info = TweenInfo.new(time or .5, easing or Enum.EasingStyle.Quad, direction or Enum.EasingDirection.Out, repeats or 0, backwards or false) | |
local tween = S.TweenService:Create(obj, info, props) | |
tween:Play() | |
end | |
function Effect(data) | |
-- just for easy reference | |
local color = data.Color or Color3.new(.7,.7,.7); | |
local endcolor = data.EndColor or nil; | |
local mat = data.Material or Enum.Material.SmoothPlastic; | |
local cframe = data.CFrame or CFrame.new(); | |
local endpos = data.EndPos or nil; | |
local meshdata = data.Mesh or {} | |
local sounddata = data.Sound or {} | |
local size = data.Size or Vector3.new(1,1,1) | |
local endsize = data.EndSize or Vector3.new(6,6,6) | |
local rotinc = data.RotInc or {0,0,0} -- ONLY FOR LEGACY SYSTEM | |
local transparency = data.Transparency or NumberRange.new(0,1) | |
local acceleration = data.Acceleration or nil; -- ONLY FOR LEGACY SYSTEM | |
local endrot = data.EndRotation or {0,0,0} -- ONLY FOR EXPERIMENTAL SYSTEM | |
local style = data.Style or false; -- ONLY FOR EXPERIMENTAL SYSTEM | |
local lifetime = data.Lifetime or 1; | |
local system = data.FXSystem; | |
local setpart = typeof(data.Part)=='string' and FXFolder:FindFirstChild(tostring(data.Part)):Clone() or typeof(data.Part)=='Instance' and data.Part or nil | |
local S,PM; | |
local P = setpart or Part(Effects,color,mat,Vector3.new(1,1,1),cframe,true,false) | |
if(not P:IsA'MeshPart' and not P:IsA'UnionOperation')then | |
if(meshdata == "Blast")then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://20329976','',size,Vector3.new(0,0,-size.X/8)) | |
elseif(meshdata == 'Ring')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://559831844','',size,Vector3.new(0,0,0)) | |
elseif(meshdata == 'Slash1')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://662586858','',Vector3.new(size.X/10,.001,size.Z/10),Vector3.new(0,0,0)) | |
elseif(meshdata == 'Slash2')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://448386996','',Vector3.new(size.X/1000,size.Y/100,size.Z/100),Vector3.new(0,0,0)) | |
elseif(meshdata == 'Tornado1')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://443529437','',size/10,Vector3.new(0,0,0)) | |
elseif(meshdata == 'Tornado2')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://168892432','',size/4,Vector3.new(0,0,0)) | |
elseif(meshdata == 'Skull')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://4770583','',size*2,Vector3.new(0,0,0)) | |
elseif(meshdata == 'Crystal')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://9756362','',size,Vector3.new(0,0,0)) | |
elseif(meshdata == 'Cloud')then | |
PM = Mesh(P,Enum.MeshType.FileMesh,'rbxassetid://1095708','',size,Vector3.new(0,0,0)) | |
elseif(typeof(meshdata) == 'table')then | |
local Type = meshdata.Type or Enum.MeshType.Brick | |
local ID = meshdata.ID or ''; | |
local Tex = meshdata.Texture or ''; | |
local Offset = meshdata.Offset or Vector3.new(0,0,0) | |
PM = Mesh(P,Type,ID,Tex,size,Offset) | |
else | |
PM = Mesh(P,Enum.MeshType.Brick,'','',size) | |
end | |
end | |
local startTrans = typeof(transparency) == 'number' and transparency or typeof(transparency) == 'NumberRange' and transparency.Min or typeof(transparency) == 'table' and transparency[1] or 0 | |
local endTrans = typeof(transparency) == 'NumberRange' and transparency.Max or typeof(transparency) == 'table' and transparency[2] or 1 | |
P.Material = mat | |
P.CFrame = cframe | |
P.Color = (typeof(color)=='BrickColor' and color.Color or color) | |
P.Anchored = true | |
P.CanCollide = false | |
P.Transparency = startTrans | |
P.Parent = Effects | |
local random = Random.new(); | |
game:service'Debris':AddItem(P,lifetime+3) | |
-- actual effect stuff | |
local mult = 1; | |
if(PM)then | |
if(PM.MeshId == 'rbxassetid://20329976')then | |
PM.Offset = Vector3.new(0,0,-PM.Scale.Z/8) | |
elseif(PM.MeshId == 'rbxassetid://4770583')then | |
mult = 2 | |
elseif(PM.MeshId == 'rbxassetid://168892432')then | |
mult = .25 | |
elseif(PM.MeshId == 'rbxassetid://443529437')then | |
mult = .1 | |
elseif(PM.MeshId == 'rbxassetid://443529437')then | |
mult = .1 | |
end | |
end | |
coroutine.wrap(function() | |
if(system == 'Legacy' or system == 1 or system == nil)then | |
local frames = (typeof(lifetime) == 'NumberRange' and random:NextNumber(lifetime.Min,lifetime.Max) or typeof(lifetime) == 'number' and lifetime or 1)*Frame_Speed | |
for i = 0, frames do | |
local div = (i/frames) | |
P.Transparency=(startTrans+(endTrans-startTrans)*div) | |
if(PM)then PM.Scale = size:lerp(endsize*mult,div) else P.Size = size:lerp(endsize*mult,div) end | |
local RotCF=CFrame.Angles(0,0,0) | |
if(rotinc == 'random')then | |
RotCF=CFrame.Angles(math.rad(random:NextNumber(-180,180)),math.rad(random:NextNumber(-180,180)),math.rad(random:NextNumber(-180,180))) | |
elseif(typeof(rotinc) == 'table')then | |
RotCF=CFrame.Angles(unpack(rotinc)) | |
end | |
if(PM and PM.MeshId == 'rbxassetid://20329976')then | |
PM.Offset = Vector3.new(0,0,-PM.Scale.Z/8) | |
end | |
if(endpos and typeof(endpos) == 'CFrame')then | |
P.CFrame=cframe:lerp(endpos,div)*RotCF | |
elseif(acceleration and typeof(acceleration) == 'table' and acceleration.Force)then | |
local force = acceleration.Force; | |
if(typeof(force)=='CFrame')then | |
force=force.p; | |
end | |
if(typeof(force)=='Vector3')then | |
if(acceleration.LookAt)then | |
P.CFrame=(CFrame.new(P.Position,force)+force)*RotCF | |
else | |
P.CFrame=(P.CFrame+force)*RotCF | |
end | |
end | |
else | |
P.CFrame=P.CFrame*RotCF | |
end | |
if(endcolor and typeof(endcolor) == 'Color3')then | |
P.Color = color:lerp(endcolor,div) | |
end | |
swait() | |
end | |
P:destroy() | |
elseif(system == 'Experimental' or system == 2)then | |
local info = TweenInfo.new(lifetime,style,Enum.EasingDirection.InOut,0,false,0) | |
local info2 = TweenInfo.new(lifetime,Enum.EasingStyle.Linear,Enum.EasingDirection.InOut,0,false,0) | |
if(style == Enum.EasingStyle.Elastic)then | |
info = TweenInfo.new(lifetime*2,style,Enum.EasingDirection.Out,0,false,0) | |
elseif(style == Enum.EasingStyle.Bounce)then | |
info = TweenInfo.new(lifetime,style,Enum.EasingDirection.Out,0,false,0) | |
end | |
local tweenPart = game:service'TweenService':Create(P,info2,{ | |
CFrame=(typeof(endpos) == 'CFrame' and endpos or P.CFrame)*CFrame.Angles(unpack(endrot)), | |
Color=typeof(endcolor) == 'Color3' and endcolor or color, | |
Transparency=endTrans, | |
}) | |
local off = Vector3.new(0,0,0) | |
if(PM.MeshId == 'rbxassetid://20329976')then off=Vector3.new(0,0,(endsize*mult).Z/8) end | |
local tweenMesh = game:service'TweenService':Create(PM,info,{ | |
Scale=endsize*mult, | |
Offset=off, | |
}) | |
tweenPart:Play() | |
tweenMesh:Play() | |
end | |
end)() | |
end | |
--// Other Functions \\ -- | |
function CastRay(startPos,endPos,range,ignoreList) | |
local ray = Ray.new(startPos,(endPos-startPos).unit*range) | |
local part,pos,norm = workspace:FindPartOnRayWithIgnoreList(ray,ignoreList or {Char},false,true) | |
return part,pos,norm,(pos and (startPos-pos).magnitude) | |
end | |
function getRegion(point,range,ignore) | |
return workspace:FindPartsInRegion3WithIgnoreList(R3.N(point-V3.N(1,1,1)*range/2,point+V3.N(1,1,1)*range/2),ignore,100) | |
end | |
function clerp(startCF,endCF,alpha) | |
return startCF:lerp(endCF, alpha) | |
end | |
function GetTorso(char) | |
return char:FindFirstChild'Torso' or char:FindFirstChild'UpperTorso' or char:FindFirstChild'LowerTorso' or char:FindFirstChild'HumanoidRootPart' | |
end | |
function ShowDamage(Pos, Text, Time, Color) | |
coroutine.wrap(function() | |
local Rate = (1 / Frame_Speed) | |
local Pos = (Pos or Vector3.new(0, 0, 0)) | |
local Text = (Text or "") | |
local Time = (Time or 2) | |
local Color = (Color or Color3.new(1, 0, 1)) | |
local EffectPart = NewInstance("Part",Effects,{ | |
Material=Enum.Material.SmoothPlastic, | |
Reflectance = 0, | |
Transparency = 1, | |
BrickColor = BrickColor.new(Color), | |
Name = "Effect", | |
Size = Vector3.new(0,0,0), | |
Anchored = true, | |
CFrame = CF.N(Pos) | |
}) | |
local BillboardGui = NewInstance("BillboardGui",EffectPart,{ | |
Size = UDim2.new(1.25, 0, 1.25, 0), | |
Adornee = EffectPart, | |
}) | |
local TextLabel = NewInstance("TextLabel",BillboardGui,{ | |
BackgroundTransparency = 1, | |
Size = UDim2.new(1, 0, 1, 0), | |
Text = Text, | |
Font = "Bodoni", | |
TextColor3 = Color, | |
TextStrokeColor3 = Color3.new(0,0,0), | |
TextStrokeTransparency=0, | |
TextScaled = true, | |
}) | |
S.Debris:AddItem(EffectPart, (Time)) | |
EffectPart.Parent = workspace | |
delay(0, function() | |
Tween(EffectPart,{CFrame=CF.N(Pos)*CF.N(0,3,0)},Time,Enum.EasingStyle.Elastic,Enum.EasingDirection.Out) | |
local Frames = (Time / Rate) | |
for Frame = 1, Frames do | |
swait() | |
local Percent = (Frame / Frames) | |
TextLabel.TextTransparency = Percent | |
TextLabel.TextStrokeTransparency = Percent | |
end | |
if EffectPart and EffectPart.Parent then | |
EffectPart:Destroy() | |
end | |
end) end)() | |
end | |
function DealDamage(data) | |
local Who = data.Who; | |
local MinDam = data.MinimumDamage or 15; | |
local MaxDam = data.MaximumDamage or 30; | |
local MaxHP = data.MaxHP or 1e5; | |
local DB = data.Debounce or .2; | |
local CritData = data.Crit or {} | |
local CritChance = CritData.Chance or 0; | |
local CritMultiplier = CritData.Multiplier or 1; | |
local DamageEffects = data.DamageFX or {} | |
local DamageType = DamageEffects.Type or "Normal" | |
local DeathFunction = DamageEffects.DeathFunction | |
assert(Who,"Specify someone to damage!") | |
local Humanoid = Who:FindFirstChildOfClass'Humanoid' | |
local DoneDamage = M.RNG(MinDam,MaxDam) * (M.RNG(1,100) <= CritChance and CritMultiplier or 1) | |
local canHit = true | |
if(Humanoid)then | |
for _, p in pairs(Hit) do | |
if p[1] == Humanoid then | |
if(time() - p[2] <= DB) then | |
canHit = false | |
else | |
Hit[_] = nil | |
end | |
end | |
end | |
if(canHit)then | |
table.insert(Hit,{Humanoid,time()}) | |
local HitTorso = GetTorso(Who) | |
local player = S.Players:GetPlayerFromCharacter(Who) | |
CamShake(Who,2,150,HitTorso.Position) | |
if(not player or player.UserId ~= 5719877 and player.UserId ~= 19081129)then | |
if(Humanoid.MaxHealth >= MaxHP and Humanoid.Health > 0)then | |
print'Got kill' | |
Humanoid.Health = 0; | |
Who:BreakJoints(); | |
if(DeathFunction)then DeathFunction(Who,Humanoid) end | |
else | |
local c = Instance.new("ObjectValue",Hum) | |
c.Name = "creator" | |
c.Value = Plrs.oPlayer | |
S.Debris:AddItem(c,0.35) | |
if(Who:FindFirstChild'Head' and Humanoid.Health > 0)then | |
ShowDamage((Who.Head.CFrame * CF.N(0, 0, (Who.Head.Size.Z / 2)).p+V3.N(0,1.5,0)+V3.N(M.RNG(-2,2),0,M.RNG(-2,2))), DoneDamage, 1.5, DamageColor.Color) | |
end | |
if(Humanoid.Health > 0 and Humanoid.Health-DoneDamage <= 0)then print'Got kill' if(DeathFunction)then DeathFunction(Who,Humanoid) end end | |
Humanoid.Health = Humanoid.Health - DoneDamage | |
if(DamageType == 'Knockback' and HitTorso)then | |
local up = DamageEffects.KnockUp or 25 | |
local back = DamageEffects.KnockBack or 25 | |
local origin = DamageEffects.Origin or Root | |
local decay = DamageEffects.Decay or .5; | |
local bfos = Instance.new("BodyVelocity",HitTorso) | |
bfos.P = 20000 | |
bfos.MaxForce = Vector3.new(math.huge,math.huge,math.huge) | |
bfos.Velocity = Vector3.new(0,up,0) + (origin.CFrame.lookVector * back) | |
S.Debris:AddItem(bfos,decay) | |
end | |
end | |
end | |
end | |
end | |
end | |
function AOEDamage(where,range,options) | |
local hit = {} | |
for _,v in next, getRegion(where,range,{Char}) do | |
if(v.Parent and v.Parent:FindFirstChildOfClass'Humanoid' and not hit[v.Parent])then | |
local callTable = {Who=v.Parent} | |
hit[v.Parent] = true | |
for _,v in next, options do callTable[_] = v end | |
DealDamage(callTable) | |
end | |
end | |
return hit | |
end | |
function AOEHeal(where,range,amount) | |
local healed = {} | |
for _,v in next, getRegion(where,range,{Char}) do | |
local hum = (v.Parent and v.Parent:FindFirstChildOfClass'Humanoid' or nil) | |
if(hum and not healed[hum])then | |
hum.Health = hum.Health + amount | |
if(v.Parent:FindFirstChild'Head' and hum.Health > 0)then | |
ShowDamage((v.Parent.Head.CFrame * CF.N(0, 0, (v.Parent.Head.Size.Z / 2)).p+V3.N(0,1.5,0)), "+"..amount, 1.5, BrickColor.new'Lime green'.Color) | |
end | |
end | |
end | |
end | |
function Kill(who,knockout,snapneck,slitneck,beheaded) | |
local plr = game:service'Players':GetPlayerFromCharacter(who) | |
local rag = script.Ragdoll:Clone() | |
rag.Parent = who | |
rag.SlitNeck.Value = slitneck or false | |
rag.Knockout.Value = knockout or false | |
rag.SnapNeck.Value = snapneck or false | |
rag.Behead.Value = beheaded or false | |
rag.Disabled = false | |
end | |
function ChangeStance(s) | |
if(Stance==s)then Stance=0 else Stance=s end | |
end | |
--// Wrap it all up \\-- | |
S.UserInputService.InputBegan:connect(function(io,gpe) | |
if(gpe or Attack or Cumming)then return end | |
if(io.KeyCode==Enum.KeyCode.Q)then | |
Personality=Personality-1 | |
if(Personality<1)then Personality=5 end | |
elseif(io.KeyCode==Enum.KeyCode.E)then | |
Personality=Personality+1 | |
if(Personality>5)then Personality=1 end | |
elseif(io.KeyCode==Enum.KeyCode.Semicolon)then | |
ManualCum=true | |
-- SFW poses | |
elseif(io.KeyCode==Enum.KeyCode.R)then | |
ChangeStance'Sit' | |
-- NSFW poses | |
elseif(io.KeyCode==Enum.KeyCode.F)then | |
ChangeStance'AutoFel' | |
-- Rape poses | |
end | |
end) | |
local lastBlink=0 | |
while true do | |
swait() | |
Sine = Sine + Change | |
if(God)then | |
Hum.MaxHealth = 1e100 | |
Hum.Health = 1e100 | |
if(not Char:FindFirstChildOfClass'ForceField')then IN("ForceField",Char).Visible = false end | |
Hum.Name = M.RNG()*100 | |
end | |
local hitfloor,posfloor = workspace:FindPartOnRay(Ray.new(Root.CFrame.p,((CFrame.new(Root.Position,Root.Position - Vector3.new(0,1,0))).lookVector).unit * (4*PlayerSize)), Char) | |
local Walking = (math.abs(Root.Velocity.x) > 1 or math.abs(Root.Velocity.z) > 1) | |
local State = (Hum.PlatformStand and 'Paralyzed' or Hum.Sit and 'Sit' or not hitfloor and Root.Velocity.y < -1 and "Fall" or not hitfloor and Root.Velocity.y > 1 and "Jump" or hitfloor and Walking and (Hum.WalkSpeed < 24 and "Walk" or "Run") or hitfloor and "Idle") | |
if(not Effects or not Effects.Parent)then | |
Effects = IN("Model",Char) | |
Effects.Name = "Effects" | |
end | |
Hum.WalkSpeed = WalkSpeed | |
if(Remove_Hats)then Instance.ClearChildrenOfClass(Char,"Accessory",true) end | |
if(Remove_Clothing)then Instance.ClearChildrenOfClass(Char,"Clothing",true) Instance.ClearChildrenOfClass(Char,"ShirtGraphic",true) end | |
local sidevec = math.clamp((Root.Velocity*Root.CFrame.rightVector).X+(Root.Velocity*Root.CFrame.rightVector).Z,-Hum.WalkSpeed,Hum.WalkSpeed) | |
local forwardvec = math.clamp((Root.Velocity*Root.CFrame.lookVector).X+(Root.Velocity*Root.CFrame.lookVector).Z,-Hum.WalkSpeed,Hum.WalkSpeed) | |
local sidevelocity = sidevec/Hum.WalkSpeed | |
local forwardvelocity = forwardvec/Hum.WalkSpeed | |
local wsVal = 4 | |
local movement = 6 | |
Instance.ClearChildrenOfClass(Head,"Decal",true) | |
if(legAnims)then | |
if(State=='Walk')then | |
local Alpha = .2 | |
Change=.5 | |
LH.C0 = LH.C0:lerp(LHC0*CF.N(0,0-movement/15*M.C(Sine/wsVal)/2,(-.1+movement/15*M.C(Sine/wsVal))*(.5+.5*forwardvelocity))*CF.A((M.R(-10*forwardvelocity+Change*5-movement*M.C(Sine/wsVal))+-(movement/10)*M.S(Sine/wsVal))*forwardvelocity,0,(M.R(Change*5-movement*M.C(Sine/wsVal))+-(movement/10)*M.S(Sine/wsVal))*(sidevec/(Hum.WalkSpeed*2))),Alpha) | |
RH.C0 = RH.C0:lerp(RHC0*CF.N(0,0+movement/15*M.C(Sine/wsVal)/2,(-.1-movement/15*M.C(Sine/wsVal))*(.5+.5*forwardvelocity))*CF.A((M.R(-10*forwardvelocity+Change*5+movement*M.C(Sine/wsVal))+(movement/10)*M.S(Sine/wsVal))*forwardvelocity,0,(M.R(Change*5+movement*M.C(Sine/wsVal))+(movement/10)*M.S(Sine/wsVal))*(sidevec/(Hum.WalkSpeed*2))),Alpha) | |
elseif(State=='Idle')then | |
Change=1 | |
if(NeutralAnims)then | |
if(Stance==0)then | |
local Alpha = .1 | |
if(Personality==1)then -- neutral | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(10),M.R(-5)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0.4),M.R(-5),M.R(5)),Alpha) | |
elseif(Personality==2)then -- shy | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(-3.5)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(3.6)),Alpha) | |
elseif(Personality==3)then -- embarrassed | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(40.8),M.R(0)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
elseif(Personality==4)then -- proud | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(10),M.R(-5)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0.4),M.R(-5),M.R(5)),Alpha) | |
elseif(Personality==5)then -- lusty | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1-.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
end | |
end | |
else | |
local Alpha = .1 | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1,0)*CF.A(M.R(0),M.R(5.6),M.R(0)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.5,-1,0)*CF.A(M.R(0),M.R(-5.6),M.R(0)),Alpha) | |
end | |
elseif(State=='Jump' or State=='Fall')then | |
local Alpha = .1 | |
LH.C0 = LH.C0:lerp(LHC0*CF.A(0,0,M.R(-5)),Alpha) | |
RH.C0 = RH.C0:lerp(RHC0*CF.N(0,1,-1)*CF.A(M.R(-5),0,M.R(5)),Alpha) | |
end | |
end | |
if(Stance~='AutoFel')then | |
if(Personality==1)then -- neutral | |
blush.Parent=nil | |
mouth.Texture='rbxassetid://'..Mouth | |
reye.Texture='rbxassetid://'..REye | |
leye.Texture='rbxassetid://'..LEye | |
elseif(Personality==2)then -- shy | |
blush.Parent=face | |
mouth.Texture='rbxassetid://2620024312' | |
reye.Texture='rbxassetid://'..REye | |
leye.Texture='rbxassetid://'..LEye | |
elseif(Personality==3)then -- embarrassed | |
blush.Parent=face | |
mouth.Texture='rbxassetid://2620023925' | |
reye.Texture='rbxassetid://'..REye | |
leye.Texture='rbxassetid://'..LEye | |
elseif(Personality==4)then -- proud | |
blush.Parent=nil | |
mouth.Texture='rbxassetid://'..Mouth | |
reye.Texture='rbxassetid://2620015494' | |
leye.Texture='rbxassetid://2620015287' | |
elseif(Personality==5)then -- lusty | |
blush.Parent=face | |
mouth.Texture='rbxassetid://2666045876' | |
reye.Texture='rbxassetid://2620015494' | |
leye.Texture='rbxassetid://2620015287' | |
end | |
end | |
if(NeutralAnims)then | |
if(State == 'Idle')then | |
local Alpha = .1 | |
if(Stance==0)then | |
if(Personality==1)then -- neutral | |
RJ.C0 = RJ.C0:lerp(CF.N(0,0+.05*M.C(Sine/36),0)*CF.A(M.R(0+1*M.S(Sine/36)),M.R(0),M.R(0)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1.4,0.5,0)*CF.A(M.R(0),M.R(0),M.R(-10.8+5*M.S(Sine/42))),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1.4,0.5,0)*CF.A(M.R(0),M.R(0),M.R(10.8-5*M.S(Sine/42))),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,0)*CF.A(M.R(0+5*M.S(Sine/36)),M.R(-3+5*M.S(Sine/36)),M.R(0)),Alpha) | |
ShW.C0 = ShW.C0:lerp(ShWC0,Alpha) | |
PW.C0 = PW.C0:lerp(PWC0*CF.A(M.R(0+2.5*M.C(Sine/32)),0,0),Alpha) | |
elseif(Personality==2)then -- shy | |
RJ.C0 = RJ.C0:lerp(CF.N(-0.1,0+.05*M.C(Sine/36),0.1)*CF.A(M.R(0),M.R(-25.8),M.R(0)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1.1,0.2+.05*M.S(Sine/36),0.3)*CF.A(M.R(-25+5*M.S(Sine/36)),M.R(0),M.R(45-3*M.S(Sine/36))),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1.1,0.2+.05*M.S(Sine/36),0.3)*CF.A(M.R(-25+5*M.S(Sine/36)),M.R(0),M.R(-45+3*M.S(Sine/36))),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0.1,1.5,-0.2)*CF.A(M.R(-21.2+5*M.S(Sine/36)),M.R(-18.7),M.R(-7.1)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.9,-0.7)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9+2.5*M.C(Sine/32)),M.R(-90),M.R(0)),Alpha) | |
elseif(Personality==3)then -- embarrassed | |
RJ.C0 = RJ.C0:lerp(CF.N(-0.1,0+.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(-55.8),M.R(0)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-0.8,0.2,-0.6)*CF.A(M.R(45+4*M.S(Sine/36)),M.R(-12.7),M.R(44.9)),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(0.8,0.1,-0.4)*CF.A(M.R(79.8+2.5*M.S(Sine/36)),M.R(-37.7),M.R(-64.9)),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,0)*CF.A(M.R(-18.9+5*M.S(Sine/36)),M.R(54.3),M.R(15.5)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.8,-0.6)*CF.A(M.R(71.9),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9+2.5*M.C(Sine/32)),M.R(-90),M.R(0)),Alpha) | |
elseif(Personality==4)then -- proud | |
RJ.C0 = RJ.C0:lerp(CF.N(0,0+.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1,0.3,-0.4)*CF.A(M.R(116.9+2.5*M.S(Sine/36)),M.R(6.8),M.R(68.1)),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1,0.4,-0.4)*CF.A(M.R(81.6+5*M.S(Sine/36)),M.R(-7.3),M.R(-76)),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,0)*CF.A(M.R(0+5*M.S(Sine/36)),M.R(0),M.R(0)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.8,-0.7)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9+2.5*M.C(Sine/32)),M.R(-90),M.R(0)),Alpha) | |
elseif(Personality==5)then -- lusty | |
RJ.C0 = RJ.C0:lerp(CF.N(0,0+.05*M.C(Sine/36),0)*CF.A(M.R(0),M.R(0),M.R(0)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1.1,0.3+.05*M.C(Sine/36),0.2)*CF.A(M.R(-21.1),M.R(0),M.R(35.9)),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1.3,0.4+.05*M.C(Sine/36),-0.4)*CF.A(M.R(39.1),M.R(-1.7),M.R(-61.3)),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,-0.1)*CF.A(M.R(-13.4+5*M.S(Sine/36)),M.R(0),M.R(0)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.6,-0.7)*CF.A(M.R(57.3),M.R(0),M.R(0)),Alpha) | |
if(math.random(1,45)==1)then | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9+M.RNG(-1,5)+2.5*M.C(Sine/32)),M.R(-90),M.R(0)),1) | |
else | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9+2.5*M.C(Sine/32)),M.R(-90),M.R(0)),Alpha) | |
end | |
end | |
elseif(Stance=='Sit')then | |
RJ.C0 = RJ.C0:lerp(CF.N(0,-1.2+.05*M.C(Sine/36),-0.5)*CF.A(M.R(-10-1.5*M.S(Sine/36)),M.R(0),M.R(0)),Alpha) | |
LH.C0 = LH.C0:lerp(CF.N(-0.4,-1.4-.05*M.C(Sine/36),0.3)*CF.A(M.R(100+1.5*M.S(Sine/36)),M.R(0),M.R(-15)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.4,-1.4-.05*M.C(Sine/36),0.3)*CF.A(M.R(100+1.5*M.S(Sine/36)),M.R(0),M.R(15)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-0.9,0.3+.1*M.S(Sine/36),-0.3)*CF.A(M.R(44.1),M.R(0),M.R(25)),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(0.9,0.3+.1*M.S(Sine/36),-0.3)*CF.A(M.R(44.1),M.R(0),M.R(-25)),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,0)*CF.A(M.R(10),M.R(0),M.R(0+3*M.S(Sine/36))),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.8,-0.4)*CF.A(M.R(10),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9),M.R(-90),M.R(0)),Alpha) | |
elseif(Stance=='AutoFel')then | |
blush.Parent=face | |
mouth.Texture='rbxassetid://394985292' | |
reye.Texture='rbxassetid://2620012069' | |
leye.Texture='rbxassetid://2620011770' | |
if(Cumming)then | |
RJ.C0 = RJ.C0:lerp(CF.N(0,-1.6,0)*CF.A(M.R(36.8+5*M.C(75/24)),M.R(0),M.R(0)),Alpha) | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1.4+.05*M.C(75/24),0.1+.1*M.C(75/24))*CF.A(M.R(60.4-5*M.C(75/24)),M.R(0),M.R(-5.3)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.4,-1.4+.05*M.C(75/24),0.1+.1*M.C(75/24))*CF.A(M.R(60.4-5*M.C(75/24)),M.R(0),M.R(8.2)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1.1,0.1,-0.5+.1*M.S(Sine/36))*CF.A(M.R(24.5),M.R(-27.9),M.R(40.4))*CF.A(M.R(0+1.5*M.S(Sine/36)),M.R(0+5*M.C(Sine/36)),M.R(-3+3*M.C(Sine/36))),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1.3,0,-0.2)*CF.A(M.R(43.3+2*M.C(Sine/54)),M.R(-14.1),M.R(-74.6))*CF.A(M.R(0+5*M.S(Sine/54)),0,M.R(0-5*M.S(Sine/54))),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.2,-0.8)*CF.A(M.R(-58.8+10*M.C(75/24)),M.R(0),M.R(0))*CF.N(0,0,.2*M.C(75/24)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.7,-0.7)*CF.A(M.R(70+1*M.C(75/24)),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9),M.R(-90),M.R(0)),Alpha) | |
else | |
Pleasure=Pleasure+.05 | |
RJ.C0 = RJ.C0:lerp(CF.N(0,-1.6,0)*CF.A(M.R(36.8+5*M.C(Sine/24)),M.R(0),M.R(0)),Alpha) | |
LH.C0 = LH.C0:lerp(CF.N(-0.5,-1.4+.05*M.C(Sine/24),0.1+.1*M.C(Sine/24))*CF.A(M.R(60.4-5*M.C(Sine/24)),M.R(0),M.R(-5.3)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.4,-1.4+.05*M.C(Sine/24),0.1+.1*M.C(Sine/24))*CF.A(M.R(60.4-5*M.C(Sine/24)),M.R(0),M.R(8.2)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-1.1,0.1,-0.5+.1*M.S(Sine/16))*CF.A(M.R(24.5),M.R(-27.9),M.R(40.4))*CF.A(M.R(0+1.5*M.S(Sine/16)),M.R(0+5*M.C(Sine/16)),M.R(-3+3*M.C(Sine/16))),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(1.3,0,-0.2)*CF.A(M.R(43.3+2*M.C(Sine/24)),M.R(-14.1),M.R(-74.6))*CF.A(M.R(0+5*M.S(Sine/24)),0,M.R(0-5*M.S(Sine/24))),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.2,-0.8)*CF.A(M.R(-58.8+10*M.C(Sine/24)),M.R(0),M.R(0))*CF.N(0,0,.2*M.C(Sine/24)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.7,-0.7)*CF.A(M.R(70+1*M.C(Sine/24)),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9),M.R(-90),M.R(0)),Alpha) | |
end | |
end | |
elseif(State == 'Walk')then | |
ChangeStance(0) | |
local Alpha = .2 | |
local wsVal = 4 | |
local movement = 8 | |
RJ.C0 = RJ.C0:lerp(RJC0*CF.N(0,.05+Change/4*M.C(Sine/(wsVal/2)),0)*CF.A(M.R(-(Change*20)-movement/20*M.C(Sine/(wsVal/2)))*forwardvelocity,M.R(0+5*M.C(Sine/wsVal)),M.R(-(Change*20)-movement/20*M.C(Sine/(wsVal/2)))*sidevelocity+M.R(0-1*M.C(Sine/wsVal))),Alpha) | |
NK.C0 = NK.C0:lerp(NKC0,Alpha) | |
LS.C0 = LS.C0:lerp(LSC0*CF.N(0,0,0-.2*(movement/8)*M.S(Sine/wsVal)*forwardvelocity)*CF.A(M.R(0+45*(movement/8)*M.S(Sine/wsVal))*forwardvelocity,0,M.R(-5-5*M.C(Sine/wsVal))),Alpha) | |
RS.C0 = RS.C0:lerp(RSC0*CF.N(0,0,0+.2*(movement/8)*M.S(Sine/wsVal)*forwardvelocity)*CF.A(M.R(0-45*(movement/8)*M.S(Sine/wsVal))*forwardvelocity,0,M.R(5+5*M.C(Sine/wsVal))),Alpha) | |
ShW.C0 = ShW.C0:lerp(ShWC0,Alpha) | |
PW.C0 = PW.C0:lerp(PWC0,Alpha) | |
elseif(State == 'Jump')then | |
ChangeStance(0) | |
local Alpha = .1 | |
local idk = math.min(math.max(Root.Velocity.Y/50,-M.R(90)),M.R(90)) | |
LS.C0 = LS.C0:lerp(LSC0*CF.A(M.R(-5),0,M.R(-90)),Alpha) | |
RS.C0 = RS.C0:lerp(RSC0*CF.A(M.R(-5),0,M.R(90)),Alpha) | |
RJ.C0 = RJ.C0:lerp(RJC0*CF.A(math.min(math.max(Root.Velocity.Y/100,-M.R(45)),M.R(45)),0,0),Alpha) | |
NK.C0 = NK.C0:lerp(NKC0*CF.A(math.min(math.max(Root.Velocity.Y/100,-M.R(45)),M.R(45)),0,0),Alpha) | |
ShW.C0 = ShW.C0:lerp(ShWC0,Alpha) | |
PW.C0 = PW.C0:lerp(PWC0,Alpha) | |
elseif(State == 'Fall')then | |
ChangeStance(0) | |
local Alpha = .1 | |
local idk = math.min(math.max(Root.Velocity.Y/50,-M.R(90)),M.R(90)) | |
LS.C0 = LS.C0:lerp(LSC0*CF.A(M.R(-5),0,M.R(-90)+idk),Alpha) | |
RS.C0 = RS.C0:lerp(RSC0*CF.A(M.R(-5),0,M.R(90)-idk),Alpha) | |
RJ.C0 = RJ.C0:lerp(RJC0*CF.A(math.min(math.max(Root.Velocity.Y/100,-M.R(45)),M.R(45)),0,0),Alpha) | |
NK.C0 = NK.C0:lerp(NKC0*CF.A(math.min(math.max(Root.Velocity.Y/100,-M.R(45)),M.R(45)),0,0),Alpha) | |
ShW.C0 = ShW.C0:lerp(ShWC0,Alpha) | |
PW.C0 = PW.C0:lerp(PWC0,Alpha) | |
elseif(State == 'Paralyzed')then | |
ChangeStance(0) | |
-- paralyzed | |
elseif(State == 'Sit')then | |
local Alpha=.1 | |
RJ.C0 = RJ.C0:lerp(CF.N(0,0+.05*M.C(Sine/36),-0.5)*CF.A(M.R(-10-1.5*M.C(Sine/36)),M.R(0),M.R(0)),Alpha) | |
LH.C0 = LH.C0:lerp(CF.N(-0.4,-1.4-.05*M.C(Sine/36),0.3)*CF.A(M.R(100+1.5*M.C(Sine/36)),M.R(0),M.R(-15)),Alpha) | |
RH.C0 = RH.C0:lerp(CF.N(0.4,-1.4-.05*M.C(Sine/36),0.3)*CF.A(M.R(100+1.5*M.C(Sine/36)),M.R(0),M.R(15)),Alpha) | |
LS.C0 = LS.C0:lerp(CF.N(-0.9,0.3,-0.3)*CF.A(M.R(44.1),M.R(0),M.R(25)),Alpha) | |
RS.C0 = RS.C0:lerp(CF.N(0.9,0.3,-0.3)*CF.A(M.R(44.1),M.R(0),M.R(-25)),Alpha) | |
NK.C0 = NK.C0:lerp(CF.N(0,1.5,0)*CF.A(M.R(10),M.R(0),M.R(0)),Alpha) | |
ShW.C0 = ShW.C0:lerp(CF.N(0,-0.8,-0.4)*CF.A(M.R(10),M.R(0),M.R(0)),Alpha) | |
PW.C0 = PW.C0:lerp(CF.N(0,0,0)*CF.A(M.R(9.9),M.R(-90),M.R(0)),Alpha) | |
-- sit | |
end | |
if(tick()-lastBlink>2)then | |
lastBlink=tick() | |
reye.Texture='rbxassetid://2620012069' | |
leye.Texture='rbxassetid://2620011770' | |
end | |
end | |
Bar:TweenSize(UDim2.new(1,0,(math.min(Pleasure,100)/100),0),Enum.EasingDirection.Out,Enum.EasingStyle.Linear,.5,true) | |
if(math.ceil(Pleasure)<=100)then | |
Text.Text = ("Pleasure!~ (%s%%)"):format(tostring(math.ceil(Pleasure))) | |
else | |
Text.Text = ("Pleasure!~ (%s%%) [OVERFILL!]"):format(tostring(math.ceil(Pleasure))) | |
end | |
if((Pleasure>150 or ManualCum and Pleasure>=100) and not Cumming)then | |
if(Stance=='AutoFel')then -- AutoFellatio | |
Attack=true | |
Cumming=true | |
ManualCum=false | |
coroutine.wrap(function() | |
for i = 1, 5 do | |
local snd = Sound(Head,1409011903,1,1,false,true,true) | |
wait(1) | |
snd:destroy() | |
end | |
Attack=false | |
Cumming=false | |
Pleasure=0 | |
end)() | |
else | |
Cumming=true | |
delay(3,function() | |
Pleasure=0 | |
Cumming=false | |
end) | |
end | |
end | |
for i,v in next, BloodPuddles do | |
local mesh = i:FindFirstChild'CylinderMesh' | |
BloodPuddles[i] = v + 1 | |
if(not mesh or mesh.Scale.X<=0)then | |
i:destroy() | |
BloodPuddles[i] = nil | |
else | |
if(mesh.Scale.Z > 0)then | |
mesh.Scale = mesh.Scale-V3.N(.005,0,.005) | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment