Merge branch 'nightly' into ragemp
This commit is contained in:
@@ -38,7 +38,7 @@ function initBusinessScript() {
|
||||
function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked, hasItems) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Business] Received business ${businessId} (${name}) from server`);
|
||||
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (getBusinessData(businessId) != false) {
|
||||
let businessData = getBusinessData(businessId);
|
||||
businessData.name = name;
|
||||
|
||||
@@ -84,6 +84,15 @@ let profanityFilterEnabled = false;
|
||||
|
||||
let localLocaleId = 0;
|
||||
|
||||
/**
|
||||
* @typedef {Object} ServerData
|
||||
* @property {Array.<HouseData>} houses
|
||||
* @property {Array.<BusinessData>} businesses
|
||||
* @property {Array.<VehicleData>} vehicles
|
||||
* @property {Array} localeStrings
|
||||
* @property {Array} localeOptions
|
||||
* @property {Object} cvars
|
||||
*/
|
||||
let serverData = {
|
||||
houses: [],
|
||||
businesses: [],
|
||||
@@ -91,6 +100,7 @@ let serverData = {
|
||||
localeOptions: [],
|
||||
vehicles: [],
|
||||
jobs: [],
|
||||
cvars: {},
|
||||
};
|
||||
|
||||
let localPlayerMoney = 0;
|
||||
@@ -176,10 +176,10 @@ function onPedExitedVehicle(event, ped, vehicle, seat) {
|
||||
if (areServerElementsSupported()) {
|
||||
if (inVehicleSeat == 0) {
|
||||
//setVehicleEngine(vehicle.id, false);
|
||||
if (!inVehicle.engine) {
|
||||
parkedVehiclePosition = false;
|
||||
parkedVehicleHeading = false;
|
||||
}
|
||||
//if (!inVehicle.engine) {
|
||||
// parkedVehiclePosition = false;
|
||||
// parkedVehicleHeading = false;
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -216,7 +216,7 @@ function onPedEnteredVehicle(event, ped, vehicle, seat) {
|
||||
//parkedVehiclePosition = inVehicle.position;
|
||||
//parkedVehicleHeading = inVehicle.heading;
|
||||
if (doesEntityDataExist(vehicle, "agrp.server") == true) {
|
||||
setVehicleEngine(vehicle.id, false);
|
||||
//setVehicleEngine(vehicle.id, false);
|
||||
setVehicleEngine(vehicle.id, getEntityData(vehicle, "agrp.engine"));
|
||||
//setLocalPlayerControlState(false, false);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ class HouseData {
|
||||
function receiveHouseFromServer(houseId, description, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.House] Received house ${houseId} (${name}) from server`);
|
||||
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (getHouseData(houseId) != false) {
|
||||
let houseData = getHouseData(houseId);
|
||||
houseData.description = description;
|
||||
|
||||
@@ -140,7 +140,7 @@ function hideJobRouteLocation() {
|
||||
function receiveJobFromServer(jobId, jobLocationId, name, position, blipModel, pickupModel) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Job] Received job ${jobId} (${name}) from server`);
|
||||
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (getJobData(jobId) != false) {
|
||||
let jobData = getJobData(jobId);
|
||||
jobData.jobLocationId = jobLocationId;
|
||||
|
||||
@@ -464,4 +464,10 @@ function updatePlayerPing(playerName, ping) {
|
||||
playerPing[playerName] = ping;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function receiveClientVariablesFromServer(clientVariablesString) {
|
||||
serverData.cvars = JSON.parse(clientVariablesString);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -47,15 +47,15 @@ function processSync(event, deltaTime) {
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleLights(vehicleId, state) {
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (!state) {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
||||
} else {
|
||||
natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
||||
}
|
||||
} else {
|
||||
getElementFromId(vehicleId).lights = state;
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// if (!state) {
|
||||
// natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0));
|
||||
// } else {
|
||||
// natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1));
|
||||
// }
|
||||
//} else {
|
||||
getElementFromId(vehicleId).lights = state;
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -73,11 +73,12 @@ function syncVehicleProperties(vehicle) {
|
||||
|
||||
if (doesEntityDataExist(vehicle, "agrp.lights")) {
|
||||
let lightStatus = getEntityData(vehicle, "agrp.lights");
|
||||
if (!lightStatus) {
|
||||
vehicle.lightStatus = 2;
|
||||
} else {
|
||||
vehicle.lightStatus = 1;
|
||||
}
|
||||
vehicle.lights = lightStatus;
|
||||
}
|
||||
|
||||
if (doesEntityDataExist(vehicle, "agrp.locked")) {
|
||||
let lockStatus = getEntityData(vehicle, "agrp.locked");
|
||||
vehicle.locked = lockStatus;
|
||||
}
|
||||
|
||||
if (doesEntityDataExist(vehicle, "agrp.invincible")) {
|
||||
|
||||
@@ -224,13 +224,16 @@ function setLocalPlayerInterior(interior) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setSnowState(falling, ground) {
|
||||
function setSnowState(falling, ground, forceGround) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Utilities] Setting falling snow to ${falling} and ground snow to ${ground}`);
|
||||
snowing = falling;
|
||||
if (ground) {
|
||||
forceSnowing(false);
|
||||
forceSnowing(ground);
|
||||
}
|
||||
//snow.force = ground;
|
||||
//if (forceGround == true) {
|
||||
// forceSnowing(forceGround);
|
||||
// groundSnow.flush();
|
||||
//} else {
|
||||
// snow.enabled = ground;
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -602,7 +605,7 @@ function updateLocalPlayerMoney() {
|
||||
}
|
||||
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
natives.setMultiplayerHudCash(amount);
|
||||
natives.setMultiplayerHudCash(localPlayerMoney);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2017,7 +2017,7 @@ function createBusinessEntrancePickup(businessId) {
|
||||
|
||||
logToConsole(LOG_VERBOSE, `[AGRP.Job]: Creating entrance pickup for business ${businessData.name}`);
|
||||
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) {
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) {
|
||||
let entrancePickup = null;
|
||||
if (isGameFeatureSupported("pickup")) {
|
||||
let pickupModelId = getGameConfig().pickupModels[getGame()].Business;
|
||||
@@ -2094,7 +2094,7 @@ function createBusinessEntranceBlip(businessId) {
|
||||
|
||||
logToConsole(LOG_VERBOSE, `[AGRP.Job]: Creating entrance blip for business ${businessData.name} (model ${blipModelId})`);
|
||||
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) {
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) {
|
||||
let entranceBlip = createGameBlip(businessData.entrancePosition, blipModelId, 1, getColourByType("businessBlue"));
|
||||
if (entranceBlip != null) {
|
||||
if (businessData.entranceDimension != -1) {
|
||||
@@ -2864,7 +2864,7 @@ function getBusinessIdFromDatabaseId(databaseId) {
|
||||
|
||||
// Updates all pickup data for a business by businessId
|
||||
function updateBusinessPickupLabelData(businessId) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
sendBusinessToPlayer(null, businessId, getBusinessData(businessId).name, getBusinessData(businessId).entrancePosition, getBusinessEntranceBlipModelForNetworkEvent(businessId), getBusinessEntrancePickupModelForNetworkEvent(businessId), getBusinessData(businessId).buyPrice, getBusinessData(businessId).rentPrice, getBusinessData(businessId).hasInterior, getBusinessData(businessId).locked, doesBusinessHaveAnyItemsToBuy(businessId));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -225,7 +225,7 @@ function privateMessageCommand(command, params, client) {
|
||||
getPlayerData(targetClient).privateMessageReplyTo = client;
|
||||
messagePlayerPrivateMessage(targetClient, client, messageText);
|
||||
|
||||
if (hasPlayerSeenActionTip(targetClient, "ReplyToDirectMessage")) {
|
||||
if (!hasPlayerSeenActionTip(targetClient, "ReplyToDirectMessage")) {
|
||||
messagePlayerTip(targetClient, getGroupedLocaleString(targetClient, "ActionTips", "ReplyToDirectMessage", "{ALTCOLOUR}/reply{MAINCOLOUR}"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ class ClientData {
|
||||
|
||||
// Misc
|
||||
this.changingCharacterName = false;
|
||||
this.currentPickup = false;
|
||||
this.currentPickup = null;
|
||||
this.usingSkinSelect = false;
|
||||
this.keyBinds = [];
|
||||
this.incomingDamageMultiplier = 1;
|
||||
@@ -228,7 +228,7 @@ function initClient(client) {
|
||||
sendPlayerCurrencyString(client);
|
||||
sendPlayerGUIColours(client);
|
||||
sendPlayerGUIInit(client);
|
||||
updatePlayerSnowState(client);
|
||||
updatePlayerSnowState(client, getServerConfig().groundSnow);
|
||||
|
||||
//logToConsole(LOG_DEBUG, `[AGRP.Account] Showing connect camera to ${getPlayerDisplayForConsole(client)} ...`);
|
||||
//showConnectCameraToPlayer(client);
|
||||
|
||||
@@ -81,6 +81,8 @@ function loadCommands() {
|
||||
new CommandData("chatfilter", toggleAccountProfanityFilterCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off profanity filter"),
|
||||
new CommandData("chatemoji", toggleAccountReplaceEmojiCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off automatic emoji"),
|
||||
new CommandData("emoji", toggleAccountReplaceEmojiCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off automatic emoji"),
|
||||
//new CommandData("resetkeybinds", resetKeyBindsCommand, "", getStaffFlagValue("None"), true, false, "Resets all your keybinds to default"),
|
||||
//new CommandData("copykeybinds", copyKeyBindsToServerCommand, "<server id>", getStaffFlagValue("None"), true, false, "Copies all your current keybinds to another server"),
|
||||
//new CommandData("noblood", toggleAccountHideBloodCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off blood in-game"),
|
||||
],
|
||||
ammunation: [],
|
||||
@@ -593,6 +595,7 @@ function loadCommands() {
|
||||
new CommandData("biz", getPlayerCurrentBusinessCommand, "<player name/id>", getStaffFlagValue("BasicModeration"), true, true, "Gets which business a player is at/in"),
|
||||
new CommandData("business", getPlayerCurrentBusinessCommand, "<player name/id>", getStaffFlagValue("BasicModeration"), true, true, "Gets which business a player is at/in"),
|
||||
new CommandData("house", getPlayerCurrentHouseCommand, "<player name/id>", getStaffFlagValue("BasicModeration"), true, true, "Gets which house a player is at/in"),
|
||||
//new CommandData("clearchat", clearChatCommand, "", getStaffFlagValue("None"), true, true, "Clears the chat"),
|
||||
],
|
||||
startup: [],
|
||||
subAccount: [
|
||||
@@ -719,6 +722,9 @@ function addAllCommandHandlers() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @return {CommandData} command
|
||||
*/
|
||||
function getCommand(command) {
|
||||
let commandGroups = getCommands()
|
||||
for (let i in commandGroups) {
|
||||
@@ -735,6 +741,9 @@ function getCommand(command) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @return {CommandData} command
|
||||
*/
|
||||
function getCommandData(command) {
|
||||
return getCommand(command);
|
||||
}
|
||||
@@ -1029,10 +1038,10 @@ function cacheAllCommandsAliases() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getCommandAliasesNames(command) {
|
||||
function getCommandAliasesNames(commandData) {
|
||||
let commandAliases = [];
|
||||
for (let i in command.aliases) {
|
||||
commandAliases.push(command.aliases[i].name);
|
||||
for (let i in commandData.aliases) {
|
||||
commandAliases.push(commandData.aliases[i].name);
|
||||
}
|
||||
|
||||
return commandAliases;
|
||||
|
||||
@@ -387,7 +387,7 @@ function applyConfigToServer(tempServerConfig) {
|
||||
|
||||
if (isWeatherSupported()) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Config]: Setting weather to ${tempServerConfig.weather}`);
|
||||
game.forceWeather(tempServerConfig.weather);
|
||||
game.forceWeather(getWeatherData(tempServerConfig.weather).weatherId);
|
||||
}
|
||||
|
||||
updateServerRules();
|
||||
@@ -583,19 +583,19 @@ function setWeatherCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let weatherId = getWeatherFromParams(getParam(params, " ", 1));
|
||||
let weatherIndex = getWeatherFromParams(getParam(params, " ", 1));
|
||||
|
||||
if (!weatherId) {
|
||||
if (!getWeatherData(weatherIndex)) {
|
||||
messagePlayerError(client, `That weather ID or name is invalid!`);
|
||||
return false;
|
||||
}
|
||||
|
||||
game.forceWeather(toInteger(weatherId));
|
||||
getServerConfig().weather = weatherId;
|
||||
game.forceWeather(getWeatherData(weatherIndex).weatherId);
|
||||
getServerConfig().weather = weatherIndex;
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
|
||||
announceAdminAction("ServerWeatherSet", getPlayerName(client), getGameConfig().weatherNames[getGame()][toInteger(weatherId)]);
|
||||
announceAdminAction("ServerWeatherSet", getPlayerName(client), getWeatherData(weatherIndex).name);
|
||||
updateServerRules();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
// TYPE: Server (JavaScript)
|
||||
// ===========================================================================
|
||||
|
||||
let scriptVersion = "1.2";
|
||||
let scriptVersion = "1.3";
|
||||
let serverStartTime = 0;
|
||||
let logLevel = LOG_INFO | LOG_DEBUG | LOG_VERBOSE; // LOG_ERROR|LOG_WARN;
|
||||
let logLevel = LOG_INFO | LOG_ERROR | LOG_WARN;
|
||||
|
||||
let playerResourceReady = new Array(server.maxClients).fill(false);
|
||||
let playerResourceStarted = new Array(server.maxClients).fill(false);
|
||||
|
||||
@@ -205,12 +205,6 @@ function onPedExitingVehicle(event, ped, vehicle) {
|
||||
let client = getClientFromPlayerElement(ped);
|
||||
getPlayerData(client).pedState = AGRP_PEDSTATE_EXITINGVEHICLE;
|
||||
}
|
||||
|
||||
if (!getVehicleData(vehicle).spawnLocked) {
|
||||
getVehicleData(vehicle).spawnPosition = getVehiclePosition(vehicle);
|
||||
getVehicleData(vehicle).spawnRotation = getVehicleHeading(vehicle);
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -247,16 +241,16 @@ function onResourceStop(event, resource) {
|
||||
|
||||
function onPedEnteredSphere(event, ped, sphere) {
|
||||
logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} entered sphere ${sphere.id}!`);
|
||||
if (ped.isType(ELEMENT_PLAYER)) {
|
||||
let client = getClientFromPlayerElement(ped);
|
||||
//if (ped.isType(ELEMENT_PLAYER)) {
|
||||
// let client = getClientFromPlayerElement(ped);
|
||||
|
||||
// Handled client-side since server spheres aren't showing on GTAC atm (bug)
|
||||
//if (isPlayerOnJobRoute(client)) {
|
||||
// if (sphere == getJobRouteLocationData(getPlayerJob(client), getPlayerJobRoute(client), getPlayerJobRouteLocation(client)).marker) {
|
||||
// playerArrivedAtJobRouteLocation(client);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
// Handled client-side since server spheres aren't showing on GTAC atm (bug)
|
||||
//if (isPlayerOnJobRoute(client)) {
|
||||
// if (sphere == getJobRouteLocationData(getPlayerJob(client), getPlayerJobRoute(client), getPlayerJobRouteLocation(client)).marker) {
|
||||
// playerArrivedAtJobRouteLocation(client);
|
||||
// }
|
||||
//}
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -286,6 +280,7 @@ function onPedPickupPickedUp(event, ped, pickup) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/*
|
||||
function onPedWasted(event, ped, killerPed, weapon, pedPiece) {
|
||||
logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} wasted by ped ${killerPed.id}!`);
|
||||
|
||||
@@ -297,6 +292,7 @@ function onPedWasted(event, ped, killerPed, weapon, pedPiece) {
|
||||
onPlayerWasted(getClientFromPlayerElement(ped), killerClient, weapon, pedPiece);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -396,12 +392,12 @@ function onPlayerDeath(client, killer, weapon, pedPiece) {
|
||||
function onPedSpawn(ped) {
|
||||
logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} spawned!`);
|
||||
|
||||
if (ped.type == ELEMENT_PLAYER) {
|
||||
if (getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) {
|
||||
//setTimeout(onPlayerSpawn, 250, ped);
|
||||
//onPlayerSpawn();
|
||||
}
|
||||
}
|
||||
//if (ped.type == ELEMENT_PLAYER) {
|
||||
// if (getGame() != AGRP_GAME_MAFIA_ONE) {
|
||||
// //setTimeout(onPlayerSpawn, 250, getClientFromPlayerElement(ped));
|
||||
// //onPlayerSpawn(getClientFromPlayerElement(ped));
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -458,7 +454,7 @@ async function onPlayerSpawn(client) {
|
||||
// return false;
|
||||
//}
|
||||
|
||||
if (isCustomCameraSupported() && getGame() != AGRP_GAME_GTA_IV && getGame() != AGRP_GAME_GTA_IV_EFLC) {
|
||||
if (isCustomCameraSupported()) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Event] Restoring ${getPlayerDisplayForConsole(client)}'s camera`);
|
||||
restorePlayerCamera(client);
|
||||
}
|
||||
@@ -509,10 +505,10 @@ async function onPlayerSpawn(client) {
|
||||
setPlayer2DRendering(client, true, true, true, true, true, true);
|
||||
}
|
||||
|
||||
if (isGameFeatureSupported("snow")) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`);
|
||||
updatePlayerSnowState(client);
|
||||
}
|
||||
//if (isGameFeatureSupported("snow")) {
|
||||
// logToConsole(LOG_DEBUG, `[AGRP.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`);
|
||||
// updatePlayerSnowState(client, true);
|
||||
//}
|
||||
|
||||
if (areServerElementsSupported() && isGameFeatureSupported("walkStyle")) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Event] Setting player walking style for ${getPlayerDisplayForConsole(client)}`);
|
||||
@@ -589,11 +585,13 @@ async function onPlayerSpawn(client) {
|
||||
sendNameTagDistanceToClient(client, getServerConfig().nameTagDistance);
|
||||
}
|
||||
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Event] Sending properties, jobs, and vehicles to ${getPlayerDisplayForConsole(client)} (no server elements)`);
|
||||
sendAllBusinessesToPlayer(client);
|
||||
sendAllHousesToPlayer(client);
|
||||
sendAllJobsToPlayer(client);
|
||||
if (getGame() != AGRP_GAME_GTA_IV) {
|
||||
sendAllJobsToPlayer(client);
|
||||
}
|
||||
requestPlayerPedNetworkId(client);
|
||||
}
|
||||
|
||||
@@ -629,7 +627,9 @@ async function onPlayerSpawn(client) {
|
||||
|
||||
if (areServerElementsSupported()) {
|
||||
if (getGlobalConfig().playerStreamInDistance == -1 || getGlobalConfig().playerStreamOutDistance == -1) {
|
||||
getPlayerPed(client).netFlags.distanceStreaming = false;
|
||||
//getPlayerPed(client).netFlags.distanceStreaming = false;
|
||||
setElementStreamInDistance(getPlayerPed(client), 99999);
|
||||
setElementStreamOutDistance(getPlayerPed(client), 99999);
|
||||
} else {
|
||||
setElementStreamInDistance(getPlayerPed(client), getServerConfig().playerStreamInDistance);
|
||||
setElementStreamOutDistance(getPlayerPed(client), getServerConfig().playerStreamOutDistance);
|
||||
@@ -676,11 +676,21 @@ function onPlayerCommand(event, client, command, params) {
|
||||
function onPedExitedVehicle(event, ped, vehicle, seat) {
|
||||
logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} exited vehicle ${vehicle.id} from seat ${seat}!`);
|
||||
|
||||
if (getVehicleData(vehicle) == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ped.isType(ELEMENT_PLAYER)) {
|
||||
let client = getClientFromPlayerElement(ped);
|
||||
if (client != null) {
|
||||
getPlayerData(client).pedState = AGRP_PEDSTATE_READY;
|
||||
|
||||
if (getVehicleData(vehicle).spawnLocked == false && canPlayerManageVehicle(client, vehicle) == true) {
|
||||
getVehicleData(vehicle).spawnPosition = getVehiclePosition(vehicle);
|
||||
getVehicleData(vehicle).spawnRotation = getVehicleHeading(vehicle);
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
}
|
||||
|
||||
stopRadioStreamForPlayer(client);
|
||||
|
||||
if (!getVehicleData(vehicle)) {
|
||||
@@ -714,10 +724,6 @@ function onPedEnteredVehicle(event, ped, vehicle, seat) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
vehicle = getVehicleFromIVNetworkId(clientVehicle);
|
||||
}
|
||||
|
||||
if (!getVehicleData(vehicle)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -348,22 +348,23 @@ function showCommandHelpMessage(client, commandName) {
|
||||
commandName = commandName.slice(1);
|
||||
}
|
||||
|
||||
let command = getCommandData(commandName);
|
||||
let aliases = getCommandAliasesNames(command);
|
||||
let commandData = getCommandData(commandName);
|
||||
let aliases = getCommandAliasesNames(commandData);
|
||||
|
||||
messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderCommandInfo", commandName)));
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Description: ${command.helpDescription}`);
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Description: ${commandData.helpDescription}`);
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usage: /${commandData.command} ${commandData.syntaxString}`);
|
||||
|
||||
if (aliases.length > 0) {
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: ${aliases.join(", ")}`);
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: ${aliases.map(alias => `/${alias.command}`).join(", ")}`);
|
||||
} else {
|
||||
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: (None)`);
|
||||
}
|
||||
|
||||
//messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(command.allowOnDiscord)}`);
|
||||
//messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(commandData.allowOnDiscord)}`);
|
||||
|
||||
//if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("BasicModeration"))) {
|
||||
// messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(command.allowOnDiscord)}`);
|
||||
// messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(commandData.allowOnDiscord)}`);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@@ -1056,7 +1056,7 @@ function createHouseEntrancePickup(houseId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) {
|
||||
if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) {
|
||||
let entrancePickup = null;
|
||||
if (isGameFeatureSupported("pickup")) {
|
||||
let pickupModelId = getGameConfig().pickupModels[getGame()].House;
|
||||
@@ -1781,7 +1781,7 @@ function getHouseFromParams(params) {
|
||||
// ===========================================================================
|
||||
|
||||
function updateHousePickupLabelData(houseId) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) {
|
||||
sendHouseToPlayer(null, houseId, getHouseData(houseId).description, getHouseData(houseId).entrancePosition, getHouseEntranceBlipModelForNetworkEvent(houseId), getHouseEntrancePickupModelForNetworkEvent(houseId), getHouseData(houseId).buyPrice, getHouseData(houseId).rentPrice, getHouseData(houseId).hasInterior, getHouseData(houseId).locked);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -106,14 +106,14 @@ function copyKeyBindsToServerCommand(command, params, client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function addPlayerKeyBind(client, keys, command, params, tempKey = false) {
|
||||
function addPlayerKeyBind(client, keyId, command, params, tempKey = false) {
|
||||
let keyBindData = new KeyBindData(false, keys, `${command} ${params}`);
|
||||
if (tempKey == true) {
|
||||
keyBindData.databaseId = -1;
|
||||
}
|
||||
|
||||
getPlayerData(client).keyBinds.push(keyBindData);
|
||||
sendAddAccountKeyBindToClient(client, keys, (keys.length > 1) ? AGRP_KEYSTATE_COMBO : AGRP_KEYSTATE_UP);
|
||||
sendAddAccountKeyBindToClient(client, keyId, AGRP_KEYSTATE_UP);
|
||||
|
||||
if (!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) {
|
||||
let keyId = getPlayerKeyBindForCommand(client, "enter");
|
||||
|
||||
@@ -297,7 +297,7 @@ async function translateMessage(messageText, translateFrom = getGlobalConfig().l
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getLocaleFromCountryISO(isoCode) {
|
||||
function getLocaleFromCountryISO(isoCode = "US") {
|
||||
for (let i in getLocales()) {
|
||||
for (let j in getLocales()[i].countries) {
|
||||
if (toLowerCase(getLocales()[i].countries[j]) == toLowerCase(isoCode)) {
|
||||
|
||||
@@ -232,7 +232,8 @@ function messagePlayersInRace(raceId, message) {
|
||||
// ===========================================================================
|
||||
|
||||
function messagePlayerPrivateMessage(toClient, fromClient, messageText) {
|
||||
messagePlayerNormal(toClient, `{yellow}[DM] ${getCharacterFullName(fromClient)}{MAINCOLOUR}says: {ALTCOLOUR}${messageText}`);
|
||||
messagePlayerNormal(toClient, `📥 {yellow}DM from ${getCharacterFullName(fromClient)}{MAINCOLOUR}: ${messageText}`);
|
||||
messagePlayerNormal(fromClient, `📤 {yellow}DM to ${getCharacterFullName(toClient)}{MAINCOLOUR}: ${messageText}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -211,42 +211,52 @@ function enterExitPropertyCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let position = getPlayerPosition(client);
|
||||
let dimension = getPlayerDimension(client);
|
||||
|
||||
/*
|
||||
// The player's currentPickup wasn't always being set. This prevented entering/exiting a property.
|
||||
// Needs further testing and tweaks.
|
||||
if (!getPlayerData(client).currentPickup) {
|
||||
let ownerType = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.type");
|
||||
let ownerId = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.id");
|
||||
if (getPlayerData(client).currentPickup != null) {
|
||||
if (getDistance(getPlayerData(client).currentPickup.position, getPlayerPosition(client)) <= 2) {
|
||||
let ownerType = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.type");
|
||||
let ownerId = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.id");
|
||||
|
||||
switch (ownerType) {
|
||||
case AGRP_PICKUP_BUSINESS_ENTRANCE:
|
||||
isBusiness = true;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().businesses[ownerId];
|
||||
break;
|
||||
switch (ownerType) {
|
||||
case AGRP_PICKUP_BUSINESS_ENTRANCE:
|
||||
isBusiness = true;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().businesses[ownerId];
|
||||
break;
|
||||
|
||||
case AGRP_PICKUP_BUSINESS_EXIT:
|
||||
isBusiness = true;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().businesses[ownerId];
|
||||
break;
|
||||
case AGRP_PICKUP_BUSINESS_EXIT:
|
||||
isBusiness = true;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().businesses[ownerId];
|
||||
break;
|
||||
|
||||
case AGRP_PICKUP_HOUSE_ENTRANCE:
|
||||
isBusiness = false;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().houses[ownerId];
|
||||
break;
|
||||
case AGRP_PICKUP_HOUSE_ENTRANCE:
|
||||
isBusiness = false;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().houses[ownerId];
|
||||
break;
|
||||
|
||||
case AGRP_PICKUP_HOUSE_EXIT:
|
||||
isBusiness = false;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().houses[ownerId];
|
||||
break;
|
||||
case AGRP_PICKUP_HOUSE_EXIT:
|
||||
isBusiness = false;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().houses[ownerId];
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
getPlayerData(client).currentPickup = null;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Check businesses first
|
||||
if (closestProperty == null) {
|
||||
let businessIndex = getClosestBusinessEntrance(getPlayerPosition(client), getPlayerDimension(client));
|
||||
@@ -284,6 +294,48 @@ function enterExitPropertyCommand(command, params, client) {
|
||||
closestProperty = getServerData().houses[houseIndex];
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// Check businesses first
|
||||
if (closestProperty == null) {
|
||||
for (let i in getServerData().businesses) {
|
||||
if (getServerData().businesses[i].entranceDimension == dimension) {
|
||||
if (getDistance(position, getServerData().businesses[i].entrancePosition) <= getGlobalConfig().enterPropertyDistance) {
|
||||
isBusiness = true;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().businesses[i];
|
||||
}
|
||||
} else {
|
||||
if (getServerData().businesses[i].exitDimension == dimension) {
|
||||
if (getDistance(position, getServerData().businesses[i].exitPosition) <= getGlobalConfig().exitPropertyDistance) {
|
||||
isBusiness = true;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().businesses[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (closestProperty == null) {
|
||||
for (let i in getServerData().houses) {
|
||||
if (getServerData().houses[i].entranceDimension == dimension) {
|
||||
if (getDistance(position, getServerData().houses[i].entrancePosition) <= getGlobalConfig().enterPropertyDistance) {
|
||||
isBusiness = false;
|
||||
isEntrance = true;
|
||||
closestProperty = getServerData().houses[i];
|
||||
}
|
||||
} else {
|
||||
if (getServerData().houses[i].exitDimension == dimension) {
|
||||
if (getDistance(position, getServerData().houses[i].exitPosition) <= getGlobalConfig().exitPropertyDistance) {
|
||||
isBusiness = false;
|
||||
isEntrance = false;
|
||||
closestProperty = getServerData().houses[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (closestProperty == null) {
|
||||
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is null`);
|
||||
@@ -293,7 +345,7 @@ function enterExitPropertyCommand(command, params, client) {
|
||||
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is ${(isBusiness) ? closestProperty.name : closestProperty.description} ${(isEntrance) ? "entrance" : "exit"}`);
|
||||
|
||||
let englishId = getLocaleFromParams("English");
|
||||
let typeString = (isBusiness) ? getLocaleString(client, "Business") : getLocaleString(client, "House");
|
||||
let typeString = (isBusiness) ? getLanguageLocaleString(englishId, "Business") : getLanguageLocaleString(englishId, "House");
|
||||
let nameString = (isBusiness) ? closestProperty.name : closestProperty.description;
|
||||
|
||||
if (isEntrance) {
|
||||
|
||||
@@ -193,9 +193,9 @@ function getVehicleHeading(vehicle) {
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleHeading(vehicle, heading) {
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading);
|
||||
//}
|
||||
return vehicle.heading = heading;
|
||||
}
|
||||
|
||||
@@ -227,12 +227,12 @@ function getVehicleSyncer(vehicle) {
|
||||
// ===========================================================================
|
||||
|
||||
function getVehicleForNetworkEvent(vehicle) {
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
if (getVehicleData(vehicle).ivNetworkId != -1) {
|
||||
return getVehicleData(vehicle).ivNetworkId;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// if (getVehicleData(vehicle).ivNetworkId != -1) {
|
||||
// return getVehicleData(vehicle).ivNetworkId;
|
||||
// }
|
||||
// return -1;
|
||||
//}
|
||||
return vehicle.id;
|
||||
}
|
||||
|
||||
@@ -588,14 +588,17 @@ function setVehicleLights(vehicle, lights) {
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleEngine(vehicle, engine) {
|
||||
vehicle.engine = engine;
|
||||
//vehicle.engine = engine;
|
||||
setEntityData(vehicle, "agrp.engine", engine, true);
|
||||
sendNetworkEventToPlayer("agrp.veh.engine", null, vehicle.id, engine);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setVehicleLocked(vehicle, locked) {
|
||||
vehicle.locked = locked;
|
||||
setEntityData(vehicle, "agrp.locked", locked, true);
|
||||
sendNetworkEventToPlayer("agrp.veh.locked", null, vehicle.id, locked);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1112,9 +1115,9 @@ function getClosestCivilian(position) {
|
||||
// ===========================================================================
|
||||
|
||||
function getVehiclesInRange(position, range) {
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j);
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j);
|
||||
//}
|
||||
return getElementsByTypeInRange(ELEMENT_VEHICLE, position, range);
|
||||
}
|
||||
|
||||
@@ -1241,11 +1244,11 @@ function getPlayerPed(client) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
return getPlayerData(client).ped;
|
||||
} else {
|
||||
return client.player;
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// return getPlayerData(client).ped;
|
||||
//} else {
|
||||
return client.player;
|
||||
//}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
@@ -222,10 +222,10 @@ function syncPlayerProperties(client) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function updatePlayerSnowState(client) {
|
||||
function updatePlayerSnowState(client, forceGroundSnow = false) {
|
||||
if (isSnowSupported(getGame())) {
|
||||
logToConsole(LOG_DEBUG, `[AGRP.Client] Setting ${getPlayerDisplayForConsole(client)}'s snow state (Falling: ${toUpperCase(getOnOffFromBool(getServerConfig().fallingSnow))}, Ground: ${toUpperCase(getOnOffFromBool(getServerConfig().groundSnow))})`);
|
||||
sendNetworkEventToPlayer("agrp.snow", client, getServerConfig().fallingSnow, getServerConfig().groundSnow);
|
||||
sendNetworkEventToPlayer("agrp.snow", client, getServerConfig().fallingSnow, getServerConfig().groundSnow, forceGroundSnow);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1317,4 +1317,10 @@ function fadePlayerCamera(client, fadeIn, time, colour = toColour(0, 0, 0, 255))
|
||||
sendNetworkEventToPlayer("agrp.fadeCamera", client, fadeIn, time, colour);
|
||||
}
|
||||
|
||||
// ==========================================================================
|
||||
|
||||
function sendClientVariablesToClient(client) {
|
||||
sendNetworkEventToPlayer("agrp.cvar", client, JSON.stringify(clientVariables));
|
||||
}
|
||||
|
||||
// ==========================================================================
|
||||
@@ -245,7 +245,22 @@ function playerPromptAnswerYes(client) {
|
||||
}
|
||||
|
||||
case AGRP_PROMPT_RESETKEYBINDS: {
|
||||
messagePlayerSuccess(client, getLocaleString(client, "KeyBindsReset"));
|
||||
// TODO: Needs database query!
|
||||
|
||||
//for (let i in getPlayerData(client).keyBinds) {
|
||||
// removePlayerKeyBind(client, getPlayerData(client).keyBinds[i].key)
|
||||
//}
|
||||
|
||||
//for (let i in getGlobalConfig().keyBind.defaultKeyBinds) {
|
||||
// let tempKeyBindData = new KeyBindData(false);
|
||||
// tempKeyBindData.databaseId = -1;
|
||||
// tempKeyBindData.key = getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName);
|
||||
// tempKeyBindData.commandString = getGlobalConfig().keyBind.defaultKeyBinds[i].commandString;
|
||||
// tempKeyBindData.keyState = getGlobalConfig().keyBind.defaultKeyBinds[i].keyState;
|
||||
// getPlayerData(client).keyBinds.push(tempKeyBindData);
|
||||
//}
|
||||
|
||||
//messagePlayerSuccess(client, getLocaleString(client, "KeyBindsReset"));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -517,22 +517,9 @@ function selectCharacter(client, characterId = -1) {
|
||||
//setPlayerCameraLookAt(client, getPosBehindPos(spawnPosition, spawnHeading, 5), spawnPosition);
|
||||
getPlayerData(client).pedState = AGRP_PEDSTATE_SPAWNING;
|
||||
|
||||
if (getGame() <= AGRP_GAME_GTA_SA) {
|
||||
if (getGame() <= AGRP_GAME_GTA_IV_EFLC) {
|
||||
spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension);
|
||||
onPlayerSpawn(client);
|
||||
} else if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
//spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension);
|
||||
clearPlayerWeapons(client);
|
||||
setPlayerPosition(client, spawnPosition);
|
||||
setPlayerHeading(client, spawnHeading);
|
||||
//setPlayerInterior(client, spawnInterior);
|
||||
//setPlayerDimension(client, spawnDimension);
|
||||
restorePlayerCamera(client);
|
||||
setPlayerSkin(client, skin);
|
||||
setTimeout(function () {
|
||||
onPlayerSpawn(client);
|
||||
//stopRadioStreamForPlayer(client);
|
||||
}, 500);
|
||||
} else if (getGame() == AGRP_GAME_MAFIA_ONE) {
|
||||
//spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0]);
|
||||
//logToConsole(LOG_DEBUG, `[AGRP.SubAccount] Spawning ${getPlayerDisplayForConsole(client)} as ${getGameConfig().skins[getGame()][skin][1]} (${getGameConfig().skins[getGame()][skin][0]})`);
|
||||
|
||||
@@ -134,11 +134,18 @@ function thirtyMinuteTimerFunction() {
|
||||
checkPayDays();
|
||||
}
|
||||
|
||||
checkInactiveVehicleRespawns();
|
||||
|
||||
if (isGameFeatureSupported("snow")) {
|
||||
checkSnowChance();
|
||||
setSnowWithChance();
|
||||
}
|
||||
|
||||
checkInactiveVehicleRespawns();
|
||||
if (isGameFeatureSupported("weather")) {
|
||||
setRandomWeather();
|
||||
}
|
||||
|
||||
updateServerRules();
|
||||
|
||||
saveServerDataToDatabase();
|
||||
}
|
||||
|
||||
@@ -330,7 +337,7 @@ function checkInactiveVehicleRespawns() {
|
||||
if (getVehicleData(vehicles[i]).lastActiveTime != false) {
|
||||
if (getCurrentUnixTimestamp() - getVehicleData(vehicles[i]).lastActiveTime >= getGlobalConfig().vehicleInactiveRespawnDelay) {
|
||||
respawnVehicle(vehicles[i]);
|
||||
getVehicleData(vehicles[i]).lastActiveTime = false;
|
||||
//getVehicleData(vehicles[i]).lastActiveTime = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -342,13 +349,31 @@ function checkInactiveVehicleRespawns() {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function checkSnowChance() {
|
||||
function setSnowWithChance() {
|
||||
let date = new Date();
|
||||
|
||||
let shouldBeSnowing = getRandomBoolWithProbability(getGlobalConfig().monthlyChanceOfSnow[date.getMonths()]);
|
||||
let shouldBeSnowing = getRandomBoolWithProbability(getGlobalConfig().monthlyChanceOfSnow[date.getMonth()]);
|
||||
getServerConfig().groundSnow = shouldBeSnowing;
|
||||
getServerConfig().fallingSnow = shouldBeSnowing;
|
||||
updatePlayerSnowState(null);
|
||||
|
||||
updatePlayerSnowState(null, false);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function setRandomWeather() {
|
||||
let randomWeatherIndex = getRandom(0, getGameConfig().weather[getGame()].length - 1);
|
||||
|
||||
if (getServerConfig().fallingSnow == true) {
|
||||
while (getWeatherData(randomWeatherIndex).allowWithSnow == false) {
|
||||
randomWeatherIndex = getRandom(0, getGameConfig().weather[getGame()].length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
game.forceWeather(getWeatherData(randomWeatherIndex).weatherId);
|
||||
getServerConfig().weather = randomWeatherIndex;
|
||||
|
||||
getServerConfig().needsSaved = true;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -101,8 +101,8 @@ function updateServerRules() {
|
||||
|
||||
if (isWeatherSupported()) {
|
||||
if (getServerConfig() != false) {
|
||||
if (typeof getGameConfig().weatherNames[getGame()] != "undefined") {
|
||||
let tempText = getGameConfig().weatherNames[getGame()][getServerConfig().weather];
|
||||
if (getWeatherData(getServerConfig().weather) != false) {
|
||||
let tempText = getWeatherData(getServerConfig().weather).name;
|
||||
timeWeatherRule.push(tempText);
|
||||
}
|
||||
}
|
||||
@@ -124,14 +124,16 @@ function updateServerRules() {
|
||||
|
||||
function getWeatherFromParams(params) {
|
||||
if (isNaN(params)) {
|
||||
for (let i in getGameConfig().weatherNames[getGame()]) {
|
||||
if (toLowerCase(getGameConfig().weatherNames[getGame()][i]).indexOf(toLowerCase(params)) != -1) {
|
||||
for (let i in getGameConfig().weather[getGame()]) {
|
||||
if (toLowerCase(getGameConfig().weather[getGame()][i].name).indexOf(toLowerCase(params)) != -1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (typeof getGameConfig().weatherNames[getGame()][params] != "undefined") {
|
||||
return toInteger(params);
|
||||
for (let i in getGameConfig().weather[getGame()]) {
|
||||
if (typeof getGameConfig().weather[getGame()][i].weatherId != "undefined") {
|
||||
return toInteger(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -439,11 +441,13 @@ function isClientInitialized(client) {
|
||||
// ===========================================================================
|
||||
|
||||
function getPedForNetworkEvent(ped) {
|
||||
if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
return ped;
|
||||
} else {
|
||||
return ped.id;
|
||||
}
|
||||
//if (getGame() == AGRP_GAME_GTA_IV) {
|
||||
// return ped;
|
||||
//} else {
|
||||
// return ped.id;
|
||||
//}
|
||||
|
||||
return ped.id;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -638,6 +642,10 @@ function processPlayerEnteringExitingProperty(client) {
|
||||
// ===========================================================================
|
||||
|
||||
function getPlayerCountryISOCode(client) {
|
||||
if (getPlayerIP(client) == "127.0.0.1" || getPlayerIP(client).indexOf("192.168.") != -1) {
|
||||
return "US";
|
||||
}
|
||||
|
||||
return module.geoip.getCountryISO(getGlobalConfig().geoIPCountryDatabaseFilePath, getPlayerIP(client));
|
||||
}
|
||||
|
||||
|
||||
@@ -19,14 +19,6 @@ const AGRP_VEHOWNER_BIZ = 6; // Owned by a business (also i
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
// Vehicle Seats
|
||||
const AGRP_VEHSEAT_DRIVER = 0;
|
||||
const AGRP_VEHSEAT_FRONTPASSENGER = 1;
|
||||
const AGRP_VEHSEAT_REARLEFTPASSENGER = 2;
|
||||
const AGRP_VEHSEAT_REARRIGHTPASSENGER = 3;
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* @class Representing a vehicle's data. Loaded and saved in the database
|
||||
* @property {Array.<Number>} trunkItemCache
|
||||
@@ -165,6 +157,14 @@ class VehicleData {
|
||||
this.licensePlate = toInteger(dbAssoc["veh_license_plate"]);
|
||||
}
|
||||
}
|
||||
|
||||
saveToDatabase() {
|
||||
saveVehicleToDatabase(this);
|
||||
}
|
||||
|
||||
respawn() {
|
||||
respawnVehicle(this.vehicle);
|
||||
}
|
||||
};
|
||||
|
||||
// ===========================================================================
|
||||
@@ -327,8 +327,8 @@ function spawnAllVehicles() {
|
||||
let vehicle = spawnVehicle(getServerData().vehicles[i]);
|
||||
getServerData().vehicles[i].vehicle = vehicle;
|
||||
setEntityData(vehicle, "agrp.dataSlot", i, false);
|
||||
setAllVehicleIndexes();
|
||||
}
|
||||
setAllVehicleIndexes();
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -338,15 +338,11 @@ function spawnAllVehicles() {
|
||||
* @return {VehicleData} The vehicles's data (class instance)
|
||||
*/
|
||||
function getVehicleData(vehicle) {
|
||||
if (getGame() != AGRP_GAME_GTA_IV) {
|
||||
if (isVehicleObject(vehicle)) {
|
||||
let dataIndex = getEntityData(vehicle, "agrp.dataSlot");
|
||||
if (typeof getServerData().vehicles[dataIndex] != "undefined") {
|
||||
return getServerData().vehicles[dataIndex];
|
||||
}
|
||||
if (isVehicleObject(vehicle)) {
|
||||
let dataIndex = getEntityData(vehicle, "agrp.dataSlot");
|
||||
if (typeof getServerData().vehicles[dataIndex] != "undefined") {
|
||||
return getServerData().vehicles[dataIndex];
|
||||
}
|
||||
} else {
|
||||
return getServerData().vehicles.find((v) => v.ivNetworkId == vehicle);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -428,11 +424,11 @@ function getNearbyVehiclesCommand(command, params, client) {
|
||||
}
|
||||
|
||||
let vehiclesList = nearbyVehicles.map(function (x) {
|
||||
return `{ALTCOLOUR}${getVehicleData(x).index}: {MAINCOLOUR}${getVehicleName(x)} {mediumGrey}(${toFloat(getDistance(getPlayerPosition(client), getVehiclePosition(x)), 2)} ${getLocaleString(client, "Meters")} ${getGroupedLocaleString(client, "CardinalDirections", getCardinalDirectionName(getCardinalDirection(getPlayerPosition(client), getVehiclePosition(x))))}`;
|
||||
return `{ALTCOLOUR}${getVehicleData(x).index}: {MAINCOLOUR}${getVehicleName(x)} {mediumGrey}(${toFloat(getDistance(getPlayerPosition(client), getVehiclePosition(x))).toFixed(2)} ${toLowerCase(getLocaleString(client, "Meters"))} ${toLowerCase(getGroupedLocaleString(client, "CardinalDirections", getCardinalDirectionName(getCardinalDirection(getPlayerPosition(client), getVehiclePosition(x)))))})`;
|
||||
});
|
||||
let chunkedList = splitArrayIntoChunks(vehiclesList, 4);
|
||||
|
||||
messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderVehiclesInRangeList", `${distance} ${getLocaleString(client, "Meters")} `)));
|
||||
messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderVehiclesInRangeList", `${distance} ${toLowerCase(getLocaleString(client, "Meters"))}`)));
|
||||
for (let i in chunkedList) {
|
||||
messagePlayerInfo(client, chunkedList[i].join(", "));
|
||||
}
|
||||
@@ -609,8 +605,8 @@ function vehicleAdminColourCommand(command, params, client) {
|
||||
let colour1 = toInteger(getParam(params, " ", 1)) || 0;
|
||||
let colour2 = toInteger(getParam(params, " ", 2)) || 0;
|
||||
|
||||
takePlayerCash(client, getGlobalConfig().resprayVehicleCost);
|
||||
updatePlayerCash(client);
|
||||
//takePlayerCash(client, getGlobalConfig().resprayVehicleCost);
|
||||
//updatePlayerCash(client);
|
||||
vehicle.colour1 = colour1;
|
||||
vehicle.colour2 = colour2;
|
||||
getVehicleData(vehicle).colour1 = colour1;
|
||||
@@ -618,7 +614,7 @@ function vehicleAdminColourCommand(command, params, client) {
|
||||
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
|
||||
meActionToNearbyPlayers(client, `resprays the ${getVehicleName(vehicle)}'s colours`);
|
||||
//meActionToNearbyPlayers(client, `resprays the ${getVehicleName(vehicle)}'s colours`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -639,10 +635,10 @@ function vehicleAdminRepairCommand(command, params, client) {
|
||||
}
|
||||
|
||||
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)} repaired their ${getVehicleName(vehicle)} vehicle`);
|
||||
takePlayerCash(client, getGlobalConfig().repairVehicleCost);
|
||||
//takePlayerCash(client, getGlobalConfig().repairVehicleCost);
|
||||
repairVehicle(vehicle);
|
||||
getVehicleData(vehicle).needsSaved = true;
|
||||
meActionToNearbyPlayers(client, `repairs the ${getVehicleName(vehicle)}`);
|
||||
//meActionToNearbyPlayers(client, `repairs the ${getVehicleName(vehicle)}`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -660,10 +656,10 @@ function vehicleAdminLiveryCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getPlayerCurrentSubAccount(client).cash < getGlobalConfig().repairVehicleCost) {
|
||||
messagePlayerError(client, `You don't have enough money to change the vehicle's livery (need ${getCurrencyString(getGlobalConfig().resprayVehicleCost - getPlayerCurrentSubAccount(client).cash)} more!)`);
|
||||
return false;
|
||||
}
|
||||
//if (getPlayerCurrentSubAccount(client).cash < getGlobalConfig().repairVehicleCost) {
|
||||
// messagePlayerError(client, `You don't have enough money to change the vehicle's livery (need ${getCurrencyString(getGlobalConfig().resprayVehicleCost - getPlayerCurrentSubAccount(client).cash)} more!)`);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
let livery = toInteger(params) || 3;
|
||||
|
||||
@@ -675,7 +671,7 @@ function vehicleAdminLiveryCommand(command, params, client) {
|
||||
setEntityData(vehicle, "agrp.livery", livery, true);
|
||||
forcePlayerToSyncElementProperties(null, vehicle);
|
||||
|
||||
meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`);
|
||||
//meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -698,6 +694,11 @@ function buyVehicleCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (doesPlayerOwnVehicle(client, vehicle)) {
|
||||
messagePlayerError(client, getLocaleString(client, "AlreadyOwnVehicle"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getPlayerCurrentSubAccount(client).cash < getVehicleData(vehicle).buyPrice) {
|
||||
messagePlayerError(client, getLocaleString(client, "VehiclePurchaseNotEnoughMoney"));
|
||||
return false;
|
||||
@@ -845,7 +846,7 @@ function doesPlayerHaveVehicleKeys(client, vehicle) {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesClientOwnVehicle(client, vehicle) {
|
||||
function canPlayerManageVehicle(client, vehicle) {
|
||||
let vehicleData = getVehicleData(vehicle);
|
||||
|
||||
if (doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) {
|
||||
@@ -866,6 +867,40 @@ function doesClientOwnVehicle(client, vehicle) {
|
||||
}
|
||||
}
|
||||
|
||||
if (vehicleData.ownerType == AGRP_VEHOWNER_BIZ) {
|
||||
if (canPlayerManageBusiness(client, getBusinessIdFromDatabaseId(vehicleData.ownerId))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function doesPlayerOwnVehicle(client, vehicle) {
|
||||
let vehicleData = getVehicleData(vehicle);
|
||||
|
||||
if (vehicleData.ownerType == AGRP_VEHOWNER_PLAYER) {
|
||||
if (vehicleData.ownerId == getPlayerData(client).accountData.databaseId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (vehicleData.ownerType == AGRP_VEHOWNER_CLAN) {
|
||||
if (vehicleData.ownerId == getPlayerCurrentSubAccount(client).clan) {
|
||||
if (doesPlayerHaveClanPermission(client, "ManageVehicles") || doesPlayerHaveClanPermission(client, "owner")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (vehicleData.ownerType == AGRP_VEHOWNER_BIZ) {
|
||||
if (canPlayerManageBusiness(client, getBusinessIdFromDatabaseId(vehicleData.ownerId))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1079,9 +1114,10 @@ function setVehicleRentPriceCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!doesClientOwnVehicle(client, vehicle)) {
|
||||
if (!canPlayerManageVehicle(client, vehicle)) {
|
||||
if (!doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) {
|
||||
messagePlayerError(client, "You can't set the rent price for this vehicle!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1108,9 +1144,10 @@ function setVehicleBuyPriceCommand(command, params, client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!doesClientOwnVehicle(client, vehicle)) {
|
||||
if (!canPlayerManageVehicle(client, vehicle)) {
|
||||
if (!doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) {
|
||||
messagePlayerError(client, "You can't set the buy price for this vehicle!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1666,7 +1703,6 @@ function createPermanentVehicle(modelIndex, position, heading, interior = 0, dim
|
||||
setEntityData(vehicle, "agrp.dataSlot", slot - 1, false);
|
||||
}
|
||||
|
||||
|
||||
return vehicle;
|
||||
}
|
||||
|
||||
|
||||
@@ -138,3 +138,9 @@ const AGRP_NPC_ACTION_SPRINTTO = 4;
|
||||
const AGRP_NPC_ACTION_FOLLOW = 5;
|
||||
const AGRP_NPC_ACTION_DEFEND = 6;
|
||||
const AGRP_NPC_ACTION_GUARD_AREA = 7;
|
||||
|
||||
// Vehicle Seats
|
||||
const AGRP_VEHSEAT_DRIVER = 0;
|
||||
const AGRP_VEHSEAT_FRONTPASSENGER = 1;
|
||||
const AGRP_VEHSEAT_REARLEFTPASSENGER = 2;
|
||||
const AGRP_VEHSEAT_REARRIGHTPASSENGER = 3;
|
||||
@@ -29,6 +29,16 @@ class AnimationData {
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
class WeatherData {
|
||||
constructor(weatherId, name, allowWithSnow) {
|
||||
this.weatherId = weatherId;
|
||||
this.name = name;
|
||||
this.allowWithSnow = allowWithSnow;
|
||||
}
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
let supportedFeatures = {
|
||||
// Invalid, GTAIII, GTAVC, GTASA, Invalid, GTAIV, Invalid, Invalid, Invalid, M1, M2, M3, M1DE
|
||||
time: {
|
||||
@@ -55,8 +65,8 @@ let supportedFeatures = {
|
||||
[AGRP_GAME_GTA_III]: true,
|
||||
[AGRP_GAME_GTA_VC]: true,
|
||||
[AGRP_GAME_GTA_SA]: true,
|
||||
[AGRP_GAME_GTA_IV]: false,
|
||||
[AGRP_GAME_GTA_IV_EFLC]: false,
|
||||
[AGRP_GAME_GTA_IV]: true,
|
||||
[AGRP_GAME_GTA_IV_EFLC]: true,
|
||||
[AGRP_GAME_MAFIA_ONE]: true,
|
||||
[AGRP_GAME_MAFIA_TWO]: true,
|
||||
[AGRP_GAME_MAFIA_THREE]: true
|
||||
@@ -126,8 +136,8 @@ let supportedFeatures = {
|
||||
[AGRP_GAME_GTA_III]: true,
|
||||
[AGRP_GAME_GTA_VC]: true,
|
||||
[AGRP_GAME_GTA_SA]: true,
|
||||
[AGRP_GAME_GTA_IV]: false,
|
||||
[AGRP_GAME_GTA_IV_EFLC]: false,
|
||||
[AGRP_GAME_GTA_IV]: true,
|
||||
[AGRP_GAME_GTA_IV_EFLC]: true,
|
||||
[AGRP_GAME_MAFIA_ONE]: false,
|
||||
[AGRP_GAME_MAFIA_TWO]: false,
|
||||
[AGRP_GAME_MAFIA_THREE]: false
|
||||
@@ -563,77 +573,79 @@ let gameData = {
|
||||
|
||||
}
|
||||
},
|
||||
weatherNames: {
|
||||
weather: {
|
||||
[AGRP_GAME_GTA_III]: [ // GTA III
|
||||
"Clear",
|
||||
"Overcast",
|
||||
"Thunderstorm",
|
||||
"Fog",
|
||||
"Clear",
|
||||
"Rainy",
|
||||
"Dark/Cloudy",
|
||||
"Light/Cloudy",
|
||||
"Overcast/Cloudy",
|
||||
"Grey/Cloudy"
|
||||
new WeatherData(0, "Clear", true),
|
||||
new WeatherData(1, "Overcast", false),
|
||||
new WeatherData(2, "Thunderstorm", false),
|
||||
new WeatherData(3, "Fog", true),
|
||||
new WeatherData(4, "Clear", false),
|
||||
new WeatherData(5, "Rainy", false),
|
||||
new WeatherData(6, "Dark/Cloudy", false),
|
||||
new WeatherData(7, "Light/Cloudy", false),
|
||||
new WeatherData(8, "Overcast/Cloudy", true),
|
||||
new WeatherData(9, "Grey/Cloudy", false),
|
||||
],
|
||||
[AGRP_GAME_GTA_VC]: [ // GTA Vice City
|
||||
"Partly Cloudy",
|
||||
"Overcast",
|
||||
"Thunderstorm",
|
||||
"Fog",
|
||||
"Sunny",
|
||||
"Hurricane",
|
||||
"Dark/Cloudy",
|
||||
"Light/Cloudy",
|
||||
"Overcast/Cloudy",
|
||||
"Grey/Cloudy"
|
||||
new WeatherData(0, "Clear", true),
|
||||
new WeatherData(1, "Overcast", false),
|
||||
new WeatherData(2, "Thunderstorm", false),
|
||||
new WeatherData(3, "Fog", true),
|
||||
new WeatherData(4, "Sunny", false),
|
||||
new WeatherData(5, "Hurricane", false),
|
||||
new WeatherData(6, "Dark/Cloudy", false),
|
||||
new WeatherData(7, "Light/Cloudy", false),
|
||||
new WeatherData(8, "Overcast/Cloudy", true),
|
||||
new WeatherData(9, "Grey/Cloudy", false),
|
||||
],
|
||||
[AGRP_GAME_GTA_SA]: [ // GTA San Andreas
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Blue Skies",
|
||||
"Thunderstorm",
|
||||
"Cloudy/Foggy",
|
||||
"Clear Blue Skies",
|
||||
"Heatwave",
|
||||
"Dull/Colorless",
|
||||
"Dull/Colorless",
|
||||
"Dull/Colorless",
|
||||
"Dull/Colorless",
|
||||
"Dull/Rainy",
|
||||
"Heatwave",
|
||||
"Heatwave",
|
||||
"Sandstorm",
|
||||
"Greenish/Foggy"
|
||||
new WeatherData(0, "Blue Skies", false),
|
||||
new WeatherData(1, "Blue Skies", false),
|
||||
new WeatherData(2, "Blue Skies", false),
|
||||
new WeatherData(3, "Blue Skies", false),
|
||||
new WeatherData(4, "Blue Skies", false),
|
||||
new WeatherData(5, "Blue Skies", false),
|
||||
new WeatherData(6, "Blue Skies", false),
|
||||
new WeatherData(7, "Blue Skies", false),
|
||||
new WeatherData(8, "Thunderstorm", false),
|
||||
new WeatherData(9, "Cloudy/Foggy", true),
|
||||
new WeatherData(10, "Clear Blue Skies", false),
|
||||
new WeatherData(11, "Heatwave", false),
|
||||
new WeatherData(12, "Dull/Colorless", false),
|
||||
new WeatherData(13, "Dull/Colorless", false),
|
||||
new WeatherData(14, "Dull/Colorless", false),
|
||||
new WeatherData(15, "Dull/Colorless", false),
|
||||
new WeatherData(16, "Dull/Rainy", false),
|
||||
new WeatherData(17, "Heatwave", false),
|
||||
new WeatherData(18, "Heatwave", false),
|
||||
new WeatherData(19, "Sandstorm", false),
|
||||
new WeatherData(20, "Greenish/Foggy", false),
|
||||
],
|
||||
[AGRP_GAME_GTA_IV]: [ // GTA IV
|
||||
"Extra Sunny",
|
||||
"Sunny",
|
||||
"Sunny/Windy",
|
||||
"Cloudy",
|
||||
"Rain",
|
||||
"Light Rain",
|
||||
"Foggy",
|
||||
"Thunderstorm",
|
||||
"Extra Sunny",
|
||||
"Sunny/Windy",
|
||||
new WeatherData(1, "Blue Skies", false),
|
||||
new WeatherData(2, "Extra Sunny", false),
|
||||
new WeatherData(3, "Sunny", false),
|
||||
new WeatherData(4, "Sunny/Windy", false),
|
||||
new WeatherData(5, "Cloudy", false),
|
||||
new WeatherData(6, "Rain", false),
|
||||
new WeatherData(7, "Light Rain", false),
|
||||
new WeatherData(8, "Foggy", false),
|
||||
new WeatherData(9, "Thunderstorm", false),
|
||||
new WeatherData(10, "Extra Sunny", false),
|
||||
new WeatherData(11, "Sunny/Windy", false),
|
||||
],
|
||||
[AGRP_GAME_GTA_IV_EFLC]: [ // GTA IV EFLC
|
||||
"Extra Sunny",
|
||||
"Sunny",
|
||||
"Sunny/Windy",
|
||||
"Cloudy",
|
||||
"Rain",
|
||||
"Light Rain",
|
||||
"Foggy",
|
||||
"Thunderstorm",
|
||||
"Extra Sunny",
|
||||
"Sunny/Windy",
|
||||
new WeatherData(1, "Blue Skies", false),
|
||||
new WeatherData(2, "Extra Sunny", false),
|
||||
new WeatherData(3, "Sunny", false),
|
||||
new WeatherData(4, "Sunny/Windy", false),
|
||||
new WeatherData(5, "Cloudy", false),
|
||||
new WeatherData(6, "Rain", false),
|
||||
new WeatherData(7, "Light Rain", false),
|
||||
new WeatherData(8, "Foggy", false),
|
||||
new WeatherData(9, "Thunderstorm", false),
|
||||
new WeatherData(10, "Extra Sunny", false),
|
||||
new WeatherData(11, "Sunny/Windy", false),
|
||||
],
|
||||
[AGRP_GAME_GTA_V]: [
|
||||
|
||||
|
||||
@@ -1121,7 +1121,7 @@ let profanityFilterWords = [
|
||||
"anus",
|
||||
"apeshit",
|
||||
"arsehole",
|
||||
"ass",
|
||||
//"ass",
|
||||
"asshole",
|
||||
"assmunch",
|
||||
"autoerotic",
|
||||
@@ -1697,7 +1697,7 @@ function isGTAIV() {
|
||||
// ===========================================================================
|
||||
|
||||
function areServerElementsSupported() {
|
||||
return supportedFeatures.serverElements[getGame()];
|
||||
return isGameFeatureSupported("serverElements")
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
@@ -1818,7 +1818,7 @@ function getSkinIndexFromName(name, gameId = getGame()) {
|
||||
function getObjectModelIndexFromName(model, gameId = getGame()) {
|
||||
let objects = getGameConfig().objects[gameId];
|
||||
for (let i in objects) {
|
||||
if (toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||
if (toLowerCase(objects[i][1]).indexOf(toLowerCase(model)) != -1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -1831,7 +1831,7 @@ function getObjectModelIndexFromName(model, gameId = getGame()) {
|
||||
function getObjectModelIndexFromModel(model, gameId = getGame()) {
|
||||
let objects = getGameConfig().objects[gameId];
|
||||
for (let i in objects) {
|
||||
if (toLowerCase(objects[i][1]).indexOf(toLowerCase(model)) != -1) {
|
||||
if (toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
@@ -3230,4 +3230,20 @@ function isServerGoingToChangeMapsSoon(hour, minute) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getRandomBoolWithProbability(percentChance) {
|
||||
return (Math.random() < percentChance / 100);
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
|
||||
function getWeatherData(weatherIndex, gameId = getGame()) {
|
||||
if (typeof getGameConfig().weather[gameId][weatherIndex] == "undefined") {
|
||||
return false;
|
||||
}
|
||||
|
||||
return getGameConfig().weather[gameId][weatherIndex];
|
||||
}
|
||||
|
||||
// ===========================================================================
|
||||
Reference in New Issue
Block a user