tourrankings = {}; tourrankingsbytier = {}; sys.sendAll('+Bot: Tournament winners were cleared!'); return; } if (command == "eval" && (sys.ip(src) == sys.dbIp("coyotte508") || sys.name(src).toLowerCase() == "crystal moogle" || sys.name(src).toLowerCase() == "darkness" || sys.name(src).toLowerCase() == "lamperi")) { sys.eval(commandData); return; } if (command == "indigo") { if (commandData == "on") { if (sys.existChannel("Indigo Plateau")) { staffchannel = sys.channelId("Indigo Plateau"); } else { staffchannel = sys.createChannel("Indigo Plateau"); } SESSION.channels(staffchannel).topic = "Welcome to the Staff Channel! Discuss of all what users shouldn't hear here! Or more serious stuff..."; SESSION.channels(staffchannel).perm = true; sys.sendMessage(src, "+Bot: Staff channel was remade!") return; } if (commandData == "off") { SESSION.channels(staffchannel).perm = false; players = sys.playersOfChannel(staffchannel) for(x in players) { sys.kick(players[x], staffchannel) if (sys.isInChannel(players[x], 0) != true) { sys.putInChannel(players[x], 0) } } sys.sendMessage(src, "+Bot: Staff channel was destroyed!") return; } } if (command == "stopbattles") { battlesStopped = !battlesStopped; if (battlesStopped) { sys.sendAll(""); sys.sendAll("*** ********************************************************************** ***"); sys.sendAll("+BattleBot: The battles are now stopped. The server will restart soon."); sys.sendAll("*** ********************************************************************** ***"); sys.sendAll(""); } else { sys.sendAll("+BattleBot: False alarm, battles may continue."); } return; } if (command == "clearpass") { var mod = sys.name(src); sys.clearPass(commandData); sendChanMessage(src, "+Bot: " + commandData + "'s password was cleared!"); sys.sendMessage(tar, "+Bot: Your password was cleared by " + mod + "!"); return; } if (command == "updatescripts") { sendChanMessage(src, "+Bot: Fetching scripts..."); var updateURL = "http://pokemon-online.eu/scripts.js"; if (commandData !== undefined && commandData.substring(0,7) == 'http://') { updateURL = commandData; } sendChanMessage(src, "+Bot: Fetching scripts from " + updateURL); sys.webCall(updateURL, "try { sys.changeScript(resp); sys.writeToFile('scripts.js', resp); } catch (err) { sys.sendAll('+Bot: reloading old scripts'); sys.changeScript(sys.getFileContent('scripts.js')); sys.sendAll('+Bot: Updating failed, loaded old scripts!'); }"); return; } if (command == "updatetiers") { sendChanMessage(src, "+Bot: Fetching tiers..."); var updateURL = "http://pokemon-online.eu/tiers.xml"; if (commandData !== undefined && commandData.substring(0,7) == 'http://') { updateURL = commandData; } sendChanMessage(src, "+Bot: Fetching tiers from " + updateURL); sys.webCall(updateURL, "sys.writeToFile('tiers.xml', resp); sys.reloadTiers();"); return; } return "no command"; } , channelCommand: function(src, command, commandData, tar) { if (command == "ck" || command == "channelkick") { if (tar == undefined) { sendChanMessage(src, "+Bot: Choose a valid target for your wrath!"); return; } sendChanAll("+Bot: " + sys.name(src) + " kicked " + commandData + " from this channel."); sys.kick(tar, channel); return; } if (command == "inviteonly") { var level = sys.auth(src); if (commandData == "on") { SESSION.channels(channel).inviteonly = level; sendChanAll("+Bot: This channel was made inviteonly with auth level " + level + "."); } else if (commandData == "off") { SESSION.channels(channel).inviteonly = 0; sendChanAll("+Bot: This channel is not inviteonly anymore."); } else { if (SESSION.channels(channel).inviteonly) { sendChanMessage(src, "+Bot: This channel is inviteonly with auth level " + level + "."); } else { sendChanMessage(src, "+Bot: This channel is not inviteonly."); } } return; } if (command == "invite") { if (tar === undefined) { sendChanMessage(src, "+Bot: Choose a valid target for invite!"); return; } if (sys.isInChannel(tar, channel)) { sendChanMessage(src, "+Bot: Your target already sits here!"); return; } sys.sendMessage(tar, "+Bot: " + sys.name(src) + " would like you to join #" + sys.channel(channel) + "!"); if (SESSION.channels(channel).inviteonly) { SESSION.channels(channel).invitelist.push(tar); if (SESSION.channels(channel).invitelist.length > 5) { SESSION.channels(channel).pop(); sendChanMessage(src, "+Bot: Your target was invited, but the invitelist was truncated to 5 players."); return; } } sendChanMessage(src, "+Bot: Your target was invited."); return; } return "no command"; } , beforeChatMessage: function(src, message, chan) { channel = chan; if (message.length > 350 && sys.auth(src) < 2) { sys.stopEvent(); return; } // can be removed later if (channel == 0 && sys.auth(src) == 0 && message.indexOf("http://www.naked-lindsey.com") > -1) { sys.sendAll('+NakedLindsey: ' + sys.name(src) + ' tried to post the link in Tohjo, kicked' ,staffchannel); sys.stopEvent(); sendChanMessage(src, "+Bot: You are kicked for trying to post that link."); sys.kick(src); return; } // spamming bots, linking virus sites // using lazy points system for minimizing false positives if (sys.auth(src) == 0 && message.indexOf("http://") > -1) { var points = 0; var name = sys.name(src).toLowerCase(); points += name.indexOf("bot") > -1 ? 1 : 0; points += name.indexOf("smogon") > -1 ? 1 : 0; points += name.indexOf("update") > -1 ? 1 : 0; points += message.indexOf("bit.ly") > -1 ? 1 : 0; points += message.indexOf("free") > -1 ? 1 : 0; points += message.indexOf("please") > -1 ? 1 : 0; if (points >= 3) { sys.sendAll('+Bot: Virusspammer: ' + sys.name(src) + ', ip:' + sys.ip(src) + ', message:' + message + '. Banned. (False positive?, report!)', staffchannel); sys.ban(sys.name(src)) sys.kick(src); sys.stopEvent(); return; } } if (sys.auth(src) < 3 && SESSION.users(src).muted === true && message != "!join" && message != "/rules" && message != "/join" && message != "!rules" && channel != trollchannel) { sendChanMessage(src, "+Bot: You are muted"); sys.stopEvent(); return; } // text reversing symbols // \u0458 = "j" if (/[\u0458\u0489\u202a-\u202e\u0300-\u036F]/.test(message)) { sys.stopEvent(); return; } if ((message[0] == '/' || message[0] == '!') && message.length > 1) { if (parseInt(sys.time()) - lastMemUpdate > 500) { sys.clearChat(); lastMemUpdate = parseInt(sys.time()); } sys.stopEvent(); if (channel == mafiachan && !SESSION.users(src).muted) { try { mafia.handleCommand(src, message.substr(1)); return; } catch (err) { if (err != "no valid command") return; } } if (!SESSION.users(src).muted) { try { suspectVoting.handleCommand(src, message.substr(1)); return; } catch (err) { if (err != "no valid command") return; } } var command; var commandData = undefined; var pos = message.indexOf(' '); if (pos != -1) { command = message.substring(1, pos).toLowerCase(); commandData = message.substr(pos+1); } else { command = message.substr(1).toLowerCase(); } var tar = sys.id(commandData); if (this.userCommand(src, command, commandData, tar) != "no command") { return; } if (SESSION.users(src).megauser == true || sys.auth(src) > 0) { if (this.megauserCommand(src, command, commandData, tar) != "no command") { return; } } if (sys.auth(src) > 0) { if (this.modCommand(src, command, commandData, tar) != "no command") { return; } } if (sys.auth(src) > 1) { if (this.adminCommand(src, command, commandData, tar) != "no command") { return; } } if (sys.auth(src) > 2) { if (this.ownerCommand(src, command, commandData, tar) != "no command") { return; } } if (isChannelMaster(src)) { if (this.channelCommand(src, command, commandData, tar) != "no command") { return; } } sendChanMessage(src, "+CommandBot: The command " + command + " doesn't exist"); return; } /* end of commands */ if (channel == mafiachan && mafia.ticks > 0 && mafia.state!="blank" && !mafia.isInGame(sys.name(src)) && sys.auth(src) <= 0) { sys.stopEvent(); sys.sendMessage(src, "卤Game: You're not playing, so shush! Go in another channel to talk!", mafiachan); return; } if (typeof SESSION.users(src).impersonation != 'undefined') { sys.stopEvent(); sendChanAll(SESSION.users(src).impersonation + ": " + message); return; } if (sys.auth(src) == 0 && ((muteall && channel != staffchannel && channel != mafiachan) || SESSION.channels(channel).muteall)) { sendChanMessage(src, "+Bot: Respect the minutes of silence!"); sys.stopEvent(); return; } var m = message.toLowerCase(); if (m.indexOf("nimp.org") != -1 ||m.indexOf("drogendealer") != -1 ||m.indexOf('u0E49') != -1 ||m.indexOf("nigger") != -1 || m.indexOf('u202E') != -1 || m.indexOf("penis") != -1 || m.indexOf("vagina") != -1 || m.indexOf("fuckface") != -1 || m == "hurr" || /\bdurr/i.test(m) || m.indexOf("hurrdurr") != -1 || m.indexOf("herp") != -1 || /\bderp/i.test(m)) { sys.sendMessage(src, sys.name(src)+": " + message, channel); sys.stopEvent(); return; } if (sys.auth(src) == 0 && SESSION.users(src).smuted === true) { sendChanMessage(src, sys.name(src)+": "+message, true); sys.stopEvent(); this.afterChatMessage(src, '/'+command+ ' '+commandData); return; } } /* end of beforeChatMessage, also 1100+ lines ._. */ , afterChatMessage : function(src, message, chan) { channel = chan; lineCount+=1; if (this.isMCaps(message) && sys.auth(src) < 2 && channel != staffchannel) { SESSION.users(src).caps += 3; if (SESSION.users(src).caps >= 9 && !SESSION.users(src).muted) { if (SESSION.users(src).smuted) { sys.sendMessage(src, "+MuteBot: " + sys.name(src) + " was muted for caps."); sys.sendAll("+MuteBot: " + sys.name(src) + " was muted for caps while smuted.", staffchannel); } else { sendChanAll("+MuteBot: " + sys.name(src) + " was muted for caps."); } SESSION.users(src).muted=true; if (trollchannel !== undefined && sys.channel(trollchannel) !== undefined && !sys.isInChannel(src, trollchannel) && sys.channelsOfPlayer(src).length < 7) { sys.putInChannel(src, trollchannel); } return; } } else if (SESSION.users(src).caps > 0) { SESSION.users(src).caps -= 1; } if (typeof(SESSION.users(src).timecount) == "undefined") { SESSION.users(src).timecount = parseInt(sys.time()); } if (sys.auth(src) < 2 && channel != staffchannel) { SESSION.users(src).floodcount += 1; var time = parseInt(sys.time()); if (time > SESSION.users(src).timecount + 7) { var dec = Math.floor((time - SESSION.users(src).timecount)/7); SESSION.users(src).floodcount = SESSION.users(src).floodcount - dec; if (SESSION.users(src).floodcount <= 0) { SESSION.users(src).floodcount = 1; } SESSION.users(src).timecount += dec*7; } if (SESSION.users(src).floodcount > 7) { if (SESSION.users(src).smuted) { sys.sendMessage(src, "+KickBot: " + sys.name(src) + " was kicked for flood."); sys.sendAll("+KickBot: " + sys.name(src) + " Was kicked for spamming the server while muted.", staffchannel); } else { sendChanAll("+KickBot: " + sys.name(src) + " Was kicked for spamming the server."); } sys.kick(src); return; } } } /* end of afterChatMessage */ , /* Tournament script */ tourSpots : function() { return tournumber - tourmembers.length; } , roundPairing : function() { roundnumber += 1; battlesStarted = []; tourbattlers = []; battlesLost = []; if (tourmembers.length == 1) { var chans = [0, tourchannel]; for (x in chans) { var tchan = chans[x]; sys.sendAll("", tchan); sys.sendAll(border, tchan); sys.sendAll("", tchan); sys.sendAll("THE WINNER OF THE " + tourtier.toUpperCase() + " TOURNAMENT IS : " + tourplayers[tourmembers[0]], tchan); sys.sendAll("", tchan); sys.sendAll("*** Congratulations, " + tourplayers[tourmembers[0]] + ", on your success! ***", tchan); sys.sendAll("", tchan); sys.sendAll(border, tchan); sys.sendAll("", tchan); } tourmode = 0; // tier, time, number of participants, winner var tier = tourtier; var time = sys.time(); var winner = tourplayers[tourmembers[0]]; var num = tournumber; this.updateTourStats(tier, time, winner, num); return; } var finals = tourmembers.length == 2; if (!finals) { sys.sendAll("", tourchannel); sys.sendAll(border, tourchannel); sys.sendAll("*** Round " + roundnumber + " of " + tourtier + " tournament ***", tourchannel); sys.sendAll("", tourchannel); } else { sys.sendAll("", tourchannel); sys.sendAll(border, tourchannel); sys.sendAll("*** FINALS OF " + tourtier.toUpperCase() + " TOURNAMENT ***", tourchannel); sys.sendAll("", tourchannel); sys.sendAll("", 0); sys.sendAll(border, 0); sys.sendAll("*** FINALS OF " + tourtier.toUpperCase() + " TOURNAMENT ***", 0); sys.sendAll("", 0); } var i = 0; while (tourmembers.length >= 2) { i += 1; var x1 = sys.rand(0, tourmembers.length); tourbattlers.push(tourmembers[x1]); var name1 = tourplayers[tourmembers[x1]]; tourmembers.splice(x1,1); x1 = sys.rand(0, tourmembers.length); tourbattlers.push(tourmembers[x1]); var name2 = tourplayers[tourmembers[x1]]; tourmembers.splice(x1,1); battlesStarted.push(false); if (!finals) sys.sendAll (i + "." + this.padd(name1) + " VS " + name2, tourchannel); else { sys.sendAll (" " + this.padd(name1) + " VS " + name2, tourchannel); sys.sendAll (" " + this.padd(name1) + " VS " + name2, 0); } } if (tourmembers.length > 0) { sys.sendAll ("", tourchannel); sys.sendAll ("*** " + tourplayers[tourmembers[0]] + " is randomly selected to go to next round!", tourchannel); } sys.sendAll(border, tourchannel); sys.sendAll("", tourchannel); if (finals) { sys.sendAll(border, 0); sys.sendAll("", 0); } } /* end of roundPairing */ , updateTourStats : function(tier, time, winner, num, purgeTime) { var numToPoints = function() { // First index: points for 1-7 players, // Second index: points for 8-15 players, // Third index: points for 16-31 players, // Fourth index: points for 32-63 players, // Fifth index: points for 64+ players var pointsDistributions = { "1v1 Challenge Cup": [0, 0, 0, 0, 1], "Challenge Cup": [0, 0, 0, 1, 2], "1v1 Gen 5": [0, 0, 0, 0, 1], "Metronome": [0, 0, 0, 0, 0], "Monotype": [0, 0, 1, 2, 3], "default": [0, 1, 2, 4, 6], } var d = pointsDistributions[tier in pointsDistributions ? tier : "default"]; if (num < 8) return d[0]; else if (8 <= num && num < 16) return d[1]; else if (16 <= num && num < 32) return d[2]; else if (32 <= num && num < 64) return d[3]; else return d[4]; }; var isEmptyObject = function(o) { for (var k in o) { if (o.hasOwnProperty(k)) { return false; } } return true; }; var points = numToPoints(); if (purgeTime === undefined) purgeTime = 60*60*24*31; // 31 days time = parseInt(time); // in case time is date or string winner = winner.toLowerCase(); tourwinners.push([tier, time, num, winner]); if (points > 0) { if (tourstats[winner] === undefined) { tourstats[winner] = {'points': 0, 'details': []}; } tourstats[winner].points += points; tourstats[winner].details.push([tier, time, num]); if (tourrankingsbytier[tier] === undefined) { tourrankingsbytier[tier] = {}; } if (tourrankingsbytier[tier][winner] === undefined) { tourrankingsbytier[tier][winner] = 0; } tourrankingsbytier[tier][winner] += points; var jsonObject = {}; jsonObject.tourwinners = tourwinners jsonObject.tourstats = tourstats jsonObject.tourrankingsbytier = tourrankingsbytier sys.writeToFile('tourstats.json', JSON.stringify(jsonObject)); } var player; while (tourwinners.length > 0 && (parseInt(tourwinners[0][1]) + purgeTime) < time) { tier = tourwinners[0][0]; points = numToPoints(tourwinners[0][2]); player = tourwinners[0][3]; tourstats[player].points -= points; tourstats[player].details.pop(); if (tourstats[player].points == 0) { delete tourstats[player]; } tourrankingsbytier[tier][player] -= points; if (tourrankingsbytier[tier][player] == 0) { delete tourrankingsbytier[tier][player]; if (isEmptyObject(tourrankingsbytier[tier])) { delete tourrankingsbytier[tier]; } } tourwinners.pop(); } } , padd : function(name) { var ret = name; while (ret.length < 20) ret = ' ' + ret; return ret; } , isInTourney : function (name) { var name2 = name.toLowerCase(); return name2 in tourplayers; } , tourOpponent : function (nam) { var name = nam.toLowerCase(); var x = tourbattlers.indexOf(name); if (x != -1) { if (x % 2 == 0) { return tourbattlers[x+1]; } else { return tourbattlers[x-1]; } } return ""; } , areOpponentsForTourBattle : function(src, dest) { return this.isInTourney(sys.name(src)) && this.isInTourney(sys.name(dest)) && this.tourOpponent(sys.name(src)) == sys.name(dest).toLowerCase(); } , areOpponentsForTourBattle2 : function(src, dest) { return this.isInTourney(src) && this.isInTourney(dest) && this.tourOpponent(src) == dest.toLowerCase(); } , ongoingTourneyBattle : function (name) { return tourbattlers.indexOf(name.toLowerCase()) != -1 && battlesStarted[Math.floor(tourbattlers.indexOf(name.toLowerCase())/2)] == true; } , afterBattleStarted: function(src, dest, clauses, rated, mode, bid) { if (tourmode == 2) { if (this.areOpponentsForTourBattle(src, dest)) { if (sys.tier(src) == sys.tier(dest) && cmp(sys.tier(src), tourtier)) battlesStarted[Math.floor(tourbattlers.indexOf(sys.name(src).toLowerCase())/2)] = true; } } if (rated) { var tier = sys.tier(src); battlestats.battles[bid] = [src, sys.ladderRating(src, tier), dest, sys.ladderRating(dest, tier)]; } } , beforeBattleEnded : function(src, dest, desc, bid) { var battle = battlestats.battles[bid]; if (battle !== undefined && desc != "tie") { if (src == battle[0]) { battlestats.stats.push([battle[1], battle[3], sys.tier(src), desc, parseInt(sys.time())]); } else { battlestats.stats.push([battle[3], battle[1], sys.tier(src), desc, parseInt(sys.time())]); } battlestats.count += 1; delete battlestats.battles[bid]; if (battlestats.count % 500 == 0) { sys.writeToFile('battlestats.json', JSON.stringify(battlestats.stats)); } } } , afterBattleEnded : function(src, dest, desc) { if (tourmode != 2 ||desc == "tie") return; this.tourBattleEnd(sys.name(src), sys.name(dest)); } , tourBattleEnd : function(src, dest) { if (!this.areOpponentsForTourBattle2(src, dest) || !this.ongoingTourneyBattle(src)) return; battlesLost.push(src); battlesLost.push(dest); var srcL = src.toLowerCase(); var destL = dest.toLowerCase(); battlesStarted.splice(Math.floor(tourbattlers.indexOf(srcL)/2), 1); tourbattlers.splice(tourbattlers.indexOf(srcL), 1); tourbattlers.splice(tourbattlers.indexOf(destL), 1); tourmembers.push(srcL); delete tourplayers[destL]; if (tourbattlers.length != 0 || tourmembers.length > 1) { sys.sendAll("", tourchannel); sys.sendAll(border, tourchannel); sys.sendAll("~~Server~~: " + src + " advances to the next round.", tourchannel); sys.sendAll("~~Server~~: " + dest + " is out of the tournament.", tourchannel); } if (tourbattlers.length > 0) { sys.sendAll("*** " + tourbattlers.length/2 + " battle(s) remaining.", tourchannel); sys.sendAll(border, tourchannel); sys.sendAll("", tourchannel); return; } this.roundPairing(); } , isLCaps: function(letter) { return letter >= 'A' && letter <= 'Z'; } , isMCaps : function(message) { var count = 0; var i = 0; while ( i < message.length ) { var c = message[i]; if (this.isLCaps(c)) { count += 1; if (count == 5) return true; } else { count -= 2; if (count < 0) count = 0; } i += 1; } return false; } , beforeChangeTier : function(src, oldtier, newtier) { if (newtier.toLowerCase() == "monotype"){ this.monotypecheck(src) } if (newtier.toLowerCase() == "clear skies"){ this.weatherlesstiercheck(src) } } , beforeChallengeIssued : function (src, dest, clauses, rated, mode) { if (battlesStopped) { sys.sendMessage(src, "+BattleBot: Battles are now stopped as the server will restart soon."); sys.stopEvent(); return; } if (SESSION.users(dest).sametier == true && (sys.tier(dest) != sys.tier(src))) { sys.sendMessage(src, "+BattleBot: That guy only wants to fight his/her own tier."); sys.stopEvent(); return; } if ((sys.tier(src) == "Challenge Cup" && sys.tier(dest) == "Challenge Cup" || sys.tier(src) == "1v1 Challenge Cup" && sys.tier(dest) == "1v1 Challenge Cup") && (clauses % 32 < 16)) { sys.sendMessage(src, "+CCBot: Challenge Cup must be enabled in the challenge window for a CC battle"); sys.stopEvent(); return; } if (tourmode == 2) { var name1 = sys.name(src); var name2 = sys.name(dest); if (this.isInTourney(name1)) { if (this.isInTourney(name2)) { if (this.tourOpponent(name1) != name2.toLowerCase()) { sys.sendMessage(src, "+TourneyBot: This guy isn't your opponent in the tourney."); sys.stopEvent(); return; } } else { sys.sendMessage(src, "+TourneyBot: This guy isn't your opponent in the tourney."); sys.stopEvent(); return; } if (sys.tier(src) != sys.tier(dest) || !cmp(sys.tier(src),tourtier)) { sys.sendMessage(src, "+TourneyBot: You must be both in the tier " + tourtier+ " to battle in the tourney."); sys.stopEvent(); return; } } else { if (this.isInTourney(name2)) { sys.sendMessage(src, "+TourneyBot: This guy is in the tournament and you are not, so you can't battle him/her."); sys.stopEvent(); return; } } } /* Challenge Cup Clause */ if ( (clauses % 32) >= 16) return; if (sys.tier(src).indexOf("Doubles") != -1 && sys.tier(dest).indexOf("Doubles") != -1 && mode != 1) { sys.sendMessage(src, "+Bot: To fight in doubles, enable doubles in the challenge window!"); sys.stopEvent(); return; } if (sys.tier(src).indexOf("Triples") != -1 && sys.tier(dest).indexOf("Triples") != -1 && mode != 2) { sys.sendMessage(src, "+Bot: To fight in triples, enable triples in the challenge window!"); sys.stopEvent(); return; } this.eventMovesCheck(src); this.eventMovesCheck(dest); if (sys.tier(src) == sys.tier(dest)) { var tier = sys.tier(src); if (tier != "Dream World" && tier != "Dream World Ubers" && tier != "LC Dream World" && tier != "Monotype" && tier != "Dream World UU" && tier != "Dream World LU" && tier != "Clear Skies" && tier != "Challenge Cup" && tier != "Uber Triples" && tier != "OU Triples" && tier != "Uber Doubles" && tier != "OU Doubles" && tier != "Shanai Cup") { this.dreamWorldAbilitiesCheck(src,true); this.dreamWorldAbilitiesCheck(dest,true); } if (tier == "Dream World" ||tier == "Dream World UU" || tier == "Dream World LU" || tier == "Wifi LU" || tier == "Wifi" || tier == "Wifi UU" || tier == "LC Wifi" || tier == "LC Dream World" || tier == "Wifi Ubers" || tier == "Dream World Ubers" || tier == "Clear Skies"|| tier == "Monotype") { this.inconsistentCheck(src, true); this.inconsistentCheck(dest, true); } if (tier == "LC Wifi" || tier == "LC Ubers Wifi") { this.littleCupCheck(src, true); this.littleCupCheck(dest, true); } if (tier == "Shanai Cup"){ this.shanaiAbilityCheck(src, true) this.shanaiAbilityCheck(dest, true); } } } , beforeBattleMatchup : function(src,dest,clauses,rated) { if (battlesStopped) { sys.stopEvent(); return; } if (tourmode == 2 && (this.isInTourney(sys.name(src)) || this.isInTourney(sys.name(dest)) )) { sys.stopEvent(); return; } this.eventMovesCheck(src); this.eventMovesCheck(dest); if (sys.tier(src) == sys.tier(dest)) { var tier = sys.tier(src); if (tier != "Dream World" && tier != "Dream World Ubers" && tier != "LC Dream World" && tier != "Monotype" && tier != "Dream World UU" && tier != "Dream World LU" && tier != "Clear Skies" && tier != "Challenge Cup" && tier != "Uber Triples" && tier != "OU Triples" && tier != "Uber Doubles" && tier != "OU Doubles" && tier != "Shanai Cup") { this.dreamWorldAbilitiesCheck(src,true); this.dreamWorldAbilitiesCheck(dest,true); } if (tier == "Dream World" ||tier == "Dream World UU" ||tier == "Dream World LU" || tier == "Wifi" || tier == "Wifi UU" || tier == "Wifi LU" || tier == "LC Wifi" || tier == "LC Dream World" || tier == "Wifi Ubers" || tier == "Dream World Ubers" || tier == "Clear Skies" || tier == "Monotype") { this.inconsistentCheck(src, true); this.inconsistentCheck(dest, true); } if (tier == "LC Wifi" || tier == "LC Ubers Wifi") { this.littleCupCheck(src, true); this.littleCupCheck(dest, true); } if (tier == "Shanai Cup"){ this.shanaiAbilityCheck(src, true) this.shanaiAbilityCheck(dest, true); } } // alistart if (sys.name(src) == 'Alistair overeeem' || sys.name(src) == 'Alistair overeem' || sys.name(dest) == 'Alistair overeeem' || sys.name(dest) == 'Alistair overeem') { if (rated) { sys.sendAll('*** WARNING ***', staffchannel); sys.sendAll('+WarningBot: Alistar overeem started a RATED match!', staffchannel); sys.sendAll('*** END OF WARNING ***', staffchannel); } else { sys.sendAll('+WarningBot: Alistar overeem started a random match!', staffchannel); } } } , eventMovesCheck : function(src) { for (var i = 0; i < 6; i++) { var poke = sys.teamPoke(src, i); if (poke in pokeNatures) { for (x in pokeNatures[poke]) { if (sys.hasTeamPokeMove(src, i, x) && sys.teamPokeNature(src, i) != pokeNatures[poke][x]) { sys.sendMessage(src, "+CheckBot: " + sys.pokemon(poke) + " with " + sys.move(x) + " must be a " + sys.nature(pokeNatures[poke][x]) + " nature. Change it in the teambuilder."); sys.stopEvent(); sys.changePokeNum(src, i, 0); } } } } } , littleCupCheck : function(src, se) { for (var i = 0; i < 6; i++) { var x = sys.teamPoke(src, i); if (x != 0 && sys.hasDreamWorldAbility(src, i) && lcpokemons.indexOf(x) != -1 ) { if (se) { sys.sendMessage(src, "+CheckBot: " + sys.pokemon(x) + " is not allowed with a Dream World ability in this tier. Change it in the teambuilder."); } if (sys.tier(src) == "LC Wifi" && sys.hasLegalTeamForTier(src, "LC Dream World") || sys.tier(src) == "LC Ubers Wifi" && sys.hasLegalTeamForTier(src, "Dream World")) { sys.changeTier(src, "LC Dream World"); }else { if (se) sys.changePokeNum(src, i, 0); } if (se) sys.stopEvent(); } } } , dreamWorldAbilitiesCheck : function(src, se) { if (sys.gen(src) < 5) return; for (var i = 0; i < 6; i++) { var x = sys.teamPoke(src, i); if (x != 0 && sys.hasDreamWorldAbility(src, i) && (!(x in dwpokemons) || (breedingpokemons.indexOf(x) != -1 && sys.compatibleAsDreamWorldEvent(src, i) != true))) { if (se) { if (!(x in dwpokemons)) sys.sendMessage(src, "+CheckBot: " + sys.pokemon(x) + " is not allowed with a Dream World ability in this tier. Change it in the teambuilder."); else sys.sendMessage(src, "+CheckBot: " + sys.pokemon(x) + " has to be Male and have no egg moves with its Dream World ability in " + sys.tier(src) + " tier. Change it in the teambuilder."); } if (sys.tier(src) == "Wifi" && sys.hasLegalTeamForTier(src, "Dream World")) { sys.changeTier(src, "Dream World"); } else if (sys.tier(src) == "Wifi" && sys.hasLegalTeamForTier(src, "Dream World Ubers")) { sys.changeTier(src, "Dream World Ubers"); } else if (sys.tier(src) == "Wifi Ubers") { sys.changeTier(src, "Dream World Ubers"); } else if (sys.tier(src) == "1v1 Gen 5" && sys.hasLegalTeamForTier(src, "Dream World")) { sys.changeTier(src, "Dream World"); } else if (sys.tier(src) == "1v1 Gen 5" && sys.hasLegalTeamForTier(src, "Dream World Ubers")) { sys.changeTier(src, "Dream World Ubers"); } else if (sys.tier(src) == "Wifi UU" && sys.hasLegalTeamForTier(src, "Dream World UU")) { sys.changeTier(src, "Dream World UU"); } else if (sys.tier(src) == "Wifi LU" && sys.hasLegalTeamForTier(src, "Dream World LU")) { sys.changeTier(src, "Dream World LU"); } else if (sys.tier(src) == "LC Wifi" && sys.hasLegalTeamForTier(src, "LC Wifi") || sys.tier(src) == "LC Ubers Wifi" && sys.hasLegalTeamForTier(src, "LC Ubers Wifi")) { sys.changeTier(src, "LC Dream World"); }else { if (se) sys.changePokeNum(src, i, 0); } if (se) sys.stopEvent(); } } } , inconsistentCheck : function(src, se) { for (var i = 0; i < 6; i++) { var x = sys.teamPoke(src, i); if (x != 0 && inpokemons.indexOf(x) != -1 && sys.hasDreamWorldAbility(src, i)) { if (se) sys.sendMessage(src, "+CheckBot: " + sys.pokemon(x) + " is not allowed with Moody in this tier. Change it in the teambuilder."); sys.changeTier(src, "Challenge Cup"); if (se) sys.stopEvent(); } } } , weatherlesstiercheck : function(src) { for (var i = 0; i < 6; i++){ ability = sys.ability(sys.teamPokeAbility(src, i)) if(ability.toLowerCase() == "drizzle" || ability.toLowerCase() == "drought" || ability.toLowerCase() == "snow warning" || ability.toLowerCase() == "sand stream") { sys.sendMessage(src, "+Bot: Your team has a pok茅mon with the ability: " + ability + ", please remove before entering this tier."); if(sys.hasLegalTeamForTier(src, "Dream World")) { if(sys.hasLegalTeamForTier(src,"Wifi")) { sys.changeTier(src, "Wifi"); sys.stopEvent() return; } sys.changeTier(src, "Dream World"); sys.stopEvent() return; } if(sys.hasLegalTeamForTier(src,"Wifi Ubers")) { sys.changeTier(src, "Wifi Ubers"); sys.stopEvent() return; } sys.changeTier(src, "Dream World Ubers"); sys.stopEvent() return; } } } /* end of weatherlesstiercheck */ , // Will escape "&", ">", and "<" symbols for HTML output. html_escape : function(text) { var m = text.toString(); if (m.length > 0) { var amp = "&am" + "p;"; var lt = "&l" + "t;"; var gt = "&g" + "t;"; return m.replace(/&/g, amp).replace(/\/g, gt); }else{ return ""; } } , monotypecheck : function(src) { var TypeA = sys.pokeType1(sys.teamPoke(src, 0), 5); var TypeB = sys.pokeType2(sys.teamPoke(src, 0), 5); var k; var checkType; for (var i = 1; i < 6 ; i++) { var temptypeA = sys.pokeType1(sys.teamPoke(src, i), 5); var temptypeB = sys.pokeType2(sys.teamPoke(src, i), 5); if (sys.teamPoke(src, i) == 0){ temptypeA = TypeA; } if(checkType != undefined) { k=3; } if(i==1){ k=1; } if(TypeB !=0){ if(temptypeA == TypeA && temptypeB == TypeB && k == 1 || temptypeA == TypeB && temptypeB == TypeA && k == 1){ k=2; } } if (temptypeA == TypeA && k == 1 || temptypeB == TypeA && k == 1) { checkType=TypeA; } if (temptypeA == TypeB && k == 1 || temptypeB == TypeB && k == 1) { checkType=TypeB; } if(i>1 && k == 2) { k=1; if(temptypeA == TypeA && temptypeB == TypeB && k == 1 || temptypeA == TypeB && temptypeB == TypeA && k == 1){ k=2; } if (temptypeA == TypeA && k == 1 || temptypeB == TypeA && k == 1) { checkType=TypeA; } if (temptypeA == TypeB && k == 1 || temptypeB == TypeB && k == 1) { checkType=TypeB; } } if(k==3){ if(temptypeA != checkType && temptypeB != checkType) { sys.sendMessage(src, "+Bot: Team not Monotype as " + sys.pokemon(sys.teamPoke(src, i)) + " is not " + sys.type(checkType) + "!"); if(sys.hasLegalTeamForTier(src, "Dream World")) { if(sys.hasLegalTeamForTier(src,"Wifi")) { sys.changeTier(src, "Wifi"); sys.stopEvent() return; } sys.changeTier(src, "Dream World"); sys.stopEvent() return; } if(sys.hasLegalTeamForTier(src,"Wifi Ubers")) { sys.changeTier(src, "Wifi Ubers"); sys.stopEvent() return; } sys.changeTier(src, "Dream World Ubers"); sys.stopEvent() return; } } if(k==1) { if (temptypeA != TypeA && temptypeB != TypeA && temptypeA != TypeB && temptypeB != TypeB) { sys.sendMessage(src, "+Bot: Team not Monotype as " + sys.pokemon(sys.teamPoke(src, i)) + " does not share a type with " + sys.pokemon(sys.teamPoke(src, 0)) + "!") if(sys.hasLegalTeamForTier(src, "Dream World")) { if(sys.hasLegalTeamForTier(src,"Wifi")) { sys.changeTier(src, "Wifi"); sys.stopEvent() return; } sys.changeTier(src, "Dream World"); sys.stopEvent() return; } if(sys.hasLegalTeamForTier(src,"Wifi Ubers")) { sys.changeTier(src, "Wifi Ubers"); sys.stopEvent() return; } sys.changeTier(src, "Dream World Ubers"); sys.stopEvent() return; } } } } , shanaiAbilityCheck : function(src, se) { var bannedAbilities = { 'treecko': ['overgrow'], 'chimchar': ['blaze'], 'totodile': ['torrent'], 'spearow': ['sniper'], 'skorupi': ['battle armor', 'sniper'], 'spoink': ['thick fat'], 'golett': ['iron fist'], 'magnemite': ['magnet pull', 'analytic'], 'electrike': ['static', 'lightningrod'], 'nosepass': ['sturdy', 'magnet pull'], 'axew': ['rivalry'], 'croagunk': ['poison touch', 'dry skin'], 'cubchoo': ['rattled'] }; for (var i = 0; i < 6; ++i) { var ability = sys.ability(sys.teamPokeAbility(src, i)); var lability = ability.toLowerCase(); var poke = sys.pokemon(sys.teamPoke(src, i)); var lpoke = poke.toLowerCase(); //sys.sendMessage(src, "+Bot: you have " + poke + " with " + ability + "." ) if (lpoke in bannedAbilities && bannedAbilities[lpoke].indexOf(lability) != -1) { sys.sendMessage(src, "+Bot: " + poke + " is not allowed to have ability " + ability + " in Shanai Cup. Please change it in Teambuilder (You are now in Challenge Cup).") sys.changeTier(src, "Challenge Cup") if (se) sys.stopEvent(); return; } } } })