Files
GTA4RP/scripts/server/core.js
2020-12-07 10:30:16 -06:00

1133 lines
22 KiB
JavaScript

// ===========================================================================
// Asshat-Gaming Roleplay
// https://github.com/VortrexFTW/gtac_asshat_rp
// Copyright (c) 2020 Asshat-Gaming (https://asshatgaming.com)
// ---------------------------------------------------------------------------
// FILE: core.js
// DESC: Provides core data structures, function, and operations
// TYPE: Server (JavaScript)
// ===========================================================================
let serverId = 0;
let scriptVersion = "1.0";
let serverStartTime = new Date().getTime();
// ----------------------------------------------------------------------------
let serverData = {
saveDataIntervalTimer: false,
staffFlagKeys: [
"none",
"basicModeration",
"manageHouses",
"manageVehicles",
"manageBusinesses",
"manageFactions",
"manageClans",
"manageServer",
"manageAdmins",
"developer"
],
moderationFlagKeys: [
"none",
"muted",
"frozen",
"hackerBox",
"jobBanned",
"ammuBanned",
"policeBanned",
"fireBanned",
"gunBanned",
],
factionFlagKeys: [
"none",
"police",
"medical",
"fire",
"government"
],
clanFlagKeys: [
"none",
"illegal",
"legal",
"mafia",
"streetGang",
"weapons",
"drugs",
"humanTrafficking",
"vigilante",
"hitContracts"
],
clanPermissionFlagKeys: [
"none",
"inviteMember",
"removeMember",
"memberRank",
"memberFlags",
"memberTag",
"memberTitle",
"rankFlags",
"rankTag",
"rankTitle",
"clanTag",
"clanName",
"owner"
],
accountSettingsFlagKeys: [
"None",
"useWhiteList",
"useBlackList",
"twoStepAuth",
"authAttemptAlert",
"alertWithGUI",
"errorWithGUI",
"askWithGUI",
],
subAccountSettingsFlagKeys: [],
staffFlags: {},
moderationFlags: {},
factionFlags: {},
clanFlags: {},
accountSettingsFlags: {},
subAccountSettingsFlags: {},
vehicles: [],
clients: new Array(128),
businesses: [],
houses: [],
families: [],
factions: [],
translation: {
translationBaseURL: "http://api.mymemory.translated.net/get?de=example@example.com&q={0}&langpair={1}|{2}",
languages: [
["Abkhazian", "AB"],
["Afar", "AA"],
["Afrikaans", "AF"],
["Albanian", "SQ"],
["Amharic", "AM"],
["Arabic", "AR"],
["Armenian", "HY"],
["Assamese", "AS"],
["Aymara", "AY"],
["Azerbaijani", "AZ"],
["Bashkir", "BA"],
["Basque", "EU"],
["Bengali, Bangla", "BN"],
["Bhutani", "DZ"],
["Bihari", "BH"],
["Bislama", "BI"],
["Breton", "BR"],
["Bulgarian", "BG"],
["Burmese", "MY"],
["Byelorussian", "BE"],
["Cambodian", "KM"],
["Catalan", "CA"],
["Chinese", "ZH"],
["Corsican", "CO"],
["Croatian", "HR"],
["Czech", "CS"],
["Danish", "DA"],
["Dutch", "NL"],
["English", "EN"],
["Esperanto", "EO"],
["Estonian", "ET"],
["Faeroese", "FO"],
["Fiji", "FJ"],
["Finnish", "FI"],
["French", "FR"],
["Frisian", "FY"],
["Gaelic (Scots Gaelic)", "GD"],
["Galician", "GL"],
["Georgian", "KA"],
["German", "DE"],
["Greek", "EL"],
["Greenlandic", "KL"],
["Guarani", "GN"],
["Gujarati", "GU"],
["Hausa", "HA"],
["Hebrew", "IW"],
["Hindi", "HI"],
["Hungarian", "HU"],
["Icelandic", "IS"],
["Indonesian", "IN"],
["Interlingua", "IA"],
["Interlingue", "IE"],
["Inupiak", "IK"],
["Irish", "GA"],
["Italian", "IT"],
["Japanese", "JA"],
["Javanese", "JW"],
["Kannada", "KN"],
["Kashmiri", "KS"],
["Kazakh", "KK"],
["Kinyarwanda", "RW"],
["Kirghiz", "KY"],
["Kirundi", "RN"],
["Korean", "KO"],
["Kurdish", "KU"],
["Laothian", "LO"],
["Latin", "LA"],
["Latvian, Lettish", "LV"],
["Lingala", "LN"],
["Lithuanian", "LT"],
["Macedonian", "MK"],
["Malagasy", "MG"],
["Malay", "MS"],
["Malayalam", "ML"],
["Maltese", "MT"],
["Maori", "MI"],
["Marathi", "MR"],
["Moldavian", "MO"],
["Mongolian", "MN"],
["Nauru", "NA"],
["Nepali", "NE"],
["Norwegian", "NO"],
["Occitan", "OC"],
["Oriya", "OR"],
["Oromo, Afan", "OM"],
["Pashto, Pushto", "PS"],
["Persian", "FA"],
["Polish", "PL"],
["Portuguese", "PT"],
["Punjabi", "PA"],
["Quechua", "QU"],
["Rhaeto-Romance", "RM"],
["Romanian", "RO"],
["Russian", "RU"],
["Samoan", "SM"],
["Sangro", "SG"],
["Sanskrit", "SA"],
["Serbian", "SR"],
["Serbo-Croatian", "SH"],
["Sesotho", "ST"],
["Setswana", "TN"],
["Shona", "SN"],
["Sindhi", "SD"],
["Singhalese", "SI"],
["Siswati", "SS"],
["Slovak", "SK"],
["Slovenian", "SL"],
["Somali", "SO"],
["Spanish", "ES"],
["Sudanese", "SU"],
["Swahili", "SW"],
["Swedish", "SV"],
["Tagalog", "TL"],
["Tajik", "TG"],
["Tamil", "TA"],
["Tatar", "TT"],
["Tegulu", "TE"],
["Thai", "TH"],
["Tibetan", "BO"],
["Tigrinya", "TI"],
["Tonga", "TO"],
["Tsonga", "TS"],
["Turkish", "TR"],
["Turkmen", "TK"],
["Twi", "TW"],
["Ukrainian", "UK"],
["Urdu", "UR"],
["Uzbek", "UZ"],
["Vietnamese", "VI"],
["Volapuk", "VO"],
["Welsh", "CY"],
["Wolof", "WO"],
["Xhosa", "XH"],
["Yiddish", "JI"],
["Yoruba", "YO"],
["Zulu", "ZU"]
],
cache: null,
},
commands: {},
policeStations: [
false,
[ // GTA 3
{
position: new Vec3(1143.875, -675.1875, 14.97),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: new Vec3(340.25, -1123.375, 25.98),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: new Vec3(-1253.0, -138.1875, 58.75),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
{
position: new Vec3(399.77, -468.90, 11.73),
heading: 0.0,
blip: false,
name: "Washington Beach",
},
{
position: new Vec3(508.96, 512.07, 12.10),
heading: 0.0,
blip: false,
name: "Vice Point",
},
{
position: new Vec3(-657.43, 762.31, 11.59),
heading: 0.0,
blip: false,
name: "Downtown",
},
{
position: new Vec3(-885.08, -470.44, 13.11),
heading: 0.0,
blip: false,
name: "Little Havana",
},
],
[ // GTA SA
{
position: new Vec3(1545.53, -1675.64, 13.561),
heading: -1.575,
blip: false,
name: "Los Santos",
},
],
[ // GTA UG
],
[ // GTA IV
{
position: new Vec3(894.99, -357.39, 18.185),
heading: 2.923,
blip: false,
name: "Broker",
},
{
position: new Vec3(435.40, 1592.29, 17.353),
heading: 3.087,
blip: false,
name: "South Bohan",
},
{
position: new Vec3(974.93, 1870.45, 23.073),
heading: -1.621,
blip: false,
name: "Northern Gardens",
},
{
position: new Vec3(1233.25, -89.13, 28.034),
heading: 1.568,
blip: false,
name: "South Slopes",
},
{
position: new Vec3(50.12, 679.88, 15.316),
heading: 1.569,
blip: false,
name: "Middle Park East",
},
{
position: new Vec3(85.21, 1189.82, 14.755),
heading: 3.127,
blip: false,
name: "East Holland",
},
{
position: new Vec3(2170.87, 448.87, 6.085),
heading: 1.501,
blip: false,
name: "Francis International Airport",
},
{
position: new Vec3(213.12, -211.70, 10.752),
heading: 0.200,
blip: false,
name: "Chinatown",
},
{
position: new Vec3(-1714.95, 276.31, 22.134),
heading: 1.127,
blip: false,
name: "Acter",
},
{
position: new Vec3(-1220.73, -231.53, 3.024),
heading: 2.210,
blip: false,
name: "Port Tudor",
},
{
position: new Vec3(-927.66, 1263.63, 24.587),
heading: -0.913,
blip: false,
name: "Leftwood",
},
]
],
fireStations: [
false,
[ // GTA 3
{
position: new Vec3(1103.70, -52.45, 7.49),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: new Vec3(-78.48, -436.80, 16.17),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: new Vec3(-1202.10, -14.67, 53.20),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
{
position: new Vec3(953.13, 95.90, 35.004),
heading: 1.595,
blip: false,
name: "Broker",
},
{
position: new Vec3(-271.02, 1542.15, 20.420),
heading: -1.160,
blip: false,
name: "Northwood",
},
{
position: new Vec3(1120.47, 1712.36, 10.534),
heading: -0.682,
blip: false,
name: "Northern Gardens",
},
{
position: new Vec3(2364.87, 166.83, 5.813),
heading: 0.156,
blip: false,
name: "Francis International Airport",
},
{
position: new Vec3(295.40, -336.88, 4.963),
heading: 2.887,
blip: false,
name: "Chinatown",
},
]
],
hospitals: [
false,
[ // GTA 3
{
position: new Vec3(1144.25, -596.875, 14.97),
heading: 1.5,
blip: false,
name: "Portland",
},
{
position: new Vec3(183.5, -17.75, 16.21),
heading: 3.14,
blip: false,
name: "Staunton Island",
},
{
position: new Vec3(-1259.5, -44.5, 58.89),
heading: 1.5,
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
{
position: new Vec3(1199.59, 196.78, 33.554),
heading: 1.633,
blip: false,
name: "Schottler",
},
{
position: new Vec3(980.71, 1831.61, 23.898),
heading: -0.049,
blip: false,
name: "Northern Gardens",
},
{
position: new Vec3(-1317.27, 1277.20, 22.370),
heading: 2.246,
blip: false,
name: "Leftwood",
},
{
position: new Vec3(-1538.43, 344.58, 20.943),
heading: -0.156,
blip: false,
name: "Acter",
},
]
],
payAndSprays: [
false,
[ // GTA 3
{
position: new Vec3(925.4, -360.3, 10.83),
blip: false,
name: "Portland",
},
{
position: new Vec3(381.8, -493.8, 25.95),
blip: false,
name: "Staunton Island",
},
{
position: new Vec3(-1142.4, 35.01, 58.61),
blip: false,
name: "Shoreside Vale",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
ammunations: [
false,
[ // GTA 3
{
position: new Vec3(1068.3, -400.9, 15.24),
blip: false,
name: "Portland",
},
{
position: new Vec3(348.2, -717.9, 26.43),
blip: false,
name: "Staunton Island",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
fuelStations: [
false,
[ // GTA 3
{
position: new Vec3(1161.9, -76.73, 7.27),
blip: false,
name: "Portland",
},
],
[ // GTA VC
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
],
jobs: [
false,
[ // GTA 3
{
name: "Police Officer",
position: new Vec3(1143.87, -675.18, 14.97),
pickup: false,
pickupModel: 1383,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
weapons: [[1,1], [2, 150], [4,20]],
equipment: [
{ // Standard police officer equipment
requiredRank: 0,
weapons: [
[1,1], // Baseball Bat (Nitestick alternative)
[2,150], // Pistol
[4,20], // Shotgun
]
},
{ // Detective Equipment
requiredRank: 1,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[34,100], // Camera
]
},
{ // Supervisor Equipment
requiredRank: 3,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
]
},
{ // SWAT Equipment
requiredRank: 2,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
[26,300], // M4
]
},
]
},
{
name: "Paramedic",
position: new Vec3(1144.25, -596.87, 14.97),
pickup: false,
pickupModel: 1362,
blip: false,
jobType: AG_JOB_MEDICAL,
jobSkin: 5,
jobColour: serverConfig.colour.byName.medicPink,
enabled: true
},
{
name: "Firefighter",
position: new Vec3(1103.70, -52.45, 7.49),
pickup: false,
pickupModel: 1364,
blip: false,
jobType: AG_JOB_FIRE,
jobSkin: 6,
jobColour: serverConfig.colour.byName.firefighterRed,
enabled: true
},
{
name: "Trash Collector",
position: new Vec3(1121.8, 27.8, 1.99),
pickup: false,
pickupModel: 1351,
blip: false,
jobType: AG_JOB_GARBAGE,
jobSkin: 53,
jobColour: 2,
enabled: true
},
{
name: "Trash Collector",
position: new Vec3(-66.83, -932.2, 16.47),
pickup: false,
pickupModel: 1351,
blip: false,
jobType: AG_JOB_GARBAGE,
jobSkin: 53,
jobColour: 2,
enabled: true
},
{
name: "Taxi Driver",
position: new Vec3(1229.2, -740.1, 15.17),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_TAXI,
jobSkin: 8,
jobColour: 3,
enabled: true
},
{
name: "Bus Driver",
position: new Vec3(1310.20, -1016.30, 14.88),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_BUS,
jobSkin: 121,
jobColour: 3,
enabled: true
},
{
name: "Police Officer",
position: new Vec3(340.25, -1123.37, 25.98),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
weapons: [[1,1], [2, 150], [4,20]],
},
{
name: "Police Officer",
position: new Vec3(-1253.0, -138.18, 58.75),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
weapons: [[1,1], [2, 150], [4,20]],
},
{
name: "Paramedic",
position: new Vec3(183.5, -17.75, 16.21),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_MEDICAL,
jobSkin: 5,
jobColour: serverConfig.colour.byName.medicPink,
enabled: true
},
{
name: "Paramedic",
position: new Vec3(-1259.5, -44.5, 58.89),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_MEDICAL,
jobSkin: 5,
jobColour: serverConfig.colour.byName.medicPink,
enabled: true
} ,
{
name: "Firefighter",
position: new Vec3(-78.48, -436.80, 16.17),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_FIRE,
jobSkin: 6,
jobColour: serverConfig.colour.byName.firefighterRed,
enabled: true
},
{
name: "Firefighter",
position: new Vec3(-1202.10, -14.67, 53.20),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_FIRE,
jobSkin: 6,
jobColour: serverConfig.colour.byName.firefighterRed,
enabled: true
},
{
name: "Taxi Driver",
position: new Vec3(1229.2, -740.1, 15.17),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_TAXI,
jobSkin: 8,
jobColour: 3,
enabled: true
},
{
name: "Bus Driver",
position: new Vec3(-57.1661, -334.266, 16.9324),
pickup: false,
pickupModel: 1361,
blip: false,
jobType: AG_JOB_BUS,
jobSkin: 121,
jobColour: 3,
enabled: true
},
],
[ // GTA VC
{
name: "Police Officer",
position: new Vec3(399.77, -468.90, 11.73),
pickup: false,
pickupModel: 375,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
equipment: [
{ // Standard police officer equipment
requiredRank: 0,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
]
},
{ // Detective Equipment
requiredRank: 1,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[34,100], // Camera
]
},
{ // Supervisor Equipment
requiredRank: 3,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
]
},
{ // SWAT Equipment
requiredRank: 2,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
[26,300], // M4
]
},
]
},
{
name: "Police Officer",
position: new Vec3(508.96, 512.07, 12.10),
pickup: false,
pickupModel: 375,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
equipment: [
{ // Standard police officer equipment
requiredRank: 0,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
]
},
{ // Detective Equipment
requiredRank: 1,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[34,100], // Camera
]
},
{ // Supervisor Equipment
requiredRank: 3,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
]
},
{ // SWAT Equipment
requiredRank: 2,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
[26,300], // M4
]
},
]
},
{
name: "Police Officer",
position: new Vec3(-657.43, 762.31, 11.59),
pickup: false,
pickupModel: 375,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
equipment: [
{ // Standard police officer equipment
requiredRank: 0,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
]
},
{ // Detective Equipment
requiredRank: 1,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[34,100], // Camera
]
},
{ // Supervisor Equipment
requiredRank: 3,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
]
},
{ // SWAT Equipment
requiredRank: 2,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
[26,300], // M4
]
},
]
},
{
name: "Police Officer",
position: new Vec3(-885.08, -470.44, 13.11),
pickup: false,
pickupModel: 375,
blip: false,
jobType: AG_JOB_POLICE,
jobSkin: 1,
jobColour: serverConfig.colour.byName.policeBlue,
enabled: true,
equipment: [
{ // Standard police officer equipment
requiredRank: 0,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
]
},
{ // Detective Equipment
requiredRank: 1,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[34,100], // Camera
]
},
{ // Supervisor Equipment
requiredRank: 3,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
]
},
{ // SWAT Equipment
requiredRank: 2,
weapons: [
[4,1], // Nitestick
[17,150], // Colt 45
[19,20], // Shotgun
[25,300], // MP5
[26,300], // M4
]
},
]
},
],
[ // GTA SA
],
[ // GTA UG
],
[ // GTA IV
]
//{ name: "Postal Worker" , position: Vector ( ) , pickup: false, pickupModel: 1361, blip: false, jobType: 7 },
//{ name: "Delivery Worker" , position: Vector ( ) , pickup: false, pickupModel: 1361, blip: false, jobType: 8 },
//{ name: "Mechanic" , position: Vector ( ) , pickup: false, pickupModel: 1361, blip: false, jobType: 9 },
],
policeJobSkins: [
false,
[ // GTA III
1, 92,
],
[ // GTA VC
1,
],
[ // GTA SA
280, 281, 282, 283, 284, 285, 28, 288,
],
[ // GTA UG
],
[ // GTA IV
]
],
medicalJobSkins: [
false,
[ // GTA III
5, 72, 73
],
[ // GTA VC
5,
],
[ // GTA SA
274, 275, 276
],
[ // GTA UG
],
[ // GTA IV
]
],
fireJobSkins: [
false,
[ // GTA III
6
],
[ // GTA VC
6,
],
[ // GTA SA
277, 278, 279
],
[ // GTA UG
],
[ // GTA IV
]
],
taxiJobSkins: [
false,
[ // GTA III
8,
],
[ // GTA VC
8,
],
[ // GTA SA
7, 142
],
[ // GTA UG
],
[ // GTA IV
]
],
busJobSkins: [
false,
[ // GTA III
8,
],
[ // GTA VC
8,
],
[ // GTA SA
7, 142
],
[ // GTA UG
],
[ // GTA IV
]
],
garbageJobSkins: [
false,
[ // GTA III
53, 54,
],
[ // GTA VC
53, 54,
],
[ // GTA SA
16,
],
[ // GTA UG
],
[ // GTA IV
]
],
};
// ----------------------------------------------------------------------------
function initServerData() {
// Pre-allocate translation cache language slots
global.serverData.translation.cache = new Array(global.serverData.translation.languages.length);
let translationCacheFrom = new Array(global.serverData.translation.languages.length);
translationCacheFrom.fill([]);
global.serverData.translation.cache.fill(translationCacheFrom);
}
// ----------------------------------------------------------------------------
function getServerId() {
return serverId;
}
// ----------------------------------------------------------------------------
function getServerGame() {
return server.game;
}
// ----------------------------------------------------------------------------