Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _lock=function(class)
- class=class:sub(1,1):upper()..class:sub(2);
- local object=Instance.new(class);
- return function(props)
- if(type(list_base_props)=='table')then
- for i,v in next,list_base_props do
- if(props[i]==nil)then
- props[i]=v;
- end;
- end;
- end;
- local proxy,meta,cons,redo,works,_real,_redo,_connect,_setup,_lock_f,_obj;
- proxy=newproxy(true);
- meta=getmetatable(proxy);
- cons={};
- works={};
- --begin functions------------------------------------
- _real=function(proxy)
- if(getmetatable(proxy)=='drezmor_object')then
- return proxy();
- else
- return proxy;
- end;
- end;
- _lock_f=function(fun)
- getfenv(fun).this=proxy;
- end;
- _connect=function(add,event,fun,index)
- pcall(_lock_f,fun);
- local c=object[event]:connect(fun);
- if(not cons[event])then
- cons[event]={};
- end;
- if(index)then
- cons[event][index].connect:disconnect();
- cons[event][index].connect=c;
- elseif(add)then
- cons[event][#cons[event]+1]={
- connect=c;
- fun=fun;
- };
- end;
- return c,#cons[event];
- end;
- _obj=function(...)
- local a,b=...;
- local count=select('#',...);
- if(count==0)then
- return object;
- elseif(count==1)then
- return object[a],a;
- elseif(count==2)then
- works[a]=true;
- object[a]=b;
- works[a]=false;
- end;
- end;
- --end functions--------------------------------------
- --begin properties-----------------------------------
- do
- local new_props={};
- for index,value in next,props do
- local load,res,key=pcall(_obj,index:sub(1,1):upper()..index:sub(2));
- if(not load)then
- load,res,key=pcall(_obj,index);
- end;
- if(load)then
- local vt=type(value);
- local vm=getmetatable(res);
- local rt=type(res);
- local rs=tostring(res);
- if(rt=='userdata'and rs=='Signal '..key)then
- if(vt=='table')then
- for i=1,#value do
- _connect(true,key,value[i]);
- end;
- else
- _connect(true,key,value);
- end;
- else
- if(vt~='function'and vm~='drezmor_object')then
- new_props[key]=function()return value;end;
- else
- new_props[key]=value;
- end;
- end;
- end;
- end;
- props=new_props;
- end;
- --end properties-------------------------------------
- --begin setup----------------------------------------
- _redo=function(p)
- if(not works[p]and props[p])then
- works[p]=true;
- wait(0.001);
- if(not pcall(_obj,p,props[p]())and p=='Parent')then
- _setup();
- end;
- works[p]=false;
- end;
- end;
- _setup=function()
- object=Instance.new(class);
- if(redo)then
- redo:disconnect();
- end;
- for event,infos in next,cons do
- for i=1,#infos do
- _connect(false,event,infos[i].fun,i);
- end;
- end;
- for i,v in next,props do
- _obj(i,v());
- end;
- works=nil;
- works={};
- redo=object.Changed:connect(_redo);
- return proxy;
- end;
- --end setup---------------------------------------
- --begin metatable---------------------------------
- meta.__metatable='drezmor_object';
- meta.__call=function(self,...)
- return _obj(...);
- end;
- meta.__tostring=function()
- return tostring(object);
- end;
- meta.__len=function()
- return#object:children();
- end;
- meta.__newindex=function(self,k,n)
- local load,res,key=pcall(_obj,k:sub(1,1):upper()..k:sub(2));
- if(not load)then
- load,res,key=pcall(_obj,k);
- end;
- if(load)then
- local rt=type(res);
- local rs=tostring(res);
- if(rt=='userdata'and rs=='Signal '..key)then
- _connect(true,key,n);
- else
- if(type(n)~='function'and getmetatable(n)~='drezmor_object')then
- props[key]=function()return n;end;
- else
- props[key]=n;
- end;
- _obj(key,_real(n));
- end;
- end;
- end;
- meta.__index=function(self,k)
- local load,res,key=pcall(_obj,k:sub(1,1):upper()..k:sub(2));
- if(not load)then
- load,res,key=pcall(_obj,k);
- end;
- if(load)then
- local rt=type(res);
- local rs=tostring(res);
- if(rt=='function')then
- return key:lower()=='destroy'and function(self,...)
- if(self==proxy)then
- _setup=nil;
- redo:disconnect();
- for i,v in next,cons do
- for i=1,#v do
- v[i].connect:disconnect();
- end;
- end;
- proxy,meta,cons,redo,works,_real,_redo,_connect,_setup,_lock_f,_obj=
- nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil;
- object:Destroy(...);
- else
- self:Destroy(...);
- end;
- end or function(self,...)
- res(_real(self),...);
- end;
- elseif(rt=='userdata'and rs=='Signal '..key)then
- local t;t={
- disconnect=function()
- if(cons[key])then
- for i,v in next,cons[key]do
- v.connect:disconnect();
- end;
- cons[key]=nil;
- end;
- end;
- connect=function(self,fun)
- if(self==t)then
- local c,i=_connect(true,key,fun);
- local ct;ct={
- disconnect=function(self,...)
- if(self==ct)then
- c:disconnect(...);
- if(cons[key]and cons[key][i]and cons[key][i].fun==fun)then
- cons[key][i].connect:disconnect();
- cons[key][i]=nil;
- end;
- else
- self:disconnect(...);
- end;
- end;
- };
- return ct;
- else
- return self:connect(fun);
- end;
- end;
- wait=function(self,...)
- if(self==t)then
- return res:wait(...);
- else
- return self:wait(...);
- end;
- end;
- };
- return t;
- else
- return object[key];
- end;
- end;
- end;
- --end metatable-----------------------------------
- if(type(list_drezmor_objects)=='table')then
- list_drezmor_objects[#list_drezmor_objects+1]=proxy;
- end;
- return _setup();
- end;
- end;
- --test-----------------------------------------------------------------------------
- this=_lock'hint'{
- parent=workspace;
- text='test';
- changed=function(p)
- print(p,this);
- end;
- };
- wait(5);
- this.changed:disconnect();
- wait(5);
- this:destroy();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement