aboutsummaryrefslogtreecommitdiff
path: root/webAO/packets
diff options
context:
space:
mode:
Diffstat (limited to 'webAO/packets')
-rw-r--r--webAO/packets/handlers/handleARUP.ts42
-rw-r--r--webAO/packets/handlers/handleCC.ts9
-rw-r--r--webAO/packets/handlers/handleID.ts24
-rw-r--r--webAO/packets/handlers/handlePN.ts9
-rw-r--r--webAO/packets/handlers/handleRC.ts10
-rw-r--r--webAO/packets/handlers/handleSI.ts41
-rw-r--r--webAO/packets/handlers/handleaskchaa.ts10
7 files changed, 145 insertions, 0 deletions
diff --git a/webAO/packets/handlers/handleARUP.ts b/webAO/packets/handlers/handleARUP.ts
new file mode 100644
index 0000000..97db9cc
--- /dev/null
+++ b/webAO/packets/handlers/handleARUP.ts
@@ -0,0 +1,42 @@
+import { client } from "../../client";
+import { safeTags } from "../../encoding";
+
+/**
+ * Handle the change of players in an area.
+ * @param {Array} args packet arguments
+ */
+export const handleARUP = (args: string[]) => {
+ args = args.slice(1);
+ for (let i = 0; i < args.length - 2; i++) {
+ if (client.areas[i]) {
+ // the server sends us ARUP before we even get the area list
+ const thisarea = document.getElementById(`area${i}`)!;
+ switch (Number(args[0])) {
+ case 0: // playercount
+ client.areas[i].players = Number(args[i + 1]);
+ break;
+ case 1: // status
+ client.areas[i].status = safeTags(args[i + 1]);
+ break;
+ case 2:
+ client.areas[i].cm = safeTags(args[i + 1]);
+ break;
+ case 3:
+ client.areas[i].locked = safeTags(args[i + 1]);
+ break;
+ }
+
+ thisarea.className = `area-button area-${client.areas[
+ i
+ ].status.toLowerCase()}`;
+
+ thisarea.innerText = `${client.areas[i].name} (${client.areas[i].players}) [${client.areas[i].status}]`;
+
+ thisarea.title =
+ `Players: ${client.areas[i].players}\n` +
+ `Status: ${client.areas[i].status}\n` +
+ `CM: ${client.areas[i].cm}\n` +
+ `Area lock: ${client.areas[i].locked}`;
+ }
+ }
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleCC.ts b/webAO/packets/handlers/handleCC.ts
new file mode 100644
index 0000000..84e6ec0
--- /dev/null
+++ b/webAO/packets/handlers/handleCC.ts
@@ -0,0 +1,9 @@
+import { client } from "../../client";
+
+/**
+ * What? you want a character??
+ * @param {Array} args packet arguments
+ */
+export const handleCC = (args: string[]) => {
+ client.sendSelf(`PV#1#CID#${args[2]}#%`);
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleID.ts b/webAO/packets/handlers/handleID.ts
new file mode 100644
index 0000000..7def483
--- /dev/null
+++ b/webAO/packets/handlers/handleID.ts
@@ -0,0 +1,24 @@
+import { client, setOldLoading } from "../../client";
+
+
+/**
+ * Identifies the server and issues a playerID
+ * @param {Array} args packet arguments
+ */
+export const handleID = (args: string[]) => {
+ client.playerID = Number(args[1]);
+ const serverSoftware = args[2].split("&")[0];
+ let serverVersion;
+ if (serverSoftware === "serverD") {
+ serverVersion = args[2].split("&")[1];
+ } else if (serverSoftware === "webAO") {
+ setOldLoading(false);
+ client.sendSelf("PN#0#1#%");
+ } else {
+ serverVersion = args[3];
+ }
+
+ if (serverSoftware === "serverD" && serverVersion === "1377.152") {
+ setOldLoading(true);
+ } // bugged version
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handlePN.ts b/webAO/packets/handlers/handlePN.ts
new file mode 100644
index 0000000..b16f77d
--- /dev/null
+++ b/webAO/packets/handlers/handlePN.ts
@@ -0,0 +1,9 @@
+import { client } from "../../client";
+
+/**
+ * Indicates how many users are on this server
+ * @param {Array} args packet arguments
+ */
+export const handlePN = (_args: string[]) => {
+ client.sendServer("askchaa#%");
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleRC.ts b/webAO/packets/handlers/handleRC.ts
new file mode 100644
index 0000000..92c1e8e
--- /dev/null
+++ b/webAO/packets/handlers/handleRC.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+import vanilla_character_arr from "../../constants/characters.js";
+
+/**
+ * we are asking ourselves what characters there are
+ * @param {Array} args packet arguments
+ */
+export const handleRC = (_args: string[]) => {
+ client.sendSelf(`SC#${vanilla_character_arr.join("#")}#%`);
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleSI.ts b/webAO/packets/handlers/handleSI.ts
new file mode 100644
index 0000000..e040c83
--- /dev/null
+++ b/webAO/packets/handlers/handleSI.ts
@@ -0,0 +1,41 @@
+import { client, extrafeatures, oldLoading } from "../../client";
+
+
+/**
+ * Received when the server announces its server info,
+ * but we use it as a cue to begin retrieving characters.
+ * @param {Array} args packet arguments
+ */
+export const handleSI = (args: string[]) => {
+ client.char_list_length = Number(args[1]);
+ client.char_list_length += 1; // some servers count starting from 0 some from 1...
+ client.evidence_list_length = Number(args[2]);
+ client.music_list_length = Number(args[3]);
+
+ (<HTMLProgressElement>document.getElementById("client_loadingbar")).max =
+ client.char_list_length +
+ client.evidence_list_length +
+ client.music_list_length;
+
+ // create the charselect grid, to be filled by the character loader
+ document.getElementById("client_chartable")!.innerHTML = "";
+
+ for (let i = 0; i < client.char_list_length; i++) {
+ const demothing = document.createElement("img");
+
+ demothing.className = "demothing";
+ demothing.id = `demo_${i}`;
+ const demoonclick = document.createAttribute("onclick");
+ demoonclick.value = `pickChar(${i})`;
+ demothing.setAttributeNode(demoonclick);
+
+ document.getElementById("client_chartable")!.appendChild(demothing);
+ }
+
+ // this is determined at the top of this file
+ if (!oldLoading && extrafeatures.includes("fastloading")) {
+ client.sendServer("RC#%");
+ } else {
+ client.sendServer("askchar2#%");
+ }
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleaskchaa.ts b/webAO/packets/handlers/handleaskchaa.ts
new file mode 100644
index 0000000..5930bf0
--- /dev/null
+++ b/webAO/packets/handlers/handleaskchaa.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+import vanilla_character_arr from "../../constants/characters.js";
+
+/**
+ * What? you want a character list from me??
+ * @param {Array} args packet arguments
+ */
+export const handleaskchaa = (_args: string[]) => {
+ client.sendSelf(`SI#${vanilla_character_arr.length}#0#0#%`);
+}