· 6 years ago · Mar 12, 2019, 10:16 AM
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
14enum {
15 DIALOG_RENT
16}
17enum 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
33new 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
36public 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}
52public OnPlayerConnect(playerid) {
53
54 IznajmioVozilo[ playerid ] = -1;
55 return 1;
56}
57public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
58
59 switch(dialogid) {
60 case DIALOG_RENT: {
61 if(GetPlayerMoney(playerid) < RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]*strval(inputtext)) {
62 new str[ 45 ];
63 SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Nemate toliko novca.");
64 format(str, sizeof(str), "Unesite vreme iznamljivanja.\n1 minut = %d$", RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]);
65 ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_INPUT, "{0077C7}Rent Vozila", str, "U redu", "Izlaz");
66 return 1;
67 }
68 IznajmioVozilo[ playerid ] = GetPlayerVehicleID(playerid);
69 RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] = true;
70 Update3DTextLabelText(RentInfo[ IznajmioVozilo[ playerid ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{FF1414}<< ZAUZETO >>");
71 TogglePlayerControllable(playerid, true);
72 GivePlayerMoney(playerid, -RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]*strval(inputtext));
73 VremeRenta[ playerid ] = strval(inputtext);
74 TimerRent[ playerid ] = SetTimerEx("RentTimer", 60000, true, "i", playerid);
75 SendClientMessage(playerid, 0x0077C7FF, "Uspesno ste iznajmili vozilo.");
76 SendClientMessage(playerid, 0x0077C7FF, "Da pronadjete svoje vozilo, kucajte /findrent.");
77 }
78 }
79 return 1;
80}
81public OnPlayerStateChange(playerid, newstate, oldstate) {
82
83 if(newstate == PLAYER_STATE_DRIVER && TipVozila[ GetPlayerVehicleID(playerid) ] == 1) {
84 if(RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] != GetPlayerVehicleID(playerid)) {
85 RemovePlayerFromVehicle(playerid);
86 SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo je neko iznajmio.");
87 return 1;
88 }
89 else if(!RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] != GetPlayerVehicleID(playerid) && IznajmioVozilo[ playerid ] != -1) {
90 RemovePlayerFromVehicle(playerid);
91 SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Vec ste iznajmili vozilo.");
92 return 1;
93 }
94 else if(!RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ] && IznajmioVozilo[ playerid ] == -1) {
95 TogglePlayerControllable(playerid, false);
96 SendClientMessage(playerid, 0x0077C7FF, "Da iznajmite vozilo, kucajte /rent");
97 SendClientMessage(playerid, 0x0077C7FF, "Da izadjete iz vozila, pritisnite ENTER.");
98 return 1;
99 }
100 }
101 return 1;
102}
103public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
104
105 if(newkeys == KEY_SECONDARY_ATTACK && TipVozila[ GetPlayerVehicleID(playerid) ] == 1 && IznajmioVozilo[ playerid ] == -1) {
106 RemovePlayerFromVehicle(playerid);
107 TogglePlayerControllable(playerid, true);
108 return 1;
109 }
110 return 1;
111}
112public OnPlayerEnterCheckpoint(playerid) {
113
114 if(TraziRent[ playerid ]) {
115 DisablePlayerCheckpoint(playerid);
116 TraziRent[ playerid ] = false;
117 }
118 return 1;
119}
120forward LoadRents();
121public LoadRents() {
122 new rows = cache_num_rows();
123 if(rows) {
124
125 for(new i; i < rows; i++) {
126
127 new id = Iter_Free(ServerRents);
128
129 cache_get_value_name_float(i, "X", RentInfo[ id ][ rentX ]);
130 cache_get_value_name_float(i, "Y", RentInfo[ id ][ rentY ]);
131 cache_get_value_name_float(i, "Z", RentInfo[ id ][ rentZ ]);
132 cache_get_value_name_float(i, "A", RentInfo[ id ][ rentA ]);
133 cache_get_value_name_int(i, "Veh_ID", RentInfo[ id ][ rentVehID ]);
134 cache_get_value_name_int(i, "Boja_1", RentInfo[ id ][ rentBoja1 ]);
135 cache_get_value_name_int(i, "Boja_2", RentInfo[ id ][ rentBoja2 ]);
136 cache_get_value_name_int(i, "Iznos_Novca_Po_Minuti", RentInfo[ id ][ rentPare ]);
137 cache_get_value_name_int(i, "id", RentInfo[ id ][ rSqlID ]);
138
139 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);
140 RentInfo[ id ][ rentLabel ] = Create3DTextLabel("[ RENT ]\n{1AEA00}>> SLOBODNO <<", 0xFFFFFFFF, 0.0, 0.0, 0.0, 10.0, 0);
141 Attach3DTextLabelToVehicle(RentInfo[ id ][ rentLabel ], RentInfo[ id ][ rentID ], 0.0, 0.0, 0.0);
142 TipVozila[ RentInfo[ id ][ rentID ] ] = 1;
143 Iter_Add(ServerRents, id);
144 }
145 }
146 return 1;
147}
148forward RentTimer(playerid);
149public RentTimer(playerid) {
150
151 VremeRenta[ playerid ]--;
152 if(VremeRenta[ playerid ] == 0) {
153 SetVehicleToRespawn(IznajmioVozilo[ playerid ]);
154 Update3DTextLabelText(RentInfo[ IznajmioVozilo[ playerid ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{1AEA00}>> SLOBODNO <<");
155 RentInfo[ IznajmioVozilo[ playerid ] ][ rentZauzet ] = false;
156 IznajmioVozilo[ playerid ] = -1;
157 SendClientMessage(playerid, 0x0077C7FF, "Isteklo Vam je vreme iznamljivanja vozila.");
158 TraziRent[ playerid ] = false;
159 DisablePlayerCheckpoint(playerid);
160 KillTimer(TimerRent[ playerid ]);
161 }
162 return 1;
163}
164CMD:kreirajrent(playerid, params[]) {
165
166 new boja1, boja2, pare, i = Iter_Free(ServerRents), query[ 500 ], vid, Float:X, Float:Y, Float:Z, Float:A;
167 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste RCON admin.");
168 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]");
169 GetPlayerPos(playerid, X,Y,Z);
170 GetPlayerFacingAngle(playerid, A);
171 RentInfo[ i ][ rentBoja1 ] = boja1;
172 RentInfo[ i ][ rentBoja2 ] = boja2;
173 RentInfo[ i ][ rentPare ] = pare;
174 RentInfo[ i ][ rentVehID ] = vid;
175 RentInfo[ i ][ rentX ] = X;
176 RentInfo[ i ][ rentY ] = Y;
177 RentInfo[ i ][ rentZ ] = Z;
178 RentInfo[ i ][ rentA ] = A;
179 RentInfo[ i ][ rSqlID ] = i;
180 RentInfo[ i ][ rentID ] = CreateVehicle(vid, X, Y, Z, A, boja1, boja2, -1);
181 RentInfo[ i ][ rentLabel ] = Create3DTextLabel("[ RENT ]\n{1AEA00}>> SLOBODNO <<", 0xFFFFFFFF, X, Y, Z, 10.0, 0);
182 Attach3DTextLabelToVehicle(RentInfo[ i ][ rentLabel ], RentInfo[ i ][ rentID ], 0.0, 0.0, 0.0);
183 PutPlayerInVehicle(playerid, RentInfo[ i ][ rentID ], 1);
184 TipVozila[ RentInfo[ i ][ rentID ] ] = 1;
185 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);
186 mysql_tquery(g_SQL, query);
187 Iter_Add(ServerRents, i);
188 return 1;
189}
190CMD:izbrisirent(playerid, params[]) {
191
192 #pragma unused params
193 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste u vozilu.");
194 if(TipVozila[ GetPlayerVehicleID(playerid) ] != 1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo nije za iznamljivanje.");
195 new query[ 140 ];
196 RentInfo[ GetPlayerVehicleID(playerid) ][ rentX ] = 0.0;
197 RentInfo[ GetPlayerVehicleID(playerid) ][ rentY ] = 0.0;
198 RentInfo[ GetPlayerVehicleID(playerid) ][ rentZ ] = 0.0;
199 RentInfo[ GetPlayerVehicleID(playerid) ][ rentA ] = 0.0;
200 mysql_format(g_SQL, query, sizeof query,"DELETE FROM `rentovi` WHERE `id` = %d", RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ]);
201 mysql_tquery(g_SQL, query);
202 DestroyVehicle(GetPlayerVehicleID(playerid));
203 Delete3DTextLabel(RentInfo[ GetPlayerVehicleID(playerid) ][ rentLabel ]);
204 Iter_Remove(ServerRents, RentInfo[ GetPlayerVehicleID(playerid) ][ rSqlID ]);
205 return 1;
206}
207CMD:rent(playerid, params[]) {
208
209 #pragma unused params
210 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste u vozilu.");
211 if(TipVozila[ GetPlayerVehicleID(playerid) ] != 1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo nije za iznamljivanje.");
212 if(RentInfo[ GetPlayerVehicleID(playerid) ][ rentZauzet ]) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}To vozilo je vec iznamljeno.");
213 if(IznajmioVozilo[ playerid ] != -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Vec ste iznajmili vozilo, koristite /unrent");
214 new str[ 45 ];
215 format(str, sizeof(str), "Unesite vreme iznamljivanja.\n1 minut = %d$", RentInfo[ GetPlayerVehicleID(playerid) ][ rentPare ]);
216 ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_INPUT, "{0077C7}Rent Vozila", str, "U redu", "Izlaz");
217 return 1;
218}
219CMD:unrent(playerid, params[]) {
220
221 #pragma unused params
222 if(IznajmioVozilo[ playerid ] == -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste iznajmili vozilo.");
223 new str[ 55 ];
224 SetVehicleToRespawn(IznajmioVozilo[ playerid ]);
225 Update3DTextLabelText(RentInfo[ IznajmioVozilo[ playerid ] ][ rentLabel ], 0xFFFFFFFF, "[ RENT ]\n{1AEA00}>> SLOBODNO <<");
226 RentInfo[ IznajmioVozilo[ playerid ] ][ rentZauzet ] = false;
227 format(str, sizeof(str), "Vratili ste iznamljeno vozilo te Vam je vraceno %d$", VremeRenta[ playerid ]*RentInfo[ IznajmioVozilo[ playerid ] ][ rentPare ]);
228 SendClientMessage(playerid, 0x0077C7FF, str);
229 TraziRent[ playerid ] = false;
230 DisablePlayerCheckpoint(playerid);
231 VremeRenta[ playerid ] = 0;
232 IznajmioVozilo[ playerid ] = -1;
233 KillTimer(TimerRent[ playerid ]);
234 return 1;
235}
236CMD:findrent(playerid, params[]) {
237
238 #pragma unused params
239 if(IznajmioVozilo[ playerid ] == -1) return SendClientMessage(playerid, 0xFF1414FF, "[GRESKA] {FFFFFF}Niste iznajmili vozilo.");
240 new Float:X, Float:Y, Float:Z;
241 GetVehiclePos(IznajmioVozilo[ playerid ], X,Y,Z);
242 SetPlayerCheckpoint(playerid, X,Y,Z, 3.0);
243 TraziRent[ playerid ] = true;
244 SendClientMessage(playerid, 0x0077C7FF, "Vase rent vozilo Vam je oznaceno crveno na mapi.");
245 return 1;
246}