07.04.2012, 16:19
(
Последний раз редактировалось ChickenKiller; 07.04.2012 в 18:40.
)
Hello,
I'm not really good in servers thats why i need your help
I have some questions and i hope you guys can help me 
[I'm really bad in english]
1. I have downloaded the PPC_Trucking gamemode and i want to change my gamemode name. I have tried it, but it don't work.
I have the .amx and the .pwn files, i have changed the name in .pwn file and saved it.. And restarted my server (not working) Do i have to change something in .amx? And how?


And i can't use weapons in the game, i want some weapons for fun in my server how can i change that? This is the .pwn (I have show it on pastebin http://pastebin.com/hHAmHRcv
Thank you!
__________________________________________________ ____________
2. I have a problem with gl_actions, its doesn't work. Can somebody help me with that? I have the 2 files (.pwn and .amx) on my filterscripts map. But when i died, it doesn't work :P
__________________________________________________ ____________
3. I have tried to put a add-map in my server, but same as gamemode nam.. It doesn't work?
Do have to change something in .amx?
__________________________________________________ ____
4. I can't use weapons, how can i turn weapons on?
Please help me with this 
I know.. I'm a big noob, but i want to learn something :P
[I hope you can read my questions]
I'm not really good in servers thats why i need your help


[I'm really bad in english]
1. I have downloaded the PPC_Trucking gamemode and i want to change my gamemode name. I have tried it, but it don't work.
I have the .amx and the .pwn files, i have changed the name in .pwn file and saved it.. And restarted my server (not working) Do i have to change something in .amx? And how?


And i can't use weapons in the game, i want some weapons for fun in my server how can i change that? This is the .pwn (I have show it on pastebin http://pastebin.com/hHAmHRcv
Thank you!
__________________________________________________ ____________
2. I have a problem with gl_actions, its doesn't work. Can somebody help me with that? I have the 2 files (.pwn and .amx) on my filterscripts map. But when i died, it doesn't work :P
__________________________________________________ ____________
3. I have tried to put a add-map in my server, but same as gamemode nam.. It doesn't work?
Quote:
public OnGameModeInit() { new HostCommand[128]; // Change the hostname format(HostCommand, 128, "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 * 2, true); // Start the timer that will show a random bonus mission for truckers every 5 minutes SetTimer("ShowRandomBonusMission", 1000 * 60 * 5, true); // Start the timer that checks the toll-gates SetTimer("Toll", 1000, true); // 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", 1000, true); CreateObject(3567, 1921.1982421875, -1491.8416748047, 3.610892534256, 0, 344.35498046875, 88.870056152344); //Crashed Truck Objects By Mive CreateObject(3632, 1927.3686523438, -1495.7709960938, 2.7668118476868, 359.75, 89.445007324219, 350.07507324219); CreateObject(3632, 1923.6041259766, -1494.9019775391, 2.7595276832581, 359.74731445313, 89.439697265625, 3.96875); CreateObject(3632, 1925.1407470703, -1497.6137695313, 2.7648034095764, 359.74731445313, 89.434204101563, 47.6357421875); CreateObject(3632, 1922.3349609375, -1495.94921875, 2.7583818435669, 359.74731445313, 89.423217773438, 358.00598144531); CreateObject(3632, 1922.30859375, -1496.7958984375, 2.7591633796692, 359.74731445313, 89.417724609375, 354.03442382813); CreateObject(3632, 1924.1945800781, -1496.3977050781, 2.7619986534119, 359.74731445313, 89.423217773438, 348.00598144531); CreateObject(3632, 1925.6218261719, -1494.8999023438, 2.7629752159119, 359.74731445313, 89.417724609375, 31.672668457031); CreateObject(3633, 1913.1241455078, -1492.8598632813, 4.6871123313904, 15.875244140625, 357.51159667969, 356.5283203125); CreateObject(3632, 1913.6998291016, -1494.544921875, 2.7437376976013, 359.74731445313, 89.423217773438, 358.00598144531); CreateObject(3632, 1913.2087402344, -1495.1226806641, 2.7435822486877, 359.74731445313, 89.423217773438, 356.02099609375); CreateObject(3632, 1914.3151855469, -1495.1710205078, 2.7452507019043, 359.74731445313, 89.417724609375, 7.6923828125); CreateObject(3632, 1914.7510986328, -1494.4343261719, 2.7451696395874, 359.74731445313, 89.412231445313, 3.9404296875); CreateObject(3632, 1912.4671630859, -1494.5106201172, 2.741898059845, 359.74731445313, 89.40673828125, 5.6885986328125); CreateObject(3632, 1912.9014892578, -1497.6447753906, 2.7455959320068, 359.74731445313, 89.395751953125, 337.89013671875); CreateObject(3632, 1915.2641601563, -1494.9367675781, 2.7464127540588, 359.74731445313, 89.401245117188, 44.505310058594); CreateObject(3632, 1915.20703125, -1494.796875, 3.3201887607574, 359.74731445313, 89.395751953125, 21.912231445313); CreateObject(3632, 1913.2655029297, -1493.8513183594, 2.7424244880676, 359.74731445313, 89.423217773438, 354.03601074219); CreateObject(3632, 1914.4829101563, -1493.7816162109, 2.7441401481628, 359.74731445313, 89.417724609375, 9.914306640625); CreateObject(3632, 1914.4586181641, -1494.1234130859, 3.5187165737152, 359.74731445313, 89.412231445313, 9.90966796875); CreateObject(3632, 1913.23828125, -1494.2650146484, 3.3427708148956, 359.74731445313, 89.412231445313, 357.9997558593; CreateObject(3632, 1913.1206054688, -1494.1434326172, 3.928403377533, 359.74731445313, 89.40673828125, 357.99499511719); CreateObject(3632, 1913.3752441406, -1493.8200683594, 4.3668031692505, 359.74731445313, 89.40673828125, 3.949951171875); CreateObject(3632, 1917.1885986328, -1497.4444580078, 2.7516813278198, 359.74731445313, 89.401245117188, 17.844482421875); CreateObject(3632, 1913.7116699219, -1493.2296142578, 2.7472400665283, 359.74731445313, 89.40673828125, 4.4500122070313); CreateObject(3632, 1913.7747802734, -1493.5314941406, 3.2706005573273, 359.74731445313, 89.401245117188, 4.449462890625); CreateObject(3633, 1913.1422119141, -1491.6528320313, 5.0102868080139, 15.875244140625, 357.51159667969, 356.5283203125); CreateObject(3632, 1913.3922119141, -1490.8215332031, 5.2500157356262, 15.880004882813, 358.51501464844, 358.01501464844); CreateObject(3632, 1914.0263671875, -1493.3101806641, 4.5509829521179, 15.875244140625, 358.51135253906, 358.0114746093; CreateObject(3632, 1914.5244140625, -1493.7603759766, 4.2660326957703, 339.8952331543, 358.51135253906, 324.2614746093; CreateObject(3632, 1914.1383056641, -1497.0462646484, 2.7468237876892, 359.74731445313, 89.395751953125, 352.037109375); CreateObject(3632, 1915.5266113281, -1496.1527099609, 2.7479848861694, 359.74731445313, 89.395751953125, 15.854736328125); CreateObject(3632, 1909.5969238281, -1496.3443603516, 2.739483833313, 359.74731445313, 89.395751953125, 324.24365234375); CreateObject(3632, 1916.3895263672, -1493.8702392578, 2.7470197677612, 359.74731445313, 89.395751953125, 9.8941650390625); CreateObject(3632, 1915.4754638672, -1493.9874267578, 2.7457542419434, 176.41101074219, 208.98083496094, 27.508056640625); CreateObject(3633, 1914.4991455078, -1492.5200195313, 4.774872303009, 15.875244140625, 357.51159667969, 334.69348144531); CreateObject(3577, 1928.5278320313, -1492.3489990234, 5.2638850212097, 14.440002441406, 0, 359.5); CreateObject(3632, 1927.7869873047, -1494.0594482422, 2.7736701965332, 359.74731445313, 89.423217773438, 358.00598144531); CreateObject(3632, 1928.4090576172, -1494.6427001953, 2.7674880027771, 359.74731445313, 89.423217773438, 359.9909667968; CreateObject(3632, 1927.2111816406, -1494.6339111328, 2.7654318809509, 359.74731445313, 89.417724609375, 348.0791015625); CreateObject(3632, 1927.8572998047, -1494.3653564453, 3.3144767284393, 359.74731445313, 89.412231445313, 348.07434082031); CreateObject(3632, 1928.0324707031, -1494.1518554688, 3.915700674057, 359.74731445313, 89.412231445313, 356.01428222656); CreateObject(3632, 1919.5570068359, -1495.2408447266, 2.7529993057251, 359.74731445313, 89.417724609375, 352.04943847656); CreateObject(3632, 1919.2750244141, -1496.8978271484, 2.7542052268982, 359.74731445313, 89.412231445313, 348.0759277343; CreateObject(3632, 1917.1591796875, -1495.4970703125, 2.7497363090515, 359.74731445313, 89.40673828125, 348.07434082031); CreateObject(3632, 1921.3132324219, -1498.0533447266, 2.7583198547363, 359.74731445313, 89.40673828125, 25.7890625); CreateObject(3632, 1927.1556396484, -1497.1735839844, 2.7678184509277, 359.74731445313, 89.401245117188, 19.830047607422); CreateObject(2991, 1920.6142578125, -1491.6353759766, 5.2094492912292, 13.894989013672, 0, 0); CreateObject(2912, 1920.6724853516, -1494.2170410156, 2.537234544754, 84.120025634766, 0, 0); CreateObject(2912, 1920.6506347656, -1493.0484619141, 4.1997489929199, 15.879974365234, 0, 348.09008789063); CreateObject(2912, 1921.7247314453, -1494.3212890625, 2.5257487297058, 84.116821289063, 0, 25.804809570313); CreateObject(1424, 1926.7596435547, -1498.7620849609, 2.8074009418488, 0, 0, 358.01501464844); CreateObject(1424, 1923.8492431641, -1498.8226318359, 2.8024852275848, 0, 0, 11.906494140625); CreateObject(1424, 1919.5845947266, -1499.0074462891, 2.7954270839691, 0, 0, 358.0087890625); CreateObject(1424, 1916.2078857422, -1498.8126220703, 2.7902891635895, 0, 0, 354.03601074219); CreateObject(1424, 1912.0521240234, -1498.7650146484, 2.7801492214203, 0, 0, 359.98937988281); CreateObject(1424, 1908.3376464844, -1498.5606689453, 2.7737996578217, 0, 0, 354.03405761719); CreateObject(1424, 1894.5833740234, -1494.3345947266, 2.7502882480621, 0, 0, 316.3142089843; CreateObject(1424, 1897.5582275391, -1497.0979003906, 2.7553732395172, 0, 0, 324.25280761719); CreateObject(1424, 1900.4790039063, -1498.2333984375, 2.7603662014008, 0, 0, 348.0703125); CreateObject(1424, 1904.1213378906, -1498.5849609375, 2.7665922641754, 0, 0, 357.99377441406); CreateObject(1282, 1928.9743652344, -1498.8807373047, 2.9866087436676, 0, 0, 176.9306640625); CreateObject(1282, 1906.3225097656, -1498.6284179688, 2.9459135532379, 0, 0, 167.00048828125); CreateObject(1282, 1895.9948730469, -1495.8298339844, 2.9280073642731, 0, 0, 139.20791625977); CreateObject(1282, 1914.0992431641, -1498.759765625, 2.931708574295, 0, 0, 176.9226074218; CreateObject(1282, 1921.7705078125, -1498.9831542969, 2.9743950366974, 0, 0, 166.99694824219); CreateObject(1228, 1947.5692138672, -1499.3767089844, 2.7511913776398, 0, 0, 268.69067382813); CreateObject(1237, 1953.8089599609, -1493.3239746094, 2.3426313400269, 0, 0, 0); CreateObject(1237, 1953.5476074219, -1494.0145263672, 2.3428592681885, 0, 0, 0); CreateObject(1237, 1953.3168945313, -1495.2612304688, 2.3436827659607, 0, 0, 15.8798828125); CreateObject(1237, 1952.7950439453, -1495.7241210938, 2.3432426452637, 0, 0, 268.42041015625); CreateObject(1237, 1953.4128417969, -1497.2529296875, 2.3457922935486, 0, 0, 332.21020507813); CreateObject(1237, 1952.7156982422, -1496.8526611328, 2.3442091941833, 0, 0, 101.23452758789); CreateObject(1237, 1952.6578369141, -1497.5352783203, 2.3447775840759, 0, 0, 330.22521972656); CreateObject(1237, 1950.3778076172, -1498.1845703125, 2.3336997032166, 0, 0, 0); CreateObject(1237, 1953.1776123047, -1493.4123535156, 2.3416385650635, 0, 0, 0); CreateObject(1237, 1953.4869384766, -1495.9425048828, 2.3446388244629, 0, 0, 296.47595214844); CreateObject(1237, 1951.2114257813, -1498.3032226563, 2.3352403640747, 0, 0, 334.18212890625); CreateObject(1237, 1950.8914794922, -1497.5583496094, 2.3417816162109, 0, 0, 17.851806640625); CreateObject(1237, 1949.7955322266, -1499.0428466797, 2.3335409164429, 0, 0, 306.38293457031); CreateObject(1282, 1954.7269287109, -1495.0921630859, 3.0347440242767, 0, 0, 356.0300292968; CreateObject(1282, 1954.3977050781, -1498.2474365234, 3.0372631549835, 0, 0, 168.673828125); CreateObject(1228, 1972.9168701172, -1493.5457763672, 2.785594701767, 0, 0, 304.42041015625); CreateObject(1228, 1971.2884521484, -1494.615234375, 2.7839066982269, 0, 0, 304.42016601563); CreateObject(1228, 1969.4791259766, -1495.6066894531, 2.7839906215668, 0, 0, 294.49523925781); CreateObject(1228, 1967.4910888672, -1496.4438476563, 2.7838380336761, 0, 0, 290.52404785156); CreateObject(1228, 1965.7788085938, -1497.0634765625, 2.7836072444916, 0, 0, 286.5524902343; CreateObject(1228, 1964.0109863281, -1497.6275634766, 2.7832953929901, 0, 0, 286.55090332031); CreateObject(1228, 1962.2778320313, -1498.1536865234, 2.7829539775848, 0, 0, 286.55090332031); CreateObject(1228, 1960.396484375, -1498.67578125, 2.7802474498749, 0, 0, 286.55090332031); CreateObject(1228, 1958.5811767578, -1499.0297851563, 2.7774903774261, 0, 0, 276.6259765625); CreateObject(1228, 1956.6469726563, -1499.2214355469, 2.7665565013885, 0, 0, 276.6247558593; CreateObject(1228, 1954.3323974609, -1499.3529052734, 2.7627284526825, 0, 0, 270.66979980469); CreateObject(1228, 1952.1046142578, -1499.4301757813, 2.7589962482452, 0, 0, 268.68481445313); CreateObject(1228, 1944.6213378906, -1499.4766845703, 2.7462494373322, 0, 0, 268.68713378906); CreateObject(1228, 1941.3503417969, -1499.3638916016, 2.7405478954315, 0, 0, 264.71716308594); CreateObject(1228, 1938.5760498047, -1499.2288818359, 2.7356741428375, 0, 0, 264.7155761718; CreateObject(1228, 1931.6025390625, -1498.96484375, 2.7234952449799, 0, 0, 268.68395996094); CreateObject(1282, 1933.6839599609, -1499.0046386719, 2.9947798252106, 0, 0, 176.92932128906); CreateObject(1228, 1935.7908935547, -1498.9885253906, 2.730678319931, 0, 0, 266.6989746093; //End Of Crashed Truck Objects By Mive AddStaticVehicle(515,1906.4537,-1493.8324,4.3577,92.4848,1,3); // Truck return 1; } |
__________________________________________________ ____
4. I can't use weapons, how can i turn weapons on?
Код:
// Make sure you don't get warnings about tabsize #pragma tabsize 0 // ******************************************************************************************************************** // Set default gamemode name // ******************************************************************************************************************** #define GameModeName "..:::ZeroScan:::.. | Real Life | Trucking | v0.5" // ******************************************************************************************************************** // 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(HostCommand, 128, "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 * 2, true); // Start the timer that will show a random bonus mission for truckers every 5 minutes SetTimer("ShowRandomBonusMission", 1000 * 60 * 5, true); // Start the timer that checks the toll-gates SetTimer("Toll", 1000, true); // 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", 1000, true); 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(playerid, Name, sizeof(Name)); // Also store this name for the player GetPlayerName(playerid, APlayerData[playerid][PlayerName], 24); // Send a message to all players to let them know somebody else joined the server format(NewPlayerMsg, 128, TXT_PlayerJoinedServer, Name, playerid); SendClientMessageToAll(0xFFFFFFFF, NewPlayerMsg); // 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(playerid, DialogLogin, DIALOG_STYLE_INPUT, TXT_DialogLoginTitle, TXT_DialogLoginMsg, TXT_DialogLoginButton1, TXT_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(playerid, DialogRegister, DIALOG_STYLE_INPUT, TXT_DialogRegisterTitle, TXT_DialogRegisterMsg, TXT_DialogRegisterButton1, TXT_DialogButtonCancel); // The houses have been loaded but not the cars, so load all vehicles assigned to the player's houses for (new HouseSlot; HouseSlot < MAX_HOUSESPERPLAYER; HouseSlot++) { // 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(HouseID, true); // Load the cars of the house } // Speedometer setup Speedometer_Setup(playerid); // MissionText TextDraw setup APlayerData[playerid][MissionText] = TextDrawCreate(320.0, 430.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(playerid, 0xFFFFFFFF, "{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 TotalBanTime, Days, Hours, Minutes, Seconds, Msg[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(playerid, 0xFFFFFFFF, TXT_StillBanned); format(Msg, 128, TXT_BannedDuration, Days, Hours, Minutes, Seconds); SendClientMessage(playerid, 0xFFFFFFFF, Msg); } // This callback gets called when a player disconnects from the server public OnPlayerDisconnect(playerid, reason) { // 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(playerid, Name, sizeof(Name)); // Stop spectate mode for all players who are spectating this player for (new i; i < MAX_PLAYERS; i++) 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(i, 0); // Turn off spectate-mode APlayerData[i][SpectateID] = INVALID_PLAYER_ID; APlayerData[i][SpectateType] = ADMIN_SPEC_TYPE_NONE; SendClientMessage(i, 0xFFFFFFFF, "{FF0000}Target player has logged off, ending spectate mode"); } // Send a message to all players to let them know somebody left the server format(Msg, 128, TXT_PlayerLeftServer, Name, playerid); SendClientMessageToAll(0xFFFFFFFF, Msg); // 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 ClassTruckDriver: Trucker_EndJob(playerid); // Stop any trucker job case ClassBusDriver: BusDriver_EndJob(playerid); // Stop any busdriver job case ClassPilot: Pilot_EndJob(playerid); // Stop any pilot job case ClassPolice: Police_EndJob(playerid); // Stop any police job case ClassMafia: Mafia_EndJob(playerid); // Stop any mafia job case ClassAssistance: Assistance_EndJob(playerid); case ClassRoadWorker: Roadworker_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 HouseSlot; HouseSlot < MAX_HOUSESPERPLAYER; HouseSlot++) { // 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 HouseSlot; HouseSlot < MAX_HOUSESPERPLAYER; HouseSlot++) APlayerData[playerid][Houses][HouseSlot] = 0; for (new BusSlot; BusSlot < MAX_BUSINESSPERPLAYER; BusSlot++) 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 j; j < 14; j++) { 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(playerid, text[]) { // Block the player's text if he has been muted if (APlayerData[playerid][Muted] == true) { // Let the player know he's still muted SendClientMessage(playerid, 0xFFFFFFFF, "{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(playerid, dialogid, response, listitem, inputtext[]) { // Select the proper dialog to process switch (dialogid) { case DialogRegister: Dialog_Register(playerid, response, inputtext); // The "Register"-dialog case DialogLogin: Dialog_Login(playerid, response, inputtext); // The "Login"-dialog case DialogStatsOtherPlayer: Dialog_StatsOtherPlayer(playerid, response, listitem); case DialogStatsHouse: Dialog_StatsHouse(playerid, response, listitem); case DialogStatsGoHouse: Dialog_StatsGoHouse(playerid, response, listitem); case DialogStatsGoBusiness: Dialog_StatsGoBusiness(playerid, response, listitem); case DialogRescue: Dialog_Rescue(playerid, response, listitem); // The rescue-dialog case DialogBuyLicenses: Dialog_BuyLicenses(playerid, response, listitem); // The license-dialog (allows the player to buy trucker/busdriver licenses) case DialogRules: Dialog_Rules(playerid, response); case DialogTruckerJobMethod: Dialog_TruckerSelectJobMethod(playerid, response, listitem); // The work-dialog for truckers (shows the loads he can carry and lets the player choose the load) case DialogTruckerSelectLoad: Dialog_TruckerSelectLoad(playerid, response, listitem); // The load-selection dialog for truckers (shows the startlocations for the selected load and let the player choose his startlocation) case DialogTruckerStartLoc: Dialog_TruckerSelectStartLoc(playerid, response, listitem); // The start-location dialog for truckers (shows the endlocations for the selected load and let the player choose his endlocation) case DialogTruckerEndLoc: Dialog_TruckerSelectEndLoc(playerid, response, listitem); // The end-location dialog for truckers (processes the selected endlocation and starts the job) case DialogBusJobMethod: Dialog_BusSelectJobMethod(playerid, response, listitem); // The work-dialog for busdrivers (process the options to choose own busroute or auto-assigned busroute) case DialogBusSelectRoute: Dialog_BusSelectRoute(playerid, response, listitem); // Choose the busroute and start the job case DialogCourierSelectQuant: Dialog_CourierSelectQuant(playerid, response, listitem); case DialogBike: Dialog_Bike(playerid, response, listitem); // The bike-dialog case DialogCar: Dialog_Car(playerid, response, listitem); // The car-dialog (which uses a split dialog structure) case DialogPlane: Dialog_Plane(playerid, response, listitem); // The plane-dialog (which uses a split dialog structure) case DialogTrailer: Dialog_Trailer(playerid, response, listitem); // The trailer-dialog (which uses a split dialog structure) case DialogBoat: Dialog_Boat(playerid, response, listitem); // The boat-dialog case DialogNeon: Dialog_Neon(playerid, response, listitem); // The neon-dialog case DialogRentCarClass: Dialog_RentProcessClass(playerid, response, listitem); // The player chose a vehicleclass from where he can rent a vehicle case DialogRentCar: Dialog_RentCar(playerid, response, listitem); // The player chose a vehicle from the list of vehicles from the vehicleclass he chose before case DialogPlayerCommands: Dialog_PlayerCommands(playerid, response, listitem); // Displays all commands in a split-dialog structure case DialogPrimaryCarColor: Dialog_PrimaryCarColor(playerid, response, listitem); case DialogSedundaryCarColor: Dialog_SedundaryCarColor(playerid, response, listitem); case DialogWeather: Dialog_Weather(playerid, response, listitem); // The weather dialog case DialogCarOption: Dialog_CarOption(playerid, response, listitem); // The caroption dialog case DialogSelectConvoy: Dialog_SelectConvoy(playerid, response, listitem); case DialogHouseMenu: Dialog_HouseMenu(playerid, response, listitem); // Process the main housemenu case DialogUpgradeHouse: Dialog_UpgradeHouse(playerid, response, listitem); // Process the house-upgrade menu case DialogGoHome: Dialog_GoHome(playerid, response, listitem); // Port to one of your houses case DialogHouseNameChange: Dialog_ChangeHouseName(playerid, response, inputtext); // Change the name of your house case DialogSellHouse: Dialog_SellHouse(playerid, response); // Sell the house case DialogBuyCarClass: Dialog_BuyCarClass(playerid, response, listitem); // The player chose a vehicleclass from where he can buy a vehicle case DialogBuyCar: Dialog_BuyCar(playerid, response, listitem); // The player chose a vehicle from the list of vehicles from the vehicleclass he chose before case DialogSellCar: Dialog_SellCar(playerid, response, listitem); case DialogBuyInsurance: Dialog_BuyInsurance(playerid, response); case DialogGetCarSelectHouse: Dialog_GetCarSelectHouse(playerid, response, listitem); case DialogGetCarSelectCar: Dialog_GetCarSelectCar(playerid, response, listitem); case DialogUnclampVehicles: Dialog_UnclampVehicles(playerid, response); case DialogCreateBusSelType: Dialog_CreateBusSelType(playerid, response, listitem); case DialogBusinessMenu: Dialog_BusinessMenu(playerid, response, listitem); case DialogGoBusiness: Dialog_GoBusiness(playerid, response, listitem); case DialogBusinessNameChange: Dialog_ChangeBusinessName(playerid, response, inputtext); // Change the name of your business case DialogSellBusiness: Dialog_SellBusiness(playerid, response); // Sell the business case DialogBankPasswordRegister: Dialog_BankPasswordRegister(playerid, response, inputtext); case DialogBankPasswordLogin: Dialog_BankPasswordLogin(playerid, response, inputtext); case DialogBankOptions: Dialog_BankOptions(playerid, response, listitem); case DialogBankDeposit: Dialog_BankDeposit(playerid, response, inputtext); case DialogBankWithdraw: Dialog_BankWithdraw(playerid, response, inputtext); case DialogBankTransferMoney: Dialog_BankTransferMoney(playerid, response, inputtext); case DialogBankTransferName: Dialog_BankTransferName(playerid, response, inputtext); case DialogBankCancel: Dialog_BankCancel(playerid, response); case DialogHelpItemChosen: Dialog_HelpItemChosen(playerid, response, listitem); case DialogHelpItem: Dialog_HelpItem(playerid, response); case DialogOldPassword: Dialog_OldPassword(playerid, response, inputtext); case DialogNewPassword: Dialog_NewPassword(playerid, response, inputtext); case DialogConfirmPassword: Dialog_ConfirmPassword(playerid, response); } return 1; } // this callback gets called when a player clicks on another player on the scoreboard public OnPlayerClickPlayer(playerid, clickedplayerid, source) { // 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], NumHouses, NumBusinesses; // Construct the dialog-title GetPlayerName(clickedplayerid, Name, sizeof(Name)); format(DialogTitle, 128, "Statistics of player: %s", Name); // Add the IP of the player to the list GetPlayerIp(clickedplayerid, PlayerIP, sizeof(PlayerIP)); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Player-IP: {00FF00}%s\n", PlayerStatList, PlayerIP); // Add the level of the player to the list format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Admin-level: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][PlayerLevel]); // Add the class of the player to the list switch(APlayerData[clickedplayerid][PlayerClass]) { case ClassTruckDriver: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Trucker\n", PlayerStatList); case ClassBusDriver: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Bus driver\n", PlayerStatList); case ClassPilot: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Pilot\n", PlayerStatList); case ClassPolice: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Police\n", PlayerStatList); case ClassMafia: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Mafia\n", PlayerStatList); case ClassCourier: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Courier\n", PlayerStatList); case ClassAssistance: format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Class: {00FF00}Assistance\n", PlayerStatList); } // Add money and score of the player to the list format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Money: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][PlayerMoney]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Score: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][PlayerScore]); // Add wanted-level of the player to the list format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Wanted-level: {00FF00}%i\n", PlayerStatList, GetPlayerWantedLevel(clickedplayerid)); // Add truckerlicense and busdriver license of the player to the list if (APlayerData[clickedplayerid][TruckerLicense] == 1) format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Trucker License: {00FF00}Yes\n", PlayerStatList); else format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Trucker License: {00FF00}No\n", PlayerStatList); if (APlayerData[clickedplayerid][BusLicense] == 1) format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Bus License: {00FF00}Yes\n", PlayerStatList); else format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Bus License: {00FF00}No\n", PlayerStatList); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed trucker jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsTruckerJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed convoy jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsConvoyJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed busdriver jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsBusDriverJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed pilot jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsPilotJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed mafia jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsMafiaJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Stolen mafia-loads: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsMafiaStolen]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Fined players: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsPoliceFined]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Jailed players: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsPoliceJailed]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed courier jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsCourierJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Completed roadworker jobs: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsRoadworkerJobs]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Assisted players: {00FF00}%i\n", PlayerStatList, APlayerData[clickedplayerid][StatsAssistance]); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Meters driven: {00FF00}%f\n", PlayerStatList, APlayerData[clickedplayerid][StatsMetersDriven]); // Count the number of houses/businesses that the player has and add them to the list for (new i; i < MAX_HOUSESPERPLAYER; i++) if (APlayerData[clickedplayerid][Houses][i] != 0) NumHouses++; for (new i; i < MAX_BUSINESSPERPLAYER; i++) if (APlayerData[clickedplayerid][Business][i] != 0) NumBusinesses++; format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Houses: {00FF00}%i (double-click for stats)\n", PlayerStatList, NumHouses); format(PlayerStatList, sizeof(PlayerStatList), "%s{FFFFFF}Businesses: {00FF00}%i (double-click for stats)\n", PlayerStatList, NumBusinesses); // 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(playerid, DialogStatsOtherPlayer, DIALOG_STYLE_LIST, DialogTitle, PlayerStatList, TXT_DialogButtonSelect, TXT_DialogButtonCancel); // Let the player buy a license } return 1; } // This callback gets called when a player picks up any pickup public OnPlayerPickUpPickup(playerid, pickupid) { // 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(playerid, DialogBuyLicenses, DIALOG_STYLE_LIST, TXT_DialogLicenseTitle, TXT_DialogLicenseList, TXT_DialogButtonBuy, TXT_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(playerid, 0xFFFFFFFF, TXT_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(playerid, 0); SetPlayerInterior(playerid, 0); // Also set a variable that tracks in which house the player currently is APlayerData[playerid][CurrentHouse] = 0; // Disable the clock TogglePlayerClock(playerid, 0); // 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(missiontext, sizeof(missiontext), Trucker_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassTruckDriver); // Set the playercolor (chatcolor for the player and color on the map) } case ClassBusDriver: // Bus-driver class { format(missiontext, sizeof(missiontext), BusDriver_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassBusDriver); // Set the playercolor (chatcolor for the player and color on the map) } case ClassPilot: // Pilot class { format(missiontext, sizeof(missiontext), Pilot_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassPilot); // Set the playercolor (chatcolor for the player and color on the map) } case ClassPolice: // Police class { format(missiontext, sizeof(missiontext), Police_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassPolice); // 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", 1000, true, "i", playerid); // Check if the police player can get weapons if (PoliceGetsWeapons == true) { // Give up to 12 weapons to the player for (new i; i < 12; i++) GivePlayerWeapon(playerid, APoliceWeapons[i], PoliceWeaponsAmmo); } } case ClassMafia: // Mafia class { format(missiontext, sizeof(missiontext), Mafia_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassMafia); // 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", 1000, true, "i", playerid); } case ClassCourier: // Courier class { format(missiontext, sizeof(missiontext), Courier_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassCourier); // Set the playercolor (chatcolor for the player and color on the map) } case ClassAssistance: // Assistance class { format(missiontext, sizeof(missiontext), Assistance_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassAssistance); // 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", 1000, true, "i", playerid); } case ClassRoadWorker: // Roadworker class { format(missiontext, sizeof(missiontext), RoadWorker_NoJobText); // Preset the missiontext SetPlayerColor(playerid, ColorClassRoadWorker); // 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(playerid, APlayerData[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(playerid, APlayerData[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(playerid, TXT_BusDriverMissionPassed, 3000, 4); // 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(playerid, TXT_RoadworkerMissionPassed, 3000, 4); // 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(playerid, killerid, reason) { // 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(playerid, APlayerData[playerid][MissionText]); // Stop any job that may have started switch (APlayerData[playerid][PlayerClass]) { case ClassTruckDriver: Trucker_EndJob(playerid); case ClassBusDriver: BusDriver_EndJob(playerid); case ClassPilot: Pilot_EndJob(playerid); case ClassPolice: Police_EndJob(playerid); case ClassMafia: Mafia_EndJob(playerid); case ClassCourier: Courier_EndJob(playerid); case ClassAssistance: Assistance_EndJob(playerid); case ClassRoadWorker: Roadworker_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(killerid, GetPlayerWantedLevel(killerid) + 1); // Get the name of the killed player and the killer GetPlayerName(playerid, VictimName, sizeof(VictimName)); GetPlayerName(killerid, KillerName, sizeof(KillerName)); // Let the killed know the police are informed about the kill format(Msg, 128, "{FF0000}You've killed {FFFF00}%s{FF0000}, you're wanted by the police now", VictimName); SendClientMessage(killerid, 0xFFFFFFFF, Msg); // Inform all police players about the kill format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} killed {FFFF00}%s{00FF00}, pursue and fine him", KillerName, VictimName); Police_SendMessage(Msg); } return 1; } // This callback gets called when the player is selecting a class (but hasn't clicked "Spawn" yet) public OnPlayerRequestClass(playerid, classid) { SetPlayerInterior(playerid,14); SetPlayerPos(playerid,258.4893,-41.4008,1002.0234); SetPlayerFacingAngle(playerid, 270.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 0, 1, 2, 3, 4, 5, 6, 7: // Classes that will be truckdrivers { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassTrucker, 3000, 4); // Store the class for the player (truckdriver) APlayerData[playerid][PlayerClass] = ClassTruckDriver; } case 8, 9: // Classes that will be bus-drivers { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassBusDriver, 3000, 4); // 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(playerid, TXT_ClassPilot, 3000, 4); // Store the class for the player (pilot) APlayerData[playerid][PlayerClass] = ClassPilot; } case 11, 12, 13: // Classes that will be police { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassPolice, 3000, 4); // Store the class for the player (police) APlayerData[playerid][PlayerClass] = ClassPolice; } case 14, 15, 16: // Classes that will be mafia { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassMafia, 3000, 4); // Store the class for the player (mafia) APlayerData[playerid][PlayerClass] = ClassMafia; } case 17, 18: // Classes that will be courier { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassCourier, 3000, 4); // 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(playerid, TXT_ClassAssistance, 3000, 4); // Store the class for the player (assistance) APlayerData[playerid][PlayerClass] = ClassAssistance; } case 20, 21, 22: // Classes that will be roadworker { // Display the name of the class GameTextForPlayer(playerid, TXT_ClassRoadWorker, 3000, 4); // 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 Index, Float:x, Float:y, Float:z, Float:Angle, Name[24], Msg[128]; // Get the player's name GetPlayerName(playerid, Name, sizeof(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 x = ASpawnLocationsTrucker[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsTrucker[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsTrucker[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsTrucker[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Trucker class", Name); } case ClassBusDriver: { Index = random(sizeof(ASpawnLocationsBusDriver)); x = ASpawnLocationsBusDriver[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsBusDriver[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsBusDriver[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsBusDriver[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Busdriver class", Name); } case ClassPilot: { Index = random(sizeof(ASpawnLocationsPilot)); x = ASpawnLocationsPilot[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsPilot[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsPilot[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsPilot[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{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 NormalPlayers, PolicePlayers, bool: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 pid; pid < MAX_PLAYERS; pid++) { // 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 ClassTruckDriver, ClassBusDriver, ClassPilot, ClassMafia, ClassCourier, ClassAssistance, ClassRoadWorker: 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", 5000, 4); SendClientMessage(playerid, 0xFFFFFFFF, "{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", 5000, 4); SendClientMessage(playerid, 0xFFFFFFFF, "{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", 5000, 4); SendClientMessage(playerid, 0xFFFFFFFF, "{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)); x = ASpawnLocationsPolice[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsPolice[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsPolice[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsPolice[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Police class", Name); } case ClassMafia: { Index = random(sizeof(ASpawnLocationsMafia)); x = ASpawnLocationsMafia[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsMafia[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsMafia[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsMafia[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Mafia class", Name); } case ClassCourier: { Index = random(sizeof(ASpawnLocationsCourier)); x = ASpawnLocationsCourier[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsCourier[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsCourier[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsCourier[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Courier class", Name); } case ClassAssistance: { Index = random(sizeof(ASpawnLocationsAssistance)); x = ASpawnLocationsAssistance[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsAssistance[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsAssistance[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsAssistance[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{00FF00}Player {FFFF00}%s{00FF00} joined {FFFF00}Assistance class", Name); } case ClassRoadWorker: { Index = random(sizeof(ASpawnLocationsRoadWorker)); x = ASpawnLocationsRoadWorker[Index][SpawnX]; // Get the X-position for the spawnlocation y = ASpawnLocationsRoadWorker[Index][SpawnY]; // Get the Y-position for the spawnlocation z = ASpawnLocationsRoadWorker[Index][SpawnZ]; // Get the Z-position for the spawnlocation Angle = ASpawnLocationsRoadWorker[Index][SpawnAngle]; // Get the rotation-angle for the spawnlocation format(Msg, 128, "{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(playerid, 0, GetPlayerSkin(playerid), x, y, z, Angle, 0, 0, 0, 0, 0, 0); // Send the message to all players (who joined which class) SendClientMessageToAll(0xFFFFFFFF, Msg); 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(vehicleid, AVehicleData[vehicleid][PaintJob] - 1); } // Also update the car-color ChangeVehicleColor(vehicleid, AVehicleData[vehicleid][Color1], AVehicleData[vehicleid][Color2]); // Re-add all components that were installed (if they were there) for (new i; i < 14; i++) { // Remove all mods from the vehicle (all added mods applied by hackers will hopefully be removed this way when the vehicle respawns) RemoveVehicleComponent(vehicleid, GetVehicleComponentInSlot(vehicleid, i)); // Check if the componentslot has a valid component-id if (AVehicleData[vehicleid][Components][i] != 0) AddVehicleComponent(vehicleid, AVehicleData[vehicleid][Components][i]); // Add the component to the vehicle } return 1; } // This callback is called when the vehicle leaves a mod shop public OnVehicleRespray(playerid, vehicleid, color1, color2) { // 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, -150, 0); SendClientMessage(playerid, 0xFFFFFFFF, "{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(playerid, enterexit, interiorid) { return 1; } // This callback gets called whenever a player mods his vehicle public OnVehicleMod(playerid, vehicleid, componentid) { // 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(playerid, vehicleid, paintjobid) { // 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(playerid, vehicleid, ispassenger) { // Setup local variables new engine, lights, alarm, doors, bonnet, boot, objective; // Check if the vehicle has fuel if (AVehicleData[vehicleid][Fuel] > 0) { // Start the engine and turn on the lights GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vehicleid, 1, 1, alarm, doors, bonnet, boot, objective); } // Store the player's current location and interior-id, otherwise anti-airbreak hack code could kick you GetPlayerPos(playerid, APlayerData[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(playerid, vehicleid) { // Setup local variables new engine, lights, alarm, doors, bonnet, boot, objective; // Check if the player is the driver of the vehicle if (GetPlayerVehicleSeat(playerid) == 0) { // Turn off the lights and engine GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vehicleid, 0, 0, alarm, doors, bonnet, boot, objective); } // 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(playerid, TXT_FailedMission, 5000, 4); // Reduce the player's cash by 1000 RewardPlayer(playerid, -1000, 0); } } 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 vid, Name[24], Msg[128], engine, lights, alarm, doors, bonnet, boot, objective; 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(playerid, Name, sizeof(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], Name, false) != 0) { // Force the player out of the vehicle RemovePlayerFromVehicle(playerid); // Turn off the lights and engine GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vid, 0, 0, alarm, doors, bonnet, boot, objective); // Let the player know he cannot use somebody else's vehicle format(Msg, 128, TXT_SpeedometerCannotUseVehicle, AVehicleData[vid][Owner]); SendClientMessage(playerid, 0xFFFFFFFF, Msg); } // 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(vid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vid, 0, 0, alarm, doors, bonnet, boot, objective); // Let the player know he cannot use a clamped vehicle format(Msg, 128, TXT_SpeedometerClampedVehicle); SendClientMessage(playerid, 0xFFFFFFFF, Msg); format(Msg, 128, TXT_SpeedometerClampedVehicle2); SendClientMessage(playerid, 0xFFFFFFFF, Msg); } } // 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 VehiclePoliceLSPD, VehiclePoliceSFPD, VehiclePoliceLVPD, VehicleHPV1000, VehiclePoliceRanger: { // Force the player out of the vehicle RemovePlayerFromVehicle(playerid); // Turn off the lights and engine GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vid, 0, 0, alarm, doors, bonnet, boot, objective); // Let the player know he cannot use a cop car SendClientMessage(playerid, 0xFFFFFFFF, "{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 VehicleShamal, VehicleNevada, VehicleStuntPlane, VehicleDodo, VehicleMaverick, VehicleCargobob: { // Force the player out of the vehicle RemovePlayerFromVehicle(playerid); // Turn off the lights and engine GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vid, 0, 0, alarm, doors, bonnet, boot, objective); // Let the player know he cannot use a cop car SendClientMessage(playerid, 0xFFFFFFFF, "{FF0000}You cannot use a pilot vehicle"); } } } } } } return 1; } // This callback gets called whenever a player presses a key public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { // 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(playerid, closest) < 10) // Check if the closest vehicle is within 10m from the player AttachTrailerToVehicle(closest, GetPlayerVehicleID(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 i; i < sizeof(ARefuelPickups); i++) { // Check if the player is in range of a refuelpickup if(IsPlayerInRangeOfPoint(playerid, 2.5, ARefuelPickups[i][pux], ARefuelPickups[i][puy], ARefuelPickups[i][puz])) { // Show a message that the player's vehicle is refuelling GameTextForPlayer(playerid, TXT_Refuelling, 3000, 4); // Don't allow the player to move again (the timer will allow it after refuelling) TogglePlayerControllable(playerid, 0); // Start a timer (let the player wait until the vehicle is refuelled) SetTimerEx("RefuelVehicle", 5000, false, "i", playerid); // Stop the search break; } } } } return 1; } forward VehicleToPlayer(playerid,vehicleid); // Get the distance between the vehicle and the player public VehicleToPlayer(playerid, vehicleid) { // Setup local variables new Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ, Float:distance; // Get the player position GetPlayerPos(playerid, pX, pY, pZ); // Get the vehicle position GetVehiclePos(vehicleid, cX, cY, cZ); // Calculate the distance distance = floatsqroot(floatpower(floatabs(floatsub(cX, pX)), 2) + floatpower(floatabs(floatsub(cY, pY)), 2) + floatpower(floatabs(floatsub(cZ, pZ)), 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+1, Float:distance2, result = -1; // Loop through all vehicles for(new i = 0; i < MAX_VEHICLES; i++) { // 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(playerid, i); // 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(playerid, newkeys, oldkeys) { // Debug keys if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_FIRE key"); if ((newkeys & KEY_ACTION) && !(oldkeys & KEY_ACTION)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_ACTION key"); if ((newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_CROUCH key"); if ((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_SPRINT key"); if ((newkeys & KEY_SECONDARY_ATTACK) && !(oldkeys & KEY_SECONDARY_ATTACK)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_SECONDARY_ATTACK key"); if ((newkeys & KEY_JUMP) && !(oldkeys & KEY_JUMP)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_JUMP key"); if ((newkeys & KEY_LOOK_RIGHT) && !(oldkeys & KEY_LOOK_RIGHT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_LOOK_RIGHT key"); if ((newkeys & KEY_HANDBRAKE) && !(oldkeys & KEY_HANDBRAKE)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_HANDBRAKE key"); if ((newkeys & KEY_LOOK_LEFT) && !(oldkeys & KEY_LOOK_LEFT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_LOOK_LEFT key"); if ((newkeys & KEY_SUBMISSION) && !(oldkeys & KEY_SUBMISSION)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_SUBMISSION key"); if ((newkeys & KEY_LOOK_BEHIND) && !(oldkeys & KEY_LOOK_BEHIND)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_LOOK_BEHIND key"); if ((newkeys & KEY_WALK) && !(oldkeys & KEY_WALK)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_WALK key"); if ((newkeys & KEY_ANALOG_UP) && !(oldkeys & KEY_ANALOG_UP)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_ANALOG_UP key"); if ((newkeys & KEY_ANALOG_DOWN) && !(oldkeys & KEY_ANALOG_DOWN)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_ANALOG_DOWN key"); if ((newkeys & KEY_ANALOG_LEFT) && !(oldkeys & KEY_ANALOG_LEFT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_ANALOG_LEFT key"); if ((newkeys & KEY_ANALOG_RIGHT) && !(oldkeys & KEY_ANALOG_RIGHT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_ANALOG_RIGHT key"); if ((newkeys & KEY_UP) && !(oldkeys & KEY_UP)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_UP key"); if ((newkeys & KEY_DOWN) && !(oldkeys & KEY_DOWN)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_DOWN key"); if ((newkeys & KEY_LEFT) && !(oldkeys & KEY_LEFT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_LEFT key"); if ((newkeys & KEY_RIGHT) && !(oldkeys & KEY_RIGHT)) SendClientMessage(playerid, 0x0000FFFF, "You pressed the KEY_RIGHT key"); return 1; }

I know.. I'm a big noob, but i want to learn something :P
[I hope you can read my questions]