diff options
| author | Caleb <caleb.mabry.15@cnu.edu> | 2022-08-30 18:08:05 -0400 |
|---|---|---|
| committer | Caleb <caleb.mabry.15@cnu.edu> | 2022-08-30 18:08:05 -0400 |
| commit | 357b27c0aae95031a5d94bdbc504d82b797b22e2 (patch) | |
| tree | 57bf23055f63df56f9a65b4ac007d97e41a334a1 | |
| parent | a453315983f6fa71b2b9f953d505cf63f6d7d8d0 (diff) | |
Several packets added
| -rw-r--r-- | webAO/client.ts | 214 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleBN.ts | 81 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleDONE.ts | 16 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleHI.ts | 14 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleHP.ts | 23 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleRT.ts | 25 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleTI.ts | 21 | ||||
| -rw-r--r-- | webAO/packets/handlers/handleZZ.ts | 22 |
8 files changed, 217 insertions, 199 deletions
diff --git a/webAO/client.ts b/webAO/client.ts index 1fdd3c5..e871fce 100644 --- a/webAO/client.ts +++ b/webAO/client.ts @@ -30,6 +30,13 @@ import { handleBD } from './packets/handlers/handleBD' import { handleBB } from './packets/handlers/handleBB' import { handleKB } from './packets/handlers/handleKB' import { handleKK } from './packets/handlers/handleKK' +import { handleDONE } from './packets/handlers/handleDONE' +import { handleBN } from './packets/handlers/handleBN' +import { handleHP } from './packets/handlers/handleHP' +import { handleRT } from './packets/handlers/handleRT' +import { handleTI } from './packets/handlers/handleTI' +import { handleZZ } from './packets/handlers/handleZZ' +import { handleHI } from './packets/handlers/handleHI' import chatbox_arr from "./styles/chatbox/chatboxes.js"; import iniParse from "./iniParse"; import getCookie from "./utils/getCookie"; @@ -253,13 +260,13 @@ class Client extends EventEmitter { this.on("BB", handleBB); this.on("KB", handleKB); this.on("KK", handleKK); - this.on("DONE", this.handleDONE.bind(this)); - this.on("BN", this.handleBN.bind(this)); - this.on("HP", this.handleHP.bind(this)); - this.on("RT", this.handleRT.bind(this)); - this.on("TI", this.handleTI.bind(this)); - this.on("ZZ", this.handleZZ.bind(this)); - this.on("HI", this.handleHI.bind(this)); + this.on("DONE", handleDONE); + this.on("BN", handleBN); + this.on("HP", handleHP); + this.on("RT", handleRT); + this.on("TI", handleTI); + this.on("ZZ", handleZZ); + this.on("HI", handleHI); this.on("ID", this.handleID.bind(this)); this.on("PN", this.handlePN.bind(this)); this.on("SI", this.handleSI.bind(this)); @@ -1025,197 +1032,6 @@ class Client extends EventEmitter { - - - - - /** - * Handles the handshake completion packet, meaning the player - * is ready to select a character. - * - * @param {Array} args packet arguments - */ - handleDONE(_args: string[]) { - document.getElementById("client_loading").style.display = "none"; - if (mode === "watch") { - // Spectators don't need to pick a character - document.getElementById("client_waiting").style.display = "none"; - } - } - - /** - * Handles a background change. - * @param {Array} args packet arguments - */ - - handleBN(args: string[]) { - const bgFromArgs = safeTags(args[1]); - this.viewport.setBackgroundName(bgFromArgs); - const bgfolder = this.viewport.getBackgroundFolder(); - const bg_index = getIndexFromSelect( - "bg_select", - this.viewport.getBackgroundName() - ); - (<HTMLSelectElement>document.getElementById("bg_select")).selectedIndex = - bg_index; - updateBackgroundPreview(); - if (bg_index === 0) { - (<HTMLInputElement>document.getElementById("bg_filename")).value = - this.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}full`).then((resp) => { - (<HTMLImageElement>document.getElementById("client_court")).src = resp; - }); - 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; - }); - - if (this.charID === -1) { - this.viewport.set_side({ - position: "jud", - showSpeedLines: false, - showDesk: true, - }); - } else { - this.viewport.set_side({ - position: this.chars[this.charID].side, - showSpeedLines: false, - showDesk: true, - }); - } - } - - /** - * Handles a change in the health bars' states. - * @param {Array} args packet arguments - */ - handleHP(args: string[]) { - const percent_hp = Number(args[2]) * 10; - let healthbox; - if (args[1] === "1") { - // Def hp - this.hp[0] = Number(args[2]); - healthbox = document.getElementById("client_defense_hp"); - } else { - // Pro hp - this.hp[1] = Number(args[2]); - healthbox = document.getElementById("client_prosecutor_hp"); - } - (<HTMLElement>( - healthbox.getElementsByClassName("health-bar")[0] - )).style.width = `${percent_hp}%`; - } - - /** - * Handles a testimony states. - * @param {Array} args packet arguments - */ - handleRT(args: string[]) { - const judgeid = Number(args[2]); - switch (args[1]) { - case "testimony1": - this.testimonyID = 1; - break; - case "testimony2": - // Cross Examination - this.testimonyID = 2; - break; - case "judgeruling": - this.testimonyID = 3 + judgeid; - break; - default: - console.warn("Invalid testimony"); - } - this.viewport.initTestimonyUpdater(); - } - - /** - * Handles a timer update - * @param {Array} args packet arguments - */ - 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"; - } - } - - /** - * Handles a modcall - * @param {Array} args packet arguments - */ - 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; - } - - this.viewport.getSfxAudio().pause(); - const oldvolume = this.viewport.getSfxAudio().volume; - this.viewport.getSfxAudio().volume = 1; - this.viewport.getSfxAudio().src = `${AO_HOST}sounds/general/sfx-gallery.opus`; - this.viewport.getSfxAudio().play(); - this.viewport.getSfxAudio().volume = oldvolume; - } - - /** - * Handle the player - * @param {Array} args packet arguments - */ - handleHI(_args: string[]) { - this.sendSelf(`ID#1#webAO#${version}#%`); - this.sendSelf( - "FL#fastloading#yellowtext#cccc_ic_support#flipping#looping_sfx#effects#%" - ); - } - /** * Identifies the server and issues a playerID * @param {Array} args packet arguments @@ -1776,7 +1592,7 @@ window.changeCallwords = changeCallwords; * Triggered by the modcall sfx dropdown */ export function modcall_test() { - client.handleZZ("test#test".split("#")); + handleZZ("test#test".split("#")); } window.modcall_test = modcall_test; diff --git a/webAO/packets/handlers/handleBN.ts b/webAO/packets/handlers/handleBN.ts new file mode 100644 index 0000000..3cd3c5a --- /dev/null +++ b/webAO/packets/handlers/handleBN.ts @@ -0,0 +1,81 @@ +import { AO_HOST, client, getIndexFromSelect, updateBackgroundPreview } from "../../client"; +import { safeTags } from "../../encoding"; +import tryUrls from "../../utils/tryUrls"; + + + /** + * Handles a background change. + * @param {Array} args packet arguments + */ + +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(); + } + + 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}full`).then((resp) => { + (<HTMLImageElement>document.getElementById("client_court")).src = resp; + }); + 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; + }); + + 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, + }); + } + }
\ No newline at end of file diff --git a/webAO/packets/handlers/handleDONE.ts b/webAO/packets/handlers/handleDONE.ts new file mode 100644 index 0000000..3cafd5e --- /dev/null +++ b/webAO/packets/handlers/handleDONE.ts @@ -0,0 +1,16 @@ +import queryParser from "../../utils/queryParser"; + +let { mode } = queryParser() + /** + * Handles the handshake completion packet, meaning the player + * is ready to select a character. + * + * @param {Array} args packet arguments + */ +export const handleDONE = (_args: string[]) => { + document.getElementById("client_loading")!.style.display = "none"; + if (mode === "watch") { + // Spectators don't need to pick a character + document.getElementById("client_waiting")!.style.display = "none"; + } + }
\ No newline at end of file diff --git a/webAO/packets/handlers/handleHI.ts b/webAO/packets/handlers/handleHI.ts new file mode 100644 index 0000000..d15be0d --- /dev/null +++ b/webAO/packets/handlers/handleHI.ts @@ -0,0 +1,14 @@ +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.sendSelf(`ID#1#webAO#${version}#%`); + client.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 new file mode 100644 index 0000000..f365590 --- /dev/null +++ b/webAO/packets/handlers/handleHP.ts @@ -0,0 +1,23 @@ +import { client } from "../../client"; + + + /** + * Handles a change in the health bars' states. + * @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}%`; + }
\ No newline at end of file diff --git a/webAO/packets/handlers/handleRT.ts b/webAO/packets/handlers/handleRT.ts new file mode 100644 index 0000000..5bbf2b2 --- /dev/null +++ b/webAO/packets/handlers/handleRT.ts @@ -0,0 +1,25 @@ +import { client } from "../../client"; + + +/** + * 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"); + } + client.viewport.initTestimonyUpdater(); +}
\ No newline at end of file diff --git a/webAO/packets/handlers/handleTI.ts b/webAO/packets/handlers/handleTI.ts new file mode 100644 index 0000000..e418088 --- /dev/null +++ b/webAO/packets/handlers/handleTI.ts @@ -0,0 +1,21 @@ +/** + * Handles a timer update + * @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 diff --git a/webAO/packets/handlers/handleZZ.ts b/webAO/packets/handlers/handleZZ.ts new file mode 100644 index 0000000..1a56e49 --- /dev/null +++ b/webAO/packets/handlers/handleZZ.ts @@ -0,0 +1,22 @@ +import { AO_HOST, client } from "../../client"; +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; + } + + 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 |
