aboutsummaryrefslogtreecommitdiff
path: root/webAO
diff options
context:
space:
mode:
Diffstat (limited to 'webAO')
-rw-r--r--webAO/client.ts602
-rw-r--r--webAO/client/addTrack.ts19
-rw-r--r--webAO/client/aoHost.ts20
-rw-r--r--webAO/client/appendICLog.ts93
-rw-r--r--webAO/client/checkCallword.ts16
-rw-r--r--webAO/client/createArea.ts46
-rw-r--r--webAO/client/fetchLists.ts110
-rw-r--r--webAO/client/fixLastArea.ts15
-rw-r--r--webAO/client/handleBans.ts16
-rw-r--r--webAO/client/handleCharacterInfo.ts162
-rw-r--r--webAO/client/isAudio.ts10
-rw-r--r--webAO/client/isCategory.ts10
-rw-r--r--webAO/client/isLowMemory.ts18
-rw-r--r--webAO/client/loadResources.ts129
-rw-r--r--webAO/client/resetICParams.ts22
-rw-r--r--webAO/client/saveChatLogHandle.ts40
-rw-r--r--webAO/client/sender/index.ts136
-rw-r--r--webAO/client/sender/sendCharacter.ts8
-rw-r--r--webAO/client/sender/sendCheck.ts4
-rw-r--r--webAO/client/sender/sendDE.ts4
-rw-r--r--webAO/client/sender/sendEE.ts9
-rw-r--r--webAO/client/sender/sendHP.ts4
-rw-r--r--webAO/client/sender/sendIC.ts148
-rw-r--r--webAO/client/sender/sendMA.ts4
-rw-r--r--webAO/client/sender/sendMusicChange.ts5
-rw-r--r--webAO/client/sender/sendOOC.ts50
-rw-r--r--webAO/client/sender/sendPE.ts8
-rw-r--r--webAO/client/sender/sendRT.ts4
-rw-r--r--webAO/client/sender/sendSelf.ts10
-rw-r--r--webAO/client/sender/sendServer.ts10
-rw-r--r--webAO/client/sender/sendZZ.ts12
-rw-r--r--webAO/client/setEmote.ts78
-rw-r--r--webAO/dom/addEvidence.ts24
-rw-r--r--webAO/dom/addHPD.ts4
-rw-r--r--webAO/dom/addHPP.ts4
-rw-r--r--webAO/dom/areaClick.ts22
-rw-r--r--webAO/dom/banPlayer.ts20
-rw-r--r--webAO/dom/callMod.ts20
-rw-r--r--webAO/dom/cancelEvidence.ts52
-rw-r--r--webAO/dom/changeBackgroundOOC.ts38
-rw-r--r--webAO/dom/changeBlipVolume.ts18
-rw-r--r--webAO/dom/changeCallwords.ts14
-rw-r--r--webAO/dom/changeCharacter.ts9
-rw-r--r--webAO/dom/changeMusicVolume.ts22
-rw-r--r--webAO/dom/changeRoleOOC.ts14
-rw-r--r--webAO/dom/charError.ts8
-rw-r--r--webAO/dom/charTableFilter.ts26
-rw-r--r--webAO/dom/deleteEvidence.ts8
-rw-r--r--webAO/dom/editEvidence.ts32
-rw-r--r--webAO/dom/getIndexFromSelect.ts16
-rw-r--r--webAO/dom/guilty.ts4
-rw-r--r--webAO/dom/imgError.ts8
-rw-r--r--webAO/dom/iniEdit.ts15
-rw-r--r--webAO/dom/initCE.ts4
-rw-r--r--webAO/dom/initWT.ts4
-rw-r--r--webAO/dom/modCallTest.ts4
-rw-r--r--webAO/dom/musicListClick.ts24
-rw-r--r--webAO/dom/musicListFilter.ts22
-rw-r--r--webAO/dom/muteListClick.ts22
-rw-r--r--webAO/dom/notGuilty.ts4
-rw-r--r--webAO/dom/onEnter.ts178
-rw-r--r--webAO/dom/onOOCEnter.ts14
-rw-r--r--webAO/dom/onReplayGo.ts4
-rw-r--r--webAO/dom/opusCheck.ts30
-rw-r--r--webAO/dom/pickChar.ts14
-rw-r--r--webAO/dom/pickEmotion.ts32
-rw-r--r--webAO/dom/pickEvidence.ts81
-rw-r--r--webAO/dom/randomCharacterOOC.ts6
-rw-r--r--webAO/dom/reconnectButton.ts12
-rw-r--r--webAO/dom/redHPD.ts4
-rw-r--r--webAO/dom/redHPP.ts4
-rw-r--r--webAO/dom/reloadTheme.ts20
-rw-r--r--webAO/dom/resetOffset.ts7
-rw-r--r--webAO/dom/resizeChatbox.ts95
-rw-r--r--webAO/dom/setChatbox.ts34
-rw-r--r--webAO/dom/showNameClick.ts29
-rw-r--r--webAO/dom/switchAspectRatio.ts28
-rw-r--r--webAO/dom/switchChatOffset.ts24
-rw-r--r--webAO/dom/switchPanTilt.ts18
-rw-r--r--webAO/dom/toggleMenu.ts18
-rw-r--r--webAO/dom/toggleShout.ts21
-rw-r--r--webAO/dom/twofactor.ts8
-rw-r--r--webAO/dom/updateActionCommands.ts39
-rw-r--r--webAO/dom/updateBackgroundPreview.ts42
-rw-r--r--webAO/dom/updateEvidenceIcon.ts40
-rw-r--r--webAO/dom/updateIniswap.ts20
-rw-r--r--webAO/dom/updatePlayerAreas.ts30
-rw-r--r--webAO/dom/window.ts116
-rw-r--r--webAO/encoding.ts40
-rw-r--r--webAO/master.ts310
-rw-r--r--webAO/packets/handlers/handleARUP.ts66
-rw-r--r--webAO/packets/handlers/handleASS.ts14
-rw-r--r--webAO/packets/handlers/handleAUTH.ts15
-rw-r--r--webAO/packets/handlers/handleBB.ts5
-rw-r--r--webAO/packets/handlers/handleBD.ts9
-rw-r--r--webAO/packets/handlers/handleBN.ts141
-rw-r--r--webAO/packets/handlers/handleCC.ts4
-rw-r--r--webAO/packets/handlers/handleCI.ts39
-rw-r--r--webAO/packets/handlers/handleCT.ts39
-rw-r--r--webAO/packets/handlers/handleCharsCheck.ts16
-rw-r--r--webAO/packets/handlers/handleDONE.ts14
-rw-r--r--webAO/packets/handlers/handleEI.ts31
-rw-r--r--webAO/packets/handlers/handleEM.ts58
-rw-r--r--webAO/packets/handlers/handleFA.ts16
-rw-r--r--webAO/packets/handlers/handleFL.ts72
-rw-r--r--webAO/packets/handlers/handleFM.ts12
-rw-r--r--webAO/packets/handlers/handleHI.ts11
-rw-r--r--webAO/packets/handlers/handleHP.ts29
-rw-r--r--webAO/packets/handlers/handleID.ts42
-rw-r--r--webAO/packets/handlers/handleJD.ts22
-rw-r--r--webAO/packets/handlers/handleKB.ts8
-rw-r--r--webAO/packets/handlers/handleKK.ts6
-rw-r--r--webAO/packets/handlers/handleLE.ts55
-rw-r--r--webAO/packets/handlers/handleMC.ts62
-rw-r--r--webAO/packets/handlers/handleMM.ts5
-rw-r--r--webAO/packets/handlers/handleMS.ts6
-rw-r--r--webAO/packets/handlers/handlePN.ts4
-rw-r--r--webAO/packets/handlers/handlePR.ts92
-rw-r--r--webAO/packets/handlers/handlePU.ts60
-rw-r--r--webAO/packets/handlers/handlePV.ts163
-rw-r--r--webAO/packets/handlers/handleRC.ts4
-rw-r--r--webAO/packets/handlers/handleRD.ts19
-rw-r--r--webAO/packets/handlers/handleRM.ts12
-rw-r--r--webAO/packets/handlers/handleRMC.ts34
-rw-r--r--webAO/packets/handlers/handleRT.ts42
-rw-r--r--webAO/packets/handlers/handleSC.ts34
-rw-r--r--webAO/packets/handlers/handleSI.ts51
-rw-r--r--webAO/packets/handlers/handleSM.ts55
-rw-r--r--webAO/packets/handlers/handleSP.ts12
-rw-r--r--webAO/packets/handlers/handleTI.ts31
-rw-r--r--webAO/packets/handlers/handleZZ.ts25
-rw-r--r--webAO/packets/handlers/handleackMS.ts10
-rw-r--r--webAO/packets/handlers/handleaskchaa.ts10
-rw-r--r--webAO/packets/packetHandler.ts4
-rw-r--r--webAO/packets/packets.ts180
-rw-r--r--webAO/services/__tests__/downloadFile.test.ts48
-rw-r--r--webAO/services/downloadFile.ts14
-rw-r--r--webAO/utils/__tests__/aoml.test.ts152
-rw-r--r--webAO/utils/__tests__/paths.test.ts22
-rw-r--r--webAO/utils/__tests__/tryUrls.test.ts51
-rw-r--r--webAO/utils/aoml.ts209
-rw-r--r--webAO/utils/fileExists.ts34
-rw-r--r--webAO/utils/filesExist.ts32
-rw-r--r--webAO/utils/findImgSrc.ts16
-rw-r--r--webAO/utils/getCookie.ts32
-rw-r--r--webAO/utils/paths.ts3
-rw-r--r--webAO/utils/queryParser.ts34
-rw-r--r--webAO/utils/setCookie.ts2
-rw-r--r--webAO/utils/tryUrls.ts31
-rw-r--r--webAO/viewport/constants/colors.ts20
-rw-r--r--webAO/viewport/constants/defaultChatMsg.ts20
-rw-r--r--webAO/viewport/constants/positions.ts86
-rw-r--r--webAO/viewport/interfaces/ChatMsg.ts66
-rw-r--r--webAO/viewport/interfaces/Desk.ts6
-rw-r--r--webAO/viewport/interfaces/Position.ts10
-rw-r--r--webAO/viewport/interfaces/Positions.ts6
-rw-r--r--webAO/viewport/interfaces/Testimony.ts4
-rw-r--r--webAO/viewport/interfaces/Viewport.ts76
-rw-r--r--webAO/viewport/utils/createBlipChannels.ts22
-rw-r--r--webAO/viewport/utils/createMusic.ts22
-rw-r--r--webAO/viewport/utils/createSfxAudio.ts12
-rw-r--r--webAO/viewport/utils/createShoutAudio.ts12
-rw-r--r--webAO/viewport/utils/createTestimonyAudio.ts14
-rw-r--r--webAO/viewport/utils/handleICSpeaking.ts601
-rw-r--r--webAO/viewport/utils/initTestimonyUpdater.ts48
-rw-r--r--webAO/viewport/utils/setSide.ts143
-rw-r--r--webAO/viewport/viewport.ts129
167 files changed, 3643 insertions, 3575 deletions
diff --git a/webAO/client.ts b/webAO/client.ts
index 301fdfa..2f94bae 100644
--- a/webAO/client.ts
+++ b/webAO/client.ts
@@ -3,19 +3,23 @@
* made by sD, refactored by oldmud0 and Qubrick
* credits to aleks for original idea and source
*/
-import { isLowMemory } from './client/isLowMemory'
+import { isLowMemory } from "./client/isLowMemory";
import FingerprintJS from "@fingerprintjs/fingerprintjs";
-import { sender, ISender } from './client/sender/index'
+import { sender, ISender } from "./client/sender/index";
import queryParser from "./utils/queryParser";
import getResources from "./utils/getResources.js";
import masterViewport from "./viewport/viewport";
-import { Viewport } from './viewport/interfaces/Viewport';
+import { Viewport } from "./viewport/interfaces/Viewport";
import { EventEmitter } from "events";
-import { onReplayGo } from './dom/onReplayGo'
-import { packetHandler } from './packets/packetHandler'
-import { loadResources } from './client/loadResources'
-import { AO_HOST } from './client/aoHost'
-import { fetchBackgroundList, fetchEvidenceList, fetchCharacterList } from './client/fetchLists'
+import { onReplayGo } from "./dom/onReplayGo";
+import { packetHandler } from "./packets/packetHandler";
+import { loadResources } from "./client/loadResources";
+import { AO_HOST } from "./client/aoHost";
+import {
+ fetchBackgroundList,
+ fetchEvidenceList,
+ fetchCharacterList,
+} from "./client/fetchLists";
import getCookie from "./utils/getCookie";
import setCookie from "./utils/setCookie";
const { ip: serverIP, connect, mode, theme, serverName } = queryParser();
@@ -24,12 +28,12 @@ document.title = serverName;
export let CHATBOX: string;
export const setCHATBOX = (val: string) => {
- CHATBOX = val
-}
+ CHATBOX = val;
+};
export let client: Client;
export const setClient = (val: Client) => {
- client = val
-}
+ client = val;
+};
export const UPDATE_INTERVAL = 60;
@@ -40,367 +44,367 @@ export const UPDATE_INTERVAL = 60;
*/
export let oldLoading = false;
export const setOldLoading = (val: boolean) => {
- console.warn("old loading set to " + val)
- oldLoading = val
-}
+ console.warn("old loading set to " + val);
+ oldLoading = val;
+};
// presettings
export let selectedMenu = 1;
export const setSelectedMenu = (val: number) => {
- selectedMenu = val
-}
+ selectedMenu = val;
+};
export let selectedShout = 0;
export const setSelectedShout = (val: number) => {
- selectedShout = val
-}
+ selectedShout = val;
+};
export let extrafeatures: string[] = [];
export const setExtraFeatures = (val: any) => {
- extrafeatures = val
-}
+ extrafeatures = val;
+};
export let banned: boolean = false;
export const setBanned = (val: boolean) => {
- banned = val
-}
+ banned = val;
+};
let hdid: string;
const fpPromise = FingerprintJS.load();
fpPromise
- .then((fp) => fp.get())
- .then((result) => {
- hdid = result.visitorId;
-
- let connectionString = connect;
-
- if (!connectionString && mode !== "replay") {
- if (serverIP) {
- // if connectionString is not set, try IP
- // and just guess ws, though it could be wss
- connectionString = `ws://${serverIP}`;
- } else {
- alert("No connection string specified!");
- return;
- }
- }
-
- if (window.location.protocol === "https:" && connectionString.startsWith("ws://")) {
- // If protocol is https: and connectionString is ws://
- // We have a problem, since it's impossible to connect to ws:// from https://
- // Connection will fail, but at least warn the user
- alert('WS not supported on HTTPS. Please try removing the s from https:// at the start of the URL bar. (You might have to click inside the URL bar to see it)')
- }
-
- client = new Client(connectionString);
- client.connect()
- client.hdid = hdid;
- isLowMemory();
- loadResources();
- });
+ .then((fp) => fp.get())
+ .then((result) => {
+ hdid = result.visitorId;
+
+ let connectionString = connect;
+
+ if (!connectionString && mode !== "replay") {
+ if (serverIP) {
+ // if connectionString is not set, try IP
+ // and just guess ws, though it could be wss
+ connectionString = `ws://${serverIP}`;
+ } else {
+ alert("No connection string specified!");
+ return;
+ }
+ }
+
+ if (
+ window.location.protocol === "https:" &&
+ connectionString.startsWith("ws://")
+ ) {
+ // If protocol is https: and connectionString is ws://
+ // We have a problem, since it's impossible to connect to ws:// from https://
+ // Connection will fail, but at least warn the user
+ alert(
+ "WS not supported on HTTPS. Please try removing the s from https:// at the start of the URL bar. (You might have to click inside the URL bar to see it)",
+ );
+ }
+
+ client = new Client(connectionString);
+ client.connect();
+ client.hdid = hdid;
+ isLowMemory();
+ loadResources();
+ });
export const delay = (ms: number) => new Promise((res) => setTimeout(res, ms));
export enum clientState {
- NotConnected,
- // Should be set once the client has established a connection
- Connected,
- // Should be set once the client has joined the server (after handshake)
- Joined
+ NotConnected,
+ // Should be set once the client has established a connection
+ Connected,
+ // Should be set once the client has joined the server (after handshake)
+ Joined,
}
export let lastICMessageTime = new Date(0);
export const setLastICMessageTime = (val: Date) => {
- lastICMessageTime = val
-}
+ lastICMessageTime = val;
+};
class Client extends EventEmitter {
- serv: any;
- hp: number[];
- playerID: number;
- charID: number;
- char_list_length: number;
- evidence_list_length: number;
- music_list_length: number;
- testimonyID: number;
- chars: any;
- emotes: any;
- evidences: any;
- area: number;
- areas: any;
- musics: any;
- musics_time: boolean;
- callwords: string[];
- banned: boolean;
- hdid: string;
- resources: any;
- selectedEmote: number;
- selectedEvidence: number;
- sender: ISender;
- checkUpdater: any;
- _lastTimeICReceived: any;
- manifest: string[];
- viewport: Viewport;
- partial_packet: boolean;
- temp_packet: string;
- state: clientState;
- connect: () => void;
- loadResources: () => void
- isLowMemory: () => void
- constructor(connectionString: string) {
- super();
-
- this.state = clientState.NotConnected;
- this.connect = () => {
- this.on("open", this.onOpen.bind(this));
- this.on("close", this.onClose.bind(this));
- this.on("message", this.onMessage.bind(this));
- this.on("error", this.onError.bind(this));
- if (mode !== "replay") {
- this.serv = new WebSocket(connectionString);
- // Assign the websocket events
- this.serv.addEventListener("open", this.emit.bind(this, "open"));
- this.serv.addEventListener("close", this.emit.bind(this, "close"));
- this.serv.addEventListener("message", this.emit.bind(this, "message"));
- this.serv.addEventListener("error", this.emit.bind(this, "error"));
-
- // If the client is still not connected 5 seconds after attempting to join
- // It's fair to assume that the server is not reachable
- setTimeout(() => {
- if (this.state === clientState.NotConnected) {
- this.serv.close();
- }
- }, 5000);
- } else {
- this.joinServer();
- }
- }
-
- this.hp = [0, 0];
- this.playerID = 1;
- this.charID = -1;
- this.char_list_length = 0;
- this.evidence_list_length = 0;
- this.music_list_length = 0;
- this.testimonyID = 0;
- this.chars = [];
- this.emotes = [];
- this.evidences = [];
- this.area = 0;
- this.areas = [];
- this.musics = [];
- this.musics_time = false;
- this.callwords = [];
- this.manifest = [];
- this.resources = getResources(AO_HOST, theme);
- this.selectedEmote = -1;
- this.selectedEvidence = -1;
- this.checkUpdater = null;
- this.sender = sender
- this.viewport = masterViewport();
- this._lastTimeICReceived = new Date(0);
- this.partial_packet = false;
- this.temp_packet = "";
- loadResources
- isLowMemory
- }
-
- /**
+ serv: any;
+ hp: number[];
+ playerID: number;
+ charID: number;
+ char_list_length: number;
+ evidence_list_length: number;
+ music_list_length: number;
+ testimonyID: number;
+ chars: any;
+ emotes: any;
+ evidences: any;
+ area: number;
+ areas: any;
+ musics: any;
+ musics_time: boolean;
+ callwords: string[];
+ banned: boolean;
+ hdid: string;
+ resources: any;
+ selectedEmote: number;
+ selectedEvidence: number;
+ sender: ISender;
+ checkUpdater: any;
+ _lastTimeICReceived: any;
+ manifest: string[];
+ viewport: Viewport;
+ partial_packet: boolean;
+ temp_packet: string;
+ state: clientState;
+ connect: () => void;
+ loadResources: () => void;
+ isLowMemory: () => void;
+ constructor(connectionString: string) {
+ super();
+
+ this.state = clientState.NotConnected;
+ this.connect = () => {
+ this.on("open", this.onOpen.bind(this));
+ this.on("close", this.onClose.bind(this));
+ this.on("message", this.onMessage.bind(this));
+ this.on("error", this.onError.bind(this));
+ if (mode !== "replay") {
+ this.serv = new WebSocket(connectionString);
+ // Assign the websocket events
+ this.serv.addEventListener("open", this.emit.bind(this, "open"));
+ this.serv.addEventListener("close", this.emit.bind(this, "close"));
+ this.serv.addEventListener("message", this.emit.bind(this, "message"));
+ this.serv.addEventListener("error", this.emit.bind(this, "error"));
+
+ // If the client is still not connected 5 seconds after attempting to join
+ // It's fair to assume that the server is not reachable
+ setTimeout(() => {
+ if (this.state === clientState.NotConnected) {
+ this.serv.close();
+ }
+ }, 5000);
+ } else {
+ this.joinServer();
+ }
+ };
+
+ this.hp = [0, 0];
+ this.playerID = 1;
+ this.charID = -1;
+ this.char_list_length = 0;
+ this.evidence_list_length = 0;
+ this.music_list_length = 0;
+ this.testimonyID = 0;
+ this.chars = [];
+ this.emotes = [];
+ this.evidences = [];
+ this.area = 0;
+ this.areas = [];
+ this.musics = [];
+ this.musics_time = false;
+ this.callwords = [];
+ this.manifest = [];
+ this.resources = getResources(AO_HOST, theme);
+ this.selectedEmote = -1;
+ this.selectedEvidence = -1;
+ this.checkUpdater = null;
+ this.sender = sender;
+ this.viewport = masterViewport();
+ this._lastTimeICReceived = new Date(0);
+ this.partial_packet = false;
+ this.temp_packet = "";
+ loadResources;
+ isLowMemory;
+ }
+
+ /**
* Gets the current player's character.
*/
- get character() {
- return this.chars[this.charID];
- }
+ get character() {
+ return this.chars[this.charID];
+ }
- /**
+ /**
* Gets the player's currently selected emote.
*/
- get emote() {
- return this.emotes[this.selectedEmote];
- }
+ get emote() {
+ return this.emotes[this.selectedEmote];
+ }
- /**
+ /**
* Gets the current evidence ID unless the player doesn't want to present any evidence
*/
- get evidence() {
- return document.getElementById("button_present").classList.contains("dark")
- ? this.selectedEvidence
- : -1;
- }
+ get evidence() {
+ return document.getElementById("button_present").classList.contains("dark")
+ ? this.selectedEvidence
+ : -1;
+ }
- /**
+ /**
* Hook for sending messages to the client
* @param {string} message the message to send
*/
- handleSelf(message: string) {
- const message_event = new MessageEvent("websocket", { data: message });
- setTimeout(() => this.onMessage(message_event), 1);
- }
+ handleSelf(message: string) {
+ const message_event = new MessageEvent("websocket", { data: message });
+ setTimeout(() => this.onMessage(message_event), 1);
+ }
- /**
+ /**
* Begins the handshake process by sending an identifier
* to the server.
*/
- joinServer() {
- this.sender.sendServer(`HI#${hdid}#%`);
- if(getCookie("hdid") !== hdid) {
- this.sender.sendServer(getCookie("hdid"));
- document.getElementById("client_secondfactor").style.display = "block";
- document.getElementById("client_charselect").remove();
- document.getElementById("client_ooc").remove();
- }
- if (mode !== "replay") {
- this.checkUpdater = setInterval(() => this.sender.sendCheck(), 5000);
- }
+ joinServer() {
+ this.sender.sendServer(`HI#${hdid}#%`);
+ if (getCookie("hdid") !== hdid) {
+ this.sender.sendServer(getCookie("hdid"));
+ document.getElementById("client_secondfactor").style.display = "block";
+ document.getElementById("client_charselect").remove();
+ document.getElementById("client_ooc").remove();
}
+ if (mode !== "replay") {
+ this.checkUpdater = setInterval(() => this.sender.sendCheck(), 5000);
+ }
+ }
- /**
+ /**
* Triggered when a connection is established to the server.
*/
- onOpen(_e: Event) {
- client.state = clientState.Connected;
- client.joinServer();
- }
+ onOpen(_e: Event) {
+ client.state = clientState.Connected;
+ client.joinServer();
+ }
- /**
+ /**
* Triggered when the connection to the server closes.
* @param {CloseEvent} e
*/
- onClose(e: CloseEvent) {
- client.state = clientState.NotConnected;
- console.error(`The connection was closed: ${e.reason} (${e.code})`);
- if (extrafeatures.length == 0 && banned === false) {
- document.getElementById("client_errortext").textContent =
- "Could not connect to the server";
- }
- document.getElementById("client_waiting").style.display = "block";
- document.getElementById("client_error").style.display = "flex";
- document.getElementById("client_loading").style.display = "none";
- document.getElementById("error_id").textContent = String(e.code);
- this.cleanup();
+ onClose(e: CloseEvent) {
+ client.state = clientState.NotConnected;
+ console.error(`The connection was closed: ${e.reason} (${e.code})`);
+ if (extrafeatures.length == 0 && banned === false) {
+ document.getElementById("client_errortext").textContent =
+ "Could not connect to the server";
}
-
- /**
+ document.getElementById("client_waiting").style.display = "block";
+ document.getElementById("client_error").style.display = "flex";
+ document.getElementById("client_loading").style.display = "none";
+ document.getElementById("error_id").textContent = String(e.code);
+ this.cleanup();
+ }
+
+ /**
* Triggered when a packet is received from the server.
* @param {MessageEvent} e
*/
- onMessage(e: MessageEvent) {
- const msg = e.data;
- console.debug(`S: ${msg}`);
-
- this.handle_server_packet(msg);
+ onMessage(e: MessageEvent) {
+ const msg = e.data;
+ console.debug(`S: ${msg}`);
- }
+ this.handle_server_packet(msg);
+ }
- /**
+ /**
* Decode the packet
* @param {MessageEvent} e
*/
- handle_server_packet(p_data: string) {
- let in_data = p_data;
-
- if (!p_data.endsWith("%")) {
- this.partial_packet = true;
- this.temp_packet = this.temp_packet + in_data
- console.log("Partial packet")
- return;
- }
-
- else {
- if (this.partial_packet) {
- in_data = this.temp_packet + in_data
- this.temp_packet = "";
- this.partial_packet = false;
- }
- }
-
- const packet_list = in_data.split("%");
-
- for (const packet of packet_list) {
- let f_contents;
- // Packet should *always* end with #
- if (packet.endsWith("#")) {
- f_contents = packet.slice(0, -1).split("#");
- }
- // But, if it somehow doesn't, we should still be able to handle it
- else {
- f_contents = packet.split("#");
- }
- // Empty packets are suspicious!
- if (f_contents.length == 0) {
- console.warn("WARNING: Empty packet received from server, skipping...");
- continue;
- }
- // Take the first arg as the command
- const command = f_contents[0];
- if (command !== "") {
- // The rest is contents of the packet
- packetHandler.has(command)
- ? packetHandler.get(command)(f_contents)
- : console.warn(`Invalid packet header ${command}`);
- }
- }
+ handle_server_packet(p_data: string) {
+ let in_data = p_data;
+
+ if (!p_data.endsWith("%")) {
+ this.partial_packet = true;
+ this.temp_packet = this.temp_packet + in_data;
+ console.log("Partial packet");
+ return;
+ } else {
+ if (this.partial_packet) {
+ in_data = this.temp_packet + in_data;
+ this.temp_packet = "";
+ this.partial_packet = false;
+ }
}
+ const packet_list = in_data.split("%");
+
+ for (const packet of packet_list) {
+ let f_contents;
+ // Packet should *always* end with #
+ if (packet.endsWith("#")) {
+ f_contents = packet.slice(0, -1).split("#");
+ }
+ // But, if it somehow doesn't, we should still be able to handle it
+ else {
+ f_contents = packet.split("#");
+ }
+ // Empty packets are suspicious!
+ if (f_contents.length == 0) {
+ console.warn("WARNING: Empty packet received from server, skipping...");
+ continue;
+ }
+ // Take the first arg as the command
+ const command = f_contents[0];
+ if (command !== "") {
+ // The rest is contents of the packet
+ packetHandler.has(command)
+ ? packetHandler.get(command)(f_contents)
+ : console.warn(`Invalid packet header ${command}`);
+ }
+ }
+ }
- /**
+ /**
* Triggered when an network error occurs.
* @param {ErrorEvent} e
*/
- onError(e: ErrorEvent) {
- client.state = clientState.NotConnected;
- console.error(`A network error occurred`);
- console.error(e);
- document.getElementById("client_error").style.display = "flex";
- this.cleanup();
- }
-
- /**
+ onError(e: ErrorEvent) {
+ client.state = clientState.NotConnected;
+ console.error(`A network error occurred`);
+ console.error(e);
+ document.getElementById("client_error").style.display = "flex";
+ this.cleanup();
+ }
+
+ /**
* Stop sending keepalives to the server.
*/
- cleanup() {
- clearInterval(this.checkUpdater);
- this.serv.close();
- }
+ cleanup() {
+ clearInterval(this.checkUpdater);
+ this.serv.close();
+ }
- /**
+ /**
* Parse the lines in the OOC and play them
* @param {*} args packet arguments
*/
- handleReplay() {
- const ooclog = <HTMLInputElement>document.getElementById("client_ooclog");
- const rawLog = false;
- let rtime: number = Number(
- (<HTMLInputElement>document.getElementById("client_replaytimer")).value
- );
-
- const clines = ooclog.value.split(/\r?\n/);
- if (clines[0]) {
- const currentLine = String(clines[0]);
- this.handleSelf(currentLine);
- ooclog.value = clines.slice(1).join("\r\n");
- if (currentLine.substr(0, 4) === "wait" && rawLog === false) {
- rtime = Number(currentLine.split("#")[1]);
- } else if (currentLine.substr(0, 2) !== "MS") {
- rtime = 0;
- }
-
- setTimeout(() => onReplayGo(null), rtime);
- }
- }
-
- resetMusicList() {
- this.musics = [];
- document.getElementById("client_musiclist").innerHTML = "";
+ handleReplay() {
+ const ooclog = <HTMLInputElement>document.getElementById("client_ooclog");
+ const rawLog = false;
+ let rtime: number = Number(
+ (<HTMLInputElement>document.getElementById("client_replaytimer")).value,
+ );
+
+ const clines = ooclog.value.split(/\r?\n/);
+ if (clines[0]) {
+ const currentLine = String(clines[0]);
+ this.handleSelf(currentLine);
+ ooclog.value = clines.slice(1).join("\r\n");
+ if (currentLine.substr(0, 4) === "wait" && rawLog === false) {
+ rtime = Number(currentLine.split("#")[1]);
+ } else if (currentLine.substr(0, 2) !== "MS") {
+ rtime = 0;
+ }
+
+ setTimeout(() => onReplayGo(null), rtime);
}
+ }
- resetAreaList() {
- this.areas = [];
- document.getElementById("areas").innerHTML = "";
+ resetMusicList() {
+ this.musics = [];
+ document.getElementById("client_musiclist").innerHTML = "";
+ }
- fetchBackgroundList();
- fetchEvidenceList();
- fetchCharacterList();
- }
+ resetAreaList() {
+ this.areas = [];
+ document.getElementById("areas").innerHTML = "";
+ fetchBackgroundList();
+ fetchEvidenceList();
+ fetchCharacterList();
+ }
}
export default Client;
diff --git a/webAO/client/addTrack.ts b/webAO/client/addTrack.ts
index d6b1519..09ca049 100644
--- a/webAO/client/addTrack.ts
+++ b/webAO/client/addTrack.ts
@@ -2,14 +2,13 @@ import { client } from "../client";
import { unescapeChat, safeTags } from "../encoding";
import { getFilenameFromPath } from "../utils/paths";
-
export const addTrack = (trackname: string) => {
- const newentry = <HTMLOptionElement>document.createElement("OPTION");
- const songName = getFilenameFromPath(trackname);
- newentry.text = safeTags(unescapeChat(songName));
- newentry.value = trackname;
- (<HTMLSelectElement>(
- document.getElementById("client_musiclist")
- )).options.add(newentry);
- client.musics.push(trackname);
-} \ No newline at end of file
+ const newentry = <HTMLOptionElement>document.createElement("OPTION");
+ const songName = getFilenameFromPath(trackname);
+ newentry.text = safeTags(unescapeChat(songName));
+ newentry.value = trackname;
+ (<HTMLSelectElement>document.getElementById("client_musiclist")).options.add(
+ newentry,
+ );
+ client.musics.push(trackname);
+};
diff --git a/webAO/client/aoHost.ts b/webAO/client/aoHost.ts
index 33e010d..906d4a6 100644
--- a/webAO/client/aoHost.ts
+++ b/webAO/client/aoHost.ts
@@ -1,16 +1,16 @@
-import queryParser from '../utils/queryParser'
+import queryParser from "../utils/queryParser";
const { asset } = queryParser();
export let AO_HOST = asset;
export const setAOhost = (val: string) => {
- const currentProtocol = window.location.protocol;
- const assetProtocol = val.split(':')[0] + ':';
+ const currentProtocol = window.location.protocol;
+ const assetProtocol = val.split(":")[0] + ":";
- if (currentProtocol === 'https:' && assetProtocol === 'http:') {
- // In this specific case, we need to request assets over HTTPS
- console.log('Upgrading asset link to https');
- val = val.replace('http:', 'https:');
- }
+ if (currentProtocol === "https:" && assetProtocol === "http:") {
+ // In this specific case, we need to request assets over HTTPS
+ console.log("Upgrading asset link to https");
+ val = val.replace("http:", "https:");
+ }
- AO_HOST = val;
-}
+ AO_HOST = val;
+};
diff --git a/webAO/client/appendICLog.ts b/webAO/client/appendICLog.ts
index 2d3564c..181f982 100644
--- a/webAO/client/appendICLog.ts
+++ b/webAO/client/appendICLog.ts
@@ -1,55 +1,56 @@
import { lastICMessageTime, setLastICMessageTime } from "../client";
-
-
/**
* Appends a message to the in-character chat log.
* @param {string} msg the string to be added
* @param {string} name the name of the sender
*/
export function appendICLog(
- msg: string,
- showname = "",
- nameplate = "",
- time = new Date()
+ msg: string,
+ showname = "",
+ nameplate = "",
+ time = new Date(),
) {
- const entry = document.createElement("p");
- const shownameField = document.createElement("span");
- const nameplateField = document.createElement("span");
- const textField = document.createElement("span");
- nameplateField.className = "iclog_name iclog_nameplate";
- nameplateField.appendChild(document.createTextNode(nameplate));
-
- shownameField.className = "iclog_name iclog_showname";
- if (showname === "" || !showname) {
- shownameField.appendChild(document.createTextNode(nameplate));
- } else {
- shownameField.appendChild(document.createTextNode(showname));
- }
-
- textField.className = "iclog_text";
- textField.appendChild(document.createTextNode(msg));
-
- entry.appendChild(shownameField);
- entry.appendChild(nameplateField);
- entry.appendChild(textField);
-
- // Only put a timestamp if the minute has changed.
- if (lastICMessageTime.getMinutes() !== time.getMinutes()) {
- const timeStamp = document.createElement("span");
- timeStamp.className = "iclog_time";
- timeStamp.innerText = time.toLocaleTimeString(undefined, {
- hour: "numeric",
- minute: "2-digit",
- });
- entry.appendChild(timeStamp);
- }
-
- const clientLog = document.getElementById("client_log")!;
- clientLog.appendChild(entry);
-
- if (clientLog.scrollTop+clientLog.offsetHeight+120>clientLog.scrollHeight)
- clientLog.scrollTo(0, clientLog.scrollHeight);
-
- setLastICMessageTime(new Date());
-} \ No newline at end of file
+ const entry = document.createElement("p");
+ const shownameField = document.createElement("span");
+ const nameplateField = document.createElement("span");
+ const textField = document.createElement("span");
+ nameplateField.className = "iclog_name iclog_nameplate";
+ nameplateField.appendChild(document.createTextNode(nameplate));
+
+ shownameField.className = "iclog_name iclog_showname";
+ if (showname === "" || !showname) {
+ shownameField.appendChild(document.createTextNode(nameplate));
+ } else {
+ shownameField.appendChild(document.createTextNode(showname));
+ }
+
+ textField.className = "iclog_text";
+ textField.appendChild(document.createTextNode(msg));
+
+ entry.appendChild(shownameField);
+ entry.appendChild(nameplateField);
+ entry.appendChild(textField);
+
+ // Only put a timestamp if the minute has changed.
+ if (lastICMessageTime.getMinutes() !== time.getMinutes()) {
+ const timeStamp = document.createElement("span");
+ timeStamp.className = "iclog_time";
+ timeStamp.innerText = time.toLocaleTimeString(undefined, {
+ hour: "numeric",
+ minute: "2-digit",
+ });
+ entry.appendChild(timeStamp);
+ }
+
+ const clientLog = document.getElementById("client_log")!;
+ clientLog.appendChild(entry);
+
+ if (
+ clientLog.scrollTop + clientLog.offsetHeight + 120 >
+ clientLog.scrollHeight
+ )
+ clientLog.scrollTo(0, clientLog.scrollHeight);
+
+ setLastICMessageTime(new Date());
+}
diff --git a/webAO/client/checkCallword.ts b/webAO/client/checkCallword.ts
index f6cffbc..b7413f7 100644
--- a/webAO/client/checkCallword.ts
+++ b/webAO/client/checkCallword.ts
@@ -6,12 +6,12 @@ import { AO_HOST } from "./aoHost";
* @param {string} message
*/
export function checkCallword(message: string, sfxAudio: HTMLAudioElement) {
- client.callwords.forEach(testCallword);
- function testCallword(item: string) {
- if (item !== "" && message.toLowerCase().includes(item.toLowerCase())) {
- sfxAudio.pause();
- sfxAudio.src = `${AO_HOST}sounds/general/sfx-gallery.opus`;
- sfxAudio.play();
- }
+ client.callwords.forEach(testCallword);
+ function testCallword(item: string) {
+ if (item !== "" && message.toLowerCase().includes(item.toLowerCase())) {
+ sfxAudio.pause();
+ sfxAudio.src = `${AO_HOST}sounds/general/sfx-gallery.opus`;
+ sfxAudio.play();
}
-} \ No newline at end of file
+ }
+}
diff --git a/webAO/client/createArea.ts b/webAO/client/createArea.ts
index 63af644..68406d9 100644
--- a/webAO/client/createArea.ts
+++ b/webAO/client/createArea.ts
@@ -2,29 +2,29 @@ import { client } from "../client";
import { area_click } from "../dom/areaClick";
export const createArea = (id: number, name: string) => {
- const thisarea = {
- name,
- players: 0,
- status: "IDLE",
- cm: "",
- locked: "FREE",
- };
+ const thisarea = {
+ name,
+ players: 0,
+ status: "IDLE",
+ cm: "",
+ locked: "FREE",
+ };
- client.areas.push(thisarea);
+ client.areas.push(thisarea);
- // Create area button
- const newarea = document.createElement("SPAN");
- newarea.className = "area-button area-default";
- newarea.id = `area${id}`;
- newarea.innerText = thisarea.name;
- newarea.title =
- `Players: ${thisarea.players}\n` +
- `Status: ${thisarea.status}\n` +
- `CM: ${thisarea.cm}\n` +
- `Area lock: ${thisarea.locked}`;
- newarea.onclick = function () {
- area_click(newarea);
- };
+ // Create area button
+ const newarea = document.createElement("SPAN");
+ newarea.className = "area-button area-default";
+ newarea.id = `area${id}`;
+ newarea.innerText = thisarea.name;
+ newarea.title =
+ `Players: ${thisarea.players}\n` +
+ `Status: ${thisarea.status}\n` +
+ `CM: ${thisarea.cm}\n` +
+ `Area lock: ${thisarea.locked}`;
+ newarea.onclick = function () {
+ area_click(newarea);
+ };
- document.getElementById("areas")!.appendChild(newarea);
-} \ No newline at end of file
+ document.getElementById("areas")!.appendChild(newarea);
+};
diff --git a/webAO/client/fetchLists.ts b/webAO/client/fetchLists.ts
index 9efd181..2489c97 100644
--- a/webAO/client/fetchLists.ts
+++ b/webAO/client/fetchLists.ts
@@ -3,75 +3,69 @@ import { AO_HOST } from "./aoHost";
import { request } from "../services/request.js";
export const fetchBackgroundList = async () => {
- try {
- const bgdata = await request(`${AO_HOST}backgrounds.json`);
- const bg_array = JSON.parse(bgdata);
- // the try catch will fail before here when there is no file
+ try {
+ const bgdata = await request(`${AO_HOST}backgrounds.json`);
+ const bg_array = JSON.parse(bgdata);
+ // the try catch will fail before here when there is no file
- const bg_select = <HTMLSelectElement>document.getElementById("bg_select");
- bg_select.innerHTML = "";
+ const bg_select = <HTMLSelectElement>document.getElementById("bg_select");
+ bg_select.innerHTML = "";
- bg_select.add(new Option("Custom", "0"));
- bg_array.forEach((background: string) => {
- bg_select.add(new Option(background));
- });
- } catch (err) {
- console.warn("there was no backgrounds.json file");
- }
-}
+ bg_select.add(new Option("Custom", "0"));
+ bg_array.forEach((background: string) => {
+ bg_select.add(new Option(background));
+ });
+ } catch (err) {
+ console.warn("there was no backgrounds.json file");
+ }
+};
export const fetchCharacterList = async () => {
- const char_select = <HTMLSelectElement>(
- document.getElementById("client_iniselect")
- );
- char_select.innerHTML = "";
+ const char_select = <HTMLSelectElement>(
+ document.getElementById("client_iniselect")
+ );
+ char_select.innerHTML = "";
- char_select.add(new Option("Custom", "0"));
-
- try {
- const chardata = await request(`${AO_HOST}characters.json`);
- const char_array = JSON.parse(chardata);
- // the try catch will fail before here when there is no file
+ char_select.add(new Option("Custom", "0"));
- char_array.forEach((character: string) => {
- char_select.add(new Option(character));
- });
- } catch (err) {
- console.warn("there was no characters.json file");
- }
-}
+ try {
+ const chardata = await request(`${AO_HOST}characters.json`);
+ const char_array = JSON.parse(chardata);
+ // the try catch will fail before here when there is no file
+ char_array.forEach((character: string) => {
+ char_select.add(new Option(character));
+ });
+ } catch (err) {
+ console.warn("there was no characters.json file");
+ }
+};
export const fetchEvidenceList = async () => {
- const evi_select = <HTMLSelectElement>(
- document.getElementById("evi_select")
- );
- evi_select.innerHTML = "";
+ const evi_select = <HTMLSelectElement>document.getElementById("evi_select");
+ evi_select.innerHTML = "";
- evi_select.add(new Option("Custom", "0"));
+ evi_select.add(new Option("Custom", "0"));
- try {
- const evidata = await request(`${AO_HOST}evidence.json`);
- const evi_array = JSON.parse(evidata);
- // the try catch will fail before here when there is no file
-
- evi_array.forEach((evi: string) => {
- evi_select.add(new Option(evi));
- });
-
- } catch (err) {
- console.warn("there was no evidence.json file");
- }
-}
+ try {
+ const evidata = await request(`${AO_HOST}evidence.json`);
+ const evi_array = JSON.parse(evidata);
+ // the try catch will fail before here when there is no file
+ evi_array.forEach((evi: string) => {
+ evi_select.add(new Option(evi));
+ });
+ } catch (err) {
+ console.warn("there was no evidence.json file");
+ }
+};
export const fetchManifest = async () => {
- try {
- const manifestdata = await request(`${AO_HOST}manifest.txt`);
- client.manifest = manifestdata.split(/\r\n|\n\r|\n|\r/);
- // the try catch will fail before here when there is no file
-
- } catch (err) {
- console.warn("there was no manifest.txt file");
- }
-} \ No newline at end of file
+ try {
+ const manifestdata = await request(`${AO_HOST}manifest.txt`);
+ client.manifest = manifestdata.split(/\r\n|\n\r|\n|\r/);
+ // the try catch will fail before here when there is no file
+ } catch (err) {
+ console.warn("there was no manifest.txt file");
+ }
+};
diff --git a/webAO/client/fixLastArea.ts b/webAO/client/fixLastArea.ts
index f1aa99f..a9979da 100644
--- a/webAO/client/fixLastArea.ts
+++ b/webAO/client/fixLastArea.ts
@@ -1,15 +1,14 @@
import { client } from "../client";
import { addTrack } from "./addTrack";
-
/**
* Area list fuckery
*/
export const fix_last_area = () => {
- if (client.areas.length > 0) {
- const malplaced = client.areas.pop().name;
- const areas = document.getElementById("areas")!;
- areas.removeChild(areas.lastChild);
- addTrack(malplaced);
- }
-} \ No newline at end of file
+ if (client.areas.length > 0) {
+ const malplaced = client.areas.pop().name;
+ const areas = document.getElementById("areas")!;
+ areas.removeChild(areas.lastChild);
+ addTrack(malplaced);
+ }
+};
diff --git a/webAO/client/handleBans.ts b/webAO/client/handleBans.ts
index 298b27f..a2e56f4 100644
--- a/webAO/client/handleBans.ts
+++ b/webAO/client/handleBans.ts
@@ -4,12 +4,10 @@
* @param {string} reason why
*/
export const handleBans = (type: string, reason: string) => {
- document.getElementById("client_error")!.style.display = "flex";
- document.getElementById(
- "client_errortext"
- )!.innerHTML = `${type}:<br>${reason.replace(/\n/g, "<br />")}`;
- (<HTMLElement>(
- document.getElementById("client_reconnect")
- )).style.display = "none";
- alert(type+":\r"+reason)
-} \ No newline at end of file
+ document.getElementById("client_error")!.style.display = "flex";
+ document.getElementById("client_errortext")!.innerHTML =
+ `${type}:<br>${reason.replace(/\n/g, "<br />")}`;
+ (<HTMLElement>document.getElementById("client_reconnect")).style.display =
+ "none";
+ alert(type + ":\r" + reason);
+};
diff --git a/webAO/client/handleCharacterInfo.ts b/webAO/client/handleCharacterInfo.ts
index cd024b5..3f81e57 100644
--- a/webAO/client/handleCharacterInfo.ts
+++ b/webAO/client/handleCharacterInfo.ts
@@ -5,23 +5,22 @@ import request from "../services/request";
import fileExists from "../utils/fileExists";
import { AO_HOST } from "./aoHost";
-
export const getCharIcon = async (img: HTMLImageElement, charname: string) => {
- const extensions = [".png", ".webp"];
- img.alt = charname;
- const charIconBaseUrl = `${AO_HOST}characters/${encodeURI(
- charname.toLowerCase()
- )}/char_icon`;
- for (let i = 0; i < extensions.length; i++) {
- const fileUrl = charIconBaseUrl + extensions[i];
- const exists = await fileExists(fileUrl);
- if (exists) {
- img.alt = charname;
- img.title = charname;
- img.src = fileUrl;
- return;
- }
+ const extensions = [".png", ".webp"];
+ img.alt = charname;
+ const charIconBaseUrl = `${AO_HOST}characters/${encodeURI(
+ charname.toLowerCase(),
+ )}/char_icon`;
+ for (let i = 0; i < extensions.length; i++) {
+ const fileUrl = charIconBaseUrl + extensions[i];
+ const exists = await fileExists(fileUrl);
+ if (exists) {
+ img.alt = charname;
+ img.title = charname;
+ img.src = fileUrl;
+ return;
}
+ }
};
/**
@@ -30,78 +29,77 @@ export const getCharIcon = async (img: HTMLImageElement, charname: string) => {
* @param {Number} charid character ID
*/
export const handleCharacterInfo = async (chargs: string[], charid: number) => {
- const img = <HTMLImageElement>document.getElementById(`demo_${charid}`);
- if (chargs[0]) {
- let cini: any = {};
-
- getCharIcon(img, chargs[0]);
+ const img = <HTMLImageElement>document.getElementById(`demo_${charid}`);
+ if (chargs[0]) {
+ let cini: any = {};
- // If the ini doesn't exist on the server this will throw an error
- try {
- const cinidata = await request(
- `${AO_HOST}characters/${encodeURI(chargs[0].toLowerCase())}/char.ini`
- );
- cini = iniParse(cinidata);
- } catch (err) {
- cini = {};
- img.classList.add("noini");
- console.warn(`character ${chargs[0]} is missing from webAO`);
- // If it does, give the user a visual indication that the character is unusable
- }
+ getCharIcon(img, chargs[0]);
- const mute_select = <HTMLSelectElement>(
- document.getElementById("mute_select")
- );
- mute_select.add(new Option(safeTags(chargs[0]), String(charid)));
- const pair_select = <HTMLSelectElement>(
- document.getElementById("pair_select")
- );
- pair_select.add(new Option(safeTags(chargs[0]), String(charid)));
+ // If the ini doesn't exist on the server this will throw an error
+ try {
+ const cinidata = await request(
+ `${AO_HOST}characters/${encodeURI(chargs[0].toLowerCase())}/char.ini`,
+ );
+ cini = iniParse(cinidata);
+ } catch (err) {
+ cini = {};
+ img.classList.add("noini");
+ console.warn(`character ${chargs[0]} is missing from webAO`);
+ // If it does, give the user a visual indication that the character is unusable
+ }
- // sometimes ini files lack important settings
- const default_options = {
- name: chargs[0],
- showname: chargs[0],
- side: "def",
- blips: "male",
- chat: "",
- category: "",
- };
- cini.options = Object.assign(default_options, cini.options);
+ const mute_select = <HTMLSelectElement>(
+ document.getElementById("mute_select")
+ );
+ mute_select.add(new Option(safeTags(chargs[0]), String(charid)));
+ const pair_select = <HTMLSelectElement>(
+ document.getElementById("pair_select")
+ );
+ pair_select.add(new Option(safeTags(chargs[0]), String(charid)));
- // sometimes ini files lack important settings
- const default_emotions = {
- number: 0,
- };
- cini.emotions = Object.assign(default_emotions, cini.emotions);
+ // sometimes ini files lack important settings
+ const default_options = {
+ name: chargs[0],
+ showname: chargs[0],
+ side: "def",
+ blips: "male",
+ chat: "",
+ category: "",
+ };
+ cini.options = Object.assign(default_options, cini.options);
- client.chars[charid] = {
- name: safeTags(chargs[0]),
- showname: safeTags(cini.options.showname),
- desc: safeTags(chargs[1]),
- blips: safeTags(cini.options.blips).toLowerCase(),
- gender: safeTags(cini.options.gender).toLowerCase(),
- side: safeTags(cini.options.side).toLowerCase(),
- chat:
- cini.options.chat === ""
- ? safeTags(cini.options.category).toLowerCase()
- : safeTags(cini.options.chat).toLowerCase(),
- evidence: chargs[3],
- icon: img.src,
- inifile: cini,
- muted: false,
- };
+ // sometimes ini files lack important settings
+ const default_emotions = {
+ number: 0,
+ };
+ cini.emotions = Object.assign(default_emotions, cini.emotions);
- if (
- client.chars[charid].blips === "male" &&
- client.chars[charid].gender !== "male" &&
- client.chars[charid].gender !== ""
- ) {
- client.chars[charid].blips = client.chars[charid].gender;
- }
+ client.chars[charid] = {
+ name: safeTags(chargs[0]),
+ showname: safeTags(cini.options.showname),
+ desc: safeTags(chargs[1]),
+ blips: safeTags(cini.options.blips).toLowerCase(),
+ gender: safeTags(cini.options.gender).toLowerCase(),
+ side: safeTags(cini.options.side).toLowerCase(),
+ chat:
+ cini.options.chat === ""
+ ? safeTags(cini.options.category).toLowerCase()
+ : safeTags(cini.options.chat).toLowerCase(),
+ evidence: chargs[3],
+ icon: img.src,
+ inifile: cini,
+ muted: false,
+ };
- } else {
- console.warn(`missing charid ${charid}`);
- img.style.display = "none";
+ if (
+ client.chars[charid].blips === "male" &&
+ client.chars[charid].gender !== "male" &&
+ client.chars[charid].gender !== ""
+ ) {
+ client.chars[charid].blips = client.chars[charid].gender;
}
-} \ No newline at end of file
+ } else {
+ console.warn(`missing charid ${charid}`);
+ img.style.display = "none";
+ }
+};
diff --git a/webAO/client/isAudio.ts b/webAO/client/isAudio.ts
index 430f543..52e53a1 100644
--- a/webAO/client/isAudio.ts
+++ b/webAO/client/isAudio.ts
@@ -1,6 +1,6 @@
export const isAudio = (trackname: string) => {
- const audioEndings = [".wav", ".mp3", ".ogg", ".opus"];
- return (
- audioEndings.filter((ending) => trackname.endsWith(ending)).length === 1
- );
-} \ No newline at end of file
+ const audioEndings = [".wav", ".mp3", ".ogg", ".opus"];
+ return (
+ audioEndings.filter((ending) => trackname.endsWith(ending)).length === 1
+ );
+};
diff --git a/webAO/client/isCategory.ts b/webAO/client/isCategory.ts
index 0d2b8df..3f3dfd5 100644
--- a/webAO/client/isCategory.ts
+++ b/webAO/client/isCategory.ts
@@ -1,6 +1,6 @@
export const isCategory = (trackname: string) => {
- const audioEndings = ["==", "--"];
- return (
- audioEndings.filter((ending) => trackname.startsWith(ending)).length === 1
- );
-} \ No newline at end of file
+ const audioEndings = ["==", "--"];
+ return (
+ audioEndings.filter((ending) => trackname.startsWith(ending)).length === 1
+ );
+};
diff --git a/webAO/client/isLowMemory.ts b/webAO/client/isLowMemory.ts
index caa6784..8a8bd48 100644
--- a/webAO/client/isLowMemory.ts
+++ b/webAO/client/isLowMemory.ts
@@ -1,10 +1,10 @@
-import { setOldLoading } from '../client'
+import { setOldLoading } from "../client";
export const isLowMemory = () => {
- if (
- /webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Nintendo|Opera Mini/i.test(
- navigator.userAgent
- )
- ) {
- setOldLoading(true);
- }
-}
+ if (
+ /webOS|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|PlayStation|Nintendo|Opera Mini/i.test(
+ navigator.userAgent,
+ )
+ ) {
+ setOldLoading(true);
+ }
+};
diff --git a/webAO/client/loadResources.ts b/webAO/client/loadResources.ts
index 4954966..2608ace 100644
--- a/webAO/client/loadResources.ts
+++ b/webAO/client/loadResources.ts
@@ -1,81 +1,84 @@
import getCookie from "../utils/getCookie";
import vanilla_evidence_arr from "../constants/evidence.js";
import vanilla_background_arr from "../constants/backgrounds.js";
-import { changeMusicVolume } from '../dom/changeMusicVolume'
+import { changeMusicVolume } from "../dom/changeMusicVolume";
import { setChatbox } from "../dom/setChatbox";
-import { changeSFXVolume, changeShoutVolume, changeTestimonyVolume } from "../dom/changeVolume";
+import {
+ changeSFXVolume,
+ changeShoutVolume,
+ changeTestimonyVolume,
+} from "../dom/changeVolume";
import { showname_click } from "../dom/showNameClick";
-import { changeBlipVolume } from '../dom/changeBlipVolume'
-import { reloadTheme } from '../dom/reloadTheme'
+import { changeBlipVolume } from "../dom/changeBlipVolume";
+import { reloadTheme } from "../dom/reloadTheme";
const version = process.env.npm_package_version;
/**
- * Load game resources and stored settings.
- */
+ * Load game resources and stored settings.
+ */
export const loadResources = () => {
- document.getElementById("client_version")!.innerText = `version ${version}`;
- // Load background array to select
- const background_select = <HTMLSelectElement>(
- document.getElementById("bg_select")
- );
- background_select.add(new Option("Custom", "0"));
- vanilla_background_arr.forEach((background) => {
- background_select.add(new Option(background));
- });
+ document.getElementById("client_version")!.innerText = `version ${version}`;
+ // Load background array to select
+ const background_select = <HTMLSelectElement>(
+ document.getElementById("bg_select")
+ );
+ background_select.add(new Option("Custom", "0"));
+ vanilla_background_arr.forEach((background) => {
+ background_select.add(new Option(background));
+ });
- // Load evidence array to select
- const evidence_select = <HTMLSelectElement>(
- document.getElementById("evi_select")
- );
- evidence_select.add(new Option("Custom", "0"));
- vanilla_evidence_arr.forEach((evidence) => {
- evidence_select.add(new Option(evidence));
- });
+ // Load evidence array to select
+ const evidence_select = <HTMLSelectElement>(
+ document.getElementById("evi_select")
+ );
+ evidence_select.add(new Option("Custom", "0"));
+ vanilla_evidence_arr.forEach((evidence) => {
+ evidence_select.add(new Option(evidence));
+ });
- // Read cookies and set the UI to its values
- (<HTMLInputElement>document.getElementById("OOC_name")).value =
- getCookie("OOC_name") ||
- `web${String(Math.round(Math.random() * 100 + 10))}`;
+ // Read cookies and set the UI to its values
+ (<HTMLInputElement>document.getElementById("OOC_name")).value =
+ getCookie("OOC_name") ||
+ `web${String(Math.round(Math.random() * 100 + 10))}`;
- // Read cookies and set the UI to its values
- const cookietheme = getCookie("theme") || "default";
+ // Read cookies and set the UI to its values
+ const cookietheme = getCookie("theme") || "default";
- (<HTMLOptionElement>(
- document.querySelector(`#client_themeselect [value="${cookietheme}"]`)
- )).selected = true;
- reloadTheme();
+ (<HTMLOptionElement>(
+ document.querySelector(`#client_themeselect [value="${cookietheme}"]`)
+ )).selected = true;
+ reloadTheme();
- const cookiechatbox = getCookie("chatbox") || "dynamic";
+ const cookiechatbox = getCookie("chatbox") || "dynamic";
- (<HTMLOptionElement>(
- document.querySelector(`#client_chatboxselect [value="${cookiechatbox}"]`)
- )).selected = true;
- setChatbox(cookiechatbox);
+ (<HTMLOptionElement>(
+ document.querySelector(`#client_chatboxselect [value="${cookiechatbox}"]`)
+ )).selected = true;
+ setChatbox(cookiechatbox);
- (<HTMLInputElement>document.getElementById("client_mvolume")).value =
- getCookie("musicVolume") || "1";
- changeMusicVolume();
- (<HTMLAudioElement>document.getElementById("client_sfxaudio")).volume =
- Number(getCookie("sfxVolume")) || 1;
- changeSFXVolume();
- (<HTMLAudioElement>document.getElementById("client_shoutaudio")).volume =
- Number(getCookie("shoutVolume")) || 1;
- changeShoutVolume();
- (<HTMLAudioElement>(
- document.getElementById("client_testimonyaudio")
- )).volume = Number(getCookie("testimonyVolume")) || 1;
- changeTestimonyVolume();
- (<HTMLInputElement>document.getElementById("client_bvolume")).value =
- getCookie("blipVolume") || "1";
- changeBlipVolume();
+ (<HTMLInputElement>document.getElementById("client_mvolume")).value =
+ getCookie("musicVolume") || "1";
+ changeMusicVolume();
+ (<HTMLAudioElement>document.getElementById("client_sfxaudio")).volume =
+ Number(getCookie("sfxVolume")) || 1;
+ changeSFXVolume();
+ (<HTMLAudioElement>document.getElementById("client_shoutaudio")).volume =
+ Number(getCookie("shoutVolume")) || 1;
+ changeShoutVolume();
+ (<HTMLAudioElement>document.getElementById("client_testimonyaudio")).volume =
+ Number(getCookie("testimonyVolume")) || 1;
+ changeTestimonyVolume();
+ (<HTMLInputElement>document.getElementById("client_bvolume")).value =
+ getCookie("blipVolume") || "1";
+ changeBlipVolume();
- (<HTMLInputElement>document.getElementById("ic_chat_name")).value =
- getCookie("ic_chat_name");
- (<HTMLInputElement>document.getElementById("showname")).checked = Boolean(
- getCookie("showname")
- );
- showname_click(null);
+ (<HTMLInputElement>document.getElementById("ic_chat_name")).value =
+ getCookie("ic_chat_name");
+ (<HTMLInputElement>document.getElementById("showname")).checked = Boolean(
+ getCookie("showname"),
+ );
+ showname_click(null);
- (<HTMLInputElement>document.getElementById("client_callwords")).value =
- getCookie("callwords");
-} \ No newline at end of file
+ (<HTMLInputElement>document.getElementById("client_callwords")).value =
+ getCookie("callwords");
+};
diff --git a/webAO/client/resetICParams.ts b/webAO/client/resetICParams.ts
index 414da27..e67cf22 100644
--- a/webAO/client/resetICParams.ts
+++ b/webAO/client/resetICParams.ts
@@ -6,16 +6,16 @@ import { selectedShout, setSelectedShout } from "../client";
* was successfully sent/presented.
*/
export function resetICParams() {
- (<HTMLInputElement>document.getElementById("client_inputbox")).value = "";
- document.getElementById("button_flash")!.className = "client_button";
- document.getElementById("button_shake")!.className = "client_button";
+ (<HTMLInputElement>document.getElementById("client_inputbox")).value = "";
+ document.getElementById("button_flash")!.className = "client_button";
+ document.getElementById("button_shake")!.className = "client_button";
- (<HTMLInputElement>document.getElementById("sendpreanim")).checked = false;
- (<HTMLInputElement>document.getElementById("sendsfx")).checked = false;
+ (<HTMLInputElement>document.getElementById("sendpreanim")).checked = false;
+ (<HTMLInputElement>document.getElementById("sendsfx")).checked = false;
- if (selectedShout) {
- document.getElementById(`button_${selectedShout}`)!.className =
- "client_button";
- setSelectedShout(0);
- }
-} \ No newline at end of file
+ if (selectedShout) {
+ document.getElementById(`button_${selectedShout}`)!.className =
+ "client_button";
+ setSelectedShout(0);
+ }
+}
diff --git a/webAO/client/saveChatLogHandle.ts b/webAO/client/saveChatLogHandle.ts
index 497dd50..e083f2f 100644
--- a/webAO/client/saveChatLogHandle.ts
+++ b/webAO/client/saveChatLogHandle.ts
@@ -1,26 +1,26 @@
import downloadFile from "../services/downloadFile";
export const saveChatlogHandle = async () => {
- const clientLog = document.getElementById("client_log")!;
- const icMessageLogs = clientLog.getElementsByTagName("p");
- const messages: string[] = [];
+ const clientLog = document.getElementById("client_log")!;
+ const icMessageLogs = clientLog.getElementsByTagName("p");
+ const messages: string[] = [];
- for (let i = 0; i < icMessageLogs.length; i++) {
- const SHOWNAME_POSITION = 0;
- const TEXT_POSITION = 2;
- const showname = icMessageLogs[i].children[SHOWNAME_POSITION].innerHTML;
- const text = icMessageLogs[i].children[TEXT_POSITION].innerHTML;
- const message = `${showname}: ${text}`;
- messages.push(message);
- }
- const d = new Date();
- const ye = new Intl.DateTimeFormat("en", { year: "numeric" }).format(d);
- const mo = new Intl.DateTimeFormat("en", { month: "short" }).format(d);
- const da = new Intl.DateTimeFormat("en", { day: "2-digit" }).format(d);
+ for (let i = 0; i < icMessageLogs.length; i++) {
+ const SHOWNAME_POSITION = 0;
+ const TEXT_POSITION = 2;
+ const showname = icMessageLogs[i].children[SHOWNAME_POSITION].innerHTML;
+ const text = icMessageLogs[i].children[TEXT_POSITION].innerHTML;
+ const message = `${showname}: ${text}`;
+ messages.push(message);
+ }
+ const d = new Date();
+ const ye = new Intl.DateTimeFormat("en", { year: "numeric" }).format(d);
+ const mo = new Intl.DateTimeFormat("en", { month: "short" }).format(d);
+ const da = new Intl.DateTimeFormat("en", { day: "2-digit" }).format(d);
- const filename = `chatlog-${da}-${mo}-${ye}`.toLowerCase();
- downloadFile(messages.join("\n"), filename);
+ const filename = `chatlog-${da}-${mo}-${ye}`.toLowerCase();
+ downloadFile(messages.join("\n"), filename);
- // Reset Chatbox to Empty
- (<HTMLInputElement>document.getElementById("client_inputbox")).value = "";
-}; \ No newline at end of file
+ // Reset Chatbox to Empty
+ (<HTMLInputElement>document.getElementById("client_inputbox")).value = "";
+};
diff --git a/webAO/client/sender/index.ts b/webAO/client/sender/index.ts
index 4781ec1..a50fce3 100644
--- a/webAO/client/sender/index.ts
+++ b/webAO/client/sender/index.ts
@@ -1,71 +1,73 @@
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'
-import {sendMA} from './sendMA'
+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";
+import { sendMA } from "./sendMA";
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
- sendMA: (id: number, length: number, reason: string) => void
+ 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;
+ sendMA: (id: number, length: number, reason: string) => void;
}
export const sender = {
- sendIC,
- sendSelf,
- sendServer,
- sendCheck,
- sendHP,
- sendOOC,
- sendCharacter,
- sendRT,
- sendMusicChange,
- sendZZ,
- sendEE,
- sendDE,
- sendPE,
- sendMA
-} \ No newline at end of file
+ sendIC,
+ sendSelf,
+ sendServer,
+ sendCheck,
+ sendHP,
+ sendOOC,
+ sendCharacter,
+ sendRT,
+ sendMusicChange,
+ sendZZ,
+ sendEE,
+ sendDE,
+ sendPE,
+ sendMA,
+};
diff --git a/webAO/client/sender/sendCharacter.ts b/webAO/client/sender/sendCharacter.ts
index 5e81727..2db4dcd 100644
--- a/webAO/client/sender/sendCharacter.ts
+++ b/webAO/client/sender/sendCharacter.ts
@@ -5,7 +5,7 @@ import { client } from "../../client";
* @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
+ if (character === -1 || client.chars[character].name) {
+ client.sender.sendServer(`CC#${client.playerID}#${character}#web#%`);
+ }
+};
diff --git a/webAO/client/sender/sendCheck.ts b/webAO/client/sender/sendCheck.ts
index 91b3a02..7eb4751 100644
--- a/webAO/client/sender/sendCheck.ts
+++ b/webAO/client/sender/sendCheck.ts
@@ -4,5 +4,5 @@ import { client } from "../../client";
* Sends a keepalive packet.
*/
export const sendCheck = () => {
- client.sender.sendServer(`CH#${client.charID}#%`);
-}
+ client.sender.sendServer(`CH#${client.charID}#%`);
+};
diff --git a/webAO/client/sender/sendDE.ts b/webAO/client/sender/sendDE.ts
index 4d94d65..cf8fa5a 100644
--- a/webAO/client/sender/sendDE.ts
+++ b/webAO/client/sender/sendDE.ts
@@ -5,5 +5,5 @@ import { client } from "../../client";
* @param {number} evidence id
*/
export const sendDE = (id: number) => {
- client.sender.sendServer(`DE#${id}#%`);
-} \ No newline at end of file
+ client.sender.sendServer(`DE#${id}#%`);
+};
diff --git a/webAO/client/sender/sendEE.ts b/webAO/client/sender/sendEE.ts
index 7c5bfe3..2aac2a6 100644
--- a/webAO/client/sender/sendEE.ts
+++ b/webAO/client/sender/sendEE.ts
@@ -1,7 +1,6 @@
import { client } from "../../client";
import { escapeChat } from "../../encoding";
-
/**
* Sends edit evidence command.
* @param {number} evidence id
@@ -10,7 +9,7 @@ import { escapeChat } from "../../encoding";
* @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
+ client.sender.sendServer(
+ `EE#${id}#${escapeChat(name)}#${escapeChat(desc)}#${escapeChat(img)}#%`,
+ );
+};
diff --git a/webAO/client/sender/sendHP.ts b/webAO/client/sender/sendHP.ts
index d007094..bd44163 100644
--- a/webAO/client/sender/sendHP.ts
+++ b/webAO/client/sender/sendHP.ts
@@ -6,5 +6,5 @@ import { client } from "../../client";
* @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
+ client.sender.sendServer(`HP#${side}#${hp}#%`);
+};
diff --git a/webAO/client/sender/sendIC.ts b/webAO/client/sender/sendIC.ts
index ca8984f..d23a113 100644
--- a/webAO/client/sender/sendIC.ts
+++ b/webAO/client/sender/sendIC.ts
@@ -1,8 +1,8 @@
import { extrafeatures } from "../../client";
import { escapeChat } from "../../encoding";
-import {client} from '../../client'
+import { client } from "../../client";
import queryParser from "../../utils/queryParser";
-const {mode} = queryParser()
+const { mode } = queryParser();
/**
* Sends an in-character chat message.
@@ -26,81 +26,81 @@ const {mode} = queryParser()
* @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
+ 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 = "";
+ 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("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)}#`;
- }
- }
+ 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}%`;
+ 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
+ client.sender.sendServer(serverMessage);
+ if (mode === "replay") {
+ (<HTMLInputElement>document.getElementById("client_ooclog")).value +=
+ `wait#${
+ (<HTMLInputElement>document.getElementById("client_replaytimer")).value
+ }#%\r\n`;
+ }
+};
diff --git a/webAO/client/sender/sendMA.ts b/webAO/client/sender/sendMA.ts
index 5ba4e4b..6260da1 100644
--- a/webAO/client/sender/sendMA.ts
+++ b/webAO/client/sender/sendMA.ts
@@ -7,5 +7,5 @@ import { client } from "../../client";
* @param {string} reason player message
*/
export const sendMA = (id: number, length: number, reason: string) => {
- client.sender.sendServer(`MA#${id}#${length}#${reason}#%`);
-} \ No newline at end of file
+ client.sender.sendServer(`MA#${id}#${length}#${reason}#%`);
+};
diff --git a/webAO/client/sender/sendMusicChange.ts b/webAO/client/sender/sendMusicChange.ts
index 50c6306..69cba58 100644
--- a/webAO/client/sender/sendMusicChange.ts
+++ b/webAO/client/sender/sendMusicChange.ts
@@ -1,10 +1,9 @@
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}#%`);
-}
+ client.sender.sendServer(`MC#${track}#${client.charID}#%`);
+};
diff --git a/webAO/client/sender/sendOOC.ts b/webAO/client/sender/sendOOC.ts
index 9674ad9..43c3773 100644
--- a/webAO/client/sender/sendOOC.ts
+++ b/webAO/client/sender/sendOOC.ts
@@ -1,33 +1,33 @@
-import { client } from '../../client'
-import { escapeChat } from '../../encoding';
-import setCookie from '../../utils/setCookie';
-import { saveChatlogHandle } from '../../client/saveChatLogHandle'
+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)}`;
+ 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));
+ 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}#%`);
+ if (oocMessage && commandsMap.has(oocMessage.toLowerCase())) {
+ try {
+ commandsMap.get(oocMessage.toLowerCase())();
+ } catch (e) {
+ // Command Not Recognized
}
-} \ No newline at end of file
+ } else {
+ client.sender.sendServer(`CT#${oocName}#${oocMessage}#%`);
+ }
+};
diff --git a/webAO/client/sender/sendPE.ts b/webAO/client/sender/sendPE.ts
index 984fc4d..609a4df 100644
--- a/webAO/client/sender/sendPE.ts
+++ b/webAO/client/sender/sendPE.ts
@@ -8,7 +8,7 @@ import { escapeChat } from "../../encoding";
* @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
+ client.sender.sendServer(
+ `PE#${escapeChat(name)}#${escapeChat(desc)}#${escapeChat(img)}#%`,
+ );
+};
diff --git a/webAO/client/sender/sendRT.ts b/webAO/client/sender/sendRT.ts
index 2d6c60a..6953870 100644
--- a/webAO/client/sender/sendRT.ts
+++ b/webAO/client/sender/sendRT.ts
@@ -5,5 +5,5 @@ import { client } from "../../client";
* @param {string} testimony type
*/
export const sendRT = (testimony: string) => {
- client.sender.sendServer(`RT#${testimony}#%`);
-} \ No newline at end of file
+ client.sender.sendServer(`RT#${testimony}#%`);
+};
diff --git a/webAO/client/sender/sendSelf.ts b/webAO/client/sender/sendSelf.ts
index 66c35fa..15665a7 100644
--- a/webAO/client/sender/sendSelf.ts
+++ b/webAO/client/sender/sendSelf.ts
@@ -1,13 +1,11 @@
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
+ (<HTMLInputElement>document.getElementById("client_ooclog")).value +=
+ `${message}\r\n`;
+ client.handleSelf(message);
+};
diff --git a/webAO/client/sender/sendServer.ts b/webAO/client/sender/sendServer.ts
index ae95480..d48cc85 100644
--- a/webAO/client/sender/sendServer.ts
+++ b/webAO/client/sender/sendServer.ts
@@ -1,11 +1,13 @@
import { client } from "../../client";
import queryParser from "../../utils/queryParser";
-const { mode } = queryParser()
+const { mode } = queryParser();
/**
* Hook for sending messages to the server
* @param {string} message the message to send
*/
export const sendServer = (message: string) => {
- console.debug("C: "+message)
- mode === "replay" ? client.sender.sendSelf(message) : client.serv.send(message);
-} \ No newline at end of file
+ console.debug("C: " + message);
+ mode === "replay"
+ ? client.sender.sendSelf(message)
+ : client.serv.send(message);
+};
diff --git a/webAO/client/sender/sendZZ.ts b/webAO/client/sender/sendZZ.ts
index 237ab37..e9bd443 100644
--- a/webAO/client/sender/sendZZ.ts
+++ b/webAO/client/sender/sendZZ.ts
@@ -5,9 +5,9 @@ import { client, extrafeatures } from "../../client";
* @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
+ if (extrafeatures.includes("modcall_reason")) {
+ client.sender.sendServer(`ZZ#${msg}#%`);
+ } else {
+ client.sender.sendServer("ZZ#%");
+ }
+};
diff --git a/webAO/client/setEmote.ts b/webAO/client/setEmote.ts
index 2b5a614..70f23ac 100644
--- a/webAO/client/setEmote.ts
+++ b/webAO/client/setEmote.ts
@@ -8,48 +8,50 @@ import fileExists from "../utils/fileExists";
*/
const setEmote = async (
- AO_HOST: string,
- client: Client,
- charactername: string,
- emotename: string,
- prefix: string,
- pair: boolean,
- side: string
+ AO_HOST: string,
+ client: Client,
+ charactername: string,
+ emotename: string,
+ prefix: string,
+ pair: boolean,
+ side: string,
) => {
- const pairID = pair ? "pair" : "char";
- const characterFolder = `${AO_HOST}characters/`;
- const acceptedPositions = ["def", "pro", "wit"];
- const position = acceptedPositions.includes(side) ? `${side}_` : "";
- const emoteSelector = document.getElementById(
- `client_${position}${pairID}_img`
- ) as HTMLImageElement;
- const extensionsMap = [".gif", ".png", ".apng", ".webp", ".webp.static"];
+ const pairID = pair ? "pair" : "char";
+ const characterFolder = `${AO_HOST}characters/`;
+ const acceptedPositions = ["def", "pro", "wit"];
+ const position = acceptedPositions.includes(side) ? `${side}_` : "";
+ const emoteSelector = document.getElementById(
+ `client_${position}${pairID}_img`,
+ ) as HTMLImageElement;
+ const extensionsMap = [".gif", ".png", ".apng", ".webp", ".webp.static"];
- for (const extension of extensionsMap) {
+ for (const extension of extensionsMap) {
// Hides all sprites before creating a new sprite
- if (client.viewport.getLastCharacter() !== client.viewport.getChatmsg().name) {
- emoteSelector.src = transparentPng;
- }
- let url;
- if (extension === ".png") {
- url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
- emotename
- )}${extension}`;
- } else if (extension === ".webp.static") {
- url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
- emotename
- )}.webp`;
- } else {
- url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
- prefix
- )}${encodeURI(emotename)}${extension}`;
- }
- const exists = await fileExists(url);
- if (exists) {
- emoteSelector.src = url;
- break;
- }
+ if (
+ client.viewport.getLastCharacter() !== client.viewport.getChatmsg().name
+ ) {
+ emoteSelector.src = transparentPng;
}
+ let url;
+ if (extension === ".png") {
+ url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
+ emotename,
+ )}${extension}`;
+ } else if (extension === ".webp.static") {
+ url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
+ emotename,
+ )}.webp`;
+ } else {
+ url = `${characterFolder}${encodeURI(charactername)}/${encodeURI(
+ prefix,
+ )}${encodeURI(emotename)}${extension}`;
+ }
+ const exists = await fileExists(url);
+ if (exists) {
+ emoteSelector.src = url;
+ break;
+ }
+ }
};
export default setEmote;
diff --git a/webAO/dom/addEvidence.ts b/webAO/dom/addEvidence.ts
index 84c7fae..f9207bb 100644
--- a/webAO/dom/addEvidence.ts
+++ b/webAO/dom/addEvidence.ts
@@ -5,16 +5,16 @@ import { cancelEvidence } from "./cancelEvidence";
* Add evidence.
*/
export function addEvidence() {
- const evidence_select = <HTMLSelectElement>(
- document.getElementById("evi_select")
- );
- client.sender.sendPE(
- (<HTMLInputElement>document.getElementById("evi_name")).value,
- (<HTMLInputElement>document.getElementById("evi_desc")).value,
- evidence_select.selectedIndex === 0
- ? (<HTMLInputElement>document.getElementById("evi_filename")).value
- : evidence_select.options[evidence_select.selectedIndex].text
- );
- cancelEvidence();
+ const evidence_select = <HTMLSelectElement>(
+ document.getElementById("evi_select")
+ );
+ client.sender.sendPE(
+ (<HTMLInputElement>document.getElementById("evi_name")).value,
+ (<HTMLInputElement>document.getElementById("evi_desc")).value,
+ evidence_select.selectedIndex === 0
+ ? (<HTMLInputElement>document.getElementById("evi_filename")).value
+ : evidence_select.options[evidence_select.selectedIndex].text,
+ );
+ cancelEvidence();
}
-window.addEvidence = addEvidence; \ No newline at end of file
+window.addEvidence = addEvidence;
diff --git a/webAO/dom/addHPD.ts b/webAO/dom/addHPD.ts
index 8f7e1f7..3a7a853 100644
--- a/webAO/dom/addHPD.ts
+++ b/webAO/dom/addHPD.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Increment defense health point.
*/
export function addHPD() {
- client.sender.sendHP(1, client.hp[0] + 1);
+ client.sender.sendHP(1, client.hp[0] + 1);
}
-window.addHPD = addHPD; \ No newline at end of file
+window.addHPD = addHPD;
diff --git a/webAO/dom/addHPP.ts b/webAO/dom/addHPP.ts
index 1379f7c..2329f7e 100644
--- a/webAO/dom/addHPP.ts
+++ b/webAO/dom/addHPP.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Increment prosecution health point.
*/
export function addHPP() {
- client.sender.sendHP(2, client.hp[1] + 1);
+ client.sender.sendHP(2, client.hp[1] + 1);
}
-window.addHPP = addHPP; \ No newline at end of file
+window.addHPP = addHPP;
diff --git a/webAO/dom/areaClick.ts b/webAO/dom/areaClick.ts
index e217c2c..1e41f4b 100644
--- a/webAO/dom/areaClick.ts
+++ b/webAO/dom/areaClick.ts
@@ -1,18 +1,18 @@
-import { client } from '../client'
-import { updatePlayerAreas } from './updatePlayerAreas'
+import { client } from "../client";
+import { updatePlayerAreas } from "./updatePlayerAreas";
/**
* Triggered when an item on the area list is clicked.
* @param {HTMLElement} el
*/
export function area_click(el: HTMLElement) {
- const area = client.areas[el.id.substring(4)].name;
- client.sender.sendMusicChange(area);
+ const area = client.areas[el.id.substring(4)].name;
+ client.sender.sendMusicChange(area);
- const areaHr = document.createElement("div");
- areaHr.className = "hrtext";
- areaHr.textContent = `switched to ${el.textContent}`;
- document.getElementById("client_log")!.appendChild(areaHr);
- client.area = Number(el.id.substring(4));
- updatePlayerAreas(client.area);
+ const areaHr = document.createElement("div");
+ areaHr.className = "hrtext";
+ areaHr.textContent = `switched to ${el.textContent}`;
+ document.getElementById("client_log")!.appendChild(areaHr);
+ client.area = Number(el.id.substring(4));
+ updatePlayerAreas(client.area);
}
-window.area_click = area_click; \ No newline at end of file
+window.area_click = area_click;
diff --git a/webAO/dom/banPlayer.ts b/webAO/dom/banPlayer.ts
index f122a1b..bf8622b 100644
--- a/webAO/dom/banPlayer.ts
+++ b/webAO/dom/banPlayer.ts
@@ -1,16 +1,16 @@
-import { client } from '../client'
+import { client } from "../client";
/**
* Tries to ban a player from the playerlist
* @param {Number} id the players id
*/
export function banPlayer(id: number) {
- let reason;
- let length;
- reason = prompt("Please enter the reason", "Being annoying");
- length = Number(prompt("Please enter the ban length in minutes", "60"));
+ let reason;
+ let length;
+ reason = prompt("Please enter the reason", "Being annoying");
+ length = Number(prompt("Please enter the ban length in minutes", "60"));
- client.sender.sendMA(id, length, reason);
+ client.sender.sendMA(id, length, reason);
}
window.banPlayer = banPlayer;
@@ -19,9 +19,9 @@ window.banPlayer = banPlayer;
* @param {Number} id the players id
*/
export function kickPlayer(id: number) {
- let reason;
- reason = prompt("Please enter the reason", "Being annoying");
+ let reason;
+ reason = prompt("Please enter the reason", "Being annoying");
- client.sender.sendMA(id, 0, reason);
+ client.sender.sendMA(id, 0, reason);
}
-window.kickPlayer = kickPlayer; \ No newline at end of file
+window.kickPlayer = kickPlayer;
diff --git a/webAO/dom/callMod.ts b/webAO/dom/callMod.ts
index a2e2685..8d4c80d 100644
--- a/webAO/dom/callMod.ts
+++ b/webAO/dom/callMod.ts
@@ -3,14 +3,14 @@ import { client, extrafeatures } from "../client";
* Call mod.
*/
export function callMod() {
- let modcall;
- if (extrafeatures.includes("modcall_reason")) {
- modcall = prompt("Please enter the reason for the modcall", "");
- }
- if (modcall == null || modcall === "") {
- // cancel
- } else {
- client.sender.sendZZ(modcall);
- }
+ let modcall;
+ if (extrafeatures.includes("modcall_reason")) {
+ modcall = prompt("Please enter the reason for the modcall", "");
+ }
+ if (modcall == null || modcall === "") {
+ // cancel
+ } else {
+ client.sender.sendZZ(modcall);
+ }
}
-window.callMod = callMod; \ No newline at end of file
+window.callMod = callMod;
diff --git a/webAO/dom/cancelEvidence.ts b/webAO/dom/cancelEvidence.ts
index 05910f8..2ebcd9c 100644
--- a/webAO/dom/cancelEvidence.ts
+++ b/webAO/dom/cancelEvidence.ts
@@ -1,36 +1,34 @@
-import { client, } from "../client";
-import { updateEvidenceIcon } from './updateEvidenceIcon'
+import { client } from "../client";
+import { updateEvidenceIcon } from "./updateEvidenceIcon";
import { AO_HOST } from "../client/aoHost";
-
/**
* Cancel evidence selection.
*/
export function cancelEvidence() {
- // Clear evidence data
- if (client.selectedEvidence >= 0) {
- document.getElementById(`evi_${client.selectedEvidence}`)!.className =
- "evi_icon";
- }
- client.selectedEvidence = -1;
+ // Clear evidence data
+ if (client.selectedEvidence >= 0) {
+ document.getElementById(`evi_${client.selectedEvidence}`)!.className =
+ "evi_icon";
+ }
+ client.selectedEvidence = -1;
- // Clear evidence on information window
- (<HTMLSelectElement>document.getElementById("evi_select")).selectedIndex = 0;
- updateEvidenceIcon(); // Update icon widget
- (<HTMLInputElement>document.getElementById("evi_filename")).value = "";
- (<HTMLInputElement>document.getElementById("evi_name")).value = "";
- (<HTMLInputElement>document.getElementById("evi_desc")).value = "";
- (<HTMLImageElement>(
- document.getElementById("evi_preview")
- )).src = `${AO_HOST}misc/empty.png`; // Clear icon
+ // Clear evidence on information window
+ (<HTMLSelectElement>document.getElementById("evi_select")).selectedIndex = 0;
+ updateEvidenceIcon(); // Update icon widget
+ (<HTMLInputElement>document.getElementById("evi_filename")).value = "";
+ (<HTMLInputElement>document.getElementById("evi_name")).value = "";
+ (<HTMLInputElement>document.getElementById("evi_desc")).value = "";
+ (<HTMLImageElement>document.getElementById("evi_preview")).src =
+ `${AO_HOST}misc/empty.png`; // Clear icon
- // Update button
- document.getElementById("evi_add")!.className = "client_button hover_button";
- document.getElementById("evi_edit")!.className =
- "client_button hover_button inactive";
- document.getElementById("evi_cancel")!.className =
- "client_button hover_button inactive";
- document.getElementById("evi_del")!.className =
- "client_button hover_button inactive";
+ // Update button
+ document.getElementById("evi_add")!.className = "client_button hover_button";
+ document.getElementById("evi_edit")!.className =
+ "client_button hover_button inactive";
+ document.getElementById("evi_cancel")!.className =
+ "client_button hover_button inactive";
+ document.getElementById("evi_del")!.className =
+ "client_button hover_button inactive";
}
-window.cancelEvidence = cancelEvidence; \ No newline at end of file
+window.cancelEvidence = cancelEvidence;
diff --git a/webAO/dom/changeBackgroundOOC.ts b/webAO/dom/changeBackgroundOOC.ts
index 55ce238..c90ecba 100644
--- a/webAO/dom/changeBackgroundOOC.ts
+++ b/webAO/dom/changeBackgroundOOC.ts
@@ -1,28 +1,26 @@
-
-import queryParser from '../utils/queryParser'
-import { client } from '../client'
-const { mode } = queryParser()
+import queryParser from "../utils/queryParser";
+import { client } from "../client";
+const { mode } = queryParser();
/**
* Change background via OOC.
*/
export function changeBackgroundOOC() {
- const selectedBG = <HTMLSelectElement>document.getElementById("bg_select");
- const changeBGCommand = "bg $1";
- const bgFilename = <HTMLInputElement>document.getElementById("bg_filename");
-
- let filename = "";
- if (selectedBG.selectedIndex === 0) {
- filename = bgFilename.value;
- } else {
- filename = selectedBG.value;
- }
+ const selectedBG = <HTMLSelectElement>document.getElementById("bg_select");
+ const changeBGCommand = "bg $1";
+ const bgFilename = <HTMLInputElement>document.getElementById("bg_filename");
+ let filename = "";
+ if (selectedBG.selectedIndex === 0) {
+ filename = bgFilename.value;
+ } else {
+ filename = selectedBG.value;
+ }
- if (mode === "join") {
- client.sender.sendOOC(`/${changeBGCommand.replace("$1", filename)}`);
- } else if (mode === "replay") {
- client.sender.sendSelf(`BN#${filename}#%`);
- }
+ if (mode === "join") {
+ client.sender.sendOOC(`/${changeBGCommand.replace("$1", filename)}`);
+ } else if (mode === "replay") {
+ client.sender.sendSelf(`BN#${filename}#%`);
+ }
}
-window.changeBackgroundOOC = changeBackgroundOOC; \ No newline at end of file
+window.changeBackgroundOOC = changeBackgroundOOC;
diff --git a/webAO/dom/changeBlipVolume.ts b/webAO/dom/changeBlipVolume.ts
index 572f389..2e77403 100644
--- a/webAO/dom/changeBlipVolume.ts
+++ b/webAO/dom/changeBlipVolume.ts
@@ -1,15 +1,15 @@
import setCookie from "../utils/setCookie";
-import { client } from '../client'
+import { client } from "../client";
/**
* Triggered by the blip volume slider.
*/
export const changeBlipVolume = () => {
- const blipVolume = (<HTMLInputElement>(
- document.getElementById("client_bvolume")
- )).value;
- client.viewport.blipChannels.forEach(
- (channel: HTMLAudioElement) => (channel.volume = Number(blipVolume))
- );
- setCookie("blipVolume", blipVolume);
-}
+ const blipVolume = (<HTMLInputElement>(
+ document.getElementById("client_bvolume")
+ )).value;
+ client.viewport.blipChannels.forEach(
+ (channel: HTMLAudioElement) => (channel.volume = Number(blipVolume)),
+ );
+ setCookie("blipVolume", blipVolume);
+};
window.changeBlipVolume = changeBlipVolume;
diff --git a/webAO/dom/changeCallwords.ts b/webAO/dom/changeCallwords.ts
index 28be674..e125817 100644
--- a/webAO/dom/changeCallwords.ts
+++ b/webAO/dom/changeCallwords.ts
@@ -1,13 +1,13 @@
-import { client } from '../client'
-import setCookie from '../utils/setCookie';
+import { client } from "../client";
+import setCookie from "../utils/setCookie";
/**
* Triggered by a changed callword list
*/
export function changeCallwords() {
- client.callwords = (<HTMLInputElement>(
- document.getElementById("client_callwords")
- )).value.split("\n");
- setCookie("callwords", client.callwords.join("\n"));
+ client.callwords = (<HTMLInputElement>(
+ document.getElementById("client_callwords")
+ )).value.split("\n");
+ setCookie("callwords", client.callwords.join("\n"));
}
-window.changeCallwords = changeCallwords; \ No newline at end of file
+window.changeCallwords = changeCallwords;
diff --git a/webAO/dom/changeCharacter.ts b/webAO/dom/changeCharacter.ts
index 7ecefe5..abf6f71 100644
--- a/webAO/dom/changeCharacter.ts
+++ b/webAO/dom/changeCharacter.ts
@@ -1,11 +1,10 @@
-
/**
* Triggered when a character icon is clicked in the character selection menu.
* @param {MouseEvent} event
*/
export function changeCharacter(_event: Event) {
- document.getElementById("client_waiting")!.style.display = "block";
- document.getElementById("client_charselect")!.style.display = "block";
- document.getElementById("client_emo")!.innerHTML = "";
+ document.getElementById("client_waiting")!.style.display = "block";
+ document.getElementById("client_charselect")!.style.display = "block";
+ document.getElementById("client_emo")!.innerHTML = "";
}
-window.changeCharacter = changeCharacter; \ No newline at end of file
+window.changeCharacter = changeCharacter;
diff --git a/webAO/dom/changeMusicVolume.ts b/webAO/dom/changeMusicVolume.ts
index b54661b..df0a656 100644
--- a/webAO/dom/changeMusicVolume.ts
+++ b/webAO/dom/changeMusicVolume.ts
@@ -1,14 +1,14 @@
-import { client } from '../client'
-import setCookie from '../utils/setCookie';
+import { client } from "../client";
+import setCookie from "../utils/setCookie";
export const changeMusicVolume = (volume: number = -1) => {
- const clientVolume = Number(
- (<HTMLInputElement>document.getElementById("client_mvolume")).value
- );
- const musicVolume = volume === -1 ? clientVolume : volume;
- client.viewport.music.forEach(
- (channel: HTMLAudioElement) => (channel.volume = musicVolume)
- );
- setCookie("musicVolume", String(musicVolume));
+ const clientVolume = Number(
+ (<HTMLInputElement>document.getElementById("client_mvolume")).value,
+ );
+ const musicVolume = volume === -1 ? clientVolume : volume;
+ client.viewport.music.forEach(
+ (channel: HTMLAudioElement) => (channel.volume = musicVolume),
+ );
+ setCookie("musicVolume", String(musicVolume));
};
-window.changeMusicVolume = changeMusicVolume; \ No newline at end of file
+window.changeMusicVolume = changeMusicVolume;
diff --git a/webAO/dom/changeRoleOOC.ts b/webAO/dom/changeRoleOOC.ts
index 7d89bee..1d79c2a 100644
--- a/webAO/dom/changeRoleOOC.ts
+++ b/webAO/dom/changeRoleOOC.ts
@@ -1,13 +1,13 @@
-import { updateActionCommands } from './updateActionCommands'
-import { client } from '../client'
+import { updateActionCommands } from "./updateActionCommands";
+import { client } from "../client";
/**
* Change role via OOC.
*/
export function changeRoleOOC() {
- const roleselect = <HTMLInputElement>document.getElementById("role_select");
+ const roleselect = <HTMLInputElement>document.getElementById("role_select");
- client.sender.sendOOC(`/pos ${roleselect.value}`);
- client.sender.sendServer(`SP#${roleselect.value}#%`);
- updateActionCommands(roleselect.value);
+ client.sender.sendOOC(`/pos ${roleselect.value}`);
+ client.sender.sendServer(`SP#${roleselect.value}#%`);
+ updateActionCommands(roleselect.value);
}
-window.changeRoleOOC = changeRoleOOC; \ No newline at end of file
+window.changeRoleOOC = changeRoleOOC;
diff --git a/webAO/dom/charError.ts b/webAO/dom/charError.ts
index 8cb672a..dfc054a 100644
--- a/webAO/dom/charError.ts
+++ b/webAO/dom/charError.ts
@@ -5,8 +5,8 @@ import transparentPng from "../constants/transparentPng";
* @param {HTMLImageElement} image the element containing the missing image
*/
export function charError(image: HTMLImageElement) {
- console.warn(`${image.src} is missing from webAO`);
- image.src = transparentPng;
- return true;
+ console.warn(`${image.src} is missing from webAO`);
+ image.src = transparentPng;
+ return true;
}
-window.charError = charError; \ No newline at end of file
+window.charError = charError;
diff --git a/webAO/dom/charTableFilter.ts b/webAO/dom/charTableFilter.ts
index d81fb88..a093ee2 100644
--- a/webAO/dom/charTableFilter.ts
+++ b/webAO/dom/charTableFilter.ts
@@ -1,20 +1,20 @@
-import { client } from '../client'
+import { client } from "../client";
/**
* Triggered when the music search bar is changed
* @param {MouseEvent} event
*/
export function chartable_filter(_event: Event) {
- const searchname = (<HTMLInputElement>(
- document.getElementById("client_charactersearch")
- )).value;
+ const searchname = (<HTMLInputElement>(
+ document.getElementById("client_charactersearch")
+ )).value;
- client.chars.forEach((character: any, charid: number) => {
- const demothing = document.getElementById(`demo_${charid}`)!;
- if (character.name.toLowerCase().indexOf(searchname.toLowerCase()) === -1) {
- demothing.style.display = "none";
- } else {
- demothing.style.display = "inline-block";
- }
- });
+ client.chars.forEach((character: any, charid: number) => {
+ const demothing = document.getElementById(`demo_${charid}`)!;
+ if (character.name.toLowerCase().indexOf(searchname.toLowerCase()) === -1) {
+ demothing.style.display = "none";
+ } else {
+ demothing.style.display = "inline-block";
+ }
+ });
}
-window.chartable_filter = chartable_filter; \ No newline at end of file
+window.chartable_filter = chartable_filter;
diff --git a/webAO/dom/deleteEvidence.ts b/webAO/dom/deleteEvidence.ts
index 764b9e5..0b5228e 100644
--- a/webAO/dom/deleteEvidence.ts
+++ b/webAO/dom/deleteEvidence.ts
@@ -5,8 +5,8 @@ import { cancelEvidence } from "./cancelEvidence";
* Delete selected evidence.
*/
export function deleteEvidence() {
- const id = client.selectedEvidence;
- client.sender.sendDE(id);
- cancelEvidence();
+ const id = client.selectedEvidence;
+ client.sender.sendDE(id);
+ cancelEvidence();
}
-window.deleteEvidence = deleteEvidence; \ No newline at end of file
+window.deleteEvidence = deleteEvidence;
diff --git a/webAO/dom/editEvidence.ts b/webAO/dom/editEvidence.ts
index 80ce350..bb4ab23 100644
--- a/webAO/dom/editEvidence.ts
+++ b/webAO/dom/editEvidence.ts
@@ -1,22 +1,22 @@
-import { client } from '../client'
-import { cancelEvidence } from './cancelEvidence';
+import { client } from "../client";
+import { cancelEvidence } from "./cancelEvidence";
/**
* Edit selected evidence.
*/
export function editEvidence() {
- const evidence_select = <HTMLSelectElement>(
- document.getElementById("evi_select")
- );
- const id = client.selectedEvidence;
- client.sender.sendEE(
- id,
- (<HTMLInputElement>document.getElementById("evi_name")).value,
- (<HTMLInputElement>document.getElementById("evi_desc")).value,
- evidence_select.selectedIndex === 0
- ? (<HTMLInputElement>document.getElementById("evi_filename")).value
- : evidence_select.options[evidence_select.selectedIndex].text
- );
- cancelEvidence();
+ const evidence_select = <HTMLSelectElement>(
+ document.getElementById("evi_select")
+ );
+ const id = client.selectedEvidence;
+ client.sender.sendEE(
+ id,
+ (<HTMLInputElement>document.getElementById("evi_name")).value,
+ (<HTMLInputElement>document.getElementById("evi_desc")).value,
+ evidence_select.selectedIndex === 0
+ ? (<HTMLInputElement>document.getElementById("evi_filename")).value
+ : evidence_select.options[evidence_select.selectedIndex].text,
+ );
+ cancelEvidence();
}
-window.editEvidence = editEvidence; \ No newline at end of file
+window.editEvidence = editEvidence;
diff --git a/webAO/dom/getIndexFromSelect.ts b/webAO/dom/getIndexFromSelect.ts
index 2f21653..dbbdd2b 100644
--- a/webAO/dom/getIndexFromSelect.ts
+++ b/webAO/dom/getIndexFromSelect.ts
@@ -4,13 +4,13 @@
* @param {string} value the value that need to be compared
*/
export function getIndexFromSelect(select_box: string, value: string) {
- // Find if icon alraedy existed in select box
- const select_element = <HTMLSelectElement>document.getElementById(select_box);
- for (let i = 1; i < select_element.length; ++i) {
- if (select_element.options[i].value === value) {
- return i;
- }
+ // Find if icon alraedy existed in select box
+ const select_element = <HTMLSelectElement>document.getElementById(select_box);
+ for (let i = 1; i < select_element.length; ++i) {
+ if (select_element.options[i].value === value) {
+ return i;
}
- return 0;
+ }
+ return 0;
}
-window.getIndexFromSelect = getIndexFromSelect; \ No newline at end of file
+window.getIndexFromSelect = getIndexFromSelect;
diff --git a/webAO/dom/guilty.ts b/webAO/dom/guilty.ts
index f008065..075dc00 100644
--- a/webAO/dom/guilty.ts
+++ b/webAO/dom/guilty.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Declare the defendant not guilty
*/
export function guilty() {
- client.sender.sendRT("judgeruling#1");
+ client.sender.sendRT("judgeruling#1");
}
-window.guilty = guilty; \ No newline at end of file
+window.guilty = guilty;
diff --git a/webAO/dom/imgError.ts b/webAO/dom/imgError.ts
index fdb6122..dfc6c92 100644
--- a/webAO/dom/imgError.ts
+++ b/webAO/dom/imgError.ts
@@ -3,8 +3,8 @@
* @param {HTMLImageElement} image the element containing the missing image
*/
export function imgError(image: HTMLImageElement) {
- image.onerror = null;
- image.src = ""; // unload so the old sprite doesn't persist
- return true;
+ image.onerror = null;
+ image.src = ""; // unload so the old sprite doesn't persist
+ return true;
}
-window.imgError = imgError; \ No newline at end of file
+window.imgError = imgError;
diff --git a/webAO/dom/iniEdit.ts b/webAO/dom/iniEdit.ts
index b26c179..245eedc 100644
--- a/webAO/dom/iniEdit.ts
+++ b/webAO/dom/iniEdit.ts
@@ -6,13 +6,16 @@ import { packetHandler } from "../packets/packetHandler";
* Triggered by the ini button.
*/
export async function iniedit() {
- const iniselect = (<HTMLSelectElement>document.getElementById("client_iniselect"))
- const ininame = (<HTMLInputElement>document.getElementById("client_ininame"));
- const inicharID = client.charID;
+ const iniselect = <HTMLSelectElement>(
+ document.getElementById("client_iniselect")
+ );
+ const ininame = <HTMLInputElement>document.getElementById("client_ininame");
+ const inicharID = client.charID;
- const newname = iniselect.selectedIndex === 0 ? ininame.value : iniselect.value;
+ const newname =
+ iniselect.selectedIndex === 0 ? ininame.value : iniselect.value;
- await handleCharacterInfo(newname.split("&"), inicharID);
- packetHandler.get("PV")!(`PV#0#CID#${inicharID}`.split("#"));
+ await handleCharacterInfo(newname.split("&"), inicharID);
+ packetHandler.get("PV")!(`PV#0#CID#${inicharID}`.split("#"));
}
window.iniedit = iniedit;
diff --git a/webAO/dom/initCE.ts b/webAO/dom/initCE.ts
index fd57d74..8c92481 100644
--- a/webAO/dom/initCE.ts
+++ b/webAO/dom/initCE.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Declare cross examination.
*/
export function initCE() {
- client.sender.sendRT("testimony2");
+ client.sender.sendRT("testimony2");
}
-window.initCE = initCE; \ No newline at end of file
+window.initCE = initCE;
diff --git a/webAO/dom/initWT.ts b/webAO/dom/initWT.ts
index d99fc3e..5b679cf 100644
--- a/webAO/dom/initWT.ts
+++ b/webAO/dom/initWT.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Declare witness testimony.
*/
export function initWT() {
- client.sender.sendRT("testimony1");
+ client.sender.sendRT("testimony1");
}
-window.initWT = initWT; \ No newline at end of file
+window.initWT = initWT;
diff --git a/webAO/dom/modCallTest.ts b/webAO/dom/modCallTest.ts
index 7058caf..d6fa246 100644
--- a/webAO/dom/modCallTest.ts
+++ b/webAO/dom/modCallTest.ts
@@ -3,6 +3,6 @@ import { packetHandler } from "../packets/packetHandler";
* Triggered by the modcall sfx dropdown
*/
export function modcall_test() {
- packetHandler.get("ZZ")!("test#test".split("#"));
+ packetHandler.get("ZZ")!("test#test".split("#"));
}
-window.modcall_test = modcall_test; \ No newline at end of file
+window.modcall_test = modcall_test;
diff --git a/webAO/dom/musicListClick.ts b/webAO/dom/musicListClick.ts
index 2243553..5a29dc4 100644
--- a/webAO/dom/musicListClick.ts
+++ b/webAO/dom/musicListClick.ts
@@ -4,18 +4,18 @@ import { client } from "../client";
* @param {MouseEvent} event
*/
export function musiclist_click(_event: Event) {
- const playtrack = (<HTMLInputElement>(
- document.getElementById("client_musiclist")
- )).value;
- client.sender.sendMusicChange(playtrack);
+ const playtrack = (<HTMLInputElement>(
+ document.getElementById("client_musiclist")
+ )).value;
+ client.sender.sendMusicChange(playtrack);
- // This is here so you can't actually select multiple tracks,
- // even though the select tag has the multiple option to render differently
- const musiclist_elements = (<HTMLSelectElement>(
- document.getElementById("client_musiclist")
- )).selectedOptions;
- for (let i = 0; i < musiclist_elements.length; i++) {
- musiclist_elements[i].selected = false;
- }
+ // This is here so you can't actually select multiple tracks,
+ // even though the select tag has the multiple option to render differently
+ const musiclist_elements = (<HTMLSelectElement>(
+ document.getElementById("client_musiclist")
+ )).selectedOptions;
+ for (let i = 0; i < musiclist_elements.length; i++) {
+ musiclist_elements[i].selected = false;
+ }
}
window.musiclist_click = musiclist_click;
diff --git a/webAO/dom/musicListFilter.ts b/webAO/dom/musicListFilter.ts
index b5284a2..b0a8c3b 100644
--- a/webAO/dom/musicListFilter.ts
+++ b/webAO/dom/musicListFilter.ts
@@ -1,24 +1,24 @@
-import { client } from '../client'
+import { client } from "../client";
/**
* Triggered when the music search bar is changed
* @param {MouseEvent} event
*/
export function musiclist_filter(_event: Event) {
- const musiclist_element = <HTMLSelectElement>(
+ const musiclist_element = <HTMLSelectElement>(
document.getElementById("client_musiclist")
);
- const searchname = (<HTMLInputElement>(
+ const searchname = (<HTMLInputElement>(
document.getElementById("client_musicsearch")
)).value;
- musiclist_element.innerHTML = "";
+ musiclist_element.innerHTML = "";
- for (const trackname of client.musics) {
- if (trackname.toLowerCase().indexOf(searchname.toLowerCase()) !== -1) {
- const newentry = <HTMLOptionElement>document.createElement("OPTION");
- newentry.text = trackname;
- musiclist_element.options.add(newentry);
- }
+ for (const trackname of client.musics) {
+ if (trackname.toLowerCase().indexOf(searchname.toLowerCase()) !== -1) {
+ const newentry = <HTMLOptionElement>document.createElement("OPTION");
+ newentry.text = trackname;
+ musiclist_element.options.add(newentry);
}
+ }
}
-window.musiclist_filter = musiclist_filter; \ No newline at end of file
+window.musiclist_filter = musiclist_filter;
diff --git a/webAO/dom/muteListClick.ts b/webAO/dom/muteListClick.ts
index 51bdd3d..2aca500 100644
--- a/webAO/dom/muteListClick.ts
+++ b/webAO/dom/muteListClick.ts
@@ -4,16 +4,16 @@ import { client } from "../client";
* @param {MouseEvent} event
*/
export function mutelist_click(_event: Event) {
- const mutelist = <HTMLSelectElement>(document.getElementById('mute_select'));
- const selected_character = mutelist.options[mutelist.selectedIndex];
+ const mutelist = <HTMLSelectElement>document.getElementById("mute_select");
+ const selected_character = mutelist.options[mutelist.selectedIndex];
- if (client.chars[selected_character.value].muted === false) {
- client.chars[selected_character.value].muted = true;
- selected_character.text = `${client.chars[selected_character.value].name} (muted)`;
- console.info(`muted ${client.chars[selected_character.value].name}`);
- } else {
- client.chars[selected_character.value].muted = false;
- selected_character.text = client.chars[selected_character.value].name;
- }
+ if (client.chars[selected_character.value].muted === false) {
+ client.chars[selected_character.value].muted = true;
+ selected_character.text = `${client.chars[selected_character.value].name} (muted)`;
+ console.info(`muted ${client.chars[selected_character.value].name}`);
+ } else {
+ client.chars[selected_character.value].muted = false;
+ selected_character.text = client.chars[selected_character.value].name;
+ }
}
-window.mutelist_click = mutelist_click; \ No newline at end of file
+window.mutelist_click = mutelist_click;
diff --git a/webAO/dom/notGuilty.ts b/webAO/dom/notGuilty.ts
index 95b830b..52d3462 100644
--- a/webAO/dom/notGuilty.ts
+++ b/webAO/dom/notGuilty.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Declare the defendant not guilty
*/
export function notguilty() {
- client.sender.sendRT("judgeruling#0");
+ client.sender.sendRT("judgeruling#0");
}
-window.notguilty = notguilty; \ No newline at end of file
+window.notguilty = notguilty;
diff --git a/webAO/dom/onEnter.ts b/webAO/dom/onEnter.ts
index 65bfa37..6c8cbe7 100644
--- a/webAO/dom/onEnter.ts
+++ b/webAO/dom/onEnter.ts
@@ -6,97 +6,97 @@ import { escapeChat } from "../encoding";
* @param {KeyboardEvent} event
*/
export function onEnter(event: KeyboardEvent) {
- if (event.keyCode === 13) {
- const mychar = client.character;
- const myemo = client.emote;
- const evi = client.evidence + 1;
- const flip = Boolean(
- document.getElementById("button_flip")!.classList.contains("dark")
- );
- const flash = Boolean(
- document.getElementById("button_flash")!.classList.contains("dark")
- );
- const screenshake = Boolean(
- document.getElementById("button_shake")!.classList.contains("dark")
- );
- const noninterrupting_preanim = Boolean(
- (<HTMLInputElement>document.getElementById("check_nonint")).checked
- );
- const looping_sfx = Boolean(
- (<HTMLInputElement>document.getElementById("check_loopsfx")).checked
- );
- const color = Number(
- (<HTMLInputElement>document.getElementById("textcolor")).value
- );
- const showname = escapeChat(
- (<HTMLInputElement>document.getElementById("ic_chat_name")).value
- );
- const text = (<HTMLInputElement>document.getElementById("client_inputbox"))
- .value;
- const pairchar = (<HTMLInputElement>document.getElementById("pair_select"))
- .value;
- const pairoffset = Number(
- (<HTMLInputElement>document.getElementById("pair_offset")).value
- );
- const pairyoffset = Number(
- (<HTMLInputElement>document.getElementById("pair_y_offset")).value
- );
- const myrole = (<HTMLInputElement>document.getElementById("role_select"))
- .value
- ? (<HTMLInputElement>document.getElementById("role_select")).value
- : mychar.side;
- const additive = Boolean(
- (<HTMLInputElement>document.getElementById("check_additive")).checked
- );
- const effect = (<HTMLInputElement>document.getElementById("effect_select"))
- .value;
+ if (event.keyCode === 13) {
+ const mychar = client.character;
+ const myemo = client.emote;
+ const evi = client.evidence + 1;
+ const flip = Boolean(
+ document.getElementById("button_flip")!.classList.contains("dark"),
+ );
+ const flash = Boolean(
+ document.getElementById("button_flash")!.classList.contains("dark"),
+ );
+ const screenshake = Boolean(
+ document.getElementById("button_shake")!.classList.contains("dark"),
+ );
+ const noninterrupting_preanim = Boolean(
+ (<HTMLInputElement>document.getElementById("check_nonint")).checked,
+ );
+ const looping_sfx = Boolean(
+ (<HTMLInputElement>document.getElementById("check_loopsfx")).checked,
+ );
+ const color = Number(
+ (<HTMLInputElement>document.getElementById("textcolor")).value,
+ );
+ const showname = escapeChat(
+ (<HTMLInputElement>document.getElementById("ic_chat_name")).value,
+ );
+ const text = (<HTMLInputElement>document.getElementById("client_inputbox"))
+ .value;
+ const pairchar = (<HTMLInputElement>document.getElementById("pair_select"))
+ .value;
+ const pairoffset = Number(
+ (<HTMLInputElement>document.getElementById("pair_offset")).value,
+ );
+ const pairyoffset = Number(
+ (<HTMLInputElement>document.getElementById("pair_y_offset")).value,
+ );
+ const myrole = (<HTMLInputElement>document.getElementById("role_select"))
+ .value
+ ? (<HTMLInputElement>document.getElementById("role_select")).value
+ : mychar.side;
+ const additive = Boolean(
+ (<HTMLInputElement>document.getElementById("check_additive")).checked,
+ );
+ const effect = (<HTMLInputElement>document.getElementById("effect_select"))
+ .value;
- let sfxname = "0";
- let sfxdelay = 0;
- let emote_mod = myemo.zoom;
- if ((<HTMLInputElement>document.getElementById("sendsfx")).checked) {
- sfxname = myemo.sfx;
- sfxdelay = myemo.sfxdelay;
- }
-
- // not to overwrite a 5 from the ini or anything else
- if ((<HTMLInputElement>document.getElementById("sendpreanim")).checked) {
- if (emote_mod === 0) {
- emote_mod = 1;
- }
- } else if (emote_mod === 1) {
- emote_mod = 0;
- }
+ let sfxname = "0";
+ let sfxdelay = 0;
+ let emote_mod = myemo.zoom;
+ if ((<HTMLInputElement>document.getElementById("sendsfx")).checked) {
+ sfxname = myemo.sfx;
+ sfxdelay = myemo.sfxdelay;
+ }
- client.sender.sendIC(
- myemo.deskmod,
- myemo.preanim,
- mychar.name,
- myemo.emote,
- text,
- myrole,
- sfxname,
- emote_mod,
- sfxdelay,
- selectedShout,
- evi,
- flip,
- flash,
- color,
- showname,
- pairchar,
- pairoffset,
- pairyoffset,
- noninterrupting_preanim,
- looping_sfx,
- screenshake,
- "-",
- "-",
- "-",
- additive,
- effect
- );
+ // not to overwrite a 5 from the ini or anything else
+ if ((<HTMLInputElement>document.getElementById("sendpreanim")).checked) {
+ if (emote_mod === 0) {
+ emote_mod = 1;
+ }
+ } else if (emote_mod === 1) {
+ emote_mod = 0;
}
- return false;
+
+ client.sender.sendIC(
+ myemo.deskmod,
+ myemo.preanim,
+ mychar.name,
+ myemo.emote,
+ text,
+ myrole,
+ sfxname,
+ emote_mod,
+ sfxdelay,
+ selectedShout,
+ evi,
+ flip,
+ flash,
+ color,
+ showname,
+ pairchar,
+ pairoffset,
+ pairyoffset,
+ noninterrupting_preanim,
+ looping_sfx,
+ screenshake,
+ "-",
+ "-",
+ "-",
+ additive,
+ effect,
+ );
+ }
+ return false;
}
window.onEnter = onEnter;
diff --git a/webAO/dom/onOOCEnter.ts b/webAO/dom/onOOCEnter.ts
index d7ec21b..e4e0971 100644
--- a/webAO/dom/onOOCEnter.ts
+++ b/webAO/dom/onOOCEnter.ts
@@ -4,12 +4,12 @@ import { client } from "../client";
* @param {KeyboardEvent} event
*/
export function onOOCEnter(event: KeyboardEvent) {
- if (event.keyCode === 13) {
- client.sender.sendOOC(
- (<HTMLInputElement>document.getElementById("client_oocinputbox")).value
- );
- (<HTMLInputElement>document.getElementById("client_oocinputbox")).value =
- "";
- }
+ if (event.keyCode === 13) {
+ client.sender.sendOOC(
+ (<HTMLInputElement>document.getElementById("client_oocinputbox")).value,
+ );
+ (<HTMLInputElement>document.getElementById("client_oocinputbox")).value =
+ "";
+ }
}
window.onOOCEnter = onOOCEnter;
diff --git a/webAO/dom/onReplayGo.ts b/webAO/dom/onReplayGo.ts
index 82a6f2f..4475778 100644
--- a/webAO/dom/onReplayGo.ts
+++ b/webAO/dom/onReplayGo.ts
@@ -5,6 +5,6 @@ import { client } from "../client";
* @param {KeyboardEvent} event
*/
export function onReplayGo(_event: Event) {
- client.handleReplay();
+ client.handleReplay();
}
-window.onReplayGo = onReplayGo; \ No newline at end of file
+window.onReplayGo = onReplayGo;
diff --git a/webAO/dom/opusCheck.ts b/webAO/dom/opusCheck.ts
index 608a30a..90f5bb6 100644
--- a/webAO/dom/opusCheck.ts
+++ b/webAO/dom/opusCheck.ts
@@ -3,20 +3,20 @@
* @param {HTMLAudioElement} image the element containing the missing sound
*/
export function opusCheck(
- channel: HTMLAudioElement
+ channel: HTMLAudioElement,
): OnErrorEventHandlerNonNull {
- const audio = channel.src;
- if (audio === "") {
- return;
- }
- console.warn(`failed to load sound ${channel.src}`);
- let oldsrc = "";
- let newsrc = "";
- oldsrc = channel.src;
- if (!oldsrc.endsWith(".opus")) {
- newsrc = oldsrc.replace(".mp3", ".opus");
- newsrc = newsrc.replace(".wav", ".opus");
- channel.src = newsrc; // unload so the old sprite doesn't persist
- }
+ const audio = channel.src;
+ if (audio === "") {
+ return;
+ }
+ console.warn(`failed to load sound ${channel.src}`);
+ let oldsrc = "";
+ let newsrc = "";
+ oldsrc = channel.src;
+ if (!oldsrc.endsWith(".opus")) {
+ newsrc = oldsrc.replace(".mp3", ".opus");
+ newsrc = newsrc.replace(".wav", ".opus");
+ channel.src = newsrc; // unload so the old sprite doesn't persist
+ }
}
-window.opusCheck = opusCheck; \ No newline at end of file
+window.opusCheck = opusCheck;
diff --git a/webAO/dom/pickChar.ts b/webAO/dom/pickChar.ts
index 82fb6af..05f1c70 100644
--- a/webAO/dom/pickChar.ts
+++ b/webAO/dom/pickChar.ts
@@ -6,11 +6,11 @@ import { client } from "../client";
* then spectator is chosen instead.
*/
export function pickChar(ccharacter: number) {
- if (ccharacter === -1) {
- // Spectator
- document.getElementById("client_waiting")!.style.display = "none";
- document.getElementById("client_charselect")!.style.display = "none";
- }
- client.sender.sendCharacter(ccharacter);
+ if (ccharacter === -1) {
+ // Spectator
+ document.getElementById("client_waiting")!.style.display = "none";
+ document.getElementById("client_charselect")!.style.display = "none";
+ }
+ client.sender.sendCharacter(ccharacter);
}
-window.pickChar = pickChar; \ No newline at end of file
+window.pickChar = pickChar;
diff --git a/webAO/dom/pickEmotion.ts b/webAO/dom/pickEmotion.ts
index 619d0ab..15169c3 100644
--- a/webAO/dom/pickEmotion.ts
+++ b/webAO/dom/pickEmotion.ts
@@ -1,26 +1,26 @@
-import { client } from '../client'
+import { client } from "../client";
/**
* Highlights and selects an emotion for in-character chat.
* @param {string} emo the new emotion to be selected
*/
export function pickEmotion(emo: number) {
- try {
- if (client.selectedEmote !== -1) {
- document.getElementById(`emo_${client.selectedEmote}`)!.className =
- "emote_button";
- }
- } catch (err) {
- // do nothing
+ try {
+ if (client.selectedEmote !== -1) {
+ document.getElementById(`emo_${client.selectedEmote}`)!.className =
+ "emote_button";
}
- client.selectedEmote = emo;
- document.getElementById(`emo_${emo}`)!.className = "emote_button dark";
+ } catch (err) {
+ // do nothing
+ }
+ client.selectedEmote = emo;
+ document.getElementById(`emo_${emo}`)!.className = "emote_button dark";
- (<HTMLInputElement>document.getElementById("sendsfx")).checked =
- client.emote.sfx.length > 1;
+ (<HTMLInputElement>document.getElementById("sendsfx")).checked =
+ client.emote.sfx.length > 1;
- (<HTMLInputElement>document.getElementById("sendpreanim")).checked =
- client.emote.zoom == 1;
+ (<HTMLInputElement>document.getElementById("sendpreanim")).checked =
+ client.emote.zoom == 1;
- (<HTMLInputElement>document.getElementById("client_inputbox")).focus();
+ (<HTMLInputElement>document.getElementById("client_inputbox")).focus();
}
-window.pickEmotion = pickEmotion; \ No newline at end of file
+window.pickEmotion = pickEmotion;
diff --git a/webAO/dom/pickEvidence.ts b/webAO/dom/pickEvidence.ts
index e4c86fa..eef92ec 100644
--- a/webAO/dom/pickEvidence.ts
+++ b/webAO/dom/pickEvidence.ts
@@ -1,51 +1,52 @@
-import { client } from '../client'
-import { cancelEvidence } from './cancelEvidence';
-import { updateEvidenceIcon } from './updateEvidenceIcon'
-import { getIndexFromSelect } from './getIndexFromSelect'
+import { client } from "../client";
+import { cancelEvidence } from "./cancelEvidence";
+import { updateEvidenceIcon } from "./updateEvidenceIcon";
+import { getIndexFromSelect } from "./getIndexFromSelect";
/**
* Highlights and selects an evidence for in-character chat.
* @param {string} evidence the evidence to be presented
*/
export function pickEvidence(evidence: number) {
- if (client.selectedEvidence !== evidence) {
- // Update selected evidence
- if (client.selectedEvidence >= 0) {
- document.getElementById(`evi_${client.selectedEvidence}`)!.className =
- "evi_icon";
- }
- document.getElementById(`evi_${evidence}`)!.className = "evi_icon dark";
- client.selectedEvidence = evidence;
-
- // Show evidence on information window
- (<HTMLInputElement>document.getElementById("evi_name")).value =
- client.evidences[evidence].name;
- (<HTMLInputElement>document.getElementById("evi_desc")).value =
- client.evidences[evidence].desc;
+ if (client.selectedEvidence !== evidence) {
+ // Update selected evidence
+ if (client.selectedEvidence >= 0) {
+ document.getElementById(`evi_${client.selectedEvidence}`)!.className =
+ "evi_icon";
+ }
+ document.getElementById(`evi_${evidence}`)!.className = "evi_icon dark";
+ client.selectedEvidence = evidence;
- // Update icon
- const icon_id = getIndexFromSelect(
- "evi_select",
- client.evidences[evidence].filename
- );
- (<HTMLSelectElement>document.getElementById("evi_select")).selectedIndex =
- icon_id;
- if (icon_id === 0) {
- (<HTMLInputElement>document.getElementById("evi_filename")).value =
- client.evidences[evidence].filename;
- }
- updateEvidenceIcon();
+ // Show evidence on information window
+ (<HTMLInputElement>document.getElementById("evi_name")).value =
+ client.evidences[evidence].name;
+ (<HTMLInputElement>document.getElementById("evi_desc")).value =
+ client.evidences[evidence].desc;
- // Update button
- document.getElementById("evi_add")!.className =
- "client_button hover_button inactive";
- document.getElementById("evi_edit")!.className =
- "client_button hover_button";
- document.getElementById("evi_cancel")!.className =
- "client_button hover_button";
- document.getElementById("evi_del")!.className = "client_button hover_button";
- } else {
- cancelEvidence();
+ // Update icon
+ const icon_id = getIndexFromSelect(
+ "evi_select",
+ client.evidences[evidence].filename,
+ );
+ (<HTMLSelectElement>document.getElementById("evi_select")).selectedIndex =
+ icon_id;
+ if (icon_id === 0) {
+ (<HTMLInputElement>document.getElementById("evi_filename")).value =
+ client.evidences[evidence].filename;
}
+ updateEvidenceIcon();
+
+ // Update button
+ document.getElementById("evi_add")!.className =
+ "client_button hover_button inactive";
+ document.getElementById("evi_edit")!.className =
+ "client_button hover_button";
+ document.getElementById("evi_cancel")!.className =
+ "client_button hover_button";
+ document.getElementById("evi_del")!.className =
+ "client_button hover_button";
+ } else {
+ cancelEvidence();
+ }
}
window.pickEvidence = pickEvidence;
diff --git a/webAO/dom/randomCharacterOOC.ts b/webAO/dom/randomCharacterOOC.ts
index 657a474..c701f62 100644
--- a/webAO/dom/randomCharacterOOC.ts
+++ b/webAO/dom/randomCharacterOOC.ts
@@ -1,8 +1,8 @@
-import { client } from '../client'
+import { client } from "../client";
/**
* Random character via OOC.
*/
export function randomCharacterOOC() {
- client.sender.sendOOC(`/randomchar`);
+ client.sender.sendOOC(`/randomchar`);
}
-window.randomCharacterOOC = randomCharacterOOC; \ No newline at end of file
+window.randomCharacterOOC = randomCharacterOOC;
diff --git a/webAO/dom/reconnectButton.ts b/webAO/dom/reconnectButton.ts
index 76a6b51..079e7fc 100644
--- a/webAO/dom/reconnectButton.ts
+++ b/webAO/dom/reconnectButton.ts
@@ -6,11 +6,11 @@ const { ip: serverIP } = queryParser();
* Triggered when the reconnect button is pushed.
*/
export function ReconnectButton() {
- client.cleanup();
- setClient(new Client(serverIP));
+ client.cleanup();
+ setClient(new Client(serverIP));
- if (client) {
- document.getElementById("client_error")!.style.display = "none";
- }
+ if (client) {
+ document.getElementById("client_error")!.style.display = "none";
+ }
}
-window.ReconnectButton = ReconnectButton; \ No newline at end of file
+window.ReconnectButton = ReconnectButton;
diff --git a/webAO/dom/redHPD.ts b/webAO/dom/redHPD.ts
index e228d21..d2e7b3a 100644
--- a/webAO/dom/redHPD.ts
+++ b/webAO/dom/redHPD.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Decrement defense health point.
*/
export function redHPD() {
- client.sender.sendHP(1, client.hp[0] - 1);
+ client.sender.sendHP(1, client.hp[0] - 1);
}
-window.redHPD = redHPD; \ No newline at end of file
+window.redHPD = redHPD;
diff --git a/webAO/dom/redHPP.ts b/webAO/dom/redHPP.ts
index efde941..c7adbbf 100644
--- a/webAO/dom/redHPP.ts
+++ b/webAO/dom/redHPP.ts
@@ -4,6 +4,6 @@ import { client } from "../client";
* Decrement prosecution health point.
*/
export function redHPP() {
- client.sender.sendHP(2, client.hp[1] - 1);
+ client.sender.sendHP(2, client.hp[1] - 1);
}
-window.redHPP = redHPP; \ No newline at end of file
+window.redHPP = redHPP;
diff --git a/webAO/dom/reloadTheme.ts b/webAO/dom/reloadTheme.ts
index bfa46b6..c65ac6d 100644
--- a/webAO/dom/reloadTheme.ts
+++ b/webAO/dom/reloadTheme.ts
@@ -1,16 +1,16 @@
-import { client } from '../client'
-import setCookie from '../utils/setCookie';
+import { client } from "../client";
+import setCookie from "../utils/setCookie";
/**
* Triggered by the theme selector.
*/
export const reloadTheme = () => {
- client.viewport.setTheme((<HTMLSelectElement>document.getElementById("client_themeselect"))
- .value);
+ client.viewport.setTheme(
+ (<HTMLSelectElement>document.getElementById("client_themeselect")).value,
+ );
- setCookie("theme", client.viewport.getTheme());
- (<HTMLAnchorElement>(
- document.getElementById("client_theme")
- )).href = `styles/${client.viewport.getTheme()}.css`;
-}
-window.reloadTheme = reloadTheme; \ No newline at end of file
+ setCookie("theme", client.viewport.getTheme());
+ (<HTMLAnchorElement>document.getElementById("client_theme")).href =
+ `styles/${client.viewport.getTheme()}.css`;
+};
+window.reloadTheme = reloadTheme;
diff --git a/webAO/dom/resetOffset.ts b/webAO/dom/resetOffset.ts
index 8b1a2fd..aaf8c48 100644
--- a/webAO/dom/resetOffset.ts
+++ b/webAO/dom/resetOffset.ts
@@ -1,6 +1,5 @@
-
export function resetOffset(_event: Event) {
- (<HTMLInputElement>document.getElementById("pair_offset")).value = "0";
- (<HTMLInputElement>document.getElementById("pair_y_offset")).value = "0";
+ (<HTMLInputElement>document.getElementById("pair_offset")).value = "0";
+ (<HTMLInputElement>document.getElementById("pair_y_offset")).value = "0";
}
-window.resetOffset = resetOffset; \ No newline at end of file
+window.resetOffset = resetOffset;
diff --git a/webAO/dom/resizeChatbox.ts b/webAO/dom/resizeChatbox.ts
index a60dbff..35b1e51 100644
--- a/webAO/dom/resizeChatbox.ts
+++ b/webAO/dom/resizeChatbox.ts
@@ -3,42 +3,71 @@ import { CHATBOX } from "../client";
* Set the font size for the chatbox
*/
export function resizeChatbox() {
- const chatContainerBox = document.getElementById("client_chatcontainer");
- const clockBox = document.getElementById("client_clock");
- const trackstatusBox = document.getElementById("client_trackstatus");
+ const chatContainerBox = document.getElementById("client_chatcontainer");
+ const clockBox = document.getElementById("client_clock");
+ const trackstatusBox = document.getElementById("client_trackstatus");
- const gameHeight = document.getElementById("client_background")!.offsetHeight;
+ const gameHeight = document.getElementById("client_background")!.offsetHeight;
- chatContainerBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
- clockBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
- trackstatusBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
+ chatContainerBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
+ clockBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
+ trackstatusBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`;
- const trackstatus = <HTMLMarqueeElement>(document.getElementById("client_trackstatustext"));
- trackstatus.style.width = (trackstatus.offsetWidth - 1) + "px";
+ const trackstatus = <HTMLMarqueeElement>(
+ document.getElementById("client_trackstatustext")
+ );
+ trackstatus.style.width = trackstatus.offsetWidth - 1 + "px";
- //name spacing
- const namePlate = document.getElementById("client_name");
- if (CHATBOX == "aa" && namePlate.innerText.length<5) {
- namePlate.style.letterSpacing = "0.2em";
- }else{
- namePlate.style.letterSpacing = "normal";
- }
-
- //clock
- const now = new Date();
- let weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
- const month = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
- document.getElementById("client_clock_month")!.innerText = month[now.getMonth()];
- if (CHATBOX == "acww") {
- weekday = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
- document.getElementById("client_clock_weekday")!.innerText = weekday[now.getDay()];
- document.getElementById("client_clock_date")!.innerText = now.getDay() + "/" + now.getMonth();
- document.getElementById("client_clock_time")!.innerText = now.getHours() + ":" + now.getMinutes();
- } else if (CHATBOX == "key") {
- weekday = ["Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat."];
- document.getElementById("client_clock_weekday")!.innerText = weekday[now.getDay()];
- document.getElementById("client_clock_date")!.innerText = String(now.getDate());
- }
+ //name spacing
+ const namePlate = document.getElementById("client_name");
+ if (CHATBOX == "aa" && namePlate.innerText.length < 5) {
+ namePlate.style.letterSpacing = "0.2em";
+ } else {
+ namePlate.style.letterSpacing = "normal";
+ }
+ //clock
+ const now = new Date();
+ let weekday = [
+ "Sunday",
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday",
+ ];
+ const month = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December",
+ ];
+ document.getElementById("client_clock_month")!.innerText =
+ month[now.getMonth()];
+ if (CHATBOX == "acww") {
+ weekday = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
+ document.getElementById("client_clock_weekday")!.innerText =
+ weekday[now.getDay()];
+ document.getElementById("client_clock_date")!.innerText =
+ now.getDay() + "/" + now.getMonth();
+ document.getElementById("client_clock_time")!.innerText =
+ now.getHours() + ":" + now.getMinutes();
+ } else if (CHATBOX == "key") {
+ weekday = ["Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat."];
+ document.getElementById("client_clock_weekday")!.innerText =
+ weekday[now.getDay()];
+ document.getElementById("client_clock_date")!.innerText = String(
+ now.getDate(),
+ );
+ }
}
-window.resizeChatbox = resizeChatbox; \ No newline at end of file
+window.resizeChatbox = resizeChatbox;
diff --git a/webAO/dom/setChatbox.ts b/webAO/dom/setChatbox.ts
index 095ead3..c75559d 100644
--- a/webAO/dom/setChatbox.ts
+++ b/webAO/dom/setChatbox.ts
@@ -6,24 +6,24 @@ import setCookie from "../utils/setCookie";
* Set the style of the chatbox
*/
export function setChatbox(setstyle: string) {
- const chatbox_theme = <HTMLAnchorElement>(
- document.getElementById("chatbox_theme")
- );
- const themeselect = <HTMLSelectElement>(
- document.getElementById("client_chatboxselect")
- );
- setCHATBOX(themeselect.value);
+ const chatbox_theme = <HTMLAnchorElement>(
+ document.getElementById("chatbox_theme")
+ );
+ const themeselect = <HTMLSelectElement>(
+ document.getElementById("client_chatboxselect")
+ );
+ setCHATBOX(themeselect.value);
- setCookie("chatbox", CHATBOX);
- if (CHATBOX === "dynamic") {
- const style = setstyle.replace("chat","");
- if (chatbox_arr.includes(style)) {
- chatbox_theme.href = `styles/chatbox/${style}.css`;
- } else {
- chatbox_theme.href = "styles/chatbox/aa.css";
- }
+ setCookie("chatbox", CHATBOX);
+ if (CHATBOX === "dynamic") {
+ const style = setstyle.replace("chat", "");
+ if (chatbox_arr.includes(style)) {
+ chatbox_theme.href = `styles/chatbox/${style}.css`;
} else {
- chatbox_theme.href = `styles/chatbox/${CHATBOX}.css`;
+ chatbox_theme.href = "styles/chatbox/aa.css";
}
+ } else {
+ chatbox_theme.href = `styles/chatbox/${CHATBOX}.css`;
+ }
}
-window.setChatbox = setChatbox; \ No newline at end of file
+window.setChatbox = setChatbox;
diff --git a/webAO/dom/showNameClick.ts b/webAO/dom/showNameClick.ts
index 3e48b70..005bfd5 100644
--- a/webAO/dom/showNameClick.ts
+++ b/webAO/dom/showNameClick.ts
@@ -1,26 +1,25 @@
import setCookie from "../utils/setCookie";
-
/**
* Triggered when the showname checkboc is clicked
* @param {MouseEvent} event
*/
export function showname_click(_event: Event | null) {
- setCookie(
- "showname",
- String((<HTMLInputElement>document.getElementById("showname")).checked)
- );
- setCookie(
- "ic_chat_name",
- (<HTMLInputElement>document.getElementById("ic_chat_name")).value
- );
+ setCookie(
+ "showname",
+ String((<HTMLInputElement>document.getElementById("showname")).checked),
+ );
+ setCookie(
+ "ic_chat_name",
+ (<HTMLInputElement>document.getElementById("ic_chat_name")).value,
+ );
- const css_s = <HTMLAnchorElement>document.getElementById("nameplate_setting");
+ const css_s = <HTMLAnchorElement>document.getElementById("nameplate_setting");
- if ((<HTMLInputElement>document.getElementById("showname")).checked) {
- css_s.href = "styles/shownames.css";
- } else {
- css_s.href = "styles/nameplates.css";
- }
+ if ((<HTMLInputElement>document.getElementById("showname")).checked) {
+ css_s.href = "styles/shownames.css";
+ } else {
+ css_s.href = "styles/nameplates.css";
+ }
}
window.showname_click = showname_click;
diff --git a/webAO/dom/switchAspectRatio.ts b/webAO/dom/switchAspectRatio.ts
index 79d4110..db55cb0 100644
--- a/webAO/dom/switchAspectRatio.ts
+++ b/webAO/dom/switchAspectRatio.ts
@@ -2,18 +2,18 @@
* Triggered by the change aspect ratio checkbox
*/
export async function switchAspectRatio() {
- const background = document.getElementById("client_gamewindow")!;
- const offsetCheck = <HTMLInputElement>(
- document.getElementById("client_hdviewport_offset")
- );
- if (
- (<HTMLInputElement>document.getElementById("client_hdviewport")).checked
- ) {
- background.style.paddingBottom = "56.25%";
- offsetCheck.disabled = false;
- } else {
- background.style.paddingBottom = "75%";
- offsetCheck.disabled = true;
- }
+ const background = document.getElementById("client_gamewindow")!;
+ const offsetCheck = <HTMLInputElement>(
+ document.getElementById("client_hdviewport_offset")
+ );
+ if (
+ (<HTMLInputElement>document.getElementById("client_hdviewport")).checked
+ ) {
+ background.style.paddingBottom = "56.25%";
+ offsetCheck.disabled = false;
+ } else {
+ background.style.paddingBottom = "75%";
+ offsetCheck.disabled = true;
+ }
}
-window.switchAspectRatio = switchAspectRatio; \ No newline at end of file
+window.switchAspectRatio = switchAspectRatio;
diff --git a/webAO/dom/switchChatOffset.ts b/webAO/dom/switchChatOffset.ts
index 6552cbd..257d1ca 100644
--- a/webAO/dom/switchChatOffset.ts
+++ b/webAO/dom/switchChatOffset.ts
@@ -2,16 +2,16 @@
* Triggered by the change aspect ratio checkbox
*/
export async function switchChatOffset() {
- const container = document.getElementById("client_chatcontainer")!;
- if (
- (<HTMLInputElement>document.getElementById("client_hdviewport_offset"))
- .checked
- ) {
- container.style.width = "80%";
- container.style.left = "10%";
- } else {
- container.style.width = "100%";
- container.style.left = "0";
- }
+ const container = document.getElementById("client_chatcontainer")!;
+ if (
+ (<HTMLInputElement>document.getElementById("client_hdviewport_offset"))
+ .checked
+ ) {
+ container.style.width = "80%";
+ container.style.left = "10%";
+ } else {
+ container.style.width = "100%";
+ container.style.left = "0";
+ }
}
-window.switchChatOffset = switchChatOffset; \ No newline at end of file
+window.switchChatOffset = switchChatOffset;
diff --git a/webAO/dom/switchPanTilt.ts b/webAO/dom/switchPanTilt.ts
index 7ceea06..9422eff 100644
--- a/webAO/dom/switchPanTilt.ts
+++ b/webAO/dom/switchPanTilt.ts
@@ -2,15 +2,15 @@
* Triggered by the pantilt checkbox
*/
export async function switchPanTilt() {
- const fullview = document.getElementById("client_fullview")!;
- const checkbox = <HTMLInputElement>document.getElementById("client_pantilt");
+ const fullview = document.getElementById("client_fullview")!;
+ const checkbox = <HTMLInputElement>document.getElementById("client_pantilt");
- if (checkbox.checked) {
- fullview.style.transition = "0.5s ease-in-out";
- } else {
- fullview.style.transition = "none";
- }
+ if (checkbox.checked) {
+ fullview.style.transition = "0.5s ease-in-out";
+ } else {
+ fullview.style.transition = "none";
+ }
- return;
+ return;
}
-window.switchPanTilt = switchPanTilt; \ No newline at end of file
+window.switchPanTilt = switchPanTilt;
diff --git a/webAO/dom/toggleMenu.ts b/webAO/dom/toggleMenu.ts
index 6d5e1fc..0e00941 100644
--- a/webAO/dom/toggleMenu.ts
+++ b/webAO/dom/toggleMenu.ts
@@ -5,14 +5,14 @@ import { selectedMenu, setSelectedMenu } from "../client";
* @param {number} menu the menu to be selected
*/
export function toggleMenu(menu: number) {
- if (menu !== selectedMenu) {
- document.getElementById(`menu_${menu}`)!.className = "menu_button active";
- document.getElementById(`content_${menu}`)!.className =
- "menu_content active";
- document.getElementById(`menu_${selectedMenu}`)!.className = "menu_button";
- document.getElementById(`content_${selectedMenu}`)!.className =
- "menu_content";
- setSelectedMenu(menu);
- }
+ if (menu !== selectedMenu) {
+ document.getElementById(`menu_${menu}`)!.className = "menu_button active";
+ document.getElementById(`content_${menu}`)!.className =
+ "menu_content active";
+ document.getElementById(`menu_${selectedMenu}`)!.className = "menu_button";
+ document.getElementById(`content_${selectedMenu}`)!.className =
+ "menu_content";
+ setSelectedMenu(menu);
+ }
}
window.toggleMenu = toggleMenu;
diff --git a/webAO/dom/toggleShout.ts b/webAO/dom/toggleShout.ts
index cb12f49..dcfccba 100644
--- a/webAO/dom/toggleShout.ts
+++ b/webAO/dom/toggleShout.ts
@@ -6,16 +6,17 @@ import { selectedShout, setSelectedShout } from "../client";
* @param {number} shout the new shout to be selected
*/
export function toggleShout(shout: number) {
- if (shout === selectedShout) {
- document.getElementById(`button_${shout}`)!.className = "client_button";
- setSelectedShout(0);
- } else {
- document.getElementById(`button_${shout}`)!.className = "client_button dark";
- if (selectedShout) {
- document.getElementById(`button_${selectedShout}`)!.className =
- "client_button";
- }
- setSelectedShout(shout);
+ if (shout === selectedShout) {
+ document.getElementById(`button_${shout}`)!.className = "client_button";
+ setSelectedShout(0);
+ } else {
+ document.getElementById(`button_${shout}`)!.className =
+ "client_button dark";
+ if (selectedShout) {
+ document.getElementById(`button_${selectedShout}`)!.className =
+ "client_button";
}
+ setSelectedShout(shout);
+ }
}
window.toggleShout = toggleShout;
diff --git a/webAO/dom/twofactor.ts b/webAO/dom/twofactor.ts
index b53f4cf..58bbc4c 100644
--- a/webAO/dom/twofactor.ts
+++ b/webAO/dom/twofactor.ts
@@ -2,9 +2,9 @@ import { client } from "../client";
import setCookie from "../utils/setCookie";
export function hcallback(hcaptcharesponse: string) {
- setCookie('hdid', client.hdid);
- client.sender.sendServer(`2T#${hcaptcharesponse}#%`);
- location.reload();
+ setCookie("hdid", client.hdid);
+ client.sender.sendServer(`2T#${hcaptcharesponse}#%`);
+ location.reload();
}
-window.hcallback = hcallback; \ No newline at end of file
+window.hcallback = hcallback;
diff --git a/webAO/dom/updateActionCommands.ts b/webAO/dom/updateActionCommands.ts
index ca8ca60..536292b 100644
--- a/webAO/dom/updateActionCommands.ts
+++ b/webAO/dom/updateActionCommands.ts
@@ -1,27 +1,26 @@
-
/**
* Update evidence icon.
*/
export function updateActionCommands(side: string) {
- if (side === "jud") {
- document.getElementById("judge_action")!.style.display = "inline-table";
- document.getElementById("no_action")!.style.display = "none";
- } else {
- document.getElementById("judge_action")!.style.display = "none";
- document.getElementById("no_action")!.style.display = "inline-table";
- }
+ if (side === "jud") {
+ document.getElementById("judge_action")!.style.display = "inline-table";
+ document.getElementById("no_action")!.style.display = "none";
+ } else {
+ document.getElementById("judge_action")!.style.display = "none";
+ document.getElementById("no_action")!.style.display = "inline-table";
+ }
- // Update role selector
- for (
- let i = 0,
- role_select = <HTMLSelectElement>document.getElementById("role_select");
- i < role_select.options.length;
- i++
- ) {
- if (side === role_select.options[i].value) {
- role_select.options.selectedIndex = i;
- return;
- }
+ // Update role selector
+ for (
+ let i = 0,
+ role_select = <HTMLSelectElement>document.getElementById("role_select");
+ i < role_select.options.length;
+ i++
+ ) {
+ if (side === role_select.options[i].value) {
+ role_select.options.selectedIndex = i;
+ return;
}
+ }
}
-window.updateActionCommands = updateActionCommands; \ No newline at end of file
+window.updateActionCommands = updateActionCommands;
diff --git a/webAO/dom/updateBackgroundPreview.ts b/webAO/dom/updateBackgroundPreview.ts
index 659d4cb..61eec58 100644
--- a/webAO/dom/updateBackgroundPreview.ts
+++ b/webAO/dom/updateBackgroundPreview.ts
@@ -1,29 +1,31 @@
-import { AO_HOST } from '../client/aoHost';
+import { AO_HOST } from "../client/aoHost";
import tryUrls from "../utils/tryUrls";
/**
* Update background preview.
*/
export function updateBackgroundPreview() {
- const background_select = <HTMLSelectElement>(
- document.getElementById("bg_select")
- );
- const background_filename = <HTMLInputElement>(
- document.getElementById("bg_filename")
- );
- const background_preview = <HTMLImageElement>(
- document.getElementById("bg_preview")
- );
+ const background_select = <HTMLSelectElement>(
+ document.getElementById("bg_select")
+ );
+ const background_filename = <HTMLInputElement>(
+ document.getElementById("bg_filename")
+ );
+ const background_preview = <HTMLImageElement>(
+ document.getElementById("bg_preview")
+ );
- if (background_select.selectedIndex === 0) {
- background_filename.style.display = "initial";
- } else {
- background_filename.style.display = "none";
- }
- tryUrls(`${AO_HOST}background/${encodeURI(
- background_select.value.toLowerCase()
- )}/defenseempty`).then((resp) => {
- background_preview.src = resp;
- });
+ if (background_select.selectedIndex === 0) {
+ background_filename.style.display = "initial";
+ } else {
+ background_filename.style.display = "none";
+ }
+ tryUrls(
+ `${AO_HOST}background/${encodeURI(
+ background_select.value.toLowerCase(),
+ )}/defenseempty`,
+ ).then((resp) => {
+ background_preview.src = resp;
+ });
}
window.updateBackgroundPreview = updateBackgroundPreview;
diff --git a/webAO/dom/updateEvidenceIcon.ts b/webAO/dom/updateEvidenceIcon.ts
index bff0475..dbda07c 100644
--- a/webAO/dom/updateEvidenceIcon.ts
+++ b/webAO/dom/updateEvidenceIcon.ts
@@ -3,26 +3,26 @@ import { AO_HOST } from "../client/aoHost";
* Update evidence icon.
*/
export function updateEvidenceIcon() {
- const evidence_select = <HTMLSelectElement>(
- document.getElementById("evi_select")
- );
- const evidence_filename = <HTMLInputElement>(
- document.getElementById("evi_filename")
- );
- const evidence_iconbox = <HTMLImageElement>(
- document.getElementById("evi_preview")
- );
+ const evidence_select = <HTMLSelectElement>(
+ document.getElementById("evi_select")
+ );
+ const evidence_filename = <HTMLInputElement>(
+ document.getElementById("evi_filename")
+ );
+ const evidence_iconbox = <HTMLImageElement>(
+ document.getElementById("evi_preview")
+ );
- if (evidence_select.selectedIndex === 0) {
- evidence_filename.style.display = "initial";
- evidence_iconbox.src = `${AO_HOST}evidence/${encodeURI(
- evidence_filename.value.toLowerCase()
- )}`;
- } else {
- evidence_filename.style.display = "none";
- evidence_iconbox.src = `${AO_HOST}evidence/${encodeURI(
- evidence_select.value.toLowerCase()
- )}`;
- }
+ if (evidence_select.selectedIndex === 0) {
+ evidence_filename.style.display = "initial";
+ evidence_iconbox.src = `${AO_HOST}evidence/${encodeURI(
+ evidence_filename.value.toLowerCase(),
+ )}`;
+ } else {
+ evidence_filename.style.display = "none";
+ evidence_iconbox.src = `${AO_HOST}evidence/${encodeURI(
+ evidence_select.value.toLowerCase(),
+ )}`;
+ }
}
window.updateEvidenceIcon = updateEvidenceIcon;
diff --git a/webAO/dom/updateIniswap.ts b/webAO/dom/updateIniswap.ts
index 5bea0f5..929d4a0 100644
--- a/webAO/dom/updateIniswap.ts
+++ b/webAO/dom/updateIniswap.ts
@@ -2,17 +2,15 @@
* Update iniswap drowdown
*/
export function updateIniswap() {
- const ini_select = <HTMLSelectElement>(
- document.getElementById("client_iniselect")
- );
- const ini_name = <HTMLInputElement>(
- document.getElementById("client_ininame")
- );
+ const ini_select = <HTMLSelectElement>(
+ document.getElementById("client_iniselect")
+ );
+ const ini_name = <HTMLInputElement>document.getElementById("client_ininame");
- if (ini_select.selectedIndex === 0) {
- ini_name.style.display = "initial";
- } else {
- ini_name.style.display = "none";
- }
+ if (ini_select.selectedIndex === 0) {
+ ini_name.style.display = "initial";
+ } else {
+ ini_name.style.display = "none";
+ }
}
window.updateIniswap = updateIniswap;
diff --git a/webAO/dom/updatePlayerAreas.ts b/webAO/dom/updatePlayerAreas.ts
index d2ec076..99eccf1 100644
--- a/webAO/dom/updatePlayerAreas.ts
+++ b/webAO/dom/updatePlayerAreas.ts
@@ -1,16 +1,24 @@
-import { client } from '../client'
-import { area_click } from './areaClick';
+import { client } from "../client";
+import { area_click } from "./areaClick";
/**
* Triggered when someone switches areas
* @param {Number} ownarea
*/
export function updatePlayerAreas(ownarea: number) {
- for (let i=0; i < client.areas.length; i++) {
- if (i===ownarea)
- for (let classelement of Array.from(document.getElementsByClassName(`area${i}`) as HTMLCollectionOf<HTMLElement>))
- classelement.style.display = "";
- else
- for (let classelement of Array.from(document.getElementsByClassName(`area${i}`) as HTMLCollectionOf<HTMLElement>))
- classelement.style.display = "none";
- }
-} \ No newline at end of file
+ for (let i = 0; i < client.areas.length; i++) {
+ if (i === ownarea)
+ for (let classelement of Array.from(
+ document.getElementsByClassName(
+ `area${i}`,
+ ) as HTMLCollectionOf<HTMLElement>,
+ ))
+ classelement.style.display = "";
+ else
+ for (let classelement of Array.from(
+ document.getElementsByClassName(
+ `area${i}`,
+ ) as HTMLCollectionOf<HTMLElement>,
+ ))
+ classelement.style.display = "none";
+ }
+}
diff --git a/webAO/dom/window.ts b/webAO/dom/window.ts
index 59ad575..ee1b121 100644
--- a/webAO/dom/window.ts
+++ b/webAO/dom/window.ts
@@ -1,60 +1,60 @@
declare global {
- interface Window {
- toggleShout: (shout: number) => void;
- toggleMenu: (menu: number) => void;
- updateBackgroundPreview: () => void;
- redHPP: () => void;
- addHPP: () => void;
- redHPD: () => void;
- addHPD: () => void;
- guilty: () => void;
- notguilty: () => void;
- initCE: () => void;
- initWT: () => void;
- callMod: () => void;
- randomCharacterOOC: () => void;
- changeRoleOOC: () => void;
- changeBackgroundOOC: () => void;
- updateActionCommands: (side: string) => void;
- updateEvidenceIcon: () => void;
- updateIniswap: () => void;
- resizeChatbox: () => void;
- setChatbox: (style: string) => void;
- getIndexFromSelect: (select_box: string, value: string) => number;
- cancelEvidence: () => void;
- deleteEvidence: () => void;
- editEvidence: () => void;
- addEvidence: () => void;
- pickEvidence: (evidence: any) => void;
- pickEmotion: (emo: number) => void;
- pickChar: (ccharacter: any) => void;
- chartable_filter: (_event: any) => void;
- ReconnectButton: (_event: any) => void;
- opusCheck: (channel: HTMLAudioElement) => OnErrorEventHandlerNonNull;
- imgError: (image: any) => void;
- charError: (image: any) => void;
- changeCharacter: (_event: any) => void;
- switchChatOffset: () => void;
- switchAspectRatio: () => void;
- switchPanTilt: (addcheck: number) => void;
- iniedit: () => void;
- modcall_test: () => void;
- reloadTheme: () => void;
- changeCallwords: () => void;
- changeBlipVolume: () => void;
- changeMusicVolume: () => void;
- area_click: (el: any) => void;
- showname_click: (_event: any) => void;
- mutelist_click: (_event: any) => void;
- musiclist_click: (_event: any) => void;
- musiclist_filter: (_event: any) => void;
- resetOffset: (_event: any) => void;
- onEnter: (event: any) => void;
- onReplayGo: (_event: any) => void;
- onOOCEnter: (_event: any) => void;
- kickPlayer: (id: number) => void;
- banPlayer: (id: number) => void;
- hcallback: (_event: any) => void;
- }
+ interface Window {
+ toggleShout: (shout: number) => void;
+ toggleMenu: (menu: number) => void;
+ updateBackgroundPreview: () => void;
+ redHPP: () => void;
+ addHPP: () => void;
+ redHPD: () => void;
+ addHPD: () => void;
+ guilty: () => void;
+ notguilty: () => void;
+ initCE: () => void;
+ initWT: () => void;
+ callMod: () => void;
+ randomCharacterOOC: () => void;
+ changeRoleOOC: () => void;
+ changeBackgroundOOC: () => void;
+ updateActionCommands: (side: string) => void;
+ updateEvidenceIcon: () => void;
+ updateIniswap: () => void;
+ resizeChatbox: () => void;
+ setChatbox: (style: string) => void;
+ getIndexFromSelect: (select_box: string, value: string) => number;
+ cancelEvidence: () => void;
+ deleteEvidence: () => void;
+ editEvidence: () => void;
+ addEvidence: () => void;
+ pickEvidence: (evidence: any) => void;
+ pickEmotion: (emo: number) => void;
+ pickChar: (ccharacter: any) => void;
+ chartable_filter: (_event: any) => void;
+ ReconnectButton: (_event: any) => void;
+ opusCheck: (channel: HTMLAudioElement) => OnErrorEventHandlerNonNull;
+ imgError: (image: any) => void;
+ charError: (image: any) => void;
+ changeCharacter: (_event: any) => void;
+ switchChatOffset: () => void;
+ switchAspectRatio: () => void;
+ switchPanTilt: (addcheck: number) => void;
+ iniedit: () => void;
+ modcall_test: () => void;
+ reloadTheme: () => void;
+ changeCallwords: () => void;
+ changeBlipVolume: () => void;
+ changeMusicVolume: () => void;
+ area_click: (el: any) => void;
+ showname_click: (_event: any) => void;
+ mutelist_click: (_event: any) => void;
+ musiclist_click: (_event: any) => void;
+ musiclist_filter: (_event: any) => void;
+ resetOffset: (_event: any) => void;
+ onEnter: (event: any) => void;
+ onReplayGo: (_event: any) => void;
+ onOOCEnter: (_event: any) => void;
+ kickPlayer: (id: number) => void;
+ banPlayer: (id: number) => void;
+ hcallback: (_event: any) => void;
+ }
}
-export { } \ No newline at end of file
+export {};
diff --git a/webAO/encoding.ts b/webAO/encoding.ts
index c878cb5..37f064a 100644
--- a/webAO/encoding.ts
+++ b/webAO/encoding.ts
@@ -3,11 +3,11 @@
* @param {string} estring the string to be escaped
*/
export function escapeChat(estring: string): string {
- return estring
- .replaceAll('#', '<num>')
- .replaceAll('&', '<and>')
- .replaceAll('%', '<percent>')
- .replaceAll('$', '<dollar>');
+ return estring
+ .replaceAll("#", "<num>")
+ .replaceAll("&", "<and>")
+ .replaceAll("%", "<percent>")
+ .replaceAll("$", "<dollar>");
}
/**
@@ -15,11 +15,11 @@ export function escapeChat(estring: string): string {
* @param {string} estring the string to be unescaped
*/
export function unescapeChat(estring: string): string {
- return estring
- .replaceAll('<num>', '#')
- .replaceAll('<and>', '&')
- .replaceAll('<percent>', '%')
- .replaceAll('<dollar>', '$');
+ return estring
+ .replaceAll("<num>", "#")
+ .replaceAll("<and>", "&")
+ .replaceAll("<percent>", "%")
+ .replaceAll("<dollar>", "$");
}
/**
@@ -29,12 +29,10 @@ export function unescapeChat(estring: string): string {
* @param {string} unsafe an unsanitized string
*/
export function safeTags(unsafe: string): string {
- if (unsafe) {
- return unsafe
- .replaceAll('>', '>')
- .replaceAll('<', '<');
- }
- return '';
+ if (unsafe) {
+ return unsafe.replaceAll(">", ">").replaceAll("<", "<");
+ }
+ return "";
}
/**
@@ -42,8 +40,10 @@ export function safeTags(unsafe: string): string {
* @param {string} estring the string to be decoded
*/
export function decodeChat(estring: string): string {
- // Source: https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode
- return estring.replace(/\\u([\d\w]{1,})/gi, (match, group) => String.fromCharCode(parseInt(group, 16)));
+ // Source: https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode
+ return estring.replace(/\\u([\d\w]{1,})/gi, (match, group) =>
+ String.fromCharCode(parseInt(group, 16)),
+ );
}
/**
@@ -51,6 +51,6 @@ export function decodeChat(estring: string): string {
* @param {string} msg chat message to prepare for display
*/
export function prepChat(msg: string): string {
- // TODO: make this less awful
- return safeTags(unescapeChat(decodeChat(msg)));
+ // TODO: make this less awful
+ return safeTags(unescapeChat(decodeChat(msg)));
}
diff --git a/webAO/master.ts b/webAO/master.ts
index 112e035..23b5c04 100644
--- a/webAO/master.ts
+++ b/webAO/master.ts
@@ -1,219 +1,223 @@
-import { safeTags } from './encoding';
+import { safeTags } from "./encoding";
declare global {
- interface Window {
- setServ: (ID: number) => void;
- }
+ interface Window {
+ setServ: (ID: number) => void;
+ }
}
interface AOServer {
- name: string,
- description: string,
- ip: string,
- players: number,
- online: string,
- port?: number,
- ws_port?: number,
- wss_port?: number,
- assets?: string,
+ name: string;
+ description: string;
+ ip: string;
+ players: number;
+ online: string;
+ port?: number;
+ ws_port?: number;
+ wss_port?: number;
+ assets?: string;
}
const clientVersion = process.env.npm_package_version;
// const MASTERSERVER_IP = 'master.aceattorneyonline.com:27014';
-const serverlist_domain = 'servers.aceattorneyonline.com';
+const serverlist_domain = "servers.aceattorneyonline.com";
const protocol = window.location.protocol;
-const serverlist_cache_key = 'masterlist';
+const serverlist_cache_key = "masterlist";
const servers: AOServer[] = [];
servers[-2] = {
- name: 'Singleplayer',
- description: 'Build cases, try out new things',
- ip: '127.0.0.1',
- players: 0,
- online: 'Singleplayer',
- port: 50001,
+ name: "Singleplayer",
+ description: "Build cases, try out new things",
+ ip: "127.0.0.1",
+ players: 0,
+ online: "Singleplayer",
+ port: 50001,
} as AOServer;
servers[-1] = {
- name: 'Localhost',
- description: 'This is your computer on port 50001',
- ip: '127.0.0.1',
- players: 0,
- online: 'Localhost',
- port: 50001,
+ name: "Localhost",
+ description: "This is your computer on port 50001",
+ ip: "127.0.0.1",
+ players: 0,
+ online: "Localhost",
+ port: 50001,
} as AOServer;
-
function main() {
- getServerlist().then((serverlist) => {
- processServerlist(serverlist);
- });
+ getServerlist().then((serverlist) => {
+ processServerlist(serverlist);
+ });
- processClientVersion(clientVersion);
+ processClientVersion(clientVersion);
- getMasterVersion().then((masterVersion) => {
- processMasterVersion(masterVersion);
- });
+ getMasterVersion().then((masterVersion) => {
+ processMasterVersion(masterVersion);
+ });
}
main();
export function setServ(ID: number) {
- const server = servers[ID];
- const onlineStr = server.online;
- const serverDesc = safeTags(server.description);
- document.getElementById('serverdescription_content').innerHTML = `<b>${onlineStr}</b><br>${serverDesc}`;
+ const server = servers[ID];
+ const onlineStr = server.online;
+ const serverDesc = safeTags(server.description);
+ document.getElementById("serverdescription_content").innerHTML =
+ `<b>${onlineStr}</b><br>${serverDesc}`;
}
window.setServ = setServ;
-
// Fetches the serverlist from the masterserver
// Returns a properly typed list of servers
async function getServerlist(): Promise<AOServer[]> {
- const url = `${protocol}//${serverlist_domain}/servers`;
- const response = await fetch(url);
-
- if (!response.ok) {
- console.error(`Bad status code from masterserver. status: ${response.status}, body: ${response.body}`);
- document.getElementById('ms_error').style.display = 'block';
- // If we get a bad status code, try to use the cached serverlist
- return getCachedServerlist();
+ const url = `${protocol}//${serverlist_domain}/servers`;
+ const response = await fetch(url);
+
+ if (!response.ok) {
+ console.error(
+ `Bad status code from masterserver. status: ${response.status}, body: ${response.body}`,
+ );
+ document.getElementById("ms_error").style.display = "block";
+ // If we get a bad status code, try to use the cached serverlist
+ return getCachedServerlist();
+ }
+
+ const data = await response.json();
+ const serverlist: AOServer[] = [];
+
+ for (const item of data) {
+ if (!item.name) {
+ console.warn(`Server ${item} has no name, skipping`);
+ continue;
+ }
+ if (!item.ip) {
+ console.warn(`Server ${item.name} has no ip, skipping`);
+ continue;
+ }
+ if (!item.description) {
+ console.warn(`Server ${item.name} has no description, skipping`);
+ continue;
}
- const data = await response.json();
- const serverlist: AOServer[] = [];
-
- for (const item of data) {
- if (!item.name) {
- console.warn(`Server ${item} has no name, skipping`);
- continue;
- }
- if (!item.ip) {
- console.warn(`Server ${item.name} has no ip, skipping`);
- continue;
- }
- if (!item.description) {
- console.warn(`Server ${item.name} has no description, skipping`);
- continue;
- }
-
- const newServer: AOServer = {
- name: item.name,
- description: item.description,
- ip: item.ip,
- players: item.players || 0,
- online: `Players: ${item.players}`,
- }
-
- if (item.ws_port) {
- newServer.ws_port = item.ws_port;
- }
- if (item.wss_port) {
- newServer.wss_port = item.wss_port;
- }
-
- // if none of ws_port or wss_port are defined, skip
- // Note that this is not an error condition, as many servers only has port (TCP) enabled
- // Which means they don't support webAO
- if (!newServer.ws_port && !newServer.wss_port) {
- continue;
- }
-
- serverlist.push(newServer);
+ const newServer: AOServer = {
+ name: item.name,
+ description: item.description,
+ ip: item.ip,
+ players: item.players || 0,
+ online: `Players: ${item.players}`,
+ };
+
+ if (item.ws_port) {
+ newServer.ws_port = item.ws_port;
+ }
+ if (item.wss_port) {
+ newServer.wss_port = item.wss_port;
}
- // Always cache the result when we get it
- localStorage.setItem(serverlist_cache_key, JSON.stringify(serverlist));
+ // if none of ws_port or wss_port are defined, skip
+ // Note that this is not an error condition, as many servers only has port (TCP) enabled
+ // Which means they don't support webAO
+ if (!newServer.ws_port && !newServer.wss_port) {
+ continue;
+ }
+
+ serverlist.push(newServer);
+ }
+
+ // Always cache the result when we get it
+ localStorage.setItem(serverlist_cache_key, JSON.stringify(serverlist));
- return serverlist;
+ return serverlist;
}
function getCachedServerlist(): AOServer[] {
- // If it's not in the cache, return an empty list
- const cached = localStorage.getItem(serverlist_cache_key) || '[]';
- return JSON.parse(cached) as AOServer[];
+ // If it's not in the cache, return an empty list
+ const cached = localStorage.getItem(serverlist_cache_key) || "[]";
+ return JSON.parse(cached) as AOServer[];
}
// Constructs the client URL robustly, independent of domain and path
function constructClientURL(protocol: string): string {
- const clientURL = new URL(window.location.href);
+ const clientURL = new URL(window.location.href);
- // Use the given protocol
- clientURL.protocol = protocol;
+ // Use the given protocol
+ clientURL.protocol = protocol;
- // Remove the last part of the pathname (e.g., "index.html")
- const pathname = clientURL.pathname;
- const parts = pathname.split('/');
- parts.pop();
+ // Remove the last part of the pathname (e.g., "index.html")
+ const pathname = clientURL.pathname;
+ const parts = pathname.split("/");
+ parts.pop();
- // Reconstruct the pathname
- clientURL.pathname = parts.join('/');
+ // Reconstruct the pathname
+ clientURL.pathname = parts.join("/");
- // If clientURL.pathname does not end with a slash, add one
- if (clientURL.pathname[clientURL.pathname.length - 1] !== '/') {
- clientURL.pathname += '/'
- }
+ // If clientURL.pathname does not end with a slash, add one
+ if (clientURL.pathname[clientURL.pathname.length - 1] !== "/") {
+ clientURL.pathname += "/";
+ }
- clientURL.pathname += "client.html";
+ clientURL.pathname += "client.html";
- return clientURL.href;
+ return clientURL.href;
}
function processServerlist(serverlist: AOServer[]) {
- for (let i = 0; i < serverlist.length; i++) {
- const server = serverlist[i];
- let ws_port = 0;
- let ws_protocol = '';
- let http_protocol = '';
-
- if (server.ws_port) {
- ws_port = server.ws_port;
- ws_protocol = 'ws';
- http_protocol = 'http';
- }
- if (server.wss_port && !window.navigator.userAgent.includes("Nintendo")) {
- ws_port = server.wss_port;
- ws_protocol = 'wss';
- http_protocol = 'https';
- }
-
- if (ws_port === 0 || ws_protocol === '' || http_protocol === '') {
- console.warn(`Server ${server.name} has no websocket port, skipping`)
- continue;
- }
-
- const clientURL = constructClientURL(http_protocol);
- const connect = `${ws_protocol}://${server.ip}:${ws_port}`;
- const serverName = server.name;
- const fullClientWatchURL = `${clientURL}?mode=watch&connect=${connect}&serverName=${serverName}`;
- const fullClientJoinURL = `${clientURL}?mode=join&connect=${connect}&serverName=${serverName}`;
-
- servers.push(server);
-
- document.getElementById('masterlist').innerHTML
- += `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(server.name)} (${server.players})</p>`
- + `<a class="button" href="${fullClientWatchURL}" target="_blank">Watch</a>`
- + `<a class="button" href="${fullClientJoinURL}" target="_blank">Join</a></li>`;
+ for (let i = 0; i < serverlist.length; i++) {
+ const server = serverlist[i];
+ let ws_port = 0;
+ let ws_protocol = "";
+ let http_protocol = "";
+
+ if (server.ws_port) {
+ ws_port = server.ws_port;
+ ws_protocol = "ws";
+ http_protocol = "http";
+ }
+ if (server.wss_port && !window.navigator.userAgent.includes("Nintendo")) {
+ ws_port = server.wss_port;
+ ws_protocol = "wss";
+ http_protocol = "https";
}
-}
-async function getMasterVersion(): Promise<string> {
- const url = `${protocol}//${serverlist_domain}/version`;
- const response = await fetch(url);
- if (!response.ok) {
- console.error(`Bad status code from masterserver version check. status: ${response.status}, body: ${response.body}`);
- return 'Unknown';
+ if (ws_port === 0 || ws_protocol === "" || http_protocol === "") {
+ console.warn(`Server ${server.name} has no websocket port, skipping`);
+ continue;
}
- return await response.text();
+ const clientURL = constructClientURL(http_protocol);
+ const connect = `${ws_protocol}://${server.ip}:${ws_port}`;
+ const serverName = server.name;
+ const fullClientWatchURL = `${clientURL}?mode=watch&connect=${connect}&serverName=${serverName}`;
+ const fullClientJoinURL = `${clientURL}?mode=join&connect=${connect}&serverName=${serverName}`;
+
+ servers.push(server);
+
+ document.getElementById("masterlist").innerHTML +=
+ `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(server.name)} (${server.players})</p>` +
+ `<a class="button" href="${fullClientWatchURL}" target="_blank">Watch</a>` +
+ `<a class="button" href="${fullClientJoinURL}" target="_blank">Join</a></li>`;
+ }
+}
+
+async function getMasterVersion(): Promise<string> {
+ const url = `${protocol}//${serverlist_domain}/version`;
+ const response = await fetch(url);
+ if (!response.ok) {
+ console.error(
+ `Bad status code from masterserver version check. status: ${response.status}, body: ${response.body}`,
+ );
+ return "Unknown";
+ }
+
+ return await response.text();
}
function processClientVersion(data: string) {
- document.getElementById('clientinfo').innerHTML = `Client version: ${data}`;
+ document.getElementById("clientinfo").innerHTML = `Client version: ${data}`;
}
function processMasterVersion(data: string) {
- document.getElementById('serverinfo').innerHTML = `Master server version: ${data}`;
+ document.getElementById("serverinfo").innerHTML =
+ `Master server version: ${data}`;
}
diff --git a/webAO/packets/handlers/handleARUP.ts b/webAO/packets/handlers/handleARUP.ts
index 9d09648..7f72b15 100644
--- a/webAO/packets/handlers/handleARUP.ts
+++ b/webAO/packets/handlers/handleARUP.ts
@@ -2,41 +2,41 @@ import { client } from "../../client";
import { safeTags } from "../../encoding";
/**
- * Handle the change of players in an area.
- * @param {Array} args packet arguments
- */
+ * 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 - 1; 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;
- }
+ args = args.slice(1);
+ for (let i = 0; i < args.length - 1; 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.className = `area-button area-${client.areas[
+ i
+ ].status.toLowerCase()}`;
- thisarea.innerText = `${client.areas[i].name} (${client.areas[i].players}) [${client.areas[i].status}]`;
+ 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}`;
- }
+ 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/handleASS.ts b/webAO/packets/handlers/handleASS.ts
index bfd764d..a46d68e 100644
--- a/webAO/packets/handlers/handleASS.ts
+++ b/webAO/packets/handlers/handleASS.ts
@@ -1,11 +1,9 @@
import { setAOhost } from "../../client/aoHost";
-
-/**
-* new asset url!!
-* @param {Array} args packet arguments
-*/
+/**
+ * new asset url!!
+ * @param {Array} args packet arguments
+ */
export const handleASS = (args: string[]) => {
- if(args[1] !== "None")
- setAOhost(args[1]);
-}
+ if (args[1] !== "None") setAOhost(args[1]);
+};
diff --git a/webAO/packets/handlers/handleAUTH.ts b/webAO/packets/handlers/handleAUTH.ts
index 1408402..bbd1331 100644
--- a/webAO/packets/handlers/handleAUTH.ts
+++ b/webAO/packets/handlers/handleAUTH.ts
@@ -1,9 +1,8 @@
-/**
-* i am mod now
-* @param {Array} args packet arguments
-*/
+/**
+ * i am mod now
+ * @param {Array} args packet arguments
+ */
export const handleAUTH = (args: string[]) => {
- (<HTMLAnchorElement>(
- document.getElementById("mod_ui")
- )).href = `styles/mod.css`;
-}
+ (<HTMLAnchorElement>document.getElementById("mod_ui")).href =
+ `styles/mod.css`;
+};
diff --git a/webAO/packets/handlers/handleBB.ts b/webAO/packets/handlers/handleBB.ts
index c12c4f6..b2895c8 100644
--- a/webAO/packets/handlers/handleBB.ts
+++ b/webAO/packets/handlers/handleBB.ts
@@ -1,11 +1,10 @@
import { safeTags } from "../../encoding";
-
/**
* Handles the warning packet
* on client this spawns a message box you can't close for 2 seconds
* @param {Array} args ban reason
*/
export const handleBB = (args: string[]) => {
- alert(safeTags(args[1]));
-} \ No newline at end of file
+ alert(safeTags(args[1]));
+};
diff --git a/webAO/packets/handlers/handleBD.ts b/webAO/packets/handlers/handleBD.ts
index dbfb54b..befda6a 100644
--- a/webAO/packets/handlers/handleBD.ts
+++ b/webAO/packets/handlers/handleBD.ts
@@ -1,7 +1,6 @@
import { setBanned } from "../../client";
import { safeTags } from "../../encoding";
-import { handleBans } from '../../client/handleBans'
-
+import { handleBans } from "../../client/handleBans";
/**
* Handles the banned packet
@@ -9,6 +8,6 @@ import { handleBans } from '../../client/handleBans'
* @param {Array} args ban reason
*/
export const handleBD = (args: string[]) => {
- handleBans("Banned", safeTags(args[1]));
- setBanned(true);
-} \ No newline at end of file
+ handleBans("Banned", safeTags(args[1]));
+ setBanned(true);
+};
diff --git a/webAO/packets/handlers/handleBN.ts b/webAO/packets/handlers/handleBN.ts
index cf7b65a..aeea03b 100644
--- a/webAO/packets/handlers/handleBN.ts
+++ b/webAO/packets/handlers/handleBN.ts
@@ -1,10 +1,10 @@
import { client } from "../../client";
import { AO_HOST } from "../../client/aoHost";
import { safeTags } from "../../encoding";
-import { updateBackgroundPreview } from '../../dom/updateBackgroundPreview'
-import { getIndexFromSelect } from '../../dom/getIndexFromSelect'
-import { switchPanTilt } from '../../dom/switchPanTilt'
-import transparentPng from '../../constants/transparentPng'
+import { updateBackgroundPreview } from "../../dom/updateBackgroundPreview";
+import { getIndexFromSelect } from "../../dom/getIndexFromSelect";
+import { switchPanTilt } from "../../dom/switchPanTilt";
+import transparentPng from "../../constants/transparentPng";
import tryUrls from "../../utils/tryUrls";
/**
@@ -13,77 +13,70 @@ import tryUrls from "../../utils/tryUrls";
*/
export const handleBN = (args: string[]) => {
- const bgFromArgs = safeTags(args[1]);
- client.viewport.setBackgroundName(bgFromArgs);
- const bgfolder = client.viewport.getBackgroundFolder();
- const bg_index = getIndexFromSelect(
- "bg_select",
- client.viewport.getBackgroundName()
- );
- (<HTMLSelectElement>document.getElementById("bg_select")).selectedIndex =
- bg_index;
- updateBackgroundPreview();
- if (bg_index === 0) {
- (<HTMLInputElement>document.getElementById("bg_filename")).value =
- client.viewport.getBackgroundName();
+ const bgFromArgs = safeTags(args[1]);
+ client.viewport.setBackgroundName(bgFromArgs);
+ const bgfolder = client.viewport.getBackgroundFolder();
+ const bg_index = getIndexFromSelect(
+ "bg_select",
+ client.viewport.getBackgroundName(),
+ );
+ (<HTMLSelectElement>document.getElementById("bg_select")).selectedIndex =
+ bg_index;
+ updateBackgroundPreview();
+ if (bg_index === 0) {
+ (<HTMLInputElement>document.getElementById("bg_filename")).value =
+ client.viewport.getBackgroundName();
+ }
+
+ tryUrls(
+ `${AO_HOST}background/${encodeURI(args[1].toLowerCase())}/defenseempty`,
+ ).then((resp) => {
+ (<HTMLImageElement>document.getElementById("bg_preview")).src = resp;
+ });
+ tryUrls(`${bgfolder}defensedesk`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_def_bench")).src = resp;
+ });
+ tryUrls(`${bgfolder}stand`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_wit_bench")).src = resp;
+ });
+ tryUrls(`${bgfolder}prosecutiondesk`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_pro_bench")).src = resp;
+ });
+ tryUrls(`${bgfolder}court`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court")).src = resp;
+ if (resp !== transparentPng) {
+ (<HTMLInputElement>document.getElementById("client_pantilt")).checked =
+ true;
+ switchPanTilt();
}
+ });
+ tryUrls(`${bgfolder}defenseempty`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court_def")).src = resp;
+ });
+ tryUrls(`${bgfolder}transition_def`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court_deft")).src = resp;
+ });
+ tryUrls(`${bgfolder}witnessempty`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court_wit")).src = resp;
+ });
+ tryUrls(`${bgfolder}transition_pro`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court_prot")).src = resp;
+ });
+ tryUrls(`${bgfolder}prosecutorempty`).then((resp) => {
+ (<HTMLImageElement>document.getElementById("client_court_pro")).src = resp;
+ });
- tryUrls(
- `${AO_HOST}background/${encodeURI(args[1].toLowerCase())}/defenseempty`
- ).then((resp) => {
- (<HTMLImageElement>document.getElementById("bg_preview")).src = resp;
- });
- tryUrls(`${bgfolder}defensedesk`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_def_bench")).src =
- resp;
- });
- tryUrls(`${bgfolder}stand`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_wit_bench")).src =
- resp;
- });
- tryUrls(`${bgfolder}prosecutiondesk`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_pro_bench")).src =
- resp;
- });
- tryUrls(`${bgfolder}court`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court")).src = resp;
- if (resp !== transparentPng) {
- (<HTMLInputElement>document.getElementById("client_pantilt")).checked = true;
- switchPanTilt()
- }
- });
- tryUrls(`${bgfolder}defenseempty`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court_def")).src =
- resp;
+ if (client.charID === -1) {
+ client.viewport.set_side({
+ position: "jud",
+ showSpeedLines: false,
+ showDesk: true,
});
- tryUrls(`${bgfolder}transition_def`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court_deft")).src =
- resp;
+ } else {
+ client.viewport.set_side({
+ position: client.chars[client.charID].side,
+ showSpeedLines: false,
+ showDesk: true,
});
- tryUrls(`${bgfolder}witnessempty`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court_wit")).src =
- resp;
- });
- tryUrls(`${bgfolder}transition_pro`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court_prot")).src =
- resp;
- });
- tryUrls(`${bgfolder}prosecutorempty`).then((resp) => {
- (<HTMLImageElement>document.getElementById("client_court_pro")).src =
- resp;
- });
-
- if (client.charID === -1) {
- client.viewport.set_side({
- position: "jud",
- showSpeedLines: false,
- showDesk: true,
- });
- } else {
- client.viewport.set_side({
- position: client.chars[client.charID].side,
- showSpeedLines: false,
- showDesk: true,
- });
- }
-}
+ }
+};
diff --git a/webAO/packets/handlers/handleCC.ts b/webAO/packets/handlers/handleCC.ts
index 36bcdc7..8bc2fce 100644
--- a/webAO/packets/handlers/handleCC.ts
+++ b/webAO/packets/handlers/handleCC.ts
@@ -5,5 +5,5 @@ import { client } from "../../client";
* @param {Array} args packet arguments
*/
export const handleCC = (args: string[]) => {
- client.sender.sendSelf(`PV#1#CID#${args[2]}#%`);
-} \ No newline at end of file
+ client.sender.sendSelf(`PV#1#CID#${args[2]}#%`);
+};
diff --git a/webAO/packets/handlers/handleCI.ts b/webAO/packets/handlers/handleCI.ts
index a4e6d60..c0cbd84 100644
--- a/webAO/packets/handlers/handleCI.ts
+++ b/webAO/packets/handlers/handleCI.ts
@@ -1,23 +1,22 @@
-import { client } from '../../client'
-import { handleCharacterInfo } from '../../client/handleCharacterInfo'
+import { client } from "../../client";
+import { handleCharacterInfo } from "../../client/handleCharacterInfo";
/**
- * Handles incoming character information, bundling multiple characters
- * per packet.
- * CI#0#Phoenix&description&&&&&#1#Miles ...
- * @param {Array} args packet arguments
- */
+ * Handles incoming character information, bundling multiple characters
+ * per packet.
+ * CI#0#Phoenix&description&&&&&#1#Miles ...
+ * @param {Array} args packet arguments
+ */
export const handleCI = (args: string[]) => {
- // Loop through the 10 characters that were sent
- document.getElementById(
- "client_loadingtext"
- )!.innerHTML = `Loading Character ${args[1]}/${client.char_list_length}`;
- for (let i = 2; i <= args.length - 2; i++) {
- if (i % 2 === 0) {
- const chargs = args[i].split("&");
- const charid = Number(args[i - 1]);
- setTimeout(() => handleCharacterInfo(chargs, charid), 500);
- }
+ // Loop through the 10 characters that were sent
+ document.getElementById("client_loadingtext")!.innerHTML =
+ `Loading Character ${args[1]}/${client.char_list_length}`;
+ for (let i = 2; i <= args.length - 2; i++) {
+ if (i % 2 === 0) {
+ const chargs = args[i].split("&");
+ const charid = Number(args[i - 1]);
+ setTimeout(() => handleCharacterInfo(chargs, charid), 500);
}
- // Request the next pack
- client.sender.sendServer(`AN#${Number(args[1]) / 10 + 1}#%`);
-} \ No newline at end of file
+ }
+ // Request the next pack
+ client.sender.sendServer(`AN#${Number(args[1]) / 10 + 1}#%`);
+};
diff --git a/webAO/packets/handlers/handleCT.ts b/webAO/packets/handlers/handleCT.ts
index f85b5aa..29ec94c 100644
--- a/webAO/packets/handlers/handleCT.ts
+++ b/webAO/packets/handlers/handleCT.ts
@@ -1,27 +1,30 @@
-import queryParser from '../../utils/queryParser'
-import { prepChat } from '../../encoding'
+import queryParser from "../../utils/queryParser";
+import { prepChat } from "../../encoding";
const { mode } = queryParser();
/**
- * Handles an out-of-character chat message.
- * @param {Array} args packet arguments
- */
+ * 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")!;
- const username = prepChat(args[1]);
- let message = addLinks(prepChat(args[2]));
- // Replace newlines with br
- message = message.replace(/\n/g, "<br>");
+ if (mode !== "replay") {
+ const oocLog = document.getElementById("client_ooclog")!;
+ const username = prepChat(args[1]);
+ let message = addLinks(prepChat(args[2]));
+ // Replace newlines with br
+ message = message.replace(/\n/g, "<br>");
- oocLog.innerHTML += `${username}: ${message}<br>`;
- if (oocLog.scrollTop+oocLog.offsetHeight+120>oocLog.scrollHeight)
- oocLog.scrollTo(0, oocLog.scrollHeight);
- }
-}
+ oocLog.innerHTML += `${username}: ${message}<br>`;
+ if (oocLog.scrollTop + oocLog.offsetHeight + 120 > oocLog.scrollHeight)
+ oocLog.scrollTo(0, oocLog.scrollHeight);
+ }
+};
// If the incoming message contains a link, add a href hyperlink to it
function addLinks(message: string) {
- const urlRegex = /(https?:\/\/[^\s]+)/g;
- return message.replace(urlRegex, (url) => `<a href="${url}" target="_blank">${url}</a>`);
+ const urlRegex = /(https?:\/\/[^\s]+)/g;
+ return message.replace(
+ urlRegex,
+ (url) => `<a href="${url}" target="_blank">${url}</a>`,
+ );
}
diff --git a/webAO/packets/handlers/handleCharsCheck.ts b/webAO/packets/handlers/handleCharsCheck.ts
index 2d891ef..c862cd7 100644
--- a/webAO/packets/handlers/handleCharsCheck.ts
+++ b/webAO/packets/handlers/handleCharsCheck.ts
@@ -5,13 +5,13 @@ import { client } from "../../client";
* @param {Array} args list of all characters represented as a 0 for free or a -1 for taken
*/
export const handleCharsCheck = (args: string[]) => {
- for (let i = 0; i < client.char_list_length; i++) {
- const img = document.getElementById(`demo_${i}`)!;
+ for (let i = 0; i < client.char_list_length; i++) {
+ const img = document.getElementById(`demo_${i}`)!;
- if (args[i + 1] === "-1") {
- img.style.opacity = "0.25";
- } else if (args[i + 1] === "0") {
- img.style.opacity = "1";
- }
+ if (args[i + 1] === "-1") {
+ img.style.opacity = "0.25";
+ } else if (args[i + 1] === "0") {
+ img.style.opacity = "1";
}
-} \ No newline at end of file
+ }
+};
diff --git a/webAO/packets/handlers/handleDONE.ts b/webAO/packets/handlers/handleDONE.ts
index e323986..676c807 100644
--- a/webAO/packets/handlers/handleDONE.ts
+++ b/webAO/packets/handlers/handleDONE.ts
@@ -1,13 +1,13 @@
import queryParser from "../../utils/queryParser";
import { client, clientState } from "../../client";
-const { mode } = queryParser()
+const { mode } = queryParser();
/**
- * Handles the handshake completion packet, meaning the player
- * is ready to select a character.
- *
- * @param {Array} args packet arguments
- */
+ * Handles the handshake completion packet, meaning the player
+ * is ready to select a character.
+ *
+ * @param {Array} args packet arguments
+ */
export const handleDONE = (_args: string[]) => {
// DONE packet signals that the handshake is complete
client.state = clientState.Joined;
@@ -16,4 +16,4 @@ export const handleDONE = (_args: string[]) => {
// Spectators don't need to pick a character
document.getElementById("client_waiting")!.style.display = "none";
}
-}
+};
diff --git a/webAO/packets/handlers/handleEI.ts b/webAO/packets/handlers/handleEI.ts
index b023682..d134466 100644
--- a/webAO/packets/handlers/handleEI.ts
+++ b/webAO/packets/handlers/handleEI.ts
@@ -1,6 +1,6 @@
-import { client } from '../../client'
-import { AO_HOST } from '../../client/aoHost';
-import { prepChat, safeTags } from '../../encoding';
+import { client } from "../../client";
+import { AO_HOST } from "../../client/aoHost";
+import { prepChat, safeTags } from "../../encoding";
/**
* Handles incoming evidence information, containing only one evidence
@@ -11,17 +11,16 @@ import { prepChat, safeTags } from '../../encoding';
* @param {Array} args packet arguments
*/
export const handleEI = (args: string[]) => {
- document.getElementById(
- "client_loadingtext"
- )!.innerHTML = `Loading Evidence ${args[1]}/${client.evidence_list_length}`;
- const evidenceID = Number(args[1]);
- const arg = args[2].split("&");
- client.evidences[evidenceID] = {
- name: prepChat(arg[0]),
- desc: prepChat(arg[1]),
- filename: safeTags(arg[3]),
- icon: `${AO_HOST}evidence/${encodeURI(arg[3].toLowerCase())}`,
- };
+ document.getElementById("client_loadingtext")!.innerHTML =
+ `Loading Evidence ${args[1]}/${client.evidence_list_length}`;
+ const evidenceID = Number(args[1]);
+ const arg = args[2].split("&");
+ client.evidences[evidenceID] = {
+ name: prepChat(arg[0]),
+ desc: prepChat(arg[1]),
+ filename: safeTags(arg[3]),
+ icon: `${AO_HOST}evidence/${encodeURI(arg[3].toLowerCase())}`,
+ };
- client.sender.sendServer("AE" + (evidenceID + 1) + "#%");
-} \ No newline at end of file
+ client.sender.sendServer("AE" + (evidenceID + 1) + "#%");
+};
diff --git a/webAO/packets/handlers/handleEM.ts b/webAO/packets/handlers/handleEM.ts
index 049ff67..9f236e3 100644
--- a/webAO/packets/handlers/handleEM.ts
+++ b/webAO/packets/handlers/handleEM.ts
@@ -1,9 +1,9 @@
-import { client } from '../../client'
-import { addTrack } from '../../client/addTrack';
-import { createArea } from '../../client/createArea';
-import { fix_last_area } from '../../client/fixLastArea';
-import { isAudio } from '../../client/isAudio';
-import { safeTags } from '../../encoding';
+import { client } from "../../client";
+import { addTrack } from "../../client/addTrack";
+import { createArea } from "../../client/createArea";
+import { fix_last_area } from "../../client/fixLastArea";
+import { isAudio } from "../../client/isAudio";
+import { safeTags } from "../../encoding";
/**
* Handles incoming music information, containing multiple entries
@@ -11,28 +11,28 @@ import { safeTags } from '../../encoding';
* @param {Array} args packet arguments
*/
export const handleEM = (args: string[]) => {
- document.getElementById("client_loadingtext")!.innerHTML = "Loading Music";
- if (args[1] === "0") {
- client.resetMusicList();
- client.resetAreaList();
- client.musics_time = false;
- }
+ document.getElementById("client_loadingtext")!.innerHTML = "Loading Music";
+ if (args[1] === "0") {
+ client.resetMusicList();
+ client.resetAreaList();
+ client.musics_time = false;
+ }
- for (let i = 2; i < args.length - 1; i++) {
- if (i % 2 === 0) {
- const trackname = args[i];
- const trackindex = Number(args[i - 1]);
- if (client.musics_time) {
- addTrack(trackname);
- } else if (isAudio(trackname)) {
- client.musics_time = true;
- fix_last_area();
- addTrack(trackname);
- } else {
- createArea(trackindex, trackname);
- }
- }
+ for (let i = 2; i < args.length - 1; i++) {
+ if (i % 2 === 0) {
+ const trackname = args[i];
+ const trackindex = Number(args[i - 1]);
+ if (client.musics_time) {
+ addTrack(trackname);
+ } else if (isAudio(trackname)) {
+ client.musics_time = true;
+ fix_last_area();
+ addTrack(trackname);
+ } else {
+ createArea(trackindex, trackname);
+ }
}
- // get the next batch of tracks
- client.sender.sendServer(`AM#${Number(args[1]) / 10 + 1}#%`);
-} \ No newline at end of file
+ }
+ // get the next batch of tracks
+ client.sender.sendServer(`AM#${Number(args[1]) / 10 + 1}#%`);
+};
diff --git a/webAO/packets/handlers/handleFA.ts b/webAO/packets/handlers/handleFA.ts
index d98472d..f6a7ed0 100644
--- a/webAO/packets/handlers/handleFA.ts
+++ b/webAO/packets/handlers/handleFA.ts
@@ -1,15 +1,15 @@
-import { client } from '../../client'
-import { createArea } from '../../client/createArea';
-import { safeTags } from '../../encoding';
+import { client } from "../../client";
+import { createArea } from "../../client/createArea";
+import { safeTags } from "../../encoding";
/**
* Handles updated area list
* @param {Array} args packet arguments
*/
export const handleFA = (args: string[]) => {
- client.resetAreaList();
+ client.resetAreaList();
- for (let i = 1; i < args.length; i++) {
- createArea(i - 1, safeTags(args[i]));
- }
-}
+ for (let i = 1; i < args.length; i++) {
+ createArea(i - 1, safeTags(args[i]));
+ }
+};
diff --git a/webAO/packets/handlers/handleFL.ts b/webAO/packets/handlers/handleFL.ts
index e77e968..5479f4e 100644
--- a/webAO/packets/handlers/handleFL.ts
+++ b/webAO/packets/handlers/handleFL.ts
@@ -5,40 +5,38 @@ import { setExtraFeatures } from "../../client";
* @param {Array} args list of features
*/
export const handleFL = (args: string[]) => {
- console.info("Server-supported features:");
- console.info(args);
- setExtraFeatures(args);
-
- if (args.includes("yellowtext")) {
- const colorselect = <HTMLSelectElement>(
- document.getElementById("textcolor")
- );
-
- colorselect.options[colorselect.options.length] = new Option("Yellow", "5");
- colorselect.options[colorselect.options.length] = new Option("Pink", "6");
- colorselect.options[colorselect.options.length] = new Option("Cyan", "7");
- colorselect.options[colorselect.options.length] = new Option("Grey", "8");
- }
-
- if (args.includes("cccc_ic_support")) {
- document.getElementById("cccc")!.style.display = "";
- document.getElementById("pairing")!.style.display = "";
- }
-
- if (args.includes("flipping")) {
- document.getElementById("button_flip")!.style.display = "";
- }
-
- if (args.includes("looping_sfx")) {
- document.getElementById("button_shake")!.style.display = "";
- document.getElementById("2.7")!.style.display = "";
- }
-
- if (args.includes("effects")) {
- document.getElementById("2.8")!.style.display = "";
- }
-
- if (args.includes("y_offset")) {
- document.getElementById("y_offset")!.style.display = "";
- }
-}
+ console.info("Server-supported features:");
+ console.info(args);
+ setExtraFeatures(args);
+
+ if (args.includes("yellowtext")) {
+ const colorselect = <HTMLSelectElement>document.getElementById("textcolor");
+
+ colorselect.options[colorselect.options.length] = new Option("Yellow", "5");
+ colorselect.options[colorselect.options.length] = new Option("Pink", "6");
+ colorselect.options[colorselect.options.length] = new Option("Cyan", "7");
+ colorselect.options[colorselect.options.length] = new Option("Grey", "8");
+ }
+
+ if (args.includes("cccc_ic_support")) {
+ document.getElementById("cccc")!.style.display = "";
+ document.getElementById("pairing")!.style.display = "";
+ }
+
+ if (args.includes("flipping")) {
+ document.getElementById("button_flip")!.style.display = "";
+ }
+
+ if (args.includes("looping_sfx")) {
+ document.getElementById("button_shake")!.style.display = "";
+ document.getElementById("2.7")!.style.display = "";
+ }
+
+ if (args.includes("effects")) {
+ document.getElementById("2.8")!.style.display = "";
+ }
+
+ if (args.includes("y_offset")) {
+ document.getElementById("y_offset")!.style.display = "";
+ }
+};
diff --git a/webAO/packets/handlers/handleFM.ts b/webAO/packets/handlers/handleFM.ts
index 4ac4ae4..4bf10fe 100644
--- a/webAO/packets/handlers/handleFM.ts
+++ b/webAO/packets/handlers/handleFM.ts
@@ -7,10 +7,10 @@ import { safeTags } from "../../encoding";
* @param {Array} args packet arguments
*/
export const handleFM = (args: string[]) => {
- client.resetMusicList();
+ client.resetMusicList();
- for (let i = 1; i < args.length - 1; i++) {
- // Check when found the song for the first time
- addTrack(args[i]);
- }
-}
+ for (let i = 1; i < args.length - 1; i++) {
+ // Check when found the song for the first time
+ addTrack(args[i]);
+ }
+};
diff --git a/webAO/packets/handlers/handleHI.ts b/webAO/packets/handlers/handleHI.ts
index b4f00a8..5cd6150 100644
--- a/webAO/packets/handlers/handleHI.ts
+++ b/webAO/packets/handlers/handleHI.ts
@@ -1,14 +1,13 @@
import { client } from "../../client";
const version = process.env.npm_package_version;
-
/**
* Handle the player
* @param {Array} args packet arguments
*/
export const handleHI = (_args: string[]) => {
- client.sender.sendSelf(`ID#1#webAO#${version}#%`);
- client.sender.sendSelf(
- "FL#fastloading#yellowtext#cccc_ic_support#flipping#looping_sfx#effects#%"
- );
-}
+ client.sender.sendSelf(`ID#1#webAO#${version}#%`);
+ client.sender.sendSelf(
+ "FL#fastloading#yellowtext#cccc_ic_support#flipping#looping_sfx#effects#%",
+ );
+};
diff --git a/webAO/packets/handlers/handleHP.ts b/webAO/packets/handlers/handleHP.ts
index 81dee64..6347e9f 100644
--- a/webAO/packets/handlers/handleHP.ts
+++ b/webAO/packets/handlers/handleHP.ts
@@ -5,18 +5,17 @@ import { client } from "../../client";
* @param {Array} args packet arguments
*/
export const handleHP = (args: string[]) => {
- const percent_hp = Number(args[2]) * 10;
- let healthbox;
- if (args[1] === "1") {
- // Def hp
- client.hp[0] = Number(args[2]);
- healthbox = document.getElementById("client_defense_hp");
- } else {
- // Pro hp
- client.hp[1] = Number(args[2]);
- healthbox = document.getElementById("client_prosecutor_hp");
- }
- (<HTMLElement>(
- healthbox.getElementsByClassName("health-bar")[0]
- )).style.width = `${percent_hp}%`;
-}
+ const percent_hp = Number(args[2]) * 10;
+ let healthbox;
+ if (args[1] === "1") {
+ // Def hp
+ client.hp[0] = Number(args[2]);
+ healthbox = document.getElementById("client_defense_hp");
+ } else {
+ // Pro hp
+ client.hp[1] = Number(args[2]);
+ healthbox = document.getElementById("client_prosecutor_hp");
+ }
+ (<HTMLElement>healthbox.getElementsByClassName("health-bar")[0]).style.width =
+ `${percent_hp}%`;
+};
diff --git a/webAO/packets/handlers/handleID.ts b/webAO/packets/handlers/handleID.ts
index dab8f75..cba2f09 100644
--- a/webAO/packets/handlers/handleID.ts
+++ b/webAO/packets/handlers/handleID.ts
@@ -2,27 +2,27 @@ import { client, setOldLoading } from "../../client";
const version = process.env.npm_package_version;
/**
- * Identifies the server and issues a playerID
- * @param {Array} args packet arguments
- */
+ * 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.sender.sendSelf("PN#0#1#%");
- } else {
- serverVersion = args[3];
- }
+ 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.sender.sendSelf("PN#0#1#%");
+ } else {
+ serverVersion = args[3];
+ }
- if (serverSoftware === "serverD" && serverVersion === "1377.152") {
- setOldLoading(true);
- } // bugged version
+ if (serverSoftware === "serverD" && serverVersion === "1377.152") {
+ setOldLoading(true);
+ } // bugged version
- if (serverSoftware !== "webAO") {
- client.sender.sendServer(`ID#webAO#${version}#%`);
- }
-} \ No newline at end of file
+ if (serverSoftware !== "webAO") {
+ client.sender.sendServer(`ID#webAO#${version}#%`);
+ }
+};
diff --git a/webAO/packets/handlers/handleJD.ts b/webAO/packets/handlers/handleJD.ts
index 98d7988..a66bf2a 100644
--- a/webAO/packets/handlers/handleJD.ts
+++ b/webAO/packets/handlers/handleJD.ts
@@ -1,13 +1,13 @@
/**
-* show/hide judge controls
-* @param {number} show either a 1 or a 0
-*/
+ * show/hide judge controls
+ * @param {number} show either a 1 or a 0
+ */
export const handleJD = (args: string[]) => {
- if (Number(args[1]) === 1) {
- document.getElementById("judge_action")!.style.display = "inline-table";
- document.getElementById("no_action")!.style.display = "none";
- } else {
- document.getElementById("judge_action")!.style.display = "none";
- document.getElementById("no_action")!.style.display = "inline-table";
- }
-} \ No newline at end of file
+ if (Number(args[1]) === 1) {
+ document.getElementById("judge_action")!.style.display = "inline-table";
+ document.getElementById("no_action")!.style.display = "none";
+ } else {
+ document.getElementById("judge_action")!.style.display = "none";
+ document.getElementById("no_action")!.style.display = "inline-table";
+ }
+};
diff --git a/webAO/packets/handlers/handleKB.ts b/webAO/packets/handlers/handleKB.ts
index b0aa2b2..3192cb1 100644
--- a/webAO/packets/handlers/handleKB.ts
+++ b/webAO/packets/handlers/handleKB.ts
@@ -1,6 +1,6 @@
import { setBanned } from "../../client";
import { safeTags } from "../../encoding";
-import { handleBans } from '../../client/handleBans'
+import { handleBans } from "../../client/handleBans";
/**
* Handles the banned packet
@@ -8,6 +8,6 @@ import { handleBans } from '../../client/handleBans'
* @param {Array} args ban reason
*/
export const handleKB = (args: string[]) => {
- handleBans("Banned", safeTags(args[1]));
- setBanned(true);
-}
+ handleBans("Banned", safeTags(args[1]));
+ setBanned(true);
+};
diff --git a/webAO/packets/handlers/handleKK.ts b/webAO/packets/handlers/handleKK.ts
index c8a97b1..4114139 100644
--- a/webAO/packets/handlers/handleKK.ts
+++ b/webAO/packets/handlers/handleKK.ts
@@ -1,10 +1,10 @@
import { safeTags } from "../../encoding";
-import { handleBans } from '../../client/handleBans'
+import { handleBans } from "../../client/handleBans";
/**
* Handles the kicked packet
* @param {Array} args kick reason
*/
export const handleKK = (args: string[]) => {
- handleBans("Kicked", safeTags(args[1]));
-}
+ handleBans("Kicked", safeTags(args[1]));
+};
diff --git a/webAO/packets/handlers/handleLE.ts b/webAO/packets/handlers/handleLE.ts
index 7291cd6..720df2c 100644
--- a/webAO/packets/handlers/handleLE.ts
+++ b/webAO/packets/handlers/handleLE.ts
@@ -1,6 +1,6 @@
-import { client } from '../../client'
-import { AO_HOST } from '../../client/aoHost';
-import { prepChat, safeTags } from '../../encoding';
+import { client } from "../../client";
+import { AO_HOST } from "../../client/aoHost";
+import { prepChat, safeTags } from "../../encoding";
/**
* Handles incoming evidence list, all evidences at once
@@ -9,28 +9,29 @@ import { prepChat, safeTags } from '../../encoding';
* @param {Array} args packet arguments
*/
export const handleLE = (args: string[]) => {
- client.evidences = [];
- for (let i = 1; i < args.length; i++) {
- if (!args[i].includes("&"))
- break;
- const arg = args[i].split("&");
- client.evidences[i - 1] = {
- name: prepChat(arg[0]),
- desc: prepChat(arg[1]),
- filename: safeTags(arg[2]),
- icon: `${AO_HOST}evidence/${encodeURI(arg[2].toLowerCase())}`,
- };
- }
+ client.evidences = [];
+ for (let i = 1; i < args.length; i++) {
+ if (!args[i].includes("&")) break;
+ const arg = args[i].split("&");
+ client.evidences[i - 1] = {
+ name: prepChat(arg[0]),
+ desc: prepChat(arg[1]),
+ filename: safeTags(arg[2]),
+ icon: `${AO_HOST}evidence/${encodeURI(arg[2].toLowerCase())}`,
+ };
+ }
- const evidence_box = document.getElementById("evidences");
- evidence_box.innerHTML = "";
- for (let i = 0; i <= client.evidences.length-1; i++) {
- const evi_item = new Image();
- evi_item.id = "evi_"+i;
- evi_item.className = "evi_icon"
- evi_item.src = client.evidences[i].icon;
- evi_item.alt = client.evidences[i].name;
- evi_item.onclick = () => { window.pickEvidence(i) }
- evidence_box.appendChild(evi_item);
- }
-} \ No newline at end of file
+ const evidence_box = document.getElementById("evidences");
+ evidence_box.innerHTML = "";
+ for (let i = 0; i <= client.evidences.length - 1; i++) {
+ const evi_item = new Image();
+ evi_item.id = "evi_" + i;
+ evi_item.className = "evi_icon";
+ evi_item.src = client.evidences[i].icon;
+ evi_item.alt = client.evidences[i].name;
+ evi_item.onclick = () => {
+ window.pickEvidence(i);
+ };
+ evidence_box.appendChild(evi_item);
+ }
+};
diff --git a/webAO/packets/handlers/handleMC.ts b/webAO/packets/handlers/handleMC.ts
index aeb178d..c92a818 100644
--- a/webAO/packets/handlers/handleMC.ts
+++ b/webAO/packets/handlers/handleMC.ts
@@ -1,43 +1,43 @@
import { prepChat } from "../../encoding";
-import { client } from '../../client'
+import { client } from "../../client";
import { AO_HOST } from "../../client/aoHost";
-import { appendICLog } from '../../client/appendICLog'
+import { appendICLog } from "../../client/appendICLog";
/**
* 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 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();
+ 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;
- }
+ 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}`);
- }
+ 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
+ document.getElementById("client_trackstatustext")!.innerText = track;
+};
diff --git a/webAO/packets/handlers/handleMM.ts b/webAO/packets/handlers/handleMM.ts
index 077140f..2542ab1 100644
--- a/webAO/packets/handlers/handleMM.ts
+++ b/webAO/packets/handlers/handleMM.ts
@@ -1,8 +1,7 @@
-
/**
* Handles the "MusicMode" packet
* @param {Array} args packet arguments
*/
export const handleMM = (_args: string[]) => {
- // It's unused nowadays, as preventing people from changing the music is now serverside
-} \ No newline at end of file
+ // It's unused nowadays, as preventing people from changing the music is now serverside
+};
diff --git a/webAO/packets/handlers/handleMS.ts b/webAO/packets/handlers/handleMS.ts
index 0c54a57..7685bd6 100644
--- a/webAO/packets/handlers/handleMS.ts
+++ b/webAO/packets/handlers/handleMS.ts
@@ -23,7 +23,7 @@ export const handleMS = (args: string[]) => {
if (char_id < client.char_list_length && char_id >= 0) {
if (client.chars[char_id].name !== char_name) {
console.info(
- `${client.chars[char_id].name} is iniediting to ${char_name}`
+ `${client.chars[char_id].name} is iniediting to ${char_name}`,
);
const chargs = (`${char_name}&` + "iniediter").split("&");
handleCharacterInfo(chargs, char_id);
@@ -38,7 +38,7 @@ export const handleMS = (args: string[]) => {
try {
msg_blips = client.chars[char_id].blips;
- } catch (e) { }
+ } catch (e) {}
try {
char_chatbox = client.chars[char_id].chat;
@@ -169,4 +169,4 @@ export const handleMS = (args: string[]) => {
handle_ic_speaking(chatmsg); // no await
}
}
-}
+};
diff --git a/webAO/packets/handlers/handlePN.ts b/webAO/packets/handlers/handlePN.ts
index 1b66fb9..6dd82ff 100644
--- a/webAO/packets/handlers/handlePN.ts
+++ b/webAO/packets/handlers/handlePN.ts
@@ -5,5 +5,5 @@ import { client } from "../../client";
* @param {Array} args packet arguments
*/
export const handlePN = (_args: string[]) => {
- client.sender.sendServer("askchaa#%");
-} \ No newline at end of file
+ client.sender.sendServer("askchaa#%");
+};
diff --git a/webAO/packets/handlers/handlePR.ts b/webAO/packets/handlers/handlePR.ts
index fd53b1f..51822d7 100644
--- a/webAO/packets/handlers/handlePR.ts
+++ b/webAO/packets/handlers/handlePR.ts
@@ -1,54 +1,58 @@
import { client } from "../../client";
-import { kickPlayer, banPlayer } from '../../dom/banPlayer'
+import { kickPlayer, banPlayer } from "../../dom/banPlayer";
function addPlayer(playerID: number) {
- const list = <HTMLTableElement>document.getElementById("client_playerlist");
- const playerRow = list.insertRow();
- playerRow.id = `client_playerlist_entry${playerID}`;
- playerRow.className = `area0`;
-
- const imgCell = playerRow.insertCell(0);
- imgCell.style.width = "64px";
- const img = document.createElement('img');
- imgCell.appendChild(img);
-
- const name = document.createTextNode('Unknown');
-
- const charNameCell = playerRow.insertCell(1);
- charNameCell.appendChild(name);
- const showNameCell = playerRow.insertCell(2);
- showNameCell.appendChild(name);
- const oocNameCell = playerRow.insertCell(3);
- oocNameCell.appendChild(name);
-
- const kickCell = playerRow.insertCell(4);
- kickCell.style.width = "64px";
- const kick = <HTMLButtonElement>document.createElement("button");
- kick.innerText = "Kick";
- kick.onclick = () => { window.kickPlayer(playerID) }
- kickCell.appendChild(kick);
-
- const banCell = playerRow.insertCell(5);
- banCell.style.width = "64px";
- const ban = <HTMLButtonElement>document.createElement("button");
- ban.innerText = "Ban";
- ban.onclick = () => { window.banPlayer(playerID) }
- banCell.appendChild(ban);
+ const list = <HTMLTableElement>document.getElementById("client_playerlist");
+ const playerRow = list.insertRow();
+ playerRow.id = `client_playerlist_entry${playerID}`;
+ playerRow.className = `area0`;
+
+ const imgCell = playerRow.insertCell(0);
+ imgCell.style.width = "64px";
+ const img = document.createElement("img");
+ imgCell.appendChild(img);
+
+ const name = document.createTextNode("Unknown");
+
+ const charNameCell = playerRow.insertCell(1);
+ charNameCell.appendChild(name);
+ const showNameCell = playerRow.insertCell(2);
+ showNameCell.appendChild(name);
+ const oocNameCell = playerRow.insertCell(3);
+ oocNameCell.appendChild(name);
+
+ const kickCell = playerRow.insertCell(4);
+ kickCell.style.width = "64px";
+ const kick = <HTMLButtonElement>document.createElement("button");
+ kick.innerText = "Kick";
+ kick.onclick = () => {
+ window.kickPlayer(playerID);
+ };
+ kickCell.appendChild(kick);
+
+ const banCell = playerRow.insertCell(5);
+ banCell.style.width = "64px";
+ const ban = <HTMLButtonElement>document.createElement("button");
+ ban.innerText = "Ban";
+ ban.onclick = () => {
+ window.banPlayer(playerID);
+ };
+ banCell.appendChild(ban);
}
function removePlayer(playerID: number) {
- const playerRow = <HTMLTableElement>document.getElementById(`client_playerlist_entry${playerID}`);
- playerRow.remove();
+ const playerRow = <HTMLTableElement>(
+ document.getElementById(`client_playerlist_entry${playerID}`)
+ );
+ playerRow.remove();
}
/**
- * Handles a player joining or leaving
- * @param {Array} args packet arguments
- */
+ * Handles a player joining or leaving
+ * @param {Array} args packet arguments
+ */
export const handlePR = (args: string[]) => {
- const playerID = Number(args[1]);
- if (Number(args[2]) === 0)
- addPlayer(playerID);
- else if (Number(args[2]) === 1)
- removePlayer(playerID);
-} \ No newline at end of file
+ const playerID = Number(args[1]);
+ if (Number(args[2]) === 0) addPlayer(playerID);
+ else if (Number(args[2]) === 1) removePlayer(playerID);
+};
diff --git a/webAO/packets/handlers/handlePU.ts b/webAO/packets/handlers/handlePU.ts
index e2fd4d7..c1ed8fc 100644
--- a/webAO/packets/handlers/handlePU.ts
+++ b/webAO/packets/handlers/handlePU.ts
@@ -1,34 +1,36 @@
import { client } from "../../client";
import { getCharIcon } from "../../client/handleCharacterInfo";
-import { updatePlayerAreas } from '../../dom/updatePlayerAreas'
+import { updatePlayerAreas } from "../../dom/updatePlayerAreas";
/**
- * Handles a playerlist update
- * @param {Array} args packet arguments
- */
+ * Handles a playerlist update
+ * @param {Array} args packet arguments
+ */
export const handlePU = (args: string[]) => {
- const playerRow = <HTMLTableElement>document.getElementById(`client_playerlist_entry${Number(args[1])}`);
- const type = Number(args[2]);
- const data = args[3];
- switch (type) {
- case 0:
- const oocName = <HTMLElement>playerRow.childNodes[3];
- oocName.innerText = data;
- break;
- case 1:
- const playerImg = <HTMLImageElement>playerRow.childNodes[0].firstChild;
- getCharIcon(playerImg, data);
- const charName = <HTMLElement>playerRow.childNodes[1];
- charName.innerText = data;
- break;
- case 2:
- const showName = <HTMLElement>playerRow.childNodes[2];
- showName.innerText = data;
- break;
- case 3:
- playerRow.className = `area${data}`;
- updatePlayerAreas(client.area);
- default:
- break;
- }
-} \ No newline at end of file
+ const playerRow = <HTMLTableElement>(
+ document.getElementById(`client_playerlist_entry${Number(args[1])}`)
+ );
+ const type = Number(args[2]);
+ const data = args[3];
+ switch (type) {
+ case 0:
+ const oocName = <HTMLElement>playerRow.childNodes[3];
+ oocName.innerText = data;
+ break;
+ case 1:
+ const playerImg = <HTMLImageElement>playerRow.childNodes[0].firstChild;
+ getCharIcon(playerImg, data);
+ const charName = <HTMLElement>playerRow.childNodes[1];
+ charName.innerText = data;
+ break;
+ case 2:
+ const showName = <HTMLElement>playerRow.childNodes[2];
+ showName.innerText = data;
+ break;
+ case 3:
+ playerRow.className = `area${data}`;
+ updatePlayerAreas(client.area);
+ default:
+ break;
+ }
+};
diff --git a/webAO/packets/handlers/handlePV.ts b/webAO/packets/handlers/handlePV.ts
index 5a04b89..900ea89 100644
--- a/webAO/packets/handlers/handlePV.ts
+++ b/webAO/packets/handlers/handlePV.ts
@@ -1,106 +1,107 @@
import { client } from "../../client";
import fileExists from "../../utils/fileExists";
-import { updateActionCommands } from '../../dom/updateActionCommands'
-import { pickEmotion } from '../../dom/pickEmotion'
+import { updateActionCommands } from "../../dom/updateActionCommands";
+import { pickEmotion } from "../../dom/pickEmotion";
import { AO_HOST } from "../../client/aoHost";
function addEmoteButton(i: number, imgurl: string, desc: string) {
- const emotesList = document.getElementById("client_emo");
- const emote_item = new Image();
- emote_item.id = "emo_" + i;
- emote_item.className = "emote_button";
- emote_item.src = imgurl;
- emote_item.alt = desc;
- emote_item.title = desc;
- emote_item.onclick = () => { window.pickEmotion(i) }
- emotesList.appendChild(emote_item);
+ const emotesList = document.getElementById("client_emo");
+ const emote_item = new Image();
+ emote_item.id = "emo_" + i;
+ emote_item.className = "emote_button";
+ emote_item.src = imgurl;
+ emote_item.alt = desc;
+ emote_item.title = desc;
+ emote_item.onclick = () => {
+ window.pickEmotion(i);
+ };
+ emotesList.appendChild(emote_item);
}
-
/**
* Handles the server's assignment of a character for the player to use.
* PV # playerID (unused) # CID # character ID
* @param {Array} args packet arguments
*/
export const handlePV = async (args: string[]) => {
- client.charID = Number(args[3]);
- document.getElementById("client_waiting")!.style.display = "none";
- document.getElementById("client_charselect")!.style.display = "none";
+ client.charID = Number(args[3]);
+ document.getElementById("client_waiting")!.style.display = "none";
+ document.getElementById("client_charselect")!.style.display = "none";
- const me = client.chars[client.charID];
- client.selectedEmote = -1;
- const { emotes } = client;
- const emotesList = document.getElementById("client_emo");
- emotesList.style.display = "";
- emotesList.innerHTML = ""; // Clear emote box
- const ini = me.inifile;
- me.side = ini.options.side;
- updateActionCommands(me.side);
- if (ini.emotions.number === 0) {
- emotesList.innerHTML = `<span
+ const me = client.chars[client.charID];
+ client.selectedEmote = -1;
+ const { emotes } = client;
+ const emotesList = document.getElementById("client_emo");
+ emotesList.style.display = "";
+ emotesList.innerHTML = ""; // Clear emote box
+ const ini = me.inifile;
+ me.side = ini.options.side;
+ updateActionCommands(me.side);
+ if (ini.emotions.number === 0) {
+ emotesList.innerHTML = `<span
id="emo_0"
alt="unavailable"
class="emote_button">No emotes available</span>`;
- } else {
- for (let i = 1; i <= ini.emotions.number; i++) {
- try {
- const emoteinfo = ini.emotions[i].split("#");
- let esfx;
- let esfxd;
- try {
- esfx = ini.soundn[i] || "0";
- esfxd = Number(ini.soundt[i]) || 0;
- } catch (e) {
- console.warn("ini sound is completly missing");
- esfx = "0";
- esfxd = 0;
- }
- // Make sure the asset server is case insensitive, or that everything on it is lowercase
+ } else {
+ for (let i = 1; i <= ini.emotions.number; i++) {
+ try {
+ const emoteinfo = ini.emotions[i].split("#");
+ let esfx;
+ let esfxd;
+ try {
+ esfx = ini.soundn[i] || "0";
+ esfxd = Number(ini.soundt[i]) || 0;
+ } catch (e) {
+ console.warn("ini sound is completly missing");
+ esfx = "0";
+ esfxd = 0;
+ }
+ // Make sure the asset server is case insensitive, or that everything on it is lowercase
- const extensionsMap = [".png", ".webp"];
- let url;
- for (const extension of extensionsMap) {
- url = `${AO_HOST}characters/${encodeURI(
- me.name.toLowerCase()
- )}/emotions/button${i}_off${extension}`;
+ const extensionsMap = [".png", ".webp"];
+ let url;
+ for (const extension of extensionsMap) {
+ url = `${AO_HOST}characters/${encodeURI(
+ me.name.toLowerCase(),
+ )}/emotions/button${i}_off${extension}`;
- const exists = await fileExists(url);
+ const exists = await fileExists(url);
- if (exists) {
- break;
- }
- }
+ if (exists) {
+ break;
+ }
+ }
- emotes[i] = {
- desc: emoteinfo[0].toLowerCase(),
- preanim: emoteinfo[1].toLowerCase(),
- emote: emoteinfo[2].toLowerCase(),
- zoom: Number(emoteinfo[3]) || 0,
- deskmod: Number(emoteinfo[4]) || 1,
- sfx: esfx.toLowerCase(),
- sfxdelay: esfxd,
- frame_screenshake: "",
- frame_realization: "",
- frame_sfx: "",
- button: url,
- };
+ emotes[i] = {
+ desc: emoteinfo[0].toLowerCase(),
+ preanim: emoteinfo[1].toLowerCase(),
+ emote: emoteinfo[2].toLowerCase(),
+ zoom: Number(emoteinfo[3]) || 0,
+ deskmod: Number(emoteinfo[4]) || 1,
+ sfx: esfx.toLowerCase(),
+ sfxdelay: esfxd,
+ frame_screenshake: "",
+ frame_realization: "",
+ frame_sfx: "",
+ button: url,
+ };
- addEmoteButton(i, url, emotes[i].desc);
+ addEmoteButton(i, url, emotes[i].desc);
- if (i === 1) pickEmotion(1);
- } catch (e) {
- console.error(`missing emote ${i}`);
- }
- }
+ if (i === 1) pickEmotion(1);
+ } catch (e) {
+ console.error(`missing emote ${i}`);
+ }
}
+ }
- if (
- await fileExists(
- `${AO_HOST}characters/${encodeURI(me.name.toLowerCase())}/custom.gif`
- )
- ) {
- document.getElementById("button_4")!.style.display = "";
- } else {
- document.getElementById("button_4")!.style.display = "none";
- }
-} \ No newline at end of file
+ if (
+ await fileExists(
+ `${AO_HOST}characters/${encodeURI(me.name.toLowerCase())}/custom.gif`,
+ )
+ ) {
+ document.getElementById("button_4")!.style.display = "";
+ } else {
+ document.getElementById("button_4")!.style.display = "none";
+ }
+};
diff --git a/webAO/packets/handlers/handleRC.ts b/webAO/packets/handlers/handleRC.ts
index 0b5679f..09d5938 100644
--- a/webAO/packets/handlers/handleRC.ts
+++ b/webAO/packets/handlers/handleRC.ts
@@ -6,5 +6,5 @@ import vanilla_character_arr from "../../constants/characters.js";
* @param {Array} args packet arguments
*/
export const handleRC = (_args: string[]) => {
- client.sender.sendSelf(`SC#${vanilla_character_arr.join("#")}#%`);
-} \ No newline at end of file
+ client.sender.sendSelf(`SC#${vanilla_character_arr.join("#")}#%`);
+};
diff --git a/webAO/packets/handlers/handleRD.ts b/webAO/packets/handlers/handleRD.ts
index dde994c..ee38f38 100644
--- a/webAO/packets/handlers/handleRD.ts
+++ b/webAO/packets/handlers/handleRD.ts
@@ -1,18 +1,17 @@
import { client } from "../../client";
-
/**
* we are asking ourselves what characters there are
* @param {Array} args packet arguments
*/
export const handleRD = (_args: string[]) => {
- client.sender.sendSelf("BN#gs4#%");
- client.sender.sendSelf("DONE#%");
- const ooclog = <HTMLInputElement>document.getElementById("client_ooclog");
- ooclog.value = "";
- ooclog.readOnly = false;
+ client.sender.sendSelf("BN#gs4#%");
+ client.sender.sendSelf("DONE#%");
+ const ooclog = <HTMLInputElement>document.getElementById("client_ooclog");
+ ooclog.value = "";
+ ooclog.readOnly = false;
- document.getElementById("client_oocinput")!.style.display = "none";
- document.getElementById("client_replaycontrols")!.style.display =
- "inline-block";
-} \ No newline at end of file
+ document.getElementById("client_oocinput")!.style.display = "none";
+ document.getElementById("client_replaycontrols")!.style.display =
+ "inline-block";
+};
diff --git a/webAO/packets/handlers/handleRM.ts b/webAO/packets/handlers/handleRM.ts
index e11abc8..69ff91e 100644
--- a/webAO/packets/handlers/handleRM.ts
+++ b/webAO/packets/handlers/handleRM.ts
@@ -1,10 +1,10 @@
-import {client} from '../../client'
+import { client } from "../../client";
import vanilla_music_arr from "../../constants/music.js";
/**
- * we are asking ourselves what characters there are
- * @param {Array} args packet arguments
- */
+ * we are asking ourselves what characters there are
+ * @param {Array} args packet arguments
+ */
export const handleRM = (_args: string[]) => {
- client.sender.sendSelf(`SM#${vanilla_music_arr.join("#")}#%`);
-} \ No newline at end of file
+ client.sender.sendSelf(`SM#${vanilla_music_arr.join("#")}#%`);
+};
diff --git a/webAO/packets/handlers/handleRMC.ts b/webAO/packets/handlers/handleRMC.ts
index ada1ad2..7758844 100644
--- a/webAO/packets/handlers/handleRMC.ts
+++ b/webAO/packets/handlers/handleRMC.ts
@@ -1,4 +1,4 @@
-import { client } from '../../client'
+import { client } from "../../client";
// TODO BUG:
// this.viewport.music is an array. Therefore you must access elements
/**
@@ -6,19 +6,19 @@ import { client } from '../../client'
* @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
+ 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,
+ );
+};
diff --git a/webAO/packets/handlers/handleRT.ts b/webAO/packets/handlers/handleRT.ts
index 62ebb1e..48c551f 100644
--- a/webAO/packets/handlers/handleRT.ts
+++ b/webAO/packets/handlers/handleRT.ts
@@ -1,25 +1,25 @@
import { client } from "../../client";
-import { initTestimonyUpdater } from '../../viewport/utils/initTestimonyUpdater'
+import { initTestimonyUpdater } from "../../viewport/utils/initTestimonyUpdater";
/**
- * Handles a testimony states.
- * @param {Array} args packet arguments
- */
+ * Handles a testimony states.
+ * @param {Array} args packet arguments
+ */
export const handleRT = (args: string[]) => {
- const judgeid = Number(args[2]);
- switch (args[1]) {
- case "testimony1":
- client.testimonyID = 1;
- break;
- case "testimony2":
- // Cross Examination
- client.testimonyID = 2;
- break;
- case "judgeruling":
- client.testimonyID = 3 + judgeid;
- break;
- default:
- console.warn("Invalid testimony");
- }
- initTestimonyUpdater();
-} \ No newline at end of file
+ const judgeid = Number(args[2]);
+ switch (args[1]) {
+ case "testimony1":
+ client.testimonyID = 1;
+ break;
+ case "testimony2":
+ // Cross Examination
+ client.testimonyID = 2;
+ break;
+ case "judgeruling":
+ client.testimonyID = 3 + judgeid;
+ break;
+ default:
+ console.warn("Invalid testimony");
+ }
+ initTestimonyUpdater();
+};
diff --git a/webAO/packets/handlers/handleSC.ts b/webAO/packets/handlers/handleSC.ts
index 232e745..271a164 100644
--- a/webAO/packets/handlers/handleSC.ts
+++ b/webAO/packets/handlers/handleSC.ts
@@ -1,6 +1,6 @@
import queryParser from "../../utils/queryParser";
-import { client } from '../../client'
+import { client } from "../../client";
import { handleCharacterInfo } from "../../client/handleCharacterInfo";
const { mode } = queryParser();
@@ -10,21 +10,21 @@ const { mode } = queryParser();
* @param {Array} args packet arguments
*/
export const handleSC = async (args: string[]) => {
- if (mode === "watch") {
- // Spectators don't need to pick a character
- document.getElementById("client_charselect")!.style.display = "none";
- } else {
- document.getElementById("client_charselect")!.style.display = "block";
- }
+ if (mode === "watch") {
+ // Spectators don't need to pick a character
+ document.getElementById("client_charselect")!.style.display = "none";
+ } else {
+ document.getElementById("client_charselect")!.style.display = "block";
+ }
- document.getElementById("client_loadingtext")!.innerHTML =
- "Loading Characters";
- for (let i = 1; i < args.length; i++) {
- const chargs = args[i].split("&");
- const charid = i - 1;
+ document.getElementById("client_loadingtext")!.innerHTML =
+ "Loading Characters";
+ for (let i = 1; i < args.length; i++) {
+ const chargs = args[i].split("&");
+ const charid = i - 1;
- setTimeout(() => handleCharacterInfo(chargs, charid), charid*6);
- }
- // We're done with the characters, request the music
- client.sender.sendServer("RM#%");
-} \ No newline at end of file
+ setTimeout(() => handleCharacterInfo(chargs, charid), charid * 6);
+ }
+ // We're done with the characters, request the music
+ client.sender.sendServer("RM#%");
+};
diff --git a/webAO/packets/handlers/handleSI.ts b/webAO/packets/handlers/handleSI.ts
index edf57b3..1a5cc4c 100644
--- a/webAO/packets/handlers/handleSI.ts
+++ b/webAO/packets/handlers/handleSI.ts
@@ -1,35 +1,34 @@
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
- */
+ * 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.evidence_list_length = Number(args[2]);
- client.music_list_length = Number(args[3]);
+ client.char_list_length = Number(args[1]);
+ client.evidence_list_length = Number(args[2]);
+ client.music_list_length = Number(args[3]);
- // create the charselect grid, to be filled by the character loader
- document.getElementById("client_chartable")!.innerHTML = "";
+ // 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");
+ 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);
+ 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);
- }
+ document.getElementById("client_chartable")!.appendChild(demothing);
+ }
- // this is determined at the top of this file
- if (!oldLoading) {
- client.sender.sendServer("RC#%");
- } else {
- client.sender.sendServer("askchar2#%");
- }
-} \ No newline at end of file
+ // this is determined at the top of this file
+ if (!oldLoading) {
+ client.sender.sendServer("RC#%");
+ } else {
+ client.sender.sendServer("askchar2#%");
+ }
+};
diff --git a/webAO/packets/handlers/handleSM.ts b/webAO/packets/handlers/handleSM.ts
index 7237490..1c3fd5e 100644
--- a/webAO/packets/handlers/handleSM.ts
+++ b/webAO/packets/handlers/handleSM.ts
@@ -1,40 +1,37 @@
-import { client } from '../../client'
-import { addTrack } from '../../client/addTrack'
-import { isAudio } from '../../client/isAudio'
-import { fix_last_area } from '../../client/fixLastArea'
-import { createArea } from '../../client/createArea'
+import { client } from "../../client";
+import { addTrack } from "../../client/addTrack";
+import { isAudio } from "../../client/isAudio";
+import { fix_last_area } from "../../client/fixLastArea";
+import { createArea } from "../../client/createArea";
/**
* Handles incoming music information, containing all music in one packet.
* @param {Array} args packet arguments
*/
export const handleSM = (args: string[]) => {
- document.getElementById("client_loadingtext")!.innerHTML = "Loading Music ";
- client.resetMusicList();
- client.resetAreaList();
+ document.getElementById("client_loadingtext")!.innerHTML = "Loading Music ";
+ client.resetMusicList();
+ client.resetAreaList();
- client.musics_time = false;
+ client.musics_time = false;
- document.getElementById(
- "client_loadingtext"
- )!.innerHTML = `Loading Music`;
+ document.getElementById("client_loadingtext")!.innerHTML = `Loading Music`;
- for (let i = 1; i < args.length - 1; i++) {
- // Check when found the song for the first time
- const trackname = args[i];
- const trackindex = i - 1;
-
- if (client.musics_time) {
- addTrack(trackname);
- } else if (isAudio(trackname)) {
- client.musics_time = true;
- fix_last_area();
- addTrack(trackname);
- } else {
- createArea(trackindex, trackname);
- }
+ for (let i = 1; i < args.length - 1; i++) {
+ // Check when found the song for the first time
+ const trackname = args[i];
+ const trackindex = i - 1;
+ if (client.musics_time) {
+ addTrack(trackname);
+ } else if (isAudio(trackname)) {
+ client.musics_time = true;
+ fix_last_area();
+ addTrack(trackname);
+ } else {
+ createArea(trackindex, trackname);
}
+ }
- // Music done, carry on
- client.sender.sendServer("RD#%");
-}
+ // Music done, carry on
+ client.sender.sendServer("RD#%");
+};
diff --git a/webAO/packets/handlers/handleSP.ts b/webAO/packets/handlers/handleSP.ts
index e176eeb..9d37ecb 100644
--- a/webAO/packets/handlers/handleSP.ts
+++ b/webAO/packets/handlers/handleSP.ts
@@ -1,8 +1,8 @@
-import { updateActionCommands } from '../../dom/updateActionCommands'
+import { updateActionCommands } from "../../dom/updateActionCommands";
/**
-* position change
-* @param {string} pos new position
-*/
+ * position change
+ * @param {string} pos new position
+ */
export const handleSP = (args: string[]) => {
- updateActionCommands(args[1]);
-} \ No newline at end of file
+ updateActionCommands(args[1]);
+};
diff --git a/webAO/packets/handlers/handleTI.ts b/webAO/packets/handlers/handleTI.ts
index e418088..cde1838 100644
--- a/webAO/packets/handlers/handleTI.ts
+++ b/webAO/packets/handlers/handleTI.ts
@@ -3,19 +3,18 @@
* @param {Array} args packet arguments
*/
export const handleTI = (args: string[]) => {
- const timerid = Number(args[1]);
- const type = Number(args[2]);
- const timer_value = args[3];
- switch (type) {
- case 0:
- //
- case 1:
- document.getElementById(`client_timer${timerid}`)!.innerText =
- timer_value;
- case 2:
- document.getElementById(`client_timer${timerid}`)!.style.display = "";
- case 3:
- document.getElementById(`client_timer${timerid}`)!.style.display =
- "none";
- }
-} \ No newline at end of file
+ const timerid = Number(args[1]);
+ const type = Number(args[2]);
+ const timer_value = args[3];
+ switch (type) {
+ case 0:
+ //
+ case 1:
+ document.getElementById(`client_timer${timerid}`)!.innerText =
+ timer_value;
+ case 2:
+ document.getElementById(`client_timer${timerid}`)!.style.display = "";
+ case 3:
+ document.getElementById(`client_timer${timerid}`)!.style.display = "none";
+ }
+};
diff --git a/webAO/packets/handlers/handleZZ.ts b/webAO/packets/handlers/handleZZ.ts
index 1c1cb1d..8fd8c82 100644
--- a/webAO/packets/handlers/handleZZ.ts
+++ b/webAO/packets/handlers/handleZZ.ts
@@ -2,22 +2,21 @@ import { client } from "../../client";
import { AO_HOST } from "../../client/aoHost";
import { prepChat } from "../../encoding";
-
/**
* Handles a modcall
* @param {Array} args packet arguments
*/
export const handleZZ = (args: string[]) => {
- const oocLog = document.getElementById("client_ooclog")!;
- oocLog.innerHTML += `$Alert: ${prepChat(args[1])}\r\n`;
- if (oocLog.scrollTop > oocLog.scrollHeight - 60) {
- oocLog.scrollTop = oocLog.scrollHeight;
- }
+ const oocLog = document.getElementById("client_ooclog")!;
+ oocLog.innerHTML += `$Alert: ${prepChat(args[1])}\r\n`;
+ if (oocLog.scrollTop > oocLog.scrollHeight - 60) {
+ oocLog.scrollTop = oocLog.scrollHeight;
+ }
- client.viewport.getSfxAudio().pause();
- const oldvolume = client.viewport.getSfxAudio().volume;
- client.viewport.getSfxAudio().volume = 1;
- client.viewport.getSfxAudio().src = `${AO_HOST}sounds/general/sfx-gallery.opus`;
- client.viewport.getSfxAudio().play();
- client.viewport.getSfxAudio().volume = oldvolume;
-} \ No newline at end of file
+ client.viewport.getSfxAudio().pause();
+ const oldvolume = client.viewport.getSfxAudio().volume;
+ client.viewport.getSfxAudio().volume = 1;
+ client.viewport.getSfxAudio().src = `${AO_HOST}sounds/general/sfx-gallery.opus`;
+ client.viewport.getSfxAudio().play();
+ client.viewport.getSfxAudio().volume = oldvolume;
+};
diff --git a/webAO/packets/handlers/handleackMS.ts b/webAO/packets/handlers/handleackMS.ts
index dcca118..2bb7460 100644
--- a/webAO/packets/handlers/handleackMS.ts
+++ b/webAO/packets/handlers/handleackMS.ts
@@ -1,8 +1,8 @@
-import { resetICParams } from '../../client/resetICParams'
+import { resetICParams } from "../../client/resetICParams";
/**
-* server got our message
-*/
+ * server got our message
+ */
export const handleackMS = () => {
- resetICParams();
-} \ No newline at end of file
+ resetICParams();
+};
diff --git a/webAO/packets/handlers/handleaskchaa.ts b/webAO/packets/handlers/handleaskchaa.ts
index 0f9e730..d401da9 100644
--- a/webAO/packets/handlers/handleaskchaa.ts
+++ b/webAO/packets/handlers/handleaskchaa.ts
@@ -2,9 +2,9 @@ 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
- */
+ * What? you want a character list from me??
+ * @param {Array} args packet arguments
+ */
export const handleaskchaa = (_args: string[]) => {
- client.sender.sendSelf(`SI#${vanilla_character_arr.length}#0#0#%`);
-}
+ client.sender.sendSelf(`SI#${vanilla_character_arr.length}#0#0#%`);
+};
diff --git a/webAO/packets/packetHandler.ts b/webAO/packets/packetHandler.ts
index a9b567a..04c9090 100644
--- a/webAO/packets/packetHandler.ts
+++ b/webAO/packets/packetHandler.ts
@@ -1,3 +1,3 @@
-import { packets } from './packets'
+import { packets } from "./packets";
-export const packetHandler = new Map(Object.entries(packets)) \ No newline at end of file
+export const packetHandler = new Map(Object.entries(packets));
diff --git a/webAO/packets/packets.ts b/webAO/packets/packets.ts
index d215f9e..f6e9549 100644
--- a/webAO/packets/packets.ts
+++ b/webAO/packets/packets.ts
@@ -1,92 +1,92 @@
-import { handleMS } from './handlers/handleMS';
-import { handleCT } from './handlers/handleCT'
-import { handleMC } from './handlers/handleMC'
-import { handleRMC } from './handlers/handleRMC'
-import { handleFL } from './handlers/handleFL'
-import { handleLE } from './handlers/handleLE'
-import { handleEM } from './handlers/handleEM'
-import { handleEI } from './handlers/handleEI'
-import { handleSC } from './handlers/handleSC'
-import { handleCI } from './handlers/handleCI'
-import { handleFM } from './handlers/handleFM'
-import { handleFA } from './handlers/handleFA'
-import { handleSM } from './handlers/handleSM'
-import { handleMM } from './handlers/handleMM'
-import { handleBD } from './handlers/handleBD'
-import { handleBB } from './handlers/handleBB'
-import { handleKB } from './handlers/handleKB'
-import { handleKK } from './handlers/handleKK'
-import { handleDONE } from './handlers/handleDONE'
-import { handleBN } from './handlers/handleBN'
-import { handleHP } from './handlers/handleHP'
-import { handleRT } from './handlers/handleRT'
-import { handleTI } from './handlers/handleTI'
-import { handleZZ } from './handlers/handleZZ'
-import { handleHI } from './handlers/handleHI'
-import { handleID } from './handlers/handleID'
-import { handlePN } from './handlers/handlePN'
-import { handleSI } from './handlers/handleSI'
-import { handleARUP } from './handlers/handleARUP'
-import { handleAUTH } from './handlers/handleAUTH'
-import { handleaskchaa } from './handlers/handleaskchaa'
-import { handleCC } from './handlers/handleCC'
-import { handleRC } from './handlers/handleRC'
-import { handleRM } from './handlers/handleRM'
-import { handleRD } from './handlers/handleRD'
-import { handleCharsCheck } from './handlers/handleCharsCheck'
-import { handlePV } from './handlers/handlePV'
-import { handleASS } from './handlers/handleASS'
-import { handleackMS } from './handlers/handleackMS'
-import { handleSP } from './handlers/handleSP'
-import { handleJD } from './handlers/handleJD'
-import { handlePU } from './handlers/handlePU'
-import { handlePR } from './handlers/handlePR'
+import { handleMS } from "./handlers/handleMS";
+import { handleCT } from "./handlers/handleCT";
+import { handleMC } from "./handlers/handleMC";
+import { handleRMC } from "./handlers/handleRMC";
+import { handleFL } from "./handlers/handleFL";
+import { handleLE } from "./handlers/handleLE";
+import { handleEM } from "./handlers/handleEM";
+import { handleEI } from "./handlers/handleEI";
+import { handleSC } from "./handlers/handleSC";
+import { handleCI } from "./handlers/handleCI";
+import { handleFM } from "./handlers/handleFM";
+import { handleFA } from "./handlers/handleFA";
+import { handleSM } from "./handlers/handleSM";
+import { handleMM } from "./handlers/handleMM";
+import { handleBD } from "./handlers/handleBD";
+import { handleBB } from "./handlers/handleBB";
+import { handleKB } from "./handlers/handleKB";
+import { handleKK } from "./handlers/handleKK";
+import { handleDONE } from "./handlers/handleDONE";
+import { handleBN } from "./handlers/handleBN";
+import { handleHP } from "./handlers/handleHP";
+import { handleRT } from "./handlers/handleRT";
+import { handleTI } from "./handlers/handleTI";
+import { handleZZ } from "./handlers/handleZZ";
+import { handleHI } from "./handlers/handleHI";
+import { handleID } from "./handlers/handleID";
+import { handlePN } from "./handlers/handlePN";
+import { handleSI } from "./handlers/handleSI";
+import { handleARUP } from "./handlers/handleARUP";
+import { handleAUTH } from "./handlers/handleAUTH";
+import { handleaskchaa } from "./handlers/handleaskchaa";
+import { handleCC } from "./handlers/handleCC";
+import { handleRC } from "./handlers/handleRC";
+import { handleRM } from "./handlers/handleRM";
+import { handleRD } from "./handlers/handleRD";
+import { handleCharsCheck } from "./handlers/handleCharsCheck";
+import { handlePV } from "./handlers/handlePV";
+import { handleASS } from "./handlers/handleASS";
+import { handleackMS } from "./handlers/handleackMS";
+import { handleSP } from "./handlers/handleSP";
+import { handleJD } from "./handlers/handleJD";
+import { handlePU } from "./handlers/handlePU";
+import { handlePR } from "./handlers/handlePR";
export const packets = {
- "MS": handleMS,
- "CT": handleCT,
- "MC": handleMC,
- "RMC": handleRMC,
- "CI": handleCI,
- "SC": handleSC,
- "EI": handleEI,
- "FL": handleFL,
- "LE": handleLE,
- "EM": handleEM,
- "FM": handleFM,
- "FA": handleFA,
- "SM": handleSM,
- "MM": handleMM,
- "BD": handleBD,
- "BB": handleBB,
- "KB": handleKB,
- "KK": handleKK,
- "DONE": handleDONE,
- "BN": handleBN,
- "HP": handleHP,
- "RT": handleRT,
- "TI": handleTI,
- "ZZ": handleZZ,
- "HI": handleHI,
- "ID": handleID,
- "PN": handlePN,
- "SI": handleSI,
- "ARUP": handleARUP,
- "AUTH": handleAUTH,
- "askchaa": handleaskchaa,
- "CC": handleCC,
- "RC": handleRC,
- "RM": handleRM,
- "RD": handleRD,
- "CharsCheck": handleCharsCheck,
- "PV": handlePV,
- "ASS": handleASS,
- "ackMS": handleackMS,
- "SP": handleSP,
- "JD": handleJD,
- "PU": handlePU,
- "PR": handlePR,
- "decryptor": () => { },
- "CHECK": () => { },
- "CH": () => { },
-} \ No newline at end of file
+ MS: handleMS,
+ CT: handleCT,
+ MC: handleMC,
+ RMC: handleRMC,
+ CI: handleCI,
+ SC: handleSC,
+ EI: handleEI,
+ FL: handleFL,
+ LE: handleLE,
+ EM: handleEM,
+ FM: handleFM,
+ FA: handleFA,
+ SM: handleSM,
+ MM: handleMM,
+ BD: handleBD,
+ BB: handleBB,
+ KB: handleKB,
+ KK: handleKK,
+ DONE: handleDONE,
+ BN: handleBN,
+ HP: handleHP,
+ RT: handleRT,
+ TI: handleTI,
+ ZZ: handleZZ,
+ HI: handleHI,
+ ID: handleID,
+ PN: handlePN,
+ SI: handleSI,
+ ARUP: handleARUP,
+ AUTH: handleAUTH,
+ askchaa: handleaskchaa,
+ CC: handleCC,
+ RC: handleRC,
+ RM: handleRM,
+ RD: handleRD,
+ CharsCheck: handleCharsCheck,
+ PV: handlePV,
+ ASS: handleASS,
+ ackMS: handleackMS,
+ SP: handleSP,
+ JD: handleJD,
+ PU: handlePU,
+ PR: handlePR,
+ decryptor: () => {},
+ CHECK: () => {},
+ CH: () => {},
+};
diff --git a/webAO/services/__tests__/downloadFile.test.ts b/webAO/services/__tests__/downloadFile.test.ts
index b541095..c37c735 100644
--- a/webAO/services/__tests__/downloadFile.test.ts
+++ b/webAO/services/__tests__/downloadFile.test.ts
@@ -1,27 +1,27 @@
-import downloadFile from '../downloadFile'
-jest
- .useFakeTimers()
- .setSystemTime(new Date('2020-01-01').getTime());
+import downloadFile from "../downloadFile";
+jest.useFakeTimers().setSystemTime(new Date("2020-01-01").getTime());
global.URL.createObjectURL = jest.fn();
-(window as any).global.Blob = function (content, options){return ({content, options})}
+(window as any).global.Blob = function (content, options) {
+ return { content, options };
+};
-describe('downloadFile', () => {
- it('Creates an <a> tag', () => {
- const createElementSpy = jest.spyOn(document, 'createElement');
- downloadFile('hi', 'filename')
- expect(createElementSpy).toBeCalled()
- })
- it('Creates the blob with the correct data', () => {
- const data = 'writingtestsishard'
- global.URL.createObjectURL = jest.fn(() => data);
- downloadFile(data, 'filename')
- const expected = {
- content: [data],
- options: {
- type: "text"
- }
- }
- expect(global.URL.createObjectURL).toBeCalledWith(expected)
- })
-}) \ No newline at end of file
+describe("downloadFile", () => {
+ it("Creates an <a> tag", () => {
+ const createElementSpy = jest.spyOn(document, "createElement");
+ downloadFile("hi", "filename");
+ expect(createElementSpy).toBeCalled();
+ });
+ it("Creates the blob with the correct data", () => {
+ const data = "writingtestsishard";
+ global.URL.createObjectURL = jest.fn(() => data);
+ downloadFile(data, "filename");
+ const expected = {
+ content: [data],
+ options: {
+ type: "text",
+ },
+ };
+ expect(global.URL.createObjectURL).toBeCalledWith(expected);
+ });
+});
diff --git a/webAO/services/downloadFile.ts b/webAO/services/downloadFile.ts
index d272249..5b2f292 100644
--- a/webAO/services/downloadFile.ts
+++ b/webAO/services/downloadFile.ts
@@ -1,8 +1,8 @@
const downloadFile = (content: string, filename: string) => {
- const a = document.createElement('a');
- const file = new Blob([content], { type: 'text' });
- a.href = URL.createObjectURL(file);
- a.download = filename;
- a.click();
-}
-export default downloadFile
+ const a = document.createElement("a");
+ const file = new Blob([content], { type: "text" });
+ a.href = URL.createObjectURL(file);
+ a.download = filename;
+ a.click();
+};
+export default downloadFile;
diff --git a/webAO/utils/__tests__/aoml.test.ts b/webAO/utils/__tests__/aoml.test.ts
index 78355ed..b5cd9b1 100644
--- a/webAO/utils/__tests__/aoml.test.ts
+++ b/webAO/utils/__tests__/aoml.test.ts
@@ -1,7 +1,7 @@
-import request from '../../services/request'
-import mlConfig from '../aoml';
+import request from "../../services/request";
+import mlConfig from "../aoml";
-jest.mock('../../services/request')
+jest.mock("../../services/request");
const networkRequest = `
c0 = 247, 247, 247
c0_name = White
@@ -34,80 +34,76 @@ c6_start = |
c6_end = |
c6_remove = 0
c6_talking = 0
-`
+`;
const mockRequest = request as jest.MockedFunction<typeof request>;
-mockRequest.mockReturnValue(Promise.resolve(networkRequest))
-
-describe('mlConfig', () => {
- beforeEach(() => {
- // Clear all instances and calls to constructor and all methods:
- mockRequest.mockClear();
-
- });
-
- it('Should make a network request', () => {
- mlConfig('localhost')
- expect(mockRequest).toHaveBeenCalledTimes(1);
- });
-})
-describe('applyMarkdown', () => {
- const config = mlConfig('localhost')
-
- beforeEach(() => {
- // Clear all instances and calls to constructor and all methods:
- mockRequest.mockClear();
-
- });
-
- it('Should create an array of spans containing letters', async () => {
- const word = `hello`
- const actual = await config.applyMarkdown(`hello`, `blue`)
- let index = 0
- for (const element of actual) {
- expect(element.innerHTML).toBe(word[index])
- index++
- }
- })
- it('Should add colors based on settings', async () => {
- const config = mlConfig('localhost')
- const actual = await config.applyMarkdown(`(heya)`, `blue`)
- expect(actual[0].getAttribute('style')).toBe('color: rgb(107, 198, 247);')
- })
- it('Should keep a letter if remove = 0', async () => {
- const config = mlConfig('localhost')
-
- const actual = await config.applyMarkdown(`(What())Hey!`, `white`)
- const expected = `(`
- expect(actual[5].innerHTML).toBe(expected)
- })
- it('Should remove a letter if remove = 1', async () => {
- const config = mlConfig('localhost')
-
- const actual = await config.applyMarkdown(`~What~()Hey!`, `white`)
- const expected = ``
- expect(actual[0].innerHTML).toBe(expected)
- })
- it('Should remove a letter if remove = 1', async () => {
- const config = mlConfig('localhost')
-
- const actual = await config.applyMarkdown(`~What~()Hey!`, `white`)
- const expected = ``
- expect(actual[0].innerHTML).toBe(expected)
- })
- it('Should keep a closing letter if remove = 0', async () => {
- const config = mlConfig('localhost')
-
- const actual = await config.applyMarkdown(`~NO[]~!`, `white`)
- const expected = ``
- expect(actual[4].innerHTML).toBe(expected)
- })
- it('Should remove a closing letter if remove = 1', async () => {
- const config = mlConfig('localhost')
- const actual = await config.applyMarkdown(`~NO||~!`, `white`)
- const expected = ``
- expect(actual[5].innerHTML).toBe(expected)
- })
-
-})
-
+mockRequest.mockReturnValue(Promise.resolve(networkRequest));
+
+describe("mlConfig", () => {
+ beforeEach(() => {
+ // Clear all instances and calls to constructor and all methods:
+ mockRequest.mockClear();
+ });
+
+ it("Should make a network request", () => {
+ mlConfig("localhost");
+ expect(mockRequest).toHaveBeenCalledTimes(1);
+ });
+});
+describe("applyMarkdown", () => {
+ const config = mlConfig("localhost");
+
+ beforeEach(() => {
+ // Clear all instances and calls to constructor and all methods:
+ mockRequest.mockClear();
+ });
+
+ it("Should create an array of spans containing letters", async () => {
+ const word = `hello`;
+ const actual = await config.applyMarkdown(`hello`, `blue`);
+ let index = 0;
+ for (const element of actual) {
+ expect(element.innerHTML).toBe(word[index]);
+ index++;
+ }
+ });
+ it("Should add colors based on settings", async () => {
+ const config = mlConfig("localhost");
+ const actual = await config.applyMarkdown(`(heya)`, `blue`);
+ expect(actual[0].getAttribute("style")).toBe("color: rgb(107, 198, 247);");
+ });
+ it("Should keep a letter if remove = 0", async () => {
+ const config = mlConfig("localhost");
+
+ const actual = await config.applyMarkdown(`(What())Hey!`, `white`);
+ const expected = `(`;
+ expect(actual[5].innerHTML).toBe(expected);
+ });
+ it("Should remove a letter if remove = 1", async () => {
+ const config = mlConfig("localhost");
+
+ const actual = await config.applyMarkdown(`~What~()Hey!`, `white`);
+ const expected = ``;
+ expect(actual[0].innerHTML).toBe(expected);
+ });
+ it("Should remove a letter if remove = 1", async () => {
+ const config = mlConfig("localhost");
+
+ const actual = await config.applyMarkdown(`~What~()Hey!`, `white`);
+ const expected = ``;
+ expect(actual[0].innerHTML).toBe(expected);
+ });
+ it("Should keep a closing letter if remove = 0", async () => {
+ const config = mlConfig("localhost");
+
+ const actual = await config.applyMarkdown(`~NO[]~!`, `white`);
+ const expected = ``;
+ expect(actual[4].innerHTML).toBe(expected);
+ });
+ it("Should remove a closing letter if remove = 1", async () => {
+ const config = mlConfig("localhost");
+ const actual = await config.applyMarkdown(`~NO||~!`, `white`);
+ const expected = ``;
+ expect(actual[5].innerHTML).toBe(expected);
+ });
+});
diff --git a/webAO/utils/__tests__/paths.test.ts b/webAO/utils/__tests__/paths.test.ts
index 4f41d09..fe7b1bf 100644
--- a/webAO/utils/__tests__/paths.test.ts
+++ b/webAO/utils/__tests__/paths.test.ts
@@ -1,13 +1,11 @@
-import {getFilenameFromPath} from '../paths'
-jest.mock('../fileExists')
+import { getFilenameFromPath } from "../paths";
+jest.mock("../fileExists");
-describe('getFilenameFromPath', () => {
- const EXAMPLE_PATH = "localhost/stoneddiscord/assets.png"
- it('Should get the last value from a path', async () => {
- const actual = getFilenameFromPath(EXAMPLE_PATH);
- const expected = 'assets.png';
- expect(actual).toBe(expected);
- });
-})
-
-
+describe("getFilenameFromPath", () => {
+ const EXAMPLE_PATH = "localhost/stoneddiscord/assets.png";
+ it("Should get the last value from a path", async () => {
+ const actual = getFilenameFromPath(EXAMPLE_PATH);
+ const expected = "assets.png";
+ expect(actual).toBe(expected);
+ });
+});
diff --git a/webAO/utils/__tests__/tryUrls.test.ts b/webAO/utils/__tests__/tryUrls.test.ts
index ebc2f6b..f85392c 100644
--- a/webAO/utils/__tests__/tryUrls.test.ts
+++ b/webAO/utils/__tests__/tryUrls.test.ts
@@ -1,31 +1,28 @@
-import fileExists from '../fileExists'
-import tryUrls from '../tryUrls';
-import transparentPng from '../../constants/transparentPng'
-jest.mock('../fileExists')
+import fileExists from "../fileExists";
+import tryUrls from "../tryUrls";
+import transparentPng from "../../constants/transparentPng";
+jest.mock("../fileExists");
const mockFileExists = fileExists as jest.MockedFunction<typeof fileExists>;
-describe('tryUrls', () => {
- it('Should try multiple file extensions', async () => {
- const url = "localhost/stoneddiscord/assets"
- mockFileExists
- .mockReturnValueOnce(Promise.resolve(false))
- .mockReturnValueOnce(Promise.resolve(false))
- .mockReturnValueOnce(Promise.resolve(false))
- .mockReturnValueOnce(Promise.resolve(true))
- const actual = await tryUrls(url)
- const expected = 'localhost/stoneddiscord/assets.apng'
- expect(actual).toBe(expected);
- });
-
- it('Should return a transparent png if it cant find any assets', async () => {
- const url = "localhost/stoneddiscord/assets"
- mockFileExists
- .mockReturnValue(Promise.resolve(false))
- const actual = await tryUrls(url)
- const expected = transparentPng
- expect(actual).toBe(expected);
- });
-})
-
+describe("tryUrls", () => {
+ it("Should try multiple file extensions", async () => {
+ const url = "localhost/stoneddiscord/assets";
+ mockFileExists
+ .mockReturnValueOnce(Promise.resolve(false))
+ .mockReturnValueOnce(Promise.resolve(false))
+ .mockReturnValueOnce(Promise.resolve(false))
+ .mockReturnValueOnce(Promise.resolve(true));
+ const actual = await tryUrls(url);
+ const expected = "localhost/stoneddiscord/assets.apng";
+ expect(actual).toBe(expected);
+ });
+ it("Should return a transparent png if it cant find any assets", async () => {
+ const url = "localhost/stoneddiscord/assets";
+ mockFileExists.mockReturnValue(Promise.resolve(false));
+ const actual = await tryUrls(url);
+ const expected = transparentPng;
+ expect(actual).toBe(expected);
+ });
+});
diff --git a/webAO/utils/aoml.ts b/webAO/utils/aoml.ts
index a2c1dd5..f4a6da5 100644
--- a/webAO/utils/aoml.ts
+++ b/webAO/utils/aoml.ts
@@ -1,118 +1,117 @@
-import request from "../services/request"
+import request from "../services/request";
interface Aoml {
- [key: string]: string | number,
- name: string;
- start: string;
- end: string;
- remove: number;
- talking: number;
- color: string;
+ [key: string]: string | number;
+ name: string;
+ start: string;
+ end: string;
+ remove: number;
+ talking: number;
+ color: string;
}
const aomlParser = (text: string) => {
- const parsed: {[key: string]: Aoml}= {}
- let currentHeader = ''
- for (const line of text.split(/\r?\n/)) {
- if (line === '') {
- currentHeader = ''
- continue;
- }
- const content = line.split(' = ')
- const contentName = content[0]
- const contentValue = content[1]
- if (currentHeader === '') {
- currentHeader = contentName
- parsed[currentHeader] = {
- color: contentValue
- } as Aoml
- } else {
- const contentKey = contentName.split('_')[1]
- parsed[currentHeader][contentKey] = contentValue
- }
+ const parsed: { [key: string]: Aoml } = {};
+ let currentHeader = "";
+ for (const line of text.split(/\r?\n/)) {
+ if (line === "") {
+ currentHeader = "";
+ continue;
}
- return parsed
-}
+ const content = line.split(" = ");
+ const contentName = content[0];
+ const contentValue = content[1];
+ if (currentHeader === "") {
+ currentHeader = contentName;
+ parsed[currentHeader] = {
+ color: contentValue,
+ } as Aoml;
+ } else {
+ const contentKey = contentName.split("_")[1];
+ parsed[currentHeader][contentKey] = contentValue;
+ }
+ }
+ return parsed;
+};
const mlConfig = (AO_HOST: string) => {
- const defaultUrl = `${AO_HOST}themes/default/chat_config.ini`
- const aomlParsed: Promise<{ [key: string]: Aoml }> = request(defaultUrl).then((data) => aomlParser(data));
-
-
+ const defaultUrl = `${AO_HOST}themes/default/chat_config.ini`;
+ const aomlParsed: Promise<{ [key: string]: Aoml }> = request(defaultUrl).then(
+ (data) => aomlParser(data),
+ );
- const createIdentifiers = async () => {
- const identifiers = new Map<string, Aoml>()
- for (const [ruleName, value] of Object.entries(await aomlParsed)) {
- if (value.start && value.end) {
- identifiers.set(value.start, value)
- identifiers.set(value.end, value)
- }
- }
- return identifiers
+ const createIdentifiers = async () => {
+ const identifiers = new Map<string, Aoml>();
+ for (const [ruleName, value] of Object.entries(await aomlParsed)) {
+ if (value.start && value.end) {
+ identifiers.set(value.start, value);
+ identifiers.set(value.end, value);
+ }
}
- const createStartIdentifiers = async () => {
- const startingIdentifiers = new Set<string>()
- for (const [ruleName, value] of Object.entries(await aomlParsed)) {
- if (value?.start && value?.end) {
- startingIdentifiers.add(value.start)
- }
- }
- return startingIdentifiers
+ return identifiers;
+ };
+ const createStartIdentifiers = async () => {
+ const startingIdentifiers = new Set<string>();
+ for (const [ruleName, value] of Object.entries(await aomlParsed)) {
+ if (value?.start && value?.end) {
+ startingIdentifiers.add(value.start);
+ }
}
- const applyMarkdown = async (text: string, defaultColor: string) => {
- const identifiers = await createIdentifiers()
- const startIdentifiers = await createStartIdentifiers()
- const closingStack = []
- const colorStack = []
- // each value in output will be an html element
- const output: HTMLSpanElement[] = []
- for (const letter of text) {
- const currentSelector = document.createElement('span')
- const currentIdentifier = identifiers.get(letter)
- const currentClosingLetter = closingStack[closingStack.length - 1]
- const keepChar = Number(currentIdentifier?.remove) === 0
- if (currentClosingLetter === letter) {
- const r = colorStack[colorStack.length - 1][0]
- const g = colorStack[colorStack.length - 1][1]
- const b = colorStack[colorStack.length - 1][2]
- const currentColor = `color: rgb(${r},${g},${b});`
- currentSelector.setAttribute('style', currentColor)
- closingStack.pop()
- colorStack.pop()
- if (keepChar) {
- currentSelector.innerHTML = letter
- }
- }
- else if (startIdentifiers.has(letter)) {
- const color = identifiers.get(letter).color.split(',')
- const r = color[0]
- const g = color[1]
- const b = color[2]
- colorStack.push([r, g, b])
- closingStack.push(currentIdentifier.end)
- const currentColor = `color: rgb(${r},${g},${b});`
- currentSelector.setAttribute('style', currentColor)
- if (keepChar) {
- currentSelector.innerHTML = letter
- }
- } else {
- currentSelector.innerHTML = letter
- if (colorStack.length === 0) {
- currentSelector.className = `text_${defaultColor}`
- } else {
- const r = colorStack[colorStack.length - 1][0]
- const g = colorStack[colorStack.length - 1][1]
- const b = colorStack[colorStack.length - 1][2]
- const currentColor = `color: rgb(${r},${g},${b});`
- currentSelector.setAttribute('style', currentColor)
- }
- }
- output.push(currentSelector)
+ return startingIdentifiers;
+ };
+ const applyMarkdown = async (text: string, defaultColor: string) => {
+ const identifiers = await createIdentifiers();
+ const startIdentifiers = await createStartIdentifiers();
+ const closingStack = [];
+ const colorStack = [];
+ // each value in output will be an html element
+ const output: HTMLSpanElement[] = [];
+ for (const letter of text) {
+ const currentSelector = document.createElement("span");
+ const currentIdentifier = identifiers.get(letter);
+ const currentClosingLetter = closingStack[closingStack.length - 1];
+ const keepChar = Number(currentIdentifier?.remove) === 0;
+ if (currentClosingLetter === letter) {
+ const r = colorStack[colorStack.length - 1][0];
+ const g = colorStack[colorStack.length - 1][1];
+ const b = colorStack[colorStack.length - 1][2];
+ const currentColor = `color: rgb(${r},${g},${b});`;
+ currentSelector.setAttribute("style", currentColor);
+ closingStack.pop();
+ colorStack.pop();
+ if (keepChar) {
+ currentSelector.innerHTML = letter;
}
- return output
- }
- return {
- applyMarkdown
+ } else if (startIdentifiers.has(letter)) {
+ const color = identifiers.get(letter).color.split(",");
+ const r = color[0];
+ const g = color[1];
+ const b = color[2];
+ colorStack.push([r, g, b]);
+ closingStack.push(currentIdentifier.end);
+ const currentColor = `color: rgb(${r},${g},${b});`;
+ currentSelector.setAttribute("style", currentColor);
+ if (keepChar) {
+ currentSelector.innerHTML = letter;
+ }
+ } else {
+ currentSelector.innerHTML = letter;
+ if (colorStack.length === 0) {
+ currentSelector.className = `text_${defaultColor}`;
+ } else {
+ const r = colorStack[colorStack.length - 1][0];
+ const g = colorStack[colorStack.length - 1][1];
+ const b = colorStack[colorStack.length - 1][2];
+ const currentColor = `color: rgb(${r},${g},${b});`;
+ currentSelector.setAttribute("style", currentColor);
+ }
+ }
+ output.push(currentSelector);
}
-}
+ return output;
+ };
+ return {
+ applyMarkdown,
+ };
+};
-export default mlConfig \ No newline at end of file
+export default mlConfig;
diff --git a/webAO/utils/fileExists.ts b/webAO/utils/fileExists.ts
index abb2928..1dceb72 100644
--- a/webAO/utils/fileExists.ts
+++ b/webAO/utils/fileExists.ts
@@ -1,19 +1,19 @@
export default async function fileExists(url: string): Promise<boolean> {
- return new Promise((resolve) => {
- const xhr = new XMLHttpRequest();
- xhr.open('HEAD', url);
- xhr.onload = function checkLoad() {
- if (xhr.readyState === 4) {
- if (xhr.status === 200) {
- resolve(true);
- } else {
- resolve(false);
- }
- }
- };
- xhr.onerror = function checkError() {
- resolve(false);
- };
- xhr.send(null);
- });
+ return new Promise((resolve) => {
+ const xhr = new XMLHttpRequest();
+ xhr.open("HEAD", url);
+ xhr.onload = function checkLoad() {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ resolve(true);
+ } else {
+ resolve(false);
+ }
+ }
+ };
+ xhr.onerror = function checkError() {
+ resolve(false);
+ };
+ xhr.send(null);
+ });
}
diff --git a/webAO/utils/filesExist.ts b/webAO/utils/filesExist.ts
index 2f39427..c41cb2f 100644
--- a/webAO/utils/filesExist.ts
+++ b/webAO/utils/filesExist.ts
@@ -6,23 +6,25 @@ import fileExists from "./fileExists";
* @param urls the list of URLs to check
* @returns either the first URL that exists or null if none were found
*/
-export default async function filesExist(urls: string[]): Promise<string | null> {
- const promises = urls.map(async (url) => {
- if (await fileExists(url)) {
- return url;
- }
- return null;
- });
+export default async function filesExist(
+ urls: string[],
+): Promise<string | null> {
+ const promises = urls.map(async (url) => {
+ if (await fileExists(url)) {
+ return url;
+ }
+ return null;
+ });
- // Run all in parallel
- const results = await Promise.all(promises);
+ // Run all in parallel
+ const results = await Promise.all(promises);
- // Find the first URL that exists (not null) or return null if none exist
- for (const result of results) {
- if (result !== null) {
- return result;
- }
+ // Find the first URL that exists (not null) or return null if none exist
+ for (const result of results) {
+ if (result !== null) {
+ return result;
}
+ }
- return null; // None of the URLs exist
+ return null; // None of the URLs exist
}
diff --git a/webAO/utils/findImgSrc.ts b/webAO/utils/findImgSrc.ts
index b4db849..d33215a 100644
--- a/webAO/utils/findImgSrc.ts
+++ b/webAO/utils/findImgSrc.ts
@@ -1,5 +1,5 @@
import filesExist from "./filesExist";
-import transparentPng from '../constants/transparentPng'
+import transparentPng from "../constants/transparentPng";
/**
* This function takes a list of urls and returns the first one that exists.
@@ -9,11 +9,11 @@ import transparentPng from '../constants/transparentPng'
* @returns The image source of the first url that exists, or a transparent png if none exist
*/
export default async function findImgSrc(urls: string[]): Promise<string> {
- return filesExist(urls).then((url) => {
- if (url !== null) {
- return url;
- }
- // If none of the images exist, return a transparent png
- return transparentPng;
- });
+ return filesExist(urls).then((url) => {
+ if (url !== null) {
+ return url;
+ }
+ // If none of the images exist, return a transparent png
+ return transparentPng;
+ });
}
diff --git a/webAO/utils/getCookie.ts b/webAO/utils/getCookie.ts
index 638dcb7..7373688 100644
--- a/webAO/utils/getCookie.ts
+++ b/webAO/utils/getCookie.ts
@@ -5,22 +5,22 @@
* @param {string} cname The name of the cookie to return
*/
const getCookie = (cname: string) => {
- try {
- const name = `${cname}=`;
- const decodedCookie = decodeURIComponent(document.cookie);
- const ca = decodedCookie.split(';');
- for (let i = 0; i < ca.length; i++) {
- let c = ca[i];
- while (c.charAt(0) === ' ') {
- c = c.substring(1);
- }
- if (c.indexOf(name) === 0) {
- return c.substring(name.length, c.length);
- }
- }
- return '';
- } catch (error) {
- return '';
+ try {
+ const name = `${cname}=`;
+ const decodedCookie = decodeURIComponent(document.cookie);
+ const ca = decodedCookie.split(";");
+ for (let i = 0; i < ca.length; i++) {
+ let c = ca[i];
+ while (c.charAt(0) === " ") {
+ c = c.substring(1);
+ }
+ if (c.indexOf(name) === 0) {
+ return c.substring(name.length, c.length);
+ }
}
+ return "";
+ } catch (error) {
+ return "";
+ }
};
export default getCookie;
diff --git a/webAO/utils/paths.ts b/webAO/utils/paths.ts
index f4284b6..8c0d007 100644
--- a/webAO/utils/paths.ts
+++ b/webAO/utils/paths.ts
@@ -1 +1,2 @@
-export const getFilenameFromPath = (path: string) => path.substring(path.lastIndexOf('/') + 1)
+export const getFilenameFromPath = (path: string) =>
+ path.substring(path.lastIndexOf("/") + 1);
diff --git a/webAO/utils/queryParser.ts b/webAO/utils/queryParser.ts
index 1a3cea6..5263f6e 100644
--- a/webAO/utils/queryParser.ts
+++ b/webAO/utils/queryParser.ts
@@ -1,25 +1,25 @@
/* eslint @typescript-eslint/no-explicit-any: "warn" */
interface QueryParams {
- ip: string;
- connect: string;
- mode: string;
- asset: string;
- theme: string;
- serverName: string;
+ ip: string;
+ connect: string;
+ mode: string;
+ asset: string;
+ theme: string;
+ serverName: string;
}
const queryParser = (): QueryParams => {
- const protocol = window.location.protocol;
- const urlParams = new URLSearchParams(window.location.search);
- const queryParams = {
- ip: urlParams.get("ip") || "",
- connect: urlParams.get("connect") || "",
- mode: urlParams.get("mode") || "join",
- asset: urlParams.get("asset") || `${protocol}//attorneyoffline.de/base/`,
- theme: urlParams.get("theme") || "default",
- serverName: urlParams.get("serverName") || "Attorney Online session",
- }
- return queryParams as QueryParams;
+ const protocol = window.location.protocol;
+ const urlParams = new URLSearchParams(window.location.search);
+ const queryParams = {
+ ip: urlParams.get("ip") || "",
+ connect: urlParams.get("connect") || "",
+ mode: urlParams.get("mode") || "join",
+ asset: urlParams.get("asset") || `${protocol}//attorneyoffline.de/base/`,
+ theme: urlParams.get("theme") || "default",
+ serverName: urlParams.get("serverName") || "Attorney Online session",
+ };
+ return queryParams as QueryParams;
};
export default queryParser;
diff --git a/webAO/utils/setCookie.ts b/webAO/utils/setCookie.ts
index a4e554e..421fe81 100644
--- a/webAO/utils/setCookie.ts
+++ b/webAO/utils/setCookie.ts
@@ -7,6 +7,6 @@
* @param {any} value The value of that cookie option
*/
const setCookie = (cname: string, value: any) => {
- document.cookie = `${cname}=${value};SameSite=Strict`;
+ document.cookie = `${cname}=${value};SameSite=Strict`;
};
export default setCookie;
diff --git a/webAO/utils/tryUrls.ts b/webAO/utils/tryUrls.ts
index 14ef885..127bc5b 100644
--- a/webAO/utils/tryUrls.ts
+++ b/webAO/utils/tryUrls.ts
@@ -1,20 +1,15 @@
-import fileExists from './fileExists'
-import transparentPng from '../constants/transparentPng'
-const urlExtensionsToTry = [
- '.png',
- '.gif',
- '.webp',
- '.apng'
-]
+import fileExists from "./fileExists";
+import transparentPng from "../constants/transparentPng";
+const urlExtensionsToTry = [".png", ".gif", ".webp", ".apng"];
const tryUrls = async (url: string) => {
- for (let i = 0; i < urlExtensionsToTry.length; i++) {
- const extension = urlExtensionsToTry[i]
- const fullFileUrl = url + extension
- const exists = await fileExists(fullFileUrl);
- if (exists) {
- return fullFileUrl
- }
+ for (let i = 0; i < urlExtensionsToTry.length; i++) {
+ const extension = urlExtensionsToTry[i];
+ const fullFileUrl = url + extension;
+ const exists = await fileExists(fullFileUrl);
+ if (exists) {
+ return fullFileUrl;
}
- return transparentPng
-}
-export default tryUrls \ No newline at end of file
+ }
+ return transparentPng;
+};
+export default tryUrls;
diff --git a/webAO/viewport/constants/colors.ts b/webAO/viewport/constants/colors.ts
index 7d1a9a8..fd6acdb 100644
--- a/webAO/viewport/constants/colors.ts
+++ b/webAO/viewport/constants/colors.ts
@@ -1,12 +1,12 @@
export const COLORS = [
- "white",
- "green",
- "red",
- "orange",
- "blue",
- "yellow",
- "pink",
- "cyan",
- "grey",
- "rainbow",
+ "white",
+ "green",
+ "red",
+ "orange",
+ "blue",
+ "yellow",
+ "pink",
+ "cyan",
+ "grey",
+ "rainbow",
];
diff --git a/webAO/viewport/constants/defaultChatMsg.ts b/webAO/viewport/constants/defaultChatMsg.ts
index d25426e..fa25b33 100644
--- a/webAO/viewport/constants/defaultChatMsg.ts
+++ b/webAO/viewport/constants/defaultChatMsg.ts
@@ -2,14 +2,14 @@ import { UPDATE_INTERVAL } from "../../client";
import { ChatMsg } from "../interfaces/ChatMsg";
export const defaultChatMsg = {
- content: "",
- objection: 0,
- sound: "",
- startpreanim: true,
- startspeaking: false,
- side: null,
- color: 0,
- snddelay: 0,
- preanimdelay: 0,
- speed: UPDATE_INTERVAL,
+ content: "",
+ objection: 0,
+ sound: "",
+ startpreanim: true,
+ startspeaking: false,
+ side: null,
+ color: 0,
+ snddelay: 0,
+ preanimdelay: 0,
+ speed: UPDATE_INTERVAL,
} as ChatMsg;
diff --git a/webAO/viewport/constants/positions.ts b/webAO/viewport/constants/positions.ts
index 1712ac6..3627db7 100644
--- a/webAO/viewport/constants/positions.ts
+++ b/webAO/viewport/constants/positions.ts
@@ -1,45 +1,45 @@
-import { Positions } from '../interfaces/Positions'
-import { Desk } from '../interfaces/Desk';
+import { Positions } from "../interfaces/Positions";
+import { Desk } from "../interfaces/Desk";
export const positions: Positions = {
- def: {
- bg: "defenseempty",
- desk: { ao2: "defensedesk.png", ao1: "bancodefensa.png" } as Desk,
- speedLines: "defense_speedlines.gif",
- },
- pro: {
- bg: "prosecutorempty",
- desk: { ao2: "prosecutiondesk.png", ao1: "bancoacusacion.png" } as Desk,
- speedLines: "prosecution_speedlines.gif",
- },
- hld: {
- bg: "helperstand",
- desk: {} as Desk,
- speedLines: "defense_speedlines.gif",
- },
- hlp: {
- bg: "prohelperstand",
- desk: {} as Desk,
- speedLines: "prosecution_speedlines.gif",
- },
- wit: {
- bg: "witnessempty",
- desk: { ao2: "stand.png", ao1: "estrado.png" } as Desk,
- speedLines: "prosecution_speedlines.gif",
- },
- jud: {
- bg: "judgestand",
- desk: { ao2: "judgedesk.png", ao1: "judgedesk.gif" } as Desk,
- speedLines: "prosecution_speedlines.gif",
- },
- jur: {
- bg: "jurystand",
- desk: { ao2: "jurydesk.png", ao1: "estrado.png" } as Desk,
- speedLines: "defense_speedlines.gif",
- },
- sea: {
- bg: "seancestand",
- desk: { ao2: "seancedesk.png", ao1: "estrado.png" } as Desk,
- speedLines: "prosecution_speedlines.gif",
- },
-}; \ No newline at end of file
+ def: {
+ bg: "defenseempty",
+ desk: { ao2: "defensedesk.png", ao1: "bancodefensa.png" } as Desk,
+ speedLines: "defense_speedlines.gif",
+ },
+ pro: {
+ bg: "prosecutorempty",
+ desk: { ao2: "prosecutiondesk.png", ao1: "bancoacusacion.png" } as Desk,
+ speedLines: "prosecution_speedlines.gif",
+ },
+ hld: {
+ bg: "helperstand",
+ desk: {} as Desk,
+ speedLines: "defense_speedlines.gif",
+ },
+ hlp: {
+ bg: "prohelperstand",
+ desk: {} as Desk,
+ speedLines: "prosecution_speedlines.gif",
+ },
+ wit: {
+ bg: "witnessempty",
+ desk: { ao2: "stand.png", ao1: "estrado.png" } as Desk,
+ speedLines: "prosecution_speedlines.gif",
+ },
+ jud: {
+ bg: "judgestand",
+ desk: { ao2: "judgedesk.png", ao1: "judgedesk.gif" } as Desk,
+ speedLines: "prosecution_speedlines.gif",
+ },
+ jur: {
+ bg: "jurystand",
+ desk: { ao2: "jurydesk.png", ao1: "estrado.png" } as Desk,
+ speedLines: "defense_speedlines.gif",
+ },
+ sea: {
+ bg: "seancestand",
+ desk: { ao2: "seancedesk.png", ao1: "estrado.png" } as Desk,
+ speedLines: "prosecution_speedlines.gif",
+ },
+};
diff --git a/webAO/viewport/interfaces/ChatMsg.ts b/webAO/viewport/interfaces/ChatMsg.ts
index 352674b..1e7078f 100644
--- a/webAO/viewport/interfaces/ChatMsg.ts
+++ b/webAO/viewport/interfaces/ChatMsg.ts
@@ -1,34 +1,34 @@
export interface ChatMsg {
- content: string;
- objection: number;
- sound: string;
- startpreanim?: boolean;
- startspeaking?: boolean;
- side: string;
- color: number;
- snddelay: number;
- preanimdelay?: number;
- speed: number;
- blips: string;
- self_offset?: number[];
- other_offset?: number[];
- showname?: string;
- nameplate?: string;
- flip?: number;
- other_flip?: number;
- effects?: string[];
- deskmod?: number;
- preanim?: string;
- other_name?: string;
- sprite?: string;
- name?: string;
- chatbox?: string;
- other_emote?: string;
- parsed?: HTMLSpanElement[];
- screenshake?: number;
- flash?: number;
- type?: number;
- evidence?: number;
- looping_sfx?: boolean;
- noninterrupting_preanim?: number;
- } \ No newline at end of file
+ content: string;
+ objection: number;
+ sound: string;
+ startpreanim?: boolean;
+ startspeaking?: boolean;
+ side: string;
+ color: number;
+ snddelay: number;
+ preanimdelay?: number;
+ speed: number;
+ blips: string;
+ self_offset?: number[];
+ other_offset?: number[];
+ showname?: string;
+ nameplate?: string;
+ flip?: number;
+ other_flip?: number;
+ effects?: string[];
+ deskmod?: number;
+ preanim?: string;
+ other_name?: string;
+ sprite?: string;
+ name?: string;
+ chatbox?: string;
+ other_emote?: string;
+ parsed?: HTMLSpanElement[];
+ screenshake?: number;
+ flash?: number;
+ type?: number;
+ evidence?: number;
+ looping_sfx?: boolean;
+ noninterrupting_preanim?: number;
+}
diff --git a/webAO/viewport/interfaces/Desk.ts b/webAO/viewport/interfaces/Desk.ts
index 872426a..2bcba96 100644
--- a/webAO/viewport/interfaces/Desk.ts
+++ b/webAO/viewport/interfaces/Desk.ts
@@ -1,4 +1,4 @@
export interface Desk {
- ao2?: string;
- ao1?: string;
-} \ No newline at end of file
+ ao2?: string;
+ ao1?: string;
+}
diff --git a/webAO/viewport/interfaces/Position.ts b/webAO/viewport/interfaces/Position.ts
index dea7238..11ec8e5 100644
--- a/webAO/viewport/interfaces/Position.ts
+++ b/webAO/viewport/interfaces/Position.ts
@@ -1,7 +1,7 @@
-import { Desk } from './Desk'
+import { Desk } from "./Desk";
export interface Position {
- bg?: string;
- desk?: Desk;
- speedLines: string;
-} \ No newline at end of file
+ bg?: string;
+ desk?: Desk;
+ speedLines: string;
+}
diff --git a/webAO/viewport/interfaces/Positions.ts b/webAO/viewport/interfaces/Positions.ts
index 0644962..745168d 100644
--- a/webAO/viewport/interfaces/Positions.ts
+++ b/webAO/viewport/interfaces/Positions.ts
@@ -1,5 +1,5 @@
-import { Position } from './Position'
+import { Position } from "./Position";
export interface Positions {
- [key: string]: Position;
-} \ No newline at end of file
+ [key: string]: Position;
+}
diff --git a/webAO/viewport/interfaces/Testimony.ts b/webAO/viewport/interfaces/Testimony.ts
index 61a7491..f51a3dd 100644
--- a/webAO/viewport/interfaces/Testimony.ts
+++ b/webAO/viewport/interfaces/Testimony.ts
@@ -1,3 +1,3 @@
export interface Testimony {
- [key: number]: string;
-} \ No newline at end of file
+ [key: number]: string;
+}
diff --git a/webAO/viewport/interfaces/Viewport.ts b/webAO/viewport/interfaces/Viewport.ts
index d6b8632..68d98ff 100644
--- a/webAO/viewport/interfaces/Viewport.ts
+++ b/webAO/viewport/interfaces/Viewport.ts
@@ -2,42 +2,42 @@
import { ChatMsg } from "./ChatMsg";
export interface Viewport {
- getTextNow: Function;
- setTextNow: Function;
- getChatmsg: Function;
- setChatmsg: Function;
- getSfxPlayed: Function;
- setSfxPlayed: Function;
- setTickTimer: Function;
- getTickTimer: Function;
- getAnimating: Function;
- setAnimating: Function;
- getLastEvidence: Function;
- setLastEvidence: Function;
- setLastCharacter: Function;
- getLastCharacter: Function;
- setShoutTimer: Function;
- getShoutTimer: Function;
- setTestimonyTimer: Function;
- getTestimonyTimer: Function;
- setTestimonyUpdater: Function;
- getTestimonyUpdater: Function;
- getTheme: Function;
- setTheme: Function;
- testimonyAudio: HTMLAudioElement;
- chat_tick: Function;
- playSFX: Function;
- set_side: Function;
- updateTestimony: Function;
- disposeTestimony: Function;
- handleTextTick: Function;
- setSfxAudio: Function;
- getSfxAudio: Function;
- getBackgroundFolder: Function;
- blipChannels: HTMLAudioElement[];
- music: any;
- setBackgroundName: Function;
- getBackgroundName: Function;
- shoutaudio: HTMLAudioElement;
- updater: any;
+ getTextNow: Function;
+ setTextNow: Function;
+ getChatmsg: Function;
+ setChatmsg: Function;
+ getSfxPlayed: Function;
+ setSfxPlayed: Function;
+ setTickTimer: Function;
+ getTickTimer: Function;
+ getAnimating: Function;
+ setAnimating: Function;
+ getLastEvidence: Function;
+ setLastEvidence: Function;
+ setLastCharacter: Function;
+ getLastCharacter: Function;
+ setShoutTimer: Function;
+ getShoutTimer: Function;
+ setTestimonyTimer: Function;
+ getTestimonyTimer: Function;
+ setTestimonyUpdater: Function;
+ getTestimonyUpdater: Function;
+ getTheme: Function;
+ setTheme: Function;
+ testimonyAudio: HTMLAudioElement;
+ chat_tick: Function;
+ playSFX: Function;
+ set_side: Function;
+ updateTestimony: Function;
+ disposeTestimony: Function;
+ handleTextTick: Function;
+ setSfxAudio: Function;
+ getSfxAudio: Function;
+ getBackgroundFolder: Function;
+ blipChannels: HTMLAudioElement[];
+ music: any;
+ setBackgroundName: Function;
+ getBackgroundName: Function;
+ shoutaudio: HTMLAudioElement;
+ updater: any;
}
diff --git a/webAO/viewport/utils/createBlipChannels.ts b/webAO/viewport/utils/createBlipChannels.ts
index 6296b3b..9e9c964 100644
--- a/webAO/viewport/utils/createBlipChannels.ts
+++ b/webAO/viewport/utils/createBlipChannels.ts
@@ -1,15 +1,15 @@
import { opusCheck } from "../../dom/opusCheck";
export const createBlipsChannels = () => {
- const blipSelectors = document.getElementsByClassName(
- "blipSound"
- ) as HTMLCollectionOf<HTMLAudioElement>;
+ const blipSelectors = document.getElementsByClassName(
+ "blipSound",
+ ) as HTMLCollectionOf<HTMLAudioElement>;
- const blipChannels = [...blipSelectors];
- // Allocate multiple blip audio channels to make blips less jittery
- blipChannels.forEach((channel: HTMLAudioElement) => (channel.volume = 0.5));
- blipChannels.forEach(
- (channel: HTMLAudioElement) => (channel.onerror = opusCheck(channel))
- );
- return blipChannels;
-}; \ No newline at end of file
+ const blipChannels = [...blipSelectors];
+ // Allocate multiple blip audio channels to make blips less jittery
+ blipChannels.forEach((channel: HTMLAudioElement) => (channel.volume = 0.5));
+ blipChannels.forEach(
+ (channel: HTMLAudioElement) => (channel.onerror = opusCheck(channel)),
+ );
+ return blipChannels;
+};
diff --git a/webAO/viewport/utils/createMusic.ts b/webAO/viewport/utils/createMusic.ts
index e660173..5733911 100644
--- a/webAO/viewport/utils/createMusic.ts
+++ b/webAO/viewport/utils/createMusic.ts
@@ -1,13 +1,13 @@
-import { opusCheck } from '../../dom/opusCheck'
+import { opusCheck } from "../../dom/opusCheck";
export const createMusic = () => {
- const audioChannels = document.getElementsByClassName(
- "audioChannel"
- ) as HTMLCollectionOf<HTMLAudioElement>;
- const music = [...audioChannels];
- music.forEach((channel: HTMLAudioElement) => (channel.volume = 0.5));
- music.forEach(
- (channel: HTMLAudioElement) => (channel.onerror = opusCheck(channel))
- );
- return music;
-}; \ No newline at end of file
+ const audioChannels = document.getElementsByClassName(
+ "audioChannel",
+ ) as HTMLCollectionOf<HTMLAudioElement>;
+ const music = [...audioChannels];
+ music.forEach((channel: HTMLAudioElement) => (channel.volume = 0.5));
+ music.forEach(
+ (channel: HTMLAudioElement) => (channel.onerror = opusCheck(channel)),
+ );
+ return music;
+};
diff --git a/webAO/viewport/utils/createSfxAudio.ts b/webAO/viewport/utils/createSfxAudio.ts
index 7e03563..c17b28d 100644
--- a/webAO/viewport/utils/createSfxAudio.ts
+++ b/webAO/viewport/utils/createSfxAudio.ts
@@ -1,9 +1,9 @@
import { AO_HOST } from "../../client/aoHost";
export const createSfxAudio = () => {
- const sfxAudio = document.getElementById(
- "client_sfxaudio"
- ) as HTMLAudioElement;
- sfxAudio.src = `${AO_HOST}sounds/general/sfx-realization.opus`;
- return sfxAudio;
-}; \ No newline at end of file
+ const sfxAudio = document.getElementById(
+ "client_sfxaudio",
+ ) as HTMLAudioElement;
+ sfxAudio.src = `${AO_HOST}sounds/general/sfx-realization.opus`;
+ return sfxAudio;
+};
diff --git a/webAO/viewport/utils/createShoutAudio.ts b/webAO/viewport/utils/createShoutAudio.ts
index 8211116..756d364 100644
--- a/webAO/viewport/utils/createShoutAudio.ts
+++ b/webAO/viewport/utils/createShoutAudio.ts
@@ -1,9 +1,9 @@
import { AO_HOST } from "../../client/aoHost";
export const createShoutAudio = () => {
- const shoutAudio = document.getElementById(
- "client_shoutaudio"
- ) as HTMLAudioElement;
- shoutAudio.src = `${AO_HOST}misc/default/objection.opus`;
- return shoutAudio;
-}; \ No newline at end of file
+ const shoutAudio = document.getElementById(
+ "client_shoutaudio",
+ ) as HTMLAudioElement;
+ shoutAudio.src = `${AO_HOST}misc/default/objection.opus`;
+ return shoutAudio;
+};
diff --git a/webAO/viewport/utils/createTestimonyAudio.ts b/webAO/viewport/utils/createTestimonyAudio.ts
index 2ff98f6..2d6f4e4 100644
--- a/webAO/viewport/utils/createTestimonyAudio.ts
+++ b/webAO/viewport/utils/createTestimonyAudio.ts
@@ -1,9 +1,9 @@
-import { AO_HOST } from '../../client/aoHost'
+import { AO_HOST } from "../../client/aoHost";
export const createTestimonyAudio = () => {
- const testimonyAudio = document.getElementById(
- "client_testimonyaudio"
- ) as HTMLAudioElement;
- testimonyAudio.src = `${AO_HOST}sounds/general/sfx-guilty.opus`;
- return testimonyAudio;
-}; \ No newline at end of file
+ const testimonyAudio = document.getElementById(
+ "client_testimonyaudio",
+ ) as HTMLAudioElement;
+ testimonyAudio.src = `${AO_HOST}sounds/general/sfx-guilty.opus`;
+ return testimonyAudio;
+};
diff --git a/webAO/viewport/utils/handleICSpeaking.ts b/webAO/viewport/utils/handleICSpeaking.ts
index d5bd29f..bae4986 100644
--- a/webAO/viewport/utils/handleICSpeaking.ts
+++ b/webAO/viewport/utils/handleICSpeaking.ts
@@ -15,11 +15,17 @@ import mlConfig from "../../utils/aoml";
const attorneyMarkdown = mlConfig(AO_HOST);
export let startFirstTickCheck: boolean;
-export const setStartFirstTickCheck = (val: boolean) => { startFirstTickCheck = val }
+export const setStartFirstTickCheck = (val: boolean) => {
+ startFirstTickCheck = val;
+};
export let startSecondTickCheck: boolean;
-export const setStartSecondTickCheck = (val: boolean) => { startSecondTickCheck = val }
+export const setStartSecondTickCheck = (val: boolean) => {
+ startSecondTickCheck = val;
+};
export let startThirdTickCheck: boolean;
-export const setStartThirdTickCheck = (val: boolean) => { startThirdTickCheck = val }
+export const setStartThirdTickCheck = (val: boolean) => {
+ startThirdTickCheck = val;
+};
/**
* Sets a new emote.
* This sets up everything before the tick() loops starts
@@ -28,303 +34,324 @@ export const setStartThirdTickCheck = (val: boolean) => { startThirdTickCheck =
* @param {object} chatmsg the new chat message
*/
export const handle_ic_speaking = async (playerChatMsg: ChatMsg) => {
- client.viewport.setChatmsg(playerChatMsg);
- client.viewport.setTextNow("");
- client.viewport.setSfxPlayed(0);
- client.viewport.setTickTimer(0);
- client.viewport.setAnimating(true);
-
- startFirstTickCheck = true;
- startSecondTickCheck = false;
- startThirdTickCheck = false;
- let charLayers = document.getElementById("client_char")!;
- let pairLayers = document.getElementById("client_pair_char")!;
- // stop updater
- clearTimeout(client.viewport.updater);
-
- // stop last sfx from looping any longer
- client.viewport.getSfxAudio().loop = false;
-
- const fg = <HTMLImageElement>document.getElementById("client_fg");
- const gamewindow = document.getElementById("client_gamewindow")!;
- const waitingBox = document.getElementById("client_chatwaiting")!;
-
- // Reset CSS animation
- gamewindow.style.animation = "";
- waitingBox.style.opacity = "0";
-
- const eviBox = document.getElementById("client_evi")!;
-
- if (client.viewport.getLastEvidence() !== client.viewport.getChatmsg().evidence) {
- eviBox.style.opacity = "0";
- eviBox.style.height = "0%";
- }
- client.viewport.setLastEvidence(client.viewport.getChatmsg().evidence);
-
- const validSides: string[] = ["def", "pro", "wit"]; // these are for the full view pan, the other positions use 'client_char'
- if (validSides.includes(client.viewport.getChatmsg().side)) {
- charLayers = document.getElementById(`client_${client.viewport.getChatmsg().side}_char`);
- pairLayers = document.getElementById(`client_${client.viewport.getChatmsg().side}_pair_char`);
- }
-
- const chatContainerBox = document.getElementById("client_chatcontainer")!;
- const nameBoxInner = document.getElementById("client_inner_name")!;
- const chatBoxInner = document.getElementById("client_inner_chat")!;
-
- const displayname =
- (<HTMLInputElement>document.getElementById("showname")).checked &&
- client.viewport.getChatmsg().showname !== ""
- ? client.viewport.getChatmsg().showname!
- : client.viewport.getChatmsg().nameplate!;
-
- // Clear out the last message
- if (!client.viewport.getChatmsg().additive) {
- chatBoxInner.innerText = client.viewport.getTextNow();
- }
- nameBoxInner.innerText = displayname;
-
- if (client.viewport.getLastCharacter() !== client.viewport.getChatmsg().name) {
- charLayers.style.opacity = "0";
- pairLayers.style.opacity = "0";
- }
-
- client.viewport.setLastCharacter(client.viewport.getChatmsg().name);
-
- appendICLog(client.viewport.getChatmsg().content, client.viewport.getChatmsg().showname, client.viewport.getChatmsg().nameplate);
-
- checkCallword(client.viewport.getChatmsg().content, client.viewport.getSfxAudio());
-
- setEmote(
- AO_HOST,
- client,
- client.viewport.getChatmsg().name!.toLowerCase(),
- client.viewport.getChatmsg().sprite!,
- "(a)",
- false,
- client.viewport.getChatmsg().side
+ client.viewport.setChatmsg(playerChatMsg);
+ client.viewport.setTextNow("");
+ client.viewport.setSfxPlayed(0);
+ client.viewport.setTickTimer(0);
+ client.viewport.setAnimating(true);
+
+ startFirstTickCheck = true;
+ startSecondTickCheck = false;
+ startThirdTickCheck = false;
+ let charLayers = document.getElementById("client_char")!;
+ let pairLayers = document.getElementById("client_pair_char")!;
+ // stop updater
+ clearTimeout(client.viewport.updater);
+
+ // stop last sfx from looping any longer
+ client.viewport.getSfxAudio().loop = false;
+
+ const fg = <HTMLImageElement>document.getElementById("client_fg");
+ const gamewindow = document.getElementById("client_gamewindow")!;
+ const waitingBox = document.getElementById("client_chatwaiting")!;
+
+ // Reset CSS animation
+ gamewindow.style.animation = "";
+ waitingBox.style.opacity = "0";
+
+ const eviBox = document.getElementById("client_evi")!;
+
+ if (
+ client.viewport.getLastEvidence() !== client.viewport.getChatmsg().evidence
+ ) {
+ eviBox.style.opacity = "0";
+ eviBox.style.height = "0%";
+ }
+ client.viewport.setLastEvidence(client.viewport.getChatmsg().evidence);
+
+ const validSides: string[] = ["def", "pro", "wit"]; // these are for the full view pan, the other positions use 'client_char'
+ if (validSides.includes(client.viewport.getChatmsg().side)) {
+ charLayers = document.getElementById(
+ `client_${client.viewport.getChatmsg().side}_char`,
);
-
- if (client.viewport.getChatmsg().other_name) {
- setEmote(
- AO_HOST,
- client,
- client.viewport.getChatmsg().other_name.toLowerCase(),
- client.viewport.getChatmsg().other_emote!,
- "(a)",
- false,
- client.viewport.getChatmsg().side
- );
- }
-
- // gets which shout shall played
- const shoutSprite = <HTMLImageElement>(
- document.getElementById("client_shout")
+ pairLayers = document.getElementById(
+ `client_${client.viewport.getChatmsg().side}_pair_char`,
);
+ }
+
+ const chatContainerBox = document.getElementById("client_chatcontainer")!;
+ const nameBoxInner = document.getElementById("client_inner_name")!;
+ const chatBoxInner = document.getElementById("client_inner_chat")!;
+
+ const displayname =
+ (<HTMLInputElement>document.getElementById("showname")).checked &&
+ client.viewport.getChatmsg().showname !== ""
+ ? client.viewport.getChatmsg().showname!
+ : client.viewport.getChatmsg().nameplate!;
+
+ // Clear out the last message
+ if (!client.viewport.getChatmsg().additive) {
+ chatBoxInner.innerText = client.viewport.getTextNow();
+ }
+ nameBoxInner.innerText = displayname;
+
+ if (
+ client.viewport.getLastCharacter() !== client.viewport.getChatmsg().name
+ ) {
+ charLayers.style.opacity = "0";
+ pairLayers.style.opacity = "0";
+ }
+
+ client.viewport.setLastCharacter(client.viewport.getChatmsg().name);
+
+ appendICLog(
+ client.viewport.getChatmsg().content,
+ client.viewport.getChatmsg().showname,
+ client.viewport.getChatmsg().nameplate,
+ );
+
+ checkCallword(
+ client.viewport.getChatmsg().content,
+ client.viewport.getSfxAudio(),
+ );
+
+ setEmote(
+ AO_HOST,
+ client,
+ client.viewport.getChatmsg().name!.toLowerCase(),
+ client.viewport.getChatmsg().sprite!,
+ "(a)",
+ false,
+ client.viewport.getChatmsg().side,
+ );
+
+ if (client.viewport.getChatmsg().other_name) {
+ setEmote(
+ AO_HOST,
+ client,
+ client.viewport.getChatmsg().other_name.toLowerCase(),
+ client.viewport.getChatmsg().other_emote!,
+ "(a)",
+ false,
+ client.viewport.getChatmsg().side,
+ );
+ }
- const shout = SHOUTS[client.viewport.getChatmsg().objection];
- if (shout) {
- // Hide message box
- chatContainerBox.style.opacity = "0";
- if (client.viewport.getChatmsg().objection === 4) {
- shoutSprite.src = `${AO_HOST}characters/${encodeURI(
- client.viewport.getChatmsg().name!.toLowerCase()
- )}/custom.gif`;
- } else {
- shoutSprite.src = client.resources[shout].src;
- shoutSprite.style.animation = "bubble 700ms steps(10, jump-both)";
- }
- shoutSprite.style.opacity = "1";
-
- client.viewport.shoutaudio.src = `${AO_HOST}characters/${encodeURI(
- client.viewport.getChatmsg().name.toLowerCase()
- )}/${shout}.opus`;
- client.viewport.shoutaudio.play();
- client.viewport.setShoutTimer(client.resources[shout].duration);
- } else {
- client.viewport.setShoutTimer(0);
- }
-
- client.viewport.getChatmsg().startpreanim = true;
- let gifLength = 0;
-
- if (client.viewport.getChatmsg().type === 1 && client.viewport.getChatmsg().preanim !== "-") {
- //we have a preanim
- chatContainerBox.style.opacity = "0";
+ // gets which shout shall played
+ const shoutSprite = <HTMLImageElement>document.getElementById("client_shout");
- gifLength = await getAnimLength(
- `${AO_HOST}characters/${encodeURI(
- client.viewport.getChatmsg().name!.toLowerCase()
- )}/${encodeURI(client.viewport.getChatmsg().preanim)}`
- );
- client.viewport.getChatmsg().startspeaking = false;
+ const shout = SHOUTS[client.viewport.getChatmsg().objection];
+ if (shout) {
+ // Hide message box
+ chatContainerBox.style.opacity = "0";
+ if (client.viewport.getChatmsg().objection === 4) {
+ shoutSprite.src = `${AO_HOST}characters/${encodeURI(
+ client.viewport.getChatmsg().name!.toLowerCase(),
+ )}/custom.gif`;
} else {
- client.viewport.getChatmsg().startspeaking = true;
- if (client.viewport.getChatmsg().content.trim() !== "") chatContainerBox.style.opacity = "1";
+ shoutSprite.src = client.resources[shout].src;
+ shoutSprite.style.animation = "bubble 700ms steps(10, jump-both)";
}
- client.viewport.getChatmsg().preanimdelay = gifLength;
- const setAside = {
- position: client.viewport.getChatmsg().side,
- showSpeedLines: false,
- showDesk: false,
- };
- let skipoffset: boolean = false;
- if (client.viewport.getChatmsg().type === 5) {
- setAside.showSpeedLines = true;
+ shoutSprite.style.opacity = "1";
+
+ client.viewport.shoutaudio.src = `${AO_HOST}characters/${encodeURI(
+ client.viewport.getChatmsg().name.toLowerCase(),
+ )}/${shout}.opus`;
+ client.viewport.shoutaudio.play();
+ client.viewport.setShoutTimer(client.resources[shout].duration);
+ } else {
+ client.viewport.setShoutTimer(0);
+ }
+
+ client.viewport.getChatmsg().startpreanim = true;
+ let gifLength = 0;
+
+ if (
+ client.viewport.getChatmsg().type === 1 &&
+ client.viewport.getChatmsg().preanim !== "-"
+ ) {
+ //we have a preanim
+ chatContainerBox.style.opacity = "0";
+
+ gifLength = await getAnimLength(
+ `${AO_HOST}characters/${encodeURI(
+ client.viewport.getChatmsg().name!.toLowerCase(),
+ )}/${encodeURI(client.viewport.getChatmsg().preanim)}`,
+ );
+ client.viewport.getChatmsg().startspeaking = false;
+ } else {
+ client.viewport.getChatmsg().startspeaking = true;
+ if (client.viewport.getChatmsg().content.trim() !== "")
+ chatContainerBox.style.opacity = "1";
+ }
+ client.viewport.getChatmsg().preanimdelay = gifLength;
+ const setAside = {
+ position: client.viewport.getChatmsg().side,
+ showSpeedLines: false,
+ showDesk: false,
+ };
+ let skipoffset: boolean = false;
+ if (client.viewport.getChatmsg().type === 5) {
+ setAside.showSpeedLines = true;
+ setAside.showDesk = false;
+ client.viewport.set_side(setAside);
+ } else {
+ switch (Number(client.viewport.getChatmsg().deskmod)) {
+ case 0: //desk is hidden
+ setAside.showSpeedLines = false;
setAside.showDesk = false;
client.viewport.set_side(setAside);
- } else {
- switch (Number(client.viewport.getChatmsg().deskmod)) {
- case 0: //desk is hidden
- setAside.showSpeedLines = false;
- setAside.showDesk = false;
- client.viewport.set_side(setAside);
- break;
- case 1: //desk is shown
- setAside.showSpeedLines = false;
- setAside.showDesk = true;
- client.viewport.set_side(setAside);
- break;
- case 2: //desk is hidden during preanim, but shown during idle/talk
- setAside.showSpeedLines = false;
- setAside.showDesk = false;
- client.viewport.set_side(setAside);
- break;
- case 3: //opposite of 2
- setAside.showSpeedLines = false;
- setAside.showDesk = false;
- client.viewport.set_side(setAside);
- break;
- case 4: //desk is hidden, character offset is ignored, pair character is hidden during preanim, normal behavior during idle/talk
- setAside.showSpeedLines = false;
- setAside.showDesk = false;
- client.viewport.set_side(setAside);
- skipoffset = true;
- break;
- case 5: //opposite of 4
- setAside.showSpeedLines = false;
- setAside.showDesk = true;
- client.viewport.set_side(setAside);
- break;
- default:
- setAside.showSpeedLines = false;
- setAside.showDesk = true;
- client.viewport.set_side(setAside);
- break;
- }
- }
-
- setChatbox(client.viewport.getChatmsg().chatbox);
- resizeChatbox();
- if (client.viewport.getChatmsg().chatbox === "") {
- // No chatbox means hide it
- chatContainerBox.style.opacity = "0";
- }
-
- if (!skipoffset) {
- // Flip the character
- charLayers.style.transform =
- client.viewport.getChatmsg().flip === 1 ? "scaleX(-1)" : "scaleX(1)";
- pairLayers.style.transform =
- client.viewport.getChatmsg().other_flip === 1 ? "scaleX(-1)" : "scaleX(1)";
-
- // Shift by the horizontal offset
- switch (client.viewport.getChatmsg().side) {
- case "wit":
- pairLayers.style.left = `${200 + Number(client.viewport.getChatmsg().other_offset[0])}%`;
- charLayers.style.left = `${200 + Number(client.viewport.getChatmsg().self_offset[0])}%`;
- break;
- case "pro":
- pairLayers.style.left = `${400 + Number(client.viewport.getChatmsg().other_offset[0])}%`;
- charLayers.style.left = `${400 + Number(client.viewport.getChatmsg().self_offset[0])}%`;
- break;
- default:
- pairLayers.style.left = `${Number(client.viewport.getChatmsg().other_offset[0])}%`;
- charLayers.style.left = `${Number(client.viewport.getChatmsg().self_offset[0])}%`;
- break;
- }
-
- // New vertical offsets
- pairLayers.style.top = `${Number(client.viewport.getChatmsg().other_offset[1])}%`;
- charLayers.style.top = `${Number(client.viewport.getChatmsg().self_offset[1])}%`;
+ break;
+ case 1: //desk is shown
+ setAside.showSpeedLines = false;
+ setAside.showDesk = true;
+ client.viewport.set_side(setAside);
+ break;
+ case 2: //desk is hidden during preanim, but shown during idle/talk
+ setAside.showSpeedLines = false;
+ setAside.showDesk = false;
+ client.viewport.set_side(setAside);
+ break;
+ case 3: //opposite of 2
+ setAside.showSpeedLines = false;
+ setAside.showDesk = false;
+ client.viewport.set_side(setAside);
+ break;
+ case 4: //desk is hidden, character offset is ignored, pair character is hidden during preanim, normal behavior during idle/talk
+ setAside.showSpeedLines = false;
+ setAside.showDesk = false;
+ client.viewport.set_side(setAside);
+ skipoffset = true;
+ break;
+ case 5: //opposite of 4
+ setAside.showSpeedLines = false;
+ setAside.showDesk = true;
+ client.viewport.set_side(setAside);
+ break;
+ default:
+ setAside.showSpeedLines = false;
+ setAside.showDesk = true;
+ client.viewport.set_side(setAside);
+ break;
}
-
- client.viewport.blipChannels.forEach(
- (channel: HTMLAudioElement) =>
- (channel.src = `${AO_HOST}sounds/blips/${encodeURI(
- client.viewport.getChatmsg().blips.toLowerCase()
- )}.opus`)
- );
-
- // process markup
- if (client.viewport.getChatmsg().content.startsWith("~~")) {
- chatBoxInner.style.textAlign = "center";
- client.viewport.getChatmsg().content = client.viewport.getChatmsg().content.substring(2, client.viewport.getChatmsg().content.length);
- } else {
- chatBoxInner.style.textAlign = "inherit";
+ }
+
+ setChatbox(client.viewport.getChatmsg().chatbox);
+ resizeChatbox();
+ if (client.viewport.getChatmsg().chatbox === "") {
+ // No chatbox means hide it
+ chatContainerBox.style.opacity = "0";
+ }
+
+ if (!skipoffset) {
+ // Flip the character
+ charLayers.style.transform =
+ client.viewport.getChatmsg().flip === 1 ? "scaleX(-1)" : "scaleX(1)";
+ pairLayers.style.transform =
+ client.viewport.getChatmsg().other_flip === 1
+ ? "scaleX(-1)"
+ : "scaleX(1)";
+
+ // Shift by the horizontal offset
+ switch (client.viewport.getChatmsg().side) {
+ case "wit":
+ pairLayers.style.left = `${200 + Number(client.viewport.getChatmsg().other_offset[0])}%`;
+ charLayers.style.left = `${200 + Number(client.viewport.getChatmsg().self_offset[0])}%`;
+ break;
+ case "pro":
+ pairLayers.style.left = `${400 + Number(client.viewport.getChatmsg().other_offset[0])}%`;
+ charLayers.style.left = `${400 + Number(client.viewport.getChatmsg().self_offset[0])}%`;
+ break;
+ default:
+ pairLayers.style.left = `${Number(client.viewport.getChatmsg().other_offset[0])}%`;
+ charLayers.style.left = `${Number(client.viewport.getChatmsg().self_offset[0])}%`;
+ break;
}
- // apply effects
- fg.style.animation = "";
- const effectName = client.viewport.getChatmsg().effects[0].toLowerCase();
- const badEffects = ["", "-", "none"];
- if (effectName.startsWith("rain")) {
- (<HTMLLinkElement>document.getElementById("effect_css")).href = "styles/effects/rain.css";
- let intensity = 200;
- if (effectName.endsWith("weak")) {
- intensity = 100;
- } else if (effectName.endsWith("strong")) {
- intensity = 400;
- }
- if (intensity < fg.childElementCount)
- fg.innerHTML = '';
- else
- intensity = intensity - fg.childElementCount;
-
- for (let i = 0; i < intensity; i++) {
- const drop = document.createElement("p");
- drop.style.left = (Math.random() * 100) + "%";
- drop.style.animationDelay = String(Math.random()) + "s";
- fg.appendChild(drop)
- }
- } else if (
- client.viewport.getChatmsg().effects[0] &&
- !badEffects.includes(effectName)
- ) {
- (<HTMLLinkElement>document.getElementById("effect_css")).href = "";
- fg.innerHTML = '';
- const baseEffectUrl = `${AO_HOST}themes/default/effects/`;
- fg.src = `${baseEffectUrl}${encodeURI(effectName)}.webp`;
- } else {
- fg.innerHTML = '';
- fg.src = transparentPng;
+ // New vertical offsets
+ pairLayers.style.top = `${Number(client.viewport.getChatmsg().other_offset[1])}%`;
+ charLayers.style.top = `${Number(client.viewport.getChatmsg().self_offset[1])}%`;
+ }
+
+ client.viewport.blipChannels.forEach(
+ (channel: HTMLAudioElement) =>
+ (channel.src = `${AO_HOST}sounds/blips/${encodeURI(
+ client.viewport.getChatmsg().blips.toLowerCase(),
+ )}.opus`),
+ );
+
+ // process markup
+ if (client.viewport.getChatmsg().content.startsWith("~~")) {
+ chatBoxInner.style.textAlign = "center";
+ client.viewport.getChatmsg().content = client.viewport
+ .getChatmsg()
+ .content.substring(2, client.viewport.getChatmsg().content.length);
+ } else {
+ chatBoxInner.style.textAlign = "inherit";
+ }
+
+ // apply effects
+ fg.style.animation = "";
+ const effectName = client.viewport.getChatmsg().effects[0].toLowerCase();
+ const badEffects = ["", "-", "none"];
+ if (effectName.startsWith("rain")) {
+ (<HTMLLinkElement>document.getElementById("effect_css")).href =
+ "styles/effects/rain.css";
+ let intensity = 200;
+ if (effectName.endsWith("weak")) {
+ intensity = 100;
+ } else if (effectName.endsWith("strong")) {
+ intensity = 400;
}
-
-
- charLayers.style.opacity = "1";
-
- const soundChecks = ["0", "1", "", undefined];
- if (soundChecks.some((check) => client.viewport.getChatmsg().sound === check)) {
- client.viewport.getChatmsg().sound = client.viewport.getChatmsg().effects[2];
+ if (intensity < fg.childElementCount) fg.innerHTML = "";
+ else intensity = intensity - fg.childElementCount;
+
+ for (let i = 0; i < intensity; i++) {
+ const drop = document.createElement("p");
+ drop.style.left = Math.random() * 100 + "%";
+ drop.style.animationDelay = String(Math.random()) + "s";
+ fg.appendChild(drop);
}
-
- try {
- client.viewport.getChatmsg().parsed = await attorneyMarkdown.applyMarkdown(
- client.viewport.getChatmsg().content,
-
- COLORS[client.viewport.getChatmsg().color]
-
- );
- } catch (error) {
- console.warn("markdown failed");
- const output: HTMLSpanElement[] = []
- for (const letter of client.viewport.getChatmsg().content) {
- const currentSelector = document.createElement('span');
- currentSelector.innerHTML = letter;
- currentSelector.className = `text_${COLORS[client.viewport.getChatmsg().color]}`;
- output.push(currentSelector);
- }
- client.viewport.getChatmsg().parsed = output;
+ } else if (
+ client.viewport.getChatmsg().effects[0] &&
+ !badEffects.includes(effectName)
+ ) {
+ (<HTMLLinkElement>document.getElementById("effect_css")).href = "";
+ fg.innerHTML = "";
+ const baseEffectUrl = `${AO_HOST}themes/default/effects/`;
+ fg.src = `${baseEffectUrl}${encodeURI(effectName)}.webp`;
+ } else {
+ fg.innerHTML = "";
+ fg.src = transparentPng;
+ }
+
+ charLayers.style.opacity = "1";
+
+ const soundChecks = ["0", "1", "", undefined];
+ if (
+ soundChecks.some((check) => client.viewport.getChatmsg().sound === check)
+ ) {
+ client.viewport.getChatmsg().sound =
+ client.viewport.getChatmsg().effects[2];
+ }
+
+ try {
+ client.viewport.getChatmsg().parsed = await attorneyMarkdown.applyMarkdown(
+ client.viewport.getChatmsg().content,
+
+ COLORS[client.viewport.getChatmsg().color],
+ );
+ } catch (error) {
+ console.warn("markdown failed");
+ const output: HTMLSpanElement[] = [];
+ for (const letter of client.viewport.getChatmsg().content) {
+ const currentSelector = document.createElement("span");
+ currentSelector.innerHTML = letter;
+ currentSelector.className = `text_${COLORS[client.viewport.getChatmsg().color]}`;
+ output.push(currentSelector);
}
+ client.viewport.getChatmsg().parsed = output;
+ }
- client.viewport.chat_tick();
+ client.viewport.chat_tick();
};
diff --git a/webAO/viewport/utils/initTestimonyUpdater.ts b/webAO/viewport/utils/initTestimonyUpdater.ts
index e6f6e9d..c1e4d93 100644
--- a/webAO/viewport/utils/initTestimonyUpdater.ts
+++ b/webAO/viewport/utils/initTestimonyUpdater.ts
@@ -1,31 +1,33 @@
-import { Testimony } from '../interfaces/Testimony'
-import { client, UPDATE_INTERVAL } from '../../client'
+import { Testimony } from "../interfaces/Testimony";
+import { client, UPDATE_INTERVAL } from "../../client";
/**
* Intialize testimony updater
*/
export const initTestimonyUpdater = () => {
- const testimonyFilenames: Testimony = {
- 1: "witnesstestimony",
- 2: "crossexamination",
- 3: "notguilty",
- 4: "guilty",
- };
+ const testimonyFilenames: Testimony = {
+ 1: "witnesstestimony",
+ 2: "crossexamination",
+ 3: "notguilty",
+ 4: "guilty",
+ };
- const testimony = testimonyFilenames[client.testimonyID];
- if (!testimony) {
- console.warn(`Invalid testimony ID ${client.testimonyID}`);
- return;
- }
+ const testimony = testimonyFilenames[client.testimonyID];
+ if (!testimony) {
+ console.warn(`Invalid testimony ID ${client.testimonyID}`);
+ return;
+ }
- client.viewport.testimonyAudio.src = client.resources[testimony].sfx;
- client.viewport.testimonyAudio.play();
+ client.viewport.testimonyAudio.src = client.resources[testimony].sfx;
+ client.viewport.testimonyAudio.play();
- const testimonyOverlay = <HTMLImageElement>(
- document.getElementById("client_testimony")
- );
- testimonyOverlay.src = client.resources[testimony].src;
- testimonyOverlay.style.opacity = "1";
+ const testimonyOverlay = <HTMLImageElement>(
+ document.getElementById("client_testimony")
+ );
+ testimonyOverlay.src = client.resources[testimony].src;
+ testimonyOverlay.style.opacity = "1";
- client.viewport.setTestimonyTimer(0);
- client.viewport.setTestimonyUpdater(setTimeout(() => client.viewport.updateTestimony(), UPDATE_INTERVAL));
-}; \ No newline at end of file
+ client.viewport.setTestimonyTimer(0);
+ client.viewport.setTestimonyUpdater(
+ setTimeout(() => client.viewport.updateTestimony(), UPDATE_INTERVAL),
+ );
+};
diff --git a/webAO/viewport/utils/setSide.ts b/webAO/viewport/utils/setSide.ts
index 77d1744..fd229e1 100644
--- a/webAO/viewport/utils/setSide.ts
+++ b/webAO/viewport/utils/setSide.ts
@@ -1,8 +1,8 @@
-import { positions } from '../constants/positions'
-import { AO_HOST } from '../../client/aoHost'
-import { client } from '../../client'
-import tryUrls from '../../utils/tryUrls';
-import findImgSrc from '../../utils/findImgSrc';
+import { positions } from "../constants/positions";
+import { AO_HOST } from "../../client/aoHost";
+import { client } from "../../client";
+import tryUrls from "../../utils/tryUrls";
+import findImgSrc from "../../utils/findImgSrc";
/**
* Changes the viewport background based on a given position.
@@ -11,81 +11,78 @@ import findImgSrc from '../../utils/findImgSrc';
* @param {string} position the position to change into
*/
export const set_side = async ({
- position,
- showSpeedLines,
- showDesk,
+ position,
+ showSpeedLines,
+ showDesk,
}: {
- position: string;
- showSpeedLines: boolean;
- showDesk: boolean;
+ position: string;
+ showSpeedLines: boolean;
+ showDesk: boolean;
}) => {
- const view = document.getElementById("client_fullview")!;
- let bench: HTMLImageElement;
- if (['def', 'pro', 'wit'].includes(position)) {
- bench = <HTMLImageElement>(
- document.getElementById(`client_${position}_bench`)
- );
- } else {
- bench = <HTMLImageElement>document.getElementById("client_bench_classic");
- }
+ const view = document.getElementById("client_fullview")!;
+ let bench: HTMLImageElement;
+ if (["def", "pro", "wit"].includes(position)) {
+ bench = <HTMLImageElement>(
+ document.getElementById(`client_${position}_bench`)
+ );
+ } else {
+ bench = <HTMLImageElement>document.getElementById("client_bench_classic");
+ }
- let court: HTMLImageElement;
- if ("def,pro,wit".includes(position)) {
- court = <HTMLImageElement>(
- document.getElementById(`client_court_${position}`)
- );
- } else {
- court = <HTMLImageElement>document.getElementById("client_court_classic");
- }
+ let court: HTMLImageElement;
+ if ("def,pro,wit".includes(position)) {
+ court = <HTMLImageElement>(
+ document.getElementById(`client_court_${position}`)
+ );
+ } else {
+ court = <HTMLImageElement>document.getElementById("client_court_classic");
+ }
- let bg;
- let desk;
- let speedLines;
+ let bg;
+ let desk;
+ let speedLines;
- if ("def,pro,hld,hlp,wit,jud,jur,sea".includes(position)) {
- bg = positions[position].bg;
- desk = positions[position].desk;
- speedLines = positions[position].speedLines;
- } else {
- bg = `${position}`;
- desk = { ao2: `${position}_overlay.png`, ao1: "_overlay.png" };
- speedLines = "defense_speedlines.gif";
- }
+ if ("def,pro,hld,hlp,wit,jud,jur,sea".includes(position)) {
+ bg = positions[position].bg;
+ desk = positions[position].desk;
+ speedLines = positions[position].speedLines;
+ } else {
+ bg = `${position}`;
+ desk = { ao2: `${position}_overlay.png`, ao1: "_overlay.png" };
+ speedLines = "defense_speedlines.gif";
+ }
- if (showSpeedLines === true) {
- court.src = `${AO_HOST}themes/default/${encodeURI(speedLines)}`;
- } else {
- court.src = await tryUrls(client.viewport.getBackgroundFolder() + bg);
- }
+ if (showSpeedLines === true) {
+ court.src = `${AO_HOST}themes/default/${encodeURI(speedLines)}`;
+ } else {
+ court.src = await tryUrls(client.viewport.getBackgroundFolder() + bg);
+ }
- if (showDesk === true && desk) {
- const bg_folder = client.viewport.getBackgroundFolder();
- const urls_to_try = [
- bg_folder + desk.ao2,
- bg_folder + desk.ao1,
- ];
- bench.src = await findImgSrc(urls_to_try);
- bench.style.opacity = "1";
- } else {
- bench.style.opacity = "0";
- }
+ if (showDesk === true && desk) {
+ const bg_folder = client.viewport.getBackgroundFolder();
+ const urls_to_try = [bg_folder + desk.ao2, bg_folder + desk.ao1];
+ bench.src = await findImgSrc(urls_to_try);
+ bench.style.opacity = "1";
+ } else {
+ bench.style.opacity = "0";
+ }
- if ("def,pro,wit".includes(position)) {
- view.style.display = "";
- document.getElementById("client_classicview")!.style.display = "none";
- switch (position) {
- case "def":
- view.style.left = "0";
- break;
- case "wit":
- view.style.left = "-200%";
- break;
- case "pro":
- view.style.left = "-400%";
- break;
- }
- } else {
- view.style.display = "none";
- document.getElementById("client_classicview").style.display = "";
+ if ("def,pro,wit".includes(position)) {
+ view.style.display = "";
+ document.getElementById("client_classicview")!.style.display = "none";
+ switch (position) {
+ case "def":
+ view.style.left = "0";
+ break;
+ case "wit":
+ view.style.left = "-200%";
+ break;
+ case "pro":
+ view.style.left = "-400%";
+ break;
}
+ } else {
+ view.style.display = "none";
+ document.getElementById("client_classicview").style.display = "";
+ }
};
diff --git a/webAO/viewport/viewport.ts b/webAO/viewport/viewport.ts
index 8a1e97d..c2613b3 100644
--- a/webAO/viewport/viewport.ts
+++ b/webAO/viewport/viewport.ts
@@ -5,18 +5,23 @@ import { UPDATE_INTERVAL } from "../client";
import setEmote from "../client/setEmote";
import { safeTags } from "../encoding";
import { AO_HOST } from "../client/aoHost";
-import { Viewport } from './interfaces/Viewport'
-import { createBlipsChannels } from './utils/createBlipChannels'
-import { defaultChatMsg } from './constants/defaultChatMsg'
-import { createMusic } from './utils/createMusic'
-import { createSfxAudio } from './utils/createSfxAudio'
-import { createShoutAudio } from './utils/createShoutAudio'
-import { createTestimonyAudio } from './utils/createTestimonyAudio'
-import { Testimony } from './interfaces/Testimony'
-import { COLORS } from './constants/colors'
-import { set_side } from './utils/setSide'
+import { Viewport } from "./interfaces/Viewport";
+import { createBlipsChannels } from "./utils/createBlipChannels";
+import { defaultChatMsg } from "./constants/defaultChatMsg";
+import { createMusic } from "./utils/createMusic";
+import { createSfxAudio } from "./utils/createSfxAudio";
+import { createShoutAudio } from "./utils/createShoutAudio";
+import { createTestimonyAudio } from "./utils/createTestimonyAudio";
+import { Testimony } from "./interfaces/Testimony";
+import { COLORS } from "./constants/colors";
+import { set_side } from "./utils/setSide";
import { ChatMsg } from "./interfaces/ChatMsg";
-import { setStartFirstTickCheck, setStartSecondTickCheck, startFirstTickCheck, startSecondTickCheck } from "./utils/handleICSpeaking";
+import {
+ setStartFirstTickCheck,
+ setStartSecondTickCheck,
+ startFirstTickCheck,
+ startSecondTickCheck,
+} from "./utils/handleICSpeaking";
const viewport = (): Viewport => {
let animating = false;
@@ -39,33 +44,63 @@ const viewport = (): Viewport => {
let updater: any;
let backgroundName = "";
const getSfxAudio = () => sfxAudio;
- const setSfxAudio = (value: HTMLAudioElement) => { sfxAudio = value };
+ const setSfxAudio = (value: HTMLAudioElement) => {
+ sfxAudio = value;
+ };
const getBackgroundName = () => backgroundName;
- const setBackgroundName = (value: string) => { backgroundName = value };
+ const setBackgroundName = (value: string) => {
+ backgroundName = value;
+ };
const getBackgroundFolder = () =>
`${AO_HOST}background/${encodeURI(backgroundName.toLowerCase())}/`;
- const getTextNow = () => {return textnow}
- const setTextNow = (val: string) => {textnow = val}
- const getChatmsg = () => {return chatmsg}
- const setChatmsg = (val: ChatMsg) => {chatmsg = val}
- const getSfxPlayed = () => sfxplayed
- const setSfxPlayed = (val: number) => {sfxplayed = val}
- const getTickTimer = () => tickTimer
- const setTickTimer = (val: number) => {tickTimer = val}
- const getAnimating = () => animating
- const setAnimating = (val: boolean) => {animating = val}
- const getLastEvidence = () => lastEvi
- const setLastEvidence = (val: number) => {lastEvi = val}
- const setLastCharacter = (val: string) => {lastChar = val}
- const getLastCharacter = () => lastChar
- const getShoutTimer = () => shoutTimer
- const setShoutTimer = (val: number) => {shoutTimer = val}
- const getTheme = () => theme
- const setTheme = (val: string) => {theme = val}
+ const getTextNow = () => {
+ return textnow;
+ };
+ const setTextNow = (val: string) => {
+ textnow = val;
+ };
+ const getChatmsg = () => {
+ return chatmsg;
+ };
+ const setChatmsg = (val: ChatMsg) => {
+ chatmsg = val;
+ };
+ const getSfxPlayed = () => sfxplayed;
+ const setSfxPlayed = (val: number) => {
+ sfxplayed = val;
+ };
+ const getTickTimer = () => tickTimer;
+ const setTickTimer = (val: number) => {
+ tickTimer = val;
+ };
+ const getAnimating = () => animating;
+ const setAnimating = (val: boolean) => {
+ animating = val;
+ };
+ const getLastEvidence = () => lastEvi;
+ const setLastEvidence = (val: number) => {
+ lastEvi = val;
+ };
+ const setLastCharacter = (val: string) => {
+ lastChar = val;
+ };
+ const getLastCharacter = () => lastChar;
+ const getShoutTimer = () => shoutTimer;
+ const setShoutTimer = (val: number) => {
+ shoutTimer = val;
+ };
+ const getTheme = () => theme;
+ const setTheme = (val: string) => {
+ theme = val;
+ };
const getTestimonyTimer = () => testimonyTimer;
- const setTestimonyTimer = (val: number) => {testimonyTimer = val}
- const setTestimonyUpdater = (val: any) => {testimonyUpdater = val}
- const getTestimonyUpdater = () => testimonyUpdater
+ const setTestimonyTimer = (val: number) => {
+ testimonyTimer = val;
+ };
+ const setTestimonyUpdater = (val: any) => {
+ testimonyUpdater = val;
+ };
+ const getTestimonyUpdater = () => testimonyUpdater;
const playSFX = async (sfxname: string, looping: boolean) => {
sfxAudio.pause();
sfxAudio.loop = looping;
@@ -146,7 +181,7 @@ const viewport = (): Viewport => {
Object.entries({
s: shake,
f: flash,
- })
+ }),
);
const textSpeeds = new Set(["{", "}"]);
@@ -194,7 +229,7 @@ const viewport = (): Viewport => {
charEmote,
"(a)",
false,
- chatmsg.side
+ chatmsg.side,
);
charLayers.style.opacity = "1";
waitingBox.style.opacity = "1";
@@ -296,13 +331,13 @@ const viewport = (): Viewport => {
}
// Done with first check, move to second
- setStartFirstTickCheck(false)
- setStartSecondTickCheck(true)
+ setStartFirstTickCheck(false);
+ setStartSecondTickCheck(true);
chatmsg.startpreanim = false;
chatmsg.startspeaking = true;
}
-
+
const hasNonInterruptingPreAnim = chatmsg.noninterrupting_preanim === 1;
if (textnow !== chatmsg.content && hasNonInterruptingPreAnim) {
const chatContainerBox = document.getElementById("client_chatcontainer");
@@ -315,9 +350,7 @@ const viewport = (): Viewport => {
// Evidence Bullshit
if (chatmsg.evidence > 0) {
// Prepare evidence
- eviBox.src = safeTags(
- client.evidences[chatmsg.evidence - 1].icon
- );
+ eviBox.src = safeTags(client.evidences[chatmsg.evidence - 1].icon);
eviBox.style.width = "auto";
eviBox.style.height = "36.5%";
@@ -381,7 +414,7 @@ const viewport = (): Viewport => {
pairEmote,
"(a)",
true,
- chatmsg.side
+ chatmsg.side,
);
pairLayers.style.opacity = "1";
} else {
@@ -395,7 +428,7 @@ const viewport = (): Viewport => {
charEmote,
"(b)",
false,
- chatmsg.side
+ chatmsg.side,
);
charLayers.style.opacity = "1";
@@ -407,7 +440,7 @@ const viewport = (): Viewport => {
charEmote,
"(a)",
false,
- chatmsg.side
+ chatmsg.side,
);
charLayers.style.opacity = "1";
waitingBox.style.opacity = "1";
@@ -417,7 +450,7 @@ const viewport = (): Viewport => {
}
} else if (textnow !== chatmsg.content) {
const chatContainerBox = document.getElementById(
- "client_chatcontainer"
+ "client_chatcontainer",
);
chatContainerBox.style.opacity = "1";
await handleTextTick(charLayers);
@@ -435,9 +468,9 @@ const viewport = (): Viewport => {
) {
playSFX(
`${AO_HOST}sounds/general/${encodeURI(
- chatmsg.sound.toLowerCase()
+ chatmsg.sound.toLowerCase(),
)}.opus`,
- chatmsg.looping_sfx
+ chatmsg.looping_sfx,
);
}
}