Advertisement
Guest User

Rent system (MySQL) by Bokenzi

a guest
Jul 26th, 2021
541
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 31.27 KB | None | 0 0
  1. /*
  2.     Dinamic rent system (MySQL)
  3.     ──────────────────────────────────
  4.     Datum pocetka izrade: 26/07/2021 10:24
  5.     Datum kraja izrade: 26/07/2021 14:40
  6.     Izradio: Bokenzi
  7. */
  8.  
  9. #define FILTERSCRIPT
  10.  
  11. #include        <a_samp>
  12. #include        <streamer>
  13. #include        <sscanf2>
  14. #include        <a_mysql>
  15. #include        <Pawn.CMD>
  16.  
  17. //=============================================================
  18. //                          Colours
  19.  
  20. #define serverCol "{6893d9}"
  21. #define whiteCol "{FFFFFF}"
  22.  
  23. //=============================================================
  24. //                          Helpers
  25.  
  26. #define errMsg(%0,%1) \
  27.             SendClientMessageEx(%0, 0xC03E26FF, "Greska: {FFFFFF}"%1)
  28. #define usgMsg(%0,%1) \
  29.             SendClientMessageEx(%0, 0xA9A9A9FF, "Koristi: {FFFFFF}"%1)
  30. #define infoMsg(%0,%1) \
  31.             SendClientMessageEx(%0, 0x2785B0FF, "Info: {FFFFFF}"%1)
  32.  
  33. #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  34.  
  35. #define sName ""serverCol"Ime servera: "whiteCol""
  36.  
  37. //=============================================================
  38. //                      MySQL settings
  39.  
  40. #define         mysqlHost       "localhost"
  41. #define         mysqlUser       "root"
  42. #define         mysqlPass       ""
  43. #define         mysqlDatabase   "begginer-server"
  44.  
  45. new MySQL: sql;
  46.  
  47. //=============================================================
  48. //                      Server limits
  49.  
  50. #define maxRents    20
  51.  
  52. //=============================================================
  53. //                          Timers
  54.  
  55. forward rent_TickEnd(const playerid);
  56.  
  57. //=============================================================
  58. //                      MySQL functions
  59.  
  60. forward rent_LoadRents();
  61.  
  62. //=============================================================
  63. //                        Rent system
  64.  
  65. enum rent_data
  66. {
  67.     Float: rent_x,
  68.     Float: rent_y,
  69.     Float: rent_z,
  70.     Text3D: rent_label,
  71.     rent_style,
  72.     rent_id
  73. }
  74. new rentInfo[maxRents][rent_data];
  75.  
  76. static rentedVehicle[MAX_PLAYERS];
  77. static rentVehID[MAX_PLAYERS];
  78. static rentChoose[MAX_PLAYERS];
  79. static rentTime[MAX_PLAYERS];
  80. static rentTimer[MAX_PLAYERS];
  81. static Text3D: rentLabel[MAX_PLAYERS];
  82.  
  83. //=============================================================
  84. //                          Dialogs
  85.  
  86. #define d_rentlist 901
  87. #define d_rentchoose 902
  88. #define d_renttime 903
  89.  
  90. //=============================================================
  91. //                        Callbacks
  92.  
  93. public OnFilterScriptInit()
  94. {
  95.     /* MySQL connection */
  96.     sql = mysql_connect(mysqlHost, mysqlUser, mysqlPass, mysqlDatabase);
  97.  
  98.     if(mysql_errno(sql) != 0)
  99.     {
  100.         print("Connection with database failed");
  101.         SendRconCommand("exit");
  102.         return 1;
  103.     }
  104.  
  105.     mysql_tquery(sql, "SELECT rent_id, rent_style, rent_x, rent_y, rent_z FROM rents", "rent_LoadRents");
  106.     return 1;
  107. }
  108.  
  109. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  110. {
  111.     switch(dialogid)
  112.     {
  113.         case d_renttime:
  114.         {
  115.             new i = getNearestRentStyle(playerid);
  116.  
  117.             static Float:x, Float:y, Float:z;
  118.  
  119.             GetPlayerPos(playerid, x, y, z);
  120.  
  121.             if(response)
  122.             {
  123.  
  124.                 if(strval(inputtext) < 5 || strval(inputtext) > 30)
  125.                 {
  126.                     errMsg(playerid, "Rent vrijeme ne moze biti ispod 5 i iznad 30 minuta");
  127.                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  128.                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  129.                     return 1;
  130.                 }
  131.  
  132.                 switch(i)
  133.                 {
  134.                     case 1: // Biciklovi
  135.                     {
  136.                         switch(rentChoose[playerid])
  137.                         {
  138.                             case 1:
  139.                             {
  140.                                 rentTime[playerid] = strval(inputtext);
  141.  
  142.                                 static bikeCost = 5;
  143.  
  144.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  145.                                 {
  146.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  147.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  148.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  149.                                     return 1;
  150.                                 }
  151.  
  152.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  153.  
  154.                                 rentVehID[playerid] = CreateVehicle(509, x, y, z, 0, 0, 0, 0, 0);
  155.  
  156.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  157.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  158.  
  159.                                 static rLabel[42];
  160.                                 format(rLabel, sizeof rLabel, "Rent bicikl - "serverCol"%s", getName(playerid));
  161.  
  162.                                 static Float:vx, Float:vy, Float:vz;
  163.  
  164.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  165.  
  166.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  167.  
  168.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  169.  
  170.                                 infoMsg(playerid, "Uspjesno ste iznajmili bicikl na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  171.                             }
  172.                             case 2:
  173.                             {
  174.                                 rentTime[playerid] = strval(inputtext);
  175.  
  176.                                 static bikeCost = 10;
  177.  
  178.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  179.                                 {
  180.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  181.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  182.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  183.                                     return 1;
  184.                                 }
  185.  
  186.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  187.  
  188.                                 rentVehID[playerid] = CreateVehicle(510, x, y, z, 0, 0, 0, 0, 0);
  189.  
  190.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  191.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  192.  
  193.                                 static rLabel[42];
  194.                                 format(rLabel, sizeof rLabel, "Rent bicikl - "serverCol"%s", getName(playerid));
  195.  
  196.                                 static Float:vx, Float:vy, Float:vz;
  197.  
  198.                                 rentTime[playerid] = strval(inputtext);
  199.  
  200.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  201.  
  202.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  203.  
  204.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  205.  
  206.                                 infoMsg(playerid, "Uspjesno ste iznajmili bicikl na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  207.                             }
  208.                             case 3:
  209.                             {
  210.                                 rentTime[playerid] = strval(inputtext);
  211.  
  212.                                 static bikeCost = 15;
  213.  
  214.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  215.                                 {
  216.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  217.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  218.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  219.                                     return 1;
  220.                                 }
  221.  
  222.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  223.  
  224.                                 rentVehID[playerid] = CreateVehicle(481, x, y, z, 0, 0, 0, 0, 0);
  225.  
  226.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  227.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  228.  
  229.                                 static rLabel[42];
  230.                                 format(rLabel, sizeof rLabel, "Rent bicikl - "serverCol"%s", getName(playerid));
  231.  
  232.                                 static Float:vx, Float:vy, Float:vz;
  233.  
  234.                                 rentTime[playerid] = strval(inputtext);
  235.  
  236.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  237.  
  238.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  239.  
  240.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  241.  
  242.                                 infoMsg(playerid, "Uspjesno ste iznajmili bicikl na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  243.                             }
  244.                         }
  245.                     }
  246.                     case 2: // Motori
  247.                     {
  248.                         switch(rentChoose[playerid])
  249.                         {
  250.                             case 1:
  251.                             {
  252.                                 rentTime[playerid] = strval(inputtext);
  253.  
  254.                                 static bikeCost = 20;
  255.  
  256.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  257.                                 {
  258.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  259.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  260.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  261.                                     return 1;
  262.                                 }
  263.  
  264.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  265.  
  266.                                 rentVehID[playerid] = CreateVehicle(462, x, y, z, 0, 0, 0, 0, 0);
  267.  
  268.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  269.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  270.  
  271.                                 static rLabel[42];
  272.                                 format(rLabel, sizeof rLabel, "Rent motor - "serverCol"%s", getName(playerid));
  273.  
  274.                                 static Float:vx, Float:vy, Float:vz;
  275.  
  276.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  277.  
  278.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  279.  
  280.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  281.  
  282.                                 infoMsg(playerid, "Uspjesno ste iznajmili motor na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  283.                             }
  284.                             case 2:
  285.                             {
  286.                                 rentTime[playerid] = strval(inputtext);
  287.  
  288.                                 static bikeCost = 30;
  289.  
  290.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  291.                                 {
  292.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  293.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  294.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  295.                                     return 1;
  296.                                 }
  297.  
  298.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  299.  
  300.                                 rentVehID[playerid] = CreateVehicle(461, x, y, z, 0, 0, 0, 0, 0);
  301.  
  302.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  303.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  304.  
  305.                                 static rLabel[42];
  306.                                 format(rLabel, sizeof rLabel, "Rent motor - "serverCol"%s", getName(playerid));
  307.  
  308.                                 static Float:vx, Float:vy, Float:vz;
  309.  
  310.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  311.  
  312.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  313.  
  314.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  315.  
  316.                                 infoMsg(playerid, "Uspjesno ste iznajmili motor na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  317.                             }
  318.                             case 3:
  319.                             {
  320.                                 rentTime[playerid] = strval(inputtext);
  321.  
  322.                                 static bikeCost = 35;
  323.  
  324.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  325.                                 {
  326.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  327.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  328.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  329.                                     return 1;
  330.                                 }
  331.  
  332.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  333.  
  334.                                 rentVehID[playerid] = CreateVehicle(521, x, y, z, 0, 0, 0, 0, 0);
  335.  
  336.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  337.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  338.  
  339.                                 static rLabel[42];
  340.                                 format(rLabel, sizeof rLabel, "Rent motor - "serverCol"%s", getName(playerid));
  341.  
  342.                                 static Float:vx, Float:vy, Float:vz;
  343.  
  344.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  345.  
  346.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  347.  
  348.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  349.  
  350.                                 infoMsg(playerid, "Uspjesno ste iznajmili motor na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  351.                             }
  352.                             case 4:
  353.                             {
  354.                                 rentTime[playerid] = strval(inputtext);
  355.  
  356.                                 static bikeCost = 50;
  357.  
  358.                                 if(GetPlayerMoney(playerid) < bikeCost * rentTime[playerid])
  359.                                 {
  360.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (bikeCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  361.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  362.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  363.                                     return 1;
  364.                                 }
  365.  
  366.                                 GivePlayerMoney(playerid, -(bikeCost * rentTime[playerid]));
  367.  
  368.                                 rentVehID[playerid] = CreateVehicle(522, x, y, z, 0, 0, 0, 0, 0);
  369.  
  370.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  371.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  372.  
  373.                                 static rLabel[42];
  374.                                 format(rLabel, sizeof rLabel, "Rent motor - "serverCol"%s", getName(playerid));
  375.  
  376.                                 static Float:vx, Float:vy, Float:vz;
  377.  
  378.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  379.  
  380.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  381.  
  382.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  383.  
  384.                                 infoMsg(playerid, "Uspjesno ste iznajmili motor na %d minuta za %d$", rentTime[playerid], (bikeCost * rentTime[playerid]));
  385.                             }
  386.                         }
  387.                     }
  388.                     case 3: // Auti
  389.                     {
  390.                         switch(rentChoose[playerid])
  391.                         {
  392.                             case 1:
  393.                             {
  394.                                 rentTime[playerid] = strval(inputtext);
  395.  
  396.                                 static carCost = 50;
  397.  
  398.                                 if(GetPlayerMoney(playerid) < carCost * rentTime[playerid])
  399.                                 {
  400.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (carCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  401.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  402.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  403.                                     return 1;
  404.                                 }
  405.  
  406.                                 GivePlayerMoney(playerid, -(carCost * rentTime[playerid]));
  407.  
  408.                                 rentVehID[playerid] = CreateVehicle(516, x, y, z, 0, 0, 0, 0, 0);
  409.  
  410.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  411.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  412.  
  413.                                 static rLabel[42];
  414.                                 format(rLabel, sizeof rLabel, "Rent auto - "serverCol"%s", getName(playerid));
  415.  
  416.                                 static Float:vx, Float:vy, Float:vz;
  417.  
  418.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  419.  
  420.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  421.  
  422.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  423.  
  424.                                 infoMsg(playerid, "Uspjesno ste iznajmili auto na %d minuta za %d$", rentTime[playerid], (carCost * rentTime[playerid]));
  425.                             }
  426.                             case 2:
  427.                             {
  428.                                 rentTime[playerid] = strval(inputtext);
  429.  
  430.                                 static carCost = 60;
  431.  
  432.                                 if(GetPlayerMoney(playerid) < carCost * rentTime[playerid])
  433.                                 {
  434.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (carCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  435.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  436.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  437.                                     return 1;
  438.                                 }
  439.  
  440.                                 GivePlayerMoney(playerid, -(carCost * rentTime[playerid]));
  441.  
  442.                                 rentVehID[playerid] = CreateVehicle(527, x, y, z, 0, 0, 0, 0, 0);
  443.  
  444.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  445.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  446.  
  447.                                 static rLabel[42];
  448.                                 format(rLabel, sizeof rLabel, "Rent auto - "serverCol"%s", getName(playerid));
  449.  
  450.                                 static Float:vx, Float:vy, Float:vz;
  451.  
  452.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  453.  
  454.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  455.  
  456.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  457.  
  458.                                 infoMsg(playerid, "Uspjesno ste iznajmili auto na %d minuta za %d$", rentTime[playerid], (carCost * rentTime[playerid]));
  459.                             }
  460.                             case 3:
  461.                             {
  462.                                 rentTime[playerid] = strval(inputtext);
  463.  
  464.                                 static carCost = 70;
  465.  
  466.                                 if(GetPlayerMoney(playerid) < carCost * rentTime[playerid])
  467.                                 {
  468.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (carCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  469.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  470.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  471.                                     return 1;
  472.                                 }
  473.  
  474.                                 GivePlayerMoney(playerid, -(carCost * rentTime[playerid]));
  475.  
  476.                                 rentVehID[playerid] = CreateVehicle(526, x, y, z, 0, 0, 0, 0, 0);
  477.  
  478.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  479.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  480.  
  481.                                 static rLabel[42];
  482.                                 format(rLabel, sizeof rLabel, "Rent auto - "serverCol"%s", getName(playerid));
  483.  
  484.                                 static Float:vx, Float:vy, Float:vz;
  485.  
  486.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  487.  
  488.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  489.  
  490.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  491.  
  492.                                 infoMsg(playerid, "Uspjesno ste iznajmili auto na %d minuta za %d$", rentTime[playerid], (carCost * rentTime[playerid]));
  493.                             }
  494.                             case 4:
  495.                             {
  496.                                 rentTime[playerid] = strval(inputtext);
  497.  
  498.                                 static carCost = 80;
  499.  
  500.                                 if(GetPlayerMoney(playerid) < carCost * rentTime[playerid])
  501.                                 {
  502.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (carCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  503.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  504.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  505.                                     return 1;
  506.                                 }
  507.  
  508.                                 GivePlayerMoney(playerid, -(carCost * rentTime[playerid]));
  509.  
  510.                                 rentVehID[playerid] = CreateVehicle(585, x, y, z, 0, 0, 0, 0, 0);
  511.  
  512.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  513.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  514.  
  515.                                 static rLabel[42];
  516.                                 format(rLabel, sizeof rLabel, "Rent auto - "serverCol"%s", getName(playerid));
  517.  
  518.                                 static Float:vx, Float:vy, Float:vz;
  519.  
  520.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  521.  
  522.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  523.  
  524.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  525.  
  526.                                 infoMsg(playerid, "Uspjesno ste iznajmili auto na %d minuta za %d$", rentTime[playerid], (carCost * rentTime[playerid]));
  527.                             }
  528.                             case 5:
  529.                             {
  530.                                 rentTime[playerid] = strval(inputtext);
  531.  
  532.                                 static carCost = 100;
  533.  
  534.                                 if(GetPlayerMoney(playerid) < carCost * rentTime[playerid])
  535.                                 {
  536.                                     errMsg(playerid, "Nemate dovoljno novaca, za to vrijeme renta vam je potrebno %d$", (carCost * rentTime[playerid]) - GetPlayerMoney(playerid));
  537.                                     ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  538.                                                                                                 "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  539.                                     return 1;
  540.                                 }
  541.  
  542.                                 GivePlayerMoney(playerid, -(carCost * rentTime[playerid]));
  543.  
  544.                                 rentVehID[playerid] = CreateVehicle(565, x, y, z, 0, 0, 0, 0, 0);
  545.  
  546.                                 PutPlayerInVehicle(playerid, rentVehID[playerid], 0);
  547.                                 rentedVehicle[playerid] = GetPlayerVehicleID(playerid);
  548.  
  549.                                 static rLabel[42];
  550.                                 format(rLabel, sizeof rLabel, "Rent auto - "serverCol"%s", getName(playerid));
  551.  
  552.                                 static Float:vx, Float:vy, Float:vz;
  553.  
  554.                                 rentTimer[playerid] = SetTimerEx("rent_TickEnd", rentTime[playerid] * 60000, false, "d", playerid);
  555.  
  556.                                 GetVehiclePos(rentVehID[playerid], vx, vy, vz);
  557.  
  558.                                 rentLabel[playerid] = CreateDynamic3DTextLabel(rLabel, -1, vx, vy, vz, 15.0, INVALID_PLAYER_ID, rentVehID[playerid]);
  559.  
  560.                                 infoMsg(playerid, "Uspjesno ste iznajmili auto na %d minuta za %d$", rentTime[playerid], (carCost * rentTime[playerid]));
  561.                             }
  562.                         }
  563.                     }
  564.  
  565.                 }
  566.             }
  567.         }
  568.         case d_rentlist:
  569.         {
  570.             if(response)
  571.             {
  572.                 new i = getNearestRentStyle(playerid);
  573.  
  574.                 switch(i)
  575.                 {
  576.                     case 1: // Biciklovi
  577.                     {
  578.                         switch(listitem)
  579.                         {
  580.                             case 0:
  581.                             {
  582.                                 rentChoose[playerid] = 1;
  583.                             }
  584.                             case 1:
  585.                             {
  586.                                 rentChoose[playerid] = 2;
  587.                             }
  588.                             case 2:
  589.                             {
  590.                                 rentChoose[playerid] = 3;
  591.                             }
  592.                         }
  593.                         ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  594.                                                                                     "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  595.                     }
  596.                     case 2: // Motori
  597.                     {
  598.                         switch(listitem)
  599.                         {
  600.                             case 0:
  601.                             {
  602.                                 rentChoose[playerid] = 1;
  603.                             }
  604.                             case 1:
  605.                             {
  606.                                 rentChoose[playerid] = 2;
  607.                             }
  608.                             case 2:
  609.                             {
  610.                                 rentChoose[playerid] = 3;
  611.                             }
  612.                             case 3:
  613.                             {
  614.                                 rentChoose[playerid] = 4;
  615.                             }
  616.                         }
  617.                         ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  618.                                                                                     "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  619.                     }
  620.                     case 3: // Auti
  621.                     {
  622.                         switch(listitem)
  623.                         {
  624.                             case 0:
  625.                             {
  626.                                 rentChoose[playerid] = 1;
  627.                             }
  628.                             case 1:
  629.                             {
  630.                                 rentChoose[playerid] = 2;
  631.                             }
  632.                             case 2:
  633.                             {
  634.                                 rentChoose[playerid] = 3;
  635.                             }
  636.                             case 3:
  637.                             {
  638.                                 rentChoose[playerid] = 4;
  639.                             }
  640.                             case 4:
  641.                             {
  642.                                 rentChoose[playerid] = 5;
  643.                             }
  644.                         }
  645.                         ShowPlayerDialog(playerid, d_renttime, DIALOG_STYLE_INPUT, ""sName"Rent vrijeme", ""whiteCol"U ovaj prazan dijalog unesite na koliko minuta zelite iznajmiti vozilo\n\
  646.                                                                                     "whiteCol"Rent vrijeme "serverCol"ne moze biti krace od 5 i duze od 30 minuta", "Unos", "X");
  647.                     }
  648.                 }
  649.             }
  650.         }
  651.     }
  652.  
  653.     return 1;
  654. }
  655.  
  656. public OnPlayerDisconnect(playerid, reason)
  657. {
  658.     if(rentedVehicle[playerid] != 0)
  659.     {
  660.         KillTimer(rentTimer[playerid]);
  661.         DestroyVehicle(rentVehID[playerid]);
  662.         DestroyDynamic3DTextLabel(rentLabel[playerid]);
  663.  
  664.         rentedVehicle[playerid] = -1;
  665.         rentTime[playerid] = 0;
  666.         rentVehID[playerid] = -1;
  667.         rentChoose[playerid] = 0;
  668.     }
  669.  
  670.     return 1;
  671. }
  672.  
  673. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  674. {
  675.     if(PRESSED(KEY_SECONDARY_ATTACK))
  676.     {
  677.         if(findNearestRent(playerid) != -1)
  678.         {
  679.             if(rentedVehicle[playerid] != 0)
  680.                 return errMsg(playerid, "Vec ste iznajmili vozilo");
  681.  
  682.             new i = getNearestRentStyle(playerid);
  683.  
  684.             switch(i)
  685.             {
  686.                 case 1:
  687.                 {
  688.                     ShowPlayerDialog(playerid, d_rentlist, DIALOG_STYLE_LIST, ""sName"Odabir biciklova", "ID 509 - Bike\nID 510 - Mountain bike\nID 481 - BMX", "Odabir", "X");
  689.                 }
  690.                 case 2:
  691.                 {
  692.                     ShowPlayerDialog(playerid, d_rentlist, DIALOG_STYLE_LIST, ""sName"Odabir motora", "ID 462 - Faggio\nID 461 - PCJ-600\nID 521 - FCR-900\nID 522 - NRG-500", "Odabir", "X");
  693.                 }
  694.                 case 3:
  695.                 {
  696.                     ShowPlayerDialog(playerid, d_rentlist, DIALOG_STYLE_LIST, ""sName"Odabir auta", "ID 516 - Nebula\nID 527 - Cadrona\nID 526 - Fortune\nID 585 - Emperor\nID 565 - Flash", "Odabir", "X");
  697.                 }
  698.             }
  699.         }
  700.     }
  701.     return 1;
  702. }
  703.  
  704. public OnPlayerStateChange(playerid, newstate, oldstate)
  705. {
  706.     if(newstate == PLAYER_STATE_DRIVER)
  707.     {
  708.         if(rentedVehicle[playerid] != GetPlayerVehicleID(playerid))
  709.         {
  710.             RemovePlayerFromVehicle(playerid);
  711.             errMsg(playerid, "To vozilo vi niste iznajmili");
  712.         }
  713.     }
  714.     return 1;
  715. }
  716.  
  717. //==============================================================
  718. //                        Timers tick
  719.  
  720. public rent_TickEnd(const playerid)
  721. {
  722.     DestroyVehicle(rentVehID[playerid]);
  723.     DestroyDynamic3DTextLabel(rentLabel[playerid]);
  724.  
  725.     rentedVehicle[playerid] = -1;
  726.     rentTime[playerid] = 0;
  727.     rentVehID[playerid] = -1;
  728.     rentChoose[playerid] = 0;
  729.  
  730.     infoMsg(playerid, "Vrijeme za vase rent vozilo je isteklo");
  731.  
  732.     return 1;
  733. }
  734.  
  735. //==============================================================
  736. //                      MySQL functions
  737.  
  738. public rent_LoadRents()
  739. {
  740.     if(!cache_num_rows())
  741.         return 1;
  742.  
  743.     for(new i = 0; i < cache_num_rows(); i++)
  744.     {
  745.         cache_get_value_name_int(i, "rent_id", rentInfo[i][rent_id]);
  746.         cache_get_value_name_int(i, "rent_style", rentInfo[i][rent_style]);
  747.  
  748.         cache_get_value_name_float(i, "rent_x", rentInfo[i][rent_x]);
  749.         cache_get_value_name_float(i, "rent_y", rentInfo[i][rent_y]);
  750.         cache_get_value_name_float(i, "rent_z", rentInfo[i][rent_z]);
  751.  
  752.         static tempStyle[10];
  753.  
  754.         if(rentInfo[i][rent_style] == 1) tempStyle = "Biciklovi";
  755.         else if(rentInfo[i][rent_style] == 2) tempStyle = "Motori";
  756.         else tempStyle = "Auti";
  757.  
  758.         static rentStr[110];
  759.         format(rentStr, sizeof rentStr, ""serverCol"[ RENT - %s ]\n"whiteCol"Da iznajmite vozilo, pritisnite "serverCol"F", tempStyle);
  760.  
  761.         rentInfo[i][rent_id] = CreateDynamicPickup(19132, 1, rentInfo[i][rent_x], rentInfo[i][rent_y], rentInfo[i][rent_z], 0);
  762.         rentInfo[i][rent_label] = CreateDynamic3DTextLabel(rentStr, -1, rentInfo[i][rent_x], rentInfo[i][rent_y], rentInfo[i][rent_z], 15.0);
  763.     }
  764.  
  765.     printf("\nRENT SYSTEM\n===============================\nUcitano %d rent pickupova", cache_num_rows());
  766.  
  767.     return 1;
  768. }
  769.  
  770. //==============================================================
  771. //                  PawnCMD commands (Player)
  772.  
  773. CMD:unrent(playerid)
  774. {
  775.     if(rentedVehicle[playerid] == 0)
  776.         return errMsg(playerid, "Niste iznajmili vozilo");
  777.  
  778.     DestroyVehicle(rentVehID[playerid]);
  779.     DestroyDynamic3DTextLabel(rentLabel[playerid]);
  780.  
  781.     rentedVehicle[playerid] = 0;
  782.     rentTime[playerid] = 0;
  783.     rentVehID[playerid] = -1;
  784.     rentChoose[playerid] = 0;
  785.  
  786.     KillTimer(rentTimer[playerid]);
  787.  
  788.     infoMsg(playerid, "Vratili ste vase iznajmljeno vozilo");
  789.  
  790.     return 1;
  791. }
  792.  
  793. //==============================================================
  794. //                   PawnCMD commands (RCON)
  795.  
  796. CMD:rentcreate(playerid, params[])
  797. {
  798.     if(!IsPlayerAdmin(playerid))
  799.         return errMsg(playerid, "Samo RCON admin");
  800.  
  801.     new Float:x, Float:y, Float:z, i = nextRentID();
  802.     static rentStyle;
  803.  
  804.     if(sscanf(params, "d", rentStyle))
  805.         return usgMsg(playerid, "/rentcreate [Stil renta (1 - Biciklovi, 2 - Motori, 3 - Auti) ]");
  806.  
  807.     if(rentStyle < 1 || rentStyle > 3)
  808.         return errMsg(playerid, "Pogresan odabir (1 - 3)");
  809.  
  810.     GetPlayerPos(playerid, x, y, z);
  811.  
  812.     static tempStyle[12];
  813.  
  814.     if(rentStyle == 1) tempStyle = "Biciklovi";
  815.     else if(rentStyle == 2) tempStyle = "Motori";
  816.     else tempStyle = "Auti";
  817.  
  818.     static rentStr[110];
  819.     format(rentStr, sizeof rentStr, ""serverCol"[ RENT - %s ]\n"whiteCol"Da iznajmite vozilo, pritisnite "serverCol"F", tempStyle);
  820.  
  821.     rentInfo[i][rent_id] = CreateDynamicPickup(19132, 1, x, y, z, 0);
  822.     rentInfo[i][rent_label] = CreateDynamic3DTextLabel(rentStr, -1, x, y, z, 15.0);
  823.  
  824.     rentInfo[i][rent_x] = x;
  825.     rentInfo[i][rent_y] = y;
  826.     rentInfo[i][rent_z] = z;
  827.  
  828.     rentInfo[i][rent_style] = rentStyle;
  829.  
  830.     static query[140];
  831.  
  832.     mysql_format(sql, query, sizeof query, "INSERT INTO rents (rent_id, rent_style, rent_x, rent_y, rent_z)\
  833.                                             VALUES ('%d', '%d', '%f', '%f', '%f')",\
  834.                                             rentInfo[i][rent_id], rentInfo[i][rent_style], rentInfo[i][rent_x], rentInfo[i][rent_y], rentInfo[i][rent_z]);
  835.     mysql_tquery(sql, query);
  836.  
  837.     infoMsg(playerid, "Uspjesno ste kreirali rent pickup na trenutnoj poziciji");
  838.  
  839.     return 1;
  840. }
  841.  
  842. CMD:rentremove(playerid, params[])
  843. {
  844.     if(!IsPlayerAdmin(playerid))
  845.         return errMsg(playerid, "Samo RCON admin");
  846.  
  847.     new i = findNearestRent(playerid);
  848.  
  849.     if(i == -1)
  850.         return errMsg(playerid, "Morate biti blizu rent pickup-a");
  851.  
  852.     DestroyDynamicPickup(rentInfo[i][rent_id]);
  853.     DestroyDynamic3DTextLabel(rentInfo[i][rent_label]);
  854.  
  855.     static query[128];
  856.  
  857.     mysql_format(sql, query, sizeof query, "DELETE FROM rents WHERE rent_id = '%d'", rentInfo[i][rent_id]);
  858.     mysql_tquery(sql, query);
  859.  
  860.     rentInfo[i][rent_x] = 0.0;
  861.     rentInfo[i][rent_y] = 0.0;
  862.     rentInfo[i][rent_z] = 0.0;
  863.  
  864.     infoMsg(playerid, "Uspjesno ste obrisali rent pickup");
  865.  
  866.     return 1;
  867. }
  868.  
  869. //==============================================================
  870. //                       Plain functions
  871.  
  872. getNearestRentStyle(const playerid)
  873. {
  874.     new i = findNearestRent(playerid);
  875.     return rentInfo[i][rent_style];
  876. }
  877.  
  878. findNearestRent(const playerid)
  879. {
  880.     for(new i = 0; i < maxRents; i++)
  881.     {
  882.         if(IsPlayerInRangeOfPoint(playerid, 1.5, rentInfo[i][rent_x], rentInfo[i][rent_y], rentInfo[i][rent_z]))
  883.             return i;
  884.     }
  885.  
  886.     return -1;
  887. }
  888.  
  889. nextRentID()
  890. {
  891.     new id = -1;
  892.  
  893.     for(new i = 0; i < maxRents; i++)
  894.     {
  895.         if(rentInfo[i][rent_x] == 0.0 && rentInfo[i][rent_y] == 0.0)
  896.         {
  897.             id = i;
  898.             break;
  899.         }
  900.     }
  901.     return id;
  902. }
  903.  
  904. getName(const playerid)
  905. {
  906.     static name[MAX_PLAYER_NAME];
  907.     GetPlayerName(playerid, name, sizeof name);
  908.     return name;
  909. }
  910.  
  911. SendClientMessageEx(playerid, color, const form[], {Float, _}: ...)
  912. {
  913.     #pragma unused form
  914.  
  915.     static
  916.         tmp[145]
  917.     ;
  918.     new
  919.         t1 = playerid,
  920.         t2 = color
  921.     ;
  922.     const
  923.         n4 = -4,
  924.         n16 = -16,
  925.         size = sizeof tmp
  926.     ;
  927.     #emit stack 28
  928.     #emit push.c size
  929.     #emit push.c tmp
  930.     #emit stack n4
  931.     #emit sysreq.c format
  932.     #emit stack n16
  933.  
  934.     return SendClientMessage(t1, t2, tmp);
  935. }
  936.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement