import { AO_HOST, client, pickEmotion, updateActionCommands } from "../../client";
import fileExists from "../../utils/fileExists";
/**
* 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";
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 = `No emotes available`;
} 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
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: `${AO_HOST}characters/${encodeURI(
me.name.toLowerCase()
)}/emotions/button${i}_off.png`,
};
emotesList.innerHTML += `
`;
} catch (e) {
console.error(`missing emote ${i}`);
}
}
pickEmotion(1);
}
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";
}
}