169 lines
4.7 KiB
JavaScript
169 lines
4.7 KiB
JavaScript
// ===========================================================================
|
|
// Vortrex's Roleplay Resource
|
|
// https://github.com/VortrexFTW/gtac_roleplay
|
|
// ===========================================================================
|
|
// FILE: chatbox.js
|
|
// DESC: Provides extra chatbox features
|
|
// TYPE: Client (JavaScript)
|
|
// ===========================================================================
|
|
|
|
// ===========================================================================
|
|
|
|
let chatBoxHistory = [];
|
|
let bottomMessageIndex = 0;
|
|
let maxChatBoxHistory = 500;
|
|
|
|
let scrollAmount = 1;
|
|
let maxChatBoxLines = 6;
|
|
|
|
let chatAutoHideDelay = 0;
|
|
let chatLastUse = 0;
|
|
|
|
let scrollUpKey = false;
|
|
let scrollDownKey = false;
|
|
|
|
// ===========================================================================
|
|
|
|
function initChatBoxScript() {
|
|
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Initializing chatbox script ...");
|
|
scrollUpKey = getKeyIdFromParams("pageup");
|
|
scrollDownKey = getKeyIdFromParams("pagedown");
|
|
bindChatBoxKeys();
|
|
logToConsole(LOG_DEBUG, "[VRR.ChatBox]: Chatbox script initialized!");
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function bindChatBoxKeys() {
|
|
bindKey(toInteger(scrollUpKey), KEYSTATE_DOWN, chatBoxScrollUp);
|
|
bindKey(toInteger(scrollDownKey), KEYSTATE_DOWN, chatBoxScrollDown);
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function unBindChatBoxKeys() {
|
|
unbindKey(toInteger(scrollUpKey));
|
|
unbindKey(toInteger(scrollDownKey));
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function receiveChatBoxMessageFromServer(messageString, colour) {
|
|
logToConsole(LOG_INFO, `[VRR.ChatBox]: Received chatbox message from server: ${messageString}`);
|
|
|
|
// Just in case it's hidden by auto hide
|
|
setChatWindowEnabled(true);
|
|
|
|
let colouredString = replaceColoursInMessage(messageString);
|
|
|
|
logToConsole(LOG_INFO, `[VRR.ChatBox]: Changed colours in string: ${colouredString}`);
|
|
|
|
//if(bottomMessageIndex >= chatBoxHistory.length-1) {
|
|
message(colouredString, colour);
|
|
bottomMessageIndex = chatBoxHistory.length-1;
|
|
//}
|
|
addToChatBoxHistory(colouredString, colour);
|
|
|
|
chatLastUse = getCurrentUnixTimestamp();
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function setChatScrollLines(amount) {
|
|
scrollAmount = amount;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function setChatAutoHideDelay(delay) {
|
|
chatAutoHideDelay = delay*1000;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function addToChatBoxHistory(messageString, colour) {
|
|
chatBoxHistory.push([messageString, colour]);
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function chatBoxScrollUp() {
|
|
if(bottomMessageIndex > maxChatBoxLines) {
|
|
bottomMessageIndex = bottomMessageIndex-scrollAmount;
|
|
updateChatBox();
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function chatBoxScrollDown() {
|
|
if(bottomMessageIndex < chatBoxHistory.length-1) {
|
|
bottomMessageIndex = bottomMessageIndex+scrollAmount;
|
|
updateChatBox();
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function clearChatBox() {
|
|
for(let i = 0 ; i <= maxChatBoxLines ; i++) {
|
|
message("", COLOUR_WHITE);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function updateChatBox() {
|
|
clearChatBox();
|
|
for(let i = bottomMessageIndex-maxChatBoxLines ; i <= bottomMessageIndex ; i++) {
|
|
if(typeof chatBoxHistory[i] != "undefined") {
|
|
message(chatBoxHistory[i][0], chatBoxHistory[i][1]);
|
|
} else {
|
|
message("", COLOUR_WHITE);
|
|
}
|
|
}
|
|
chatLastUse = getCurrentUnixTimestamp();
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function processMouseWheelForChatBox(mouseId, deltaCoordinates, flipped) {
|
|
// There isn't a way to detect whether chat input is active, but mouse cursor is forced shown when typing so ¯\_(ツ)_/¯
|
|
if(!gui.cursorEnabled) {
|
|
return false;
|
|
}
|
|
|
|
if(!flipped) {
|
|
if(deltaCoordinates.y > 0) {
|
|
chatBoxScrollUp();
|
|
} else {
|
|
chatBoxScrollDown();
|
|
}
|
|
} else {
|
|
if(deltaCoordinates.y > 0) {
|
|
chatBoxScrollDown();
|
|
} else {
|
|
chatBoxScrollUp();
|
|
}
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function checkChatAutoHide() {
|
|
// Make sure chat input isn't active
|
|
if(gui.cursorEnabled) {
|
|
return false;
|
|
}
|
|
|
|
// Don't process auto-hide if it's disabled
|
|
if(chatAutoHideDelay == 0) {
|
|
return false;
|
|
}
|
|
|
|
if(getCurrentUnixTimestamp()-chatLastUse >= chatAutoHideDelay) {
|
|
setChatWindowEnabled(false);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|