{ "version": 3, "sources": ["../../../sim/teams.ts"], "sourcesContent": ["/**\r\n * Teams\r\n * Pokemon Showdown - http://pokemonshowdown.com/\r\n *\r\n * Functions for converting and generating teams.\r\n *\r\n * @license MIT\r\n */\r\n\r\nimport {Dex, toID} from './dex';\r\nimport type {PRNG, PRNGSeed} from './prng';\r\n\r\n/**\r\n * COBBLED: Represents additional move data\r\n */\r\nexport interface AdditionalMoveInfo {\r\n\t/**\r\n\t * COBBLED: The maximum amount of PP the move has.\r\n\t */\r\n\tmaxPp: number;\r\n\t/**\r\n\t * COBBLED: The current amount of PP the move has.\r\n\t */\r\n\tpp: number;\r\n}\r\n\r\nexport interface PokemonSet {\r\n\t/**\r\n\t * Nickname. Should be identical to its base species if not specified\r\n\t * by the player, e.g. \"Minior\".\r\n\t */\r\n\tname: string;\r\n\t/**\r\n\t * Species name (including forme if applicable), e.g. \"Minior-Red\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tspecies: string;\r\n\t/**\r\n\t * COBBLED: Unique Id for the Pokemon from the mod.\r\n\t */\r\n\tuuid?: string;\r\n\t/**\r\n\t * COBBLED: The current health of the Pokemon being assigned from the mod.\r\n\t */\r\n\tcurrentHealth?: number;\r\n\t/**\r\n\t * COBBLED: The current status of the Pokemon if any from the mod.\r\n\t */\r\n\tstatus?: string;\r\n\tstatusDuration?: number;\r\n\t/**\r\n\t * This can be an id, e.g. \"whiteherb\" or a full name, e.g. \"White Herb\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\titem: string;\r\n\t/**\r\n\t * This can be an id, e.g. \"shieldsdown\" or a full name,\r\n\t * e.g. \"Shields Down\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tability: string;\r\n\t/**\r\n\t * Each move can be an id, e.g. \"shellsmash\" or a full name,\r\n\t * e.g. \"Shell Smash\"\r\n\t * These should always be converted to ids before use.\r\n\t */\r\n\tmoves: string[];\r\n\t/**\r\n\t * COBBLED: Holds any additional move data coming over from the mod.\r\n\t */\r\n\tmovesInfo?: AdditionalMoveInfo[];\r\n\t/**\r\n\t * This can be an id, e.g. \"adamant\" or a full name, e.g. \"Adamant\".\r\n\t * This should always be converted to an id before use.\r\n\t */\r\n\tnature: string;\r\n\tgender: string;\r\n\t/**\r\n\t * Effort Values, used in stat calculation.\r\n\t * These must be between 0 and 255, inclusive.\r\n\t *\r\n\t * Also used to store AVs for Let's Go\r\n\t */\r\n\tevs: StatsTable;\r\n\t/**\r\n\t * Individual Values, used in stat calculation.\r\n\t * These must be between 0 and 31, inclusive.\r\n\t *\r\n\t * These are also used as DVs, or determinant values, in Gens\r\n\t * 1 and 2, which are represented as even numbers from 0 to 30.\r\n\t *\r\n\t * In Gen 2-6, these must match the Hidden Power type.\r\n\t *\r\n\t * In Gen 7+, Bottle Caps means these can either match the\r\n\t * Hidden Power type or 31.\r\n\t */\r\n\tivs: StatsTable;\r\n\t/**\r\n\t * This is usually between 1 and 100, inclusive,\r\n\t * but the simulator supports levels up to 9999 for testing purposes.\r\n\t */\r\n\tlevel: number;\r\n\t/**\r\n\t * While having no direct competitive effect, certain Pokemon cannot\r\n\t * be legally obtained as shiny, either as a whole or with certain\r\n\t * event-only abilities or moves.\r\n\t */\r\n\tshiny?: boolean;\r\n\t/**\r\n\t * This is technically \"Friendship\", but the community calls this\r\n\t * \"Happiness\".\r\n\t *\r\n\t * It's used to calculate the power of the moves Return and Frustration.\r\n\t * This value must be between 0 and 255, inclusive.\r\n\t */\r\n\thappiness?: number;\r\n\t/**\r\n\t * The pokeball this Pokemon is in. Like shininess, this property\r\n\t * has no direct competitive effects, but has implications for\r\n\t * event legality. For example, any Rayquaza that knows V-Create\r\n\t * must be sent out from a Cherish Ball.\r\n\t *\r\n\t * TODO: actually support this in the validator, switching animations,\r\n\t * and the teambuilder.\r\n\t */\r\n\tpokeball?: string;\r\n\t/**\r\n\t * Hidden Power type. Optional in older gens, but used in Gen 7+\r\n\t * because `ivs` contain post-Battle-Cap values.\r\n\t */\r\n\thpType?: string;\r\n\t/**\r\n\t * Dynamax Level. Affects the amount of HP gained when Dynamaxed.\r\n\t * This value must be between 0 and 10, inclusive.\r\n\t */\r\n\tdynamaxLevel?: number;\r\n\tgigantamax?: boolean;\r\n\t/**\r\n\t * Tera Type\r\n\t */\r\n\tteraType?: string;\r\n}\r\n\r\nexport const Teams = new class Teams {\r\n\tpack(team: PokemonSet[] | null): string {\r\n\t\tif (!team) return '';\r\n\r\n\t\tfunction getIv(ivs: StatsTable, s: keyof StatsTable): string {\r\n\t\t\treturn ivs[s] === 31 || ivs[s] === undefined ? '' : ivs[s].toString();\r\n\t\t}\r\n\r\n\t\tlet buf = '';\r\n\t\tfor (const set of team) {\r\n\t\t\tif (buf) buf += ']';\r\n\r\n\t\t\t// name\r\n\t\t\tbuf += (set.name || set.species);\r\n\r\n\t\t\t// species\r\n\t\t\tconst id = this.packName(set.species || set.name);\r\n\t\t\tbuf += '|' + (this.packName(set.name || set.species) === id ? '' : id);\r\n\r\n\t\t\t// item\r\n\t\t\tbuf += '|' + this.packName(set.item);\r\n\r\n\t\t\t// ability\r\n\t\t\tbuf += '|' + this.packName(set.ability);\r\n\r\n\t\t\t// moves\r\n\t\t\tbuf += '|' + set.moves.map(this.packName).join(',');\r\n\r\n\t\t\t// nature\r\n\t\t\tbuf += '|' + (set.nature || '');\r\n\r\n\t\t\t// evs\r\n\t\t\tlet evs = '|';\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tevs = '|' + (set.evs['hp'] || '') + ',' + (set.evs['atk'] || '') + ',' + (set.evs['def'] || '') + ',' + (set.evs['spa'] || '') + ',' + (set.evs['spd'] || '') + ',' + (set.evs['spe'] || '');\r\n\t\t\t}\r\n\t\t\tif (evs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += evs;\r\n\t\t\t}\r\n\r\n\t\t\t// gender\r\n\t\t\tif (set.gender) {\r\n\t\t\t\tbuf += '|' + set.gender;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// ivs\r\n\t\t\tlet ivs = '|';\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tivs = '|' + getIv(set.ivs, 'hp') + ',' + getIv(set.ivs, 'atk') + ',' + getIv(set.ivs, 'def') +\r\n\t\t\t\t\t',' + getIv(set.ivs, 'spa') + ',' + getIv(set.ivs, 'spd') + ',' + getIv(set.ivs, 'spe');\r\n\t\t\t}\r\n\t\t\tif (ivs === '|,,,,,') {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += ivs;\r\n\t\t\t}\r\n\r\n\t\t\t// shiny\r\n\t\t\tif (set.shiny) {\r\n\t\t\t\tbuf += '|S';\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// level\r\n\t\t\tif (set.level && set.level !== 100) {\r\n\t\t\t\tbuf += '|' + set.level;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\t// happiness\r\n\t\t\tif (set.happiness !== undefined && set.happiness !== 255) {\r\n\t\t\t\tbuf += '|' + set.happiness;\r\n\t\t\t} else {\r\n\t\t\t\tbuf += '|';\r\n\t\t\t}\r\n\r\n\t\t\tif (set.pokeball || set.hpType || set.gigantamax ||\r\n\t\t\t\t(set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10) || set.teraType) {\r\n\t\t\t\tbuf += ',' + this.packName(set.pokeball || '');\r\n\t\t\t\tbuf += ',' + (set.hpType || '');\r\n\t\t\t\tbuf += ',' + (set.gigantamax ? 'G' : '');\r\n\t\t\t\tbuf += ',' + (set.dynamaxLevel !== undefined && set.dynamaxLevel !== 10 ? set.dynamaxLevel : '');\r\n\t\t\t\tbuf += ',' + (set.teraType || '');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn buf;\r\n\t}\r\n\r\n\tunpack(buf: string): PokemonSet[] | null {\r\n\t\tif (!buf) return null;\r\n\t\tif (typeof buf !== 'string') return buf;\r\n\t\tif (buf.startsWith('[') && buf.endsWith(']')) {\r\n\t\t\ttry {\r\n\t\t\t\tbuf = this.pack(JSON.parse(buf));\r\n\t\t\t} catch {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst team = [];\r\n\t\tlet i = 0;\r\n\t\tlet j = 0;\r\n\r\n\t\t// limit to 24\r\n\t\tfor (let count = 0; count < 24; count++) {\r\n\t\t\tconst set: PokemonSet = {} as PokemonSet;\r\n\t\t\tteam.push(set);\r\n\r\n\t\t\t// name\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.name = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// species\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.species = this.unpackName(buf.substring(i, j), Dex.species) || set.name;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// COBBLED: uuid\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.uuid = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// COBBLED: currentHealth\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.currentHealth = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// COBBLED: status\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.status = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.statusDuration = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// item\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.item = this.unpackName(buf.substring(i, j), Dex.items);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ability\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tconst ability = buf.substring(i, j);\r\n\t\t\t// COBBLED: No longer validate abilities as we can trust the server data, we need this as well to support more then 3/4 abilities.\r\n\t\t\t/*\r\n\t\t\tset.ability = ['', '0', '1', 'H', 'S'].includes(ability) ?\r\n\t\t\t\tspecies.abilities[ability as '0' || '0'] || (ability === '' ? '' : '!!!ERROR!!!') :\r\n\t\t\t\tthis.unpackName(ability, Dex.abilities);\r\n\t\t\t */\r\n\t\t\tset.ability = this.unpackName(ability, Dex.abilities);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// moves\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.moves = buf.substring(i, j).split(',', 24).map(name => this.unpackName(name, Dex.moves));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// COBBLED: Additional move data\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.movesInfo = buf.substring(i, j).split(',', 24).map(moveData => {\r\n\t\t\t\tconst moveInfo: AdditionalMoveInfo = {} as AdditionalMoveInfo;\r\n\t\t\t\tlet data = moveData.split('/');\r\n\t\t\t\tmoveInfo.pp = parseInt(data[0]);\r\n\t\t\t\tmoveInfo.maxPp = parseInt(data[1]);\r\n\t\t\t\treturn moveInfo;\r\n\t\t\t});\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// nature\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tset.nature = this.unpackName(buf.substring(i, j), Dex.natures);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// evs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst evs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.evs = {\r\n\t\t\t\t\thp: Number(evs[0]) || 0,\r\n\t\t\t\t\tatk: Number(evs[1]) || 0,\r\n\t\t\t\t\tdef: Number(evs[2]) || 0,\r\n\t\t\t\t\tspa: Number(evs[3]) || 0,\r\n\t\t\t\t\tspd: Number(evs[4]) || 0,\r\n\t\t\t\t\tspe: Number(evs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// gender\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.gender = buf.substring(i, j);\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// ivs\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (j !== i) {\r\n\t\t\t\tconst ivs = buf.substring(i, j).split(',', 6);\r\n\t\t\t\tset.ivs = {\r\n\t\t\t\t\thp: ivs[0] === '' ? 31 : Number(ivs[0]) || 0,\r\n\t\t\t\t\tatk: ivs[1] === '' ? 31 : Number(ivs[1]) || 0,\r\n\t\t\t\t\tdef: ivs[2] === '' ? 31 : Number(ivs[2]) || 0,\r\n\t\t\t\t\tspa: ivs[3] === '' ? 31 : Number(ivs[3]) || 0,\r\n\t\t\t\t\tspd: ivs[4] === '' ? 31 : Number(ivs[4]) || 0,\r\n\t\t\t\t\tspe: ivs[5] === '' ? 31 : Number(ivs[5]) || 0,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// shiny\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.shiny = true;\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// level\r\n\t\t\tj = buf.indexOf('|', i);\r\n\t\t\tif (j < 0) return null;\r\n\t\t\tif (i !== j) set.level = parseInt(buf.substring(i, j));\r\n\t\t\ti = j + 1;\r\n\r\n\t\t\t// happiness\r\n\t\t\tj = buf.indexOf(']', i);\r\n\t\t\tlet misc;\r\n\t\t\tif (j < 0) {\r\n\t\t\t\tif (i < buf.length) misc = buf.substring(i).split(',', 6);\r\n\t\t\t} else {\r\n\t\t\t\tif (i !== j) misc = buf.substring(i, j).split(',', 6);\r\n\t\t\t}\r\n\t\t\tif (misc) {\r\n\t\t\t\tset.happiness = (misc[0] ? Number(misc[0]) : 255);\r\n\t\t\t\tset.pokeball = this.unpackName(misc[1] || '', Dex.items);\r\n\t\t\t\tset.hpType = misc[2] || '';\r\n\t\t\t\tset.gigantamax = !!misc[3];\r\n\t\t\t\tset.dynamaxLevel = (misc[4] ? Number(misc[4]) : 10);\r\n\t\t\t\tset.teraType = misc[5];\r\n\t\t\t}\r\n\t\t\tif (j < 0) break;\r\n\t\t\ti = j + 1;\r\n\t\t}\r\n\r\n\t\treturn team;\r\n\t}\r\n\r\n\t/** Very similar to toID but without the lowercase conversion */\r\n\tpackName(name: string | undefined | null) {\r\n\t\tif (!name) return '';\r\n\t\treturn name.replace(/[^A-Za-z0-9]+/g, '');\r\n\t}\r\n\r\n\t/** Will not entirely recover a packed name, but will be a pretty readable guess */\r\n\tunpackName(name: string, dexTable?: {get: (name: string) => AnyObject}) {\r\n\t\tif (!name) return '';\r\n\t\tif (dexTable) {\r\n\t\t\tconst obj = dexTable.get(name);\r\n\t\t\tif (obj.exists) return obj.name;\r\n\t\t}\r\n\t\treturn name.replace(/([0-9]+)/g, ' $1 ').replace(/([A-Z])/g, ' $1').replace(/[ ][ ]/g, ' ').trim();\r\n\t}\r\n\r\n\t/**\r\n\t * Exports a team in human-readable PS export format\r\n\t */\r\n\texport(team: PokemonSet[], options?: {hideStats?: boolean}) {\r\n\t\tlet output = '';\r\n\t\tfor (const set of team) {\r\n\t\t\toutput += this.exportSet(set, options) + `\\n`;\r\n\t\t}\r\n\t\treturn output;\r\n\t}\r\n\r\n\texportSet(set: PokemonSet, {hideStats}: {hideStats?: boolean} = {}) {\r\n\t\tlet out = ``;\r\n\r\n\t\t// core\r\n\t\tif (set.name && set.name !== set.species) {\r\n\t\t\tout += `${set.name} (${set.species})`;\r\n\t\t} else {\r\n\t\t\tout += set.species;\r\n\t\t}\r\n\t\tif (set.gender === 'M') out += ` (M)`;\r\n\t\tif (set.gender === 'F') out += ` (F)`;\r\n\t\tif (set.item) out += ` @ ${set.item}`;\r\n\t\tout += ` \\n`;\r\n\r\n\t\tif (set.ability) {\r\n\t\t\tout += `Ability: ${set.ability} \\n`;\r\n\t\t}\r\n\r\n\t\t// details\r\n\t\tif (set.level && set.level !== 100) {\r\n\t\t\tout += `Level: ${set.level} \\n`;\r\n\t\t}\r\n\t\tif (set.shiny) {\r\n\t\t\tout += `Shiny: Yes \\n`;\r\n\t\t}\r\n\t\tif (typeof set.happiness === 'number' && set.happiness !== 255 && !isNaN(set.happiness)) {\r\n\t\t\tout += `Happiness: ${set.happiness} \\n`;\r\n\t\t}\r\n\t\tif (set.pokeball) {\r\n\t\t\tout += `Pokeball: ${set.pokeball} \\n`;\r\n\t\t}\r\n\t\tif (set.hpType) {\r\n\t\t\tout += `Hidden Power: ${set.hpType} \\n`;\r\n\t\t}\r\n\t\tif (typeof set.dynamaxLevel === 'number' && set.dynamaxLevel !== 10 && !isNaN(set.dynamaxLevel)) {\r\n\t\t\tout += `Dynamax Level: ${set.dynamaxLevel} \\n`;\r\n\t\t}\r\n\t\tif (set.gigantamax) {\r\n\t\t\tout += `Gigantamax: Yes \\n`;\r\n\t\t}\r\n\t\tif (set.teraType) {\r\n\t\t\tout += `Tera Type: ${set.teraType} \\n`;\r\n\t\t}\r\n\r\n\t\t// stats\r\n\t\tif (!hideStats) {\r\n\t\t\tif (set.evs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => set.evs[stat] ?\r\n\t\t\t\t\t\t`${set.evs[stat]} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `EVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (set.nature) {\r\n\t\t\t\tout += `${set.nature} Nature \\n`;\r\n\t\t\t}\r\n\t\t\tif (set.ivs) {\r\n\t\t\t\tconst stats = Dex.stats.ids().map(\r\n\t\t\t\t\tstat => (set.ivs[stat] !== 31 && set.ivs[stat] !== undefined) ?\r\n\t\t\t\t\t\t`${set.ivs[stat] || 0} ${Dex.stats.shortNames[stat]}` : ``\r\n\t\t\t\t).filter(Boolean);\r\n\t\t\t\tif (stats.length) {\r\n\t\t\t\t\tout += `IVs: ${stats.join(\" / \")} \\n`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// moves\r\n\t\tfor (let move of set.moves) {\r\n\t\t\tif (move.startsWith(`Hidden Power `) && move.charAt(13) !== '[') {\r\n\t\t\t\tmove = `Hidden Power [${move.slice(13)}]`;\r\n\t\t\t}\r\n\t\t\tout += `- ${move} \\n`;\r\n\t\t}\r\n\r\n\t\treturn out;\r\n\t}\r\n\r\n\tparseExportedTeamLine(line: string, isFirstLine: boolean, set: PokemonSet) {\r\n\t\tif (isFirstLine) {\r\n\t\t\tlet item;\r\n\t\t\t[line, item] = line.split(' @ ');\r\n\t\t\tif (item) {\r\n\t\t\t\tset.item = item;\r\n\t\t\t\tif (toID(set.item) === 'noitem') set.item = '';\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (M)')) {\r\n\t\t\t\tset.gender = 'M';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(' (F)')) {\r\n\t\t\t\tset.gender = 'F';\r\n\t\t\t\tline = line.slice(0, -4);\r\n\t\t\t}\r\n\t\t\tif (line.endsWith(')') && line.includes('(')) {\r\n\t\t\t\tconst [name, species] = line.slice(0, -1).split('(');\r\n\t\t\t\tset.species = Dex.species.get(species).name;\r\n\t\t\t\tset.name = name.trim();\r\n\t\t\t} else {\r\n\t\t\t\tset.species = Dex.species.get(line).name;\r\n\t\t\t\tset.name = '';\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('Trait: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.ability = line;\r\n\t\t} else if (line.startsWith('Ability: ')) {\r\n\t\t\tline = line.slice(9);\r\n\t\t\tset.ability = line;\r\n\t\t} else if (line === 'Shiny: Yes') {\r\n\t\t\tset.shiny = true;\r\n\t\t} else if (line.startsWith('Level: ')) {\r\n\t\t\tline = line.slice(7);\r\n\t\t\tset.level = +line;\r\n\t\t} else if (line.startsWith('Happiness: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.happiness = +line;\r\n\t\t} else if (line.startsWith('Pokeball: ')) {\r\n\t\t\tline = line.slice(10);\r\n\t\t\tset.pokeball = line;\r\n\t\t} else if (line.startsWith('Hidden Power: ')) {\r\n\t\t\tline = line.slice(14);\r\n\t\t\tset.hpType = line;\r\n\t\t} else if (line.startsWith('Tera Type: ')) {\r\n\t\t\tline = line.slice(11);\r\n\t\t\tset.teraType = line;\r\n\t\t} else if (line === 'Gigantamax: Yes') {\r\n\t\t\tset.gigantamax = true;\r\n\t\t} else if (line.startsWith('EVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst evLines = line.split('/');\r\n\t\t\tset.evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};\r\n\t\t\tfor (const evLine of evLines) {\r\n\t\t\t\tconst [statValue, statName] = evLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tconst value = parseInt(statValue);\r\n\t\t\t\tset.evs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (line.startsWith('IVs: ')) {\r\n\t\t\tline = line.slice(5);\r\n\t\t\tconst ivLines = line.split('/');\r\n\t\t\tset.ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\r\n\t\t\tfor (const ivLine of ivLines) {\r\n\t\t\t\tconst [statValue, statName] = ivLine.trim().split(' ');\r\n\t\t\t\tconst statid = Dex.stats.getID(statName);\r\n\t\t\t\tif (!statid) continue;\r\n\t\t\t\tlet value = parseInt(statValue);\r\n\t\t\t\tif (isNaN(value)) value = 31;\r\n\t\t\t\tset.ivs[statid] = value;\r\n\t\t\t}\r\n\t\t} else if (/^[A-Za-z]+ (N|n)ature/.test(line)) {\r\n\t\t\tlet natureIndex = line.indexOf(' Nature');\r\n\t\t\tif (natureIndex === -1) natureIndex = line.indexOf(' nature');\r\n\t\t\tif (natureIndex === -1) return;\r\n\t\t\tline = line.substr(0, natureIndex);\r\n\t\t\tif (line !== 'undefined') set.nature = line;\r\n\t\t} else if (line.startsWith('-') || line.startsWith('~')) {\r\n\t\t\tline = line.slice(line.charAt(1) === ' ' ? 2 : 1);\r\n\t\t\tif (line.startsWith('Hidden Power [')) {\r\n\t\t\t\tconst hpType = line.slice(14, -1);\r\n\t\t\t\tline = 'Hidden Power ' + hpType;\r\n\t\t\t\tif (!set.ivs && Dex.types.isName(hpType)) {\r\n\t\t\t\t\tset.ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\r\n\t\t\t\t\tconst hpIVs = Dex.types.get(hpType).HPivs || {};\r\n\t\t\t\t\tfor (const statid in hpIVs) {\r\n\t\t\t\t\t\tset.ivs[statid as StatID] = hpIVs[statid as StatID]!;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (line === 'Frustration' && set.happiness === undefined) {\r\n\t\t\t\tset.happiness = 0;\r\n\t\t\t}\r\n\t\t\tset.moves.push(line);\r\n\t\t}\r\n\t}\r\n\t/** Accepts a team in any format (JSON, packed, or exported) */\r\n\timport(buffer: string): PokemonSet[] | null {\r\n\t\tif (buffer.startsWith('[')) {\r\n\t\t\ttry {\r\n\t\t\t\tconst team = JSON.parse(buffer);\r\n\t\t\t\tif (!Array.isArray(team)) throw new Error(`Team should be an Array but isn't`);\r\n\t\t\t\tfor (const set of team) {\r\n\t\t\t\t\tset.name = Dex.getName(set.name);\r\n\t\t\t\t\tset.species = Dex.getName(set.species);\r\n\t\t\t\t\tset.item = Dex.getName(set.item);\r\n\t\t\t\t\tset.ability = Dex.getName(set.ability);\r\n\t\t\t\t\tset.gender = Dex.getName(set.gender);\r\n\t\t\t\t\tset.nature = Dex.getName(set.nature);\r\n\t\t\t\t\tconst evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0};\r\n\t\t\t\t\tif (set.evs) {\r\n\t\t\t\t\t\tfor (const statid in evs) {\r\n\t\t\t\t\t\t\tif (typeof set.evs[statid] === 'number') evs[statid as StatID] = set.evs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.evs = evs;\r\n\t\t\t\t\tconst ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31};\r\n\t\t\t\t\tif (set.ivs) {\r\n\t\t\t\t\t\tfor (const statid in ivs) {\r\n\t\t\t\t\t\t\tif (typeof set.ivs[statid] === 'number') ivs[statid as StatID] = set.ivs[statid];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tset.ivs = ivs;\r\n\t\t\t\t\tif (!Array.isArray(set.moves)) {\r\n\t\t\t\t\t\tset.moves = [];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tset.moves = set.moves.map(Dex.getName);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn team;\r\n\t\t\t} catch {}\r\n\t\t}\r\n\r\n\t\tconst lines = buffer.split(\"\\n\");\r\n\r\n\t\tconst sets: PokemonSet[] = [];\r\n\t\tlet curSet: PokemonSet | null = null;\r\n\r\n\t\twhile (lines.length && !lines[0]) lines.shift();\r\n\t\twhile (lines.length && !lines[lines.length - 1]) lines.pop();\r\n\r\n\t\tif (lines.length === 1 && lines[0].includes('|')) {\r\n\t\t\treturn this.unpack(lines[0]);\r\n\t\t}\r\n\t\tfor (let line of lines) {\r\n\t\t\tline = line.trim();\r\n\t\t\tif (line === '' || line === '---') {\r\n\t\t\t\tcurSet = null;\r\n\t\t\t} else if (line.startsWith('===')) {\r\n\t\t\t\t// team backup format; ignore\r\n\t\t\t} else if (!curSet) {\r\n\t\t\t\tcurSet = {\r\n\t\t\t\t\tname: '', species: '', item: '', ability: '', gender: '',\r\n\t\t\t\t\tnature: '',\r\n\t\t\t\t\tevs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0},\r\n\t\t\t\t\tivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31},\r\n\t\t\t\t\tlevel: 100,\r\n\t\t\t\t\tmoves: [],\r\n\t\t\t\t};\r\n\t\t\t\tsets.push(curSet);\r\n\t\t\t\tthis.parseExportedTeamLine(line, true, curSet);\r\n\t\t\t} else {\r\n\t\t\t\tthis.parseExportedTeamLine(line, false, curSet);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn sets;\r\n\t}\r\n\r\n\tgetGenerator(format: Format | string, seed: PRNG | PRNGSeed | null = null) {\r\n\t\tlet TeamGenerator;\r\n\t\tif (toID(format).includes('gen9computergeneratedteams')) {\r\n\t\t\tTeamGenerator = require(Dex.forFormat(format).dataDir + '/cg-teams').default;\r\n\t\t} else {\r\n\t\t\tTeamGenerator = require(Dex.forFormat(format).dataDir + '/random-teams').default;\r\n\t\t}\r\n\r\n\t\treturn new TeamGenerator(format, seed);\r\n\t}\r\n\r\n\tgenerate(format: Format | string, options: PlayerOptions | null = null): PokemonSet[] {\r\n\t\treturn this.getGenerator(format, options?.seed).getTeam(options);\r\n\t}\r\n};\r\n\r\nexport default Teams;\r\n"], "mappings": "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", "names": ["Teams"] }