Guest User

Untitled

a guest
Jun 12th, 2018
1,467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 16.79 KB | None | 0 0
  1. //--------------------------------------------------------------//
  2. // Mechanic job system by hobo101 aka MarkNelson V0.1
  3. // If you're using this system as a filterscript or in your game-mode
  4. // Please, don't remove the credits
  5. // If you find any bug, feel free to report it through PM on samp forums
  6. // to MarkNelson, Thank you for understanding.
  7. //-------------------------------------------------------------//
  8.  
  9. #include <a_samp>
  10. #include <streamer>
  11. #include <zcmd>
  12. #include <sscanf2>
  13.  
  14.  
  15. //Mechanic Job Color + Civil Color + Dialog
  16. #define COLOR_CIVIL 0xFFFF6CFF
  17. #define COLOR_MECHANIC 0x808040FF
  18. #define DIALOG_MECHANIC 894
  19. #define DIALOG_MECHANICS 895
  20. #define DIALOG_MECHHELP 896
  21. //
  22. new mechjob[MAX_PLAYERS];
  23. new mechpickup;
  24. new Repairing[MAX_PLAYERS];
  25. new request[MAX_PLAYERS];
  26. new towt1;
  27. new towt2;
  28. new towt3;
  29. new towt4;
  30. new towt5;
  31. new Text3D:mech3d;
  32. new mtimer;
  33. //
  34. Float:GetDistanceBetweenPlayers(playerid,id)
  35. {
  36.     new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
  37.     if(!IsPlayerConnected(playerid) || !IsPlayerConnected(id)) {
  38.         return -1.00;
  39.     }
  40.     GetPlayerPos(playerid,x1,y1,z1);
  41.     GetPlayerPos(id,x2,y2,z2);
  42.     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  43. }
  44. stock SendToMechanics(color, str[])
  45. {
  46.     for(new i=0 ; i<MAX_PLAYERS ; i++)
  47.     {
  48.         if(IsPlayerConnected(i) && mechjob[i] > 0)
  49.         {
  50.             SendClientMessage(i, color, str);
  51.         }
  52.     }
  53. }
  54. stock GetName(playerid) {
  55.     new pName[26];
  56.     GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
  57.     return pName;
  58. }
  59. stock GetPlayerNameEx(playerid)
  60. {
  61.      new playername[25];
  62.      GetPlayerName(playerid, playername, sizeof(playername));
  63.      return playername;
  64. }
  65. //
  66. #define FILTERSCRIPT
  67.  
  68. public OnFilterScriptInit()
  69. {
  70.     print("\n--------------------------------------");
  71.     print("* hobo101(MarkNelson)'s mechanic job system has been loaded *");
  72.     print("--------------------------------------\n");
  73.     mech3d = CreateDynamic3DTextLabel("Mechanic Job",0xFFFF80FF,1629.0221,-1903.3815,13.5532,30.0,0); //Mechanic Job 3dtextlabel
  74.     mechpickup = CreateDynamicPickup(1275,2,1629.0221,-1903.3815,13.5532,0,0,-1,100.0); // Mechanic Job Pickup
  75.     towt1 = AddStaticVehicle(525,1648.6406,-1904.0719,13.2318,11.6325,103,37); // Tow Truck 1
  76.     towt2 = AddStaticVehicle(525,1632.0477,-1908.3938,13.2304,276.3869,103,37); // Tow Truck 2
  77.     towt3 = AddStaticVehicle(525,1670.6864,-1894.7494,13.2265,89.3171,103,37); // Tow Truck 3
  78.     towt4 = AddStaticVehicle(525,1625.6631,-1896.0985,13.2308,269.6205,103,37); // Tow Truck 4
  79.     towt5 = AddStaticVehicle(525,1624.0439,-1857.5204,13.2281,183.4155,103,37); // Tow Truck 5
  80.     return 1;
  81. }
  82.  
  83. public OnFilterScriptExit()
  84. {
  85.     print("\n----------------------------------");
  86.     print(" * hobo101(MarkNelson)'s mechanic job system has been unloaded *");
  87.     print("----------------------------------\n");
  88.     DestroyVehicle(towt1);
  89.     DestroyVehicle(towt2);
  90.     DestroyVehicle(towt3);
  91.     DestroyVehicle(towt4);
  92.     DestroyVehicle(towt5);
  93.     DestroyDynamicPickup(mechpickup);
  94.     DestroyDynamic3DTextLabel(mech3d);
  95.     return 1;
  96. }
  97.  
  98. public OnPlayerConnect(playerid)
  99. {
  100.     return 1;
  101. }
  102.  
  103. public OnPlayerDisconnect(playerid, reason)
  104. {
  105.     mechjob[playerid] = 0;
  106.     Repairing[playerid] = 0;
  107.     request[playerid] = 0;
  108.     return 1;
  109. }
  110.  
  111. public OnPlayerDeath(playerid, killerid, reason)
  112. {
  113.     mechjob[playerid] = 0;
  114.     SetPlayerColor(playerid, COLOR_CIVIL);
  115.     return 1;
  116. }
  117.  
  118. public OnPlayerStateChange(playerid, newstate, oldstate)
  119. {
  120.     if(mechjob[playerid] == 0)
  121.     {
  122.         if(newstate == PLAYER_STATE_DRIVER)
  123.         {
  124.             if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525 )
  125.             {
  126.                 SendClientMessage(playerid, COLOR_CIVIL,"This vehicle is restricted.");
  127.                 RemovePlayerFromVehicle(playerid);
  128.             }
  129.         }
  130.     }
  131.     mtimer = SetTimer("VehicleCheckTimer", 1000, 1);
  132.     return 1;
  133. }
  134.  
  135. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  136. {
  137.     switch(dialogid)
  138.     {
  139.         case 894:
  140.         {
  141.             if(!response) SendClientMessage(playerid, COLOR_CIVIL, "Okay, Good bye. If you changed your mind, come back.");
  142.             if(response)
  143.             {
  144.                 if(mechjob[playerid] == 1 ) return SendClientMessage(playerid, COLOR_MECHANIC, "You're already a mechanic");
  145.                 if(GetPlayerWantedLevel(playerid) > 0) return SendClientMessage(playerid, COLOR_CIVIL, "You are wanted, you can't join, We don't accept criminals");
  146.                 SendClientMessage(playerid,COLOR_MECHANIC, "Congratulations! Now you're a mechanic. Use /ljob to leave the job");
  147.                 mechjob[playerid] = 1;
  148.                 SetPlayerColor(playerid,COLOR_MECHANIC);
  149.                 new pname[MAX_PLAYER_NAME], string[120];
  150.                 GetPlayerName(playerid, pname, sizeof(pname));
  151.                 format(string, sizeof(string), "%s is now one of our mechanics in San Andreas!", pname);
  152.                 SendClientMessageToAll(COLOR_MECHANIC, string);
  153.             }
  154.         }
  155.     }
  156.     return 1;
  157. }
  158.  
  159. CMD:fix(playerid,params[])
  160. {
  161.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command");
  162.         if(mechjob[playerid] != 1) return SendClientMessage(playerid, COLOR_MECHANIC, "You're not a mechanic!");  
  163.         new id;
  164.         if(sscanf(params, "u", id)) return SendClientMessage(playerid, COLOR_MECHANIC, "Syntax: /fix [id]");
  165.         else if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_CIVIL, "That player is not connected to the server!");
  166.         else if(id == playerid) return SendClientMessage(playerid, COLOR_MECHANIC, "You cannot fix yourself's car!");
  167.         else if(GetDistanceBetweenPlayers(playerid, id) > 5.00) return SendClientMessage(playerid, COLOR_MECHANIC, "That player is too far away!");
  168.         else if(GetPlayerState(id) != PLAYER_STATE_DRIVER ) return SendClientMessage(playerid, COLOR_MECHANIC, "That player must be in a vehicle");
  169.         else if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT ) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to be on foot to use this command");
  170.         else
  171.         {
  172.            
  173.            
  174.             if(GetPlayerState(id) == PLAYER_STATE_DRIVER)
  175.             {
  176.                 new Float:vhealth;
  177.                 new vehicleid = GetPlayerVehicleID(id);  
  178.                 GetVehicleHealth(vehicleid, vhealth);
  179.                 if(Repairing[playerid] == 1) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to wait 2 minutes to fix a vehicle another time!");
  180.                 if(vhealth >= 1000.0)  return SendClientMessage(playerid, COLOR_MECHANIC, "That player's vehicle has enough health already!");
  181.                 else
  182.                 {
  183.                    
  184.                    
  185.                    
  186.                     new string[100];
  187.                     new pName[MAX_PLAYER_NAME];
  188.                     GetPlayerName(id, pName, sizeof(pName));
  189.                     RepairVehicle(GetPlayerVehicleID(id));
  190.                     format(string, sizeof(string), "You've successfully repaired %s's vehicle (ID: %d)! +$4200", pName, id);
  191.                     SendClientMessage(playerid, COLOR_MECHANIC, string);
  192.                     SendClientMessage(id, COLOR_MECHANIC, "A mechanic has fixed your vehicle!");
  193.                     GivePlayerMoney(playerid,4200);
  194.                     SetTimerEx("repairing", 120000, false, "i", playerid); // the timer of repairing cool down
  195.                     Repairing[playerid] = 1;
  196.                     GetPlayerName(playerid, pName, sizeof(pName));
  197.                     format(string, sizeof(string), "[MECHANIC]: %s has fixed a vehicle!");
  198.                     SendClientMessageToAll(COLOR_MECHANIC, string);
  199.                     PlayerPlaySound(id,1133,0.0,0.0,0.0);
  200.                     PlayerPlaySound(playerid,1133,0.0,0.0,0.0);
  201.  
  202.                    
  203.                 }
  204.             }
  205.         }
  206.         return 1;
  207. }
  208.  
  209. public OnPlayerPickUpDynamicPickup(playerid, pickupid)
  210. {
  211.  
  212.     if(pickupid == mechpickup)
  213.     {
  214.  
  215.        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");
  216.  
  217.     }
  218.     return 1;
  219. }
  220. forward repairing(playerid);
  221. public repairing(playerid)
  222. {
  223.     if(mechjob[playerid] == 1)
  224.     {
  225.        SendClientMessage(playerid,COLOR_MECHANIC,"You can fix a vehicle another time now");
  226.        Repairing[playerid] = 0;
  227.     }
  228. }
  229. forward requested(playerid);
  230. public requested(playerid)
  231. {
  232.     if(request[playerid] == 1)
  233.     {
  234.        SendClientMessage(playerid,COLOR_MECHANIC,"You can request for a mechanic again now");
  235.        request[playerid] = 0;
  236.     }
  237. }
  238. CMD:mechanics(playerid, params[])
  239. {
  240.     new IsMechOnline = 0;
  241.     new string[300], Jstring[128];
  242.  
  243.     for(new i, j = GetPlayerPoolSize(); i <= j; i++)
  244.     {
  245.     if(!IsPlayerConnected(i))
  246.     {
  247.             if(mechjob[i] > 0)
  248.             {
  249.               format(Jstring, 128, "{FFFF00}%s (%d) - Mechanic Available\n", GetPlayerNameEx(i), i);
  250.               strcat(string, Jstring, sizeof(string));
  251.               IsMechOnline++;
  252.             }
  253.         }
  254.     }
  255.     if(IsMechOnline == 0)
  256.     ShowPlayerDialog(playerid,DIALOG_MECHANICS,DIALOG_STYLE_MSGBOX,"Warning","There are no mechanics available at this time" ,"Close","");
  257.     else ShowPlayerDialog(playerid,DIALOG_MECHANICS,DIALOG_STYLE_LIST,"Mechanics", string ,"Close","");
  258.     return 1;
  259. }
  260. CMD:ljob(playerid, params[])
  261. {
  262.     if(mechjob[playerid] != 1) return SendClientMessage(playerid, COLOR_CIVIL, "You're not a mechanic to use this command");
  263.     if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
  264.     {
  265.         RemovePlayerFromVehicle(playerid);
  266.     }
  267.     SendClientMessage(playerid, COLOR_CIVIL, "You're a normal civillian now");
  268.     mechjob[playerid] = 0;
  269.     SetPlayerColor(playerid, COLOR_CIVIL);
  270.     ResetPlayerWeapons(playerid);
  271.     return 1;
  272. }
  273. CMD:tow(playerid, params[])
  274. {
  275.     if(mechjob[playerid] != 1) return SendClientMessage(playerid, COLOR_CIVIL, "You have to be a mechanic to do this job");
  276.     if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_MECHANIC, "You are not driving a tow truck!");
  277.     new vehicleid = GetPlayerVehicleID(playerid);
  278.     if(IsTrailerAttachedToVehicle(vehicleid))
  279.     {
  280.         DetachTrailerFromVehicle(vehicleid);
  281.         SendClientMessage(playerid, COLOR_MECHANIC, "You are not towing a vehicle anymore");
  282.         return 1;
  283.     }
  284.     new Float:x, Float:y, Float:z;
  285.     new Float:dist, Float:closedist=8, closeveh;
  286.     for(new i=1; i < MAX_VEHICLES; i++)
  287.     {
  288.         if(i != vehicleid && GetVehiclePos(i, x, y, z))
  289.         {
  290.             dist = GetPlayerDistanceFromPoint(playerid, x, y, z);
  291.             if(dist < closedist)
  292.             {
  293.                 closedist = dist;
  294.                 closeveh = i;
  295.             }
  296.         }
  297.     }
  298.     if(!closeveh) return SendClientMessage(playerid, COLOR_CIVIL, "You are not close to a vehicle!");
  299.     if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 525) return SendClientMessage(playerid, COLOR_CIVIL, "You have to be in a tow truck to use this command");
  300.     if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
  301.     {
  302.        AttachTrailerToVehicle(closeveh, vehicleid);
  303.        SendClientMessage(playerid, COLOR_MECHANIC, "You are now towing a vehicle");
  304.     }
  305.     return 1;
  306. }
  307. CMD:mc(playerid, params[])
  308. {
  309.     if(mechjob[playerid] < 1) return SendClientMessage(playerid, COLOR_MECHANIC, "Error: You must be a mechanic member to use this command");
  310.     new msg[256];
  311.     if(sscanf(params, "s", msg)) return SendClientMessage(playerid, COLOR_MECHANIC, "Use: /mc [Message]");
  312.     for(new i, j = GetPlayerPoolSize(); i <= j; i++)
  313.     {
  314.     if(!IsPlayerConnected(i))
  315.     {
  316.  
  317.             if(mechjob[i] > 0)
  318.             {
  319.                
  320.                
  321.                
  322.                 new string[270];
  323.                 format(string, sizeof(string), "[Mechanic Chat] %s(%d): %s", GetPlayerNameEx(playerid), playerid, msg);
  324.                 SendClientMessage(i, COLOR_MECHANIC, string);
  325.             }
  326.         }
  327.     }
  328.     return 1;
  329. }
  330. CMD:mechanic(playerid, params[])
  331. {
  332.     if(request[playerid] == 1) return SendClientMessage(playerid, COLOR_MECHANIC, "You have to wait 1 minute to request a mechanic again");
  333.     new str[256];
  334.     if(sscanf(params, "s[256]", str)) return SendClientMessage(playerid, COLOR_MECHANIC, "Usage: /mechanic [Type your request for help here]");
  335.     request[playerid] = 1;
  336.  
  337.     format(str, 256, "[%s](%d) requested: %s", GetName(playerid), playerid, str);
  338.     SendToMechanics(COLOR_MECHANIC, str);
  339.     SendClientMessage(playerid, COLOR_MECHANIC, "Your request for help has been sent to the available mechanics, please wait until they respound to your request");
  340.  
  341.     SetTimerEx("requested", 60000, false, "i", playerid); // the timer of repairing cool down
  342.     return 1;
  343. }
  344. CMD:mreply(playerid, params[])
  345. {
  346.     if(mechjob[playerid] < 0) return 0;
  347.     if(mechjob[playerid] > 0)
  348.     {
  349.        new id, str[256];
  350.        if(sscanf(params, "us[256]", id, str)) return SendClientMessage(playerid, COLOR_MECHANIC, "Usage: /mreply [Playerid] [Respound]");
  351.        if(!request[id]) return SendClientMessage(playerid, COLOR_MECHANIC, "Error: Player didn't send any request for help!");
  352.  
  353.        new str1[256];
  354.        format(str1, 256, "%s(%d) respounded to %s(%d)'s request. Answer: ", GetName(playerid), playerid, GetName(id), id);
  355.        SendToMechanics(COLOR_MECHANIC, str1);
  356.        SendToMechanics(COLOR_MECHANIC, str);
  357.  
  358.        format(str, 256, "Respound from [%s]: %s", GetName(playerid), str);
  359.        SendClientMessage(id, COLOR_MECHANIC, str);
  360.        request[id] = 0;
  361.     }
  362.     return 1;
  363. }
  364. CMD:mechanichelp(playerid, params[])
  365. {
  366.     ShowPlayerDialog(playerid, 896, DIALOG_STYLE_MSGBOX, "{808040}MarkNelson(hobo101)'s mechanic system help{FFFFFF}", "/mechanic /mreply /fix /tow /mechanichelp /mc /mechanics /ljob", "Close", "");
  367.     return 1;
  368. }
  369. CMD:engine(playerid, params[])
  370. {
  371.             if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 481 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 510 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 509) return SendClientMessage(playerid, COLOR_CIVIL, "This vehicle doesn't have an engine");
  372.             new vehicleid = GetPlayerVehicleID(playerid);
  373.             new engine, lights, alarm, doors, bonnet, boot, objective;
  374.             if(IsPlayerInAnyVehicle(playerid))
  375.             {
  376.                 if(GetPlayerVehicleSeat(playerid) == 0)
  377.                 {
  378.                     GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  379.                     new Float:vhealth;
  380.                     GetVehicleHealth(vehicleid, vhealth);
  381.                     if(vhealth <= 600) return SendClientMessage(playerid, COLOR_CIVIL, "Your vehicle engine is damaged, fix it");
  382.                     if(engine == 1)
  383.                     {
  384.                         GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
  385.                         SetVehicleParamsEx(vehicleid,false,lights,alarm,doors,bonnet,boot,objective);
  386.                         PlayerPlaySound(playerid,1055,0.0,0.0,0.0);
  387.                         GameTextForPlayer(playerid,"~r~Vehicle Engine Stopped!",2000,4);
  388.                         return 1;
  389.                     }
  390.                     else
  391.                     SetVehicleParamsEx(vehicleid,true,lights,alarm,doors,bonnet,boot,objective);
  392.                     PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
  393.                     GameTextForPlayer(playerid,"~g~Vehicle Engine Started!",2000,4);
  394.                 }
  395.                 else SendClientMessage(playerid,COLOR_CIVIL,"Error: You are not at the driving seat!");
  396.                 return 1;
  397.             }
  398.             else
  399.             SendClientMessage(playerid,COLOR_CIVIL,"Error: You are not in a vehicle!");
  400.             return 1;
  401. }
  402. forward VehicleCheckTimer(playerid);
  403. public VehicleCheckTimer(playerid)
  404. {
  405.     for(new i = 0; i < MAX_PLAYERS; i++)
  406.     {
  407.         if(IsPlayerInAnyVehicle(i))
  408.         {
  409.             new vid, Float:vhp;
  410.             vid = GetPlayerVehicleID(i);
  411.             GetVehicleHealth(vid, vhp);
  412.             if(vhp < 250)
  413.             {
  414.                 SendClientMessage(i, COLOR_CIVIL, "Your engine is blown. Use /mechanic to call a Mechanic");
  415.                 GameTextForPlayer(playerid,"~r~Vehicle Engine is damaged!",2000,4);
  416.                 new engine,lights,alarm,doors,bonnet,boot,objective;
  417.                 GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
  418.                 SetVehicleParamsEx(vid,0,0,alarm,doors,bonnet,boot,objective);
  419.                 SetVehicleHealth(vid, 250);
  420.                 KillTimer(mtimer);
  421.             }
  422.         }
  423.     }
  424.     return 1;
  425. }
Advertisement
Add Comment
Please, Sign In to add comment