Spaces:
Running
Running
{ | |
"version": 3, | |
"sources": ["../../sim/battle-stream.ts"], | |
"sourcesContent": ["/**\n * Battle Stream\n * Pokemon Showdown - http://pokemonshowdown.com/\n *\n * Supports interacting with a PS battle in Stream format.\n *\n * This format is VERY NOT FINALIZED, please do not use it directly yet.\n *\n * @license MIT\n */\n\nimport { Streams, Utils } from '../lib';\nimport { Teams } from './teams';\nimport { Battle, extractChannelMessages } from './battle';\nimport type { ChoiceRequest } from './side';\n\n/**\n * Like string.split(delimiter), but only recognizes the first `limit`\n * delimiters (default 1).\n *\n * `\"1 2 3 4\".split(\" \", 2) => [\"1\", \"2\"]`\n *\n * `Utils.splitFirst(\"1 2 3 4\", \" \", 1) => [\"1\", \"2 3 4\"]`\n *\n * Returns an array of length exactly limit + 1.\n */\nfunction splitFirst(str: string, delimiter: string, limit = 1) {\n\tconst splitStr: string[] = [];\n\twhile (splitStr.length < limit) {\n\t\tconst delimiterIndex = str.indexOf(delimiter);\n\t\tif (delimiterIndex >= 0) {\n\t\t\tsplitStr.push(str.slice(0, delimiterIndex));\n\t\t\tstr = str.slice(delimiterIndex + delimiter.length);\n\t\t} else {\n\t\t\tsplitStr.push(str);\n\t\t\tstr = '';\n\t\t}\n\t}\n\tsplitStr.push(str);\n\treturn splitStr;\n}\n\nexport class BattleStream extends Streams.ObjectReadWriteStream<string> {\n\tdebug: boolean;\n\tnoCatch: boolean;\n\treplay: boolean | 'spectator';\n\tkeepAlive: boolean;\n\tbattle: Battle | null;\n\n\tconstructor(options: {\n\t\tdebug?: boolean, noCatch?: boolean, keepAlive?: boolean, replay?: boolean | 'spectator',\n\t} = {}) {\n\t\tsuper();\n\t\tthis.debug = !!options.debug;\n\t\tthis.noCatch = !!options.noCatch;\n\t\tthis.replay = options.replay || false;\n\t\tthis.keepAlive = !!options.keepAlive;\n\t\tthis.battle = null;\n\t}\n\n\t_write(chunk: string) {\n\t\tif (this.noCatch) {\n\t\t\tthis._writeLines(chunk);\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tthis._writeLines(chunk);\n\t\t\t} catch (err: any) {\n\t\t\t\tthis.pushError(err, true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (this.battle) this.battle.sendUpdates();\n\t}\n\n\t_writeLines(chunk: string) {\n\t\tfor (const line of chunk.split('\\n')) {\n\t\t\tif (line.startsWith('>')) {\n\t\t\t\tconst [type, message] = splitFirst(line.slice(1), ' ');\n\t\t\t\tthis._writeLine(type, message);\n\t\t\t}\n\t\t}\n\t}\n\n\tpushMessage(type: string, data: string) {\n\t\tif (this.replay) {\n\t\t\tif (type === 'update') {\n\t\t\t\tif (this.replay === 'spectator') {\n\t\t\t\t\tconst channelMessages = extractChannelMessages(data, [0]);\n\t\t\t\t\tthis.push(channelMessages[0].join('\\n'));\n\t\t\t\t} else {\n\t\t\t\t\tconst channelMessages = extractChannelMessages(data, [-1]);\n\t\t\t\t\tthis.push(channelMessages[-1].join('\\n'));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.push(`${type}\\n${data}`);\n\t}\n\n\t_writeLine(type: string, message: string) {\n\t\tswitch (type) {\n\t\tcase 'start':\n\t\t\tconst options = JSON.parse(message);\n\t\t\toptions.send = (t: string, data: any) => {\n\t\t\t\tif (Array.isArray(data)) data = data.join(\"\\n\");\n\t\t\t\tthis.pushMessage(t, data);\n\t\t\t\tif (t === 'end' && !this.keepAlive) this.pushEnd();\n\t\t\t};\n\t\t\tif (this.debug) options.debug = true;\n\t\t\tthis.battle = new Battle(options);\n\t\t\tbreak;\n\t\tcase 'player':\n\t\t\tconst [slot, optionsText] = splitFirst(message, ' ');\n\t\t\tthis.battle!.setPlayer(slot as SideID, JSON.parse(optionsText));\n\t\t\tbreak;\n\t\tcase 'p1':\n\t\tcase 'p2':\n\t\tcase 'p3':\n\t\tcase 'p4':\n\t\t\tif (message === 'undo') {\n\t\t\t\tthis.battle!.undoChoice(type);\n\t\t\t} else {\n\t\t\t\tthis.battle!.choose(type, message);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'forcewin':\n\t\tcase 'forcetie':\n\t\t\tthis.battle!.win(type === 'forcewin' ? message as SideID : null);\n\t\t\tif (message) {\n\t\t\t\tthis.battle!.inputLog.push(`>forcewin ${message}`);\n\t\t\t} else {\n\t\t\t\tthis.battle!.inputLog.push(`>forcetie`);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'forcelose':\n\t\t\tthis.battle!.lose(message as SideID);\n\t\t\tthis.battle!.inputLog.push(`>forcelose ${message}`);\n\t\t\tbreak;\n\t\tcase 'reseed':\n\t\t\tthis.battle!.resetRNG(message as PRNGSeed);\n\t\t\t// could go inside resetRNG, but this makes using it in `eval` slightly less buggy\n\t\t\tthis.battle!.inputLog.push(`>reseed ${this.battle!.prng.getSeed()}`);\n\t\t\tbreak;\n\t\tcase 'tiebreak':\n\t\t\tthis.battle!.tiebreak();\n\t\t\tbreak;\n\t\tcase 'chat-inputlogonly':\n\t\t\tthis.battle!.inputLog.push(`>chat ${message}`);\n\t\t\tbreak;\n\t\tcase 'chat':\n\t\t\tthis.battle!.inputLog.push(`>chat ${message}`);\n\t\t\tthis.battle!.add('chat', `${message}`);\n\t\t\tbreak;\n\t\tcase 'eval':\n\t\t\tconst battle = this.battle!;\n\n\t\t\t// n.b. this will usually but not always work - if you eval code that also affects the inputLog,\n\t\t\t// replaying the inputlog would double-play the change.\n\t\t\tbattle.inputLog.push(`>${type} ${message}`);\n\n\t\t\tmessage = message.replace(/\\f/g, '\\n');\n\t\t\tbattle.add('', '>>> ' + message.replace(/\\n/g, '\\n||'));\n\t\t\ttry {\n\t\t\t\t/* eslint-disable no-eval, @typescript-eslint/no-unused-vars */\n\t\t\t\tconst p1 = battle.sides[0];\n\t\t\t\tconst p2 = battle.sides[1];\n\t\t\t\tconst p3 = battle.sides[2];\n\t\t\t\tconst p4 = battle.sides[3];\n\t\t\t\tconst p1active = p1?.active[0];\n\t\t\t\tconst p2active = p2?.active[0];\n\t\t\t\tconst p3active = p3?.active[0];\n\t\t\t\tconst p4active = p4?.active[0];\n\t\t\t\tconst toID = battle.toID;\n\t\t\t\tconst player = (input: string) => {\n\t\t\t\t\tinput = toID(input);\n\t\t\t\t\tif (/^p[1-9]$/.test(input)) return battle.sides[parseInt(input.slice(1)) - 1];\n\t\t\t\t\tif (/^[1-9]$/.test(input)) return battle.sides[parseInt(input) - 1];\n\t\t\t\t\tfor (const side of battle.sides) {\n\t\t\t\t\t\tif (toID(side.name) === input) return side;\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst pokemon = (side: string | Side, input: string) => {\n\t\t\t\t\tif (typeof side === 'string') side = player(side)!;\n\n\t\t\t\t\tinput = toID(input);\n\t\t\t\t\tif (/^[1-9]$/.test(input)) return side.pokemon[parseInt(input) - 1];\n\t\t\t\t\treturn side.pokemon.find(p => p.baseSpecies.id === input || p.species.id === input);\n\t\t\t\t};\n\t\t\t\tlet result = eval(message);\n\t\t\t\t/* eslint-enable no-eval, @typescript-eslint/no-unused-vars */\n\n\t\t\t\tif (result?.then) {\n\t\t\t\t\tresult.then((unwrappedResult: any) => {\n\t\t\t\t\t\tunwrappedResult = Utils.visualize(unwrappedResult);\n\t\t\t\t\t\tbattle.add('', 'Promise -> ' + unwrappedResult);\n\t\t\t\t\t\tbattle.sendUpdates();\n\t\t\t\t\t}, (error: Error) => {\n\t\t\t\t\t\tbattle.add('', '<<< error: ' + error.message);\n\t\t\t\t\t\tbattle.sendUpdates();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tresult = Utils.visualize(result);\n\t\t\t\t\tresult = result.replace(/\\n/g, '\\n||');\n\t\t\t\t\tbattle.add('', '<<< ' + result);\n\t\t\t\t}\n\t\t\t} catch (e: any) {\n\t\t\t\tbattle.add('', '<<< error: ' + e.message);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'requestlog':\n\t\t\tthis.push(`requesteddata\\n${this.battle!.inputLog.join('\\n')}`);\n\t\t\tbreak;\n\t\tcase 'requestexport':\n\t\t\tthis.push(`requesteddata\\n${this.battle!.prngSeed}\\n${this.battle!.inputLog.join('\\n')}`);\n\t\t\tbreak;\n\t\tcase 'requestteam':\n\t\t\tmessage = message.trim();\n\t\t\tconst slotNum = parseInt(message.slice(1)) - 1;\n\t\t\tif (isNaN(slotNum) || slotNum < 0) {\n\t\t\t\tthrow new Error(`Team requested for slot ${message}, but that slot does not exist.`);\n\t\t\t}\n\t\t\tconst side = this.battle!.sides[slotNum];\n\t\t\tconst team = Teams.pack(side.team);\n\t\t\tthis.push(`requesteddata\\n${team}`);\n\t\t\tbreak;\n\t\tcase 'show-openteamsheets':\n\t\t\tthis.battle!.showOpenTeamSheets();\n\t\t\tbreak;\n\t\tcase 'version':\n\t\tcase 'version-origin':\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unrecognized command \">${type} ${message}\"`);\n\t\t}\n\t}\n\n\t_writeEnd() {\n\t\t// if battle already ended, we don't need to pushEnd.\n\t\tif (!this.atEOF) this.pushEnd();\n\t\tthis._destroy();\n\t}\n\n\t_destroy() {\n\t\tif (this.battle) this.battle.destroy();\n\t}\n}\n\n/**\n * Splits a BattleStream into omniscient, spectator, p1, p2, p3 and p4\n * streams, for ease of consumption.\n */\nexport function getPlayerStreams(stream: BattleStream) {\n\tconst streams = {\n\t\tomniscient: new Streams.ObjectReadWriteStream({\n\t\t\twrite(data: string) {\n\t\t\t\tvoid stream.write(data);\n\t\t\t},\n\t\t\twriteEnd() {\n\t\t\t\treturn stream.writeEnd();\n\t\t\t},\n\t\t}),\n\t\tspectator: new Streams.ObjectReadStream<string>({\n\t\t\tread() {},\n\t\t}),\n\t\tp1: new Streams.ObjectReadWriteStream({\n\t\t\twrite(data: string) {\n\t\t\t\tvoid stream.write(data.replace(/(^|\\n)/g, `$1>p1 `));\n\t\t\t},\n\t\t}),\n\t\tp2: new Streams.ObjectReadWriteStream({\n\t\t\twrite(data: string) {\n\t\t\t\tvoid stream.write(data.replace(/(^|\\n)/g, `$1>p2 `));\n\t\t\t},\n\t\t}),\n\t\tp3: new Streams.ObjectReadWriteStream({\n\t\t\twrite(data: string) {\n\t\t\t\tvoid stream.write(data.replace(/(^|\\n)/g, `$1>p3 `));\n\t\t\t},\n\t\t}),\n\t\tp4: new Streams.ObjectReadWriteStream({\n\t\t\twrite(data: string) {\n\t\t\t\tvoid stream.write(data.replace(/(^|\\n)/g, `$1>p4 `));\n\t\t\t},\n\t\t}),\n\t};\n\t(async () => {\n\t\tfor await (const chunk of stream) {\n\t\t\tconst [type, data] = splitFirst(chunk, `\\n`);\n\t\t\tswitch (type) {\n\t\t\tcase 'update':\n\t\t\t\tconst channelMessages = extractChannelMessages(data, [-1, 0, 1, 2, 3, 4]);\n\t\t\t\tstreams.omniscient.push(channelMessages[-1].join('\\n'));\n\t\t\t\tstreams.spectator.push(channelMessages[0].join('\\n'));\n\t\t\t\tstreams.p1.push(channelMessages[1].join('\\n'));\n\t\t\t\tstreams.p2.push(channelMessages[2].join('\\n'));\n\t\t\t\tstreams.p3.push(channelMessages[3].join('\\n'));\n\t\t\t\tstreams.p4.push(channelMessages[4].join('\\n'));\n\t\t\t\tbreak;\n\t\t\tcase 'sideupdate':\n\t\t\t\tconst [side, sideData] = splitFirst(data, `\\n`);\n\t\t\t\tstreams[side as SideID].push(sideData);\n\t\t\t\tbreak;\n\t\t\tcase 'end':\n\t\t\t\t// ignore\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor (const s of Object.values(streams)) {\n\t\t\ts.pushEnd();\n\t\t}\n\t})().catch(err => {\n\t\tfor (const s of Object.values(streams)) {\n\t\t\ts.pushError(err, true);\n\t\t}\n\t});\n\treturn streams;\n}\n\nexport abstract class BattlePlayer {\n\treadonly stream: Streams.ObjectReadWriteStream<string>;\n\treadonly log: string[];\n\treadonly debug: boolean;\n\n\tconstructor(playerStream: Streams.ObjectReadWriteStream<string>, debug = false) {\n\t\tthis.stream = playerStream;\n\t\tthis.log = [];\n\t\tthis.debug = debug;\n\t}\n\n\tasync start() {\n\t\tfor await (const chunk of this.stream) {\n\t\t\tthis.receive(chunk);\n\t\t}\n\t}\n\n\treceive(chunk: string) {\n\t\tfor (const line of chunk.split('\\n')) {\n\t\t\tthis.receiveLine(line);\n\t\t}\n\t}\n\n\treceiveLine(line: string) {\n\t\tif (this.debug) console.log(line);\n\t\tif (!line.startsWith('|')) return;\n\t\tconst [cmd, rest] = splitFirst(line.slice(1), '|');\n\t\tif (cmd === 'request') return this.receiveRequest(JSON.parse(rest));\n\t\tif (cmd === 'error') return this.receiveError(new Error(rest));\n\t\tthis.log.push(line);\n\t}\n\n\tabstract receiveRequest(request: ChoiceRequest): void;\n\n\treceiveError(error: Error) {\n\t\tthrow error;\n\t}\n\n\tchoose(choice: string) {\n\t\tvoid this.stream.write(choice);\n\t}\n}\n\nexport class BattleTextStream extends Streams.ReadWriteStream {\n\treadonly battleStream: BattleStream;\n\tcurrentMessage: string;\n\n\tconstructor(options: { debug?: boolean }) {\n\t\tsuper();\n\t\tthis.battleStream = new BattleStream(options);\n\t\tthis.currentMessage = '';\n\t\tvoid this._listen();\n\t}\n\n\tasync _listen() {\n\t\tfor await (let message of this.battleStream) {\n\t\t\tif (!message.endsWith('\\n')) message += '\\n';\n\t\t\tthis.push(message + '\\n');\n\t\t}\n\t\tthis.pushEnd();\n\t}\n\n\t_write(message: string | Buffer) {\n\t\tthis.currentMessage += `${message}`;\n\t\tconst index = this.currentMessage.lastIndexOf('\\n');\n\t\tif (index >= 0) {\n\t\t\tvoid this.battleStream.write(this.currentMessage.slice(0, index));\n\t\t\tthis.currentMessage = this.currentMessage.slice(index + 1);\n\t\t}\n\t}\n\n\t_writeEnd() {\n\t\treturn this.battleStream.writeEnd();\n\t}\n}\n"], | |
"mappings": "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", | |
"names": ["options", "type", "message", "side"] | |
} | |