237 lines
8.6 KiB
JavaScript
237 lines
8.6 KiB
JavaScript
// ===========================================================================
|
|
// Vortrex's Roleplay Resource
|
|
// https://github.com/VortrexFTW/gtac_roleplay
|
|
// ===========================================================================
|
|
// FILE: keybind.js
|
|
// DESC: Provides keybind handlers and functions
|
|
// TYPE: Server (JavaScript)
|
|
|
|
// ===========================================================================
|
|
|
|
class KeyBindData {
|
|
constructor(dbAssoc = false, key = 0, commandString = "", keyState = VRR_KEYSTATE_UP) {
|
|
this.databaseId = 0;
|
|
this.key = key;
|
|
this.account = 0;
|
|
this.commandString = commandString;
|
|
this.whenAdded = 0;
|
|
this.enabled = true;
|
|
this.keyState = false;
|
|
this.index = -1;
|
|
this.needsSaved = false;
|
|
|
|
if(dbAssoc) {
|
|
this.databaseId = dbAssoc["acct_hotkey_id"];
|
|
this.key = toInteger(dbAssoc["acct_hotkey_key"]);
|
|
this.account = toInteger(dbAssoc["acct_hotkey_acct"]);
|
|
this.commandString = dbAssoc["acct_hotkey_cmdstr"];
|
|
this.whenAdded = dbAssoc["acct_hotkey_when_added"];
|
|
this.enabled = intToBool(dbAssoc["acct_hotkey_enabled"]);
|
|
this.keyState = intToBool(dbAssoc["acct_hotkey_down"]);
|
|
}
|
|
}
|
|
};
|
|
|
|
// ===========================================================================
|
|
|
|
function initKeyBindScript() {
|
|
logToConsole(LOG_INFO, "[VRR.KeyBind]: Initializing key bind script ...");
|
|
logToConsole(LOG_INFO, "[VRR.KeyBind]: Key bind script initialized!");
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function addKeyBindCommand(command, params, client) {
|
|
let splitParams = params.split(" ");
|
|
|
|
let keyId = getKeyIdFromParams(getParam(params, " ", 1));
|
|
let tempCommand = getParam(params, " ", 2);
|
|
let tempParams = (splitParams.length > 2) ? splitParams.slice(2).join(" ") : "";
|
|
|
|
if(!keyId) {
|
|
messagePlayerError(client, "The key ID or name you input is invalid!");
|
|
messagePlayerTip(client, "Use simple key names, letters, or numbers. Don't add spaces.");
|
|
messagePlayerInfo(client, `Examples: {ALTCOLOUR}1, 2, a, b, numplus, num1, f1, f2, pageup, delete, insert, rightshift, leftctrl`);
|
|
return false;
|
|
}
|
|
|
|
if(!keyId) {
|
|
messagePlayerError(client, "That key name/id is invalid!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(tempCommand)) {
|
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
addPlayerKeyBind(client, keyId, tempCommand, tempParams);
|
|
messagePlayerSuccess(client, `You binded the {ALTCOLOUR}${toUpperCase(getKeyNameFromId(keyId))} {MAINCOLOUR}key to command: {ALTCOLOUR}/${tempCommand} ${tempParams}`);
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function removeKeyBindCommand(command, params, client) {
|
|
let keyId = getKeyIdFromParams(getParam(params, " ", 1));
|
|
|
|
if(!keyId) {
|
|
messagePlayerError(client, "The key ID or name you input is invalid!");
|
|
messagePlayerTip(client, "Use simple key names, letters, or numbers. Don't add spaces.");
|
|
messagePlayerInfo(client, `Examples: {ALTCOLOUR}1, 2, a, b, numplus, num1, f1, f2, pageup, delete, insert, rightshift, leftctrl`);
|
|
return false;
|
|
}
|
|
|
|
if(!keyId) {
|
|
messagePlayerError(client, "That key name/id is invalid!");
|
|
return false;
|
|
}
|
|
|
|
removePlayerKeyBind(client, keyId);
|
|
messagePlayerSuccess(client, `You removed the keybind for the {ALTCOLOUR}${toUpperCase(getKeyNameFromId(keyId))} {MAINCOLOUR}key`);
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function addPlayerKeyBind(client, keys, command, params, tempKey = false) {
|
|
let keyBindData = new KeyBindData(false, keys, `${command} ${params}`);
|
|
if(tempKey == true) {
|
|
keyBindData.databaseId = -1;
|
|
}
|
|
|
|
getPlayerData(client).keyBinds.push(keyBindData);
|
|
sendAddAccountKeyBindToClient(client, keys, (keys.length > 1) ? VRR_KEYSTATE_COMBO : VRR_KEYSTATE_UP);
|
|
|
|
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) {
|
|
let keyId = getPlayerKeyBindForCommand(client, "enter");
|
|
logToConsole(LOG_DEBUG, `[VRR.Event] Sending custom enter property key ID (${keyId.key}, ${toUpperCase(getKeyNameFromId(keyId.key))}) to ${getPlayerDisplayForConsole(client)}`);
|
|
sendPlayerEnterPropertyKey(client, keyId.key);
|
|
} else {
|
|
sendPlayerEnterPropertyKey(client, false);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function removePlayerKeyBind(client, keyId) {
|
|
//if(isPlayerLoggedIn(client)) {
|
|
// quickDatabaseQuery(`DELETE FROM acct_hotkey WHERE acct_hotkey_acct = ${getPlayerData(client).accountData.databaseId} AND acct_hotkey_key = ${keyId}`);
|
|
//}
|
|
|
|
//for(let i in getPlayerData(client).keyBinds) {
|
|
// if(getPlayerData(client).keyBinds[i].key == keyId) {
|
|
// getPlayerData(client).keyBinds.splice(i, 1);
|
|
// }
|
|
//}
|
|
getPlayerData(client).keyBinds = getPlayerData(client).keyBinds.filter(keyBind => keyBind.key != keyId);
|
|
sendRemoveAccountKeyBindToClient(client, keyId);
|
|
|
|
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) {
|
|
let keyId = getPlayerKeyBindForCommand(client, "enter");
|
|
logToConsole(LOG_DEBUG, `[VRR.Event] Sending custom enter property key ID (${keyId.key}, ${toUpperCase(getKeyNameFromId(keyId.key))}) to ${getPlayerDisplayForConsole(client)}`);
|
|
sendPlayerEnterPropertyKey(client, keyId.key);
|
|
} else {
|
|
sendPlayerEnterPropertyKey(client, false);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function doesPlayerHaveKeyBindForCommand(client, command) {
|
|
for(let i in getPlayerData(client).keyBinds) {
|
|
if(toLowerCase(getPlayerData(client).keyBinds[i].commandString.split(" ")[0]) == toLowerCase(command)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function getPlayerKeyBindForCommand(client, command) {
|
|
for(let i in getPlayerData(client).keyBinds) {
|
|
if(toLowerCase(getPlayerData(client).keyBinds[i].commandString.split(" ")[0]) == toLowerCase(command)) {
|
|
return getPlayerData(client).keyBinds[i];
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function doesPlayerHaveKeyBindForKey(client, key) {
|
|
for(let i in getPlayerData(client).keyBinds) {
|
|
if(getPlayerData(client).keyBinds[i].key == key) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function doesPlayerHaveKeyBindsDisabled(client) {
|
|
return hasBitFlag(getPlayerData(client).accountData.settings, getAccountSettingsFlagValue("NoKeyBinds"));
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function getPlayerKeyBindForKey(client, key) {
|
|
for(let i in getPlayerData(client).keyBinds) {
|
|
if(getPlayerData(client).keyBinds[i].key == key) {
|
|
return getPlayerData(client).keyBinds[i];
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function playerUsedKeyBind(client, key) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
return false;
|
|
}
|
|
|
|
if(!isPlayerSpawned(client)) {
|
|
return false;
|
|
}
|
|
|
|
logToConsole(LOG_DEBUG, `[VRR.KeyBind] ${getPlayerDisplayForConsole(client)} used keybind ${toUpperCase(getKeyNameFromId(key))} (${key})`);
|
|
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForKey(client, key)) {
|
|
let keyBindData = getPlayerKeyBindForKey(client, key);
|
|
if(keyBindData.enabled) {
|
|
let splitCommandString = keyBindData.commandString.split(" ");
|
|
let tempCommand = splitCommandString[0];
|
|
let tempParams = "";
|
|
if(splitCommandString.length > 1) {
|
|
tempParams = splitCommandString.slice(1).join(" ");
|
|
}
|
|
getCommand(toLowerCase(tempCommand)).handlerFunction(tempCommand, tempParams, client);
|
|
//triggerEvent("OnPlayerCommand", null, tempCommand, tempParams, client);
|
|
}
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function sendAccountKeyBindsToClient(client) {
|
|
sendClearKeyBindsToClient(client);
|
|
for(let i in getPlayerData(client).keyBinds) {
|
|
sendAddAccountKeyBindToClient(client, getPlayerData(client).keyBinds[i].key, getPlayerData(client).keyBinds[i].keyState);
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|
|
|
|
function showKeyBindListCommand(command, params, client) {
|
|
let keybindList = getPlayerData(client).keyBinds.map(function(x) { return `{ALTCOLOUR}${toUpperCase(getKeyNameFromId(x.key))}: {MAINCOLOUR}${x.commandString}`; });
|
|
|
|
let chunkedList = splitArrayIntoChunks(keybindList, 6);
|
|
|
|
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderKeyBindsList")));
|
|
|
|
for(let i in chunkedList) {
|
|
messagePlayerInfo(client, chunkedList[i].join(", "));
|
|
}
|
|
}
|
|
|
|
// ===========================================================================
|