From db931bb13b99f7a058b178bc2460958b6356ca46 Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 1 Apr 2026 13:48:47 +0200 Subject: Enable auto pick area and char --- webAO/client.ts | 3 ++- webAO/packets/handlers/handleDONE.ts | 12 +++++++++++- webAO/packets/handlers/handlePV.ts | 12 +++++++++++- webAO/utils/queryParser.ts | 4 ++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/webAO/client.ts b/webAO/client.ts index 05a40c9..8a01526 100644 --- a/webAO/client.ts +++ b/webAO/client.ts @@ -22,7 +22,8 @@ import { } from "./client/fetchLists"; import getCookie from "./utils/getCookie"; import setCookie from "./utils/setCookie"; -const { ip: serverIP, connect, mode, theme, serverName } = queryParser(); +const { ip: serverIP, connect, mode, theme, serverName, char: autoChar, area: autoArea } = queryParser(); +export { autoChar, autoArea }; document.title = serverName; diff --git a/webAO/packets/handlers/handleDONE.ts b/webAO/packets/handlers/handleDONE.ts index 676c807..4cdd785 100644 --- a/webAO/packets/handlers/handleDONE.ts +++ b/webAO/packets/handlers/handleDONE.ts @@ -1,5 +1,6 @@ import queryParser from "../../utils/queryParser"; -import { client, clientState } from "../../client"; +import { client, clientState, autoChar } from "../../client"; +import { pickChar } from "../../dom/pickChar"; const { mode } = queryParser(); /** @@ -16,4 +17,13 @@ export const handleDONE = (_args: string[]) => { // Spectators don't need to pick a character document.getElementById("client_waiting")!.style.display = "none"; } + + if (autoChar) { + const charIndex = client.chars.findIndex( + (c: any) => c && c.name.toLowerCase() === autoChar.toLowerCase() + ); + if (charIndex !== -1) { + pickChar(charIndex); + } + } }; diff --git a/webAO/packets/handlers/handlePV.ts b/webAO/packets/handlers/handlePV.ts index 1ee13c8..13f2f00 100644 --- a/webAO/packets/handlers/handlePV.ts +++ b/webAO/packets/handlers/handlePV.ts @@ -1,4 +1,4 @@ -import { client } from "../../client"; +import { client, autoArea } from "../../client"; import fileExists from "../../utils/fileExists"; import { updateActionCommands } from "../../dom/updateActionCommands"; import { pickEmotion } from "../../dom/pickEmotion"; @@ -102,4 +102,14 @@ export const handlePV = async (args: string[]) => { } else { document.getElementById("button_4")!.style.display = "none"; } + + if (autoArea) { + const areaIndex = client.areas.findIndex( + (a: any) => a && a.name.toLowerCase() === autoArea.toLowerCase() + ); + if (areaIndex !== -1) { + client.sender.sendMusicChange(client.areas[areaIndex].name); + client.area = areaIndex; + } + } }; diff --git a/webAO/utils/queryParser.ts b/webAO/utils/queryParser.ts index 5263f6e..9a91795 100644 --- a/webAO/utils/queryParser.ts +++ b/webAO/utils/queryParser.ts @@ -7,6 +7,8 @@ interface QueryParams { asset: string; theme: string; serverName: string; + char: string; + area: string; } const queryParser = (): QueryParams => { @@ -19,6 +21,8 @@ const queryParser = (): QueryParams => { asset: urlParams.get("asset") || `${protocol}//attorneyoffline.de/base/`, theme: urlParams.get("theme") || "default", serverName: urlParams.get("serverName") || "Attorney Online session", + char: urlParams.get("char") || "", + area: urlParams.get("area") || "", }; return queryParams as QueryParams; }; -- cgit From 679f0d1b683c40dad541b476eec74f32bf5cdd0e Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 1 Apr 2026 14:01:03 +0200 Subject: fix char select bug --- webAO/packets/handlers/handlePV.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/webAO/packets/handlers/handlePV.ts b/webAO/packets/handlers/handlePV.ts index 13f2f00..3cf7dd5 100644 --- a/webAO/packets/handlers/handlePV.ts +++ b/webAO/packets/handlers/handlePV.ts @@ -4,6 +4,9 @@ import { updateActionCommands } from "../../dom/updateActionCommands"; import { pickEmotion } from "../../dom/pickEmotion"; import { AO_HOST } from "../../client/aoHost"; import { ensureCharIni } from "../../client/handleCharacterInfo"; +import { area_click } from "../../dom/areaClick"; + +let autoAreaDone = false; function addEmoteButton(i: number, imgurl: string, desc: string) { const emotesList = document.getElementById("client_emo"); @@ -103,13 +106,16 @@ export const handlePV = async (args: string[]) => { document.getElementById("button_4")!.style.display = "none"; } - if (autoArea) { + if (autoArea && !autoAreaDone) { + autoAreaDone = true; const areaIndex = client.areas.findIndex( (a: any) => a && a.name.toLowerCase() === autoArea.toLowerCase() ); if (areaIndex !== -1) { - client.sender.sendMusicChange(client.areas[areaIndex].name); - client.area = areaIndex; + const el = document.getElementById(`area${areaIndex}`); + if (el) { + area_click(el as HTMLElement); + } } } }; -- cgit From 1d96e313911bcd8705392e8c75cd2275c604225f Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 1 Apr 2026 14:07:23 +0200 Subject: always hide charselect --- webAO/packets/handlers/handleDONE.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/webAO/packets/handlers/handleDONE.ts b/webAO/packets/handlers/handleDONE.ts index 4cdd785..c4e2454 100644 --- a/webAO/packets/handlers/handleDONE.ts +++ b/webAO/packets/handlers/handleDONE.ts @@ -1,6 +1,5 @@ import queryParser from "../../utils/queryParser"; import { client, clientState, autoChar } from "../../client"; -import { pickChar } from "../../dom/pickChar"; const { mode } = queryParser(); /** @@ -19,11 +18,16 @@ export const handleDONE = (_args: string[]) => { } if (autoChar) { + // Hide charselect immediately (spectator mode) so the user isn't stuck + // on the selection screen. If the CC request succeeds, PV will confirm it. + document.getElementById("client_waiting")!.style.display = "none"; + document.getElementById("client_charselect")!.style.display = "none"; + const charIndex = client.chars.findIndex( (c: any) => c && c.name.toLowerCase() === autoChar.toLowerCase() ); if (charIndex !== -1) { - pickChar(charIndex); + client.sender.sendCharacter(charIndex); } } }; -- cgit From d24cdeff690017969cebdee08e91db89848fd7ed Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 1 Apr 2026 14:22:29 +0200 Subject: fix only area bug --- .gitignore | 2 ++ webAO/packets/handlers/handleDONE.ts | 15 ++++++++++++++- webAO/packets/handlers/handlePV.ts | 17 +---------------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 8f8f9bf..44ae452 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,5 @@ node_modules # lockfiles bun.lock package-lock.json + +.claude diff --git a/webAO/packets/handlers/handleDONE.ts b/webAO/packets/handlers/handleDONE.ts index c4e2454..947e2a1 100644 --- a/webAO/packets/handlers/handleDONE.ts +++ b/webAO/packets/handlers/handleDONE.ts @@ -1,5 +1,6 @@ import queryParser from "../../utils/queryParser"; -import { client, clientState, autoChar } from "../../client"; +import { client, clientState, autoChar, autoArea } from "../../client"; +import { area_click } from "../../dom/areaClick"; const { mode } = queryParser(); /** @@ -17,6 +18,18 @@ export const handleDONE = (_args: string[]) => { document.getElementById("client_waiting")!.style.display = "none"; } + if (autoArea) { + const areaIndex = client.areas.findIndex( + (a: any) => a && a.name.toLowerCase() === autoArea.toLowerCase() + ); + if (areaIndex !== -1) { + const el = document.getElementById(`area${areaIndex}`); + if (el) { + area_click(el as HTMLElement); + } + } + } + if (autoChar) { // Hide charselect immediately (spectator mode) so the user isn't stuck // on the selection screen. If the CC request succeeds, PV will confirm it. diff --git a/webAO/packets/handlers/handlePV.ts b/webAO/packets/handlers/handlePV.ts index 3cf7dd5..90e47f1 100644 --- a/webAO/packets/handlers/handlePV.ts +++ b/webAO/packets/handlers/handlePV.ts @@ -1,12 +1,9 @@ -import { client, autoArea } from "../../client"; +import { client } from "../../client"; import fileExists from "../../utils/fileExists"; import { updateActionCommands } from "../../dom/updateActionCommands"; import { pickEmotion } from "../../dom/pickEmotion"; import { AO_HOST } from "../../client/aoHost"; import { ensureCharIni } from "../../client/handleCharacterInfo"; -import { area_click } from "../../dom/areaClick"; - -let autoAreaDone = false; function addEmoteButton(i: number, imgurl: string, desc: string) { const emotesList = document.getElementById("client_emo"); @@ -106,16 +103,4 @@ export const handlePV = async (args: string[]) => { document.getElementById("button_4")!.style.display = "none"; } - if (autoArea && !autoAreaDone) { - autoAreaDone = true; - const areaIndex = client.areas.findIndex( - (a: any) => a && a.name.toLowerCase() === autoArea.toLowerCase() - ); - if (areaIndex !== -1) { - const el = document.getElementById(`area${areaIndex}`); - if (el) { - area_click(el as HTMLElement); - } - } - } }; -- cgit