rendered paste body 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, lt).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;
}
}
}
})