522 lines
15 KiB
JavaScript
522 lines
15 KiB
JavaScript
// ===========================================================================
|
|
// Asshat-Gaming Roleplay
|
|
// https://github.com/VortrexFTW/gtac_asshat_rp
|
|
// Copyright (c) 2020 Asshat-Gaming (https://asshatgaming.com)
|
|
// ---------------------------------------------------------------------------
|
|
// FILE: config.js
|
|
// DESC: Provides server configuration
|
|
// TYPE: Server (JavaScript)
|
|
// ===========================================================================
|
|
|
|
let serverConfig = {};
|
|
|
|
let globalConfig = {
|
|
accountPasswordHash: "SHA512",
|
|
npcFarProximity: 100,
|
|
npcMediumProximity: 40,
|
|
npcCloseProximity: 12,
|
|
meActionDistance: 20,
|
|
doActionDistance: 15,
|
|
shoutDistance: 30,
|
|
talkDistance: 10,
|
|
whisperDistance: 2,
|
|
megaphoneDistance: 40,
|
|
vehicleLockDistance: 5,
|
|
startWorkingDistance: 5,
|
|
takeJobDistance: 5,
|
|
stopWorkingDistance: 10,
|
|
spawnCarDistance: 5,
|
|
payAndSprayDistance: 5,
|
|
defaultKeybinds: [
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_i), "engine"),
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_k), "lights"),
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_l), "lock"),
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_f), "enter"),
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_g), "passenger"),
|
|
new serverClasses.keyBindData(false, toInteger(SDLK_m), "cursor"),
|
|
],
|
|
exitPropertyDistance: 3.0,
|
|
enterPropertyDistance: 3.0,
|
|
businessDimensionStart: 5000,
|
|
houseDimensionStart: 100,
|
|
buyVehicleDriveAwayDistance: 25.0,
|
|
returnToJobVehicleTime: 30,
|
|
};
|
|
|
|
let gameConfig = {
|
|
blipSprites: [
|
|
false,
|
|
{ // GTA III
|
|
policeStation: 8,
|
|
fireStation: 9,
|
|
hospital: 12,
|
|
ammunation: 20,
|
|
payAndSpray: 18,
|
|
vehicleDealership: 6,
|
|
restaurant: -1,
|
|
fastFood: -1,
|
|
bank: 0,
|
|
fuelStation: -1,
|
|
business: -1,
|
|
house: -1,
|
|
},
|
|
{ // GTA VC
|
|
policeStation: 0,
|
|
fireStation: 0,
|
|
hospital: 0,
|
|
ammunation: 16,
|
|
payAndSpray: 27,
|
|
vehicleDealership: 7,
|
|
restaurant: -1,
|
|
fastFood: -1,
|
|
bank: 0,
|
|
fuelStation: -1,
|
|
business: -1,
|
|
house: -1,
|
|
},
|
|
{ // GTA SA
|
|
policeStation: 30,
|
|
fireStation: 20,
|
|
hospital: 22,
|
|
ammunation: 6,
|
|
payAndSpray: 63,
|
|
vehicleDealership: 55,
|
|
airplaneDealership: 5,
|
|
boatDealership: 9,
|
|
restaurant: 50,
|
|
fastFood: -1,
|
|
clothes: 45,
|
|
pizza: 29,
|
|
chicken: 14,
|
|
burger: 10,
|
|
bank: 52,
|
|
fuelStation: 0,
|
|
business: -1,
|
|
house: 31,
|
|
},
|
|
{ // GTA UG
|
|
policeStation: 8,
|
|
fireStation: 9,
|
|
hospital: 12,
|
|
ammunation: 20,
|
|
payAndSpray: 18,
|
|
vehicleDealership: 6,
|
|
restaurant: -1,
|
|
fastFood: -1,
|
|
bank: 52,
|
|
fuelStation: 0,
|
|
business: -1,
|
|
house: -1,
|
|
},
|
|
{ // GTA IV
|
|
policeStation: 8,
|
|
fireStation: 9,
|
|
hospital: 12,
|
|
ammunation: 20,
|
|
payAndSpray: 18,
|
|
vehicleDealership: 6,
|
|
restaurant: -1,
|
|
fastFood: -1,
|
|
bank: 52,
|
|
fuelStation: 0,
|
|
business: -1,
|
|
house: -1,
|
|
},
|
|
],
|
|
pickupModels: [
|
|
{},
|
|
|
|
{ // GTA 3
|
|
policeStation: 1361,
|
|
fireStation: 1361,
|
|
hospital: 1361,
|
|
ammunation: 1361,
|
|
payAndSpray: 1361,
|
|
vehicleDealership: 1361,
|
|
restaurant: 1361,
|
|
fastFood: 1361,
|
|
bank: 1323,
|
|
fuelStation: 1361,
|
|
business: 1361,
|
|
house: 1361,
|
|
clothes: 1361,
|
|
misc: 1361,
|
|
exit: 1361
|
|
},
|
|
|
|
{ // GTA Vice City
|
|
policeStation: 375,
|
|
fireStation: 406,
|
|
hospital: 366,
|
|
ammunation: 406,
|
|
payAndSpray: 406,
|
|
vehicleDealership: 406,
|
|
restaurant: 406,
|
|
fastFood: 406,
|
|
bank: 408,
|
|
fuelStation: 406,
|
|
business: 406,
|
|
house: 407,
|
|
clothes: 409,
|
|
misc: 406,
|
|
exit: 406,
|
|
},
|
|
|
|
{ // GTA San Andreas
|
|
policeStation: 1247,
|
|
fireStation: 1318,
|
|
hospital: 1240,
|
|
ammunation: 1239,
|
|
payAndSpray: 1239,
|
|
vehicleDealership: 1239,
|
|
restaurant: 1239,
|
|
fastFood: 1239,
|
|
bank: 1274,
|
|
fuelStation: 1239,
|
|
business: 1272,
|
|
house: 1273,
|
|
clothes: 1275,
|
|
misc: 1239,
|
|
exit: 1247,
|
|
}
|
|
],
|
|
pickupTypes: [
|
|
{},
|
|
|
|
{ // GTA 3
|
|
business: 0,
|
|
house: 0,
|
|
bank: 0,
|
|
clothes: 0,
|
|
info: 0,
|
|
},
|
|
|
|
{ // GTA Vice City
|
|
business: 0,
|
|
house: 0,
|
|
bank: 0,
|
|
clothes: 0,
|
|
info: 0,
|
|
},
|
|
|
|
{ // GTA San Andreas
|
|
business: 1,
|
|
house: 1,
|
|
bank: 1,
|
|
clothes: 1,
|
|
info: 1,
|
|
}
|
|
],
|
|
|
|
// THIS IS SCREEN HEIGHT, NOT ACTUAL DOOR POSITION IN THE WORLD
|
|
propertyLabelHeight: [
|
|
false,
|
|
85,
|
|
85,
|
|
85,
|
|
85,
|
|
85,
|
|
85,
|
|
],
|
|
|
|
removedWorldObjects: [
|
|
false,
|
|
[
|
|
new serverClasses.removedWorldObjectData("fraightback04", toVector3(1229.88, -84.8012, 13.4004), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
|
|
new serverClasses.removedWorldObjectData("fraightback03", toVector3(1239.49, -68.0529, 11.6914), 50.0), // Truck trailer in Easy Credit Autos dealership parking lot
|
|
],
|
|
[],
|
|
[],
|
|
[],
|
|
[],
|
|
[],
|
|
],
|
|
|
|
interiorTemplates: [
|
|
false,
|
|
{ // GTA 3
|
|
|
|
},
|
|
{ // GTA VC
|
|
mall: new serverClasses.interiorTemplateData(toVector3(379.62, 1007.00, 19.22), 4),
|
|
malibuClub: new serverClasses.interiorTemplateData(toVector3(489.83, -76.49, 11.48), 17),
|
|
policeStation: new serverClasses.interiorTemplateData(toVector3(396.38, -472.96, 12.34), 12),
|
|
apartment: new serverClasses.interiorTemplateData(toVector3(26.67, -1328.89, 13.00), 11),
|
|
hotel: new serverClasses.interiorTemplateData(toVector3(228.53, -1277.12, 12.07), 1),
|
|
bikerBar: new serverClasses.interiorTemplateData(toVector3(-597.41, 651.84, 11.30), 11),
|
|
mansion: new serverClasses.interiorTemplateData(toVector3(-379.14, -551.65, 19.32), 2),
|
|
ammunationRange: new serverClasses.interiorTemplateData(toVector3(-667.79, 1217.51, 11.10), 10),
|
|
bank: new serverClasses.interiorTemplateData(toVector3(-894.52, -341.16, 13.45), 3),
|
|
stripClub: new serverClasses.interiorTemplateData(toVector3(97.53, -1472.06, 10.43), 5),
|
|
office: new serverClasses.interiorTemplateData(toVector3(120.82, -827.98, 10.62), 6),
|
|
arena: new serverClasses.interiorTemplateData(toVector3(-1080.49, 1331.16, 13.91), 15),
|
|
ghettoShack: new serverClasses.interiorTemplateData(toVector3(-962.72, 146.11, 9.395), 12),
|
|
},
|
|
{ // GTA SA
|
|
|
|
}
|
|
],
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function initConfigScript() {
|
|
console.log("[Asshat.Config]: Initializing config script ...");
|
|
serverConfig = loadServerConfigFromGameAndPort(server.game, server.port);
|
|
applyConfigToServer(serverConfig);
|
|
console.log("[Asshat.Config]: Config script initialized!");
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function loadServerConfigFromGameAndPort(gameId, port) {
|
|
let dbConnection = connectToDatabase();
|
|
if(dbConnection) {
|
|
let dbQueryString = `SELECT * FROM svr_main WHERE svr_game = ${gameId} AND svr_port = ${port} LIMIT 1;`;
|
|
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
|
if(dbQuery) {
|
|
if(dbQuery.numRows > 0) {
|
|
let dbAssoc = fetchQueryAssoc(dbQuery);
|
|
let tempServerConfigData = new serverClasses.serverConfigData(dbAssoc);
|
|
freeDatabaseQuery(dbQuery);
|
|
return tempServerConfigData;
|
|
}
|
|
}
|
|
disconnectFromDatabase(dbConnection);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function loadServerConfigFromId(tempServerId) {
|
|
let dbConnection = connectToDatabase();
|
|
if(dbConnection) {
|
|
let dbQueryString = `SELECT * FROM svr_main WHERE svr_id = ${tempServerId} LIMIT 1;`;
|
|
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
|
if(dbQuery) {
|
|
if(dbQuery.numRows > 0) {
|
|
let dbAssoc = fetchQueryAssoc(dbQuery);
|
|
let tempServerConfigData = serverClasses.serverConfigData(dbAssoc);
|
|
freeDatabaseQuery(dbQuery);
|
|
return tempServerConfigData;
|
|
}
|
|
}
|
|
disconnectFromDatabase(dbConnection);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function applyConfigToServer(tempServerConfig) {
|
|
server.name = tempServerConfig.name;
|
|
server.password = tempServerConfig.password;
|
|
gta.time.hour = tempServerConfig.hour;
|
|
gta.time.minute = tempServerConfig.minute;
|
|
gta.forceWeather(tempServerConfig.weather);
|
|
|
|
updateServerRules();
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function saveServerConfigToDatabase(serverConfigData) {
|
|
console.log(`[Asshat.Config]: Saving server ${serverConfigData.databaseId} configuration to database ...`);
|
|
let dbConnection = connectToDatabase();
|
|
if(dbConnection) {
|
|
let safeServerName = escapeDatabaseString(dbConnection, serverConfigData.name);
|
|
let safePassword = escapeDatabaseString(dbConnection, serverConfigData.password);
|
|
|
|
let dbQueryString = `UPDATE svr_main SET svr_logo=${boolToInt(serverConfigData.showLogo)}, svr_gui=${boolToInt(getServerConfig().useGUI)}, svr_password='${safePassword}', svr_name='${safeServerName}', svr_start_time_hour=${serverConfigData.hour}, svr_start_time_min=${serverConfigData.minute}, svr_start_weather=${serverConfigData.weather}, svr_start_snow_falling=${boolToInt(serverConfigData.fallingSnow)}, svr_start_snow_ground=${boolToInt(serverConfigData.groundSnow)}, svr_newchar_pos_x=${serverConfigData.newCharacter.spawnPosition.x}, svr_newchar_pos_y=${serverConfigData.newCharacter.spawnPosition.y}, svr_newchar_pos_z=${serverConfigData.newCharacter.spawnPosition.z}, svr_newchar_rot_z=${serverConfigData.newCharacter.spawnHeading}, svr_newchar_money=${serverConfigData.newCharacter.money}, svr_newchar_skin=${serverConfigData.newCharacter.skin}, svr_gui_col1_r=${serverConfigData.guiColour[0]}, svr_gui_col1_g=${serverConfigData.guiColour[1]}, svr_gui_col1_b=${serverConfigData.guiColour[2]} WHERE svr_id = ${serverConfigData.databaseId}`;
|
|
let dbQuery = queryDatabase(dbConnection, dbQueryString);
|
|
disconnectFromDatabase(dbConnection);
|
|
}
|
|
console.log(`[Asshat.Config]: Server ${serverConfigData.databaseId} configuration saved to database!`);
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function getServerConfig() {
|
|
return serverConfig;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function getGameConfig() {
|
|
return gameConfig;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function getGlobalConfig() {
|
|
return globalConfig;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function getServerId() {
|
|
return getServerConfig().databaseId;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
function setTimeCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
messagePlayerError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesPlayerHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messagePlayerError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split();
|
|
let hour = toInteger(splitParams[0]) || 0;
|
|
let minute = toInteger(splitParams[1]) || 0;
|
|
|
|
if(hour > 23 || hour < 0) {
|
|
messagePlayerError(client, "The hour must be between 0 and 23!");
|
|
return false;
|
|
}
|
|
|
|
if(minute > 59 || minute < 0) {
|
|
messagePlayerError(client, "The minute must be between 0 and 59!");
|
|
return false;
|
|
}
|
|
|
|
gta.time.hour = hour;
|
|
gta.time.minute = minute;
|
|
|
|
messageAdminAction(`${client.name} set the time to ${makeReadableTime(hour, minute)}`);
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function setWeatherCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
messagePlayerError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesPlayerHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messagePlayerError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split();
|
|
let weatherId = getWeatherFromParams(splitParams[0]);
|
|
|
|
if(!weatherId) {
|
|
messagePlayerError(client, `That weather ID or name is invalid!`);
|
|
return false;
|
|
}
|
|
|
|
gta.forceWeather(toInteger(weatherId));
|
|
|
|
messageAdminAction(`${client.name} set the weather to [#AAAAAA]${weatherNames[getServerGame()][toInteger(weatherId)]}`);
|
|
updateServerRules();
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function setSnowingCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
messagePlayerError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesPlayerHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messagePlayerError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
if(areParamsEmpty(params)) {
|
|
messagePlayerSyntax(client, getCommandSyntaxText(command));
|
|
return false;
|
|
}
|
|
|
|
let splitParams = params.split();
|
|
let fallingSnow = Number(splitParams[0]) || !getServerConfig().fallingSnow;
|
|
let groundSnow = Number(splitParams[1]) || !getServerConfig().groundSnow;
|
|
|
|
fallingSnow = intToBool(toInteger(fallingSnow));
|
|
groundSnow = intToBool(toInteger(groundSnow));
|
|
|
|
getServerConfig().fallingSnow = fallingSnow;
|
|
getServerConfig().groundSnow = groundSnow;
|
|
|
|
triggerNetworkEvent("ag.snow", null, fallingSnow, groundSnow);
|
|
|
|
messageAdminAction(`${client.name} turned falling snow ${getBoolRedGreenInlineColour(fallingSnow)}${getOnOffFromBool(fallingSnow)} [#FFFFFF]and ground snow ${getBoolRedGreenInlineColour(groundSnow)}${getOnOffFromBool(groundSnow)}`);
|
|
updateServerRules();
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function toggleServerLogoCommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
messagePlayerError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesPlayerHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messagePlayerError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
getServerConfig().useLogo = !getServerConfig().useLogo;
|
|
|
|
triggerNetworkEvent("ag.logo", null, intToBool(getServerConfig().useLogo));
|
|
|
|
messageAdminAction(`${client.name} turned the server logo image ${getBoolRedGreenInlineColour(getServerConfig().useLogo)}${toUpperCase(getOnOffFromBool(getServerConfig().useLogo))}`);
|
|
updateServerRules();
|
|
return true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function toggleServerGUICommand(command, params, client) {
|
|
if(getCommand(command).requireLogin) {
|
|
if(!isPlayerLoggedIn(client)) {
|
|
messagePlayerError(client, "You must be logged in to use this command!");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if(!doesPlayerHaveStaffPermission(client, getCommandRequiredPermissions(command))) {
|
|
messagePlayerError(client, "You do not have permission to use this command!");
|
|
return false;
|
|
}
|
|
|
|
getServerConfig().useGUI = !getServerConfig().useGUI;
|
|
|
|
messageAdminAction(`${client.name} turned GUI ${toLowerCase(getOnOffFromBool(getServerConfig().useGUI))} for this server`);
|
|
updateServerRules();
|
|
return true;
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|