SHARE
TWEET

Dynamic Rent Pickup System by Shomy

ShomyScript Apr 14th, 2019 123 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include < a_samp >
  2. #include < YSI\y_ini >
  3. #include < izcmd >
  4. #include < sscanf2 >
  5.  
  6. #define MAX_RENTS           30
  7. #define RENT_FILE           "/Rent/%d.ini"
  8.  
  9. enum {
  10.     DIALOG_RENT,
  11.     DIALOG_RENTVREME
  12. }
  13.  
  14. enum RENT_INFO {
  15.  
  16.     Float:rentX,
  17.     Float:rentY,
  18.     Float:rentZ,
  19.     Text3D:RentLabel,
  20.     rentID
  21. }
  22.  
  23. new RentInfo[ MAX_RENTS ][ RENT_INFO ], IznajmioVozilo[ MAX_PLAYERS ], RentVeh[ MAX_PLAYERS ], RentOdabir[ MAX_PLAYERS ],
  24.     RentVreme[ MAX_PLAYERS ], RentTimer[ MAX_PLAYERS ], Text3D:RentVehLabel[ MAX_VEHICLES ], TipVozila[ MAX_VEHICLES ];
  25.  
  26. public OnGameModeInit() {
  27.  
  28.     for(new i; i < MAX_RENTS; i++) {
  29.         new jFile[ 50 ];
  30.         format(jFile, sizeof(jFile), RENT_FILE, i);
  31.         if(fexist(jFile)) {
  32.             INI_ParseFile(jFile, "LoadRent", .bExtra = true, .extra = i);
  33.             RentInfo[ i ][ rentID ] = CreatePickup(19132, 1, RentInfo[ i ][ rentX ], RentInfo[ i ][ rentY ], RentInfo[ i ][ rentZ ], 0);
  34.             RentInfo[ i ][ RentLabel ] = Create3DTextLabel("[ RENT ]\n{FFFFFF}Da iznajmite vozilo, kucajte\n{0077C7}/rent", 0x0077C7FF, RentInfo[ i ][ rentX ], RentInfo[ i ][ rentY ], RentInfo[ i ][ rentZ ], 10.0, 0, 0);
  35.         }
  36.     }
  37.     return 1;
  38. }
  39. forward LoadRent(id, name[], value[]);
  40. public LoadRent(id, name[], value[]) {
  41.  
  42.     INI_Float("Lokacija_X", RentInfo[ id ][ rentX ]);
  43.     INI_Float("Lokacija_Y", RentInfo[ id ][ rentY ]);
  44.     INI_Float("Lokacija_Z", RentInfo[ id ][ rentZ ]);
  45.     return 1;
  46. }
  47. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  48.  
  49.     switch(dialogid) {
  50.         case DIALOG_RENT: {
  51.             if(!response) return 1;
  52.             switch(listitem) {
  53.                 case 0: {
  54.                     RentOdabir[ playerid ] = 1;
  55.                     ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 100$","U redu","Izlaz");
  56.                 }
  57.                 case 1: {
  58.                     RentOdabir[ playerid ] = 2;
  59.                     ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 70$","U redu","Izlaz");
  60.                 }
  61.             }
  62.         }
  63.         case DIALOG_RENTVREME: {
  64.             if(!response) return 1;
  65.             new i = GetNearestRent(playerid);
  66.             if(RentOdabir[ playerid ] == 1) {
  67.                 new vreme;
  68.                 if(GetPlayerMoney(playerid) < RentVreme[ playerid ]*100) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Nemate dovoljno novca.");
  69.                 if(sscanf(inputtext, "d", vreme)) return ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 100$","U redu","Izlaz");
  70.                 if(vreme < 1 || vreme > 30) return ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 100$","U redu","Izlaz");
  71.                 RentVreme[ playerid ] = vreme;
  72.                 RentVeh[ playerid ] = CreateVehicle(405, RentInfo[ i ][ rentX ]+2, RentInfo[ i ][ rentY ]+2, RentInfo[ i ][ rentZ ], 0.0, 1, 1, -1);
  73.                 PutPlayerInVehicle(playerid, RentVeh[ playerid ], 0);
  74.                 IznajmioVozilo[ playerid ] = GetPlayerVehicleID(playerid);
  75.                 GivePlayerMoney(playerid, -RentVreme[ playerid ]*100);
  76.                 RentTimer[ playerid ] = SetTimerEx("TimerRent", 60000, true, "i", playerid);
  77.                 SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Uspesno ste iznajmili vozilo.");
  78.                 RentVehLabel[ RentVeh[ playerid ] ] = Create3DTextLabel("[RENTANO VOZILO]", 0x0077C7FF, RentInfo[ i ][ rentX ]+2, RentInfo[ i ][ rentY ]+2, RentInfo[ i ][ rentZ ], 10.0, 0, 0);
  79.                 Attach3DTextLabelToVehicle(RentVehLabel[ RentVeh[ playerid ] ], RentVeh[ playerid ], 0.0, 0.0, 0.0);
  80.                 TipVozila[ RentVeh[ playerid ] ] = 1; // 1 - Rent Vozilo
  81.             }
  82.             else if(RentOdabir[ playerid ] == 2) {
  83.                 new vreme;
  84.                 if(GetPlayerMoney(playerid) < RentVreme[ playerid ]*70) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Nemate dovoljno novca.");
  85.                 if(sscanf(inputtext, "d", vreme)) return ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 70$","U redu","Izlaz");
  86.                 if(vreme < 1 || vreme > 30) return ShowPlayerDialog(playerid, DIALOG_RENTVREME, DIALOG_STYLE_INPUT, "{0077C7}Iznamljivanje {FFFFFF}vozila","{FFFFFF}Unesite vreme na koliko ce te iznajmiti vozilo.\nMinimalno vreme - 1 minut.\nMaksimalno vreme - 30 minuta.\nCena - 1 minut = 70$","U redu","Izlaz");
  87.                 RentVreme[ playerid ] = vreme;
  88.                 RentVeh[ playerid ] = CreateVehicle(462, RentInfo[ i ][ rentX ]+2, RentInfo[ i ][ rentY ]+2, RentInfo[ i ][ rentZ ], 0.0, 1, 1, -1);
  89.                 PutPlayerInVehicle(playerid, RentVeh[ playerid ], 0);
  90.                 IznajmioVozilo[ playerid ] = GetPlayerVehicleID(playerid);
  91.                 GivePlayerMoney(playerid, -RentVreme[ playerid ]*70);
  92.                 RentTimer[ playerid ] = SetTimerEx("TimerRent", 60000, true, "i", playerid);
  93.                 SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Uspesno ste iznajmili vozilo.");
  94.                 RentVehLabel[ RentVeh[ playerid ] ] = Create3DTextLabel("[RENTANO VOZILO]", 0x0077C7FF, RentInfo[ i ][ rentX ]+2, RentInfo[ i ][ rentY ]+2, RentInfo[ i ][ rentZ ], 10.0, 0, 0);
  95.                 Attach3DTextLabelToVehicle(RentVehLabel[ RentVeh[ playerid ] ], RentVeh[ playerid ], 0.0, 0.0, 0.0);
  96.                 TipVozila[ RentVeh[ playerid ] ] = 1; // 1 - Rent Vozilo
  97.             }
  98.         }
  99.     }
  100.     return 1;
  101. }
  102. public OnPlayerStateChange(playerid, newstate, oldstate) {
  103.  
  104.     if(newstate == PLAYER_STATE_DRIVER) {
  105.         if(TipVozila[ playerid ] == 1 && RentVeh[ playerid ] != GetPlayerVehicleID(playerid)) {
  106.             RemovePlayerFromVehicle(playerid);
  107.             SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Rentano vozilo.");
  108.         }
  109.     }
  110.     return 1;
  111. }
  112. forward TimerRent(playerid);
  113. public TimerRent(playerid) {
  114.  
  115.     RentVreme[ playerid ]--;
  116.     if(RentVreme[ playerid ] == 0) {
  117.         KillTimer(RentTimer[ playerid ]);
  118.         DestroyVehicle(RentVeh[ playerid ]);
  119.         Delete3DTextLabel(RentVehLabel[ RentVeh[ playerid ] ]);
  120.         IznajmioVozilo[ playerid ] = 0;
  121.         RentOdabir[ playerid ] = 0;
  122.         RentVreme[ playerid ] = 0;
  123.         RentVeh[ playerid ] = 0;
  124.         SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Isteklo vam je vreme iznamljivanja vozila.");
  125.     }
  126.     return 1;
  127. }
  128. public OnPlayerDisconnect(playerid, reason) {
  129.  
  130.     if(IznajmioVozilo[ playerid ] != 0) {
  131.         KillTimer(RentTimer[ playerid ]);
  132.         DestroyVehicle(RentVeh[ playerid ]);
  133.         Delete3DTextLabel(RentVehLabel[ RentVeh[ playerid ] ]);
  134.         IznajmioVozilo[ playerid ] = 0;
  135.         RentOdabir[ playerid ] = 0;
  136.         RentVreme[ playerid ] = 0;
  137.         RentVeh[ playerid ] = 0;
  138.     }
  139.     return 1;
  140. }
  141.  
  142. CMD:kreirajrent(playerid, params[]) {
  143.  
  144.     #pragma unused params
  145.  
  146.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste RCON admin.");
  147.     new Float:X, Float:Y, Float:Z, i = NextRentID(MAX_RENTS);
  148.     GetPlayerPos(playerid, X,Y,Z);
  149.     RentInfo[ i ][ rentID ] = CreatePickup(19132, 1, X,Y,Z, 0);
  150.     RentInfo[ i ][ RentLabel ] = Create3DTextLabel("[ RENT ]\n{FFFFFF}Da iznajmite vozilo, kucajte\n{0077C7}/rent", 0x0077C7FF, X, Y, Z, 10.0, 0, 0);
  151.     RentInfo[ i ][ rentX ] = X;
  152.     RentInfo[ i ][ rentY ] = Y;
  153.     RentInfo[ i ][ rentZ ] = Z;
  154.     SaveRent(i);
  155.     return 1;
  156. }
  157. CMD:izbrisirent(playerid, params[]) {
  158.  
  159.     #pragma unused params
  160.  
  161.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste RCON admin.");
  162.     new i = GetNearestRent(playerid), rentFile[ 60 ];
  163.     if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste blizu rent pickup-a.");
  164.     DestroyPickup(RentInfo[ i ][ rentID ]);
  165.     Delete3DTextLabel(RentInfo[ i ][ RentLabel ]);
  166.     RentInfo[ i ][ rentX ] = 0.0;
  167.     RentInfo[ i ][ rentY ] = 0.0;
  168.     RentInfo[ i ][ rentZ ] = 0.0;
  169.     format(rentFile, sizeof(rentFile), RENT_FILE, i);
  170.     if(fexist(rentFile)) { fremove(rentFile); }
  171.     return 1;
  172. }
  173. // Sentinel 405 Faggio 462
  174. CMD:rent(playerid, params[]) {
  175.  
  176.     #pragma unused params
  177.  
  178.     if(GetNearestRent(playerid) == -1) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste blizu rent pickup-a.");
  179.     if(IznajmioVozilo[ playerid ] != 0) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Vec ste iznajmili vozilo.");
  180.     ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "{0077C7}Iznamljivanje {FFFFFF}vozila", "Sentinel\nFaggio", "Izaberi","Izlaz");
  181.     return 1;
  182. }
  183. CMD:unrent(playerid, params[]) {
  184.  
  185.     #pragma unused params
  186.  
  187.     if(IznajmioVozilo[ playerid ] == 0) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste iznajmili vozilo.");
  188.     KillTimer(RentTimer[ playerid ]);
  189.     DestroyVehicle(RentVeh[ playerid ]);
  190.     Delete3DTextLabel(RentVehLabel[ RentVeh[ playerid ] ]);
  191.     IznajmioVozilo[ playerid ] = 0;
  192.     if(RentOdabir[ playerid ] == 1) {
  193.         GivePlayerMoney(playerid, RentVreme[ playerid ]*100);
  194.         new str[ 120 ];
  195.         format(str, sizeof(str), "[UNRENT] {FFFFFF}Uspesno ste vratili iznamljeno vozilo te vam je vraceno %d$", RentVreme[ playerid ]*100);
  196.         SendClientMessage(playerid, 0x0077C7FF, str);
  197.         RentOdabir[ playerid ] = 0;
  198.         RentVreme[ playerid ] = 0;
  199.         RentVeh[ playerid ] = 0;
  200.     }
  201.     else if(RentOdabir[ playerid ] == 2) {
  202.         GivePlayerMoney(playerid, RentVreme[ playerid ]*70);
  203.         new str[ 120 ];
  204.         format(str, sizeof(str), "[UNRENT] {FFFFFF}Uspesno ste vratili iznamljeno vozilo te vam je vraceno %d$", RentVreme[ playerid ]*70);
  205.         SendClientMessage(playerid, 0x0077C7FF, str);
  206.         RentOdabir[ playerid ] = 0;
  207.         RentVreme[ playerid ] = 0;
  208.         RentVeh[ playerid ] = 0;
  209.     }
  210.     return 1;
  211. }
  212.  
  213. GetNearestRent( playerid ) {
  214.  
  215.     for( new i = 1; i < MAX_RENTS; i++) {
  216.  
  217.         if( IsPlayerInRangeOfPoint( playerid, 3.0, RentInfo[ i ][ rentX ], RentInfo[ i ][ rentY ], RentInfo[ i ][ rentZ ] ) ) { return i; }
  218.     }
  219.     return -1;
  220. }
  221. stock NextRentID(const len) {
  222.     new id = (-1);
  223.     for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
  224.        provjera = ( loop+1 );
  225.        format( Data_, ( sizeof Data_ ), RENT_FILE, provjera );
  226.        if(!fexist(Data_)) {
  227.           id = ( provjera );
  228.           break; } }
  229.     return ( id );
  230. }
  231. stock SaveRent(id) {
  232.  
  233.     new rentFile[ 60 ];
  234.     format(rentFile, sizeof(rentFile), RENT_FILE, id);
  235.     new INI:File = INI_Open(rentFile);
  236.     INI_WriteFloat(File, "Lokacija_X", RentInfo[ id ][ rentX ]);
  237.     INI_WriteFloat(File, "Lokacija_Y", RentInfo[ id ][ rentY ]);
  238.     INI_WriteFloat(File, "Lokacija_Z", RentInfo[ id ][ rentZ ]);
  239.     INI_Close(File);
  240.     return 1;
  241. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top