Commit 4ecf82ee authored by nanahira's avatar nanahira

add onResponse

parent 74add160
......@@ -28,7 +28,7 @@
"ygopro-cdb-encode": "^1.0.2",
"ygopro-deck-encode": "^1.0.15",
"ygopro-lflist-encode": "^1.0.3",
"ygopro-msg-encode": "^1.1.10",
"ygopro-msg-encode": "^1.1.13",
"ygopro-yrp-encode": "^1.0.1",
"yuzuthread": "^1.0.8"
},
......@@ -79,7 +79,6 @@
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
......@@ -1606,7 +1605,6 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
"integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
......@@ -1690,7 +1688,6 @@
"integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.55.0",
"@typescript-eslint/types": "8.55.0",
......@@ -2171,7 +2168,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
......@@ -2568,7 +2564,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
......@@ -3229,7 +3224,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
......@@ -3286,7 +3280,6 @@
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
......@@ -4163,7 +4156,6 @@
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.9.2.tgz",
"integrity": "sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"@ioredis/commands": "1.5.0",
"cluster-key-slot": "^1.1.0",
......@@ -4408,7 +4400,6 @@
"integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@jest/core": "30.2.0",
"@jest/types": "30.2.0",
......@@ -5851,7 +5842,6 @@
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
......@@ -6700,7 +6690,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
......@@ -6853,7 +6842,6 @@
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
......@@ -6962,7 +6950,6 @@
"resolved": "https://registry.npmjs.org/typed-struct/-/typed-struct-2.7.1.tgz",
"integrity": "sha512-GluzA9kYlHjATJmzBDA2X9G9237Md5zsJsc8uEkmpvUFeuUvt+e7Sq11/nQnVB2VZIfKNR1CrwTCgpJVz52pAA==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
......@@ -6989,7 +6976,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
......@@ -7439,9 +7425,9 @@
}
},
"node_modules/ygopro-msg-encode": {
"version": "1.1.10",
"resolved": "https://registry.npmjs.org/ygopro-msg-encode/-/ygopro-msg-encode-1.1.10.tgz",
"integrity": "sha512-lRTbBwf3Gr6x1hIvTeojdbcWw91/UlbYAhjgPgH9RgUk+2Av18iq8hayKkZgpjqbYhdlHqyZj4aBMgDI+F5eJw==",
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ygopro-msg-encode/-/ygopro-msg-encode-1.1.13.tgz",
"integrity": "sha512-wWRn6zH4kgg8vS2Z9CCzTAMwPe6WWjZLFizdtUEO6uY+uTNn+dMEIWQpQKHL4eAMXexNDZG1lVGm70eaIKeUkw==",
"license": "MIT",
"dependencies": {
"typed-reflector": "^1.0.14",
......
......@@ -27,6 +27,7 @@ export const defaultConfig = {
DECK_EXTRA_MAX: '15',
DECK_SIDE_MAX: '15',
DECK_MAX_COPIES: '3',
OCGCORE_DEBUG_LOG: '',
...(Object.fromEntries(
Object.entries(DefaultHostinfo).map(([key, value]) => [
`HOSTINFO_${key.toUpperCase()}`,
......
......@@ -9,7 +9,6 @@ export class OcgcoreWorkerOptions {
hostinfo: HostInfo;
@TransportType(() => [YGOProDeck])
decks: YGOProDeck[];
isTag?: boolean;
playerNames?: string[];
registry?: Record<string, string>;
isTag: boolean;
registry: Record<string, string>;
}
......@@ -32,7 +32,7 @@ import { OcgcoreWorkerOptions } from './ocgcore-worker-options';
import { Subject } from 'rxjs';
import { calculateDuelOptions } from '../utility/calculate-duel-options';
import initSqlJs from 'sql.js';
import { YGOProMessages, OcgcoreCommonConstants } from 'ygopro-msg-encode';
import { YGOProMessages } from 'ygopro-msg-encode';
const { OcgcoreScriptConstants } = _OcgcoreConstants;
......@@ -305,43 +305,17 @@ export class OcgcoreWorker {
return this.duel.queryFieldInfo({ noParse: true });
}
@WorkerMethod()
@TransportEncoder<OcgcoreProcessResult[], SerializableProcessResult[]>(
// serialize in worker: only send raw
(results) =>
results.map((result) => ({
length: result.length,
raw: result.raw,
status: result.status,
})),
// deserialize in main thread: re-parse from raw
(serializedArray) =>
serializedArray.map((serialized) => ({
length: serialized.length,
raw: serialized.raw,
status: serialized.status,
message:
serialized.raw.length > 0
? (() => {
try {
return YGOProMessages.getInstanceFromPayload(serialized.raw);
} catch {
return undefined;
}
})()
: undefined,
})),
)
async advance(): Promise<OcgcoreProcessResult[]> {
const results: OcgcoreProcessResult[] = [];
async *advance() {
while (true) {
const res = this.duel.process({ noParse: true });
results.push(res);
const res = await this.process();
if (!res.raw.length) {
continue;
}
yield res;
if (res.status > 0) {
break;
}
}
return results;
}
@WorkerMethod()
......
import YGOProDeck from 'ygopro-deck-encode';
import { YGOProYrp, ReplayHeader } from 'ygopro-yrp-encode';
import { Room } from './room';
import { YGOProMsgBase } from 'ygopro-msg-encode';
// Constants from ygopro
const REPLAY_COMPRESSED = 0x1;
......@@ -17,6 +18,7 @@ export class DuelRecord {
date = new Date();
winPosition?: number;
responses: Buffer[] = [];
messages: YGOProMsgBase[] = [];
toYrp(room: Room) {
const isTag = room.isTag;
......
This diff is collapsed.
import { AppContext, ProtoMiddlewareDispatcher } from 'nfkit';
import { Client } from '../client/client';
export class Emitter extends ProtoMiddlewareDispatcher<[Client]> {
export class Emitter extends ProtoMiddlewareDispatcher<[client: Client]> {
constructor(private ctx: AppContext) {
super({
acceptResult: () => true,
......
import { _OcgcoreConstants } from 'koishipro-core.js';
const { OcgcoreScriptConstants } = _OcgcoreConstants;
export function splitRefreshLocations(location: number) {
const bits = [
OcgcoreScriptConstants.LOCATION_MZONE,
OcgcoreScriptConstants.LOCATION_SZONE,
OcgcoreScriptConstants.LOCATION_HAND,
OcgcoreScriptConstants.LOCATION_GRAVE,
OcgcoreScriptConstants.LOCATION_REMOVED,
OcgcoreScriptConstants.LOCATION_EXTRA,
OcgcoreScriptConstants.LOCATION_DECK,
OcgcoreScriptConstants.LOCATION_OVERLAY,
OcgcoreScriptConstants.LOCATION_FZONE,
OcgcoreScriptConstants.LOCATION_PZONE,
];
const locations = bits.filter((bit) => (location & bit) !== 0);
if (locations.length > 0) {
return locations;
}
return [location];
}
export function getZoneQueryFlag(location: number) {
if (location === OcgcoreScriptConstants.LOCATION_MZONE) {
return 0x881fff;
}
if (location === OcgcoreScriptConstants.LOCATION_SZONE) {
return 0xe81fff;
}
if (location === OcgcoreScriptConstants.LOCATION_HAND) {
return 0x681fff;
}
if (location === OcgcoreScriptConstants.LOCATION_GRAVE) {
return 0x081fff;
}
if (location === OcgcoreScriptConstants.LOCATION_EXTRA) {
return 0xe81fff;
}
return 0xf81fff;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment