koishipro-core.js 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -0
- package/dist/index.cjs +133 -1
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +126 -1
- package/dist/index.mjs.map +3 -3
- package/dist/src/advancors/combined-advancor.d.ts +2 -0
- package/dist/src/advancors/index.d.ts +9 -0
- package/dist/src/advancors/limit-advancor.d.ts +4 -0
- package/dist/src/advancors/map-advancor.d.ts +8 -0
- package/dist/src/advancors/no-effect-advancor.d.ts +1 -0
- package/dist/src/advancors/player-view-advancor.d.ts +3 -0
- package/dist/src/advancors/select-card-advancor.d.ts +7 -0
- package/dist/src/advancors/slient-advancor.d.ts +2 -0
- package/dist/src/advancors/static-advancor.d.ts +2 -0
- package/dist/src/advancors/summon-place-advancor.d.ts +5 -0
- package/dist/src/advancors/types.d.ts +2 -0
- package/dist/src/ocgcore-duel.d.ts +2 -1
- package/dist/src/play-yrp.d.ts +1 -2
- package/dist/src/types/card-location.d.ts +5 -0
- package/dist/src/types/index.d.ts +1 -0
- package/index.ts +1 -0
- package/package.json +3 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../index.ts", "../src/vendor/index.ts", "../src/constants/ocgcore.ts", "../src/utility/binary.ts", "../src/utility/utf8.ts", "../src/adapters/ocgcore-parsers.ts", "../src/adapters/start-duel.ts", "../src/ocgcore-duel.ts", "../src/ocgcore-wrapper.ts", "../src/types/ocgcore-enums.ts", "../src/ocgcore-wrapper-utils.ts", "../src/utility/load-node-module.ts", "../src/utility/node-fs.ts", "../src/utility/node-path.ts", "../src/load-ocgcore-factory.cjs.ts", "../src/create-ocgcore-wrapper.ts", "../src/script-reader/script-readers.ts", "../src/utility/search-zips.ts", "../src/script-reader/dir-script-reader-ex.ts", "../src/card-reader/sqljs-card-reader.ts", "../src/card-reader/dir-card-reader.ts", "../src/play-yrp.ts", "../src/test-card.ts"],
|
|
4
|
-
"sourcesContent": ["import { Buffer } from 'buffer';\n\nif (\n typeof globalThis !== 'undefined' &&\n !(globalThis as { Buffer?: unknown }).Buffer\n) {\n (globalThis as { Buffer?: unknown }).Buffer = Buffer;\n}\n\nexport * from './src/ocgcore-wrapper';\nexport * from './src/ocgcore-duel';\nexport * from './src/create-ocgcore-wrapper';\nexport * from './src/types';\nexport * from './src/adapters';\nexport * from './src/constants';\n// export * from './src/utility';\nexport * as _OcgcoreConstants from './src/vendor';\nexport * from './src/script-reader';\nexport * from './src/card-reader';\nexport * from './src/play-yrp';\nexport * from './src/test-card';\n", "export {\n OcgcoreCommonConstants,\n OcgcoreScriptConstants,\n} from 'ygopro-msg-encode';\n", "import { OcgcoreCommonConstants } from '../vendor';\n\nexport const MESSAGE_BUFFER_SIZE = OcgcoreCommonConstants.SIZE_MESSAGE_BUFFER;\nexport const QUERY_BUFFER_SIZE = 0x4000;\nexport const REGISTRY_BUFFER_SIZE = 0x2000;\n\nexport const LEN_FAIL = 0;\nexport const LEN_EMPTY = 4;\nexport const LEN_HEADER = 8;\n", "export function readU8(buf: Uint8Array, offset: number): number {\n return buf[offset] ?? 0;\n}\n\nexport function readU16(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint16(\n offset,\n true,\n );\n}\n\nexport function readI32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getInt32(\n offset,\n true,\n );\n}\n\nexport function readU32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint32(\n offset,\n true,\n );\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8');\n\nexport function encodeUtf8(value: string): Uint8Array {\n return encoder.encode(value);\n}\n\nexport function decodeUtf8(value: Uint8Array): string {\n return decoder.decode(value);\n}\n", "import { LEN_HEADER } from '../constants';\nimport { readI32, readU16 } from '../utility/binary';\nimport { decodeUtf8 } from '../utility/utf8';\nimport { CardQuery, YGOProMsgReloadField } from 'ygopro-msg-encode';\n\n// Internal interface for registry parsing\ninterface RegistryDumpEntry {\n key: string;\n value: Uint8Array;\n valueText?: string;\n}\n\nexport function parseCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery | null {\n if (length <= LEN_HEADER) {\n return null;\n }\n const payload = raw.subarray(4, length);\n return new CardQuery().fromPayload(payload);\n}\n\nexport function parseFieldCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery[] {\n const cards: CardQuery[] = [];\n let offset = 0;\n while (offset + 4 <= length) {\n const chunkLen = readI32(raw, offset);\n if (chunkLen <= 0) {\n break;\n }\n const end = Math.min(length, offset + chunkLen);\n if (chunkLen <= LEN_HEADER) {\n const emptyCard = new CardQuery();\n emptyCard.flags = 0;\n emptyCard.empty = true;\n cards.push(emptyCard);\n } else {\n const payload = raw.subarray(offset + 4, end);\n cards.push(new CardQuery().fromPayload(payload));\n }\n offset += chunkLen;\n }\n return cards;\n}\n\nexport function parseFieldInfo(raw: Uint8Array): YGOProMsgReloadField {\n // query_field_info() in ocgcore returns data that starts with MSG_RELOAD_FIELD (162) byte\n // Format: [MSG_RELOAD_FIELD][duel_rule][player0_data][player1_data][chains]\n // YGOProMsgReloadField.fromPayload() expects the full message including the identifier\n return new YGOProMsgReloadField().fromPayload(raw);\n}\n\nexport function parseRegistryKeys(raw: Uint8Array): string[] {\n const keys: string[] = [];\n let offset = 0;\n while (offset + 2 <= raw.length) {\n const len = readU16(raw, offset);\n offset += 2;\n if (offset + len > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + len);\n offset += len;\n keys.push(decodeUtf8(keyBytes));\n }\n return keys;\n}\n\nexport function parseRegistryDump(raw: Uint8Array): RegistryDumpEntry[] {\n const entries: RegistryDumpEntry[] = [];\n let offset = 0;\n while (offset + 4 <= raw.length) {\n const keyLen = readU16(raw, offset);\n const valLen = readU16(raw, offset + 2);\n offset += 4;\n if (offset + keyLen + valLen > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + keyLen);\n offset += keyLen;\n const valueBytes = raw.subarray(offset, offset + valLen);\n offset += valLen;\n const entry: RegistryDumpEntry = {\n key: decodeUtf8(keyBytes),\n value: valueBytes,\n };\n entry.valueText = decodeUtf8(valueBytes);\n entries.push(entry);\n }\n return entries;\n}\n", "import { OcgcoreStartDuelOptions } from '../types/ocgcore-params';\n\nexport function normalizeStartDuelOptions(\n options: number | OcgcoreStartDuelOptions,\n): number {\n if (typeof options === 'number') {\n return options;\n }\n const duelRule = options.rule ?? 0;\n let duelOptions = options.options ?? 0;\n if (options.flags?.length) {\n for (const flag of options.flags) {\n duelOptions = (duelOptions | flag) >>> 0;\n }\n }\n return (((duelRule & 0xffff) << 16) | (duelOptions & 0xffff)) >>> 0;\n}\n", "import {\n OcgcoreCardQueryResult,\n OcgcoreFieldCardQueryResult,\n OcgcoreFieldInfoResult,\n OcgcoreMessageResult,\n OcgcoreProcessResult,\n OcgcoreRegistryDumpResult,\n OcgcoreRegistryKeysResult,\n OcgcoreRegistryValueResult,\n} from './types/ocgcore-results';\nimport {\n OcgcoreNewCardParams,\n OcgcoreNewTagCardParams,\n OcgcoreQueryCardParams,\n OcgcoreQueryFieldCardParams,\n OcgcoreQueryFieldCountParams,\n OcgcoreSetPlayerInfoParams,\n OcgcoreStartDuelOptions,\n} from './types/ocgcore-params';\nimport {\n MESSAGE_BUFFER_SIZE,\n QUERY_BUFFER_SIZE,\n REGISTRY_BUFFER_SIZE,\n LEN_HEADER,\n} from './constants';\nimport {\n parseCardQuery,\n parseFieldCardQuery,\n parseFieldInfo,\n parseRegistryDump,\n parseRegistryKeys,\n} from './adapters/ocgcore-parsers';\nimport { normalizeStartDuelOptions } from './adapters/start-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { decodeUtf8 } from './utility/utf8';\nimport {\n YGOProMessages,\n YGOProMsgBase,\n YGOProMsgRetry,\n} from 'ygopro-msg-encode';\n\nexport class OcgcoreDuel {\n private returnPtr = 0;\n private returnSize = 512;\n\n constructor(\n public ocgcoreWrapper: OcgcoreWrapper,\n public duelPtr: number,\n ) {}\n\n startDuel(options: number | OcgcoreStartDuelOptions): void {\n if (!this.returnPtr) {\n this.returnPtr = this.ocgcoreWrapper.malloc(this.returnSize);\n }\n const optionValue = normalizeStartDuelOptions(options);\n this.ocgcoreWrapper.ocgcoreModule._start_duel(this.duelPtr, optionValue);\n }\n\n ended = false;\n\n endDuel(): void {\n if (this.ended) return;\n this.ended = true;\n this.ocgcoreWrapper.ocgcoreModule._end_duel(this.duelPtr);\n if (this.returnPtr) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = 0;\n }\n this.ocgcoreWrapper.forgetDuel(this.duelPtr);\n }\n\n setPlayerInfo(info: OcgcoreSetPlayerInfoParams): void {\n this.ocgcoreWrapper.ocgcoreModule._set_player_info(\n this.duelPtr,\n info.player,\n info.lp,\n info.startHand,\n info.drawCount,\n );\n }\n\n _getLogMessage(bufPtr: number): number {\n return this.ocgcoreWrapper.ocgcoreModule._get_log_message(\n this.duelPtr,\n bufPtr,\n );\n }\n\n private getMessage(length: number): OcgcoreMessageResult {\n const ptr = this.ocgcoreWrapper.malloc(MESSAGE_BUFFER_SIZE);\n this.ocgcoreWrapper.ocgcoreModule._get_message(this.duelPtr, ptr);\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n return { length, raw };\n }\n\n process(): OcgcoreProcessResult {\n const result = this.ocgcoreWrapper.ocgcoreModule._process(this.duelPtr);\n const length = (result & 0x0fffffff) >>> 0;\n const status = ((result >>> 28) & 0x0f) >>> 0;\n const messageData = this.getMessage(length);\n\n // Parse message using YGOProMessages (only one message per process call)\n let parsedMessage: YGOProMsgBase | undefined;\n if (messageData.raw.length > 0) {\n try {\n parsedMessage = YGOProMessages.getInstanceFromPayload(messageData.raw);\n } catch (e) {\n // If parsing fails, parsedMessage remains undefined\n }\n }\n\n return {\n length: messageData.length,\n raw: messageData.raw,\n status,\n message: parsedMessage,\n };\n }\n\n *advance(advancor?: () => Uint8Array | void | null | undefined) {\n while (true) {\n const res = this.process();\n yield res;\n if (res.status === 2 || res.message instanceof YGOProMsgRetry) {\n break;\n }\n\n if (res.status === 1 && res.raw.length > 0) {\n const response = advancor?.();\n if (!response) {\n break;\n }\n this.setResponse(response);\n }\n }\n }\n\n newCard(card: OcgcoreNewCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.player,\n card.location,\n card.sequence,\n card.position,\n );\n }\n\n newTagCard(card: OcgcoreNewTagCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_tag_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.location,\n );\n }\n\n queryCard(query: OcgcoreQueryCardParams): OcgcoreCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_card(\n this.duelPtr,\n query.player,\n query.location,\n query.sequence,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const card = length <= LEN_HEADER ? null : parseCardQuery(raw, length);\n return { length, raw, card };\n }\n\n queryFieldCount(query: OcgcoreQueryFieldCountParams): number {\n return this.ocgcoreWrapper.ocgcoreModule._query_field_count(\n this.duelPtr,\n query.player,\n query.location,\n );\n }\n\n queryFieldCard(\n query: OcgcoreQueryFieldCardParams,\n ): OcgcoreFieldCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_card(\n this.duelPtr,\n query.player,\n query.location,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const cards = parseFieldCardQuery(raw, length);\n return { length, raw, cards };\n }\n\n queryFieldInfo(): OcgcoreFieldInfoResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_info(\n this.duelPtr,\n ptr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const field = parseFieldInfo(raw);\n return { length, raw, field };\n }\n\n setResponseInt(value: number): void {\n this.ocgcoreWrapper.ocgcoreModule._set_responsei(this.duelPtr, value);\n }\n\n setResponse(response: Uint8Array | number): void {\n if (typeof response === 'number') {\n this.setResponseInt(response);\n return;\n }\n if (response.length > this.returnSize) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = this.ocgcoreWrapper.malloc(response.length);\n this.returnSize = response.length;\n }\n this.ocgcoreWrapper.setHeap(this.returnPtr, response);\n this.ocgcoreWrapper.ocgcoreModule._set_responseb(\n this.duelPtr,\n this.returnPtr,\n );\n }\n\n preloadScript(scriptPath: string): void {\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._preload_script(this.duelPtr, ptr),\n scriptPath,\n );\n }\n\n getRegistryValue(key: string): OcgcoreRegistryValueResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.useTmpData(\n (keyPtr) =>\n this.ocgcoreWrapper.ocgcoreModule._get_registry_value(\n this.duelPtr,\n keyPtr,\n outPtr,\n ),\n key,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const value = raw;\n const text = length >= 0 ? decodeUtf8(raw) : undefined;\n return { length, raw, value, text };\n }\n\n setRegistryValue(key: string, value: string): void {\n this.ocgcoreWrapper.useTmpData(\n (keyPtr, valuePtr) =>\n this.ocgcoreWrapper.ocgcoreModule._set_registry_value(\n this.duelPtr,\n keyPtr,\n valuePtr,\n ),\n key,\n value,\n );\n }\n\n getRegistryKeys(): OcgcoreRegistryKeysResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._get_registry_keys(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const keys = length >= 0 ? parseRegistryKeys(raw) : [];\n return { length, raw, keys };\n }\n\n clearRegistry(): void {\n this.ocgcoreWrapper.ocgcoreModule._clear_registry(this.duelPtr);\n }\n\n dumpRegistry(): OcgcoreRegistryDumpResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._dump_registry(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n\n // Parse directly into dict\n const dict: Record<string, string> = {};\n if (length > 0) {\n const entries = parseRegistryDump(raw);\n for (const entry of entries) {\n if (entry.valueText !== undefined) {\n dict[entry.key] = entry.valueText;\n }\n }\n }\n\n return { length, raw, dict };\n }\n\n loadRegistry(input: Uint8Array | Record<string, string>): void {\n if (input instanceof Uint8Array) {\n // Load from binary format\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._load_registry(\n this.duelPtr,\n ptr,\n input.length,\n ),\n input,\n );\n } else {\n // Load from dict format\n for (const [key, value] of Object.entries(input)) {\n this.setRegistryValue(key, value);\n }\n }\n }\n}\n", "import { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { CardData } from 'ygopro-msg-encode';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\nimport { CardReader, MessageHandler, ScriptReader } from './types/callback';\n\nexport class OcgcoreWrapper {\n private scriptBufferPtr = 0;\n private scriptBufferSize = 0;\n private logBufferPtr = 0;\n private logBufferSize = 0;\n private tmpStringBufferPtr = 0;\n private tmpStringBufferSize = 0;\n\n private scriptReaderFunc = 0;\n private cardReaderFunc = 0;\n private messageHandlerFunc = 0;\n\n public scriptReaders: ScriptReader[] = [];\n public cardReaders: CardReader[] = [];\n public messageHandlers: MessageHandler[] = [];\n\n private heapU8: Uint8Array;\n private heapView: DataView;\n private encoder = new TextEncoder();\n private decoder = new TextDecoder('utf-8');\n private duels = new Map<number, OcgcoreDuel>();\n\n constructor(\n public ocgcoreModule: OcgcoreModule,\n options?: { scriptBufferSize?: number; logBufferSize?: number },\n ) {\n this.heapU8 = ocgcoreModule.HEAPU8 as Uint8Array;\n this.heapView = new DataView(this.heapU8.buffer);\n this.scriptBufferSize = options?.scriptBufferSize ?? 0x100000;\n this.logBufferSize = options?.logBufferSize ?? 1024;\n\n this.scriptReaderFunc = this.createFunction((scriptPtr, lenPtr) => {\n const scriptPath = this.getUTF8String(scriptPtr);\n const content = this.readScript(scriptPath);\n if (content == null) {\n return 0;\n }\n\n if (!this.scriptBufferPtr) {\n this.scriptBufferPtr = this.ocgcoreModule._malloc(\n this.scriptBufferSize,\n );\n }\n\n const bytes = content;\n if (bytes.length > this.scriptBufferSize) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = this.ocgcoreModule._malloc(bytes.length);\n this.scriptBufferSize = bytes.length;\n }\n\n this.heapU8.set(bytes, this.scriptBufferPtr);\n this.heapView.setInt32(lenPtr, bytes.length, true);\n return this.scriptBufferPtr;\n }, 'iii');\n this.ocgcoreModule._set_script_reader(this.scriptReaderFunc);\n\n this.cardReaderFunc = this.createFunction((cardId, cardDataPtr) => {\n const data = this.readCard(cardId);\n if (!data) {\n return 0;\n }\n\n const buf = new CardData().fromPartial(data).toPayload();\n this.heapU8.set(buf, cardDataPtr);\n return 0;\n }, 'iii');\n this.ocgcoreModule._set_card_reader(this.cardReaderFunc);\n\n this.messageHandlerFunc = this.createFunction((duelPtr, messageType) => {\n if (!this.logBufferPtr) {\n this.logBufferPtr = this.ocgcoreModule._malloc(this.logBufferSize);\n }\n this.ocgcoreModule._get_log_message(duelPtr, this.logBufferPtr);\n const message = this.getUTF8String(this.logBufferPtr);\n const type =\n messageType === 2\n ? OcgcoreMessageType.DebugMessage\n : OcgcoreMessageType.ScriptError;\n const duel = this.getOrCreateDuel(duelPtr);\n this.handleMessage(duel, message, type);\n }, 'iii');\n this.ocgcoreModule._set_message_handler(this.messageHandlerFunc);\n }\n\n readScript(scriptPath: string): Uint8Array | null {\n let content: string | Uint8Array | null | undefined;\n for (const reader of this.scriptReaders) {\n try {\n content = reader(scriptPath);\n } catch {\n content = null;\n }\n if (content != null) {\n break;\n }\n }\n return typeof content === 'string'\n ? this.encoder.encode(content)\n : (content ?? null);\n }\n\n readCard(cardId: number): Partial<CardData> | null {\n let data: Partial<CardData> | null | undefined;\n for (const reader of this.cardReaders) {\n try {\n data = reader(cardId);\n } catch {\n data = null;\n }\n if (data) {\n break;\n }\n }\n return data ?? null;\n }\n\n handleMessage(\n duel: OcgcoreDuel,\n message: string,\n type: OcgcoreMessageType,\n ): void {\n for (const handler of this.messageHandlers) {\n try {\n handler(duel, message, type);\n } catch {\n // ignore handler errors\n }\n }\n }\n\n getUTF8String(ptr: number): string {\n let length = 0;\n while (this.heapU8[ptr + length] !== 0) {\n length++;\n }\n return this.decoder.decode(this.heapU8.subarray(ptr, ptr + length));\n }\n\n setHeap(ptr: number, data: Uint8Array): void {\n this.heapU8.set(data, ptr);\n }\n\n copyHeap(ptr: number, length: number): Uint8Array {\n return this.heapU8.slice(ptr, ptr + length);\n }\n\n useTmpData<R>(\n cb: (...args: number[]) => R,\n ...args: Array<string | Uint8Array>\n ): R {\n const encoded = args.map((item) =>\n typeof item === 'string' ? this.encoder.encode(item) : item,\n );\n const totalLength = encoded.reduce(\n (acc, bytes) => acc + bytes.length + 1,\n 0,\n );\n if (totalLength > this.tmpStringBufferSize) {\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n }\n this.tmpStringBufferPtr = this.ocgcoreModule._malloc(totalLength);\n this.tmpStringBufferSize = totalLength;\n }\n\n let offset = 0;\n const ptrs = encoded.map((bytes) => {\n const ptr = this.tmpStringBufferPtr + offset;\n this.heapU8.set(bytes, ptr);\n this.heapU8[ptr + bytes.length] = 0;\n offset += bytes.length + 1;\n return ptr;\n });\n\n return cb(...ptrs);\n }\n\n private createFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n addFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n removeFunction(index: number): void {\n this.ocgcoreModule.removeFunction(index);\n }\n\n createDuel(seed: number): OcgcoreDuel {\n const duelPtr = this.ocgcoreModule._create_duel(seed);\n return this.getOrCreateDuel(duelPtr);\n }\n\n createDuelV2(seedSequence: number[]): OcgcoreDuel {\n const count = seedSequence.length;\n const byteLength = count * 4;\n const ptr = this.ocgcoreModule._malloc(byteLength);\n const view = new Uint32Array(this.heapU8.buffer, ptr, count);\n for (let i = 0; i < count; i++) {\n view[i] = seedSequence[i] >>> 0;\n }\n const duelPtr = this.ocgcoreModule._create_duel_v2(ptr);\n this.ocgcoreModule._free(ptr);\n return this.getOrCreateDuel(duelPtr);\n }\n\n _defaultScriptReader(namePtr: number, dataPtr: number): number {\n return this.ocgcoreModule._default_script_reader(namePtr, dataPtr);\n }\n\n malloc(size: number): number {\n return this.ocgcoreModule._malloc(size);\n }\n\n free(ptr: number): void {\n this.ocgcoreModule._free(ptr);\n }\n\n _stdioExit(): void {\n this.ocgcoreModule.___stdio_exit();\n }\n\n setScriptReader(reader: ScriptReader, reset = false): this {\n if (reset) {\n this.scriptReaders = [];\n }\n this.scriptReaders.push(reader);\n return this;\n }\n\n setCardReader(reader: CardReader, reset = false): this {\n if (reset) {\n this.cardReaders = [];\n }\n this.cardReaders.push(reader);\n return this;\n }\n\n setMessageHandler(handler: MessageHandler, reset = false): this {\n if (reset) {\n this.messageHandlers = [];\n }\n this.messageHandlers.push(handler);\n return this;\n }\n\n getOrCreateDuel(duelPtr: number): OcgcoreDuel {\n const existing = this.duels.get(duelPtr);\n if (existing) {\n return existing;\n }\n const duel = new OcgcoreDuel(this, duelPtr);\n this.duels.set(duelPtr, duel);\n return duel;\n }\n\n forgetDuel(duelPtr: number): void {\n this.duels.delete(duelPtr);\n }\n\n finalize(): void {\n if (this.scriptReaderFunc) {\n this.ocgcoreModule.removeFunction(this.scriptReaderFunc);\n this.scriptReaderFunc = 0;\n }\n if (this.cardReaderFunc) {\n this.ocgcoreModule.removeFunction(this.cardReaderFunc);\n this.cardReaderFunc = 0;\n }\n if (this.messageHandlerFunc) {\n this.ocgcoreModule.removeFunction(this.messageHandlerFunc);\n this.messageHandlerFunc = 0;\n }\n\n if (this.scriptBufferPtr) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = 0;\n this.scriptBufferSize = 0;\n }\n if (this.logBufferPtr) {\n this.ocgcoreModule._free(this.logBufferPtr);\n this.logBufferPtr = 0;\n this.logBufferSize = 0;\n }\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n this.tmpStringBufferPtr = 0;\n this.tmpStringBufferSize = 0;\n }\n }\n}\n", "export enum OcgcoreMessageType {\n ScriptError = 'ScriptError',\n DebugMessage = 'DebugMessage',\n}\n\nexport enum OcgcoreDuelRule {\n Rule1 = 1,\n Rule2 = 2,\n MasterRule3 = 3,\n NewMasterRule = 4,\n MasterRule2020 = 5,\n}\n\nexport enum OcgcoreDuelOptionFlag {\n TestMode = 0x01,\n AttackFirstTurn = 0x02,\n ObsoleteRuling = 0x08,\n PseudoShuffle = 0x10,\n TagMode = 0x20,\n SimpleAI = 0x40,\n ReturnDeckTop = 0x80,\n RevealDeckSeq = 0x100,\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\n\ntype OcgcoreFactoryModule = { default?: OcgcoreFactory } | OcgcoreFactory;\n\nexport function normalizeOcgcoreFactory(mod: unknown): OcgcoreFactory {\n const typed = mod as OcgcoreFactoryModule;\n if (typeof typed === 'function') {\n return typed as OcgcoreFactory;\n }\n if (typed && typeof (typed as { default?: unknown }).default === 'function') {\n return (typed as { default: OcgcoreFactory }).default;\n }\n throw new Error('Invalid ocgcore factory module');\n}\n", "export function loadNodeModule<T>(id: string, altId?: string): T | null {\n const req =\n typeof module.require !== 'undefined' ? module.require : undefined;\n if (!req) {\n return null;\n }\n try {\n return req(id) as T;\n } catch {\n if (!altId) return null;\n try {\n return req(altId) as T;\n } catch {\n return null;\n }\n }\n}\n", "type NodeStats = {\n isFile: () => boolean;\n};\n\ntype NodeFsPromises = {\n readFile: (path: string) => Promise<Uint8Array>;\n readdir: (path: string) => Promise<string[]>;\n stat: (path: string) => Promise<NodeStats>;\n access: (path: string) => Promise<void>;\n};\n\nexport type NodeFs = {\n existsSync: (path: string) => boolean;\n readFileSync: (path: string) => Uint8Array;\n promises: NodeFsPromises;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodeFs(noThrow = false): NodeFs | null {\n const mod = loadNodeModule<NodeFs>('node:fs', 'fs');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js fs module is not available.');\n}\n", "export type NodePath = {\n join: (...parts: string[]) => string;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodePath(noThrow = false): NodePath | null {\n const mod = loadNodeModule<NodePath>('node:path', 'path');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js path module is not available.');\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\nimport { normalizeOcgcoreFactory } from './ocgcore-wrapper-utils';\nimport { getNodeFs } from './utility/node-fs';\nimport { getNodePath } from './utility/node-path';\n\nexport async function loadOcgcoreFactory(): Promise<OcgcoreFactory> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require('./vendor/wasm_cjs/libocgcore.cjs') as unknown;\n const baseFactory = normalizeOcgcoreFactory(mod);\n\n const fs = getNodeFs(true);\n if (!fs) {\n return baseFactory;\n }\n\n const pathMod = getNodePath(true);\n if (!pathMod) {\n return baseFactory;\n }\n let defaultWasmBinary: Uint8Array | null = null;\n const wasmPath = pathMod.join(\n __dirname,\n 'vendor',\n 'wasm_cjs',\n 'libocgcore.wasm',\n );\n if (fs.existsSync(wasmPath)) {\n defaultWasmBinary = fs.readFileSync(wasmPath);\n }\n\n if (!defaultWasmBinary) {\n return baseFactory;\n }\n\n return async (overrides) => {\n if (!overrides?.wasmBinary && !overrides?.locateFile) {\n return baseFactory({\n ...overrides,\n wasmBinary: defaultWasmBinary.buffer as ArrayBuffer,\n });\n }\n return baseFactory(overrides);\n };\n}\n", "import type { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { loadOcgcoreFactory } from './load-ocgcore-factory';\n\nexport interface CreateOcgcoreWrapperOptions {\n moduleOverrides?: Partial<OcgcoreModule>;\n wasmBinary?: Uint8Array;\n locateFile?: (path: string, prefix?: string) => string;\n}\n\nexport async function createOcgcoreWrapper(\n options: CreateOcgcoreWrapperOptions = {},\n): Promise<OcgcoreWrapper> {\n const factory = await loadOcgcoreFactory();\n const overrides: Partial<OcgcoreModule> = {\n ...options.moduleOverrides,\n };\n if (options.wasmBinary) {\n overrides.wasmBinary =\n options.wasmBinary as unknown as OcgcoreModule['wasmBinary'];\n }\n if (options.locateFile) {\n overrides.locateFile =\n options.locateFile as unknown as OcgcoreModule['locateFile'];\n }\n const moduleInstance = await factory(overrides);\n return new OcgcoreWrapper(moduleInstance);\n}\n", "import JSZip from 'jszip';\n\nimport { ScriptReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\n\nconst SCRIPT_PREFIX = './script/';\n\nfunction normalizePath(input: string): string {\n let path = input.replace(/\\\\/g, '/');\n if (path.startsWith(SCRIPT_PREFIX)) {\n path = path.slice(SCRIPT_PREFIX.length);\n }\n return path;\n}\n\nfunction buildCandidates(filename: string): string[] {\n const entries = [\n filename,\n `specials/${filename}`,\n `expansions/script/${filename}`,\n `script/${filename}`,\n ];\n const candidates: string[] = [];\n for (const entry of entries) {\n candidates.push(entry);\n if (!entry.startsWith('./')) {\n const dotEntry = entry.startsWith('/')\n ? `./${entry.slice(1)}`\n : `./${entry}`;\n candidates.push(dotEntry);\n }\n }\n return candidates;\n}\n\nfunction joinPath(baseDir: string, relativePath: string): string {\n const pathMod = getNodePath();\n if (pathMod) {\n return pathMod.join(baseDir, relativePath);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = relativePath.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nexport function MapScriptReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const candidate of candidates) {\n for (const map of maps) {\n if (map.has(candidate)) {\n return map.get(candidate) ?? null;\n }\n }\n }\n return null;\n };\n}\n\nexport function DirScriptReader(...baseDirs: string[]): ScriptReader {\n const fs = getNodeFs();\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const baseDir of baseDirs) {\n for (const candidate of candidates) {\n const normalized = candidate.startsWith('/')\n ? candidate.slice(1)\n : candidate;\n const fullPath = joinPath(baseDir, normalized);\n if (fs.existsSync(fullPath)) {\n return fs.readFileSync(fullPath);\n }\n }\n }\n return null;\n };\n}\n\nfunction normalizeZipEntryName(name: string): string[] {\n const normalized = name.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n const names = new Set<string>();\n names.add(normalized);\n if (normalized.startsWith('script/')) {\n names.add(normalized.slice('script/'.length));\n }\n return Array.from(names);\n}\n\nexport async function ZipScriptReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n const maps = await Promise.all(\n inputs.map(async (data) => {\n const zip = await JSZip.loadAsync(data);\n const map = new Map<string, string | Uint8Array>();\n const entries = Object.values(zip.files);\n await Promise.all(\n entries.map(async (entry) => {\n if (entry.dir) {\n return;\n }\n if (!entry.name.toLowerCase().endsWith('.lua')) {\n return;\n }\n const content = await entry.async('uint8array');\n for (const name of normalizeZipEntryName(entry.name)) {\n map.set(name, content);\n }\n }),\n );\n return map;\n }),\n );\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use MapScriptReader instead. */\nexport function MapReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use DirScriptReader instead. */\nexport function DirReader(...baseDirs: string[]): ScriptReader {\n return DirScriptReader(...baseDirs);\n}\n\n/** @deprecated Use ZipScriptReader instead. */\nexport async function ZipReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n return ZipScriptReader(...inputs);\n}\n", "import { getNodeFs } from './node-fs';\nimport { getNodePath } from './node-path';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function searchZips(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const results: string[] = [];\n const rootEntries = await safeReadDir(fs, baseDir);\n for (const entry of rootEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, baseDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n const expansionEntries = await safeReadDir(fs, expansionsDir);\n for (const entry of expansionEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, expansionsDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n return results;\n}\n", "import type { ScriptReader } from '../types/callback';\nimport { DirScriptReader, ZipScriptReader } from './script-readers';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nexport async function DirScriptReaderEx(\n ...baseDirs: string[]\n): Promise<ScriptReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirScriptReaderEx');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirScriptReaderEx');\n const fsReader = DirScriptReader(...baseDirs);\n\n const zipInputs: Uint8Array[] = [];\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n zipInputs.push(await fs.promises.readFile(zipPath));\n } catch {\n continue;\n }\n }\n }\n\n if (zipInputs.length === 0) {\n return fsReader;\n }\n\n const zipReader = await ZipScriptReader(...zipInputs);\n return (path) => fsReader(path) ?? zipReader(path);\n}\n", "import type { Database } from 'sql.js';\nimport { OcgcoreCommonConstants } from '../vendor';\nimport type { CardData } from 'ygopro-msg-encode';\nimport type { CardReader } from '../types/callback';\n\ntype SqljsRow = {\n id: number;\n alias: number;\n setcode: number | bigint;\n type: number;\n atk: number;\n def: number;\n level: number;\n race: number;\n attribute: number;\n};\n\nfunction toNumberArrayFromSetcode(value: number | bigint): number[] {\n let raw = typeof value === 'bigint' ? value : BigInt(value >>> 0);\n const list: number[] = [];\n while (raw !== 0n && list.length < 16) {\n const chunk = raw & 0xffffn;\n if (chunk !== 0n) {\n list.push(Number(chunk));\n }\n raw >>= 16n;\n }\n return list;\n}\n\nfunction mapRowToCardData(row: SqljsRow): Partial<CardData> {\n const type = (row.type ?? 0) >>> 0;\n const attack = row.atk ?? 0;\n let defense = row.def ?? 0;\n let linkMarker = 0;\n if ((type & OcgcoreCommonConstants.TYPE_LINK) >>> 0 !== 0) {\n linkMarker = defense;\n defense = 0;\n }\n const levelRaw = (row.level ?? 0) >>> 0;\n const level = (levelRaw & 0xff) >>> 0;\n const lscale = ((levelRaw >>> 24) & 0xff) >>> 0;\n const rscale = ((levelRaw >>> 16) & 0xff) >>> 0;\n\n return {\n code: row.id,\n alias: row.alias ?? 0,\n setcode: toNumberArrayFromSetcode(row.setcode ?? 0),\n type,\n level,\n attribute: (row.attribute ?? 0) >>> 0,\n race: (row.race ?? 0) >>> 0,\n attack,\n defense,\n lscale,\n rscale,\n linkMarker,\n };\n}\n\nfunction queryOne(db: Database, cardId: number): Partial<CardData> | null {\n if (typeof db.prepare === 'function') {\n const stmt = db.prepare(\n 'SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ?',\n );\n try {\n stmt.bind([cardId]);\n if (!stmt.step()) {\n return null;\n }\n const row = stmt.getAsObject() as unknown as SqljsRow;\n if (!row || row.id == null) {\n return null;\n }\n return mapRowToCardData(row);\n } finally {\n stmt.free();\n }\n }\n\n const res = db.exec(\n `SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ${cardId}`,\n );\n if (\n !res ||\n res.length === 0 ||\n !res[0].values ||\n res[0].values.length === 0\n ) {\n return null;\n }\n const row = res[0].values[0] as unknown[];\n return mapRowToCardData({\n id: row[0] as number,\n alias: row[1] as number,\n setcode: row[2] as number,\n type: row[3] as number,\n atk: row[4] as number,\n def: row[5] as number,\n level: row[6] as number,\n race: row[7] as number,\n attribute: row[8] as number,\n });\n}\n\nexport function SqljsCardReader(...dbs: Database[]): CardReader {\n return (cardId: number) => {\n for (const db of dbs) {\n const data = queryOne(db, cardId);\n if (data) {\n return data;\n }\n }\n return null;\n };\n}\n\n/** @deprecated Use SqljsCardReader instead. */\nexport function createSqljsCardReader(...dbs: Database[]): CardReader {\n return SqljsCardReader(...dbs);\n}\n", "import JSZip from 'jszip';\n\nimport type { CardReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\nimport { SqljsCardReader } from './sqljs-card-reader';\nimport type { SqlJsStatic } from 'sql.js';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nasync function collectFsDbPaths(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const collectCdbFiles = async (dirPath: string): Promise<string[]> => {\n const paths: string[] = [];\n const entries = await safeReadDir(fs, dirPath);\n for (const entry of entries) {\n if (!entry.toLowerCase().endsWith('.cdb')) {\n continue;\n }\n const fullPath = joinPath(pathMod, dirPath, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n paths.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n return paths;\n };\n\n const results: string[] = [];\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n results.push(...(await collectCdbFiles(expansionsDir)));\n\n results.push(...(await collectCdbFiles(baseDir)));\n\n return results;\n}\n\nfunction isRootCdbEntry(entryName: string): boolean {\n const normalized = entryName.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n return !normalized.includes('/') && normalized.toLowerCase().endsWith('.cdb');\n}\n\nexport async function DirCardReader(\n sqljs: SqlJsStatic,\n ...baseDirs: string[]\n): Promise<CardReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirCardReader');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirCardReader');\n\n const dbs: unknown[] = [];\n for (const baseDir of baseDirs) {\n const dbPaths = await collectFsDbPaths(fs, pathMod, baseDir);\n for (const dbPath of dbPaths) {\n try {\n const bytes = await fs.promises.readFile(dbPath);\n dbs.push(new sqljs.Database(bytes));\n } catch {\n continue;\n }\n }\n }\n\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n const bytes = await fs.promises.readFile(zipPath);\n const zip = await JSZip.loadAsync(bytes);\n const entries = Object.values(zip.files);\n for (const entry of entries) {\n if (entry.dir || !isRootCdbEntry(entry.name)) {\n continue;\n }\n try {\n const content = await entry.async('uint8array');\n dbs.push(new sqljs.Database(content));\n } catch {\n continue;\n }\n }\n } catch {\n continue;\n }\n }\n }\n\n return SqljsCardReader(...(dbs as Parameters<typeof SqljsCardReader>));\n}\n", "import { YGOProYrp } from 'ygopro-yrp-encode';\n\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants, OcgcoreScriptConstants } from './vendor';\nimport { OcgcoreProcessResult } from './types';\nimport { YGOProMsgRetry } from 'ygopro-msg-encode';\n\nconst { LOCATION_DECK, LOCATION_EXTRA, POS_FACEDOWN_DEFENSE } =\n OcgcoreScriptConstants;\n\nfunction normalizeYrp(input: YGOProYrp | Uint8Array): YGOProYrp {\n if (input instanceof YGOProYrp) {\n return input;\n }\n return new YGOProYrp().fromYrp(input);\n}\n\nfunction loadDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n player: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_EXTRA,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n}\n\nfunction loadTagDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_DECK,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_EXTRA,\n });\n }\n}\n\nfunction setRegistryValue(duel: OcgcoreDuel, key: string, value: string): void {\n duel.setRegistryValue(key, value);\n}\n\nexport function createDuelFromYrp(\n wrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const yrp = normalizeYrp(yrpInput);\n const header = yrp.header;\n const seedSequence = header?.seedSequence ?? [];\n const duel =\n seedSequence.length > 0\n ? wrapper.createDuelV2(seedSequence)\n : wrapper.createDuel(header?.seed ?? 0);\n\n setRegistryValue(duel, 'duel_mode', yrp.isTag ? 'tag' : 'single');\n setRegistryValue(duel, 'start_lp', String(yrp.startLp));\n setRegistryValue(duel, 'start_hand', String(yrp.startHand));\n setRegistryValue(duel, 'draw_count', String(yrp.drawCount));\n\n const playerNames = yrp.isTag\n ? [\n yrp.hostName,\n yrp.tagHostName ?? '',\n yrp.tagClientName ?? '',\n yrp.clientName,\n ]\n : [yrp.hostName, yrp.clientName];\n for (let i = 0; i < playerNames.length; i++) {\n setRegistryValue(duel, `player_name_${i}`, playerNames[i] ?? '');\n }\n setRegistryValue(duel, 'player_type_0', '0');\n setRegistryValue(duel, 'player_type_1', '1');\n\n duel.setPlayerInfo({\n player: 0,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n duel.setPlayerInfo({\n player: 1,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n\n duel.preloadScript('./script/patches/entry.lua');\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n\n if (yrp.isSingleMode && yrp.singleScript) {\n duel.preloadScript(`./single/${yrp.singleScript}`);\n } else if (yrp.isTag) {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadTagDeck(duel, yrp.tagHostDeck, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n loadTagDeck(duel, yrp.tagClientDeck, 1);\n } else {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n }\n\n duel.startDuel(yrp.opt >>> 0);\n return { yrp, duel };\n}\n\nexport function* playYrpStep(\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const { yrp, duel } = createDuelFromYrp(ocgcoreWrapper, yrpInput);\n\n const responses = yrp.responses.slice();\n try {\n for (const result of duel.advance(() => responses.shift())) {\n yield {\n duel,\n result,\n responses,\n };\n if (result.message instanceof YGOProMsgRetry) {\n throw new Error('Got MSG_RETRY');\n }\n }\n } finally {\n duel.endDuel();\n }\n}\n\nexport const playYrp = (\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) => {\n const results: Uint8Array[] = [];\n for (const result of playYrpStep(ocgcoreWrapper, yrpInput)) {\n results.push(result.result.raw);\n }\n return results;\n};\n", "import { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants, OcgcoreScriptConstants } from './vendor';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\n\nconst { LOCATION_DECK, POS_FACEUP_ATTACK } = OcgcoreScriptConstants;\n\nexport interface TestCardMessage {\n type: OcgcoreMessageType;\n message: string;\n}\n\nexport function testCard(\n ocgcoreWrapper: OcgcoreWrapper,\n ...ids: number[]\n): TestCardMessage[] {\n const logs: TestCardMessage[] = [];\n const duel = ocgcoreWrapper.createDuelV2(\n Array.from(\n { length: 8 },\n () => Math.floor(Math.random() * 0xffffffff) >>> 0,\n ),\n );\n\n ocgcoreWrapper.setMessageHandler((_duel, message, type) => {\n if (duel.duelPtr !== _duel.duelPtr) return;\n logs.push({ type, message });\n });\n\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n duel.setPlayerInfo({ player: 0, lp: 8000, startHand: 5, drawCount: 1 });\n duel.setPlayerInfo({ player: 1, lp: 8000, startHand: 5, drawCount: 1 });\n\n for (const code of ids) {\n duel.newCard({\n code,\n owner: 0,\n player: 0,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEUP_ATTACK,\n });\n }\n\n duel.startDuel(0);\n\n while (true) {\n const { status, raw } = duel.process();\n if (raw.length > 0 && raw[0] === OcgcoreCommonConstants.MSG_RETRY) {\n break;\n }\n if (status === 0) {\n continue;\n }\n break;\n }\n\n duel.endDuel();\n return logs;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_ygopro_msg_encode", "import_ygopro_msg_encode", "import_ygopro_msg_encode", "OcgcoreMessageType", "OcgcoreDuelRule", "OcgcoreDuelOptionFlag", "JSZip", "joinPath", "row", "import_jszip", "joinPath", "getNodeModuleOrThrow", "safeReadDir", "JSZip", "import_ygopro_msg_encode", "LOCATION_DECK"]
|
|
3
|
+
"sources": ["../index.ts", "../src/vendor/index.ts", "../src/constants/ocgcore.ts", "../src/utility/binary.ts", "../src/utility/utf8.ts", "../src/adapters/ocgcore-parsers.ts", "../src/adapters/start-duel.ts", "../src/ocgcore-duel.ts", "../src/ocgcore-wrapper.ts", "../src/types/ocgcore-enums.ts", "../src/ocgcore-wrapper-utils.ts", "../src/utility/load-node-module.ts", "../src/utility/node-fs.ts", "../src/utility/node-path.ts", "../src/load-ocgcore-factory.cjs.ts", "../src/create-ocgcore-wrapper.ts", "../src/script-reader/script-readers.ts", "../src/utility/search-zips.ts", "../src/script-reader/dir-script-reader-ex.ts", "../src/card-reader/sqljs-card-reader.ts", "../src/card-reader/dir-card-reader.ts", "../src/play-yrp.ts", "../src/test-card.ts", "../src/advancors/slient-advancor.ts", "../src/advancors/static-advancor.ts", "../src/advancors/no-effect-advancor.ts", "../src/advancors/map-advancor.ts", "../src/advancors/combined-advancor.ts", "../src/advancors/limit-advancor.ts", "../src/advancors/player-view-advancor.ts", "../src/advancors/summon-place-advancor.ts"],
|
|
4
|
+
"sourcesContent": ["import { Buffer } from 'buffer';\n\nif (\n typeof globalThis !== 'undefined' &&\n !(globalThis as { Buffer?: unknown }).Buffer\n) {\n (globalThis as { Buffer?: unknown }).Buffer = Buffer;\n}\n\nexport * from './src/ocgcore-wrapper';\nexport * from './src/ocgcore-duel';\nexport * from './src/create-ocgcore-wrapper';\nexport * from './src/types';\nexport * from './src/adapters';\nexport * from './src/constants';\n// export * from './src/utility';\nexport * as _OcgcoreConstants from './src/vendor';\nexport * from './src/script-reader';\nexport * from './src/card-reader';\nexport * from './src/play-yrp';\nexport * from './src/test-card';\nexport * from './src/advancors';\n", "export {\n OcgcoreCommonConstants,\n OcgcoreScriptConstants,\n} from 'ygopro-msg-encode';\n", "import { OcgcoreCommonConstants } from '../vendor';\n\nexport const MESSAGE_BUFFER_SIZE = OcgcoreCommonConstants.SIZE_MESSAGE_BUFFER;\nexport const QUERY_BUFFER_SIZE = 0x4000;\nexport const REGISTRY_BUFFER_SIZE = 0x2000;\n\nexport const LEN_FAIL = 0;\nexport const LEN_EMPTY = 4;\nexport const LEN_HEADER = 8;\n", "export function readU8(buf: Uint8Array, offset: number): number {\n return buf[offset] ?? 0;\n}\n\nexport function readU16(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint16(\n offset,\n true,\n );\n}\n\nexport function readI32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getInt32(\n offset,\n true,\n );\n}\n\nexport function readU32(buf: Uint8Array, offset: number): number {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength).getUint32(\n offset,\n true,\n );\n}\n", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder('utf-8');\n\nexport function encodeUtf8(value: string): Uint8Array {\n return encoder.encode(value);\n}\n\nexport function decodeUtf8(value: Uint8Array): string {\n return decoder.decode(value);\n}\n", "import { LEN_HEADER } from '../constants';\nimport { readI32, readU16 } from '../utility/binary';\nimport { decodeUtf8 } from '../utility/utf8';\nimport { CardQuery, YGOProMsgReloadField } from 'ygopro-msg-encode';\n\n// Internal interface for registry parsing\ninterface RegistryDumpEntry {\n key: string;\n value: Uint8Array;\n valueText?: string;\n}\n\nexport function parseCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery | null {\n if (length <= LEN_HEADER) {\n return null;\n }\n const payload = raw.subarray(4, length);\n return new CardQuery().fromPayload(payload);\n}\n\nexport function parseFieldCardQuery(\n raw: Uint8Array,\n length: number,\n): CardQuery[] {\n const cards: CardQuery[] = [];\n let offset = 0;\n while (offset + 4 <= length) {\n const chunkLen = readI32(raw, offset);\n if (chunkLen <= 0) {\n break;\n }\n const end = Math.min(length, offset + chunkLen);\n if (chunkLen <= LEN_HEADER) {\n const emptyCard = new CardQuery();\n emptyCard.flags = 0;\n emptyCard.empty = true;\n cards.push(emptyCard);\n } else {\n const payload = raw.subarray(offset + 4, end);\n cards.push(new CardQuery().fromPayload(payload));\n }\n offset += chunkLen;\n }\n return cards;\n}\n\nexport function parseFieldInfo(raw: Uint8Array): YGOProMsgReloadField {\n // query_field_info() in ocgcore returns data that starts with MSG_RELOAD_FIELD (162) byte\n // Format: [MSG_RELOAD_FIELD][duel_rule][player0_data][player1_data][chains]\n // YGOProMsgReloadField.fromPayload() expects the full message including the identifier\n return new YGOProMsgReloadField().fromPayload(raw);\n}\n\nexport function parseRegistryKeys(raw: Uint8Array): string[] {\n const keys: string[] = [];\n let offset = 0;\n while (offset + 2 <= raw.length) {\n const len = readU16(raw, offset);\n offset += 2;\n if (offset + len > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + len);\n offset += len;\n keys.push(decodeUtf8(keyBytes));\n }\n return keys;\n}\n\nexport function parseRegistryDump(raw: Uint8Array): RegistryDumpEntry[] {\n const entries: RegistryDumpEntry[] = [];\n let offset = 0;\n while (offset + 4 <= raw.length) {\n const keyLen = readU16(raw, offset);\n const valLen = readU16(raw, offset + 2);\n offset += 4;\n if (offset + keyLen + valLen > raw.length) {\n break;\n }\n const keyBytes = raw.subarray(offset, offset + keyLen);\n offset += keyLen;\n const valueBytes = raw.subarray(offset, offset + valLen);\n offset += valLen;\n const entry: RegistryDumpEntry = {\n key: decodeUtf8(keyBytes),\n value: valueBytes,\n };\n entry.valueText = decodeUtf8(valueBytes);\n entries.push(entry);\n }\n return entries;\n}\n", "import { OcgcoreStartDuelOptions } from '../types/ocgcore-params';\n\nexport function normalizeStartDuelOptions(\n options: number | OcgcoreStartDuelOptions,\n): number {\n if (typeof options === 'number') {\n return options;\n }\n const duelRule = options.rule ?? 0;\n let duelOptions = options.options ?? 0;\n if (options.flags?.length) {\n for (const flag of options.flags) {\n duelOptions = (duelOptions | flag) >>> 0;\n }\n }\n return (((duelRule & 0xffff) << 16) | (duelOptions & 0xffff)) >>> 0;\n}\n", "import {\n OcgcoreCardQueryResult,\n OcgcoreFieldCardQueryResult,\n OcgcoreFieldInfoResult,\n OcgcoreMessageResult,\n OcgcoreProcessResult,\n OcgcoreRegistryDumpResult,\n OcgcoreRegistryKeysResult,\n OcgcoreRegistryValueResult,\n} from './types/ocgcore-results';\nimport {\n OcgcoreNewCardParams,\n OcgcoreNewTagCardParams,\n OcgcoreQueryCardParams,\n OcgcoreQueryFieldCardParams,\n OcgcoreQueryFieldCountParams,\n OcgcoreSetPlayerInfoParams,\n OcgcoreStartDuelOptions,\n} from './types/ocgcore-params';\nimport {\n MESSAGE_BUFFER_SIZE,\n QUERY_BUFFER_SIZE,\n REGISTRY_BUFFER_SIZE,\n LEN_HEADER,\n} from './constants';\nimport {\n parseCardQuery,\n parseFieldCardQuery,\n parseFieldInfo,\n parseRegistryDump,\n parseRegistryKeys,\n} from './adapters/ocgcore-parsers';\nimport { normalizeStartDuelOptions } from './adapters/start-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { decodeUtf8 } from './utility/utf8';\nimport {\n YGOProMessages,\n YGOProMsgBase,\n YGOProMsgResponseBase,\n YGOProMsgRetry,\n} from 'ygopro-msg-encode';\nimport { Advancor } from './advancors';\n\nexport class OcgcoreDuel {\n private returnPtr = 0;\n private returnSize = 512;\n\n constructor(\n public ocgcoreWrapper: OcgcoreWrapper,\n public duelPtr: number,\n ) {}\n\n startDuel(options: number | OcgcoreStartDuelOptions): void {\n if (!this.returnPtr) {\n this.returnPtr = this.ocgcoreWrapper.malloc(this.returnSize);\n }\n const optionValue = normalizeStartDuelOptions(options);\n this.ocgcoreWrapper.ocgcoreModule._start_duel(this.duelPtr, optionValue);\n }\n\n ended = false;\n\n endDuel(): void {\n if (this.ended) return;\n this.ended = true;\n this.ocgcoreWrapper.ocgcoreModule._end_duel(this.duelPtr);\n if (this.returnPtr) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = 0;\n }\n this.ocgcoreWrapper.forgetDuel(this.duelPtr);\n }\n\n setPlayerInfo(info: OcgcoreSetPlayerInfoParams): void {\n this.ocgcoreWrapper.ocgcoreModule._set_player_info(\n this.duelPtr,\n info.player,\n info.lp,\n info.startHand,\n info.drawCount,\n );\n }\n\n _getLogMessage(bufPtr: number): number {\n return this.ocgcoreWrapper.ocgcoreModule._get_log_message(\n this.duelPtr,\n bufPtr,\n );\n }\n\n private getMessage(length: number): OcgcoreMessageResult {\n const ptr = this.ocgcoreWrapper.malloc(MESSAGE_BUFFER_SIZE);\n this.ocgcoreWrapper.ocgcoreModule._get_message(this.duelPtr, ptr);\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n return { length, raw };\n }\n\n process(): OcgcoreProcessResult {\n const result = this.ocgcoreWrapper.ocgcoreModule._process(this.duelPtr);\n const length = (result & 0x0fffffff) >>> 0;\n const status = ((result >>> 28) & 0x0f) >>> 0;\n const messageData = this.getMessage(length);\n\n // Parse message using YGOProMessages (only one message per process call)\n let parsedMessage: YGOProMsgBase | undefined;\n if (messageData.raw.length > 0) {\n try {\n parsedMessage = YGOProMessages.getInstanceFromPayload(messageData.raw);\n } catch (e) {\n // If parsing fails, parsedMessage remains undefined\n }\n }\n\n return {\n length: messageData.length,\n raw: messageData.raw,\n status,\n message: parsedMessage,\n };\n }\n\n *advance(advancor?: Advancor) {\n while (true) {\n const res = this.process();\n yield res;\n if (res.status === 2 || res.message instanceof YGOProMsgRetry) {\n break;\n }\n\n if (res.status === 1 && res.raw.length > 0) {\n const response = advancor?.(res.message as YGOProMsgResponseBase);\n if (!response) {\n break;\n }\n this.setResponse(response);\n }\n }\n }\n\n newCard(card: OcgcoreNewCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.player,\n card.location,\n card.sequence,\n card.position,\n );\n }\n\n newTagCard(card: OcgcoreNewTagCardParams): void {\n this.ocgcoreWrapper.ocgcoreModule._new_tag_card(\n this.duelPtr,\n card.code,\n card.owner,\n card.location,\n );\n }\n\n queryCard(query: OcgcoreQueryCardParams): OcgcoreCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_card(\n this.duelPtr,\n query.player,\n query.location,\n query.sequence,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const card = length <= LEN_HEADER ? null : parseCardQuery(raw, length);\n return { length, raw, card };\n }\n\n queryFieldCount(query: OcgcoreQueryFieldCountParams): number {\n return this.ocgcoreWrapper.ocgcoreModule._query_field_count(\n this.duelPtr,\n query.player,\n query.location,\n );\n }\n\n queryFieldCard(\n query: OcgcoreQueryFieldCardParams,\n ): OcgcoreFieldCardQueryResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_card(\n this.duelPtr,\n query.player,\n query.location,\n query.queryFlag,\n ptr,\n query.useCache ?? 0,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const cards = parseFieldCardQuery(raw, length);\n return { length, raw, cards };\n }\n\n queryFieldInfo(): OcgcoreFieldInfoResult {\n const ptr = this.ocgcoreWrapper.malloc(QUERY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._query_field_info(\n this.duelPtr,\n ptr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(ptr, length);\n this.ocgcoreWrapper.free(ptr);\n const field = parseFieldInfo(raw);\n return { length, raw, field };\n }\n\n setResponseInt(value: number): void {\n this.ocgcoreWrapper.ocgcoreModule._set_responsei(this.duelPtr, value);\n }\n\n setResponse(response: Uint8Array | number): void {\n if (typeof response === 'number') {\n this.setResponseInt(response);\n return;\n }\n if (response.length > this.returnSize) {\n this.ocgcoreWrapper.free(this.returnPtr);\n this.returnPtr = this.ocgcoreWrapper.malloc(response.length);\n this.returnSize = response.length;\n }\n this.ocgcoreWrapper.setHeap(this.returnPtr, response);\n this.ocgcoreWrapper.ocgcoreModule._set_responseb(\n this.duelPtr,\n this.returnPtr,\n );\n }\n\n preloadScript(scriptPath: string): void {\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._preload_script(this.duelPtr, ptr),\n scriptPath,\n );\n }\n\n getRegistryValue(key: string): OcgcoreRegistryValueResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.useTmpData(\n (keyPtr) =>\n this.ocgcoreWrapper.ocgcoreModule._get_registry_value(\n this.duelPtr,\n keyPtr,\n outPtr,\n ),\n key,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const value = raw;\n const text = length >= 0 ? decodeUtf8(raw) : undefined;\n return { length, raw, value, text };\n }\n\n setRegistryValue(key: string, value: string): void {\n this.ocgcoreWrapper.useTmpData(\n (keyPtr, valuePtr) =>\n this.ocgcoreWrapper.ocgcoreModule._set_registry_value(\n this.duelPtr,\n keyPtr,\n valuePtr,\n ),\n key,\n value,\n );\n }\n\n getRegistryKeys(): OcgcoreRegistryKeysResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._get_registry_keys(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n const keys = length >= 0 ? parseRegistryKeys(raw) : [];\n return { length, raw, keys };\n }\n\n clearRegistry(): void {\n this.ocgcoreWrapper.ocgcoreModule._clear_registry(this.duelPtr);\n }\n\n dumpRegistry(): OcgcoreRegistryDumpResult {\n const outPtr = this.ocgcoreWrapper.malloc(REGISTRY_BUFFER_SIZE);\n const length = this.ocgcoreWrapper.ocgcoreModule._dump_registry(\n this.duelPtr,\n outPtr,\n );\n const raw = this.ocgcoreWrapper.copyHeap(outPtr, Math.max(0, length));\n this.ocgcoreWrapper.free(outPtr);\n\n // Parse directly into dict\n const dict: Record<string, string> = {};\n if (length > 0) {\n const entries = parseRegistryDump(raw);\n for (const entry of entries) {\n if (entry.valueText !== undefined) {\n dict[entry.key] = entry.valueText;\n }\n }\n }\n\n return { length, raw, dict };\n }\n\n loadRegistry(input: Uint8Array | Record<string, string>): void {\n if (input instanceof Uint8Array) {\n // Load from binary format\n this.ocgcoreWrapper.useTmpData(\n (ptr) =>\n this.ocgcoreWrapper.ocgcoreModule._load_registry(\n this.duelPtr,\n ptr,\n input.length,\n ),\n input,\n );\n } else {\n // Load from dict format\n for (const [key, value] of Object.entries(input)) {\n this.setRegistryValue(key, value);\n }\n }\n }\n}\n", "import { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { CardData } from 'ygopro-msg-encode';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\nimport { CardReader, MessageHandler, ScriptReader } from './types/callback';\n\nexport class OcgcoreWrapper {\n private scriptBufferPtr = 0;\n private scriptBufferSize = 0;\n private logBufferPtr = 0;\n private logBufferSize = 0;\n private tmpStringBufferPtr = 0;\n private tmpStringBufferSize = 0;\n\n private scriptReaderFunc = 0;\n private cardReaderFunc = 0;\n private messageHandlerFunc = 0;\n\n public scriptReaders: ScriptReader[] = [];\n public cardReaders: CardReader[] = [];\n public messageHandlers: MessageHandler[] = [];\n\n private heapU8: Uint8Array;\n private heapView: DataView;\n private encoder = new TextEncoder();\n private decoder = new TextDecoder('utf-8');\n private duels = new Map<number, OcgcoreDuel>();\n\n constructor(\n public ocgcoreModule: OcgcoreModule,\n options?: { scriptBufferSize?: number; logBufferSize?: number },\n ) {\n this.heapU8 = ocgcoreModule.HEAPU8 as Uint8Array;\n this.heapView = new DataView(this.heapU8.buffer);\n this.scriptBufferSize = options?.scriptBufferSize ?? 0x100000;\n this.logBufferSize = options?.logBufferSize ?? 1024;\n\n this.scriptReaderFunc = this.createFunction((scriptPtr, lenPtr) => {\n const scriptPath = this.getUTF8String(scriptPtr);\n const content = this.readScript(scriptPath);\n if (content == null) {\n return 0;\n }\n\n if (!this.scriptBufferPtr) {\n this.scriptBufferPtr = this.ocgcoreModule._malloc(\n this.scriptBufferSize,\n );\n }\n\n const bytes = content;\n if (bytes.length > this.scriptBufferSize) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = this.ocgcoreModule._malloc(bytes.length);\n this.scriptBufferSize = bytes.length;\n }\n\n this.heapU8.set(bytes, this.scriptBufferPtr);\n this.heapView.setInt32(lenPtr, bytes.length, true);\n return this.scriptBufferPtr;\n }, 'iii');\n this.ocgcoreModule._set_script_reader(this.scriptReaderFunc);\n\n this.cardReaderFunc = this.createFunction((cardId, cardDataPtr) => {\n const data = this.readCard(cardId);\n if (!data) {\n return 0;\n }\n\n const buf = new CardData().fromPartial(data).toPayload();\n this.heapU8.set(buf, cardDataPtr);\n return 0;\n }, 'iii');\n this.ocgcoreModule._set_card_reader(this.cardReaderFunc);\n\n this.messageHandlerFunc = this.createFunction((duelPtr, messageType) => {\n if (!this.logBufferPtr) {\n this.logBufferPtr = this.ocgcoreModule._malloc(this.logBufferSize);\n }\n this.ocgcoreModule._get_log_message(duelPtr, this.logBufferPtr);\n const message = this.getUTF8String(this.logBufferPtr);\n const type =\n messageType === 2\n ? OcgcoreMessageType.DebugMessage\n : OcgcoreMessageType.ScriptError;\n const duel = this.getOrCreateDuel(duelPtr);\n this.handleMessage(duel, message, type);\n }, 'iii');\n this.ocgcoreModule._set_message_handler(this.messageHandlerFunc);\n }\n\n readScript(scriptPath: string): Uint8Array | null {\n let content: string | Uint8Array | null | undefined;\n for (const reader of this.scriptReaders) {\n try {\n content = reader(scriptPath);\n } catch {\n content = null;\n }\n if (content != null) {\n break;\n }\n }\n return typeof content === 'string'\n ? this.encoder.encode(content)\n : (content ?? null);\n }\n\n readCard(cardId: number): Partial<CardData> | null {\n let data: Partial<CardData> | null | undefined;\n for (const reader of this.cardReaders) {\n try {\n data = reader(cardId);\n } catch {\n data = null;\n }\n if (data) {\n break;\n }\n }\n return data ?? null;\n }\n\n handleMessage(\n duel: OcgcoreDuel,\n message: string,\n type: OcgcoreMessageType,\n ): void {\n for (const handler of this.messageHandlers) {\n try {\n handler(duel, message, type);\n } catch {\n // ignore handler errors\n }\n }\n }\n\n getUTF8String(ptr: number): string {\n let length = 0;\n while (this.heapU8[ptr + length] !== 0) {\n length++;\n }\n return this.decoder.decode(this.heapU8.subarray(ptr, ptr + length));\n }\n\n setHeap(ptr: number, data: Uint8Array): void {\n this.heapU8.set(data, ptr);\n }\n\n copyHeap(ptr: number, length: number): Uint8Array {\n return this.heapU8.slice(ptr, ptr + length);\n }\n\n useTmpData<R>(\n cb: (...args: number[]) => R,\n ...args: Array<string | Uint8Array>\n ): R {\n const encoded = args.map((item) =>\n typeof item === 'string' ? this.encoder.encode(item) : item,\n );\n const totalLength = encoded.reduce(\n (acc, bytes) => acc + bytes.length + 1,\n 0,\n );\n if (totalLength > this.tmpStringBufferSize) {\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n }\n this.tmpStringBufferPtr = this.ocgcoreModule._malloc(totalLength);\n this.tmpStringBufferSize = totalLength;\n }\n\n let offset = 0;\n const ptrs = encoded.map((bytes) => {\n const ptr = this.tmpStringBufferPtr + offset;\n this.heapU8.set(bytes, ptr);\n this.heapU8[ptr + bytes.length] = 0;\n offset += bytes.length + 1;\n return ptr;\n });\n\n return cb(...ptrs);\n }\n\n private createFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n addFunction(\n fn: (...args: number[]) => number | void,\n signature: string,\n ): number {\n return this.ocgcoreModule.addFunction(fn, signature);\n }\n\n removeFunction(index: number): void {\n this.ocgcoreModule.removeFunction(index);\n }\n\n createDuel(seed: number): OcgcoreDuel {\n const duelPtr = this.ocgcoreModule._create_duel(seed);\n return this.getOrCreateDuel(duelPtr);\n }\n\n createDuelV2(seedSequence: number[]): OcgcoreDuel {\n const count = seedSequence.length;\n const byteLength = count * 4;\n const ptr = this.ocgcoreModule._malloc(byteLength);\n const view = new Uint32Array(this.heapU8.buffer, ptr, count);\n for (let i = 0; i < count; i++) {\n view[i] = seedSequence[i] >>> 0;\n }\n const duelPtr = this.ocgcoreModule._create_duel_v2(ptr);\n this.ocgcoreModule._free(ptr);\n return this.getOrCreateDuel(duelPtr);\n }\n\n _defaultScriptReader(namePtr: number, dataPtr: number): number {\n return this.ocgcoreModule._default_script_reader(namePtr, dataPtr);\n }\n\n malloc(size: number): number {\n return this.ocgcoreModule._malloc(size);\n }\n\n free(ptr: number): void {\n this.ocgcoreModule._free(ptr);\n }\n\n _stdioExit(): void {\n this.ocgcoreModule.___stdio_exit();\n }\n\n setScriptReader(reader: ScriptReader, reset = false): this {\n if (reset) {\n this.scriptReaders = [];\n }\n this.scriptReaders.push(reader);\n return this;\n }\n\n setCardReader(reader: CardReader, reset = false): this {\n if (reset) {\n this.cardReaders = [];\n }\n this.cardReaders.push(reader);\n return this;\n }\n\n setMessageHandler(handler: MessageHandler, reset = false): this {\n if (reset) {\n this.messageHandlers = [];\n }\n this.messageHandlers.push(handler);\n return this;\n }\n\n getOrCreateDuel(duelPtr: number): OcgcoreDuel {\n const existing = this.duels.get(duelPtr);\n if (existing) {\n return existing;\n }\n const duel = new OcgcoreDuel(this, duelPtr);\n this.duels.set(duelPtr, duel);\n return duel;\n }\n\n forgetDuel(duelPtr: number): void {\n this.duels.delete(duelPtr);\n }\n\n finalize(): void {\n if (this.scriptReaderFunc) {\n this.ocgcoreModule.removeFunction(this.scriptReaderFunc);\n this.scriptReaderFunc = 0;\n }\n if (this.cardReaderFunc) {\n this.ocgcoreModule.removeFunction(this.cardReaderFunc);\n this.cardReaderFunc = 0;\n }\n if (this.messageHandlerFunc) {\n this.ocgcoreModule.removeFunction(this.messageHandlerFunc);\n this.messageHandlerFunc = 0;\n }\n\n if (this.scriptBufferPtr) {\n this.ocgcoreModule._free(this.scriptBufferPtr);\n this.scriptBufferPtr = 0;\n this.scriptBufferSize = 0;\n }\n if (this.logBufferPtr) {\n this.ocgcoreModule._free(this.logBufferPtr);\n this.logBufferPtr = 0;\n this.logBufferSize = 0;\n }\n if (this.tmpStringBufferPtr) {\n this.ocgcoreModule._free(this.tmpStringBufferPtr);\n this.tmpStringBufferPtr = 0;\n this.tmpStringBufferSize = 0;\n }\n }\n}\n", "export enum OcgcoreMessageType {\n ScriptError = 'ScriptError',\n DebugMessage = 'DebugMessage',\n}\n\nexport enum OcgcoreDuelRule {\n Rule1 = 1,\n Rule2 = 2,\n MasterRule3 = 3,\n NewMasterRule = 4,\n MasterRule2020 = 5,\n}\n\nexport enum OcgcoreDuelOptionFlag {\n TestMode = 0x01,\n AttackFirstTurn = 0x02,\n ObsoleteRuling = 0x08,\n PseudoShuffle = 0x10,\n TagMode = 0x20,\n SimpleAI = 0x40,\n ReturnDeckTop = 0x80,\n RevealDeckSeq = 0x100,\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\n\ntype OcgcoreFactoryModule = { default?: OcgcoreFactory } | OcgcoreFactory;\n\nexport function normalizeOcgcoreFactory(mod: unknown): OcgcoreFactory {\n const typed = mod as OcgcoreFactoryModule;\n if (typeof typed === 'function') {\n return typed as OcgcoreFactory;\n }\n if (typed && typeof (typed as { default?: unknown }).default === 'function') {\n return (typed as { default: OcgcoreFactory }).default;\n }\n throw new Error('Invalid ocgcore factory module');\n}\n", "export function loadNodeModule<T>(id: string, altId?: string): T | null {\n const req =\n typeof module.require !== 'undefined' ? module.require : undefined;\n if (!req) {\n return null;\n }\n try {\n return req(id) as T;\n } catch {\n if (!altId) return null;\n try {\n return req(altId) as T;\n } catch {\n return null;\n }\n }\n}\n", "type NodeStats = {\n isFile: () => boolean;\n};\n\ntype NodeFsPromises = {\n readFile: (path: string) => Promise<Uint8Array>;\n readdir: (path: string) => Promise<string[]>;\n stat: (path: string) => Promise<NodeStats>;\n access: (path: string) => Promise<void>;\n};\n\nexport type NodeFs = {\n existsSync: (path: string) => boolean;\n readFileSync: (path: string) => Uint8Array;\n promises: NodeFsPromises;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodeFs(noThrow = false): NodeFs | null {\n const mod = loadNodeModule<NodeFs>('node:fs', 'fs');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js fs module is not available.');\n}\n", "export type NodePath = {\n join: (...parts: string[]) => string;\n};\n\nimport { loadNodeModule } from './load-node-module';\n\nexport function getNodePath(noThrow = false): NodePath | null {\n const mod = loadNodeModule<NodePath>('node:path', 'path');\n if (mod) return mod;\n if (noThrow) return null;\n throw new Error('Node.js path module is not available.');\n}\n", "import type { OcgcoreFactory } from './vendor/libocgcore.shared';\nimport { normalizeOcgcoreFactory } from './ocgcore-wrapper-utils';\nimport { getNodeFs } from './utility/node-fs';\nimport { getNodePath } from './utility/node-path';\n\nexport async function loadOcgcoreFactory(): Promise<OcgcoreFactory> {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require('./vendor/wasm_cjs/libocgcore.cjs') as unknown;\n const baseFactory = normalizeOcgcoreFactory(mod);\n\n const fs = getNodeFs(true);\n if (!fs) {\n return baseFactory;\n }\n\n const pathMod = getNodePath(true);\n if (!pathMod) {\n return baseFactory;\n }\n let defaultWasmBinary: Uint8Array | null = null;\n const wasmPath = pathMod.join(\n __dirname,\n 'vendor',\n 'wasm_cjs',\n 'libocgcore.wasm',\n );\n if (fs.existsSync(wasmPath)) {\n defaultWasmBinary = fs.readFileSync(wasmPath);\n }\n\n if (!defaultWasmBinary) {\n return baseFactory;\n }\n\n return async (overrides) => {\n if (!overrides?.wasmBinary && !overrides?.locateFile) {\n return baseFactory({\n ...overrides,\n wasmBinary: defaultWasmBinary.buffer as ArrayBuffer,\n });\n }\n return baseFactory(overrides);\n };\n}\n", "import type { OcgcoreModule } from './vendor/libocgcore.shared';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { loadOcgcoreFactory } from './load-ocgcore-factory';\n\nexport interface CreateOcgcoreWrapperOptions {\n moduleOverrides?: Partial<OcgcoreModule>;\n wasmBinary?: Uint8Array;\n locateFile?: (path: string, prefix?: string) => string;\n}\n\nexport async function createOcgcoreWrapper(\n options: CreateOcgcoreWrapperOptions = {},\n): Promise<OcgcoreWrapper> {\n const factory = await loadOcgcoreFactory();\n const overrides: Partial<OcgcoreModule> = {\n ...options.moduleOverrides,\n };\n if (options.wasmBinary) {\n overrides.wasmBinary =\n options.wasmBinary as unknown as OcgcoreModule['wasmBinary'];\n }\n if (options.locateFile) {\n overrides.locateFile =\n options.locateFile as unknown as OcgcoreModule['locateFile'];\n }\n const moduleInstance = await factory(overrides);\n return new OcgcoreWrapper(moduleInstance);\n}\n", "import JSZip from 'jszip';\n\nimport { ScriptReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\n\nconst SCRIPT_PREFIX = './script/';\n\nfunction normalizePath(input: string): string {\n let path = input.replace(/\\\\/g, '/');\n if (path.startsWith(SCRIPT_PREFIX)) {\n path = path.slice(SCRIPT_PREFIX.length);\n }\n return path;\n}\n\nfunction buildCandidates(filename: string): string[] {\n const entries = [\n filename,\n `specials/${filename}`,\n `expansions/script/${filename}`,\n `script/${filename}`,\n ];\n const candidates: string[] = [];\n for (const entry of entries) {\n candidates.push(entry);\n if (!entry.startsWith('./')) {\n const dotEntry = entry.startsWith('/')\n ? `./${entry.slice(1)}`\n : `./${entry}`;\n candidates.push(dotEntry);\n }\n }\n return candidates;\n}\n\nfunction joinPath(baseDir: string, relativePath: string): string {\n const pathMod = getNodePath();\n if (pathMod) {\n return pathMod.join(baseDir, relativePath);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = relativePath.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nexport function MapScriptReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const candidate of candidates) {\n for (const map of maps) {\n if (map.has(candidate)) {\n return map.get(candidate) ?? null;\n }\n }\n }\n return null;\n };\n}\n\nexport function DirScriptReader(...baseDirs: string[]): ScriptReader {\n const fs = getNodeFs();\n return (path) => {\n const filename = normalizePath(path);\n if (!filename.toLowerCase().endsWith('.lua')) {\n return null;\n }\n const candidates = buildCandidates(filename);\n for (const baseDir of baseDirs) {\n for (const candidate of candidates) {\n const normalized = candidate.startsWith('/')\n ? candidate.slice(1)\n : candidate;\n const fullPath = joinPath(baseDir, normalized);\n if (fs.existsSync(fullPath)) {\n return fs.readFileSync(fullPath);\n }\n }\n }\n return null;\n };\n}\n\nfunction normalizeZipEntryName(name: string): string[] {\n const normalized = name.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n const names = new Set<string>();\n names.add(normalized);\n if (normalized.startsWith('script/')) {\n names.add(normalized.slice('script/'.length));\n }\n return Array.from(names);\n}\n\nexport async function ZipScriptReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n const maps = await Promise.all(\n inputs.map(async (data) => {\n const zip = await JSZip.loadAsync(data);\n const map = new Map<string, string | Uint8Array>();\n const entries = Object.values(zip.files);\n await Promise.all(\n entries.map(async (entry) => {\n if (entry.dir) {\n return;\n }\n if (!entry.name.toLowerCase().endsWith('.lua')) {\n return;\n }\n const content = await entry.async('uint8array');\n for (const name of normalizeZipEntryName(entry.name)) {\n map.set(name, content);\n }\n }),\n );\n return map;\n }),\n );\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use MapScriptReader instead. */\nexport function MapReader(\n ...maps: Array<Map<string, string | Uint8Array>>\n): ScriptReader {\n return MapScriptReader(...maps);\n}\n\n/** @deprecated Use DirScriptReader instead. */\nexport function DirReader(...baseDirs: string[]): ScriptReader {\n return DirScriptReader(...baseDirs);\n}\n\n/** @deprecated Use ZipScriptReader instead. */\nexport async function ZipReader(\n ...inputs: Array<Uint8Array | ArrayBuffer | Blob>\n): Promise<ScriptReader> {\n return ZipScriptReader(...inputs);\n}\n", "import { getNodeFs } from './node-fs';\nimport { getNodePath } from './node-path';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nexport async function searchZips(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const results: string[] = [];\n const rootEntries = await safeReadDir(fs, baseDir);\n for (const entry of rootEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, baseDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n const expansionEntries = await safeReadDir(fs, expansionsDir);\n for (const entry of expansionEntries) {\n const lower = entry.toLowerCase();\n if (!lower.endsWith('.zip') && !lower.endsWith('.ypk')) {\n continue;\n }\n const fullPath = joinPath(pathMod, expansionsDir, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n results.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n\n return results;\n}\n", "import type { ScriptReader } from '../types/callback';\nimport { DirScriptReader, ZipScriptReader } from './script-readers';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nexport async function DirScriptReaderEx(\n ...baseDirs: string[]\n): Promise<ScriptReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirScriptReaderEx');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirScriptReaderEx');\n const fsReader = DirScriptReader(...baseDirs);\n\n const zipInputs: Uint8Array[] = [];\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n zipInputs.push(await fs.promises.readFile(zipPath));\n } catch {\n continue;\n }\n }\n }\n\n if (zipInputs.length === 0) {\n return fsReader;\n }\n\n const zipReader = await ZipScriptReader(...zipInputs);\n return (path) => fsReader(path) ?? zipReader(path);\n}\n", "import type { Database } from 'sql.js';\nimport { OcgcoreCommonConstants } from '../vendor';\nimport type { CardData } from 'ygopro-msg-encode';\nimport type { CardReader } from '../types/callback';\n\ntype SqljsRow = {\n id: number;\n alias: number;\n setcode: number | bigint;\n type: number;\n atk: number;\n def: number;\n level: number;\n race: number;\n attribute: number;\n};\n\nfunction toNumberArrayFromSetcode(value: number | bigint): number[] {\n let raw = typeof value === 'bigint' ? value : BigInt(value >>> 0);\n const list: number[] = [];\n while (raw !== 0n && list.length < 16) {\n const chunk = raw & 0xffffn;\n if (chunk !== 0n) {\n list.push(Number(chunk));\n }\n raw >>= 16n;\n }\n return list;\n}\n\nfunction mapRowToCardData(row: SqljsRow): Partial<CardData> {\n const type = (row.type ?? 0) >>> 0;\n const attack = row.atk ?? 0;\n let defense = row.def ?? 0;\n let linkMarker = 0;\n if ((type & OcgcoreCommonConstants.TYPE_LINK) >>> 0 !== 0) {\n linkMarker = defense;\n defense = 0;\n }\n const levelRaw = (row.level ?? 0) >>> 0;\n const level = (levelRaw & 0xff) >>> 0;\n const lscale = ((levelRaw >>> 24) & 0xff) >>> 0;\n const rscale = ((levelRaw >>> 16) & 0xff) >>> 0;\n\n return {\n code: row.id,\n alias: row.alias ?? 0,\n setcode: toNumberArrayFromSetcode(row.setcode ?? 0),\n type,\n level,\n attribute: (row.attribute ?? 0) >>> 0,\n race: (row.race ?? 0) >>> 0,\n attack,\n defense,\n lscale,\n rscale,\n linkMarker,\n };\n}\n\nfunction queryOne(db: Database, cardId: number): Partial<CardData> | null {\n if (typeof db.prepare === 'function') {\n const stmt = db.prepare(\n 'SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ?',\n );\n try {\n stmt.bind([cardId]);\n if (!stmt.step()) {\n return null;\n }\n const row = stmt.getAsObject() as unknown as SqljsRow;\n if (!row || row.id == null) {\n return null;\n }\n return mapRowToCardData(row);\n } finally {\n stmt.free();\n }\n }\n\n const res = db.exec(\n `SELECT id, alias, setcode, type, atk, def, level, race, attribute FROM datas WHERE id = ${cardId}`,\n );\n if (\n !res ||\n res.length === 0 ||\n !res[0].values ||\n res[0].values.length === 0\n ) {\n return null;\n }\n const row = res[0].values[0] as unknown[];\n return mapRowToCardData({\n id: row[0] as number,\n alias: row[1] as number,\n setcode: row[2] as number,\n type: row[3] as number,\n atk: row[4] as number,\n def: row[5] as number,\n level: row[6] as number,\n race: row[7] as number,\n attribute: row[8] as number,\n });\n}\n\nexport function SqljsCardReader(...dbs: Database[]): CardReader {\n return (cardId: number) => {\n for (const db of dbs) {\n const data = queryOne(db, cardId);\n if (data) {\n return data;\n }\n }\n return null;\n };\n}\n\n/** @deprecated Use SqljsCardReader instead. */\nexport function createSqljsCardReader(...dbs: Database[]): CardReader {\n return SqljsCardReader(...dbs);\n}\n", "import JSZip from 'jszip';\n\nimport type { CardReader } from '../types/callback';\nimport { getNodeFs } from '../utility/node-fs';\nimport { getNodePath } from '../utility/node-path';\nimport { searchZips } from '../utility/search-zips';\nimport { SqljsCardReader } from './sqljs-card-reader';\nimport type { SqlJsStatic } from 'sql.js';\n\ntype NodeFs = NonNullable<ReturnType<typeof getNodeFs>>;\ntype NodePath = NonNullable<ReturnType<typeof getNodePath>>;\n\nfunction joinPath(\n pathMod: NodePath | null,\n baseDir: string,\n rel: string,\n): string {\n if (pathMod) {\n return pathMod.join(baseDir, rel);\n }\n const trimmedBase = baseDir.replace(/[/\\\\]+$/, '');\n const trimmedRel = rel.replace(/^[/\\\\]+/, '');\n return `${trimmedBase}/${trimmedRel}`;\n}\n\nfunction getNodeModuleOrThrow<T>(value: T | null, label: string): T {\n if (!value) {\n throw new Error(`${label} is not supported in this runtime.`);\n }\n return value;\n}\n\nasync function safeReadDir(fs: NodeFs, dirPath: string): Promise<string[]> {\n try {\n return await fs.promises.readdir(dirPath);\n } catch {\n return [];\n }\n}\n\nasync function collectFsDbPaths(\n fs: NodeFs,\n pathMod: NodePath | null,\n baseDir: string,\n): Promise<string[]> {\n const collectCdbFiles = async (dirPath: string): Promise<string[]> => {\n const paths: string[] = [];\n const entries = await safeReadDir(fs, dirPath);\n for (const entry of entries) {\n if (!entry.toLowerCase().endsWith('.cdb')) {\n continue;\n }\n const fullPath = joinPath(pathMod, dirPath, entry);\n try {\n const stats = await fs.promises.stat(fullPath);\n if (stats.isFile()) {\n paths.push(fullPath);\n }\n } catch {\n continue;\n }\n }\n return paths;\n };\n\n const results: string[] = [];\n\n const expansionsDir = joinPath(pathMod, baseDir, 'expansions');\n results.push(...(await collectCdbFiles(expansionsDir)));\n\n results.push(...(await collectCdbFiles(baseDir)));\n\n return results;\n}\n\nfunction isRootCdbEntry(entryName: string): boolean {\n const normalized = entryName.replace(/\\\\/g, '/').replace(/^\\.?\\//, '');\n return !normalized.includes('/') && normalized.toLowerCase().endsWith('.cdb');\n}\n\nexport async function DirCardReader(\n sqljs: SqlJsStatic,\n ...baseDirs: string[]\n): Promise<CardReader> {\n const fs = getNodeModuleOrThrow(getNodeFs(), 'DirCardReader');\n const pathMod = getNodeModuleOrThrow(getNodePath(), 'DirCardReader');\n\n const dbs: unknown[] = [];\n for (const baseDir of baseDirs) {\n const dbPaths = await collectFsDbPaths(fs, pathMod, baseDir);\n for (const dbPath of dbPaths) {\n try {\n const bytes = await fs.promises.readFile(dbPath);\n dbs.push(new sqljs.Database(bytes));\n } catch {\n continue;\n }\n }\n }\n\n for (const baseDir of baseDirs) {\n const zipPaths = await searchZips(fs, pathMod, baseDir);\n for (const zipPath of zipPaths) {\n try {\n const bytes = await fs.promises.readFile(zipPath);\n const zip = await JSZip.loadAsync(bytes);\n const entries = Object.values(zip.files);\n for (const entry of entries) {\n if (entry.dir || !isRootCdbEntry(entry.name)) {\n continue;\n }\n try {\n const content = await entry.async('uint8array');\n dbs.push(new sqljs.Database(content));\n } catch {\n continue;\n }\n }\n } catch {\n continue;\n }\n }\n }\n\n return SqljsCardReader(...(dbs as Parameters<typeof SqljsCardReader>));\n}\n", "import { YGOProYrp } from 'ygopro-yrp-encode';\n\nimport { OcgcoreDuel } from './ocgcore-duel';\nimport { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreScriptConstants } from './vendor';\nimport { YGOProMsgRetry } from 'ygopro-msg-encode';\n\nconst { LOCATION_DECK, LOCATION_EXTRA, POS_FACEDOWN_DEFENSE } =\n OcgcoreScriptConstants;\n\nfunction normalizeYrp(input: YGOProYrp | Uint8Array): YGOProYrp {\n if (input instanceof YGOProYrp) {\n return input;\n }\n return new YGOProYrp().fromYrp(input);\n}\n\nfunction loadDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n player: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newCard({\n code,\n owner,\n player,\n location: LOCATION_EXTRA,\n sequence: 0,\n position: POS_FACEDOWN_DEFENSE,\n });\n }\n}\n\nfunction loadTagDeck(\n duel: OcgcoreDuel,\n deck: { main?: number[]; extra?: number[] } | null,\n owner: number,\n): void {\n if (!deck) return;\n for (const code of deck.main ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_DECK,\n });\n }\n for (const code of deck.extra ?? []) {\n duel.newTagCard({\n code,\n owner,\n location: LOCATION_EXTRA,\n });\n }\n}\n\nfunction setRegistryValue(duel: OcgcoreDuel, key: string, value: string): void {\n duel.setRegistryValue(key, value);\n}\n\nexport function createDuelFromYrp(\n wrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const yrp = normalizeYrp(yrpInput);\n const header = yrp.header;\n const seedSequence = header?.seedSequence ?? [];\n const duel =\n seedSequence.length > 0\n ? wrapper.createDuelV2(seedSequence)\n : wrapper.createDuel(header?.seed ?? 0);\n\n setRegistryValue(duel, 'duel_mode', yrp.isTag ? 'tag' : 'single');\n setRegistryValue(duel, 'start_lp', String(yrp.startLp));\n setRegistryValue(duel, 'start_hand', String(yrp.startHand));\n setRegistryValue(duel, 'draw_count', String(yrp.drawCount));\n\n const playerNames = yrp.isTag\n ? [\n yrp.hostName,\n yrp.tagHostName ?? '',\n yrp.tagClientName ?? '',\n yrp.clientName,\n ]\n : [yrp.hostName, yrp.clientName];\n for (let i = 0; i < playerNames.length; i++) {\n setRegistryValue(duel, `player_name_${i}`, playerNames[i] ?? '');\n }\n setRegistryValue(duel, 'player_type_0', '0');\n setRegistryValue(duel, 'player_type_1', '1');\n\n duel.setPlayerInfo({\n player: 0,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n duel.setPlayerInfo({\n player: 1,\n lp: yrp.startLp,\n startHand: yrp.startHand,\n drawCount: yrp.drawCount,\n });\n\n duel.preloadScript('./script/patches/entry.lua');\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n\n if (yrp.isSingleMode && yrp.singleScript) {\n duel.preloadScript(`./single/${yrp.singleScript}`);\n } else if (yrp.isTag) {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadTagDeck(duel, yrp.tagHostDeck, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n loadTagDeck(duel, yrp.tagClientDeck, 1);\n } else {\n loadDeck(duel, yrp.hostDeck, 0, 0);\n loadDeck(duel, yrp.clientDeck, 1, 1);\n }\n\n duel.startDuel(yrp.opt >>> 0);\n return { yrp, duel };\n}\n\nexport function* playYrpStep(\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) {\n const { yrp, duel } = createDuelFromYrp(ocgcoreWrapper, yrpInput);\n\n const responses = yrp.responses.slice();\n try {\n for (const result of duel.advance(() => responses.shift())) {\n yield {\n duel,\n result,\n responses,\n };\n if (result.message instanceof YGOProMsgRetry) {\n throw new Error('Got MSG_RETRY');\n }\n }\n } finally {\n duel.endDuel();\n }\n}\n\nexport const playYrp = (\n ocgcoreWrapper: OcgcoreWrapper,\n yrpInput: YGOProYrp | Uint8Array,\n) => {\n const results: Uint8Array[] = [];\n for (const result of playYrpStep(ocgcoreWrapper, yrpInput)) {\n results.push(result.result.raw);\n }\n return results;\n};\n", "import { OcgcoreWrapper } from './ocgcore-wrapper';\nimport { OcgcoreCommonConstants, OcgcoreScriptConstants } from './vendor';\nimport { OcgcoreMessageType } from './types/ocgcore-enums';\n\nconst { LOCATION_DECK, POS_FACEUP_ATTACK } = OcgcoreScriptConstants;\n\nexport interface TestCardMessage {\n type: OcgcoreMessageType;\n message: string;\n}\n\nexport function testCard(\n ocgcoreWrapper: OcgcoreWrapper,\n ...ids: number[]\n): TestCardMessage[] {\n const logs: TestCardMessage[] = [];\n const duel = ocgcoreWrapper.createDuelV2(\n Array.from(\n { length: 8 },\n () => Math.floor(Math.random() * 0xffffffff) >>> 0,\n ),\n );\n\n ocgcoreWrapper.setMessageHandler((_duel, message, type) => {\n if (duel.duelPtr !== _duel.duelPtr) return;\n logs.push({ type, message });\n });\n\n duel.preloadScript('./script/special.lua');\n duel.preloadScript('./script/init.lua');\n duel.setPlayerInfo({ player: 0, lp: 8000, startHand: 5, drawCount: 1 });\n duel.setPlayerInfo({ player: 1, lp: 8000, startHand: 5, drawCount: 1 });\n\n for (const code of ids) {\n duel.newCard({\n code,\n owner: 0,\n player: 0,\n location: LOCATION_DECK,\n sequence: 0,\n position: POS_FACEUP_ATTACK,\n });\n }\n\n duel.startDuel(0);\n\n while (true) {\n const { status, raw } = duel.process();\n if (raw.length > 0 && raw[0] === OcgcoreCommonConstants.MSG_RETRY) {\n break;\n }\n if (status === 0) {\n continue;\n }\n break;\n }\n\n duel.endDuel();\n return logs;\n}\n", "import { Advancor } from './types';\n\nexport const SlientAdvancor = (): Advancor => {\n return (msg) => {\n return msg.defaultResponse();\n };\n};\n", "import { makeArray, MayBeArray } from 'nfkit';\n\nexport const StaticAdvancor = <T>(items: MayBeArray<T>) => {\n const _items = makeArray(items).slice();\n return () => _items.shift();\n};\n", "import { YGOProMsgSelectChain } from 'ygopro-msg-encode';\nimport { MapAdvancor, MapAdvancorHandler } from './map-advancor';\n\nexport const NoEffectAdvancor = () =>\n MapAdvancor(\n MapAdvancorHandler(YGOProMsgSelectChain, (msg) => {\n if (msg.chains.length) {\n return;\n }\n return msg.prepareResponse(undefined);\n }),\n );\n", "import { YGOProMsgResponseBase } from 'ygopro-msg-encode';\nimport { Advancor } from './types';\n\nexport interface MapAdvancorHandleObject<T extends YGOProMsgResponseBase> {\n msgClass: new (...args: any[]) => T;\n cb: Advancor<T>;\n}\n\nexport const MapAdvancorHandler = <T extends YGOProMsgResponseBase>(\n msgClass: new (...args: any[]) => T,\n cb: Advancor<T>,\n): MapAdvancorHandleObject<T> => ({\n msgClass,\n cb,\n});\n\nexport const MapAdvancor = (\n ...handlers: MapAdvancorHandleObject<YGOProMsgResponseBase>[]\n): Advancor => {\n const handlerMap = new Map<\n new (...args: any[]) => YGOProMsgResponseBase,\n (msg: YGOProMsgResponseBase) => Uint8Array | undefined\n >();\n for (const handleObj of handlers) {\n handlerMap.set(handleObj.msgClass, handleObj.cb);\n }\n\n return (msg) => {\n const cb = handlerMap.get(\n msg.constructor as new (...args: any[]) => YGOProMsgResponseBase,\n );\n if (cb != null) {\n const res = cb(msg);\n if (res != null) {\n return res;\n }\n }\n return undefined;\n };\n};\n", "import { Advancor } from \"./types\";\n\nexport const CombinedAdvancor = (...advancors: Advancor[]): Advancor => {\n return (msg) => {\n for (const advancor of advancors) {\n const res = advancor(msg);\n if (res != null) {\n return res;\n }\n }\n return undefined;\n };\n};\n", "import { YGOProMsgResponseBase } from 'ygopro-msg-encode';\nimport { Advancor } from './types';\n\nexport const LimitAdvancor = <T extends YGOProMsgResponseBase>(\n a: Advancor<T>,\n limit = 1,\n): Advancor<T> => {\n let called = 0;\n return (msg) => {\n if (called >= limit) {\n return undefined;\n }\n const res = a(msg);\n if (res !== undefined) {\n called++;\n }\n return res;\n };\n};\n\nexport const OnceAdvancor = <T extends YGOProMsgResponseBase>(\n a: Advancor<T>,\n): Advancor<T> => LimitAdvancor(a, 1);\n", "import { YGOProMsgResponseBase } from 'ygopro-msg-encode';\nimport { Advancor } from './types';\n\nexport const PlayerViewAdvancor =\n <T extends YGOProMsgResponseBase>(\n player: number,\n a: Advancor<T>,\n ): Advancor<T> =>\n (msg) => {\n if (msg.responsePlayer() === player) {\n return a(msg);\n }\n return undefined;\n };\n", "import {\n SelectablePlace,\n YGOProMsgSelectPlace,\n YGOProMsgSelectPosition,\n} from 'ygopro-msg-encode';\nimport { MapAdvancor, MapAdvancorHandler } from './map-advancor';\n\nexport type SelectablePlaceAndPosition = Partial<\n SelectablePlace & {\n position: number;\n }\n>;\n\nexport const SummonPlaceAdvancor = (\n placeAndPosition: SelectablePlaceAndPosition = {},\n) =>\n MapAdvancor(\n MapAdvancorHandler(YGOProMsgSelectPlace, (msg) => {\n const places = msg\n .getSelectablePlaces()\n .filter(\n (p) =>\n (placeAndPosition.player == null ||\n p.player === placeAndPosition.player) &&\n (placeAndPosition.location == null ||\n p.location === placeAndPosition.location) &&\n (placeAndPosition.sequence == null ||\n p.sequence === placeAndPosition.sequence),\n )\n .slice(0, msg.count);\n return msg.prepareResponse(places);\n }),\n MapAdvancorHandler(YGOProMsgSelectPosition, (msg) => {\n if (placeAndPosition.position) {\n return msg.prepareResponse(placeAndPosition.position);\n }\n // use lowest bit of location as position if not specified\n const possiblePositions = msg.positions;\n for (let i = 0; i < 8; i++) {\n const value = 1 << i;\n if ((possiblePositions & value) !== 0) {\n return msg.prepareResponse(value);\n }\n }\n return undefined;\n }),\n );\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_ygopro_msg_encode", "import_ygopro_msg_encode", "import_ygopro_msg_encode", "OcgcoreMessageType", "OcgcoreDuelRule", "OcgcoreDuelOptionFlag", "JSZip", "joinPath", "row", "import_jszip", "joinPath", "getNodeModuleOrThrow", "safeReadDir", "JSZip", "import_ygopro_msg_encode", "LOCATION_DECK", "import_ygopro_msg_encode", "import_ygopro_msg_encode"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -214,7 +214,7 @@ var OcgcoreDuel = class {
|
|
|
214
214
|
break;
|
|
215
215
|
}
|
|
216
216
|
if (res.status === 1 && res.raw.length > 0) {
|
|
217
|
-
const response = advancor?.();
|
|
217
|
+
const response = advancor?.(res.message);
|
|
218
218
|
if (!response) {
|
|
219
219
|
break;
|
|
220
220
|
}
|
|
@@ -1295,11 +1295,127 @@ function testCard(ocgcoreWrapper, ...ids) {
|
|
|
1295
1295
|
return logs;
|
|
1296
1296
|
}
|
|
1297
1297
|
|
|
1298
|
+
// src/advancors/slient-advancor.ts
|
|
1299
|
+
var SlientAdvancor = () => {
|
|
1300
|
+
return (msg) => {
|
|
1301
|
+
return msg.defaultResponse();
|
|
1302
|
+
};
|
|
1303
|
+
};
|
|
1304
|
+
|
|
1305
|
+
// src/advancors/static-advancor.ts
|
|
1306
|
+
import { makeArray } from "nfkit";
|
|
1307
|
+
var StaticAdvancor = (items) => {
|
|
1308
|
+
const _items = makeArray(items).slice();
|
|
1309
|
+
return () => _items.shift();
|
|
1310
|
+
};
|
|
1311
|
+
|
|
1312
|
+
// src/advancors/no-effect-advancor.ts
|
|
1313
|
+
import { YGOProMsgSelectChain } from "ygopro-msg-encode";
|
|
1314
|
+
|
|
1315
|
+
// src/advancors/map-advancor.ts
|
|
1316
|
+
var MapAdvancorHandler = (msgClass, cb) => ({
|
|
1317
|
+
msgClass,
|
|
1318
|
+
cb
|
|
1319
|
+
});
|
|
1320
|
+
var MapAdvancor = (...handlers) => {
|
|
1321
|
+
const handlerMap = /* @__PURE__ */ new Map();
|
|
1322
|
+
for (const handleObj of handlers) {
|
|
1323
|
+
handlerMap.set(handleObj.msgClass, handleObj.cb);
|
|
1324
|
+
}
|
|
1325
|
+
return (msg) => {
|
|
1326
|
+
const cb = handlerMap.get(
|
|
1327
|
+
msg.constructor
|
|
1328
|
+
);
|
|
1329
|
+
if (cb != null) {
|
|
1330
|
+
const res = cb(msg);
|
|
1331
|
+
if (res != null) {
|
|
1332
|
+
return res;
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
return void 0;
|
|
1336
|
+
};
|
|
1337
|
+
};
|
|
1338
|
+
|
|
1339
|
+
// src/advancors/no-effect-advancor.ts
|
|
1340
|
+
var NoEffectAdvancor = () => MapAdvancor(
|
|
1341
|
+
MapAdvancorHandler(YGOProMsgSelectChain, (msg) => {
|
|
1342
|
+
if (msg.chains.length) {
|
|
1343
|
+
return;
|
|
1344
|
+
}
|
|
1345
|
+
return msg.prepareResponse(void 0);
|
|
1346
|
+
})
|
|
1347
|
+
);
|
|
1348
|
+
|
|
1349
|
+
// src/advancors/combined-advancor.ts
|
|
1350
|
+
var CombinedAdvancor = (...advancors) => {
|
|
1351
|
+
return (msg) => {
|
|
1352
|
+
for (const advancor of advancors) {
|
|
1353
|
+
const res = advancor(msg);
|
|
1354
|
+
if (res != null) {
|
|
1355
|
+
return res;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
return void 0;
|
|
1359
|
+
};
|
|
1360
|
+
};
|
|
1361
|
+
|
|
1362
|
+
// src/advancors/limit-advancor.ts
|
|
1363
|
+
var LimitAdvancor = (a, limit = 1) => {
|
|
1364
|
+
let called = 0;
|
|
1365
|
+
return (msg) => {
|
|
1366
|
+
if (called >= limit) {
|
|
1367
|
+
return void 0;
|
|
1368
|
+
}
|
|
1369
|
+
const res = a(msg);
|
|
1370
|
+
if (res !== void 0) {
|
|
1371
|
+
called++;
|
|
1372
|
+
}
|
|
1373
|
+
return res;
|
|
1374
|
+
};
|
|
1375
|
+
};
|
|
1376
|
+
var OnceAdvancor = (a) => LimitAdvancor(a, 1);
|
|
1377
|
+
|
|
1378
|
+
// src/advancors/player-view-advancor.ts
|
|
1379
|
+
var PlayerViewAdvancor = (player, a) => (msg) => {
|
|
1380
|
+
if (msg.responsePlayer() === player) {
|
|
1381
|
+
return a(msg);
|
|
1382
|
+
}
|
|
1383
|
+
return void 0;
|
|
1384
|
+
};
|
|
1385
|
+
|
|
1386
|
+
// src/advancors/summon-place-advancor.ts
|
|
1387
|
+
import {
|
|
1388
|
+
YGOProMsgSelectPlace,
|
|
1389
|
+
YGOProMsgSelectPosition
|
|
1390
|
+
} from "ygopro-msg-encode";
|
|
1391
|
+
var SummonPlaceAdvancor = (placeAndPosition = {}) => MapAdvancor(
|
|
1392
|
+
MapAdvancorHandler(YGOProMsgSelectPlace, (msg) => {
|
|
1393
|
+
const places = msg.getSelectablePlaces().filter(
|
|
1394
|
+
(p) => (placeAndPosition.player == null || p.player === placeAndPosition.player) && (placeAndPosition.location == null || p.location === placeAndPosition.location) && (placeAndPosition.sequence == null || p.sequence === placeAndPosition.sequence)
|
|
1395
|
+
).slice(0, msg.count);
|
|
1396
|
+
return msg.prepareResponse(places);
|
|
1397
|
+
}),
|
|
1398
|
+
MapAdvancorHandler(YGOProMsgSelectPosition, (msg) => {
|
|
1399
|
+
if (placeAndPosition.position) {
|
|
1400
|
+
return msg.prepareResponse(placeAndPosition.position);
|
|
1401
|
+
}
|
|
1402
|
+
const possiblePositions = msg.positions;
|
|
1403
|
+
for (let i = 0; i < 8; i++) {
|
|
1404
|
+
const value = 1 << i;
|
|
1405
|
+
if ((possiblePositions & value) !== 0) {
|
|
1406
|
+
return msg.prepareResponse(value);
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
return void 0;
|
|
1410
|
+
})
|
|
1411
|
+
);
|
|
1412
|
+
|
|
1298
1413
|
// index.ts
|
|
1299
1414
|
if (typeof globalThis !== "undefined" && !globalThis.Buffer) {
|
|
1300
1415
|
globalThis.Buffer = Buffer2;
|
|
1301
1416
|
}
|
|
1302
1417
|
export {
|
|
1418
|
+
CombinedAdvancor,
|
|
1303
1419
|
DirCardReader,
|
|
1304
1420
|
DirReader,
|
|
1305
1421
|
DirScriptReader,
|
|
@@ -1307,17 +1423,26 @@ export {
|
|
|
1307
1423
|
LEN_EMPTY,
|
|
1308
1424
|
LEN_FAIL,
|
|
1309
1425
|
LEN_HEADER,
|
|
1426
|
+
LimitAdvancor,
|
|
1310
1427
|
MESSAGE_BUFFER_SIZE,
|
|
1428
|
+
MapAdvancor,
|
|
1429
|
+
MapAdvancorHandler,
|
|
1311
1430
|
MapReader,
|
|
1312
1431
|
MapScriptReader,
|
|
1432
|
+
NoEffectAdvancor,
|
|
1313
1433
|
OcgcoreDuel,
|
|
1314
1434
|
OcgcoreDuelOptionFlag,
|
|
1315
1435
|
OcgcoreDuelRule,
|
|
1316
1436
|
OcgcoreMessageType,
|
|
1317
1437
|
OcgcoreWrapper,
|
|
1438
|
+
OnceAdvancor,
|
|
1439
|
+
PlayerViewAdvancor,
|
|
1318
1440
|
QUERY_BUFFER_SIZE,
|
|
1319
1441
|
REGISTRY_BUFFER_SIZE,
|
|
1442
|
+
SlientAdvancor,
|
|
1320
1443
|
SqljsCardReader,
|
|
1444
|
+
StaticAdvancor,
|
|
1445
|
+
SummonPlaceAdvancor,
|
|
1321
1446
|
ZipReader,
|
|
1322
1447
|
ZipScriptReader,
|
|
1323
1448
|
vendor_exports as _OcgcoreConstants,
|