Advertisement
ShomyScript

Rent System ZBSamp - Shomy

Mar 12th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.69 KB | None | 0 0
  1. #include < a_samp >
  2. #include < a_mysql >
  3. #include < foreach >
  4. #include < Pawn.CMD >
  5. #include < sscanf2 >
  6.  
  7. #define MYSQL_HOST "127.0.0.1"
  8. #define MYSQL_USER "root"
  9. #define MYSQL_PASSWORD ""
  10. #define MYSQL_DATABASE "rentcars"
  11.  
  12. #define MAX_RENTCARS 500
  13.  
  14. enum {
  15. DIALOG_RENT
  16. }
  17. enum RENT_INFO {
  18.  
  19. Float:rentX,
  20. Float:rentY,
  21. Float:rentZ,
  22. Float:rentA,
  23. rentBoja1,
  24. rentBoja2,
  25. rentPare,
  26. bool:rentZauzet,
  27. rentVehID,
  28. Text3D:rentLabel,
  29. rentID,
  30. rSqlID
  31. }
  32.  
  33. new MySQL:g_SQL, RentInfo[ MAX_RENTCARS ][ RENT_INFO ], Iterator:ServerRents<MAX_RENTCARS>, TipVozila[ MAX_VEHICLES ],
  34. IznajmioVozilo[ MAX_PLAYERS ], TimerRent[ MAX_PLAYERS ], VremeRenta[ MAX_PLAYERS ], bool:TraziRent[ MAX_PLAYERS ];
  35.  
  36. public OnFilterScriptInit() {
  37.  
  38. new MySQLOpt: option_id = mysql_init_options();
  39. g_SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
  40. if (g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
  41. {
  42. print("MySQL konekcija neuspesna. Proverite podatke i databazu");
  43. SendRconCommand("exit");
  44. return 1;
  45. }
  46.  
  47. print("MySQL konekcija, uspesna");
  48. mysql_tquery(g_SQL, "SELECT * FROM `rentovi`", "LoadRents", "");
  49. mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `rentovi` (`id` int(11), `Veh_ID` int(3) NOT NULL, `X` float NOT NULL,`Y` float NOT NULL,`Z` float NOT NULL, `A` float NOT NULL, `Boja_1` int(3) NOT NULL, `Boja_2` int(3) NOT NULL, `Iznos_Novca_Po_Minuti` int(5) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))");
  50. return 1;
  51. }
  52. public OnPlayerConnect(playerid) {
  53.  
  54. IznajmioVozilo[ playerid ] = -1;
  55. return 1;
  56. }
  57. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  58.  
  59. switch(dialogid) {
  60. case DIALOG_RENT: {
  61. if(!response) {
  62. TogglePlayerControllable(playerid, true);
  63. RemovePlayerFromVehicle(playerid);
  64. return 1;
  65. }
  66. if(GetPlayerMoney(playerid) < RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentPare ]*strval(inputtext)) {
  67. new str[ 45 ];
  68. SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Nemate toliko novca.");
  69. format(str, sizeof(str), "Unesite vreme iznamljivanja.\n1 minut = %d$", RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]);
  70. ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_INPUT, "{0077C7}Rent Vozila", str, "U redu", "Izlaz");
  71. return 1;
  72. }
  73. IznajmioVozilo[ playerid ] = GetPlayerVehicleID(playerid);
  74. RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentZauzet ] = true;
  75. Update3DTextLabelText(RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{FF1414}<< ZAUZETO >>");
  76. TogglePlayerControllable(playerid, true);
  77. GivePlayerMoney(playerid, -RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentPare ]*strval(inputtext));
  78. VremeRenta[ playerid ] = strval(inputtext);
  79. TimerRent[ playerid ] = SetTimerEx("RentTimer", 60000, true, "i", playerid);
  80. SendClientMessage(playerid, 0x0077C7FF, "Uspesno ste iznajmili vozilo.");
  81. SendClientMessage(playerid, 0x0077C7FF, "Da pronadjete svoje vozilo, kucajte /findrent.");
  82. }
  83. }
  84. return 1;
  85. }
  86. public OnPlayerStateChange(playerid, newstate, oldstate) {
  87.  
  88. if(newstate == PLAYER_STATE_DRIVER && TipVozila[ GetPlayerVehicleID(playerid) ] == 1) {
  89. if(RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] != GetPlayerVehicleID(playerid)) {
  90. RemovePlayerFromVehicle(playerid);
  91. SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo je neko iznajmio.");
  92. return 1;
  93. }
  94. else if(!RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] != GetPlayerVehicleID(playerid) && IznajmioVozilo[ playerid ] != -1) {
  95. RemovePlayerFromVehicle(playerid);
  96. SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Vec ste iznajmili vozilo.");
  97. return 1;
  98. }
  99. else if(!RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] == -1) {
  100. TogglePlayerControllable(playerid, false);
  101. SendClientMessage(playerid, 0x0077C7FF, "Da iznajmite vozilo, kucajte /rent");
  102. SendClientMessage(playerid, 0x0077C7FF, "Da izadjete iz vozila, pritisnite ENTER.");
  103. return 1;
  104. }
  105. }
  106. return 1;
  107. }
  108. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  109.  
  110. if(newkeys == KEY_SECONDARY_ATTACK && TipVozila[ GetPlayerVehicleID(playerid) ] == 1 && IznajmioVozilo[ playerid ] == -1) {
  111. RemovePlayerFromVehicle(playerid);
  112. TogglePlayerControllable(playerid, true);
  113. return 1;
  114. }
  115. return 1;
  116. }
  117. public OnPlayerEnterCheckpoint(playerid) {
  118.  
  119. if(TraziRent[ playerid ]) {
  120. DisablePlayerCheckpoint(playerid);
  121. TraziRent[ playerid ] = false;
  122. }
  123. return 1;
  124. }
  125. forward LoadRents();
  126. public LoadRents() {
  127. new rows = cache_num_rows();
  128. if(rows) {
  129.  
  130. for(new i; i < rows; i++) {
  131.  
  132. new id = Iter_Free(ServerRents);
  133.  
  134. cache_get_value_name_float(i, "X", RentInfo[ id ][ rentX ]);
  135. cache_get_value_name_float(i, "Y", RentInfo[ id ][ rentY ]);
  136. cache_get_value_name_float(i, "Z", RentInfo[ id ][ rentZ ]);
  137. cache_get_value_name_float(i, "A", RentInfo[ id ][ rentA ]);
  138. cache_get_value_name_int(i, "Veh_ID", RentInfo[ id ][ rentVehID ]);
  139. cache_get_value_name_int(i, "Boja_1", RentInfo[ id ][ rentBoja1 ]);
  140. cache_get_value_name_int(i, "Boja_2", RentInfo[ id ][ rentBoja2 ]);
  141. cache_get_value_name_int(i, "Iznos_Novca_Po_Minuti", RentInfo[ id ][ rentPare ]);
  142. cache_get_value_name_int(i, "id", RentInfo[ id ][ rSqlID ]);
  143.  
  144. RentInfo[ id ][ rentID ] = CreateVehicle(RentInfo[ id ][ rentVehID ], RentInfo[ id ][ rentX ], RentInfo[ id ][ rentY ], RentInfo[ id ][ rentZ ], RentInfo[ id ][ rentA ], RentInfo[ id ][ rentBoja1 ], RentInfo[ id ][ rentBoja2 ], -1);
  145. RentInfo[ id ][ rentLabel ] = Create3DTextLabel("[ RENT ]\n{1AEA00}>> SLOBODNO <<", 0xFFFFFFFF, 0.0, 0.0, 0.0, 10.0, 0);
  146. Attach3DTextLabelToVehicle(RentInfo[ id ][ rentLabel ], RentInfo[ id ][ rentID ], 0.0, 0.0, 0.0);
  147. TipVozila[ RentInfo[ id ][ rentID ] ] = 1;
  148. Iter_Add(ServerRents, id);
  149. }
  150. }
  151. return 1;
  152. }
  153. forward RentTimer(playerid);
  154. public RentTimer(playerid) {
  155.  
  156. VremeRenta[ playerid ]--;
  157. if(VremeRenta[ playerid ] == 0) {
  158. SetVehicleToRespawn(IznajmioVozilo[ playerid ]);
  159. Update3DTextLabelText(RentInfo[ IznajmioVozilo[ playerid ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{1AEA00}>> SLOBODNO <<");
  160. RentInfo[ IznajmioVozilo[ playerid ] ][ rentZauzet ] = false;
  161. IznajmioVozilo[ playerid ] = -1;
  162. SendClientMessage(playerid, 0x0077C7FF, "Isteklo Vam je vreme iznamljivanja vozila.");
  163. TraziRent[ playerid ] = false;
  164. DisablePlayerCheckpoint(playerid);
  165. KillTimer(TimerRent[ playerid ]);
  166. }
  167. return 1;
  168. }
  169. CMD:kreirajrent(playerid, params[]) {
  170.  
  171. new boja1, boja2, pare, i = Iter_Free(ServerRents), query[ 500 ], vid, Float:X, Float:Y, Float:Z, Float:A;
  172. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste RCON admin.");
  173. if(sscanf(params, "dddd", boja1, boja2, pare, vid)) return SendClientMessage(playerid, 0x0077C7FF, "[UPOTREBA] {FFFFFF}/kreirajrent [Boja 1] [Boja 2] [Iznos novca po minuti iznamljivanja] [Veh ID]");
  174. GetPlayerPos(playerid, X,Y,Z);
  175. GetPlayerFacingAngle(playerid, A);
  176. RentInfo[ i ][ rentBoja1 ] = boja1;
  177. RentInfo[ i ][ rentBoja2 ] = boja2;
  178. RentInfo[ i ][ rentPare ] = pare;
  179. RentInfo[ i ][ rentVehID ] = vid;
  180. RentInfo[ i ][ rentX ] = X;
  181. RentInfo[ i ][ rentY ] = Y;
  182. RentInfo[ i ][ rentZ ] = Z;
  183. RentInfo[ i ][ rentA ] = A;
  184. RentInfo[ i ][ rSqlID ] = i;
  185. RentInfo[ i ][ rentID ] = CreateVehicle(vid, X, Y, Z, A, boja1, boja2, -1);
  186. RentInfo[ i ][ rentLabel ] = Create3DTextLabel("[ RENT ]\n{1AEA00}>> SLOBODNO <<", 0xFFFFFFFF, X, Y, Z, 10.0, 0);
  187. printf("[Debug 3] ID: %d", i);
  188. Attach3DTextLabelToVehicle(RentInfo[ i ][ rentLabel ], RentInfo[ i ][ rentID ], 0.0, 0.0, 0.0);
  189. PutPlayerInVehicle(playerid, RentInfo[ i ][ rentID ], 1);
  190. TipVozila[ RentInfo[ i ][ rentID ] ] = 1;
  191. mysql_format(g_SQL, query, sizeof query, "INSERT INTO `rentovi` (`id`, `X`, `Y`, `Z`, `A`, `Boja_1`, `Boja_2`, `Veh_ID`, `Iznos_Novca_Po_Minuti`) VALUES ('%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d')", i, X, Y, Z, A, boja1, boja2, vid, pare);
  192. mysql_tquery(g_SQL, query);
  193. Iter_Add(ServerRents, i);
  194. printf("[Debug 2] Pare: %d", pare);
  195. printf("[Debug 4] ID: %d", i);
  196. return 1;
  197. }
  198. CMD:izbrisirent(playerid, params[]) {
  199.  
  200. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste u vozilu.");
  201. if(TipVozila[ GetPlayerVehicleID(playerid) ] != 1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo nije za iznamljivanje.");
  202. new query[ 140 ];
  203. RentInfo[ GetPlayerVehicleID(playerid) ][ rentX ] = 0.0;
  204. RentInfo[ GetPlayerVehicleID(playerid) ][ rentY ] = 0.0;
  205. RentInfo[ GetPlayerVehicleID(playerid) ][ rentZ ] = 0.0;
  206. RentInfo[ GetPlayerVehicleID(playerid) ][ rentA ] = 0.0;
  207. mysql_format(g_SQL, query, sizeof query,"DELETE FROM `rentovi` WHERE `id` = %d", RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ]);
  208. mysql_tquery(g_SQL, query);
  209. DestroyVehicle(GetPlayerVehicleID(playerid));
  210. Delete3DTextLabel(RentInfo[ GetPlayerVehicleID(playerid) ][ rentLabel ]);
  211. Iter_Remove(ServerRents, RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ]);
  212. return 1;
  213. }
  214. CMD:rent(playerid, params[]) {
  215.  
  216. if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste u vozilu.");
  217. if(TipVozila[ GetPlayerVehicleID(playerid) ] != 1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo nije za iznamljivanje.");
  218. if(RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ]) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo je vec iznamljeno.");
  219. if(IznajmioVozilo[ playerid ] != -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Vec ste iznajmili vozilo, koristite /unrent");
  220. new str[ 45 ];
  221. format(str, sizeof(str), "Unesite vreme iznamljivanja.\n1 minut = %d$", RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentPare ]);
  222. ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_INPUT, "{0077C7}Rent Vozila", str, "U redu", "Izlaz");
  223. printf("[Debug 1] Pare: %d", RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]);
  224. printf("[Debug 5] ID: %d", GetPlayerVehicleID(playerid));
  225. return 1;
  226. }
  227. CMD:unrent(playerid, params[]) {
  228.  
  229. if(IznajmioVozilo[ playerid ] == -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste iznajmili vozilo.");
  230. new str[ 55 ];
  231. SetVehicleToRespawn(IznajmioVozilo[ playerid ]);
  232. Update3DTextLabelText(RentInfo[ IznajmioVozilo[ playerid ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{1AEA00}>> SLOBODNO <<");
  233. RentInfo[ IznajmioVozilo[ playerid ] ][ rentZauzet ] = false;
  234. format(str, sizeof(str), "Vratili ste iznamljeno vozilo te Vam je vraceno %d$", VremeRenta[ playerid ]*RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentPare ]);
  235. SendClientMessage(playerid, 0x0077C7FF, str);
  236. TraziRent[ playerid ] = false;
  237. DisablePlayerCheckpoint(playerid);
  238. GivePlayerMoney(playerid, VremeRenta[ playerid ]*RentInfo[ RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ] ][ rentPare ]);
  239. VremeRenta[ playerid ] = 0;
  240. IznajmioVozilo[ playerid ] = -1;
  241. KillTimer(TimerRent[ playerid ]);
  242. return 1;
  243. }
  244. CMD:findrent(playerid, params[]) {
  245.  
  246. if(IznajmioVozilo[ playerid ] == -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste iznajmili vozilo.");
  247. new Float:X, Float:Y, Float:Z;
  248. GetVehiclePos(IznajmioVozilo[ playerid ], X,Y,Z);
  249. SetPlayerCheckpoint(playerid, X,Y,Z, 3.0);
  250. TraziRent[ playerid ] = true;
  251. SendClientMessage(playerid, 0x0077C7FF, "Vase rent vozilo Vam je oznaceno crveno na mapi.");
  252. return 1;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement