Mafia Connected support

This commit is contained in:
Vortrex
2021-08-14 20:49:47 -05:00
parent ebd8a91c87
commit 4fe9c45e0a
39 changed files with 2084 additions and 1669 deletions

View File

@@ -58,7 +58,6 @@ function addAllEventHandlers() {
function onResourceStart(event, resource) {
sendResourceStartedSignalToServer();
setUpInitialGame();
garbageCollectorInterval = setInterval(collectAllGarbage, 1000*60);
}

View File

@@ -19,10 +19,10 @@ let invalidValueColour = [200, 200, 200];
let focusedColourOffset = 50;
let windowAlpha = 185;
let windowTitleAlpha = 200;
let buttonAlpha = 200;
let textInputAlpha = 200;
let windowColour = (typeof gta == "undefined") ? [24, 24, 24, 150] : [0, 0, 0, 150];
let windowTitleAlpha = 180;
let buttonAlpha = 180;
let textInputAlpha = 180;
// ===========================================================================
@@ -156,7 +156,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating login GUI ...`);
login.window = mexui.window(game.width/2-150, game.height/2-129, 300, 258, 'LOGIN', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -235,7 +235,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating two factor auth GUI ...`);
twoFactorAuth.window = mexui.window(game.width/2-150, game.height/2-129, 300, 258, 'LOGIN', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -313,7 +313,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating new character GUI ...`);
newCharacter.window = mexui.window(game.width/2-130, game.height/2-100, 300, 200, 'Character Name', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -405,7 +405,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating register GUI ...`);
register.window = mexui.window(game.width/2-130, game.height/2-125, 300, 250, 'Register', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -472,7 +472,7 @@ function initGUI() {
},
placeholder: {
backgroundColour: toColour(0, 0, 0, 120),
textColour: toColour(150, 150, 150, 200),
textColour: toColour(200, 200, 200, 200),
textSize: 10.0,
textFont: robotoFont,
}
@@ -518,7 +518,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating error GUI ...`);
errorDialog.window = mexui.window(game.width/2-200, game.height/2-70, 500, 140, 'ERROR', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -564,7 +564,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Created prompt GUI ...`);
yesNoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Question', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
transitionTime: 500,
},
title: {
@@ -623,7 +623,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating info dialog GUI ...`);
infoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Information', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
},
title: {
textSize: 11.0,
@@ -668,7 +668,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating list dialog GUI ...`);
listDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 500, 'List', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
},
title: {
textSize: 11.0,
@@ -699,7 +699,7 @@ function initGUI() {
listDialog.listGrid = listDialog.window.grid(5, 25, 390, 450, {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
},
column: {
lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
@@ -709,7 +709,7 @@ function initGUI() {
textColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
},
cell: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
textColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha),
},
row: {
@@ -726,7 +726,7 @@ function initGUI() {
logToConsole(LOG_DEBUG, `[VRR.GUI] Creating character select GUI ...`);
characterSelect.window = mexui.window(game.width/2-215, game.height/2-83, 430, 190, 'Select Character', {
main: {
backgroundColour: toColour(0, 0, 0, windowAlpha),
backgroundColour: toColour(windowColour[0], windowColour[1], windowColour[2], windowColour[3]),
},
title: {
textSize: 11.0,

View File

@@ -10,7 +10,7 @@
let itemActionDelayDuration = 0;
let itemActionDelayStart = 0;
let itemActionDelayEnabled = false;
let itemActionDelayPosition = toVector2(gta.width/2-100, gta.height-10);
let itemActionDelayPosition = toVector2(game.width/2-100, game.height-10);
let itemActionDelaySize = toVector2(200, 5);
// ===========================================================================

View File

@@ -37,28 +37,32 @@ function setLocalPlayerWorkingState(tempWorking) {
function showJobRouteStop() {
logToConsole(LOG_DEBUG, `[VRR.Job] Showing route stop`);
if(gta.game == GAME_GTA_SA) {
jobRouteStopSphere = gta.createPickup(1318, position, 1);
} else {
jobRouteStopSphere = gta.createSphere(position, 3);
jobRouteStopSphere.colour = colour;
}
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
if(gta.game == GAME_GTA_SA) {
jobRouteStopSphere = gta.createPickup(1318, position, 1);
} else {
jobRouteStopSphere = gta.createSphere(position, 3);
jobRouteStopSphere.colour = colour;
}
jobRouteStopBlip = gta.createBlip(position, 0, 2, colour);
jobRouteStopBlip = gta.createBlip(position, 0, 2, colour);
}
}
// ===========================================================================
function showJobRouteStop(position, colour) {
logToConsole(LOG_DEBUG, `[VRR.Job] Showing route stop`);
if(gta.game == GAME_GTA_SA) {
jobRouteStopSphere = gta.createPickup(1318, position, 1);
} else {
jobRouteStopSphere = gta.createSphere(position, 3);
jobRouteStopSphere.colour = colour;
}
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
if(gta.game == GAME_GTA_SA) {
jobRouteStopSphere = gta.createPickup(1318, position, 1);
} else {
jobRouteStopSphere = gta.createSphere(position, 3);
jobRouteStopSphere.colour = colour;
}
jobRouteStopBlip = gta.createBlip(position, 0, 2, colour);
jobRouteStopBlip = gta.createBlip(position, 0, 2, colour);
}
}
// ===========================================================================

View File

@@ -83,7 +83,7 @@ function renderPropertyEntranceLabel(name, position, locked, isBusiness, price,
tempPosition.z = tempPosition.z + propertyLabelHeight;
let screenPosition = getScreenFromWorldPosition(tempPosition);
if(screenPosition.x < 0 || screenPosition.x > gta.width) {
if(screenPosition.x < 0 || screenPosition.x > game.width) {
return false;
}
@@ -160,7 +160,7 @@ function renderPropertyExitLabel(position) {
tempPosition.z = tempPosition.z + propertyLabelHeight;
let screenPosition = getScreenFromWorldPosition(tempPosition);
if(screenPosition.x < 0 || screenPosition.x > gta.width) {
if(screenPosition.x < 0 || screenPosition.x > game.width) {
return false;
}
@@ -188,7 +188,7 @@ function renderJobLabel(name, position, jobType) {
tempPosition.z = tempPosition.z + propertyLabelHeight;
let screenPosition = getScreenFromWorldPosition(tempPosition);
if(screenPosition.x < 0 || screenPosition.x > gta.width) {
if(screenPosition.x < 0 || screenPosition.x > game.width) {
return false;
}
@@ -220,7 +220,7 @@ function renderJobLabel(name, position, jobType) {
// -------------------------------------------------------------------------
function processLabelRendering() {
if(renderLabels && gta.game != GAME_GTA_IV) {
if(renderLabels && areWorldLabelsSupported()) {
if(localPlayer != null) {
let pickups = getElementsByType(ELEMENT_PICKUP);
for(let i in pickups) {

View File

@@ -8,14 +8,14 @@
// ===========================================================================
let logoImage = null;
let logoPos = toVector2(gta.width-132, gta.height-132);
let logoPos = toVector2(game.width-132, game.height-132);
let logoSize = toVector2(128, 128);
// ===========================================================================
function initLogoScript() {
logToConsole(LOG_DEBUG, "[VRR.Logo]: Initializing logo script ...");
logoImage = loadLogoImage();
//logoImage = loadLogoImage();
logToConsole(LOG_DEBUG, "[VRR.Logo]: Logo script initialized!");
}
@@ -25,7 +25,7 @@ function loadLogoImage() {
let logoStream = openFile(mainLogoPath);
let tempLogoImage = null;
if(logoStream != null) {
tempLogoImage = drawing.loadPNG(logoStream);
tempLogoImage = graphics.loadPNG(logoStream);
logoStream.close();
}

View File

@@ -48,4 +48,6 @@ let enterPropertyKey = null;
let forcedAnimation = null;
let calledDeathEvent = false;
// ===========================================================================

View File

@@ -52,7 +52,7 @@ function processSmallGameMessageRendering() {
if(renderSmallGameMessage) {
if(smallGameMessageFont != null) {
if(smallGameMessageFont != "") {
smallGameMessageFont.render(smallGameMessageText, [0, gta.height-50], gta.width, 0.5, 0.0, smallGameMessageFont.size, smallGameMessageColour, true, true, false, true);
smallGameMessageFont.render(smallGameMessageText, [0, game.height-50], game.width, 0.5, 0.0, smallGameMessageFont.size, smallGameMessageColour, true, true, false, true);
}
}
}

View File

@@ -80,10 +80,14 @@ function drawNametag(x, y, health, armour, text, ping, alpha, distance, colour,
// -------------------------------------------
// Health Bar
if(gta.game == GAME_GTA_III) {
// Mickey Hamfists is ridiculously tall. Raise the nametag for him a bit
if(skin == 109) {
y -= 20;
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
if(gta.game == GAME_GTA_III) {
// Mickey Hamfists is ridiculously tall. Raise the nametag for him a bit
if(skin == 109) {
y -= 20;
} else {
y -= 5;
}
} else {
y -= 5;
}
@@ -199,9 +203,9 @@ function getClientFromPlayer(player) {
// ===========================================================================
function processNameTagRendering(event) {
if(gta.game >= GAME_GTA_IV) {
return false;
}
//if(gta.game >= GAME_GTA_IV) {
// return false;
//}
getElementsByType(ELEMENT_PLAYER).forEach(function(player) {
if(player != localPlayer) {

View File

@@ -10,7 +10,14 @@
function setUpInitialGame() {
if(mafia.game == GAME_MAFIA_ONE) {
mafia.mapEnabled = false;
mafia.setTrafficEnabled(false);
}
}
// ===========================================================================
addEventHandler("OnMapLoaded", function(event) {
initClientScripts();
});
// ===========================================================================

View File

@@ -129,7 +129,8 @@ function onServerSpawnedPlayer(state) {
logToConsole(LOG_DEBUG, `[VRR.Main] Setting spawned state to ${state}`);
isSpawned = state;
if(state) {
setUpInitialGame
setUpInitialGame();
calledDeathEvent = false;
}
}
@@ -154,7 +155,7 @@ function tellServerItemActionDelayComplete() {
// ===========================================================================
function sendServerClientInfo() {
triggerNetworkEvent("vrr.clientInfo", `${CLIENT_VERSION_MAJOR}.${CLIENT_VERSION_MINOR}.${CLIENT_VERSION_PATCH}.${CLIENT_VERSION_BUILD}`, gta.width, gta.height);
triggerNetworkEvent("vrr.clientInfo", `${CLIENT_VERSION_MAJOR}.${CLIENT_VERSION_MINOR}.${CLIENT_VERSION_PATCH}.${CLIENT_VERSION_BUILD}`, game.width, game.height);
}
// ===========================================================================

View File

@@ -63,21 +63,21 @@ function loadSkinSelectMessageFontBottom() {
function processSkinSelectKeyPress(keyCode) {
if(usingSkinSelector) {
if(keyCode == SDLK_RIGHT) {
if(allowedSkins[gta.game].length-1 == skinSelectorIndex) {
if(allowedSkins[game.game].length-1 == skinSelectorIndex) {
skinSelectorIndex = 0;
} else {
skinSelectorIndex++;
}
localPlayer.skin = allowedSkins[gta.game][skinSelectorIndex][0];
skinSelectMessageTextTop = allowedSkins[gta.game][skinSelectorIndex][1];
localPlayer.skin = allowedSkins[game.game][skinSelectorIndex][0];
skinSelectMessageTextTop = allowedSkins[game.game][skinSelectorIndex][1];
} else if(keyCode == SDLK_LEFT) {
if(skinSelectorIndex <= 0) {
skinSelectorIndex = allowedSkins[gta.game].length-1;
skinSelectorIndex = allowedSkins[game.game].length-1;
} else {
skinSelectorIndex--;
}
localPlayer.skin = allowedSkins[gta.game][skinSelectorIndex][0];
skinSelectMessageTextTop = allowedSkins[gta.game][skinSelectorIndex][1];
localPlayer.skin = allowedSkins[game.game][skinSelectorIndex][0];
skinSelectMessageTextTop = allowedSkins[game.game][skinSelectorIndex][1];
} else if(keyCode == SDLK_RETURN) {
triggerNetworkEvent("vrr.skinSelected", skinSelectorIndex);
} else if(keyCode == SDLK_BACKSPACE) {
@@ -91,16 +91,18 @@ function processSkinSelectKeyPress(keyCode) {
function processSkinSelectRendering() {
if(usingSkinSelector) {
if(skinSelectMessageFontTop != null && skinSelectMessageFontBottom != null) {
if(gta.game != GAME_GTA_VC) {
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, gta.height-100], gta.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
skinSelectMessageFontBottom.render(skinSelectMessageTextBottom, [0, gta.height-65], gta.width, 0.5, 0.0, skinSelectMessageFontBottom.size, skinSelectMessageColourBottom, true, true, false, true);
}
//if(gta.game != GAME_GTA_VC) {
skinSelectMessageFontTop.render(skinSelectMessageTextTop, [0, game.height-100], game.width, 0.5, 0.0, skinSelectMessageFontTop.size, skinSelectMessageColourTop, true, true, false, true);
skinSelectMessageFontBottom.render(skinSelectMessageTextBottom, [0, game.height-65], game.width, 0.5, 0.0, skinSelectMessageFontBottom.size, skinSelectMessageColourBottom, true, true, false, true);
//}
}
localPlayer.position = skinSelectPosition;
localPlayer.heading = skinSelectHeading;
if(gta.game == GAME_GTA_III || gta.game == GAME_GTA_VC) {
localPlayer.clearObjective();
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
if(gta.game == GAME_GTA_III || gta.game == GAME_GTA_VC) {
localPlayer.clearObjective();
}
}
}
}
@@ -110,14 +112,18 @@ function processSkinSelectRendering() {
function toggleSkinSelect(state) {
if(state) {
skinSelectorIndex = 0;
if(localPlayer.skin != allowedSkins[gta.game][skinSelectorIndex][0]) {
localPlayer.skin = allowedSkins[gta.game][skinSelectorIndex][0];
if(localPlayer.skin != allowedSkins[game.game][skinSelectorIndex][0]) {
localPlayer.skin = allowedSkins[game.game][skinSelectorIndex][0];
}
usingSkinSelector = true;
let tempPosition = localPlayer.position;
tempPosition.z += 0.5;
let frontCameraPosition = getPosInFrontOfPos(tempPosition, localPlayer.heading, 3);
gta.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
if(isCustomCameraSupported()) {
game.setCameraLookAt(frontCameraPosition, localPlayer.position, true);
}
gui.showCursor(true, false);
localPlayer.invincible = true;
localPlayer.setProofs(true, true, true, true, true);

View File

@@ -9,27 +9,30 @@
function processSync(event, deltaTime) {
if(localPlayer != null) {
if(gta.game == GAME_GTA_IV) {
if(!doesGameHaveServerElements()) {
triggerNetworkEvent("vrr.player.position", localPlayer.position);
triggerNetworkEvent("vrr.player.heading", localPlayer.heading);
}
if(gta.game == GAME_GTA_SA) {
let lookAtPos = getLocalPlayerLookAtPosition();
triggerNetworkEvent("vrr.player.lookat", lookAtPos);
setEntityData(localPlayer, "vrr.headLook", lookAtPos);
let peds = getPeds();
for(let i in peds) {
if(doesEntityDataExist(peds[i], "vrr.headLook")) {
peds[i].lookAt(getEntityData(peds[i], "vrr.headLook"), 99999);
}
}
}
//if(gta.game == GAME_GTA_SA) {
// let lookAtPos = getLocalPlayerLookAtPosition();
// triggerNetworkEvent("vrr.player.lookat", lookAtPos);
// setEntityData(localPlayer, "vrr.headLook", lookAtPos);
// let peds = getPeds();
// for(let i in peds) {
// if(doesEntityDataExist(peds[i], "vrr.headLook")) {
// peds[i].lookAt(getEntityData(peds[i], "vrr.headLook"), 99999);
// }
// }
//}
if(localPlayer.health <= 0) {
logToConsole(LOG_DEBUG, `Local player died`);
localPlayer.clearWeapons();
triggerNetworkEvent("vrr.playerDeath", localPlayer.position);
if(!calledDeathEvent) {
logToConsole(LOG_DEBUG, `Local player died`);
localPlayer.clearWeapons();
calledDeathEvent = true;
triggerNetworkEvent("vrr.playerDeath");
}
}
if(streamingRadioElement) {

View File

@@ -194,8 +194,13 @@ function setLocalPlayerControlState(controlState, cursorState = false) {
// ===========================================================================
function fadeLocalCamera(state, time) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Fading camera ${(state)?"in":"out"} for ${time} seconds`);
gta.fadeCamera(state, time);
if(isFadeCameraSupported()) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Fading camera ${(state)?"in":"out"} for ${time} seconds`);
if(isFadeCameraSupported()) {
gta.fadeCamera(state, time);
}
}
}
// ===========================================================================
@@ -208,7 +213,9 @@ function removeLocalPlayerFromVehicle() {
function restoreLocalCamera() {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Camera restored`);
gta.restoreCamera(true);
if(isCustomCameraSupported()) {
gta.restoreCamera(true);
}
};
// ===========================================================================
@@ -223,22 +230,27 @@ function clearLocalPlayerOwnedPeds() {
function setLocalCameraLookAt(cameraPosition, cameraLookAt) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Set camera to look at [${cameraLookAt.x}, ${cameraLookAt.y}, ${cameraLookAt.z}] from [${cameraPosition.x}, ${cameraPosition.y}, ${cameraPosition.z}]`);
gta.setCameraLookAt(cameraPosition, cameraLookAt, true);
if(isCustomCameraSupported()) {
gta.setCameraLookAt(cameraPosition, cameraLookAt, true);
}
}
// ===========================================================================
function setCityAmbienceState(state, clearElements = false) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Ambient civilians and traffic ${(state) ? "enabled" : "disabled"}`);
gta.setTrafficEnabled(state);
gta.setGenerateCarsAroundCamera(state);
if(gta.game != GAME_GTA_SA) {
gta.setCiviliansEnabled(state);
}
game.setTrafficEnabled(state);
if(clearElements) {
clearSelfOwnedPeds();
clearSelfOwnedVehicles();
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
gta.setGenerateCarsAroundCamera(state);
if(gta.game != GAME_GTA_SA) {
gta.setCiviliansEnabled(state);
}
if(clearElements) {
clearSelfOwnedPeds();
clearSelfOwnedVehicles();
}
}
}
@@ -321,8 +333,10 @@ function setLocalPlayerHeading(heading) {
function setLocalPlayerInterior(interior) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Setting interior to ${interior}`);
localPlayer.interior = interior;
gta.cameraInterior = interior;
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
localPlayer.interior = interior;
gta.cameraInterior = interior;
}
}
// ===========================================================================
@@ -351,7 +365,9 @@ function isSnowEnabled() {
function playPedSpeech(pedName, speechId) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Making ${pedName}'s ped talk (${speechId})`);
gta.SET_CHAR_SAY(int, int);
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
gta.SET_CHAR_SAY(int, int);
}
}
// ===========================================================================
@@ -364,23 +380,25 @@ function clearLocalPedState() {
// ===========================================================================
function getWeaponSlot(weaponId) {
return weaponSlots[gta.game][weaponId];
return weaponSlots[game.game][weaponId];
}
// ===========================================================================
function setLocalPlayerDrunkEffect(amount, duration) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Drunk effect set to ${amount} for ${duration}ms`);
drunkEffectAmount = 0;
drunkEffectDurationTimer = setInterval(function() {
drunkEffectAmount = drunkEffectAmount;
if(drunkEffectAmount > 0) {
gta.SET_MOTION_BLUR(drunkEffectAmount);
} else {
clearInterval(drunkEffectDurationTimer);
drunkEffectDurationTimer = null;
}
}, 1000);
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Drunk effect set to ${amount} for ${duration}ms`);
drunkEffectAmount = 0;
drunkEffectDurationTimer = setInterval(function() {
drunkEffectAmount = drunkEffectAmount;
if(drunkEffectAmount > 0) {
gta.SET_MOTION_BLUR(drunkEffectAmount);
} else {
clearInterval(drunkEffectDurationTimer);
drunkEffectDurationTimer = null;
}
}, 1000);
}
}
// ===========================================================================
@@ -456,7 +474,10 @@ function setLocalPlayerCash(amount) {
function removeWorldObject(model, position, range) {
if(isRemovingWorldObjectsSupported()) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Removing world object ${model} at X: ${position.x}, Y: ${position.x}, Z: ${position.x} with range of ${range}`);
gta.removeWorldObject(model, position, range);
if(getMultiplayerMod() == VRR_MPMOD_GTAC) {
game.removeWorldObject(model, position, range);
}
}
}
@@ -632,8 +653,8 @@ function getPosInFrontOfPos(pos, angle, distance) {
// ===========================================================================
function getAllowedSkinIndexBySkinId(skinId) {
for(let i in allowedSkins[gta.game]) {
if(skinId == allowedSkins[gta.game][i][0]) {
for(let i in allowedSkins[game.game]) {
if(skinId == allowedSkins[game.game][i][0]) {
return i;
}
}
@@ -644,7 +665,10 @@ function getAllowedSkinIndexBySkinId(skinId) {
function setMinuteDuration(minuteDuration) {
logToConsole(LOG_DEBUG, `[VRR.Utilities] Setting minute duration to ${minuteDuration}ms`);
gta.time.minuteDuration = minuteDuration;
if(isTimeSupported()) {
gta.time.minuteDuration = minuteDuration;
}
}
// ===========================================================================
@@ -657,7 +681,7 @@ function getStreamingRadioVolumeForPosition(position) {
function getLocalPlayerLookAtPosition() {
if(localPlayer != null) {
let centerCameraPos = getWorldFromScreenPosition(toVector3(gta.width/2, gta.height/2, 0));
return getWorldFromScreenPosition(toVector3(gta.width/2, gta.height/2, getDistance(centerCameraPos, localPlayer.position)+20));
let centerCameraPos = getWorldFromScreenPosition(toVector3(game.width/2, game.height/2, 0));
return getWorldFromScreenPosition(toVector3(game.width/2, game.height/2, getDistance(centerCameraPos, localPlayer.position)+20));
}
}

View File

@@ -522,54 +522,48 @@ function loginSuccess(client) {
function saveAccountToDatabase(accountData) {
let dbConnection = connectToDatabase();
if(dbConnection) {
//logToConsole(LOG_VERBOSE, `Escaping account data for ${getPlayerDisplayForConsole(client)}`);
logToConsole(LOG_VERBOSE, `Escaping account data for ${accountData.name}`);
let safeAccountName = escapeDatabaseString(dbConnection, accountData.name);
logToConsole(LOG_VERBOSE, `${accountData.name}'s name escaped successfully`);
let safePassword = escapeDatabaseString(dbConnection, accountData.password);
//logToConsole(LOG_VERBOSE, `${getPlayerDisplayForConsole(accountData.name)}'s password escaped successfully`);
logToConsole(LOG_VERBOSE, `${accountData.name}'s password escaped successfully`);
let safeStaffTitle = escapeDatabaseString(dbConnection, accountData.staffTitle);
//logToConsole(LOG_VERBOSE, `${getPlayerDisplayForConsole(client)}'s staff title escaped successfully`);
logToConsole(LOG_VERBOSE, `${accountData.name}'s staff title escaped successfully`);
let safeEmailAddress = escapeDatabaseString(dbConnection, accountData.emailAddress);
//logToConsole(LOG_VERBOSE, `${getPlayerDisplayForConsole(client)}'s email address escaped successfully`);
logToConsole(LOG_VERBOSE, `${accountData.name}'s email address escaped successfully`);
let dbQueryString =
`UPDATE acct_main SET
acct_email='${safeEmailAddress}',
acct_pass='${safePassword}',
acct_discord=${accountData.discordAccount},
acct_ip=INET_ATON('${accountData.ipAddress}'),
acct_code_verifyemail='${accountData.emailVerificationCode}',
acct_streaming_radio_volume=${accountData.streamingRadioVolume}
WHERE acct_id=${accountData.databaseId}`;
let data = [
["acct_name", safeAccountName],
["acct_pass", safePassword],
//["acct_staff_title", safeStaffTitle],
["acct_email", safeEmailAddress],
//["acct_irc", safeIRC],
["acct_discord", accountData.discordAccount],
["acct_code_verifyemail", accountData.emailVerificationCode],
["acct_streaming_radio_volume", accountData.streamingRadioVolume],
["acct_ip", accountData.ipAddress],
];
/*
acct_settings=${accountData.settings},
acct_staff_title='${safeStaffTitle}',
acct_staff_flags=${accountData.flags.admin},
acct_mod_flags=${accountData.flags.moderation},
*/
//dbQueryString = dbQueryString.trim();
dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
let dbQuery = queryDatabase(dbConnection, dbQueryString);
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.flags.settings],
["acct_svr_staff_title", safeStaffTitle],
["acct_svr_staff_flags", accountData.flags.admin],
["acct_svr_mod_flags", accountData.flags.moderation],
["acct_svr_chat_scroll_lines", accountData.chatScrollLines],
];
dbQuery = null;
dbQueryString =
`UPDATE acct_svr SET
acct_svr_acct='${accountData.databaseId}',
acct_svr_settings=${accountData.flags.settings},
acct_svr_staff_title='${safeStaffTitle}',
acct_svr_staff_flags=${accountData.flags.admin},
acct_svr_mod_flags=${accountData.flags.moderation},
acct_svr_chat_scroll_lines=${accountData.chatScrollLines}
WHERE acct_svr_acct=${accountData.databaseId} AND acct_svr_svr = ${getServerId()}`;
//dbQueryString = dbQueryString.trim();
dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
dbQuery = queryDatabase(dbConnection, dbQueryString);
queryString = "";
queryString = createDatabaseUpdateQuery("acct_svr", data2, `acct_svr_acct=${accountData.databaseId} AND acct_svr_svr = ${getServerId()}`);
dbQuery = queryDatabase(dbConnection, queryString);
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
return true;
}
}
@@ -974,7 +968,7 @@ function createDefaultKeybindsForAccount(accountDatabaseId) {
// ===========================================================================
function createDefaultAccountServerData(accountDatabaseId) {
for(let i = 1 ; i <= 4 ; i++) {
for(let i = 1 ; i <= 5 ; i++) {
let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accountDatabaseId}, ${i})`;
quickDatabaseQuery(dbQueryString);
}

View File

@@ -773,13 +773,13 @@ function buyBusinessCommand(command, params, client) {
return false;
}
getBusinessData(client).ownerType = VRR_BIZOWNER_PLAYER;
getBusinessData(client).ownerId = getPlayerCurrentSubAccount(client).databaseId;
getBusinessData(client).buyPrice = 0;
getBusinessData(businessId).ownerType = VRR_BIZOWNER_PLAYER;
getBusinessData(businessId).ownerId = getPlayerCurrentSubAccount(client).databaseId;
getBusinessData(businessId).buyPrice = 0;
updateBusinessPickupLabelData(businessId);
messagePlayerSuccess(client, `Business ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name} ${getInlineChatColourByName("white")}till has ${getInlineChatColourByName("lightGrey")}$${getBusinessData(businessId).till}`);
messagePlayerSuccess(client, `You are now the owner of ${getInlineChatColourByType("businessBlue")}${getBusinessData(businessId).name}`);
}
// ===========================================================================
@@ -882,7 +882,9 @@ function getPlayerBusiness(client) {
function saveAllBusinessesToDatabase() {
for(let i in getServerData().businesses) {
saveBusinessToDatabase(i);
if(getServerData().businesses[i].needsSaved) {
saveBusinessToDatabase(i);
}
}
}
@@ -904,7 +906,7 @@ function saveBusinessToDatabase(businessId) {
["biz_entrance_fee", tempBusinessData.entranceFee],
["biz_till", tempBusinessData.till],
["biz_entrance_pos_x", tempBusinessData.entrancePosition.x],
["biz_entrance_pos_y", tempBusinessData.entrancePosition.x],
["biz_entrance_pos_y", tempBusinessData.entrancePosition.y],
["biz_entrance_pos_z", tempBusinessData.entrancePosition.z],
["biz_entrance_rot_z", tempBusinessData.entranceRotation],
["biz_entrance_int", tempBusinessData.entranceInterior],
@@ -928,10 +930,12 @@ function saveBusinessToDatabase(businessId) {
dbQuery = queryDatabase(dbConnection, queryString);
getServerData().businesses[businessId].databaseId = getDatabaseInsertId(dbConnection);
} else {
let queryString = createDatabaseUpdateQuery("biz_main", data, `WHERE biz_id=${tempBusinessData.databaseId}`);
let queryString = createDatabaseUpdateQuery("biz_main", data, `biz_id=${tempBusinessData.databaseId}`);
dbQuery = queryDatabase(dbConnection, queryString);
}
getBusinessData(businessId).needsSaved = false;
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
return true;

View File

@@ -618,6 +618,10 @@ function saveAllClanRanksToDatabase(clanId) {
function saveClanToDatabase(clanId) {
let tempClanData = getClanData(clanId);
if(!tempClanData) {
return false;
}
let dbConnection = connectToDatabase();
if(dbConnection) {
if(tempClanData.needsSaved) {
@@ -625,7 +629,7 @@ function saveClanToDatabase(clanId) {
let safeTag = escapeDatabaseString(dbConnection, tempClanData.tag);
let safeMOTD = escapeDatabaseString(dbConnection, tempClanData.motd);
let queryData = [
let data = [
["clan_main", safeName],
["clan_owner", tempClanData.ownerId],
["clan_tag", safeTag],
@@ -639,7 +643,7 @@ function saveClanToDatabase(clanId) {
getClanData(clanId).databaseId = getDatabaseInsertId(dbConnection);
getClanData(clanId).needsSaved = false;
} else {
let queryString = createDatabaseUpdateQuery("clan_main", data, `WHERE clan_id=${tempClanData.databaseId} LIMIT 1`);
let queryString = createDatabaseUpdateQuery("clan_main", data, `clan_id=${tempClanData.databaseId} LIMIT 1`);
dbQuery = queryDatabase(dbConnection, queryString);
getClanData(clanId).needsSaved = false;
}
@@ -667,7 +671,7 @@ function saveClanRankToDatabase(clanData, rankId) {
let safeTag = escapeDatabaseString(dbConnection, tempClanRankData.customTag);
let safeTitle = escapeDatabaseString(dbConnection, tempClanRankData.customTitle);
let queryData = [
let data = [
["clan_rank_name", safeName],
["clan_rank_clan", tempClanRankData.clanId],
["clan_rank_tag", safeTag],
@@ -684,7 +688,7 @@ function saveClanRankToDatabase(clanData, rankId) {
getClanRankData(clanId, rankId).databaseId = getDatabaseInsertId(dbConnection);
getClanRankData(clanId, rankId).needsSaved = false;
} else {
let queryString = createDatabaseUpdateQuery("clan_rank_main", data, `WHERE clan_rank_id=${tempClanRankData.databaseId} LIMIT 1`);
let queryString = createDatabaseUpdateQuery("clan_rank_main", data, `clan_rank_id=${tempClanRankData.databaseId} LIMIT 1`);
dbQuery = queryDatabase(dbConnection, queryString);
getClanRankData(clanId, rankId).needsSaved = false;
}
@@ -738,7 +742,7 @@ function setClanRankTitle(clanId, rankId, title) {
function saveAllClansToDatabase() {
for(let i in getServerData().clans) {
saveClanToDatabase(getServerData().clans[i]);
saveClanToDatabase(i);
}
}

View File

@@ -414,8 +414,9 @@ function initClassTable() {
this.account = toInteger(dbAssoc["sacct_acct"]);
this.skin = toInteger(dbAssoc["sacct_svr_skin"]);
this.cash = toInteger(dbAssoc["sacct_cash"]);
console.log(dbAssoc["sacct_pos_x"]);
this.spawnPosition = toVector3(toFloat(dbAssoc["sacct_pos_x"]), toFloat(dbAssoc["sacct_pos_y"]), toFloat(dbAssoc["sacct_pos_z"]));
this.spawnHeading = toFloat(dbAssoc["sacct_angle"]);
this.spawnHeading = toFloat(dbAssoc["sacct_rot_z"]);
this.lastLogin = toInteger(dbAssoc["sacct_when_lastlogin"]);
this.clan = toInteger(dbAssoc["sacct_svr_clan"]);
this.clanFlags = toInteger(dbAssoc["sacct_svr_clan_flags"]);
@@ -1267,6 +1268,7 @@ function initClassTable() {
this.supplyMultiplier = 1;
this.riskMultiplier = 1;
this.needsSaved = false;
this.useDelay = 0;
this.switchDelay = 0;
this.pickupDelay = 0;
this.putDelay = 0;

View File

@@ -522,12 +522,9 @@ function showPlayerItemTakeDelay(client, itemId) {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item TAKE delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item TAKE delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerTakeItem(client, itemId);
playerItemActionDelayComplete(client);
}
}
}
@@ -540,12 +537,9 @@ function showPlayerItemUseDelay(client, itemSlot) {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item USE delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item USE delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerUseItem(client, itemSlot);
playerItemActionDelayComplete(client);
}
}
}
@@ -558,12 +552,9 @@ function showPlayerItemDropDelay(client, itemSlot) {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item DROP delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item DROP delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerDropItem(client, itemSlot);
playerItemActionDelayComplete(client);
}
}
}
@@ -576,12 +567,9 @@ function showPlayerItemPickupDelay(client, itemId) {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item PICKUP delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item PICKUP delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerPickupItem(client, itemId);
playerItemActionDelayComplete(client);
}
}
}
@@ -594,12 +582,9 @@ function showPlayerItemPutDelay(client, itemSlot) {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item PUT delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item PUT delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerPutItem(client, itemSlot);
playerItemActionDelayComplete(client);
}
}
}
@@ -610,14 +595,16 @@ function showPlayerItemSwitchDelay(client, itemSlot) {
if(itemSlot != -1) {
if(getPlayerData(client).hotBarItems[itemSlot] != -1) {
let delay = getItemTypeData(getItemData(getPlayerData(client).hotBarItems[itemSlot]).itemTypeIndex).switchDelay;
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item switch delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
setTimeout(function() {
if(delay > 0) {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item switch delay to ${getPlayerDisplayForConsole(client)} (${delay} milliseconds)`);
triggerNetworkEvent("vrr.showItemActionDelay", client, delay);
} else{
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item switch delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerItemActionDelayComplete(client);
}, delay+getGlobalConfig().itemActionDelayExtraTimeout);
}
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item switch delay to ${getPlayerDisplayForConsole(client)} (instant)`);
playerSwitchItem(client, itemSlot);
playerItemActionDelayComplete(client);
}
} else {
logToConsole(LOG_DEBUG, `[VRR.Client] Showing item switch delay to ${getPlayerDisplayForConsole(client)} (instant)`);

View File

@@ -196,11 +196,12 @@ function loadCommands() {
commandData("housereloadall", reloadAllHousesCommand, "", getStaffFlagValue("manageHouses"), true, false),
commandData("houseinfo", getHouseInfoCommand, "", getStaffFlagValue("none"), true, false),
commandData("housedesc", setHouseDescriptionCommand, "", getStaffFlagValue("none"), true, false),
commandData("housebuy", buyHouseCommand, "", getStaffFlagValue("none"), true, false),
commandData("housedesc", setHouseDescriptionCommand, "", getStaffFlagValue("manageHouses"), true, false),
commandData("houselock", lockUnlockHouseCommand, "", getStaffFlagValue("none"), true, false),
commandData("houseowner", setHouseOwnerCommand, "", getStaffFlagValue("none"), true, false),
//commandData("housebuyprice", setHouseBuyPriceCommand, "", getStaffFlagValue("none"), true, false),
//commandData("houserentprice", setHouseRentPriceCommand, "", getStaffFlagValue("none"), true, false),
commandData("houseowner", setHouseOwnerCommand, "", getStaffFlagValue("manageHouses"), true, false),
commandData("housebuyprice", setHouseBuyPriceCommand, "", getStaffFlagValue("none"), true, false),
commandData("houserentprice", setHouseRentPriceCommand, "", getStaffFlagValue("none"), true, false),
commandData("houseblip", setHouseBlipCommand, "<type name/model id>", getStaffFlagValue("manageHouses"), true, true),
commandData("housepickup", setHousePickupCommand, "<type name/model id>", getStaffFlagValue("manageHouses"), true, true),
commandData("houseentrance", moveHouseEntranceCommand, "", getStaffFlagValue("manageHouses"), true, true),

View File

@@ -62,868 +62,7 @@ function loadGlobalConfig() {
// ===========================================================================
function loadGameConfig() {
return {
blipSprites: [
false,
{ // GTA III
policeStation: 8,
fireStation: 9,
hospital: 12,
ammunation: 20,
payAndSpray: 18,
vehicleDealership: 6,
restaurant: -1,
fastFood: -1,
bank: 0,
fuelStation: -1,
business: -1,
house: -1,
},
{ // GTA VC
policeStation: 0,
fireStation: 0,
hospital: 0,
ammunation: 16,
payAndSpray: 27,
vehicleDealership: 7,
restaurant: -1,
fastFood: -1,
bank: 0,
fuelStation: -1,
business: -1,
house: -1,
},
{ // GTA SA
policeStation: 30,
fireStation: 20,
hospital: 22,
ammunation: 6,
payAndSpray: 63,
vehicleDealership: 55,
airplaneDealership: 5,
boatDealership: 9,
restaurant: 50,
fastFood: -1,
clothes: 45,
pizza: 29,
chicken: 14,
burger: 10,
bank: 52,
gasStation: 17,
business: -1,
house: 31,
bar: 49,
club: 48,
gym: 54,
repairGarage: 27,
trophy: 33,
race2: 53,
job: 56,
},
{ // GTA UG
policeStation: 8,
fireStation: 9,
hospital: 12,
ammunation: 20,
payAndSpray: 18,
vehicleDealership: 6,
restaurant: -1,
fastFood: -1,
bank: 52,
fuelStation: 0,
business: -1,
house: -1,
},
{ // GTA IV
policeStation: 8,
fireStation: 9,
hospital: 12,
ammunation: 20,
payAndSpray: 18,
vehicleDealership: 6,
restaurant: -1,
fastFood: -1,
bank: 52,
fuelStation: 0,
business: -1,
house: -1,
},
],
pickupModels: [
{},
{ // GTA 3
policeStation: 1361,
fireStation: 1361,
hospital: 1361,
ammunation: 1361,
payAndSpray: 1361,
vehicleDealership: 1361,
restaurant: 1361,
fastFood: 1361,
bank: 1323,
fuelStation: 1361,
business: 1361,
house: 1361,
clothes: 1361,
misc: 1361,
exit: 1361
},
{ // GTA Vice City
policeStation: 375,
fireStation: 406,
hospital: 366,
ammunation: 406,
payAndSpray: 406,
vehicleDealership: 406,
restaurant: 406,
fastFood: 406,
bank: 408,
fuelStation: 406,
business: 406,
house: 407,
clothes: 409,
misc: 406,
exit: 406,
},
{ // GTA San Andreas
policeStation: 1247,
fireStation: 1318,
hospital: 1240,
ammunation: 1239,
payAndSpray: 1239,
vehicleDealership: 1239,
restaurant: 1239,
fastFood: 1239,
bank: 1274,
fuelStation: 1239,
business: 1272,
house: 1273,
clothes: 1275,
misc: 1239,
exit: 1318,
}
],
pickupTypes: [
{},
{ // GTA 3
business: 0,
house: 0,
bank: 0,
clothes: 0,
info: 0,
job: 0,
},
{ // GTA Vice City
business: 2,
house: 2,
bank: 2,
clothes: 2,
info: 2,
job: 2,
},
{ // GTA San Andreas
business: 1,
house: 1,
bank: 1,
clothes: 1,
info: 1,
job: 1,
}
],
// THIS IS SCREEN HEIGHT, NOT ACTUAL DOOR POSITION IN THE WORLD
propertyLabelHeight: [
false,
85,
85,
85,
85,
85,
85,
],
removedWorldObjects: [
false,
[ // GTA III
new serverClasses.removedWorldObjectData("fraightback04", toVector3(1229.88, -84.8012, 13.4004), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
new serverClasses.removedWorldObjectData("fraightback03", toVector3(1239.49, -68.0529, 11.6914), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
],
],
excludedGroundSnowModels: [
false,
[ // GTA III
],
[ // GTA VC
],
[ // GTA SA
// Twin tunnels from Rodeo, Los Santos to/from Flint County
13682, // TCElawcuntunb
13680, // TCElawcuntunb
13676, // TCElawcuntun1a_law2
13677, // TCElawcuntun1a_law2
// Los Santos
6387, // century03_LAw2 (L.A. Century Plaza underground parking)
17633, // lae2_ground08
4818, // TRNTRK8_LAS
4884, // lastranentun1_LAS
4885, // lastranentun4_LAS
// Train Tunnel under Los Santos
6248, // RailTunn01_LAw
6249, // RailTunn02_LAw
6250, // RailTunn03_LAw
6251, // RailTunn04_LAw
6252, // RailTunn05_LAw
5772, // RailTunn01_LAwN (Market Station lower level)
5773, // TrainStat01_LAwN (Market Station upper/ground level)
6502, // RailTunn04_LAw2
6290, // RailTunn02_LAw2
6501, // RailTunn03_LAw2
6292, // RailTunn01_LAw2N
6966, // vegasNbank1 (L.V. north building underground parking, upper level)
7245, // vegasNbank1ug (L.V. north building underground parking, lower level)
7011, // courthse_vgn01 (L.V. courthouse parking structure)
8390, // multicarpark01_lvS (Large parking structure next to pyramid)
// Train tunnel next to Las Venturas
6982, // vgsNtraintunnel01
6983, // vgsNtraintunnel02
6984, // vgsNtraintunnel03
6981, // vgsNtraintunnel04
],
[ // GTA UG
],
[ // GTA IV
],
],
defaultBusinessItems:
[
{
},
{
clothingStore: [
["Outfit", 500, 2]
],
legalGunStore: [
["Colt 45", 500, 2],
["Shotgun", 500, 2],
["Baseball Bat", 500, 2]
],
illegalGunStore: [
["Uzi", 500, 2],
["AK-47", 500, 2],
["M16", 500, 2],
["Sniper Rifle", 500, 2]
],
gasStation: [
["Bottle of Soda", 500, 2],
["Can of Soda", 500, 2],
["Slice of Pizza", 500, 2],
["Bottle of Water", 500, 2],
["Can of Beer", 500, 2],
],
electronicsStore: [
["Phone", 500, 2],
["Walkie Talkie", 500, 2],
["Megaphone", 500, 2],
["Tazer", 500, 2],
["Camera", 500, 2],
],
bar: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
club: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
chicken: [
["Bucket of Chicken", 500, 2],
["Chicken Tenders Meal", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
burger: [
["Bacon Cheeseburger", 500, 2],
["Double Cheeseburger", 500, 2],
["Big Boy Burger", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
chinese: [
["Egg Roll", 500, 2],
["Lo Mein", 500, 2],
["Fried Rice", 500, 2],
["Crab Rangoon", 500, 2],
["Egg Drop Soup", 500, 2],
["Moo Shu Pork", 500, 2],
["Egg Foo Young", 500, 2],
["Sesame Chicken", 500, 2],
],
italian: [
["Bottle of Wine", 500, 2],
["Glass of Wine", 500, 2],
["Arancini", 500, 2],
["Lasagne", 500, 2],
["Chicken Alfredo", 500, 2],
["Fettucine Alfredo", 500, 2],
["Chicken Parmigiana", 500, 2],
["Chicken Carbonara", 500, 2],
["Sausage Rigatoni", 500, 2],
["Chicken Salad", 500, 2],
["Caesar Salad", 500, 2],
],
mexican: [
["Crunchy Taco", 500, 2],
["Beaf and Bean Burrito", 500, 2],
["Burrito Supreme", 500, 2],
["Cheesy Nachos", 500, 2],
["Nacho Supreme", 500, 2],
["Bottle of Soda", 500, 2],
],
pizza: [
["Large Pizza", 500, 2],
["Medium Pizza", 500, 2],
["Small Pizza", 500, 2],
["Buffalo Wings", 500, 2],
["Hot Wings", 500, 2],
["Bottle of Soda", 500, 2],
],
},
{
clothingStore: [
["Outfit", 500, 2]
],
legalGunStore: [
["Colt .45", 500, 2],
["Python", 500, 2],
["Shotgun", 500, 2],
["Stubby Shotgun", 500, 2],
["Baseball Bat", 500, 2],
["Brass Knuckles", 500, 2],
],
illegalGunStore: [
["Uzi", 500, 2],
["MP5", 500, 2],
["Tec-9", 500, 2],
["Ingram", 500, 2],
["Ruger", 500, 2],
["M4", 500, 2],
["Sniper Rifle", 500, 2],
["Laser Sniper", 500, 2],
],
gasStation: [
["Bottle of Soda", 500, 2],
["Can of Soda", 500, 2],
["Slice of Pizza", 500, 2],
["Bottle of Water", 500, 2],
["Can of Beer", 500, 2]
],
electronicsStore: [
["Phone", 500, 2],
["Walkie Talkie", 500, 2],
["Megaphone", 500, 2],
["Tazer", 500, 2],
["Camera", 500, 2]
],
bar: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
club: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
chicken: [
["Bucket of Chicken", 500, 2],
["Chicken Tenders Meal", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
burger: [
["Bacon Cheeseburger", 500, 2],
["Double Cheeseburger", 500, 2],
["Big Boy Burger", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
chinese: [
["Egg Roll", 500, 2],
["Lo Mein", 500, 2],
["Fried Rice", 500, 2],
["Crab Rangoon", 500, 2],
["Egg Drop Soup", 500, 2],
["Moo Shu Pork", 500, 2],
["Egg Foo Young", 500, 2],
["Sesame Chicken", 500, 2],
],
italian: [
["Bottle of Wine", 500, 2],
["Glass of Wine", 500, 2],
["Arancini", 500, 2],
["Lasagne", 500, 2],
["Chicken Alfredo", 500, 2],
["Fettucine Alfredo", 500, 2],
["Chicken Parmigiana", 500, 2],
["Chicken Carbonara", 500, 2],
["Sausage Rigatoni", 500, 2],
["Chicken Salad", 500, 2],
["Caesar Salad", 500, 2],
],
mexican: [
["Crunchy Taco", 500, 2],
["Beaf and Bean Burrito", 500, 2],
["Burrito Supreme", 500, 2],
["Cheesy Nachos", 500, 2],
["Nacho Supreme", 500, 2],
["Bottle of Soda", 500, 2],
],
pizza: [
["Large Pizza", 500, 2],
["Medium Pizza", 500, 2],
["Small Pizza", 500, 2],
["Buffalo Wings", 500, 2],
["Hot Wings", 500, 2],
["Bottle of Soda", 500, 2],
],
},
{
clothingStore: [
["Outfit", 500, 2]
],
legalGunStore: [
["Baseball Bat", 500, 2],
["Pepper Spray", 500, 2],
["Brass Knuckles", 500, 2],
["9mm", 500, 2],
["Desert Eagle", 500, 2],
["Shotgun", 500, 2],
["Country Rifle", 500, 2]
],
illegalGunStore: [
["Micro SMG/Uzi", 500, 2],
["MP5", 500, 2],
["Tec-9", 500, 2],
["AK-47", 500, 2],
["M4", 500, 2],
["Combat Shotgun", 500, 2],
["Sniper Rifle", 500, 2]
],
sexShop: [
["Purple Dildo", 500, 2],
["Dildo", 500, 2],
["Vibrator", 500, 2],
["Silver Vibrator", 500, 2],
["Flowers", 500, 2]
],
gasStation: [
["Bottle of Soda", 500, 2],
["Can of Soda", 500, 2],
["Slice of Pizza", 500, 2],
["Bottle of Water", 500, 2],
["Can of Beer", 500, 2]
],
electronicsStore: [
["Phone", 500, 2],
["Walkie Talkie", 500, 2],
["Megaphone", 500, 2],
["Tazer", 500, 2],
["Camera", 500, 2]
],
bar: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
club: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
chicken: [
["Bucket of Chicken", 500, 2],
["Chicken Tenders Meal", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
burger: [
["Bacon Cheeseburger", 500, 2],
["Double Cheeseburger", 500, 2],
["Big Boy Burger", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
chinese: [
["Egg Roll", 500, 2],
["Lo Mein", 500, 2],
["Fried Rice", 500, 2],
["Crab Rangoon", 500, 2],
["Egg Drop Soup", 500, 2],
["Moo Shu Pork", 500, 2],
["Egg Foo Young", 500, 2],
["Sesame Chicken", 500, 2],
],
italian: [
["Bottle of Wine", 500, 2],
["Glass of Wine", 500, 2],
["Arancini", 500, 2],
["Lasagne", 500, 2],
["Chicken Alfredo", 500, 2],
["Fettucine Alfredo", 500, 2],
["Chicken Parmigiana", 500, 2],
["Chicken Carbonara", 500, 2],
["Sausage Rigatoni", 500, 2],
["Chicken Salad", 500, 2],
["Caesar Salad", 500, 2],
],
mexican: [
["Crunchy Taco", 500, 2],
["Beaf and Bean Burrito", 500, 2],
["Burrito Supreme", 500, 2],
["Cheesy Nachos", 500, 2],
["Nacho Supreme", 500, 2],
["Bottle of Soda", 500, 2],
],
pizza: [
["Large Pizza", 500, 2],
["Medium Pizza", 500, 2],
["Small Pizza", 500, 2],
["Buffalo Wings", 500, 2],
["Hot Wings", 500, 2],
["Bottle of Soda", 500, 2],
],
}
],
interiorTemplates: [
false,
{ // GTA 3
},
{ // GTA VC
mall: new serverClasses.interiorTemplateData(toVector3(379.62, 1007.00, 19.22), 4),
malibu: new serverClasses.interiorTemplateData(toVector3(489.83, -76.49, 11.48), 17),
vcpd: new serverClasses.interiorTemplateData(toVector3(396.38, -472.96, 12.34), 12),
apartment: new serverClasses.interiorTemplateData(toVector3(26.67, -1328.89, 13.00), 11),
hotelLobby: new serverClasses.interiorTemplateData(toVector3(228.53, -1277.12, 12.07), 1),
bikerBar: new serverClasses.interiorTemplateData(toVector3(-597.41, 651.84, 11.30), 11),
mansion: new serverClasses.interiorTemplateData(toVector3(-379.14, -551.65, 19.32), 2),
gunRange: new serverClasses.interiorTemplateData(toVector3(-667.79, 1217.51, 11.10), 10),
bank: new serverClasses.interiorTemplateData(toVector3(-894.52, -341.16, 13.45), 3),
stripClub: new serverClasses.interiorTemplateData(toVector3(97.53, -1472.06, 10.43), 5),
rosenberg: new serverClasses.interiorTemplateData(toVector3(120.82, -827.98, 10.62), 6),
arena: new serverClasses.interiorTemplateData(toVector3(-1080.49, 1331.16, 13.91), 15),
ghettoShack: new serverClasses.interiorTemplateData(toVector3(-962.74, 146.96, 9.40), 12),
hotelRoom: new serverClasses.interiorTemplateData(toVector3(226.47, -1274.98, 19.271), 2.933),
},
{ // GTA SA
lspd: new serverClasses.interiorTemplateData(toVector3(247.113, 62.929, 1003.64), 2),
lvpd: new serverClasses.interiorTemplateData(toVector3(288.82, 167.39, 1007.17), 3),
sfpd: new serverClasses.interiorTemplateData(toVector3(246.40, 110.84, 1003.22), 10),
reeceBarberShop: new serverClasses.interiorTemplateData(toVector3(411.62, -21.43, 1001.80), 2),
fourDragons: new serverClasses.interiorTemplateData(toVector3(2016.26, 1017.77, 996.87), 10),
caligula: new serverClasses.interiorTemplateData(toVector3(2233.8, 1712.23, 1011.76), 1),
genericCasino: new serverClasses.interiorTemplateData(toVector3(1118.88, -10.27, 1002.08), 12),
cluckinBell: new serverClasses.interiorTemplateData(toVector3(365.71, -9.88, 1001.85), 9),
pizzaStack: new serverClasses.interiorTemplateData(toVector3(372.35, -131.65, 1001.49), 5),
burgerShot: new serverClasses.interiorTemplateData(toVector3(375.96, -65.81, 1001.50), 10),
tattooParlor: new serverClasses.interiorTemplateData(toVector3(-203.07, -24.16, 1002.27), 16),
bank: new serverClasses.interiorTemplateData(toVector3(2305.14, -16.274, 26.74), 1),
gas1: new serverClasses.interiorTemplateData(toVector3(-25.88, -185.86, 1003.54), 17),
gas2: new serverClasses.interiorTemplateData(toVector3(6.09, -29.27, 1003.54), 10),
gas3: new serverClasses.interiorTemplateData(toVector3(-30.94, -89.60, 1003.54), 18),
gas4: new serverClasses.interiorTemplateData(toVector3(-25.13, -139.06, 1003.54), 16),
gas5: new serverClasses.interiorTemplateData(toVector3( -27.31, -29.27, 1003.54), 4),
gas6: new serverClasses.interiorTemplateData(toVector3(-26.69, -55.71, 1003.54), 6),
shamal: new serverClasses.interiorTemplateData(toVector3(2.38, 33.10, 1199.84), 1),
andromeda: new serverClasses.interiorTemplateData(toVector3(315.85, 1024.49, 1949.79), 9),
airportTickets: new serverClasses.interiorTemplateData(toVector3(-1827.14, 7.20, 1061.14), 14),
airportBaggage: new serverClasses.interiorTemplateData(toVector3(-1855.56, 41.26, 1061.14), 14),
ammu1: new serverClasses.interiorTemplateData(toVector3(286.14, -40.64, 1001.56), 1),
ammu2: new serverClasses.interiorTemplateData(toVector3(286.80, -82.54, 1001.53), 4),
ammu3: new serverClasses.interiorTemplateData(toVector3(296.91, -108.07, 1001.56), 6),
ammu4: new serverClasses.interiorTemplateData(toVector3(314.82, -141.43, 999.66), 7),
ammu5: new serverClasses.interiorTemplateData(toVector3(316.52, -167.70, 999.66), 6),
ammuBooth: new serverClasses.interiorTemplateData(toVector3(302.29, -143.13, 1004.06), 7),
ammuRange: new serverClasses.interiorTemplateData(toVector3(280.79, -135.20, 1004.06), 7),
house1: new serverClasses.interiorTemplateData(toVector3(235.51, 1189.17, 1080.34), 3),
house2: new serverClasses.interiorTemplateData(toVector3(225.76, 1240.00, 1082.15), 2),
house3: new serverClasses.interiorTemplateData(toVector3(223.04, 1289.26, 1082.20), 1),
house4: new serverClasses.interiorTemplateData(toVector3(225.63, 1022.48, 1084.07), 7),
house5: new serverClasses.interiorTemplateData(toVector3(295.14, 1474.47, 1080.52), 15),
house6: new serverClasses.interiorTemplateData(toVector3(328.49, 1480.59, 1084.45), 15),
house7: new serverClasses.interiorTemplateData(toVector3(385.80, 1471.77, 1080.21), 15),
atrium: new serverClasses.interiorTemplateData(toVector3(1726.18, -1641.00, 20.23), 18),
crackPalace: new serverClasses.interiorTemplateData(toVector3(2,567.52, -1294.59, 1063.25), 2),
bloodbowlStadium: new serverClasses.interiorTemplateData(toVector3(-1394.20, 987.62, 1023.96), 15),
burningDesireHouse: new serverClasses.interiorTemplateData(toVector3(2338.32, -1180.61, 1027.98), 5),
furhbergerHouse: new serverClasses.interiorTemplateData(toVector3(2807.63, -1170.15, 1025.57), 8),
dillimoreGas: new serverClasses.interiorTemplateData(toVector3(664.19, -570.73, 16.34), 0),
donutShop: new serverClasses.interiorTemplateData(toVector3(376.99, -191.21, 1000.63), 17),
airport: new serverClasses.interiorTemplateData(toVector3(-1830.81, 16.83, 1061.14), 14),
jeffersonMotel: new serverClasses.interiorTemplateData(toVector3(2220.26, -1,148.01, 1025.80), 15),
kickstartStadium: new serverClasses.interiorTemplateData(toVector3(-1410.72, 1,591.16, 1052.53), 14),
libertyCity: new serverClasses.interiorTemplateData(toVector3(-750.80, 491.00, 1371.70), 1),
lsxBaggageReclaim: new serverClasses.interiorTemplateData(toVector3(-1870.80, 59.81, 1056.25), 14),
jizzy: new serverClasses.interiorTemplateData(toVector3(-2637.69, 1404.24, 906.46), 3),
rcBattlefield: new serverClasses.interiorTemplateData(toVector3(-1079.99, 1061.58, 1343.04), 10),
ryderHouse: new serverClasses.interiorTemplateData(toVector3(2451.77, -1699.80, 1013.51), 2),
sfGarage: new serverClasses.interiorTemplateData(toVector3(-2042.42, 178.59, 28.84), 1),
sweetHouse: new serverClasses.interiorTemplateData(toVector3(2535.83, -1,674.32, 1015.50), 1),
katieHouse: new serverClasses.interiorTemplateData(toVector3(267.22, 304.71, 999.14), 2),
helenaHouse: new serverClasses.interiorTemplateData(toVector3(292.44, 308.77, 999.14), 3),
welcomePump: new serverClasses.interiorTemplateData(toVector3(681.66, -453.32, -25.61), 1),
woozieApartment: new serverClasses.interiorTemplateData(toVector3(-2158.72, 641.29, 1052.38), 1),
eightTrackStadium: new serverClasses.interiorTemplateData(toVector3(-1395.96, -208.20, 1051.17), 7),
dirtBikeStadium: new serverClasses.interiorTemplateData(toVector3(-1424.93, -664.59, 1059.86), 4),
crackDen: new serverClasses.interiorTemplateData(toVector3(318.57, 1115.21, 1082.98), 5),
motelRoom: new serverClasses.interiorTemplateData(toVector3(2251.85, -1138.16, 1050.63), 9),
hashburyHouse: new serverClasses.interiorTemplateData(toVector3(2260.76, -1210.45, 1049.02), 10),
cjHouse: new serverClasses.interiorTemplateData(toVector3(2496.65, -1696.55, 1014.74), 3),
maddDoggMansion: new serverClasses.interiorTemplateData(toVector3(1299.14, -794.77, 1084.00), 5),
motelRoom2: new serverClasses.interiorTemplateData(toVector3(2262.83, -1137.71, 1050.63), 10),
safeHouse1: new serverClasses.interiorTemplateData(toVector3(2365.42, -1131.85, 1050.88), 8),
safeHouse2: new serverClasses.interiorTemplateData(toVector3(2324.33, -1144.79, 1050.71), 12),
zeroStore: new serverClasses.interiorTemplateData(toVector3(-2240.00, 131.00, 1035.40), 6),
brothel1: new serverClasses.interiorTemplateData(toVector3(940.65, -18.48, 1000.93), 3),
brothel2: new serverClasses.interiorTemplateData(toVector3(967.53, -53.02, 1001.12), 3),
brothel3: new serverClasses.interiorTemplateData(toVector3(744.27, 1437.25, 1102.70), 6),
prolapsStore: new serverClasses.interiorTemplateData(toVector3(207.35, -138.00, 1003.31), 3),
victimStore: new serverClasses.interiorTemplateData(toVector3(221.33, -6.61, 1005.19), 5),
suburbanStore: new serverClasses.interiorTemplateData(toVector3(203.81, -46.53, 1001.80), 1),
sexShop: new serverClasses.interiorTemplateData(toVector3(-106.72, -19.64, 1000.71), 3),
bincoStore: new serverClasses.interiorTemplateData(toVector3(207.54, -109.00, 1005.13), 15),
wardrobe: new serverClasses.interiorTemplateData(toVector3(255.71, -41.13, 1002.02), 14),
cityHall: new serverClasses.interiorTemplateData(toVector3(389.538, 173.652, 1008.38), 3),
gantonGym: new serverClasses.interiorTemplateData(toVector3(772.2,-5.06,1000.73), 1),
kungFuGym: new serverClasses.interiorTemplateData(toVector3(774.21, -48.92, 1000.58), 6),
lvGym: new serverClasses.interiorTemplateData(toVector3(773.57, -77.09, 1000.65), 7),
insuranceCompany: new serverClasses.interiorTemplateData(toVector3(-2029.76, -119.624, 1035.17), 1),
stripClub1: new serverClasses.interiorTemplateData(toVector3(1204.80,-11.58,1000.92), 2),
stripClub1Private: new serverClasses.interiorTemplateData(toVector3(1204.80, 13.89, 1000.92), 2),
nightClub: new serverClasses.interiorTemplateData(toVector3(493.39,-22.72,1000.67), 17),
warehouse1: new serverClasses.interiorTemplateData(toVector3(1412.63, -1.78, 1000.92), 1),
warehouse2: new serverClasses.interiorTemplateData(toVector3(1302.51, -1.78, 1001.02), 18),
warehouse3: new serverClasses.interiorTemplateData(toVector3(76.63, -301.15, 1.57), 0),
warehouse4: new serverClasses.interiorTemplateData(toVector3(1059.89, 2081.68, 10.82), 0),
bikeSchool: new serverClasses.interiorTemplateData(toVector3(1494.32, 1304.94, 1093.28), 3),
bar1: new serverClasses.interiorTemplateData(toVector3(501.98,-69.15,998.75), 11),
diner1: new serverClasses.interiorTemplateData(toVector3(457.30, -88.42, 999.55), 4),
diner2: new serverClasses.interiorTemplateData(toVector3(454.97, -110.10, 1000.07), 4),
diner3: new serverClasses.interiorTemplateData(toVector3(435.27, -80.95, 999.55), 5),
smallPoliceStation: new serverClasses.interiorTemplateData(toVector3(322.19, 302.49, 999.14), 5),
},
{ // GTA UG
},
{ // GTA IV
},
],
skinChangePosition: [
[],
[],
[],
[toVector3(258.14, -41.76, 1002.023), 1.322, 14],
[],
[],
],
/*
animations: [
false,
{
itemDrop: new serverClasses.animationData(),
itemPickup: new serverClasses.animationData(),
itemUse: new serverClasses.animationData(),
itemThrow: new serverClasses.animationData(),
itemPut: new serverClasses.animationData(),
itemTake: new serverClasses.animationData(),
itemGiveTake: new serverClasses.animationData(),
sit: new serverClasses.animationData(),
stand: new serverClasses.animationData(),
sitToStand: new serverClasses.animationData(),
standToSit: new serverClasses.animationData(),
standIdle: new serverClasses.animationData(),
talk: new serverClasses.animationData(),
wave: new serverClasses.animationData(),
greet: new serverClasses.animationData(),
handCuff: new serverClasses.animationData(),
handsUp: new serverClasses.animationData(),
},
{
itemDrop: new serverClasses.animationData(),
itemPickup: new serverClasses.animationData(),
itemUse: new serverClasses.animationData(),
itemThrow: new serverClasses.animationData(),
itemPut: new serverClasses.animationData(),
itemTake: new serverClasses.animationData(),
itemGiveTake: new serverClasses.animationData(),
sit: new serverClasses.animationData(),
stand: new serverClasses.animationData(),
sitToStand: new serverClasses.animationData(),
standToSit: new serverClasses.animationData(),
standIdle: new serverClasses.animationData(),
talk: new serverClasses.animationData(),
wave: new serverClasses.animationData(),
greet: new serverClasses.animationData(),
handCuff: new serverClasses.animationData(),
handsUp: new serverClasses.animationData(),
},
{
itemDrop: new serverClasses.animationData(),
itemPickup: new serverClasses.animationData(),
itemUse: new serverClasses.animationData(),
itemThrow: new serverClasses.animationData(),
itemPut: new serverClasses.animationData(),
itemTake: new serverClasses.animationData(),
itemGiveTake: new serverClasses.animationData(),
sit: new serverClasses.animationData(),
stand: new serverClasses.animationData(),
sitToStand: new serverClasses.animationData(),
standToSit: new serverClasses.animationData(),
standIdle: new serverClasses.animationData(),
talk: new serverClasses.animationData(),
wave: new serverClasses.animationData(),
greet: new serverClasses.animationData(),
handCuff: new serverClasses.animationData(),
handsUp: new serverClasses.animationData(),
},
false,
{
itemDrop: new serverClasses.animationData(),
itemPickup: new serverClasses.animationData(),
itemUse: new serverClasses.animationData(),
itemThrow: new serverClasses.animationData(),
itemPut: new serverClasses.animationData(),
itemTake: new serverClasses.animationData(),
itemGiveTake: new serverClasses.animationData(),
sit: new serverClasses.animationData(),
stand: new serverClasses.animationData(),
sitToStand: new serverClasses.animationData(),
standToSit: new serverClasses.animationData(),
standIdle: new serverClasses.animationData(),
talk: new serverClasses.animationData(),
wave: new serverClasses.animationData(),
greet: new serverClasses.animationData(),
handCuff: new serverClasses.animationData(),
handsUp: new serverClasses.animationData(),
}
],
tutorial: {
spawnPosition: [
false,
new serverClasses.tutorialVehicleData(new Vec3(0.0, 0.0, 0.0), 0.0, 0, 0),
new serverClasses.tutorialVehicleData(new Vec3(0.0, 0.0, 0.0), 0.0, 0, 0),
new serverClasses.tutorialSpawnData(new Vec3(0.0, 0.0, 0.0), 0.0, 0, 0),
false,
new serverClasses.tutorialVehicleData(new Vec3(0.0, 0.0, 0.0), 0.0, 0, 0),
],
vehicle: [
false,
new serverClasses.tutorialVehicleData(111, new Vec3(0.0, 0.0, 0.0)),
new serverClasses.tutorialVehicleData(175, new Vec3(0.0, 0.0, 0.0), 0.0),
new serverClasses.tutorialVehicleData(445, new Vec3(0.0, 0.0, 0.0), 0.0),
false,
new serverClasses.tutorialVehicleData(0, new Vec3(0.0, 0.0, 0.0), 0.0),
],
item: [
false,
new serverClasses.tutorialItemData(new Vec3(0.0, 0.0, 0.0)),
new serverClasses.tutorialItemData(new Vec3(0.0, 0.0, 0.0), 0.0),
new serverClasses.tutorialItemData(new Vec3(0.0, 0.0, 0.0), 0.0),
false,
new serverClasses.tutorialItemData(new Vec3(0.0, 0.0, 0.0), 0.0),
],
}
*/
}
return gameData;
};
// ===========================================================================

View File

@@ -29,363 +29,6 @@ let serverData = {
whiteListedGameScripts: [],
blackListedGameScripts: [],
},
policeStations: [
false,
[ // GTA 3
{
position: toVector3(1143.875, -675.1875, 14.97),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: toVector3(340.25, -1123.375, 25.98),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: toVector3(-1253.0, -138.1875, 58.75),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
{
position: toVector3(399.77, -468.90, 11.73),
heading: 0.0,
blip: false,
name: "Washington Beach",
},
{
position: toVector3(508.96, 512.07, 12.10),
heading: 0.0,
blip: false,
name: "Vice Point",
},
{
position: toVector3(-657.43, 762.31, 11.59),
heading: 0.0,
blip: false,
name: "Downtown",
},
{
position: toVector3(-885.08, -470.44, 13.11),
heading: 0.0,
blip: false,
name: "Little Havana",
},
],
[ // GTA SA
{
position: toVector3(1545.53, -1675.64, 13.561),
heading: -1.575,
blip: false,
name: "Los Santos",
},
],
[ // GTA UG
],
[ // GTA IV
{
position: toVector3(894.99, -357.39, 18.185),
heading: 2.923,
blip: false,
name: "Broker",
},
{
position: toVector3(435.40, 1592.29, 17.353),
heading: 3.087,
blip: false,
name: "South Bohan",
},
{
position: toVector3(974.93, 1870.45, 23.073),
heading: -1.621,
blip: false,
name: "Northern Gardens",
},
{
position: toVector3(1233.25, -89.13, 28.034),
heading: 1.568,
blip: false,
name: "South Slopes",
},
{
position: toVector3(50.12, 679.88, 15.316),
heading: 1.569,
blip: false,
name: "Middle Park East",
},
{
position: toVector3(85.21, 1189.82, 14.755),
heading: 3.127,
blip: false,
name: "East Holland",
},
{
position: toVector3(2170.87, 448.87, 6.085),
heading: 1.501,
blip: false,
name: "Francis International Airport",
},
{
position: toVector3(213.12, -211.70, 10.752),
heading: 0.200,
blip: false,
name: "Chinatown",
},
{
position: toVector3(-1714.95, 276.31, 22.134),
heading: 1.127,
blip: false,
name: "Acter",
},
{
position: toVector3(-1220.73, -231.53, 3.024),
heading: 2.210,
blip: false,
name: "Port Tudor",
},
{
position: toVector3(-927.66, 1263.63, 24.587),
heading: -0.913,
blip: false,
name: "Leftwood",
},
]
],
fireStations: [
false,
[ // GTA 3
{
position: toVector3(1103.70, -52.45, 7.49),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: toVector3(-78.48, -436.80, 16.17),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: toVector3(-1202.10, -14.67, 53.20),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
{
position: toVector3(953.13, 95.90, 35.004),
heading: 1.595,
blip: false,
name: "Broker",
},
{
position: toVector3(-271.02, 1542.15, 20.420),
heading: -1.160,
blip: false,
name: "Northwood",
},
{
position: toVector3(1120.47, 1712.36, 10.534),
heading: -0.682,
blip: false,
name: "Northern Gardens",
},
{
position: toVector3(2364.87, 166.83, 5.813),
heading: 0.156,
blip: false,
name: "Francis International Airport",
},
{
position: toVector3(295.40, -336.88, 4.963),
heading: 2.887,
blip: false,
name: "Chinatown",
},
]
],
hospitals: [
false,
[ // GTA 3
{
position: toVector3(1144.25, -596.875, 14.97),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: toVector3(183.5, -17.75, 16.21),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: toVector3(-1259.5, -44.5, 58.89),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
{
position: toVector3(493.14, 709.31, 11.80),
heading: 1.5,
blip: false,
name: "Unknown",
},
{
position: toVector3(-826.06, 1144.41, 12.41),
heading: 1.5,
blip: false,
name: "Unknown",
},
],
[ // GTA SA
{
position: toVector3(1172.96, -1323.42, 15.40),
heading: 1.5,
blip: false,
name: "All Saints",
},
{
position: toVector3(2034.04, -1405.07, 17.24),
heading: 1.5,
blip: false,
name: "County General",
},
],
[ // GTA UG
],
[ // GTA IV
{
position: toVector3(1199.59, 196.78, 33.554),
heading: 1.633,
blip: false,
name: "Schottler",
},
{
position: toVector3(980.71, 1831.61, 23.898),
heading: -0.049,
blip: false,
name: "Northern Gardens",
},
{
position: toVector3(-1317.27, 1277.20, 22.370),
heading: 2.246,
blip: false,
name: "Leftwood",
},
{
position: toVector3(-1538.43, 344.58, 20.943),
heading: -0.156,
blip: false,
name: "Acter",
},
]
],
payAndSprays: [
false,
[ // GTA 3
{
position: toVector3(925.4, -360.3, 10.83),
blip: false,
name: "Portland",
},
{
position: toVector3(381.8, -493.8, 25.95),
blip: false,
name: "Staunton Island",
},
{
position: toVector3(-1142.4, 35.01, 58.61),
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
ammunations: [
false,
[ // GTA 3
{
position: toVector3(1068.3, -400.9, 15.24),
blip: false,
name: "Portland",
},
{
position: toVector3(348.2, -717.9, 26.43),
blip: false,
name: "Staunton Island",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
fuelStations: [
false,
[ // GTA 3
{
position: toVector3(1161.9, -76.73, 7.27),
blip: false,
name: "Portland",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
};
// ===========================================================================

View File

@@ -199,7 +199,7 @@ function createDatabaseInsertQuery(tableName, data) {
for(let i in data) {
fields.push(data[i][0]);
if(typeof values[i][1] == "string") {
if(typeof data[i][1] == "string") {
values.push(`'${data[i][1]}'`);
} else {
values.push(data[i][1]);
@@ -216,14 +216,14 @@ function createDatabaseUpdateQuery(tableName, data, whereClause) {
let values = [];
for(let i in data) {
if(typeof values[i][1] == "string") {
if(typeof data[i][1] == "string") {
values.push(`${data[i][0]}='${data[i][1]}'`);
} else {
values.push(`${data[i][0]}=${data[i][1]}`);
}
}
let queryString = `INSERT INTO ${tableName} SET ${values.join(", ")} WHERE ${whereClause}`;
let queryString = `UPDATE ${tableName} SET ${values.join(", ")} WHERE ${whereClause}`;
return queryString;
}

View File

@@ -468,4 +468,18 @@ function togglePauseSavingToDatabase() {
getServerConfig().pauseSavingToDatabase = !getServerConfig().pauseSavingToDatabase;
}
// ===========================================================================
function createAccountDataForNewServer(serverId) {
let dbConnection = connectToDatabase();
let dbQuery = false;
if(dbConnection) {
dbQuery = queryDatabase(dbConnection, `SELECT * FROM acct_main`);
if(dbQuery) {
let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accountDatabaseId}, ${serverId})`;
quickDatabaseQuery(dbQueryString);
}
}
}
// ===========================================================================

View File

@@ -46,7 +46,9 @@ function onPlayerConnect(event, ipAddress, port) {
// ===========================================================================
function onPlayerJoin(event, client) {
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
}
// ===========================================================================
@@ -81,21 +83,24 @@ function onPlayerQuit(event, client, quitReasonId) {
function onPlayerChat(event, client, messageText) {
event.preventDefault();
if(!isNull(getPlayerData(client))) {
if(!isPlayerLoggedIn(client)) {
messagePlayerError(client, "You need to login before you can chat!");
return false;
}
if(!getPlayerData(client)) {
messagePlayerError(client, "You need to login before you can chat!");
return false;
}
if(!isPlayerSpawned(client)) {
messagePlayerError(client, "You need to login before you can chat!");
return false;
}
if(!isPlayerLoggedIn(client)) {
messagePlayerError(client, "You need to login before you can chat!");
return false;
}
if(isPlayerMuted(client)) {
messagePlayerError(client, "You are muted and can't chat!");
return false;
}
if(!isPlayerSpawned(client)) {
messagePlayerError(client, "You need to spawn before you can chat!");
return false;
}
if(isPlayerMuted(client)) {
messagePlayerError(client, "You are muted and can't chat!");
return false;
}
messageText = messageText.substring(0, 128);
@@ -320,11 +325,13 @@ function onPlayerDeath(client, position) {
updatePlayerSpawnedState(client, false);
setPlayerControlState(client, false);
setTimeout(function() {
fadeCamera(client, false, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, false, 1.0);
}
setTimeout(function() {
client.despawnPlayer();
if(getPlayerCurrentSubAccount(client).inJail) {
let closestJail = getClosestJail(position);
let closestJail = getClosestJail(getPlayerPosition(client));
client.despawnPlayer();
getPlayerCurrentSubAccount(client).interior = closestJail.interior;
getPlayerCurrentSubAccount(client).dimension = closestJail.dimension;
if(getServerGame() == GAME_GTA_IV) {
@@ -333,19 +340,24 @@ function onPlayerDeath(client, position) {
spawnPlayer(client, closestJail.position, closestJail.heading, getPlayerCurrentSubAccount(client).skin);
}
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
updatePlayerSpawnedState(client, true);
} else {
let closestHospital = getClosestHospital(position);
getPlayerCurrentSubAccount(client).interior = 0;
getPlayerCurrentSubAccount(client).dimension = 0;
let closestHospital = getClosestHospital(getPlayerPosition(client));
client.despawnPlayer();
getPlayerCurrentSubAccount(client).interior = closestHospital.interior;
getPlayerCurrentSubAccount(client).dimension = closestHospital.dimension;
if(getServerGame() == GAME_GTA_IV) {
spawnPlayer(client, closestHospital, 0.0, getPlayerCurrentSubAccount(client).skin);
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
} else {
spawnPlayer(client, closestHospital, 0.0, getPlayerCurrentSubAccount(client).skin);
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
}
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
updatePlayerSpawnedState(client, true);
}
}, 2000);

View File

@@ -63,6 +63,8 @@ function createHouseCommand(command, params, client) {
createHouseEntranceBlip(houseId);
createHouseExitBlip(houseId);
getHouseData(houseId).needsSaved = true;
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created house ${getInlineChatColourByType("houseGreen")}${tempHouseData.description}`);
}
@@ -84,6 +86,8 @@ function lockUnlockHouseCommand(command, params, client) {
}
}
getHouseData(houseId).needsSaved = true;
messagePlayerSuccess(client, `House '${getHouseData(houseId).description}' ${getLockedUnlockedTextFromBool((getHouseData(houseId).locked))}!`);
}
@@ -108,6 +112,8 @@ function setHouseDescriptionCommand(command, params, client) {
}
}
getHouseData(houseId).needsSaved = true;
messageAdmins(`${getPlayerName(client)} renamed house ${getInlineChatColourByType("houseGreen")}${oldDescription} ${getInlineChatColourByName("white")}to ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description}`);
}
@@ -127,6 +133,8 @@ function setHouseOwnerCommand(command, params, client) {
return false;
}
getHouseData(houseId).needsSaved = true;
getHouseData(houseId).ownerType = VRR_HOUSEOWNER_PLAYER;
getHouseData(houseId).ownerId = getServerData().clients[newHouseOwner.index].accountData.databaseId;
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}owner to ${getInlineChatColourByName("lightGrey")}${newHouseOwner.name}`);
@@ -149,6 +157,8 @@ function setHouseClanCommand(command, params, client) {
return false;
}
getHouseData(houseId).needsSaved = true;
getHouseData(houseId).ownerType = VRR_HOUSEOWNER_CLAN;
getHouseData(houseId).ownerId = getClanData(clanId).databaseId;
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}set house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}owner to the ${getInlineChatColourByType("clanOrange")}${getClanData(clanId).name} ${getInlineChatColourByName("white")}clan!`);
@@ -185,6 +195,8 @@ function setHousePickupCommand(command, params, client) {
createHouseEntrancePickup(houseId);
}
getHouseData(houseId).needsSaved = true;
messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]set house [#11CC11]${getHouseData(houseId).description} [#FFFFFF]pickup display to [#AAAAAA]${toLowerCase(typeParam)}`);
}
@@ -227,6 +239,8 @@ function setHouseInteriorTypeCommand(command, params, client) {
createHouseEntrancePickup(houseId);
createHouseExitPickup(houseId);
getHouseData(houseId).needsSaved = true;
messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]set house [#11CC11]${getHouseData(houseId).description} [#FFFFFF]interior type to [#AAAAAA]${toLowerCase(typeParam)}`);
}
@@ -261,6 +275,8 @@ function setHouseBlipCommand(command, params, client) {
createHouseEntranceBlip(houseId);
}
getHouseData(houseId).needsSaved = true;
messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]set house [#11CC11]${getHouseData(houseId).description} [#FFFFFF]blip display to [#AAAAAA]${toLowerCase(typeParam)}`);
}
@@ -283,6 +299,8 @@ function moveHouseEntranceCommand(command, params, client) {
createAllHouseBlips(houseId);
createAllHousePickups(houseId);
getHouseData(houseId).needsSaved = true;
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}moved house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}entrance to their position`);
}
@@ -307,6 +325,8 @@ function moveHouseExitCommand(command, params, client) {
createAllHouseBlips(houseId);
createAllHousePickups(houseId);
getHouseData(houseId).needsSaved = true;
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}moved house ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}exit to their position`);
}
@@ -421,7 +441,9 @@ function getPlayerHouse(client) {
function saveAllHousesToDatabase() {
logToConsole(LOG_INFO, `[VRR.House]: Saving all server houses to database ...`);
for(let i in getServerData().houses) {
saveHouseToDatabase(i);
if(getServerData().houses[i].needsSaved) {
saveHouseToDatabase(i);
}
}
logToConsole(LOG_INFO, `[VRR.House]: Saving all server houses to database ...`);
}
@@ -442,9 +464,9 @@ function saveHouseToDatabase(houseId) {
["house_owner_type", tempHouseData.ownerType],
["house_owner_id", tempHouseData.ownerId],
["house_locked", boolToInt(tempHouseData.locked)],
["house_entrance_fee", tempHouseData.entranceFee],
//["house_entrance_fee", tempHouseData.entranceFee],
["house_entrance_pos_x", tempHouseData.entrancePosition.x],
["house_entrance_pos_y", tempHouseData.entrancePosition.x],
["house_entrance_pos_y", tempHouseData.entrancePosition.y],
["house_entrance_pos_z", tempHouseData.entrancePosition.z],
["house_entrance_rot_z", tempHouseData.entranceRotation],
["house_entrance_int", tempHouseData.entranceInterior],
@@ -470,10 +492,11 @@ function saveHouseToDatabase(houseId) {
dbQuery = queryDatabase(dbConnection, queryString);
getServerData().houses[houseId].databaseId = getDatabaseInsertId(dbConnection);
} else {
let queryString = createDatabaseUpdateQuery("house_main", data, `WHERE house_id=${tempHouseData.databaseId}`);
let queryString = createDatabaseUpdateQuery("house_main", data, `house_id=${tempHouseData.databaseId}`);
dbQuery = queryDatabase(dbConnection, queryString);
}
getHouseData(houseId).needsSaved = false;
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
return true;
@@ -673,6 +696,91 @@ function getHouseInfoCommand(command, params, client) {
// ===========================================================================
function setHouseBuyPriceCommand(command, params, client) {
if(areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
let splitParams = params.split(" ");
let amount = toInteger(splitParams[0]) || 0;
let houseId = (isPlayerInAnyHouse(client)) ? getPlayerHouse(client) : getClosestHouseEntrance(getPlayerPosition(client));
if(!getHouseData(houseId)) {
messagePlayerError(client, "Business not found!");
return false;
}
if(amount < 0) {
messagePlayerError(client, `The amount can't be less than 0!`);
return false;
}
getHouseData(houseId).buyPrice = amount;
setEntityData(getHouseData(houseId).entrancePickup, "vrr.label.price", getHouseData(houseId).buyPrice, true);
messagePlayerSuccess(client, `${getInlineChatColourByName("white")}You set business ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description}'s ${getInlineChatColourByName("white")}for-sale price to ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(amount)}`);
}
// ===========================================================================
function setHouseRentPriceCommand(command, params, client) {
if(areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
let splitParams = params.split(" ");
let amount = toInteger(splitParams[0]) || 0;
let houseId = (isPlayerInAnyHouse(client)) ? getPlayerHouse(client) : getClosestHouseEntrance(getPlayerPosition(client));
if(!getHouseData(houseId)) {
messagePlayerError(client, "Business not found!");
return false;
}
if(amount < 0) {
messagePlayerError(client, `The amount can't be less than 0!`);
return false;
}
getHouseData(houseId).rentPrice = amount;
setEntityData(getHouseData(houseId).entrancePickup, "vrr.label.price", `Rent: ${getHouseData(houseId).rentPrice}`, true);
messagePlayerSuccess(client, `${getInlineChatColourByName("white")}You set business ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description}'s ${getInlineChatColourByName("white")}rent price to ${getInlineChatColourByName("lightGrey")}$${makeLargeNumberReadable(amount)}`);
}
// ===========================================================================
function buyHouseCommand(command, params, client) {
let houseId = (isPlayerInAnyHouse(client)) ? getPlayerHouse(client) : getClosestHouseEntrance(getPlayerPosition(client));
if(!getHouseData(houseId)) {
messagePlayerError(client, "House not found!");
return false;
}
if(getHouseData(houseId).buyPrice <= 0) {
messagePlayerError(client, `${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description} ${getInlineChatColourByName("white")}is not for sale!`);
return false;
}
if(getPlayerCurrentSubAccount(client).cash < getHouseData(houseId).buyPrice) {
messagePlayerError(client, `You don't have enough money to buy business ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).name}!`);
return false;
}
getHouseData(houseId).ownerType = VRR_BIZOWNER_PLAYER;
getHouseData(houseId).ownerId = getPlayerCurrentSubAccount(client).databaseId;
getHouseData(houseId).buyPrice = 0;
updateHousePickupLabelData(houseId);
messagePlayerSuccess(client, `You are now the owner of ${getInlineChatColourByType("houseGreen")}${getHouseData(houseId).description}`);
}
// ===========================================================================
function isPlayerInAnyHouse(client) {
return doesEntityDataExist(client, "vrr.inHouse");
}
@@ -807,4 +915,5 @@ function getHouseIdFromDatabaseId(databaseId) {
}
}
// ===========================================================================
// ===========================================================================

View File

@@ -107,8 +107,9 @@ function createGroundItemObject(itemId) {
setElementRotation(getItemData(itemId).object, getItemTypeData(getItemData(itemId).itemTypeIndex).dropRotation);
setElementOnAllDimensions(getItemData(itemId).object, false);
setElementDimension(getItemData(itemId).object, getItemData(itemId).dimension);
setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
//setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
addToWorld(getItemData(itemId).object);
//setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
getServerData().groundItemCache.push(itemId);
}
@@ -172,6 +173,8 @@ function createItemCommand(command, params, client) {
// ===========================================================================
function useItemCommand(command, params, client) {
clearPlayerItemActionState(client);
let hotBarSlot = getPlayerData(client).activeHotBarSlot;
if(!areParamsEmpty(params)) {
hotBarSlot = toInteger(params);
@@ -196,11 +199,12 @@ function useItemCommand(command, params, client) {
if(!getItemTypeData(getItemData(itemId).itemTypeIndex)) {
messagePlayerError(client, `The item you're trying to use is bugged. A bug report has been sent to the server developers.`);
submitBugReport(client, `(AUTOMATED REPORT) Drop Item: Getting item type ${getItemData(itemId).itemType} data for item ${itemId}/${getItemData(itemId).databaseId} in player hotbar slot ${hotBarSlot} (cache ${getPlayerData(client).hotBarItems[hotBarSlot]}) returned false.`);
submitBugReport(client, `(AUTOMATED REPORT) Use Item: Getting item type ${getItemData(itemId).itemType} data for item ${itemId}/${getItemData(itemId).databaseId} in player hotbar slot ${hotBarSlot} (cache ${getPlayerData(client).hotBarItems[hotBarSlot]}) returned false.`);
return false;
}
if(getItemTypeData(getItemData(itemId).itemTypeIndex).useType == VRR_ITEM_USETYPE_NONE || getItemTypeData(getItemData(itemId).itemTypeIndex).useType == VRR_ITEM_USETYPE_WEAPON) {
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
@@ -208,7 +212,7 @@ function useItemCommand(command, params, client) {
getPlayerData(client).itemActionItem = hotBarSlot;
showPlayerItemUseDelay(client, hotBarSlot);
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================
@@ -236,6 +240,8 @@ function deleteGroundItemCommand(command, params, client) {
// ===========================================================================
function pickupItemCommand(command, params, client) {
clearPlayerItemActionState(client);
let itemId = getClosestItemOnGround(getPlayerPosition(client));
if(!getItemData(itemId)) {
@@ -262,6 +268,7 @@ function pickupItemCommand(command, params, client) {
}
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
@@ -269,16 +276,18 @@ function pickupItemCommand(command, params, client) {
getPlayerData(client).itemActionItem = itemId;
showPlayerItemPickupDelay(client, itemId);
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================
function dropItemCommand(command, params, client) {
let hotBarSlot = getPlayerData(client).activeHotBarSlot;
clearPlayerItemActionState(client);
let hotBarSlot = getPlayerData(client).activeHotBarSlot;
if(!areParamsEmpty(params)) {
hotBarSlot = toInteger(params);
hotBarSlot = hotBarSlot-1;
}
if(hotBarSlot == -1) {
@@ -286,7 +295,6 @@ function dropItemCommand(command, params, client) {
}
if(getPlayerData(client).hotBarItems[hotBarSlot] == -1) {
messagePlayerError(client, `Please equip an item or provide a slot ID to drop an item`);
return false;
}
@@ -305,19 +313,22 @@ function dropItemCommand(command, params, client) {
}
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
getPlayerData(client).itemActionItem = hotBarSlot;
getPlayerData(client).itemActionState = VRR_ITEM_ACTION_DROP;
showPlayerItemDropDelay(client, itemId);
getPlayerData(client).itemActionItem = hotBarSlot;
showPlayerItemDropDelay(client, hotBarSlot);
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================
function putItemCommand(command, params, client) {
clearPlayerItemActionState(client);
let hotBarSlot = toInteger(params);
let itemId = getPlayerData(client).hotBarItems[hotBarSlot];
@@ -335,6 +346,7 @@ function putItemCommand(command, params, client) {
}
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
@@ -342,12 +354,14 @@ function putItemCommand(command, params, client) {
getPlayerData(client).itemActionState = VRR_ITEM_ACTION_PUT;
showPlayerItemPutDelay(client, hotBarSlot);
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================
function takeItemCommand(command, params, client) {
clearPlayerItemActionState(client);
let firstSlot = getPlayerFirstEmptyHotBarSlot(client);
if(firstSlot == -1) {
messagePlayerError(client, `You don't have any space to hold another item (full inventory)!`);
@@ -365,6 +379,7 @@ function takeItemCommand(command, params, client) {
}
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
@@ -372,7 +387,7 @@ function takeItemCommand(command, params, client) {
getPlayerData(client).itemActionState = VRR_ITEM_ACTION_TAKE;
showPlayerItemTakeDelay(client, itemId);
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================
@@ -692,6 +707,7 @@ function playerDropItem(client, hotBarSlot) {
meActionToNearbyPlayers(client, `drops ${getProperDeterminerForName(getItemName(itemId))} ${getItemName(itemId)} on the ground`);
resyncWeaponItemAmmo(client);
clearPlayerWeapons(client);
getPlayerData(client).hotBarItems[hotBarSlot] = -1;
updatePlayerHotBar(client);
@@ -731,6 +747,7 @@ function playerPutItem(client, hotBarSlot) {
}
resyncWeaponItemAmmo(client);
clearPlayerWeapons(client);
getItemData(itemId).ownerType = ownerType;
getItemData(itemId).ownerId = ownerId;
@@ -812,14 +829,15 @@ function playerSwitchItem(client, newHotBarSlot) {
}
resyncWeaponItemAmmo(client);
clearPlayerWeapons(client);
if(currentHotBarItem != -1) {
if(getItemData(currentHotBarItem)) {
if(getGlobalConfig().weaponEquippableTypes.indexOf(getItemTypeData(getItemData(currentHotBarItem).itemTypeIndex).useType) != -1) {
clearPlayerWeapons(client);
}
}
}
//if(currentHotBarItem != -1) {
// if(getItemData(currentHotBarItem)) {
// if(getGlobalConfig().weaponEquippableTypes.indexOf(getItemTypeData(getItemData(currentHotBarItem).itemTypeIndex).useType) != -1) {
// clearPlayerWeapons(client);
// }
// }
//}
if(newHotBarItem != -1) {
if(getItemData(newHotBarItem)) {
@@ -865,6 +883,8 @@ function playerSwitchItem(client, newHotBarSlot) {
// ===========================================================================
function playerSwitchHotBarSlotCommand(command, params, client) {
clearPlayerItemActionState(client);
if(areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
@@ -888,6 +908,7 @@ function playerSwitchHotBarSlotCommand(command, params, client) {
}
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
messagePlayerError(client, `Your hands are busy.`);
return false;
}
@@ -1273,36 +1294,37 @@ function getItemTypeIndexFromDatabaseId(databaseId) {
// ===========================================================================
function playerItemActionDelayComplete(client) {
if(getPlayerData(client).itemActionState != VRR_ITEM_ACTION_NONE) {
switch(getPlayerData(client).itemActionState) {
case VRR_ITEM_ACTION_USE:
playerUseItem(client, getPlayerData(client).itemActionItem);
break;
logToConsole(LOG_VERBOSE, `[VRR.Item]: Player ${getPlayerDisplayForConsole(client)} item action delay complete (State: ${getPlayerData(client).itemActionState})`);
switch(getPlayerData(client).itemActionState) {
case VRR_ITEM_ACTION_USE:
playerUseItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_DROP:
playerDropItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_DROP:
playerDropItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_TAKE:
playerTakeItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_TAKE:
playerTakeItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_PUT:
playerPutItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_PUT:
playerPutItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_PICKUP:
playerPickupItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_PICKUP:
playerPickupItem(client, getPlayerData(client).itemActionItem);
break;
case VRR_ITEM_ACTION_SWITCH:
playerSwitchItem(client, getPlayerData(client).itemActionItem);
break;
}
case VRR_ITEM_ACTION_SWITCH:
playerSwitchItem(client, getPlayerData(client).itemActionItem);
break;
default:
break;
}
getPlayerData(client).itemActionState = VRR_ITEM_ACTION_NONE;
getPlayerData(client).itemActionItem = -1;
clearPlayerItemActionState(client);
}
// ===========================================================================
@@ -1424,6 +1446,7 @@ function getOrderPriceForItemType(itemType) {
function clearPlayerItemActionState(client) {
getPlayerData(client).itemActionState = VRR_ITEM_ACTION_NONE;
getPlayerData(client).itemActionItem = -1;
}
// ===========================================================================
@@ -1519,10 +1542,14 @@ function showPlayerInventoryToPlayer(client, targetClient) {
resyncWeaponItemAmmo(targetClient);
let itemDisplay = [];
for(let i in getPlayerData(targetClient).hotBarItems) {
let colour = getInlineChatColourByName("lightGrey");
if(getPlayerData(targetClient).activeHotBarSlot == i) {
colour = getInlineChatColourByName("yellow");
}
if(getPlayerData(targetClient).hotBarItems[i] == -1) {
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}(Empty)`);
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${colour}(Empty)`);
} else {
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${getInlineChatColourByName("lightGrey")}${getItemTypeData(getItemData(getPlayerData(targetClient).hotBarItems[i]).itemTypeIndex).name}[${getItemValueDisplayForItem(getPlayerData(targetClient).hotBarItems[i])}]`);
itemDisplay.push(`[#CCCCCC]${toInteger(i)+1}: ${colour}${getItemTypeData(getItemData(getPlayerData(targetClient).hotBarItems[i]).itemTypeIndex).name}[${getItemValueDisplayForItem(getPlayerData(targetClient).hotBarItems[i])}]`);
}
}
@@ -1577,7 +1604,7 @@ function switchPlayerActiveHotBarSlot(client, slotId) {
if(slotId != -1) {
showPlayerItemSwitchDelay(client, slotId);
}
clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
//clearPlayerItemActionStateAfterDelay(client, getGlobalConfig().itemActionStateReset);
}
// ===========================================================================

View File

@@ -1589,8 +1589,8 @@ function createJobLocationPickup(jobId, locationId) {
pickupModelId = getJobData(jobId).pickupModel;
}
getJobData(jobId).locations[locationId].pickup = gta.createPickup(pickupModelId, getJobData(jobId).locations[locationId].position, getGameConfig().pickupTypes[getServerGame()].job);
getJobData(jobId).locations[locationId].pickup.dimension = getJobData(jobId).locations[locationId].dimension;
getJobData(jobId).locations[locationId].pickup = createGamePickup(pickupModelId, getJobData(jobId).locations[locationId].position, getGameConfig().pickupTypes[getServerGame()].job);
setElementDimension(getJobData(jobId).locations[locationId].pickup, getJobData(jobId).locations[locationId].dimension);
setEntityData(getServerData().jobs[jobId].locations[locationId].pickup, "vrr.owner.type", VRR_PICKUP_JOB, false);
setEntityData(getServerData().jobs[jobId].locations[locationId].pickup, "vrr.owner.id", locationId, false);
setEntityData(getServerData().jobs[jobId].locations[locationId].pickup, "vrr.label.type", VRR_LABEL_JOB, true);

View File

@@ -129,7 +129,11 @@ function enterExitPropertyCommand(command, params, client) {
clearPlayerStateToEnterExitProperty(client);
getPlayerData(client).pedState = VRR_PEDSTATE_EXITINGPROPERTY;
meActionToNearbyPlayers(client, "opens the door and exits the house");
fadeCamera(client, false, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, false, 1.0);
}
disableCityAmbienceForPlayer(client, true);
setTimeout(function() {
setPlayerPosition(client, inHouse.entrancePosition);
@@ -137,7 +141,9 @@ function enterExitPropertyCommand(command, params, client) {
setPlayerDimension(client, inHouse.entranceDimension);
setPlayerInterior(client, inHouse.entranceInterior);
setTimeout(function() {
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
setTimeout(function() {
enableCityAmbienceForPlayer(client);
clearPlayerOwnedPeds(client);
@@ -163,7 +169,11 @@ function enterExitPropertyCommand(command, params, client) {
getPlayerData(client).pedState = VRR_PEDSTATE_EXITINGPROPERTY;
clearPlayerStateToEnterExitProperty(client)
meActionToNearbyPlayers(client, "opens the door and exits the business");
fadeCamera(client, false, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, false, 1.0);
}
disableCityAmbienceForPlayer(client, true);
setTimeout(function() {
setPlayerPosition(client, inBusiness.entrancePosition);
@@ -171,7 +181,9 @@ function enterExitPropertyCommand(command, params, client) {
setPlayerDimension(client, inBusiness.entranceDimension);
setPlayerInterior(client, inBusiness.entranceInterior);
setTimeout(function() {
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
setTimeout(function() {
enableCityAmbienceForPlayer(client);
clearPlayerOwnedPeds(client);
@@ -205,7 +217,9 @@ function enterExitPropertyCommand(command, params, client) {
clearPlayerStateToEnterExitProperty(client)
meActionToNearbyPlayers(client, "opens the door and enters the business");
getPlayerData(client).pedState = VRR_PEDSTATE_ENTERINGPROPERTY;
fadeCamera(client, false, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, false, 1.0);
}
disableCityAmbienceForPlayer(client);
setTimeout(function() {
setPlayerPosition(client, closestBusiness.exitPosition);
@@ -213,7 +227,9 @@ function enterExitPropertyCommand(command, params, client) {
setPlayerDimension(client, closestBusiness.exitDimension);
setPlayerInterior(client, closestBusiness.exitInterior);
setTimeout(function() {
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
getPlayerData(client).pedState = VRR_PEDSTATE_READY;
if(doesBusinessHaveAnyItemsToBuy(closestBusinessId)) {
messagePlayerInfo(client, "Use /buy to purchase items from this business");
@@ -251,7 +267,9 @@ function enterExitPropertyCommand(command, params, client) {
clearPlayerStateToEnterExitProperty(client)
meActionToNearbyPlayers(client, "opens the door and enters the house");
getPlayerData(client).pedState = VRR_PEDSTATE_ENTERINGPROPERTY;
fadeCamera(client, false, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, false, 1.0);
}
disableCityAmbienceForPlayer(client);
setTimeout(function() {
setPlayerPosition(client, closestHouse.exitPosition);
@@ -259,7 +277,9 @@ function enterExitPropertyCommand(command, params, client) {
setPlayerDimension(client, closestHouse.exitDimension);
setPlayerInterior(client, closestHouse.exitInterior);
setTimeout(function() {
fadeCamera(client, true, 1.0);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1.0);
}
getPlayerData(client).pedState = VRR_PEDSTATE_READY;
setTimeout(function() {
if(closestHouse.streamingRadioStation != -1) {
@@ -281,16 +301,16 @@ function enterExitPropertyCommand(command, params, client) {
// ===========================================================================
function loadGameFixesResource() {
switch(getServerGame()) {
case GAME_GTA_III:
if(findResourceByName("asshat-gta3") != null) {
findResourceByName("asshat-gta3").start();
}
break;
default:
break;
}
//switch(getServerGame()) {
// case GAME_GTA_III:
// if(findResourceByName("asshat-gta3") != null) {
// findResourceByName("asshat-gta3").start();
// }
// break;
//
// default:
// break;
//}
return true;
}
@@ -361,8 +381,10 @@ function showPlayerPrompt(client, promptType, promptMessage, promptTitle) {
// ===========================================================================
function updateServerGameTime() {
gta.time.hour = getServerConfig().hour;
gta.time.minute = getServerConfig().minute;
if(isTimeSupported()) {
gta.time.hour = getServerConfig().hour;
gta.time.minute = getServerConfig().minute;
}
}
// ===========================================================================

View File

@@ -904,9 +904,9 @@ function getAllVehiclesOwnedByPlayerCommand(command, params, client) {
let vehicles = getAllVehiclesOwnedByPlayer(targetClient);
messageClientInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Houses ${getInlineChatColourByType("clanOrange")}==========================`);
messagePlayerInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Vehicles ${getInlineChatColourByType("clanOrange")}==========================`);
for(let i in vehicles) {
messagePlayerNormal(client, `🚗 ${getInlineChatColourByType("vehiclePurple")}[Vehicle Info] ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${vehicles[i].vehicle.id}, ${getInlineChatColourByName("white")}DatabaseID: ${getInlineChatColourByName("lightGrey")}${vehicles[i].databaseId}, ${getInlineChatColourByName("white")}Type: ${getInlineChatColourByName("lightGrey")}${getVehicleName(vehicles[i].vehicle)}[${vehicles[i].model}], ${getInlineChatColourByName("white")}BuyPrice: ${getInlineChatColourByName("lightGrey")}${vehicles[i].buyPrice}, ${getInlineChatColourByName("white")}RentPrice: ${getInlineChatColourByName("lightGrey")}${vehicles[i].rentPrice}, ${getInlineChatColourByName("white")}Locked: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(vehicles[i].locked)}, ${getInlineChatColourByName("white")}Engine: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(vehicles[i].engine)}`);
messagePlayerNormal(client, `🚗 ${getInlineChatColourByType("vehiclePurple")}[Vehicle Info] ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${vehicles[i].index}, ${getInlineChatColourByName("white")}DatabaseID: ${getInlineChatColourByName("lightGrey")}${vehicles[i].databaseId}, ${getInlineChatColourByName("white")}Type: ${getInlineChatColourByName("lightGrey")}${getVehicleName(vehicles[i].vehicle)}[${vehicles[i].model}], ${getInlineChatColourByName("white")}BuyPrice: ${getInlineChatColourByName("lightGrey")}${vehicles[i].buyPrice}, ${getInlineChatColourByName("white")}RentPrice: ${getInlineChatColourByName("lightGrey")}${vehicles[i].rentPrice}, ${getInlineChatColourByName("white")}Locked: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(vehicles[i].locked)}, ${getInlineChatColourByName("white")}Engine: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(vehicles[i].engine)}`);
}
}
@@ -927,7 +927,7 @@ function getAllBusinessesOwnedByPlayerCommand(command, params, client) {
let businesses = getAllBusinessesOwnedByPlayer(targetClient);
messageClientInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Businesses ${getInlineChatColourByType("clanOrange")}========================`);
messagePlayerInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Businesses ${getInlineChatColourByType("clanOrange")}========================`);
for(let i in businesses) {
messagePlayerNormal(client, `🏢 ${getInlineChatColourByType("businessBlue")}[Business Info] ${getInlineChatColourByName("white")}Name: ${getInlineChatColourByName("lightGrey")}${businesses[i].name}, ${getInlineChatColourByName("white")}Locked: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(intToBool(businesses[i].locked))}, ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${businesses[i].index}/${businesses[i].databaseId}`);
}
@@ -950,7 +950,7 @@ function getAllHousesOwnedByPlayerCommand(command, params, client) {
let houses = getAllHousesOwnedByPlayer(targetClient);
messageClientInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Houses ${getInlineChatColourByType("clanOrange")}============================`);
messagePlayerInfo(client, `${getInlineChatColourByType("clanOrange")}== ${getInlineChatColourByType("jobYellow")}Player Houses ${getInlineChatColourByType("clanOrange")}============================`);
for(let i in houses) {
messagePlayerNormal(client, `🏠 ${getInlineChatColourByType("houseGreen")}[House Info] ${getInlineChatColourByName("white")}Description: ${getInlineChatColourByName("lightGrey")}${houses[i].description}, ${getInlineChatColourByName("white")}Locked: ${getInlineChatColourByName("lightGrey")}${getYesNoFromBool(intToBool(houses[i].locked))}, ${getInlineChatColourByName("white")}ID: ${getInlineChatColourByName("lightGrey")}${houses[i].index}/${houses[i].databaseId}`);
}

File diff suppressed because it is too large Load Diff

View File

@@ -723,6 +723,9 @@ let gameData = {
"UfoPanak",
"invisible"
],
],
objectModels: [
],
weaponModels: [
[],
@@ -775,7 +778,244 @@ let gameData = {
meleeWeapons: [
[],
[2, 3, 4],
]
],
excludedGroundSnowModels: [
false,
[],
[],
[],
[],
],
pickupModels: [
{},
{ // GTA 3
policeStation: 1361,
fireStation: 1361,
hospital: 1361,
ammunation: 1361,
payAndSpray: 1361,
vehicleDealership: 1361,
restaurant: 1361,
fastFood: 1361,
bank: 1323,
fuelStation: 1361,
business: 1361,
house: 1361,
clothes: 1361,
misc: 1361,
exit: 1361
},
{ // GTA Vice City
policeStation: 375,
fireStation: 406,
hospital: 366,
ammunation: 406,
payAndSpray: 406,
vehicleDealership: 406,
restaurant: 406,
fastFood: 406,
bank: 408,
fuelStation: 406,
business: 406,
house: 407,
clothes: 409,
misc: 406,
exit: 406,
},
{ // GTA San Andreas
policeStation: 1247,
fireStation: 1318,
hospital: 1240,
ammunation: 1239,
payAndSpray: 1239,
vehicleDealership: 1239,
restaurant: 1239,
fastFood: 1239,
bank: 1274,
fuelStation: 1239,
business: 1272,
house: 1273,
clothes: 1275,
misc: 1239,
exit: 1318,
}
],
pickupTypes: [
{},
{ // GTA 3
business: 255,
house: 255,
bank: 255,
clothes: 255,
info: 255,
job: 255,
},
{ // GTA Vice City
business: 2,
house: 2,
bank: 2,
clothes: 2,
info: 2,
job: 2,
},
{ // GTA San Andreas
business: 1,
house: 1,
bank: 1,
clothes: 1,
info: 1,
job: 1,
}
],
// THIS IS SCREEN HEIGHT, NOT ACTUAL DOOR POSITION IN THE WORLD
propertyLabelHeight: [
false,
85,
85,
85,
85,
85,
85,
],
removedWorldObjects: [
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
],
[ // Mafia 2
],
[ // Mafia 3
],
[ // Mafia Definitive Edition
],
],
defaultBusinessItems:
[
{
},
{
clothingStore: [
["Outfit", 500, 2]
],
legalGunStore: [
["Colt 45", 500, 2],
["Shotgun", 500, 2],
["Baseball Bat", 500, 2]
],
illegalGunStore: [
["Uzi", 500, 2],
["AK-47", 500, 2],
["M16", 500, 2],
["Sniper Rifle", 500, 2]
],
gasStation: [
["Bottle of Soda", 500, 2],
["Can of Soda", 500, 2],
["Slice of Pizza", 500, 2],
["Bottle of Water", 500, 2],
["Can of Beer", 500, 2],
],
electronicsStore: [
["Phone", 500, 2],
["Walkie Talkie", 500, 2],
["Megaphone", 500, 2],
["Tazer", 500, 2],
["Camera", 500, 2],
],
bar: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
club: [
["Bottle of Vodka", 500, 2],
["Bottle of Whiskey", 500, 2],
["Bottle of Soda", 500, 2],
["Bottle of Wine", 500, 2],
["Bottle of Bourbon", 500, 2],
["Shot of Bourbon", 500, 2],
["Shot of Vodka", 500, 2],
["Shot of Whiskey", 500, 2],
["Glass of Wine", 500, 2],
],
chicken: [
["Bucket of Chicken", 500, 2],
["Chicken Tenders Meal", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
burger: [
["Bacon Cheeseburger", 500, 2],
["Double Cheeseburger", 500, 2],
["Big Boy Burger", 500, 2],
["Large Fries", 500, 2],
["Small Fries", 500, 2],
["Bottle of Soda", 500, 2],
],
chinese: [
["Egg Roll", 500, 2],
["Lo Mein", 500, 2],
["Fried Rice", 500, 2],
["Crab Rangoon", 500, 2],
["Egg Drop Soup", 500, 2],
["Moo Shu Pork", 500, 2],
["Egg Foo Young", 500, 2],
["Sesame Chicken", 500, 2],
],
italian: [
["Bottle of Wine", 500, 2],
["Glass of Wine", 500, 2],
["Arancini", 500, 2],
["Lasagne", 500, 2],
["Chicken Alfredo", 500, 2],
["Fettucine Alfredo", 500, 2],
["Chicken Parmigiana", 500, 2],
["Chicken Carbonara", 500, 2],
["Sausage Rigatoni", 500, 2],
["Chicken Salad", 500, 2],
["Caesar Salad", 500, 2],
],
mexican: [
["Crunchy Taco", 500, 2],
["Beaf and Bean Burrito", 500, 2],
["Burrito Supreme", 500, 2],
["Cheesy Nachos", 500, 2],
["Nacho Supreme", 500, 2],
["Bottle of Soda", 500, 2],
],
pizza: [
["Large Pizza", 500, 2],
["Medium Pizza", 500, 2],
["Small Pizza", 500, 2],
["Buffalo Wings", 500, 2],
["Hot Wings", 500, 2],
["Bottle of Soda", 500, 2],
],
},
],
};
// ===========================================================================
@@ -1176,7 +1416,7 @@ function getPlayerLastVehicle(client) {
// ===========================================================================
function isVehicleObject(vehicle) {
return (vehicle instanceof Vehicle);
return (vehicle.type == ELEMENT_VEHICLE);
}
// ===========================================================================

View File

@@ -89,77 +89,81 @@ function saveSubAccountToDatabase(subAccountData) {
let safeLastName = escapeDatabaseString(dbConnection, subAccountData.lastName);
let safeMiddleName = escapeDatabaseString(dbConnection, subAccountData.middleName);
let dbQueryString = `
UPDATE sacct_main SET
sacct_name_first='${safeFirstName}',
sacct_name_last='${safeLastName}',
sacct_name_middle='${safeMiddleName}',
sacct_cash=${subAccountData.cash},
sacct_when_lastlogin=${subAccountData.lastLogin},
sacct_pos_x=${subAccountData.spawnPosition.x},
sacct_pos_y=${subAccountData.spawnPosition.y},
sacct_pos_z=${subAccountData.spawnPosition.z},
sacct_angle=${subAccountData.spawnHeading},
sacct_int=${subAccountData.interior},
sacct_vw=${subAccountData.dimension},
sacct_inhouse=${(subAccountData.inHouse != 0) ? getHouseData(subAccountData.inHouse).databaseId : 0},
sacct_inbusiness=${(subAccountData.inBusiness != 0) ? getBusinessData(subAccountData.inBusiness).databaseId : 0},
sacct_health=${subAccountData.health},
sacct_armour=${subAccountData.armour}
WHERE sacct_id=${subAccountData.databaseId}`;
let data = [
//["sacct_svr", getServerId()],
["sacct_acct", subAccountData.account],
["sacct_name_first", safeFirstName],
["sacct_name_last", safeLastName],
["sacct_name_middle", safeMiddleName],
["sacct_cash", subAccountData.cash],
["sacct_when_lastlogin", subAccountData.lastLogin],
["sacct_pos_x", subAccountData.spawnPosition.x],
["sacct_pos_y", subAccountData.spawnPosition.x],
["sacct_pos_z", subAccountData.spawnPosition.z],
["sacct_rot_z", subAccountData.spawnHeading],
["sacct_int", subAccountData.interior],
["sacct_vw", subAccountData.dimension],
["sacct_inhouse", (subAccountData.inHouse != 0) ? getHouseData(subAccountData.inHouse).databaseId : 0],
["sacct_inbusiness", (subAccountData.inBusiness != 0) ? getBusinessData(subAccountData.inBusiness).databaseId : 0],
["sacct_health", subAccountData.health],
["sacct_armour", subAccountData.armour],
];
//dbQueryString = dbQueryString.trim();
dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
let dbQuery = queryDatabase(dbConnection, dbQueryString);
let dbQuery = null;
let queryString = createDatabaseUpdateQuery("sacct_main", data, `sacct_id=${subAccountData.databaseId}`);
dbQuery = queryDatabase(dbConnection, queryString);
freeDatabaseQuery(dbQuery);
let data2 = [
//["sacct_svr_svr", getServerId()],
["sacct_svr_sacct", subAccountData.databaseId],
["sacct_svr_job", subAccountData.job],
//["sacct_svr_job_rank", getServerId()],
["sacct_svr_clan", subAccountData.clan],
["sacct_svr_clan_rank", subAccountData.clanRank],
["sacct_svr_clan_tag", safeClanTag],
["sacct_svr_clan_title", safeClanTitle],
["sacct_svr_clan_flags", subAccountData.clanFlags],
["sacct_svr_scale_x", subAccountData.pedScale.x],
["sacct_svr_scale_y", subAccountData.pedScale.y],
["sacct_svr_scale_z", subAccountData.pedScale.z],
["sacct_svr_skin", subAccountData.skin],
["sacct_svr_fightstyle", subAccountData.fightStyle],
["sacct_svr_walkstyle", subAccountData.walkStyle],
["sacct_svr_hd_part_hair_model", subAccountData.bodyParts.hair[0]],
["sacct_svr_hd_part_hair_texture", subAccountData.bodyParts.hair[1]],
["sacct_svr_hd_part_head_model", subAccountData.bodyParts.head[0]],
["sacct_svr_hd_part_head_texture", subAccountData.bodyParts.head[1]],
["sacct_svr_hd_part_upper_model", subAccountData.bodyParts.upper[0]],
["sacct_svr_hd_part_upper_texture", subAccountData.bodyParts.upper[1]],
["sacct_svr_hd_part_lower_model", subAccountData.bodyParts.lower[0]],
["sacct_svr_hd_part_lower_texture", subAccountData.bodyParts.lower[1]],
["sacct_svr_hd_prop_hair_model", subAccountData.bodyProps.hair[0]],
["sacct_svr_hd_prop_hair_texture", subAccountData.bodyProps.hair[1]],
["sacct_svr_hd_prop_eyes_model", subAccountData.bodyProps.eyes[0]],
["sacct_svr_hd_prop_eyes_texture", subAccountData.bodyProps.eyes[1]],
["sacct_svr_hd_prop_head_model", subAccountData.bodyProps.head[0]],
["sacct_svr_hd_prop_head_texture", subAccountData.bodyProps.head[1]],
["sacct_svr_hd_prop_lefthand_model", subAccountData.bodyProps.leftHand[0]],
["sacct_svr_hd_prop_lefthand_texture", subAccountData.bodyProps.leftHand[1]],
["sacct_svr_hd_prop_righthand_model", subAccountData.bodyProps.rightHand[0]],
["sacct_svr_hd_prop_righthand_texture", subAccountData.bodyProps.rightHand[1]],
["sacct_svr_hd_prop_leftwrist_model", subAccountData.bodyProps.leftWrist[0]],
["sacct_svr_hd_prop_leftwrist_texture", subAccountData.bodyProps.leftWrist[1]],
["sacct_svr_hd_prop_rightwrist_model", subAccountData.bodyProps.rightWrist[0]],
["sacct_svr_hd_prop_rightwrist_texture", subAccountData.bodyProps.rightWrist[1]],
["sacct_svr_hd_prop_hip_model", subAccountData.bodyProps.hip[0]],
["sacct_svr_hd_prop_hip_texture",subAccountData.bodyProps.hip[1]],
["sacct_svr_hd_prop_leftfoot_model", subAccountData.bodyProps.leftFoot[0]],
["sacct_svr_hd_prop_leftfoot_texture", subAccountData.bodyProps.leftFoot[1]],
["sacct_svr_hd_prop_rightfoot_model", subAccountData.bodyProps.rightFoot[0]],
["sacct_svr_hd_prop_rightfoot_texture", subAccountData.bodyProps.rightFoot[1]],
];
dbQuery = null;
dbQueryString = `
UPDATE sacct_svr SET
sacct_svr_job=${subAccountData.job},
sacct_svr_clan=${subAccountData.clan},
sacct_svr_clan_rank=${subAccountData.clanRank},
sacct_svr_clan_tag='${safeClanTag}',
sacct_svr_clan_title='${safeClanTitle}',
sacct_svr_clan_flags=${subAccountData.clanFlags},
sacct_svr_scale_x=${subAccountData.pedScale.x},
sacct_svr_scale_y=${subAccountData.pedScale.y},
sacct_svr_scale_z=${subAccountData.pedScale.z},
sacct_svr_skin=${subAccountData.skin},
sacct_svr_fightstyle=${subAccountData.fightStyle},
sacct_svr_walkstyle=${subAccountData.walkStyle},
sacct_svr_hd_part_hair_model=${subAccountData.bodyParts.hair[0]},
sacct_svr_hd_part_hair_texture=${subAccountData.bodyParts.hair[1]},
sacct_svr_hd_part_head_model=${subAccountData.bodyParts.head[0]},
sacct_svr_hd_part_head_texture=${subAccountData.bodyParts.head[1]},
sacct_svr_hd_part_upper_model=${subAccountData.bodyParts.upper[0]},
sacct_svr_hd_part_upper_texture=${subAccountData.bodyParts.upper[1]},
sacct_svr_hd_part_lower_model=${subAccountData.bodyParts.lower[0]},
sacct_svr_hd_part_lower_texture=${subAccountData.bodyParts.lower[1]},
sacct_svr_hd_prop_hair_model=${subAccountData.bodyProps.hair[0]},
sacct_svr_hd_prop_hair_texture=${subAccountData.bodyProps.hair[1]},
sacct_svr_hd_prop_eyes_model=${subAccountData.bodyProps.eyes[0]},
sacct_svr_hd_prop_eyes_texture=${subAccountData.bodyProps.eyes[1]},
sacct_svr_hd_prop_head_model=${subAccountData.bodyProps.head[0]},
sacct_svr_hd_prop_head_texture=${subAccountData.bodyProps.head[1]},
sacct_svr_hd_prop_lefthand_model=${subAccountData.bodyProps.leftHand[0]},
sacct_svr_hd_prop_lefthand_texture=${subAccountData.bodyProps.leftHand[1]},
sacct_svr_hd_prop_righthand_model=${subAccountData.bodyProps.rightHand[0]},
sacct_svr_hd_prop_righthand_texture=${subAccountData.bodyProps.rightHand[1]},
sacct_svr_hd_prop_leftwrist_model=${subAccountData.bodyProps.leftWrist[0]},
sacct_svr_hd_prop_leftwrist_texture=${subAccountData.bodyProps.leftWrist[1]},
sacct_svr_hd_prop_rightwrist_model=${subAccountData.bodyProps.rightWrist[0]},
sacct_svr_hd_prop_rightwrist_texture=${subAccountData.bodyProps.rightWrist[1]},
sacct_svr_hd_prop_hip_model=${subAccountData.bodyProps.hip[0]},
sacct_svr_hd_prop_hip_texture=${subAccountData.bodyProps.hip[1]},
sacct_svr_hd_prop_leftfoot_model=${subAccountData.bodyProps.leftFoot[0]},
sacct_svr_hd_prop_leftfoot_texture=${subAccountData.bodyProps.leftFoot[1]},
sacct_svr_hd_prop_rightfoot_model=${subAccountData.bodyProps.rightFoot[0]},
sacct_svr_hd_prop_rightfoot_texture=${subAccountData.bodyProps.rightFoot[1]}
WHERE sacct_svr_sacct=${subAccountData.databaseId} AND sacct_svr_server = ${getServerId()}`;
dbQueryString = dbQueryString.replace(/(?:\r\n|\r|\n|\t)/g, "");
dbQuery = queryDatabase(dbConnection, dbQueryString);
queryString = "";
queryString = createDatabaseUpdateQuery("sacct_svr", data2, `sacct_svr_sacct=${subAccountData.databaseId} AND sacct_svr_server = ${getServerId()}`);
dbQuery = queryDatabase(dbConnection, queryString);
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);

View File

@@ -12,7 +12,9 @@ let serverTimers = {};
// ===========================================================================
function updateTimeRule() {
server.setRule("Time", makeReadableTime(gta.time.hour, gta.time.minute));
if(isTimeSupported()) {
server.setRule("Time", makeReadableTime(gta.time.hour, gta.time.minute));
}
}
// ===========================================================================

View File

@@ -918,7 +918,7 @@ function getSkinIdFromName(params, gameId = getServerGame()) {
function getClosestHospital(position) {
let closest = 0;
for(let i in getGameData().hospitals[getServerGame()]) {
if(getDistance(getGameData().hospitals[getServerGame()][i], position) < getDistance(getGameData().hospitals[getServerGame()][closest], position)) {
if(getDistance(getGameData().hospitals[getServerGame()][i].position, position) < getDistance(getGameData().hospitals[getServerGame()][closest].position, position)) {
closest = i;
}
}
@@ -931,7 +931,7 @@ function getClosestHospital(position) {
function getClosestPoliceStation(position) {
let closest = 0;
for(let i in getGameData().policeStations[getServerGame()]) {
if(getGameData().policeStations[getServerGame()][i].distance(position) < getGameData().policeStations[getServerGame()][closest]) {
if(getDistance(getGameData().policeStations[getServerGame()][i].position, position) < getDistance(getGameData().policeStations[getServerGame()][closest].position, position)) {
closest = i;
}
}
@@ -1119,8 +1119,13 @@ function checkPlayerPedStates() {
// ===========================================================================
function showConnectCameraToPlayer(client) {
fadeCamera(client, true, 1);
setPlayerCameraLookAt(client, getServerConfig().connectCameraPosition, getServerConfig().connectCameraLookAt);
if(isFadeCameraSupported()) {
fadeCamera(client, true, 1);
}
if(isCustomCameraSupported()) {
setPlayerCameraLookAt(client, getServerConfig().connectCameraPosition, getServerConfig().connectCameraLookAt);
}
}
// ===========================================================================
@@ -1515,19 +1520,19 @@ function splitArrayIntoChunks(originalArray, perChunk) {
// ===========================================================================
function getAllVehiclesOwnedByPlayer(client) {
return getServerData().vehicles.filter(v => v.ownerType == VRR_VEHOWNER_PLAYER && v.ownerId == getPlayerCurrentSubAccount(client));
return getServerData().vehicles.filter((v) => v.ownerType == VRR_VEHOWNER_PLAYER && v.ownerId == getPlayerCurrentSubAccount(client).databaseId);
}
// ===========================================================================
function getAllBusinessesOwnedByPlayer(client) {
return getServerData().businesses.filter(v => v.ownerType == VRR_BIZOWNER_PLAYER && v.ownerId == getPlayerCurrentSubAccount(client));
return getServerData().businesses.filter((b) => b.ownerType == VRR_BIZOWNER_PLAYER && b.ownerId == getPlayerCurrentSubAccount(client).databaseId);
}
// ===========================================================================
function getAllHousesOwnedByPlayer(client) {
return getServerData().houses.filter(v => v.ownerType == VRR_HOUSEOWNER_PLAYER && v.ownerId == getPlayerCurrentSubAccount(client));
return getServerData().houses.filter((h) => h.ownerType == VRR_HOUSEOWNER_PLAYER && h.ownerId == getPlayerCurrentSubAccount(client).databaseId);
}
// ===========================================================================

View File

@@ -11,6 +11,7 @@ function initVehicleScript() {
logToConsole(LOG_INFO, "[VRR.Vehicle]: Initializing vehicle script ...");
getServerData().vehicles = loadVehiclesFromDatabase();
spawnAllVehicles();
setAllVehicleIndexes();
logToConsole(LOG_INFO, "[VRR.Vehicle]: Vehicle script initialized successfully!");
return true;
}
@@ -46,7 +47,7 @@ function saveAllVehiclesToDatabase() {
let vehicles = getServerData().vehicles;
for(let i in vehicles) {
if(vehicles[i].needsSaved) {
saveVehicleToDatabase(vehicles[i]);
saveVehicleToDatabase(i);
}
}
logToConsole(LOG_INFO, "[VRR.Vehicle]: Saved all vehicles to database!");
@@ -87,10 +88,10 @@ function saveVehicleToDatabase(vehicleDataId) {
}
}
let colour1RGBA = rgbaArrayFromToColour(vehicleData.colour1RGBA);
let colour2RGBA = rgbaArrayFromToColour(vehicleData.colour2RGBA);
let colour3RGBA = rgbaArrayFromToColour(vehicleData.colour3RGBA);
let colour4RGBA = rgbaArrayFromToColour(vehicleData.colour4RGBA);
let colour1RGBA = rgbaArrayFromToColour(tempVehicleData.colour1RGBA);
let colour2RGBA = rgbaArrayFromToColour(tempVehicleData.colour2RGBA);
let colour3RGBA = rgbaArrayFromToColour(tempVehicleData.colour3RGBA);
let colour4RGBA = rgbaArrayFromToColour(tempVehicleData.colour4RGBA);
let data = [
["veh_server", getServerId()],
@@ -102,17 +103,17 @@ function saveVehicleToDatabase(vehicleDataId) {
["veh_buy_price", boolToInt(tempVehicleData.buyPrice)],
["veh_rent_price", boolToInt(tempVehicleData.rentPrice)],
["veh_pos_x", tempVehicleData.spawnPosition.x],
["veh_pos_y", tempVehicleData.spawnPosition.x],
["veh_pos_y", tempVehicleData.spawnPosition.y],
["veh_pos_z", tempVehicleData.spawnPosition.z],
["veh_rot_z", tempVehicleData.spawnRotation],
["veh_col1", tempVehicleData.spawnRotation],
["veh_col2", tempVehicleData.spawnRotation],
["veh_col3", tempVehicleData.spawnRotation],
["veh_col4", tempVehicleData.spawnRotation],
["veh_col1_isrgba", tempVehicleData.colour1IsRGBA],
["veh_col2_isrgba", tempVehicleData.colour1IsRGBA],
["veh_col3_isrgba", tempVehicleData.colour1IsRGBA],
["veh_col4_isrgba", tempVehicleData.colour1IsRGBA],
["veh_col1_isrgb", tempVehicleData.colour1IsRGBA],
["veh_col2_isrgb", tempVehicleData.colour1IsRGBA],
["veh_col3_isrgb", tempVehicleData.colour1IsRGBA],
["veh_col4_isrgb", tempVehicleData.colour1IsRGBA],
["veh_col1_r", colour1RGBA[0]],
["veh_col1_g", colour1RGBA[1]],
["veh_col1_b", colour1RGBA[2]],
@@ -158,7 +159,7 @@ function saveVehicleToDatabase(vehicleDataId) {
getServerData().vehicles[vehicleDataId].databaseId = getDatabaseInsertId(dbConnection);
getServerData().vehicles[vehicleDataId].needsSaved = false;
} else {
let queryString = createDatabaseUpdateQuery("veh_main", data, `WHERE veh_id=${tempVehicleData.databaseId}`);
let queryString = createDatabaseUpdateQuery("veh_main", data, `veh_id=${tempVehicleData.databaseId}`);
dbQuery = queryDatabase(dbConnection, queryString);
getServerData().vehicles[vehicleDataId].needsSaved = false;
}
@@ -1284,4 +1285,12 @@ function resetVehiclePosition(vehicle) {
}
}
// ===========================================================================
function setAllVehicleIndexes() {
for(let i in getServerData().vehicles) {
getServerData().vehicles[i].index = i;
}
}
// ===========================================================================

View File

@@ -1057,4 +1057,22 @@ function areBlipsSupported() {
return true;
}
// ===========================================================================
function isFadeCameraSupported() {
return true;
}
// ===========================================================================
function isCustomCameraSupported() {
return true;
}
// ===========================================================================
function areWorldLabelsSupported() {
return false;
}
// ===========================================================================

View File

@@ -367,4 +367,22 @@ function areBlipsSupported() {
return false;
}
// ===========================================================================
function isFadeCameraSupported() {
return false;
}
// ===========================================================================
function isCustomCameraSupported() {
return false;
}
// ===========================================================================
function areWorldLabelsSupported() {
return false;
}
// ===========================================================================

View File

@@ -15,7 +15,7 @@ mexui.util.isPointInRectangle = function(point, position, size)
{
if(!point)
return false; // temp bug fix
return point.x >= position.x && point.y >= position.y && point.x <= (position.x + size.x) && point.y <= (position.y + size.y);
};
@@ -53,7 +53,7 @@ mexui.util.linkBaseControlStyles = function(controlName, derivedStyles)
mexui.util.linkStyles = function(baseStyles, derivedStyles)
{
derivedStyles = derivedStyles || {};
for(var k in baseStyles)
{
switch(k)
@@ -62,12 +62,12 @@ mexui.util.linkStyles = function(baseStyles, derivedStyles)
case 'hover':
continue;
}
if(!derivedStyles[k])
derivedStyles[k] = {};
if(!(derivedStyles[k].__proto__ instanceof Object))
derivedStyles[k].__proto__ = baseStyles[k];
/*
var hoverBaseStyles = JSON.parse(JSON.stringify(baseStyles[k]));
if(!derivedStyles[k].hover)
@@ -76,7 +76,7 @@ mexui.util.linkStyles = function(baseStyles, derivedStyles)
derivedStyles[k].hover.__proto__ = hoverBaseStyles;
*/
}
return mexui.util.linkGlobalStyles(mexui.Entity.StyleableEntity.globalDefaultStyles, derivedStyles);
//return derivedStyles;
};
@@ -84,7 +84,7 @@ mexui.util.linkStyles = function(baseStyles, derivedStyles)
mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
{
derivedStyles = derivedStyles || {};
for(var k in derivedStyles)
{
switch(k)
@@ -93,13 +93,13 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
case 'hover':
continue;
}
if(!(derivedStyles[k].__proto__ instanceof Object))
{
derivedStyles[k].__proto__ = baseStyles.all;
}
}
for(var k in derivedStyles)
{
switch(k)
@@ -108,7 +108,7 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
case 'hover':
continue;
}
/*
if(!derivedStyles[k].hasOwnProperty('hover'))
{
@@ -116,14 +116,14 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
derivedStyles[k].hover.__proto__ = derivedStyles[k];
}
*/
if(derivedStyles[k].focus)
{
if(!(derivedStyles[k].focus.__proto__ instanceof Object))
{
derivedStyles[k].focus.__proto__ = baseStyles.all;
}
if(derivedStyles[k].focus.hover)
{
if(!(derivedStyles[k].focus.hover.__proto__ instanceof Object))
@@ -132,7 +132,7 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
}
}
}
if(derivedStyles[k].hover)
{
if(!(derivedStyles[k].hover.__proto__ instanceof Object))
@@ -141,7 +141,7 @@ mexui.util.linkGlobalStyles = function(baseStyles, derivedStyles)
}
}
}
return derivedStyles;
};
@@ -236,13 +236,13 @@ mexui.util.getCenterPosition = function(largerSize, smallerSize)
mexui.util.getWindowSize = function()
{
return new Vec2(gta.width, gta.height);
return new Vec2(game.width, game.height);
};
mexui.util.isRectangleInsideRectangle = function(pos1, size1, pos2, size2)
{
return !(pos2.x > (pos1.x + size1.x) ||
(pos2.x + size2.x) < pos1.x ||
return !(pos2.x > (pos1.x + size1.x) ||
(pos2.x + size2.x) < pos1.x ||
pos2.y > (pos1.y + size1.y) ||
(pos2.y + size2.y) < pos1.y);
};
@@ -257,38 +257,38 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
for(var i in pseudoPartNames)
{
var pseudoPartName = pseudoPartNames[i];
if(styles2[0] && styles2[0].hasOwnProperty(pseudoPartName))
styles2.push(styles2[0][pseudoPartName]);
}
for(var i=styles2.length-1; i>=0; i--)
{
if(styles2[i] == null)
continue;
for(var k in styles2[i])
{
switch(k)
{
case 'focus':
case 'hover':
case 'transitionTime':
case 'transitionDelay':
case 'transitionDelayStartTime':
case 'transitionStartTime':
case 'transitionStarted':
case 'transitionEnded':
case 'transitionReverting':
continue;
}
if(styles2[i].hasOwnProperty(k) && styles3[k] == null)
{
var styleValue = styles2[i][k];
/*
if(i > 0 && (styles2[i].transitionTime != null || styles2[i].transitionDelay != null))
{
@@ -301,7 +301,7 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
{
styles2[i].transitionEnded = true;
styleValue = styles2[0][k];
delete styles2[i].transitionDelayStartTime;
delete styles2[i].transitionStartTime;
delete styles2[i].transitionStarted;
@@ -348,19 +348,19 @@ mexui.util.mergeStyles = function(styles, pseudoPartNames)
}
}
*/
styles3[k] = styleValue;
}
}
}
for(var i in styles2)
{
if(styles2[i])
styles2[i] = styles2[i].__proto__;
}
}
return styles3;
};
@@ -374,54 +374,54 @@ mexui.util.getTransitionStyles = function(styles, pseudoPartNames, progress)
for(var i in pseudoPartNames)
{
var pseudoPartName = pseudoPartNames[i];
if(styles2[0] && styles2[0].hasOwnProperty(pseudoPartName))
styles2.push(styles2[0][pseudoPartName]);
}
for(var i=styles2.length-1; i>=0; i--)
{
if(styles2[i] == null)
continue;
for(var k in styles2[i])
{
switch(k)
{
case 'focus':
case 'hover':
case 'transitionTime':
case 'transitionDelay':
continue;
}
if(styles2[i].hasOwnProperty(k) && styles3[k] == null)
{
var styleValue = styles2[i][k];
if(i > 0)
{
var mainStyleValue = styles2[0][k];
var pseudoStyleValue = styles2[i][k];
//console.log(mainStyleValue+' '+pseudoStyleValue);
styleValue = mexui.util.interpolateStyle(k, progress, mainStyleValue, pseudoStyleValue);
}
styles3[k] = styleValue;
}
}
}
for(var i in styles2)
{
if(styles2[i])
styles2[i] = styles2[i].__proto__;
}
}
return styles3;
};
@@ -476,7 +476,7 @@ mexui.util.fromColour = function(colour)
mexui.util.time = function()
{
return gta.tickCount;
return sdl.tickCount;
};
mexui.util.isIntChar = function(character)
@@ -570,14 +570,14 @@ mexui.util.isDayId = function(text)
{
if(text.length == 2 && text.substr(0, 1) == '0')
text = text.substr(1);
if(mexui.util.isPositiveInt(text))
{
var _int = parseInt(text);
if(_int >= 1 && _int <= 31)
return true;
}
return false;
};
@@ -585,7 +585,7 @@ mexui.util.isDayIdWithOptionalSuffix = function(text)
{
if(mexui.util.isDayId(text))
return true;
if(text.length > 2)
{
var last2Chars = text.substr(text.length - 2, 2);
@@ -598,14 +598,14 @@ mexui.util.isDayIdWithOptionalSuffix = function(text)
}
}
}
return false;
};
mexui.util.inArrayOrStartsWithInArray = function(text, arr, startsWithCharCount)
{
text = text.toLowerCase();
for(var i in arr)
{
if(text === arr[i])
@@ -613,7 +613,7 @@ mexui.util.inArrayOrStartsWithInArray = function(text, arr, startsWithCharCount)
return true;
}
}
if(text.length == startsWithCharCount)
{
for(var i in arr)
@@ -624,7 +624,7 @@ mexui.util.inArrayOrStartsWithInArray = function(text, arr, startsWithCharCount)
}
}
}
return false;
};
@@ -633,14 +633,14 @@ mexui.util.isMonthIdOrName = function(text)
var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2))
{
var _int = parseInt(text2);
if(_int >= 1 && _int <= 12)
return true;
}
return mexui.util.isMonthName(text);
};
@@ -649,14 +649,14 @@ mexui.util.isWeekDayId = function(text)
var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2))
{
var _int = parseInt(text2);
if(_int >= 1 && _int <= 7)
return true;
}
return false;
};
@@ -665,14 +665,14 @@ mexui.util.isWeekDayIdOrName = function(text)
var text2 = text;
if(text2.length == 2 && text2.substr(0, 1) == '0')
text2 = text2.substr(1);
if(mexui.util.isPositiveInt(text2))
{
var _int = parseInt(text2);
if(_int >= 1 && _int <= 7)
return true;
}
return mexui.util.isWeekDayName(text);
};
@@ -690,15 +690,15 @@ mexui.util.expand2DigitYear = function(year, twoDigitYearCapOffset)
mexui.util.isYear = function(text, minYear, maxYear, twoDigitYearCapOffset)
{
var _int = parseInt(text);
if(isNaN(_int))
return false;
if(_int >= 0 && _int <= 99)
_int = mexui.util.expand2DigitYear(_int, twoDigitYearCapOffset);
if(_int < minYear || _int > maxYear)
return false;
return true;
};