Fixes
This commit is contained in:
@@ -119,7 +119,7 @@ function loadServerConfigFromGameAndPort(gameId, port, mpMod) {
|
|||||||
if(dbQuery) {
|
if(dbQuery) {
|
||||||
if(dbQuery.numRows > 0) {
|
if(dbQuery.numRows > 0) {
|
||||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
let tempServerConfigData = new ServerData(dbAssoc);
|
||||||
freeDatabaseQuery(dbQuery);
|
freeDatabaseQuery(dbQuery);
|
||||||
return tempServerConfigData;
|
return tempServerConfigData;
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ function loadServerConfigFromId(tempServerId) {
|
|||||||
if(dbQuery) {
|
if(dbQuery) {
|
||||||
if(dbQuery.numRows > 0) {
|
if(dbQuery.numRows > 0) {
|
||||||
let dbAssoc = fetchQueryAssoc(dbQuery);
|
let dbAssoc = fetchQueryAssoc(dbQuery);
|
||||||
let tempServerConfigData = new ServerConfigData(dbAssoc);
|
let tempServerConfigData = new ServerData(dbAssoc);
|
||||||
freeDatabaseQuery(dbQuery);
|
freeDatabaseQuery(dbQuery);
|
||||||
return tempServerConfigData;
|
return tempServerConfigData;
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ function applyConfigToServer(tempServerConfig) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(isWeatherSupported()) {
|
if(isWeatherSupported()) {
|
||||||
gta.forceWeather(tempServerConfig.weather);
|
game.forceWeather(tempServerConfig.weather);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateServerRules();
|
updateServerRules();
|
||||||
@@ -299,8 +299,8 @@ function setTimeCommand(command, params, client) {
|
|||||||
getServerConfig().hour = hour;
|
getServerConfig().hour = hour;
|
||||||
getServerConfig().minute = minute;
|
getServerConfig().minute = minute;
|
||||||
|
|
||||||
gta.time.hour = getServerConfig().hour;
|
game.time.hour = getServerConfig().hour;
|
||||||
gta.time.minute = getServerConfig().minute;
|
game.time.minute = getServerConfig().minute;
|
||||||
|
|
||||||
//checkServerGameTime();
|
//checkServerGameTime();
|
||||||
|
|
||||||
@@ -363,7 +363,7 @@ function setWeatherCommand(command, params, client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
gta.forceWeather(toInteger(weatherId));
|
game.forceWeather(toInteger(weatherId));
|
||||||
getServerConfig().weather = weatherId;
|
getServerConfig().weather = weatherId;
|
||||||
|
|
||||||
getServerConfig().needsSaved = true;
|
getServerConfig().needsSaved = true;
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ let serverData = {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
|
// Pre-cache allowed skins
|
||||||
|
let allowedSkins = getAllowedSkins(getGame());
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
function initServerData() {
|
function initServerData() {
|
||||||
// Pre-allocate translation cache language slots
|
// Pre-allocate translation cache language slots
|
||||||
//getServerData().translation.cache = new Array(getServerData().translation.languages.length);
|
//getServerData().translation.cache = new Array(getServerData().translation.languages.length);
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ function addAllEventHandlers() {
|
|||||||
addEventHandler("onPedEnterVehicle", onPedEnteringVehicle);
|
addEventHandler("onPedEnterVehicle", onPedEnteringVehicle);
|
||||||
addEventHandler("onPedExitVehicle", onPedExitingVehicle);
|
addEventHandler("onPedExitVehicle", onPedExitingVehicle);
|
||||||
|
|
||||||
|
addEventHandler("onPedEnteringVehicle", onPedEnteringVehicle);
|
||||||
|
addEventHandler("onPedExitingVehicle", onPedExitingVehicle);
|
||||||
|
|
||||||
addEventHandler("OnPlayerCommand", onPlayerCommand);
|
addEventHandler("OnPlayerCommand", onPlayerCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,6 +51,8 @@ function onPlayerConnect(event, ipAddress, port) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function onPlayerJoin(event, client) {
|
function onPlayerJoin(event, client) {
|
||||||
|
logToConsole(LOG_DEBUG, `[VRR.Event] Client ${client.name}[${client.index}] joining from ${ipAddress}`);
|
||||||
|
|
||||||
if(isFadeCameraSupported()) {
|
if(isFadeCameraSupported()) {
|
||||||
fadeCamera(client, true, 1.0);
|
fadeCamera(client, true, 1.0);
|
||||||
}
|
}
|
||||||
@@ -72,7 +77,7 @@ function onElementStreamIn(event, element, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function onPlayerQuit(event, client, quitReasonId) {
|
function onPlayerQuit(event, client, quitReasonId) {
|
||||||
logToConsole(LOG_DEBUG, `👋 ${getPlayerDisplayForConsole(client)} disconnected (${disconnectReasons[quitReasonId]}[${quitReasonId}])`);
|
logToConsole(LOG_DEBUG, `👋 Client ${getPlayerDisplayForConsole(client)} disconnected (${disconnectReasons[quitReasonId]}[${quitReasonId}])`);
|
||||||
updateConnectionLogOnQuit(client, quitReasonId);
|
updateConnectionLogOnQuit(client, quitReasonId);
|
||||||
if(isPlayerLoggedIn(client)) {
|
if(isPlayerLoggedIn(client)) {
|
||||||
messagePlayerNormal(null, `👋 ${getPlayerName(client)} has left the server (${disconnectReasons[quitReasonId]})`, getColourByName("softYellow"));
|
messagePlayerNormal(null, `👋 ${getPlayerName(client)} has left the server (${disconnectReasons[quitReasonId]})`, getColourByName("softYellow"));
|
||||||
@@ -82,6 +87,8 @@ function onPlayerQuit(event, client, quitReasonId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
messageDiscordEventChannel(`👋 ${getPlayerDisplayForConsole(client)} has left the server.`);
|
messageDiscordEventChannel(`👋 ${getPlayerDisplayForConsole(client)} has left the server.`);
|
||||||
|
|
||||||
|
clearTemporaryVehicles();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -381,7 +388,7 @@ function onPlayerDeath(client, position) {
|
|||||||
client.despawnPlayer();
|
client.despawnPlayer();
|
||||||
getPlayerCurrentSubAccount(client).interior = closestJail.interior;
|
getPlayerCurrentSubAccount(client).interior = closestJail.interior;
|
||||||
getPlayerCurrentSubAccount(client).dimension = closestJail.dimension;
|
getPlayerCurrentSubAccount(client).dimension = closestJail.dimension;
|
||||||
if(getServerGame() == GAME_GTA_IV) {
|
if(getServerGame() == VRR_GAME_GTA_IV) {
|
||||||
spawnPlayer(client, closestJail.position, closestJail.heading, getPlayerCurrentSubAccount(client).skin);
|
spawnPlayer(client, closestJail.position, closestJail.heading, getPlayerCurrentSubAccount(client).skin);
|
||||||
} else {
|
} else {
|
||||||
spawnPlayer(client, closestJail.position, closestJail.heading, getPlayerCurrentSubAccount(client).skin);
|
spawnPlayer(client, closestJail.position, closestJail.heading, getPlayerCurrentSubAccount(client).skin);
|
||||||
@@ -396,7 +403,7 @@ function onPlayerDeath(client, position) {
|
|||||||
client.despawnPlayer();
|
client.despawnPlayer();
|
||||||
getPlayerCurrentSubAccount(client).interior = closestHospital.interior;
|
getPlayerCurrentSubAccount(client).interior = closestHospital.interior;
|
||||||
getPlayerCurrentSubAccount(client).dimension = closestHospital.dimension;
|
getPlayerCurrentSubAccount(client).dimension = closestHospital.dimension;
|
||||||
if(getServerGame() == GAME_GTA_IV) {
|
if(getServerGame() == VRR_GAME_GTA_IV) {
|
||||||
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
|
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
|
||||||
} else {
|
} else {
|
||||||
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
|
spawnPlayer(client, closestHospital.position, closestHospital.heading, getPlayerCurrentSubAccount(client).skin);
|
||||||
@@ -455,7 +462,7 @@ function onPlayerSpawn(client) {
|
|||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)}'s player data is valid. Continuing spawn processing ...`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)}'s player data is valid. Continuing spawn processing ...`);
|
||||||
|
|
||||||
if(getServerGame() == GAME_GTA_IV) {
|
if(getServerGame() == VRR_GAME_GTA_IV) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped body parts and props`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped body parts and props`);
|
||||||
setEntityData(client.player, "vrr.bodyParts", getPlayerCurrentSubAccount(client).bodyParts, true);
|
setEntityData(client.player, "vrr.bodyParts", getPlayerCurrentSubAccount(client).bodyParts, true);
|
||||||
setEntityData(client.player, "vrr.bodyProps", getPlayerCurrentSubAccount(client).bodyProps, true);
|
setEntityData(client.player, "vrr.bodyProps", getPlayerCurrentSubAccount(client).bodyProps, true);
|
||||||
@@ -514,7 +521,7 @@ function onPlayerSpawn(client) {
|
|||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`);
|
||||||
updatePlayerSnowState(client);
|
updatePlayerSnowState(client);
|
||||||
|
|
||||||
if(getServerGame() == GAME_GTA_SA) {
|
if(getServerGame() == VRR_GAME_GTA_SA) {
|
||||||
logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`);
|
logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`);
|
||||||
setEntityData(client.player, "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true);
|
setEntityData(client.player, "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true);
|
||||||
|
|
||||||
|
|||||||
@@ -103,12 +103,15 @@ function createGroundItemObject(itemId) {
|
|||||||
deleteGroundItemObject(itemId);
|
deleteGroundItemObject(itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
getItemData(itemId).object = createGameObject(getItemTypeData(getItemData(itemId).itemTypeIndex).dropModel, applyOffsetToPos(getItemData(itemId).position, getItemTypeData(getItemData(itemId).itemTypeIndex).dropPosition));
|
let object = createGameObject(getItemTypeData(getItemData(itemId).itemTypeIndex).dropModel, applyOffsetToPos(getItemData(itemId).position, getItemTypeData(getItemData(itemId).itemTypeIndex).dropPosition));
|
||||||
setElementRotation(getItemData(itemId).object, getItemTypeData(getItemData(itemId).itemTypeIndex).dropRotation);
|
if(object != false) {
|
||||||
setElementOnAllDimensions(getItemData(itemId).object, false);
|
getItemData(itemId).object = object;
|
||||||
setElementDimension(getItemData(itemId).object, getItemData(itemId).dimension);
|
setElementRotation(getItemData(itemId).object, getItemTypeData(getItemData(itemId).itemTypeIndex).dropRotation);
|
||||||
setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
|
setElementOnAllDimensions(getItemData(itemId).object, false);
|
||||||
addToWorld(getItemData(itemId).object);
|
setElementDimension(getItemData(itemId).object, getItemData(itemId).dimension);
|
||||||
|
setEntityData(getItemData(itemId).object, "vrr.scale", getItemTypeData(getItemData(itemId).itemTypeIndex).dropScale, true);
|
||||||
|
addToWorld(getItemData(itemId).object);
|
||||||
|
}
|
||||||
|
|
||||||
getServerData().groundItemCache.push(itemId);
|
getServerData().groundItemCache.push(itemId);
|
||||||
}
|
}
|
||||||
@@ -1341,7 +1344,7 @@ function saveAllItemsToDatabase() {
|
|||||||
for(let i in getServerData().items) {
|
for(let i in getServerData().items) {
|
||||||
if(getServerData().items[i].needsSaved) {
|
if(getServerData().items[i].needsSaved) {
|
||||||
if(getServerData().items[i].databaseId != -1) {
|
if(getServerData().items[i].databaseId != -1) {
|
||||||
saveItemToDatabase(i);
|
saveItemToDatabase(getServerData().items[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1349,39 +1352,98 @@ function saveAllItemsToDatabase() {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function saveItemToDatabase(itemId) {
|
function saveItemToDatabase(itemData) {
|
||||||
let tempItemData = getServerData().items[itemId];
|
logToConsole(LOG_VERBOSE, `[VRR.Item]: Saving item '${itemData.index}' to database ...`);
|
||||||
logToConsole(LOG_VERBOSE, `[VRR.Item]: Saving item '${itemId}' to database ...`);
|
|
||||||
|
|
||||||
let dbConnection = connectToDatabase();
|
let dbConnection = connectToDatabase();
|
||||||
if(dbConnection) {
|
if(dbConnection) {
|
||||||
let data = [
|
let data = [
|
||||||
["item_server", getServerId()],
|
["item_server", getServerId()],
|
||||||
["item_type", tempItemData.itemType],
|
["item_type", itemData.itemType],
|
||||||
["item_owner_type", tempItemData.ownerType],
|
["item_owner_type", itemData.ownerType],
|
||||||
["item_owner_id", tempItemData.ownerId],
|
["item_owner_id", itemData.ownerId],
|
||||||
["item_amount", tempItemData.amount],
|
["item_amount", itemData.amount],
|
||||||
["item_pos_x", tempItemData.position.x],
|
["item_pos_x", itemData.position.x],
|
||||||
["item_pos_y", tempItemData.position.y],
|
["item_pos_y", itemData.position.y],
|
||||||
["item_pos_z", tempItemData.position.z],
|
["item_pos_z", itemData.position.z],
|
||||||
["item_int", tempItemData.interior],
|
["item_int", itemData.interior],
|
||||||
["item_vw", tempItemData.dimension],
|
["item_vw", itemData.dimension],
|
||||||
["item_buy_price", tempItemData.buyPrice],
|
["item_buy_price", itemData.buyPrice],
|
||||||
["item_enabled", tempItemData.enabled],
|
["item_enabled", itemData.enabled],
|
||||||
["item_value", tempItemData.value],
|
["item_value", itemData.value],
|
||||||
];
|
];
|
||||||
|
|
||||||
let dbQuery = null;
|
let dbQuery = null;
|
||||||
if(tempItemData.databaseId == 0) {
|
if(itemData.databaseId == 0) {
|
||||||
let queryString = createDatabaseInsertQuery("item_main", data);
|
let queryString = createDatabaseInsertQuery("item_main", data);
|
||||||
dbQuery = queryDatabase(dbConnection, queryString);
|
dbQuery = queryDatabase(dbConnection, queryString);
|
||||||
getServerData().items[itemId].databaseId = getDatabaseInsertId(dbConnection);
|
itemData.databaseId = getDatabaseInsertId(dbConnection);
|
||||||
} else {
|
} else {
|
||||||
let queryString = createDatabaseUpdateQuery("item_main", data, `item_id=${tempItemData.databaseId}`);
|
let queryString = createDatabaseUpdateQuery("item_main", data, `item_id=${itemData.databaseId}`);
|
||||||
dbQuery = queryDatabase(dbConnection, queryString);
|
dbQuery = queryDatabase(dbConnection, queryString);
|
||||||
}
|
}
|
||||||
|
|
||||||
getItemData(itemId).needsSaved = false;
|
itemData.needsSaved = false;
|
||||||
|
freeDatabaseQuery(dbQuery);
|
||||||
|
disconnectFromDatabase(dbConnection);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveItemTypeToDatabase(itemTypeData) {
|
||||||
|
logToConsole(LOG_VERBOSE, `[VRR.Item]: Saving item type '${itemTypeData.name}' to database ...`);
|
||||||
|
|
||||||
|
let dbConnection = connectToDatabase();
|
||||||
|
if(dbConnection) {
|
||||||
|
let data = [
|
||||||
|
["item_type_id", itemTypeData.databaseId],
|
||||||
|
["item_type_server", itemTypeData.serverId],
|
||||||
|
["item_type_name", itemTypeData.name],
|
||||||
|
["item_type_enabled", itemTypeData.enabled],
|
||||||
|
["item_type_use_type", itemTypeData.useType],
|
||||||
|
["item_type_drop_type", itemTypeData.dropType],
|
||||||
|
["item_type_use_id", itemTypeData.useId],
|
||||||
|
["item_type_drop_pos_x", itemTypeData.dropPosition.x],
|
||||||
|
["item_type_drop_pos_y", itemTypeData.dropPosition.y],
|
||||||
|
["item_type_drop_pos_z", itemTypeData.dropPosition.z],
|
||||||
|
["item_type_drop_rot_x", itemTypeData.dropRotation.x],
|
||||||
|
["item_type_drop_rot_y", itemTypeData.dropRotation.y],
|
||||||
|
["item_type_drop_rot_z", itemTypeData.dropRotation.z],
|
||||||
|
["item_type_drop_scale_x", itemTypeData.dropScale.x],
|
||||||
|
["item_type_drop_scale_y", itemTypeData.dropScale.y],
|
||||||
|
["item_type_drop_scale_z", itemTypeData.dropScale.z],
|
||||||
|
["item_type_drop_model", itemTypeData.dropModel],
|
||||||
|
["item_type_use_value", itemTypeData.useValue],
|
||||||
|
//["item_type_max_value", itemTypeData.maxValue],
|
||||||
|
["item_type_order_price", itemTypeData.orderPrice],
|
||||||
|
["item_type_order_value", itemTypeData.orderValue],
|
||||||
|
["item_type_demand_multiplier", itemTypeData.demandMultiplier],
|
||||||
|
["item_type_supply_multiplier", itemTypeData.supplyMultiplier],
|
||||||
|
["item_type_risk_multiplier", itemTypeData.riskMultiplier],
|
||||||
|
["item_type_size", itemTypeData.size],
|
||||||
|
["item_type_capacity", itemTypeData.capacity],
|
||||||
|
["item_type_delay_use", itemTypeData.useDelay],
|
||||||
|
["item_type_delay_switch", itemTypeData.switchDelay],
|
||||||
|
["item_type_delay_pickup", itemTypeData.pickupDelay],
|
||||||
|
["item_type_delay_put", itemTypeData.putDelay],
|
||||||
|
["item_type_delay_take", itemTypeData.takeDelay],
|
||||||
|
["item_type_delay_give", itemTypeData.giveDelay],
|
||||||
|
["item_type_delay_drop", itemTypeData.dropDelay],
|
||||||
|
];
|
||||||
|
|
||||||
|
let dbQuery = null;
|
||||||
|
if(itemTypeData.databaseId == 0) {
|
||||||
|
let queryString = createDatabaseInsertQuery("item_type", data);
|
||||||
|
dbQuery = queryDatabase(dbConnection, queryString);
|
||||||
|
itemTypeData.databaseId = getDatabaseInsertId(dbConnection);
|
||||||
|
} else {
|
||||||
|
let queryString = createDatabaseUpdateQuery("item_type", data, `item_type_id=${itemTypeData.databaseId}`);
|
||||||
|
dbQuery = queryDatabase(dbConnection, queryString);
|
||||||
|
}
|
||||||
|
|
||||||
|
itemTypeData.needsSaved = false;
|
||||||
freeDatabaseQuery(dbQuery);
|
freeDatabaseQuery(dbQuery);
|
||||||
disconnectFromDatabase(dbConnection);
|
disconnectFromDatabase(dbConnection);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ function setNewCharacterSkinCommand(command, params, client) {
|
|||||||
getServerConfig().newCharacter.skin = skinId;
|
getServerConfig().newCharacter.skin = skinId;
|
||||||
getServerConfig().needsSaved = true;
|
getServerConfig().needsSaved = true;
|
||||||
|
|
||||||
messagePlayerNormal(client, `The new character skin has been set to ${getSkinNameFromId(skinId)} (ID ${skinId})`);
|
messagePlayerNormal(client, `The new character skin has been set to ${getSkinNameFromModel(skinId)} (ID ${skinId})`);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,40 +151,44 @@ function enterExitPropertyCommand(command, params, client) {
|
|||||||
// isEntrance = false;
|
// isEntrance = false;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if(getPlayerData(client).currentPickup != false) {
|
if(!getPlayerData(client).currentPickup) {
|
||||||
let ownerType = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.type");
|
return false;
|
||||||
let ownerId = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.id");
|
}
|
||||||
|
|
||||||
//logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)} is near pickup for owner ID ${ownerId}`);
|
let ownerType = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.type");
|
||||||
|
let ownerId = getEntityData(getPlayerData(client).currentPickup, "vrr.owner.id");
|
||||||
|
|
||||||
switch(ownerType) {
|
switch(ownerType) {
|
||||||
case VRR_PICKUP_BUSINESS_ENTRANCE:
|
case VRR_PICKUP_BUSINESS_ENTRANCE:
|
||||||
isBusiness = true;
|
isBusiness = true;
|
||||||
isEntrance = true;
|
isEntrance = true;
|
||||||
closestProperty = getServerData().businesses[ownerId];
|
closestProperty = getServerData().businesses[ownerId];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_PICKUP_BUSINESS_EXIT:
|
case VRR_PICKUP_BUSINESS_EXIT:
|
||||||
isBusiness = true;
|
isBusiness = true;
|
||||||
isEntrance = false;
|
isEntrance = false;
|
||||||
closestProperty = getServerData().businesses[ownerId];
|
closestProperty = getServerData().businesses[ownerId];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_PICKUP_HOUSE_ENTRANCE:
|
case VRR_PICKUP_HOUSE_ENTRANCE:
|
||||||
isBusiness = false;
|
isBusiness = false;
|
||||||
isEntrance = true;
|
isEntrance = true;
|
||||||
closestProperty = getServerData().houses[ownerId];
|
closestProperty = getServerData().houses[ownerId];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VRR_PICKUP_HOUSE_EXIT:
|
case VRR_PICKUP_HOUSE_EXIT:
|
||||||
isBusiness = false;
|
isBusiness = false;
|
||||||
isEntrance = false;
|
isEntrance = false;
|
||||||
closestProperty = getServerData().houses[ownerId];
|
closestProperty = getServerData().houses[ownerId];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(closestProperty == null) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is ${(isBusiness) ? closestProperty.name : closestProperty.description} ${(isEntrance) ? "entrance" : "exit"}`);
|
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is ${(isBusiness) ? closestProperty.name : closestProperty.description} ${(isEntrance) ? "entrance" : "exit"}`);
|
||||||
@@ -295,7 +299,7 @@ function getPlayerInfoCommand(command, params, client) {
|
|||||||
`${getInlineChatColourByName("white")}Registered: ${getPlayerData(targetClient).accountData}`,
|
`${getInlineChatColourByName("white")}Registered: ${getPlayerData(targetClient).accountData}`,
|
||||||
`${getInlineChatColourByName("white")}Game Version: ${getInlineChatColourByName("lightGrey")}${targetClient.gameVersion}`,
|
`${getInlineChatColourByName("white")}Game Version: ${getInlineChatColourByName("lightGrey")}${targetClient.gameVersion}`,
|
||||||
`${getInlineChatColourByName("white")}Client Version: ${getInlineChatColourByName("lightGrey")}${getPlayerData(targetClient).clientVersion}`,
|
`${getInlineChatColourByName("white")}Client Version: ${getInlineChatColourByName("lightGrey")}${getPlayerData(targetClient).clientVersion}`,
|
||||||
`${getInlineChatColourByName("white")}Skin: ${getInlineChatColourByName("lightGrey")}${getSkinNameFromId(getPlayerCurrentSubAccount(targetClient).skin)}[${getPlayerCurrentSubAccount(targetClient).skin}]`,
|
`${getInlineChatColourByName("white")}Skin: ${getInlineChatColourByName("lightGrey")}${getSkinNameFromModel(getPlayerCurrentSubAccount(targetClient).skin)}[${getPlayerCurrentSubAccount(targetClient).skin}]`,
|
||||||
`${getInlineChatColourByName("white")}Clan: ${getInlineChatColourByName("lightGrey")}${clan}`,
|
`${getInlineChatColourByName("white")}Clan: ${getInlineChatColourByName("lightGrey")}${clan}`,
|
||||||
`${getInlineChatColourByName("white")}Job: ${getInlineChatColourByName("lightGrey")}${job}`,
|
`${getInlineChatColourByName("white")}Job: ${getInlineChatColourByName("lightGrey")}${job}`,
|
||||||
|
|
||||||
@@ -358,8 +362,8 @@ function showPlayerPrompt(client, promptType, promptMessage, promptTitle) {
|
|||||||
|
|
||||||
function updateServerGameTime() {
|
function updateServerGameTime() {
|
||||||
if(isTimeSupported()) {
|
if(isTimeSupported()) {
|
||||||
gta.time.hour = getServerConfig().hour;
|
game.time.hour = getServerConfig().hour;
|
||||||
gta.time.minute = getServerConfig().minute;
|
game.time.minute = getServerConfig().minute;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -959,22 +959,22 @@ function forcePlayerSkinCommand(command, params, client) {
|
|||||||
|
|
||||||
let splitParams = params.split(" ");
|
let splitParams = params.split(" ");
|
||||||
let targetClient = getPlayerFromParams(splitParams[0]);
|
let targetClient = getPlayerFromParams(splitParams[0]);
|
||||||
let skinId = getSkinIdFromParams(splitParams[1]);
|
let skinIndex = getSkinModelIndexFromParams(splitParams[1]);
|
||||||
|
|
||||||
if(!targetClient) {
|
if(!targetClient) {
|
||||||
messagePlayerError(client, "That player is not connected!");
|
messagePlayerError(client, "That player is not connected!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!skinId) {
|
if(!skinIndex) {
|
||||||
messagePlayerError(client, "That skin is invalid!");
|
messagePlayerError(client, "That skin is invalid!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
getPlayerCurrentSubAccount(targetClient).skin = skinId;
|
getPlayerCurrentSubAccount(targetClient).skin = skinIndex;
|
||||||
setPlayerSkin(targetClient, skinId);
|
setPlayerSkin(targetClient, skinIndex);
|
||||||
|
|
||||||
messageAdmins(`${client.name} ${getInlineChatColourByName("white")}set ${getPlayerName(targetClient)}'s ${getInlineChatColourByName("white")}skin to ${getInlineChatColourByName("lightGrey")}${getSkinNameFromId(skinId)}`);
|
messageAdmins(`${client.name} ${getInlineChatColourByName("white")}set ${getPlayerName(targetClient)}'s ${getInlineChatColourByName("white")}skin to ${getInlineChatColourByName("lightGrey")}${getGameData().skins[getGame()][skinIndex][1]}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|||||||
@@ -5,4 +5,16 @@
|
|||||||
// FILE: npc.js
|
// FILE: npc.js
|
||||||
// DESC: Provides NPC usage and functions
|
// DESC: Provides NPC usage and functions
|
||||||
// TYPE: Server (JavaScript)
|
// TYPE: Server (JavaScript)
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function initNPCScript() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getNPCData(ped) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -37,6 +37,7 @@ function initServerScripts() {
|
|||||||
initGUIScript();
|
initGUIScript();
|
||||||
initEconomyScript();
|
initEconomyScript();
|
||||||
initRadioScript();
|
initRadioScript();
|
||||||
|
initLocaleScript();
|
||||||
|
|
||||||
initTimers();
|
initTimers();
|
||||||
|
|
||||||
|
|||||||
@@ -287,8 +287,6 @@ function checkNewCharacter(client, firstName, lastName) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let skinId = allowedSkins[getServerGame()][getAllowedSkinDataBySkinId(getServerConfig().newCharacter.skin)][0]
|
|
||||||
|
|
||||||
let subAccountData = createSubAccount(getPlayerData(client).accountData.databaseId, firstName, lastName);
|
let subAccountData = createSubAccount(getPlayerData(client).accountData.databaseId, firstName, lastName);
|
||||||
if(!subAccountData) {
|
if(!subAccountData) {
|
||||||
if(getServerConfig().useGUI && doesPlayerHaveGUIEnabled(client)) {
|
if(getServerConfig().useGUI && doesPlayerHaveGUIEnabled(client)) {
|
||||||
@@ -296,7 +294,7 @@ function checkNewCharacter(client, firstName, lastName) {
|
|||||||
} else {
|
} else {
|
||||||
messagePlayerAlert(client, "Your character could not be created!");
|
messagePlayerAlert(client, "Your character could not be created!");
|
||||||
}
|
}
|
||||||
messagePlayerAlert(client, `${getServerName()} staff have been notified of the problem and will fix it shortly.`);
|
messagePlayerAlert(client, `${getServerName()} staff have been notified of the problem and will fix it soon.`);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,14 +370,10 @@ function selectCharacter(client, characterId = -1) {
|
|||||||
//setPlayerCameraLookAt(client, getPosBehindPos(spawnPosition, spawnHeading, 5), spawnPosition);
|
//setPlayerCameraLookAt(client, getPosBehindPos(spawnPosition, spawnHeading, 5), spawnPosition);
|
||||||
getPlayerData(client).pedState = VRR_PEDSTATE_SPAWNING;
|
getPlayerData(client).pedState = VRR_PEDSTATE_SPAWNING;
|
||||||
|
|
||||||
if(!isGTAIV()) {
|
if(getGame() < VRR_GAME_MAFIA_ONE) {
|
||||||
spawnPlayer(client, spawnPosition, spawnHeading, skin, spawnInterior, spawnDimension);
|
spawnPlayer(client, spawnPosition, spawnHeading, getGameData().skins[getGame()][skin][0], spawnInterior, spawnDimension);
|
||||||
} else {
|
} else {
|
||||||
//setPlayerPosition(client, spawnPosition);
|
spawnPlayer(client, getGameData().skins[getGame()][skin][0], spawnPosition, spawnHeading);
|
||||||
//setPlayerHeading(client, spawnHeading);
|
|
||||||
//setPlayerSkin(client, skin);
|
|
||||||
//restorePlayerCamera(client);
|
|
||||||
spawnPlayer(client, spawnPosition, spawnHeading, skin, spawnInterior, spawnDimension);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logToConsole(LOG_DEBUG, `[VRR.SubAccount] Spawned ${getPlayerDisplayForConsole(client)} as character ID ${getPlayerData(client).currentSubAccount} with skin ${skin} (${spawnPosition.x}, ${spawnPosition.y}, ${spawnPosition.z})`);
|
logToConsole(LOG_DEBUG, `[VRR.SubAccount] Spawned ${getPlayerDisplayForConsole(client)} as character ID ${getPlayerData(client).currentSubAccount} with skin ${skin} (${spawnPosition.x}, ${spawnPosition.y}, ${spawnPosition.z})`);
|
||||||
@@ -609,7 +603,7 @@ function forceFightStyleCommand(command, params, client) {
|
|||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createDefaultSubAccountServerData(databaseId, thisServerSkin) {
|
function createDefaultSubAccountServerData(databaseId, thisServerSkin) {
|
||||||
for(let i = 1 ; i <= 4 ; i++) {
|
for(let i = 1 ; i <= 5 ; i++) {
|
||||||
if(i == getServerId()) {
|
if(i == getServerId()) {
|
||||||
let dbQueryString = `INSERT INTO sacct_svr (sacct_svr_sacct, sacct_svr_server, sacct_svr_skin) VALUES (${databaseId}, ${i}, ${thisServerSkin})`;
|
let dbQueryString = `INSERT INTO sacct_svr (sacct_svr_sacct, sacct_svr_server, sacct_svr_skin) VALUES (${databaseId}, ${i}, ${thisServerSkin})`;
|
||||||
quickDatabaseQuery(dbQueryString);
|
quickDatabaseQuery(dbQueryString);
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ function saveVehicleToDatabase(vehicleDataId) {
|
|||||||
let dbConnection = connectToDatabase();
|
let dbConnection = connectToDatabase();
|
||||||
if(dbConnection) {
|
if(dbConnection) {
|
||||||
if(!tempVehicleData.spawnLocked) {
|
if(!tempVehicleData.spawnLocked) {
|
||||||
if(doesGameHaveServerElements()) {
|
if(areServerElementsSupported()) {
|
||||||
tempVehicleData.spawnPosition = tempVehicleData.vehicle.position;
|
tempVehicleData.spawnPosition = tempVehicleData.vehicle.position;
|
||||||
tempVehicleData.spawnRotation = tempVehicleData.vehicle.heading;
|
tempVehicleData.spawnRotation = tempVehicleData.vehicle.heading;
|
||||||
} else {
|
} else {
|
||||||
@@ -207,15 +207,15 @@ function createVehicleCommand(command, params, client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let modelId = getVehicleModelIdFromParams(params);
|
let modelIndex = getVehicleModelIndexFromParams(params);
|
||||||
|
|
||||||
if(!modelId) {
|
if(!modelIndex) {
|
||||||
messagePlayerError(client, "That vehicle type is invalid!");
|
messagePlayerError(client, "That vehicle type is invalid!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
||||||
let vehicle = createPermanentVehicle(modelId, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
let vehicle = createPermanentVehicle(modelIndex, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
||||||
|
|
||||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}!`);
|
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}!`);
|
||||||
}
|
}
|
||||||
@@ -228,15 +228,15 @@ function createTemporaryVehicleCommand(command, params, client) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let modelId = getVehicleModelIdFromParams(params);
|
let modelIndex = getVehicleModelIndexFromParams(params);
|
||||||
|
|
||||||
if(!modelId) {
|
if(!modelIndex) {
|
||||||
messagePlayerError(client, "That vehicle type is invalid!");
|
messagePlayerError(client, "That vehicle type is invalid!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
let frontPos = getPosInFrontOfPos(getPlayerPosition(client), getPlayerHeading(client), getGlobalConfig().spawnCarDistance);
|
||||||
let vehicle = createTemporaryVehicle(modelId, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
let vehicle = createTemporaryVehicle(modelIndex, frontPos, getPlayerHeading(client), getPlayerInterior(client), getPlayerDimension(client));
|
||||||
|
|
||||||
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a temporary ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}`);
|
messageAdmins(`${getInlineChatColourByName("lightGrey")}${getPlayerName(client)} ${getInlineChatColourByName("white")}created a temporary ${getInlineChatColourByType("vehiclePurple")}${getVehicleName(vehicle)}`);
|
||||||
}
|
}
|
||||||
@@ -737,12 +737,6 @@ function doesClientOwnVehicle(client, vehicle) {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function getVehicleName(vehicle) {
|
|
||||||
return getVehicleNameFromModelId(vehicle.modelIndex) || "Unknown";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
function setVehicleJobCommand(command, params, client) {
|
function setVehicleJobCommand(command, params, client) {
|
||||||
if(!isPlayerInAnyVehicle(client)) {
|
if(!isPlayerInAnyVehicle(client)) {
|
||||||
messagePlayerError(client, "You need to be in a vehicle!");
|
messagePlayerError(client, "You need to be in a vehicle!");
|
||||||
@@ -1159,7 +1153,7 @@ function spawnVehicle(vehicleData) {
|
|||||||
let vehicle = createGameVehicle(vehicleData.model, vehicleData.spawnPosition, vehicleData.spawnRotation);
|
let vehicle = createGameVehicle(vehicleData.model, vehicleData.spawnPosition, vehicleData.spawnRotation);
|
||||||
addToWorld(vehicle);
|
addToWorld(vehicle);
|
||||||
|
|
||||||
if(doesGameHaveServerElements()) {
|
if(isSnowSupported()) {
|
||||||
if(vehicleData.colour1IsRGBA && vehicleData.colour2IsRGBA) {
|
if(vehicleData.colour1IsRGBA && vehicleData.colour2IsRGBA) {
|
||||||
vehicle.setRGBColours(vehicleData.colour1RGBA, vehicleData.colour2RGBA);
|
vehicle.setRGBColours(vehicleData.colour1RGBA, vehicleData.colour2RGBA);
|
||||||
} else {
|
} else {
|
||||||
@@ -1250,8 +1244,8 @@ async function getPlayerNewVehicle(client) {
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createNewDealershipVehicle(model, spawnPosition, spawnRotation, price, dealershipId, interior = 0, dimension = 0) {
|
function createNewDealershipVehicle(modelIndex, spawnPosition, spawnRotation, price, dealershipId, interior = 0, dimension = 0) {
|
||||||
let vehicle = createGameVehicle(model, spawnPosition, spawnRotation);
|
let vehicle = createGameVehicle(modelIndex, spawnPosition, spawnRotation);
|
||||||
if(!vehicle) {
|
if(!vehicle) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1277,17 +1271,24 @@ function createNewDealershipVehicle(model, spawnPosition, spawnRotation, price,
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createTemporaryVehicle(modelId, position, heading, interior = 0, dimension = 0) {
|
function createTemporaryVehicle(modelIndex, position, heading, interior = 0, dimension = 0) {
|
||||||
let vehicle = createGameVehicle(modelId, position, heading);
|
let vehicle = createGameVehicle(modelIndex, position, heading);
|
||||||
setVehicleHeading(vehicle, heading);
|
setVehicleHeading(vehicle, heading);
|
||||||
setElementInterior(vehicle, interior);
|
setElementInterior(vehicle, interior);
|
||||||
setElementDimension(vehicle, dimension);
|
setElementDimension(vehicle, dimension);
|
||||||
addToWorld(vehicle);
|
addToWorld(vehicle);
|
||||||
|
|
||||||
let tempVehicleData = new VehicleData(false, vehicle);
|
let tempVehicleData = new VehicleData(false, vehicle);
|
||||||
|
tempVehicleData.model = modelIndex;
|
||||||
tempVehicleData.databaseId = -1;
|
tempVehicleData.databaseId = -1;
|
||||||
tempVehicleData.interior = interior;
|
tempVehicleData.interior = interior;
|
||||||
tempVehicleData.dimension = dimension;
|
tempVehicleData.dimension = dimension;
|
||||||
|
if(!isGameFeatureSupported("vehicleColours")) {
|
||||||
|
tempVehicleData.colour1 = 0;
|
||||||
|
tempVehicleData.colour2 = 0;
|
||||||
|
tempVehicleData.colour3 = 0;
|
||||||
|
tempVehicleData.colour4 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||||
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
||||||
@@ -1297,16 +1298,23 @@ function createTemporaryVehicle(modelId, position, heading, interior = 0, dimens
|
|||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
function createPermanentVehicle(modelId, position, heading, interior = 0, dimension = 0) {
|
function createPermanentVehicle(modelIndex, position, heading, interior = 0, dimension = 0) {
|
||||||
let vehicle = createGameVehicle(modelId, position, heading);
|
let vehicle = createGameVehicle(modelIndex, position, heading);
|
||||||
setVehicleHeading(vehicle, heading);
|
setVehicleHeading(vehicle, heading);
|
||||||
setElementInterior(vehicle, interior);
|
setElementInterior(vehicle, interior);
|
||||||
setElementDimension(vehicle, dimension);
|
setElementDimension(vehicle, dimension);
|
||||||
addToWorld(vehicle);
|
addToWorld(vehicle);
|
||||||
|
|
||||||
let tempVehicleData = new VehicleData(false, vehicle);
|
let tempVehicleData = new VehicleData(false, vehicle);
|
||||||
|
tempVehicleData.model = modelIndex;
|
||||||
tempVehicleData.interior = interior;
|
tempVehicleData.interior = interior;
|
||||||
tempVehicleData.dimension = dimension;
|
tempVehicleData.dimension = dimension;
|
||||||
|
if(!isGameFeatureSupported("vehicleColours")) {
|
||||||
|
tempVehicleData.colour1 = 0;
|
||||||
|
tempVehicleData.colour2 = 0;
|
||||||
|
tempVehicleData.colour3 = 0;
|
||||||
|
tempVehicleData.colour4 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
let slot = getServerData().vehicles.push(tempVehicleData);
|
let slot = getServerData().vehicles.push(tempVehicleData);
|
||||||
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
setEntityData(vehicle, "vrr.dataSlot", slot-1, false);
|
||||||
|
|||||||
@@ -432,4 +432,416 @@ function getPercentage(num, per) {
|
|||||||
return (num/100)*per;
|
return (num/100)*per;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getMultiplayerMod() {
|
||||||
|
return (getGame() >= 10) ? VRR_MPMOD_MAFIAC : VRR_MPMOD_GTAC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getGame() {
|
||||||
|
if(isServerScript()) {
|
||||||
|
return server.game;
|
||||||
|
} else {
|
||||||
|
return game.game;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isSnowSupported(gameId) {
|
||||||
|
return supportedFeatures.snow[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isGTAIV() {
|
||||||
|
return (getGame() == VRR_GAME_GTA_IV);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function areServerElementsSupported() {
|
||||||
|
return supportedFeatures.serverElements[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isTimeSupported() {
|
||||||
|
return supportedFeatures.time[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isWeatherSupported() {
|
||||||
|
return supportedFeatures.weather[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function arePickupsSupported() {
|
||||||
|
return supportedFeatures.pickups[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function areBlipsSupported() {
|
||||||
|
return supportedFeatures.blips[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function areMarkersSupported() {
|
||||||
|
return supportedFeatures.markers[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isFadeCameraSupported() {
|
||||||
|
return supportedFeatures.fadeCamera[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isCustomCameraSupported() {
|
||||||
|
return supportedFeatures.customCamera[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isFightStyleSupported() {
|
||||||
|
return supportedFeatures.fightStyle[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function areWorldLabelsSupported() {
|
||||||
|
return supportedFeatures.worldLabels[getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function isGameFeatureSupported(featureName) {
|
||||||
|
return supportedFeatures[featureName][getGame()];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getAllowedSkins(gameId = getGame()) {
|
||||||
|
return getGameData().skins[gameId].filter(skin => skin[2] == true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getGameData() {
|
||||||
|
return gameData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getAllowedSkinIndexFromSkin(skin) {
|
||||||
|
for(let i in allowedSkins) {
|
||||||
|
if(allowedSkins[i][0] == skin) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getSkinIndexFromModel(model, gameId = getGame()) {
|
||||||
|
let skins = getGameData().skins[gameId];
|
||||||
|
for(let i in skins) {
|
||||||
|
if(toLowerCase(skins[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getSkinIndexFromName(name, gameId = getGame()) {
|
||||||
|
let skins = getGameData().skins[gameId];
|
||||||
|
for(let i in skins) {
|
||||||
|
if(toLowerCase(skins[i][1]).indexOf(toLowerCase(name)) != -1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getObjectModelIndexFromModel(model, gameId = getGame()) {
|
||||||
|
let objects = getGameData().objects[gameId];
|
||||||
|
for(let i in objects) {
|
||||||
|
if(toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getGameName(gameId = getGame()) {
|
||||||
|
return getGameData().gameNames[gameId];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getVehicleModelIndexFromParams(params, gameId = getGame()) {
|
||||||
|
let fromName = getVehicleModelIndexFromName(params, gameId);
|
||||||
|
let fromModel = getVehicleModelIndexFromModel(params, gameId);
|
||||||
|
|
||||||
|
if(fromModel && !fromName) {
|
||||||
|
return fromModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!fromModel && fromName) {
|
||||||
|
return fromName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getVehicleModelIndexFromName(name, gameId = getGame()) {
|
||||||
|
let vehicles = getGameData().vehicles[gameId];
|
||||||
|
for(let i in vehicles) {
|
||||||
|
if(toLowerCase(vehicles[i][1]).indexOf(toLowerCase(name)) != -1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getVehicleModelIndexFromModel(model, gameId = getGame()) {
|
||||||
|
let vehicles = getGameData().vehicles[gameId];
|
||||||
|
for(let i in vehicles) {
|
||||||
|
if(isNaN(model)) {
|
||||||
|
if(toLowerCase(vehicles[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(vehicles[i][0] == toInteger(model)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getVehicleModelFromName(name, gameId = getGame()) {
|
||||||
|
let vehicles = getGameData().vehicles[gameId];
|
||||||
|
for(let i in vehicles) {
|
||||||
|
if(toLowerCase(vehicles[i][1]).indexOf(toLowerCase(name)) != -1) {
|
||||||
|
return vehicles[i][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getVehicleNameFromModel(model, gameId = getGame()) {
|
||||||
|
let vehicles = getGameData().vehicles[gameId];
|
||||||
|
for(let i in vehicles) {
|
||||||
|
if(isNaN(model)) {
|
||||||
|
if(toLowerCase(vehicles[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return vehicles[i][1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(vehicles[i][0] == toInteger(model)) {
|
||||||
|
return vehicles[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getSkinModelIndexFromParams(params, gameId = getServerGame()) {
|
||||||
|
let fromName = getSkinIndexFromName(params, gameId);
|
||||||
|
let fromModel = getSkinIndexFromModel(params, gameId);
|
||||||
|
|
||||||
|
if(fromModel && !fromName) {
|
||||||
|
return fromModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!fromModel && fromName) {
|
||||||
|
return fromName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getSkinNameFromModel(model, gameId = getServerGame()) {
|
||||||
|
let skins = getGameData().skins[gameId];
|
||||||
|
for(let i in skins) {
|
||||||
|
if(toLowerCase(skins[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return skins[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getSkinModelFromName(name, gameId = getServerGame()) {
|
||||||
|
let skins = getGameData().skins[gameId];
|
||||||
|
for(let i in skins) {
|
||||||
|
if(toLowerCase(skins[i][1]).indexOf(toLowerCase(name)) != -1) {
|
||||||
|
return skins[i][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getObjectModelIndexFromParams(params, gameId = getServerGame()) {
|
||||||
|
let fromName = getObjectModelIndexFromName(params, gameId);
|
||||||
|
let fromModel = getObjectModelIndexFromModel(params, gameId);
|
||||||
|
|
||||||
|
if(fromModel && !fromName) {
|
||||||
|
return fromModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!fromModel && fromName) {
|
||||||
|
return fromName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getObjectNameFromModel(model, gameId = getServerGame()) {
|
||||||
|
let objects = getGameData().objects[gameId];
|
||||||
|
for(let i in objects) {
|
||||||
|
if(toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||||
|
return objects[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getObjectModelFromName(name, gameId = getServerGame()) {
|
||||||
|
let objects = getGameData().objects[gameId];
|
||||||
|
for(let i in objects) {
|
||||||
|
if(toLowerCase(objects[i][1]).indexOf(toLowerCase(name)) != -1) {
|
||||||
|
return objects[i][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosToRightOfPos(pos, angle, distance) {
|
||||||
|
let x = (pos.x+((Math.cos((-angle+1.57)+(Math.PI/2)))*distance));
|
||||||
|
let y = (pos.y+((Math.sin((-angle+1.57)+(Math.PI/2)))*distance));
|
||||||
|
|
||||||
|
let rightPos = toVector3(x, y, pos.z);
|
||||||
|
|
||||||
|
return rightPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosToLeftOfPos(pos, angle, distance) {
|
||||||
|
let x = (pos.x+((Math.cos((angle+1.57)+(Math.PI/2)))*distance));
|
||||||
|
let y = (pos.y+((Math.sin((angle+1.57)+(Math.PI/2)))*distance));
|
||||||
|
|
||||||
|
let leftPos = toVector3(x, y, pos.z);
|
||||||
|
|
||||||
|
return leftPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosInFrontOfPos(pos, angle, distance) {
|
||||||
|
let x = pos.x;
|
||||||
|
let y = pos.y;
|
||||||
|
let z = pos.z;
|
||||||
|
|
||||||
|
if(getGame() < VRR_GAME_MAFIA_ONE) {
|
||||||
|
y = (pos.y+((Math.sin(angle+(Math.PI/2)))*distance));
|
||||||
|
} else {
|
||||||
|
angle = radToDeg(angle);
|
||||||
|
z = (pos.z+((Math.sin(angle+(Math.PI/2)))*distance));
|
||||||
|
}
|
||||||
|
|
||||||
|
x = (pos.x+((Math.cos(angle+(Math.PI/2)))*distance));
|
||||||
|
|
||||||
|
return toVector3(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosBehindPos(pos, angle, distance) {
|
||||||
|
let x = pos.x;
|
||||||
|
let y = pos.y;
|
||||||
|
let z = pos.z;
|
||||||
|
|
||||||
|
if(getGame() < VRR_GAME_MAFIA_ONE) {
|
||||||
|
y = (pos.y+((Math.sin(angle-(Math.PI/2)))*distance));
|
||||||
|
} else {
|
||||||
|
angle = radToDeg(angle);
|
||||||
|
z = (pos.z+((Math.sin(angle-(Math.PI/2)))*distance));
|
||||||
|
}
|
||||||
|
|
||||||
|
x = (pos.x+((Math.cos(angle-(Math.PI/2)))*distance));
|
||||||
|
|
||||||
|
return toVector3(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosAbovePos(pos, distance) {
|
||||||
|
return toVector3(pos.x, pos.y, pos.z+distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getPosBelowPos(pos, distance) {
|
||||||
|
return toVector3(pos.x, pos.y, pos.z-distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function applyOffsetToPos(position, position2) {
|
||||||
|
return toVector3(position.x+position2.x, position.y+position2.y, position.z+position2.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
function getRandom(min, max) {
|
||||||
|
return Math.floor(Math.random() * (toInteger(max) - toInteger(min) + 1)) + toInteger(min)
|
||||||
|
}
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
Reference in New Issue
Block a user