aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2026-04-01 19:11:15 +0200
committerGitHub <noreply@github.com>2026-04-01 19:11:15 +0200
commit5789a0b3c238b7a569941a092ed00362403519f2 (patch)
tree5e62794fb06889de0e43957cb40f1e759a96c16c
parentd6163543f483c35737da52b7e307cf6f65828f82 (diff)
parentd24cdeff690017969cebdee08e91db89848fd7ed (diff)
Merge pull request #300 from AttorneyOnline/pick-char-and-area
Enable auto pick area and char
-rw-r--r--.gitignore2
-rw-r--r--webAO/client.ts3
-rw-r--r--webAO/packets/handlers/handleDONE.ts29
-rw-r--r--webAO/packets/handlers/handlePV.ts1
-rw-r--r--webAO/utils/queryParser.ts4
5 files changed, 37 insertions, 2 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/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..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 } from "../../client";
+import { client, clientState, autoChar, autoArea } from "../../client";
+import { area_click } from "../../dom/areaClick";
const { mode } = queryParser();
/**
@@ -16,4 +17,30 @@ export const handleDONE = (_args: string[]) => {
// Spectators don't need to pick a character
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.
+ 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) {
+ client.sender.sendCharacter(charIndex);
+ }
+ }
};
diff --git a/webAO/packets/handlers/handlePV.ts b/webAO/packets/handlers/handlePV.ts
index 1ee13c8..90e47f1 100644
--- a/webAO/packets/handlers/handlePV.ts
+++ b/webAO/packets/handlers/handlePV.ts
@@ -102,4 +102,5 @@ export const handlePV = async (args: string[]) => {
} else {
document.getElementById("button_4")!.style.display = "none";
}
+
};
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;
};