Help with gamemode change?
#1

Hello,

I have a problem with my gamemode (.pwn and .amx), when i want to change the name and saved it in .pwn and .amx and want to plane, the server says: Lost Connection to the server. Reconnecting.. and again and again..

PHP код:
// Make sure you don't get warnings about tabsize
#pragma tabsize 0
// ********************************************************************************************************************
// Set default gamemode name
// ********************************************************************************************************************
#define GameModeName                "PowerPC603's Trucking Server"
// ********************************************************************************************************************
// Limit the amount of cops with a value greater than 0
// Setting this to "3" would mean:
// - having 3 normal players (non-cop players) before the first cop can join the server
// - having 6 normal players before 2 cops can be active
// - having 9 normal players before the third cop can join and so on
// Leaving this at 0 disables the police-limitation, so anyone can choose the police class anytime
// ********************************************************************************************************************
new PlayersBeforePolice    0;
// ********************************************************************************************************************
// ********************************************************************************************************************
// Include default files
#include <a_samp>
#include <zcmd>
#include <dutils>
#include <sscanf2>
#include <streamer>
// Include all define-statements and custom-type declarations and the arrays which use them
// These files need to be included before the functions get included, because the functions use the defines, custom types and the arrays
// Also include the defined loads (for truckers, military, mafia, ...) and locations arrays
#include <PPC_DefTexts>
#include <PPC_ServerSettings>
#include <PPC_Defines>
#include <PPC_DefLocations>
#include <PPC_DefLoads>
#include <PPC_DefCars>
#include <PPC_DefPlanes>
#include <PPC_DefTrailers>
#include <PPC_DefBuyableVehicles>
// Include functions for this gamemode
#include <PPC_GlobalTimer>
#include <PPC_Common>
#include <PPC_Housing>
#include <PPC_Business>
#include <PPC_GameModeInit>
#include <PPC_FileOperations>
#include <PPC_Speedometer>
#include <PPC_MissionsTrucking>
#include <PPC_MissionsBus>
#include <PPC_MissionsPilot>
#include <PPC_MissionsPolice>
#include <PPC_MissionsMafia>
#include <PPC_MissionsAssistance>
#include <PPC_MissionsCourier>
#include <PPC_MissionsRoadworker>
#include <PPC_Convoys>
#include <PPC_Dialogs>
#include <PPC_PlayerCommands>
#include <PPC_Toll>
// The main function (used only once when the server loads)
main()
{
    
// Print some standard lines to the server's console
    
print("\n----------------------------------");
    print(
GameModeName);
    print(
"----------------------------------\n");
}
// This callback gets called when the server initializes the gamemode
public OnGameModeInit()
{
    new 
HostCommand[128];
    
// Change the hostname
    
format(HostCommand128"hostname %s"GameModeName);
    
SendRconCommand(HostCommand);
    
SetGameModeText(GameModeName); // Set the Mode of the gamemode, which appears in the list of servers
    
GameModeInit_VehiclesPickups(); // Add all static vehicles and pickups when the server starts that are required (also load the houses)
    
GameModeInit_Classes(); // Add character models to the class-selection (without weapons)
    
Convoys_Init(); // Setup textdraws and default data for convoys
    
ShowPlayerMarkers(1); // Show players on the entire map (and on the radar)
    
ShowNameTags(1); // Show player names (and health) above their head
    
ManualVehicleEngineAndLights(); // Let the server control the vehicle's engine and lights
    
EnableStuntBonusForAll(0); // Disable stunt bonus for all players
    
DisableInteriorEnterExits(); // Removes all building-entrances in the game
    
UsePlayerPedAnims(); // Use CJ's walking animation
    // Start the timer that will show timed messages every 2 minutes
    
SetTimer("Timer_TimedMessages"1000 60 2true);
    
// Start the timer that will show a random bonus mission for truckers every 5 minutes
    
SetTimer("ShowRandomBonusMission"1000 60 5true);
    
// Start the timer that checks the toll-gates
    
SetTimer("Toll"1000true);
    
// Fix the bugged houses (after fixing the houses, you can remove this line, as it's not needed anymore)
    
FixHouses();
    
// While the gamemode starts, start the global timer, and run it every second
    
SetTimer("GlobalTimer"1000true);
    return 
1;
}
// This callback gets called when a player connects to the server
public OnPlayerConnect(playerid)
{
    
// Always allow NPC's to login without password or account
    
if (IsPlayerNPC(playerid))
        return 
1;
    
// Setup local variables
    
new Name[MAX_PLAYER_NAME], NewPlayerMsg[128], HouseID;
    
// Setup a PVar to allow cross-script money-transfers (only from filterscript to this mainscript) and scorepoints
    
SetPVarInt(playerid"PVarMoney"0);
    
SetPVarInt(playerid"PVarScore"0);
    
// Get the playername
    
GetPlayerName(playeridNamesizeof(Name));
    
// Also store this name for the player
    
GetPlayerName(playeridAPlayerData[playerid][PlayerName], 24);
    
// Send a message to all players to let them know somebody else joined the server
    
format(NewPlayerMsg128TXT_PlayerJoinedServerNameplayerid);
    
SendClientMessageToAll(0xFFFFFFFFNewPlayerMsg);
    
// Try to load the player's datafile ("PlayerFile_Load" returns "1" is the file has been read, "0" when the file cannot be read)
    
if (PlayerFile_Load(playerid) == 1)
    {
        
// Check if the player is still banned
        
if (APlayerData[playerid][BanTime] < gettime()) // Player ban-time is passed
            
ShowPlayerDialog(playeridDialogLoginDIALOG_STYLE_INPUTTXT_DialogLoginTitleTXT_DialogLoginMsgTXT_DialogLoginButton1TXT_DialogButtonCancel);
        else 
// Player is still banned
        
{
            
ShowRemainingBanTime(playerid); // Show the remaining ban-time to the player is days, hours, minutes, seconds
            
Kick(playerid); // Kick the player
        
}
    }
    else
        
ShowPlayerDialog(playeridDialogRegisterDIALOG_STYLE_INPUTTXT_DialogRegisterTitleTXT_DialogRegisterMsgTXT_DialogRegisterButton1TXT_DialogButtonCancel);
    
// The houses have been loaded but not the cars, so load all vehicles assigned to the player's houses
    
for (new HouseSlotHouseSlot MAX_HOUSESPERPLAYERHouseSlot++)
    {
        
// Get the HouseID from this slot
        
HouseID APlayerData[playerid][Houses][HouseSlot];
        
// Check if there is a house in this slot
        
if (HouseID != 0)
            
HouseFile_Load(HouseIDtrue); // Load the cars of the house
    
}
    
// Speedometer setup
    
Speedometer_Setup(playerid);
    
// MissionText TextDraw setup
    
APlayerData[playerid][MissionText] = TextDrawCreate(320.0430.0" "); // Setup the missiontext at the bottom of the screen
    
TextDrawAlignment(APlayerData[playerid][MissionText], 2); // Align the missiontext to the center
    
TextDrawUseBox(APlayerData[playerid][MissionText], 1); // Set the missiontext to display inside a box
    
TextDrawBoxColor(APlayerData[playerid][MissionText], 0x00000066); // Set the box color of the missiontext
    // Display a message if the player hasn't accepted the rules yet
    
if (APlayerData[playerid][RulesRead] == false)
        
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You haven't accepted the {FFFF00}/rules{FF0000} yet");
    return 
1;
}
// This function shows the player how long his ban still is when he tries to login (in days, hours, minutes, seconds)
ShowRemainingBanTime(playerid)
{
    
// Setup local variables
    
new TotalBanTimeDaysHoursMinutesSecondsMsg[128];
    
// Get the total ban-time
    
TotalBanTime APlayerData[playerid][BanTime] - gettime();
    
// Calculate days
    
if (TotalBanTime >= 86400)
    {
        
Days TotalBanTime 86400;
        
TotalBanTime TotalBanTime - (Days 86400);
    }
    
// Calculate hours
    
if (TotalBanTime >= 3600)
    {
        
Hours TotalBanTime 3600;
        
TotalBanTime TotalBanTime - (Hours 3600);
    }
    
// Calculate minutes
    
if (TotalBanTime >= 60)
    {
        
Minutes TotalBanTime 60;
        
TotalBanTime TotalBanTime - (Minutes 60);
    }
    
// Calculate seconds
    
Seconds TotalBanTime;
    
// Display the remaining ban-time for this player
    
SendClientMessage(playerid0xFFFFFFFFTXT_StillBanned);
    
format(Msg128TXT_BannedDurationDaysHoursMinutesSeconds);
    
SendClientMessage(playerid0xFFFFFFFFMsg);
}
// This callback gets called when a player disconnects from the server
public OnPlayerDisconnect(playeridreason)
{
    
// Always allow NPC's to logout without password or account
    
if (IsPlayerNPC(playerid))
        return 
1;
    
// Setup local variables
    
new Name[24], Msg[128], HouseID;
    
// Get the playername
    
GetPlayerName(playeridNamesizeof(Name));
    
// Stop spectate mode for all players who are spectating this player
    
for (new iMAX_PLAYERSi++)
        if (
IsPlayerConnected(i)) // Check if the player is connected
            
if (GetPlayerState(i) == PLAYER_STATE_SPECTATING// Check if this player is spectating somebody
                
if (APlayerData[i][SpectateID] == playerid// Check if this player is spectating me
                   
{
                    
TogglePlayerSpectating(i0); // Turn off spectate-mode
                    
APlayerData[i][SpectateID] = INVALID_PLAYER_ID;
                    
APlayerData[i][SpectateType] = ADMIN_SPEC_TYPE_NONE;
                    
SendClientMessage(i0xFFFFFFFF"{FF0000}Target player has logged off, ending spectate mode");
                }
    
// Send a message to all players to let them know somebody left the server
    
format(Msg128TXT_PlayerLeftServerNameplayerid);
    
SendClientMessageToAll(0xFFFFFFFFMsg);
    
// If the player entered a proper password (the player has an account)
    
if (strlen(APlayerData[playerid][PlayerPassword]) != 0)
    {
        
// Save the player data and his houses
        
PlayerFile_Save(playerid);
    }
    
// Stop any job that may have started (this also clears all mission data)
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassTruckDriverTrucker_EndJob(playerid); // Stop any trucker job
        
case ClassBusDriverBusDriver_EndJob(playerid); // Stop any busdriver job
        
case ClassPilotPilot_EndJob(playerid); // Stop any pilot job
        
case ClassPolicePolice_EndJob(playerid); // Stop any police job
        
case ClassMafiaMafia_EndJob(playerid); // Stop any mafia job
        
case ClassAssistanceAssistance_EndJob(playerid);
        case 
ClassRoadWorkerRoadworker_EndJob(playerid);
    }
    
// If the player is part of a convoy, kick him from it
    
Convoy_Leave(playerid);
    
// Unload all the player's house-vehicles to make room for other player's vehicles
    
for (new HouseSlotHouseSlot MAX_HOUSESPERPLAYERHouseSlot++)
    {
        
// Get the HouseID from this slot
        
HouseID APlayerData[playerid][Houses][HouseSlot];
        
// Check if there is a house in this slot
        
if (HouseID != 0)
        {
            
// Unload the cars of the house
            
House_RemoveVehicles(HouseID);
            
// Set the house so it cannot be entered by anyone (close the house)
            
AHouseData[HouseID][HouseOpened] = false;
        }
    }
    
// Clear the data in the APlayerData array to make sure the next player with the same id doesn't hold wrong data
    
APlayerData[playerid][SpectateID] = -1;
    
APlayerData[playerid][SpectateVehicle] = -1;
    
APlayerData[playerid][SpectateType] = ADMIN_SPEC_TYPE_NONE;
    
APlayerData[playerid][LoggedIn] = false;
    
APlayerData[playerid][AssistanceNeeded] = false;
    
APlayerData[playerid][PlayerPassword] = 0;
    
APlayerData[playerid][PlayerLevel] = 0;
    
APlayerData[playerid][PlayerJailed] = 0;
    
APlayerData[playerid][PlayerFrozen] = 0// Clearing this variable automatically kills the frozentimer
    
APlayerData[playerid][Bans] = 0;
    
APlayerData[playerid][BanTime] = 0;
    
APlayerData[playerid][Muted] = false;
    
APlayerData[playerid][RulesRead] = false;
    
APlayerData[playerid][AutoReportTime] = 0;
    
APlayerData[playerid][TruckerLicense] = 0;
    
APlayerData[playerid][BusLicense] = 0;
    
APlayerData[playerid][PlayerClass] = 0;
    
APlayerData[playerid][Warnings] = 0;
    
APlayerData[playerid][PlayerMoney] = 0;
    
APlayerData[playerid][PlayerScore] = 0;
    for (new 
HouseSlotHouseSlot MAX_HOUSESPERPLAYERHouseSlot++)
        
APlayerData[playerid][Houses][HouseSlot] = 0;
    for (new 
BusSlotBusSlot MAX_BUSINESSPERPLAYERBusSlot++)
        
APlayerData[playerid][Business][BusSlot] = 0;
    
APlayerData[playerid][CurrentHouse] = 0;
    
// Clear bank account info
    
APlayerData[playerid][BankPassword] = 0;
    
APlayerData[playerid][BankLoggedIn] = false;
    
APlayerData[playerid][BankMoney] = 0;
    
// Clear stats
    
APlayerData[playerid][StatsTruckerJobs] = 0;
    
APlayerData[playerid][StatsConvoyJobs] = 0;
    
APlayerData[playerid][StatsBusDriverJobs] = 0;
    
APlayerData[playerid][StatsPilotJobs] = 0;
    
APlayerData[playerid][StatsMafiaJobs] = 0;
    
APlayerData[playerid][StatsMafiaStolen] = 0;
    
APlayerData[playerid][StatsPoliceFined] = 0;
    
APlayerData[playerid][StatsPoliceJailed] = 0;
    
APlayerData[playerid][StatsCourierJobs] = 0;
    
APlayerData[playerid][StatsRoadworkerJobs] = 0;
    
APlayerData[playerid][StatsAssistance] = 0;
    
APlayerData[playerid][StatsMetersDriven] = 0.0;
    
// Clear police warnings
    
APlayerData[playerid][PoliceCanJailMe] = false;
    
APlayerData[playerid][PoliceWarnedMe] = false;
    
APlayerData[playerid][Value_PoliceCanJailMe] = 0;
    
// Make sure the jailtimer has been destroyed
    
KillTimer(APlayerData[playerid][PlayerJailedTimer]);
    
KillTimer(APlayerData[playerid][Timer_PoliceCanJailMe]);
    
// Destroy the speedometer TextDraw for this player and the timer, also set the speed to 0
    
Speedometer_Cleanup(playerid);
    
// Also destroy the missiontext TextDraw for this player
    
TextDrawDestroy(APlayerData[playerid][MissionText]);
    
// Destroy a rented vehicle is the player had any
    
if (APlayerData[playerid][RentedVehicleID] != 0)
    {
        
// Clear the data for the already rented vehicle
        
AVehicleData[APlayerData[playerid][RentedVehicleID]][Model] = 0;
        
AVehicleData[APlayerData[playerid][RentedVehicleID]][Fuel] = 0;
        
AVehicleData[APlayerData[playerid][RentedVehicleID]][Owned] = false;
        
AVehicleData[APlayerData[playerid][RentedVehicleID]][Owner] = 0;
        
AVehicleData[APlayerData[playerid][RentedVehicleID]][PaintJob] = 0;
        for (new 
j14j++)
        {
            
AVehicleData[APlayerData[playerid][RentedVehicleID]][Components][j] = 0;
        }
        
// Destroy the vehicle
        
DestroyVehicle(APlayerData[playerid][RentedVehicleID]);
        
// Clear the RentedVehicleID
        
APlayerData[playerid][RentedVehicleID] = 0;
    }
    return 
1;
}
// This callback gets called whenever a player uses the chat-box
public OnPlayerText(playeridtext[])
{
    
// Block the player's text if he has been muted
    
if (APlayerData[playerid][Muted] == true)
    {
        
// Let the player know he's still muted
        
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You are still muted");
        
// Don't allow his text to be sent to the chatbox
        
return 0;
    }
    return 
1;
}
// This callback gets called when a player interacts with a dialog
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    
// Select the proper dialog to process
    
switch (dialogid)
    {
        case 
DialogRegisterDialog_Register(playeridresponseinputtext); // The "Register"-dialog
        
case DialogLoginDialog_Login(playeridresponseinputtext); // The "Login"-dialog
        
case DialogStatsOtherPlayerDialog_StatsOtherPlayer(playeridresponselistitem);
        case 
DialogStatsHouseDialog_StatsHouse(playeridresponselistitem);
        case 
DialogStatsGoHouseDialog_StatsGoHouse(playeridresponselistitem);
        case 
DialogStatsGoBusinessDialog_StatsGoBusiness(playeridresponselistitem);
        case 
DialogRescueDialog_Rescue(playeridresponselistitem); // The rescue-dialog
        
case DialogBuyLicensesDialog_BuyLicenses(playeridresponselistitem); // The license-dialog (allows the player to buy trucker/busdriver licenses)
        
case DialogRulesDialog_Rules(playeridresponse);
        case 
DialogTruckerJobMethodDialog_TruckerSelectJobMethod(playeridresponselistitem); // The work-dialog for truckers (shows the loads he can carry and lets the player choose the load)
        
case DialogTruckerSelectLoadDialog_TruckerSelectLoad(playeridresponselistitem); // The load-selection dialog for truckers (shows the startlocations for the selected load and let the player choose his startlocation)
        
case DialogTruckerStartLocDialog_TruckerSelectStartLoc(playeridresponselistitem); // The start-location dialog for truckers (shows the endlocations for the selected load and let the player choose his endlocation)
        
case DialogTruckerEndLocDialog_TruckerSelectEndLoc(playeridresponselistitem); // The end-location dialog for truckers (processes the selected endlocation and starts the job)
        
case DialogBusJobMethodDialog_BusSelectJobMethod(playeridresponselistitem); // The work-dialog for busdrivers (process the options to choose own busroute or auto-assigned busroute)
        
case DialogBusSelectRouteDialog_BusSelectRoute(playeridresponselistitem); // Choose the busroute and start the job
        
case DialogCourierSelectQuantDialog_CourierSelectQuant(playeridresponselistitem);
        case 
DialogBikeDialog_Bike(playeridresponselistitem); // The bike-dialog
        
case DialogCarDialog_Car(playeridresponselistitem); // The car-dialog (which uses a split dialog structure)
        
case DialogPlaneDialog_Plane(playeridresponselistitem); // The plane-dialog (which uses a split dialog structure)
        
case DialogTrailerDialog_Trailer(playeridresponselistitem); // The trailer-dialog (which uses a split dialog structure)
        
case DialogBoatDialog_Boat(playeridresponselistitem); // The boat-dialog
        
case DialogNeonDialog_Neon(playeridresponselistitem); // The neon-dialog
        
case DialogRentCarClassDialog_RentProcessClass(playeridresponselistitem); // The player chose a vehicleclass from where he can rent a vehicle
        
case DialogRentCarDialog_RentCar(playeridresponselistitem); // The player chose a vehicle from the list of vehicles from the vehicleclass he chose before
        
case DialogPlayerCommandsDialog_PlayerCommands(playeridresponselistitem); // Displays all commands in a split-dialog structure
        
case DialogPrimaryCarColorDialog_PrimaryCarColor(playeridresponselistitem);
        case 
DialogSedundaryCarColorDialog_SedundaryCarColor(playeridresponselistitem);
        case 
DialogWeatherDialog_Weather(playeridresponselistitem); // The weather dialog
        
case DialogCarOptionDialog_CarOption(playeridresponselistitem); // The caroption dialog
        
case DialogSelectConvoyDialog_SelectConvoy(playeridresponselistitem);
        case 
DialogHouseMenuDialog_HouseMenu(playeridresponselistitem); // Process the main housemenu
        
case DialogUpgradeHouseDialog_UpgradeHouse(playeridresponselistitem); // Process the house-upgrade menu
        
case DialogGoHomeDialog_GoHome(playeridresponselistitem); // Port to one of your houses
        
case DialogHouseNameChangeDialog_ChangeHouseName(playeridresponseinputtext); // Change the name of your house
        
case DialogSellHouseDialog_SellHouse(playeridresponse); // Sell the house
        
case DialogBuyCarClassDialog_BuyCarClass(playeridresponselistitem); // The player chose a vehicleclass from where he can buy a vehicle
        
case DialogBuyCarDialog_BuyCar(playeridresponselistitem); // The player chose a vehicle from the list of vehicles from the vehicleclass he chose before
        
case DialogSellCarDialog_SellCar(playeridresponselistitem);
        case 
DialogBuyInsuranceDialog_BuyInsurance(playeridresponse);
        case 
DialogGetCarSelectHouseDialog_GetCarSelectHouse(playeridresponselistitem);
        case 
DialogGetCarSelectCarDialog_GetCarSelectCar(playeridresponselistitem);
        case 
DialogUnclampVehiclesDialog_UnclampVehicles(playeridresponse);
        case 
DialogCreateBusSelTypeDialog_CreateBusSelType(playeridresponselistitem);
        case 
DialogBusinessMenuDialog_BusinessMenu(playeridresponselistitem);
        case 
DialogGoBusinessDialog_GoBusiness(playeridresponselistitem);
        case 
DialogBusinessNameChangeDialog_ChangeBusinessName(playeridresponseinputtext); // Change the name of your business
        
case DialogSellBusinessDialog_SellBusiness(playeridresponse); // Sell the business
        
case DialogBankPasswordRegisterDialog_BankPasswordRegister(playeridresponseinputtext);
        case 
DialogBankPasswordLoginDialog_BankPasswordLogin(playeridresponseinputtext);
        case 
DialogBankOptionsDialog_BankOptions(playeridresponselistitem);
        case 
DialogBankDepositDialog_BankDeposit(playeridresponseinputtext);
        case 
DialogBankWithdrawDialog_BankWithdraw(playeridresponseinputtext);
        case 
DialogBankTransferMoneyDialog_BankTransferMoney(playeridresponseinputtext);
        case 
DialogBankTransferNameDialog_BankTransferName(playeridresponseinputtext);
        case 
DialogBankCancelDialog_BankCancel(playeridresponse);
        case 
DialogHelpItemChosenDialog_HelpItemChosen(playeridresponselistitem);
        case 
DialogHelpItemDialog_HelpItem(playeridresponse);
        case 
DialogOldPasswordDialog_OldPassword(playeridresponseinputtext);
        case 
DialogNewPasswordDialog_NewPassword(playeridresponseinputtext);
        case 
DialogConfirmPasswordDialog_ConfirmPassword(playeridresponse);
    }
    return 
1;
}
// this callback gets called when a player clicks on another player on the scoreboard
public OnPlayerClickPlayer(playeridclickedplayeridsource)
{
    
// Check if the player is an admin of at least level 1
    
if (APlayerData[playerid][PlayerLevel] >= 1)
    {
        
// Setup local variables
        
new Name[24], DialogTitle[128], PlayerStatList[3000], PlayerIP[16], NumHousesNumBusinesses;
        
// Construct the dialog-title
        
GetPlayerName(clickedplayeridNamesizeof(Name));
        
format(DialogTitle128"Statistics of player: %s"Name);
        
// Add the IP of the player to the list
        
GetPlayerIp(clickedplayeridPlayerIPsizeof(PlayerIP));
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Player-IP: {00FF00}%s\n"PlayerStatListPlayerIP);
        
// Add the level of the player to the list
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Admin-level: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][PlayerLevel]);
        
// Add the class of the player to the list
        
switch(APlayerData[clickedplayerid][PlayerClass])
        {
            case 
ClassTruckDriverformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Trucker\n"PlayerStatList);
            case 
ClassBusDriverformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Bus driver\n"PlayerStatList);
            case 
ClassPilotformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Pilot\n"PlayerStatList);
            case 
ClassPoliceformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Police\n"PlayerStatList);
            case 
ClassMafiaformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Mafia\n"PlayerStatList);
            case 
ClassCourierformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Courier\n"PlayerStatList);
            case 
ClassAssistanceformat(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Assistance\n"PlayerStatList);
        }
        
// Add money and score of the player to the list
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Money: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][PlayerMoney]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Score: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][PlayerScore]);
        
// Add wanted-level of the player to the list
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Wanted-level: {00FF00}%i\n"PlayerStatListGetPlayerWantedLevel(clickedplayerid));
        
// Add truckerlicense and busdriver license of the player to the list
        
if (APlayerData[clickedplayerid][TruckerLicense] == 1)
            
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Trucker License: {00FF00}Yes\n"PlayerStatList);
        else
            
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Trucker License: {00FF00}No\n"PlayerStatList);
        if (
APlayerData[clickedplayerid][BusLicense] == 1)
            
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Bus License: {00FF00}Yes\n"PlayerStatList);
        else
            
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Bus License: {00FF00}No\n"PlayerStatList);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed trucker jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsTruckerJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed convoy jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsConvoyJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed busdriver jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsBusDriverJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed pilot jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsPilotJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed mafia jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsMafiaJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Stolen mafia-loads: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsMafiaStolen]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Fined players: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsPoliceFined]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Jailed players: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsPoliceJailed]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed courier jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsCourierJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Completed roadworker jobs: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsRoadworkerJobs]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Assisted players: {00FF00}%i\n"PlayerStatListAPlayerData[clickedplayerid][StatsAssistance]);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Meters driven: {00FF00}%f\n"PlayerStatListAPlayerData[clickedplayerid][StatsMetersDriven]);
        
// Count the number of houses/businesses that the player has and add them to the list
        
for (new iMAX_HOUSESPERPLAYERi++)
            if (
APlayerData[clickedplayerid][Houses][i] != 0)
                
NumHouses++;
        for (new 
iMAX_BUSINESSPERPLAYERi++)
            if (
APlayerData[clickedplayerid][Business][i] != 0)
                
NumBusinesses++;
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Houses: {00FF00}%i (double-click for stats)\n"PlayerStatListNumHouses);
        
format(PlayerStatListsizeof(PlayerStatList), "%s{FFFFFF}Businesses: {00FF00}%i (double-click for stats)\n"PlayerStatListNumBusinesses);
        
// Store the player-id of the other player so the other dialogs can display his statistics further (houses, businesses, cars)
        
APlayerData[playerid][DialogOtherPlayer] = clickedplayerid;
        
// Show the statistics of the other player
        
ShowPlayerDialog(playeridDialogStatsOtherPlayerDIALOG_STYLE_LISTDialogTitlePlayerStatListTXT_DialogButtonSelectTXT_DialogButtonCancel); // Let the player buy a license
    
}
    return 
1;
}
// This callback gets called when a player picks up any pickup
public OnPlayerPickUpPickup(playeridpickupid)
{
    
// If the player picks up the Buy_License pickup at the driving school in Doherty
    
if (pickupid == Pickup_License)
        
// Ask the player which license he wants to buy
        
ShowPlayerDialog(playeridDialogBuyLicensesDIALOG_STYLE_LISTTXT_DialogLicenseTitleTXT_DialogLicenseListTXT_DialogButtonBuyTXT_DialogButtonCancel); // Let the player buy a license
    
return 1;
}
// This callback gets called when a player spawns somewhere
public OnPlayerSpawn(playerid)
{
    
// Always allow NPC's to spawn without logging in
    
if (IsPlayerNPC(playerid))
        return 
1;
    
// Check if the player properly logged in by typing his password
    
if (APlayerData[playerid][LoggedIn] == false)
    {
        
SendClientMessage(playerid0xFFFFFFFFTXT_FailedLoginProperly);
        
Kick(playerid); // Kick the player if he didn't log in properly
    
}
    
// Setup local variables
    
new missiontext[200];
    
// Spawn the player in the global world (where everybody plays the game)
    
SetPlayerVirtualWorld(playerid0);
    
SetPlayerInterior(playerid0);
    
// Also set a variable that tracks in which house the player currently is
    
APlayerData[playerid][CurrentHouse] = 0;
    
// Disable the clock
    
TogglePlayerClock(playerid0);
    
// Delete all weapons from the player
    
ResetPlayerWeapons(playerid);
    
// Set the missiontext based on the chosen class
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassTruckDriver// Truck-driver class
        
{
            
format(missiontextsizeof(missiontext), Trucker_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassTruckDriver); // Set the playercolor (chatcolor for the player and color on the map)
        
}
        case 
ClassBusDriver// Bus-driver class
        
{
            
format(missiontextsizeof(missiontext), BusDriver_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassBusDriver); // Set the playercolor (chatcolor for the player and color on the map)
        
}
        case 
ClassPilot// Pilot class
        
{
            
format(missiontextsizeof(missiontext), Pilot_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassPilot); // Set the playercolor (chatcolor for the player and color on the map)
        
}
        case 
ClassPolice// Police class
        
{
            
format(missiontextsizeof(missiontext), Police_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassPolice); // Set the playercolor (chatcolor for the player and color on the map)
            // Start the PlayerCheckTimer to scan for wanted players (be sure the timer has been destroyed first)
            
KillTimer(APlayerData[playerid][PlayerCheckTimer]);
            
APlayerData[playerid][PlayerCheckTimer] = SetTimerEx("Police_CheckWantedPlayers"1000true"i"playerid);
            
// Check if the police player can get weapons
            
if (PoliceGetsWeapons == true)
            {
                
// Give up to 12 weapons to the player
                
for (new i12i++)
                    
GivePlayerWeapon(playeridAPoliceWeapons[i], PoliceWeaponsAmmo);
            }
        }
        case 
ClassMafia// Mafia class
        
{
            
format(missiontextsizeof(missiontext), Mafia_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassMafia); // Set the playercolor (chatcolor for the player and color on the map)
            // Start the PlayerCheckTimer to scan for players that carry mafia-loads (be sure the timer has been destroyed first)
            
KillTimer(APlayerData[playerid][PlayerCheckTimer]);
            
APlayerData[playerid][PlayerCheckTimer] = SetTimerEx("Mafia_CheckMafiaLoads"1000true"i"playerid);
        }
        case 
ClassCourier// Courier class
        
{
            
format(missiontextsizeof(missiontext), Courier_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassCourier); // Set the playercolor (chatcolor for the player and color on the map)
        
}
        case 
ClassAssistance// Assistance class
        
{
            
format(missiontextsizeof(missiontext), Assistance_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassAssistance); // Set the playercolor (chatcolor for the player and color on the map)
            // Start the PlayerCheckTimer to scan for players who need assistance (be sure the timer has been destroyed first)
            
KillTimer(APlayerData[playerid][PlayerCheckTimer]);
            
APlayerData[playerid][PlayerCheckTimer] = SetTimerEx("Assistance_CheckPlayers"1000true"i"playerid);
        }
        case 
ClassRoadWorker// Roadworker class
        
{
            
format(missiontextsizeof(missiontext), RoadWorker_NoJobText); // Preset the missiontext
            
SetPlayerColor(playeridColorClassRoadWorker); // Set the playercolor (chatcolor for the player and color on the map)
        
}
    }
    
// Set the missiontext
    
TextDrawSetString(APlayerData[playerid][MissionText], missiontext);
    
// Show the missiontext for this player
    
TextDrawShowForPlayer(playeridAPlayerData[playerid][MissionText]);
    
// If the player spawns and his jailtime hasn't passed yet, put him back in jail
    
if (APlayerData[playerid][PlayerJailed] != 0)
        
Police_JailPlayer(playeridAPlayerData[playerid][PlayerJailed]);
    return 
1;
}
// This callback gets called whenever a player enters a checkpoint
public OnPlayerEnterCheckpoint(playerid)
{
    
// Check the player's class
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassTruckDriver// Truckdriver class
            
Trucker_OnPlayerEnterCheckpoint(playerid); // Process the checkpoint (load or unload goods)
        
case ClassBusDriver// BusDriver class
        
{
            
GameTextForPlayer(playeridTXT_BusDriverMissionPassed30004); // Show a message to let the player know he finished his job
            
BusDriver_EndJob(playerid); // End the current mission
        
}
        case 
ClassPilot// Pilot class
            
Pilot_OnPlayerEnterCheckpoint(playerid); // Process the checkpoint (load or unload)
        
case ClassMafia// Mafia class
            
Mafia_OnPlayerEnterCheckpoint(playerid);
        case 
ClassCourier// Courier class
            
Courier_OnPlayerEnterCheckpoint(playerid);
        case 
ClassRoadWorker// Roadworker class
        
{
            
// Only end the mission when doing "repair-speedcamera" jobtype (checkpoint is the base of the roadworker)
            
if (APlayerData[playerid][JobID] == 1// Repairing speedcamera's
            
{
                
GameTextForPlayer(playeridTXT_RoadworkerMissionPassed30004); // Show a message to let the player know he finished his job
                
Roadworker_EndJob(playerid); // End the current mission
            
}
            if (
APlayerData[playerid][JobID] == 2// Towing broken vehicle to shredder
                
Roadworker_EnterCheckpoint(playerid);
        }
    }
    return 
1;
}
// This callback gets called when a player enters a race-checkpoint
public OnPlayerEnterRaceCheckpoint(playerid)
{
    
// Check the player's class
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassBusDriver// BusDriver class
            
Bus_EnterRaceCheckpoint(playerid); // Process the checkpoint
        
case ClassRoadWorker// Roadworker class
            
Roadworker_EnterRaceCheckpoint(playerid);
    }
    return 
1;
}
// This callback gets called whenever a player dies
public OnPlayerDeath(playeridkilleridreason)
{
    
// Setup local variables
    
new VictimName[24], KillerName[24], Msg[128];
    
// Clear the missiontext
    
TextDrawSetString(APlayerData[playerid][MissionText], " ");
    
// Hide the missiontext for this player (when the player is choosing a class, it's not required to show any mission-text)
    
TextDrawHideForPlayer(playeridAPlayerData[playerid][MissionText]);
    
// Stop any job that may have started
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassTruckDriverTrucker_EndJob(playerid);
        case 
ClassBusDriverBusDriver_EndJob(playerid);
        case 
ClassPilotPilot_EndJob(playerid);
        case 
ClassPolicePolice_EndJob(playerid);
        case 
ClassMafiaMafia_EndJob(playerid);
        case 
ClassCourierCourier_EndJob(playerid);
        case 
ClassAssistanceAssistance_EndJob(playerid);
        case 
ClassRoadWorkerRoadworker_EndJob(playerid);
    }
    
// If the player is part of a convoy, kick him from it
    
Convoy_Leave(playerid);
    
// If another player kills you, he'll get an extra star of his wanted level
    
if (killerid != INVALID_PLAYER_ID)
    {
        
// Increase the wanted level of the killer by one star
        
SetPlayerWantedLevel(killeridGetPlayerWantedLevel(killerid) + 1);
        
// Get the name of the killed player and the killer
        
GetPlayerName(playeridVictimNamesizeof(VictimName));
        
GetPlayerName(killeridKillerNamesizeof(KillerName));
        
// Let the killed know the police are informed about the kill
        
format(Msg128"{FF0000}You've killed {FFFF00}%s{FF0000}, you're wanted by the police now"VictimName);
        
SendClientMessage(killerid0xFFFFFFFFMsg);
        
// Inform all police players about the kill
        
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} killed {FFFF00}%s{00FF00}, pursue and fine him"KillerNameVictimName);
        
Police_SendMessage(Msg);
    }
    return 
1;
}
// This callback gets called when the player is selecting a class (but hasn't clicked "Spawn" yet)
public OnPlayerRequestClass(playeridclassid)
{
     
SetPlayerInterior(playerid,14);
    
SetPlayerPos(playerid,258.4893,-41.4008,1002.0234);
    
SetPlayerFacingAngle(playerid270.0);
    
SetPlayerCameraPos(playerid,256.0815,-43.0475,1004.0234);
    
SetPlayerCameraLookAt(playerid,258.4893,-41.4008,1002.0234);
    
// Display a short message to inform the player about the class he's about to choose
    
switch (classid)
    {
        case 
01234567// Classes that will be truckdrivers
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassTrucker30004);
            
// Store the class for the player (truckdriver)
            
APlayerData[playerid][PlayerClass] = ClassTruckDriver;
        }
        case 
89// Classes that will be bus-drivers
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassBusDriver30004);
            
// Store the class for the player (busdriver)
            
APlayerData[playerid][PlayerClass] = ClassBusDriver;
        }
        case 
10// Classes that will be Pilot
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassPilot30004);
            
// Store the class for the player (pilot)
            
APlayerData[playerid][PlayerClass] = ClassPilot;
        }
        case 
111213// Classes that will be police
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassPolice30004);
            
// Store the class for the player (police)
            
APlayerData[playerid][PlayerClass] = ClassPolice;
        }
        case 
141516// Classes that will be mafia
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassMafia30004);
            
// Store the class for the player (mafia)
            
APlayerData[playerid][PlayerClass] = ClassMafia;
        }
        case 
1718// Classes that will be courier
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassCourier30004);
            
// Store the class for the player (courier)
            
APlayerData[playerid][PlayerClass] = ClassCourier;
        }
        case 
19// Classes that will be assistance
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassAssistance30004);
            
// Store the class for the player (assistance)
            
APlayerData[playerid][PlayerClass] = ClassAssistance;
        }
        case 
202122// Classes that will be roadworker
        
{
            
// Display the name of the class
            
GameTextForPlayer(playeridTXT_ClassRoadWorker30004);
            
// Store the class for the player (roadworker)
            
APlayerData[playerid][PlayerClass] = ClassRoadWorker;
        }
    }
    return 
1;
}
// This callback is called when the player attempts to spawn via class-selection
public OnPlayerRequestSpawn(playerid)
{
    new 
IndexFloat:xFloat:yFloat:zFloat:AngleName[24], Msg[128];
    
// Get the player's name
    
GetPlayerName(playeridNamesizeof(Name));
    
// Choose a random spawnlocation based on the player's class
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassTruckDriver:
        {
            
Index random(sizeof(ASpawnLocationsTrucker)); // Get a random array-index to chose a random spawnlocation
            
ASpawnLocationsTrucker[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsTrucker[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsTrucker[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsTrucker[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Trucker class"Name);
        }
        case 
ClassBusDriver:
        {
            
Index random(sizeof(ASpawnLocationsBusDriver));
            
ASpawnLocationsBusDriver[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsBusDriver[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsBusDriver[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsBusDriver[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Busdriver class"Name);
        }
        case 
ClassPilot:
        {
            
Index random(sizeof(ASpawnLocationsPilot));
            
ASpawnLocationsPilot[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsPilot[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsPilot[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsPilot[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Pilot class"Name);
        }
        case 
ClassPolice:
        {
            
// Count the number of normal players (all classes except police) and count the amount of police players
            
new NormalPlayersPolicePlayersbool:CanSpawnAsCop false;
            
// Block this check if PlayersBeforePolice is set to 0 (this allows anyone to join as police)
            
if (PlayersBeforePolice 0)
            {
                
// Loop through all players
                
for (new pidpid MAX_PLAYERSpid++)
                {
                    
// Exclude this player, as he doesn't have a class yet, he's still choosing here
                    
if (pid != playerid)
                    {
                        
// Also exclude all players who are still in the class-selection screen, as they don't have a class selected yet
                        
if (GetPlayerInterior(pid) != 14)
                        {
                            
// Check if this player is logged in
                            
if (APlayerData[pid][LoggedIn] == true)
                            {
                                
// Count the amount of normal players and police players
                                
switch (APlayerData[pid][PlayerClass])
                                {
                                    case 
ClassPolice:
                                        
PolicePlayers++;
                                    case 
ClassTruckDriverClassBusDriverClassPilotClassMafiaClassCourierClassAssistanceClassRoadWorker:
                                        
NormalPlayers++;
                                }
                            }
                        }
                    }
                }
                
// Check if there are less police players than allowed
                
if (PolicePlayers < (NormalPlayers PlayersBeforePolice))
                    
CanSpawnAsCop true// There are less police players than allowed, so the player can choose this class
                
else
                    
CanSpawnAsCop false// The maximum amount of police players has been reached, the player can't choose to be a cop
                // Check if the player isn't allowed to spawn as police
                
if (CanSpawnAsCop == false)
                {
                    
// Let the player know the maximum amount of cops has been reached
                    
GameTextForPlayer(playerid"Maximum amount of cops already reached"50004);
                    
SendClientMessage(playerid0xFFFFFFFF"{FF0000}The maximum amount of cops has been reached already, please select another class");
                    return 
0// Don't allow the player to spawn as police player
                
}
            }
            
// If the player has less than 100 scorepoints
            
if (APlayerData[playerid][PlayerScore] < 100)
            {
                
// Let the player know he needs 100 scorepoints
                
GameTextForPlayer(playerid"You need 100 scorepoints for police class"50004);
                
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You need 100 scorepoints for police class");
                return 
0// Don't allow the player to spawn as police player
            
}
            
// If the player has a wanted level
            
if (GetPlayerWantedLevel(playerid) > 0)
            {
                
// Let the player know he cannot have a wanted level to join police
                
GameTextForPlayer(playerid"You are not allowed to choose police class when you're wanted"50004);
                
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You are not allowed to choose police class when you're wanted");
                return 
0// Don't allow the player to spawn as police player
            
}
            
Index random(sizeof(ASpawnLocationsPolice));
            
ASpawnLocationsPolice[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsPolice[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsPolice[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsPolice[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Police class"Name);
        }
        case 
ClassMafia:
        {
            
Index random(sizeof(ASpawnLocationsMafia));
            
ASpawnLocationsMafia[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsMafia[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsMafia[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsMafia[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Mafia class"Name);
        }
        case 
ClassCourier:
        {
            
Index random(sizeof(ASpawnLocationsCourier));
            
ASpawnLocationsCourier[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsCourier[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsCourier[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsCourier[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Courier class"Name);
        }
        case 
ClassAssistance:
        {
            
Index random(sizeof(ASpawnLocationsAssistance));
            
ASpawnLocationsAssistance[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsAssistance[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsAssistance[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsAssistance[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Assistance class"Name);
        }
        case 
ClassRoadWorker:
        {
            
Index random(sizeof(ASpawnLocationsRoadWorker));
            
ASpawnLocationsRoadWorker[Index][SpawnX]; // Get the X-position for the spawnlocation
            
ASpawnLocationsRoadWorker[Index][SpawnY]; // Get the Y-position for the spawnlocation
            
ASpawnLocationsRoadWorker[Index][SpawnZ]; // Get the Z-position for the spawnlocation
            
Angle ASpawnLocationsRoadWorker[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation
            
format(Msg128"{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Roadworker class"Name);
        }
    }
    
// Spawn the player with his chosen skin at a random location based on his class
    
SetSpawnInfo(playerid0GetPlayerSkin(playerid), xyzAngle000000);
    
// Send the message to all players (who joined which class)
    
SendClientMessageToAll(0xFFFFFFFFMsg);
    return 
1;
}
// This callback gets called when a vehicle respawns at it's spawn-location (where it was created)
public OnVehicleSpawn(vehicleid)
{
    
// Set the vehicle as not-wanted by the mafia
    
AVehicleData[vehicleid][MafiaLoad] = false;
    
// Also reset the fuel to maximum (only for non-owned vehicles)
    
if (AVehicleData[vehicleid][Owned] == false)
        
AVehicleData[vehicleid][Fuel] = MaxFuel;
    
// Re-apply the paintjob (if any was applied)
    
if (AVehicleData[vehicleid][PaintJob] != 0)
    {
        
// Re-apply the paintjob
        
ChangeVehiclePaintjob(vehicleidAVehicleData[vehicleid][PaintJob] - 1);
    }
    
// Also update the car-color
    
ChangeVehicleColor(vehicleidAVehicleData[vehicleid][Color1], AVehicleData[vehicleid][Color2]);
    
// Re-add all components that were installed (if they were there)
    
for (new i14i++)
    {
        
// Remove all mods from the vehicle (all added mods applied by hackers will hopefully be removed this way when the vehicle respawns)
        
RemoveVehicleComponent(vehicleidGetVehicleComponentInSlot(vehicleidi));
        
// Check if the componentslot has a valid component-id
        
if (AVehicleData[vehicleid][Components][i] != 0)
            
AddVehicleComponent(vehicleidAVehicleData[vehicleid][Components][i]); // Add the component to the vehicle
    
}
    return 
1;
}
// This callback is called when the vehicle leaves a mod shop
public OnVehicleRespray(playeridvehicleidcolor1color2)
{
    
// Let the player pay $150 for changing the color (if they have been changed)
    
if ((AVehicleData[vehicleid][Color1] != color1) || (AVehicleData[vehicleid][Color2] != color2))
    {
        
RewardPlayer(playerid, -1500);
        
SendClientMessage(playerid0xFFFFFFFF"{00FF00}You've changed the color of your vehicle for $150");
    }
    
// Save the colors
    
AVehicleData[vehicleid][Color1] = color1;
    
AVehicleData[vehicleid][Color2] = color2;
    
// If the primary color is black, remove the paintjob
    
if (color1 == 0)
        
AVehicleData[vehicleid][PaintJob] = 0;
    return 
1;
}
// This callback gets called when a player enters or exits a mod-shop
public OnEnterExitModShop(playeridenterexitinteriorid)
{
    return 
1;
}
// This callback gets called whenever a player mods his vehicle
public OnVehicleMod(playeridvehicleidcomponentid)
{
    
// When the player changes a component of his vehicle, reduce the price of the component from the player's money
    
APlayerData[playerid][PlayerMoney] = APlayerData[playerid][PlayerMoney] - AVehicleModPrices[componentid 1000];
    
// Store the component in the AVehicleData array
    
AVehicleData[vehicleid][Components][GetVehicleComponentType(componentid)] = componentid;
    return 
1;
}
// This callback gets called whenever a player VIEWS at a paintjob in a mod garage (viewing automatically applies it)
public OnVehiclePaintjob(playeridvehicleidpaintjobid)
{
    
// Store the paintjobid for the vehicle (add 1 to the value, otherwise checking for an applied paintjob is difficult)
    
AVehicleData[vehicleid][PaintJob] = paintjobid 1;
    return 
1;
}
// This callback gets called whenever a player enters a vehicle
public OnPlayerEnterVehicle(playeridvehicleidispassenger)
{
    
// Setup local variables
    
new enginelightsalarmdoorsbonnetbootobjective;
    
// Check if the vehicle has fuel
    
if (AVehicleData[vehicleid][Fuel] > 0)
    {
        
// Start the engine and turn on the lights
        
GetVehicleParamsEx(vehicleidenginelightsalarmdoorsbonnetbootobjective);
        
SetVehicleParamsEx(vehicleid11alarmdoorsbonnetbootobjective);
    }
    
// Store the player's current location and interior-id, otherwise anti-airbreak hack code could kick you
    
GetPlayerPos(playeridAPlayerData[playerid][PreviousX], APlayerData[playerid][PreviousY], APlayerData[playerid][PreviousZ]);
    
APlayerData[playerid][PreviousInt] = GetPlayerInterior(playerid);
    return 
1;
}
// This callback gets called when a player exits his vehicle
public OnPlayerExitVehicle(playeridvehicleid)
{
    
// Setup local variables
    
new enginelightsalarmdoorsbonnetbootobjective;
    
// Check if the player is the driver of the vehicle
    
if (GetPlayerVehicleSeat(playerid) == 0)
    {
        
// Turn off the lights and engine
        
GetVehicleParamsEx(vehicleidenginelightsalarmdoorsbonnetbootobjective);
        
SetVehicleParamsEx(vehicleid00alarmdoorsbonnetbootobjective);
    }
    
// Chech if the player is a pilot
    
if (APlayerData[playerid][PlayerClass] == ClassPilot)
    {
        
// If the pilot started a job --> as soon as a pilot leaves his plane while doing a job, he fails his mission
        
if (APlayerData[playerid][JobStarted] == true)
        {
            
// End the job (clear data)
            
Pilot_EndJob(playerid);
            
// Inform the player that he failed the mission
            
GameTextForPlayer(playeridTXT_FailedMission50004);
            
// Reduce the player's cash by 1000
            
RewardPlayer(playerid, -10000);
        }
    }
    return 
1;
}
// This callback gets called whenever a vehicle enters the water or is destroyed (explodes)
public OnVehicleDeath(vehicleid)
{
    
// Get the houseid to which this vehicle belongs
    
new HouseID AVehicleData[vehicleid][BelongsToHouse];
    
// Check if this vehicle belongs to a house
    
if (HouseID != 0)
    {
        
// If the house doesn't have insurance for it's vehicles
        
if (AHouseData[HouseID][Insurance] == 0)
        {
            
// Delete the vehicle, clear the data and remove it from the house it belongs to
            
Vehicle_Delete(vehicleid);
            
// Save the house (and linked vehicles)
            
HouseFile_Save(HouseID);
        }
    }
    return 
1;
}
// This callback gets called when the player changes state
public OnPlayerStateChange(playerid,newstate,oldstate)
{
    
// Setup local variables
    
new vidName[24], Msg[128], enginelightsalarmdoorsbonnetbootobjective;
    switch (
newstate)
    {
        case 
PLAYER_STATE_DRIVER// Player became the driver of a vehicle
        
{
            
// Get the ID of the player's vehicle
            
vid GetPlayerVehicleID(playerid);
            
// Get the player's name (the one who is trying to enter the vehicle)
            
GetPlayerName(playeridNamesizeof(Name));
            
// Check if the vehicle is owned
            
if (AVehicleData[vid][Owned] == true)
            {
                
// Check if the vehicle is owned by somebody else (strcmp will not be 0)
                
if (strcmp(AVehicleData[vid][Owner], Namefalse) != 0)
                {
                    
// Force the player out of the vehicle
                    
RemovePlayerFromVehicle(playerid);
                    
// Turn off the lights and engine
                    
GetVehicleParamsEx(videnginelightsalarmdoorsbonnetbootobjective);
                    
SetVehicleParamsEx(vid00alarmdoorsbonnetbootobjective);
                    
// Let the player know he cannot use somebody else's vehicle
                    
format(Msg128TXT_SpeedometerCannotUseVehicleAVehicleData[vid][Owner]);
                    
SendClientMessage(playerid0xFFFFFFFFMsg);
                }
                
// Check if the vehicle is clamped
                
if (AVehicleData[vid][Clamped] == true)
                {
                    
// Force the player out of the vehicle
                    
RemovePlayerFromVehicle(playerid);
                    
// Turn off the lights and engine
                    
GetVehicleParamsEx(videnginelightsalarmdoorsbonnetbootobjective);
                    
SetVehicleParamsEx(vid00alarmdoorsbonnetbootobjective);
                    
// Let the player know he cannot use a clamped vehicle
                    
format(Msg128TXT_SpeedometerClampedVehicle);
                    
SendClientMessage(playerid0xFFFFFFFFMsg);
                    
format(Msg128TXT_SpeedometerClampedVehicle2);
                    
SendClientMessage(playerid0xFFFFFFFFMsg);
                }
            }
            
// Check if the player is not a cop
            
if (APlayerData[playerid][PlayerClass] != ClassPolice)
            {
                
// First check if the vehicle is a static vehicle (player can still use a bought cop-car that he bought in his house,
                // as a bought vehicle isn't static)
                
if (AVehicleData[vid][StaticVehicle] == true)
                {
                    
// Check if the entered vehicle is a cop vehicle
                    
switch (GetVehicleModel(vid))
                    {
                        case 
VehiclePoliceLSPDVehiclePoliceSFPDVehiclePoliceLVPDVehicleHPV1000VehiclePoliceRanger:
                        {
                            
// Force the player out of the vehicle
                            
RemovePlayerFromVehicle(playerid);
                            
// Turn off the lights and engine
                            
GetVehicleParamsEx(videnginelightsalarmdoorsbonnetbootobjective);
                            
SetVehicleParamsEx(vid00alarmdoorsbonnetbootobjective);
                            
// Let the player know he cannot use a cop car
                            
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You cannot use a police vehicle");
                        }
                    }
                }
            }
            
// Check if the player is not a pilot
            
if (APlayerData[playerid][PlayerClass] != ClassPilot)
            {
                
// First check if the vehicle is a static vehicle (player can still use a bought plane that he bought in his house,
                // as a bought vehicle isn't static)
                
if (AVehicleData[vid][StaticVehicle] == true)
                {
                    
// Check if the entered vehicle is a plane or helicopter vehicle
                    
switch (GetVehicleModel(vid))
                    {
                        case 
VehicleShamalVehicleNevadaVehicleStuntPlaneVehicleDodoVehicleMaverickVehicleCargobob:
                        {
                            
// Force the player out of the vehicle
                            
RemovePlayerFromVehicle(playerid);
                            
// Turn off the lights and engine
                            
GetVehicleParamsEx(videnginelightsalarmdoorsbonnetbootobjective);
                            
SetVehicleParamsEx(vid00alarmdoorsbonnetbootobjective);
                            
// Let the player know he cannot use a cop car
                            
SendClientMessage(playerid0xFFFFFFFF"{FF0000}You cannot use a pilot vehicle");
                        }
                    }
                }
            }
        }
    }
    return 
1;
}
// This callback gets called whenever a player presses a key
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    
// Debug the keypresses
//    DebugKeys(playerid, newkeys, oldkeys);
    // ****************************************************************************************
    // NOTE: the keys are messed up, so the code may look strange when testing for certain keys
    // ****************************************************************************************
    // Fining and jailing players when you're police and press the correct keys
    // Check the class of the player
    
switch (APlayerData[playerid][PlayerClass])
    {
        case 
ClassPolice:
        {
            
// If the police-player pressed the RMB key (AIM key) when OUTSIDE his vehicle
            
if (((newkeys KEY_HANDBRAKE) && !(oldkeys KEY_HANDBRAKE)) && (GetPlayerVehicleID(playerid) == 0))
                
Police_FineNearbyPlayers(playerid);
            
// If the police-player pressed the LCTRL (SECUNDAIRY key) key when INSIDE his vehicle
            
if (((newkeys KEY_ACTION) && !(oldkeys KEY_ACTION)) && (GetPlayerVehicleID(playerid) != 0))
                
Police_WarnNearbyPlayers(playerid);
        }
        case 
ClassAssistance:
        {
            
// If the assistance-player pressed the RMB key (AIM key) when OUTSIDE his vehicle
            
if (((newkeys KEY_HANDBRAKE) && !(oldkeys KEY_HANDBRAKE)) && (GetPlayerVehicleID(playerid) == 0))
                
Assistance_FixVehicle(playerid);
            
// If the police-player pressed the LCTRL (SECUNDAIRY key) key when INSIDE his vehicle
            
if (((newkeys KEY_ACTION) && !(oldkeys KEY_ACTION)) && (GetPlayerVehicleID(playerid) != 0))
                
Assistance_FixOwnVehicle(playerid);
        }
    }
    
// Trying to attach the closest vehicle to the towtruck when the player pressed FIRE when inside a towtruck
    // Check if the player is inside a towtruck
    
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == VehicleTowTruck)
    {
        
// Check if the player pushed the fire-key
        
if(newkeys KEY_FIRE)
        {
            
// Get the vehicle-id of the closest vehicle
            
new closest GetClosestVehicle(playerid);
            if(
VehicleToPlayer(playeridclosest) < 10// Check if the closest vehicle is within 10m from the player
                
AttachTrailerToVehicle(closestGetPlayerVehicleID(playerid)); // Attach the vehicle to the towtruck
        
}
    }
    
// Refuel a vehicle when driving a vehicle and pressing the HORN key
    // Check if the player presses the HORN key
    
if ((newkeys KEY_CROUCH) && !(oldkeys KEY_CROUCH))
    {
        
// Check if the player is driving a vehicle
        
if (GetPlayerVehicleSeat(playerid) == 0)
        {
            
// Loop through all ARefuelPickups
            
for (new isizeof(ARefuelPickups); i++)
            {
                
// Check if the player is in range of a refuelpickup
                
if(IsPlayerInRangeOfPoint(playerid2.5ARefuelPickups[i][pux], ARefuelPickups[i][puy], ARefuelPickups[i][puz]))
                {
                    
// Show a message that the player's vehicle is refuelling
                    
GameTextForPlayer(playeridTXT_Refuelling30004);
                    
// Don't allow the player to move again (the timer will allow it after refuelling)
                    
TogglePlayerControllable(playerid0);
                       
// Start a timer (let the player wait until the vehicle is refuelled)
                    
SetTimerEx("RefuelVehicle"5000false"i"playerid);
                    
// Stop the search
                    
break;
                }
            }
        }
    }
    return 
1;
}
forward VehicleToPlayer(playerid,vehicleid);
// Get the distance between the vehicle and the player
public VehicleToPlayer(playeridvehicleid)
{
    
// Setup local variables
    
new Float:pXFloat:pYFloat:pZFloat:cXFloat:cYFloat:cZFloat:distance;
    
// Get the player position
    
GetPlayerPos(playeridpXpYpZ);
    
// Get the vehicle position
    
GetVehiclePos(vehicleidcXcYcZ);
    
// Calculate the distance
    
distance floatsqroot(floatpower(floatabs(floatsub(cXpX)), 2) + floatpower(floatabs(floatsub(cYpY)), 2) + floatpower(floatabs(floatsub(cZpZ)), 2));
    
// Return the distance to the calling routine
    
return floatround(distance);
}
forward GetClosestVehicle(playerid);
// Find the vehicle closest to the player
public GetClosestVehicle(playerid)
{
    
// Setup local variables
    
new Float:distance 99999.000+1Float:distance2result = -1;
    
// Loop through all vehicles
    
for(new 0MAX_VEHICLESi++)
    {
        
// First check if the player isn't driving the current vehicle that needs to be checked for it's distance to the player
        
if (GetPlayerVehicleID(playerid) != i)
        {
            
// Get the distance between player and vehicle
            
distance2 VehicleToPlayer(playeridi);
            
// Check if the distance is smaller than the previous distance
            
if(distance2 distance)
            {
                
// Store the distance
                
distance distance2;
                
// Store the vehicle-id
                
result i;
            }
        }
    }
    
// Return the vehicle-id of the closest vehicle
    
return result;
}
// This function is used to debug the key-presses
stock DebugKeys(playeridnewkeysoldkeys)
{
    
// Debug keys
    
if ((newkeys KEY_FIRE) && !(oldkeys KEY_FIRE))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_FIRE key");
    if ((
newkeys KEY_ACTION) && !(oldkeys KEY_ACTION))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_ACTION key");
    if ((
newkeys KEY_CROUCH) && !(oldkeys KEY_CROUCH))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_CROUCH key");
    if ((
newkeys KEY_SPRINT) && !(oldkeys KEY_SPRINT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_SPRINT key");
    if ((
newkeys KEY_SECONDARY_ATTACK) && !(oldkeys KEY_SECONDARY_ATTACK))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_SECONDARY_ATTACK key");
    if ((
newkeys KEY_JUMP) && !(oldkeys KEY_JUMP))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_JUMP key");
    if ((
newkeys KEY_LOOK_RIGHT) && !(oldkeys KEY_LOOK_RIGHT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_LOOK_RIGHT key");
    if ((
newkeys KEY_HANDBRAKE) && !(oldkeys KEY_HANDBRAKE))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_HANDBRAKE key");
    if ((
newkeys KEY_LOOK_LEFT) && !(oldkeys KEY_LOOK_LEFT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_LOOK_LEFT key");
    if ((
newkeys KEY_SUBMISSION) && !(oldkeys KEY_SUBMISSION))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_SUBMISSION key");
    if ((
newkeys KEY_LOOK_BEHIND) && !(oldkeys KEY_LOOK_BEHIND))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_LOOK_BEHIND key");
    if ((
newkeys KEY_WALK) && !(oldkeys KEY_WALK))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_WALK key");
    if ((
newkeys KEY_ANALOG_UP) && !(oldkeys KEY_ANALOG_UP))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_ANALOG_UP key");
    if ((
newkeys KEY_ANALOG_DOWN) && !(oldkeys KEY_ANALOG_DOWN))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_ANALOG_DOWN key");
    if ((
newkeys KEY_ANALOG_LEFT) && !(oldkeys KEY_ANALOG_LEFT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_ANALOG_LEFT key");
    if ((
newkeys KEY_ANALOG_RIGHT) && !(oldkeys KEY_ANALOG_RIGHT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_ANALOG_RIGHT key");
    if ((
newkeys KEY_UP) && !(oldkeys KEY_UP))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_UP key");
    if ((
newkeys KEY_DOWN) && !(oldkeys KEY_DOWN))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_DOWN key");
    if ((
newkeys KEY_LEFT) && !(oldkeys KEY_LEFT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_LEFT key");
    if ((
newkeys KEY_RIGHT) && !(oldkeys KEY_RIGHT))
        
SendClientMessage(playerid0x0000FFFF"You pressed the KEY_RIGHT key");
    return 
1;

^The Gamemode .pwn

I change it to this \/
Quote:

#define GameModeName ".ZeroScan | Real Life | Trucking"

And saved it on .pwn and saved it on .amx

I restarted my server, and i tested it (Doesn't work)

When i remove some codes and i saved it on .pwn and .amx the same problem..

information
GameMode: PPC_Trucking (http://forum.sa-mp.com/showthread.ph...t=ppc_trucking
Server: 24/7
Server host: Serverffs.com

Can somebody help me please? Sorry for my really bad english :P

Greatz,
ChickenKiller
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)