workbench.desktop.main.js:sourcemap:2872 Extension host terminated unexpectedly. Code: 7 Signal: null _onExtensionHostCrashed @ workbench.desktop.main.js:sourcemap:2872 _onExtensionHostCrashed @ workbench.desktop.main.js:sourcemap:2878 _onExtensionHostCrashOrExit @ workbench.desktop.main.js:sourcemap:2872 (anonymous) @ workbench.desktop.main.js:sourcemap:2872 fire @ workbench.desktop.main.js:sourcemap:69 _onExtHostProcessExit @ workbench.desktop.main.js:sourcemap:2877 (anonymous) @ workbench.desktop.main.js:sourcemap:2877 emit @ events.js:315 ChildProcess._handle.onexit @ internal/child_process.js:277 workbench.desktop.main.js:sourcemap:602 ERR Extension host terminated unexpectedly. The following extensions were running: vscode.microsoft-authentication, goz3rr.vscode-glualint, venner.vscode-glua-enhanced, vscode.debug-auto-launch, vscode.git, vscode.github, ms-vscode.js-debug, vscode.emmet, vscode.merge-conflict, ms-vscode-remote.remote-wsl-recommender, eamodio.gitlens, vscode.github-authentication workbench.desktop.main.js:sourcemap:767 Extension host terminated unexpectedly. onDidChangeNotification @ workbench.desktop.main.js:sourcemap:767 (anonymous) @ workbench.desktop.main.js:sourcemap:767 fire @ workbench.desktop.main.js:sourcemap:69 addNotification @ workbench.desktop.main.js:sourcemap:769 notify @ workbench.desktop.main.js:sourcemap:1543 prompt @ workbench.desktop.main.js:sourcemap:1543 _onExtensionHostCrashed @ workbench.desktop.main.js:sourcemap:2878 _onExtensionHostCrashOrExit @ workbench.desktop.main.js:sourcemap:2872 (anonymous) @ workbench.desktop.main.js:sourcemap:2872 fire @ workbench.desktop.main.js:sourcemap:69 _onExtHostProcessExit @ workbench.desktop.main.js:sourcemap:2877 (anonymous) @ workbench.desktop.main.js:sourcemap:2877 emit @ events.js:315 ChildProcess._handle.onexit @ internal/child_process.js:277 workbench.desktop.main.js:sourcemap:2877 Extension Host workbench.desktop.main.js:sourcemap:2877 c:\Users\{USERNAME}\.vscode\extensions\venner.vscode-glua-enhanced-2.5.0\dist\extension.bundle.js:2module.exports=(()=>{var __webpack_modules__={1739:(e,t,n)=>{function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],a=!0,o=!1,i=void 0;try{for(var r,E=e[Symbol.iterator]();!(a=(r=E.next()).done)&&(n.push(r.value),!t||n.length!==t);a=!0);}catch(e){o=!0,i=e}finally{try{a||null==E.return||E.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n0)E.window.showErrorMessage("Error: "+(n||i.toString("utf8")));else{var r;try{r=S(u(o))}catch(n){E.window.showErrorMessage("Bytecode error: "+n)}var s=a(r,2),I=s[0],N=s[1],C=[];I.forEach((function(t,n){var a=t[0];if(0!==a){var o=t[1],i="| Opcode | Count | Weight/op | Weight | % |\n|:-:|:-:|:-:|:-:|:-:|\n",r=[];for(var s in o){var l=o[s][0],u=o[s][1];r.push([s,u,l])}r.sort((function(e,t){return t[1]-e[1]}));for(var S=0;S{function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function o(e,t){for(var n=0;n]+)>/g,(function(e,t){return"$"+n[t]})))}if("function"==typeof t){var i=this;return o[Symbol.replace].call(this,e,(function(){var e=[];return e.push.apply(e,arguments),"object"!==a(e[e.length-1])&&e.push(u(e,i)),t.apply(this,e)}))}return o[Symbol.replace].call(this,e,t)},i.apply(this,arguments)}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&u(e,t)}functiarent"in r))break;r=r.parent}return a?[o,e.getTokenRange(r),r]:o}}]),e}(),P=function(){function e(t,n,a){o(this,e),n&&a&&(this.GLua=n,this.uri=a,this.GLua.TokenIntellisenseProvider.createTokenData(this.uri)),this.extracts={RAW:t,TYPES:{},LIST:[],LINES:{MAX:0,LIST:[]}},this.visited=new Map,this.traverseTree(t),delete this.visited,delete this.parsed}return r(e,[{key:"parseGlobalTable",value:function(e,t){t.type}},{key:"parseToken",value:function(t,n){n&&(t.parent=n),t.type in this.extracts.TYPES||(this.extracts.TYPES[t.type]={LIST:[],LINES:{MAX:0,LIST:[]}});var a=this.extracts.TYPES[t.type],o=this.extracts.LIST.push(t),i=a.LIST.push(t);if("loc"in t&&"Chunk"!==t.type&&(e.structurizeLineLocation(o-1,this.extracts,t.loc.start.line-1),e.structurizeLineLocation(i-1,a,t.loc.start.line-1)),this.GLua)switch(t.uri=this.uri,t.type){case"ForGenericStatement":for(var r=0;r0){var s=E.join(""),l=t.isLocal;if(!l&&t.identifier&&"MemberExpression"===t.identifier.type)for(var u=t.identifier;u;){if(u.isLocal){l=!0;break}if(!("base"in u))break;u=u.base}if(!l&&1===E.length&&"parent"in t)for(var T=t.parent;T;){if("scope"in T&&s in T.scope){l=!0;break}if(!("parent"in T))break;T=T.parent}if(l){if("scope"in t||(t.scope={}),t.scope[s]=t,"parent"in t)for(var d=t.parent;d;){if(d.type in S){"scope"in d||(d.scope={}),d.scope[s]=t;break}"parent"in d&&(d=d.parent);break}}else this.GLua.TokenIntellisenseProvider.addGlobal(t,E,s,!0)}}for(var I=0;I=1){var v=c.parseStringLiteral(M[0]);v&&this.GLua.TokenIntellisenseProvider.addNetworkString(void 0,v,this.uri)}break;case"net.Receive":if(M.length>=1){var U=c.parseStringLiteral(M[0]);U&&this.GLua.TokenIntellisenseProvider.addNetworkString(t,U,this.uri)}break;case"net.Start":if(M.length>=1){var w=c.parseStringLiteral(M[0]);w&&this.GLua.TokenIntellisenseProvider.addNetworkString(t,w,this.uri,!0)}break;default:if(":"===L[L.length-2]&&"NetworkVar"===L[L.length-1]&&M.length>=3){var G=c.parseStringLiteral(M[0]),F=c.parseStringLiteral(M[2]);G&&F&&(G=G in A?A[G]:G,this.GLua.TokenIntellisenseProvider.addNetworkVar(t,G,F))}}}}}}},{key:"traverseTree",value:function(e,t){if(!this.visited.has(e)&&(this.visited.set(e,!0),this.parseToken(e,t),e.type in m))for(var n=0;n>2],n=-16&(t+e+15|0);return HEAP32[DYNAMICTOP_PTR>>2]=n,n>=TOTAL_MEMORY&&!enlargeMemory()?(HEAP32[DYNAMICTOP_PTR>>2]=t,0):t},alignMemory:function(e,t){return Math.ceil(e/(t||16))*(t||16)},makeBigInt:function(e,t,n){return n?+(e>>>0)+4294967296*+(t>>>0):+(e>>>0)+4294967296*+(0|t)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0,cwrap,ccall;function assert(e,t){e||abort("Assertion failed: "+t)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,t,n,a){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":HEAP8[e>>0]=t;break;case"i16":HEAP16[e>>1]=t;break;case"i32":HEAP32[e>>2]=t;break;case"i64":tempI64=[t>>>0,(tempDouble=t,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=t;break;case"double":HEAPF64[e>>3]=t;break;default:abort("invalid type for setValue: "+n)}}function getValue(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+t)}return null}(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var t=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,t),t},stringToC:function(e){var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);stringToUTF8(e,t=Runtime.stackAlloc(n),n)}return t}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,t,n,a,o){var i=getCFunc(e),r=[],E=0;if(a)for(var s=0;s>0]=0|o[y>>0],o[c+6>>0]=0|o[D>>0],o[c+7>>0]=0|o[D+1>>0],O=1<<(1|p)|P):O=P,N?(D=1+(P=e+(I+g<<2)|0)|0,o[c+8>>0]=0|o[P>>0],P=D+1|0,o[c+9>>0]=0|o[D>>0],o[c+10>>0]=0|o[P>>0],o[c+11>>0]=0|o[P+1>>0],L=1<<(2|p)|O):L=O,R?(g=1+(P=e+(C+g<<2)|0)|0,o[c+12>>0]=0|o[P>>0],P=g+1|0,o[c+13>>0]=0|o[g>>0],o[c+14>>0]=0|o[P>>0],o[c+15>>0]=0|o[P+1>>0],_=1<<(3|p)|L):_=L):_=A,4!=(0|(m=m+1|0));)A=_,c=c+16|0;ue(E,_,l,s),l=l+i|0,a=a+4|0}while((0|a)<(0|t));if((0|(S=S+4|0))>=(0|n))break;u=l}h=r}else h=r}function Te(e,t,n,a,i){e|=0,t|=0,a|=0;var r,E,s,l,u,S=0,T=0,d=0,I=0,N=0,C=0,R=0,m=0,A=0,c=0,P=0,g=0,p=0,D=0,y=0,O=0,L=0,_=0,f=0;if(r=h,h=h+64|0,E=r,S=8+((T=(i=4==(0|(S=7&(i|=0))))?4:2==(0|S)?2:1)<<3&8^8)|0,(0|(n|=0))<=0)h=r;else{for(s=(0|t)>0,T=0==(6&(d=i?4:2==(0|T)?2:1)|0),i=0!=(1&d|0),l=0==(2&d|0),u=0==(4&d|0),d=a,a=0;;){e:do{if(s){if(l)I=0,N=d;else for(C=0,R=d;;){for($(E,T?R:R+8|0,i),x(E,R),A=(0|(m=1|C))<(0|t),P=(0|(c=2|C))<(0|t),p=(0|(g=3|C))<(0|t),D=0,y=E;L=0|b(O=D+a|0,t),(0|O)<(0|n)&&(_=1+(O=e+(C+L<<2)|0)|0,o[O>>0]=0|o[y>>0],O=_+1|0,o[_>>0]=0|o[y+1>>0],o[O>>0]=0|o[y+2>>0],o[O+1>>0]=0|o[y+3>>0],A&&(_=1+(O=e+(m+L<<2)|0)|0,o[O>>0]=0|o[y+4>>0],O=_+1|0,o[_>>0]=0|o[y+5>>0],o[O>>0]=0|o[y+6>>0],o[O+1>>0]=0|o[y+7>>0]),P&&(_=1+(O=e+(c+L<<2)|0)|0,o[O>>0]=0|o[y+8>>0],O=_+1|0,o[_>>0]=0|o[y+9>>0],o[O>>0]=0|o[y+10>>0],o[O+1>>0]=0|o[y+11>>0]),p&&(L=1+(O=e+(g+L<<2)|0)|0,o[O>>0]=0|o[y+12>>0],O=L+1|0,o[L>>0]=0|o[y+13>>0],o[O>>0]=0|o[y+14>>0],o[O+1>>0]=0|o[y+15>>0])),4!=(0|(D=D+1|0));)y=y+16|0;if(y=R+S|0,(0|(C=C+4|0))>=(0|t)){f=y;break e}R=y}for(;;){for($(E,T?N:N+8|0,i),u||z(E,N),C=(0|(R=1|I))<(0|t),D=(0|(y=2|I))<(0|t),p=(0|(g=3|I))<(0|t),c=0,P=E;A=0|b(m=c+a|0,t),(0|m)<(0|n)&&(O=1+(m=e+(I+A<<2)|0)|0,o[m>>0]=0|o[P>>0],m=O+1|0,o[O>>0]=0|o[P+1>>0],o[m>>0]=0|o[P+2>>0],o[m+1>>0]=0|o[P+3>>0],C&&(O=1+(m=e+(R+A<<2)|0)|0,o[m>>0]=0|o[P+4>>0],m=O+1|0,o[O>>0]=0|o[P+5>>0],o[m>>0]=0|o[P+6>>0],o[m+1>>0]=0|o[P+7>>0]),D&&(O=1+(m=e+(y+A<<2)|0)|0,o[m>>0]=0|o[P+8>>0],m=O+1|0,o[O>>0]=0|o[P+9>>0],o[m>>0]=0|o[P+10>>0],o[m+1>>0]=0|o[P+11>>0]),p&&(A=1+(m=e+(g+A<<2)|0)|0,o[m>>0]=0|o[P+12>>0],m=A+1|0,o[A>>0]=0|o[P+13>>0],o[m>>0]=0|o[P+14>>0],o[m+1>>0]=0|o[P+15>>0])),4!=(0|(c=c+1|0));)P=P+16|0;if(P=N+S|0,(0|(I=I+4|0))>=(0|t)){f=P;break}N=P}}else f=d}while(0);if((0|(a=a+4|0))>=(0|n))break;d=f}h=r}}function de(e){var t,n=0,a=0,o=0,i=0,r=0,E=0,l=0,u=0,S=0,T=0,d=0,I=0,N=0,C=0,R=0,m=0,h=0,A=0,c=0,P=0,g=0,p=0,D=0,y=0,O=0,L=0,_=0;if(e|=0){n=e+-8|0,a=0|s[1758],t=n+(e=-8&(o=0|s[e+-4>>2]))|0;do{if(1&o)S=n,T=e,d=n;else{if(i=0|s[n>>2],!(3&o))return;if(E=i+e|0,(r=n+(0-i)|0)>>>0>>0)return;if((0|r)==(0|s[1759])){if(3!=(3&(u=0|s[(l=t+4|0)>>2])|0)){S=r,T=E,d=r;break}return s[1756]=E,s[l>>2]=-2&u,s[r+4>>2]=1|E,void(s[r+E>>2]=E)}if(u=i>>>3,i>>>0<256){if(i=0|s[r+8>>2],(0|(l=0|s[r+12>>2]))==(0|i)){s[1754]=s[1754]&~(1<>2]=l,s[l+8>>2]=i,S=r,T=E,d=r;break}i=0|s[r+24>>2],l=0|s[r+12>>2];do{if((0|l)==(0|r)){if(N=0|s[(I=4+(u=r+16|0)|0)>>2])m=N,h=I;else{if(!(C=0|s[u>>2])){R=0;break}m=C,h=u}for(;;)if(0|(N=0|s[(I=m+20|0)>>2]))m=N,h=I;else{if(!(N=0|s[(I=m+16|0)>>2]))break;m=N,h=I}s[h>>2]=0,R=m}else I=0|s[r+8>>2],s[I+12>>2]=l,s[l+8>>2]=I,R=l}while(0);if(i){if(l=0|s[r+28>>2],(0|r)==(0|s[(I=7320+(l<<2)|0)>>2])){if(s[I>>2]=R,!R){s[1755]=s[1755]&~(1<>2])!=(0|r)&1)<<2)>>2]=R,!R){S=r,T=E,d=r;break}s[R+24>>2]=i,0|(I=0|s[(l=r+16|0)>>2])&&(s[R+16>>2]=I,s[I+24>>2]=R),(I=0|s[l+4>>2])?(s[R+20>>2]=I,s[I+24>>2]=R,S=r,T=E,d=r):(S=r,T=E,d=r)}else S=r,T=E,d=r}}while(0);if(!(d>>>0>=t>>>0)&&1&(e=0|s[(n=t+4|0)>>2])){if(2&e)s[n>>2]=-2&e,s[S+4>>2]=1|T,s[d+T>>2]=T,g=T;else{if(R=0|s[1759],(0|t)==(0|s[1760])){if(m=(0|s[1757])+T|0,s[1757]=m,s[1760]=S,s[S+4>>2]=1|m,(0|S)!=(0|R))return;return s[1759]=0,void(s[1756]=0)}if((0|t)==(0|R))return R=(0|s[1756])+T|0,s[1756]=R,s[1759]=d,s[S+4>>2]=1|R,void(s[d+R>>2]=R);R=(-8&e)+T|0,m=e>>>3;do{if(e>>>0<256){if(h=0|s[t+8>>2],(0|(a=0|s[t+12>>2]))==(0|h)){s[1754]=s[1754]&~(1<>2]=a,s[a+8>>2]=h;break}h=0|s[t+24>>2],a=0|s[t+12>>2];do{if((0|a)==(0|t)){if(l=0|s[(I=4+(o=t+16|0)|0)>>2])c=l,P=I;else{if(!(N=0|s[o>>2])){A=0;break}c=N,P=o}for(;;)if(0|(l=0|s[(I=c+20|0)>>2]))c=l,P=I;else{if(!(l=0|s[(I=c+16|0)>>2]))break;c=l,P=I}s[P>>2]=0,A=c}else I=0|s[t+8>>2],s[I+12>>2]=a,s[a+8>>2]=I,A=a}while(0);if(0|h){if(a=0|s[t+28>>2],(0|t)==(0|s[(r=7320+(a<<2)|0)>>2])){if(s[r>>2]=A,!A){s[1755]=s[1755]&~(1<>2])!=(0|t)&1)<<2)>>2]=A,!A)break;s[A+24>>2]=h,0|(r=0|s[(a=t+16|0)>>2])&&(s[A+16>>2]=r,s[r+24>>2]=A),0|(r=0|s[a+4>>2])&&(s[A+20>>2]=r,s[r+24>>2]=A)}}while(0);if(s[S+4>>2]=1|R,s[d+R>>2]=R,(0|S)==(0|s[1759]))return void(s[1756]=R);g=R}if(T=g>>>3,g>>>0<256)return d=7056+(T<<1<<2)|0,(e=0|s[1754])&(n=1<>2],D=n):(s[1754]=e|n,p=d,D=d+8|0),s[D>>2]=S,s[p+12>>2]=S,s[S+8>>2]=p,void(s[S+12>>2]=d);y=(d=g>>>8)?g>>>0>16777215?31:g>>>(7+(e=14-((d=(520192+(D=d<<(p=(d+1048320|0)>>>16&8))|0)>>>16&4)|p|(D=(245760+(n=D<>>16&2))+(n<>>15)|0)|0)&1|e<<1:0,e=7320+(y<<2)|0,s[S+28>>2n(e){return null!=e&&(t(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},3339:e=>{var t=[[/\*/g,"\\*","asterisks"],[/#/g,"\\#","number signs"],[/\//g,"\\/","slashes"],[/\(/g,"\\(","parentheses"],[/\)/g,"\\)","parentheses"],[/\[/g,"\\[","square brackets"],[/\]/g,"\\]","square brackets"],[//g,">","angle brackets"],[/_/g,"\\_","underscores"]];e.exports=function(e,n){return n=n||[],t.reduce((function(e,t){var a=t[2];return a&&-1!==n.indexOf(a)?e:e.replace(t[0],t[1])}),e)}},2568:(e,t,n)=>{var a,o,i,r,E;a=n(1012),o=n(487).utf8,i=n(8738),r=n(487).bin,(E=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?r.stringToBytes(e):o.stringToBytes(e):i(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var n=a.bytesToWords(e),s=8*e.length,l=1732584193,u=-271733879,S=-1732584194,T=271733878,d=0;d>>24)|4278255360&(n[d]<<24|n[d]>>>8);n[s>>>5]|=128<>>9<<4)]=s;var I=E._ff,N=E._gg,C=E._hh,R=E._ii;for(d=0;d>>0,u=u+h>>>0,S=S+A>>>0,T=T+c>>>0}return a.endian([l,u,S,T])})._ff=function(e,t,n,a,o,i,r){var E=e+(t&n|~t&a)+(o>>>0)+r;return(E<>>32-i)+t},E._gg=function(e,t,n,a,o,i,r){var E=e+(t&a|n&~a)+(o>>>0)+r;return(E<>>32-i)+t},E._hh=function(e,t,n,a,o,i,r){var E=e+(t^n^a)+(o>>>0)+r;return(E<>>32-i)+t},E._ii=function(e,t,n,a,o,i,r){var E=e+(n^(t|~a))+(o>>>0)+r;return(E<>>32-i)+t},E._blocksize=16,E._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var n=a.wordsToBytes(E(e,t));return t&&t.asBytes?n:t&&t.asString?r.bytesToString(n):a.bytesToHex(n)}},9983:(e,t,n)=>{"use strict";let a=n(7084),o=[function(){},function(e,t,n,a){if(a===t.length)throw new Error("Ran out of data");let o=t[a];e[n]=o,e[n+1]=o,e[n+2]=o,e[n+3]=255},function(e,t,n,a){if(a+1>=t.length)throw new Error("Ran out of data");let o=t[a];e[n]=o,e[n+1]=o,e[n+2]=o,e[n+3]=t[a+1]},function(e,t,n,a){if(a+2>=t.length)throw new Error("Ran out of data");e[n]=t[a],e[n+1]=t[a+1],e[n+2]=t[a+2],e[n+3]=255},function(e,t,n,a){if(a+3>=t.length)throw new Error("Ran out of data");e[n]=t[a],e[n+1]=t[a+1],e[n+2]=t[a+2],e[n+3]=t[a+3]}],i=[function(){},function(e,t,n,a){let o=t[0];e[n]=o,e[n+1]=o,e[n+2]=o,e[n+3]=a},function(e,t,n){let a=t[0];e[n]=a,e[n+1]=a,e[n+2]=a,e[n+3]=t[1]},function(e,t,n,a){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=a},function(e,t,n){e[n]=t[0],e[n+1]=t[1],e[n+2]=t[2],e[n+3]=t[3]}];function r(e,t,n,a,i,r){let E=e.width,s=e.height,l=e.index;for(let e=0;e:\\"\\n* ffid: the fast function id of the function (if it is one). In this case only upvalues above and addr below are valid\\n* addr: the address of the function (if it is not a Lua function). If it\'s a C function rather than a fast function, only upvalues above is valid*","ARGUMENTS":[{"NAME":"func","TYPE":"function","DESCRIPTION":"Function or Proto to retrieve info about."},{"NAME":"pos","TYPE":"number","DEFAULT":"0"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"Information about the supplied function/proto."}]},"funck":{"SEARCH":"jit.util.funck","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"jit.util.funck","DESCRIPTION":"Gets a constant at a certain index in a function.","NOTES":["This function only works for Lua defined functions.","Numbers constants goes from 0 (included) to n-1, n being the value of nconsts in [jit.util.funcinfo](/gmod/jit.util.funcinfo) in other words, the consts goes from (nconsts-1) to -n"],"WARNINGS":["This function isn\'t officially documented on LuJIT wiki, use it at your own risk."],"ARGUMENTS":[{"NAME":"func","TYPE":"function","DESCRIPTION":"Function to get constant from"},{"NAME":"index","TYPE":"number","DESCRIPTION":"Constant index (counting down from the top of the function at -1)"}],"RETURNS":[{"TYPE":"any","DESCRIPTION":"The constant found.","NOTES":["This will return a [proto](/gmod/proto) for functions that are created inside the target function - see Example 2."]}]},"funcuvname":{"SEARCH":"jit.util.funcuvname","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"jit.util.funcuvname","DESCRIPTION":"Does the exact same thing as debug.getupvalue except it only returns the name, not the name and the object. The upvalue indexes also start at 0 rather than 1, so doing jit.util.funcuvname(func, 0) will get you the same name as debug.getupvalue(func, 1)","WARNINGS":["This function isn\'t officially documented on LuJIT wiki, use it at your own risk."],"ARGUMENTS":[{"NAME":"func","TYPE":"function","DESCRIPTION":"Function to get the upvalue indexed from"},{"NAME":"index","TYPE":"number","DESCRIPTION":"The upvalue index, starting from 0"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"The function returns nil if there is no upvalue with the given index, otherwise the name of the upvalue is returned"}]},"ircalladdr":{"SEARCH":"jit.util.ircalladdr","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"jit.util.ircalladdr","DESCRIPTION":"Gets the address of a function from a list of 20 functions, for the list see [Ircalladdr Functions](/gmod/Ircalladdr%20Functions)","WARNINGS":["This function isn\'t officially documented on LuJIT wiki, use it at your own risk."],"ARGUMENTS":[{"NAME":"index","TYPE":"number","DESCRIPTION":"The index of the function address to get from the ircalladdr func array (starting from 0)"}],"RETURNS":[{"TYPE":"number","DESCRIPTION":"The address of the function"}]},"traceexitstub":{"SEARCH":"jit.util.traceexitstub","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"jit.util.traceexitstub","ARGUMENTS":[{"NAME":"exitno","TYPE":"number","DESCRIPTION":"exit number to retrieve exit stub address from (gotten via [jit.attach](/gmod/jit.attach) with the texit event)"}],"RETURNS":[{"TYPE":"number","DESCRIPTION":"exitstub trace address"}]},"traceinfo":{"SEARCH"Saves any changes made to navmesh to the .nav file."},"SetMarkedArea":{"SEARCH":"navmesh.SetMarkedArea","SERVER":true,"FUNCTION":true,"LINK":"navmesh.SetMarkedArea","DESCRIPTION":"Sets the [CNavArea](/gmod/CNavArea) as marked, so it can be used with editing console commands.","ARGUMENTS":[{"NAME":"area","TYPE":"CNavArea","DESCRIPTION":"The [CNavArea](/gmod/CNavArea) to set as the marked area."}]},"SetMarkedLadder":{"SEARCH":"navmesh.SetMarkedLadder","SERVER":true,"FUNCTION":true,"LINK":"navmesh.SetMarkedLadder","DESCRIPTION":"Sets the [CNavLadder](/gmod/CNavLadder) as marked, so it can be used with editing console commands.","ARGUMENTS":[{"NAME":"area","TYPE":"CNavLadder","DESCRIPTION":"The [CNavLadder](/gmod/CNavLadder) to set as the marked ladder."}]},"SetPlayerSpawnName":{"SEARCH":"navmesh.SetPlayerSpawnName","SERVER":true,"FUNCTION":true,"LINK":"navmesh.SetPlayerSpawnName","DESCRIPTION":"Sets the classname of the default spawn point entity, used before generating a new navmesh with [navmesh.BeginGeneration](/gmod/navmesh.BeginGeneration).","ARGUMENTS":[{"NAME":"spawnPointClass","TYPE":"string","DESCRIPTION":"The classname of what the player uses to spawn, automatically adds it to the walkable positions during map generation."}]}},"SEARCH":"navmesh","DESCRIPTION":"The navigation mesh library. To be used with [CNavArea](/gmod/CNavArea).\\r\\n\\r\\nThe navigation mesh is used by [NextBot](/gmod/NextBot) to calculate path to its target."},"net":{"MEMBERS":{"Broadcast":{"SEARCH":"net.Broadcast","SERVER":true,"FUNCTION":true,"LINK":"net.Broadcast","DESCRIPTION":"Sends the currently built net message to all connected players.\\nMore information can be found in [Net Library Usage](/gmod/Net%20Library%20Usage)."},"BytesLeft":{"SEARCH":"net.BytesLeft","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.BytesLeft","DESCRIPTION":"Returns the amount of data left to read in the current message in bytes. Does nothing when sending data.","RETURNS":[{"TYPE":"number","DESCRIPTION":"The amount of data left to read in the current net message in bytes.\\nReturns nil if no net message has been started."},{"TYPE":"number","DESCRIPTION":"The amount of data left to read in the current net message in bits.\\nReturns nil if no net message has been started."}]},"BytesWritten":{"SEARCH":"net.BytesWritten","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.BytesWritten","DESCRIPTION":"Returns the size of the current message in bytes.","NOTES":["This will include 3 extra bytes used by the engine internally to send the data over the network."],"RETURNS":[{"TYPE":"number","DESCRIPTION":"The amount of bytes written to the current net message.\\nReturns nil if no net message has been started."},{"TYPE":"number","DESCRIPTION":"The amount of bits written to the current net message.\\nReturns nil if no net message has been started."}]},"Incoming":{"SEARCH":"net.Incoming","CLIENT":true,"SERVER":true,"INTERNAL":true,"FUNCTION":true,"LINK":"net.Incoming","SRC":["lua/includes/extensions/net.lua","17-34"],"DESCRIPTION":"Function called by the engine to tell the lua state a message arrived.","ARGUMENTS":[{"NAME":"length","TYPE":"number","DESCRIPTION":"The message length, in bits."},{"NAME":"client","TYPE":"Player","DESCRIPTION":"The player that sent the message. This will be nil in the client state."}]},"ReadAngle":{"SEARCH":"net.ReadAngle","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.ReadAngle","DESCRIPTION":"Reads an angle from the received net message.","WARNINGS":["You **must** read information in same order as you write it."],"RETURNS":[{"TYPE":"Angle","DESCRIPTION":"The read angle, or Angle(0,0,0) if no angle could be read"}]},"ReadBit":{"SEARCH":"net.ReadBit","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.ReadBit","DESCRIPTION":"Reads a bit from the received net message.","WARNINGS":["You **must** read information in same order as you write it."],"RETURNS":[{"TYPE":"number","DESCRIPTION":"0 or 1, or 0 if the bit could not be read."}]},"ReadBool":{"SEARCH":"net.ReadBool","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.ReadBool","SRC":["lua/includes/extensions/net.lua","41-45"],"DESCRIPTION":"Reads a boolean from the received net message.","WARNINGS":["You **must** read information in same order as you write it."],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"true or false, or false if the bool could not be read."}]},"ReadColor":{"SEARCH":"net.ReadColor","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.ReadColor","SRC":["lua/includes/extensions/net.lua","83-93"],"DESCRIPTION":"Reads a [Color](/gmod/Color) from the current net message.","WARNINGS":["You **must** read information in same order as you write it."],"RETURNS":[{"TYPE":"table","DESCRIPTION":"The [Color](/gmod/Color) read from the current net message, or Color(0,0,0,0) if the color could not be read."}]},"ReadData":{"SEARCH":"net.ReadData","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"net.ReadData","DESCRIPTION":"Reads pure binary data` | Locale-appropriate date and time | Varies by platform and language settings |\\r\\n| `NaN` | Day of the month [01-31] | `16` |\\r\\n| `%H` | Hour, using a 24-hour clock [00-23] | `23` |\\r\\n| `%I` | Hour, using a 12-hour clock [01-12] | `11` |\\r\\n| `%j` | Day of the year [001-365] | `259` |\\r\\n| `%m` | Month [01-12] | `09` |\\r\\n| `%M` | Minute [00-59] | `48` |\\r\\n| `%p` | Either `am` or `pm` | `pm` |\\r\\n| `%S` | Second [00-60] | `10` |\\r\\n| `%w` | Weekday [0-6 = Sunday-Saturday] | `3` |\\r\\n| `%W` | Week of the year [00-53] | `37` |\\r\\n| `%x` | Date (Same as `%m/%d/%y`) | `09/16/98` |\\r\\n| `%X` | Time (Same as `%H:%M:%S`) | `24:48:10` |\\r\\n| `%y` | Two-digit year [00-99] | `98` |\\r\\n| `%Y` | Full year | `1998` |\\r\\n| `%z` | Timezone | `-0300` |\\r\\n| `%` | A percent sign | `%` |","BUGS":[{"ISSUE":"329","DESCRIPTION":"**Not all flags are available on all operating systems** and the result of using an invalid flag is undefined. This currently crashes the game on Windows. Most or all flags are available on OS X and Linux but considerably fewer are available on Windows. See http://msdn.microsoft.com/en-us/library/fe06s4ak.aspx for a list of available flags on Windows. Note that the **#** flags also crashes the game on Windows."}]},{"NAME":"time","TYPE":"number","DEFAULT":"os.time()","DESCRIPTION":"Time to use for the format."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Formatted date","NOTES":["This will be a [DateData](/gmod/Structures/DateData) if the first argument equals to `*t` or `!*t`"]}]},"difftime":{"SEARCH":"os.difftime","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"os.difftime","DESCRIPTION":"Subtracts the second from the first value and rounds the result.","ARGUMENTS":[{"NAME":"timeA","TYPE":"number","DESCRIPTION":"The first value."},{"NAME":"timeB","TYPE":"number","DESCRIPTION":"The value to subtract."}],"RETURNS":[{"TYPE":"number","DESCRIPTION":"diffTime"}]},"time":{"SEARCH":"os.time","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"os.time","DESCRIPTION":"Returns the system time in seconds past the unix epoch. If a table is supplied, the function attempts to build a system time with the specified table members.","ARGUMENTS":[{"NAME":"dateData","TYPE":"table","DEFAULT":"nil","DESCRIPTION":"Table to generate the time from. This table\'s data is interpreted as being in the local timezone. See [DateData](/gmod/Structures/DateData)"}],"RETURNS":[{"TYPE":"number","DESCRIPTION":"Seconds passed since Unix epoch"}]}},"SEARCH":"os","DESCRIPTION":"The os library is a standard Lua library originally intended to allow Lua access to various features of the Operating System it\'s running on, however many of the features and functions have been removed in Garry\'s Mod due to security issues. It\'s only used in Garry\'s Mod for date & time operations."},"package":{"MEMBERS":{"seeall":{"SEARCH":"package.seeall","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"package.seeall","DESCRIPTION":"Sets a metatable for module with its __index field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to [module](/gmod/Global.module).","ARGUMENTS":[{"NAME":"module","TYPE":"table","DESCRIPTION":"The module table to be given a metatable"}]}},"SEARCH":"package","DESCRIPTION":"The package library is a standard Lua library, it\'s mainly for use with the module system built into Lua."},"physenv":{"MEMBERS":{"AddSurfaceData":{"SEARCH":"physenv.AddSurfaceData","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.AddSurfaceData","DESCRIPTION":"Adds surface properties to the game\'s physics environment.","BUGS":[{"ISSUE":"2604","DESCRIPTION":"The game has a limit of 128 surface properties - this includes properties loaded automatically from [surfaceproperties.txt](https://github.com/Facepunch/garrysmod/blob/master/garrysmod/scripts/surfaceproperties.txt). Due to this, there\'s only a small amount of open slots that can be registered with GMod\'s provided surfaceproperties.txt."}],"ARGUMENTS":[{"NAME":"properties","TYPE":"string","DESCRIPTION":"The properties to add. Each one should include \\"base\\" or the game will crash due to some values being missing."}]},"GetAirDensity":{"SEARCH":"physenv.GetAirDensity","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.GetAirDensity","DESCRIPTION":"Returns the air density.","RETURNS":[{"TYPE":"number","DESCRIPTION":"airDensity"}]},"GetGravity":{"SEARCH":"physenv.GetGravity","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.GetGravity","DESCRIPTION":"Gets the global gravity.","RETURNS":[{"TYPE":"Vector","DESCRIPTION":"gravity"}]},"GetPerformanceSettings":{"SEARCH":"physenv.GetPerformanceSettings","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.GetPerformanceSettings","DESCRIPTION":"Gets the current performance settings in table form.","RETURNS":[{"TYPE":"table","DESCRIPTION":"Performance settings. See [PhysEnvPerformanceSettings](/gmod/Structures/PhysEnvPerformanceSettings)"}]},"SetAirDensity":{"SEARCH":"physenv.SetAirDensity","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.SetAirDensity","DESCRIPTION":"Sets the air density.","ARGUMENTS":[{"NAME":"airDensity","TYPE":"number","DESCRIPTION":"The new air density."}]},"SetGravity":{"SEARCH":"physenv.SetGravity","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"physenv.SetGravity","DESCRIPTION":"Sets the directional gravity, does not work on players.","ARGUMENTS":[{"NAME":"gravity","TYPE":"Vector","DESCRIPTION":"The new gravity."%c"ARGUMENTS":[{"NAME":"texture_from","TYPE":"ITexture"},{"NAME":"texture_to","TYPE":"ITexture"}],"SRC":["lua/includes/extensions/client/render.lua","60-69"]},"CullMode":{"SEARCH":"render.CullMode","CLIENT":true,"FUNCTION":true,"LINK":"render.CullMode","DESCRIPTION":"Changes the cull mode.","ARGUMENTS":[{"NAME":"cullMode","TYPE":"number","ENUM":"MATERIAL_CULLMODE","DESCRIPTION":"Cullmode, see [MATERIAL_CULLMODE](/gmod/Enums/MATERIAL_CULLMODE)"}]},"DepthRange":{"SEARCH":"render.DepthRange","CLIENT":true,"FUNCTION":true,"LINK":"render.DepthRange","DESCRIPTION":"Set\'s the depth range of the upcoming render.","ARGUMENTS":[{"NAME":"depthmin","TYPE":"number","DESCRIPTION":"The minimum depth of the upcoming render. `0.0` = render normally; `1.0` = render nothing."},{"NAME":"depthmax","TYPE":"number","DESCRIPTION":"The maximum depth of the upcoming render. `0.0` = render everything (through walls); `1.0` = render normally."}]},"DrawBeam":{"SEARCH":"render.DrawBeam","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawBeam","DESCRIPTION":"Draws textured beam.","ARGUMENTS":[{"NAME":"startPos","TYPE":"Vector","DESCRIPTION":"Beam start position."},{"NAME":"endPos","TYPE":"Vector","DESCRIPTION":"Beam end position."},{"NAME":"width","TYPE":"number","DESCRIPTION":"The width of the beam."},{"NAME":"textureStart","TYPE":"number","DESCRIPTION":"The start coordinate of the texture used."},{"NAME":"textureEnd","TYPE":"number","DESCRIPTION":"The end coordinate of the texture used."},{"NAME":"color","TYPE":"table","DEFAULT":"Color( 255, 255, 255 )","DESCRIPTION":"The color to be used. Uses the [Color](/gmod/Color)."}]},"DrawBox":{"SEARCH":"render.DrawBox","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawBox","DESCRIPTION":"Draws a box in 3D space.","ARGUMENTS":[{"NAME":"position","TYPE":"Vector","DESCRIPTION":"Origin of the box."},{"NAME":"angles","TYPE":"Angle","DESCRIPTION":"Orientation of the box."},{"NAME":"mins","TYPE":"Vector","DESCRIPTION":"Start position of the box, relative to origin."},{"NAME":"maxs","TYPE":"Vector","DESCRIPTION":"End position of the box, relative to origin."},{"NAME":"color","TYPE":"table","DEFAULT":"Color( 255, 255, 255 )","DESCRIPTION":"The color of the box. Uses the [Color](/gmod/Color)."}]},"DrawLine":{"SEARCH":"render.DrawLine","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawLine","DESCRIPTION":"Draws a line in 3D space.","ARGUMENTS":[{"NAME":"startPos","TYPE":"Vector","DESCRIPTION":"Line start position in world coordinates."},{"NAME":"endPos","TYPE":"Vector","DESCRIPTION":"Line end position in world coordinates."},{"NAME":"color","TYPE":"table","DEFAULT":"Color( 255, 255, 255 )","DESCRIPTION":"The color to be used. Uses the [Color](/gmod/Color)."},{"NAME":"writeZ","TYPE":"boolean","DEFAULT":"false","DESCRIPTION":"Whether or not to consider the Z buffer. If false, the line will be drawn over everything currently drawn, if true, the line will be drawn with depth considered, as if it were a regular object in 3D space.","BUGS":[{"ISSUE":"1086","DESCRIPTION":"Enabling this option will cause the line to ignore the color\'s alpha."}]}]},"DrawQuad":{"SEARCH":"render.DrawQuad","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawQuad","DESCRIPTION":"Draws 2 connected triangles. Expects material to be set by [render.SetMaterial](/gmod/render.SetMaterial).","ARGUMENTS":[{"NAME":"vert1","TYPE":"Vector","DESCRIPTION":"First vertex."},{"NAME":"vert2","TYPE":"Vector","DESCRIPTION":"The second vertex."},{"NAME":"vert3","TYPE":"Vector","DESCRIPTION":"The third vertex."},{"NAME":"vert4","TYPE":"Vector","DESCRIPTION":"The fourth vertex."},{"NAME":"color","TYPE":"table","DEFAULT":"Color( 255, 255, 255 )","DESCRIPTION":"The color of the quad. See [Color](/gmod/Global.Color)"}]},"DrawQuadEasy":{"SEARCH":"render.DrawQuadEasy","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawQuadEasy","DESCRIPTION":"Draws a quad.","ARGUMENTS":[{"NAME":"position","TYPE":"Vector","DESCRIPTION":"Origin of the sprite."},{"NAME":"normal","TYPE":"Vector","DESCRIPTION":"The face direction of the quad."},{"NAME":"width","TYPE":"number","DESCRIPTION":"The width of the quad."},{"NAME":"height","TYPE":"number","DESCRIPTION":"The height of the quad."},{"NAME":"color","TYPE":"table","DESCRIPTION":"The color of the quad. Uses the [Color](/gmod/Color)."},{"NAME":"rotation","TYPE":"number","DEFAULT":"0","DESCRIPTION":"The rotation of the quad counter-clockwise in degrees around the normal axis. In other words, the quad will always face the same way but this will rotate its corners."}]},"DrawScreenQuad":{"SEARCH":"render.DrawScreenQuad","CLIENT":true,"FUNCTION":true,"LINK":"render.DrawScreenQuad","DESCRIPTION":"Draws the current material set by [render.SetMaterial](/gmod/render.SetMaterial) to the whole screen. The color cannot be customized.\\r\\n\\r\\nSee also [render.DrawScreenQuadEx](/gmod/render.DrawScreenQuadEx).","ARGUMENTS":[{"NAME":"applyPoster","TYPE":"boolean","DEFAULT":"false","DESCRIPTION":"If set to true, when rendering a poster the quad will be %c system built into the game."},"scripted_ents":{"MEMBERS":{"Alias":{"SEARCH":"scripted_ents.Alias","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.Alias","SRC":["lua/includes/modules/scripted_ents.lua","253-257"],"DESCRIPTION":"Defines an alias string that can be used to refer to another classname","ARGUMENTS":[{"NAME":"alias","TYPE":"string","DESCRIPTION":"A new string which can be used to refer to another classname"},{"NAME":"classname","TYPE":"string","DESCRIPTION":"The classname the alias should refer to"}]},"Get":{"SEARCH":"scripted_ents.Get","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.Get","SRC":["lua/includes/modules/scripted_ents.lua","156-190"],"DESCRIPTION":"Returns a copy of the ENT table for a class, including functions defined by the base class","ARGUMENTS":[{"NAME":"classname","TYPE":"string","DESCRIPTION":"The classname of the ENT table to return, can be an alias"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"entTable"}]},"GetList":{"SEARCH":"scripted_ents.GetList","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.GetList","SRC":["lua/includes/modules/scripted_ents.lua","225-233"],"DESCRIPTION":"Returns a copy of the list of all ENT tables registered","RETURNS":[{"TYPE":"table","DESCRIPTION":"A table of all entities in the following format: (table keys are the classnames)\\r\\n* [table](/gmod/table) t - The [ENT](/gmod/Structures/ENT) table associated with the entity\\r\\n* [boolean](/gmod/boolean) isBaseType - Always true\\r\\n* [string](/gmod/string) Base - The entity base (note capital B in the key name)\\r\\n* [string](/gmod/string) type - The entity type"}]},"GetMember":{"SEARCH":"scripted_ents.GetMember","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.GetMember","SRC":["lua/includes/modules/scripted_ents.lua","259-275"],"DESCRIPTION":"Retrieves a member of entity\'s table.","ARGUMENTS":[{"NAME":"class","TYPE":"string","DESCRIPTION":"Entity\'s class name"},{"NAME":"name","TYPE":"string","DESCRIPTION":"Name of member to retrieve"}],"RETURNS":[{"TYPE":"any","DESCRIPTION":"The member or nil if failed"}]},"GetSpawnable":{"SEARCH":"scripted_ents.GetSpawnable","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.GetSpawnable","SRC":["lua/includes/modules/scripted_ents.lua","235-251"],"DESCRIPTION":"Returns a list of all ENT tables which contain ENT.Spawnable","RETURNS":[{"TYPE":"table","DESCRIPTION":"A table of [ENT](/gmod/Structures/ENT)s"}]},"GetStored":{"SEARCH":"scripted_ents.GetStored","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.GetStored","SRC":["lua/includes/modules/scripted_ents.lua","217-219"],"DESCRIPTION":"Returns the actual ENT table for a class. Modifying functions/variables in this table will change newly spawned entities","ARGUMENTS":[{"NAME":"classname","TYPE":"string","DESCRIPTION":"The classname of the ENT table to return"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"entTable"}]},"GetType":{"SEARCH":"scripted_ents.GetType","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.GetType","SRC":["lua/includes/modules/scripted_ents.lua","192-211"],"DESCRIPTION":"Returns the \'type\' of a class, this will one of the following: \'anim\', \'ai\', \'brush\', \'point\'.","ARGUMENTS":[{"NAME":"classname","TYPE":"string","DESCRIPTION":"The classname to check"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"type"}]},"IsBasedOn":{"SEARCH":"scripted_ents.IsBasedOn","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.IsBasedOn","SRC":["lua/includes/modules/scripted_ents.lua","44-51"],"DESCRIPTION":"Checks if name is based on base","ARGUMENTS":[{"NAME":"name","TYPE":"string","DESCRIPTION":"Entity\'s class name to be checked"},{"NAME":"base","TYPE":"string","DESCRIPTION":"Base class name to be checked"}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"Returns true if class name is based on base, else false."}]},"OnLoaded":{"SEARCH":"scripted_ents.OnLoaded","CLIENT":true,"SERVER":true,"INTERNAL":true,"FUNCTION":true,"LINK":"scripted_ents.OnLoaded","SRC":["lua/includes/modules/scripted_ents.lua","141-154"],"DESCRIPTION":"Called after all ENTS have been loaded and runs [baseclass.Set](/gmod/baseclass.Set) on each one.\\r\\n\\r\\nYou can retrieve all the currently registered ENTS with [scripted_ents.GetList](/gmod/scripted_ents.GetList).","NOTES":["This is not called after an ENT auto refresh, and thus the inherited baseclass functions retrieved with [baseclass.Get](/gmod/baseclass.Get) will not be updated"]},"Register":{"SEARCH":"scripted_ents.Register","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"scripted_ents.Register","SRC":["lua/includes/modules/scripted_ents.lua","53-136"],"DESCRIPTION":"Registers an ENT table with a classname. Reregistering an existing classname will automatically update the functions of all existing entities of that class.","BUGS":[{"PULL":"1300","DESCRIPTION":"Sub-tables provided in the first argument will not carry over their metatable, and %cN":"Repeated string."}]},"Replace":{"SEARCH":"string.Replace","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.Replace","SRC":["lua/includes/extensions/string.lua","221-225"],"DESCRIPTION":"Replaces all occurrences of the supplied second string.","ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"The string we are seeking to replace an occurrence(s)."},{"NAME":"find","TYPE":"string","DESCRIPTION":"What we are seeking to replace."},{"NAME":"replace","TYPE":"string","DESCRIPTION":"What to replace find with."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"string"}]},"reverse":{"SEARCH":"string.reverse","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.reverse","DESCRIPTION":"Reverses a string.","ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"The string to be reversed."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"reversed string"}]},"Right":{"SEARCH":"string.Right","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.Right","SRC":["lua/includes/extensions/string.lua","219-219"],"DESCRIPTION":"Returns the last n-th characters of the string.","ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"The string to extract from."},{"NAME":"num","TYPE":"number","DESCRIPTION":"Amount of chars relative to the end (starting from 1)."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Returns a string containing a specified number of characters from the right side of a string."}]},"SetChar":{"SEARCH":"string.SetChar","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.SetChar","SRC":["lua/includes/extensions/string.lua","273-280"],"DESCRIPTION":"Sets the character at the specific index of the string.","ARGUMENTS":[{"NAME":"InputString","TYPE":"string","DESCRIPTION":"The input string"},{"NAME":"Index","TYPE":"number","DESCRIPTION":"The character index, 1 is the first from left."},{"NAME":"ReplacementChar","TYPE":"string","DESCRIPTION":"String to replace with."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"ModifiedString"}]},"Split":{"SEARCH":"string.Split","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.Split","DESCRIPTION":"Splits the string into a table of strings, separated by the second argument.\\r\\n\\r\\nThis is an alias of [string.Explode](/gmod/string.Explode).","ARGUMENTS":[{"NAME":"Inputstring","TYPE":"string","DESCRIPTION":"String to split"},{"NAME":"Separator","TYPE":"string","DESCRIPTION":"Character(s) to split with."}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"Split table"}],"SRC":["lua/includes/extensions/string.lua","99-101"]},"StartWith":{"SEARCH":"string.StartWith","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.StartWith","SRC":["lua/includes/extensions/string.lua","299-303"],"DESCRIPTION":"Returns whether or not the first string starts with the second.","ARGUMENTS":[{"NAME":"inputStr","TYPE":"string","DESCRIPTION":"String to check."},{"NAME":"start","TYPE":"string","DESCRIPTION":"String to check with."}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"Whether the first string starts with the second."}]},"StripExtension":{"SEARCH":"string.StripExtension","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.StripExtension","SRC":["lua/includes/extensions/string.lua","124-128"],"DESCRIPTION":"Removes the extension of a path.","ARGUMENTS":[{"NAME":"Inputstring","TYPE":"string","DESCRIPTION":"The path to change."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Modifiedstring"}]},"sub":{"SEARCH":"string.sub","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.sub","DESCRIPTION":"Returns a sub-string, starting from the character at position `StartPos` of the string (inclusive), and optionally ending at the character at position `EndPos` of the string (also inclusive). If EndPos is not given, the rest of the string is returned.","ARGUMENTS":[{"NAME":"string","TYPE":"string","DESCRIPTION":"The string you\'ll take a sub-string out of."},{"NAME":"StartPos","TYPE":"number","DESCRIPTION":"The position of the first character that will be included in the sub-string."},{"NAME":"EndPos","TYPE":"number","DEFAULT":"nil","DESCRIPTION":"The position of the last character to be included in the sub-string. It can be negative to count from the end."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"The substring."}]},"ToColor":{"SEARCH":"string.ToColor","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.ToColor","SRC":["lua/includes/extensions/string.lua","317-330"],"DESCRIPTION":"Fetches a Color type from a string.","ARGUMENTS":[{"NAME":"Inputstring","TYPE":"string","DESCRIPTION":"The string to convert from."}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"The output [Color](/gmod/Color)"}]},"ToMinutesSeconds":{"SEARCH":"string.ToMinutesSeconds","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.ToMinutesSeconds","SRC":["lua/includes/extensions/string.lua","178-178"],"DESCRIPTION":"Returns given time in \\"MM:SS\\" format.","ARGUMENTS":[{"NAME":"time","TYPE":"number","DESCRIPTION":"Time in seconds"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Formatted time"}]},"ToMinutesSecondsMilliseconds":{"SEARCH":"string.ToMinutesSecondsMilliseconds","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.ToMinutesSecondsMilliseconds","SRC":["lua/includes/extensions/string.lua","177-177"],"DESCRIPTION":"Returns given time in \\"MM:SS:MS\\" format.","ARGUMENTS":[{"NAME":"time","TYPE":"number","DESCRIPTION":"Time in seconds"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Formatted time"}]},"ToTable":{"SEARCH":"string.ToTable","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.ToTable","SRC":["lua/includes/extensions/string.lua","8-16"],"DESCRIPTION":"Splits the string into characters and creates a sequential table of characters.","WARNINGS":["As a result of the encoding, non-ASCII characters will be split into more than one character in the output table. Each character value in the output table will always be 1 byte."],"ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"The string you\'ll turn into a table."}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"A sequential table where each value is a character from the given string"}]},"Trim":{"SEARCH":"string.Trim","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.Trim","SRC":["lua/includes/extensions/string.lua","232-235"],"DESCRIPTION":"Removes leading and trailing matches of a string.","ARGUMENTS":[{"NAME":"Inputstring","TYPE":"string","DESCRIPTION":"The string to trim."},{"NAME":"Char","TYPE":"string","DEFAULT":"%s","DESCRIPTION":"String to match - can be multiple characters. Matches spaces by default."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Modified string"}]},"TrimLeft":{"SEARCH":"string.TrimLeft","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.TrimLeft","SRC":["lua/includes/extensions/string.lua","252-255"],"DESCRIPTION":"Removes leading spaces/characters from a string.","ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"String to trim"},{"NAME":"char","TYPE":"string","DESCRIPTION":"Custom character to remove"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Trimmed string"}]},"TrimRight":{"SEARCH":"string.TrimRight","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.TrimRight","SRC":["lua/includes/extensions/string.lua","242-245"],"DESCRIPTION":"Removes trailing spaces/passed character from a string.","ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"String to remove from"},{"NAME":"char","TYPE":"string","DESCRIPTION":"Custom character to remove, default is a space"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Trimmed string"}]},"upper":{"SEARCH":"string.upper","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"string.upper","DESCRIPTION":"Changes any lower-case letters in a string to upper-case letters.","NOTES":["This function doesn\'t work on special non-English UTF-8 characters."],"ARGUMENTS":[{"NAME":"str","TYPE":"string","DESCRIPTION":"The string to convert."}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"A string representing the value of a string converted to upper-case."}]}},"SEARCH":"string","DESCRIPTION":"The string *type* is a sequence of characters.\\r\\n\\r\\nThe string *library* is a standard Lua library which provides functions for the manipulation of strings.[[1]](https://www.lua.org/pil/20.html)\\r\\n\\r\\nIn Garry\'s Mod there are several extra useful functions and features added to this library.\\r\\nMost notably all strings will access this library through the string metatable index function.[[2]](https://github.com/Facepunch/garrysmod/blob/master/garrysmod/lua/includes/extensions/string.lua#L288-L299)\\r\\n\\r\\nThis means all strings are treated like table objects and the string library as its [Meta Table](/gmod/Meta_Tables)\\r\\n\\r\\n```lua\\r\\nlocal x = \\"Kittens\\"\\r\\nfunction string.Foobar(self) return self:Right(4) end\\r\\n\\r\\nstring.Right(x,4) == x:Right(4) == x:Foobar() == (\\"Kittens\\"):Right(4) == x[-4]..x[-3]..x[-2]..x[-1]\\r\\n```\\r\\n\\r\\n\\r\\nThe string *metatable* however is something else, and to access that you must use `getmetatable(\\"\\")`.\\r\\n\\r\\nThe difference here is related to [Metamethods](/gmod/Metamethods), such as using (+) instead of (..) to concatenate strings.\\r\\n\\r\\n\\r\\n```lua\\r\\nlocal stringmeta = getmetatable(\\"\\")\\r\\nfunction stringmeta.__add(str,x) return str..x end -- This will work\\r\\nfunction string.__add(str,x) return str..x end -- But this will not.\\r\\n\\r\\nprint(\\"Kittens\\" + \\" And \\" + \\"Puppies\\")\\r\\n```\\r\\n\\r\\nSee [Meta Tables](/gmod/Meta%20Tables) and [Metamethods](/gmod/Metamethods) for more information.\\r\\n\\r\\n\\r\\nThis category lists functions available in the string *library*.","WARNINGS":["Making changes to the string *metatable* is not a good idea unless you know what you are doing. Use the string *library* instead.","Using `+` operator for concatenation breaks lua metamethod to sum string as numbers (Example: `\\"10\\" + \\"1\\"` return `11` (number)) and this is 400 times SLOWER!"]},"surface":{"MEMBERS":{"CreateFont":{"SEARCH":"surface.CreateFont","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"surface.CreateFont","DESCRIPTION":"Creates a new font.\\r\\n\\r\\nTo prevent the font from displaying incorrectly when using the `outline` setting, set `antialias` to false. This will ensure the text properly fills out the entire outline.\\r\\n\\r\\nBe sure to check the [List of Default Fonts](/gmod/Default_Fonts) first! Those fonts can be used without using this function.\\r\\n\\r\\nSee Also: [Finding the Font Name](/gmod/Finding%20the%20Font%20Name).","WARNINGS":["Due to the static nature of fonts, do **NOT** create the font more than once. You should only be creating them once, it is recommended to create them at the top of your script. Do not use this function within [GM:HUDPaint](/gmod/GM:HUDPaint) or any other hook!\\r\\n\\r\\nDefine fonts that you will actually use, as fonts are very taxing on performance and will cause crashes! Do not create fonts for every size."],"ARGUMENTS":[{"NAME":"fontName","TYPE":"string","DESCRIPTION":"The new font name."},{"NAME":"fontData","TYPE":"table","DESCRIPTION":"The font properties. See the [FontData](/gmod/Structures/FontData)."}]},"DisableClipping":{"SEARCH":"surface.DisableClipping","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"surface.DisableClipping","DESCRIPTION":"Enables or disables the clipping used by the VGUI that limits the drawing operations to a panels bounds.\\r\\n\\r%che timer to adjust."},{"NAME":"delay","TYPE":"number","DESCRIPTION":"The delay interval in seconds. **Must be specified.**"},{"NAME":"repetitions","TYPE":"number","DESCRIPTION":"Repetitions. Use `0` for infinite or `nil` to keep previous value."},{"NAME":"func","TYPE":"function","DESCRIPTION":"The new function. Use `nil` to keep previous value."}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"`true` if succeeded."}]},"Check":{"SEARCH":"timer.Check","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Check","DESCRIPTION":"This function does nothing."},"Create":{"SEARCH":"timer.Create","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Create","DESCRIPTION":"Creates a new timer that will repeat its function given amount of times.\\r\\nThis function also requires the timer to be named, which allows you to control it after it was created via the [timer](/gmod/timer).\\r\\n\\r\\nFor a simple one-time timer with no identifiers, see [timer.Simple](/gmod/timer.Simple).","WARNINGS":["Timers use [CurTime](/gmod/Global.CurTime) internally. Due to this, they won\'t advance while the client is timing out from the server or on an empty dedicated server due to hibernation. (unless sv_hibernate_think is set to 1)"],"ARGUMENTS":[{"NAME":"identifier","TYPE":"string","DESCRIPTION":"Identifier of the timer to create. Must be unique. If a timer already exists with the same identifier, that timer will be updated to the new settings and reset."},{"NAME":"delay","TYPE":"number","DESCRIPTION":"The delay interval in seconds. If the delay is too small, the timer will fire on the next frame/tick."},{"NAME":"repetitions","TYPE":"number","DESCRIPTION":"The number of times to repeat the timer. Enter 0 for infinite repetitions."},{"NAME":"func","TYPE":"function","DESCRIPTION":"Function called when timer has finished the countdown."}]},"Destroy":{"SEARCH":"timer.Destroy","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Destroy","DESCRIPTION":"Stops and destroys the given timer. Alias of [timer.Remove](/gmod/timer.Remove).","DEPRECATED":["You should be using timer.Remove instead."],"ARGUMENTS":[{"NAME":"identifier","TYPE":"string","DESCRIPTION":"Identifier of the timer to destroy."}]},"Exists":{"SEARCH":"timer.Exists","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Exists","DESCRIPTION":"Returns whenever the given timer exists or not.","ARGUMENTS":[{"NAME":"identifier","TYPE":"string","DESCRIPTION":"Identifier of the timer."}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"Returns true if the timer exists, false if it doesn\'t"}]},"Pause":{"SEARCH":"timer.Pause","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Pause","DESCRIPTION":"Pauses the given timer.","ARGUMENTS":[{"NAME":"identifier","TYPE":"any","DESCRIPTION":"Identifier of the timer."}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"false if the timer didn\'t exist or was already paused, true otherwise."}]},"Remove":{"SEARCH":"timer.Remove","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Remove","DESCRIPTION":"Stops and removes a timer created by [timer.Create](/gmod/timer.Create).","WARNINGS":["The timers are removed in the next frame! Keep this in mind when storing identifiers in variables."],"ARGUMENTS":[{"NAME":"identifier","TYPE":"string","DESCRIPTION":"Identifier of the timer to remove."}]},"RepsLeft":{"SEARCH":"timer.RepsLeft","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.RepsLeft","DESCRIPTION":"Returns amount of repetitions/executions left before the timer destroys itself.","ARGUMENTS":[{"NAME":"identifier","TYPE":"any","DESCRIPTION":"Identifier of the timer."}],"RETURNS":[{"TYPE":"number","DESCRIPTION":"The amount of executions left."}]},"Simple":{"SEARCH":"timer.Simple","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Simple","DESCRIPTION":"Creates a simple timer that runs the given function after a specified delay.\\r\\n\\r\\nFor a more advanced version that you can control after creation, see [timer.Create](/gmod/timer.Create).","WARNINGS":["Timers use [CurTime](/gmod/Global.CurTime) internally. Due to this, they won\'t advance while the client is timing out from the server or on an empty dedicated server due to hibernation. (unless sv_hibernate_think is set to 1)"],"ARGUMENTS":[{"NAME":"delay","TYPE":"number","DESCRIPTION":"How long until the function should be ran (in seconds). Use 0 to have the function run in the next [GM:Think](/gmod/GM:Think)."},{"NAME":"func","TYPE":"function","DESCRIPTION":"The function to run after the specified delay."}]},"Start":{"SEARCH":"timer.Start","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"timer.Start","DESCRIPTION":"Restarts the given timer.","NOTES":["Timers use [CurTime](/gmod/Global.CurTime) for timing."],"WARNINGS":["Timers won\'t advance while the client is timing out from the server."],"ARGUMENTS":[{"NAME":"identifier","TYPE":"any","DESCRIPTION":"Identi%cE":"Entity","DESCRIPTION":"The first entity to trace from"},{"NAME":"ent2","TYPE":"Entity","DESCRIPTION":"The second entity to trace to"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"Trace result. See [TraceResult](/gmod/Structures/TraceResult)"}]},"TraceHull":{"SEARCH":"util.TraceHull","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"util.TraceHull","DESCRIPTION":"Performs an AABB hull (axis-aligned bounding box, aka not rotated) trace with the given trace data.","NOTES":["Clientside entities will not be hit by traces.","This function may not always give desired results clientside due to certain physics mechanisms not existing on the client. Use it serverside for accurate results."],"ARGUMENTS":[{"NAME":"TraceData","TYPE":"table","DESCRIPTION":"The trace data to use. See [HullTrace](/gmod/Structures/HullTrace)"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"Trace result. See [TraceResult](/gmod/Structures/TraceResult)"}]},"TraceLine":{"SEARCH":"util.TraceLine","CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"util.TraceLine","DESCRIPTION":"Performs a trace with the given trace data.","NOTES":["Clientside entities will not be hit by traces."],"ARGUMENTS":[{"NAME":"TraceData","TYPE":"table","DESCRIPTION":"The trace data to use. See [Trace](/gmod/Structures/Trace)"}],"RETURNS":[{"TYPE":"table","DESCRIPTION":"Trace result. See [TraceResult](/gmod/Structures/TraceResult).\\n\\nCan return nil if [game.GetWorld](/gmod/game.GetWorld) or its [physics object](/gmod/Entity:GetPhysicsObject) is invalid. This will be the case for any traces done before [GM:InitPostEntity](/gmod/GM:InitPostEntity) is called."}]},"TypeToString":{"SEARCH":"util.TypeToString","MENU":true,"CLIENT":true,"SERVER":true,"FUNCTION":true,"LINK":"util.TypeToString","SRC":["lua/includes/extensions/util.lua","129-143"],"DESCRIPTION":"Converts a type to a (nice, but still parsable) string","ARGUMENTS":[{"NAME":"input","TYPE":"any","DESCRIPTION":"What to convert"}],"RETURNS":[{"TYPE":"string","DESCRIPTION":"Converted string"}]}},"SEARCH":"util","DESCRIPTION":"This is the list of utility functions."},"vgui":{"MEMBERS":{"Create":{"SEARCH":"vgui.Create","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"vgui.Create","SRC":["lua/includes/extensions/client/panel/scriptedpanels.lua","19-48"],"DESCRIPTION":"Creates a panel by the specified classname.","NOTES":["Custom VGUI elements are not loaded instantly. Use [GM:OnGamemodeLoaded](/gmod/GM:OnGamemodeLoaded) to create them on startup."],"ARGUMENTS":[{"NAME":"classname","TYPE":"string","DESCRIPTION":"Classname of the panel to create. Valid classnames are listed at: [VGUI Element List](/gmod/VGUI%20Element%20List)."},{"NAME":"parent","TYPE":"Panel","DEFAULT":"nil","DESCRIPTION":"Parent of the created panel."},{"NAME":"name","TYPE":"string","DEFAULT":"nil","DESCRIPTION":"Name of the created panel."}],"RETURNS":[{"TYPE":"Panel","DESCRIPTION":"panel"}]},"CreateFromTable":{"SEARCH":"vgui.CreateFromTable","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"vgui.CreateFromTable","SRC":["lua/includes/extensions/client/panel/scriptedpanels.lua","50-69"],"DESCRIPTION":"Creates a panel from table.","ARGUMENTS":[{"NAME":"metatable","TYPE":"table","DESCRIPTION":"Your PANEL table"},{"NAME":"parent","TYPE":"Panel","DEFAULT":"nil","DESCRIPTION":"Which panel to parent the newly created panel to"},{"NAME":"name","TYPE":"string","DEFAULT":"nil","DESCRIPTION":"Name of your panel"}],"RETURNS":[{"TYPE":"Panel","DESCRIPTION":"Created panel"}]},"CreateX":{"SEARCH":"vgui.CreateX","MENU":true,"CLIENT":true,"INTERNAL":true,"FUNCTION":true,"LINK":"vgui.CreateX","SRC":["lua/includes/extensions/client/panel/scriptedpanels.lua","13-13"],"DESCRIPTION":"Creates a engine panel.","ARGUMENTS":[{"NAME":"class","TYPE":"string","DESCRIPTION":"Class of the panel to create"},{"NAME":"parent","TYPE":"Panel","DEFAULT":"nil","DESCRIPTION":"If specified, parents created panel to given one"},{"NAME":"name","TYPE":"string","DEFAULT":"nil","DESCRIPTION":"Name of the created panel"}],"RETURNS":[{"TYPE":"Panel","DESCRIPTION":"Created panel"}]},"CursorVisible":{"SEARCH":"vgui.CursorVisible","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"vgui.CursorVisible","DESCRIPTION":"Returns whenever the cursor is currently active and visible.","RETURNS":[{"TYPE":"boolean","DESCRIPTION":"isCursorVisible"}]},"FocusedHasParent":{"SEARCH":"vgui.FocusedHasParent","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"vgui.FocusedHasParent","DESCRIPTION":"Returns whether the currently focused panel is a child of the given one.","ARGUMENTS":[{"NAME":"parent","TYPE":"Panel","DESCRIPTION":"The parent panel to check the currently focused one against. This doesn\'t need to be a direct parent (focused panel can be a child of a child and so on)."}],"RETURNS":[{"TYPE":"boolean","DESCRIPTION":"Whether or not the focused panel is a child of the passed one."}]},"GetControlTable":{"SEARCH":"vgui.GetControlTable","MENU":true,"CLIENT":true,"FUNCTION":true,"LINK":"vgui.GetControlTable","SRC":["l%con","DESCRIPTION":"The function used to get variables from the \\".vmt\\". Called once per each \\".vmt\\". Arguments are:\\r\\n* [table](/gmod/table) self\\r\\n* [string](/gmod/string) materialName\\r\\n* [table](/gmod/table) values"},"bind":{"SEARCH":"MatProxyData.bind","NAME":"bind","TYPE":"function","DESCRIPTION":"The function used to apply the proxy. This is called every frame while any materials with this proxy are used in world. Arguments are:\\r\\n* [table](/gmod/table) self\\r\\n* [string](/gmod/string) materialName\\r\\n* [Entity](/gmod/Entity) ent"}},"SEARCH":"MatProxyData","CLIENT":true,"LINK":"Structures/MatProxyData","DESCRIPTION":"Table structure used by [matproxy.Add](/gmod/matproxy.Add)."},"MeshVertex":{"MEMBERS":{"color":{"SEARCH":"MeshVertex.color","NAME":"color","TYPE":"table","DESCRIPTION":"The vertex color. Uses the [Color](/gmod/Color)."},"normal":{"SEARCH":"MeshVertex.normal","NAME":"normal","TYPE":"Vector","DESCRIPTION":"The triangles normal required to calculate lighting(optional)."},"tangent":{"SEARCH":"MeshVertex.tangent","NAME":"tangent","TYPE":"Vector","DESCRIPTION":"The triangles tangent. Not used by the VertexLitGeneric shader."},"binormal":{"SEARCH":"MeshVertex.binormal","NAME":"binormal","TYPE":"Vector","DESCRIPTION":"The triangles binormal. Not used by the VertexLitGeneric shader."},"pos":{"SEARCH":"MeshVertex.pos","NAME":"pos","TYPE":"Vector","DESCRIPTION":"The vertex position."},"u":{"SEARCH":"MeshVertex.u","NAME":"u","TYPE":"number","DESCRIPTION":"The u texture scale."},"v":{"SEARCH":"MeshVertex.v","NAME":"v","TYPE":"number","DESCRIPTION":"The v texture scale."},"userdata":{"SEARCH":"MeshVertex.userdata","NAME":"userdata","TYPE":"table","DESCRIPTION":"A table of four numbers. This is used by most shaders in Source to hold tangent information of the vertex ( tangentX, tangentY, tangentZ, tangentHandedness )."}},"SEARCH":"MeshVertex","CLIENT":true,"LINK":"Structures/MeshVertex","DESCRIPTION":"Table used by various functions, such as [IMesh:BuildFromTriangles](/gmod/IMesh:BuildFromTriangles)."},"OperatingParams":{"MEMBERS":{"RPM":{"SEARCH":"OperatingParams.RPM","NAME":"RPM","TYPE":"number","DESCRIPTION":"The current RPM of the vehicle"},"gear":{"SEARCH":"OperatingParams.gear","NAME":"gear","TYPE":"number","DESCRIPTION":"The current gear of the vehicle, starting from 0"},"isTorqueBoosting":{"SEARCH":"OperatingParams.isTorqueBoosting","NAME":"isTorqueBoosting","TYPE":"boolean","DESCRIPTION":"Is the vehicle boosting?"},"speed":{"SEARCH":"OperatingParams.speed","NAME":"speed","TYPE":"number","DESCRIPTION":"The current speed, in inches per second"},"steeringAngle":{"SEARCH":"OperatingParams.steeringAngle","NAME":"steeringAngle","TYPE":"number","DESCRIPTION":"Steering angle"},"wheelsInContact":{"SEARCH":"OperatingParams.wheelsInContact","NAME":"wheelsInContact","TYPE":"number","DESCRIPTION":"Wheels on ground"}},"SEARCH":"OperatingParams","SERVER":true,"LINK":"Structures/OperatingParams","DESCRIPTION":"The structure used by [Vehicle:GetOperatingParams](/gmod/Vehicle:GetOperatingParams)."},"PathSegment":{"MEMBERS":{"area":{"SEARCH":"PathSegment.area","NAME":"area","TYPE":"CNavArea","DESCRIPTION":"The navmesh area this segment occupies."},"curvature":{"SEARCH":"PathSegment.curvature","NAME":"curvature","TYPE":"number","DESCRIPTION":"How much of a curve should the bot execute when navigating this segment. 0 = none, 1 = 180°"},"distanceFromStart":{"SEARCH":"PathSegment.distanceFromStart","NAME":"distanceFromStart","TYPE":"number","DESCRIPTION":"Distance of this segment from the start of the path."},"forward":{"SEARCH":"PathSegment.forward","NAME":"forward","TYPE":"Vector","DESCRIPTION":"The direction of travel to reach the end of this segment from the start, represented as a normalised vector."},"how":{"SEARCH":"PathSegment.how","NAME":"how","TYPE":"number","DESCRIPTION":"The direction of travel to reach the end of this segment from the start, represented as a cardinal direction integer 0 to 3, or 9 for vertical movement."},"ladder":{"SEARCH":"PathSegment.ladder","NAME":"ladder","TYPE":"CNavLadder","DESCRIPTION":"The navmesh ladder this segment occupies, if any."},"length":{"SEARCH":"PathSegment.length","NAME":"length","TYPE":"number","DESCRIPTION":"Length of this segment."},"m_portalCenter":{"SEARCH":"PathSegment.m_portalCenter","NAME":"m_portalCenter","TYPE":"Vector"},"m_portalHalfWidth":{"SEARCH":"PathSegment.m_portalHalfWidth","NAME":"m_portalHalfWidth","TYPE":"number"},"pos":{"SEARCH":"PathSegment.pos","NAME":"pos","TYPE":"Vector","DESCRIPTION":"The position of the end of this segment."},"type":{"SEARCH":"PathSegment.type","NAME":"type","TYPE":"number","DESCRIPTION":"The movement type of this segment, indicating how bots are expected to move along this segment.\\r\\n* 0 is ground movement\\r\\n* 1 is falling down\\r\\n* 2 is climbing up or jumping\\r\\n* 3 is jumping over a gap\\r\\n* 4 is climbing a ladder up (unused)\\r\\n* 5 is climbing a ladder down (unused)"}},"SEARCH":"Pat%cRCH":"VehicleParamsAxle.wheels_radius","NAME":"wheels_radius","TYPE":"number","DESCRIPTION":"Radius of the wheels."},"wheels_rotdamping":{"SEARCH":"VehicleParamsAxle.wheels_rotdamping","NAME":"wheels_rotdamping","TYPE":"number"},"wheels_skidMaterialIndex":{"SEARCH":"VehicleParamsAxle.wheels_skidMaterialIndex","NAME":"wheels_skidMaterialIndex","TYPE":"number","DESCRIPTION":"Material index of skid material of the wheels. Upon skidding ( pressing Space and sliding the vehicle ), the wheels will be set to this material."},"wheels_springAdditionalLength":{"SEARCH":"VehicleParamsAxle.wheels_springAdditionalLength","NAME":"wheels_springAdditionalLength","TYPE":"number"}},"SEARCH":"VehicleParamsAxle","SERVER":true,"LINK":"Structures/VehicleParamsAxle","DESCRIPTION":"The structure used by [VehicleParams](/gmod/Structures/VehicleParams)."},"VehicleParamsBody":{"MEMBERS":{"addGravity":{"SEARCH":"VehicleParamsBody.addGravity","NAME":"addGravity","TYPE":"number","DESCRIPTION":"Additional gravity to be applied to the vehicle"},"counterTorqueFactor":{"SEARCH":"VehicleParamsBody.counterTorqueFactor","NAME":"counterTorqueFactor","TYPE":"number"},"keepUprightTorque":{"SEARCH":"VehicleParamsBody.keepUprightTorque","NAME":"keepUprightTorque","TYPE":"number"},"massCenterOverride":{"SEARCH":"VehicleParamsBody.massCenterOverride","NAME":"massCenterOverride","TYPE":"Vector","DESCRIPTION":"Mass center override"},"massOverride":{"SEARCH":"VehicleParamsBody.massOverride","NAME":"massOverride","TYPE":"number","DESCRIPTION":"Mass override"},"maxAngularVelocity":{"SEARCH":"VehicleParamsBody.maxAngularVelocity","NAME":"maxAngularVelocity","TYPE":"number","DESCRIPTION":"Maximum angular velocity"},"tiltForce":{"SEARCH":"VehicleParamsBody.tiltForce","NAME":"tiltForce","TYPE":"number"},"tiltForceHeight":{"SEARCH":"VehicleParamsBody.tiltForceHeight","NAME":"tiltForceHeight","TYPE":"number"}},"SEARCH":"VehicleParamsBody","SERVER":true,"LINK":"Structures/VehicleParamsBody","DESCRIPTION":"The structure used by [VehicleParams](/gmod/Structures/VehicleParams)."},"VehicleParamsEngine":{"MEMBERS":{"autobrakeSpeedFactor":{"SEARCH":"VehicleParamsEngine.autobrakeSpeedFactor","NAME":"autobrakeSpeedFactor","TYPE":"number"},"autobrakeSpeedGain":{"SEARCH":"VehicleParamsEngine.autobrakeSpeedGain","NAME":"autobrakeSpeedGain","TYPE":"number"},"axleRatio":{"SEARCH":"VehicleParamsEngine.axleRatio","NAME":"axleRatio","TYPE":"number","DESCRIPTION":"This acts as the final ratio of the gearbox.\\r\\n\\r\\nIt\'s like a master coefficient of the gearbox."},"boostDelay":{"SEARCH":"VehicleParamsEngine.boostDelay","NAME":"boostDelay","TYPE":"number","DESCRIPTION":"Amount of seconds between being able to use the boost ( by pressing Shift key by default )"},"boostDuration":{"SEARCH":"VehicleParamsEngine.boostDuration","NAME":"boostDuration","TYPE":"number","DESCRIPTION":"Duration of the boost in seconds"},"boostForce":{"SEARCH":"VehicleParamsEngine.boostForce","NAME":"boostForce","TYPE":"number"},"boostMaxSpeed":{"SEARCH":"VehicleParamsEngine.boostMaxSpeed","NAME":"boostMaxSpeed","TYPE":"number","DESCRIPTION":"Maximum speed while boosting","WARNINGS":["The [Vehicle:SetVehicleParams](/gmod/Vehicle:SetVehicleParams) function takes this in **miles per hour**, but [Vehicle:GetVehicleParams](/gmod/Vehicle:GetVehicleParams) returns this in **hammer units per second**!\\r\\n\\r\\n1 MPH is roughly 17.6 HU/s."]},"gearCount":{"SEARCH":"VehicleParamsEngine.gearCount","NAME":"gearCount","TYPE":"number","DESCRIPTION":"Amount of gears this vehicle has"},"gearRatio":{"SEARCH":"VehicleParamsEngine.gearRatio","NAME":"gearRatio","TYPE":"table","DESCRIPTION":"A table of numbers, of gear rations.\\r\\n\\r\\nTable length is equal to \\"gearCount\\" member of this table."},"horsepower":{"SEARCH":"VehicleParamsEngine.horsepower","NAME":"horsepower","TYPE":"number","DESCRIPTION":"The HP amount of the vehicle\\r\\n\\r\\nThis value is used to calculate the effectively applied torque, along with ratios and `maxRPM`."},"isAutoTransmission":{"SEARCH":"VehicleParamsEngine.isAutoTransmission","NAME":"isAutoTransmission","TYPE":"boolean","DESCRIPTION":"If `true`, the gearbox shifts gears, if `false` the gearbox stays stuck to the 1st gear (gear number 0)."},"maxRPM":{"SEARCH":"VehicleParamsEngine.maxRPM","NAME":"maxRPM","TYPE":"number","DESCRIPTION":"Maximum RPM of the vehicle.\\r\\n\\r\\nDespite this being a maximum value, the vehicle can exceed it.","WARNINGS":["Attempts to exceed the max RPM will force the active gear ratio to be that of the 1st gear, which will provide even more torque. This is the opposite of a rev limiter. This value is only used for the calculation of the effectively applied torque."]},"maxRevSpeed":{"SEARCH":"VehicleParamsEngine.maxRevSpeed","NAME":"maxRevSpeed","TYPE":"number","DESCRIPTION":"Maximum reverse speed of the vehicle","WARNINGS":["The [Vehicle:SetVehicleParams](/gmod/Vehicle:SetVehicleParams) function takes this in **miles per hour**, but [Vehicle:GetVehicleParams](/%c %c[Error: write EOF%c at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:94:16)%cEmitted 'error' event on Socket instance at:%c at emitErrorNT (internal/streams/destroy.js:106:8)%c at emitErrorCloseNT (internal/streams/destroy.js:74:3)%c at processTicksAndRejections (internal/process/task_queues.js:80:21)] {%c errno: -4095,%c code: 'EOF',%c syscall: 'write'%c}