· 11 years ago · Jul 26, 2015, 05:22 PM
1// This is an alpha build;
2// Send glitch reports to shadowsouthskull <@t> gmail.com
3({
4/** Settings **/
5settings : function() {
6 /** Set the rules here, follow the format below **/
7 delete rule;
8 rule = [];
9 rule[1] = 'No Spamming.';
10 rule[2] = 'No Flaming or Trolling.';
11 rule[3] = 'No Advertising, this includes other servers.';
12 rule[4] = 'No Impersonating.';
13 rule[5] = 'Be Appropriate.';
14 rule[6] = 'No pornography.';
15 /** Idling, Auto kick, when true, kicks inactive users, if false, sets idle users to away status instead. Idle minutes is the amount of minutes needed to be doing nothing to be counted. PMs are not included as "doing something" as the system can't keep track of them. **/
16 server.idleminutes = 30; // 0 for off
17 server.idlekickminutes = 0; // 0 for off
18 /** Turn on if you used an old version **/
19 server.importdata = false;
20 /** Swearfilter (true or false) **/
21 server.swearfilter = false;
22 /** Banned URL's or phrases, seperate urls with ||, anyone who types one of these urls will be banned. */
23 server.bannedurls = ['eyeofdragonserver.wordpress.com','PokeGear.co.cc/irc.php','pokedestiny.com','pokemondragon.forumeiros.com','pokemonforum.hotgoo.net/','mlueroifan100.makingforum.com','pokemon-darkness.forumotion.com'];
24 /** Name of nohazards tiers (depreciated) **/
25 server.nohazards = ['Special','Special(double)'];
26 /** Names of Challenge Cup tiers **/
27 server.CC = ['Challenge Cup','Challenge Cup(double)'];
28 /** Little Cup (depreciated, but still there) **/
29 server.LC = ['LittleCup'];
30 /** If Challenge cup battles are allowed outside of the challenge cup tier **/
31 server.allowCC = true;
32 /** VGC(now useless) **/
33 server.vgc = 'VideoGameChampionship';
34 /** Helpers **/
35 server.help = false;
36 /** Sleep Clause **/
37 server.forcesleep = true;
38 /** Noobspeak **/
39 server.antinoobspeak = true;
40 server.capscheck = true;
41 /** Entry Messages **/
42 server.entrymsgsenabled = false;
43 server.entrymsgs = {}; // Use \' for ' in a message or name. ex:
44 server.entrymsgs['name'] = 'message';
45 server.entrymsgs['name2'] = 'Oh my! It\'s name2!!';
46 /** Owner email **/
47 server.ownersemail = 'shadowsouthskull@gmail.com'; // change this if you turn the below on,
48 server.showownersemail = true;
49 /** User icons **/
50 server.specialicon = '\u2666';
51 server.iconusers = ['admin','coadmin'];
52 /** Tiers set **/ // All crap that needs to be redone.
53 server.doublestiers = {'Challenge Cup(double)':true,'Special(double)':true,'Little Cup(double)':true,'Ubers(double)':true,'Elite(double)':true,'SubUber(double)':true,'OverUsed(double)':true,'Standard(double)':true,'UnderUsed(double)':true,'NeverUsed(double)':true};
54 server.singlestiers = {'Challenge Cup':true,'Special':true,'Little Cup':true,'Ubers':true,'Elite':true,'SubUber':true,'OverUsed':true,'Standard':true,'UnderUsed':true,'NeverUsed':true};
55 /** Show Rules on entry **/
56 server.showrules = false;
57 /** Seen **/
58 server.allowseen = true; // Allows the use of /seen to check when a user was last online.
59 /** Welcome Bot **/
60 server.thebot = false; // Greet users.
61 /** Bans **/
62 server.limit8 = true; // Limit mod bans to 8 hours. Set to true if the next is enabled.
63 server.banlock = true; // Mods can't not unban permanently banned users. (by script)
64 /** Tournament Stuff **/
65 server.fancytour = true;
66 server.autostart = false;
67 server.autostarttiers = sys.getTierList(); //change to, ex ['OverUsed','Ubers'], elements enclosed in ' ' and seperated by a comma.
68 server.autostartnums = [4,8,16]; //same but w/o ' '
69 /** Symbol Autofix, changes things into unicode; ex. ">=" changes into the greater-than-or-equal-to unicode symbol, only works for some symbols **/
70 server.autofix = true;
71 /** Rank ICO's type.
72 0 = Original
73 1 = Multi Dash
74 2 = Tilde
75 3 = Cards *
76 4 = IRC:// *
77 5 = Sharp *
78 6 = Defined *
79 7 = Server Deafault
80 * Indicates that owner has it's own symbol, as opposed to the admin symbol. **/
81 server.ranktype = 7;
82 /** Enable X-Bans, recommended that you select true to protect your server from known mass spammers. **/
83 server.xbans = true; }
84,
85/** Server Events **/
86beforeNewMessage : function (message) {
87 if (typeof server == 'undefined') {
88 server = []; } // ensure server is defined before variables are declared.
89 if (typeof players == 'undefined') {
90 players = []; } // same
91 if (typeof channels == 'undefined') {
92 channels = []; } // same
93 if (typeof server.safe == 'undefined') {
94 server.safe = false; }
95 if (server.safe == true) {
96 server.safe = false;
97 return; } // if this is a display message, don't bother preforming checks on it.
98 if (message.indexOf('Script Error line ') == 0) { // Something is wrong when this happens
99 sys.sendAll('~~Server~~: Error; Script Error! Log saved. (' + message + ')');
100 sys.appendToFile('screrros.txt', '\r\n'+message);
101 if (debuging == false) {
102 debuging = true;
103 script.beforeNewMessage("Script Check: OK"); }
104 sys.stopEvent();
105 return; }
106 if (message.indexOf('Script Warning in') == 0) { // Ignore the warnings
107 sys.stopEvent();
108 return; }
109 if (message.indexOf('[#Watch]') == 0) { // Ignore the watch
110 sys.stopEvent();
111 return; }
112 if (message == 'The registry acknowledged the server.') { // Send the message to the players
113 sys.sendAll('~~Server~~: Connection to registry established!'); }
114 if (message == 'Disconnected from registry.') { // Send the message to the players
115 sys.sendAll('~~Server~~: Disconnected from the registry!'); }
116 if (message == "Script Check: OK") { // Initialise new variables if the scripts are changed.
117 if (typeof debuging == 'undefined') {
118 debuging = false; }
119 if (!debuging) {
120 sys.sendAll("~~Server~~: Scripts were updated."); }
121 else {
122 sys.sendAll("~~Server~~: Auto debug activated."); }
123 delete scr; // Clear scr to rid it of old functions
124 scr = this;
125 scr.initRegValCache(); // because reading the registry is slow
126 scr.settings(); // init the settings
127 scr.initVal('pollmode',0);
128 scr.initVal('pollstr','');
129 scr.initVal('pollvotes',[]);
130 scr.initVal('polloptions',[]);
131 scr.initVal('cardmode',0);
132 scr.initVal('locked',false);
133 scr.initVal('recent',[]);
134 scr.initVal('playerhands',[]);
135 scr.initVal('playerids',[]);
136 scr.initVal('tourmembersinput',[]);
137 scr.initVal('tourarray1',[]);
138 scr.initVal('tourarray1',[]);
139 scr.initVal('update',0);
140 scr.initVal('lastupdate',0);
141 scr.initVal('xbanlist','');
142 scr.initVal('tourmode',0);
143 scr.initVal('tempauth',[]);
144 scr.initVal('tourtier','');
145 scr.initVal('tournumber',0);
146 scr.initVal('currentround',0);
147 scr.initVal('lastcheck',sys.time());
148 scr.initVal('permanentchannels',['watch']);
149 if (typeof server.protect == 'undefined') { // array of protected users, ex, server.protect['98.234.234.52'] = true;
150 server.protect = [];
151 if (scr.readRegVal('protects') != '') {
152 server.protect = scr.stringToArray(scr.readRegVal('protects')); }
153 }
154 if (typeof server.tourwinners == 'undefined') { // array of protected users, ex, server.protect['98.234.234.52'] = true;
155 server.tourwinners = {};
156 if (scr.readRegVal('tourwins') != '') {
157 server.tourwinners = scr.stringToArray(scr.readRegVal('tourwins')); }
158 }
159 if (typeof server.notes == 'undefined' && 0) { // hash for notes
160 server.notes = [];
161 if (scr.readRegVal('notes') != '') {
162 server.notes = scr.stringToArray(scr.readRegVal('notes')); }
163 }
164 if (typeof server.muted == 'undefined') { // array of muted users, ex, server.muted['98.234.234.52'] = true; or server.muted['98.234.234.52'] = 39782334972 for a timed mute
165 server.muted = [];
166 if (scr.readRegVal('mutes') != '') {
167 server.muted = scr.stringToArray(scr.readRegVal('mutes')); }
168 }
169 if (typeof server.tourmasters == 'undefined') { // array of tourmasters users, ex, server.tourmasters['98.234.234.52'] = true.
170 server.tourmasters = [];
171 if (scr.readRegVal('tourmasters') != '') {
172 server.tourmasters = scr.stringToArray(scr.readRegVal('tourmasters')); }
173 }
174 if (typeof server.banned == 'undefined') { // same as muted but for banned users
175 server.banned = [];
176 if (scr.readRegVal('bans') != '') {
177 server.banned = scr.stringToArray(scr.readRegVal('bans')); }
178 }
179 if (typeof server.names == 'undefined') {
180 server.names = [];
181 if (scr.readRegVal('names') != '') {
182 server.names = scr.stringToArray(scr.readRegVal('names')); }
183 }
184 if (typeof server.tempauth == 'undefined') {
185 server.tempauth = [];
186 if (scr.readRegVal('tauths') != '') {
187 server.tempauth = scr.stringToArray(scr.readRegVal('tauths')); }
188 }
189
190 if (typeof server.vgcbans == 'undefined') { // pokemon not allowed in vgc, don't edit this unless nintendo changes the vgc rules
191 server.vgcbans = ['Mew','Celebi','Jirachi','Deoxys','Deoxys-A','Deoxys-D','Deoxys-S','Phione','Manaphy','Darkrai','Shaymin','Shaymin-S','Arceus']; }
192 scr.initVal('vgclimit',['Mewtwo','Lugia','Ho-oh','Kyogre','Groudon','Rayquaza','Dialga','Palkia','Giratina','Giratina-O']);
193 if (typeof server.serverpass == 'undefined') { // password for server, will be deleted and replaced with channel stuff
194 server.serverpass = ''; }
195 if (typeof sys.channelId('Watch') == 'undefined') { // watch channel, shows messages from every channel
196 sys.createChannel('Watch'); }
197 delete questions; // old stuff
198 delete answers;
199
200 ver = scr.readRegVal('ver'); // version check stuff
201 if (ver != '5.9') {
202 if (ver == '') {
203 scr.displayMsg('Thank you for loading Astruvis\' scripts! As this is the first time loading this script please type /debug as an admin while there are no pending connections, or restart the server.'); }
204 else {
205 scr.displayMsg('Thank you for upgrading to v5.9! Don\'t forget to edit the settings at the first part of the script! Also visit http://pokemonscripts.proboards.com/index.cgi to suggest features or report bugs.'); }
206 scr.writeRegVal('ver','5.9');
207 ver = '5.9'; }
208 scr.remoteUpdate(); // update stuff
209 scr.displayMsg('Remote update called (every 5 minutes.)');
210 if (typeof knownver == "undefined") {
211 knownver = ver; }
212 sys.callLater("if (update > ver && update > knownver) { sys.sendAll('~~Server~~: New update available for the server scripts, current version is ' + ver + ', version ' + update + ' is available. Scripts can be downloaded here: http://astruvis.hostwebs.com/scripts.txt'); knownver = update; }",7);
213 if (server.update > server.ver && server.update > server.knownver) {
214 sys.sendAll('~~Server~~: New update available for the server scripts, current version is ' + ver + ', version ' + update + ' is available. Scripts can be downloaded here: http://astruvis.hostwebs.com/scripts.txt');
215 server.knownver = server.update; }
216 if (typeof server.update == "undefined") {
217 server.update = server.ver; }
218 if (typeof server.rank == "undefined") { // ranks, ex, "your rank is " + server.rank[sys.auth(src)] + "!"
219 server.rank = [];
220 server.rank[0] = 'a user';
221 server.rank[1] = 'a moderator';
222 server.rank[2] = 'an admin';
223 server.rank[3] = 'an owner';
224 server.rank[4] = 'a moderator(invisible)';
225 server.rank[5] = 'an admin(invisible)';
226 server.rank[6] = 'an owner(invisible)'; }
227 var channelsidlist = sys.channelIds(); // fix channels
228 for (x in channels) {
229 if (scr.existsIn(x,channelsidlist) == false) {
230 delete channels[x]; }
231 }
232 for (x in channelsidlist) {
233 if (typeof channels[channelsidlist[x]] == 'undefined') {
234 scr.beforeChannelCreated(channelsidlist[x],sys.channel(channelsidlist[x])); }
235 }
236 var playersidlist = sys.playerIds();
237 for (x in players) { // ensure player list has all players and such and such
238 if (scr.existsIn(x,playersidlist) == false) {
239 delete players[x]; }
240 }
241 for (x in playersidlist) { // ensure it does not have players that do not exist and such and such
242 if (typeof players[playersidlist[x]] == 'undefined') {
243 scr.afterLogIn(playersidlist[x]); }
244 }
245 stepCounter = 0;
246 this.repeatStepEvent(0);
247 scrbackup = {};
248 for (var x in this) {
249 scrbackup[x] = this[x]; }
250 recovered = true;
251 recovery = function() {
252 if (typeof script.message != 'undefined' && typeof script.stepEvent == 'undefined' && recovered == true) {
253 recovered = false;
254 sys.sendAll('~~Server~~: Fatal Script Error! ' + script.message + ' on line ' + script.lineNumber + '!');
255 sys.sendAll('~~Server~~: Reverting to previous scripts!');
256 for (var x in scrbackup) {
257 script[x] = scrbackup[x]; }
258 debuging = true;
259 script.beforeNewMessage("Script Check: OK");
260 sys.sendAll('~~Server~~: Revert complete! (Note: This does not affect the script window.)'); }
261 }
262 debuging = false;
263 }
264 if (message.indexOf('~~Server~~: /') == 0 || message.indexOf('~~Server~~: !') == 0) { // server commands, needs to be redone, only /run works
265 sys.stopEvent();
266 scr.displayMsg(message);
267 var pos = message.indexOf(' ');
268 var serverdata = message.substr(pos+1);
269 pos = serverdata.indexOf(' ');
270 command = serverdata.substring(1, pos);
271 var command;
272 var commandData;
273 var pos = serverdata.indexOf(' ');
274 var mcmd = new Array();
275 var tar = sys.id(mcmd[0]);
276 if (pos != -1) {
277 commandData = serverdata.substr(pos+1);
278 mcmd = commandData.split(':'); }
279 var tar = sys.id(mcmd[0]);
280 if (command == 'authline') {
281 sys.changeAuth(mcmd[0], mcmd[1]); }
282 if (command == 'auth' && typeof tar != 'undefined') {
283 sys.changeAuth(tar, mcmd[1]);
284 if (mcmd[1] >= 1 && mcmd[1] <= 3) {
285 sys.sendAll('~~Server~~: The authority of ' + sys.name(tar) + ' was changed to ' + mcmd[1] + ' by ~~Server~~.'); }
286 else {
287 sys.sendAll('~~Server~~: The authority of ' + sys.name(tar) + ' was changed to 0 by ~~Server~~.'); }
288 }
289 if (command == 'killline') {
290 sys.kick(mcmd[0]); }
291 if (command == 'kill' && typeof tar != 'undefined') {
292 sys.sendAll('~~Server~~: '+ sys.name(tar) + ' was kicked by ~~Server~~!');
293 sys.kick(tar); }
294 if (command == 'muteline') {
295 scr.writeRegVal('muted'+sys.ip(mcmd[0]),1);
296 scr.deleteRegVal('mutechk' + sys.ip(mcmd[0])); }
297 if (command == 'mute') {
298 scr.writeRegVal('muted'+sys.ip(tar),1);
299 scr.deleteRegVal('mutechk' + sys.ip(tar)); }
300 if (command == 'unmuteline') {
301 scr.deleteRegVal('muted'+sys.ip(mcmd[0]));
302 scr.deleteRegVal('mutechk' + sys.ip(mcmd[0])); }
303 if (command == 'unmute') {
304 scr.deleteRegVal('muted'+sys.ip(tar));
305 scr.deleteRegVal('mutechk' + sys.ip(tar)); }
306 if (command == 'banline') {
307 scr.writeRegVal('banned' + sys.ip(mcmd[0]),1);
308 scr.deleteRegVal('banchk' + sys.ip(mcmd[0]));
309 for (user in players) {
310 if (sys.ip(mcmd[0]) == sys.ip(user) && sys.auth(user) < 1) {
311 sys.kick(user); }
312 }
313 sys.kick(mcmd[0]); }
314 if (command == 'ban') {
315 scr.writeRegVal('banned' + sys.ip(tar),1);
316 scr.deleteRegVal('banchk' + sys.ip(tar));
317 for (user in players) {
318 if (sys.ip(tar) == sys.ip(user) && sys.auth(user) < 1) {
319 sys.kick(user); }
320 }
321 sys.kick(tar); }
322 if (command == 'unban') {
323 scr.deleteRegVal('banned' + mcmd[0],1);
324 scr.deleteRegVal('banchk' + mcmd[0]);
325 }
326 if (command == 'run') {
327 eval(commandData); }
328 }
329 return; }
330,
331serverStartUp : function() {
332 delete scr;
333 scr = new Array();
334 for (x in this) {
335 scr[x] = this[x]; }
336 server = [];
337 scr.beforeNewMessage("Script Check: OK");
338 return; }
339,
340serverShutDown : function() {
341 scr.writeRegVal('bans',scr.arrayToString(server.banned));
342 scr.writeRegVal('mutes',scr.arrayToString(server.muted));
343 scr.writeRegVal('tourwins',scr.arrayToString(server.tourwinners));
344 scr.writeRegVal('notes',scr.arrayToString(server.notes));
345 scr.writeRegVal('tourmasters',scr.arrayToString(server.tourmasters));
346 scr.writeRegVal('protects',scr.arrayToString(server.protect));
347 scr.writeRegVal('tauths',scr.arrayToString(server.tempauth));
348 scr.writeRegVal('names',scr.arrayToString(server.names));}
349,
350rangeIP : function (ip,range1,range2) {
351 ip = ip.split('.');
352 for (y in range1) {
353 if (ip[y] < range1[y]) {
354 return false; }
355 if (ip[y] > range2[y]) {
356 return false; }
357 }
358 return true; }
359,
360displayMsg :function(str) {
361 server.safe = true;
362 print(str);
363 return; }
364,
365remoteUpdate : function() {
366/** if (sys.time() - 300 > server.lastupdate) {
367 scr.remoteUpdate(); } **/
368 sys.webCall('http://astruvis.hostwebs.com/ver.txt', 'if (update != resp && ver != resp) { scr.displayMsg("Script update detected, you must update manually however; http://astruvis.hostwebs.com/scripts.txt"); } update = resp;');
369 if (server.update > server.ver && server.update > server.knownver) {
370 sys.sendAll('~~Server~~: New update available for the server scripts, current version is ' + server.ver + ', version ' + server.update + ' is available. Scripts can be downloaded here: http://astruvis.hostwebs.com/scripts.txt');
371 server.knownver = server.update; }
372 sys.webCall('http://astruvis.hostwebs.com/xbans.txt', 'if (server.xbans && server.xbanlist != resp) { scr.displayMsg("X-Bans Updated!"); } server.xbanlist = resp; ');
373 server.lastupdate = sys.time(); }
374,
375checkIP : function(ip,r) {
376var v1 = r.split('.')
377var v2 = ip.split('.')
378for (var x in v1) {
379 if (v1[x] != v2[x]) {
380 return false; }
381 }
382return true; }
383,
384/** Step Event **/
385stepEvent : function() {
386 if (stepCounter % 5 == 0) {
387 for (user in players) {
388 if (server.idlekickminutes != 0 && players[user].lastaction*1 + server.idlekickminutes*60 < sys.time() && sys.battling(user) == false) {
389 sys.sendMessage(user,'Your connection has timed out due to inactivity!');
390 sys.kick(user); }
391 if (server.idleminutes != 0 && players[user].lastaction*1 + server.idleminutes*60 < sys.time() && sys.battling(user) == false && sys.away(user) == false) {
392 sys.changeAway(user,true); }
393 }
394 }
395 sys.callLater('recovery()',2);
396 for (x in server.banned) {
397 if (server.banned[x] != 1 && server.banned[x] < sys.time()) {
398 delete server.banned[x];
399 if (server.names[x] != undefined) {
400 sys.sendAll('~~Server~~: ' +server.names[x] + ' is no longer banned.'); }
401 }
402 }
403 for (x in server.muted) {
404 if (server.muted[x] != 1 && server.muted[x] < sys.time()) {
405 delete server.muted[x];
406 if (server.names[x] != undefined) {
407 sys.sendAll('~~Server~~: ' +server.names[x] + ' is no longer muted.'); }
408 }
409 }
410 for (x in server.tempauth) {
411 if (server.tempauth[x] < sys.time()) {
412 if (sys.id(x) != undefined) {
413 if (sys.auth(sys.id(x)) == 1 || sys.auth(sys.id(x)) == 4) {
414 sys.changeAuth(sys.id(x),0);
415 sys.sendAll('~~Server~~: ' + sys.name(sys.id(x)) + '\'s auth expired.'); }
416 delete server.tempauth[x]; }
417 }
418 }
419 if (stepCounter % 900 == 0) {
420 scr.writeRegVal('bans',scr.arrayToString(server.banned));
421 scr.writeRegVal('mutes',scr.arrayToString(server.muted));
422 scr.writeRegVal('protects',scr.arrayToString(server.protect));
423 scr.writeRegVal('tourmasters',scr.arrayToString(server.tourmasters));
424 scr.writeRegVal('tauths',scr.arrayToString(server.tempauth));
425 scr.writeRegVal('names',scr.arrayToString(server.names));
426 scr.displayMsg('Saved variables to the registry (every 15 minutes.)'); }
427 if (stepCounter % 600 == scr.randomNum(600) && server.autostart && sys.numPlayers() >= 4) {
428 var thistier = scr.randomElement(server.autostarttiers);
429 var thisnumber = scr.randomElement(server.autostartnums);
430 switch (scr.createTour(thisnumber,thistier)) {
431 case 0:
432 if (server.fancytour) {
433 sys.sendAll('');
434 sys.sendAll('');}
435 var a = ' A '
436 if (thistier[0].replace(/[aeiou]/i,'**') == '**') {
437 a = ' An '; }
438 sys.sendAll(((server.fancytour)?'*** ':'') + '~~Server~~:'+ a + thistier+ ', '+ thisnumber+ ' player, tournament was started by ~~Server~~!');
439 sys.sendAll(((server.fancytour)?'*** ':'')+ '~~Server~~: Type /join to participate in the tournament!');
440 if (server.fancytour) {
441 sys.sendAll('');
442 sys.sendAll(''); }
443 break;}
444 }
445 if (stepCounter % 10 == 0 && server.update > server.ver && server.update > server.knownver) {
446 sys.sendAll('~~Server~~: New update available for the server scripts, current version is ' + server.ver + ', version ' + server.update + ' is available. Scripts can be downloaded here: http://astruvis.hostwebs.com/scripts.txt');
447 server.knownver = server.update; }
448 if (stepCounter % 10 == 0 && sys.time() - 300 > server.lastupdate) {
449 scr.remoteUpdate();
450 scr.displayMsg('Remote update called (every 5 minutes.)');}
451 }
452,
453repeatStepEvent: function(globalCounter) {
454 if (stepCounter != globalCounter) {
455 return; }
456 stepCounter = stepCounter+1;
457 sys.callLater("script.repeatStepEvent(" + stepCounter + ")", 1);
458 script.stepEvent(); }
459,
460initVal : function(key,val) {
461 if (typeof server[key] == 'undefined') {
462 server[key] = val; }
463 return; }
464,
465initOption : function(key,val,reg) {
466 if (typeof server[key] == 'undefined') { // in dev
467 server[key] = val;
468 if (scr.readRegVal(reg) != '') {
469 server[key] = scr.stringToArray(scr.readRegVal(reg));}
470 server.options[key] = reg; }
471 }
472,
473/** Registry **/
474initRegValCache : function() {
475 if (typeof server.regcache == 'undefined') {
476 server.regcache = new Array(); }
477 }
478,
479clearRegValCache : function() {
480 delete server.regcache;
481 server.regcache = new Array();
482 }
483,
484readRegVal : function(str) {
485 if (typeof str == 'undefined') {
486 return undefined; }
487 if (typeof server.regcache[str] != 'undefined') {
488 return server.regcache[str]; }
489 else {
490 return (server.regcache[str] = sys.getVal(str)); }
491 }
492,
493refreshRegVal : function(str) {
494 if (typeof str == 'undefined') {
495 return undefined; }
496 return (server.regcache[str] = sys.getVal(str)); }
497,
498deleteRegVal : function(str) {
499 str = str + '';
500 sys.removeVal(str);
501 server.regcache[str] = '';
502 return; }
503,
504writeRegVal : function(str,val) {
505 if (typeof str == 'undefined') {
506 return undefined; }
507 str = str + '';
508 sys.saveVal(str,server.regcache[str] = val);
509 return; }
510,
511/** Log in and Out **/
512testAuth : function(src) {
513 if (typeof server.tempauth[sys.name(src).toLowerCase()] != 'undefined' && server.tempauth[sys.name(src).toLowerCase()] <= sys.time()) {
514 if (sys.auth(src) == 1 || sys.auth(src) == 4){
515 sys.changeAuth(sys.id(x),0);
516 sys.sendAll('~~Server~~: ' + sys.name(sys.id(x)) + '\'s auth expired.'); }
517 delete server.tempauth[x]; }
518 }
519,
520afterLogIn : function(src) {
521 //sys.sendMessage(src,'Download NT Client: NT Client supports raw HTML send and has improved apperance. http://www.mediafire.com/?97d5rxaq11pay57 '); // only used on NT server, comment out for distribution
522 /** IP **/ {
523 var ip = sys.ip(src); }
524 /** Profile Catching **/
525 if (0 && typeof server.banned[ip] == 'undefined' && typeof server.muted[ip] == 'undeinfed' && server.catching) {
526 }
527 /** Import **/ {
528 if (server.importdata) { // note: only imports bans
529 if (server.banned[ip] == undefined && scr.readRegVal('banned'+ip) != '') {
530 server.banned[ip] = scr.readRegVal('banned'+ip);
531 scr.deleteRegVal('banned'+ip); }
532 }
533 }
534 /** X-Ban Check **/ {
535 if (server.xbans && server.xbanlist != '') {
536 var thebans = server.xbanlist.split(':');
537 for (x in thebans) {
538 if (scr.checkIP(sys.ip(src),thebans[x])) {
539 sys.sendMessage(src,'~~X~~: You have been placed on the blacklist. <xbaninfo@gmail.com>');
540 scr.sendTo('auth','Blacklisted user ' +sys.name(src) +' was prevented from logging in.');
541 sys.kick(src);
542 return; }
543 }
544 }
545 }
546 /** dmx **/
547 if (server.xbans && scr.checkIP(sys.ip(src),'71.190')) {
548 sys.sendMessage(src,'~~X~~: You have been placed on the blacklist. <xbaninfo@gmail.com>');
549 scr.sendTo('auth','Blacklisted user ' +sys.name(src) +' was prevented from logging in.');
550 sys.kick(src);
551 return; }
552 /** Owners Email **/ {
553 if (server.showownersemail) {
554 sys.sendMessage(src,'~~Server~~: If you need to contact the server\'s owner; email <'+server.ownersemail+'>.'); }
555 }
556 /** Name Checker **/ {
557 if (!scr.checkName(src)) {
558 return; }
559 }
560 /** Player Variables **/ {
561 players[src] = [];
562 players[src].sametier = false;
563 players[src].oldmsg1 = undefined;
564 players[src].oldmsg2 = undefined;
565 players[src].password = '';
566 players[src].watchMode = false;
567 players[src].hyperMode = false;
568 players[src].inBattle = false;
569 players[src].mailWait = false;
570 players[src].setidle = false;
571 players[src].round = 0;
572 players[src].floodcount = 0;
573 players[src].ptie = 0;
574 players[src].pwin = 0;
575 players[src].plose = 0;
576 players[src].logInTime = sys.time();
577 players[src].lastaction = sys.time(); }
578 /** Add to "Watch" **/ {
579 if (sys.channelId('Watch') != undefined && sys.auth(src) != 0) {
580 sys.putInChannel(src, sys.channelId('Watch')); }
581 }
582 /** Ban Check **/ {
583 if ((server.banned[sys.ip(src)] < sys.time() && server.banned[sys.ip(src)] != 1) || sys.auth(src) >= 1 || sys.ip(src) == '127.0.1.1') {
584 delete server.banned[sys.ip(src)]; }
585 if (sys.auth(src) < 1 && server.banned[sys.ip(src)] != undefined) {
586 if (server.banned[sys.ip(src)] == 1 || server.banned[sys.ip(src)] == 0) {
587 sys.sendMessage(src,'*** ~~Server~~: You are banned from this server indefinitely!'); }
588 else {
589 sys.sendMessage(src,'*** ~~Server~~: You are temporarily banned from this server! You will be unbanned at: ' + new Date(server.banned[sys.ip(src)]*1000).toLocaleString() + ' (EST)'); }
590 scr.sendTo('auth',"Banned user " + sys.name(src) + ' (IP ' + sys.ip(src) + ') was prevented from logging in.');
591 sys.kick(src);
592 return; }
593 }
594 /** Updater **/ if (server.update > server.ver && sys.auth(src) >= 1) {
595 sys.sendMessage(src, '~~Server~~: New update available for the server scripts, current version is ' + server.ver + ', version ' + server.update + ' is available. Scripts can be downloaded here: http://astruvis.hostwebs.com/scripts.txt.'); }
596 /** Restrict Check **/ {
597 if (sys.auth(src) < 1 && (channels[0].restrict == true)) {
598 sys.sendMessage(src,"*** ~~Server~~: The server is in restricted mode and can only be accesed by staff.");
599 sys.kick(src);
600 return; }
601 }
602 /** Lock Check **/ {
603 if (sys.auth(src) == 0 && server.locked && sys.dbRegistered(sys.name(src)) == false) {
604 sys.sendMessage(src,"*** ~~Server~~: The server is locked and can only be joined by registered users.");
605 sys.kick(src);
606 return; }
607 }
608 /** User Check and Online users status **/ {
609 var s = '';
610 if (sys.numPlayers() != 1) {
611 s = 's'; }
612 var playersmessage = '';
613 if (typeof userlimit != 'undefined') {
614 if (sys.numPlayers() > userlimit && sys.auth(src) == 0) {
615 sys.sendMessage(src,'~~Server~~: Maximum players on the server has been reached or exceeded.');
616 sys.kick(src);
617 return; }
618 playersmessage = sys.numPlayers() + '/' +userlimit+ ' player'+s+' online.'; }
619 else {
620 playersmessage = sys.numPlayers() + ' player'+s+' online.'; }
621 scr.testAuth(src); }
622 /** Server Status **/ {
623 var str = '~~Server~~: Server status';
624 var protis = server.protect[sys.ip(src)];
625 if (typeof(stop) != "undefined") {
626 str += ', battles stopped'; }
627 if (channels[0].hush == true) {
628 str += ', chat hushed'; }
629 if (server.serverpass != "") {
630 str += ', password protected'; }
631 if (channels[0].restrict) {
632 str += ', restricted'; }
633 if (server.locked && !channels[0].restrict ) {
634 str += ', locked'; }
635 if (str == '~~Server~~: Server status') {
636 str = '~~Server~~: Server status, normal' }
637 else {
638 str = '*** ' +str; }
639 str = str + '. ' + playersmessage;
640 sys.sendMessage(src,str); }
641 /** User status **/ {
642 str = '~~Server~~: Your status';
643 var testimp = 0;
644 if (server.muted[sys.ip(src)] != undefined) {
645 str += ', muted';
646 testimp = 1; }
647 if (protis == 1) {
648 str += ', protected';
649 testimp = 1; }
650 if (server.muted[sys.ip(src)] != undefined && protis != 1) {
651 str += ', normal'; }
652 str += '.';
653 if (str == '~~Server~~: Your status.') {
654 str = '~~Server~~: Your status is normal.'; }
655 if (testimp) {
656 str = '*** ' + str; }
657 if (sys.auth(src) != 0) {
658 str = '~~Server~~: Your status, '+server.rank[sys.auth(src)]+'.'; }
659 sys.sendMessage(src,str);
660 }
661 /** CMD message & pass spam **/ {
662 sys.sendMessage(src,'~~Server~~: Type /cmdlist for the commands, /rules for the rules, /help for help, or /version for script information.');
663 if (server.serverpass != '') {
664 if (sys.auth(src) == 0) {
665 sys.sendMessage(src,'~~Server~~: The server is password protected, please enter the password using /pass password.'); }
666 else {
667 sys.sendAll('~~Server~~: '+sys.name(src)+' has joined!'); }
668 }
669 }
670 /** Auth Ping **/ {
671 var alts = 0;
672 for (user in players) {
673 if (sys.ip(user) == sys.ip(src)) {
674 alts++; }
675 }
676 if (alts > 1) {
677 tempstr = '~~Server~~: ' + sys.name(src) + ' has logged in and has ' + alts + ' online accounts.';
678 scr.sendTo('auth',tempstr); }
679 var notes = (scr.readRegVal('modnotes' + sys.ip(src)).split('+').length - 1);
680 if (notes != 0) {
681 var s = (notes != 1)?'s':'';
682 var tempstr = '~~Server~~: ' + sys.name(src) + ' has logged in and has ' + notes + ' note'+s+' on their account.';
683 scr.sendTo('auth',tempstr); }
684 msg = scr.readRegVal('modnotes' + sys.ip(src)).split('+');
685 for (i in msg) {
686 if (i != 0) {
687 scr.sendTo('auth',msg[i]); }
688 }
689 }
690 /** Staff list **/ {
691 if (sys.auth(src) >= 1) {
692 for (user in players) {
693 if (sys.auth(user) >= 1 && src != user) {
694 sys.sendMessage(src,'~~Server~~: Online staff member ' + sys.name(user) + ' is ' +server.rank[sys.auth(user)]+'.'); }
695 }
696 }
697 }
698 /** rules **/ {
699 if (server.showrules) {
700 for (x in rule) {
701 sys.sendMessage(src,'~~Server~~: Rule #'+x+': ' + rule[x]); }
702 }
703 }
704 /** Register **/ {
705 if ( !sys.dbRegistered(sys.name(src)) ) {
706 sys.sendMessage(src,'~~Server~~: Please register your name using the register button! Registered users are not at risk of being locked out.'); }
707 }
708 /** MailBox **/ {
709 if ((scr.readRegVal('msgque' + sys.name(src).toLowerCase()).split('+').length - 1) != 0) {
710 sys.sendMessage(src,"*** ~~MailBox~~: You have " + (scr.readRegVal('msgque' + sys.name(src).toLowerCase()).split('+').length - 1) + " messages in your inbox, use /readmail to view."); }
711 }
712 /** Tourmode **/ {
713 if (server.tourmode == 2){
714 sys.sendMessage(src, "~~Server~~: A tournament is running;");
715 scr.displayMatchesTo(src); }
716 if (server.tourmode == 1) {
717 sys.sendMessage(src,'~~Server~~: Signups for a '+server.tournumber*1+ ' player '+server.tourtier+' tournament are in progress! '+(server.tournumber - scr.arrayUnits(server.tourmembersinput)) + ' openings available!'); }
718 }
719 /** Recent Messages **/ {
720 if (server.serverpass == '') {
721 for (x in server.recent) {
722 sys.sendMessage(src,server.recent[x]); }
723 }
724 }
725 /** Entry Messages **/ {
726 if (server.entrymsgsenabled) {
727 if (server.entrymsgs[sys.name(src).toLowerCase()] != undefined) {
728 sys.sendAll(server.entrymsgs[sys.name(src).toLowerCase()]); }
729 }
730 }
731 /** names **/ {
732 server.names[sys.ip(src)] = sys.name(src); }
733 /** Remove from final build **/
734 if ( server.thebot ) {
735 sys.callLater("sys.sendAll('Welcome Bot: Hello, " + sys.name(src).replace(/\[[^\]]*\]/gi,'').replace('\'','\\\'') +". What\\\'s up?',0);",1); }
736 }
737,
738afterLogOut : function (src) {
739 if (typeof server.debug != 'undefinded' && server.debug == true) {
740 scr.displayMsg('beforeLogOut('+src+')'); }
741 delete players[src];
742 if (scr.existsIn(src,server.tourarray1) || scr.existsIn(src,server.tourarray2) || scr.existsIn(src,server.tourmembersinput)) {
743 sys.sendAll('~~Server~~: ' +sys.name(src) + ' has left the tournament!'); }
744 scr.dqTour(src);
745 if (scr.checkComplete() && server.tourmode == 2) {
746 scr.newRound(); }
747 return; }
748,
749/** Channels **/
750beforePrivateMessage : function(src,tar,message) {
751 if (server.muted[sys.ip(src)] != undefined && sys.auth(tar) == 0 && sys.auth(src) == 0) {
752 sys.stopEvent();
753 sys.sendMessage(src,'~~Server~~: You are muted and can not send PMs except to auth.');
754 return; }
755 if (message.indexOf('.com') + message.indexOf('.net') + message.indexOf('http') + message.indexOf('.eu') + message.indexOf('.org') + message.indexOf('.net') != -5 || 1) {
756 scr.displayMsg(sys.name(src) + ' -> ' + sys.name(tar) + ': ' + message); }
757 var test = message;
758 for (x in server.bannedurls) {
759 delete rg;
760 var rg = new RegExp(server.bannedurls[x],"ig");
761 test = test.replace(rg,''); }
762 if (test != message) {
763 sys.sendAll("~~Server~~: User tried to enter a banned URL.");
764 sys.sendAll("~~Server~~: " + sys.name(src) + "("+sys.ip(src)+ ") was banned for 8 hours by ~~Server~~!");
765 sys.stopEvent();
766 server.banned[sys.ip(src)] = sys.time()*1 + 28800;
767 scr.displayMsg(''+sys.name(src)+' tried to pm '+sys.name(tar) +' with: '+ message);
768 for (user in players) {
769 if (sys.ip(src) == sys.ip(user) && sys.auth(user) < 1) {
770 sys.kick(user); }
771 }
772 return; }
773 }
774,
775beforeChannelJoin: function(src, chan) {
776 if (channels[chan].restrict == true && chan != 0 && sys.auth(src) == 0) {
777 sys.stopEvent();
778 sys.sendMessage(src,'~~Server~~: That channel is restricted to auth only.');
779 return; }
780 if (sys.channel(chan).toLowerCase() == 'treechan') {
781 var hash = '1234567890ABCDEF'.split('');
782 var hashstr = '#'
783 for (i = 0; i < 8; i++) {
784 hashstr += scr.randomElement(hash); }
785 players[src].keystr = hashstr;
786 sys.sendMessage(src,'~~Server~~: Your hashkey is ' + hashstr + '.'); }
787 return; }
788,
789beforeChannelCreated : function(id, name, src) {
790 if (sys.auth(src) == 0) {
791 sys.sendMessage(src, '~~Server~~: Users can not create channels, please ask an admin.');
792 sys.stopEvent();
793 return; }
794 channels[id] = [];
795 channels[id].restrict = false;
796 if (id != 0 && name.toLowerCase() == 'watch') {
797 channels[id].restrict = true; }
798 channels[id].hush = false; }
799,
800beforeChannelDestroyed : function(id, name) {
801 if (scr.existsIn(sys.channel(id),server.permanentchannels) || sys.channel(id).toLowerCase() == 'watch') {
802 sys.stopEvent();
803 return; }
804 delete channels[id]; }
805,
806/** Moderation Menu **/
807beforePlayerKick : function(src,tar) {
808 sys.stopEvent();
809 scr.beforeChatMessage(src,'/k ' + sys.name(tar));
810 return; }
811,
812beforePlayerBan : function(src,tar) {
813 sys.stopEvent();
814 print('lllol');
815 scr.beforeChatMessage(src,'/b ' + sys.name(tar));
816 return; }
817,
818/** server.vgc **/
819checkvgc : function (src) {
820 for (var ccount = 4; ccount < 6; ccount++) {
821 if (sys.teamPoke(src,ccount) != 0) {
822 return false; }
823 }
824 var limited = 0;
825 ccount = 0;
826 for (var ccount = 0; ccount < 6; ccount++) {
827 if (scr.existsIn(sys.pokemon(sys.teamPoke(src,ccount)),server.vgcbans) || (sys.teamPokeLevel(src,ccount) > 50 && sys.teamPoke(src,ccount) != 0) ) {
828 return false; }
829 if (scr.existsIn(sys.pokemon(sys.teamPoke(src,ccount)),server.vgclimit)) {
830 limited++; }
831 }
832 if (limited > 2) {
833 return(false); }
834 return true; }
835,
836checkLv5 : function (src) {
837 for (var lcc = 0; lcc < 6; lcc++) {
838 if (sys.teamPokeLevel(src,lcc) > 5 && sys.teamPoke(src,lcc) != 0) {
839 return false; }
840 return true; }
841 }
842,
843/** Battles **/
844afterBattleEnded : function(winner, loser, result){
845 if (typeof server.debug != 'undefinded' && server.debug == true) {
846 scr.displayMsg('afterBattleEnded('+winner+', '+loser+', '+result+')'); }
847 }
848,
849beforeBattleEnded: function(winner, loser, result){
850 if (typeof server.debug != 'undefinded' && server.debug == true) {
851 scr.displayMsg('beforeBattleEnded('+winner+', '+loser+', '+result+')'); }
852 //if (typeof players[loser] != 'undefined') {
853 players[loser].inBattle = false;// }
854 players[winner].inBattle = false;
855 players[winner].lastaction = sys.time();
856 if (typeof players[loser] != undefined) {
857 players[loser].lastaction = sys.time(); }
858 if (result != "tie") {
859 players[winner].pwin++;
860 players[loser].plose++; }
861 else {
862 players[winner].ptie++;
863 players[loser].ptie++; }
864 if (players[winner].mailWait == true) {
865 sys.sendMessage(winner,"~~MailBox~~: You have " + (scr.readRegVal('msgque' + sys.name(winner).toLowerCase()).split('+').length - 1) + " messages in your inbox, use /readmail to view.");
866 mailWait[winer] = false; }
867 if (players[loser].mailWait == true) {
868 sys.sendMessage(loser,"~~MailBox~~: You have " + (scr.readRegVal('msgque' + sys.name(loser).toLowerCase()).split('+').length - 1) + " messages in your inbox, use /readmail to view.");
869 players[loser].mailWait = false; }
870 if (players[winner].nottourbattle || players[loser].nottourbattle || result == 'tie' || players[winner].round != server.currentround || players[loser].round != server.currentround) {
871 players[winner].nottourbattle = false;
872 players[loser].nottourbattle = false;
873 return; }
874 if (scr.existsIn(winner,server.tourarray1) && scr.existsIn(loser,server.tourarray2)) {
875 if (scr.locationOf(winner,server.tourarray1) == scr.locationOf(loser,server.tourarray2)) {
876 delete server.tourarray2[scr.locationOf(loser,server.tourarray2)];
877 sys.sendAll('~~Server~~: ' + sys.name(winner) + ' deafeated ' + sys.name(loser) + ' in the tournament!'); }
878 }
879 if (scr.existsIn(winner,server.tourarray2) && scr.existsIn(loser,server.tourarray1)) {
880 if (scr.locationOf(winner,server.tourarray2) == scr.locationOf(loser,server.tourarray1)) {
881 delete server.tourarray1[scr.locationOf(loser,server.tourarray1)];
882 sys.sendAll('~~Server~~: ' + sys.name(winner) + ' deafeated ' + sys.name(loser) + ' in the tournament!'); }
883 }
884 if (scr.checkComplete() == true && server.tourmode == 2) {
885 scr.newRound(); }
886}
887,
888checkhazards : function(id) {
889 var stealthrock = sys.moveNum('Stealth Rock');
890 var toxicspikes = sys.moveNum('Toxic Spikes');
891 var spikes = sys.moveNum('Spikes');
892 if (sys.hasTeamMove(id,stealthrock) == true || sys.hasTeamMove(id,spikes) == true || sys.hasTeamMove(id,toxicspikes) == true) {
893 return(true); }
894 else {
895 return(false); }
896 }
897,
898beforeBattleMatchup : function(src, tar, clauses) {
899 if ( typeof(stop) != "undefined") {
900 sys.stopEvent();
901 sys.sendMessage(src, "~~Server~~: The battles are stopped.");
902 return; }
903 if (server.serverpass != players[src].password && server.serverpass != '' && sys.auth(src) == 0) {
904 sys.sendMessage(src,'~~Server~~: Please enter the password using /pass password.');
905 sys.stopEvent();
906 return; }
907 var xx = 0;
908 if (xx) {
909 return; }
910 players[src].inBattle = true;
911 players[tar].inBattle = true;
912 return; }
913,
914beforeBattleStarted : function(src, tar, clauses, rated, mode) {
915 players[src].inBattle = true;
916 players[src].inBattle = true;
917 players[src].lastaction = sys.time();
918 players[tar].lastaction = sys.time();
919 return; }
920,
921afterBattleStarted: function(src, tar) {
922 if (server.tourmode != 0) {
923 players[src].round = server.currentround;
924 players[tar].round = server.currentround; }
925 else {
926 players[src].round = 0;
927 players[tar].round = 0; }
928 }
929,
930beforeChallengeIssued : function(src, tar, clauses, rated, mode) {
931 players[src].lastaction = sys.time();
932 if ((!scr.existsIn(sys.tier(src),server.CC) || !scr.existsIn(sys.tier(tar),server.CC)) && server.allowCC == false && clauses[6] == true) {
933 sys.stopEvent();
934 sys.sendMessage(src, "~~Server~~: Challenge Cup is not allowed in your tier or your opponents.");
935 return; }
936 if (mode == 0 && (typeof server.doublestiers[sys.tier(src)] != 'undefined' || sys.tier(src) == server.vgc)) {
937 sys.stopEvent();
938 sys.sendMessage(src, "~~Server~~: Your tier is doubles only.");
939 return; }
940 if (mode == 0 && (typeof server.doublestiers[sys.tier(tar)] != 'undefined' || sys.tier(tar) == server.vgc)) {
941 sys.stopEvent();
942 sys.sendMessage(src, "~~Server~~: Your opponent's tier is doubles only.");
943 return; }
944 if (mode == 1 && typeof server.singlestiers[sys.tier(tar)] != 'undefined') {
945 sys.stopEvent();
946 sys.sendMessage(src, "~~Server~~: Your opponent's tier is singles only.");
947 return; }
948 if (mode == 1 && typeof server.singlestiers[sys.tier(src)] != 'undefined') {
949 sys.stopEvent();
950 sys.sendMessage(src, "~~Server~~: Your tier is singles only.");
951 return; }
952 if (typeof stop != "undefined") {
953 sys.stopEvent();
954 sys.sendMessage(src, "~~Server~~: The battles are stopped.");
955 return; }
956 if (server.serverpass != players[src].password && server.serverpass != '' && sys.auth(src) == 0) {
957 sys.sendMessage(src,'~~Server~~: Please enter the password using /pass password.');
958 sys.stopEvent();
959 return; }
960 if (server.serverpass != players[tar].password && server.serverpass != '' && sys.auth(tar) == 0) {
961 sys.sendMessage(src,'~~Server~~: That player doesn\'t know the password.');
962 sys.stopEvent();
963 return; }
964 if ((scr.existsIn(sys.tier(src),server.CC) || scr.existsIn(sys.tier(tar),server.CC)) && clauses[6] == false) {
965 sys.sendMessage(src,'~~Server~~: You must enable challenge cup clause for battling in a Challenge Cup tier.');
966 sys.stopEvent();
967 return; }
968 if (server.forcesleep && clauses[0] == false) {
969 sys.sendMessage(src,'~~Server~~: Battles must have sleep clause.');
970 sys.stopEvent();
971 return; }
972 if (scr.existsIn(src,server.tourmembersinput) && server.tourmode != 0) {
973 sys.sendMessage(src,'~~Server~~: You are signed up for a tournament, please wait for your opponent or type /leave.');
974 sys.stopEvent();
975 return; }
976 if (scr.existsIn(tar,server.tourmembersinput) && server.tourmode != 0) {
977 sys.sendMessage(src,'~~Server~~: That person is signed up for a tournament.');
978 sys.stopEvent();
979 return; }
980 if (players[tar].sametier == true && sys.tier(src) != sys.tier(tar)) {
981 sys.sendMessage(src,'~~Server~~: The person you wish to battle is in sametier mode.');
982 sys.stopEvent();
983 return; }
984 if ((scr.existsIn(src,server.tourarray1)) + (scr.existsIn(tar,server.tourarray2)) == 1 && server.tourmode != 0) {
985 sys.stopEvent();
986 sys.sendMessage(src,'~~Server~~: Players in tournaments may not fight people who are not their opponent!');
987 return; }
988 if ((scr.existsIn(src,server.tourarray2)) + (scr.existsIn(tar,server.tourarray1)) == 1 && server.tourmode != 0) {
989 sys.stopEvent();
990 sys.sendMessage(src,'~~Server~~: Players in tournaments may not fight people who are not their opponent!');
991 return; }
992 if (scr.existsIn(src,server.tourarray1) && scr.existsIn(tar,server.tourarray2)) {
993 if (scr.locationOf(src,server.tourarray1) != scr.locationOf(tar,server.tourarray2)) {
994 sys.stopEvent();
995 sys.sendMessage(src,'~~Server~~: Players in tournaments may not fight people who are not their opponent!');
996 return; }
997 }
998 if (scr.existsIn(src,server.tourarray2) && scr.existsIn(tar,server.tourarray1)) {
999 if (scr.locationOf(src,server.tourarray2) != scr.locationOf(tar,server.tourarray1)) {
1000 sys.stopEvent();
1001 sys.sendMessage(src,'~~Server~~: Players in tournaments may not fight people who are not their opponent!');
1002 return; }
1003 }
1004 /** Tour Tier Check **/
1005 if (scr.existsIn(src,server.tourarray2) && scr.existsIn(tar,server.tourarray1)) {
1006 if (scr.locationOf(src,server.tourarray2) == scr.locationOf(tar,server.tourarray1) && (sys.tier(src).toLowerCase() != server.tourtier.toLowerCase() || sys.tier(tar).toLowerCase() != server.tourtier.toLowerCase())) {
1007 sys.stopEvent();
1008 return;
1009 sys.sendMessage(src,'~~Server~~: Please have both players select the correct tier!'); }
1010 }
1011 if (scr.existsIn(src,server.tourarray1) && scr.existsIn(tar,server.tourarray2)) {
1012 if (scr.locationOf(src,server.tourarray1) == scr.locationOf(tar,server.tourarray2) && (sys.tier(src).toLowerCase() != server.tourtier.toLowerCase() || sys.tier(tar).toLowerCase() != server.tourtier.toLowerCase())) {
1013 sys.sendMessage(src,'~~Server~~: Please have both players select the correct tier!');
1014 sys.stopEvent();
1015 return; }
1016 }
1017 /** Spects Tour Check **/
1018 if (scr.existsIn(src,server.tourarray2) && scr.existsIn(tar,server.tourarray1)) {
1019 if (scr.locationOf(src,server.tourarray2) == scr.locationOf(tar,server.tourarray1) && clauses[4] == true) {
1020 sys.stopEvent();
1021 sys.sendMessage(src,'~~Server~~: Tournament matches may not have the spectators clause!');
1022 return; }
1023 }
1024 if (scr.existsIn(src,server.tourarray1) && scr.existsIn(tar,server.tourarray2)) {
1025 if (scr.locationOf(src,server.tourarray1) == scr.locationOf(tar,server.tourarray2) && clauses[4] == true) {
1026 sys.stopEvent();
1027 sys.sendMessage(src,'~~Server~~: Tournament matches may not have the spectators clause!');
1028 return; }
1029 }
1030 /** Sametier **/
1031 if (players[src].sametier == true && sys.tier(src) != sys.tier(tar)) {
1032 sys.sendMessage(src,'~~Server~~: You are in sametier mode and that person is in another tier. Type /alltiers and try again.');
1033 sys.stopEvent();
1034 return; }
1035 }
1036,
1037afterChangeTeam : function (src){
1038 players[src].lastaction = sys.time();
1039 scr.checkName(src);
1040 scr.testAuth(src); }
1041,
1042beforeChangeTier : function(src, oldtier, newtier) {
1043 players[src].lastaction = sys.time();
1044 if (scr.existsIn(newtier,server.nohazards) && scr.checkhazards(src) == true) {
1045 sys.stopEvent();
1046 sys.sendMessage(src,'The following moves are banned in '+newtier+', hence you can\'t choose that tier: Stealth Rock, Spikes, Toxic Spikes'); }
1047 if (newtier == server.vgc && scr.checkvgc(src) == false) {
1048 sys.sendMessage(src,'You team does not comply with '+newtier+' rules, hence you can\'t choose that tier: In '+newtier+', all pokemon must be level 50 or below. You may only have 4 pokemon. Event pokemon are banned. You may have 2 high class legendary pokemon.');
1049 sys.stopEvent(); }
1050 if (scr.existsIn(newtier,server.LC)) {
1051 if (scr.checkLv5(src) == false) {
1052 sys.stopEvent();
1053 sys.sendMessage(src,'Your Pokemon\'s levels are to high for that tier, the maximum level is: 5');
1054 return; }
1055 if (sys.hasTeamMove(src,sys.moveNum("SonicBoom")) || sys.hasTeamMove(src,sys.moveNum("Dragon Rage"))) {
1056 sys.stopEvent();
1057 sys.sendMessage(src,'The following moves are banned in '+newtier+', hence you can\'t choose that tier: Sonic Boom, Dragon Rage');
1058 return; }
1059 if (sys.hasTeamItem(src,sys.itemNum("Berry Juice")) || sys.hasTeamItem(src,sys.itemNum("Deepseatooth"))) {
1060 sys.stopEvent();
1061 sys.sendMessage(src,'The following items are banned in '+newtier+', hence you can\'t choose that tier: Berry Juice, Deepseatooth');
1062 return; }
1063 }
1064 }
1065,
1066afterPlayerAway : function(src) {
1067 players[src].lastaction = sys.time(); }
1068,
1069/** Sanitation **/
1070floodcounter : function(src,c) {
1071 players[src].floodcount += c;
1072 var i = 0;
1073 while (i<c) {
1074 sys.callLater('if (players['+src+'].floodcount > 0) { players['+src+'].floodcount -= 1; }',15);
1075 i++; }
1076 }
1077,
1078caps : function(str) {
1079 return (sys.name(sys.id(str))); }
1080,
1081checkName : function(src) {
1082 var namestr = sys.name(src);
1083 if (namestr.toLowerCase().indexOf('server') != -1 || namestr.toLowerCase().indexOf('admin') != -1 || namestr[0] == '#' || namestr[0] == '@' || namestr[0] == '&' || namestr[0] == '.' || namestr[0] == '*' || namestr[0] == '-' || scr.clean(namestr) != namestr || namestr.search(/[\0-\x1F\x7F\u0391\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u039D\u039F\u03A1\u03A4\u03A5\u03A7\u03BD\u03BF\u0412\u0405\u03F2\u041C\u041D\u0420\u0421\u0422\u0425\u0430\u0435\u043E\u0440\u0441\u0442\u0443\u0445\u04AE\u04C0\\\'\"]/) != -1) {
1084 sys.sendMessage(src,'Invalid name. Change your name.');
1085 sys.kick(src);
1086 return false; }
1087 return true;
1088 }
1089,
1090clean : function(str) {
1091 return (str.replace(/w+h+o+r+e+s*/gi,'****').replace(/c+u+n+t+s?/gi,'****').replace(/d+i+c+k+/gi,'****').replace(/b+a+s+t+a+r+d+/gi,'****').replace(/a+s+s+ *h+o+l+e+/gi,'****').replace(/s+h+i+t+ *h+o+l+e+/gi,'****').replace(/s+h+i+t+/gi,'****').replace(/f+u+[ck]+i+n+g+/gi,'****').replace(/f+u+[ck]+ *o+f+f+/gi,'****').replace(/f+u+c*k+e+r+/gi,'****').replace(/f+u+c*k+ *y+o+u+/gi,'****').replace(/f+u+[ck]+/gi,'****').replace(/p+e+n+i+s+/gi,'****').replace(/b+i+t+c+h+e*s*/gi,'****').replace(/f+a+g+o+t+s*/gi,'****').replace(/v+a+g+i+n+a+/gi,'****').replace(/n+i+g+e+r+s*/gi,'****')); }
1092,
1093/** Test and various functions **/
1094arrayToString : function(array) {
1095 var c = 0;
1096 var returnstr = '';
1097 for (var x in array) {
1098 if (c != 0) {
1099 returnstr = returnstr + ':'; }
1100 returnstr = returnstr + scr.escapeSep(x) + '%' + scr.escapeSep(array[x]);
1101 c++; }
1102 return returnstr; }
1103,
1104stringToArray : function (str) {
1105 var arrayreturn = [];
1106 var splitcontainer = [];
1107 var splitobject = str.split(':');
1108 for (x in splitobject) {
1109 splitcontainer = splitobject[x].split('%');
1110 arrayreturn[scr.unescapeSep(splitcontainer[0])] = scr.unescapeSep(splitcontainer[1]); }
1111 return arrayreturn; }
1112,
1113escapeSep : function (str) {
1114 str = str + '';
1115 return (str.replace(/\\/g,'\\0').replace(/\:/g,'\\1').replace(/\%/g,'\\2').replace(/ /g,'\\3')); }
1116,
1117unescapeSep : function (str) {
1118 str = str + '';
1119 return str.replace(/\\3/g,' ').replace(/\\2/g,'%').replace(/\\1/g,':').replace(/\\0/g,'\\'); }
1120,
1121istype : function (str) {
1122 if (str.length != 4 || str.replace(/[IE][NS][FT][PJ]/i,'*') != '*') {
1123 return false; }
1124 return true; }
1125,
1126/** Messages **/
1127sendTo : function(type,str, chan) {
1128 var chans = [chan];
1129 if (chan == undefined) {
1130 chans = sys.channelIds(); }
1131 for (z in chans) {
1132 var repeat = type.split(':');
1133 for (i in repeat) {
1134 switch (repeat[i]) {
1135 case 'auth':
1136 for (user in players) {
1137 if (sys.auth(user) != 0) {
1138 sys.sendMessage(user,str,chans[z]); }
1139 }
1140 break;
1141 case 'user':
1142 for (user in players) {
1143 if (sys.auth(user) == 0) {
1144 sys.sendMessage(user,str,chans[z]); }
1145 }
1146 break;
1147 case 'user/pass':
1148 for (user in players) {
1149 if (sys.auth(user) == 0 && (server.serverpass == password[user] || server.serverpass != '')) {
1150 sys.sendMessage(user,str,chans[z]); }
1151 }
1152 break;
1153 case 'admin':
1154 for (user in players) {
1155 if (sys.auth(user) == 2 || sys.auth(user) == 5 ) {
1156 sys.sendMessage(user,str,chans[z]); }
1157 }
1158 break;
1159 case 'mod':
1160 for (user in players) {
1161 if (sys.auth(user) == 1 || sys.auth(user) == 4 ) {
1162 sys.sendMessage(user,str,chans[z]); }
1163 }
1164 break;
1165 case 'admin+':
1166 for (user in players) {
1167 if (sys.auth(user) >= 2 && sys.auth(user) != 4 ) {
1168 sys.sendMessage(user,str,chans[z]); }
1169 }
1170 break;
1171 case 'owner':
1172 for (user in players) {
1173 if (sys.auth(user) == 3 || sys.auth(user) == 6 ) {
1174 sys.sendMessage(user,str,chans[z]); }
1175 }
1176 break;
1177 }
1178 }
1179 }
1180 }
1181,
1182beforeChatMessage : function(src, message, chan) {
1183 sys.stopEvent();
1184 players[src].lastaction = sys.time();
1185 if (sys.auth(src) != 0) {
1186 scr.testAuth(src); }
1187 if (message[0] != '/' && message[0] != '!') {
1188 /** Watch **/ {
1189 if (typeof sys.channelId('Watch') != 'undefined' && sys.channelId('Watch') == chan) {
1190 sys.sendMessage(src,'~~Server~~: Error: You can\'t type into #watch.');
1191 return; }
1192 }
1193 /** Hush check **/ {
1194 if (sys.auth(src) < 1 && (channels[0].hush == true || channels[chan].hush == true)) {
1195 sys.stopEvent();
1196 if (typeof(channels[0].hush) != "undefined") {
1197 sys.sendMessage(src, "~~Server~~: The server is hushed."); }
1198 else {
1199 sys.sendMessage(src, "~~Server~~: The channel is hushed."); }
1200 scr.displayMsg("hushed message from " + sys.name(src) + ": " + message);
1201 return; }
1202 }
1203 /** Mute check **/ {
1204 if (server.muted[sys.ip(src)] < sys.time() && server.muted[sys.ip(src)] != 1 && server.muted[sys.ip(src)] != 0) {
1205 delete server.muted[sys.ip(src)]; }
1206 if (typeof server.muted[sys.ip(src)] != 'undefined' && sys.auth(src) == 0) {
1207 sys.sendMessage(src, "~~Server~~: You are muted.");
1208 scr.displayMsg("Muted message from " + sys.name(src) + ": " + message);
1209 return; }
1210 }
1211 /** URL Check **/ {
1212 var test = message;
1213 for (x in server.bannedurls) {
1214 delete rg;
1215 var rg = new RegExp(server.bannedurls[x],"ig");
1216 test = test.replace(rg,''); }
1217 if (test != message) {
1218 sys.sendAll("~~Server~~: User tried to enter a banned URL.");
1219 sys.sendAll("~~Server~~: " + sys.name(src) + "("+sys.ip(src)+ ") was banned for 8 hours by ~~Server~~!");
1220 server.banned[sys.ip(src)] = 28800 + sys.time()*1;
1221 scr.displayMsg(''+sys.name(src)+'tried to say: '+ message);
1222 for (user in players) {
1223 if (sys.ip(src) == sys.ip(user) && sys.auth(user) < 1) {
1224 sys.kick(user); }
1225 }
1226 return; }
1227 }
1228 /** Password Check **/ {
1229 if (server.serverpass != players[src].password && server.serverpass != '' && sys.auth(src) == 0) {
1230 sys.sendMessage(src,'~~Server~~: Please enter the password using /pass password.');
1231 return; }
1232 }
1233 /** Caps Check **/ {
1234 if (server.capscheck) {
1235 try {
1236 var i = message.match(/[A-Z]/g).length;
1237 if (i >= message.length * 1/2 && i >= 4) {
1238 message = message.toLowerCase(); }
1239 }
1240 catch(e) { /* Do Nothing */ }
1241 }
1242 }
1243 /** Swear Check **/ {
1244 if (server.swearfilter) {
1245 var safemsg = scr.clean(message);
1246 if (message != safemsg) {
1247 scr.displayMsg("Filtered message from " + sys.name(src) + ": " + message);
1248 message = safemsg;
1249 scr.floodcounter(src,1); }
1250 /** Evasion Check **/
1251 var emsg = message.replace(/_/g,' ').replace(/ /g,'').replace(/\./g,'').replace(/-/g,'').replace(/!/g,'i').replace(/1/g,'i').replace(/@/g,'a').replace(/\$/g,'s').replace(/0/g,'o');
1252 var emsg2 = scr.clean(emsg);
1253 if (emsg != emsg2) {
1254 if (sys.auth(src) == 0) {
1255 players[src].floodcount = 0;
1256 scr.displayMsg(' Evasion Message: ' + message);
1257 sys.sendAll("~~Server~~: " + sys.name(src) + " was muted for 1 minute by ~~Server~~!");
1258 server.muted[sys.ip(src)] = sys.time()*1 + 60;
1259 sys.sendAll("~~Server~~: Please don't try to circumvent the filter!");
1260 return; }
1261 sys.sendMessage(src,"~~Server~~: Please don't try to circumvent the filter!");
1262 return; }
1263 }
1264 }
1265 /** Anti-noobspeak **/ if (server.antinoobspeak && message.indexOf('http://') == -1) {
1266 { //Filters
1267 message = message.replace(/\bu\b/g,'you');
1268 message = message.replace(/\bth\b/g,'the');
1269 message = message.replace(/\bidk\b/g,'idk');
1270 message = message.replace(/\bteh\b/g,'the');
1271 message = message.replace(/\bnop\b/g,'nope');
1272 message = message.replace(/\bcuz\b/g,'because');
1273 message = message.replace(/\btaht\b/g,'that');
1274 message = message.replace(/\bsho?ud\b/g,'should');
1275 message = message.replace(/\bur\b/g,'you\'re');
1276 message = message.replace(/\brite\b/g,'right');
1277 message = message.replace(/\bliek\b/g,'like');
1278 message = message.replace(/\bthats\b/g,'that\'s');
1279 message = message.replace(/\bi\b/g,'I');
1280 message = message.replace(/\bwat\b/g,'what');
1281 message = message.replace(/\byeh\b/g,'yeah');
1282 message = message.replace(/\br\b/g,'are');
1283 message = message.replace(/\bbtw\b/g,'by the way');
1284 message = message.replace(/\bgtg\b/g,'got to go');
1285 message = message.replace(/\bbrb\b/g,'be right back');
1286 message = message.replace(/\bidk\b/g,'I don\'t know');
1287 message = message.replace(/\batm\b/g,'at the moment');
1288 message = message.replace(/\bbbl\b/g,'be back later');
1289 message = message.replace(/\bive\b/g,'I\'ve');
1290 message = message.replace(/\bpm\b/gi,'PM');
1291 message = message.replace(/\bkk\b/g,'alright');
1292 message = message.replace(/\bgg\b/g,'good game')
1293 message = message.replace(/\bip\b/gi,'IP');
1294 message = message.replace(/\bim\b/g,'I\'m');
1295 message = message.replace(/\bits\b/g,'it\'s');
1296 message = message.replace(/\bill\b/g,'I\'ll');
1297 message = message.replace(/\bdont\b/g,'don\'t');
1298 message = message.replace(/\bwats\b/g,'what\'s');
1299 message = message.replace(/\bdoesnt\b/g,'doesn\'t');
1300 message = message.replace(/\bcant\b/g,'can\'t');
1301 message = message.replace(/\bdidnt\b/g,'didn\'t');
1302 message = message.replace(/\bdoesnt\b/g,'doesn\'t');
1303 message = message.replace(/\bcouldnt\b/g,'couldn\'t');
1304 message = message.replace(/\bisnt\b/g,'isn\'t');
1305 message = message.replace(/\bgud\b/g,'good'); }
1306 if (message.indexOf('.') == -1 && message.indexOf('?') == -1 && message.indexOf('!') == -1 && !(message.search(/[A-Za-z]{3,}/) == -1 && message.length <= 3)) {
1307 message += '.'; }
1308 if (!(message.search(/[A-Za-z]{3,}/) == -1 && message.length <= 3)) {
1309 mstr = message.split('');
1310 mstr[0] = mstr[0].toUpperCase();
1311 message = '';
1312 for (var x in mstr) {
1313 if (mstr[x] == '.' && mstr[x*1+1] == ' ' && typeof mstr[x*1+2] != 'undefined') {
1314 mstr[x*1+2] = mstr[x*1+2].toUpperCase(); }
1315 message = message + mstr[x]; }
1316 }
1317 }
1318 /** Spam check **/ {
1319 if ((message.indexOf('http://') != -1 || message.indexOf('.com') != -1 || message.indexOf('.net') != -1 || message.indexOf('.org') != -1) && (((players[src].oldmsg1 == undefined || players[src].oldmsg2 == undefined) && sys.time()- players[src].logInTime <= 300) || sys.time()- players[src].logInTime <= 15) && !sys.dbRegistered(sys.name(src)) ) {
1320 sys.sendAll("~~Server~~: User tried to post a URL immediately after joining the server.");
1321 sys.sendAll("~~Server~~: " + sys.name(src) + " was muted for 5 minutes by ~~Server~~!");
1322 scr.displayMsg("Muted message from " + sys.name(src) + ": " + message);
1323 server.muted[sys.ip(src)] = sys.time()*1 + 300;
1324 return; }
1325 }
1326 /** Flood Check **/ {
1327 scr.floodcounter(src, 2);
1328 if (message.length <= 7) {
1329 scr.floodcounter(src,1); }
1330 if (message.length >= 100) {
1331 scr.floodcounter(src,1); }
1332 if (typeof players[src].oldmsg1 != 'undefined' && typeof players[src].oldmsg2 != 'undefined') {
1333 if (message.length <= 7) {
1334 scr.floodcounter(src,1); }
1335 if (players[src].oldmsg1 == message || players[src].oldmsg2 == message) {
1336 scr.floodcounter(src,1); }
1337 if (players[src].oldmsg1 == message && players[src].oldmsg2 == message) {
1338 scr.floodcounter(src,4); }
1339 }
1340 else {
1341 scr.floodcounter(src,1); }
1342 if (message.length >= 200) {
1343 scr.floodcounter(src,4); }
1344 if (message.indexOf('http://') != -1 || message.indexOf('.com') != -1 || message.indexOf('.net') != -1 || message.indexOf('.org') != -1) {
1345 scr.floodcounter(src,4); }
1346 if (players[src].floodcount > 20 && sys.auth(src) < 1 && server.protect[sys.ip(src)] == undefined) {
1347 sys.stopEvent();
1348 players[src].floodcount = 0;
1349 sys.sendAll("~~Server~~: User appears to be spamming.");
1350 sys.sendAll("~~Server~~: " + sys.name(src) + " was muted for 5 minutes by ~~Server~~!");
1351 scr.displayMsg("Muted message from " + sys.name(src) + ": " + message);
1352 server.muted[sys.ip(src)] = sys.time()*1 + 300;
1353 return; }
1354 players[src].oldmsg1 = players[src].oldmsg2;
1355 players[src].oldmsg2 = message;
1356 }
1357 /** Pastebin Check**/ {
1358 if (message.length >= 400) {
1359 sys.sendMessage(src,'~~Server~~: Your message was blocked, it was too long. Please use pastebin.com instead and post a link to the paste.');
1360 return; }
1361 }
1362 /** Unicode Check **/ if (server.autofix) {
1363 message = message.replace(/=\/=/gi,'\u2260').replace(/>=/gi,'\u2265').replace(/<=/gi,'\u2264').replace(/<=/gi,'\u2264').replace(/~=/gi,'\u2248').replace(/\(tm\)/gi,'\u2122').replace(/\(r\)/gi,'\u00ae').replace(/\(c\)/gi,'\u00a9').replace(/\(c\/\)/gi,'\u00a2').replace(/\(mul\)/gi,'\u00d7').replace(/-->/gi,'\u2192').replace(/->/gi,'\u2192').replace(/<--/gi,'\u2190').replace(/<-/gi,'\u2190').replace(/\(male\)/gi,'\u2642').replace(/\(female\)/gi,'\u2640').replace(/\.\.\./gi,'\u2026').replace(/--/gi,'\u2212').replace(/\[\]/gi,'\u25a1').replace(/\[\*\]/gi,'\u25a0').replace(/\(\*\)/gi,'\u25cf').replace(/<>/gi,'\u2666').replace(/>{3/gi,'\u2663').replace(/<}</gi,'\u2660').replace(/>{>/gi,'\u2660').replace(/<3/gi,'\u2665');
1364 }
1365 /** Icon Set **/ {
1366 var rankico = '';
1367 switch (server.ranktype) {
1368 case 0:
1369 rankico = '-';
1370 if (sys.auth(src) == 1) {
1371 rankico = '+'; }
1372 if (sys.auth(src) == 2 || sys.auth(src) == 3) {
1373 rankico = '~'; }
1374 break;
1375 case 1:
1376 rankico = '\u2212';
1377 if (sys.auth(src) == 1) {
1378 rankico = '='; }
1379 if (sys.auth(src) == 2 || sys.auth(src) == 3) {
1380 rankico = '\u2261'; }
1381 break;
1382 case 2:
1383 rankico = '\u2212';
1384 if (sys.auth(src) == 1) {
1385 rankico = '~'; }
1386 if (sys.auth(src) == 2 || sys.auth(src) == 3) {
1387 rankico = '\u2248'; }
1388 break;
1389 case 3:
1390 rankico = '\u2666';
1391 if (sys.auth(src) == 1) {
1392 rankico = '\u2665'; }
1393 if (sys.auth(src) == 2 ) {
1394 rankico = '\u2663'; }
1395 if (sys.auth(src) == 3 ) {
1396 rankico = '\u2660'; }
1397 break;
1398 case 4:
1399 rankico = '+';
1400 if (sys.auth(src) == 1) {
1401 rankico = '%'; }
1402 if (sys.auth(src) == 2 ) {
1403 rankico = '@'; }
1404 if (sys.auth(src) == 3 ) {
1405 rankico = '~'; }
1406 break;
1407 case 5:
1408 rankico = '\u2212';
1409 if (sys.auth(src) == 1) {
1410 rankico = '='; }
1411 if (sys.auth(src) == 2 ) {
1412 rankico = '\u2260'; }
1413 if (sys.auth(src) == 3 ) {
1414 rankico = '\u266f'; }
1415 break;
1416 case 6:
1417 rankico = '\u2212';
1418 if (sys.auth(src) == 1) {
1419 rankico = '+'; }
1420 if (sys.auth(src) == 2 ) {
1421 rankico = '~'; }
1422 if (sys.auth(src) == 3 ) {
1423 rankico = '\u2248'; }
1424 break;
1425 }
1426 var hasicon = false;
1427 for (x in server.iconusers) {
1428 if (sys.name(src).toLowerCase() == server.iconusers[x].toLowerCase()) {
1429 hasicon = true; }
1430 }
1431 if (hasicon) {
1432 rankico = (sys.auth(src) == 0 || sys.auth(src) >= 4 )?server.specialicon:server.specialicon+rankico; }
1433 if (players[src].hyperMode == true && sys.auth(src) != 0) {
1434 rankico = '*** ' + rankico; }
1435 }
1436 /** Message Build + Send **/ {
1437 var fullstr = rankico + sys.name(src) +': ' + message;
1438 scr.displayMsg('[#'+sys.channel(chan) + '] ' + fullstr);
1439 if (sys.channel(chan).toLowerCase() == 'treechan') {
1440 fullstr = rankico + players[src].keystr +': ' + message; }
1441 var c = sys.playersOfChannel(chan);
1442 if (players[src].hyperMode == true && sys.auth(src) != 0) {
1443 sys.sendAll(fullstr); }
1444 else {
1445 if (sys.channelId('watch') != undefined) {
1446 sys.sendAll('[#'+sys.channel(chan)+'] '+fullstr,sys.channelId('watch')); }
1447 for (var x in c) {
1448 if (server.serverpass == players[c[x]].password || server.serverpass == '' || sys.auth(c[x]) > 0) {
1449 sys.sendMessage(c[x],fullstr,chan); }
1450 }
1451 }
1452 if (chan == 0 || (players[src].hyperMode == true && sys.auth(src) != 0)) {
1453 var x = 0;
1454 while (x <= 8) {
1455 if (x != 8) {
1456 if (typeof server.recent[x+1] != 'undefined') {
1457 server.recent[x] = server.recent[x+1]; }
1458 }
1459 else {
1460 server.recent[8] = fullstr; }
1461 x++;
1462 }
1463 }
1464 }
1465 /** if (message.match(/what/gi) != undefined && message.match(/sub\-? ?uber/gi) != undefined) {
1466 sys.callLater("sys.sendAll('~~Server~~: Sub-Uber is a tier for the weak uber pokemon like Deoxys-D and Manaphy.',"+chan+");",1); }
1467 if (message.match(/what/gi) != undefined && message.match(/elite/gi) != undefined ) {
1468 sys.callLater("sys.sendAll('~~Server~~: Elite tier is the same as Uber except that Arcues is banned.',"+chan+");",1); }
1469 if (message.match(/what/gi) != undefined && message.match(/special/gi) != undefined) {
1470 sys.callLater("sys.sendAll('~~Server~~: Special tier is the same as OverUsed except that entry hazards and weather pokemon are banned.',"+chan+");",1); }
1471 if (message.match(/what/gi) != undefined && message.match(/standard/gi) != undefined) {
1472 sys.callLater("sys.sendAll('~~Server~~: Standard tier is the same as OverUsed except that Breloom, Jirachi, and Blissey are banned.',"+chan+");",1); } **/
1473 return; }
1474 /** Commands **/
1475 if (message[0] == '/' || message[0] == '!') {
1476 /** Command Core **/ {
1477 scr.displayMsg("Command -- " + sys.name(src) + ": " + message);
1478 sys.stopEvent();
1479 var command;
1480 var commandData;
1481 var pos = message.indexOf(' ');
1482 var mcmd = new Array();
1483 if (pos != -1) {
1484 command = message.substring(1, pos).toLowerCase();
1485 commandData = message.substr(pos+1);
1486 mcmd = commandData.split(':'); }
1487 else
1488 { command = message.substr(1).toLowerCase(); }
1489 var tar = sys.id(mcmd[0]); }
1490 /** User Commands **/ {
1491 /** Various **/ {
1492 if (command == 'help') {
1493 if (mcmd[0] != undefined) {
1494 mcmd[0] = mcmd[0].toLowerCase(); }
1495 switch (mcmd[0]) {
1496 case undefined:
1497 case '':
1498 case ' ':
1499 sys.sendMessage(src,'~~Server~~: Help variants:');
1500 sys.sendMessage(src,'/help pokemon: What is pokemon?');
1501 sys.sendMessage(src,'/help update: How to update?');
1502 sys.sendMessage(src,'/help 5thgen: Awesomeness.');
1503 sys.sendMessage(src,'/help advanced: How do I not get pwnd so much?');
1504 sys.sendMessage(src,'/help client: Help with using the client, building teams and etc.');
1505 sys.sendMessage(src,'/help challengecup: What is Challenge Cup?');
1506 sys.sendMessage(src,'/help tiers: Explanation of the basic tiers.');
1507 sys.sendMessage(src,'/help clauses: Explanation of the tiers.');
1508 sys.sendMessage(src,'/help server: Help on starting your own server.');
1509 sys.sendMessage(src,'/help script: How to get these scripts for your own server.');
1510 sys.sendMessage(src,'/help scripting: How to write your own scripts.');
1511 if (server.help) {
1512 sys.sendMessage(src,'/help helper: Ask a staff member to contact you.'); }
1513 return;
1514 case 'pokemon':
1515 sys.sendMessage(src,'~~Server~~: Pokemon is a turn based game where players select moves and pokemon.');
1516 sys.sendMessage(src,'URL: http://en.wikipedia.org/wiki/Pokemon');
1517 return;
1518 case 'advanced':
1519 sys.sendMessage(src,'~~Server~~: Competitive Pokemon is a bit confusing at first, I recommend you view the following links to get started.');
1520 sys.sendMessage(src,'URL: http://steve.dynalias.net/po/pokestats/OverUsed/index.html')
1521 sys.sendMessage(src,'URL: http://smogon.com/');
1522 return;
1523 case 'client':
1524 sys.sendMessage(src,'~~Server~~: Use ctrl+T to open the teambuilder. EVs, and abilities are in the "advanced" window. For more assistance use the below link.');
1525 sys.sendMessage(src,'URL: http://pokemon-online.eu/forums/forumdisplay.php?16-Help');
1526 return;
1527 case 'challengecup':
1528 case 'challenge cup':
1529 sys.sendMessage(src,'~~Server~~: Challenge Cup is where you are given random pokemon, there are no tiers as all pokemon are giving according levels, so a Kyogre will be a much lower level than a Skorupi.');
1530 sys.sendMessage(src,'URL: http://pokemon-online.eu/forums/forumdisplay.php?16-Help');
1531 return;
1532 case 'update':
1533 sys.sendMessage(src,'~~Server~~: Download the update here, geeks can use GIT if they want.');
1534 sys.sendMessage(src,'URL: http://pokemon-online.eu/downloads.php');
1535 sys.sendMessage(src,'GIT: git://pogeymon-online.git.sourceforge.net/gitroot/pogeymon-online/pogeymon-online');
1536 return;
1537 case 'clauses':
1538 sys.sendMessage(src,'~~Server~~: The basic tiers are designed by Smogon.');
1539 sys.sendMessage(src,'~~Server~~: Sleep caluse: You can only force 1 opponent to sleep at a time. Freeze: Same but for freeze. OHKO: These moves can not be used. Evasion: Evasion moves can not be used. Spects: No one can watch your battle unless they have authority. Item: You can only have 1 of each item. Challenge Cup: Type /help challengecup . No Timeout: Time limit is removed. Species: You can only have 1 of each pokemon.');
1540 sys.sendMessage(src,'URL: http://smogon.com/');
1541 case 'tiers':
1542 sys.sendMessage(src,'~~Server~~: The basic tiers are designed by Smogon.');
1543 sys.sendMessage(src,'URL: http://smogon.com/');
1544 return;
1545 case 'server':
1546 sys.sendMessage(src,'~~Server~~: In order to start a server you need to download the files and open a port. (not for noobs)');
1547 sys.sendMessage(src,'URL: http://pokemon-online.eu/downloads.php'); //http://lmgtfy.com/?q=how+to+open+a+router+port
1548 sys.sendMessage(src,'URL: http://lmgtfy.com/?q=how+to+open+a+router+port');
1549 sys.sendMessage(src,'GIT: git://pogeymon-online.git.sourceforge.net/gitroot/pogeymon-online/pogeymon-online (for linux users, and geeks)');
1550 return;
1551 case 'script':
1552 case 'scripts':
1553 eval("var akey = ["+"'@','<','>','gm"+"ail','.co"+"m'];"); // Making something really simple unusually complex so automated robots can't figure out my email.
1554 sys.sendMessage(src,'~~Server~~: If you want these scripts, email ' +akey[1]+ 'master.astruvis' + akey[0] + akey[3] + akey[4] + akey[2]);
1555 return;
1556 case 'scripting':
1557 sys.sendMessage(src,'~~Server~~: To write your own scripts, learn JavaScript(as it is very similar) then read up on the script doumantations.'); //
1558 sys.sendMessage(src,'URL: http://www.w3schools.com/js/default.asp');
1559 sys.sendMessage(src,'URL: http://pokemon-online.eu/forums/forumdisplay.php?13-Scripts');
1560 return;
1561 case '5thgen':
1562 sys.sendMessage(src,'~~Server~~: You can download the 5th gen client here, but you can\'t battle with it, though you can build teams:');
1563 sys.sendMessage(src,'URL: http://pokemon-online.eu/files/Pokemon-Online-Setup2.exe');
1564 sys.sendMessage(src,'~~Server~~: Smogon 5th gen forum:');
1565 sys.sendMessage(src,'URL: http://www.smogon.com/forums/forumdisplay.php?f=144');
1566 return;
1567 case 'helper':
1568 if (!server.help) {
1569 break; }
1570 scr.sendTo('auth','*** ~~Server~~: ' +sys.name(src) + ' has requested help.');
1571 sys.sendMessage(src,'~~Server~~: Help request sent!');
1572 return;
1573 }
1574 sys.sendMessage(src,'~~Server~~: The help sub-command "' +mcmd[0] + '" does not exist.');
1575 return; }
1576 if (command == 'dex') {
1577 if (mcmd[0] != undefined) {
1578 mcmd[0] = mcmd[0].toLowerCase(); }
1579 switch (mcmd[0]) {
1580 case 'list':
1581 case 'help':
1582 sys.sendMessage(src,"~~Dex~~: NOTE: Some features not yet implemented!");
1583 sys.sendMessage(src,'~~Server~~: Dex Commands:');
1584 sys.sendMessage(src,'/dex: Follow with the name of a pokemon. Ex: /dex Mudkip .');
1585 sys.sendMessage(src,'/dex ability: Ability information. Ex. /dex ability:Plus');
1586 sys.sendMessage(src,'/dex move: Moves informaiton.');
1587 sys.sendMessage(src,'/dex nature: Nature information');
1588 sys.sendMessage(src,'/dex tower: Tower info.');
1589 sys.sendMessage(src,'/dex about: About this.');
1590 return;
1591 case 'pokemon':
1592 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command='+mcmd[1], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1593 return;
1594 case 'ability':
1595 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command=ability¶meter=' + mcmd[1], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1596 return;
1597 case 'move':
1598 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command=move¶meter=' + mcmd[1], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1599 return;
1600 case 'nature':
1601 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command=nature¶meter=' + mcmd[1], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1602 return;
1603 case 'tower':
1604 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command=tower¶meter=' + mcmd[1], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1605 return;
1606 case 'about':
1607 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command=about', 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1608 return;
1609 default:
1610 sys.webCall('http://www.snapperthetwig.com/poke/dex.php?command='+mcmd[0], 'sys.sendMessage('+src+',"~~Dex~~: " + resp)');
1611 return;
1612 }
1613 sys.sendMessage(src,'~~Server~~: The dex sub-command "' +mcmd[0] + '" does not exist.');
1614 return; }
1615 if (command == 'tourwinners') {
1616 sys.sendMessage(src,'~~Server~~: Tournament winners:');
1617 server.tourwinners = scr.sortHash(server.tourwinners);
1618 var i = 0;
1619 for ( var x in server.tourwinners ) {
1620 sys.sendMessage(src,x + ' - ' + server.tourwinners[x]);
1621 i++;
1622 if (i >= 25) {
1623 sys.sendMessage(src,'~~Server~~: There were more winners, but to keep the list size down, only the top 25 have been shown.');
1624 return; }
1625 }
1626 return; }
1627 if (command == "seen" && server.allowseen) {
1628 if (sys.dbIp(mcmd[0]) == undefined) {
1629 sys.sendMessage(src,'~~Server~~: No user by that name.');
1630 return; }
1631 if (server.names[sys.dbIp(mcmd[0])] != undefined) {
1632 sys.sendMessage(src,'~~Server~~: ' +mcmd[0].toLowerCase() + ' was last seen on ' + sys.dbLastOn(server.names[sys.dbIp(mcmd[0])]) + ' as ' +server.names[sys.dbIp(mcmd[0])] + '.');
1633 return; }
1634 else {
1635 sys.sendMessage(src,'~~Server~~: No user by that name.');
1636 return;}
1637 return; }
1638 if (command == "v" || command == "version") {
1639 sys.sendMessage(src,'~~Server~~: Scripts v6.0a by Astruvis/Ixion <master.astruvis@gmail.com>. Step Event credit Coyotte508. Dex command credit to SnapperTheTwig and nobue.');
1640 return; }
1641 if (command == "stats" || command == "stat") {
1642 var winratio = Math.round(players[src].pwin / (players[src].plose+players[src].pwin) * 100);
1643 if (isNaN(winratio)) {
1644 winratio = '??'; }
1645 sys.sendMessage(src,'~~Server~~: Your stats this session; Wins: ' + players[src].pwin + '; Losses: ' + players[src].plose + '; Ties: ' + players[src].ptie + '; Win/Lose Ratio: '+winratio+'%.');
1646 return; }
1647 if (command == "rule" || command == "rules") {
1648 for (x in rule) {
1649 sys.sendMessage(src,'~~Server~~: Rule #'+x+': ' + rule[x]); }
1650 return; }
1651 if (command == "vote") {
1652 if (server.pollmode == 0) {
1653 sys.sendMessage(src,'~~Server~~: Error, no poll open.');
1654 return; }
1655 if (isNaN(mcmd[0]*1)) {
1656 sys.sendMessage(src,'~~Server~~: Error, please use /vote option (where option is a number.)');
1657 return; }
1658 server.pollvotes[sys.ip(src)] = mcmd[0]*1;
1659 sys.sendMessage(src,'~~Server~~: Your vote was added!');
1660 return; }
1661 }
1662 /** Password **/{
1663 if (command == "pass" || command == "password") {
1664 if (server.serverpass == '') {
1665 sys.sendMessage(src,'~~Server~~: The server is not password protected.');
1666 scr.displayMsg('CMD ERROR: No password on server.');
1667 return; }
1668 players[src].password = commandData;
1669 if (server.serverpass != players[src].password) {
1670 sys.sendMessage(src,'~~Server~~: Bad password, please enter the password using /pass password.');
1671 scr.displayMsg('CMD ERROR: Wrong Password.'); }
1672 else {
1673 sys.sendAll('~~Server~~: '+sys.name(src)+' has joined!'); }
1674 return; }
1675 }
1676 /** Mail **/ {
1677 if (command == "sendmail" || command == "smail" || command == "mail") {
1678 var mail;
1679 if (mcmd[1] == undefined) {
1680 sys.sendMessage(src, "~~MailBox~~: Error: No content! Message was not sent!");
1681 scr.displayMsg('CMD ERROR: No content.');
1682 return; }
1683 mail = mcmd[1];
1684 if (mail.indexOf('+') == -1) {
1685 scr.writeRegVal('msgque' + mcmd[0].toLowerCase(),scr.readRegVal('msgque' + mcmd[0].toLowerCase()) + ' + Message from ' + sys.name(src) + ": " + mail);
1686 var rcv = sys.id(mcmd[0]);
1687 sys.sendMessage(src, "~~MailBox~~: Message sent to user " + mcmd[0] + "!");
1688 if (rcv != undefined) {
1689 sys.sendMessage(rcv,"~~MailBox~~: New message, type /readmail to view your inbox.");
1690 if (sys.away(rcv) == true || players[rcv].inBattle == true) {
1691 players[rcv].mailWait = true; }
1692 }
1693 } else {
1694 sys.sendMessage(src, "~~MailBox~~: Error: The + symbol can not be used in mail! Message was not sent!");
1695 scr.displayMsg('CMD ERROR: Illegal Content.'); }
1696 return; }
1697 if (command == "readmail" || command == "rmail") {
1698 var msg = new Array();
1699 msg = scr.readRegVal('msgque' + sys.name(src).toLowerCase()).split('+');
1700 var length = (scr.readRegVal('msgque' + sys.name(src).toLowerCase()).split('+').length - 1);
1701 sys.sendMessage(src,'~~MailBox~~: Here are your messages:');
1702 for (i = 1; i <= length; i++) {
1703 sys.sendMessage(src,msg[i]); }
1704 sys.sendMessage(src,'~~MailBox~~: End of messages.');
1705 sys.sendMessage(src,'~~MailBox~~: Use /deletemail to clear your inbox. Use "/sendmail USERNAME:MESSAGE" to send a message to another user.');
1706 return; }
1707 if (command == "deletemail" || command == "dmail") {
1708 scr.deleteRegVal('msgque' + sys.name(src).toLowerCase());
1709 sys.sendMessage(src, "~~MailBox~~: Mail deleted!");
1710 return; }
1711 }
1712 /** Lists **/ {
1713 if (command == "list" || command == "stafflist" || command == "modlist" || command == "l") {
1714 if (sys.auth(src) >= 1) {
1715 for (user in players) {
1716 if (sys.auth(user) >= 1) {
1717 sys.sendMessage(src,'~~Server~~: Online staff member ' + sys.name(user) + ' is ' +server.rank[sys.auth(user)] + '.'); }
1718 }
1719 }
1720 else {
1721 for (user in players) {
1722 if (sys.auth(user) >= 1 && sys.auth(user) < 4) {
1723 sys.sendMessage(src,'~~Server~~: Online staff member ' + sys.name(user) + ' is ' +server.rank[sys.auth(user)]+ '.'); }
1724 }
1725 }
1726 return; }
1727 if (command == "commands" || command == "command" || command == "cmdlist") {
1728 sys.sendMessage(src,"~~Server~~: Here are the commands:");
1729 sys.sendMessage(src,"\u25cf: /cmdlist: Lists commands.");
1730 sys.sendMessage(src,"\u25cf: /dex list: Information on pokemon.");
1731 sys.sendMessage(src,"\u25cf: /sendmail user:message: Sends mail to another player.");
1732 sys.sendMessage(src,"\u25cf: /readmail: Shows your mail.");
1733 sys.sendMessage(src,"\u25cf: /deletemail: Deletes all your mail.");
1734 sys.sendMessage(src,"\u25cf: /list: Lists online staff members.");
1735 sys.sendMessage(src,"\u25cf: /pass password: Allows you to join a password protected server if you know the password.");
1736 sys.sendMessage(src,"\u25cf: /vote [option]: Option should be a number, when there is a poll(ex for \"option #2: Yes\", type /vote 2).");
1737 sys.sendMessage(src,"\u25cf: /join: Allows you to join a tournament.");
1738 sys.sendMessage(src,"\u25cf: /help: Get help, type /help for a list of help topics and follow the prompts.");
1739 sys.sendMessage(src,"\u25cf: /leave: Allows you to quit a tournament.");
1740 sys.sendMessage(src,"\u25cf: /viewround: Allows you to view a tournament round pairings.");
1741 sys.sendMessage(src,"\u25cf: /tourwinners: All time winners of tournaments.");
1742 sys.sendMessage(src,"\u25cf: /version: Allows you to view the scripts version.");
1743 sys.sendMessage(src,"\u25cf: /[same|any]tier: Allows you to stop challenges from other tiers.");
1744 sys.sendMessage(src,"\u25cf: /rules: Shows you the rules.");
1745 sys.sendMessage(src,"\u25cf: /stats: Shows you yours stats this login.");
1746 if (server.allowseen) {
1747 sys.sendMessage(src,"\u25cf: /seen user: Checks when a user was last online."); }
1748 if (sys.auth(src) == 0 && server.tourmasters[sys.name(src).toLowerCase()] != undefined) {
1749 sys.sendMessage(src,"~~Server~~: Tour-Master Commands:");
1750 sys.sendMessage(src,"\u25cf: /newtour tier:players: Creates a tournament of a tier with a number of players.");
1751 sys.sendMessage(src,"\u25cf: /endtour: Allows you to end a tournament.");
1752 sys.sendMessage(src,"\u25cf: /setsize size: Allows you to change the size of the tournament when in signups.");
1753 sys.sendMessage(src,"\u25cf: /newround: Move to the next round.");
1754 sys.sendMessage(src,"\u25cf: /add player: Adds a user to the tournament.");
1755 sys.sendMessage(src,"\u25cf: /remove player: Allows you to remove a player.");
1756 sys.sendMessage(src,"\u25cf: /replace newplayer:oldplayer: Allows you to replace oldplayer in the tournament with newplayer.");
1757 }
1758 if (sys.auth(src) >= 1) {
1759 sys.sendMessage(src,"~~Server~~: Moderator Commands:");
1760 sys.sendMessage(src,"\u25cf: /banlist: List of banned users.");
1761 sys.sendMessage(src,"\u25cf: /mutelist: List of muted users.");
1762 sys.sendMessage(src,"\u25cf: /info user: Gives various information about a user.");
1763 sys.sendMessage(src,"\u25cf: /write user:note: Writes a note to a users account.");
1764 sys.sendMessage(src,"\u25cf: /read user: Reads notes from a users account.");
1765 sys.sendMessage(src,"\u25cf: /delete user: Removes notes from a users account.");
1766 sys.sendMessage(src,"\u25cf: /[un]mute user:time:unit: Bans a user for time units, time must be a number, and unit must be a unit of time.");
1767 sys.sendMessage(src,"\u2666: Note: When unmuting, putting in a time does nothing.");
1768 sys.sendMessage(src,"\u2666: Note: You do not have to input a time or unit, it will be 5 minutes by deafault. /mute user:forever also works.");
1769 sys.sendMessage(src,"\u25cf: /[un]ban user:time:unit: Bans a user for time units, time must be a number, and unit must be a unit of time.");
1770 sys.sendMessage(src,"\u2666: Note: You do not have to input a time or unit, it will be 1 hour by deafault.");
1771 if (sys.auth(src) == 1 || sys.auth(src) == 4) {
1772 sys.sendMessage(src,"\u2666: Note: Moderators can only ban for 8 hours."); }
1773 sys.sendMessage(src,"\u2666: Note: When unbanning, putting in a time does nothing.");
1774 sys.sendMessage(src,"\u25cf: /[super]kick user: Kicks a user from the chat. When superkicking, all alts are kicked.");
1775 sys.sendMessage(src,"\u25cf: /[un]hush: Stops all users from talking.");
1776 sys.sendMessage(src,"\u25cf: /[un]stop: Prevents all user from entering battles.");
1777 sys.sendMessage(src,"\u25cf: /[in]visible: Causes server.rank not to show and commands to become mysterious.");
1778 sys.sendMessage(src,"\u25cf: /[de]hyper: Causes your messages to become alerts.");
1779 sys.sendMessage(src,"\u25cf: /getpass: Shows you the server password.");
1780 sys.sendMessage(src,"\u25cf: /warn[all] [number|all]: Warn a user or all the users in the chat about a rule, or all the rules at once.");
1781 sys.sendMessage(src,"\u25cf: /newtour tier:players: Creates a tournament of a tier with a number of players.");
1782 sys.sendMessage(src,"\u25cf: /endtour: Allows you to end a tournament.");
1783 sys.sendMessage(src,"\u25cf: /setsize size: Allows you to change the size of the tournament when in signups.");
1784 sys.sendMessage(src,"\u25cf: /newround: Move to the next round.");
1785 sys.sendMessage(src,"\u25cf: /add player: Adds a user to the tournament.");
1786 sys.sendMessage(src,"\u25cf: /remove player: Allows you to remove a player.");
1787 sys.sendMessage(src,"\u25cf: /replace newplayer:oldplayer: Allows you to replace oldplayer in the tournament with newplayer.");
1788 sys.sendMessage(src,"\u25cf: /setmaster user: Give a user tournament powers.");
1789 sys.sendMessage(src,"\u25cf: /removemaster user: Remove a user\'s tournament powers.");
1790 }
1791 if (sys.auth(src) >= 2 && sys.auth(src) != 4) {
1792 sys.sendMessage(src,"~~Server~~: Admin Commands:");
1793 sys.sendMessage(src,"\u25cf: /[set|remove]pass: Sets a password on the server.");
1794 sys.sendMessage(src,"\u25cf: /[set|remove]limit: Sets a limit on the number of users allowed server, moderators are unaffected");
1795 sys.sendMessage(src,"\u25cf: /[de]restrict: Removes non-staff from the server and prevents them from joining.");
1796 sys.sendMessage(src,"\u25cf: /[de]protect user: Protected user can not be kicked, muted, blocked, or banned.");
1797 sys.sendMessage(src,"\u25cf: /[de]auth user: Gives/removes moderator status.");
1798 sys.sendMessage(src,"\u2666: Note: Can also be temporary.");
1799 sys.sendMessage(src,"\u25cf: /create name: Creates a permanent channel.");
1800 sys.sendMessage(src,"\u25cf: /destroy name: Destroys a channel.");
1801 sys.sendMessage(src,"\u25cf: /[un]lock: Prevent unregistered users from joining.");
1802 sys.sendMessage(src,"\u25cf: /s-kick user: Kicks a user without a message.");
1803 sys.sendMessage(src,"\u25cf: /s-[un]mute user: Mutes a user without a message.");
1804 sys.sendMessage(src,"\u25cf: /s-[un]ban user: Bans a user without a message."); }
1805 if (sys.auth(src) == 3 || sys.auth(src) == 6) {
1806 sys.sendMessage(src,"~~Server~~: Owner Commands:");
1807 sys.sendMessage(src,"\u25cf: /run code: Runs javascript code");
1808 sys.sendMessage(src,"\u25cf: /eval code: Runs javascript code and shows the result.");
1809 sys.sendMessage(src,"\u25cf: /reload: Reloads scripts from file.");
1810 sys.sendMessage(src,"\u25cf: /ping: Spam everyone.");
1811 sys.sendMessage(src,"\u25cf: /[de]admin: Sets or removes admin status."); }
1812 sys.sendMessage(src,"~~Server~~: End of list.");
1813 return; }
1814 }
1815 /** Tournament **/ {
1816 if (command == "join" || command == "jointour") {
1817 if (players[src].inBattle == true) {
1818 sys.sendMessage(src,'~~Server~~: Quit your battle first!');
1819 return; }
1820 if (server.tourtier.toLowerCase() != sys.tier(src).toLowerCase()) {
1821 sys.sendMessage(src,'~~Server~~: Select the right tier!');
1822 return; }
1823 switch(scr.joinTour(src)) {
1824 case 0:
1825 sys.changeAway(src,false);
1826 break;
1827 case 1:
1828 sys.sendMessage(src,'~~Server~~: The tournament is not in the signups!');
1829 break;
1830 case 2:
1831 sys.sendMessage(src,'~~Server~~: An account with your IP is already in the tournament!');
1832 break; }
1833 return; }
1834 if (command == "round" || command == "viewround" || command == "match" || command == "matches" || command == "viewmatches") {
1835 switch(scr.displayMatchesTo(src)) {
1836 case 0:
1837 break;
1838 case 1:
1839 sys.sendMessage(src,'~~Server~~: The tournament is not running!');
1840 break; }
1841 return; }
1842 if (command == "leave" || command == "quit") {
1843 if (server.tourmode == 0) {
1844 sys.sendMessage(src,'~~Server~~: There isn\'t a tournament to leave!'); }
1845 if (scr.existsIn(src,server.tourarray1) || scr.existsIn(src,server.tourarray2) || scr.existsIn(src,server.tourmembersinput)) {
1846 sys.sendAll('~~Server~~: ' +sys.name(src) + ' has left the tournament!'); }
1847 else {
1848 sys.sendMessage(src,'~~Server~~: You aren\'t in the tournament!'); }
1849 scr.dqTour(src);
1850 if (scr.checkComplete() && server.tourmode == 2) {
1851 scr.newRound(); }
1852 return; }
1853 /** Clause **/
1854 if (command == "sametier") {
1855 players[src].sametier = true;
1856 sys.sendMessage(src,'~~Server~~: You are now in same tier mode.');
1857 return; }
1858 if (command == "alltier" || command == "alltiers" || command == "anytiers" || command == "anytier") {
1859 players[src].sametier = false;
1860 sys.sendMessage(src,'~~Server~~: You are now in all tiers mode.');
1861 return; }
1862 }
1863 }
1864 /** TourMaster Commands **/ {
1865 if (sys.auth(src) == 0 && typeof server.tourmasters[sys.name(src).toLowerCase()] == 'undefined') {
1866 sys.sendMessage(src, "~~Server~~: The command " + command + " can not be used by normal users or does not exist.");
1867 scr.displayMsg('CMD ERROR: Forbidden or does not exist.');
1868 return; }
1869 if (command == 'newtour' || command == 'tour') {
1870 if (isNaN(mcmd[1]) || typeof mcmd[0] == 'undefined' || mcmd[1] <= 3) {
1871 sys.sendMessage(src,'~~Server~~: Invalid arguments.');
1872 return; }
1873 switch (scr.createTour(mcmd[1],mcmd[0])) {
1874 case 0:
1875 if (server.fancytour) {
1876 sys.sendAll('');
1877 sys.sendAll(''); }
1878 sys.sendAll(((server.fancytour)?'*** ':'') +'~~Server~~: New '+mcmd[1]*1+' player '+mcmd[0]+' tournament started by ' + sys.name(src) + '!');
1879 sys.sendAll(((server.fancytour)?'*** ':'') +'~~Server~~: Type /join to participate in the tournament!');
1880 if (server.fancytour) {
1881 sys.sendAll('');
1882 sys.sendAll(''); }
1883 break;
1884 case 1:
1885 sys.sendMessage(src,'~~Server~~: A tournament is already running!');
1886 break; }
1887 return; }
1888 if (command == 'endtour' || command == 'stoptour') {
1889 switch (scr.stopTour()) {
1890 case 0:
1891 sys.sendAll('~~Server~~: The tournament was canceled by '+sys.name(src)+'!');
1892 break;
1893 case 1:
1894 sys.sendMessage(src,'~~Server~~: A tournament is not running.');
1895 break; }
1896 return; }
1897 if (command == 'newround' || command == 'forceround') {
1898 if (server.tourmode == 0) {
1899 sys.sendMessage(src,'~~Server~~: There isn\'t a tournament!');
1900 return; }
1901 sys.sendAll('~~Server~~: The tournament was forced into the next round by '+sys.name(src)+'!');
1902 scr.newRound();
1903 return; }
1904 if (command == 'dq' || command == 'disqualify' || command == 'remove') {
1905 var memberstodq = commandData.split(':');
1906 for (x in memberstodq) {
1907 if (typeof tar == 'undefined') {
1908 sys.sendMessage(src,'~~Server~~: User does not exist.'); }
1909 var user = sys.id(memberstodq[x]);
1910 if (scr.existsIn(user,server.tourarray1) || scr.existsIn(user,server.tourarray2) || scr.existsIn(user,server.tourmembersinput)) {
1911 sys.sendAll('~~Server~~: ' +sys.name(user) + ' was removed from the tournament by '+sys.name(src)+'!'); }
1912 else {
1913 sys.sendMessage(src,'~~Server~~: That user is not in the tournament!'); }
1914 scr.dqTour(user); }
1915 if (scr.checkComplete() && server.tourmode == 2) {
1916 scr.newRound(); }
1917 return; }
1918 if (command == 'toursize' || command == 'tournum' || command == 'setsize') {
1919 if (server.tourmode != 1) {
1920 sys.sendMessage(src,'~~Server~~: Tournaments are past signups!');
1921 return; }
1922 if (isNaN(mcmd[0]) || mcmd[0] < scr.arrayUnits(server.tourmembersinput)) {
1923 sys.sendMessage(src,'~~Server~~: Invalid or impossible resize, '+ scr.arrayUnits(server.tourmembersinput) + ' players have already joined.');
1924 return; }
1925 server.tournumber = mcmd[0];
1926 sys.sendAll('~~Server~~: The size of the tournament was changed to ' + mcmd[0]*1 + '.');
1927 if (server.tournumber == scr.arrayUnits(server.tourmembersinput)) {
1928 scr.newRound(); }
1929 return; }
1930 if (command == 'add' || command == 'addtotour' || command == 'insert') {
1931 if (server.tourmode == 0) {
1932 sys.sendMessage(src,'~~Server~~: Tournament is not running!');
1933 return; }
1934 if (typeof tar == 'undefined') {
1935 sys.sendMessage(src,'~~Server~~: User does not exist.');
1936 return; }
1937 switch (scr.addToTour(tar)) {
1938 case 0:
1939 sys.sendAll('~~Server~~: '+ sys.name(tar) + ' was added to the tournament by ' + sys.name(src) + '!');
1940 break;
1941 case 1:
1942 sys.sendMessage(src,'~~Server~~: You shouldn\'t see this! (error:1155)');
1943 break;
1944 case 2:
1945 sys.sendMessage(src,'~~Server~~: User is already in the tournament!');
1946 break; }
1947 return; }
1948 if (command == 'switch' || command == 'swap' || command == 'replace') {
1949 if (sys.id(mcmd[0]) == undefined || sys.id(mcmd[1]) == undefined) {
1950 sys.sendMessage(src,'~~Server~~: Error: Both targets must be online!');
1951 return; }
1952 if (scr.existsIn(sys.id(mcmd[1]),server.tourarray1) && scr.existsIn(sys.id(mcmd[0]),server.tourarray1) == false && scr.existsIn(sys.id(mcmd[0]),server.tourarray2) == false && scr.existsIn(sys.id(mcmd[0]),server.tourmembersinput) == false) {
1953 sys.sendAll('~~Server~~: '+sys.name(src)+' switched '+scr.caps(mcmd[0])+' with ' +scr.caps(mcmd[1])+' in the tournament!');
1954 server.tourarray1 = scr.replaceIn(sys.id(mcmd[1]),sys.id(mcmd[0]),server.tourarray1);
1955 return; }
1956 if (scr.existsIn(sys.id(mcmd[1]),server.tourarray2) && scr.existsIn(sys.id(mcmd[0]),server.tourarray1) == false && scr.existsIn(sys.id(mcmd[0]),server.tourarray2) == false && scr.existsIn(sys.id(mcmd[0]),server.tourmembersinput) == false) {
1957 sys.sendAll('~~Server~~: '+sys.name(src)+' switched '+scr.caps(mcmd[0])+' with ' +scr.caps(mcmd[1])+' in the tournament!');
1958 server.tourarray2 = scr.replaceIn(sys.id(mcmd[1]),sys.id(mcmd[0]),server.tourarray2);
1959 return; }
1960 if (scr.existsIn(sys.id(mcmd[1]),server.tourmembersinput) && scr.existsIn(sys.id(mcmd[0]),server.tourarray1) == false && scr.existsIn(sys.id(mcmd[0]),server.tourarray2) == false && scr.existsIn(sys.id(mcmd[0]),server.tourmembersinput) == false) {
1961 sys.sendAll('~~Server~~: '+sys.name(src)+' switched '+scr.caps(mcmd[0])+' with ' +scr.caps(mcmd[1])+' in the tournament!');
1962 server.tourmembersinput = scr.replaceIn(sys.id(mcmd[1]),sys.id(mcmd[0]),server.tourmembersinput);
1963 return; }
1964 sys.sendMessage(src,'~~Server~~: Error: The target isn\'t in the tournament!');
1965 return; }
1966 if (command == 'cancel' || command == 'nottourbattle' || command == 'rematch') {
1967 if (typeof tar == 'undefined') {
1968 sys.sendMessage(src,'~~Server~~: Error; That user is not online!');
1969 return; }
1970 if (!(scr.existsIn(tar,server.tourarray1) || scr.existsIn(tar,server.tourarray2)) && players[tar].inBattle == true) {
1971 sys.sendMessage(src,'~~Server~~: Error; User is not in a tournament match!');
1972 return; }
1973 players[tar].nottourbattle = true;
1974 sys.sendMessage(src,'~~Server~~: ' + sys.name(tar) + '\'s battle was canceled!');
1975 return; }
1976 }
1977 /** Moderator Commands **/ {
1978 if (sys.auth(src) < 1) {
1979 sys.sendMessage(src, "~~Server~~: The command " + command + " can not be used by Tour-Masters or does not exist.");
1980 scr.displayMsg('CMD ERROR: Forbidden or does not exist.');
1981 return; }
1982 if ( !sys.dbRegistered(sys.name(src)) ) {
1983 sys.sendMessage(src, "~~Server~~: The command " + command + " can not be used by unregistered auth or does not exist. Please register.");
1984 scr.displayMsg('CMD ERROR: Forbidden or does not exist.');
1985 return; }
1986 /** Quit **/
1987 if (command == 'resign') {
1988 sys.changeAuth(src,0);
1989 sys.sendAll('~~Server~~: ' + sys.name(src) + ' resigned from auth.');
1990 delete server.tempauth[sys.name(src).toLowerCase()];
1991 return; }
1992 /** tournament **/
1993 /*** * if (command == 'lotus' && 0) {
1994 if (tar != undefined) {
1995 switch (mcmd[0].toLowerCase()) {
1996 case 'war':
1997 if (players[src].playing == true) {
1998 sys.sendMessage(src,'~~Server~~: You are already in a game!');
1999 return; }
2000 players[src].opp = tar;
2001 if (players[tar].opp == src) {
2002 server.decks.push(newdeck());
2003 sys.sendAll('~~Server~~: Lotus game between ' + sys.name(tar) + ' and ' + sys.name(src) + ' started!');
2004 server.decks[server.decks.length-1].shuffle();
2005 var z = [src,tar];
2006 for (var i in z) {
2007 players[z[i]].deckid = server.decks.length-1;
2008 players[z[i]].playing = true;
2009 players[z[i]].down = undefined;
2010 players[z[i]].lastmove = sys.time();
2011 players[z[i]].hand = new Cardstack([]);
2012 players[z[i]].hand.merge(server.decks[players[z[i]].deckid].draw(5));
2013 sys.sendMessage(z[i],'~~Server~~: ' + players[z[i]].hand.list());
2014 sys.sendMessage(z[i],'~~Server~~: Note that due to technical reasons a 0 is a 10.');
2015 sys.sendMessage(z[i],'~~Server~~: Type /lotus play:<card>, <card> is ex: 4H, AS, KD, 0H, etc.'); }
2016 return;
2017 }
2018 else {
2019 sys.sendMessage(tar,'~~Server~~: ' + sys.name(src) + ' challenged you to lotus! Type /lotus war:'+sys.name(src) +' to accept!'); }
2020 break;
2021 case 'play':
2022 if (players[src].playing == false) {
2023 sys.sendMessage(src,'~~Server~~: You are not in a game!');
2024 return; }
2025 if (mcmd[1] != undefined && mcmd[1].length == 2) {
2026 mcmd[1] = mcmd[1].toUpperCase();
2027 if (players[src].down == undefined && players[src].hand.has(new Card(mcmd[1][1],mcmd[1][0])) {
2028 players[src].hand.pull(new Card(mcmd[1][1],mcmd[1][0]);
2029 players[src].down = new Card(mcmd[1][1],mcmd[1][0]);
2030 }
2031 }
2032 /** **/
2033 /**info **/
2034 if (command == "banlist") {
2035 sys.sendMessage(src,'~~Server~~: The following users are banned (name/ip,unban time):');
2036 for (var z in server.banned) {
2037 var when = 'Never';
2038 if (server.banned[z] != true) {
2039 when = new Date(server.banned[z]*1000); }
2040 if (server.names[z] != undefined) {
2041 sys.sendMessage(src,z+'('+server.names[z]+'): ' + when); }
2042 else {
2043 sys.sendMessage(src,z+'(name not stored): ' + when); }
2044 }
2045 sys.sendMessage(src,'~~Server~~: End of list.');
2046 return; }
2047 if (command == "mutelist") {
2048 sys.sendMessage(src,'~~Server~~: The following users are muted (IP, Name, Unban-time):');
2049 for (var z in server.muted) {
2050 var when = 'Never';
2051 if (server.muted[z] != true) {
2052 when = new Date(server.muted[z]*1000); }
2053 if (server.names[z] != undefined) {
2054 sys.sendMessage(src,z+'('+server.names[z]+'): ' + when); }
2055 else {
2056 sys.sendMessage(src,z+'(name not stored): ' + when); }
2057 }
2058 sys.sendMessage(src,'~~Server~~: End of list.');
2059 return; }
2060 if (command == "hyper" || command == "hypermode" || command == "alert" || command == "alertmode" || command == "e") {
2061 if (players[src].hyperMode == true && (typeof commandData == 'undefined' || commandData == '')) {
2062 sys.sendMessage(src,'~~Server~~: You are already in HyperMode.');
2063 scr.displayMsg('CMD ERROR: Redundant.');
2064 return; }
2065 players[src].hyperMode = true;
2066 if (typeof commandData != 'undefined' && commandData != '') {
2067 scr.beforeChatMessage(src,commandData, chan);
2068 players[src].hyperMode = false; }
2069 else {
2070 sys.sendMessage(src,'~~Server~~: You are now in HyperMode.'); }
2071 return; }
2072 if (command == "dehyper" || command == "dehypermode" || command == "dealert" || command == "dealertmode" || command == "-e") {
2073 if (players[src].hyperMode == false) {
2074 sys.sendMessage(src,'~~Server~~: You are already not in HyperMode.');
2075 scr.displayMsg('CMD ERROR: Redundant.');
2076 return; }
2077 players[src].hyperMode = false;
2078 sys.sendMessage(src,'~~Server~~: You are no longer in HyperMode.');
2079 return; }
2080
2081 if (command == "pollclose") {
2082 if (server.pollmode != 1) {
2083 sys.sendMessage(src,'~~Server~~: Error; No poll to close.');
2084 return; }
2085 server.pollmode = 0;
2086 sys.sendAll('~~Server~~: The poll was closed!');
2087 var nu = [];
2088 var tally = [];
2089 for (var z in server.pollvotes) {
2090 if (tally[server.pollvotes[z]] == undefined) {
2091 tally[server.pollvotes[z]] = 1; }
2092 else {
2093 tally[server.pollvotes[z]] += 1; }
2094 }
2095 for (var z in tally) {
2096 if (server.polloptions[z - 1] != undefined) {
2097 sys.sendAll('~~Server~~: Votes for option #'+z+'('+ server.polloptions[z - 1] +') - ' + tally[z]); }
2098 }
2099 server.pollmode = 1;
2100 return; }
2101 if (command == "newpoll") {
2102 if (mcmd[0] == undefined || mcmd[1] == undefined) {
2103 sys.sendMessage(src,'~~Server~~: Error.');
2104 return; }
2105 server.pollvotes = [];
2106 server.polloptions = mcmd[1].split('/');
2107 if (server.polloptions.length == 1) {
2108 sys.sendMessage(src,'~~Server~~: Error.');
2109 return; }
2110 sys.sendAll('~~Server~~: Poll; ' + mcmd[0]);
2111 sys.sendAll('~~Server~~: Please vote! Use /vote option');
2112 for ( var z in server.polloptions ) {
2113 sys.sendAll('~~Server~~: Option #'+(z*1+1)+': '+ server.polloptions[z]); }
2114 server.pollmode = 1;
2115 return; }
2116
2117 if (command == "info" || command == "whois" || command == "i") {
2118 var tarip = sys.dbIp(mcmd[0]);
2119 if (tarip == undefined) {
2120 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2121 scr.displayMsg('CMD ERROR: Null Target');
2122 return; }
2123 if (tar != undefined){
2124 var tarname = sys.name(tar);
2125 var tarauth = sys.auth(tar); }
2126 else {
2127 var tarname = mcmd[0].toLowerCase();
2128 var tarauth = sys.dbAuth(tarname); }
2129 var alts = '';
2130 var einfo = '';
2131 if (server.muted[tarip] != undefined) {
2132 einfo = einfo + ' The user is muted.' }
2133 if (server.protect[tarip] != undefined) {
2134 einfo = einfo + ' The user is protected.' }
2135 if (server.banned[tarip] != undefined) {
2136 einfo = einfo + ' The user is banned.' }
2137 var oalt = '';
2138 var usnames = sys.aliases(tarip);
2139 for (xxi in usnames) {
2140 if (sys.id(usnames[xxi]) == undefined) {
2141 oalt = oalt + ', (' + usnames[xxi] +')'; }
2142 else {
2143 alts = alts + ', (' + usnames[xxi] +')'; }
2144 }
2145 sys.sendMessage(src,'~~Server~~: '+tarname+' is ' + server.rank[tarauth] + '. User has these online accounts' + alts + '. User has these offline alts'+oalt+'. User\'s IP is (' + tarip +').'+einfo+' The user has ' + (scr.readRegVal('modnotes' + tarip).split('+').length - 1) + ' notes to the account. User was last seen on ' + sys.dbLastOn(mcmd[0])+'.');
2146 var msg = new Array();
2147 msg = scr.readRegVal('modnotes' + tarip).split('+');
2148 var length = msg.length - 1;
2149 sys.sendMessage(src,'~~Server~~: These are the notes on the account:');
2150 for (i = 1; i <= length; i++) {
2151 sys.sendMessage(src,msg[i]); }
2152 sys.sendMessage(src,'~~Server~~: End of notes.');
2153 return; }
2154 if (command == "ipinfo" || command == "whoisip" || command == "ip") {
2155 try {
2156 var tarip = mcmd[0].match(/\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}/gi)[0]; }
2157 catch(e) {
2158 sys.sendMessage(src, "~~Server~~: Error: Target is not a valid IP.");
2159 scr.displayMsg('CMD ERROR: Null Target');
2160 return; }
2161 if (tarip == undefined) {
2162 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2163 scr.displayMsg('CMD ERROR: Null Target');
2164 return; }
2165 var tarname = tarip;
2166 var alts = '';
2167 var einfo = '';
2168 if (server.muted[tarip] != undefined) {
2169 einfo = einfo + ' The user is muted.' }
2170 if (server.protect[tarip] != undefined) {
2171 einfo = einfo + ' The user is protected.' }
2172 if (server.banned[tarip] != undefined) {
2173 einfo = einfo + ' The user is banned.' }
2174 var oalt = '';
2175 var usnames = sys.aliases(tarip);
2176 for (xxi in usnames) {
2177 if (sys.id(usnames[xxi]) == undefined) {
2178 oalt = oalt + ', (' + usnames[xxi] +')'; }
2179 else {
2180 alts = alts + ', (' + usnames[xxi] +')'; }
2181 }
2182 sys.sendMessage(src,'~~Server~~: '+tarname+' is an IP address. User has these online accounts' + alts + '. User has these offline alts'+oalt+'. User\'s IP is (' + tarip +').'+einfo+' The user has ' + (scr.readRegVal('modnotes' + tarip).split('+').length - 1) + ' notes to the account. User was last seen on ' + sys.dbLastOn(mcmd[0])+'.');
2183 var msg = new Array();
2184 msg = scr.readRegVal('modnotes' + tarip).split('+');
2185 var length = msg.length - 1;
2186 sys.sendMessage(src,'~~Server~~: These are the notes on the account:');
2187 for (i = 1; i <= length; i++) {
2188 sys.sendMessage(src,msg[i]); }
2189 sys.sendMessage(src,'~~Server~~: End of notes.');
2190 return; }
2191 if (command == "writenote" || command == "wnote" || command == "write") {
2192 var tarip = sys.dbIp(mcmd[0]);
2193 if (tarip == undefined) {
2194 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2195 scr.displayMsg('CMD ERROR: Null Target');
2196 return; }
2197 if (tar != undefined){
2198 var tarname = sys.name(tar);
2199 var tarauth = sys.auth(tar); }
2200 else {
2201 var tarname = mcmd[0].toLowerCase();
2202 var tarauth = sys.dbAuth(tarname); }
2203 var point = commandData.indexOf(':');
2204 if (point == -1) {
2205 sys.sendMessage(src, "~~Server~~: Error: No content! Note was not added!");
2206 scr.displayMsg('CMD ERROR: Null Content');
2207 return; }
2208 var note = commandData.substr(commandData.indexOf(':')+1);
2209 if (note.indexOf('+') == -1) {
2210 scr.writeRegVal('modnotes' + tarip,scr.readRegVal('modnotes' + tarip) + ' + Note by ' + sys.name(src) + ": " + note);
2211 sys.sendMessage(src, "~~Server~~: Note added to user " + mcmd[0] + "!");
2212 } else { sys.sendMessage(src, "~~Server~~: Error: The + symbol can not be used in notes! Note was not added!"); }
2213 return; }
2214 if (command == "viewnote" || command == "viewnotes" || command == "vnote" || command == "view") {
2215 var tarip = sys.dbIp(mcmd[0]);
2216 if (tarip == undefined) {
2217 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2218 scr.displayMsg('CMD ERROR: Null Target');
2219 return; }
2220 if (tar != undefined){
2221 var tarname = sys.name(tar);
2222 var tarauth = sys.auth(tar); }
2223 else {
2224 var tarname = mcmd[0].toLowerCase();
2225 var tarauth = sys.dbAuth(tarname); }
2226 var msg = new Array();
2227 msg = scr.readRegVal('modnotes' + tarip).split('+');
2228 sys.sendMessage(src,'~~Server~~: These are the notes on the account:');
2229 for (i in msg) {
2230 if (i != 0) {
2231 sys.sendMessage(src,msg[i]); }
2232 }
2233 sys.sendMessage(src,'~~Server~~: End of notes.');
2234 return; }
2235 if (command == "deletenotes" || command == "deletenote" || command == 'delete') {
2236 var tarip = sys.dbIp(mcmd[0]);
2237 if (tarip == undefined) {
2238 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2239 scr.displayMsg('CMD ERROR: Null Target');
2240 return; }
2241 if (tar != undefined){
2242 var tarname = sys.name(tar);
2243 var tarauth = sys.auth(tar); }
2244 else {
2245 var tarname = mcmd[0].toLowerCase();
2246 var tarauth = sys.dbAuth(tarname); }
2247 scr.deleteRegVal('modnotes' + tarip);
2248 sys.sendMessage(src, "~~Server~~: Notes removed!");
2249 return; }
2250 if (command == "getpass" || command == "getpassword") {
2251 if (server.serverpass == '') {
2252 sys.sendMessage(src,'~~Server~~: The server is not password protected');
2253 scr.displayMsg('CMD ERROR: Not Password Protected');
2254 return; }
2255 sys.sendMessage(src,'~~Server~~: The password is ('+server.serverpass+').');
2256 return; }
2257 if (command == "warnall") {
2258 if (mcmd[0] == 'all' || mcmd[0] == 'allrules') {
2259 sys.sendAll('~~Server~~: Everyone, please obey the rules!');
2260 for (x in rule) {
2261 sys.sendAll('~~Server~~: Rule #'+x+': ' + rule[x]); }
2262 return; }
2263 sys.sendAll('~~Server~~: Everyone please obey the rules!');
2264 for (x in mcmd) {
2265 if (typeof rule[mcmd[x]] == 'undefined') {
2266 scr.displayMsg('CMD Error: Rule #'+mcmd[x]+' does not exist');
2267 sys.sendMessage(src,'~~Server~~: Error: Rule #'+mcmd[x]+' does not exist'); }
2268 else {
2269 sys.sendAll('~~Server~~: Rule #' +mcmd[x] +': '+rule[mcmd[x]]); }
2270 }
2271 return; }
2272 if (command == "warn") {
2273 if (typeof tar == 'undefined') {
2274 sys.sendMessage(src,'~~Server~~: Error: User does not exist or is not online!');
2275 scr.displayMsg('CMD Error: Seeing things.');
2276 return; }
2277 if (mcmd[1] == 'all' || mcmd[1] == 'allrules') {
2278 sys.sendMessage(tar,'~~Server~~: '+sys.name(tar)+', please obey the rules!');
2279 for (x in rule) {
2280 sys.sendMessage(tar,'~~Server~~: Rule #'+x+': ' + rule[x]); }
2281 return; }
2282 sys.sendMessage(tar,'~~Server~~: '+sys.name(tar)+', please obey the rules!');
2283 for (x in mcmd) {
2284 if (typeof rule[mcmd[x]] == 'undefined' || x == 0) {
2285 if (x != 0) {
2286 scr.displayMsg('CMD Error: Rule #'+mcmd[x]+' does not exist');
2287 sys.sendMessage(src,'~~Server~~: Error: Rule #'+mcmd[x]+' does not exist'); }
2288 }
2289 else {
2290 sys.sendMessage(tar,'~~Server~~: Rule #' +mcmd[x] +': '+rule[mcmd[x]]); }
2291 }
2292 return; }
2293 /** Tourmaster **/
2294 if (command == 'setmaster') {
2295 if (typeof tar == 'undefined') {
2296 sys.sendMessage(src,'~~Server~~: Error: User does not exist or is not online!');
2297 scr.displayMsg('CMD Error: Seeing things.');
2298 return; }
2299 if (sys.auth(tar) != 0) {
2300 sys.sendMessage(src,'~~Server~~: Error: User is auth.');
2301 scr.displayMsg('CMD Error: Auth.'); }
2302 if (sys.auth(src) <= 3) {
2303 sys.sendAll("~~Server~~: " + sys.name(tar) + " was given Tour-Master status by " + sys.name(src) + "!"); }
2304 else {
2305 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously given Tour-Master status!");
2306 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously given Tour-Master status! ("+sys.name(src) +")"); }
2307 server.tourmasters[sys.name(tar).toLowerCase()] = 1;
2308 return; }
2309 if (command == 'removemaster') {
2310 if (typeof server.tourmasters[mcmd[0].toLowerCase()] == 'undefined') {
2311 sys.sendMessage(src,'~~Server~~: Error: User does not exist or is not a Tour-Master!');
2312 scr.displayMsg('CMD Error: Seeing things.');
2313 return; }
2314 if (sys.auth(src) <= 3) {
2315 sys.sendAll("~~Server~~: " + sys.name(tar) + " had their Tour-Master status revoked by " + sys.name(src) + "!"); }
2316 else {
2317 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " mysteriously had their Tour-Master status revoked!");
2318 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " mysteriously had their Tour-Master status revoked! ("+sys.name(src) +")"); }
2319 delete server.tourmasters[sys.name(tar).toLowerCase()];
2320 return; }
2321 /** Mute **/
2322 if (command == "mute" || command == "m") {
2323 if (tar == undefined) {
2324 var tarip = sys.dbIp(mcmd[0]);
2325 if (typeof tarip == 'undefined') {
2326 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
2327 scr.displayMsg('CMD ERROR: Null Tar.');
2328 return; }
2329 else {
2330 var tarname = mcmd[0];
2331 var tarauth = sys.dbAuth(mcmd[0]); }
2332 }
2333 else {
2334 var tarip = sys.ip(tar);
2335 var tarname = sys.name(tar);
2336 var tarauth = sys.auth(tar); }
2337 if (server.protect[tarip] != undefined) {
2338 sys.sendMessage(src,"~~Server~~: " + tarname + " is protected and can not be muted.");
2339 scr.displayMsg('CMD ERROR: Forbidden.');
2340 return; }
2341 if (tarauth > 0) {
2342 sys.sendMessage(src,"~~Server~~: Moderators and above can not be muted.");
2343 scr.displayMsg('CMD ERROR: Forbidden.');
2344 return; }
2345 if (mcmd[1] == 'forever' || mcmd[1] == 'permanent') {
2346 if (sys.auth(src) <= 3) {
2347 sys.sendAll("~~Server~~: " + tarname + " was muted forever by " + sys.name(src) + "!"); }
2348 else {
2349 scr.sendTo('user',"~~Server~~: " + tarname + " was mysteriously muted forever!");
2350 scr.sendTo('auth',"~~Server~~: " + tarname + " was mysteriously muted forever! ("+sys.name(src) +")"); }
2351 server.muted[tarip] = true;
2352 return; }
2353 if (mcmd[1] == 0 || mcmd[1] == 'unmute') {
2354 delete server.muted[tarip];
2355 if (sys.auth(src) <= 3) {
2356 sys.sendAll("~~Server~~: " + tarname + " was unmuted by " + sys.name(src) + "!"); }
2357 else {
2358 scr.sendTo('user',"~~Server~~: " + tarname + " was mysteriously unmuted!");
2359 scr.sendTo('auth',"~~Server~~: " + tarname + " was mysteriously unmuted! ("+sys.name(src) +")"); }
2360 return; }
2361 var typeno = 60;
2362 var typestr = 'minute';
2363 if (isNaN (mcmd[1]*1) == true) {
2364 mcmd[1] = 5;
2365 mcmd[2] = 'm'; }
2366 mcmd[2] =(typeof mcmd[2] == 'undefined')?'m':mcmd[2];
2367 mcmd[2] = mcmd[2].toLowerCase();
2368 mcmd[1] = Math.round(Math.abs(mcmd[1]));
2369 if (mcmd[2] == 's' || mcmd[2] == 'second' || mcmd[2] == 'seconds' || mcmd[2] == 'sec') {
2370 typeno = 1;
2371 typestr = 'second'; }
2372 if (mcmd[2] == 'h' || mcmd[2] == 'hour' || mcmd[2] == 'hours' || mcmd[2] == 'hr') {
2373 typeno = 3600;
2374 typestr = 'hour'; }
2375 if (mcmd[2] == 'd' || mcmd[2] == 'day' || mcmd[2] == 'days' || mcmd[2] == 'dy') {
2376 typeno = 86400;
2377 typestr = 'day'; }
2378 if (mcmd[2] == 'w' || mcmd[2] == 'week' || mcmd[2] == 'weeks' || mcmd[2] == 'wk') {
2379 typeno = 604800;
2380 typestr = 'week'; }
2381 if (mcmd[1] != 1) {
2382 typestr = typestr + 's' }
2383 if (sys.auth(src) <= 3) {
2384 sys.sendAll("~~Server~~: " + tarname + " was muted for "+mcmd[1]+ ' ' + typestr + " by " + sys.name(src) + "!"); }
2385 else
2386 { scr.sendTo('user',"~~Server~~: " + tarname + " was mysteriously muted for "+mcmd[1]+ ' ' + typestr + "!");
2387 scr.sendTo('auth',"~~Server~~: " + tarname + " was mysteriously muted for "+mcmd[1]+ ' ' + typestr +"! ("+sys.name(src) +")"); }
2388 server.muted[tarip] = sys.time()*1 + typeno * mcmd[1];
2389 return; }
2390 if (command == "unmute" || command == "-m" || command == "demute" || command == "removemute") {
2391 if (tar == undefined) {
2392 var tarip = sys.dbIp(mcmd[0]);
2393 if (typeof tarip == 'undefined') {
2394 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2395 scr.displayMsg('CMD ERROR: Null target.');
2396 return; }
2397 if (sys.auth(src) <= 3) {
2398 sys.sendAll("~~Server~~: " + mcmd[0] + " was unmuted by " + sys.name(src) + "!"); }
2399 else {
2400 scr.sendTo('user',"~~Server~~: " + mcmd[0] + " was mysteriously unmuted!");
2401 scr.sendTo('auth',"~~Server~~: " + mcmd[0] + " was mysteriously unmuted! ("+sys.name(src) +")"); }
2402 delete server.muted[tarip];
2403 return; }
2404 if (sys.auth(src) <= 3) {
2405 sys.sendAll("~~Server~~: " + sys.name(tar) + " was unmuted by " + sys.name(src) + "!"); }
2406 else {
2407 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously unmuted!");
2408 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously unmuted! ("+sys.name(src) +")"); }
2409 delete server.muted[sys.ip(tar)];
2410 return; }
2411 /** Ban **/
2412 if (command == "unban" || command == "removeban" || command == "-b" || command == "deban") {
2413 if (mcmd[0].split('.').length -1 != 3 && typeof sys.dbIp(mcmd[0]) == 'undefined') {
2414 sys.sendMessage(src,'~~Server~~: Error: You must enter a valid username!');
2415 scr.displayMsg('CMD ERROR: Null Username.');
2416 return; }
2417 if (server.banlock && server.limit8 && (sys.auth(src) == 1 || sys.auth(src) == 4) && (server.banned[sys.dbIp(mcmd[0])] == 1 || server.banned[mcmd[0]] == 1)) {
2418 sys.sendMessage(src, "~~Server~~: Error: Insufficient auth to change ban duration.");
2419 scr.displayMsg('CMD ERROR: Permabanned.');
2420 return; }
2421 if (server.banned[sys.dbIp(mcmd[0])] == undefined && server.banned[mcmd[0]] == undefined) {
2422 sys.sendMessage(src,'~~Server~~: Error: This user is not banned.');
2423 scr.displayMsg('CMD ERROR: Not banned.');
2424 return; }
2425 if (sys.auth(src) <= 3) {
2426 sys.sendAll("~~Server~~: " + mcmd[0] + " was unbanned by " + sys.name(src) + "!"); }
2427 else {
2428 scr.sendTo('user',"~~Server~~: " + mcmd[0] + " was mysteriously unbanned!");
2429 scr.sendTo('auth',"~~Server~~: " + mcmd[0] + " was mysteriously unbanned! ("+sys.name(src) +")"); }
2430 delete server.banned[mcmd[0]];
2431 if (typeof sys.dbIp(mcmd[0]) != 'undefined') {
2432 delete server.banned[sys.dbIp(mcmd[0])]; }
2433 return; }
2434 if (command == "ban" || command == "b") {
2435 if (tar == undefined) {
2436 var tarip = sys.dbIp(mcmd[0]);
2437 if (typeof tarip == 'undefined') {
2438 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
2439 scr.displayMsg('CMD ERROR: Null Tar.');
2440 return; }
2441 else {
2442 var tarname = mcmd[0];
2443 var tarauth = sys.dbAuth(mcmd[0]); }
2444 }
2445 else {
2446 var tarip = sys.ip(tar);
2447 var tarname = sys.name(tar);
2448 var tarauth = sys.auth(tar); }
2449 if (server.banlock && (sys.auth(src) == 1 || sys.auth(src) == 4) && server.banned[tarip] == 1 && server.limit8) {
2450 sys.sendMessage(src, "~~Server~~: Error: Insufficient auth to change ban duration.");
2451 scr.displayMsg('CMD ERROR: Permabanned.');
2452 return; }
2453 if (server.protect[tarip] != undefined) {
2454 sys.sendMessage(src,"~~Server~~: " + tarname + " is protected and can not be banned.");
2455 scr.displayMsg('CMD ERROR: Forbidden.');
2456 return; }
2457 if (tarauth > 0) {
2458 sys.sendMessage(src,"~~Server~~: Moderators and above can not be banned.");
2459 scr.displayMsg('CMD ERROR: Forbidden.');
2460 return; }
2461 if ( (mcmd[1] == 'forever' || mcmd[1] == 'permanent') && ((sys.auth(src) >= 2 && sys.auth(src) != 4) || !server.limit8) ) {
2462 if (sys.auth(src) <= 3) {
2463 sys.sendAll("~~Server~~: " + tarname + " was banned forever by " + sys.name(src) + "!"); }
2464 else {
2465 scr.sendTo('user',"~~Server~~: " + tarname + " was mysteriously banned forever!");
2466 scr.sendTo('auth',"~~Server~~: " + tarname + " was mysteriously banned forever! ("+sys.name(src) +")"); }
2467 server.banned[tarip] = 1;
2468 for (user in players) {
2469 if (tarip == sys.ip(user) && sys.auth(user) < 1) {
2470 sys.kick(user); }
2471 }
2472 return; }
2473 var typeno = 3600;
2474 var typestr = 'hour';
2475 if ((mcmd[1] == 'forever' || mcmd[1] == 'permanent') && (sys.auth(src) == 1 || sys.auth(src) == 4) && server.limit8) {
2476 mcmd[1] = 8;
2477 mcmd[2] = 'h';
2478 typeno = 3600;
2479 typestr = 'hour';
2480 sys.sendMessage(src, "~~Server~~: Error: You entered a time above the maximum for moderators, the time was lowered to 8 hours."); }
2481 if (isNaN (mcmd[1]*1) == true || mcmd[1] == 0) {
2482 mcmd[1] = 1;
2483 mcmd[2] = 'h'; }
2484 mcmd[2] =(typeof mcmd[2] == 'undefined')?'h':mcmd[2];
2485 mcmd[2] = mcmd[2].toLowerCase();
2486 mcmd[1] = Math.round(Math.abs(mcmd[1]));
2487 if (mcmd[2] == 's' || mcmd[2] == 'second' || mcmd[2] == 'seconds' || mcmd[2] == 'sec') {
2488 typeno = 1;
2489 typestr = 'second'; }
2490 if (mcmd[2] == 'm' || mcmd[2] == 'minute' || mcmd[2] == 'minutes' || mcmd[2] == 'min') {
2491 typeno = 60;
2492 typestr = 'minute'; }
2493 if (mcmd[2] == 'd' || mcmd[2] == 'day' || mcmd[2] == 'days' || mcmd[2] == 'dy') {
2494 typeno = 86400;
2495 typestr = 'day'; }
2496 if (mcmd[2] == 'w' || mcmd[2] == 'week' || mcmd[2] == 'weeks' || mcmd[2] == 'wk') {
2497 typeno = 604800;
2498 typestr = 'week'; }
2499 if ((sys.auth(src) == 1 || sys.auth(src) == 4) && typeno*mcmd[1] > 28800 && server.limit8) {
2500 mcmd[1] = 8;
2501 mcmd[2] = 'h';
2502 typeno = 3600;
2503 typestr = 'hour';
2504 sys.sendMessage(src, "~~Server~~: Error: You entered a time above the maximum for moderators, the time was lowered to 8 hours."); }
2505 if (mcmd[1] != 1) {
2506 typestr = typestr + 's' }
2507 if (sys.auth(src) <= 3) {
2508 sys.sendAll("~~Server~~: " + tarname + "("+tarip+ ") was banned for "+mcmd[1]+ ' ' + typestr + " by " + sys.name(src) + "!"); }
2509 else {
2510 scr.sendTo('user',"~~Server~~: " + tarname + "("+tarip+ ") was mysteriously banned for "+mcmd[1]+ ' ' + typestr + "!");
2511 scr.sendTo('auth',"~~Server~~: " + tarname + "("+tarip+ ") was mysteriously banned for "+mcmd[1]+ ' ' + typestr + "! ("+sys.name(src) +")"); }
2512 server.banned[tarip] = sys.time()*1 + typeno * mcmd[1];
2513 for (user in players) {
2514 if (tarip == sys.ip(user) && sys.auth(user) < 1) {
2515 sys.kick(user); }
2516 }
2517 if (typeof tar != 'undefined') {
2518 sys.kick(tar); }
2519 return; }
2520 /** Kick **/
2521 if (command == "kick" || command == "k") {
2522 if (tar == undefined) {
2523 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2524 scr.displayMsg('CMD ERROR: Null Target.');
2525 return; }
2526 if (server.protect[sys.ip(tar)] != undefined) {
2527 sys.sendMessage(src,"~~Server~~: " + sys.name(tar) + " is protected and can not be kicked.");
2528 scr.displayMsg('CMD ERROR: Forbidden.');
2529 return; }
2530 if (sys.auth(tar) > 0) {
2531 sys.sendMessage(src,"~~Server~~: Moderators and above can not be kicked.");
2532 scr.displayMsg('CMD ERROR: Forbidden.');
2533 return; }
2534 if (sys.auth(src) <= 3) {
2535 sys.sendAll("~~Server~~: " + sys.name(tar) + " was kicked by " + sys.name(src) + "!"); }
2536 else {
2537 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously kicked!");
2538 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously kicked! ("+sys.name(src)+")"); }
2539 sys.kick(tar);
2540 return; }
2541 if (command == "superkick") {
2542 if (tar == undefined) {
2543 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2544 return; }
2545 if (server.protect[sys.ip(tar)] != undefined) {
2546 sys.sendMessage(src,"~~Server~~: " + sys.name(tar) + " is protected and can not be kicked.");
2547 return; }
2548 if (sys.auth(tar) > 0) {
2549 sys.sendMessage(src,"~~Server~~: Moderators and above can not be kicked.");
2550 return; }
2551 if (sys.auth(src) <= 3) {
2552 sys.sendAll("~~Server~~: " + sys.name(src) + " used superkick!"); }
2553 else {
2554 scr.sendTo('user',"~~Server~~: A flash of death!");
2555 scr.sendTo('auth',"~~Server~~: A flash of death! ("+sys.name(src) +")"); }
2556 var kickusers = [];
2557 for (x in mcmd) {
2558 if (sys.auth(mcmd[x]) > 0) {
2559 sys.sendMessage(src,"~~Server~~: Moderators and above can not be kicked."); }
2560 else {
2561 for (user in players) {
2562 if (sys.ip(sys.id(mcmd[x])) == sys.ip(user) && sys.auth(user) < 1) {
2563 sys.sendAll('~~Server~~: '+sys.name(user) + ' was kicked!');
2564 kickusers[kickusers.length] = user; }
2565 }
2566 }
2567 }
2568 for (y in kickusers) {
2569 sys.kick(kickusers[y]); }
2570 return; }
2571 /** Hush **/
2572 if (command == "hush" || command == "h") {
2573 if (typeof channels[0].restrict == true) {
2574 sys.sendMessage(src,'~~Server~~: The server is already restricted, to hush the chat first derestrict the server.');
2575 return; }
2576 channels[chan].hush = true;
2577 if (sys.auth(src) <= 3) {
2578 sys.sendAll("~~Server~~: The chat has been hushed by " + sys.name(src) + "!"); }
2579 else {
2580 scr.sendTo('user',"~~Server~~: The chat has been mysteriously hushed!");
2581 scr.sendTo('auth',"~~Server~~: The chat has been mysteriously hushed! ("+sys.name(src) +")"); }
2582 return; }
2583 if (command == "unhush" || command == "-h" || command == "dehush") {
2584 if (channels[0].restrict == true) {
2585 sys.sendMessage(src,'~~Server~~: The server is already restricted, to hush the chat first derestrict the server.');
2586 return; }
2587 channels[chan].hush = false;
2588 channels[0].hush = false;
2589 if (sys.auth(src) <= 3) {
2590 sys.sendAll("~~Server~~: The chat has been unhushed by " + sys.name(src) + "!"); }
2591 else {
2592 scr.sendTo('user',"~~Server~~: The chat has been mysteriously unhushed!");
2593 scr.sendTo('auth',"~~Server~~: The chat has been mysteriously unhushed! ("+sys.name(src) +")"); }
2594 return; }
2595 /** Stop **/
2596 if (command == "stop" || command == "s") {
2597 stop = 1;
2598 if (sys.auth(src) <= 3) {
2599 sys.sendAll("~~Server~~: The battles have been stopped by " + sys.name(src) + "!"); }
2600 else {
2601 scr.sendTo('user',"~~Server~~: The battles have been mysteriously stopped!");
2602 scr.sendTo('auth',"~~Server~~: The battles have been mysteriously stopped! ("+sys.name(src)+")"); }
2603 return; }
2604 if (command == "unstop" || command == "destop" || command == "-s") {
2605 stop = undefined;
2606 if (sys.auth(src) <= 3) {
2607 sys.sendAll("~~Server~~: The battles have been resumed by " + sys.name(src) + "!"); }
2608 else {
2609 scr.sendTo('user',"~~Server~~: The battles have been mysteriously resumed!");
2610 scr.sendTo('auth',"~~Server~~: The battles have been mysteriously resumed! (" + sys.name(src) + ")"); }
2611 return; }
2612 /** Invisibillity **/
2613 if (command == "invisible" && sys.auth(src) == 1) {
2614 sys.sendMessage(src,'~~Server~~: You are now in invisible mode!');
2615 sys.changeAuth(src,4);
2616 return; }
2617 if (command == "visible" && sys.auth(src) == 4) {
2618 sys.sendMessage(src,'~~Server~~: You are no longer in invisible mode!');
2619 sys.changeAuth(src,1);
2620 return; }
2621 if (command == "invisible" && sys.auth(src) == 2) {
2622 sys.sendMessage(src,'~~Server~~: You are now in invisible mode!');
2623 sys.changeAuth(src,5);
2624 return; }
2625 if (command == "visible" && sys.auth(src) == 5) {
2626 sys.sendMessage(src,'~~Server~~: You are no longer in invisible mode!');
2627 sys.changeAuth(src,2);
2628 return; }
2629 if (command == "invisible" && sys.auth(src) == 3) {
2630 sys.sendMessage(src,'~~Server~~: You are now in invisible mode!');
2631 sys.changeAuth(src,6);
2632 return; }
2633 if (command == "visible" && sys.auth(src) == 6) {
2634 sys.sendMessage(src,'~~Server~~: You are no longer in invisible mode!');
2635 sys.changeAuth(src,3);
2636 return; }
2637 /** Update **/ {
2638 if (command == "update") {
2639 sys.sendMessage(src,'~~Server~~: Update Called!');
2640 scr.remoteUpdate();
2641 scr.displayMsg('Manual update called by ' +sys.name(src) + '.');
2642 return; }
2643 }
2644 }
2645 /** Admin Commands **/ {
2646 if (sys.auth(src) < 2 || sys.auth(src) == 4) {
2647 sys.sendMessage(src, "~~Server~~: The command " + command + " can not be used by moderators or does not exist.");
2648 return; }
2649 /** Rank ** Command wouldn't work for some reason, disabled (because 2+2 doesn't equal 3) **/
2650 if ((command == "switch" || command == "swap") && 2 + 2 == 3) {
2651 if (typeof tar == 'undefined' || typeof sys.id(mcmd[1]) == 'undefined') {
2652 sys.sendMessage(src,'~~Server~~: Error: Both users must exist and be online!');
2653 scr.displayMsg('CMD Error: Null tars.');
2654 return; }
2655 if (sys.tier(tar) != sys.tier(sys.id(mcmd[1]))) {
2656 sys.sendMessage(src,'~~Server~~: Error: Both users must be in the same tier!');
2657 scr.displayMsg('CMD Error: Irregular.');
2658 return; }
2659 var rank1 = sys.ladderRating(tar);
2660 var rank2 = sys.ladderRating(mcmd[1]);
2661 sys.changeRating(sys.name(tar), sys.tier(tar), rank2);
2662 sys.changeRating(sys.name(mcmd[1]), sys.tier(sys.id(mcmd[1])), rank1);
2663 sys.sendMessage(src,'~~Server~~: Rating swap completed!');
2664 return; }
2665 /** Lock/Unlock **/ {
2666 if (command == "lock") {
2667 server.locked = true;
2668 if (sys.auth(src) <= 3) {
2669 sys.sendAll("~~Server~~: The server has been locked by " + sys.name(src) + "!"); }
2670 else {
2671 scr.sendTo('user',"~~Server~~: The server has been mysteriously locked!");
2672 scr.sendTo('auth',"~~Server~~: The server has been mysteriously locked! ("+sys.name(src)+")"); }
2673 return; }
2674 if (command == "unlock") {
2675 server.locked = false;
2676 if (sys.auth(src) <= 3) {
2677 sys.sendAll("~~Server~~: The server has been unlocked by " + sys.name(src) + "!"); }
2678 else {
2679 scr.sendTo('user',"~~Server~~: The server has been mysteriously unlocked!");
2680 scr.sendTo('auth',"~~Server~~: The server has been mysteriously unlocked! ("+sys.name(src)+")"); }
2681 return; }
2682 }
2683 /** Channels **/
2684 if (command == "create" || command == "newchan") {
2685 if (scr.existsIn(mcmd[0].toLowerCase(),server.permanentchannels) || mcmd[0].toLowerCase() == 'watch' ) {
2686 sys.sendMessage(src,'~~Server~~: That channel already exists!');
2687 return; }
2688 if (sys.channelId(mcmd[0]) == undefined) {
2689 sys.createChannel(mcmd[0]);
2690 sys.sendMessage(src,'~~Server~~: Permanent channel '+mcmd[0] +' was created!'); }
2691 else {
2692 sys.sendMessage(src,'~~Server~~: Channel '+mcmd[0] +' was added to the permanent channel list!'); }
2693 server.permanentchannels[server.permanentchannels.length] = mcmd[0].toLowerCase();
2694 return; }
2695 if (command == "destroy" || command == "killchan") {
2696 // Exists Check
2697 if (sys.channelId(mcmd[0]) == undefined) {
2698 sys.sendMessage(src,'~~Server~~: That channel does not exist!');
2699 return; }
2700 // Critcal Channel Check
2701 if (mcmd[0].toLowerCase() == 'watch' || sys.channelId(mcmd[0]) == 0) {
2702 sys.sendMessage(src,'~~Server~~: That channel is indestructible!');
2703 return; }
2704 // Delete from the indestructable channels list
2705 server.permanentchannels = scr.deleteFrom(mcmd[0].toLowerCase(),server.permanentchannels);
2706 // Send the message based on if the user is invisible
2707 if (sys.auth(src) <= 3) {
2708 // sys.channel(sys.channelId(mcmd[0])) corrects the case
2709 sys.sendAll('~~Server~~: The channel ('+sys.channel(sys.channelId(mcmd[0]))+') was destroyed by '+sys.name(src) +'!'); }
2710 else {
2711 // If the user is invisible, only show the name to other users with auth
2712 scr.sendTo('auth','~~Server~~: The channel ('+sys.channel(sys.channelId(mcmd[0]))+') was mysteriously destroyed! (' + sys.name(src) + ')');
2713 scr.sendTo('user','~~Server~~: The channel ('+sys.channel(sys.channelId(mcmd[0]))+') was mysteriously destroyed!'); }
2714 // Kick all the users from the channel
2715 var killchan = sys.playersOfChannel(sys.channelId(mcmd[0]));
2716 for (x in killchan) {
2717 sys.kick(killchan[x],sys.channelId(mcmd[0])); }
2718 return; }
2719 /** Password **/
2720 if (command == "setpass" || command == "setpassword") {
2721 players[src].password = commandData;
2722 server.serverpass = commandData;
2723 if (sys.auth(src) <= 3) {
2724 sys.sendAll('~~Server~~: The password was changed by '+sys.name(src)+', please enter the password using /pass password.'); }
2725 else {
2726 scr.sendTo('user','~~Server~~: The password was mysteriously changed, please enter the password using /pass password.');
2727 scr.sendTo('auth','~~Server~~: The password was mysteriously changed, please enter the password using /pass password. ('+sys.name(src)+")"); }
2728 return; }
2729 if (command == "removepass" || command == "removepassword") {
2730 scr.deleteRegVal('pass:'+sys.name(src));
2731 players[src].password = '';
2732 server.serverpass = '';
2733 if (sys.auth(src) <= 3) {
2734 sys.sendAll('~~Server~~: The password was removed by '+sys.name(src)+'.'); }
2735 else {
2736 scr.sendTo('user','~~Server~~: The password was mysteriously removed.');
2737 scr.sendTo('auth','~~Server~~: The password was mysteriously removed. ('+sys.name(src)+")"); }
2738 return; }
2739 /** User Limit **/
2740 if (command == "setlimit" || command == "limit") {
2741 if (isNaN(mcmd[0]*1) == true || Math.abs(Math.round(mcmd[0]*1)) == 0) {
2742 userlimit = undefined;
2743 if (sys.auth(src) <= 3) {
2744 sys.sendAll('~~Server~~: The user limit was removed by '+sys.name(src)+'.'); }
2745 else {
2746 scr.sendTo('user','~~Server~~: The user limit was mysteriously removed.');
2747 scr.sendTo('auth','~~Server~~: The user limit was mysteriously removed. ('+sys.name(src)+')'); }
2748 return; }
2749 mcmd[0] = Math.abs(Math.round(mcmd[0]*1));
2750 userlimit = mcmd[0];
2751 if (sys.auth(src) <= 3) {
2752 sys.sendAll('~~Server~~: The user limit was changed by ' + sys.name(src) + ' to ' + mcmd[0] + '.'); }
2753 else {
2754 scr.sendTo('user','~~Server~~: The user limit was mysteriously changed to ' + mcmd[0] + '.');
2755 scr.sendTo('auth','~~Server~~: The user limit was mysteriously changed to ' + mcmd[0] + '. ('+sys.name(src)+')'); }
2756 return; }
2757 if (command == "removelimit" || command == "delimit" || command == "unlimit") {
2758 userlimit = undefined;
2759 if (sys.auth(src) <= 3) {
2760 sys.sendAll('~~Server~~: The user limit was removed by '+sys.name(src)+'.'); }
2761 else {
2762 scr.sendTo('user','~~Server~~: The user limit was mysteriously removed.');
2763 scr.sendTo('auth','~~Server~~: The user limit was mysteriously removed. ('+sys.name(src)+')'); }
2764 return; }
2765 /** Protects **/
2766 if (command == "protect" || command == "p") {
2767 if (tar == undefined) {
2768 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
2769 return; }
2770 if (sys.auth(tar) > 0) {
2771 sys.sendMessage(src,"~~Server~~: Moderators and above do not need protection.");
2772 return; }
2773 if (sys.auth(src) <= 3) {
2774 sys.sendAll("~~Server~~: " + sys.name(tar) + " was protected by " + sys.name(src) + "!"); }
2775 else {
2776 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously protected!");
2777 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously protected! ("+sys.name(src)+")"); }
2778 server.protect[sys.ip(tar)] = 1;
2779 scr.deleteRegVal('muted' + sys.ip(tar));
2780 scr.deleteRegVal('banned' + sys.ip(tar));
2781 scr.deleteRegVal('mutechk' + sys.ip(tar));
2782 scr.deleteRegVal('banchk' + sys.ip(tar));
2783 return; }
2784 if (command == "deprotect" || command == "unprotect" || command == "-p") {
2785 if (tar == undefined) {
2786 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
2787 return; }
2788 if (sys.auth(src) <= 3) {
2789 sys.sendAll("~~Server~~: " + sys.name(tar) + " was deprotected by " + sys.name(src) + "!"); }
2790 else {
2791 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously deprotected!");
2792 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously deprotected! ("+sys.name(src)+")"); }
2793 delete server.protect[sys.ip(tar)];
2794 return; }
2795 /** Restrict **/
2796 if (command == "restrict" || command == "r") {
2797 channels[chan].restrict = true;
2798 channels[0].hush = undefined;
2799 if (chan == 0) {
2800 if (sys.auth(src) <= 3) {
2801 sys.sendAll("~~Server~~: The server has been restricted by " + sys.name(src) + "!"); }
2802 else {
2803 scr.sendTo('user',"~~Server~~: The server has been mysteriously restricted!");
2804 scr.sendTo('auth',"~~Server~~: The server has been mysteriously restricted! ("+sys.name(src)+")"); }
2805 for (user in players) {
2806 if (sys.auth(user) < 1) {
2807 sys.sendMessage(user,'~~Server~~: You are not staff and therefore have been kicked as the server has been restricted.');
2808 sys.kick(user); }
2809 }
2810 }
2811 else {
2812 if (sys.auth(src) <= 3) {
2813 sys.sendAll("~~Server~~: ("+sys.channel(chan)+") was restricted by " + sys.name(src) + "!"); }
2814 else {
2815 scr.sendTo('user',"~~Server~~: ("+sys.channel(chan)+") was mysteriously restricted!");
2816 scr.sendTo('auth',"~~Server~~: ("+sys.channel(chan)+") was mysteriously restricted! ("+sys.name(src)+")"); }
2817 var tempvar = sys.playersOfChannel(chan);
2818 for (user in tempvar) {
2819 if (sys.auth(tempvar[user]) < 1) {
2820 sys.sendMessage(tempvar[user],'~~Server~~: You are not staff and therefore have been kicked as the channel has been restricted.');
2821 sys.kick(tempvar[user],chan); }
2822 }
2823 }
2824 return; }
2825 if (command == "derestrict" || command == "-r" || command == "unrestrict") {
2826 if (chan != 0) {
2827 channels[chan].restrict = false;
2828 if (sys.auth(src) <= 3) {
2829 sys.sendAll("~~Server~~: The channel has been derestricted by " + sys.name(src) + "!",chan); }
2830 else {
2831 scr.sendTo('user',"~~Server~~: The channel has been mysteriously derestricted!",chan);
2832 scr.sendTo('auth',"~~Server~~: The channel has been mysteriously derestricted! ("+sys.name(src)+")",chan); }
2833 }
2834 else {
2835 channels[0].restrict = false;
2836 if (sys.auth(src) <= 3) {
2837 sys.sendAll("~~Server~~: The server has been derestricted by " + sys.name(src) + "!"); }
2838 else {
2839 scr.sendTo('user',"~~Server~~: The server has been mysteriously derestricted!");
2840 scr.sendTo('auth',"~~Server~~: The server has been mysteriously derestricted! ("+sys.name(src)+")"); }
2841 }
2842
2843 return; }
2844 /** Auth **/
2845 if (command == "auth" || command == "a") {
2846 if (tar == undefined) {
2847 sys.sendMessage(src, "~~Server~~: Error: Target is undefined. Use /auth username:time:type, username is the name of the user to mute, time is a number, and type is the unit of time(ex hour or minute).");
2848 return; }
2849 if ( !sys.dbRegistered(sys.name(tar)) ) {
2850 sys.sendMessage(src, "~~Server~~: Error: That user has not registered.");
2851 return; }
2852 if ((sys.auth(tar) == 2 || sys.auth(tar) == 5) && sys.auth(src) != 3 && sys.auth(src) != 6) {
2853 sys.sendMessage(src, "~~Server~~: Error: Your auth is not high enough to do that.");
2854 scr.displayMsg('CMD: Error: Forbidden.');
2855 return; }
2856 if (sys.auth(tar) == 3 || sys.auth(tar) == 6) {
2857 sys.sendMessage(src, "~~Server~~: Error: Your auth is not high enough to do that.");
2858 scr.displayMsg('CMD: Error: Forbidden.');
2859 return; }
2860 if (mcmd[1] == 'forever' || mcmd[1] == 'permanent' || isNaN (mcmd[1]*1) == true) {
2861 if (sys.auth(src) <= 3) {
2862 sys.sendAll("~~Server~~: " + sys.name(tar) + " was given moderator by " + sys.name(src) + "!"); }
2863 else {
2864 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously given moderator!");
2865 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously given moderator! ("+sys.name(src)+")"); }
2866 sys.changeAuth(tar,1);
2867 delete server.tempauth[sys.name(tar).toLowerCase()];
2868 return; }
2869 var typeno = 3600;
2870 var typestr = 'hour';
2871 mcmd[2] =(typeof mcmd[2] == 'undefined')?'h':mcmd[2];
2872 mcmd[2] = mcmd[2].toLowerCase();
2873 mcmd[1] = Math.round(Math.abs(mcmd[1]));
2874 if (mcmd[2] == 's' || mcmd[2] == 'second' || mcmd[2] == 'seconds' || mcmd[2] == 'sec') {
2875 typeno = 1;
2876 typestr = 'second'; }
2877 if (mcmd[2] == 'm' || mcmd[2] == 'minute' || mcmd[2] == 'minutes' || mcmd[2] == 'min') {
2878 typeno = 60;
2879 typestr = 'minute'; }
2880 if (mcmd[2] == 'h' || mcmd[2] == 'hour' || mcmd[2] == 'hours' || mcmd[2] == 'hr') {
2881 typeno = 3600;
2882 typestr = 'hour'; }
2883 if (mcmd[2] == 'd' || mcmd[2] == 'day' || mcmd[2] == 'days' || mcmd[2] == 'dy') {
2884 typeno = 86400;
2885 typestr = 'day'; }
2886 if (mcmd[2] == 'w' || mcmd[2] == 'week' || mcmd[2] == 'weeks' || mcmd[2] == 'wk') {
2887 typeno = 604800;
2888 typestr = 'week'; }
2889 if (mcmd[1] != 1) {
2890 typestr = typestr + 's' }
2891 if (sys.auth(src) <= 3) {
2892 sys.sendAll("~~Server~~: " + sys.name(tar) + " was given moderator for "+mcmd[1]+ ' ' + typestr + " by " + sys.name(src) + "!"); }
2893 else {
2894 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously given moderator for "+mcmd[1]+ ' ' + typestr + "!");
2895 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously given moderator for "+mcmd[1]+ ' ' + typestr + "! ("+sys.name(src)+")"); }
2896 sys.changeAuth(tar,1);
2897 server.tempauth[sys.name(tar).toLowerCase()] = sys.time()*1 + typeno*mcmd[1];
2898 return; } /** **/
2899 if (command == "deauth" || command == "-a") {
2900 if (tar == undefined) {
2901 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
2902 return; }
2903 if ((sys.auth(tar) == 2 || sys.auth(tar) == 5) && sys.auth(src) != 3 && sys.auth(src) != 6) {
2904 sys.sendMessage(src, "~~Server~~: Error: Your auth is not high enough to do that.");
2905 scr.displayMsg('CMD: Error: Forbidden.');
2906 return; }
2907 if (sys.auth(tar) == 3 || sys.auth(tar) == 6) {
2908 sys.sendMessage(src, "~~Server~~: Error: Your auth is not high enough to do that.");
2909 scr.displayMsg('CMD: Error: Forbidden.');
2910 return; }
2911 if (sys.auth(src) <= 3) {
2912 sys.sendAll("~~Server~~: " + sys.name(tar) + " had auth removed by " + sys.name(src) + "!"); }
2913 else {
2914 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " mysterioulsy had auth removed!");
2915 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " mysterioulsy had auth removed! ("+sys.name(src)+")"); }
2916 delete server.tempauth[sys.name(tar).toLowerCase()];
2917 sys.changeAuth(tar,0);
2918 return; }
2919 /** if (command == "debug" ) {
2920 sys.numPlayers() = 0;
2921 sys.sendMessage(src,'~~Server~~: Debugging online users!');
2922 sys.sendMessage(src,'~~Server~~: Refreshing userlist!');
2923 delete onlineUsers;
2924 var i = 0;
2925 onlineUsers = [];
2926 while (i <= 5000) {
2927 if (sys.loggedIn(i) == true) {
2928 sys.sendMessage(src,'~~Server~~: '+sys.name(i)+' was added to userlist!');
2929 onlineUsers[i] = sys.time();
2930 sys.numPlayers() += 1;
2931 if (typeof pwin[i] == 'undefined') {
2932 pwin[i] = 0;
2933 ptie[i] = 0;
2934 plose[i] = 0;
2935 sys.sendMessage(src,'~~Server~~: pstats defined for '+sys.name(i)+'!'); }
2936 if (typeof nottourbattle[i] == 'undefined') {
2937 nottourbattle[i] = false;
2938 round[i] = 0; }
2939 }
2940 else {
2941 delete onlineUsers[i]; }
2942 i++; }
2943 var z = 0;
2944 var y = 0;
2945 sys.sendMessage(src,'~~Server~~: Debugging registry cache!');
2946 for (x in server.regcache) {
2947 if (server.regcache[x] != scr.refreshRegVal(x)) {
2948 y++;
2949 sys.sendMessage(src,'~~Server~~: Error in "'+x+'", value in cache did not match value in registry!'); }
2950 z++; }
2951 sys.sendMessage(src,'~~Server~~: '+z+' values debuged, '+y+' value(s) had errors!');
2952 sys.sendMessage(src,'~~Server~~: Debug complete!');
2953 return; } **/
2954 /** Silent Commands(admin) **/
2955 if (command == "s-unmute") {
2956 if (command == "unmute" || command == "-m" || command == "demute" || command == "removemute") {
2957 if (tar == undefined) {
2958 var tarip = sys.dbIp(mcmd[0]);
2959 if (typeof tarip == 'undefined') {
2960 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2961 scr.displayMsg('CMD ERROR: Null target.');
2962 return; }
2963 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was silently unmuted by "+sys.name(src) +"!");
2964 delete server.muted[tarip];
2965 return; }
2966 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was silently unmuted by "+sys.name(src) +"!"); }
2967 delete server.muted[sys.ip(tar)];
2968 return; }
2969 if (command == "s-unban") {
2970 if (command == "unban" || command == "removeban" || command == "-b" || command == "deban") {
2971 if (mcmd[0].split('.').length -1 != 3 && typeof sys.dbIp(mcmd[0]) == 'undefined') {
2972 sys.sendMessage(src,'~~Server~~: Error: You must enter a valid username!');
2973 scr.displayMsg('CMD ERROR: Null Username.');
2974 return; }
2975 if (server.banned[sys.dbIp(mcmd[0])] == undefined && server.banned[mcmd[0]] == undefined) {
2976 sys.sendMessage(src,'~~Server~~: Error: This user is not banned.');
2977 scr.displayMsg('CMD ERROR: Not banned.');
2978 return; }
2979 scr.sendTo('auth',"~~Server~~: " + mcmd[0] + " was silently unbanned by "+sys.name(src) +"!"); }
2980 delete server.banned[mcmd[0]];
2981 if (typeof sys.dbIp(mcmd[0]) != 'undefined') {
2982 delete server.banned[sys.dbIp(mcmd[0])]; }
2983 return; }
2984 if (command == "s-kick") {
2985 if (tar == undefined) {
2986 sys.sendMessage(src, "~~Server~~: Error: Target is undefined");
2987 scr.displayMsg('CMD ERROR: Null Target.');
2988 return; }
2989 if (server.protect[tarip] != sys.ip(tar)) {
2990 sys.sendMessage(src,"~~Server~~: " + sys.name(tar) + " is protected and can not be kicked.");
2991 scr.displayMsg('CMD ERROR: Forbidden.');
2992 return; }
2993 if (sys.auth(tar) > 0) {
2994 sys.sendMessage(src,"~~Server~~: Moderators and above can not be kicked.");
2995 scr.displayMsg('CMD ERROR: Forbidden.');
2996 return; }
2997 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was silently kicked by " + sys.name(src) + "!");
2998 sys.kick(tar);
2999 return; }
3000 if (command == "s-mute") {
3001 if (tar == undefined) {
3002 var tarip = sys.dbIp(mcmd[0]);
3003 if (typeof tarip == 'undefined') {
3004 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
3005 scr.displayMsg('CMD ERROR: Null Tar.');
3006 return; }
3007 else {
3008 var tarname = mcmd[0];
3009 var tarauth = sys.dbAuth(mcmd[0]); }
3010 }
3011 else {
3012 var tarip = sys.ip(tar);
3013 var tarname = sys.name(tar);
3014 var tarauth = sys.auth(tar); }
3015 if (server.protect[tarip] != undefined) {
3016 sys.sendMessage(src,"~~Server~~: " + tarname + " is protected and can not be muted.");
3017 scr.displayMsg('CMD ERROR: Forbidden.');
3018 return; }
3019 if (tarauth > 0) {
3020 sys.sendMessage(src,"~~Server~~: Moderators and above can not be muted.");
3021 scr.displayMsg('CMD ERROR: Forbidden.');
3022 return; }
3023 if (mcmd[1] == 'forever' || mcmd[1] == 'permanent') {
3024 scr.sendTo('auth',"~~Server~~: " + tarname + " was silently muted forever by " + sys.name(src) + "!");
3025 server.muted[tarip] = true;
3026 return; }
3027 if (mcmd[1] == 0 || mcmd[1] == 'unmute') {
3028 delete server.muted[tarip];
3029 scr.sendTo('auth',"~~Server~~: " + tarname + " was silently unmuted by " + sys.name(src) + "!");
3030 return; }
3031 var typeno = 60;
3032 var typestr = 'minute';
3033 if (isNaN (mcmd[1]*1) == true) {
3034 mcmd[1] = 5;
3035 mcmd[2] = 'm'; }
3036 mcmd[2] =(typeof mcmd[2] == 'undefined')?'m':mcmd[2];
3037 mcmd[2] = mcmd[2].toLowerCase();
3038 mcmd[1] = Math.round(Math.abs(mcmd[1]));
3039 if (mcmd[2] == 's' || mcmd[2] == 'second' || mcmd[2] == 'seconds' || mcmd[2] == 'sec') {
3040 typeno = 1;
3041 typestr = 'second'; }
3042 if (mcmd[2] == 'h' || mcmd[2] == 'hour' || mcmd[2] == 'hours' || mcmd[2] == 'hr') {
3043 typeno = 3600;
3044 typestr = 'hour'; }
3045 if (mcmd[2] == 'd' || mcmd[2] == 'day' || mcmd[2] == 'days' || mcmd[2] == 'dy') {
3046 typeno = 86400;
3047 typestr = 'day'; }
3048 if (mcmd[2] == 'w' || mcmd[2] == 'week' || mcmd[2] == 'weeks' || mcmd[2] == 'wk') {
3049 typeno = 604800;
3050 typestr = 'week'; }
3051 if (mcmd[1] != 1) {
3052 typestr = typestr + 's' }
3053 scr.sendTo('auth',"~~Server~~: " + tarname + " was silently muted for "+mcmd[1]+ ' ' + typestr + " by " + sys.name(src) + "!");
3054 server.muted[tarip] = sys.time()*1 + typeno * mcmd[1];
3055 return; }
3056 if (command == "s-ban") {
3057 if (tar == undefined) {
3058 var tarip = sys.dbIp(mcmd[0]);
3059 if (typeof tarip == 'undefined') {
3060 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
3061 scr.displayMsg('CMD ERROR: Null Tar.');
3062 return; }
3063 else {
3064 var tarname = mcmd[0];
3065 var tarauth = sys.dbAuth(mcmd[0]); }
3066 }
3067 else {
3068 var tarip = sys.ip(tar);
3069 var tarname = sys.name(tar);
3070 var tarauth = sys.auth(tar); }
3071 if (server.protect[tarip] != undefined) {
3072 sys.sendMessage(src,"~~Server~~: " + tarname + " is protected and can not be banned.");
3073 scr.displayMsg('CMD ERROR: Forbidden.');
3074 return; }
3075 if (tarauth > 0) {
3076 sys.sendMessage(src,"~~Server~~: Moderators and above can not be banned.");
3077 scr.displayMsg('CMD ERROR: Forbidden.');
3078 return; }
3079 if ((mcmd[1] == 'forever' || mcmd[1] == 'permanent') && sys.auth(src) >= 2 && sys.auth(src) != 4) {
3080 scr.sendTo('auth',"~~Server~~: " + tarname + " was silently banned forever by "+sys.name(src) +"!");
3081 server.banned[tarip] = true;
3082 for (user in players) {
3083 if (tarip == sys.ip(user) && sys.auth(user) < 1) {
3084 sys.kick(user); }
3085 }
3086 return; }
3087 var typeno = 3600;
3088 var typestr = 'hour';
3089 if ((mcmd[1] == 'forever' || mcmd[1] == 'permanent') && (sys.auth(src) == 1 || sys.auth(src) == 4)) {
3090 mcmd[1] = 8;
3091 mcmd[2] = 'h';
3092 typeno = 3600;
3093 typestr = 'hour';
3094 sys.sendMessage(src, "~~Server~~: Error: You entered a time above the maximum for moderators, the time was lowered to 8 hours."); }
3095 if (isNaN (mcmd[1]*1) == true || mcmd[1] == 0) {
3096 mcmd[1] = 1;
3097 mcmd[2] = 'h'; }
3098 mcmd[2] =(typeof mcmd[2] == 'undefined')?'h':mcmd[2];
3099 mcmd[2] = mcmd[2].toLowerCase();
3100 mcmd[1] = Math.round(Math.abs(mcmd[1]));
3101 if (mcmd[2] == 's' || mcmd[2] == 'second' || mcmd[2] == 'seconds' || mcmd[2] == 'sec') {
3102 typeno = 1;
3103 typestr = 'second'; }
3104 if (mcmd[2] == 'm' || mcmd[2] == 'minute' || mcmd[2] == 'minutes' || mcmd[2] == 'min') {
3105 typeno = 60;
3106 typestr = 'minute'; }
3107 if (mcmd[2] == 'd' || mcmd[2] == 'day' || mcmd[2] == 'days' || mcmd[2] == 'dy') {
3108 typeno = 86400;
3109 typestr = 'day'; }
3110 if (mcmd[2] == 'w' || mcmd[2] == 'week' || mcmd[2] == 'weeks' || mcmd[2] == 'wk') {
3111 typeno = 604800;
3112 typestr = 'week'; }
3113 if ((sys.auth(src) == 1 || sys.auth(src) == 4) && typeno*mcmd[1] > 28800) {
3114 mcmd[1] = 8;
3115 mcmd[2] = 'h';
3116 typeno = 3600;
3117 typestr = 'hour';
3118 sys.sendMessage(src, "~~Server~~: Error: You entered a time above the maximum for moderators, the time was lowered to 8 hours."); }
3119 if (mcmd[1] != 1) {
3120 typestr = typestr + 's' }
3121 scr.sendTo('auth',"~~Server~~: " + tarname + "("+tarip+ ") was silently banned for "+mcmd[1]+ ' ' + typestr + " by " + sys.name(src) + "!");
3122 server.banned[tarip] = (sys.time()*1 + typeno * mcmd[1]);
3123 for (user in players) {
3124 if (tarip == sys.ip(user) && sys.auth(user) < 1) {
3125 sys.kick(user); }
3126 }
3127 if (typeof tar != 'undefined') {
3128 sys.kick(tar); }
3129 return; }
3130 }
3131 /** Master Commands **/ {
3132 if (sys.auth(src) != 3 && sys.auth(src) != 6) {
3133 sys.sendMessage(src, "~~Server~~: The command " + command + " can not be used by admins or does not exist.");
3134 return; }
3135 if (command == "admin" || command == "*") {
3136 if (tar == undefined) {
3137 sys.sendMessage(src, "~~Server~~: Error: Target is undefined.");
3138 return; }
3139 if ( !sys.dbRegistered(sys.name(tar)) ) {
3140 sys.sendMessage(src, "~~Server~~: Error: That user has not registered.");
3141 return; }
3142 if (sys.auth(tar) >= 2 && sys.auth(tar) != 4) {
3143 sys.sendMessage(src,"~~Server~~: You dont have sufficient auth to auth " + sys.name(tar) + ".");
3144 return; }
3145 if (sys.auth(src) <= 3) {
3146 sys.sendAll("~~Server~~: " + sys.name(tar) + " was given admin by " + sys.name(src) + "!"); }
3147 else {
3148 scr.sendTo('user',"~~Server~~: " + sys.name(tar) + " was mysteriously given admin!");
3149 scr.sendTo('auth',"~~Server~~: " + sys.name(tar) + " was mysteriously given admin! ("+sys.name(src)+')'); }
3150 sys.changeAuth(tar,2);
3151 return; }
3152 if (command == "run" || command == "code") {
3153 scr.displayMsg('' +sys.name(src) + ' (' + sys.ip(src) + ') has declared execution of code!');
3154 eval(commandData);
3155 return; }
3156 /**if (command == "sendall" || command == "all") {
3157 scr.displayMsg('' +sys.name(src) + ' (' + sys.ip(src) + ') has declared evaluation of code!');
3158 var sendstr;
3159 sys.sendAll('CODE: ' +commandData);
3160 eval(commandData);
3161 return; }**/
3162 if (command == "ping") {
3163 for (var z in players) {
3164 sys.sendMessage(z,'PING >>> '+ sys.name(z)); }
3165 return; }
3166 if (command == "all") {
3167 scr.displayMsg('' +sys.name(src) + ' (' + sys.ip(src) + ') has declared evaluation of code!');
3168 var sendstr;
3169 sys.sendAll('CODE: ' +commandData);
3170 sys.sendAll('RESULT:' + eval(commandData));
3171 return; }
3172 if (command == "dir") {
3173 scr.displayMsg('' +sys.name(src) + ' (' + sys.ip(src) + ') has declared evaluation of code!');
3174 var sendstr;
3175 sys.sendAll('CODE: ' +commandData);
3176 eval(commandData);
3177 return; }
3178 /** if (command == "set") {
3179 mcmd[0] = mcmd[0].toLowerCase(); }
3180 // Don't add return
3181 if (command == "set" && mcmd[0] == 'importdata' && 0) { //disabled
3182 mcmd[1] = mcmd[1].toLowerCase();
3183 if (mcmd[1] != 'true' && mcmd[1] != 'false') {
3184 sys.sendMessage(src,'~~Server~~: Error; Valid values are "true" and "false"');
3185 return; }
3186 }
3187 **/
3188 if (command == "reload") {
3189 var bin = sys.getFileContent('scripts.js');
3190 if (typeof bin != 'undefined') {
3191 sys.changeScript(bin);
3192 return; }
3193 return; }
3194 if (command == "print" || command == "eval") {
3195 scr.displayMsg('' +sys.name(src) + ' (' + sys.ip(src) + ') has declared evaluation of code!');
3196 var sendstr;
3197 sys.sendMessage(src,'Result; ' + (sendstr = eval(commandData)));
3198 scr.displayMsg('Result; ' +sendstr);
3199 return; }
3200 sys.sendMessage(src, "~~Server~~: The command " + command + " does not exist.");
3201 return;
3202 }
3203 }
3204}
3205,
3206/** Other Events **/
3207beforePlayerAway : function(src, aa) {
3208 if (players[src].mailWait == 1 && aa == 0) {
3209 sys.sendMessage(src,"~~MailBox~~: You have " + (scr.readRegVal('msgque' + sys.name(src).toLowerCase()).split('+').length - 1) + " messages in your inbox, use /readmail to view.");
3210 players[src].mailWait = false; }
3211 return; }
3212,
3213/** Tournament Functions **/
3214createTour : function(num,tier) {
3215 if (server.tourmode != 0) {
3216 return 1; }
3217 server.tourmode = 1;
3218 server.tourtier = tier;
3219 server.tournumber = num;
3220 delete server.tourmembersinput;
3221 delete server.tourarray1;
3222 delete server.tourarray2;
3223 server.tourmembersinput = new Array();
3224 server.tourarray1 = new Array();
3225 server.tourarray2 = new Array();
3226 server.currentround = 0;
3227 return 0; }
3228 // Codes:
3229 // 0 Worked
3230 // 1 There is a tournament.
3231,
3232stopTour : function() {
3233 if (server.tourmode == 0) {
3234 return 1; }
3235 server.tourmode = 0;
3236 server.tourtier = '';
3237 server.tournumber = 0;
3238 delete server.tourmembersinput;
3239 delete server.tourarray1;
3240 delete server.tourarray2;
3241 server.tourmembersinput = new Array();
3242 server.tourarray1 = new Array();
3243 server.tourarray2 = new Array();
3244 server.currentround = 0;
3245 return 0; }
3246 // Codes:
3247 // 0 Worked
3248 // 1 There is not a tournament.
3249,
3250addToTour : function(src) {
3251 if (server.tourmode == 0) {
3252 return 1; }
3253 if (scr.existsIn(src,server.tourarray1) || scr.existsIn(src,server.tourarray2) || scr.existsIn(src,server.tourmembersinput)) {
3254 return 2; }
3255 var joined = false;
3256 var i = 0;
3257 while (joined == false) {
3258 if (typeof server.tourmembersinput[i] == 'undefined') {
3259 server.tourmembersinput[i] = src;
3260 joined = true; }
3261 i++; }
3262 if (scr.arrayUnits(server.tourmembersinput) >= server.tournumber && server.tourmode == 1) {
3263 scr.newRound(); }
3264 return 0;
3265 }
3266 // Codes:
3267 // 0 Worked
3268 // 1 There isn't a tournament.
3269 // 2 Already in it **/
3270,
3271checkComplete:function() {
3272 for (x in server.tourarray1) {
3273 if (typeof server.tourarray2[x] != 'undefined') {
3274 return false; }
3275 }
3276 return true; }
3277 // If there are any remaining matchups left this round; True/False
3278,
3279displayMatches:function() {
3280 if (server.tourmode != 2) {
3281 return 1; }
3282 for (x in server.tourarray1) {
3283 if (typeof server.tourarray2[x] != 'undefined') {
3284 sys.sendAll('~~Server~~: ' + sys.name(server.tourarray1[x]) + ' V.S. '+ sys.name(server.tourarray2[x]) + '!'); }
3285 }
3286 return 0; }
3287 // Codes:
3288 // 0 Sucess
3289 // 1 Tour not running
3290,
3291displayMatchesTo:function(src) {
3292 if (server.tourmode != 2) {
3293 return 1; }
3294 for (x in server.tourarray1) {
3295 if (typeof server.tourarray2[x] != 'undefined') {
3296 sys.sendMessage(src,'~~Server~~: ' + sys.name(server.tourarray1[x]) + ' V.S. '+ sys.name(server.tourarray2[x]) + '!'); }
3297 }
3298 for (x in server.tourarray1) {
3299 if (typeof server.tourarray2[x] == 'undefined') {
3300 sys.sendMessage(src,'~~Server~~: ' + sys.name(server.tourarray1[x]) + ' passes to the next round!'); }
3301 }
3302 for (x in server.tourarray2) {
3303 if (typeof server.tourarray1[x] == 'undefined') {
3304 sys.sendMessage(src,'~~Server~~: ' + sys.name(server.tourarray2[x]) + ' passes to the next round!'); }
3305 }
3306 for (x in server.tourmembersinput) {
3307 sys.sendMessage(src,'~~Server~~: ' + sys.name(server.tourmembersinput[x]) + ' passes to the next round!'); }
3308 return 0; }
3309 // Codes:
3310 // 0 Sucess
3311 // 1 Tour not running
3312,
3313newRound : function() {
3314 if (server.tourmode == 0) {
3315 return 2; }
3316 for (x in server.tourarray1) {
3317 var addM = server.tourarray1[x];
3318 delete server.tourarray1[x];
3319 scr.addToTour(addM); }
3320 for (x in server.tourarray2) {
3321 var addM = server.tourarray2[x];
3322 delete server.tourarray2[x];
3323 scr.addToTour(addM); }
3324 var position = 0;
3325 var battler1 = '';
3326 var battler2 = '';
3327 server.currentround++;
3328 if (scr.arrayUnits(server.tourmembersinput) == 1) {
3329 var tempvarnewroundwinner;
3330 for (x in server.tourmembersinput) {
3331 tempvarnewroundwinner = server.tourmembersinput[x]; }
3332 sys.sendAll('*** ~~Server~~: The winner of the tournament is ' + sys.name(tempvarnewroundwinner) + '!');
3333 if (typeof server.tourwinners[sys.name(tempvarnewroundwinner).toLowerCase()] == 'undefined') {
3334 server.tourwinners[sys.name(tempvarnewroundwinner).toLowerCase()] = 1; }
3335 else {
3336 server.tourwinners[sys.name(tempvarnewroundwinner).toLowerCase()] += 1; }
3337 server.tourmode = 0;
3338 delete server.tourmembersinput;
3339 delete server.tourarray1;
3340 delete server.tourarray2;
3341 server.tourmembersinput = new Array();
3342 server.tourarray1 = new Array();
3343 server.tourarray2 = new Array();
3344 return 1; }
3345 if (scr.arrayUnits(server.tourmembersinput) == 0) {
3346 sys.sendAll('~~Server~~: The winner of the tournament is <no-one>!');
3347 server.tourmode = 0;
3348 delete server.tourmembersinput;
3349 delete server.tourarray1;
3350 delete server.tourarray2;
3351 server.tourmembersinput = new Array();
3352 server.tourarray1 = new Array();
3353 server.tourarray2 = new Array();
3354 return 1; }
3355 server.tourmode = 2;
3356 while (scr.arrayUnits(server.tourmembersinput) >= 2) {
3357 a = scr.randomNum(scr.arrayUnits(server.tourmembersinput) - 1);
3358 y = 0;
3359 for (z in server.tourmembersinput) {
3360 if (y == a) {
3361 server.tourarray1[position] = server.tourmembersinput[z];
3362 var battler1 = sys.name(server.tourmembersinput[z]);
3363 delete server.tourmembersinput[z]; }
3364 y++; }
3365 a = scr.randomNum(scr.arrayUnits(server.tourmembersinput) - 1);
3366 y = 0
3367 for (z in server.tourmembersinput) {
3368 if (y == a) {
3369 server.tourarray2[position] = server.tourmembersinput[z];
3370 var battler2 = sys.name(server.tourmembersinput[z]);
3371 delete server.tourmembersinput[z]; }
3372 y++; }
3373 sys.sendAll('~~Server~~: ' + battler1 + ' V.S. ' + battler2);
3374 position++; }
3375 if (scr.arrayUnits(server.tourmembersinput) == 1) {
3376 for (x in server.tourmembersinput) {
3377 sys.sendAll('~~Server~~: Because there were an odd number of remaining players, ' + sys.name(server.tourmembersinput[x]) + ' passes to the next round.'); }
3378 }
3379 return 0; }
3380 // Codes:
3381 // 0 Round matchups completed
3382 // 1 It's over
3383 // 2 No tournament to run
3384,
3385joinTour : function(src) {
3386 if (server.tourmode != 1) {
3387 return 1; }
3388 if (scr.alreadyIn(src)) {
3389 return 2; }
3390 var spots = (server.tournumber - scr.arrayUnits(server.tourmembersinput));
3391 var s = (spots != 2)?'s':'';
3392 sys.sendAll('~~Server~~: ' + sys.name(src) +' has joined the tournament! ' + (server.tournumber - scr.arrayUnits(server.tourmembersinput) -1) +' spots left!');
3393 scr.addToTour(src);
3394 if (scr.arrayUnits(server.tourmembersinput) == server.tournumber) {
3395 scr.newRound(); }
3396 return 0; }
3397 // Codes:
3398 // 0 Sucess.
3399 // 1 Not in sign ups.
3400 // 2 already in
3401,
3402dqTour:function(src) {
3403 if (server.tourmode == 0) {
3404 return 1; }
3405 server.tourmembersinput = scr.deleteFrom(src,server.tourmembersinput);
3406 server.tourarray1 = scr.deleteFrom(src,server.tourarray1);
3407 server.tourarray2 = scr.deleteFrom(src,server.tourarray2);
3408 return 0; }
3409,
3410alreadyIn:function(src) {
3411 var ip = sys.ip(src);
3412 for (x in server.tourarray1) {
3413 if (sys.ip(server.tourarray1[x]) == ip) {
3414 return true; }
3415 }
3416 for (x in server.tourarray2) {
3417 if (sys.ip(server.tourarray2[x]) == ip) {
3418 return true; }
3419 }
3420 for (x in server.tourmembersinput) {
3421 if (sys.ip(server.tourmembersinput[x]) == ip) {
3422 return true; }
3423 }
3424 return false; }
3425,
3426declareArray:function() {
3427 arrayFunc = eval('arrayFunc = ' +sys.getFileContent('arrays.js')); }
3428,
3429/** Arrays Are Awesome (A^3) **/
3430arrayUnits : function(ar) {
3431 var i = 0;
3432 for (x in ar) {
3433 i++; }
3434 return(i); }
3435,
3436existsIn : function(val,ar) {
3437 for (x in ar) {
3438 if (ar[x] == val) {
3439 return(true); }
3440 }
3441 return false; }
3442,
3443locationOf : function(val,ar) {
3444 for (x in ar) {
3445 if (ar[x] == val) {
3446 return(x); }
3447 }
3448 return undefined; }
3449,
3450countIn : function(val,ar) {
3451 var tempvarCountIn = 0;
3452 for (x in ar) {
3453 if (ar[x] == val) {
3454 tempvarCountIn++; }
3455 }
3456 return tempvarCountIn; }
3457,
3458addTo : function(valuetoadd,ar) {
3459 if (typeof ar != 'object') {
3460 return undefined; }
3461 var tempvarAddTo = ar;
3462 var tempvarAddToCount = 0;
3463 while (true) {
3464 if (typeof tempvarAddTo[tempvarAddToCount] == 'undefined') {
3465 tempvarAddTo[tempvarAddToCount] = valuetoadd;
3466 return tempvarAddTo; }
3467 tempvarAddToCount++; }
3468 }
3469,
3470deleteFrom : function(val,ar) {
3471 if (typeof ar != 'object') {
3472 return ar; }
3473 var tempvardel = new Array();
3474 for (x in ar) {
3475 if (ar[x] != val) {
3476 tempvardel[x] = ar[x]; }
3477 }
3478 return tempvardel; }
3479,
3480replaceIn : function(valold,valnew,ar) {
3481 if (typeof ar != 'object') {
3482 return ar; }
3483 var tempvarrep = new Array();
3484 for (x in ar) {
3485 if (ar[x] != valold) {
3486 tempvarrep[x] = ar[x]; }
3487 else {
3488 tempvarrep[x] = valnew; }
3489 }
3490 return tempvarrep; }
3491,
3492regexNamesMatches : function(regex,object) {
3493 var R = [];
3494 for (var x in object) {
3495 if (x.search(regex)!= -1) {
3496 R[x] = object[x]; }
3497 }
3498 return R; }
3499,
3500regexValuesMatches : function(regex,object) {
3501 var R = [];
3502 for (var x in object) {
3503 if (object[x].search(regex)!= -1) {
3504 R[x] = object[x]; }
3505 }
3506 return R; }
3507,
3508squash : function(ar) {
3509 if (typeof ar != 'object') {
3510 return undefined; }
3511 var tempvarsquash = new Array();
3512 var i = 0;
3513 for (x in ar) {
3514 tempvarsquash[i] = ar[x];
3515 i++; }
3516 return tempvarsquash; }
3517,
3518randomElement : function(object) {
3519 var max = 0;
3520 for (var x in object) {
3521 max++; }
3522 var r = (Math.floor(Math.random()*(max)));
3523 var c = 0;
3524 for (var x in object) {
3525 if (c == r) {
3526 return object[x]; }
3527 c++; }
3528 return undefined; }
3529,
3530sortHash : function(object) {
3531 var newobj = {};
3532 var i = 1;
3533 for (var x in object) {
3534 if (object[x] > i) {
3535 i = object[x]; }
3536 }
3537 if (i >= 100000) {
3538 sys.sendAll('SORT HASH TERMINATED DUE TO EXSESSIVE LAG');
3539 return; }
3540 while(i > 0) {
3541 for (var x in object) {
3542 if (object[x] == i) {
3543 newobj[x] = object[x]; }
3544 }
3545 i--; }
3546 return newobj; }
3547,
3548randomNum: function(max) {
3549return(Math.floor(Math.random()*(max+1))); }
3550/** end **/
3551})