26 Commits

Author SHA1 Message Date
Vortrex
3740ce97f9 Merge branch 'nightly' into patch-1 2023-03-08 23:43:48 -06:00
Vortrex
8cae128353 Remove old walkie talkie stuff (moved to radio) 2023-03-08 23:42:38 -06:00
Vortrex
8eae93210a Radio distance 2023-03-08 23:42:06 -06:00
Vortrex
5ab29e84e0 Radio data 2023-03-08 23:41:57 -06:00
Vortrex
c71e16c873 Radio command 2023-03-08 23:41:42 -06:00
Vortrex
0ba6bb770e New locale strings 2023-03-08 23:40:37 -06:00
Vortrex
244b1e94e7 Vehicle transmit radio distance (for next to car) 2023-03-08 22:42:42 -06:00
Vortrex
86bb681ba0 Vehicle transmit radio util 2023-03-08 22:42:24 -06:00
Vortrex
4999ab3ac5 Check job/clan rank, remove if fucked 2023-03-08 22:42:07 -06:00
Vortrex
bd4681aa9b Unable to call player message 2023-03-08 22:41:40 -06:00
Vortrex
259eb3346c Workaround for player pos in veh (Mafia 1) 2023-03-08 22:41:24 -06:00
Vortrex
6f0937360f Add job uniform cmds + WL/BL utils 2023-03-08 22:26:25 -06:00
Vortrex
4581de603b Add search cmd handler 2023-03-08 22:24:50 -06:00
Vortrex
2d66d08113 Send house to player test 2023-03-08 22:24:32 -06:00
Vortrex
573201834d Some dev utils stuff 2023-03-08 22:24:13 -06:00
Vortrex
d7b4ce86e5 Add job uniform name/rank + search cmds 2023-03-08 22:23:55 -06:00
Vortrex
6af7339ac7 Check if player data is false when kicking all 2023-03-08 22:23:33 -06:00
Vortrex
3b28340c72 Check for payphone sounds before trying to use 2023-03-08 22:22:56 -06:00
Vortrex
2a56241c60 Init house script 2023-03-08 22:22:41 -06:00
Vortrex
85388f0cb8 Improve client script load a bit 2023-03-08 22:22:25 -06:00
Vortrex
fd02988d5d Move local money 2023-03-08 22:21:26 -06:00
Vortrex
8728d1a324 New locale strings 2023-03-08 22:21:04 -06:00
Vortrex
17e6bef100 Who/when added business 2023-03-08 12:10:06 -06:00
Vortrex
695e729c41 GTA SA won't load sounds for some reason 2023-03-08 12:07:33 -06:00
Vortrex
d578b1a083 House stuff 2023-03-08 12:07:01 -06:00
Grzelciu
bb5731dd06 Update for polish.json
Correcting syntax errors, and translating new lines of code.
2023-03-08 17:42:17 +01:00
36 changed files with 875 additions and 324 deletions

View File

@@ -782,5 +782,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -780,5 +780,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -778,5 +778,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -789,5 +789,13 @@
"JobInviteAlreadyHasJob": "That player already has a job!", "JobInviteAlreadyHasJob": "That player already has a job!",
"JobInviteRequest": "{1} invited you to the {2} job.", "JobInviteRequest": "{1} invited you to the {2} job.",
"CantAddJobMembers": "You can't invite new members to the job!", "CantAddJobMembers": "You can't invite new members to the job!",
"CantRemoveJobMembers": "You can't remove members from the job!" "CantRemoveJobMembers": "You can't remove members from the job!",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -777,5 +777,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -778,5 +778,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -777,5 +777,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -778,5 +778,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -780,5 +780,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -779,5 +779,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -779,5 +779,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -1,8 +1,8 @@
{ {
"TranslationProvidedBy": "Suprise444", "TranslationProvidedBy": "Suprise444, Grzelciu",
"LocaleEnglishName": "Polish", "LocaleEnglishName": "Polish",
"LocaleNativeName": "Polski", "LocaleNativeName": "Polski",
"LocaleOffer": "Ten serwer jest dostępny w języku Polskim. Użyj {1} aby go użyć.", "LocaleOffer": "Ten serwer jest dostępny również w języku Polskim. Użyj {1} z niego skorzystać.",
"LocaleChanged1": "Twój język jest ustawiony na {1}", "LocaleChanged1": "Twój język jest ustawiony na {1}",
"LocaleChanged2": "Serwer będzie teraz pokazywał wiadomości w języku {1}", "LocaleChanged2": "Serwer będzie teraz pokazywał wiadomości w języku {1}",
"LocaleChangedNote": "To nie zmienia wiadomości od innych graczy", "LocaleChangedNote": "To nie zmienia wiadomości od innych graczy",
@@ -93,7 +93,7 @@
"HeaderKeyBindsList": "Lista przypisań klawiszy", "HeaderKeyBindsList": "Lista przypisań klawiszy",
"RadioVolumeChanged": "{1} Zmieniłeś głośność swojego radia na {2}%", "RadioVolumeChanged": "{1} Zmieniłeś głośność swojego radia na {2}%",
"VolumeLevelNotNumber": "Poziom głośności musi być liczbą", "VolumeLevelNotNumber": "Poziom głośności musi być liczbą",
"RadioStationLocationInvalid": "Musisz być w aucie, domu, biznesie lub mieć osobite urządzenie by zmienić stacje radiową!", "RadioStationLocationInvalid": "Musisz być w aucie, domu, biznesie lub mieć osobiste urządzenie by zmienić stacje radiową!",
"ActionBusinessRadioStationChange": "zmienia biznesową stacje radiową na {1} ({2})", "ActionBusinessRadioStationChange": "zmienia biznesową stacje radiową na {1} ({2})",
"ActionHouseRadioStationChange": "zmienia domową stacje radiową na {1} ({2})", "ActionHouseRadioStationChange": "zmienia domową stacje radiową na {1} ({2})",
"ActionVehicleRadioStationChange": "zmienia samochodową stacje radiową na {1} ({2})", "ActionVehicleRadioStationChange": "zmienia samochodową stacje radiową na {1} ({2})",
@@ -121,7 +121,7 @@
"CantGiveItemInSkinChange": "Nie możesz dać przedmiotu podczas zmieniania swojego wizerunku", "CantGiveItemInSkinChange": "Nie możesz dać przedmiotu podczas zmieniania swojego wizerunku",
"CantTakeItemInSkinChange": "Nie możesz wziąć przedmiotu podczas zmieniania swojego wizerunku", "CantTakeItemInSkinChange": "Nie możesz wziąć przedmiotu podczas zmieniania swojego wizerunku",
"ItemUnequippableNoAmmo": "{1} w slocie {2} nie ma amunicji i nie może zostać użyty!", "ItemUnequippableNoAmmo": "{1} w slocie {2} nie ma amunicji i nie może zostać użyty!",
"NoSpaceSelfInventory": "Nie masz już miesca w ekwipunku", "NoSpaceSelfInventory": "Nie masz już miejsca w ekwipunku",
"Business": "biznes", "Business": "biznes",
"House": "mieszkanie", "House": "mieszkanie",
"Clan": "klan", "Clan": "klan",
@@ -367,15 +367,15 @@
"ADDED-23MAR2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations", "ADDED-23MAR2022": "DO NOT TRANSLATE. This string is just a comment to separate newly added translations",
"CarCommandHelp": "Możesz kupić pojazd poprzez odwiedzenie salonu samochodowego. Użyj {1} aby uzyskać więcej informacji.", "CarCommandHelp": "Możesz kupić pojazd poprzez odwiedzenie salonu samochodowego. Użyj {1} aby uzyskać więcej informacji.",
"SkinCommandHelp": "Możesz zmienić swój wygląd poprzez odwiedzenie sklepu odzieżowego. Użyj {1} aby uzyskać więcej informacji.", "SkinCommandHelp": "Możesz zmienić swój wygląd poprzez odwiedzenie sklepu odzieżowego. Użyj {1} aby uzyskać więcej informacji.",
"BusinessVehiclesRespawned": "Wszystkie pojazdy biznesowe zostały zrespione przez admina!", "BusinessVehiclesRespawned": "Wszystkie pojazdy biznesowe zostały zrespawnowane przez admina!",
"JobVehiclesRespawned": "Wszystkie pojazdy firmowe zostały zrespione przez admina!", "JobVehiclesRespawned": "Wszystkie pojazdy firmowe zostały zrespawnowane przez admina!",
"PlayerVehiclesRespawned": "Wszystkie pojazdy gracza zostały zrespione przez admina!", "PlayerVehiclesRespawned": "Wszystkie pojazdy gracza zostały zrespawnowane przez admina!",
"ClanVehiclesRespawned": "Wszystkie pojazdy klanowe zostały zrespione przez admina!", "ClanVehiclesRespawned": "Wszystkie pojazdy klanowe zostały zrespawnowane przez admina!",
"PublicVehiclesRespawned": "Wszystkie pojazdy publiczne zostały zrespione przez admina!", "PublicVehiclesRespawned": "Wszystkie pojazdy publiczne zostały zrespawnowane przez admina!",
"EmptyVehiclesRespawned": "Wszystkie puste pojazdy zostały zrespione przez admina!", "EmptyVehiclesRespawned": "Wszystkie puste pojazdy zostały zrespawnowane przez admina!",
"AllVehiclesRespawned": "Wszystkie pojazdy zostały zrespione przez admina!", "AllVehiclesRespawned": "Wszystkie pojazdy zostały zrespawnowane przez admina!",
"AllVehiclesReloaded": "Wszystkie pojazdy biznesowe zostały ponownie załadowane przez admina!", "AllVehiclesReloaded": "Wszystkie pojazdy biznesowe zostały ponownie załadowane przez admina!",
"YourVehicleRespawned": "Twój pojazd został zrespiony", "YourVehicleRespawned": "Twój pojazd został zrespawnowany",
"PlayerIPBanned": "{1} został zbanowany poprzez IP!", "PlayerIPBanned": "{1} został zbanowany poprzez IP!",
"PlayerCharacterBanned": "{1} został zbanowany poprzez postać!", "PlayerCharacterBanned": "{1} został zbanowany poprzez postać!",
"PlayerSubNetBanned": "{1} został zbanowany poprzez podsieć!", "PlayerSubNetBanned": "{1} został zbanowany poprzez podsieć!",
@@ -723,20 +723,20 @@
"AlreadyOwnVehicle": "Już posiadasz ten pojazd!", "AlreadyOwnVehicle": "Już posiadasz ten pojazd!",
"PropertyEntranceFeeLabel": "Opłata wejściowa: {1}", "PropertyEntranceFeeLabel": "Opłata wejściowa: {1}",
"NeedToBeInJobVehicle": "Musisz być w firmowym pojeździe!", "NeedToBeInJobVehicle": "Musisz być w firmowym pojeździe!",
"InvalidJobRank": "Job rank not found!", "InvalidJobRank": "Nie znaleziono rangi stanowiska pracy!",
"PayPhoneRecipientAnswered": "Somebody answered the call. Use normal chat to talk to them.", "PayPhoneRecipientAnswered": "Ktoś odebrał telefon. Użyj normalnego czatu, aby z nim porozmawiać.",
"PayPhoneAnswered": "You answered the phone. Use normal chat to talk to the caller.", "PayPhoneAnswered": "Odebrałeś telefon. Użyj normalnego czatu, aby porozmawiać z rozmówcą.",
"PayPhoneRecipientHangup": "The line was disconnected. You have been charged {1}", "PayPhoneRecipientHangup": "Linia została rozłączona. Pobrano opłatę w wysokości {1}",
"PayPhoneHangup": "You hung up the phone.", "PayPhoneHangup": "Odłożyłeś słuchawkę.",
"AlreadyUsingPayPhone": "You are already using a payphone!", "AlreadyUsingPayPhone": "Już korzystasz z budki telefonicznej!",
"NotUsingPayPhone": "You are not using a payphone!", "NotUsingPayPhone": "Nie korzystasz z budki telefonicznej!",
"NoPayPhoneCloseEnough": "There is no payphone close enough!", "NoPayPhoneCloseEnough": "W pobliżu nie ma żadnej budki telefonicznej!",
"PayPhoneNotRinging": "This payphone is not ringing!", "PayPhoneNotRinging": "Ta budka telefoniczna nie dzwoni!",
"PayPhoneOccupied": "This payphone is already being used by someone else!", "PayPhoneOccupied": "Ta budka telefoniczna jest już używana przez kogoś innego!",
"PayPhoneOccupantSwitched": "A different voice is now on the line", "PayPhoneOccupantSwitched": "Na linii jest teraz inny głos",
"PayPhoneGiven": "You gave the phone to {1}", "PayPhoneGiven": "Podałeś słuchawkę do {1}",
"PayPhoneReceived": "{1} gave you the phone", "PayPhoneReceived": "{1} podał ci słuchawkę",
"PayPhoneUnableToCallPlayer": "You can't call {1} at this time. Please try again later.", "PayPhoneUnableToCallPlayer": "W tej chwili nie można się dodzwonić do {1}. Proszę spróbować ponownie później.",
"ActionTips": { "ActionTips": {
"VehicleEngineOffWhenEnteringKey": "Użyj {1} aby włączyć/wyłączyć silnik pojazdu", "VehicleEngineOffWhenEnteringKey": "Użyj {1} aby włączyć/wyłączyć silnik pojazdu",
"VehicleLockedAfterEntryAttempt": "Użyj {1} aby otworzyć/zamknąć pojazd", "VehicleLockedAfterEntryAttempt": "Użyj {1} aby otworzyć/zamknąć pojazd",
@@ -758,24 +758,32 @@
"EnterJobVehicleForRoute": "Wejdź do pobliskiego pojazdu służbowego aby rozpocząć trasę", "EnterJobVehicleForRoute": "Wejdź do pobliskiego pojazdu służbowego aby rozpocząć trasę",
"JobLocations": "Odwiedź zakład pracy aby zdobyć pracę. Użyj {1} aby znaleźć zakład pracy", "JobLocations": "Odwiedź zakład pracy aby zdobyć pracę. Użyj {1} aby znaleźć zakład pracy",
"JobRouteStart": "Użyj {1} aby rozpocząć trasę z tym pojazdem", "JobRouteStart": "Użyj {1} aby rozpocząć trasę z tym pojazdem",
"PayPhoneFirstUse": "Use {1} to end the call, and {2} to give the phone to somebody nearby" "PayPhoneFirstUse": "Użyj {1} aby zakończyć połączenie, lub {2} aby przekazać słuchawkę komuś w pobliżu"
}, },
"NoBusinessesWithinRange": "There are no businesses within {1} meters", "NoBusinessesWithinRange": "W promieniu {1} metrów nie ma żadnych biznesów",
"NoHousesWithinRange": "There are no houses within {1} meters", "NoHousesWithinRange": "W promieniu {1} metrów nie ma żadnych domów",
"NoPayPhonesWithinRange": "There are no payphones within {1} meters", "NoPayPhonesWithinRange": "W promieniu {1} nie ma żadnych budek telefonicznych",
"HeaderBusinessesInRangeList": "Businesses (within {1} meters)", "HeaderBusinessesInRangeList": "Biznesy (w promieniu {1} metrów)",
"HeaderHousesInRangeList": "Businesses (within {1} meters)", "HeaderHousesInRangeList": "Domy (w promieniu {1} metrów)",
"HeaderPayPhonesInRangeList": "Businesses (within {1} meters)", "HeaderPayPhonesInRangeList": "Budki telefoniczne (w promieniu {1} metrów)",
"HeaderCommandsForStaffFlagList": "Admin Commands ({1})", "HeaderCommandsForStaffFlagList": "Komendy administratora ({1})",
"PlayerLocateDistanceAndDirection": "{1} is {2} meters {3}", "PlayerLocateDistanceAndDirection": "{1} jest {2} metrów {3}",
"MustBeNumber": "You need to use a number!", "MustBeNumber": "Musisz użyć numeru!",
"HeaderJobRoutesList": "Job Routes ({1})", "HeaderJobRoutesList": "Trasy zakładu pracy ({1})",
"HeaderJobRouteInfo": "Job Route Information (${1})", "HeaderJobRouteInfo": "Informacje o trasie zakładu pracy (${1})",
"InvalidJobRoute": "Job route not found!", "InvalidJobRoute": "Nie znaleziono trasy zakładu pracy!",
"PayPhoneDeleted": "The payphone was deleted", "PayPhoneDeleted": "Budka telefoniczna została usunięta",
"PayPhoneAnswer": "Use {1} to answer the payphone", "PayPhoneAnswer": "Użyj {1} aby odebrać telefon",
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Czy na pewno chcesz zresetować wszystkie zobaczone wskazówki dotyczące akcji?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "Wszystkie zobaczone wskazówki dotyczące akcji zostały zresetowane.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normalny czat jest wyłączony przez administratora serwera. Zamiast tego należy użyć komend czatu.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Globalny czat poza postacią jest wyłączony przez administratora serwera"
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -778,5 +778,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -778,5 +778,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -784,5 +784,13 @@
"ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?", "ResetActionTipsConfirm": "Are you sure you want to reset all seen action tips?",
"ActionTipsReset": "All seen action tips have been reset.", "ActionTipsReset": "All seen action tips have been reset.",
"NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.", "NormalChatDisabled": "Normal chat is disabled by server admin. Use chat commands instead.",
"GlobalChatDisabled": "Global out-of-character chat is disabled by server admin" "GlobalChatDisabled": "Global out-of-character chat is disabled by server admin",
"CantEditJobUniforms": "You can't edit job uniforms!",
"PlayerNotSurrendered": "The player must be surrendered (hands up, be knocked out, or tazed)!",
"PlayerRemovedFromJob": "You removed {1} from the job",
"RemovedFromJob": "You were removed from the job by {1}",
"UnableToCallPlayer": "{1} can't be called right now",
"NoRadioToUse": "You must have a radio, or be in a vehicle with a radio!",
"FrequencyMustBeNumber": "The radio channel must be a number!",
"FrequencyMustBeBetween": "The radio channel must be between {1} and {2}!"
} }

View File

@@ -104,7 +104,6 @@ let serverData = {
}; };
let localPlayerMoney = 0; let localPlayerMoney = 0;
let localPlayerMoneyInterval = null;
let currencyString = "${AMOUNT}"; let currencyString = "${AMOUNT}";

View File

@@ -16,9 +16,6 @@ function initEventScript() {
// =========================================================================== // ===========================================================================
function addAllEventHandlers() { function addAllEventHandlers() {
addEventHandler("OnResourceStart", onResourceStart);
addEventHandler("OnResourceReady", onResourceReady);
addEventHandler("OnResourceStop", onResourceStop);
addEventHandler("OnProcess", onProcess); addEventHandler("OnProcess", onProcess);
addEventHandler("OnKeyUp", onKeyUp); addEventHandler("OnKeyUp", onKeyUp);
addEventHandler("OnDrawnHUD", onDrawnHUD); addEventHandler("OnDrawnHUD", onDrawnHUD);
@@ -94,8 +91,11 @@ function onResourceStop(event, resource) {
function onResourceReady(event, resource) { function onResourceReady(event, resource) {
if (resource == thisResource) { if (resource == thisResource) {
logToConsole(LOG_DEBUG | LOG_WARN, `[V.RP.Event] onResourceReady called - Sending signal to server`); logToConsole(LOG_DEBUG | LOG_WARN, `[V.RP.Event] onResourceReady called - Sending signal to server`);
loadLocaleConfig();
sendResourceReadySignalToServer(); setTimeout(function () {
initClientScripts();
sendResourceReadySignalToServer();
}, 500);
} }
} }

View File

@@ -8,7 +8,7 @@
// =========================================================================== // ===========================================================================
class HouseData { class HouseData {
constructor(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior) { constructor(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior, locked) {
this.index = -1; this.index = -1;
this.houseId = houseId; this.houseId = houseId;
this.description = description; this.description = description;
@@ -19,14 +19,21 @@ class HouseData {
this.rentPrice = 0; this.rentPrice = 0;
this.buyPrice = 0; this.buyPrice = 0;
this.blipId = -1; this.blipId = -1;
this.locked = false; this.locked = locked;
} }
} }
// =========================================================================== // ===========================================================================
function initHouseScript() {
logToConsole(LOG_DEBUG, "[V.RP.House]: Initializing house script ...");
logToConsole(LOG_DEBUG, "[V.RP.House]: House script initialized!");
}
// ===========================================================================
function receiveHouseFromServer(houseId, isDeleted, description, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked) { function receiveHouseFromServer(houseId, isDeleted, description, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked) {
logToConsole(LOG_DEBUG, `[V.RP.House] Received house ${houseId} (${name}) from server`); logToConsole(LOG_DEBUG, `[V.RP.House] Received house ${houseId} (${description}) from server`);
if (!areServerElementsSupported() || getGame() == V_GAME_MAFIA_ONE || getGame() == V_GAME_GTA_IV) { if (!areServerElementsSupported() || getGame() == V_GAME_MAFIA_ONE || getGame() == V_GAME_GTA_IV) {
if (isDeleted == true) { if (isDeleted == true) {
@@ -96,7 +103,7 @@ function receiveHouseFromServer(houseId, isDeleted, description, entrancePositio
} }
} else { } else {
logToConsole(LOG_DEBUG, `[V.RP.House] House ${houseId} doesn't exist. Adding ...`); logToConsole(LOG_DEBUG, `[V.RP.House] House ${houseId} doesn't exist. Adding ...`);
let tempHouseData = new HouseData(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior); let tempHouseData = new HouseData(houseId, description, entrancePosition, blipModel, pickupModel, hasInterior, locked);
if (blipModel != -1) { if (blipModel != -1) {
let blipId = createGameBlip(tempHouseData.blipModel, tempHouseData.entrancePosition, "House"); let blipId = createGameBlip(tempHouseData.blipModel, tempHouseData.entrancePosition, "House");
if (blipId != -1) { if (blipId != -1) {

View File

@@ -18,10 +18,11 @@ let payPhoneRingingSound = null;
let payPhoneDialingSound = null; let payPhoneDialingSound = null;
let payPhonePickupSound = null; let payPhonePickupSound = null;
let payPhoneHangupSound = null; let payPhoneHangupSound = null;
let payPhoneRingingSoundFilePath = "files/sounds/payphone/old-payphone-ring.mp3";
let payPhoneDialingSoundFilePath = "files/sounds/payphone/old-payphone-dial.mp3"; let payPhoneRingingSoundFilePath = "";
let payPhonePickupSoundFilePath = "files/sounds/payphone/old-payphone-pickup.mp3"; let payPhoneDialingSoundFilePath = "";
let payPhoneHangupSoundFilePath = "files/sounds/payphone/old-payphone-hangup.mp3"; let payPhonePickupSoundFilePath = "";
let payPhoneHangupSoundFilePath = "";
let ringingPayPhone = -1; let ringingPayPhone = -1;
@@ -40,6 +41,21 @@ class PayPhoneData {
function initPayPhoneScript() { function initPayPhoneScript() {
logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Initializing payphone script ..."); logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Initializing payphone script ...");
if (getGame() == V_GAME_MAFIA_ONE) {
payPhoneRingingSoundFilePath = "files/sounds/payphone/old-payphone-ring.mp3";
payPhoneDialingSoundFilePath = "files/sounds/payphone/old-payphone-dial.mp3";
payPhonePickupSoundFilePath = "files/sounds/payphone/old-payphone-pickup.mp3";
payPhoneHangupSoundFilePath = "files/sounds/payphone/old-payphone-hangup.mp3";
} else {
if (getGame() != V_GAME_GTA_SA) {
payPhoneRingingSoundFilePath = "files/sounds/payphone/old-payphone-ring.mp3";
payPhoneDialingSoundFilePath = "files/sounds/payphone/old-payphone-dial.mp3";
payPhonePickupSoundFilePath = "files/sounds/payphone/old-payphone-pickup.mp3";
payPhoneHangupSoundFilePath = "files/sounds/payphone/old-payphone-hangup.mp3";
}
}
//payPhoneRingingIndicatorImage = loadPayPhoneRingingIndicatorImage(); //payPhoneRingingIndicatorImage = loadPayPhoneRingingIndicatorImage();
payPhoneRingingSound = loadPayPhoneRingingSound(); payPhoneRingingSound = loadPayPhoneRingingSound();
payPhoneDialingSound = loadPayPhoneDialingSound(); payPhoneDialingSound = loadPayPhoneDialingSound();
@@ -51,6 +67,10 @@ function initPayPhoneScript() {
// =========================================================================== // ===========================================================================
function loadPayPhoneRingingIndicatorImage() { function loadPayPhoneRingingIndicatorImage() {
if (payPhoneRingingIndicatorImagePath == "") {
return null;
}
let imageStream = openFile(payPhoneRingingIndicatorImagePath); let imageStream = openFile(payPhoneRingingIndicatorImagePath);
let tempImage = null; let tempImage = null;
if (imageStream != null) { if (imageStream != null) {
@@ -64,6 +84,10 @@ function loadPayPhoneRingingIndicatorImage() {
// =========================================================================== // ===========================================================================
function loadPayPhoneRingingSound() { function loadPayPhoneRingingSound() {
if (payPhoneRingingSoundFilePath == "") {
return null;
}
let soundStream = openFile(payPhoneRingingSoundFilePath); let soundStream = openFile(payPhoneRingingSoundFilePath);
let tempSound = null; let tempSound = null;
if (soundStream != null) { if (soundStream != null) {
@@ -77,6 +101,10 @@ function loadPayPhoneRingingSound() {
// =========================================================================== // ===========================================================================
function loadPayPhoneDialingSound() { function loadPayPhoneDialingSound() {
if (payPhoneDialingSoundFilePath == "") {
return null;
}
let soundStream = openFile(payPhoneDialingSoundFilePath); let soundStream = openFile(payPhoneDialingSoundFilePath);
let tempSound = null; let tempSound = null;
if (soundStream != null) { if (soundStream != null) {
@@ -94,6 +122,10 @@ function loadPayPhoneDialingSound() {
// =========================================================================== // ===========================================================================
function loadPayPhonePickupSound() { function loadPayPhonePickupSound() {
if (payPhonePickupSoundFilePath == "") {
return null;
}
let soundStream = openFile(payPhonePickupSoundFilePath); let soundStream = openFile(payPhonePickupSoundFilePath);
let tempSound = null; let tempSound = null;
if (soundStream != null) { if (soundStream != null) {
@@ -111,6 +143,10 @@ function loadPayPhonePickupSound() {
// =========================================================================== // ===========================================================================
function loadPayPhoneHangupSound() { function loadPayPhoneHangupSound() {
if (payPhoneHangupSoundFilePath == "") {
return null;
}
let soundStream = openFile(payPhoneHangupSoundFilePath); let soundStream = openFile(payPhoneHangupSoundFilePath);
let tempSound = null; let tempSound = null;
if (soundStream != null) { if (soundStream != null) {
@@ -128,6 +164,10 @@ function loadPayPhoneHangupSound() {
// =========================================================================== // ===========================================================================
function processPayPhonesDistance() { function processPayPhonesDistance() {
if (payPhoneRingingSound == null) {
return false;
}
let tempRingingPhone = -1; let tempRingingPhone = -1;
for (let i in getServerData().payPhones) { for (let i in getServerData().payPhones) {
if (getServerData().payPhones[i].state == V_PAYPHONE_STATE_RINGING) { if (getServerData().payPhones[i].state == V_PAYPHONE_STATE_RINGING) {
@@ -231,6 +271,11 @@ function removePayPhonesFromClient() {
// =========================================================================== // ===========================================================================
function payPhoneDial() { function payPhoneDial() {
if (payPhoneDialingSound == null) {
logToConsole(LOG_DEBUG | LOG_ERROR, "[V.RP.PayPhone]: Attempted to play payphone dial sound, but sound object is null");
return false;
}
logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone dial sound"); logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone dial sound");
payPhoneDialingSound.play(); payPhoneDialingSound.play();
} }
@@ -238,6 +283,11 @@ function payPhoneDial() {
// =========================================================================== // ===========================================================================
function payPhoneHangup() { function payPhoneHangup() {
if (payPhoneHangupSound == null) {
logToConsole(LOG_DEBUG | LOG_ERROR, "[V.RP.PayPhone]: Attempted to play payphone hangup sound, but sound object is null");
return false;
}
logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone hangup sound"); logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone hangup sound");
payPhoneHangupSound.play(); payPhoneHangupSound.play();
} }
@@ -245,6 +295,11 @@ function payPhoneHangup() {
// =========================================================================== // ===========================================================================
function payPhonePickup() { function payPhonePickup() {
if (payPhonePickupSound == null) {
logToConsole(LOG_DEBUG | LOG_ERROR, "[V.RP.PayPhone]: Attempted to play payphone pickup sound, but sound object is null");
return false;
}
logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone pickup sound"); logToConsole(LOG_DEBUG, "[V.RP.PayPhone]: Playing payphone pickup sound");
payPhonePickupSound.play(); payPhonePickupSound.play();
} }

View File

@@ -25,6 +25,11 @@ function initClientScripts() {
initPayPhoneScript(); initPayPhoneScript();
initTimersScript(); initTimersScript();
initJobScript(); initJobScript();
initItemScript();
initBusinessScript();
initHouseScript();
loadLocaleConfig();
addAllNetworkHandlers(); addAllNetworkHandlers();
@@ -203,6 +208,8 @@ function setUpInitialGame() {
// =========================================================================== // ===========================================================================
initClientScripts(); addEventHandler("OnResourceStart", onResourceStart);
addEventHandler("OnResourceReady", onResourceReady);
addEventHandler("OnResourceStop", onResourceStop);
// =========================================================================== // ===========================================================================

View File

@@ -7,6 +7,10 @@
// TYPE: Client (JavaScript) // TYPE: Client (JavaScript)
// =========================================================================== // ===========================================================================
let localPlayerMoneyInterval = null;
// ===========================================================================
function initTimersScript() { function initTimersScript() {
logToConsole(LOG_DEBUG, "[V.RP.Timers]: Initializing timer script ..."); logToConsole(LOG_DEBUG, "[V.RP.Timers]: Initializing timer script ...");
logToConsole(LOG_DEBUG, "[V.RP.Timers]: Timers script initialized!"); logToConsole(LOG_DEBUG, "[V.RP.Timers]: Timers script initialized!");
@@ -15,6 +19,7 @@ function initTimersScript() {
// =========================================================================== // ===========================================================================
function initTimers() { function initTimers() {
localPlayerMoneyInterval = setInterval(updateLocalPlayerMoney, 1000 * 5);
} }
// =========================================================================== // ===========================================================================

View File

@@ -95,6 +95,9 @@ class BusinessData {
this.labelHelpType = V_PROPLABEL_INFO_NONE; this.labelHelpType = V_PROPLABEL_INFO_NONE;
this.whoAdded = 0;
this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = toInteger(dbAssoc["biz_id"]); this.databaseId = toInteger(dbAssoc["biz_id"]);
this.name = toString(dbAssoc["biz_name"]); this.name = toString(dbAssoc["biz_name"]);
@@ -124,9 +127,10 @@ class BusinessData {
this.entranceFee = toInteger(dbAssoc["biz_entrance_fee"]); this.entranceFee = toInteger(dbAssoc["biz_entrance_fee"]);
this.till = toInteger(dbAssoc["biz_till"]); this.till = toInteger(dbAssoc["biz_till"]);
this.labelHelpType = toInteger(dbAssoc["biz_label_help_type"]); this.labelHelpType = toInteger(dbAssoc["biz_label_help_type"]);
this.streamingRadioStation = toInteger(dbAssoc["biz_radio_station"]); this.streamingRadioStation = toInteger(dbAssoc["biz_radio_station"]);
this.whoAdded = toInteger(dbAssoc["biz_who_added"]);
this.whenAdded = toInteger(dbAssoc["biz_when_added"]);
} }
}; };
}; };
@@ -315,7 +319,9 @@ function createBusinessCommand(command, params, client) {
-1, -1,
getPlayerInterior(client), getPlayerInterior(client),
getPlayerDimension(client), getPlayerDimension(client),
getPlayerData(client).interiorScene); getPlayerData(client).interiorScene,
getPlayerData(client).accountData.databaseId
);
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} created business: {businessBlue}${params}`, true); messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} created business: {businessBlue}${params}`, true);
} }
@@ -357,7 +363,7 @@ function createBusinessLocationCommand(command, params, client) {
// =========================================================================== // ===========================================================================
function createBusiness(name, entrancePosition, exitPosition, entrancePickupModel = -1, entranceBlipModel = -1, entranceInterior = 0, entranceDimension = 0, entranceScene = -1) { function createBusiness(name, entrancePosition, exitPosition, entrancePickupModel = -1, entranceBlipModel = -1, entranceInterior = 0, entranceDimension = 0, entranceScene = -1, whoAdded = defaultNoAccountId) {
let tempBusinessData = new BusinessData(false); let tempBusinessData = new BusinessData(false);
tempBusinessData.name = name; tempBusinessData.name = name;
@@ -377,6 +383,9 @@ function createBusiness(name, entrancePosition, exitPosition, entrancePickupMode
tempBusinessData.exitDimension = 0; tempBusinessData.exitDimension = 0;
tempBusinessData.exitScene = -1; tempBusinessData.exitScene = -1;
tempBusinessData.whoAdded = whoAdded;
tempBusinessData.whenAdded = getCurrentUnixTimestamp();
tempBusinessData.needsSaved = true; tempBusinessData.needsSaved = true;
let businessId = getServerData().businesses.push(tempBusinessData); let businessId = getServerData().businesses.push(tempBusinessData);
setBusinessDataIndexes(); setBusinessDataIndexes();
@@ -1933,6 +1942,8 @@ function saveBusinessToDatabase(businessId) {
["biz_radio_station", (getRadioStationData(tempBusinessData.streamingRadioStationIndex) != false) ? toInteger(getRadioStationData(tempBusinessData.streamingRadioStationIndex).databaseId) : -1], ["biz_radio_station", (getRadioStationData(tempBusinessData.streamingRadioStationIndex) != false) ? toInteger(getRadioStationData(tempBusinessData.streamingRadioStationIndex).databaseId) : -1],
["biz_custom_interior", boolToInt(tempBusinessData.customInterior)], ["biz_custom_interior", boolToInt(tempBusinessData.customInterior)],
["biz_buy_price", tempBusinessData.buyPrice], ["biz_buy_price", tempBusinessData.buyPrice],
["biz_who_added", tempBusinessData.whoAdded],
["biz_when_added", tempBusinessData.whenAdded],
//["biz_rent_price", tempBusinessData.rentPrice], //["biz_rent_price", tempBusinessData.rentPrice],
]; ];

View File

@@ -207,9 +207,11 @@ function resetClientStuff(client) {
function kickAllClients() { function kickAllClients() {
getClients().forEach((client) => { getClients().forEach((client) => {
getPlayerData(client).customDisconnectReason = "ServerRestarting"; if (getPlayerData(client) != false) {
getPlayerData(client).customDisconnectReason = "ServerRestarting";
}
disconnectPlayer(client); disconnectPlayer(client);
}) });
} }
// =========================================================================== // ===========================================================================

View File

@@ -348,9 +348,10 @@ function loadCommands() {
new CommandData("use", useItemCommand, "", getStaffFlagValue("None"), true, false, "Uses the currently equipped item"), new CommandData("use", useItemCommand, "", getStaffFlagValue("None"), true, false, "Uses the currently equipped item"),
new CommandData("inv", listPlayerInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in your inventory"), new CommandData("inv", listPlayerInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in your inventory"),
new CommandData("inventory", listPlayerInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in your inventory"), new CommandData("inventory", listPlayerInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in your inventory"),
new CommandData("search", listOtherPlayerInventoryCommand, "<player name/id>", getStaffFlagValue("None"), true, false, "Shows the items in a player's inventory"),
new CommandData("items", listItemInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items stored in a container item"), new CommandData("items", listItemInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items stored in a container item"),
new CommandData("vehtrunk", listVehicleTrunkInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in a vehicle's trunk"), //new CommandData("vehtrunk", listVehicleTrunkInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in a vehicle's trunk"),
new CommandData("houseitems", listHouseInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in the house's storage"), new CommandData("houseitems", listHouseInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in the house's storage"),
new CommandData("bizstorage", listBusinessStorageInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in the business's extra storage (not buyable)"), new CommandData("bizstorage", listBusinessStorageInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items in the business's extra storage (not buyable)"),
new CommandData("bizfloor", listBusinessFloorInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items that can be bought from the business"), new CommandData("bizfloor", listBusinessFloorInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items that can be bought from the business"),
@@ -359,11 +360,11 @@ function loadCommands() {
new CommandData("buylist", listBusinessFloorInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items that can be bought from the business"), new CommandData("buylist", listBusinessFloorInventoryCommand, "", getStaffFlagValue("None"), true, false, "Shows the items that can be bought from the business"),
new CommandData("power", toggleItemEnabledCommand, "", getStaffFlagValue("None"), true, false, "Turns on or off an item"), new CommandData("power", toggleItemEnabledCommand, "", getStaffFlagValue("None"), true, false, "Turns on or off an item"),
new CommandData("freq", setWalkieTalkieFrequencyCommand, "[frequncy number]", getStaffFlagValue("None"), true, false, "Sets a radio item's frequency"), //new CommandData("freq", setRadioFrequencyCommand, "[frequency number]", getStaffFlagValue("None"), true, false, "Sets a vehicle or item radio frequency"),
//new CommandData("call", callWithPhoneCommand, "[number]", getStaffFlagValue("None"), true, false), //new CommandData("call", callWithPhoneCommand, "[number]", getStaffFlagValue("None"), true, false),
//new CommandData("speakerphone", togglePhoneSpeakerCommand, "", getStaffFlagValue("None"), true, false), //new CommandData("speakerphone", togglePhoneSpeakerCommand, "", getStaffFlagValue("None"), true, false),
new CommandData("radio", walkieTalkieChatCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio item (item must be able to transmit)"), new CommandData("radio", radioTransmitCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio (vehicle radio or item)"),
new CommandData("r", walkieTalkieChatCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio item (item must be able to transmit)"), new CommandData("r", radioTransmitCommand, "", getStaffFlagValue("None"), true, false, "Chat over a radio (vehicle radio or item)"),
new CommandData("additemtype", createItemTypeCommand, "<name>", getStaffFlagValue("ManageItems"), true, false, "Adds a new item type"), new CommandData("additemtype", createItemTypeCommand, "<name>", getStaffFlagValue("ManageItems"), true, false, "Adds a new item type"),
new CommandData("itemtypeusetype", setItemTypeUseTypeCommand, "<item type> <use type>", getStaffFlagValue("ManageItems"), true, false, "Sets an item type's use-type (what kind of action is performed when using it)"), new CommandData("itemtypeusetype", setItemTypeUseTypeCommand, "<item type> <use type>", getStaffFlagValue("ManageItems"), true, false, "Sets an item type's use-type (what kind of action is performed when using it)"),
@@ -428,6 +429,8 @@ function loadCommands() {
new CommandData("deljobroute", deleteJobRouteCommand, "", getStaffFlagValue("ManageJobs"), true, false), new CommandData("deljobroute", deleteJobRouteCommand, "", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("deljobrouteloc", deleteJobRouteLocationCommand, "", getStaffFlagValue("ManageJobs"), true, false), new CommandData("deljobrouteloc", deleteJobRouteLocationCommand, "", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("deljobroutelocation", deleteJobRouteLocationCommand, "", getStaffFlagValue("ManageJobs"), true, false), new CommandData("deljobroutelocation", deleteJobRouteLocationCommand, "", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("jobuniformname", setJobUniformNameCommand, "<uniform id> <name>", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("jobuniformrank", setJobUniformMinimumRankCommand, "<uniform id> <rank level>", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("jobroutelocpos", setJobRouteLocationPositionCommand, "", getStaffFlagValue("ManageJobs"), true, false), new CommandData("jobroutelocpos", setJobRouteLocationPositionCommand, "", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("jobroutename", setJobRouteNameCommand, "<name>", getStaffFlagValue("ManageJobs"), true, false), new CommandData("jobroutename", setJobRouteNameCommand, "<name>", getStaffFlagValue("ManageJobs"), true, false),
new CommandData("jobroutepay", setJobRoutePayCommand, "<amount>", getStaffFlagValue("ManageJobs"), true, false), new CommandData("jobroutepay", setJobRoutePayCommand, "<amount>", getStaffFlagValue("ManageJobs"), true, false),

View File

@@ -211,8 +211,8 @@ let globalConfig = {
houseDimensionStart: 100, houseDimensionStart: 100,
buyVehicleDriveAwayDistance: 25.0, buyVehicleDriveAwayDistance: 25.0,
returnToJobVehicleTime: 30, returnToJobVehicleTime: 30,
walkieTalkieSpeakerDistance: 15, radioTransmitSpeakerDistance: 15,
walkieTalkieTalkDistance: 15, radioTransmitTalkDistance: 15,
phoneSpeakerDistance: 15, phoneSpeakerDistance: 15,
phoneTalkDistance: 15, phoneTalkDistance: 15,
tazerEffectDuration: 15000, tazerEffectDuration: 15000,
@@ -283,6 +283,7 @@ let globalConfig = {
nightMapEndHour: 7, nightMapEndHour: 7,
payPhoneGiveDistance: 2.5, payPhoneGiveDistance: 2.5,
payPhoneAnswerDistance: 2.5, payPhoneAnswerDistance: 2.5,
vehicleTransmitRadioUseDistance: 2.5,
}; };
// =========================================================================== // ===========================================================================

View File

@@ -593,11 +593,10 @@ function togglePauseSavingToDatabaseCommand(command, params, client) {
function createAccountDataForNewServer(serverId) { function createAccountDataForNewServer(serverId) {
let dbConnection = connectToDatabase(); let dbConnection = connectToDatabase();
let dbQuery = false;
if (dbConnection) { if (dbConnection) {
dbQuery = queryDatabase(dbConnection, `SELECT * FROM acct_main`); let accounts = fetchQueryAssoc(dbConnection, `SELECT * FROM acct_main`);
if (dbQuery) { for (let i in accounts) {
let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accountDatabaseId}, ${serverId})`; let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accounts[i]["acct_id"]}, ${serverId})`;
quickDatabaseQuery(dbQueryString); quickDatabaseQuery(dbQueryString);
} }
} }
@@ -605,6 +604,60 @@ function createAccountDataForNewServer(serverId) {
// =========================================================================== // ===========================================================================
function fixMissingAccountServerData() {
let dbConnection = connectToDatabase();
console.log(`Connection: ${dbConnection}`);
if (dbConnection != false) {
let accounts = fetchQueryAssoc(dbConnection, `SELECT * FROM acct_main WHERE acct_id > 12`);
console.log(`Accounts: ${accounts.length}`);
let servers = fetchQueryAssoc(dbConnection, `SELECT * FROM svr_main`);
console.log(`Servers: ${servers.length}`);
for (let i in accounts) {
let serverAccounts = fetchQueryAssoc(dbConnection, `SELECT * FROM acct_svr WHERE acct_svr_acct = ${accounts[i]["acct_id"]}`)
console.log(`Server accounts for ${accounts[i]["acct_id"]}: ${serverAccounts.length}`);
for (let k in servers) {
let check = serverAccounts.find((sa) => sa["acct_svr_svr"] == servers[k]["svr_id"]);
console.log(`Check server: ${servers[k]["svr_id"]}. Amount ${check}`);
if (typeof check == "undefined") {
let dbQueryString = `INSERT INTO acct_svr (acct_svr_acct, acct_svr_svr) VALUES (${accounts[i]["acct_id"]}, ${servers[k]["svr_id"]})`;
//console.log(dbQueryString);
quickDatabaseQuery(dbQueryString);
}
}
}
}
}
// ===========================================================================
function fixMissingSubAccountServerData() {
let dbConnection = connectToDatabase();
console.log(`Connection: ${dbConnection}`);
if (dbConnection != false) {
let subAccounts = fetchQueryAssoc(dbConnection, `SELECT * FROM sacct_main`);
console.log(`SubAccounts: ${subAccounts.length}`);
let servers = fetchQueryAssoc(dbConnection, `SELECT * FROM svr_main`);
console.log(`Servers: ${servers.length}`);
for (let i in subAccounts) {
let serverAccounts = fetchQueryAssoc(dbConnection, `SELECT * FROM sacct_svr WHERE sacct_svr_sacct = ${subAccounts[i]["sacct_id"]}`)
console.log(`Server accounts for ${subAccounts[i]["sacct_id"]}: ${serverAccounts.length}`);
for (let k in servers) {
let check = serverAccounts.find((sa) => sa["sacct_svr_server"] == servers[k]["svr_id"]);
console.log(`Check server: ${servers[k]["svr_id"]}. Amount ${check}`);
if (typeof check == "undefined") {
let dbQueryString = `INSERT INTO sacct_svr (sacct_svr_sacct, sacct_svr_server) VALUES (${subAccounts[i]["sacct_id"]}, ${servers[k]["svr_id"]})`;
//console.log(dbQueryString);
quickDatabaseQuery(dbQueryString);
}
}
}
}
}
// ===========================================================================
function streamAudioURLToAllPlayersCommand(command, params, client) { function streamAudioURLToAllPlayersCommand(command, params, client) {
if (areParamsEmpty(params)) { if (areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command)); messagePlayerSyntax(client, getCommandSyntaxText(command));

View File

@@ -1801,9 +1801,21 @@ function updateHousePickupLabelData(houseId) {
if (!areServerElementsSupported() || getGame() == V_GAME_MAFIA_ONE || getGame() == V_GAME_GTA_IV) { if (!areServerElementsSupported() || getGame() == V_GAME_MAFIA_ONE || getGame() == V_GAME_GTA_IV) {
if (houseData == false) { if (houseData == false) {
sendHouseToPlayer(null, houseId, true, "", false, -1, -1, 0, 0, false, false, false); sendHouseToPlayer(null, houseId, true, "", false, -1, -1, 0, 0, false, false);
} else { } else {
sendHouseToPlayer(null, houseId, false, houseData.description, houseData.entrancePosition, getHouseEntranceBlipModelForNetworkEvent(houseId), getHouseEntrancePickupModelForNetworkEvent(houseId), houseData.buyPrice, houseData.rentPrice, houseData.hasInterior, houseData.locked); sendHouseToPlayer(
null,
houseId,
false,
houseData.description,
houseData.entrancePosition,
getHouseEntranceBlipModelForNetworkEvent(houseId),
getHouseEntrancePickupModelForNetworkEvent(houseId),
houseData.buyPrice,
houseData.rentPrice,
houseData.hasInterior,
houseData.locked
);
} }
return false; return false;
} }

View File

@@ -2400,26 +2400,46 @@ function getBestItemToTake(client, slot) {
* *
*/ */
function listPlayerInventoryCommand(command, params, client) { function listPlayerInventoryCommand(command, params, client) {
//let targetClient = client;
//if(!areParamsEmpty(client)) {
// if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("BasicModeration"))) {
// if(targetClient == false) {
// sendMessageToPlayer(client, getLocaleString(client, "InvalidPlayer"));
// return false;
// }
//
// targetClient = getPlayerFromParams(params);
// }
//}
//showPlayerInventoryToPlayer(client, targetClient);
showPlayerInventoryToPlayer(client, client); showPlayerInventoryToPlayer(client, client);
markPlayerActionTipSeen(client, "ViewInventory"); markPlayerActionTipSeen(client, "ViewInventory");
} }
// =========================================================================== // ===========================================================================
/**
* This is a command handler function.
*
* @param {string} command - The command name used by the player
* @param {string} params - The parameters/args string used with the command by the player
* @param {Client} client - The client/player that used the command
* @return {bool} Whether or not the command was successful
*
*/
function listOtherPlayerInventoryCommand(command, params, client) {
if (areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(client, command));
return false;
}
let targetClient = getPlayerFromParams(params);
if (!targetClient) {
messagePlayerError(client, getLocaleString(client, "InvalidPlayer"));
return false;
}
if (!doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageItems"))) {
if (!isPlayerSurrendered(targetClient)) {
messagePlayerError(client, getLocaleString(client, "MustBeSurrendered"));
return false;
}
}
showPlayerInventoryToPlayer(client, targetClient);
}
// ===========================================================================
/** /**
* This is a command handler function. * This is a command handler function.
* *

View File

@@ -5,135 +5,4 @@
// FILE: walkie-talkie.js // FILE: walkie-talkie.js
// DESC: Provides features and usage for the walkie-talkie item type // DESC: Provides features and usage for the walkie-talkie item type
// TYPE: Server (JavaScript) // TYPE: Server (JavaScript)
// ===========================================================================
function getPlayerActiveWalkieTalkieFrequency(client) {
let walkieTalkieSlot = getPlayerFirstItemSlotByUseType(client, V_ITEM_USE_TYPE_WALKIETALKIE);
if (walkieTalkieSlot != -1) {
if (getItemData(getPlayerData(client).hotBarItems[walkieTalkieSlot])) {
if (getItemData(getPlayerData(client).hotBarItems[walkieTalkieSlot]).enabled) {
return getItemData(getPlayerData(client).hotBarItems[walkieTalkieSlot]).value;
}
}
}
return false;
}
// ===========================================================================
function walkieTalkieTransmit(radioFrequency, messageText, transmittingPlayer) {
walkieTalkieOutgoingToNearbyPlayers(transmittingPlayer, messageText);
//let clients = getServerData().items;
//for(let i in clients) {
// if(isPlayerSpawned(clients[i])) {
// if(!isSamePlayer(transmittingPlayer, clients[i])) {
// if(getPlayerActiveWalkieTalkieFrequency(clients[i]) == radioFrequency) {
// if(getItemData(getPlayerData(clients[i]).hotBarItems[getPlayerFirstItemSlotByUseType(clients[i], V_ITEM_USE_TYPE_WALKIETALKIE)]).enabled) {
// walkieTalkieIncomingToNearbyPlayers(clients[i], messageText);
// }
// }
// }
// }
//}
let items = getServerData().items;
for (let i in items) {
if (items[i].enabled) {
if (getItemTypeData(items[i].itemTypeIndex).useType == V_ITEM_USE_TYPE_WALKIETALKIE) {
if (items[i].value == radioFrequency) {
walkieTalkieIncomingToNearbyPlayers(null, messageText, getItemPosition(i));
}
}
}
}
}
// ===========================================================================
function walkieTalkieOutgoingToNearbyPlayers(client, messageText) {
let clients = getPlayersInRange(getPlayerPosition(client), getGlobalConfig().talkDistance);
for (let i in clients) {
messagePlayerNormal(clients[i], `[#CCCCCC]${getCharacterFullName(client)} {ALTCOLOUR}(to radio): {MAINCOLOUR}${messageText}`);
}
}
// ===========================================================================
function walkieTalkieIncomingToNearbyPlayers(client, messageText, position = null) {
let prefix = `{ALTCOLOUR}(Nearby radio)`;
if (client != null) {
prefix = `${getCharacterFullName(client)} {ALTCOLOUR}(from radio)`;
}
let clients = getPlayersInRange(getPlayerPosition(client), getGlobalConfig().walkieTalkieSpeakerDistance);
for (let i in clients) {
messagePlayerNormal(clients[i], `[#CCCCCC]${prefix}: {MAINCOLOUR}${messageText}`);
}
}
// ===========================================================================
function setWalkieTalkieFrequencyCommand(command, params, client) {
if (areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
if (isNaN(params)) {
messagePlayerError(client, `The frequency channel must be a number!`);
return false;
}
params = toInteger(params);
if (params < 100 || params > 500) {
messagePlayerError(client, `The frequency channel must be between 100 and 500!`);
return false;
}
if (!getPlayerActiveItem(client)) {
messagePlayerError(client, `You aren't holding a walkie talkie!`);
return false;
}
if (!getItemData(getPlayerActiveItem(client))) {
messagePlayerError(client, `You aren't holding a walkie talkie!`);
return false;
}
if (getItemData(getPlayerActiveItem(client)).enabled) {
if (!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "use")) {
messagePlayerError(client, `Your walkie talkie is turned off. Press ${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "use")).key)} to turn it on`);
} else {
messagePlayerError(client, `Your walkie talkie is turned off. Type {ALTCOLOUR}/use {MAINCOLOUR}to turn it on`);
}
return false;
}
getItemData(getPlayerActiveItem(client)).value = params * 100;
messagePlayerSuccess(client, getLocaleString(client, "FrequencyChannelChanged", `Walkie Talkie`, `${getPlayerData(client).activeHotBarSlot + 1}`, `${getItemValueDisplayForItem(getPlayerActiveItem(client))}`));
}
// ===========================================================================
function walkieTalkieChatCommand(command, params, client) {
if (areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
let walkieTalkieSlot = getPlayerFirstItemSlotByUseType(client, V_ITEM_USE_TYPE_WALKIETALKIE);
if (!getItemData(getPlayerData(client).hotBarItems[walkieTalkieSlot]).enabled) {
messagePlayerError(client, "Please turn on a walkie talkie first!");
return false;
}
walkieTalkieTransmit(getPlayerActiveWalkieTalkieFrequency(client), params, client);
markPlayerActionTipSeen(client, "RadioCommandAfterEnablingWalkieTalkie");
}
// =========================================================================== // ===========================================================================

View File

@@ -57,11 +57,11 @@ class JobData {
this.colour = toColour(0, 0, 0, 255); this.colour = toColour(0, 0, 0, 255);
this.whiteListEnabled = false; this.whiteListEnabled = false;
this.blackListEnabled = false; this.blackListEnabled = false;
this.walkieTalkieFrequency = 0; this.radioFrequency = 0;
this.index = -1; this.index = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
/** @type {Array.<JobEquipmentData>} */ /** @type {Array.<JobEquipmentData>} */
this.equipment = []; this.equipment = [];
@@ -95,9 +95,9 @@ class JobData {
this.colour = toColour(dbAssoc["job_colour_r"], dbAssoc["job_colour_g"], dbAssoc["job_colour_b"], 255); this.colour = toColour(dbAssoc["job_colour_r"], dbAssoc["job_colour_g"], dbAssoc["job_colour_b"], 255);
this.whiteListEnabled = dbAssoc["job_wl"]; this.whiteListEnabled = dbAssoc["job_wl"];
this.blackListEnabled = dbAssoc["job_bl"]; this.blackListEnabled = dbAssoc["job_bl"];
this.walkieTalkieFrequency = dbAssoc["job_walkietalkiefreq"]; this.radioFrequency = dbAssoc["job_radio_freq"];
this.whoCreated = dbAssoc["job_who_added"]; this.whoAdded = dbAssoc["job_who_added"];
this.whenCreated = dbAssoc["job_when_added"]; this.whenAdded = dbAssoc["job_when_added"];
this.equipment = []; this.equipment = [];
this.uniforms = []; this.uniforms = [];
@@ -136,8 +136,8 @@ class JobRouteData {
//this.failedMessage = ""; //this.failedMessage = "";
this.locationArriveMessage = ""; this.locationArriveMessage = "";
this.locationGotoMessage = ""; this.locationGotoMessage = "";
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
this.sphere = null; this.sphere = null;
/** @type {Array.<JobRouteLocationData>} */ /** @type {Array.<JobRouteLocationData>} */
@@ -158,8 +158,8 @@ class JobRouteData {
this.vehicleColour1 = toInteger(dbAssoc["job_route_veh_colour1"]); this.vehicleColour1 = toInteger(dbAssoc["job_route_veh_colour1"]);
this.vehicleColour2 = toInteger(dbAssoc["job_route_veh_colour2"]); this.vehicleColour2 = toInteger(dbAssoc["job_route_veh_colour2"]);
this.detail = toInteger(dbAssoc["job_route_detail"]); this.detail = toInteger(dbAssoc["job_route_detail"]);
this.whoCreated = dbAssoc["job_route_who_added"]; this.whoAdded = dbAssoc["job_route_who_added"];
this.whenCreated = dbAssoc["job_route_when_added"]; this.whenAdded = dbAssoc["job_route_when_added"];
this.sphere = null; this.sphere = null;
} }
} }
@@ -186,8 +186,8 @@ class JobRouteLocationData {
this.type = V_JOB_ROUTE_LOC_TYPE_NONE; this.type = V_JOB_ROUTE_LOC_TYPE_NONE;
this.gotoMessage = ""; this.gotoMessage = "";
this.departMessage = ""; this.departMessage = "";
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = toInteger(dbAssoc["job_route_loc_id"]); this.databaseId = toInteger(dbAssoc["job_route_loc_id"]);
@@ -199,8 +199,8 @@ class JobRouteLocationData {
this.pay = toInteger(dbAssoc["job_route_loc_pay"]); this.pay = toInteger(dbAssoc["job_route_loc_pay"]);
this.arriveMessage = toInteger(dbAssoc["job_route_loc_arrive_msg"]); this.arriveMessage = toInteger(dbAssoc["job_route_loc_arrive_msg"]);
this.gotoMessage = toInteger(dbAssoc["job_route_loc_goto_msg"]); this.gotoMessage = toInteger(dbAssoc["job_route_loc_goto_msg"]);
this.whoCreated = dbAssoc["job_route_loc_who_added"]; this.whoAdded = dbAssoc["job_route_loc_who_added"];
this.whenCreated = dbAssoc["job_route_loc_when_added"]; this.whenAdded = dbAssoc["job_route_loc_when_added"];
} }
} }
}; };
@@ -221,8 +221,8 @@ class JobEquipmentData {
this.index = -1; this.index = -1;
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
/** @type {Array.<JobEquipmentItemData>} */ /** @type {Array.<JobEquipmentItemData>} */
this.items = []; this.items = [];
@@ -233,8 +233,8 @@ class JobEquipmentData {
this.name = dbAssoc["job_equip_name"]; this.name = dbAssoc["job_equip_name"];
this.requiredRank = dbAssoc["job_equip_minrank"]; this.requiredRank = dbAssoc["job_equip_minrank"];
this.enabled = dbAssoc["job_equip_enabled"]; this.enabled = dbAssoc["job_equip_enabled"];
this.whoCreated = dbAssoc["job_equip_who_added"]; this.whoAdded = dbAssoc["job_equip_who_added"];
this.whenCreated = dbAssoc["job_equip_when_added"]; this.whenAdded = dbAssoc["job_equip_when_added"];
} }
} }
}; };
@@ -254,8 +254,8 @@ class JobEquipmentItemData {
this.index = -1; this.index = -1;
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = dbAssoc["job_equip_item_id"]; this.databaseId = dbAssoc["job_equip_item_id"];
@@ -263,8 +263,8 @@ class JobEquipmentItemData {
this.itemType = dbAssoc["job_equip_item_type"]; this.itemType = dbAssoc["job_equip_item_type"];
this.value = dbAssoc["job_equip_item_value"]; this.value = dbAssoc["job_equip_item_value"];
this.enabled = dbAssoc["job_equip_item_enabled"]; this.enabled = dbAssoc["job_equip_item_enabled"];
this.whoCreated = dbAssoc["job_equip_item_who_added"]; this.whoAdded = dbAssoc["job_equip_item_who_added"];
this.whenCreated = dbAssoc["job_equip_item_when_added"]; this.whenAdded = dbAssoc["job_equip_item_when_added"];
} }
} }
}; };
@@ -285,8 +285,8 @@ class JobUniformData {
this.index = -1; this.index = -1;
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
/* /*
this.bodyParts = { this.bodyParts = {
@@ -317,8 +317,8 @@ class JobUniformData {
this.requiredRank = dbAssoc["job_uniform_minrank"]; this.requiredRank = dbAssoc["job_uniform_minrank"];
this.skin = dbAssoc["job_uniform_skin"]; this.skin = dbAssoc["job_uniform_skin"];
this.enabled = intToBool(dbAssoc["job_uniform_enabled"]); this.enabled = intToBool(dbAssoc["job_uniform_enabled"]);
this.whoCreated = dbAssoc["job_uniform_who_added"]; this.whoAdded = dbAssoc["job_uniform_who_added"];
this.whenCreated = dbAssoc["job_uniform_when_added"]; this.whenAdded = dbAssoc["job_uniform_when_added"];
/* /*
this.bodyParts = { this.bodyParts = {
@@ -364,8 +364,8 @@ class JobLocationData {
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.routeCache = []; this.routeCache = [];
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = dbAssoc["job_loc_id"]; this.databaseId = dbAssoc["job_loc_id"];
@@ -376,8 +376,8 @@ class JobLocationData {
this.enabled = intToBool(dbAssoc["job_loc_enabled"]); this.enabled = intToBool(dbAssoc["job_loc_enabled"]);
this.interior = dbAssoc["job_loc_int"]; this.interior = dbAssoc["job_loc_int"];
this.dimension = dbAssoc["job_loc_vw"]; this.dimension = dbAssoc["job_loc_vw"];
this.whoCreated = dbAssoc["job_loc_who_added"]; this.whoAdded = dbAssoc["job_loc_who_added"];
this.whenCreated = dbAssoc["job_loc_when_added"]; this.whenAdded = dbAssoc["job_loc_when_added"];
} }
} }
}; };
@@ -397,8 +397,8 @@ class JobRankData {
this.level = 0; this.level = 0;
this.enabled = false; this.enabled = false;
this.pay = 0; this.pay = 0;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
this.flags = 0; this.flags = 0;
this.needsSaved = false; this.needsSaved = false;
this.public = false; this.public = false;
@@ -410,8 +410,8 @@ class JobRankData {
this.level = toInteger(dbAssoc["job_rank_level"]); this.level = toInteger(dbAssoc["job_rank_level"]);
this.enabled = intToBool(dbAssoc["job_rank_enabled"]); this.enabled = intToBool(dbAssoc["job_rank_enabled"]);
this.pay = toInteger(dbAssoc["job_rank_pay"]); this.pay = toInteger(dbAssoc["job_rank_pay"]);
this.whoCreated = toInteger(dbAssoc["job_rank_who_added"]); this.whoAdded = toInteger(dbAssoc["job_rank_who_added"]);
this.whenCreated = toInteger(dbAssoc["job_rank_when_added"]); this.whenAdded = toInteger(dbAssoc["job_rank_when_added"]);
this.flags = toInteger(dbAssoc["job_rank_flags"]); this.flags = toInteger(dbAssoc["job_rank_flags"]);
this.public = intToBool(dbAssoc["job_rank_public"]); this.public = intToBool(dbAssoc["job_rank_public"]);
} }
@@ -429,16 +429,16 @@ class JobWhiteListData {
this.index = -1; this.index = -1;
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = dbAssoc["job_wl_id"]; this.databaseId = dbAssoc["job_wl_id"];
this.job = dbAssoc["job_wl_job"]; this.job = dbAssoc["job_wl_job"];
this.subAccount = dbAssoc["job_wl_sacct"] this.subAccount = dbAssoc["job_wl_sacct"]
this.enabled = dbAssoc["job_wl_enabled"]; this.enabled = dbAssoc["job_wl_enabled"];
this.whoCreated = dbAssoc["job_wl_who_added"]; this.whoAdded = dbAssoc["job_wl_who_added"];
this.whenCreated = dbAssoc["job_wl_when_added"]; this.whenAdded = dbAssoc["job_wl_when_added"];
} }
} }
}; };
@@ -454,16 +454,16 @@ class JobBlackListData {
this.index = -1; this.index = -1;
this.jobIndex = -1; this.jobIndex = -1;
this.needsSaved = false; this.needsSaved = false;
this.whoCreated = 0; this.whoAdded = 0;
this.whenCreated = 0; this.whenAdded = 0;
if (dbAssoc) { if (dbAssoc) {
this.databaseId = dbAssoc["job_bl_id"]; this.databaseId = dbAssoc["job_bl_id"];
this.job = dbAssoc["job_bl_job"]; this.job = dbAssoc["job_bl_job"];
this.subAccount = dbAssoc["job_bl_sacct"] this.subAccount = dbAssoc["job_bl_sacct"]
this.enabled = dbAssoc["job_bl_enabled"]; this.enabled = dbAssoc["job_bl_enabled"];
this.whoCreated = dbAssoc["job_bl_who_added"]; this.whoAdded = dbAssoc["job_bl_who_added"];
this.whenCreated = dbAssoc["job_bl_when_added"]; this.whenAdded = dbAssoc["job_bl_when_added"];
} }
} }
}; };
@@ -1148,7 +1148,7 @@ function givePlayerJobEquipment(client, equipmentId) {
for (let i in getJobData(jobId).equipment[equipmentId].items) { for (let i in getJobData(jobId).equipment[equipmentId].items) {
let value = getJobData(jobId).equipment[equipmentId].items[i].value let value = getJobData(jobId).equipment[equipmentId].items[i].value
if (getItemTypeData(getItemTypeIndexFromDatabaseId(getJobData(jobId).equipment[equipmentId].items[i].itemType)).useType == V_ITEM_USE_TYPE_WALKIETALKIE) { if (getItemTypeData(getItemTypeIndexFromDatabaseId(getJobData(jobId).equipment[equipmentId].items[i].itemType)).useType == V_ITEM_USE_TYPE_WALKIETALKIE) {
value = getJobData(jobId).walkieTalkieFrequency; value = getJobData(jobId).radioFrequency;
} }
let itemId = createItem(getItemTypeIndexFromDatabaseId(getJobData(jobId).equipment[equipmentId].items[i].itemType), value, V_ITEM_OWNER_PLAYER, getPlayerCurrentSubAccount(client).databaseId); let itemId = createItem(getItemTypeIndexFromDatabaseId(getJobData(jobId).equipment[equipmentId].items[i].itemType), value, V_ITEM_OWNER_PLAYER, getPlayerCurrentSubAccount(client).databaseId);
getItemData(itemId).needsSaved = false; getItemData(itemId).needsSaved = false;
@@ -1818,7 +1818,9 @@ function setPlayerJobRankCommand(command, params, client) {
} }
let targetClient = getPlayerFromParams(getParam(params, " ", 1)); let targetClient = getPlayerFromParams(getParam(params, " ", 1));
let rankIndex = getJobRankFromParams(jobIndex, params.split(" ").slice(2).join(" ")); let rankParam = getJobRankFromParams(jobIndex, params.split(" ").slice(2).join(" "));
let rankIndex = getJobRankFromParams(jobIndex, rankParam);
if (!targetClient) { if (!targetClient) {
messagePlayerError(client, getLocaleString(client, "InvalidPlayer")); messagePlayerError(client, getLocaleString(client, "InvalidPlayer"));
@@ -2763,7 +2765,7 @@ function setAllJobDataIndexes() {
// =========================================================================== // ===========================================================================
function createJobLocation(jobId, position, interior, dimension, whoCreated) { function createJobLocation(jobId, position, interior, dimension, whoAdded) {
let jobLocationData = new JobLocationData(false); let jobLocationData = new JobLocationData(false);
jobLocationData.position = position; jobLocationData.position = position;
jobLocationData.jobId = getJobData(jobId).databaseId; jobLocationData.jobId = getJobData(jobId).databaseId;
@@ -2772,8 +2774,8 @@ function createJobLocation(jobId, position, interior, dimension, whoCreated) {
jobLocationData.enabled = true; jobLocationData.enabled = true;
jobLocationData.jobIndex = jobId; jobLocationData.jobIndex = jobId;
jobLocationData.needsSaved = true; jobLocationData.needsSaved = true;
jobLocationData.whoCreated = whoCreated; jobLocationData.whoAdded = whoAdded;
jobLocationData.whenCreated = getCurrentUnixTimestamp(); jobLocationData.whenAdded = getCurrentUnixTimestamp();
getServerData().jobs[jobId].locations.push(jobLocationData); getServerData().jobs[jobId].locations.push(jobLocationData);
let newSlot = getServerData().jobs[jobId].locations.length - 1; let newSlot = getServerData().jobs[jobId].locations.length - 1;
@@ -2811,11 +2813,11 @@ function saveJobToDatabase(jobData) {
["job_colour_r", colour[0]], ["job_colour_r", colour[0]],
["job_colour_g", colour[1]], ["job_colour_g", colour[1]],
["job_colour_b", colour[2]], ["job_colour_b", colour[2]],
["job_walkietalkiefreq", jobData.walkieTalkieFrequency], ["job_radio_freq", jobData.radioFrequency],
["job_wl", jobData.whiteListEnabled], ["job_wl", jobData.whiteListEnabled],
["job_bl", jobData.blackListEnabled], ["job_bl", jobData.blackListEnabled],
["job_who_added", jobData.whoCreated], ["job_who_added", jobData.whoAdded],
["job_when_added", jobData.whenCreated], ["job_when_added", jobData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
@@ -2863,8 +2865,8 @@ function saveJobRankToDatabase(jobRankData) {
["job_rank_flags", jobRankData.flags], ["job_rank_flags", jobRankData.flags],
["job_rank_pay", jobRankData.pay], ["job_rank_pay", jobRankData.pay],
["job_rank_level", jobRankData.level], ["job_rank_level", jobRankData.level],
["job_rank_who_added", jobRankData.whoCreated], ["job_rank_who_added", jobRankData.whoAdded],
["job_rank_when_added", jobRankData.whenCreated], ["job_rank_when_added", jobRankData.whenAdded],
["job_rank_public", boolToInt(jobRankData.public)], ["job_rank_public", boolToInt(jobRankData.public)],
]; ];
@@ -2930,8 +2932,8 @@ function saveJobRouteToDatabase(jobRouteData) {
["job_route_loc_goto_msg", safeLocationNextMessage], ["job_route_loc_goto_msg", safeLocationNextMessage],
["job_route_pay", jobRouteData.pay], ["job_route_pay", jobRouteData.pay],
["job_route_detail", jobRouteData.detail], ["job_route_detail", jobRouteData.detail],
["job_route_who_added", jobRouteData.whoCreated], ["job_route_who_added", jobRouteData.whoAdded],
["job_route_when_added", jobRouteData.whenCreated], ["job_route_when_added", jobRouteData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
@@ -2987,8 +2989,8 @@ function saveJobRouteLocationToDatabase(jobRouteLocationData) {
["job_route_loc_z", jobRouteLocationData.position.z], ["job_route_loc_z", jobRouteLocationData.position.z],
["job_route_loc_pay", jobRouteLocationData.pay], ["job_route_loc_pay", jobRouteLocationData.pay],
["job_route_loc_delay", jobRouteLocationData.stopDelay], ["job_route_loc_delay", jobRouteLocationData.stopDelay],
["job_route_loc_who_added", jobRouteLocationData.whoCreated], ["job_route_loc_who_added", jobRouteLocationData.whoAdded],
["job_route_loc_when_added", jobRouteLocationData.whenCreated], ["job_route_loc_when_added", jobRouteLocationData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
@@ -3042,8 +3044,8 @@ function saveJobLocationToDatabase(jobLocationData) {
["job_loc_pos_z", jobLocationData.position.z], ["job_loc_pos_z", jobLocationData.position.z],
["job_loc_int", jobLocationData.interior], ["job_loc_int", jobLocationData.interior],
["job_loc_vw", jobLocationData.dimension], ["job_loc_vw", jobLocationData.dimension],
["job_loc_who_added", jobLocationData.whoCreated], ["job_loc_who_added", jobLocationData.whoAdded],
["job_loc_when_added", jobLocationData.whenCreated], ["job_loc_when_added", jobLocationData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
@@ -3097,12 +3099,12 @@ function saveJobEquipmentToDatabase(jobEquipmentData) {
["job_equip_enabled", boolToInt(jobEquipmentData.enabled)], ["job_equip_enabled", boolToInt(jobEquipmentData.enabled)],
["job_equip_minrank", jobLocationData.requiredRank], ["job_equip_minrank", jobLocationData.requiredRank],
["job_equip_name", safeName], ["job_equip_name", safeName],
["job_equip_who_added", jobEquipmentData.whoCreated], ["job_equip_who_added", jobEquipmentData.whoAdded],
["job_equip_when_added", jobEquipmentData.whenCreated], ["job_equip_when_added", jobEquipmentData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
if (tempJobRouteData.databaseId == 0) { if (jobEquipmentData.databaseId == 0) {
let queryString = createDatabaseInsertQuery("job_equip", data); let queryString = createDatabaseInsertQuery("job_equip", data);
dbQuery = queryDatabase(dbConnection, queryString); dbQuery = queryDatabase(dbConnection, queryString);
jobEquipmentData.databaseId = getDatabaseInsertId(dbConnection); jobEquipmentData.databaseId = getDatabaseInsertId(dbConnection);
@@ -3150,12 +3152,12 @@ function saveJobEquipmentItemToDatabase(jobEquipmentItemData) {
["job_equip_item_enabled", boolToInt(jobEquipmentItemData.enabled)], ["job_equip_item_enabled", boolToInt(jobEquipmentItemData.enabled)],
["job_equip_item_type", jobEquipmentItemData.itemType], ["job_equip_item_type", jobEquipmentItemData.itemType],
["job_equip_item_value", jobEquipmentItemData.value], ["job_equip_item_value", jobEquipmentItemData.value],
["job_equip_item_who_added", jobEquipmentItemData.whoCreated], ["job_equip_item_who_added", jobEquipmentItemData.whoAdded],
["job_equip_item_when_added", jobEquipmentItemData.whenCreated], ["job_equip_item_when_added", jobEquipmentItemData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
if (tempJobRouteData.databaseId == 0) { if (jobEquipmentItemData.databaseId == 0) {
let queryString = createDatabaseInsertQuery("job_equip_item", data); let queryString = createDatabaseInsertQuery("job_equip_item", data);
dbQuery = queryDatabase(dbConnection, queryString); dbQuery = queryDatabase(dbConnection, queryString);
jobEquipmentItemData.databaseId = getDatabaseInsertId(dbConnection); jobEquipmentItemData.databaseId = getDatabaseInsertId(dbConnection);
@@ -3199,17 +3201,17 @@ function saveJobUniformToDatabase(jobUniformData) {
if (dbConnection) { if (dbConnection) {
let safeName = escapeDatabaseString(dbConnection, jobUniformData.name); let safeName = escapeDatabaseString(dbConnection, jobUniformData.name);
let data = [ let data = [
["job_uniform_job", jobUniformData.jobId], ["job_uniform_job", jobUniformData.job],
["job_uniform_enabled", boolToInt(jobUniformData.enabled)], ["job_uniform_enabled", boolToInt(jobUniformData.enabled)],
["job_uniform_minrank", jobUniformData.requiredRank], ["job_uniform_minrank", jobUniformData.requiredRank],
["job_uniform_name", safeName], ["job_uniform_name", safeName],
["job_uniform_model", jobUniformData.skin], ["job_uniform_skin", jobUniformData.skin],
["job_uniform_who_added", jobUniformData.whoCreated], ["job_uniform_who_added", jobUniformData.whoAdded],
["job_uniform_when_added", jobUniformData.whenCreated], ["job_uniform_when_added", jobUniformData.whenAdded],
]; ];
let dbQuery = null; let dbQuery = null;
if (tempJobRouteData.databaseId == 0) { if (jobUniformData.databaseId == 0) {
let queryString = createDatabaseInsertQuery("job_uniform", data); let queryString = createDatabaseInsertQuery("job_uniform", data);
dbQuery = queryDatabase(dbConnection, queryString); dbQuery = queryDatabase(dbConnection, queryString);
jobUniformData.databaseId = getDatabaseInsertId(dbConnection); jobUniformData.databaseId = getDatabaseInsertId(dbConnection);
@@ -3686,14 +3688,14 @@ function createJobUniformCommand(command, params, client) {
return false; return false;
} }
createJobUniform(jobId, skinIndex); createJobUniform(jobId, skinIndex, getPlayerData(client).accountData.databaseId);
messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} created uniform with skin {ALTCOLOUR}${getSkinNameFromIndex(skinIndex)} (${getGameConfig().skins[getGame()][skinIndex][0]}){MAINCOLOUR} for job {jobYellow}${getJobData(jobId).name}`); messageAdmins(`{adminOrange}${getPlayerName(client)}{MAINCOLOUR} created uniform with skin {ALTCOLOUR}${getSkinNameFromIndex(skinIndex)} (${getGameConfig().skins[getGame()][skinIndex][0]}){MAINCOLOUR} for job {jobYellow}${getJobData(jobId).name}`);
return true; return true;
} }
// =========================================================================== // ===========================================================================
function createJobRoute(routeName, closestJobLocation, whoCreated = defaultNoAccountId) { function createJobRoute(routeName, closestJobLocation, whoAdded = defaultNoAccountId) {
let tempJobRouteData = new JobRouteData(false); let tempJobRouteData = new JobRouteData(false);
tempJobRouteData.name = routeName; tempJobRouteData.name = routeName;
tempJobRouteData.jobId = closestJobLocation.jobId; tempJobRouteData.jobId = closestJobLocation.jobId;
@@ -3708,8 +3710,8 @@ function createJobRoute(routeName, closestJobLocation, whoCreated = defaultNoAcc
tempJobRouteData.finishMessage = `You have finished the {ALTCOLOUR}{JOBROUTENAME}{MAINCOLOUR} route and {ALTCOLOUR}{JOBROUTEPAY}{MAINCOLOUR} has been added to your next paycheck!`; tempJobRouteData.finishMessage = `You have finished the {ALTCOLOUR}{JOBROUTENAME}{MAINCOLOUR} route and {ALTCOLOUR}{JOBROUTEPAY}{MAINCOLOUR} has been added to your next paycheck!`;
tempJobRouteData.locationArriveMessage = `You arrived at a stop.`; tempJobRouteData.locationArriveMessage = `You arrived at a stop.`;
tempJobRouteData.locationGotoMessage = `Drive to the next stop.`; tempJobRouteData.locationGotoMessage = `Drive to the next stop.`;
tempJobRouteData.whoCreated = whoCreated; tempJobRouteData.whoAdded = whoAdded;
tempJobRouteData.whenCreated = getCurrentUnixTimestamp(); tempJobRouteData.whenAdded = getCurrentUnixTimestamp();
let routeId = getJobData(closestJobLocation.jobIndex).routes.push(tempJobRouteData); let routeId = getJobData(closestJobLocation.jobIndex).routes.push(tempJobRouteData);
saveJobRouteToDatabase(tempJobRouteData); saveJobRouteToDatabase(tempJobRouteData);
@@ -3719,7 +3721,7 @@ function createJobRoute(routeName, closestJobLocation, whoCreated = defaultNoAcc
// =========================================================================== // ===========================================================================
function createJobRouteLocation(routeLocationName, position, jobRouteData, whoCreated = defaultNoAccountId, delay = 0, arriveMessage = "", gotoMessage = "", type = V_JOB_ROUTE_LOC_TYPE_NONE) { function createJobRouteLocation(routeLocationName, position, jobRouteData, whoAdded = defaultNoAccountId, delay = 0, arriveMessage = "", gotoMessage = "", type = V_JOB_ROUTE_LOC_TYPE_NONE) {
let tempJobRouteLocationData = new JobRouteLocationData(false); let tempJobRouteLocationData = new JobRouteLocationData(false);
tempJobRouteLocationData.name = routeLocationName; tempJobRouteLocationData.name = routeLocationName;
tempJobRouteLocationData.routeId = jobRouteData.databaseId; tempJobRouteLocationData.routeId = jobRouteData.databaseId;
@@ -3731,8 +3733,8 @@ function createJobRouteLocation(routeLocationName, position, jobRouteData, whoCr
tempJobRouteLocationData.arriveMessage = arriveMessage; tempJobRouteLocationData.arriveMessage = arriveMessage;
tempJobRouteLocationData.gotoMessage = gotoMessage; tempJobRouteLocationData.gotoMessage = gotoMessage;
tempJobRouteLocationData.type = type; tempJobRouteLocationData.type = type;
tempJobRouteLocationData.whoCreated = whoCreated; tempJobRouteLocationData.whoAdded = whoAdded;
tempJobRouteLocationData.whenCreated = getCurrentUnixTimestamp(); tempJobRouteLocationData.whenAdded = getCurrentUnixTimestamp();
getJobData(jobRouteData.jobIndex).routes[jobRouteData.index].locations.push(tempJobRouteLocationData); getJobData(jobRouteData.jobIndex).routes[jobRouteData.index].locations.push(tempJobRouteLocationData);
//saveJobRouteLocationToDatabase(tempJobRouteLocationData); //saveJobRouteLocationToDatabase(tempJobRouteLocationData);
@@ -3741,13 +3743,16 @@ function createJobRouteLocation(routeLocationName, position, jobRouteData, whoCr
// =========================================================================== // ===========================================================================
function createJobUniform(jobId, skinIndex) { function createJobUniform(jobId, skinIndex, whoAdded = defaultNoAccountId) {
let tempJobUniformData = new JobUniformData(false); let tempJobUniformData = new JobUniformData(false);
tempJobUniformData.skin = skinIndex; tempJobUniformData.skin = skinIndex;
tempJobUniformData.jobIndex = jobId; tempJobUniformData.jobIndex = jobId;
tempJobUniformData.job = getJobData(jobId).databaseId; tempJobUniformData.job = getJobData(jobId).databaseId;
tempJobUniformData.name = getGameConfig().skins[getGame()][skinIndex][1]; tempJobUniformData.name = getGameConfig().skins[getGame()][skinIndex][1];
tempJobUniformData.whoAdded = whoAdded;
tempJobUniformData.whenAdded = getCurrentUnixTimestamp();
tempJobUniformData.needsSaved = true; tempJobUniformData.needsSaved = true;
tempJobUniformData.enabled = true;
getJobData(jobId).uniforms.push(tempJobUniformData); getJobData(jobId).uniforms.push(tempJobUniformData);
@@ -3822,6 +3827,11 @@ function deleteJobUniformCommand(command, params, client) {
return false; return false;
} }
if (doesPlayerHaveJobPermission(client, getJobFlagValue("ManageUniforms"))) {
messagePlayerError(client, "You can't edit job uniforms!");
return false;
}
if (isNaN(uniformIndex)) { if (isNaN(uniformIndex)) {
messagePlayerError(client, getLocaleString(client, "MustBeNumber")); messagePlayerError(client, getLocaleString(client, "MustBeNumber"));
return false; return false;
@@ -3841,6 +3851,82 @@ function deleteJobUniformCommand(command, params, client) {
// =========================================================================== // ===========================================================================
function setJobUniformMinimumRankCommand(command, params, client) {
let uniformIndex = getParam(params, " ", 1);
let newRankLevel = getParam(params, " ", 2);
if (!getJobData(jobId)) {
messagePlayerError(client, getLocaleString(client, "InvalidJob"));
return false;
}
let jobIndex = getPlayerJob(client);
if (doesPlayerHaveJobPermission(client, getJobFlagValue("ManageUniforms"))) {
messagePlayerError(client, "You can't edit job uniforms!");
return false;
}
if (isNaN(uniformIndex)) {
messagePlayerError(client, getLocaleString(client, "MustBeNumber"));
return false;
}
if (isNaN(newRankLevel)) {
messagePlayerError(client, getLocaleString(client, "MustBeNumber"));
return false;
}
if (typeof getJobData(jobId).uniforms[uniformIndex] == "undefined") {
messagePlayerError(client, getLocaleString(client, "InvalidJobUniform"));
return false;
}
if (newRankLevel < 0) {
messagePlayerError(client, "The rank can't be negative!");
return false;
}
getJobData(jobIndex).uniforms[uniformIndex].requiredRank = newRankLevel;
getJobData(jobIndex).uniforms[uniformIndex].needsSaved = true;
messagePlayerSuccess(client, `You set job uniform ${getJobUniformData(jobIndex, uniformIndex).name}'s minimum rank to ${newRankLevel}`);
}
// ===========================================================================
function setJobUniformNameCommand(command, params, client) {
let uniformIndex = getParam(params, " ", 1);
let newName = params.slice(1).join(" ");
if (!getJobData(jobId)) {
messagePlayerError(client, getLocaleString(client, "InvalidJob"));
return false;
}
let jobIndex = getPlayerJob(client);
if (doesPlayerHaveJobPermission(client, getJobFlagValue("ManageUniforms"))) {
messagePlayerError(client, "You can't edit job uniforms!");
return false;
}
if (isNaN(uniformIndex)) {
messagePlayerError(client, getLocaleString(client, "InvalidJobUniform"));
return false;
}
if (typeof getJobData(jobId).uniforms[uniformIndex] == "undefined") {
messagePlayerError(client, getLocaleString(client, "InvalidJobUniform"));
return false;
}
getJobData(jobIndex).uniforms[uniformIndex].name = newName;
getJobData(jobIndex).uniforms[uniformIndex].needsSaved = true;
messagePlayerSuccess(client, `You set job uniform ${getJobUniformData(jobIndex, uniformIndex).name}'s name to ${newName}`);
}
// ===========================================================================
function getJobFromParams(params) { function getJobFromParams(params) {
if (isNaN(params)) { if (isNaN(params)) {
for (let i in getServerData().jobs) { for (let i in getServerData().jobs) {
@@ -4315,6 +4401,31 @@ function getJobRankFromParams(jobIndex, params) {
// =========================================================================== // ===========================================================================
/**
* @param {Number} jobIndex - The job index to search uniforms for
* @param {String} params - The params to search for
* @return {Number} The data index of a matching job
*/
function getJobUniformFromParams(jobIndex, params) {
if (isNaN(params)) {
for (let i in getJobData(jobIndex).uniforms) {
if ((toLowerCase(getJobData(jobIndex).uniforms[i].name).indexOf(toLowerCase(params)) != -1)) {
return i;
}
}
} else {
for (let i in getJobData(jobIndex).uniforms) {
if (getJobData(jobIndex).uniforms[i].level == toInteger(params)) {
return i;
}
}
}
return false;
}
// ===========================================================================
function getJobRoutesCommand(command, params, client) { function getJobRoutesCommand(command, params, client) {
let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); let closestJobLocation = getClosestJobLocation(getPlayerPosition(client));
@@ -4326,7 +4437,7 @@ function getJobRoutesCommand(command, params, client) {
let jobData = getJobData(closestJobLocation.jobIndex); let jobData = getJobData(closestJobLocation.jobIndex);
let jobRoutesList = jobData.routes.map(function (r) { let jobRoutesList = jobData.routes.map(function (r) {
return `{chatBoxListIndex}${r.index}: ${(r.enabled) ? "{softGreen}" : "{softRed}"}${r.name} {ALTCOLOUR}(${r.locations.length} stops, added ${getTimeDifferenceDisplay(getCurrentUnixTimestamp(), r.whenCreated)} ago)`; return `{chatBoxListIndex}${r.index}: ${(r.enabled) ? "{softGreen}" : "{softRed}"}${r.name} {ALTCOLOUR}(${r.locations.length} stops, added ${getTimeDifferenceDisplay(getCurrentUnixTimestamp(), r.whenAdded)} ago)`;
}); });
let chunkedList = splitArrayIntoChunks(jobRoutesList, 2); let chunkedList = splitArrayIntoChunks(jobRoutesList, 2);
@@ -4368,8 +4479,8 @@ function getJobRouteInfoCommand(command, params, client) {
[`ID`, `${jobRouteData.index}/${jobRouteData.databaseId}`], [`ID`, `${jobRouteData.index}/${jobRouteData.databaseId}`],
[`Job`, `${jobData.name}`], [`Job`, `${jobData.name}`],
[`Name`, `${jobRouteData.name}`], [`Name`, `${jobRouteData.name}`],
[`Added By`, `${loadAccountFromId(jobRouteData.whoCreated).name}`], [`Added By`, `${loadAccountFromId(jobRouteData.whoAdded).name}`],
[`Added On`, `${new Date(jobRouteData.whenCreated * 1000).toLocaleDateString("en-GB")}`], [`Added On`, `${new Date(jobRouteData.whenAdded * 1000).toLocaleDateString("en-GB")}`],
[`Enabled`, `${getYesNoFromBool(jobRouteData.enabled)}`], [`Enabled`, `${getYesNoFromBool(jobRouteData.enabled)}`],
[`Stops`, `${jobRouteData.locations.length}`], [`Stops`, `${jobRouteData.locations.length}`],
[`Pay`, `${getCurrencyString(jobRouteData.pay)}`], [`Pay`, `${getCurrencyString(jobRouteData.pay)}`],
@@ -4462,4 +4573,62 @@ function jobUninviteCommand(command, params, client) {
getPlayerCurrentSubAccount(targetClient).jobRankIndex = -1; getPlayerCurrentSubAccount(targetClient).jobRankIndex = -1;
} }
// ===========================================================================
function addPlayerToJobBlackList(client, jobIndex, whoAdded = defaultNoAccountId) {
let tempJobBlackListData = new JobBlackListData(false);
tempJobBlackListData.subAccount = getPlayerCurrentSubAccount(client).databaseId;
tempJobBlackListData.jobIndex = jobIndex;
tempJobBlackListData.job = getJobData(jobIndex).databaseId;
tempJobBlackListData.whoAdded = whoAdded;
tempJobBlackListData.whenAdded = getCurrentUnixTimestamp();
tempJobBlackListData.needsSaved = true;
getJobData(jobIndex).blackList.push(tempJobBlackListData);
setAllJobDataIndexes();
}
// ===========================================================================
function addPlayerToJobWhiteList(client, jobIndex, whoAdded = defaultNoAccountId) {
let tempJobWhiteListData = new JobWhiteListData(false);
tempJobWhiteListData.subAccount = getPlayerCurrentSubAccount(client).databaseId;
tempJobWhiteListData.jobIndex = jobIndex;
tempJobWhiteListData.job = getJobData(jobIndex).databaseId;
tempJobWhiteListData.whoAdded = whoAdded;
tempJobWhiteListData.whenAdded = getCurrentUnixTimestamp();
tempJobWhiteListData.needsSaved = true;
getJobData(jobIndex).whiteList.push(tempJobWhiteListData);
setAllJobDataIndexes();
}
// ===========================================================================
function removePlayerFromJobBlackList(client, jobIndex, whoDeleted = defaultNoAccountId) {
quickDatabaseQuery(`UPDATE job_bl SET job_bl_deleted = 1, job_bl_who_deleted = ${whoDeleted}, job_bl_when_deleted = UNIX_TIMESTAMP() WHERE job_bl_sacct = ${getPlayerCurrentSubAccount(client).databaseId}`)
for (let i in getServerData().jobs[jobIndex].blackList) {
if (getServerData().jobs[jobIndex].blackList[i].subAccount == getPlayerCurrentSubAccount(client).databaseId) {
getServerData().jobs[jobIndex].splice(i, 1);
}
}
setAllJobDataIndexes();
}
// ===========================================================================
function removePlayerFromJobWhiteList(client, jobIndex, whoDeleted = defaultNoAccountId) {
quickDatabaseQuery(`UPDATE job_wl SET job_wl_deleted = 1, job_wl_who_deleted = ${whoDeleted}, job_wl_when_deleted = UNIX_TIMESTAMP() WHERE job_wl_sacct = ${getPlayerCurrentSubAccount(client).databaseId}`)
for (let i in getServerData().jobs[jobIndex].whiteList) {
if (getServerData().jobs[jobIndex].whiteList[i].subAccount == getPlayerCurrentSubAccount(client).databaseId) {
getServerData().jobs[jobIndex].splice(i, 1);
}
}
setAllJobDataIndexes();
}
// =========================================================================== // ===========================================================================

View File

@@ -62,8 +62,19 @@ function getPlayerPosition(client) {
if (!areServerElementsSupported()) { if (!areServerElementsSupported()) {
return getPlayerData(client).syncPosition; return getPlayerData(client).syncPosition;
} else { } else {
if (getPlayerPed(client) != null) { // Check if Mafia 1, player position is bugged when in a vehicle
return getPlayerPed(client).position; if (getGame() == V_GAME_MAFIA_ONE) {
if (isPlayerInAnyVehicle(client)) {
return getPlayerVehicle(client).position;
} else {
return getPlayerPed(client).position;
}
} else {
if (getPlayerPed(client) != null) {
return getPlayerPed(client).position;
} else {
return toVector3(0.0, 0.0, 0.0);
}
} }
} }
} }
@@ -166,6 +177,10 @@ function isPlayerInAnyVehicle(client) {
if (!areServerElementsSupported()) { if (!areServerElementsSupported()) {
return (getPlayerData().syncVehicle != null); return (getPlayerData().syncVehicle != null);
} else { } else {
if (getPlayerPed(client) == null) {
return false;
}
return (getPlayerPed(client).vehicle != null); return (getPlayerPed(client).vehicle != null);
} }
} }

View File

@@ -219,14 +219,14 @@ function callPayPhoneCommand(command, params, client) {
} }
if (getPlayerData(targetClient).usingPayPhone != -1 || isPlayerRestrained(targetClient) || isPlayerSurrendered(targetClient) || isPlayerMuted(targetClient) || !isPlayerSpawned(targetClient)) { if (getPlayerData(targetClient).usingPayPhone != -1 || isPlayerRestrained(targetClient) || isPlayerSurrendered(targetClient) || isPlayerMuted(targetClient) || !isPlayerSpawned(targetClient)) {
messagePlayerError(client, getLocaleString(client, "UnableToCallPlayer")); messagePlayerError(client, getLocaleString(client, "UnableToCallPlayer", getCharacterFullName(targetClient)));
return false; return false;
} }
let closestPayPhoneTarget = getClosestPayPhone(getPlayerPosition(targetClient)); let closestPayPhoneTarget = getClosestPayPhone(getPlayerPosition(targetClient));
if (closestPayPhoneTarget == closestPayPhone) { if (closestPayPhoneTarget == closestPayPhone) {
messagePlayerError(client, getLocaleString(client, "UnableToCallPlayer")); messagePlayerError(client, getLocaleString(client, "UnableToCallPlayer", getCharacterFullName(targetClient)));
return false; return false;
} }

View File

@@ -329,4 +329,146 @@ function getRadioStationData(radioStationIndex) {
return getServerData().radioStations[radioStationIndex]; return getServerData().radioStations[radioStationIndex];
} }
// ===========================================================================
function radioTransmitCommand(command, params, client) {
let possibleRadio = getPlayerFirstItemSlotByUseType(client, V_ITEM_USE_TYPE_WALKIETALKIE);
let frequency = -1;
if (possibleRadio != -1) {
if (getItemData(possibleRadio).enabled) {
frequency = getItemData(possibleRadio).value;
}
} else {
let vehicle = null;
if (isPlayerInAnyVehicle(client)) {
vehicle = getPlayerVehicle(client);
} else {
let tempVehicle = getClosestVehicle(getPlayerPosition(client));
if (getDistance(getPlayerPosition(client), getVehiclePosition(tempVehicle)) <= getGlobalConfig().vehicleTrunkDistance) {
vehicle = tempVehicle;
}
}
if (vehicle == null) {
messagePlayerError(client, getLocaleString(client, "NoRadioToUse"));
return false;
}
if (!doesVehicleHaveTransmitRadio(vehicle)) {
messagePlayerError(client, getLocaleString(client, "NoRadioToUse"));
return false;
}
frequency = getVehicleData(vehicle).radioFrequency;
}
if (frequency == -1) {
messagePlayerError(client, getLocaleString(client, "NoRadioToUse"));
return false;
}
sendRadioTransmission(frequency, params, client);
}
// ===========================================================================
function sendRadioTransmission(frequency, messageText, sentFromClient) {
let seenClients = [];
seenClients.push(sentFromClient);
let clients = getClients();
for (let i in clients) {
if (seenClients.indexOf(clients[i]) == -1) {
if (getDistance(getPlayerPosition(clients[i]), getPlayerPosition(sentFromClient)) <= getGlobalConfig().talkDistance) {
seenClients.push(clients[i]);
messagePlayerNormal(`[#CCCCCC]${getCharacterFullName(client)} {ALTCOLOUR}(to radio): {MAINCOLOUR}${messageText}`);
}
}
}
let vehicles = getServerData().vehicles;
for (let i in vehicles) {
if (getVehicleData(vehicles[i]).radioFrequency == frequency) {
for (let j in clients) {
if (seenClients.indexOf(clients[j]) == -1) {
if (getDistance(getPlayerPosition(clients[j]), getVehiclePosition(getServerData().vehicles[j].vehicle)) <= getGlobalConfig().transmitRadioSpeakerDistance) {
seenClients.push(clients[j]);
messagePlayerNormal(clients[j], `📻 {ALTCOLOUR}(On Radio): {MAINCOLOUR}${messageText}`);
}
}
}
}
}
let items = getServerData().items;
for (let i in items) {
if (items[i].enabled) {
if (getItemTypeData(items[i].itemTypeIndex).useType == V_ITEM_USE_TYPE_WALKIETALKIE) {
if (items[i].value == frequency) {
for (let j in clients) {
if (seenClients.indexOf(clients[j]) == -1) {
if (getDistance(getPlayerPosition(clients[j], getItemPosition(i))) <= getGlobalConfig().transmitRadioSpeakerDistance) {
seenClients.push(clients[j]);
messagePlayerNormal(clients[j], `📻 {ALTCOLOUR}(On Radio): {MAINCOLOUR}${messageText}`);
}
}
}
}
}
}
}
}
// ===========================================================================
function setRadioFrequencyCommand(command, params, client) {
// Needs finished
return false;
/*
if (areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
if (isNaN(params)) {
messagePlayerError(client, ``);
return false;
}
params = toInteger(params);
if (params < 100 || params > 500) {
messagePlayerError(client, `The frequency channel must be between 100 and 500!`);
return false;
}
if (!getPlayerActiveItem(client)) {
messagePlayerError(client, `You aren't holding a walkie talkie!`);
return false;
}
if (!getItemData(getPlayerActiveItem(client))) {
messagePlayerError(client, `You aren't holding a walkie talkie!`);
return false;
}
if (getItemData(getPlayerActiveItem(client)).enabled) {
if (!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "use")) {
messagePlayerError(client, `Your walkie talkie is turned off. Press ${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "use")).key)} to turn it on`);
} else {
messagePlayerError(client, `Your walkie talkie is turned off. Type {ALTCOLOUR}/use {MAINCOLOUR}to turn it on`);
}
return false;
}
getItemData(getPlayerActiveItem(client)).value = params * 100;
messagePlayerSuccess(client, getLocaleString(client, "FrequencyChannelChanged", `Walkie Talkie`, `${getPlayerData(client).activeHotBarSlot + 1}`, `${getItemValueDisplayForItem(getPlayerActiveItem(client))}`));
*/
}
// =========================================================================== // ===========================================================================

View File

@@ -172,6 +172,7 @@ function setAllServerDataIndexes() {
setAllRaceDataIndexes(); setAllRaceDataIndexes();
setAllRadioStationIndexes(); setAllRadioStationIndexes();
setAllPayPhoneIndexes(); setAllPayPhoneIndexes();
setAllVehicleRadioTransmitFrequencies();
cacheAllGroundItems(); cacheAllGroundItems();
cacheAllBusinessItems(); cacheAllBusinessItems();
cacheAllItemItems(); cacheAllItemItems();

View File

@@ -208,8 +208,20 @@ function loadSubAccountsFromAccount(accountId) {
let clanRankIndex = getClanRankIndexFromDatabaseId(clanIndex, tempSubAccount.clanRank); let clanRankIndex = getClanRankIndexFromDatabaseId(clanIndex, tempSubAccount.clanRank);
if (!getClanRankData(clanIndex, clanRankIndex)) { if (!getClanRankData(clanIndex, clanRankIndex)) {
let newClanRankIndex = getLowestClanRank(clanIndex); let newClanRankIndex = getLowestClanRank(clanIndex);
tempSubAccount.clanRank = getClanRankData(clanIndex, newClanRankIndex).databaseId if (getClanRankData(clanIndex, newClanRankIndex) != false) {
tempSubAccount.clanRankIndex = newClanRankIndex; console.log(LOG_DEBUG | LOG_WARN, `[V.RP.SubAccount]: Clan ${clanIndex} has no rank ${tempSubAccount.clanRank}! Using lowest rank ${newClanRankIndex} instead.`);
tempSubAccount.clanRank = getClanRankData(clanIndex, newClanRankIndex).databaseId;
tempSubAccount.clanRankIndex = newClanRankIndex;
} else {
// Somethings fucked. Clan rank invalid, and no other rank to use. Removing from clan.
logToConsole(LOG_DEBUG | LOG_ERROR, `[V.RP.SubAccount]: Clan ${clanIndex} has no rank ${tempSubAccount.clanRank}, and no other rank to use. Removing from clan ...`);
tempSubAccount.clan = 0;
tempSubAccount.clanRank = 0;
tempSubAccount.clanIndex = -1;
tempSubAccount.clanRankIndex = -1;
tempSubAccount.clanTitle = "";
tempSubAccount.clanFlags = 0;
}
} else { } else {
tempSubAccount.clanRankIndex = clanRankIndex; tempSubAccount.clanRankIndex = clanRankIndex;
} }
@@ -231,7 +243,19 @@ function loadSubAccountsFromAccount(accountId) {
let jobRankIndex = getJobRankIndexFromDatabaseId(jobIndex, tempSubAccount.jobRank); let jobRankIndex = getJobRankIndexFromDatabaseId(jobIndex, tempSubAccount.jobRank);
if (!getJobRankData(jobIndex, jobRankIndex)) { if (!getJobRankData(jobIndex, jobRankIndex)) {
let newJobRankIndex = getLowestJobRank(jobIndex); let newJobRankIndex = getLowestJobRank(jobIndex);
console.log(`[V.RP.SubAccount]: Job ${jobIndex} has no rank ${tempSubAccount.jobRank}! Using lowest rank ${newJobRankIndex} instead.`); if (getJobRankData(jobIndex, newJobRankIndex) != false) {
console.log(LOG_DEBUG | LOG_WARN, `[V.RP.SubAccount]: Job ${jobIndex} has no rank ${tempSubAccount.jobRank}! Using lowest rank ${newJobRankIndex} instead.`);
tempSubAccount.jobRank = getJobRankData(jobIndex, newJobRankIndex).databaseId;
tempSubAccount.jobRankIndex = newJobRankIndex;
} else {
// Somethings fucked. Job rank invalid, and no other rank to use. Removing from Job.
logToConsole(LOG_DEBUG | LOG_ERROR, `[V.RP.SubAccount]: Job ${jobIndex} has no rank ${tempSubAccount.jobRank}, and no other rank to use. Removing from job ...`);
tempSubAccount.job = 0;
tempSubAccount.jobRank = 0;
tempSubAccount.jobIndex = -1;
tempSubAccount.jobRankIndex = -1;
}
tempSubAccount.jobRank = getJobRankData(jobIndex, newJobRankIndex).databaseId; tempSubAccount.jobRank = getJobRankData(jobIndex, newJobRankIndex).databaseId;
tempSubAccount.jobRankIndex = newJobRankIndex; tempSubAccount.jobRankIndex = newJobRankIndex;
} else { } else {

View File

@@ -87,6 +87,7 @@ class VehicleData {
this.whoAdded = 0; this.whoAdded = 0;
this.whenAdded = 0; this.whenAdded = 0;
this.licensePlate = ""; this.licensePlate = "";
this.radioFrequency = -1;
this.lastActiveTime = false; this.lastActiveTime = false;
@@ -160,6 +161,9 @@ class VehicleData {
this.whenAdded = toInteger(dbAssoc["veh_when_added"]); this.whenAdded = toInteger(dbAssoc["veh_when_added"]);
this.licensePlate = toInteger(dbAssoc["veh_license_plate"]); this.licensePlate = toInteger(dbAssoc["veh_license_plate"]);
this.rank = toInteger(dbAssoc["veh_rank"]); this.rank = toInteger(dbAssoc["veh_rank"]);
this.radioFrequency = toInteger(dbAssoc["veh_radio_freq"]);
this.whoAdded = toInteger(dbAssoc["veh_who_added"]);
this.whenAdded = toInteger(dbAssoc["veh_when_added"]);
} }
} }
}; };
@@ -1988,4 +1992,36 @@ function getVehicleDataIndexFromVehicle(vehicle) {
return -1; return -1;
} }
// ===========================================================================
function doesVehicleHaveTransmitRadio(vehicle) {
if (getVehicleData(vehicle).ownerType == V_VEHOWNER_JOB) {
if (getJobType(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)) == V_JOB_POLICE) {
return true;
}
if (getJobType(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)) == V_JOB_FIRE) {
return true;
}
if (getJobType(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)) == V_JOB_MEDICAL) {
return true;
}
}
return false;
}
// ===========================================================================
function setAllVehicleRadioTransmitFrequencies() {
for (let i in getServerData().vehicles) {
if (getServerData().vehicles[i].ownerType == V_VEHOWNER_JOB) {
if (getJobData(getJobIdFromDatabaseId(getServerData().vehicles[i].ownerId)) != false) {
getServerData().vehicles[i].radioFrequency = getJobData(getJobIdFromDatabaseId(getServerData().vehicles[i].ownerId)).radioFrequency;
}
}
}
}
// =========================================================================== // ===========================================================================