diff options
Diffstat (limited to 'webAO')
| -rw-r--r-- | webAO/client.ts | 125 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleCT.ts | 17 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleMC.ts | 41 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleRMC.ts | 24 |
4 files changed, 109 insertions, 98 deletions
diff --git a/webAO/client.ts b/webAO/client.ts index a2735b2..676aa3f 100644 --- a/webAO/client.ts +++ b/webAO/client.ts @@ -13,7 +13,9 @@ import vanilla_character_arr from "./constants/characters.js"; import vanilla_music_arr from "./constants/music.js"; import vanilla_background_arr from "./constants/backgrounds.js"; import vanilla_evidence_arr from "./constants/evidence.js"; - +import { handleCT } from './packets/handlers/handleCT' +import { handleMC } from './packets/handlers/handleMC' +import { handleRMC } from './packets/handlers/handleRMC' import chatbox_arr from "./styles/chatbox/chatboxes.js"; import iniParse from "./iniParse"; import getCookie from "./utils/getCookie"; @@ -34,7 +36,7 @@ const version = process.env.npm_package_version; import masterViewport, { Viewport } from "./viewport"; import { handleMS } from './packets/handlers/handleMS'; -let { ip: serverIP, mode, asset, theme } = queryParser() ; +let { ip: serverIP, mode, asset, theme } = queryParser(); // Unless there is an asset URL specified, use the wasabi one const DEFAULT_HOST = "http://attorneyoffline.de/base/"; export let AO_HOST = asset || DEFAULT_HOST; @@ -205,7 +207,7 @@ class Client extends EventEmitter { this.selectedEmote = -1; this.selectedEvidence = 0; - + this.checkUpdater = null; this.viewport = masterViewport(this); /** @@ -213,9 +215,9 @@ class Client extends EventEmitter { * If you implement a new command, you need to add it here */ this.on("MS", handleMS); - this.on("CT", this.handleCT.bind(this)); - this.on("MC", this.handleMC.bind(this)); - this.on("RMC", this.handleRMC.bind(this)); + this.on("CT", handleCT); + this.on("MC", handleMC); + this.on("RMC", handleRMC); this.on("CI", this.handleCI.bind(this)); this.on("SC", this.handleSC.bind(this)); this.on("EI", this.handleEI.bind(this)); @@ -252,9 +254,9 @@ class Client extends EventEmitter { this.on("ackMS", this.handleackMS.bind(this)); this.on("SP", this.handleSP.bind(this)); this.on("JD", this.handleJD.bind(this)); - this.on("decryptor", () => {}); - this.on("CHECK", () => {}); - this.on("CH", () => {}); + this.on("decryptor", () => { }); + this.on("CHECK", () => { }); + this.on("CH", () => { }); this._lastTimeICReceived = new Date(0); } @@ -436,8 +438,7 @@ class Client extends EventEmitter { if (mode === "replay") { (<HTMLInputElement>( document.getElementById("client_ooclog") - )).value += `wait#${ - (<HTMLInputElement>document.getElementById("client_replaytimer")).value + )).value += `wait#${(<HTMLInputElement>document.getElementById("client_replaytimer")).value }#%\r\n`; } } @@ -741,82 +742,11 @@ class Client extends EventEmitter { - /** - * Handles an out-of-character chat message. - * @param {Array} args packet arguments - */ - handleCT(args: string[]) { - if (mode !== "replay") { - const oocLog = document.getElementById("client_ooclog"); - oocLog.innerHTML += `${prepChat(args[1])}: ${prepChat(args[2])}\r\n`; - if (oocLog.scrollTop > oocLog.scrollHeight - 600) { - oocLog.scrollTop = oocLog.scrollHeight; - } - } - } - /** - * Handles a music change to an arbitrary resource. - * @param {Array} args packet arguments - */ - handleMC(args: string[]) { - const track = prepChat(args[1]); - let charID = Number(args[2]); - const showname = args[3] || ""; - const looping = Boolean(args[4]); - const channel = Number(args[5]) || 0; - // const fading = Number(args[6]) || 0; // unused in web - - const music = this.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 = this.chars[charID].name; - } catch (e) { - charID = -1; - } - if (charID >= 0) { - musicname = this.chars[charID].name; - appendICLog(`${musicname} changed music to ${track}`); - } else { - appendICLog(`The music was changed to ${track}`); - } - document.getElementById("client_trackstatustext").innerText = track; - } - // TODO BUG: - // this.viewport.music is an array. Therefore you must access elements - /** - * Handles a music change to an arbitrary resource, with an offset in seconds. - * @param {Array} args packet arguments - */ - handleRMC(args: string[]) { - this.viewport.music.pause(); - const { music } = this.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 - ); - } /** * Handles the incoming character information, and downloads the sprite + ini for it @@ -958,7 +888,7 @@ class Client extends EventEmitter { document.getElementById("client_loadingtext").innerHTML = "Loading Characters"; - for (let i = 1; i < args.length-1; i++) { + for (let i = 1; i < args.length - 1; i++) { document.getElementById( "client_loadingtext" ).innerHTML = `Loading Character ${i}/${this.char_list_length}`; @@ -2050,9 +1980,8 @@ export function mutelist_click(_event: Event) { 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)`; + 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; @@ -2562,26 +2491,26 @@ export function resizeChatbox() { chatContainerBox.style.fontSize = `${(gameHeight * 0.0521).toFixed(1)}px`; const trackstatus = <HTMLMarqueeElement>(document.getElementById("client_trackstatustext")); - trackstatus.width = (trackstatus.offsetWidth-1)+"px"; + trackstatus.width = (trackstatus.offsetWidth - 1) + "px"; //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"]; + 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()]; console.debug(CHATBOX); 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(); + 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.getDay()); + 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.getDay()); } - + } window.resizeChatbox = resizeChatbox; @@ -2628,7 +2557,7 @@ export function updateActionCommands(side: string) { // Update role selector for ( let i = 0, - role_select = <HTMLSelectElement>document.getElementById("role_select"); + role_select = <HTMLSelectElement>document.getElementById("role_select"); i < role_select.options.length; i++ ) { diff --git a/webAO/packets/handlers/handleCT.ts b/webAO/packets/handlers/handleCT.ts new file mode 100644 index 0000000..cff9b24 --- /dev/null +++ b/webAO/packets/handlers/handleCT.ts @@ -0,0 +1,17 @@ +import queryParser from '../../utils/queryParser' +import { prepChat } from '../../encoding' +let { mode } = queryParser(); + +/** + * Handles an out-of-character chat message. + * @param {Array} args packet arguments + */ +export const handleCT = (args: string[]) => { + if (mode !== "replay") { + const oocLog = document.getElementById("client_ooclog")!; + oocLog.innerHTML += `${prepChat(args[1])}: ${prepChat(args[2])}\r\n`; + if (oocLog.scrollTop > oocLog.scrollHeight - 600) { + oocLog.scrollTop = oocLog.scrollHeight; + } + } +}
\ No newline at end of file diff --git a/webAO/packets/handlers/handleMC.ts b/webAO/packets/handlers/handleMC.ts new file mode 100644 index 0000000..28254ba --- /dev/null +++ b/webAO/packets/handlers/handleMC.ts @@ -0,0 +1,41 @@ +import { prepChat } from "../../encoding"; +import { AO_HOST, appendICLog, client } from '../../client' + +/** + * Handles a music change to an arbitrary resource. + * @param {Array} args packet arguments + */ +export const handleMC = (args: string[]) => { + const track = prepChat(args[1]); + let charID = Number(args[2]); + const showname = args[3] || ""; + const looping = Boolean(args[4]); + const channel = Number(args[5]) || 0; + // const fading = Number(args[6]) || 0; // unused in web + + const music = client.viewport.music[channel]; + let musicname; + music.pause(); + if (track.startsWith("http")) { + music.src = track; + } else { + music.src = `${AO_HOST}sounds/music/${encodeURI(track.toLowerCase())}`; + } + music.loop = looping; + music.play(); + + try { + musicname = client.chars[charID].name; + } catch (e) { + charID = -1; + } + + if (charID >= 0) { + musicname = client.chars[charID].name; + appendICLog(`${musicname} changed music to ${track}`); + } else { + appendICLog(`The music was changed to ${track}`); + } + + document.getElementById("client_trackstatustext")!.innerText = track; +}
\ No newline at end of file diff --git a/webAO/packets/handlers/handleRMC.ts b/webAO/packets/handlers/handleRMC.ts new file mode 100644 index 0000000..ada1ad2 --- /dev/null +++ b/webAO/packets/handlers/handleRMC.ts @@ -0,0 +1,24 @@ +import { client } from '../../client' +// TODO BUG: +// this.viewport.music is an array. Therefore you must access elements +/** + * Handles a music change to an arbitrary resource, with an offset in seconds. + * @param {Array} args packet arguments + */ +export const handleRMC = (args: string[]) => { + client.viewport.music.pause(); + const { music } = client.viewport; + // Music offset + drift from song loading + music.totime = args[1]; + music.offset = new Date().getTime() / 1000; + music.addEventListener( + "loadedmetadata", + () => { + music.currentTime += parseFloat( + music.totime + (new Date().getTime() / 1000 - music.offset) + ).toFixed(3); + music.play(); + }, + false + ); +}
\ No newline at end of file |
