diff options
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&&&&#Miles ... - * @param {Array} args packet arguments - */ + * Handles incoming character information, bundling multiple characters + * per packet. + * CI#0#Phoenix&description&&&&#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, ); } } |
