Add optional chatbox timestamps
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
|
let chatBoxTimeStampsEnabled = false;
|
||||||
let chatBoxHistory = [];
|
let chatBoxHistory = [];
|
||||||
let bottomMessageIndex = 0;
|
let bottomMessageIndex = 0;
|
||||||
let maxChatBoxHistory = 500;
|
let maxChatBoxHistory = 500;
|
||||||
@@ -56,12 +57,21 @@ function receiveChatBoxMessageFromServer(messageString, colour) {
|
|||||||
|
|
||||||
let colouredString = replaceColoursInMessage(messageString);
|
let colouredString = replaceColoursInMessage(messageString);
|
||||||
|
|
||||||
|
let date = new Date();
|
||||||
|
let timeStampText = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.ChatBox]: Changed colours in string: ${colouredString}`);
|
logToConsole(LOG_DEBUG, `[VRR.ChatBox]: Changed colours in string: ${colouredString}`);
|
||||||
|
|
||||||
addToChatBoxHistory(colouredString, colour);
|
addToChatBoxHistory(colouredString, colour, timeStampText);
|
||||||
//if(bottomMessageIndex >= chatBoxHistory.length-1) {
|
//if(bottomMessageIndex >= chatBoxHistory.length-1) {
|
||||||
message(colouredString, colour);
|
|
||||||
bottomMessageIndex = chatBoxHistory.length-1;
|
let outputText = colouredString;
|
||||||
|
if (chatBoxTimeStampsEnabled) {
|
||||||
|
outputText = `{TIMESTAMPCOLOUR}[${timeStampText}]{MAINCOLOUR} ${colouredString}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
message(outputText, colour);
|
||||||
|
bottomMessageIndex = chatBoxHistory.length - 1;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
chatLastUse = getCurrentUnixTimestamp();
|
chatLastUse = getCurrentUnixTimestamp();
|
||||||
@@ -75,8 +85,15 @@ function setChatScrollLines(amount) {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
|
function setChatBoxTimeStampsState(state) {
|
||||||
|
chatBoxTimeStampsEnabled = state;
|
||||||
|
updateChatBox();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
function setChatAutoHideDelay(delay) {
|
function setChatAutoHideDelay(delay) {
|
||||||
chatAutoHideDelay = delay*1000;
|
chatAutoHideDelay = delay * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -88,8 +105,8 @@ function addToChatBoxHistory(messageString, colour) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function chatBoxScrollUp() {
|
function chatBoxScrollUp() {
|
||||||
if(bottomMessageIndex > maxChatBoxLines) {
|
if (bottomMessageIndex > maxChatBoxLines) {
|
||||||
bottomMessageIndex = bottomMessageIndex-scrollAmount;
|
bottomMessageIndex = bottomMessageIndex - scrollAmount;
|
||||||
updateChatBox();
|
updateChatBox();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,8 +114,8 @@ function chatBoxScrollUp() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function chatBoxScrollDown() {
|
function chatBoxScrollDown() {
|
||||||
if(bottomMessageIndex < chatBoxHistory.length-1) {
|
if (bottomMessageIndex < chatBoxHistory.length - 1) {
|
||||||
bottomMessageIndex = bottomMessageIndex+scrollAmount;
|
bottomMessageIndex = bottomMessageIndex + scrollAmount;
|
||||||
updateChatBox();
|
updateChatBox();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,7 +123,7 @@ function chatBoxScrollDown() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function clearChatBox() {
|
function clearChatBox() {
|
||||||
for(let i = 0 ; i <= maxChatBoxLines ; i++) {
|
for (let i = 0; i <= maxChatBoxLines; i++) {
|
||||||
message("", COLOUR_WHITE);
|
message("", COLOUR_WHITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,9 +132,14 @@ function clearChatBox() {
|
|||||||
|
|
||||||
function updateChatBox() {
|
function updateChatBox() {
|
||||||
clearChatBox();
|
clearChatBox();
|
||||||
for(let i = bottomMessageIndex-maxChatBoxLines ; i <= bottomMessageIndex ; i++) {
|
for (let i = bottomMessageIndex - maxChatBoxLines; i <= bottomMessageIndex; i++) {
|
||||||
if(typeof chatBoxHistory[i] != "undefined") {
|
if (typeof chatBoxHistory[i] != "undefined") {
|
||||||
message(chatBoxHistory[i][0], chatBoxHistory[i][1]);
|
let outputText = chatBoxHistory[i][0];
|
||||||
|
if (chatBoxTimeStampsEnabled) {
|
||||||
|
outputText = `{TIMESTAMPCOLOUR}[${timeStampText}]{MAINCOLOUR} ${chatBoxHistory[i][0]}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
message(outputText, chatBoxHistory[i][1]);
|
||||||
} else {
|
} else {
|
||||||
message("", COLOUR_WHITE);
|
message("", COLOUR_WHITE);
|
||||||
}
|
}
|
||||||
@@ -129,18 +151,18 @@ function updateChatBox() {
|
|||||||
|
|
||||||
function processMouseWheelForChatBox(mouseId, deltaCoordinates, flipped) {
|
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 ¯\_(ツ)_/¯
|
// There isn't a way to detect whether chat input is active, but mouse cursor is forced shown when typing so ¯\_(ツ)_/¯
|
||||||
if(!gui.cursorEnabled) {
|
if (!gui.cursorEnabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!flipped) {
|
if (!flipped) {
|
||||||
if(deltaCoordinates.y > 0) {
|
if (deltaCoordinates.y > 0) {
|
||||||
chatBoxScrollUp();
|
chatBoxScrollUp();
|
||||||
} else {
|
} else {
|
||||||
chatBoxScrollDown();
|
chatBoxScrollDown();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(deltaCoordinates.y > 0) {
|
if (deltaCoordinates.y > 0) {
|
||||||
chatBoxScrollDown();
|
chatBoxScrollDown();
|
||||||
} else {
|
} else {
|
||||||
chatBoxScrollUp();
|
chatBoxScrollUp();
|
||||||
@@ -154,16 +176,16 @@ function checkChatAutoHide() {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Make sure chat input isn't active
|
// Make sure chat input isn't active
|
||||||
if(gui.cursorEnabled) {
|
if (gui.cursorEnabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't process auto-hide if it's disabled
|
// Don't process auto-hide if it's disabled
|
||||||
if(chatAutoHideDelay == 0) {
|
if (chatAutoHideDelay == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getCurrentUnixTimestamp()-chatLastUse >= chatAutoHideDelay) {
|
if (getCurrentUnixTimestamp() - chatLastUse >= chatAutoHideDelay) {
|
||||||
setChatWindowEnabled(false);
|
setChatWindowEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,11 @@ function initServerScript() {
|
|||||||
function addAllNetworkHandlers() {
|
function addAllNetworkHandlers() {
|
||||||
logToConsole(LOG_DEBUG, "[VRR.Server]: Adding network handlers ...");
|
logToConsole(LOG_DEBUG, "[VRR.Server]: Adding network handlers ...");
|
||||||
|
|
||||||
// Chat history
|
// Chat Box
|
||||||
addNetworkEventHandler("m", receiveChatBoxMessageFromServer); // Not prefixed with VRR to make it as small as possible
|
addNetworkEventHandler("m", receiveChatBoxMessageFromServer); // Not prefixed with VRR to make it as small as possible
|
||||||
addNetworkEventHandler("vrr.chatScrollLines", setChatScrollLines);
|
addNetworkEventHandler("vrr.chatScrollLines", setChatScrollLines);
|
||||||
addNetworkEventHandler("vrr.chatAutoHideDelay", setChatAutoHideDelay);
|
addNetworkEventHandler("vrr.chatAutoHideDelay", setChatAutoHideDelay);
|
||||||
|
addNetworkEventHandler("vrr.chatTimeStamps", setChatBoxTimeStampsState);
|
||||||
|
|
||||||
// Messaging (like textdraws and stuff)
|
// Messaging (like textdraws and stuff)
|
||||||
addNetworkEventHandler("vrr.smallGameMessage", showSmallGameMessage);
|
addNetworkEventHandler("vrr.smallGameMessage", showSmallGameMessage);
|
||||||
|
|||||||
@@ -387,6 +387,23 @@ function toggleAccountTwoFactorAuthCommand(command, params, client) {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
|
function toggleChatBoxTimeStampsCommand(command, params, client) {
|
||||||
|
let flagValue = getAccountSettingsFlagValue("ChatBoxTimestamps");
|
||||||
|
|
||||||
|
if (hasBitFlag(getPlayerData(client).accountData.settings, flagValue)) {
|
||||||
|
getPlayerData(client).accountData.settings = removeBitFlag(getPlayerData(client).accountData.settings, flagValue);
|
||||||
|
messagePlayerSuccess(client, getLocaleString(client, "ChatBoxTimestampsToggle", `{softRed}${toUpperCase(getLocaleString(client, "Off"))}`));
|
||||||
|
sendPlayerChatBoxTimeStampsState(client, false);
|
||||||
|
} else {
|
||||||
|
getPlayerData(client).accountData.settings = addBitFlag(getPlayerData(client).accountData.settings, flagValue);
|
||||||
|
messagePlayerSuccess(client, getLocaleString(client, "ChatBoxTimestampsToggle", `{softGreen}${toUpperCase(getLocaleString(client, "On"))}`));
|
||||||
|
sendPlayerChatBoxTimeStampsState(client, false);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
function registerCommand(command, params, client) {
|
function registerCommand(command, params, client) {
|
||||||
if (isPlayerRegistered(client)) {
|
if (isPlayerRegistered(client)) {
|
||||||
messagePlayerError(client, getLocaleString(client, "AccountNameAlreadyRegistered"));
|
messagePlayerError(client, getLocaleString(client, "AccountNameAlreadyRegistered"));
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ let serverBitFlagKeys = {
|
|||||||
"NoKeyBinds",
|
"NoKeyBinds",
|
||||||
"NoRandomTips",
|
"NoRandomTips",
|
||||||
"NoActionTips",
|
"NoActionTips",
|
||||||
|
"ChatBoxTimestamps",
|
||||||
],
|
],
|
||||||
|
|
||||||
// Not going to be used. Use trigger, condition, and response stuff in trigger.js
|
// Not going to be used. Use trigger, condition, and response stuff in trigger.js
|
||||||
@@ -243,25 +244,25 @@ function initBitFlagScript() {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function doesPlayerHaveStaffPermission(client, requiredFlags) {
|
function doesPlayerHaveStaffPermission(client, requiredFlags) {
|
||||||
if(isConsole(client)) {
|
if (isConsole(client)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(requiredFlags == getStaffFlagValue("None")) {
|
if (requiredFlags == getStaffFlagValue("None")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let staffFlags = 0;
|
let staffFlags = 0;
|
||||||
if(getPlayerData(client)) {
|
if (getPlayerData(client)) {
|
||||||
staffFlags = getPlayerData(client).accountData.flags.admin;
|
staffFlags = getPlayerData(client).accountData.flags.admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
||||||
if(staffFlags == getStaffFlagValue("All")) {
|
if (staffFlags == getStaffFlagValue("All")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasBitFlag(staffFlags, requiredFlags)) {
|
if (hasBitFlag(staffFlags, requiredFlags)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,15 +272,15 @@ function doesPlayerHaveStaffPermission(client, requiredFlags) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function doesPlayerHaveClanPermission(client, requiredFlags) {
|
function doesPlayerHaveClanPermission(client, requiredFlags) {
|
||||||
if(isConsole(client)) {
|
if (isConsole(client)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(requiredFlags == getClanFlagValue("None")) {
|
if (requiredFlags == getClanFlagValue("None")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageClans"))) {
|
if (doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageClans"))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,11 +288,11 @@ function doesPlayerHaveClanPermission(client, requiredFlags) {
|
|||||||
clanFlags = getPlayerCurrentSubAccount(client).clanFlags | getClanRankFlags(getPlayerCurrentSubAccount(client).clanRank);
|
clanFlags = getPlayerCurrentSubAccount(client).clanFlags | getClanRankFlags(getPlayerCurrentSubAccount(client).clanRank);
|
||||||
|
|
||||||
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
// -1 is automatic override (having -1 for staff flags is basically god mode admin level)
|
||||||
if(clanFlags == getClanFlagValue("All")) {
|
if (clanFlags == getClanFlagValue("All")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasBitFlag(clanFlags, requiredFlags)) {
|
if (hasBitFlag(clanFlags, requiredFlags)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,11 +302,11 @@ function doesPlayerHaveClanPermission(client, requiredFlags) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getStaffFlagValue(flagName) {
|
function getStaffFlagValue(flagName) {
|
||||||
if(flagName == "All") {
|
if (flagName == "All") {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof serverBitFlags.staffFlags[flagName] == "undefined") {
|
if (typeof serverBitFlags.staffFlags[flagName] == "undefined") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,11 +316,11 @@ function getStaffFlagValue(flagName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getClanFlagValue(flagName) {
|
function getClanFlagValue(flagName) {
|
||||||
if(flagName == "All") {
|
if (flagName == "All") {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof getServerBitFlags().clanFlags[flagName] == "undefined") {
|
if (typeof getServerBitFlags().clanFlags[flagName] == "undefined") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,11 +330,11 @@ function getClanFlagValue(flagName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getAccountSettingsFlagValue(flagName) {
|
function getAccountSettingsFlagValue(flagName) {
|
||||||
if(flagName == "All") {
|
if (flagName == "All") {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof serverBitFlags.accountSettingsFlags[flagName] == "undefined") {
|
if (typeof serverBitFlags.accountSettingsFlags[flagName] == "undefined") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,11 +344,11 @@ function getAccountSettingsFlagValue(flagName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getModerationFlagValue(flagName) {
|
function getModerationFlagValue(flagName) {
|
||||||
if(flagName == "All") {
|
if (flagName == "All") {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof serverBitFlags.moderationFlags[flagName] == "undefined") {
|
if (typeof serverBitFlags.moderationFlags[flagName] == "undefined") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,7 +358,7 @@ function getModerationFlagValue(flagName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function givePlayerStaffFlag(client, flagName) {
|
function givePlayerStaffFlag(client, flagName) {
|
||||||
if(!getStaffFlagValue(flagName)) {
|
if (!getStaffFlagValue(flagName)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +370,7 @@ function givePlayerStaffFlag(client, flagName) {
|
|||||||
|
|
||||||
function takePlayerStaffFlag(client, flagName) {
|
function takePlayerStaffFlag(client, flagName) {
|
||||||
let flagValue = getStaffFlagValue(flagName);
|
let flagValue = getStaffFlagValue(flagName);
|
||||||
if(!flagValue) {
|
if (!flagValue) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,7 +381,7 @@ function takePlayerStaffFlag(client, flagName) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function takePlayerStaffFlag(client, flagName) {
|
function takePlayerStaffFlag(client, flagName) {
|
||||||
if(!getStaffFlagValue(flagName)) {
|
if (!getStaffFlagValue(flagName)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1237,4 +1237,10 @@ function clearLocalPickupsForPlayer(client) {
|
|||||||
sendNetworkEventToPlayer(client, "vrr.clearPickups");
|
sendNetworkEventToPlayer(client, "vrr.clearPickups");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==========================================================================
|
||||||
|
|
||||||
|
function sendPlayerChatBoxTimeStampsState(client, state) {
|
||||||
|
sendNetworkEventToPlayer(client, "vrr.chatTimeStamps", state);
|
||||||
|
}
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
Reference in New Issue
Block a user