aboutsummaryrefslogtreecommitdiff
path: root/webAO/client/sender
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2022-10-12 18:25:14 +0200
committerstonedDiscord <Tukz@gmx.de>2022-10-12 18:25:14 +0200
commit8a7942c0565298c29edbf0b271d5d7c7f9e56fd8 (patch)
tree67b788f40b7a4713904836de05f0e5876c32bd79 /webAO/client/sender
parenta83c8962b68f2cc0a0e22d988b8ff030057454e5 (diff)
parent82983e0c38383ec2602b4f41327342d1c8d0a8fd (diff)
Merge branch 'master' into 2fa
Diffstat (limited to 'webAO/client/sender')
-rw-r--r--webAO/client/sender/index.ts68
-rw-r--r--webAO/client/sender/sendCharacter.ts11
-rw-r--r--webAO/client/sender/sendCheck.ts8
-rw-r--r--webAO/client/sender/sendDE.ts9
-rw-r--r--webAO/client/sender/sendEE.ts16
-rw-r--r--webAO/client/sender/sendHP.ts10
-rw-r--r--webAO/client/sender/sendIC.ts106
-rw-r--r--webAO/client/sender/sendMusic.ts10
-rw-r--r--webAO/client/sender/sendMusicChange.ts10
-rw-r--r--webAO/client/sender/sendOOC.ts33
-rw-r--r--webAO/client/sender/sendPE.ts14
-rw-r--r--webAO/client/sender/sendRT.ts9
-rw-r--r--webAO/client/sender/sendSelf.ts13
-rw-r--r--webAO/client/sender/sendServer.ts10
-rw-r--r--webAO/client/sender/sendZZ.ts13
15 files changed, 340 insertions, 0 deletions
diff --git a/webAO/client/sender/index.ts b/webAO/client/sender/index.ts
new file mode 100644
index 0000000..41a6bd5
--- /dev/null
+++ b/webAO/client/sender/index.ts
@@ -0,0 +1,68 @@
+import { sendIC } from "./sendIC";
+import { sendSelf } from './sendSelf'
+import { sendServer } from './sendServer'
+import { sendCheck } from './sendCheck'
+import {sendHP} from './sendHP'
+import {sendOOC} from './sendOOC'
+import {sendCharacter} from './sendCharacter'
+import {sendRT} from './sendRT'
+import {sendMusicChange} from './sendMusicChange'
+import {sendZZ} from './sendZZ'
+import {sendEE} from './sendEE'
+import {sendDE} from './sendDE'
+import {sendPE} from './sendPE'
+export interface ISender {
+ sendIC: (deskmod: number,
+ preanim: string,
+ name: string,
+ emote: string,
+ message: string,
+ side: string,
+ sfx_name: string,
+ emote_modifier: number,
+ sfx_delay: number,
+ objection_modifier: number,
+ evidence: number,
+ flip: boolean,
+ realization: boolean,
+ text_color: number,
+ showname: string,
+ other_charid: string,
+ self_hoffset: number,
+ self_yoffset: number,
+ noninterrupting_preanim: boolean,
+ looping_sfx: boolean,
+ screenshake: boolean,
+ frame_screenshake: string,
+ frame_realization: string,
+ frame_sfx: string,
+ additive: boolean,
+ effect: string) => void
+ sendSelf: (message: string) => void
+ sendServer: (message: string) => void
+ sendCheck: () => void
+ sendHP: (side: number, hp: number) => void
+ sendOOC: (message: string) => void
+ sendCharacter: (character: number) => void
+ sendRT: (testimony: string) => void
+ sendMusicChange: (track: string) => void
+ sendZZ: (msg: string) => void
+ sendEE: (id: number, name: string, desc: string, img: string) => void
+ sendDE: (id: number) => void
+ sendPE: (name: string, desc: string, img: string) => void
+}
+export const sender = {
+ sendIC,
+ sendSelf,
+ sendServer,
+ sendCheck,
+ sendHP,
+ sendOOC,
+ sendCharacter,
+ sendRT,
+ sendMusicChange,
+ sendZZ,
+ sendEE,
+ sendDE,
+ sendPE
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendCharacter.ts b/webAO/client/sender/sendCharacter.ts
new file mode 100644
index 0000000..5e81727
--- /dev/null
+++ b/webAO/client/sender/sendCharacter.ts
@@ -0,0 +1,11 @@
+import { client } from "../../client";
+
+/**
+ * Requests to play as a specified character.
+ * @param {number} character the character ID
+ */
+export const sendCharacter = (character: number) => {
+ if (character === -1 || client.chars[character].name) {
+ client.sender.sendServer(`CC#${client.playerID}#${character}#web#%`);
+ }
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendCheck.ts b/webAO/client/sender/sendCheck.ts
new file mode 100644
index 0000000..91b3a02
--- /dev/null
+++ b/webAO/client/sender/sendCheck.ts
@@ -0,0 +1,8 @@
+import { client } from "../../client";
+
+/**
+ * Sends a keepalive packet.
+ */
+export const sendCheck = () => {
+ client.sender.sendServer(`CH#${client.charID}#%`);
+}
diff --git a/webAO/client/sender/sendDE.ts b/webAO/client/sender/sendDE.ts
new file mode 100644
index 0000000..4d94d65
--- /dev/null
+++ b/webAO/client/sender/sendDE.ts
@@ -0,0 +1,9 @@
+import { client } from "../../client";
+
+/**
+ * Sends delete evidence command.
+ * @param {number} evidence id
+ */
+export const sendDE = (id: number) => {
+ client.sender.sendServer(`DE#${id}#%`);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendEE.ts b/webAO/client/sender/sendEE.ts
new file mode 100644
index 0000000..7c5bfe3
--- /dev/null
+++ b/webAO/client/sender/sendEE.ts
@@ -0,0 +1,16 @@
+import { client } from "../../client";
+import { escapeChat } from "../../encoding";
+
+
+/**
+ * Sends edit evidence command.
+ * @param {number} evidence id
+ * @param {string} evidence name
+ * @param {string} evidence description
+ * @param {string} evidence image filename
+ */
+export const sendEE = (id: number, name: string, desc: string, img: string) => {
+ client.sender.sendServer(
+ `EE#${id}#${escapeChat(name)}#${escapeChat(desc)}#${escapeChat(img)}#%`
+ );
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendHP.ts b/webAO/client/sender/sendHP.ts
new file mode 100644
index 0000000..d007094
--- /dev/null
+++ b/webAO/client/sender/sendHP.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+
+/**
+ * Sends health point command.
+ * @param {number} side the position
+ * @param {number} hp the health point
+ */
+export const sendHP = (side: number, hp: number) => {
+ client.sender.sendServer(`HP#${side}#${hp}#%`);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendIC.ts b/webAO/client/sender/sendIC.ts
new file mode 100644
index 0000000..9064115
--- /dev/null
+++ b/webAO/client/sender/sendIC.ts
@@ -0,0 +1,106 @@
+import { extrafeatures } from "../../client";
+import { escapeChat } from "../../encoding";
+import {client} from '../../client'
+import queryParser from "../../utils/queryParser";
+let {mode} = queryParser()
+
+/**
+ * Sends an in-character chat message.
+ * @param {number} deskmod controls the desk
+ * @param {string} speaking who is speaking
+ * @param {string} name the name of the current character
+ * @param {string} silent whether or not it's silent
+ * @param {string} message the message to be sent
+ * @param {string} side the name of the side in the background
+ * @param {string} sfx_name the name of the sound effect
+ * @param {number} emote_modifier whether or not to zoom
+ * @param {number} sfx_delay the delay (in milliseconds) to play the sound effect
+ * @param {number} objection_modifier the number of the shout to play
+ * @param {string} evidence the filename of evidence to show
+ * @param {boolean} flip change to 1 to reverse sprite for position changes
+ * @param {boolean} realization screen flash effect
+ * @param {number} text_color text color
+ * @param {string} showname custom name to be displayed (optional)
+ * @param {number} other_charid paired character (optional)
+ * @param {number} self_offset offset to paired character (optional)
+ * @param {number} noninterrupting_preanim play the full preanim (optional)
+ */
+export const sendIC = (
+ deskmod: number,
+ preanim: string,
+ name: string,
+ emote: string,
+ message: string,
+ side: string,
+ sfx_name: string,
+ emote_modifier: number,
+ sfx_delay: number,
+ objection_modifier: number,
+ evidence: number,
+ flip: boolean,
+ realization: boolean,
+ text_color: number,
+ showname: string,
+ other_charid: string,
+ self_hoffset: number,
+ self_yoffset: number,
+ noninterrupting_preanim: boolean,
+ looping_sfx: boolean,
+ screenshake: boolean,
+ frame_screenshake: string,
+ frame_realization: string,
+ frame_sfx: string,
+ additive: boolean,
+ effect: string
+) => {
+ let extra_cccc = "";
+ let other_emote = "";
+ let other_offset = "";
+ let extra_27 = "";
+ let extra_28 = "";
+
+ if (extrafeatures.includes("cccc_ic_support")) {
+ const self_offset = extrafeatures.includes("y_offset")
+ ? `${self_hoffset}<and>${self_yoffset}`
+ : self_hoffset; // HACK: this should be an & but client fucked it up and all the servers adopted it
+ if (mode === "replay") {
+ other_emote = "##";
+ other_offset = "#0#0";
+ }
+ extra_cccc = `${escapeChat(
+ showname
+ )}#${other_charid}${other_emote}#${self_offset}${other_offset}#${Number(
+ noninterrupting_preanim
+ )}#`;
+
+ if (extrafeatures.includes("looping_sfx")) {
+ extra_27 = `${Number(looping_sfx)}#${Number(
+ screenshake
+ )}#${frame_screenshake}#${frame_realization}#${frame_sfx}#`;
+ if (extrafeatures.includes("effects")) {
+ extra_28 = `${Number(additive)}#${escapeChat(effect)}#`;
+ }
+ }
+ }
+
+ const serverMessage =
+ `MS#${deskmod}#${escapeChat(preanim)}#${escapeChat(name)}#${escapeChat(
+ emote
+ )}` +
+ `#${escapeChat(message)}#${escapeChat(side)}#${escapeChat(
+ sfx_name
+ )}#${emote_modifier}` +
+ `#${client.charID}#${sfx_delay}#${Number(objection_modifier)}#${Number(
+ evidence
+ )}#${Number(flip)}#${Number(
+ realization
+ )}#${text_color}#${extra_cccc}${extra_27}${extra_28}%`;
+
+ client.sender.sendServer(serverMessage);
+ if (mode === "replay") {
+ (<HTMLInputElement>(
+ document.getElementById("client_ooclog")
+ )).value += `wait#${(<HTMLInputElement>document.getElementById("client_replaytimer")).value
+ }#%\r\n`;
+ }
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendMusic.ts b/webAO/client/sender/sendMusic.ts
new file mode 100644
index 0000000..eceba08
--- /dev/null
+++ b/webAO/client/sender/sendMusic.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+
+
+/**
+ * Requests to select a music track.
+ * @param {number?} song the song to be played
+ */
+export const sendMusic = (song: string) => {
+ client.sender.sendServer(`MC#${song}#${client.charID}#%`);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendMusicChange.ts b/webAO/client/sender/sendMusicChange.ts
new file mode 100644
index 0000000..50c6306
--- /dev/null
+++ b/webAO/client/sender/sendMusicChange.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+
+
+/**
+ * Requests to change the music to the specified track.
+ * @param {string} track the track ID
+ */
+export const sendMusicChange = (track: string) => {
+ client.sender.sendServer(`MC#${track}#${client.charID}#%`);
+}
diff --git a/webAO/client/sender/sendOOC.ts b/webAO/client/sender/sendOOC.ts
new file mode 100644
index 0000000..9674ad9
--- /dev/null
+++ b/webAO/client/sender/sendOOC.ts
@@ -0,0 +1,33 @@
+import { client } from '../../client'
+import { escapeChat } from '../../encoding';
+import setCookie from '../../utils/setCookie';
+import { saveChatlogHandle } from '../../client/saveChatLogHandle'
+/**
+ * Sends an out-of-character chat message.
+ * @param {string} message the message to send
+ */
+export const sendOOC = (message: string) => {
+ setCookie(
+ "OOC_name",
+ (<HTMLInputElement>document.getElementById("OOC_name")).value
+ );
+ const oocName = `${escapeChat(
+ (<HTMLInputElement>document.getElementById("OOC_name")).value
+ )}`;
+ const oocMessage = `${escapeChat(message)}`;
+
+ const commands = {
+ "/save_chatlog": saveChatlogHandle,
+ };
+ const commandsMap = new Map(Object.entries(commands));
+
+ if (oocMessage && commandsMap.has(oocMessage.toLowerCase())) {
+ try {
+ commandsMap.get(oocMessage.toLowerCase())();
+ } catch (e) {
+ // Command Not Recognized
+ }
+ } else {
+ client.sender.sendServer(`CT#${oocName}#${oocMessage}#%`);
+ }
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendPE.ts b/webAO/client/sender/sendPE.ts
new file mode 100644
index 0000000..984fc4d
--- /dev/null
+++ b/webAO/client/sender/sendPE.ts
@@ -0,0 +1,14 @@
+import { client } from "../../client";
+import { escapeChat } from "../../encoding";
+
+/**
+ * Sends add evidence command.
+ * @param {string} evidence name
+ * @param {string} evidence description
+ * @param {string} evidence image filename
+ */
+export const sendPE = (name: string, desc: string, img: string) => {
+ client.sender.sendServer(
+ `PE#${escapeChat(name)}#${escapeChat(desc)}#${escapeChat(img)}#%`
+ );
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendRT.ts b/webAO/client/sender/sendRT.ts
new file mode 100644
index 0000000..2d6c60a
--- /dev/null
+++ b/webAO/client/sender/sendRT.ts
@@ -0,0 +1,9 @@
+import { client } from "../../client";
+
+/**
+ * Sends testimony command.
+ * @param {string} testimony type
+ */
+export const sendRT = (testimony: string) => {
+ client.sender.sendServer(`RT#${testimony}#%`);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendSelf.ts b/webAO/client/sender/sendSelf.ts
new file mode 100644
index 0000000..66c35fa
--- /dev/null
+++ b/webAO/client/sender/sendSelf.ts
@@ -0,0 +1,13 @@
+import { client } from "../../client";
+
+
+/**
+ * Hook for sending messages to the client
+ * @param {string} message the message to send
+ */
+export const sendSelf = (message: string) => {
+ (<HTMLInputElement>(
+ document.getElementById("client_ooclog")
+ )).value += `${message}\r\n`;
+ client.handleSelf(message);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendServer.ts b/webAO/client/sender/sendServer.ts
new file mode 100644
index 0000000..a9da3bd
--- /dev/null
+++ b/webAO/client/sender/sendServer.ts
@@ -0,0 +1,10 @@
+import { client } from "../../client";
+import queryParser from "../../utils/queryParser";
+let { mode } = queryParser()
+/**
+ * Hook for sending messages to the server
+ * @param {string} message the message to send
+ */
+export const sendServer = (message: string) => {
+ mode === "replay" ? client.sender.sendSelf(message) : client.serv.send(message);
+} \ No newline at end of file
diff --git a/webAO/client/sender/sendZZ.ts b/webAO/client/sender/sendZZ.ts
new file mode 100644
index 0000000..237ab37
--- /dev/null
+++ b/webAO/client/sender/sendZZ.ts
@@ -0,0 +1,13 @@
+import { client, extrafeatures } from "../../client";
+
+/**
+ * Sends call mod command.
+ * @param {string} message to mod
+ */
+export const sendZZ = (msg: string) => {
+ if (extrafeatures.includes("modcall_reason")) {
+ client.sender.sendServer(`ZZ#${msg}#%`);
+ } else {
+ client.sender.sendServer("ZZ#%");
+ }
+} \ No newline at end of file