{ "version": 3, "sources": ["../../../../server/chat-plugins/othermetas.ts"], "sourcesContent": ["/**\r\n * Other Metagames chat plugin\r\n * Lets users see elements of Pokemon in various Other Metagames.\r\n * Originally by Spandan.\r\n * @author Kris\r\n*/\r\n\r\nimport {Utils} from '../../lib';\r\n\r\ninterface StoneDeltas {\r\n\tbaseStats: {[stat in StatID]: number};\r\n\tbst: number;\r\n\tweighthg: number;\r\n\ttype?: string;\r\n}\r\n\r\ntype TierShiftTiers = 'UU' | 'RUBL' | 'RU' | 'NUBL' | 'NU' | 'PUBL' | 'PU' | 'NFE' | 'LC';\r\n\r\nfunction getMegaStone(stone: string, mod = 'gen9'): Item | null {\r\n\tlet dex = Dex;\r\n\tif (mod && toID(mod) in Dex.dexes) dex = Dex.mod(toID(mod));\r\n\tconst item = dex.items.get(stone);\r\n\tif (!item.exists) {\r\n\t\tif (toID(stone) === 'dragonascent') {\r\n\t\t\tconst move = dex.moves.get(stone);\r\n\t\t\treturn {\r\n\t\t\t\tid: move.id,\r\n\t\t\t\tname: move.name,\r\n\t\t\t\tfullname: move.name,\r\n\t\t\t\tmegaEvolves: 'Rayquaza',\r\n\t\t\t\tmegaStone: 'Rayquaza-Mega',\r\n\t\t\t\texists: true,\r\n\t\t\t\t// Adding extra values to appease typescript\r\n\t\t\t\tgen: 6,\r\n\t\t\t\tnum: -1,\r\n\t\t\t\teffectType: 'Item',\r\n\t\t\t\tsourceEffect: '',\r\n\t\t\t} as Item;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\tif (!item.megaStone && !item.onPrimal && !item.forcedForme?.endsWith('Epilogue') &&\r\n\t\t!item.forcedForme?.endsWith('Origin') && !item.name.startsWith('Rusted')) return null;\r\n\treturn item;\r\n}\r\n\r\nexport const commands: Chat.ChatCommands = {\r\n\tom: 'othermetas',\r\n\tothermetas(target, room, user) {\r\n\t\ttarget = toID(target);\r\n\t\tconst omLink = `- Other Metagames Forum
`;\r\n\r\n\t\tif (!target) {\r\n\t\t\tthis.runBroadcast();\r\n\t\t\treturn this.sendReplyBox(omLink);\r\n\t\t}\r\n\r\n\t\tif (target === 'all') {\r\n\t\t\tthis.runBroadcast();\r\n\t\t\tif (this.broadcasting) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`\"!om all\" is too spammy to broadcast.`);\r\n\t\t\t}\r\n\t\t\t// Display OMotM formats, with forum thread links as caption\r\n\t\t\tthis.parse(`/formathelp omofthemonth`);\r\n\r\n\t\t\t// Display the rest of OM formats, with OM hub/index forum links as caption\r\n\t\t\tthis.parse(`/formathelp othermetagames`);\r\n\t\t\treturn this.sendReply(`|raw|
${omLink}
`);\r\n\t\t}\r\n\r\n\t\tif (target === 'month') this.target = 'omofthemonth';\r\n\t\tthis.run('formathelp');\r\n\t},\r\n\tothermetashelp: [\r\n\t\t`/om - Provides links to information on the Other Metagames.`,\r\n\t\t`!om - Show everyone that information. Requires: + % @ # &`,\r\n\t],\r\n\r\n\tmnm: 'mixandmega',\r\n\tmixandmega(target, room, user) {\r\n\t\tif (!toID(target) || !target.includes('@')) return this.parse('/help mixandmega');\r\n\t\tthis.runBroadcast();\r\n\t\tlet dex = Dex;\r\n\t\tconst sep = target.split('@');\r\n\t\tconst stoneName = sep.slice(1).join('@').trim().split(',');\r\n\t\tconst mod = stoneName[1];\r\n\t\tif (mod) {\r\n\t\t\tif (toID(mod) in Dex.dexes) {\r\n\t\t\t\tdex = Dex.mod(toID(mod));\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`A mod by the name of '${mod.trim()}' does not exist.`);\r\n\t\t\t}\r\n\t\t\tif (dex === Dex.dexes['ssb']) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`The SSB mod supports custom elements for Mega Stones that have the capability of crashing the server.`);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst stone = getMegaStone(stoneName[0], mod);\r\n\t\tconst species = dex.species.get(sep[0]);\r\n\t\tif (!stone) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Mega Stone/Primal Orb/Rusted Item/Origin Item not found.`);\r\n\t\t}\r\n\t\tif (!species.exists) throw new Chat.ErrorMessage(`Error: Pok\\u00e9mon not found.`);\r\n\t\tlet baseSpecies: Species;\r\n\t\tlet megaSpecies: Species;\r\n\t\tswitch (stone.id) {\r\n\t\tcase 'blueorb':\r\n\t\t\tmegaSpecies = dex.species.get(\"Kyogre-Primal\");\r\n\t\t\tbaseSpecies = dex.species.get(\"Kyogre\");\r\n\t\t\tbreak;\r\n\t\tcase 'redorb':\r\n\t\t\tmegaSpecies = dex.species.get(\"Groudon-Primal\");\r\n\t\t\tbaseSpecies = dex.species.get(\"Groudon\");\r\n\t\t\tbreak;\r\n\t\tcase 'rustedshield':\r\n\t\t\tmegaSpecies = dex.species.get(\"Zamazenta-Crowned\");\r\n\t\t\tbaseSpecies = dex.species.get(\"Zamazenta\");\r\n\t\t\tbreak;\r\n\t\tcase 'rustedsword':\r\n\t\t\tmegaSpecies = dex.species.get(\"Zacian-Crowned\");\r\n\t\t\tbaseSpecies = dex.species.get(\"Zacian\");\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tconst forcedForme = stone.forcedForme;\r\n\t\t\tif (forcedForme && (forcedForme.endsWith('Origin') || forcedForme.endsWith('Epilogue'))) {\r\n\t\t\t\tmegaSpecies = dex.species.get(forcedForme);\r\n\t\t\t\tbaseSpecies = dex.species.get(forcedForme.split('-')[0]);\r\n\t\t\t} else {\r\n\t\t\t\tmegaSpecies = dex.species.get(stone.megaStone);\r\n\t\t\t\tbaseSpecies = dex.species.get(stone.megaEvolves);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tconst deltas: StoneDeltas = {\r\n\t\t\tbaseStats: Object.create(null),\r\n\t\t\tweighthg: megaSpecies.weighthg - baseSpecies.weighthg,\r\n\t\t\tbst: megaSpecies.bst - baseSpecies.bst,\r\n\t\t};\r\n\t\tlet statId: StatID;\r\n\t\tfor (statId in megaSpecies.baseStats) {\r\n\t\t\tdeltas.baseStats[statId] = megaSpecies.baseStats[statId] - baseSpecies.baseStats[statId];\r\n\t\t}\r\n\t\tif (megaSpecies.types.length > baseSpecies.types.length) {\r\n\t\t\tdeltas.type = megaSpecies.types[1];\r\n\t\t} else if (megaSpecies.types.length < baseSpecies.types.length) {\r\n\t\t\tdeltas.type = 'mono';\r\n\t\t} else if (megaSpecies.types[1] !== baseSpecies.types[1]) {\r\n\t\t\tdeltas.type = megaSpecies.types[1];\r\n\t\t}\r\n\t\tconst mixedSpecies = Utils.deepClone(species);\r\n\t\tmixedSpecies.abilities = Utils.deepClone(megaSpecies.abilities);\r\n\t\tif (mixedSpecies.types[0] === deltas.type) { // Add any type gains\r\n\t\t\tmixedSpecies.types = [deltas.type];\r\n\t\t} else if (deltas.type === 'mono') {\r\n\t\t\tmixedSpecies.types = [mixedSpecies.types[0]];\r\n\t\t} else if (deltas.type) {\r\n\t\t\tmixedSpecies.types = [mixedSpecies.types[0], deltas.type];\r\n\t\t}\r\n\t\tlet statName: StatID;\r\n\t\tmixedSpecies.bst = 0;\r\n\t\tfor (statName in species.baseStats) { // Add the changed stats and weight\r\n\t\t\tmixedSpecies.baseStats[statName] = Utils.clampIntRange(\r\n\t\t\t\tmixedSpecies.baseStats[statName] + deltas.baseStats[statName], 1, 255\r\n\t\t\t);\r\n\t\t\tmixedSpecies.bst += mixedSpecies.baseStats[statName];\r\n\t\t}\r\n\t\tmixedSpecies.weighthg = Math.max(1, species.weighthg + deltas.weighthg);\r\n\t\tmixedSpecies.tier = \"MnM\";\r\n\t\tlet weighthit = 20;\r\n\t\tif (mixedSpecies.weighthg >= 2000) {\r\n\t\t\tweighthit = 120;\r\n\t\t} else if (mixedSpecies.weighthg >= 1000) {\r\n\t\t\tweighthit = 100;\r\n\t\t} else if (mixedSpecies.weighthg >= 500) {\r\n\t\t\tweighthit = 80;\r\n\t\t} else if (mixedSpecies.weighthg >= 250) {\r\n\t\t\tweighthit = 60;\r\n\t\t} else if (mixedSpecies.weighthg >= 100) {\r\n\t\t\tweighthit = 40;\r\n\t\t}\r\n\t\tconst details: {[k: string]: string} = {\r\n\t\t\t\"Dex#\": '' + mixedSpecies.num,\r\n\t\t\tGen: '' + mixedSpecies.gen,\r\n\t\t\tHeight: mixedSpecies.heightm + \" m\",\r\n\t\t\tWeight: mixedSpecies.weighthg / 10 + \" kg (\" + weighthit + \" BP)\",\r\n\t\t\t\"Dex Colour\": mixedSpecies.color,\r\n\t\t};\r\n\t\tif (mixedSpecies.eggGroups) details[\"Egg Group(s)\"] = mixedSpecies.eggGroups.join(\", \");\r\n\t\tdetails['Does Not Evolve'] = \"\";\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies)}`);\r\n\t\tthis.sendReply(`|raw|` + Object.entries(details).map(([detail, value]) => (\r\n\t\t\tvalue === '' ? detail : `${detail}: ${value}`\r\n\t\t)).join(\" |  \") + ``);\r\n\t},\r\n\tmixandmegahelp: [\r\n\t\t`/mnm @ [, generation] - Shows the Mix and Mega evolved Pok\\u00e9mon's type and stats.`,\r\n\t],\r\n\r\n\torb: 'stone',\r\n\tmegastone: 'stone',\r\n\tstone(target) {\r\n\t\tconst sep = target.split(',');\r\n\t\tlet dex = Dex;\r\n\t\tif (sep[1]) {\r\n\t\t\tif (toID(sep[1]) in Dex.dexes) {\r\n\t\t\t\tdex = Dex.mod(toID(sep[1]));\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`A mod by the name of '${sep[1].trim()}' does not exist.`);\r\n\t\t\t}\r\n\t\t\tif (dex === Dex.dexes['ssb']) {\r\n\t\t\t\tthrow new Chat.ErrorMessage(`The SSB mod supports custom elements for Mega Stones that have the capability of crashing the server.`);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst targetid = toID(sep[0]);\r\n\t\tif (!targetid) return this.parse('/help stone');\r\n\t\tthis.runBroadcast();\r\n\t\tconst stone = getMegaStone(targetid, sep[1]);\r\n\t\tconst stones = [];\r\n\t\tif (!stone) {\r\n\t\t\tconst species = dex.species.get(targetid.replace(/(?:mega[xy]?|primal|origin|crowned|epilogue)$/, ''));\r\n\t\t\tif (!species.exists) throw new Chat.ErrorMessage(`Error: Mega Stone not found.`);\r\n\t\t\tif (!species.otherFormes) throw new Chat.ErrorMessage(`Error: Mega Evolution not found.`);\r\n\t\t\tfor (const poke of species.otherFormes) {\r\n\t\t\t\tif (!/(?:-Crowned|-Epilogue|-Origin|-Primal|-Mega(?:-[XY])?)$/.test(poke)) continue;\r\n\t\t\t\tconst megaPoke = dex.species.get(poke);\r\n\t\t\t\tconst flag = megaPoke.requiredMove === 'Dragon Ascent' ? megaPoke.requiredMove : megaPoke.requiredItem;\r\n\t\t\t\tif (/mega[xy]$/.test(targetid) && toID(megaPoke.name) !== toID(dex.species.get(targetid))) continue;\r\n\t\t\t\tif (!flag) continue;\r\n\t\t\t\tstones.push(getMegaStone(flag, sep[1]));\r\n\t\t\t}\r\n\t\t\tif (!stones.length) throw new Chat.ErrorMessage(`Error: Mega Evolution not found.`);\r\n\t\t}\r\n\t\tconst toDisplay = (stones.length ? stones : [stone]);\r\n\t\tfor (const aStone of toDisplay) {\r\n\t\t\tif (!aStone) return;\r\n\t\t\tlet baseSpecies: Species;\r\n\t\t\tlet megaSpecies: Species;\r\n\t\t\tswitch (aStone.id) {\r\n\t\t\tcase 'blueorb':\r\n\t\t\t\tmegaSpecies = dex.species.get(\"Kyogre-Primal\");\r\n\t\t\t\tbaseSpecies = dex.species.get(\"Kyogre\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'redorb':\r\n\t\t\t\tmegaSpecies = dex.species.get(\"Groudon-Primal\");\r\n\t\t\t\tbaseSpecies = dex.species.get(\"Groudon\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rustedshield':\r\n\t\t\t\tmegaSpecies = dex.species.get(\"Zamazenta-Crowned\");\r\n\t\t\t\tbaseSpecies = dex.species.get(\"Zamazenta\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rustedsword':\r\n\t\t\t\tmegaSpecies = dex.species.get(\"Zacian-Crowned\");\r\n\t\t\t\tbaseSpecies = dex.species.get(\"Zacian\");\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tconst forcedForme = aStone.forcedForme;\r\n\t\t\t\tif (forcedForme && (forcedForme.endsWith('Origin') || forcedForme.endsWith('Epilogue'))) {\r\n\t\t\t\t\tmegaSpecies = dex.species.get(forcedForme);\r\n\t\t\t\t\tbaseSpecies = dex.species.get(forcedForme.split('-')[0]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmegaSpecies = dex.species.get(aStone.megaStone);\r\n\t\t\t\t\tbaseSpecies = dex.species.get(aStone.megaEvolves);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tconst deltas: StoneDeltas = {\r\n\t\t\t\tbaseStats: Object.create(null),\r\n\t\t\t\tweighthg: megaSpecies.weighthg - baseSpecies.weighthg,\r\n\t\t\t\tbst: megaSpecies.bst - baseSpecies.bst,\r\n\t\t\t};\r\n\t\t\tlet statId: StatID;\r\n\t\t\tfor (statId in megaSpecies.baseStats) {\r\n\t\t\t\tdeltas.baseStats[statId] = megaSpecies.baseStats[statId] - baseSpecies.baseStats[statId];\r\n\t\t\t}\r\n\t\t\tif (megaSpecies.types.length > baseSpecies.types.length) {\r\n\t\t\t\tdeltas.type = megaSpecies.types[1];\r\n\t\t\t} else if (megaSpecies.types.length < baseSpecies.types.length) {\r\n\t\t\t\tdeltas.type = dex.gen >= 8 ? 'mono' : megaSpecies.types[0];\r\n\t\t\t} else if (megaSpecies.types[1] !== baseSpecies.types[1]) {\r\n\t\t\t\tdeltas.type = megaSpecies.types[1];\r\n\t\t\t}\r\n\t\t\tconst details = {\r\n\t\t\t\tGen: aStone.gen,\r\n\t\t\t\tWeight: (deltas.weighthg < 0 ? \"\" : \"+\") + deltas.weighthg / 10 + \" kg\",\r\n\t\t\t};\r\n\t\t\tlet tier;\r\n\t\t\tif (['redorb', 'blueorb'].includes(aStone.id) || aStone.forcedForme?.endsWith('Origin')) {\r\n\t\t\t\ttier = \"Orb\";\r\n\t\t\t} else if (aStone.name === \"Dragon Ascent\") {\r\n\t\t\t\ttier = \"Move\";\r\n\t\t\t} else if (aStone.megaStone) {\r\n\t\t\t\ttier = \"Stone\";\r\n\t\t\t} else {\r\n\t\t\t\ttier = \"Item\";\r\n\t\t\t}\r\n\t\t\tlet buf = `
  • `;\r\n\t\t\tbuf += `${tier} `;\r\n\t\t\tif (aStone.name === \"Dragon Ascent\") {\r\n\t\t\t\tbuf += ``;\r\n\t\t\t} else {\r\n\t\t\t\t// temp image support until real images are uploaded\r\n\t\t\t\tconst itemName = aStone.forcedForme?.endsWith('Origin') ? aStone.name.split(' ')[0] + ' Orb' : aStone.name;\r\n\t\t\t\tbuf += ` `;\r\n\t\t\t}\r\n\t\t\tif (aStone.name === \"Dragon Ascent\") {\r\n\t\t\t\tbuf += `Dragon Ascent `;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += `${aStone.name} `;\r\n\t\t\t}\r\n\t\t\tif (deltas.type && deltas.type !== 'mono') {\r\n\t\t\t\tbuf += `\"${deltas.type}\" `;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += ``;\r\n\t\t\t}\r\n\t\t\tbuf += ``;\r\n\t\t\tbuf += `${megaSpecies.abilities['0']}`;\r\n\t\t\tbuf += `${megaSpecies.abilities['H'] ? `${megaSpecies.abilities['H']}` : ''}`;\r\n\t\t\tbuf += ``;\r\n\t\t\tbuf += ``;\r\n\t\t\tbuf += `HP
    0
    `;\r\n\t\t\tbuf += `Atk
    ${deltas.baseStats.atk}
    `;\r\n\t\t\tbuf += `Def
    ${deltas.baseStats.def}
    `;\r\n\t\t\tbuf += `SpA
    ${deltas.baseStats.spa}
    `;\r\n\t\t\tbuf += `SpD
    ${deltas.baseStats.spd}
    `;\r\n\t\t\tbuf += `Spe
    ${deltas.baseStats.spe}
    `;\r\n\t\t\tbuf += `BST
    ${deltas.bst}
    `;\r\n\t\t\tbuf += `
    `;\r\n\t\t\tbuf += `
  • `;\r\n\t\t\tthis.sendReply(`|raw|
      ${buf}
    `);\r\n\t\t\tthis.sendReply(`|raw|Gen: ${details[\"Gen\"]} |  Weight: ${details[\"Weight\"]}`);\r\n\t\t}\r\n\t},\r\n\tstonehelp: [`/stone [, generation] - Shows the changes that a mega stone/orb applies to a Pok\\u00e9mon.`],\r\n\r\n\t350: '350cup',\r\n\t'350cup'(target, room, user) {\r\n\t\tconst args = target.split(',');\r\n\t\tif (!toID(args[0])) return this.parse('/help 350cup');\r\n\t\tthis.runBroadcast();\r\n\t\tlet dex = Dex;\r\n\t\tif (args[1] && toID(args[1]) in Dex.dexes) {\r\n\t\t\tdex = Dex.dexes[toID(args[1])];\r\n\t\t} else if (room?.battle) {\r\n\t\t\tconst format = Dex.formats.get(room.battle.format);\r\n\t\t\tdex = Dex.mod(format.mod);\r\n\t\t}\r\n\t\tconst species = Utils.deepClone(dex.species.get(args[0]));\r\n\t\tif (!species.exists || species.gen > dex.gen) {\r\n\t\t\tconst monName = species.gen > dex.gen ? species.name : args[0].trim();\r\n\t\t\tconst additionalReason = species.gen > dex.gen ? ` in Generation ${dex.gen}` : ``;\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${monName}' not found${additionalReason}.`);\r\n\t\t}\r\n\t\tconst bst = species.bst;\r\n\t\tspecies.bst = 0;\r\n\t\tfor (const i in species.baseStats) {\r\n\t\t\tif (dex.gen === 1 && i === 'spd') continue;\r\n\t\t\tspecies.baseStats[i] = species.baseStats[i] * (bst <= 350 ? 2 : 1);\r\n\t\t\tspecies.bst += species.baseStats[i];\r\n\t\t}\r\n\t\tthis.sendReply(`|html|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t},\r\n\t'350cuphelp': [\r\n\t\t`/350 OR /350cup [, gen] - Shows the base stats that a Pok\\u00e9mon would have in 350 Cup.`,\r\n\t],\r\n\r\n\tts: 'tiershift',\r\n\tts1: 'tiershift',\r\n\tts2: 'tiershift',\r\n\tts3: 'tiershift',\r\n\tts4: 'tiershift',\r\n\tts5: 'tiershift',\r\n\tts6: 'tiershift',\r\n\tts7: 'tiershift',\r\n\tts8: 'tiershift',\r\n\ttiershift(target, room, user, connection, cmd) {\r\n\t\tconst args = target.split(',');\r\n\t\tif (!toID(args[0])) return this.parse('/help tiershift');\r\n\t\tthis.runBroadcast();\r\n\t\tconst targetGen = parseInt(cmd[cmd.length - 1]);\r\n\t\tif (targetGen && !args[1]) args[1] = `gen${targetGen}`;\r\n\t\tlet dex = Dex;\r\n\t\tif (args[1] && toID(args[1]) in Dex.dexes) {\r\n\t\t\tdex = Dex.dexes[toID(args[1])];\r\n\t\t} else if (room?.battle) {\r\n\t\t\tconst format = Dex.formats.get(room.battle.format);\r\n\t\t\tdex = Dex.mod(format.mod);\r\n\t\t}\r\n\t\tconst species = Utils.deepClone(dex.species.get(args[0]));\r\n\t\tif (!species.exists || species.gen > dex.gen) {\r\n\t\t\tconst monName = species.gen > dex.gen ? species.name : args[0].trim();\r\n\t\t\tconst additionalReason = species.gen > dex.gen ? ` in Generation ${dex.gen}` : ``;\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${monName}' not found${additionalReason}.`);\r\n\t\t}\r\n\t\tconst boosts: {[tier in TierShiftTiers]: number} = {\r\n\t\t\tUU: 10,\r\n\t\t\tRUBL: 10,\r\n\t\t\tRU: 20,\r\n\t\t\tNUBL: 20,\r\n\t\t\tNU: 30,\r\n\t\t\tPUBL: 30,\r\n\t\t\tPU: 40,\r\n\t\t\tNFE: 40,\r\n\t\t\tLC: 40,\r\n\t\t};\r\n\t\tlet tier = species.tier;\r\n\t\tif (tier[0] === '(') tier = tier.slice(1, -1);\r\n\t\tif (!(tier in boosts)) return this.sendReply(`|html|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t\tconst boost = boosts[tier as TierShiftTiers];\r\n\t\tspecies.bst = species.baseStats.hp;\r\n\t\tfor (const statName in species.baseStats) {\r\n\t\t\tif (statName === 'hp') continue;\r\n\t\t\tif (dex.gen === 1 && statName === 'spd') continue;\r\n\t\t\tspecies.baseStats[statName] = Utils.clampIntRange(species.baseStats[statName] + boost, 1, 255);\r\n\t\t\tspecies.bst += species.baseStats[statName];\r\n\t\t}\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t},\r\n\ttiershifthelp: [\r\n\t\t`/ts OR /tiershift [, generation] - Shows the base stats that a Pok\\u00e9mon would have in Tier Shift.`,\r\n\t\t`Alternatively, you can use /ts[gen number] to see a Pok\\u00e9mon's stats in that generation.`,\r\n\t],\r\n\r\n\tscale: 'scalemons',\r\n\tscale1: 'scalemons',\r\n\tscale2: 'scalemons',\r\n\tscale3: 'scalemons',\r\n\tscale4: 'scalemons',\r\n\tscale5: 'scalemons',\r\n\tscale6: 'scalemons',\r\n\tscale7: 'scalemons',\r\n\tscale8: 'scalemons',\r\n\tscalemons(target, room, user, connection, cmd) {\r\n\t\tconst args = target.split(',');\r\n\t\tif (!args.length || !toID(args[0])) return this.parse(`/help scalemons`);\r\n\t\tthis.runBroadcast();\r\n\t\tconst targetGen = parseInt(cmd[cmd.length - 1]);\r\n\t\tif (targetGen && !args[1]) args[1] = `gen${targetGen}`;\r\n\t\tlet dex = Dex;\r\n\t\tif (args[1] && toID(args[1]) in Dex.dexes) {\r\n\t\t\tdex = Dex.dexes[toID(args[1])];\r\n\t\t} else if (room?.battle) {\r\n\t\t\tconst format = Dex.formats.get(room.battle.format);\r\n\t\t\tdex = Dex.mod(format.mod);\r\n\t\t}\r\n\t\tconst species = Utils.deepClone(dex.species.get(args[0]));\r\n\t\tif (!species.exists || species.gen > dex.gen) {\r\n\t\t\tconst monName = species.gen > dex.gen ? species.name : args[0].trim();\r\n\t\t\tconst additionalReason = species.gen > dex.gen ? ` in Generation ${dex.gen}` : ``;\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${monName}' not found${additionalReason}.`);\r\n\t\t}\r\n\t\tconst bstNoHP = species.bst - species.baseStats.hp;\r\n\t\tconst scale = (dex.gen !== 1 ? 600 : 500) - species.baseStats['hp'];\r\n\t\tspecies.bst = 0;\r\n\t\tfor (const stat in species.baseStats) {\r\n\t\t\tif (stat === 'hp') continue;\r\n\t\t\tif (dex.gen === 1 && stat === 'spd') continue;\r\n\t\t\tspecies.baseStats[stat] = Utils.clampIntRange(species.baseStats[stat] * scale / bstNoHP, 1, 255);\r\n\t\t\tspecies.bst += species.baseStats[stat];\r\n\t\t}\r\n\t\tspecies.bst += species.baseStats.hp;\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t},\r\n\tscalemonshelp: [\r\n\t\t`/scale OR /scalemons [, gen] - Shows the base stats that a Pok\\u00e9mon would have in Scalemons.`,\r\n\t\t`Alternatively, you can use /scale[gen number] to see a Pok\\u00e9mon's scaled stats in that generation.`,\r\n\t],\r\n\r\n\tflip: 'flipped',\r\n\tflip1: 'flipped',\r\n\tflip2: 'flipped',\r\n\tflip3: 'flipped',\r\n\tflip4: 'flipped',\r\n\tflip5: 'flipped',\r\n\tflip6: 'flipped',\r\n\tflip7: 'flipped',\r\n\tflip8: 'flipped',\r\n\tflipped(target, room, user, connection, cmd) {\r\n\t\tconst args = target.split(',');\r\n\t\tif (!args[0]) return this.parse(`/help flipped`);\r\n\t\tthis.runBroadcast();\r\n\t\tconst mon = args[0];\r\n\t\tlet mod = args[1];\r\n\t\tconst targetGen = parseInt(cmd[cmd.length - 1]);\r\n\t\tif (targetGen && !mod) mod = `gen${targetGen}`;\r\n\t\tlet dex = Dex;\r\n\t\tif (mod && toID(mod) in Dex.dexes) {\r\n\t\t\tdex = Dex.dexes[toID(mod)];\r\n\t\t} else if (room?.battle) {\r\n\t\t\tdex = Dex.forFormat(room.battle.format);\r\n\t\t}\r\n\t\tconst species = Utils.deepClone(dex.species.get(mon));\r\n\t\tif (!species.exists || species.gen > dex.gen) {\r\n\t\t\tconst monName = species.gen > dex.gen ? species.name : mon.trim();\r\n\t\t\tconst additionalReason = species.gen > dex.gen ? ` in Generation ${dex.gen}` : ``;\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${monName}' not found${additionalReason}.`);\r\n\t\t}\r\n\t\tif (dex.gen === 1) {\r\n\t\t\tconst flippedStats: {[k: string]: number} = {\r\n\t\t\t\thp: species.baseStats.spe,\r\n\t\t\t\tatk: species.baseStats.spa,\r\n\t\t\t\tdef: species.baseStats.def,\r\n\t\t\t\tspa: species.baseStats.atk,\r\n\t\t\t\tspd: species.baseStats.atk,\r\n\t\t\t\tspe: species.baseStats.hp,\r\n\t\t\t};\r\n\t\t\tfor (const stat in species.baseStats) {\r\n\t\t\t\tspecies.baseStats[stat] = flippedStats[stat];\r\n\t\t\t}\r\n\t\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst stats = Object.values(species.baseStats).reverse();\r\n\t\tfor (const [i, statName] of Object.keys(species.baseStats).entries()) {\r\n\t\t\tspecies.baseStats[statName] = stats[i];\r\n\t\t}\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t},\r\n\tflippedhelp: [\r\n\t\t`/flip OR /flipped [, gen] - Shows the base stats that a Pok\\u00e9mon would have in Flipped.`,\r\n\t\t`Alternatively, you can use /flip[gen number] to see a Pok\\u00e9mon's stats in that generation.`,\r\n\t],\r\n\r\n\tns: 'natureswap',\r\n\tns3: 'natureswap',\r\n\tns4: 'natureswap',\r\n\tns5: 'natureswap',\r\n\tns6: 'natureswap',\r\n\tns7: 'natureswap',\r\n\tns8: 'natureswap',\r\n\tnatureswap(target, room, user, connection, cmd) {\r\n\t\tconst args = target.split(',');\r\n\t\tconst nature = args[0];\r\n\t\tconst pokemon = args[1];\r\n\t\tconst targetGen = parseInt(cmd[cmd.length - 1]);\r\n\t\tif (targetGen && !args[2]) args[2] = `gen${targetGen}`;\r\n\t\tlet dex = Dex;\r\n\t\tif (args[2] && toID(args[2]) in Dex.dexes) {\r\n\t\t\tdex = Dex.dexes[toID(args[2])];\r\n\t\t} else if (room?.battle) {\r\n\t\t\tconst format = Dex.formats.get(room.battle.format);\r\n\t\t\tdex = Dex.mod(format.mod);\r\n\t\t}\r\n\t\tif (!toID(nature) || !toID(pokemon)) return this.parse(`/help natureswap`);\r\n\t\tthis.runBroadcast();\r\n\t\tconst natureObj = dex.natures.get(nature);\r\n\t\tif (dex.gen < 3) throw new Chat.ErrorMessage(`Error: Natures don't exist prior to Generation 3.`);\r\n\t\tif (!natureObj.exists) throw new Chat.ErrorMessage(`Error: Nature ${nature} not found.`);\r\n\t\tconst species = Utils.deepClone(dex.species.get(pokemon));\r\n\t\tif (!species.exists || species.gen > dex.gen) {\r\n\t\t\tconst monName = species.gen > dex.gen ? species.name : args[0].trim();\r\n\t\t\tconst additionalReason = species.gen > dex.gen ? ` in Generation ${dex.gen}` : ``;\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${monName}' not found${additionalReason}.`);\r\n\t\t}\r\n\t\tif (natureObj.minus && natureObj.plus) {\r\n\t\t\tconst swap = species.baseStats[natureObj.minus];\r\n\t\t\tspecies.baseStats[natureObj.minus] = species.baseStats[natureObj.plus];\r\n\t\t\tspecies.baseStats[natureObj.plus] = swap;\r\n\t\t\tspecies.tier = 'NS';\r\n\t\t}\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(species, dex.gen)}`);\r\n\t},\r\n\tnatureswaphelp: [\r\n\t\t`/ns OR /natureswap , [, gen] - Shows the base stats that a Pok\\u00e9mon would have in Nature Swap.`,\r\n\t\t`Alternatively, you can use /ns[gen number] to see a Pok\\u00e9mon's stats in that generation.`,\r\n\t],\r\n\r\n\tce: 'crossevolve',\r\n\tcrossevo: 'crossevolve',\r\n\tcrossevolve(target, user, room) {\r\n\t\tif (!this.runBroadcast()) return;\r\n\t\tif (!target?.includes(',')) return this.parse(`/help crossevo`);\r\n\r\n\t\tconst pokes = target.split(',');\r\n\t\tconst species = Dex.species.get(pokes[0]);\r\n\t\tconst crossSpecies = Dex.species.get(pokes[1]);\r\n\r\n\t\tif (!species.exists) throw new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${pokes[0]}' not found.`);\r\n\t\tif (!crossSpecies.exists) throw new Chat.ErrorMessage(`Error: Pok\\u00e9mon '${pokes[1]}' not found.`);\r\n\r\n\t\tif (!species.evos.length) throw new Chat.ErrorMessage(`Error: ${species.name} does not evolve.`);\r\n\t\tif (!crossSpecies.prevo) throw new Chat.ErrorMessage(`Error: ${crossSpecies.name} does not have a prevolution.`);\r\n\r\n\t\tlet setStage = 1;\r\n\t\tlet crossStage = 1;\r\n\t\tif (species.prevo) {\r\n\t\t\tsetStage++;\r\n\t\t\tif (Dex.species.get(species.prevo).prevo) {\r\n\t\t\t\tsetStage++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst prevo = Dex.species.get(crossSpecies.prevo);\r\n\t\tif (crossSpecies.prevo) {\r\n\t\t\tcrossStage++;\r\n\t\t\tif (prevo.prevo) {\r\n\t\t\t\tcrossStage++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (setStage + 1 !== crossStage) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Cross evolution must follow evolutionary stages. (${species.name} is Stage ${setStage} and can only cross evolve to Stage ${setStage + 1})`);\r\n\t\t}\r\n\t\tconst mixedSpecies = Utils.deepClone(species);\r\n\t\tmixedSpecies.abilities = Utils.deepClone(crossSpecies.abilities);\r\n\t\tmixedSpecies.baseStats = Utils.deepClone(mixedSpecies.baseStats);\r\n\t\tmixedSpecies.bst = 0;\r\n\t\tlet statName: StatID;\r\n\t\tfor (statName in species.baseStats) {\r\n\t\t\tconst statChange = crossSpecies.baseStats[statName] - prevo.baseStats[statName];\r\n\t\t\tmixedSpecies.baseStats[statName] = Utils.clampIntRange(mixedSpecies.baseStats[statName] + statChange, 1, 255);\r\n\t\t\tmixedSpecies.bst += mixedSpecies.baseStats[statName];\r\n\t\t}\r\n\t\tmixedSpecies.types = [species.types[0]];\r\n\t\tif (species.types[1]) mixedSpecies.types.push(species.types[1]);\r\n\t\tif (crossSpecies.types[0] !== prevo.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];\r\n\t\tif (crossSpecies.types[1] !== prevo.types[1]) {\r\n\t\t\tmixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];\r\n\t\t}\r\n\t\tif (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];\r\n\t\tmixedSpecies.weighthg += crossSpecies.weighthg - prevo.weighthg;\r\n\t\tif (mixedSpecies.weighthg < 1) {\r\n\t\t\tmixedSpecies.weighthg = 1;\r\n\t\t}\r\n\t\tmixedSpecies.tier = \"CE\";\r\n\t\tlet weighthit = 20;\r\n\t\tif (mixedSpecies.weighthg >= 2000) {\r\n\t\t\tweighthit = 120;\r\n\t\t} else if (mixedSpecies.weighthg >= 1000) {\r\n\t\t\tweighthit = 100;\r\n\t\t} else if (mixedSpecies.weighthg >= 500) {\r\n\t\t\tweighthit = 80;\r\n\t\t} else if (mixedSpecies.weighthg >= 250) {\r\n\t\t\tweighthit = 60;\r\n\t\t} else if (mixedSpecies.weighthg >= 100) {\r\n\t\t\tweighthit = 40;\r\n\t\t}\r\n\t\tconst details: {[k: string]: string} = {\r\n\t\t\t\"Dex#\": mixedSpecies.num,\r\n\t\t\tGen: mixedSpecies.gen,\r\n\t\t\tHeight: mixedSpecies.heightm + \" m\",\r\n\t\t\tWeight: mixedSpecies.weighthg / 10 + \" kg (\" + weighthit + \" BP)\",\r\n\t\t\t\"Dex Colour\": mixedSpecies.color,\r\n\t\t};\r\n\t\tif (mixedSpecies.eggGroups) details[\"Egg Group(s)\"] = mixedSpecies.eggGroups.join(\", \");\r\n\t\tdetails['Does Not Evolve'] = \"\";\r\n\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedSpecies)}`);\r\n\t\tthis.sendReply(`|raw|` + Object.entries(details).map(([detail, value]) => (\r\n\t\t\tvalue === '' ? detail : `${detail}: ${value}`\r\n\t\t)).join(\" |  \") + ``);\r\n\t},\r\n\tcrossevolvehelp: [\r\n\t\t\"/crossevo , - Shows the type and stats for the Cross Evolved Pok\\u00e9mon.\",\r\n\t],\r\n\r\n\treevo: 'showevo',\r\n\tshowevo(target, user, room, connection, cmd) {\r\n\t\tif (!this.runBroadcast()) return;\r\n\t\tconst targetid = toID(target);\r\n\t\tconst isReEvo = cmd === 'reevo';\r\n\t\tif (!targetid) return this.parse(`/help ${isReEvo ? 're' : 'show'}evo`);\r\n\t\tconst evo = Dex.species.get(target);\r\n\t\tif (!evo.exists) {\r\n\t\t\tthrow new Chat.ErrorMessage(`Error: Pok\\u00e9mon ${target} not found.`);\r\n\t\t}\r\n\t\tif (!evo.prevo) {\r\n\t\t\tconst evoBaseSpecies = Dex.species.get(evo.baseSpecies);\r\n\t\t\tif (!evoBaseSpecies.prevo) throw new Chat.ErrorMessage(`Error: ${evoBaseSpecies.name} is not an evolution.`);\r\n\t\t\tconst prevoSpecies = Dex.species.get(evoBaseSpecies.prevo);\r\n\t\t\tconst deltas = Utils.deepClone(evo);\r\n\t\t if (!isReEvo) {\r\n\t\t\t deltas.tier = 'CE';\r\n\t\t\t deltas.weightkg = evo.weightkg - prevoSpecies.weightkg;\r\n\t\t\t deltas.types = [];\r\n\t\t\t if (evo.types[0] !== prevoSpecies.types[0]) deltas.types[0] = evo.types[0];\r\n\t\t\t if (evo.types[1] !== prevoSpecies.types[1]) {\r\n\t\t\t\t deltas.types[1] = evo.types[1] || evo.types[0];\r\n\t\t\t }\r\n\t\t\t if (deltas.types.length) {\r\n\t\t\t\t\t// Undefined type remover\r\n\t\t\t\t deltas.types = deltas.types.filter((type: string | undefined) => type !== undefined);\r\n\r\n\t\t\t\t\tif (deltas.types[0] === deltas.types[1]) deltas.types = [deltas.types[0]];\r\n\t\t\t } else {\r\n\t\t\t\t\tdeltas.types = null;\r\n\t\t\t }\r\n\t\t }\r\n\t\t deltas.bst = 0;\r\n\t\t let i: StatID;\r\n\t\t for (i in evo.baseStats) {\r\n\t\t\t\tconst statChange = evoBaseSpecies.baseStats[i] - prevoSpecies.baseStats[i];\r\n\t\t\t\tconst formeChange = evo.baseStats[i] - evoBaseSpecies.baseStats[i];\r\n\t\t\t\tif (!isReEvo) {\r\n\t\t\t if (!evo.prevo) {\r\n\t\t\t\t\t\tdeltas.baseStats[i] = formeChange;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdeltas.baseStats[i] = statChange;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeltas.baseStats[i] = Utils.clampIntRange(evoBaseSpecies.baseStats[i] + statChange, 1, 255);\r\n\t\t\t\t\tdeltas.baseStats[i] = Utils.clampIntRange(deltas.baseStats[i] + formeChange, 1, 255);\r\n\t\t\t\t}\r\n\t\t\t\tdeltas.bst += deltas.baseStats[i];\r\n\t\t\t}\r\n\t\t\tconst details = {\r\n\t\t\t\tGen: evo.gen,\r\n\t\t\t\tWeight: (deltas.weighthg < 0 ? \"\" : \"+\") + deltas.weighthg / 10 + \" kg\",\r\n\t\t\t\tStage: (Dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),\r\n\t\t\t};\r\n\t\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);\r\n\t\t\tif (!isReEvo) {\r\n\t\t\t\tthis.sendReply(`|raw|Gen: ${details[\"Gen\"]} |  Weight: ${details[\"Weight\"]} |  Stage: ${details[\"Stage\"]}`);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst prevoSpecies = Dex.species.get(evo.prevo);\r\n\t\t\tconst deltas = Utils.deepClone(evo);\r\n\t\t\tif (!isReEvo) {\r\n\t\t\t\tdeltas.tier = 'CE';\r\n\t\t\t\tdeltas.weightkg = evo.weightkg - prevoSpecies.weightkg;\r\n\t\t\t\tdeltas.types = [];\r\n\t\t\t\tif (evo.types[0] !== prevoSpecies.types[0]) deltas.types[0] = evo.types[0];\r\n\t\t\t\tif (evo.types[1] !== prevoSpecies.types[1]) {\r\n\t\t\t\t\tdeltas.types[1] = evo.types[1] || evo.types[0];\r\n\t\t\t\t}\r\n\t\t\t\tif (deltas.types.length) {\r\n\t\t\t\t\t// Undefined type remover\r\n\t\t\t\t\tdeltas.types = deltas.types.filter((type: string | undefined) => type !== undefined);\r\n\r\n\t\t\t\t\tif (deltas.types[0] === deltas.types[1]) deltas.types = [deltas.types[0]];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeltas.types = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tdeltas.bst = 0;\r\n\t\t\tlet i: StatID;\r\n\t\t\tfor (i in evo.baseStats) {\r\n\t\t\t\tconst statChange = evo.baseStats[i] - prevoSpecies.baseStats[i];\r\n\t\t\t\tif (!isReEvo) {\r\n\t\t\t\t\tdeltas.baseStats[i] = statChange;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeltas.baseStats[i] = Utils.clampIntRange(deltas.baseStats[i] + statChange, 1, 255);\r\n\t\t\t\t}\r\n\t\t\t\tdeltas.bst += deltas.baseStats[i];\r\n\t\t\t}\r\n\t\t\tconst details = {\r\n\t\t\t\tGen: evo.gen,\r\n\t\t\t\tWeight: (deltas.weighthg < 0 ? \"\" : \"+\") + deltas.weighthg / 10 + \" kg\",\r\n\t\t\t\tStage: (Dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),\r\n\t\t\t};\r\n\t\t\tthis.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);\r\n\t\t\tif (!isReEvo) {\r\n\t\t\t\tthis.sendReply(`|raw|Gen: ${details[\"Gen\"]} |  Weight: ${details[\"Weight\"]} |  Stage: ${details[\"Stage\"]}`);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\treevohelp: [\r\n\t\t`/reevo - Shows the stats that a Pok\\u00e9mon would have in Re-Evolution`,\r\n\t],\r\n\tshowevohelp: [\r\n\t\t`/showevo - Shows the changes that a Pok\\u00e9mon applies in Cross Evolution`,\r\n\t],\r\n};\r\n"], "mappings": "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", "names": [] }