aboutsummaryrefslogtreecommitdiff
path: root/webAO/packets/handlers
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2022-08-30 22:39:43 +0200
committerGitHub <noreply@github.com>2022-08-30 22:39:43 +0200
commitcced5e71d9004eaf34156935d214eac82204ab4b (patch)
treeaf3481664cebef9e0f1afbfe74629084c897ec40 /webAO/packets/handlers
parent325aa41d1216facbb7228743930a8ad21afec7aa (diff)
parent3d6e61c6b0962cea539c6d780d68a7ad0b64bee1 (diff)
Merge pull request #155 from caleb-mabry/move-two-packets
Move three packets
Diffstat (limited to 'webAO/packets/handlers')
-rw-r--r--webAO/packets/handlers/handleCT.ts17
-rw-r--r--webAO/packets/handlers/handleMC.ts41
-rw-r--r--webAO/packets/handlers/handleRMC.ts24
3 files changed, 82 insertions, 0 deletions
diff --git a/webAO/packets/handlers/handleCT.ts b/webAO/packets/handlers/handleCT.ts
new file mode 100644
index 0000000..cff9b24
--- /dev/null
+++ b/webAO/packets/handlers/handleCT.ts
@@ -0,0 +1,17 @@
+import queryParser from '../../utils/queryParser'
+import { prepChat } from '../../encoding'
+let { mode } = queryParser();
+
+/**
+ * Handles an out-of-character chat message.
+ * @param {Array} args packet arguments
+ */
+export const handleCT = (args: string[]) => {
+ if (mode !== "replay") {
+ const oocLog = document.getElementById("client_ooclog")!;
+ oocLog.innerHTML += `${prepChat(args[1])}: ${prepChat(args[2])}\r\n`;
+ if (oocLog.scrollTop > oocLog.scrollHeight - 600) {
+ oocLog.scrollTop = oocLog.scrollHeight;
+ }
+ }
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleMC.ts b/webAO/packets/handlers/handleMC.ts
new file mode 100644
index 0000000..28254ba
--- /dev/null
+++ b/webAO/packets/handlers/handleMC.ts
@@ -0,0 +1,41 @@
+import { prepChat } from "../../encoding";
+import { AO_HOST, appendICLog, client } from '../../client'
+
+/**
+ * Handles a music change to an arbitrary resource.
+ * @param {Array} args packet arguments
+ */
+export const handleMC = (args: string[]) => {
+ const track = prepChat(args[1]);
+ let charID = Number(args[2]);
+ const showname = args[3] || "";
+ const looping = Boolean(args[4]);
+ const channel = Number(args[5]) || 0;
+ // const fading = Number(args[6]) || 0; // unused in web
+
+ const music = client.viewport.music[channel];
+ let musicname;
+ music.pause();
+ if (track.startsWith("http")) {
+ music.src = track;
+ } else {
+ music.src = `${AO_HOST}sounds/music/${encodeURI(track.toLowerCase())}`;
+ }
+ music.loop = looping;
+ music.play();
+
+ try {
+ musicname = client.chars[charID].name;
+ } catch (e) {
+ charID = -1;
+ }
+
+ if (charID >= 0) {
+ musicname = client.chars[charID].name;
+ appendICLog(`${musicname} changed music to ${track}`);
+ } else {
+ appendICLog(`The music was changed to ${track}`);
+ }
+
+ document.getElementById("client_trackstatustext")!.innerText = track;
+} \ No newline at end of file
diff --git a/webAO/packets/handlers/handleRMC.ts b/webAO/packets/handlers/handleRMC.ts
new file mode 100644
index 0000000..ada1ad2
--- /dev/null
+++ b/webAO/packets/handlers/handleRMC.ts
@@ -0,0 +1,24 @@
+import { client } from '../../client'
+// TODO BUG:
+// this.viewport.music is an array. Therefore you must access elements
+/**
+ * Handles a music change to an arbitrary resource, with an offset in seconds.
+ * @param {Array} args packet arguments
+ */
+export const handleRMC = (args: string[]) => {
+ client.viewport.music.pause();
+ const { music } = client.viewport;
+ // Music offset + drift from song loading
+ music.totime = args[1];
+ music.offset = new Date().getTime() / 1000;
+ music.addEventListener(
+ "loadedmetadata",
+ () => {
+ music.currentTime += parseFloat(
+ music.totime + (new Date().getTime() / 1000 - music.offset)
+ ).toFixed(3);
+ music.play();
+ },
+ false
+ );
+} \ No newline at end of file