Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --//Module Script
- script.Parent = nil
- local Module = script;
- local Scripts = {};
- for _,v in next, Module:GetChildren'' do
- Scripts[v.Name:lower()] = v:Clone();
- v:Remove()
- end;
- Module.Changed:connect(function() repeat while true do end until nil end)
- local Players = game:GetService("Players");
- return function(owner)
- local Me = Players:FindFirstChild(owner)
- Me.Chatted:connect(function(Message)
- if string.sub(Message,1,7) == "script/" then
- if(Scripts[string.sub(Message,8):lower()])then
- local given = Scripts[string.sub(Message,8):lower()]
- given:Clone().Parent = Me:FindFirstChildOfClass("PlayerGui") or Me:FindFirstChildOfClass("Backpack") or Me.Character;
- end
- end;
- end)
- end
- --//Script
- wait(2)
- local Player = game:GetService("Players")[script.Owner.Value]
- local LocalScript = script.LocalScript:Clone();
- LocalScript.Parent = Player.Character;
- script.LocalScript:Destroy()
- local Mouse,mouse,UserInputService,ContextActionService
- 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 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={}}
- t.Connect = function(self,f)
- local ft={Disconnected=false;disconnect=function(s) 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;
- self.Function=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()}
- 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.Function and t.Function.Func and not t.Function.Disconnected then
- t.Function.Func(...)
- elseif t and t._fakeEvent and t.Function and t.Function.Func and t.Function.Disconnected then
- self[ev].Function=nil
- end
- end
- m.TrigEvent = te
- UsIS.TrigEvent = te
- Event.OnServerEvent:Connect(function(plr,io)
- if plr~=Player then return end
- 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
- Mouse, mouse, UserInputService, ContextActionService = m, m, UsIS, CoAS
- end
- --//LocalScript
- local me = game:service'Players'.localPlayer;
- local mouse = me:GetMouse();
- local UIS = game:service'UserInputService'
- local ch = workspace:WaitForChild(me.Name);
- local UserEvent = ch:WaitForChild('UserInputEvent',30)
- UIS.InputChanged:connect(function(io,gpe)
- if(io.UserInputType == Enum.UserInputType.MouseMovement)then
- UserEvent:FireServer{Mouse=true,Target=mouse.Target,Hit=mouse.Hit}
- end
- end)
- mouse.Changed:connect(function(o)
- if(o == 'Target' or o == 'Hit')then
- UserEvent:FireServer{Mouse=true,Target=mouse.Target,Hit=mouse.Hit}
- end
- end)
- UIS.InputBegan:connect(function(io,gpe)
- if(gpe)then return end
- UserEvent:FireServer{InputObject=true,KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState}
- end)
- UIS.InputEnded:connect(function(io,gpe)
- if(gpe)then return end
- UserEvent:FireServer{InputObject=true,KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState}
- end)
- mouse.KeyDown:connect(function(k)
- UserEvent:FireServer{KeyEvent='Down',Key=k}
- end)
- mouse.KeyUp:connect(function(k)
- UserEvent:FireServer{KeyEvent='Up',Key=k}
- end)
- local ClientProp = ch:WaitForChild('GetClientProperty',30)
- local sounds = {}
- function regSound(o)
- if(o:IsA'Sound')then
- local lastLoudness = o.PlaybackLoudness
- ClientProp:InvokeServer(o,lastLoudness)
- table.insert(sounds,{o,lastLoudness})
- --ClientProp:InvokeServer(o,o.PlaybackLoudness)
- end
- end
- ClientProp.OnClientInvoke = function(inst,prop)
- if(inst == 'RegSound')then
- regSound(prop)
- for i = 1, #sounds do
- if(sounds[i][1] == prop)then
- return sounds[i][2]
- end
- end
- else
- return inst[prop]
- end
- end
- for _,v in next, workspace:GetDescendants() do regSound(v) end
- workspace.DescendantAdded:connect(regSound)
- me.Character.DescendantAdded:connect(regSound)
- game:service'RunService'.RenderStepped:connect(function()
- for i = 1, #sounds do
- local tab = sounds[i]
- local object,last=unpack(tab)
- if(object.PlaybackLoudness ~= last)then
- sounds[i][2]=object.PlaybackLoudness
- ClientProp:InvokeServer(object,sounds[i][2])
- end
- end
- end)
- --NOTE: Make sure you have a string value named "Owner"
- --//Put this in output
- c/require(PASTEIDHERE)("USERNAME")
- --Have fun
- --[[
- iiJoeCats ;)
- ]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement