Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //--------------------------------------------------------------//
- // Mechanic job system by hobo101 aka MarkNelson V0.1
- // If you're using this system as a filterscript or in your game-mode
- // Please, don't remove the credits
- // If you find any bug, feel free to report it through PM on samp forums
- // to MarkNelson, Thank you for understanding.
- //-------------------------------------------------------------//
- #include <a_samp>
- #include <streamer>
- #include <zcmd>
- #include <sscanf2>
- //Mechanic Job Color + Civil Color + Dialog
- #define COLOR_CIVIL 0xFFFF6CFF
- #define COLOR_MECHANIC 0x808040FF
- #define DIALOG_MECHANIC 894
- #define DIALOG_MECHANICS 895
- #define DIALOG_MECHHELP 896
- //
- new mechjob[MAX_PLAYERS];
- new mechpickup;
- new Repairing[MAX_PLAYERS];
- new request[MAX_PLAYERS];
- //
- Float:GetDistanceBetweenPlayers(playerid,id)
- {
- new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
- if(!IsPlayerConnected(playerid) || !IsPlayerConnected(id)) {
- return -1.00;
- }
- GetPlayerPos(playerid,x1,y1,z1);
- GetPlayerPos(id,x2,y2,z2);
- return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
- }
- stock SendToMechanics(color, str[])
- {
- for(new i=0 ; i<MAX_PLAYERS ; i++)
- {
- if(IsPlayerConnected(i) && mechjob[i] > 0)
- {
- SendClientMessage(i, color, str);
- }
- }
- }
- stock GetName(playerid) {
- new pName[26];
- GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
- return pName;
- }
- stock GetPlayerNameEx(playerid)
- {
- new playername[25];
- GetPlayerName(playerid, playername, sizeof(playername));
- return playername;
- }
- //
- #define FILTERSCRIPT
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print("* hobo101(MarkNelson)'s mechanic job system has been loaded *");
- print("--------------------------------------\n");
- Create3DTextLabel("Mechanic Job",0xFFFF80FF,1629.0221,-1903.3815,13.5532,30.0,0); //Mechanic Job 3dtextlabel
- mechpickup = CreateDynamicPickup(1275,2,1629.0221,-1903.3815,13.5532,0,0,-1,100.0); // Mechanic Job Pickup
- AddStaticVehicle(525,1648.6406,-1904.0719,13.2318,11.6325,103,37); // Tow Truck 1
- AddStaticVehicle(525,1632.0477,-1908.3938,13.2304,276.3869,103,37); // Tow Truck 2
- AddStaticVehicle(525,1670.6864,-1894.7494,13.2265,89.3171,103,37); // Tow Truck 3
- AddStaticVehicle(525,1625.6631,-1896.0985,13.2308,269.6205,103,37); // Tow Truck 4
- AddStaticVehicle(525,1624.0439,-1857.5204,13.2281,183.4155,103,37); // Tow Truck 5
- return 1;
- }
- public OnFilterScriptExit()
- {
- print("\n----------------------------------");
- print(" * hobo101(MarkNelson)'s mechanic job system has been unloaded *");
- print("----------------------------------\n");
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- mechjob[playerid] = 0;
- Repairing[playerid] = 0;
- request[playerid] = 0;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- mechjob[playerid] = 0;
- Repairing[playerid] = 0;
- request[playerid] = 0;
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- mechjob[playerid] = 0;
- SetPlayerColor(playerid, COLOR_CIVIL);
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- if(mechjob[playerid] == 0)
- {
- if(newstate == PLAYER_STATE_DRIVER)
- {
- if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525 )
- {
- SendClientMessage(playerid, COLOR_CIVIL,"This vehicle is restricted.");
- RemovePlayerFromVehicle(playerid);
- }
- }
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case 894:
- {
- if(!response) SendClientMessage(playerid, COLOR_CIVIL, "Okay, Good bye. If you changed your mind, come back.");
- if(response)
- {
- if(mechjob[playerid] == 1 ) return SendClientMessage(playerid, COLOR_MECHANIC, "You're already a mechanic");
- if(GetPlayerWantedLevel(playerid) > 0) return SendClientMessage(playerid, COLOR_CIVIL, "You are wanted, you can't join, We don't accept criminals");
- SendClientMessage(playerid,COLOR_MECHANIC, "Congratulations! Now you're a mechanic. Use /ljob to leave the job");
- mechjob[playerid] = 1;
- SetPlayerColor(playerid,COLOR_MECHANIC);
- new pname[MAX_PLAYER_NAME], string[120];
- GetPlayerName(playerid, pname, sizeof(pname));
- format(string, sizeof(string), "%s is now one of our mechanics in San Andreas!", pname);
- SendClientMessageToAll(COLOR_MECHANIC, string);
- }
- }
- }
- return 1;
- }
- CMD:fix(playerid,params[])
- {
- if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command");
- if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command");
- if(mechjob[playerid] == 0) return SendClientMessage(playerid, COLOR_MECHANIC, "You're not a mechanic!");
- if(mechjob[playerid] == 1)
- {
- new id;
- if(sscanf(params, "u", id)) return SendClientMessage(playerid, COLOR_MECHANIC, "Syntax: /fix [id]");
- else if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_CIVIL, "That player is not connected to the server!");
- else if(id == playerid) return SendClientMessage(playerid, COLOR_MECHANIC, "You cannot fix yourself's car!");
- else if(GetDistanceBetweenPlayers(playerid, id) > 5.00) return SendClientMessage(playerid, COLOR_MECHANIC, "That player is too far away!");
- else if(GetPlayerState(id) == PLAYER_STATE_ONFOOT) return SendClientMessage(playerid,COLOR_MECHANIC, "That player is not in a vehicle!");
- else if(GetPlayerState(id) == PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, COLOR_MECHANIC, "That player is not driving a vehicle!");
- else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command!");
- else if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command!");
- else
- {
- if(GetPlayerState(id) == PLAYER_STATE_DRIVER)
- {
- new Float:vhealth;
- new vehicleid = GetPlayerVehicleID(id);
- GetVehicleHealth(vehicleid, vhealth);
- if(Repairing[playerid] == 1) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to wait 2 minutes to fixing a vehicle another time!");
- if(vhealth == 1000.0) return SendClientMessage(playerid, COLOR_MECHANIC, "That player's vehicle has enough health already!");
- if(vhealth > 1000.0) return SendClientMessage(playerid, COLOR_MECHANIC, "That player's vehicle has enough health already!");
- else
- {
- new string[100];
- new pName[MAX_PLAYER_NAME];
- GetPlayerName(id, pName, sizeof(pName));
- RepairVehicle(GetPlayerVehicleID(id));
- format(string, sizeof(string), "You've successfully repaired %s's vehicle (ID: %d)! +$4200", pName, id);
- SendClientMessage(playerid, COLOR_MECHANIC, string);
- SendClientMessage(id, COLOR_MECHANIC, "A mechanic has fixed your vehicle!");
- GivePlayerMoney(playerid,4200);
- SetTimerEx("repairing", 120000, false, "i", playerid); // the timer of repairing cool down
- Repairing[playerid] = 1;
- new pname[MAX_PLAYER_NAME], stringx[190];
- GetPlayerName(playerid, pname, sizeof(pname));
- format(stringx, sizeof(stringx), "[MECHANIC]: %s has fixed a vehicle!", pname);
- SendClientMessageToAll(COLOR_MECHANIC, stringx);
- PlayerPlaySound(id,1133,0.0,0.0,0.0);
- PlayerPlaySound(playerid,1133,0.0,0.0,0.0);
- }
- }
- }
- }
- return 1;
- }
- public OnPlayerPickUpDynamicPickup(playerid, pickupid)
- {
- if(pickupid == mechpickup)
- {
- ShowPlayerDialog(playerid, 894, DIALOG_STYLE_MSGBOX, "{808040}Mechanic job{FFFFFF}", "Welcome to Mechanics Garage\nWell, You can work as a mechanic in San Andreas here!\nYou can use /fix to fix player's vehicles\nAre you sure that you want to join? !", "Yes", "No i won't");
- }
- return 1;
- }
- forward repairing(playerid);
- public repairing(playerid)
- {
- if(mechjob[playerid] == 1)
- {
- SendClientMessage(playerid,COLOR_MECHANIC,"You can fix a vehicle another time now");
- Repairing[playerid] = 0;
- }
- }
- forward requested(playerid);
- public requested(playerid)
- {
- if(request[playerid] == 1)
- {
- SendClientMessage(playerid,COLOR_MECHANIC,"You can request for a mechanic again now");
- request[playerid] = 0;
- }
- }
- CMD:mechanics(playerid, params[])
- {
- new IsMechOnline = 0;
- new string[300], Jstring[128];
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i))
- {
- if(mechjob[i] > 0)
- {
- format(Jstring, 128, "{FFFF00}%s (%d) - Mechanic Available\n", GetPlayerNameEx(i), i);
- strcat(string, Jstring, sizeof(string));
- IsMechOnline++;
- }
- }
- }
- if(IsMechOnline == 0)
- ShowPlayerDialog(playerid,DIALOG_MECHANICS,DIALOG_STYLE_MSGBOX,"Warning","There are no mechanics available at this time" ,"Close","");
- else ShowPlayerDialog(playerid,DIALOG_MECHANICS,DIALOG_STYLE_LIST,"Mechanics", string ,"Close","");
- return 1;
- }
- CMD:ljob(playerid, params[])
- {
- if(mechjob[playerid] == 0) return SendClientMessage(playerid, COLOR_CIVIL, "You're not a mechanic to use this command");
- if(mechjob[playerid] == 1)
- {
- SendClientMessage(playerid, COLOR_CIVIL, "You're a normal civillian now");
- mechjob[playerid] = 0;
- SetPlayerColor(playerid, COLOR_CIVIL);
- ResetPlayerWeapons(playerid);
- }
- if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
- {
- RemovePlayerFromVehicle(playerid);
- }
- return 1;
- }
- CMD:tow(playerid, params[])
- {
- if(mechjob[playerid] == 0) return SendClientMessage(playerid, COLOR_CIVIL, "You have to be a mechanic to do this job");
- if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_MECHANIC, "You are not driving a tow truck!");
- new vehicleid = GetPlayerVehicleID(playerid);
- if(IsTrailerAttachedToVehicle(vehicleid))
- {
- DetachTrailerFromVehicle(vehicleid);
- SendClientMessage(playerid, COLOR_MECHANIC, "You are not towing a vehicle anymore");
- return 1;
- }
- new Float:x, Float:y, Float:z;
- new Float:dist, Float:closedist=8, closeveh;
- for(new i=1; i < MAX_VEHICLES; i++)
- {
- if(i != vehicleid && GetVehiclePos(i, x, y, z))
- {
- dist = GetPlayerDistanceFromPoint(playerid, x, y, z);
- if(dist < closedist)
- {
- closedist = dist;
- closeveh = i;
- }
- }
- }
- if(!closeveh) return SendClientMessage(playerid, COLOR_CIVIL, "You are not close to a vehicle!");
- if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 525) return SendClientMessage(playerid, COLOR_CIVIL, "You have to be in a tow truck to use this command");
- if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
- {
- AttachTrailerToVehicle(closeveh, vehicleid);
- SendClientMessage(playerid, COLOR_MECHANIC, "You are now towing a vehicle");
- }
- return 1;
- }
- CMD:mc(playerid, params[])
- {
- if(mechjob[playerid] < 1) return SendClientMessage(playerid, COLOR_MECHANIC, "Error: You must be a mechanic member to use this command");
- new msg[256];
- if(sscanf(params, "s", msg)) return SendClientMessage(playerid, COLOR_MECHANIC, "Use: /mc [Message]");
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i))
- {
- if(mechjob[i] > 0)
- {
- new string[270];
- format(string, sizeof(string), "[Mechanic Chat] %s(%d): %s", GetPlayerNameEx(playerid), playerid, msg);
- SendClientMessage(i, COLOR_MECHANIC, string);
- }
- }
- }
- return 1;
- }
- CMD:mechanic(playerid, params[])
- {
- if(request[playerid] == 1) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to wait 1 minute to request a mechanic again");
- new str[256];
- if(sscanf(params, "s[256]", str)) return SendClientMessage(playerid, COLOR_MECHANIC, "Usage: /mechanic [Type your request for help here]");
- request[playerid] = 1;
- format(str, 256, "[%s](%d) requested: %s", GetName(playerid), playerid, str);
- SendToMechanics(COLOR_MECHANIC, str);
- SendClientMessage(playerid, COLOR_MECHANIC, "Your request for help has been sent to the available mechanics, please wait until they respound to your request");
- SetTimerEx("requested", 60000, false, "i", playerid); // the timer of repairing cool down
- return 1;
- }
- CMD:mreply(playerid, params[])
- {
- if(mechjob[playerid] < 0) return 0;
- if(mechjob[playerid] > 0)
- {
- new id, str[256];
- if(sscanf(params, "us[256]", id, str)) return SendClientMessage(playerid, COLOR_MECHANIC, "Usage: /mreply [Playerid] [Respound]");
- if(!request[id]) return SendClientMessage(playerid, COLOR_MECHANIC, "Error: Player didn't send any request for help!");
- new str1[256];
- format(str1, 256, "%s(%d) respounded to %s(%d)'s request. Answer: ", GetName(playerid), playerid, GetName(id), id);
- SendToMechanics(COLOR_MECHANIC, str1);
- SendToMechanics(COLOR_MECHANIC, str);
- format(str, 256, "Respound from [%s]: %s", GetName(playerid), str);
- SendClientMessage(id, COLOR_MECHANIC, str);
- request[id] = 0;
- }
- return 1;
- }
- CMD:mechanichelp(playerid, params[])
- {
- ShowPlayerDialog(playerid, 896, DIALOG_STYLE_MSGBOX, "{808040}MarkNelson(hobo101)'s mechanic system help{FFFFFF}", "/mechanic /mreply /fix /tow /mechanichelp /mc /mechanics /ljob", "Close", "");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement