Lots of changes and fixes
* Add guiReady state * Add mouseCameraEnabled state * Make sure GUI is ready on some things * Fix wrong veh prop funcs being used clientside * Add local player ped parts/props util for IV * Add vehicle.lightStatus sync * Add element interior sync * Dont use interior on IV * Use new class structure * Set default anim offset to 1 * Set biz data to save when changing biz properties * Add mouse cam state util * Prefix item type admin cmds with "itemtype" * Fix server config saving * Fix server time setting hour to minute arg * Add player returnTo data types * Make veh rent/buy price numbers readable * Fix wrong house index being used to create blip/pickup on create * Don't cache player hotbar items if working * Fix cache player hotbar items util * Add lots of anims to GTA SA * Try/catch on all data saving to prevent one from blocking the rest * Fix readable time from showing AM for 12 PM (noon) * Set veh interior on create * Dont set engine for spawnlocked vehicles
This commit is contained in:
@@ -24,6 +24,8 @@ let windowTitleAlpha = 180;
|
||||
let buttonAlpha = 180;
|
||||
let textInputAlpha = 180;
|
||||
|
||||
let guiReady = false;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let login = {
|
||||
@@ -851,6 +853,8 @@ function initGUI() {
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.GUI] All GUI created successfully!`);
|
||||
closeAllWindows();
|
||||
|
||||
guiReady = true;
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1140,40 +1144,42 @@ let switchCharacterSelect = function(firstName, lastName, cash, clan, lastPlayed
|
||||
}
|
||||
|
||||
let isAnyGUIActive = function() {
|
||||
if(infoDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(!guiReady) {
|
||||
if(infoDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(yesNoDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(yesNoDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(errorDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(errorDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(register.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(register.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(login.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(login.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(newCharacter.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(newCharacter.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(characterSelect.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(characterSelect.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(twoFactorAuth.window.shown) {
|
||||
return true;
|
||||
}
|
||||
if(twoFactorAuth.window.shown) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(listDialog.window.shown) {
|
||||
return true;
|
||||
if(listDialog.window.shown) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -55,4 +55,6 @@ let calledDeathEvent = false;
|
||||
let interiorLightsEnabled = true;
|
||||
let interiorLightsColour = toColour(0, 0, 0, 150);
|
||||
|
||||
let mouseCameraEnabled = false
|
||||
|
||||
// ===========================================================================
|
||||
@@ -38,7 +38,7 @@ function initScoreBoardListFont() {
|
||||
// ===========================================================================
|
||||
|
||||
function processScoreBoardRendering() {
|
||||
if(isAnyGUIActive()) {
|
||||
if(guiReady && isAnyGUIActive()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@ function addAllNetworkHandlers() {
|
||||
addNetworkHandler("vrr.showItemActionDelay", showItemActionDelay);
|
||||
addNetworkHandler("vrr.set2DRendering", setPlayer2DRendering);
|
||||
addNetworkHandler("vrr.mouseCursor", toggleMouseCursor);
|
||||
addNetworkHandler("vrr.mouseCamera", setMouseCameraState);
|
||||
addNetworkHandler("vrr.mouseCamera", toggleMouseCamera);
|
||||
addNetworkHandler("vrr.mouseCameraForce", setMouseCameraState);
|
||||
addNetworkHandler("vrr.weaponDamageEnabled", setPlayerWeaponDamageEnabled);
|
||||
addNetworkHandler("vrr.weaponDamageEvent", setPlayerWeaponDamageEvent);
|
||||
addNetworkHandler("vrr.spawned", onServerSpawnedPlayer);
|
||||
@@ -74,8 +75,8 @@ function addAllNetworkHandlers() {
|
||||
addNetworkHandler("vrr.stopRadioStream", stopStreamingRadio);
|
||||
addNetworkHandler("vrr.radioVolume", setStreamingRadioVolume);
|
||||
|
||||
addNetworkHandler("vrr.veh.lights", toggleVehicleLights);
|
||||
addNetworkHandler("vrr.veh.engine", toggleVehicleEngine);
|
||||
addNetworkHandler("vrr.veh.lights", setVehicleLights);
|
||||
addNetworkHandler("vrr.veh.engine", setVehicleEngine);
|
||||
addNetworkHandler("vrr.veh.repair", repairVehicle);
|
||||
|
||||
addNetworkHandler("vrr.pedAnim", makePedPlayAnimation);
|
||||
@@ -324,4 +325,13 @@ function makePedStopAnimation(pedId) {
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setLocalPlayerPedPartsAndProps(parts, props) {
|
||||
for(let i in parts) {
|
||||
localPlayer.changeBodyPart(parts[0], parts[1], parts[2]);
|
||||
localPlayer.changeBodyProp(props[0], props[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -44,14 +44,18 @@ function processSync(event, deltaTime) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function toggleVehicleEngine(vehicle, state) {
|
||||
vehicle.engine = state;
|
||||
function setVehicleEngine(vehicleId, state) {
|
||||
getElementFromId(vehicleId).engine = state;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function toggleVehicleLights(vehicle, state) {
|
||||
getElementFromId(vehicle).lights = state;
|
||||
function setVehicleLights(vehicleId, state) {
|
||||
if(!state) {
|
||||
getElementFromId(vehicleId).lightStatus = 2;
|
||||
} else {
|
||||
getElementFromId(vehicleId).lightStatus = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -65,7 +69,11 @@ function repairVehicle(syncId) {
|
||||
function syncVehicleProperties(vehicle) {
|
||||
if(doesEntityDataExist(vehicle, "vrr.lights")) {
|
||||
let lightStatus = getEntityData(vehicle, "vrr.lights");
|
||||
vehicle.lights = lightStatus;
|
||||
if(!lightStatus) {
|
||||
vehicle.lightStatus = 2;
|
||||
} else {
|
||||
vehicle.lightStatus = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(doesEntityDataExist(vehicle, "vrr.panelStatus")) {
|
||||
@@ -339,6 +347,10 @@ function syncObjectProperties(object) {
|
||||
// ===========================================================================
|
||||
|
||||
function syncElementProperties(element) {
|
||||
if(doesEntityDataExist(element, "vrr.interior")) {
|
||||
element.interior = getEntityData(element, "vrr.interior");
|
||||
}
|
||||
|
||||
switch(element.type) {
|
||||
case ELEMENT_VEHICLE:
|
||||
syncVehicleProperties(element);
|
||||
|
||||
@@ -334,8 +334,10 @@ function setLocalPlayerHeading(heading) {
|
||||
function setLocalPlayerInterior(interior) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] Setting interior to ${interior}`);
|
||||
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
|
||||
localPlayer.interior = interior;
|
||||
gta.cameraInterior = interior;
|
||||
if(!isGTAIV()) {
|
||||
localPlayer.interior = interior;
|
||||
gta.cameraInterior = interior;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -437,7 +439,7 @@ function clearSelfOwnedVehicles() {
|
||||
|
||||
function setMouseCameraState(state) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] ${(state)?"Enabled":"Disabled"} mouse camera`);
|
||||
mouseCameraEnabled = !mouseCameraEnabled;
|
||||
mouseCameraEnabled = state;
|
||||
SetStandardControlsEnabled(!mouseCameraEnabled);
|
||||
}
|
||||
|
||||
@@ -450,6 +452,13 @@ function toggleMouseCursor() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function toggleMouseCursor() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] ${(!gui.cursorEnabled)?"Enabled":"Disabled"} mouse cursor`);
|
||||
setMouseCameraState(!mouseCameraEnabled);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayerWeaponDamageEvent(clientName, eventType) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Utilities] Set ${clientName} damage event type to ${eventType}`);
|
||||
weaponDamageEvent[clientName] = eventType;
|
||||
@@ -696,4 +705,25 @@ function processInteriorLightsRendering() {
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerFromParams(params) {
|
||||
let clients = getClients();
|
||||
if(isNaN(params)) {
|
||||
for(let i in clients) {
|
||||
if(!clients[i].console) {
|
||||
if(toLowerCase(clients[i].name).indexOf(toLowerCase(params)) != -1) {
|
||||
return clients[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(typeof clients[toInteger(params)] != "undefined") {
|
||||
return clients[toInteger(params)];
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -376,7 +376,7 @@ function loadAccountFromName(accountName, fullLoad = false) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempAccountData = new serverClasses.accountData(dbAssoc);
|
||||
let tempAccountData = new AccountData(dbAssoc);
|
||||
if(fullLoad) {
|
||||
tempAccountData.keyBinds = loadAccountKeybindsFromDatabase(tempAccountData.databaseId);
|
||||
tempAccountData.messages = loadAccountMessagesFromDatabase(tempAccountData.databaseId);
|
||||
@@ -402,7 +402,7 @@ function loadAccountFromId(accountId, fullLoad = false) {
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempAccountData = new serverClasses.accountData(dbAssoc);
|
||||
let tempAccountData = new AccountData(dbAssoc);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
if(fullLoad) {
|
||||
tempAccountData.keyBinds = loadAccountKeybindsFromDatabase(tempAccountData.databaseId);
|
||||
@@ -542,11 +542,6 @@ function saveAccountToDatabase(accountData) {
|
||||
["acct_ip", accountData.ipAddress],
|
||||
];
|
||||
|
||||
let dbQuery = null;
|
||||
let queryString = createDatabaseUpdateQuery("acct_main", data, `acct_id=${accountData.databaseId}`);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
|
||||
let data2 = [
|
||||
["acct_svr_settings", accountData.settings],
|
||||
["acct_svr_staff_title", safeStaffTitle],
|
||||
@@ -555,11 +550,14 @@ function saveAccountToDatabase(accountData) {
|
||||
["acct_svr_chat_scroll_lines", accountData.chatScrollLines],
|
||||
];
|
||||
|
||||
dbQuery = null;
|
||||
queryString = "";
|
||||
queryString = createDatabaseUpdateQuery("acct_svr", data2, `acct_svr_acct=${accountData.databaseId} AND acct_svr_svr = ${getServerId()}`);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
let queryString1 = createDatabaseUpdateQuery("acct_main", data, `acct_id=${accountData.databaseId}`);
|
||||
let dbQuery1 = queryDatabase(dbConnection, queryString1);
|
||||
freeDatabaseQuery(dbQuery1);
|
||||
|
||||
let queryString2 = createDatabaseUpdateQuery("acct_svr", data2, `acct_svr_acct=${accountData.databaseId} AND acct_svr_svr=${getServerId()}`);
|
||||
let dbQuery2 = queryDatabase(dbConnection, queryString2);
|
||||
freeDatabaseQuery(dbQuery2);
|
||||
|
||||
disconnectFromDatabase(dbConnection);
|
||||
return true;
|
||||
}
|
||||
@@ -568,6 +566,11 @@ function saveAccountToDatabase(accountData) {
|
||||
// ===========================================================================
|
||||
|
||||
function saveAccountKeyBindToDatabase(keyBindData) {
|
||||
if(keyBindData.databaseId == -1) {
|
||||
// Keybind is a default keybind, don't save
|
||||
return false;
|
||||
}
|
||||
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeCommandString = escapeDatabaseString(dbConnection, keyBindData.commandString);
|
||||
@@ -575,6 +578,7 @@ function saveAccountKeyBindToDatabase(keyBindData) {
|
||||
let data = [
|
||||
["acct_hotkey_acct", keyBindData.account],
|
||||
["acct_hotkey_enabled", keyBindData.enabled],
|
||||
["acct_hotkey_deleted", keyBindData.deleted],
|
||||
["acct_hotkey_cmdstr", safeCommandString],
|
||||
["acct_hotkey_key", keyBindData.key],
|
||||
["acct_hotkey_down", boolToInt(keyBindData.keyState)],
|
||||
@@ -630,7 +634,7 @@ function saveAccountStaffNotesDatabase(staffNoteData) {
|
||||
// ===========================================================================
|
||||
|
||||
/*
|
||||
function saveAccountContactsDatabase(accountContactData) {
|
||||
function saveAccountContactsToDatabase(accountContactData) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let safeNoteContent = escapeDatabaseString(dbConnection, accountContactData.note);
|
||||
@@ -663,7 +667,6 @@ function createAccount(name, password, email = "") {
|
||||
let dbQuery = queryDatabase(dbConnection, `INSERT INTO acct_main (acct_name, acct_pass, acct_email, acct_when_registered) VALUES ('${safeName}', '${hashedPassword}', '${safeEmail}', UNIX_TIMESTAMP())`);
|
||||
if(getDatabaseInsertId(dbConnection) > 0) {
|
||||
let tempAccountData = loadAccountFromId(getDatabaseInsertId(dbConnection), false);
|
||||
createDefaultKeybindsForAccount(tempAccountData.databaseId);
|
||||
createDefaultAccountServerData(tempAccountData.databaseId);
|
||||
tempAccountData.keyBinds = loadAccountKeybindsFromDatabase(tempAccountData.databaseId);
|
||||
tempAccountData.messages = loadAccountMessagesFromDatabase(tempAccountData.databaseId);
|
||||
@@ -880,7 +883,7 @@ function savePlayerToDatabase(client) {
|
||||
if(client.player != null) {
|
||||
if(getPlayerData(client).returnToPosition != null) {
|
||||
getPlayerCurrentSubAccount(client).spawnPosition = getPlayerData(client).returnToPosition;
|
||||
getPlayerCurrentSubAccount(client).spawnHeading = getPlayerData(client).returnToHeading;
|
||||
getPlayerCurrentSubAccount(client).spawnHeading = getPlayerData(client).returnToHeading.z;
|
||||
getPlayerCurrentSubAccount(client).interior = getPlayerData(client).returnToInterior;
|
||||
getPlayerCurrentSubAccount(client).dimension = getPlayerData(client).returnToDimension;
|
||||
} else {
|
||||
@@ -920,7 +923,7 @@ function initClient(client) {
|
||||
let tempAccountData = loadAccountFromName(getPlayerName(client), true);
|
||||
let tempSubAccounts = loadSubAccountsFromAccount(tempAccountData.databaseId);
|
||||
|
||||
getServerData().clients[client.index] = new serverClasses.clientData(client, tempAccountData, tempSubAccounts);
|
||||
getServerData().clients[client.index] = new ClientData(client, tempAccountData, tempSubAccounts);
|
||||
|
||||
let sessionId = saveConnectionToDatabase(client);
|
||||
getServerData().clients[client.index].session = sessionId;
|
||||
@@ -971,23 +974,6 @@ function saveConnectionToDatabase(client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createDefaultKeybindsForAccount(accountDatabaseId) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Creating default keybinds for account ${accountDatabaseId} ...`);
|
||||
for(let j = 1 ; j <= 4 ; j++) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Creating default keybinds for account ${accountDatabaseId} on server ${j} ...`);
|
||||
for(let i in getGlobalConfig().keyBind.defaultKeyBinds) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Creating default keybind ${i} for account ${accountDatabaseId} on server ${j} with key ${getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName.toLowerCase())} ...`);
|
||||
let dbQueryString = `INSERT INTO acct_hotkey (acct_hotkey_acct, acct_hotkey_server, acct_hotkey_key, acct_hotkey_cmdstr, acct_hotkey_when_added, acct_hotkey_down) VALUES (${accountDatabaseId}, ${j}, ${getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName.toLowerCase())}, '${getGlobalConfig().keyBind.defaultKeyBinds[i].commandString}', UNIX_TIMESTAMP(), ${getGlobalConfig().keyBind.defaultKeyBinds[i].keyState})`;
|
||||
quickDatabaseQuery(dbQueryString);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Created default keybind ${i} for account ${accountDatabaseId} on server ${j} with key ${getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName.toLowerCase())}!`);
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Create default keybinds for account ${accountDatabaseId} on server ${j}!`);
|
||||
}
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Created default keybinds for account ${accountDatabaseId} successfully!`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createDefaultAccountServerData(accountDatabaseId) {
|
||||
for(let i = 1 ; i <= 5 ; i++) {
|
||||
let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accountDatabaseId}, ${i})`;
|
||||
@@ -1005,12 +991,21 @@ function loadAccountKeybindsFromDatabase(accountDatabaseID) {
|
||||
let dbQuery = null;
|
||||
let dbAssoc;
|
||||
|
||||
for(let i in getGlobalConfig().keyBind.defaultKeyBinds) {
|
||||
let tempKeyBindData = new KeyBindData(false);
|
||||
tempKeyBindData.databaseId = -1;
|
||||
tempKeyBindData.key = getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName);
|
||||
tempKeyBindData.commandString = getGlobalConfig().keyBind.defaultKeyBinds[i].commandString;
|
||||
tempKeyBindData.keyState = getGlobalConfig().keyBind.defaultKeyBinds[i].keyState;
|
||||
tempAccountKeybinds.push(tempKeyBindData);
|
||||
}
|
||||
|
||||
if(dbConnection) {
|
||||
dbQuery = queryDatabase(dbConnection, `SELECT * FROM acct_hotkey WHERE acct_hotkey_enabled = 1 AND acct_hotkey_acct = ${accountDatabaseID} AND acct_hotkey_server = ${getServerId()}`);
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempAccountKeyBindData = new serverClasses.keyBindData(dbAssoc);
|
||||
let tempAccountKeyBindData = new KeyBindData(dbAssoc);
|
||||
tempAccountKeybinds.push(tempAccountKeyBindData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Account keybind '${tempAccountKeyBindData.databaseId}' (Key ${tempAccountKeyBindData.key} '${toUpperCase(getKeyNameFromId(tempAccountKeyBindData.key))}') loaded from database successfully!`);
|
||||
}
|
||||
@@ -1039,7 +1034,7 @@ function loadAccountStaffNotesFromDatabase(accountDatabaseID) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempAccountStaffNoteData = new serverClasses.accountStaffNoteData(dbAssoc);
|
||||
let tempAccountStaffNoteData = new AccountStaffNoteData(dbAssoc);
|
||||
tempAccountStaffNotes.push(tempAccountStaffNoteData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Account staff note '${tempAccountStaffNoteData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -1068,7 +1063,7 @@ function loadAccountContactsFromDatabase(accountDatabaseID) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempAccountContactData = new serverClasses.accountContactData(dbAssoc);
|
||||
let tempAccountContactData = new AccountContactData(dbAssoc);
|
||||
tempAccountContacts.push(tempAccountContactData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Account contact '${tempAccountContactData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -1097,7 +1092,7 @@ function loadAccountMessagesFromDatabase(accountDatabaseID) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempAccountMessageData = new serverClasses.accountContactData(dbAssoc);
|
||||
let tempAccountMessageData = new AccountContactData(dbAssoc);
|
||||
tempAccountMessages.push(tempAccountMessageData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Account]: Account contact '${tempAccountMessageData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ function playPlayerAnimationCommand(command, params, client) {
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let animationSlot = getAnimationFromParams(splitParams[0]);
|
||||
let animationPositionOffset = getAnimationFromParams(splitParams[1]);
|
||||
let animationPositionOffset = getAnimationFromParams(splitParams[1]) || 1;
|
||||
|
||||
if(!animationSlot) {
|
||||
messagePlayerError(client, "That animation doesn't exist!");
|
||||
@@ -30,12 +30,18 @@ function playPlayerAnimationCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(toInteger(animationPositionOffset) < 0 || toInteger(animationPositionOffset) > 3) {
|
||||
messagePlayerError(client, "The offset must be between 0 and 3!")
|
||||
return false;
|
||||
}
|
||||
|
||||
getPlayerData(client).currentAnimation = animationSlot;
|
||||
getPlayerData(client).currentAnimationPositionOffset = animationSlot;
|
||||
getPlayerData(client).currentAnimationPositionReturnTo = getPlayerPosition(client);
|
||||
getPlayerData(client).animationStart = getCurrentUnixTimestamp();
|
||||
//setEntityData(getPlayerData(client).ped, "vrr.animation", animationSlot, true);
|
||||
makePedPlayAnimation(getPlayerData(client).ped, animationSlot, animationPositionOffset);
|
||||
setPlayerMouseCameraState(client, true);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -43,6 +49,7 @@ function playPlayerAnimationCommand(command, params, client) {
|
||||
function stopPlayerAnimationCommand(command, params, client) {
|
||||
setPlayerPosition(client, getPlayerData(client).currentAnimationPositionReturnTo);
|
||||
makePedStopAnimation(getPlayerData(client).ped);
|
||||
setPlayerMouseCameraState(client, false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -26,7 +26,7 @@ function loadAntiCheatGameScriptWhiteListFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempWhiteListedGameScriptData = new serverClasses.whiteListedGameScriptData(dbAssoc);
|
||||
let tempWhiteListedGameScriptData = new WhiteListedGameScriptData(dbAssoc);
|
||||
tempWhiteListedGameScripts.push(tempWhiteListedGameScriptData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.AntiCheat] Whitelisted game script '${tempWhiteListedGameScriptData.scriptName}' loaded successfully!`);
|
||||
}
|
||||
@@ -50,7 +50,7 @@ function loadAntiCheatGameScriptBlackListFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempBlackListedGameScriptData = new serverClasses.blackListedGameScriptData(dbAssoc);
|
||||
let tempBlackListedGameScriptData = new BlackListedGameScriptData(dbAssoc);
|
||||
tempBlackListedGameScripts.push(tempBlackListedGameScriptData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.AntiCheat] Blacklisted game script '${tempBlackListedGameScriptData.scriptName}' loaded successfully!`);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ function loadBusinessFromId(businessId) {
|
||||
if(dbQuery) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return new serverClasses.businessData(dbAssoc);
|
||||
return new BusinessData(dbAssoc);
|
||||
}
|
||||
disconnectFromDatabase(dbConnection);
|
||||
}
|
||||
@@ -60,7 +60,7 @@ function loadBusinessesFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempBusinessData = new serverClasses.businessData(dbAssoc);
|
||||
let tempBusinessData = new BusinessData(dbAssoc);
|
||||
tempBusinessData.locations = loadBusinessLocationsFromDatabase(tempBusinessData.databaseId);
|
||||
tempBusinessData.gameScripts = loadBusinessGameScriptsFromDatabase(tempBusinessData.databaseId);
|
||||
tempBusinesses.push(tempBusinessData);
|
||||
@@ -93,7 +93,7 @@ function loadBusinessLocationsFromDatabase(businessId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempBusinessLocationData = new serverClasses.businessLocationData(dbAssoc);
|
||||
let tempBusinessLocationData = new BusinessLocationData(dbAssoc);
|
||||
tempBusinessLocations.push(tempBusinessLocationData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.Business]: Location '${tempBusinessLocationData.name}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -124,7 +124,7 @@ function loadBusinessGameScriptsFromDatabase(businessId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempBusinessGameScriptData = new serverClasses.businessGameScriptData(dbAssoc);
|
||||
let tempBusinessGameScriptData = new BusinessGameScriptData(dbAssoc);
|
||||
tempBusinessGameScripts.push(tempBusinessGameScriptData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.Business]: Game script '${tempBusinessGameScriptData.name}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -185,7 +185,7 @@ function createBusinessLocationCommand(command, params, client) {
|
||||
// ===========================================================================
|
||||
|
||||
function createBusiness(name, entrancePosition, exitPosition, entrancePickupModel = -1, entranceBlipModel = -1, entranceInteriorId = 0, entranceVirtualWorld = 0, exitInteriorId = -1, exitVirtualWorld = -1, exitPickupModel = -1, exitBlipModel = -1) {
|
||||
let tempBusinessData = new serverClasses.businessData(false);
|
||||
let tempBusinessData = new BusinessData(false);
|
||||
tempBusinessData.name = name;
|
||||
|
||||
tempBusinessData.entrancePosition = entrancePosition;
|
||||
@@ -253,6 +253,8 @@ function setBusinessNameCommand(command, params, client) {
|
||||
let oldBusinessName = getBusinessData(businessId).name;
|
||||
getBusinessData(businessId).name = newBusinessName;
|
||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.name", getBusinessData(businessId).name, true);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}renamed business ${getInlineChatColourByType("businessBlue")}${oldBusinessName} ${getInlineChatColourByName("white")}to ${getInlineChatColourByType("businessBlue")}${newBusinessName}`);
|
||||
}
|
||||
|
||||
@@ -281,6 +283,8 @@ function setBusinessOwnerCommand(command, params, client) {
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_PLAYER;
|
||||
getBusinessData(businessId).ownerId = getServerData().clients[newBusinessOwner.index].accountData.databaseId;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}to ${getInlineChatColourByName("lightGrey")}${newBusinessOwner.name}`);
|
||||
}
|
||||
|
||||
@@ -308,10 +312,10 @@ function setBusinessClanCommand(command, params, client) {
|
||||
}
|
||||
}
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_CLAN;
|
||||
getBusinessData(businessId).ownerId = getClanData(clanId).databaseId;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You gave business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan!`);
|
||||
}
|
||||
|
||||
@@ -359,6 +363,7 @@ function setBusinessClanCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getBusinessData(businessId).clanRank = getClanRankData(clanId, clanRankId).level;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(`${getInlineChatColourByName("white")}You set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name}${getInlineChatColourByName("white")}'s clan rank to ${getInlineChatColourByType("clanOrange")}${getClanRankData(clanId, clanRankId).name} ${getInlineChatColourByName("white")}(level ${getClanRankData(clanId, clanRankId).level}) and above!`);
|
||||
}
|
||||
@@ -391,6 +396,8 @@ function setBusinessJobCommand(command, params, client) {
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_JOB;
|
||||
getBusinessData(businessId).ownerId = getJobData(jobId).databaseId;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}owner to the ${getInlineChatColourByType("jobYellow")}${getJobData(jobId).name} ${getInlineChatColourByName("white")}job`);
|
||||
}
|
||||
|
||||
@@ -410,6 +417,8 @@ function setBusinessPublicCommand(command, params, client) {
|
||||
|
||||
getBusinessData(businessId).ownerType = VRR_BIZOWNER_PUBLIC;
|
||||
getBusinessData(businessId).ownerId = 0;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}owner set to ${getInlineChatColourByName("lightGrey")}public`);
|
||||
}
|
||||
|
||||
@@ -436,6 +445,8 @@ function lockUnlockBusinessCommand(command, params, client) {
|
||||
|
||||
getBusinessData(businessId).locked = !getBusinessData(businessId).locked;
|
||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.locked", getBusinessData(businessId).locked, true);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `${getLockedUnlockedEmojiFromBool((getBusinessData(businessId).locked))} Business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}${getLockedUnlockedTextFromBool((getBusinessData(businessId).locked))}!`);
|
||||
}
|
||||
|
||||
@@ -466,10 +477,9 @@ function lockUnlockBusinessCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getBusinessData(businessId).interiorLights = !getBusinessData(businessId).interiorLights;
|
||||
updateBusinessInteriorLightsForOccupants(businessId);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
updateBusinessInteriorLightsForOccupants(businessId);
|
||||
meActionToNearbyPlayers(client, `turns ${toLowerCase(getOnOffFromBool(getBusinessData(businessId).interiorLights))} the business lights`);
|
||||
}
|
||||
|
||||
@@ -493,6 +503,7 @@ function setBusinessEntranceFeeCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getBusinessData(businessId).entranceFee = entranceFee;
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}entrance fee to [#AAAAAAA]$${entranceFee}`);
|
||||
}
|
||||
|
||||
@@ -566,6 +577,8 @@ function setBusinessPickupCommand(command, params, client) {
|
||||
createBusinessEntrancePickup(businessId);
|
||||
createBusinessExitPickup(businessId);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}pickup display to ${getInlineChatColourByName("lightGrey")}${toLowerCase(typeParam)}'!`);
|
||||
}
|
||||
|
||||
@@ -582,7 +595,7 @@ function setBusinessInteriorTypeCommand(command, params, client) {
|
||||
}
|
||||
|
||||
if(isNaN(typeParam)) {
|
||||
let tempBusinessLocation = new serverClasses.businessLocationData(false);
|
||||
let tempBusinessLocation = new BusinessLocationData(false);
|
||||
|
||||
if(toLowerCase(typeParam) == "none") {
|
||||
tempBusinessLocation.exitPosition = toVector3(0.0, 0.0, 0.0);
|
||||
@@ -641,6 +654,7 @@ function setBusinessBlipCommand(command, params, client) {
|
||||
}
|
||||
|
||||
resetBusinessBlips();
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}blip display to ${getInlineChatColourByName("lightGrey")}${toLowerCase(typeParam)}`);
|
||||
}
|
||||
@@ -758,6 +772,8 @@ function withdrawFromBusinessCommand(command, params, client) {
|
||||
getBusinessData(businessId).till -= amount;
|
||||
givePlayerCash(client, amount);
|
||||
updatePlayerCash(client);
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messagePlayerSuccess(client, `You withdrew $${amount} from business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} till`);
|
||||
}
|
||||
|
||||
@@ -786,6 +802,8 @@ function setBusinessBuyPriceCommand(command, params, client) {
|
||||
|
||||
getBusinessData(businessId).buyPrice = amount;
|
||||
setEntityData(getBusinessData(businessId).entrancePickup, "vrr.label.price", getBusinessData(businessId).buyPrice, true);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `${getInlineChatColourByName("white")}You set business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name}'s ${getInlineChatColourByName("white")}for-sale price to ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(amount)}`);
|
||||
}
|
||||
|
||||
@@ -815,6 +833,8 @@ function depositIntoBusinessCommand(command, params, client) {
|
||||
getBusinessData(businessId).till += amount;
|
||||
takePlayerCash(client, amount);
|
||||
updatePlayerCash(client);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
messagePlayerSuccess(client, `You deposited $${amount} into business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}till`);
|
||||
}
|
||||
|
||||
@@ -861,6 +881,7 @@ function orderItemForBusinessCommand(command, params, client) {
|
||||
getPlayerData(client).businessOrderValue = value;
|
||||
getPlayerData(client).businessOrderCost = orderTotalCost;
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
showPlayerPrompt(client, VRR_PROMPT_BIZORDER, `Ordering ${amount} ${getPluralForm(getItemTypeData(itemType).name)} (${getItemValueDisplay(itemType, value)}) at $${makeLargeNumberReadable(pricePerItem)} each will cost a total of $${makeLargeNumberReadable(orderTotalCost)}`, "Business Order Cost");
|
||||
}
|
||||
|
||||
@@ -920,6 +941,7 @@ function buyBusinessCommand(command, params, client) {
|
||||
getBusinessData(businessId).buyPrice = 0;
|
||||
|
||||
updateBusinessPickupLabelData(businessId);
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messagePlayerSuccess(client, `You are now the owner of ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name}`);
|
||||
}
|
||||
@@ -948,6 +970,8 @@ function moveBusinessEntranceCommand(command, params, client) {
|
||||
createBusinessEntranceBlip(businessId);
|
||||
createBusinessEntrancePickup(businessId);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}moved business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}entrance to their position`);
|
||||
}
|
||||
|
||||
@@ -975,6 +999,8 @@ function moveBusinessExitCommand(command, params, client) {
|
||||
createBusinessExitBlip(businessId);
|
||||
createBusinessExitPickup(businessId);
|
||||
|
||||
getBusinessData(businessId).needsSaved = true;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}moved business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}exit to their position`);
|
||||
}
|
||||
|
||||
@@ -1240,7 +1266,7 @@ function deleteBusiness(businessId, deletedBy = 0) {
|
||||
|
||||
removePlayersFromBusiness(businessId);
|
||||
|
||||
getServerData().businesses.splice(businessId, 1);
|
||||
getServerData().businesses[businessId] = false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1401,7 +1427,7 @@ function setAllBusinessIndexes() {
|
||||
// ===========================================================================
|
||||
|
||||
function addToBusinessInventory(businessId, itemType, amount, buyPrice) {
|
||||
let tempItemData = new serverClasses.itemData(false);
|
||||
let tempItemData = new ItemData(false);
|
||||
tempItemData.amount = amount;
|
||||
tempItemData.buyPrice = buyPrice;
|
||||
tempItemData.itemType = getItemTypeData(itemType).databaseId;
|
||||
|
||||
@@ -29,7 +29,7 @@ function loadClansFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempClanData = new serverClasses.clanData(dbAssoc);
|
||||
let tempClanData = new ClanData(dbAssoc);
|
||||
//tempClanData.members = loadClanMembersFromDatabase(tempClanData.databaseId);
|
||||
tempClanData.ranks = loadClanRanksFromDatabase(tempClanData.databaseId);
|
||||
tempClans.push(tempClanData);
|
||||
@@ -59,7 +59,7 @@ function loadClanMembersFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempClanData = new serverClasses.clanData(dbAssoc);
|
||||
let tempClanData = new ClanData(dbAssoc);
|
||||
tempClans.push(tempClanData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.Clan]: Clan '${tempClanData.name}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -87,7 +87,7 @@ function loadClanRanksFromDatabase(clanDatabaseId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempClanRankData = new serverClasses.clanRankData(dbAssoc);
|
||||
let tempClanRankData = new ClanRankData(dbAssoc);
|
||||
tempClanRanks.push(tempClanRankData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.Clan]: Clan rank '${tempClanRankData.name}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -104,7 +104,7 @@ function loadClanRanksFromDatabase(clanDatabaseId) {
|
||||
// ===========================================================================
|
||||
|
||||
function createClanRank(clanId, rankId, rankName) {
|
||||
let tempClanRankData = new serverClasses.clanRankData(false);
|
||||
let tempClanRankData = new ClanRankData(false);
|
||||
tempClanRankData.level = rankId;
|
||||
tempClanRankData.name = rankName;
|
||||
tempClanRankData.clan = getClanData(clanId).databaseId;
|
||||
@@ -770,7 +770,7 @@ function createClan(name) {
|
||||
escapedName = escapeDatabaseString(dbConnection, escapedName)
|
||||
queryDatabase(dbConnection, `INSERT INTO clan_main (clan_server, clan_name) VALUES (${getServerId()}, '${escapedName}')`);
|
||||
|
||||
let tempClan = new serverClasses.clanData(false);
|
||||
let tempClan = new ClanData(false);
|
||||
tempClan.databaseId = getDatabaseInsertId(dbConnection);
|
||||
tempClan.name = name;
|
||||
getServerData().clans.push(tempClan);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -434,6 +434,13 @@ function sendPlayerMouseCameraToggle(client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setPlayerMouseCameraState(client, state) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to toggle mouse camera ${getPlayerDisplayForConsole(client)}`);
|
||||
triggerNetworkEvent("vrr.mouseCameraForce", client, state);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendPlayerMouseCursorToggle(client) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Client] Sending signal to toggle mouse cursor ${getPlayerDisplayForConsole(client)}`);
|
||||
triggerNetworkEvent("vrr.mouseCursor", client);
|
||||
@@ -1005,4 +1012,10 @@ function forcePlayerToSyncElementProperties(client, element) {
|
||||
triggerNetworkEvent("vrr.syncElement", client, element.id);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function sendPlayerPedPartsAndProps(client) {
|
||||
triggerNetworkEvent("vrr.ped")
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -247,10 +247,12 @@ function loadCommands() {
|
||||
commandData("r", walkieTalkieChatCommand, "", getStaffFlagValue("none"), true, false),
|
||||
|
||||
commandData("additemtype", createItemTypeCommand, "<name>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemusetype", setItemTypeUseTypeCommand, "<item type> <use type>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemuseval", setItemTypeUseValueCommand, "<item type> <use value>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemorderprice", setItemTypeOrderPriceCommand, "<item type> <price>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemriskmult", setItemTypeRiskMultiplierCommand, "<item type> <risk multiplier>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemtypeusetype", setItemTypeUseTypeCommand, "<item type> <use type>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemtypeuseval", setItemTypeUseValueCommand, "<item type> <use value>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemtypeorderprice", setItemTypeOrderPriceCommand, "<item type> <price>", getStaffFlagValue("manageItems"), true, false),
|
||||
commandData("itemtyperiskmult", setItemTypeRiskMultiplierCommand, "<item type> <risk multiplier>", getStaffFlagValue("manageItems"), true, false),
|
||||
|
||||
commandData("delplritem", deleteItemInPlayerInventoryCommand, "<player name/id> <item slot>", getStaffFlagValue("manageItems"), true, false),
|
||||
],
|
||||
job: [
|
||||
commandData("takejob", takeJobCommand, "", getStaffFlagValue("none"), true, false),
|
||||
@@ -462,7 +464,7 @@ function getCommands() {
|
||||
// ===========================================================================
|
||||
|
||||
function commandData(command, handlerFunction, syntaxString = "", requiredStaffFlags = getStaffFlagValue("none"), requireLogin = true, allowOnDiscord = true, usageHelpMessage) {
|
||||
return new serverClasses.commandData(command, handlerFunction, syntaxString, requiredStaffFlags, requireLogin, allowOnDiscord, usageHelpMessage);
|
||||
return new CommandData(command, handlerFunction, syntaxString, requiredStaffFlags, requireLogin, allowOnDiscord, usageHelpMessage);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -88,7 +88,7 @@ function loadServerConfigFromGameAndPort(gameId, port, mpMod) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempServerConfigData = new serverClasses.serverConfigData(dbAssoc);
|
||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return tempServerConfigData;
|
||||
}
|
||||
@@ -108,7 +108,7 @@ function loadServerConfigFromId(tempServerId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
let tempServerConfigData = serverClasses.serverConfigData(dbAssoc);
|
||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return tempServerConfigData;
|
||||
}
|
||||
@@ -134,62 +134,62 @@ function applyConfigToServer(tempServerConfig) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function saveServerConfigToDatabase(serverConfigData) {
|
||||
function saveServerConfigToDatabase() {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Config]: Saving server ${serverConfigData.databaseId} configuration to database ...`);
|
||||
if(getServerConfig().needsSaved) {
|
||||
let dbConnection = connectToDatabase();
|
||||
if(dbConnection) {
|
||||
let data = [
|
||||
["svr_logo", boolToInt(serverConfigData.showLogo)],
|
||||
["svr_gui", boolToInt(serverConfigData.useGUI)],
|
||||
["svr_start_time_hour", serverConfigData.hour],
|
||||
["svr_start_time_min", serverConfigData.minute],
|
||||
["svr_start_weather", serverConfigData.weather],
|
||||
["svr_start_snow_falling", boolToInt(serverConfigData.fallingSnow)],
|
||||
["svr_start_snow_ground", boolToInt(serverConfigData.groundSnow)],
|
||||
["svr_newchar_pos_x", serverConfigData.newCharacter.spawnPosition.x],
|
||||
["svr_newchar_pos_y", serverConfigData.newCharacter.spawnPosition.y],
|
||||
["svr_newchar_pos_z", serverConfigData.newCharacter.spawnPosition.z],
|
||||
["svr_newchar_rot_z", serverConfigData.newCharacter.spawnHeading],
|
||||
["svr_newchar_skin", serverConfigData.newCharacter.skin],
|
||||
["svr_newchar_money", serverConfigData.newCharacter.money],
|
||||
["svr_gui_col1_r", serverConfigData.guiColour[0]],
|
||||
["svr_gui_col1_g", serverConfigData.guiColour[1]],
|
||||
["svr_gui_col1_b", serverConfigData.guiColour[2]],
|
||||
["svr_connectcam_pos_x", serverConfigData.connectCameraPosition.x],
|
||||
["svr_connectcam_pos_y", serverConfigData.connectCameraPosition.y],
|
||||
["svr_connectcam_pos_z", serverConfigData.connectCameraPosition.z],
|
||||
["svr_connectcam_lookat_x", serverConfigData.connectCameraLookAt.x],
|
||||
["svr_connectcam_lookat_y", serverConfigData.connectCameraLookAt.y],
|
||||
["svr_connectcam_lookat_z", serverConfigData.connectCameraLookAt.z],
|
||||
["svr_charselect_cam_pos_x", serverConfigData.characterSelectCameraPosition.x],
|
||||
["svr_charselect_cam_pos_y", serverConfigData.characterSelectCameraPosition.y],
|
||||
["svr_charselect_cam_pos_z", serverConfigData.characterSelectCameraPosition.z],
|
||||
["svr_charselect_cam_lookat_x", serverConfigData.characterSelectCameraLookAt.x],
|
||||
["svr_charselect_cam_lookat_y", serverConfigData.characterSelectCameraLookAt.y],
|
||||
["svr_charselect_cam_lookat_z", serverConfigData.characterSelectCameraLookAt.z],
|
||||
["svr_charselect_ped_pos_x", serverConfigData.characterSelectPedPosition.x],
|
||||
["svr_charselect_ped_pos_y", serverConfigData.characterSelectPedPosition.y],
|
||||
["svr_charselect_ped_pos_z", serverConfigData.characterSelectPedPosition.z],
|
||||
["svr_charselect_ped_rot_z", serverConfigData.characterSelectPedHeading],
|
||||
["svr_charselect_int", serverConfigData.characterSelectInterior],
|
||||
["svr_charselect_vw", serverConfigData.characterSelectDimension],
|
||||
["svr_inflation_multiplier", serverConfigData.inflationMultiplier],
|
||||
["svr_ac_enabled", serverConfigData.antiCheat.enabled],
|
||||
["svr_ac_check_scripts", serverConfigData.antiCheat.checkGameScripts],
|
||||
["svr_ac_script_wl", serverConfigData.antiCheat.gameScriptWhiteListEnabled],
|
||||
["svr_ac_script_bl", serverConfigData.antiCheat.gameScriptBlackListEnabled],
|
||||
["svr_job_pickups", boolToInt(serverConfigData.createJobPickups)],
|
||||
["svr_job_blips", boolToInt(serverConfigData.createJobBlips)],
|
||||
["svr_biz_pickups", boolToInt(serverConfigData.createBusinessPickups)],
|
||||
["svr_biz_blips", boolToInt(serverConfigData.createBusinessBlips)],
|
||||
["svr_house_pickups", boolToInt(serverConfigData.createHousePickups)],
|
||||
["svr_house_blips", boolToInt(serverConfigData.createHouseBlips)],
|
||||
["svr_intro_music", serverConfigData.intromUsic],
|
||||
["svr_logo", boolToInt(getServerConfig().showLogo)],
|
||||
["svr_gui", boolToInt(getServerConfig().useGUI)],
|
||||
["svr_start_time_hour", getServerConfig().hour],
|
||||
["svr_start_time_min", getServerConfig().minute],
|
||||
["svr_start_weather", getServerConfig().weather],
|
||||
["svr_start_snow_falling", boolToInt(getServerConfig().fallingSnow)],
|
||||
["svr_start_snow_ground", boolToInt(getServerConfig().groundSnow)],
|
||||
["svr_newchar_pos_x", getServerConfig().newCharacter.spawnPosition.x],
|
||||
["svr_newchar_pos_y", getServerConfig().newCharacter.spawnPosition.y],
|
||||
["svr_newchar_pos_z", getServerConfig().newCharacter.spawnPosition.z],
|
||||
["svr_newchar_rot_z", getServerConfig().newCharacter.spawnHeading],
|
||||
["svr_newchar_skin", getServerConfig().newCharacter.skin],
|
||||
["svr_newchar_money", getServerConfig().newCharacter.money],
|
||||
["svr_gui_col1_r", getServerConfig().guiColour[0]],
|
||||
["svr_gui_col1_g", getServerConfig().guiColour[1]],
|
||||
["svr_gui_col1_b", getServerConfig().guiColour[2]],
|
||||
["svr_connectcam_pos_x", getServerConfig().connectCameraPosition.x],
|
||||
["svr_connectcam_pos_y", getServerConfig().connectCameraPosition.y],
|
||||
["svr_connectcam_pos_z", getServerConfig().connectCameraPosition.z],
|
||||
["svr_connectcam_lookat_x", getServerConfig().connectCameraLookAt.x],
|
||||
["svr_connectcam_lookat_y", getServerConfig().connectCameraLookAt.y],
|
||||
["svr_connectcam_lookat_z", getServerConfig().connectCameraLookAt.z],
|
||||
["svr_charselect_cam_pos_x", getServerConfig().characterSelectCameraPosition.x],
|
||||
["svr_charselect_cam_pos_y", getServerConfig().characterSelectCameraPosition.y],
|
||||
["svr_charselect_cam_pos_z", getServerConfig().characterSelectCameraPosition.z],
|
||||
["svr_charselect_cam_lookat_x", getServerConfig().characterSelectCameraLookAt.x],
|
||||
["svr_charselect_cam_lookat_y", getServerConfig().characterSelectCameraLookAt.y],
|
||||
["svr_charselect_cam_lookat_z", getServerConfig().characterSelectCameraLookAt.z],
|
||||
["svr_charselect_ped_pos_x", getServerConfig().characterSelectPedPosition.x],
|
||||
["svr_charselect_ped_pos_y", getServerConfig().characterSelectPedPosition.y],
|
||||
["svr_charselect_ped_pos_z", getServerConfig().characterSelectPedPosition.z],
|
||||
["svr_charselect_ped_rot_z", getServerConfig().characterSelectPedHeading],
|
||||
["svr_charselect_int", getServerConfig().characterSelectInterior],
|
||||
["svr_charselect_vw", getServerConfig().characterSelectDimension],
|
||||
["svr_inflation_multiplier", getServerConfig().inflationMultiplier],
|
||||
["svr_ac_enabled", getServerConfig().antiCheat.enabled],
|
||||
["svr_ac_check_scripts", getServerConfig().antiCheat.checkGameScripts],
|
||||
["svr_ac_script_wl", getServerConfig().antiCheat.gameScriptWhiteListEnabled],
|
||||
["svr_ac_script_bl", getServerConfig().antiCheat.gameScriptBlackListEnabled],
|
||||
["svr_job_pickups", boolToInt(getServerConfig().createJobPickups)],
|
||||
["svr_job_blips", boolToInt(getServerConfig().createJobBlips)],
|
||||
["svr_biz_pickups", boolToInt(getServerConfig().createBusinessPickups)],
|
||||
["svr_biz_blips", boolToInt(getServerConfig().createBusinessBlips)],
|
||||
["svr_house_pickups", boolToInt(getServerConfig().createHousePickups)],
|
||||
["svr_house_blips", boolToInt(getServerConfig().createHouseBlips)],
|
||||
["svr_intro_music", getServerConfig().introMusic],
|
||||
];
|
||||
|
||||
let dbQuery = null;
|
||||
let queryString = createDatabaseUpdateQuery("svr_main", data, `svr_id=${serverConfigData.databaseId}`);
|
||||
let queryString = createDatabaseUpdateQuery("svr_main", data, `svr_id=${serverConfig.databaseId}`);
|
||||
dbQuery = queryDatabase(dbConnection, queryString);
|
||||
|
||||
getServerConfig().needsSaved = false;
|
||||
@@ -203,6 +203,12 @@ function saveServerConfigToDatabase(serverConfigData) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* This is a command handler function.
|
||||
*
|
||||
* @return {ServerConfigData} - Server configuration data
|
||||
*
|
||||
*/
|
||||
function getServerConfig() {
|
||||
return serverConfig;
|
||||
}
|
||||
@@ -256,7 +262,7 @@ function setTimeCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
getServerConfig().hour = minute;
|
||||
getServerConfig().hour = hour;
|
||||
getServerConfig().minute = minute;
|
||||
|
||||
gta.time.hour = getServerConfig().hour;
|
||||
|
||||
@@ -307,4 +307,8 @@ const VRR_NPC_COND_MATCH_EXACT_CASE = 9; // Must match string exactly (c
|
||||
const VRR_BIZ_TYPE_NONE = 0; // None (invalid)
|
||||
const VRR_BIZ_TYPE_NORMAL = 1; // Normal business (sells items)
|
||||
const VRR_BIZ_TYPE_BANK = 2; // Bank
|
||||
const VRR_BIZ_TYPE_PUBLIC = 3; // Public business (Government, public service, etc)
|
||||
const VRR_BIZ_TYPE_PUBLIC = 3; // Public business (Government, public service, etc)
|
||||
|
||||
const VRR_RETURNTO_TYPE_NONE = 0; // "Return to" data is invalid
|
||||
const VRR_RETURNTO_TYPE_ADMINGET = 1; // "Return to" data is from admin teleporting
|
||||
const VRR_RETURNTO_TYPE_SKINSELECT = 2; // "Return to" data is from skin select
|
||||
@@ -243,16 +243,16 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) {
|
||||
vehicle.engine = getVehicleData(vehicle).engine;
|
||||
|
||||
if(getVehicleData(vehicle).buyPrice > 0) {
|
||||
messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for sale! Cost: ${getInlineChatColourByName("lightGrey")}$${getVehicleData(vehicle).buyPrice}`);
|
||||
messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for sale! Cost: ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(getVehicleData(vehicle).buyPrice)}`);
|
||||
messagePlayerTip(client, `Use /vehbuy if you want to buy it.`);
|
||||
resetVehiclePosition(vehicle);
|
||||
} else if(getVehicleData(vehicle).rentPrice > 0) {
|
||||
if(getVehicleData(vehicle).rentedBy != client) {
|
||||
messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for rent! Cost: ${getInlineChatColourByName("lightGrey")}$${getVehicleData(vehicle).rentPrice} per minute`);
|
||||
messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for rent! Cost: ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)} per minute`);
|
||||
messagePlayerTip(client, `Use /vehrent if you want to rent it.`);
|
||||
resetVehiclePosition(vehicle);
|
||||
} else {
|
||||
messagePlayerAlert(client, `You are renting this ${getVehicleName(vehicle)} for ${getInlineChatColourByName("lightGrey")}$${getVehicleData(vehicle).rentPrice} per minute. ${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/stoprent ${getInlineChatColourByName("white")}if you want to stop renting it.`);
|
||||
messagePlayerAlert(client, `You are renting this ${getVehicleName(vehicle)} for ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)} per minute. ${getInlineChatColourByName("white")}Use ${getInlineChatColourByName("lightGrey")}/stoprent ${getInlineChatColourByName("white")}if you want to stop renting it.`);
|
||||
}
|
||||
} else {
|
||||
let ownerName = "Nobody";
|
||||
@@ -365,7 +365,7 @@ function onPlayerDeath(client, position) {
|
||||
setTimeout(function() {
|
||||
if(getPlayerCurrentSubAccount(client).inJail) {
|
||||
let closestJail = getClosestJail(getPlayerPosition(client));
|
||||
client.despawnPlayer();
|
||||
//client.despawnPlayer();
|
||||
getPlayerCurrentSubAccount(client).interior = closestJail.interior;
|
||||
getPlayerCurrentSubAccount(client).dimension = closestJail.dimension;
|
||||
if(getServerGame() == GAME_GTA_IV) {
|
||||
@@ -380,7 +380,7 @@ function onPlayerDeath(client, position) {
|
||||
updatePlayerSpawnedState(client, true);
|
||||
} else {
|
||||
let closestHospital = getClosestHospital(getPlayerPosition(client));
|
||||
client.despawnPlayer();
|
||||
//client.despawnPlayer();
|
||||
getPlayerCurrentSubAccount(client).interior = closestHospital.interior;
|
||||
getPlayerCurrentSubAccount(client).dimension = closestHospital.dimension;
|
||||
if(getServerGame() == GAME_GTA_IV) {
|
||||
@@ -421,21 +421,21 @@ function onPlayerSpawn(client) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Checking ${getPlayerDisplayForConsole(client)}'s player data`);
|
||||
if(!getPlayerData(client)) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)}'s player data is invalid. Kicking them from server.`);
|
||||
client.despawnPlayer();
|
||||
client.disconnect();
|
||||
return false;
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Checking ${getPlayerDisplayForConsole(client)}'s login status`);
|
||||
if(!getPlayerData(client).loggedIn) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} is NOT logged in. Despawning their player.`);
|
||||
client.despawnPlayer();
|
||||
client.disconnect();
|
||||
return false;
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Checking ${getPlayerDisplayForConsole(client)}'s selected character status`);
|
||||
if(getPlayerData(client).currentSubAccount == -1) {
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} has NOT selected a character. Despawning their player.`);
|
||||
client.despawnPlayer();
|
||||
client.disconnect();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -534,22 +534,25 @@ function onPlayerSpawn(client) {
|
||||
sendPlayerEnterPropertyKey(client, keyId.key);
|
||||
}
|
||||
|
||||
if(isGTAIV()) {
|
||||
setEntityData(client.player, "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true);
|
||||
setEntityData(client.player, "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true);
|
||||
//if(isGTAIV()) {
|
||||
// setEntityData(client.player, "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true);
|
||||
// setEntityData(client.player, "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true);
|
||||
// setEntityData(client.player, "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true);
|
||||
// setEntityData(client.player, "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true);
|
||||
//}
|
||||
|
||||
setEntityData(client.player, "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true);
|
||||
setEntityData(client.player, "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true);
|
||||
setEntityData(client.player, "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true);
|
||||
setEntityData(client.player, "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true);
|
||||
setEntityData(client.player, "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true);
|
||||
if(isGTAIV()) {
|
||||
sendPlayerPedPartsAndProps(client);
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped state to ready`);
|
||||
|
||||
@@ -37,7 +37,7 @@ function loadHousesFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempHouseData = new serverClasses.houseData(dbAssoc);
|
||||
let tempHouseData = new HouseData(dbAssoc);
|
||||
tempHouses.push(tempHouseData);
|
||||
logToConsole(LOG_VERBOSE, `[VRR.House]: House '${tempHouseData.description}' (ID ${tempHouseData.databaseId}) loaded!`);
|
||||
}
|
||||
@@ -62,7 +62,7 @@ function loadHousesFromDatabase() {
|
||||
*
|
||||
*/
|
||||
function createHouseCommand(command, params, client) {
|
||||
let entranceLocation = new serverClasses.houseLocationData(false);
|
||||
let entranceLocation = new HouseLocationData(false);
|
||||
entranceLocation.entrancePosition = getPlayerPosition(client);
|
||||
entranceLocation.entranceRotation = 0.0;
|
||||
entranceLocation.entrancePickupModel = getGameConfig().pickupModels[getServerGame()].house;
|
||||
@@ -82,10 +82,10 @@ function createHouseCommand(command, params, client) {
|
||||
|
||||
saveHouseToDatabase(houseId-1);
|
||||
|
||||
createHouseEntrancePickup(houseId);
|
||||
createHouseExitPickup(houseId);
|
||||
createHouseEntranceBlip(houseId);
|
||||
createHouseExitBlip(houseId);
|
||||
createHouseEntrancePickup(houseId-1);
|
||||
createHouseExitPickup(houseId-1);
|
||||
createHouseEntranceBlip(houseId-1);
|
||||
createHouseExitBlip(houseId-1);
|
||||
|
||||
//getHouseData(houseId).needsSaved = true;
|
||||
|
||||
@@ -382,7 +382,7 @@ function setHouseInteriorTypeCommand(command, params, client) {
|
||||
}
|
||||
|
||||
if(isNaN(typeParam)) {
|
||||
let tempHouseLocation = new serverClasses.houseLocationData(false);
|
||||
let tempHouseLocation = new HouseLocationData(false);
|
||||
|
||||
if(toLowerCase(typeParam) == "none") {
|
||||
tempHouseLocation.exitPosition = toVector3(0.0, 0.0, 0.0);
|
||||
@@ -591,7 +591,7 @@ function deleteHouse(houseId, whoDeleted = 0) {
|
||||
|
||||
removePlayersFromHouse(houseId);
|
||||
|
||||
getServerData().houses.splice(houseId, 1);
|
||||
getServerData().houses[houseId] = false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -620,7 +620,7 @@ function removePlayerFromHouses(client) {
|
||||
*
|
||||
*/
|
||||
function createHouse(description, entranceLocation) {
|
||||
let tempHouseData = new serverClasses.houseData(false);
|
||||
let tempHouseData = new HouseData(false);
|
||||
tempHouseData.description = description;
|
||||
|
||||
tempHouseData.entrancePosition = entranceLocation.entrancePosition;
|
||||
|
||||
@@ -31,7 +31,7 @@ function loadItemsFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbFetchAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempItemData = new serverClasses.itemData(dbFetchAssoc);
|
||||
let tempItemData = new ItemData(dbFetchAssoc);
|
||||
tempItems.push(tempItemData);
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ function loadItemTypesFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(getQueryNumRows(dbQuery) > 0) {
|
||||
while(dbFetchAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempItemTypeData = new serverClasses.itemTypeData(dbFetchAssoc);
|
||||
let tempItemTypeData = new ItemTypeData(dbFetchAssoc);
|
||||
tempItemTypes.push(tempItemTypeData);
|
||||
}
|
||||
}
|
||||
@@ -68,7 +68,7 @@ function loadItemTypesFromDatabase() {
|
||||
// ===========================================================================
|
||||
|
||||
function createItem(itemTypeId, value, ownerType, ownerId, amount=1) {
|
||||
let tempItemData = new serverClasses.itemData(false);
|
||||
let tempItemData = new ItemData(false);
|
||||
tempItemData.itemType = getItemTypeData(itemTypeId).databaseId;
|
||||
tempItemData.ownerType = ownerType;
|
||||
tempItemData.ownerId = ownerId;
|
||||
@@ -991,18 +991,20 @@ function getPlayerFirstEmptyHotBarSlot(client) {
|
||||
// ===========================================================================
|
||||
|
||||
function cachePlayerHotBarItems(client) {
|
||||
if(!isPlayerWorking(client)) {
|
||||
for(let i = 0 ; i <= 9 ; i++) {
|
||||
getPlayerData(client).hotBarItems[i] = -1;
|
||||
}
|
||||
if(isPlayerWorking(client)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for(let i in getServerData().items) {
|
||||
if(getItemData(i).ownerType == VRR_ITEM_OWNER_PLAYER) {
|
||||
if(getItemData(i).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
let firstSlot = getPlayerFirstEmptyHotBarSlot(client);
|
||||
if(firstSlot != -1) {
|
||||
getPlayerData(client).hotBarItems[firstSlot] = i;
|
||||
}
|
||||
for(let i = 0 ; i <= 9 ; i++) {
|
||||
getPlayerData(client).hotBarItems[i] = -1;
|
||||
}
|
||||
|
||||
for(let i in getServerData().items) {
|
||||
if(getItemData(i).ownerType == VRR_ITEM_OWNER_PLAYER) {
|
||||
if(getItemData(i).ownerId == getPlayerCurrentSubAccount(client).databaseId) {
|
||||
let firstSlot = getPlayerFirstEmptyHotBarSlot(client);
|
||||
if(firstSlot != -1) {
|
||||
getPlayerData(client).hotBarItems[firstSlot] = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1067,7 +1069,8 @@ function deleteItem(itemId) {
|
||||
if(getItemData(itemId).databaseId > 0) {
|
||||
quickDatabaseQuery(`DELETE FROM item_main WHERE item_id = ${getItemData(itemId).databaseId}`);
|
||||
}
|
||||
getServerData().items.splice(itemId, 1);
|
||||
getServerData().items[itemId] = false;
|
||||
setItemDataIndexes();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1285,14 +1288,12 @@ function saveItemToDatabase(itemId) {
|
||||
// ===========================================================================
|
||||
|
||||
function storePlayerItemsInJobLocker(client) {
|
||||
for(let i in getPlayerData(client).hotBarItems) {
|
||||
//if(getPlayerData(client).hotBarItems[i] != -1) {
|
||||
getPlayerData(client).jobLockerCache[i] = getPlayerData(client).hotBarItems[i];
|
||||
getPlayerData(client).hotBarItems[i] = -1;
|
||||
//}
|
||||
for(let i = 0 ; i <= 8 ; i++) {
|
||||
getPlayerData(client).jobLockerCache[i] = getPlayerData(client).hotBarItems[i];
|
||||
getPlayerData(client).hotBarItems[i] = -1;
|
||||
}
|
||||
|
||||
cachePlayerHotBarItems(client);
|
||||
//cachePlayerHotBarItems(client);
|
||||
updatePlayerHotBar(client);
|
||||
}
|
||||
|
||||
@@ -1305,15 +1306,12 @@ function restorePlayerJobLockerItems(client) {
|
||||
}
|
||||
}
|
||||
|
||||
for(let i in getPlayerData(client).jobLockerCache) {
|
||||
//if(getPlayerData(client).jobLockerCache[i] != -1) {
|
||||
getPlayerData(client).hotBarItems[i] = getPlayerData(client).jobLockerCache[i];
|
||||
getPlayerData(client).jobLockerCache[i] = -1;
|
||||
//}
|
||||
for(let i = 0 ; i <= 8 ; i++) {
|
||||
getPlayerData(client).hotBarItems[i] = getPlayerData(client).jobLockerCache[i];
|
||||
getPlayerData(client).jobLockerCache[i] = -1;
|
||||
}
|
||||
|
||||
cachePlayerHotBarItems(client);
|
||||
|
||||
updatePlayerHotBar(client);
|
||||
}
|
||||
|
||||
@@ -1431,7 +1429,44 @@ function toggleItemEnabledCommand(command, params, client) {
|
||||
}
|
||||
|
||||
getItemData(getPlayerActiveItem(client)).enabled = !getItemData(getPlayerActiveItem(client)).enabled;
|
||||
messagePlayerNormal(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your ${getItemName(getPlayerActiveItem(client))} in slot ${getPlayerActiveItemSlot(client)} ${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getPlayerActiveItem(client))}`)
|
||||
messagePlayerNormal(client, `You turned ${getBoolRedGreenInlineColour(getItemData(itemIndex).enabled)}${toUpperCase(getOnOffFromBool(getItemData(itemIndex).enabled))} ${getInlineChatColourByName("white")}your ${getItemName(getPlayerActiveItem(client))} in slot ${getPlayerActiveItemSlot(client)} ${getInlineChatColourByName("lightGrey")}${getItemValueDisplayForItem(getPlayerActiveItem(client))}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function deleteItemInPlayerInventoryCommand(command, params, client) {
|
||||
if(areParamsEmpty(params)) {
|
||||
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
||||
return false;
|
||||
}
|
||||
|
||||
let splitParams = params.split(" ");
|
||||
let targetClient = getPlayerFromParams(splitParams[0]);
|
||||
let hotBarSlot = splitParams[1];
|
||||
|
||||
if(isNaN(hotBarSlot)) {
|
||||
messagePlayerError(client, `The item slot must be a number!`);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(toInteger(hotBarSlot) <= 0 || toInteger(hotBarSlot) > 9) {
|
||||
messagePlayerError(client, `The item slot must be between 1 and 9!`);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getPlayerData(client).hotBarItems[hotBarSlot-1] == -1) {
|
||||
messagePlayerError(client, `${getCharacterFullName(client)} doesn't have anything in that slot!`);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(getItemData(getPlayerData(client).hotBarItems[hotBarSlot-1])) {
|
||||
messagePlayerError(client, `${getCharacterFullName(client)} doesn't have anything in that slot!`);
|
||||
return false;
|
||||
}
|
||||
|
||||
let tempName = getItemTypeData(getItemData(getPlayerData(client).hotBarItems[hotBarSlot-1]).itemTypeIndex).name
|
||||
deleteItem(getPlayerData(client).hotBarItems[hotBarSlot-1]);
|
||||
messagePlayerSuccess(client, `You deleted the ${getInlineChatColourByName("lightGrey")}${tempName} ${getInlineChatColourByName("white")}item in ${getInlineChatColourByName("lightGrey")}${getCharacterFullName(client)}'s ${getInlineChatColourByName("white")}inventory`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -39,7 +39,7 @@ function loadJobsFromDatabase() {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempJobData = new serverClasses.jobData(dbAssoc);
|
||||
let tempJobData = new JobData(dbAssoc);
|
||||
tempJobData.locations = loadJobLocationsFromDatabase(tempJobData.databaseId);
|
||||
tempJobData.equipment = loadJobEquipmentsFromDatabase(tempJobData.databaseId);
|
||||
tempJobData.uniforms = loadJobUniformsFromDatabase(tempJobData.databaseId);
|
||||
@@ -95,7 +95,7 @@ function loadJobEquipmentsFromDatabase(jobDatabaseId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempJobEquipmentData = new serverClasses.jobEquipmentData(dbAssoc);
|
||||
let tempJobEquipmentData = new JobEquipmentData(dbAssoc);
|
||||
tempJobEquipmentData.items = loadJobEquipmentItemsFromDatabase(tempJobEquipmentData.databaseId);
|
||||
tempJobEquipments.push(tempJobEquipmentData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job]: Job equipment '${tempJobEquipmentData.name}' loaded from database successfully!`);
|
||||
@@ -125,7 +125,7 @@ function loadJobLocationsFromDatabase(jobDatabaseId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempJobLocationData = new serverClasses.jobLocationData(dbAssoc);
|
||||
let tempJobLocationData = new JobLocationData(dbAssoc);
|
||||
tempJobLocations.push(tempJobLocationData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job]: Job location '${tempJobLocationData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -154,7 +154,7 @@ function loadJobUniformsFromDatabase(jobDatabaseId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempJobUniformData = new serverClasses.jobUniformData(dbAssoc);
|
||||
let tempJobUniformData = new JobUniformData(dbAssoc);
|
||||
tempJobUniforms.push(tempJobUniformData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job]: Job uniform '${tempJobUniformData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -183,7 +183,7 @@ function loadJobEquipmentItemsFromDatabase(jobEquipmentDatabaseId) {
|
||||
if(dbQuery) {
|
||||
if(dbQuery.numRows > 0) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempJobEquipmentItemData = new serverClasses.jobEquipmentItemData(dbAssoc);
|
||||
let tempJobEquipmentItemData = new JobEquipmentItemData(dbAssoc);
|
||||
tempJobEquipmentItems.push(tempJobEquipmentItemData);
|
||||
logToConsole(LOG_DEBUG, `[VRR.Job]: Job equipment item '${tempJobEquipmentItemData.databaseId}' loaded from database successfully!`);
|
||||
}
|
||||
@@ -1363,7 +1363,7 @@ function setAllJobDataIndexes() {
|
||||
// ===========================================================================
|
||||
|
||||
function createJobLocation(jobId, position, interior, dimension) {
|
||||
let jobLocationData = new serverClasses.jobLocationData(false);
|
||||
let jobLocationData = new JobLocationData(false);
|
||||
jobLocationData.position = position;
|
||||
jobLocationData.job = getJobData(jobId).databaseId;
|
||||
jobLocationData.interior = interior;
|
||||
|
||||
@@ -70,7 +70,7 @@ function removeKeyBindCommand(command, params, client) {
|
||||
// ===========================================================================
|
||||
|
||||
function addPlayerKeyBind(client, keyId, tempCommand, tempParams) {
|
||||
let keyBindData = new serverClasses.keyBindData(false, keyId, `${tempCommand} ${tempParams}`);
|
||||
let keyBindData = new KeyBindData(false, keyId, `${tempCommand} ${tempParams}`);
|
||||
getPlayerData(client).accountData.keyBinds.push(keyBindData);
|
||||
sendAddAccountKeyBindToClient(client, keyId, KEYSTATE_UP);
|
||||
|
||||
|
||||
@@ -543,10 +543,10 @@ function getPlayerCommand(command, params, client) {
|
||||
|
||||
removePlayerFromVehicle(targetClient);
|
||||
|
||||
getPlayerData(targetClient).returnToPosition = getPlayerPosition(targetClient);
|
||||
getPlayerData(targetClient).returnToHeading = getPlayerPosition(targetClient);
|
||||
getPlayerData(targetClient).returnToDimension = getPlayerDimension(targetClient);
|
||||
getPlayerData(targetClient).returnToInterior = getPlayerInterior(targetClient);
|
||||
//getPlayerData(targetClient).returnToPosition = getPlayerPosition(targetClient);
|
||||
//getPlayerData(targetClient).returnToHeading = getPlayerPosition(targetClient);
|
||||
//getPlayerData(targetClient).returnToDimension = getPlayerDimension(targetClient);
|
||||
//getPlayerData(targetClient).returnToInterior = getPlayerInterior(targetClient);
|
||||
|
||||
if(isPlayerInAnyHouse(targetClient)) {
|
||||
getPlayerData(targetClient).returnToHouse = getEntityData(client, "vrr.inHouse");
|
||||
|
||||
@@ -3047,6 +3047,51 @@ let gameData = {
|
||||
["sitback", 0, 169, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_BACK],
|
||||
],
|
||||
[ // GTA SA
|
||||
["walk", 0, 0, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["jog", 0, 1, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["look1", 0, 4, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["holdrifle", 0, 11, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["talk1", 0, 12, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["wave1", 0, 13, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["swim1", 0, 14, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["die1", 0, 15, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["die2", 0, 16, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["diehead", 0, 19, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["diestomach", 0, 20, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["choke", 0, 21, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["remotepress", 0, 48, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["pickup1", 0, 99, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["pickup2", 0, 100, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["backhandright", 0, 103, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["backhandleft", 0, 104, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["knockback", 0, 105, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["idle1", 0, 135, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["knockback", 0, 105, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["cower", 0, 141, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["handsup", 0, 142, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["fucku", 0, 144, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["phoneout", 0, 145, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["phonein", 0, 146, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["phonetalk", 0, 146, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["sit1", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["atm", 0, 151, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["mindtrick", 0, 153, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["faceshocked", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["facesurprised", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["faceconfused", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["faceangry", 0, 159, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["facetalk1", 0, 160, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["look2", 0, 165, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["gestureno", 0, 166, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["gestureyes", 0, 167, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["wave2", 0, 168, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["snort", 0, 169, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_NONE],
|
||||
["sitright", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_RIGHT],
|
||||
["sitleft", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_LEFT],
|
||||
["sitforward", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_FORWARD],
|
||||
["sitback", 0, 150, VRR_ANIMTYPE_ADD, 0.0, null, null, null, null, VRR_ANIMMOVE_BACK],
|
||||
|
||||
/*
|
||||
["talk", "PED", "IDLE_CHAT", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["fucku", "PED", "FUCKU", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["taichi", "PARK", "Tai_Chi_Loop", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
@@ -3063,10 +3108,9 @@ let gameData = {
|
||||
["sit2", "BEACH", "ParkSit_M_loop", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["sit3", "BEACH", "ParkSit_W_loop", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["sit4", "BEACH", "SitnWait_loop_W", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["sitleft", "FOOD", "FF_Sit_In_L", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["sitright", "FOOD", "FF_Sit_In_R", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["scratch", "MISC","Scratchballs_01", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
["standup", "ped", "SEAT_up", VRR_ANIMTYPE_ADD, 0.0, null, null, null, null],
|
||||
*/
|
||||
],
|
||||
null,
|
||||
[ // GTA IV
|
||||
@@ -4841,6 +4885,13 @@ function getElementHeading(element) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementInterior(element, interior) {
|
||||
setEntityData(element, "vrr.interior", interior, true);
|
||||
forcePlayerToSyncElementProperties(null, element);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setElementCollisionsEnabled(element, state) {
|
||||
triggerNetworkEvent("vrr.elementCollisions", getClientFromSyncerId(element.syncer), element.id, state);
|
||||
}
|
||||
|
||||
@@ -889,7 +889,7 @@ let gameData = {
|
||||
false,
|
||||
|
||||
[ // Mafia 1
|
||||
//new serverClasses.removedWorldObjectData("fraightback04", toVector3(1229.88, -84.8012, 13.4004), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
|
||||
//new RemovedWorldObjectData("fraightback04", toVector3(1229.88, -84.8012, 13.4004), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
|
||||
],
|
||||
|
||||
[ // Mafia 2
|
||||
|
||||
@@ -27,7 +27,7 @@ function loadRadioStationsFromDatabase() {
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempRadioStationData = new serverClasses.radioStationData(dbAssoc);
|
||||
let tempRadioStationData = new RadioStationData(dbAssoc);
|
||||
tempRadioStations.push(tempRadioStationData);
|
||||
}
|
||||
freeDatabaseQuery(dbQuery);
|
||||
|
||||
@@ -24,7 +24,7 @@ function loadSubAccountFromName(firstName, lastName) {
|
||||
if(dbQuery) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return new serverClasses.subAccountData(dbAssoc);
|
||||
return new SubAccountData(dbAssoc);
|
||||
}
|
||||
disconnectFromDatabase(dbConnection);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ function loadSubAccountFromId(subAccountId) {
|
||||
if(dbQuery) {
|
||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||
freeDatabaseQuery(dbQuery);
|
||||
return new serverClasses.subAccountData(dbAssoc);
|
||||
return new SubAccountData(dbAssoc);
|
||||
}
|
||||
disconnectFromDatabase(dbConnection);
|
||||
}
|
||||
@@ -62,7 +62,7 @@ function loadSubAccountsFromAccount(accountId) {
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempSubAccount = new serverClasses.subAccountData(dbAssoc);
|
||||
let tempSubAccount = new SubAccountData(dbAssoc);
|
||||
|
||||
// Make sure skin is valid
|
||||
if(tempSubAccount.skin == -1) {
|
||||
@@ -425,7 +425,7 @@ function switchCharacterCommand(command, params, client) {
|
||||
|
||||
resetClientStuff(client);
|
||||
|
||||
client.despawnPlayer();
|
||||
//client.despawnPlayer();
|
||||
getPlayerData(client).switchingCharacter = true;
|
||||
//spawnPlayer(client, getServerConfig().characterSelectPedPosition, getServerConfig().characterSelectPedHeading, getPlayerCurrentSubAccount(client).skin, getServerConfig().characterSelectInterior, getServerConfig().characterSelectDimension);
|
||||
//showCharacterSelectCameraToPlayer(client);
|
||||
|
||||
@@ -25,13 +25,55 @@ function saveAllServerDataToDatabase() {
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, "[VRR.Utilities]: Saving all server data to database ...");
|
||||
saveAllClientsToDatabase();
|
||||
saveAllClansToDatabase();
|
||||
saveAllHousesToDatabase();
|
||||
saveAllBusinessesToDatabase();
|
||||
saveServerConfigToDatabase(getServerConfig());
|
||||
saveAllVehiclesToDatabase();
|
||||
saveAllItemsToDatabase();
|
||||
|
||||
try {
|
||||
saveAllClientsToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save clients to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveAllClansToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save clans to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveAllHousesToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save houses to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveAllBusinessesToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save businesses to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveServerConfigToDatabase(getServerConfig());
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save server config to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveAllVehiclesToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save vehicles to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveAllItemsToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save items to database: ${error}`);
|
||||
}
|
||||
|
||||
try {
|
||||
saveServerConfigToDatabase();
|
||||
} catch(error) {
|
||||
logToConsole(LOG_ERROR, `Could not save server config to database: ${error}`);
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, "[VRR.Utilities]: Saved all server data to database!");
|
||||
}
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ function makeReadableTime(hour, minute) {
|
||||
meridianStr = "AM";
|
||||
}
|
||||
|
||||
if(hour > 12) {
|
||||
if(hour > 11) {
|
||||
let actualHour = hour-12;
|
||||
if(actualHour < 10) {
|
||||
hourStr = "0" + toString(hour-12);
|
||||
|
||||
@@ -28,7 +28,7 @@ function loadVehiclesFromDatabase() {
|
||||
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
||||
if(dbQuery) {
|
||||
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
|
||||
let tempVehicleData = new serverClasses.vehicleData(dbAssoc);
|
||||
let tempVehicleData = new VehicleData(dbAssoc);
|
||||
tempVehicles.push(tempVehicleData);
|
||||
}
|
||||
freeDatabaseQuery(dbQuery);
|
||||
@@ -213,7 +213,7 @@ function createVehicleCommand(command, params, client) {
|
||||
}
|
||||
|
||||
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
||||
let vehicle = createPermanentVehicle(modelId, frontPos, getPlayerHeading(client));
|
||||
let vehicle = createPermanentVehicle(modelId, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}!`);
|
||||
}
|
||||
@@ -234,7 +234,7 @@ function createTemporaryVehicleCommand(command, params, client) {
|
||||
}
|
||||
|
||||
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
||||
let vehicle = createTemporaryVehicle(modelId, frontPos, getPlayerHeading(client));
|
||||
let vehicle = createTemporaryVehicle(modelId, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a temporary ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}`);
|
||||
}
|
||||
@@ -877,6 +877,24 @@ function setVehicleOwnerCommand(command, params, client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehiclePublicCommand(command, params, client) {
|
||||
if(!isPlayerInAnyVehicle(client)) {
|
||||
messagePlayerError(client, "You need to be in a vehicle!");
|
||||
return false;
|
||||
}
|
||||
|
||||
let vehicle = getPlayerVehicle(client);
|
||||
|
||||
getVehicleData(vehicle).ownerType = VRR_VEHOWNER_PUBLIC;
|
||||
getVehicleData(vehicle).ownerId = 0;
|
||||
|
||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set their ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)} ${getInlineChatColourByName("white")}a public vehicle!`);
|
||||
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleRentPriceCommand(command, params, client) {
|
||||
if(!isPlayerInAnyVehicle(client)) {
|
||||
messagePlayerError(client, "You need to be in a vehicle!");
|
||||
@@ -1089,7 +1107,7 @@ function reloadAllVehiclesCommand(command, params, client) {
|
||||
|
||||
function respawnAllVehiclesCommand(command, params, client) {
|
||||
for(let i in getServerData().vehicles) {
|
||||
respawnVehicle(vehicle);
|
||||
respawnVehicle(getServerData().vehicles[i]);
|
||||
}
|
||||
|
||||
//spawnAllVehicles();
|
||||
@@ -1127,7 +1145,7 @@ function respawnVehicle(vehicle) {
|
||||
// ===========================================================================
|
||||
|
||||
function spawnVehicle(vehicleData) {
|
||||
let vehicle = gta.createVehicle(vehicleData.model, vehicleData.spawnPosition, vehicleData.spawnRotation);
|
||||
let vehicle = createGameVehicle(vehicleData.model, vehicleData.spawnPosition, vehicleData.spawnRotation);
|
||||
addToWorld(vehicle);
|
||||
|
||||
if(doesGameHaveServerElements()) {
|
||||
@@ -1140,20 +1158,26 @@ function spawnVehicle(vehicleData) {
|
||||
vehicle.colour4 = vehicleData.colour4;
|
||||
}
|
||||
|
||||
vehicle.engine = intToBool(vehicleData.engine);
|
||||
if(vehicleData.spawnLocked) {
|
||||
vehicle.engine = false;
|
||||
} else {
|
||||
vehicle.engine = intToBool(vehicleData.engine);
|
||||
}
|
||||
|
||||
vehicle.locked = intToBool(vehicleData.locked);
|
||||
|
||||
//vehicle.lights = intToBool(vehicleData.lights);
|
||||
//vehicle.health = vehicleData.health;
|
||||
|
||||
//vehicle.position = vehicleData.spawnPosition;
|
||||
vehicle.heading = vehicleData.spawnRotation;
|
||||
|
||||
vehicle.locked = intToBool(vehicleData.locked);
|
||||
}
|
||||
|
||||
vehicleData.vehicle = vehicle;
|
||||
|
||||
setEntityData(vehicle, "vrr.livery", vehicleData.livery);
|
||||
setEntityData(vehicle, "vrr.upgrades", vehicleData.extras);
|
||||
setEntityData(vehicle, "vrr.interior", vehicleData.interior);
|
||||
|
||||
return vehicle;
|
||||
}
|
||||
@@ -1212,15 +1236,17 @@ async function getPlayerNewVehicle(client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createNewDealershipVehicle(model, spawnPosition, spawnRotation, price, dealershipId) {
|
||||
function createNewDealershipVehicle(model, spawnPosition, spawnRotation, price, dealershipId, interior = 0, dimension = 0) {
|
||||
let vehicle = createGameVehicle(model, spawnPosition, spawnRotation);
|
||||
if(!vehicle) {
|
||||
return false;
|
||||
}
|
||||
setVehicleHeading(vehicle, spawnRotation);
|
||||
setElementInterior(vehicle, interior);
|
||||
setElementDimension(vehicle, dimension);
|
||||
addToWorld(vehicle);
|
||||
|
||||
let tempVehicleData = new serverClasses.vehicleData(false, vehicle);
|
||||
let tempVehicleData = new VehicleData(false, vehicle);
|
||||
tempVehicleData.buyPrice = price;
|
||||
tempVehicleData.spawnLocked = true;
|
||||
tempVehicleData.spawnPosition = spawnPosition;
|
||||
@@ -1235,12 +1261,14 @@ function createNewDealershipVehicle(model, spawnPosition, spawnRotation, price,
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createTemporaryVehicle(modelId, position, heading) {
|
||||
function createTemporaryVehicle(modelId, position, heading, interior = 0, dimension = 0) {
|
||||
let vehicle = createGameVehicle(modelId, position, heading);
|
||||
setVehicleHeading(vehicle, heading);
|
||||
setElementInterior(vehicle, interior);
|
||||
setElementDimension(vehicle, dimension);
|
||||
addToWorld(vehicle);
|
||||
|
||||
let tempVehicleData = new serverClasses.vehicleData(false, vehicle);
|
||||
let tempVehicleData = new VehicleData(false, vehicle);
|
||||
tempVehicleData.databaseId = -1;
|
||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
||||
@@ -1250,12 +1278,14 @@ function createTemporaryVehicle(modelId, position, heading) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function createPermanentVehicle(modelId, position, heading) {
|
||||
function createPermanentVehicle(modelId, position, heading, interior = 0, dimension = 0) {
|
||||
let vehicle = createGameVehicle(modelId, position, heading);
|
||||
setVehicleHeading(vehicle, heading);
|
||||
setElementInterior(vehicle, interior);
|
||||
setElementDimension(vehicle, dimension);
|
||||
addToWorld(vehicle);
|
||||
|
||||
let tempVehicleData = new serverClasses.vehicleData(false, vehicle);
|
||||
let tempVehicleData = new VehicleData(false, vehicle);
|
||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user