Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local RealPlayer = game:GetService("Players"):GetPlayerFromCharacter(script.Parent)
- local FakeMouse = script.FakeMouse:Clone();
- FakeMouse.Parent = RealPlayer.Character;
- script.FakeMouse:Destroy()
- do
- local GUID = {}
- do
- GUID.IDs = {};
- function GUID:new(len)
- local id;
- if(not len)then
- id = (tostring(function() end))
- id = id:gsub("function: ","")
- else
- local function genID(len)
- local newID = ""
- for i = 1,len do
- newID = newID..string.char(math.random(48,90))
- end
- return newID
- end
- repeat id = genID(len) until not GUID.IDs[id]
- local oid = id;
- id = {Trash=function() GUID.IDs[oid]=nil; end;Get=function() return oid; end}
- GUID.IDs[oid]=true;
- end
- return id
- end
- end
- local AHB = Instance.new("BindableEvent")
- local FPS = 30
- local TimeFrame = 0
- local LastFrame = tick()
- local Frame = 1/FPS
- game:service'RunService'.Heartbeat:connect(function(s,p)
- TimeFrame = TimeFrame + s
- if(TimeFrame >= Frame)then
- for i = 1,math.floor(TimeFrame/Frame) do
- AHB:Fire()
- end
- LastFrame=tick()
- TimeFrame=TimeFrame-Frame*math.floor(TimeFrame/Frame)
- end
- end)
- function swait(dur)
- if(dur == 0 or typeof(dur) ~= 'number')then
- AHB.Event:wait()
- else
- for i = 1, dur*FPS do
- AHB.Event:wait()
- end
- end
- end
- local oPlayer = RealPlayer
- local Player = oPlayer
- local loudnesses={}
- script.Parent = Player.Character
- local CoAS = {Actions={}}
- local Event = Instance.new("RemoteEvent")
- Event.Name = "UserInputEvent"
- Event.Parent = Player.Character
- local Func = Instance.new("RemoteFunction")
- Func.Name = "GetClientProperty"
- Func.Parent = Player.Character
- local fakeEvent = function()
- local t = {_fakeEvent=true,Waited={},Connected={}}
- t.Connect = function(self,f)
- local ft={}
- ft={Disconnected=false;disconnect=function(s) if(self.Function==ft)then self.Function=nil end s.Disconnected=true end}
- ft.Disconnect=ft.disconnect
- ft.Func=function(...)
- for id,_ in next, t.Waited do
- t.Waited[id] = true
- end
- return f(...)
- end;
- table.insert(self.Connected,ft)
- return ft;
- end
- t.connect = t.Connect
- t.Wait = function()
- local guid = GUID:new(25)
- local waitingId = guid:Get()
- t.Waited[waitingId]=false
- repeat swait() until t.Waited[waitingId]==true
- t.Waited[waitingId]=nil;
- guid:Trash()
- end
- t.wait = t.Wait
- return t
- end
- local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
- local UsIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
- local Run = {RenderStepped=fakeEvent()}
- function CoAS:BindAction(name,fun,touch,...)
- CoAS.Actions[name] = {Name=name,Function=fun,Keys={...}}
- end
- function CoAS:UnbindAction(name)
- CoAS.Actions[name] = nil
- end
- local function te(self,ev,...)
- local t = self[ev]
- if t and t._fakeEvent and t.Connected then
- for i,v in next, t.Connected do
- if(v.Func and not v.Disconnected)then
- v.Func(...)
- else
- t.Connected[i]=nil
- end
- end
- end
- end
- m.TrigEvent = te
- UsIS.TrigEvent = te
- Run.TrigEvent = te
- Event.OnServerEvent:Connect(function(plr,io)
- if plr~=Player then return end
- --[[table.foreach(io,print)
- print'---']]
- if io.Mouse then
- m.Target = io.Target
- m.Hit = io.Hit
- elseif io.KeyEvent then
- m:TrigEvent('Key'..io.KeyEvent,io.Key)
- elseif io.UserInputType == Enum.UserInputType.MouseButton1 then
- if io.UserInputState == Enum.UserInputState.Begin then
- m:TrigEvent("Button1Down")
- else
- m:TrigEvent("Button1Up")
- end
- end
- if(not io.KeyEvent and not io.Mouse)then
- for n,t in pairs(CoAS.Actions) do
- for _,k in pairs(t.Keys) do
- if k==io.KeyCode then
- t.Function(t.Name,io.UserInputState,io)
- end
- end
- end
- if io.UserInputState == Enum.UserInputState.Begin then
- UsIS:TrigEvent("InputBegan",io,false)
- else
- UsIS:TrigEvent("InputEnded",io,false)
- end
- end
- end)
- Func.OnServerInvoke = function(plr,inst,play)
- if plr~=Player then return end
- if(inst and typeof(inst) == 'Instance' and inst:IsA'Sound')then
- loudnesses[inst]=play
- end
- end
- function GetClientProperty(inst,prop)
- if(prop == 'PlaybackLoudness' and loudnesses[inst])then
- return loudnesses[inst]
- elseif(prop == 'PlaybackLoudness')then
- return Func:InvokeClient(Player,'RegSound',inst)
- end
- return Func:InvokeClient(Player,inst,prop)
- end
- local oldGame = game;
- local oldPlayer = Player;
- local fakePlayer = newproxy(true)
- getmetatable(fakePlayer).__index = function(s,i)
- if(i == 'GetMouse')then
- return function() return m; end
- end
- return Player[i]
- end
- getmetatable(fakePlayer).__newindex = function(s,i,v)
- Player[i]=v
- end
- getmetatable(fakePlayer).__call=function(self,...)
- if(self == fakePlayer)then self = Player end
- local wh = {...}
- local name = table.remove(wh,1)
- for i,v in next, wh do
- wh[i]=v
- end
- if(name == 'GetMouse')then
- return m;
- end
- return self(name,unpack(wh))
- end
- getmetatable(fakePlayer).__namecall=function(self,...)
- if(self == fakePlayer)then self = Player end
- local tuple={...}
- local name = table.remove(tuple,#tuple)
- if(name == 'GetMouse')then
- return m;
- else
- return self[name](self,unpack(tuple))
- end
- end
- local oll = LoadLibrary;
- function LoadLibrary(libtard)
- local libtarddestroyed=oll(libtard)
- if(libtard=='RbxUtility')then
- local library={Create=function(obj)
- local inst = Instance.new(obj)
- return function(props)
- for prop,valu in next, props do
- inst[prop]=valu
- end
- return inst
- end
- end}
- setmetatable(library,{__index=libtarddestroyed,__newindex=function(s,i,v) libtarddestroyed[i]=v end})
- return library
- else
- return libtarddestroyed
- end
- end
- local function GetService(s,i)
- local service = s:GetService(i)
- if(i == 'Players')then
- local oldService = service;
- local fakeService = newproxy(true)
- getmetatable(fakeService).__index = function(s,i)
- if(s == fakeService)then s=oldService end
- if(i == 'LocalPlayer' or i == 'localPlayer')then
- return fakePlayer
- elseif(i == 'oPlayer')then
- return oPlayer
- else
- return s[i]
- end
- end
- getmetatable(fakeService).__newindex = function(s,i,v)
- if(s == fakeService)then s=oldService end
- s[i]=v
- end
- getmetatable(fakeService).__call=function(self,...)
- if(self == fakeService)then self = oldService end
- local wh = {...}
- local name = table.remove(wh,1)
- for i,v in next, wh do
- wh[i]=v
- end
- return self(name,unpack(wh))
- end
- getmetatable(fakeService).__namecall=function(self,...)
- if(self == fakeService)then self = oldService end
- local tuple={...}
- local name = table.remove(tuple,#tuple)
- return self[name](self,unpack(tuple))
- end
- getmetatable(fakeService).__metatable = 'gay'
- return fakeService
- elseif(i == 'RunService')then
- local oldService = service;
- local fakeService = newproxy(true)
- getmetatable(fakeService).__index = function(s,i)
- if(s == fakeService)then s=oldService end
- return Run[i] or s[i]
- end
- getmetatable(fakeService).__newindex = function(s,i,v)
- if(s == fakeService)then s=oldService end
- s[i]=v
- end
- getmetatable(fakeService).__call=function(self,...)
- if(self == fakeService)then self = oldService end
- local wh = {...}
- local name = table.remove(wh,1)
- for i,v in next, wh do
- wh[i]=v
- end
- return self(name,unpack(wh))
- end
- getmetatable(fakeService).__namecall=function(self,...)
- if(self == fakeService)then self = oldService end
- local tuple={...}
- local name = table.remove(tuple,#tuple)
- return self[name](self,unpack(tuple))
- end
- getmetatable(fakeService).__metatable = 'gay'
- return fakeService
- elseif(i == 'UserInputService')then
- return UsIS
- elseif(i == 'ContextActionService')then
- return CoAS;
- else
- return service
- end
- end
- local new = Instance.new;
- Instance = {}
- Instance.new = function(inst,obje)
- local lp = GetService(oldGame,'Players').localPlayer
- local instance = new(inst)
- if(inst=='ObjectValue')then
- local fake = newproxy(true)
- getmetatable(fake).__index=function(self,index)
- if(self==fake)then self=instance end
- return self[index]
- end
- getmetatable(fake).__newindex=function(self,index,value)
- if(self==fake)then self=instance end
- if(index=='Value' and typeof(value)~='Instance' and value==fakePlayer)then
- self[index]=oPlayer
- else
- self[index]=value
- end
- end
- getmetatable(fake).__call=function(self,...)
- if(self == fake)then self = instance end
- local wh = {...}
- local name = table.remove(wh,1)
- for i,v in next, wh do
- if(v == fake)then v = instance end
- wh[i]=v
- end
- return self(name,unpack(wh))
- end
- getmetatable(fake). __namecall=function(self,...)
- if(self == fake)then self = instance end
- local tuple={...}
- local name = table.remove(tuple,#tuple)
- return self[name](self,unpack(tuple))
- end
- return fake
- else
- instance.Parent = obje
- return instance;
- end
- end
- local serviceFunctions={
- service=true,
- GetService=true,
- }
- local fakeGame = newproxy(true)
- getmetatable(fakeGame).__index = function(s,i)
- if(s == fakeGame)then s=oldGame end
- local serv = GetService(oldGame,i)
- if serviceFunctions[i] then
- return GetService
- elseif(serv)then
- return serv
- else
- return s[i]
- end
- end
- getmetatable(fakeGame).__newindex = function(s,i,v)
- if(s == fakeGame)then s=oldGame end
- s[i]=v
- end
- getmetatable(fakeGame).__call=function(self,...)
- if(self == fakeGame)then self = oldGame end
- local wh = {...}
- local name = table.remove(wh,1)
- for i,v in next, wh do
- if(v == fakeGame)then v = oldGame end
- wh[i]=v
- end
- if serviceFunctions[name] then
- return GetService(self,unpack(wh))
- else
- return self(name,unpack(wh))
- end
- end
- getmetatable(fakeGame). __namecall=function(self,...)
- if(self == fakeGame)then self = oldGame end
- local tuple={...}
- local name = table.remove(tuple,#tuple)
- local funcToCall=self[name]
- if serviceFunctions[name] then
- return GetService(self,unpack(tuple))
- else
- return self[name](self,unpack(tuple))
- end
- end
- getmetatable(fakeGame).__metatable = 'gay'
- coroutine.wrap(function()
- while true do
- Run:TrigEvent('RenderStepped')
- swait()
- end
- end)()
- game=fakeGame
- UserInputService,ContextActionService = UsIS,CoAS
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement