diff --git a/app.js b/app.js index 4cd861c4fa..1407275874 100644 --- a/app.js +++ b/app.js @@ -235,10 +235,13 @@ global.ResourceMonitor = { while (stack.length) { var value = stack.pop(); - if (typeof value === 'boolean') bytes += 4; - else if (typeof value === 'string') bytes += value.length * 2; - else if (typeof value === 'number') bytes += 8; - else if (typeof value === 'object' && objectList.indexOf(value) < 0) { + if (typeof value === 'boolean') { + bytes += 4; + } else if (typeof value === 'string') { + bytes += value.length * 2; + } else if (typeof value === 'number') { + bytes += 8; + } else if (typeof value === 'object' && objectList.indexOf(value) < 0) { objectList.push(value); for (var i in value) stack.push(value[i]); } @@ -295,8 +298,11 @@ global.ResourceMonitor = { * Otherwise, an empty string will be returned. */ global.toId = function (text) { - if (text && text.id) text = text.id; - else if (text && text.userid) text = text.userid; + if (text && text.id) { + text = text.id; + } else if (text && text.userid) { + text = text.userid; + } return string(text).toLowerCase().replace(/[^a-z0-9]+/g, ''); }; diff --git a/battle-engine.js b/battle-engine.js index dcc6a9293c..7a9b8cfcce 100644 --- a/battle-engine.js +++ b/battle-engine.js @@ -38,8 +38,11 @@ if (Config.crashguard) { * Otherwise, an empty string will be returned. */ global.toId = function (text) { - if (text && text.id) text = text.id; - else if (text && text.userid) text = text.userid; + if (text && text.id) { + text = text.id; + } else if (text && text.userid) { + text = text.userid; + } return string(text).toLowerCase().replace(/[^a-z0-9]+/g, ''); }; @@ -3088,10 +3091,17 @@ Battle = (function () { }; Battle.prototype.chain = function (previousMod, nextMod) { // previousMod or nextMod can be either a number or an array [numerator, denominator] - if (previousMod.length) previousMod = Math.floor(previousMod[0] * 4096 / previousMod[1]); - else previousMod = Math.floor(previousMod * 4096); - if (nextMod.length) nextMod = Math.floor(nextMod[0] * 4096 / nextMod[1]); - else nextMod = Math.floor(nextMod * 4096); + if (previousMod.length) { + previousMod = Math.floor(previousMod[0] * 4096 / previousMod[1]); + } else { + previousMod = Math.floor(previousMod * 4096); + } + + if (nextMod.length) { + nextMod = Math.floor(nextMod[0] * 4096 / nextMod[1]); + } else { + nextMod = Math.floor(nextMod * 4096); + } return ((previousMod * nextMod + 2048) >> 12) / 4096; // M'' = ((M * M') + 0x800) >> 12 }; Battle.prototype.chainModify = function (numerator, denominator) { @@ -3233,11 +3243,17 @@ Battle = (function () { defBoosts = 0; } - if (move.useTargetOffensive) attack = defender.calculateStat(attackStat, atkBoosts); - else attack = attacker.calculateStat(attackStat, atkBoosts); + if (move.useTargetOffensive) { + attack = defender.calculateStat(attackStat, atkBoosts); + } else { + attack = attacker.calculateStat(attackStat, atkBoosts); + } - if (move.useSourceDefensive) defense = attacker.calculateStat(defenseStat, defBoosts); - else defense = defender.calculateStat(defenseStat, defBoosts); + if (move.useSourceDefensive) { + defense = attacker.calculateStat(defenseStat, defBoosts); + } else { + defense = defender.calculateStat(defenseStat, defBoosts); + } // Apply Stat Modifiers attack = this.runEvent('Modify' + statTable[attackStat], attacker, defender, move, attack); diff --git a/chat-plugins/info.js b/chat-plugins/info.js index 15ba06efb1..95441cde98 100644 --- a/chat-plugins/info.js +++ b/chat-plugins/info.js @@ -431,30 +431,30 @@ var commands = exports.commands = { numSide = 0; statSide = 1; switch (inequality) { - case '>': direction = 'less'; break; - case '<': direction = 'greater'; break; - case '=': direction = 'equal'; break; + case '>': direction = 'less'; break; + case '<': direction = 'greater'; break; + case '=': direction = 'equal'; break; } } else if (!isNaN(targetParts[1])) { numSide = 1; statSide = 0; switch (inequality) { - case '<': direction = 'less'; break; - case '>': direction = 'greater'; break; - case '=': direction = 'equal'; break; + case '<': direction = 'less'; break; + case '>': direction = 'greater'; break; + case '=': direction = 'equal'; break; } } else { return this.sendReplyBox("No value given to compare with '" + Tools.escapeHTML(target) + "'."); } var stat = targetParts[statSide]; switch (toId(targetParts[statSide])) { - case 'attack': stat = 'atk'; break; - case 'defense': stat = 'def'; break; - case 'specialattack': stat = 'spa'; break; - case 'spatk': stat = 'spa'; break; - case 'specialdefense': stat = 'spd'; break; - case 'spdef': stat = 'spd'; break; - case 'speed': stat = 'spe'; break; + case 'attack': stat = 'atk'; break; + case 'defense': stat = 'def'; break; + case 'specialattack': stat = 'spa'; break; + case 'spatk': stat = 'spa'; break; + case 'specialdefense': stat = 'spd'; break; + case 'spdef': stat = 'spd'; break; + case 'speed': stat = 'spe'; break; } if (!(stat in allStats)) return this.sendReplyBox("'" + Tools.escapeHTML(target) + "' did not contain a valid stat."); if (!searches['stats']) searches['stats'] = {}; @@ -491,137 +491,139 @@ var commands = exports.commands = { var search = categories[cat]; if (!searches[search]) continue; switch (search) { - case 'types': - for (var mon in dex) { - if (Object.count(searches[search], true) === 2) { - if (!(searches[search][dex[mon].types[0]]) || !(searches[search][dex[mon].types[1]])) delete dex[mon]; - } else { - if (searches[search][dex[mon].types[0]] === false || searches[search][dex[mon].types[1]] === false || (Object.count(searches[search], true) > 0 && - (!(searches[search][dex[mon].types[0]]) && !(searches[search][dex[mon].types[1]])))) delete dex[mon]; + case 'types': + for (var mon in dex) { + if (Object.count(searches[search], true) === 2) { + if (!(searches[search][dex[mon].types[0]]) || !(searches[search][dex[mon].types[1]])) delete dex[mon]; + } else { + if (searches[search][dex[mon].types[0]] === false || searches[search][dex[mon].types[1]] === false || (Object.count(searches[search], true) > 0 && + (!(searches[search][dex[mon].types[0]]) && !(searches[search][dex[mon].types[1]])))) delete dex[mon]; + } + } + break; + + case 'tier': + for (var mon in dex) { + if ('lc' in searches[search]) { + // some LC legal Pokemon are stored in other tiers (Ferroseed/Murkrow etc) + // this checks for LC legality using the going criteria, instead of dex[mon].tier + var isLC = (dex[mon].evos && dex[mon].evos.length > 0) && !dex[mon].prevo && dex[mon].tier !== "LC Uber" && Tools.data.Formats['lc'].banlist.indexOf(dex[mon].species) < 0; + if ((searches[search]['lc'] && !isLC) || (!searches[search]['lc'] && isLC)) { + delete dex[mon]; + continue; } } - break; + if (searches[search][String(dex[mon][search]).toLowerCase()] === false || + Object.count(searches[search], true) > 0 && !searches[search][String(dex[mon][search]).toLowerCase()]) { + delete dex[mon]; + } + } + break; - case 'tier': + case 'gen': + case 'color': + for (var mon in dex) { + if (searches[search][String(dex[mon][search]).toLowerCase()] === false || + Object.count(searches[search], true) > 0 && !searches[search][String(dex[mon][search]).toLowerCase()]) { + delete dex[mon]; + } + } + break; + + case 'ability': + for (var mon in dex) { + for (var ability in searches[search]) { + var needsAbility = searches[search][ability]; + var hasAbility = Object.count(dex[mon].abilities, ability) > 0; + if (hasAbility !== needsAbility) { + delete dex[mon]; + break; + } + } + } + break; + + case 'compileLearnsets': + for (var mon in dex) { + var template = dex[mon]; + if (!template.learnset) template = Tools.getTemplate(template.baseSpecies); + if (!template.learnset) continue; + var fullLearnset = template.learnset; + while (template.prevo) { + template = Tools.getTemplate(template.prevo); + for (var move in template.learnset) { + if (!fullLearnset[move]) fullLearnset[move] = template.learnset[move]; + } + } + dex[mon].learnset = fullLearnset; + } + break; + + case 'moves': + for (var mon in dex) { + if (!dex[mon].learnset) continue; + for (var move in searches[search]) { + var canLearn = (dex[mon].learnset.sketch && ['chatter', 'struggle', 'magikarpsrevenge'].indexOf(move) < 0) || dex[mon].learnset[move]; + if ((!canLearn && searches[search][move]) || (searches[search][move] === false && canLearn)) { + delete dex[mon]; + break; + } + } + } + break; + + case 'recovery': + for (var mon in dex) { + if (!dex[mon].learnset) continue; + var recoveryMoves = ["recover", "roost", "moonlight", "morningsun", "synthesis", "milkdrink", "slackoff", "softboiled", "wish", "healorder"]; + var canLearn = false; + for (var i = 0; i < recoveryMoves.length; i++) { + canLearn = (dex[mon].learnset.sketch) || dex[mon].learnset[recoveryMoves[i]]; + if (canLearn) break; + } + if ((!canLearn && searches[search]) || (searches[search] === false && canLearn)) delete dex[mon]; + } + break; + + case 'priority': + var priorityMoves = []; + for (var move in Tools.data.Movedex) { + var moveData = Tools.getMove(move); + if (moveData.category === "Status") continue; + if (moveData.priority > 0) priorityMoves.push(move); + } + for (var mon in dex) { + if (!dex[mon].learnset) continue; + var canLearn = false; + for (var i = 0; i < priorityMoves.length; i++) { + canLearn = (dex[mon].learnset.sketch) || dex[mon].learnset[priorityMoves[i]]; + if (canLearn) break; + } + if ((!canLearn && searches[search]) || (searches[search] === false && canLearn)) delete dex[mon]; + } + break; + + case 'stats': + for (var stat in searches[search]) { for (var mon in dex) { - if ('lc' in searches[search]) { - // some LC legal Pokemon are stored in other tiers (Ferroseed/Murkrow etc) - // this checks for LC legality using the going criteria, instead of dex[mon].tier - var isLC = (dex[mon].evos && dex[mon].evos.length > 0) && !dex[mon].prevo && dex[mon].tier !== "LC Uber" && Tools.data.Formats['lc'].banlist.indexOf(dex[mon].species) < 0; - if ((searches[search]['lc'] && !isLC) || (!searches[search]['lc'] && isLC)) { + if (typeof searches[search][stat].less === 'number') { + if (dex[mon].baseStats[stat] > searches[search][stat].less) { delete dex[mon]; continue; } } - if (searches[search][String(dex[mon][search]).toLowerCase()] === false) { - delete dex[mon]; - } else if (Object.count(searches[search], true) > 0 && !searches[search][String(dex[mon][search]).toLowerCase()]) delete dex[mon]; - } - break; - - case 'gen': - case 'color': - for (var mon in dex) { - if (searches[search][String(dex[mon][search]).toLowerCase()] === false) { - delete dex[mon]; - } else if (Object.count(searches[search], true) > 0 && !searches[search][String(dex[mon][search]).toLowerCase()]) delete dex[mon]; - } - break; - - case 'ability': - for (var mon in dex) { - for (var ability in searches[search]) { - var needsAbility = searches[search][ability]; - var hasAbility = Object.count(dex[mon].abilities, ability) > 0; - if (hasAbility !== needsAbility) { + if (typeof searches[search][stat].greater === 'number') { + if (dex[mon].baseStats[stat] < searches[search][stat].greater) { delete dex[mon]; - break; + continue; } } } - break; + } + break; - case 'compileLearnsets': - for (var mon in dex) { - var template = dex[mon]; - if (!template.learnset) template = Tools.getTemplate(template.baseSpecies); - if (!template.learnset) continue; - var fullLearnset = template.learnset; - while (template.prevo) { - template = Tools.getTemplate(template.prevo); - for (var move in template.learnset) { - if (!fullLearnset[move]) fullLearnset[move] = template.learnset[move]; - } - } - dex[mon].learnset = fullLearnset; - } - break; - - case 'moves': - for (var mon in dex) { - if (!dex[mon].learnset) continue; - for (var move in searches[search]) { - var canLearn = (dex[mon].learnset.sketch && ['chatter', 'struggle', 'magikarpsrevenge'].indexOf(move) < 0) || dex[mon].learnset[move]; - if ((!canLearn && searches[search][move]) || (searches[search][move] === false && canLearn)) { - delete dex[mon]; - break; - } - } - } - break; - - case 'recovery': - for (var mon in dex) { - if (!dex[mon].learnset) continue; - var recoveryMoves = ["recover", "roost", "moonlight", "morningsun", "synthesis", "milkdrink", "slackoff", "softboiled", "wish", "healorder"]; - var canLearn = false; - for (var i = 0; i < recoveryMoves.length; i++) { - canLearn = (dex[mon].learnset.sketch) || dex[mon].learnset[recoveryMoves[i]]; - if (canLearn) break; - } - if ((!canLearn && searches[search]) || (searches[search] === false && canLearn)) delete dex[mon]; - } - break; - - case 'priority': - var priorityMoves = []; - for (var move in Tools.data.Movedex) { - var moveData = Tools.getMove(move); - if (moveData.category === "Status") continue; - if (moveData.priority > 0) priorityMoves.push(move); - } - for (var mon in dex) { - if (!dex[mon].learnset) continue; - var canLearn = false; - for (var i = 0; i < priorityMoves.length; i++) { - canLearn = (dex[mon].learnset.sketch) || dex[mon].learnset[priorityMoves[i]]; - if (canLearn) break; - } - if ((!canLearn && searches[search]) || (searches[search] === false && canLearn)) delete dex[mon]; - } - break; - - case 'stats': - for (var stat in searches[search]) { - for (var mon in dex) { - if (typeof searches[search][stat].less === 'number') { - if (dex[mon].baseStats[stat] > searches[search][stat].less) { - delete dex[mon]; - continue; - } - } - if (typeof searches[search][stat].greater === 'number') { - if (dex[mon].baseStats[stat] < searches[search][stat].greater) { - delete dex[mon]; - continue; - } - } - } - } - break; - - default: - return this.sendReplyBox("Something broke! PM SolarisFox here or on the Smogon forums with the command you tried."); + default: + return this.sendReplyBox("Something broke! PM SolarisFox here or on the Smogon forums with the command you tried."); } } @@ -746,26 +748,26 @@ var commands = exports.commands = { numSide = 0; propSide = 1; switch (inequality) { - case '>': direction = 'less'; break; - case '<': direction = 'greater'; break; - case '=': direction = 'equal'; break; + case '>': direction = 'less'; break; + case '<': direction = 'greater'; break; + case '=': direction = 'equal'; break; } } else if (!isNaN(targetParts[1])) { numSide = 1; propSide = 0; switch (inequality) { - case '<': direction = 'less'; break; - case '>': direction = 'greater'; break; - case '=': direction = 'equal'; break; + case '<': direction = 'less'; break; + case '>': direction = 'greater'; break; + case '=': direction = 'equal'; break; } } else { return this.sendReplyBox("No value given to compare with '" + Tools.escapeHTML(target) + "'."); } var prop = targetParts[propSide]; switch (toId(targetParts[propSide])) { - case 'basepower': prop = 'basePower'; break; - case 'bp': prop = 'basePower'; break; - case 'acc': prop = 'accuracy'; break; + case 'basepower': prop = 'basePower'; break; + case 'bp': prop = 'basePower'; break; + case 'acc': prop = 'accuracy'; break; } if (!(prop in allProperties)) return this.sendReplyBox("'" + Tools.escapeHTML(target) + "' did not contain a valid property."); if (!searches['property']) searches['property'] = {}; @@ -807,16 +809,16 @@ var commands = exports.commands = { if (target.substr(0, 7) === 'boosts ') { switch (target.substr(7)) { - case 'attack': target = 'atk'; break; - case 'defense': target = 'def'; break; - case 'specialattack': target = 'spa'; break; - case 'spatk': target = 'spa'; break; - case 'specialdefense': target = 'spd'; break; - case 'spdef': target = 'spd'; break; - case 'speed': target = 'spe'; break; - case 'acc': target = 'accuracy'; break; - case 'evasiveness': target = 'evasion'; break; - default: target = target.substr(7); + case 'attack': target = 'atk'; break; + case 'defense': target = 'def'; break; + case 'specialattack': target = 'spa'; break; + case 'spatk': target = 'spa'; break; + case 'specialdefense': target = 'spd'; break; + case 'spdef': target = 'spd'; break; + case 'speed': target = 'spe'; break; + case 'acc': target = 'accuracy'; break; + case 'evasiveness': target = 'evasion'; break; + default: target = target.substr(7); } if (!(target in allBoosts)) return this.sendReplyBox("'" + Tools.escapeHTML(target.substr(7)) + "' is not a recognized stat."); if (!searches['boost']) searches['boost'] = {}; @@ -828,15 +830,15 @@ var commands = exports.commands = { var oldTarget = target; if (target.charAt(target.length - 1) === 's') target = target.substr(0, target.length - 1); switch (target) { - case 'toxic': target = 'tox'; break; - case 'poison': target = 'psn'; break; - case 'burn': target = 'brn'; break; - case 'paralyze': target = 'par'; break; - case 'freeze': target = 'frz'; break; - case 'sleep': target = 'slp'; break; - case 'confuse': target = 'confusion'; break; - case 'trap': target = 'partiallytrapped'; break; - case 'flinche': target = 'flinch'; break; + case 'toxic': target = 'tox'; break; + case 'poison': target = 'psn'; break; + case 'burn': target = 'brn'; break; + case 'paralyze': target = 'par'; break; + case 'freeze': target = 'frz'; break; + case 'sleep': target = 'slp'; break; + case 'confuse': target = 'confusion'; break; + case 'trap': target = 'partiallytrapped'; break; + case 'flinche': target = 'flinch'; break; } if (target in allStatus) { @@ -872,108 +874,109 @@ var commands = exports.commands = { for (var search in searches) { switch (search) { - case 'type': - case 'category': - for (var move in dex) { - if (searches[search][String(dex[move][search])] === false) { - delete dex[move]; - } else if (Object.count(searches[search], true) > 0 && !searches[search][String(dex[move][search])]) delete dex[move]; + case 'type': + case 'category': + for (var move in dex) { + if (searches[search][String(dex[move][search])] === false || + Object.count(searches[search], true) > 0 && !searches[search][String(dex[move][search])]) { + delete dex[move]; } - break; + } + break; - case 'flags': - for (var flag in searches[search]) { - for (var move in dex) { - if (flag !== 'secondary') { - if ((!dex[move].flags[flag] && searches[search][flag]) || (dex[move].flags[flag] && !searches[search][flag])) delete dex[move]; + case 'flags': + for (var flag in searches[search]) { + for (var move in dex) { + if (flag !== 'secondary') { + if ((!dex[move].flags[flag] && searches[search][flag]) || (dex[move].flags[flag] && !searches[search][flag])) delete dex[move]; + } else { + if (searches[search][flag]) { + if (!dex[move].secondary && !dex[move].secondaries) delete dex[move]; } else { - if (searches[search][flag]) { - if (!dex[move].secondary && !dex[move].secondaries) delete dex[move]; - } else { - if (dex[move].secondary && dex[move].secondaries) delete dex[move]; - } + if (dex[move].secondary && dex[move].secondaries) delete dex[move]; } } } - break; + } + break; - case 'recovery': + case 'recovery': + for (var move in dex) { + var hasRecovery = (dex[move].drain || dex[move].flags.heal); + if ((!hasRecovery && searches[search]) || (hasRecovery && !searches[search])) delete dex[move]; + } + break; + + case 'property': + for (var prop in searches[search]) { for (var move in dex) { - var hasRecovery = (dex[move].drain || dex[move].flags.heal); - if ((!hasRecovery && searches[search]) || (hasRecovery && !searches[search])) delete dex[move]; - } - break; - - case 'property': - for (var prop in searches[search]) { - for (var move in dex) { - if (typeof searches[search][prop].less === "number") { - if (dex[move][prop] === true) { - delete dex[move]; - continue; - } - if (dex[move][prop] > searches[search][prop].less) { - delete dex[move]; - continue; - } + if (typeof searches[search][prop].less === "number") { + if (dex[move][prop] === true) { + delete dex[move]; + continue; } - if (typeof searches[search][prop].greater === "number") { - if (dex[move][prop] === true) { - if (dex[move].category === "Status") delete dex[move]; - continue; - } - if (dex[move][prop] < searches[search][prop].greater) { - delete dex[move]; - continue; - } + if (dex[move][prop] > searches[search][prop].less) { + delete dex[move]; + continue; + } + } + if (typeof searches[search][prop].greater === "number") { + if (dex[move][prop] === true) { + if (dex[move].category === "Status") delete dex[move]; + continue; + } + if (dex[move][prop] < searches[search][prop].greater) { + delete dex[move]; + continue; } } } - break; + } + break; - case 'boost': - for (var boost in searches[search]) { - for (var move in dex) { - if (dex[move].boosts) { - if ((dex[move].boosts[boost] > 0 && searches[search][boost]) || - (dex[move].boosts[boost] < 1 && !searches[search][boost])) continue; - } else if (dex[move].secondary && dex[move].secondary.self && dex[move].secondary.self.boosts) { - if ((dex[move].secondary.self.boosts[boost] > 0 && searches[search][boost]) || - (dex[move].secondary.self.boosts[boost] < 1 && !searches[search][boost])) continue; - } - delete dex[move]; + case 'boost': + for (var boost in searches[search]) { + for (var move in dex) { + if (dex[move].boosts) { + if ((dex[move].boosts[boost] > 0 && searches[search][boost]) || + (dex[move].boosts[boost] < 1 && !searches[search][boost])) continue; + } else if (dex[move].secondary && dex[move].secondary.self && dex[move].secondary.self.boosts) { + if ((dex[move].secondary.self.boosts[boost] > 0 && searches[search][boost]) || + (dex[move].secondary.self.boosts[boost] < 1 && !searches[search][boost])) continue; } + delete dex[move]; } - break; + } + break; - case 'status': - case 'volatileStatus': - for (var searchStatus in searches[search]) { - for (var move in dex) { - if (dex[move][search] !== searchStatus) { - if (!dex[move].secondaries) { - if (!dex[move].secondary) { - if (searches[search][searchStatus]) delete dex[move]; - } else { - if ((dex[move].secondary[search] !== searchStatus && searches[search][searchStatus]) || - (dex[move].secondary[search] === searchStatus && !searches[search][searchStatus])) delete dex[move]; - } + case 'status': + case 'volatileStatus': + for (var searchStatus in searches[search]) { + for (var move in dex) { + if (dex[move][search] !== searchStatus) { + if (!dex[move].secondaries) { + if (!dex[move].secondary) { + if (searches[search][searchStatus]) delete dex[move]; } else { - var hasSecondary = false; - for (var i = 0; i < dex[move].secondaries.length; i++) { - if (dex[move].secondaries[i][search] === searchStatus) hasSecondary = true; - } - if ((!hasSecondary && searches[search][searchStatus]) || (hasSecondary && !searches[search][searchStatus])) delete dex[move]; + if ((dex[move].secondary[search] !== searchStatus && searches[search][searchStatus]) || + (dex[move].secondary[search] === searchStatus && !searches[search][searchStatus])) delete dex[move]; } } else { - if (!searches[search][searchStatus]) delete dex[move]; + var hasSecondary = false; + for (var i = 0; i < dex[move].secondaries.length; i++) { + if (dex[move].secondaries[i][search] === searchStatus) hasSecondary = true; + } + if ((!hasSecondary && searches[search][searchStatus]) || (hasSecondary && !searches[search][searchStatus])) delete dex[move]; } + } else { + if (!searches[search][searchStatus]) delete dex[move]; } } - break; + } + break; - default: - return this.sendReplyBox("Something broke! PM SolarisFox here or on the Smogon forums with the command you tried."); + default: + return this.sendReplyBox("Something broke! PM SolarisFox here or on the Smogon forums with the command you tried."); } } @@ -1281,22 +1284,22 @@ var commands = exports.commands = { for (var type in bestCoverage) { switch (bestCoverage[type]) { - case 0: - immune.push(type); - break; - case 0.25: - case 0.5: - resists.push(type); - break; - case 1: - neutral.push(type); - break; - case 2: - case 4: - superEff.push(type); - break; - default: - throw new Error("/coverage effectiveness of " + bestCoverage[type] + " from parameters: " + target); + case 0: + immune.push(type); + break; + case 0.25: + case 0.5: + resists.push(type); + break; + case 1: + neutral.push(type); + break; + case 2: + case 4: + superEff.push(type); + break; + default: + throw new Error("/coverage effectiveness of " + bestCoverage[type] + " from parameters: " + target); } } buffer.push('Coverage for ' + sources.join(' + ') + ':'); @@ -1348,22 +1351,22 @@ var commands = exports.commands = { } } switch (bestEff) { - case 0: - cell += 'bgcolor=#666666 title="' + typing + '">' + bestEff + ''; - break; - case 0.25: - case 0.5: - cell += 'bgcolor=#AA5544 title="' + typing + '">' + bestEff + ''; - break; - case 1: - cell += 'bgcolor=#6688AA title="' + typing + '">' + bestEff + ''; - break; - case 2: - case 4: - cell += 'bgcolor=#559955 title="' + typing + '">' + bestEff + ''; - break; - default: - throw new Error("/coverage effectiveness of " + bestEff + " from parameters: " + target); + case 0: + cell += 'bgcolor=#666666 title="' + typing + '">' + bestEff + ''; + break; + case 0.25: + case 0.5: + cell += 'bgcolor=#AA5544 title="' + typing + '">' + bestEff + ''; + break; + case 1: + cell += 'bgcolor=#6688AA title="' + typing + '">' + bestEff + ''; + break; + case 2: + case 4: + cell += 'bgcolor=#559955 title="' + typing + '">' + bestEff + ''; + break; + default: + throw new Error("/coverage effectiveness of " + bestEff + " from parameters: " + target); } cell += ''; buffer += cell; diff --git a/chat-plugins/jeopardy.js b/chat-plugins/jeopardy.js index ba63ea43d0..3d7093f9da 100644 --- a/chat-plugins/jeopardy.js +++ b/chat-plugins/jeopardy.js @@ -57,10 +57,8 @@ var JeopardyQuestions = (function () { var q1 = start; var q2 = 0; for (; q1 < end && typeof data[q2] === 'object'; ++q1, ++q2) { - if (typeof data[q2].value === 'string') - this.grid[category][q1].value = data[q2].value; - if (typeof data[q2].answer === 'string') - this.grid[category][q1].answer = data[q2].answer; + if (typeof data[q2].value === 'string') this.grid[category][q1].value = data[q2].value; + if (typeof data[q2].answer === 'string') this.grid[category][q1].answer = data[q2].answer; this.grid[category][q1].isDailyDouble = !!data[q2].isDailyDouble; } return q1 - start; @@ -134,30 +132,29 @@ var Jeopardy = (function () { var currentCheck = ''; while (!!(currentCheck = checks.pop())) { switch (currentCheck) { - case 'started': - if (this.isStarted) break; - output.sendReply("The Jeopardy match has not started yet."); - return false; + case 'started': + if (this.isStarted) break; + output.sendReply("The Jeopardy match has not started yet."); + return false; - case 'notstarted': - if (!this.isStarted) break; - output.sendReply("The Jeopardy match has already started."); - return false; + case 'notstarted': + if (!this.isStarted) break; + output.sendReply("The Jeopardy match has already started."); + return false; - case 'host': - if (user === this.host) break; - output.sendReply("You are not the host."); - return false; + case 'host': + if (user === this.host) break; + output.sendReply("You are not the host."); + return false; - case 'user': - if (this.users.has(user)) break; - output.sendReply("You are not in the match."); - return false; - - default: - output.sendReply("Unknown check '" + currentCheck + "'."); - return false; + case 'user': + if (this.users.has(user)) break; + output.sendReply("You are not in the match."); + return false; + default: + output.sendReply("Unknown check '" + currentCheck + "'."); + return false; } } @@ -587,21 +584,21 @@ var commands = { var value = params.slice(3).join(',').trim(); switch (editType) { - case 'question': - questions.setQuestion(categoryNumber, questionNumber, value); - this.sendReply("The question has been updated."); - break; + case 'question': + questions.setQuestion(categoryNumber, questionNumber, value); + this.sendReply("The question has been updated."); + break; - case 'answer': - questions.setAnswer(categoryNumber, questionNumber, value); - this.sendReply("The answer has been updated."); - break; + case 'answer': + questions.setAnswer(categoryNumber, questionNumber, value); + this.sendReply("The answer has been updated."); + break; - case 'dailydouble': - var isSet = toId(value) === 'true'; - questions.setDailyDouble(categoryNumber, questionNumber, isSet); - this.sendReply("The daily double has been " + (isSet ? "set." : "unset.")); - break; + case 'dailydouble': + var isSet = toId(value) === 'true'; + questions.setDailyDouble(categoryNumber, questionNumber, isSet); + this.sendReply("The daily double has been " + (isSet ? "set." : "unset.")); + break; } } }, diff --git a/chat-plugins/trivia.js b/chat-plugins/trivia.js index d999dc276f..806f237748 100644 --- a/chat-plugins/trivia.js +++ b/chat-plugins/trivia.js @@ -231,16 +231,16 @@ var Trivia = (function () { this.room.update(); switch (this.mode) { - case 'first': - this.phaseTimeout = setTimeout(this.noAnswer.bind(this), QUESTION_PERIOD); - break; - case 'timer': - this.askedAt = Date.now(); - this.phaseTimeout = setTimeout(this.timerAnswers.bind(this), QUESTION_PERIOD); - break; - case 'number': - this.phaseTimeout = setTimeout(this.numberAnswers.bind(this), QUESTION_PERIOD); - break; + case 'first': + this.phaseTimeout = setTimeout(this.noAnswer.bind(this), QUESTION_PERIOD); + break; + case 'timer': + this.askedAt = Date.now(); + this.phaseTimeout = setTimeout(this.timerAnswers.bind(this), QUESTION_PERIOD); + break; + case 'number': + this.phaseTimeout = setTimeout(this.numberAnswers.bind(this), QUESTION_PERIOD); + break; } }; diff --git a/commands.js b/commands.js index 05ec595c69..c5b5260f23 100644 --- a/commands.js +++ b/commands.js @@ -297,9 +297,7 @@ var commands = exports.commands = { default: if (!this.can('privateroom', null, room)) return; if (room.isPrivate === true) { - if (this.can('makeroom')) - this.sendReply("This room is a secret room. Use /privateroom to toggle instead."); - return; + return this.sendReply("This room is a secret room. Use /privateroom to toggle instead."); } setting = 'hidden'; break; @@ -1981,12 +1979,13 @@ var commands = exports.commands = { this.logModCommand(user.name + " forced a tie."); return false; } - target = Users.get(target); - if (target) target = target.userid; - else target = ''; + var targetUser = Users.getExact(target); + if (!targetUser) return this.sendReply("User '" + target + "' not found."); + + target = targetUser ? targetUser.userid : ''; if (target) { - room.battle.win(target); + room.battle.win(targetUser); this.logModCommand(user.name + " forced a win for " + target + "."); } }, diff --git a/data/moves.js b/data/moves.js index d94ccedcf9..e89a6e8538 100644 --- a/data/moves.js +++ b/data/moves.js @@ -10788,10 +10788,9 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1}, onHit: function (pokemon) { - if (!pokemon.item && pokemon.lastItem) { - pokemon.setItem(pokemon.lastItem); - this.add("-item", pokemon, pokemon.getItem(), '[from] move: Recycle'); - } else return false; + if (pokemon.item || !pokemon.lastItem) return false; + pokemon.setItem(pokemon.lastItem); + this.add('-item', pokemon, pokemon.getItem(), '[from] move: Recycle'); }, secondary: false, target: "self", diff --git a/data/scripts.js b/data/scripts.js index 1f53f8d923..1fa91fc773 100644 --- a/data/scripts.js +++ b/data/scripts.js @@ -757,8 +757,7 @@ exports.BattleScripts = { mbst += Math.floor((stats["spd"] * 2 + 31 + 21 + 100) * level / 100 + 5); mbst += Math.floor((stats["spe"] * 2 + 31 + 21 + 100) * level / 100 + 5); - if (mbst >= mbstmin) - break; + if (mbst >= mbstmin) break; level++; } diff --git a/mods/gen1/scripts.js b/mods/gen1/scripts.js index 2916452477..b279d29a73 100644 --- a/mods/gen1/scripts.js +++ b/mods/gen1/scripts.js @@ -986,8 +986,7 @@ exports.BattleScripts = { mbst += Math.floor((stats["spd"] * 2 + 30 + 63 + 100) * level / 100 + 5); mbst += Math.floor((stats["spe"] * 2 + 30 + 63 + 100) * level / 100 + 5); - if (mbst >= mbstmin) - break; + if (mbst >= mbstmin) break; level++; } diff --git a/mods/gen3/abilities.js b/mods/gen3/abilities.js index 864ea1f2ff..bc09e114f8 100644 --- a/mods/gen3/abilities.js +++ b/mods/gen3/abilities.js @@ -14,9 +14,13 @@ exports.BattleAbilities = { onAfterDamage: function (damage, target, source, move) { if (move && move.flags['contact'] && !source.status) { var r = this.random(300); - if (r < 10) source.setStatus('slp'); - else if (r < 20) source.setStatus('par'); - else if (r < 30) source.setStatus('psn'); + if (r < 10) { + source.setStatus('slp'); + } else if (r < 20) { + source.setStatus('par'); + } else if (r < 30) { + source.setStatus('psn'); + } } } }, diff --git a/mods/seasonal/scripts.js b/mods/seasonal/scripts.js index 4a10ae303b..4384d01100 100644 --- a/mods/seasonal/scripts.js +++ b/mods/seasonal/scripts.js @@ -210,11 +210,17 @@ exports.BattleScripts = { var ignoreNegativeOffensive = !!move.ignoreNegativeOffensive; var ignorePositiveDefensive = !!move.ignorePositiveDefensive; - if (move.useTargetOffensive) attack = defender.calculateStat(attackStat, atkBoosts); - else attack = attacker.calculateStat(attackStat, atkBoosts); + if (move.useTargetOffensive) { + attack = defender.calculateStat(attackStat, atkBoosts); + } else { + attack = attacker.calculateStat(attackStat, atkBoosts); + } - if (move.useSourceDefensive) defense = attacker.calculateStat(defenseStat, defBoosts); - else defense = defender.calculateStat(defenseStat, defBoosts); + if (move.useSourceDefensive) { + defense = attacker.calculateStat(defenseStat, defBoosts); + } else { + defense = defender.calculateStat(defenseStat, defBoosts); + } // Apply Stat Modifiers attack = this.runEvent('Modify' + statTable[attackStat], attacker, defender, move, attack); diff --git a/rooms.js b/rooms.js index 7bc529619f..da19e3c1ba 100644 --- a/rooms.js +++ b/rooms.js @@ -332,8 +332,11 @@ var GlobalRoom = (function () { formatListText += '|,' + (format.column || 1) + '|' + section; } formatListText += '|' + format.name; - if (!format.challengeShow) formatListText += ',,'; - else if (!format.searchShow) formatListText += ','; + if (!format.challengeShow) { + formatListText += ',,'; + } else if (!format.searchShow) { + formatListText += ','; + } if (format.team) formatListText += ',#'; } return formatListText; @@ -1019,8 +1022,11 @@ var BattleRoom = (function () { } if (inactiveSide < 0) { - if (ticksLeft[0]) inactiveSide = 1; - else if (ticksLeft[1]) inactiveSide = 0; + if (ticksLeft[0]) { + inactiveSide = 1; + } else if (ticksLeft[1]) { + inactiveSide = 0; + } } this.forfeit(this.battle.getPlayer(inactiveSide), ' lost due to inactivity.', inactiveSide); diff --git a/team-validator.js b/team-validator.js index be3de82bc9..17f00933f3 100644 --- a/team-validator.js +++ b/team-validator.js @@ -118,8 +118,11 @@ if (!process.send) { * Otherwise, an empty string will be returned. */ global.toId = function (text) { - if (text && text.id) text = text.id; - else if (text && text.userid) text = text.userid; + if (text && text.id) { + text = text.id; + } else if (text && text.userid) { + text = text.userid; + } return string(text).toLowerCase().replace(/[^a-z0-9]+/g, ''); }; @@ -211,17 +214,17 @@ Validator = (function () { return ["Your team has more than 6 pokemon."]; } switch (format.gameType) { - case 'doubles': - if (team.length < 2) return ["Your Doubles team needs at least 2 pokemon."]; - break; - case 'triples': - if (team.length < 3) return ["Your Triples team needs at least 3 pokemon."]; - break; - case 'rotation': - if (team.length < 3) return ["Your Rotation team needs at least 3 pokemon."]; - break; - default: - if (team.length < 1) return ["Your team has no pokemon."]; + case 'doubles': + if (team.length < 2) return ["Your Doubles team needs at least 2 pokemon."]; + break; + case 'triples': + if (team.length < 3) return ["Your Triples team needs at least 3 pokemon."]; + break; + case 'rotation': + if (team.length < 3) return ["Your Rotation team needs at least 3 pokemon."]; + break; + default: + if (team.length < 1) return ["Your team has no pokemon."]; } var teamHas = {}; for (var i = 0; i < team.length; i++) { diff --git a/tools.js b/tools.js index cb05df0572..7596a96d86 100644 --- a/tools.js +++ b/tools.js @@ -214,11 +214,11 @@ module.exports = (function () { var typeData = this.data.TypeChart[targetTyping]; if (!typeData) return 0; switch (typeData.damageTaken[sourceType]) { - case 1: return 1; // super-effective - case 2: return -1; // resist - // in case of weird situations like Gravity, immunity is - // handled elsewhere - default: return 0; + case 1: return 1; // super-effective + case 2: return -1; // resist + // in case of weird situations like Gravity, immunity is + // handled elsewhere + default: return 0; } }; Tools.prototype.getTemplate = function (template) { @@ -268,13 +268,21 @@ module.exports = (function () { } else if (template.forme === 'Primal') { template.gen = 6; template.isPrimal = true; - } else if (template.num >= 650) template.gen = 6; - else if (template.num >= 494) template.gen = 5; - else if (template.num >= 387) template.gen = 4; - else if (template.num >= 252) template.gen = 3; - else if (template.num >= 152) template.gen = 2; - else if (template.num >= 1) template.gen = 1; - else template.gen = 0; + } else if (template.num >= 650) { + template.gen = 6; + } else if (template.num >= 494) { + template.gen = 5; + } else if (template.num >= 387) { + template.gen = 4; + } else if (template.num >= 252) { + template.gen = 3; + } else if (template.num >= 152) { + template.gen = 2; + } else if (template.num >= 1) { + template.gen = 1; + } else { + template.gen = 0; + } } } return template; @@ -307,13 +315,21 @@ module.exports = (function () { if (!move.effectType) move.effectType = 'Move'; if (!move.secondaries && move.secondary) move.secondaries = [move.secondary]; if (!move.gen) { - if (move.num >= 560) move.gen = 6; - else if (move.num >= 468) move.gen = 5; - else if (move.num >= 355) move.gen = 4; - else if (move.num >= 252) move.gen = 3; - else if (move.num >= 166) move.gen = 2; - else if (move.num >= 1) move.gen = 1; - else move.gen = 0; + if (move.num >= 560) { + move.gen = 6; + } else if (move.num >= 468) { + move.gen = 5; + } else if (move.num >= 355) { + move.gen = 4; + } else if (move.num >= 252) { + move.gen = 3; + } else if (move.num >= 166) { + move.gen = 2; + } else if (move.num >= 1) { + move.gen = 1; + } else { + move.gen = 0; + } } if (!move.priority) move.priority = 0; if (move.ignoreImmunity === undefined) move.ignoreImmunity = (move.category === 'Status'); @@ -432,11 +448,16 @@ module.exports = (function () { if (item.onDrive) item.fling = {basePower: 70}; if (item.megaStone) item.fling = {basePower: 80}; if (!item.gen) { - if (item.num >= 577) item.gen = 6; - else if (item.num >= 537) item.gen = 5; - else if (item.num >= 377) item.gen = 4; - // Due to difference in storing items, gen 2 items must be specified specifically - else item.gen = 3; + if (item.num >= 577) { + item.gen = 6; + } else if (item.num >= 537) { + item.gen = 5; + } else if (item.num >= 377) { + item.gen = 4; + } else { + item.gen = 3; + } + // Due to difference in storing items, gen 2 items must be specified manually } } return item; @@ -459,11 +480,17 @@ module.exports = (function () { if (!ability.category) ability.category = 'Effect'; if (!ability.effectType) ability.effectType = 'Ability'; if (!ability.gen) { - if (ability.num >= 165) ability.gen = 6; - else if (ability.num >= 124) ability.gen = 5; - else if (ability.num >= 77) ability.gen = 4; - else if (ability.num >= 1) ability.gen = 3; - else ability.gen = 0; + if (ability.num >= 165) { + ability.gen = 6; + } else if (ability.num >= 124) { + ability.gen = 5; + } else if (ability.num >= 77) { + ability.gen = 4; + } else if (ability.num >= 1) { + ability.gen = 3; + } else { + ability.gen = 0; + } } } return ability; diff --git a/tournaments/generator-elimination.js b/tournaments/generator-elimination.js index 1cddb1b95e..c330b1e456 100644 --- a/tournaments/generator-elimination.js +++ b/tournaments/generator-elimination.js @@ -419,10 +419,11 @@ var Elimination = (function () { match.onLoseNode.getParent().getValue().state = 'available'; var error = ''; - if (this.users.get(userA).isDisqualified) + if (this.users.get(userA).isDisqualified) { error = this.setMatchResult([userA, userB], 'loss'); - else if (this.users.get(userB).isDisqualified) + } else if (this.users.get(userB).isDisqualified) { error = this.setMatchResult([userA, userB], 'win'); + } if (error) { throw new Error("Unexpected " + error + " from setMatchResult([" + userA + ", " + userB + "], ...)"); diff --git a/users.js b/users.js index 9e25ecac86..420ea39def 100644 --- a/users.js +++ b/users.js @@ -990,8 +990,11 @@ User = (function () { this.connections = []; // merge IPs for (var ip in this.ips) { - if (user.ips[ip]) user.ips[ip] += this.ips[ip]; - else user.ips[ip] = this.ips[ip]; + if (user.ips[ip]) { + user.ips[ip] += this.ips[ip]; + } else { + user.ips[ip] = this.ips[ip]; + } } this.ips = {}; user.latestIp = this.latestIp; @@ -1071,8 +1074,11 @@ User = (function () { str += ' socket' + i + '['; var first = true; for (var j in connection.rooms) { - if (first) first = false; - else str += ', '; + if (first) { + first = false; + } else { + str += ', '; + } str += j; } str += ']';