· 6 years ago · Jun 27, 2019, 07:50 PM
1/*
2 @ Dinamicno kreiranje renta by Shomy
3 @ Prebacio u MySQL: y_dev (Yansi)
4 @ INI - http://balkan-samp.com/forum/index.php?topic=128967.0
5*/
6#include "a_samp"
7#include "a_mysql"
8#include "YSI\y_ini"
9#include "foreach"
10#include "Pawn.CMD"
11#include "sscanf2"
12
13/* <-- MySQL --> */
14#define MYSQL_HOST "127.0.0.1"
15#define MYSQL_USER "root"
16#define MYSQL_PASSWORD ""
17#define MYSQL_DATABASE "rent_db"
18/* <-- Other.. --> */
19new MySQL:y_sql;
20
21const MAX_RENTS = 30;
22
23enum {
24 DIALOG_RENT,
25 DIALOG_RENTVREME
26}
27
28enum RENT_INFO {
29
30 Float:rentX,
31 Float:rentY,
32 Float:rentZ,
33 Text3D:RentLabel,
34 rentID,
35 r_dbID
36}
37
38new RentInfo[MAX_RENTS][RENT_INFO], IznajmioVozilo[MAX_PLAYERS], RentVeh[MAX_PLAYERS], RentOdabir[MAX_PLAYERS],
39 RentVreme[MAX_PLAYERS], RentTimer[MAX_PLAYERS], Text3D:RentVehLabel[MAX_VEHICLES], TipVozila[MAX_VEHICLES],
40 Iterator:iterator_rent<MAX_RENTS>;
41
42forward LoadRent();
43public LoadRent() {
44 new rows = cache_num_rows();
45 if(rows) {
46
47 for(new i; i < rows; i++) {
48
49 new id = Iter_Free(iterator_rent);
50
51 cache_get_value_name_float(i, "rentX", RentInfo[id][rentX]);
52 cache_get_value_name_float(i, "rentY", RentInfo[id][rentY]);
53 cache_get_value_name_float(i, "rentZ", RentInfo[id][rentZ]);
54
55 RentInfo[i][rentID] = CreatePickup(19132, 1, RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ], 0);
56 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);
57
58 Iter_Add(iterator_rent, id);
59 }
60 }
61 return 1;
62}
63/**/
64public OnFilterScriptInit() {
65 new MySQLOpt: option_id = mysql_init_options();
66 y_sql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
67 if (y_sql == MYSQL_INVALID_HANDLE || mysql_errno(y_sql) != 0)
68 {
69 print("<MySQL>: Konekcija na databazu nije uspela.");
70 SendRconCommand("exit");
71 return 1;
72 }
73
74 print("<MySQL>: Konekcija na databazu je uspesna.");
75 kreirajtablu();
76 mysql_tquery(y_sql, "SELECT * FROM `rent`", "LoadRent", "");
77 return 1;
78}
79
80kreirajtablu() {
81 mysql_tquery(y_sql, "CREATE TABLE IF NOT EXISTS `rent` (`id` int(11) NOT NULL AUTO_INCREMENT,`rentX` float NOT NULL,`rentY` float NOT NULL,`rentZ` float NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))");
82 return 1;
83}
84
85public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
86
87 switch(dialogid) {
88 case DIALOG_RENT: {
89 if(!response) return 1;
90 switch(listitem) {
91 case 0: {
92 RentOdabir[playerid] = 1;
93 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");
94 }
95 case 1: {
96 RentOdabir[playerid] = 2;
97 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");
98 }
99 }
100 }
101 case DIALOG_RENTVREME: {
102 if(!response) return 1;
103 for(new i = 0; i < MAX_RENTS; i++) {
104 if(IsPlayerInRangeOfPoint(playerid, 2.0, RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ]))
105 {
106 if(RentOdabir[playerid] == 1) {
107 new vreme;
108 if(GetPlayerMoney(playerid) < RentVreme[playerid]*100) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Nemate dovoljno novca.");
109 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");
110 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");
111 RentVreme[playerid] = vreme;
112 RentVeh[playerid] = CreateVehicle(405, RentInfo[i][rentX]+2, RentInfo[i][rentY]+2, RentInfo[i][rentZ], 0.0, 1, 1, -1);
113 PutPlayerInVehicle(playerid, RentVeh[playerid], 0);
114 IznajmioVozilo[playerid] = GetPlayerVehicleID(playerid);
115 GivePlayerMoney(playerid, -RentVreme[playerid]*100);
116 RentTimer[playerid] = SetTimerEx("TimerRent", 60000, true, "i", playerid);
117 SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Uspesno ste iznajmili vozilo.");
118 RentVehLabel[RentVeh[playerid]] = Create3DTextLabel("[RENTANO VOZILO]", 0x0077C7FF, RentInfo[i][rentX]+2, RentInfo[i][rentY]+2, RentInfo[i][rentZ], 10.0, 0, 0);
119 Attach3DTextLabelToVehicle(RentVehLabel[RentVeh[playerid]], RentVeh[playerid], 0.0, 0.0, 0.0);
120 TipVozila[RentVeh[playerid]] = 1; // 1 - Rent Vozilo
121 }
122 else if(RentOdabir[playerid] == 2) {
123 new vreme;
124 if(GetPlayerMoney(playerid) < RentVreme[playerid]*70) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Nemate dovoljno novca.");
125 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");
126 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");
127 RentVreme[playerid] = vreme;
128 RentVeh[playerid] = CreateVehicle(462, RentInfo[i][rentX]+2, RentInfo[i][rentY]+2, RentInfo[i][rentZ], 0.0, 1, 1, -1);
129 PutPlayerInVehicle(playerid, RentVeh[playerid], 0);
130 IznajmioVozilo[playerid] = GetPlayerVehicleID(playerid);
131 GivePlayerMoney(playerid, -RentVreme[playerid]*70);
132 RentTimer[playerid] = SetTimerEx("TimerRent", 60000, true, "i", playerid);
133 SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Uspesno ste iznajmili vozilo.");
134 RentVehLabel[RentVeh[playerid]] = Create3DTextLabel("[RENTANO VOZILO]", 0x0077C7FF, RentInfo[i][rentX]+2, RentInfo[i][rentY]+2, RentInfo[i][rentZ], 10.0, 0, 0);
135 Attach3DTextLabelToVehicle(RentVehLabel[RentVeh[playerid]], RentVeh[playerid], 0.0, 0.0, 0.0);
136 TipVozila[RentVeh[playerid]] = 1; // 1 - Rent Vozilo
137 }
138 }
139 }
140 }
141 }
142 return 1;
143}
144public OnPlayerStateChange(playerid, newstate, oldstate) {
145
146 if(newstate == PLAYER_STATE_DRIVER) {
147 if(TipVozila[playerid] == 1 && RentVeh[playerid] != GetPlayerVehicleID(playerid)) {
148 RemovePlayerFromVehicle(playerid);
149 SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Rentano vozilo.");
150 }
151 }
152 return 1;
153}
154forward TimerRent(playerid);
155public TimerRent(playerid) {
156
157 RentVreme[playerid]--;
158 if(RentVreme[playerid] == 0) {
159 KillTimer(RentTimer[playerid]);
160 DestroyVehicle(RentVeh[playerid]);
161 Delete3DTextLabel(RentVehLabel[RentVeh[playerid]]);
162 IznajmioVozilo[playerid] = 0;
163 RentOdabir[playerid] = 0;
164 RentVreme[playerid] = 0;
165 RentVeh[playerid] = 0;
166 SendClientMessage(playerid, 0x0077C7FF, "[RENT] {FFFFFF}Isteklo vam je vreme iznamljivanja vozila.");
167 }
168 return 1;
169}
170public OnPlayerDisconnect(playerid, reason) {
171
172 if(IznajmioVozilo[playerid] != 0) {
173 KillTimer(RentTimer[playerid]);
174 DestroyVehicle(RentVeh[playerid]);
175 Delete3DTextLabel(RentVehLabel[RentVeh[playerid]]);
176 IznajmioVozilo[playerid] = 0;
177 RentOdabir[playerid] = 0;
178 RentVreme[playerid] = 0;
179 RentVeh[playerid] = 0;
180 }
181 return 1;
182}
183
184CMD:kreirajrent(playerid, params[]) {
185
186 #pragma unused params
187
188 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste RCON admin.");
189 new Float:X, Float:Y, Float:Z, i = Iter_Free(iterator_rent), query[128];
190 GetPlayerPos(playerid, X,Y,Z);
191 RentInfo[i][rentID] = CreatePickup(19132, 1, X,Y,Z, 0);
192 RentInfo[i][RentLabel] = Create3DTextLabel("[RENT]\n{FFFFFF}Da iznajmite vozilo, kucajte\n{0077C7}/rent", 0x0077C7FF, X, Y, Z, 10.0, 0, 0);
193 RentInfo[i][rentX] = X;
194 RentInfo[i][rentY] = Y;
195 RentInfo[i][rentZ] = Z;
196 mysql_format(y_sql, query, sizeof query, "INSERT INTO `rent` (`rentX`, `rentY`, `rentZ`) VALUES ('%f', '%f', '%f')", RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ]);
197 mysql_tquery(y_sql, query);
198 return 1;
199}
200CMD:izbrisirent(playerid, params[]) {
201
202 #pragma unused params
203
204 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste RCON admin.");
205 new kveri[128];
206 for(new i = 0; i < MAX_RENTS; i++) {
207 if(IsPlayerInRangeOfPoint(playerid, 2.0, RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ]))
208 {
209 DestroyPickup(RentInfo[i][rentID]);
210 Delete3DTextLabel(RentInfo[i][RentLabel]);
211 RentInfo[i][rentX] = 0.0;
212 RentInfo[i][rentY] = 0.0;
213 RentInfo[i][rentZ] = 0.0;
214 mysql_format(y_sql, kveri, sizeof kveri, "DELETE FROM `rent` WHERE rentX = '%f', rentY = '%f', rentZ = '%f'", RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ]);
215 mysql_tquery(y_sql, kveri);
216 }
217 }
218 return 1;
219}
220// Sentinel 405 Faggio 462
221CMD:rent(playerid, params[]) {
222
223 #pragma unused params
224
225 for(new i = 0; i < MAX_RENTS; i++) {
226 if(IsPlayerInRangeOfPoint(playerid, 2.0, RentInfo[i][rentX], RentInfo[i][rentY], RentInfo[i][rentZ]))
227 {
228 if(IznajmioVozilo[playerid] != 0) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Vec ste iznajmili vozilo.");
229 ShowPlayerDialog(playerid, DIALOG_RENT, DIALOG_STYLE_LIST, "{0077C7}Iznamljivanje {FFFFFF}vozila", "Sentinel\nFaggio", "Izaberi","Izlaz");
230 }
231 }
232 return 1;
233}
234CMD:unrent(playerid, params[]) {
235
236 #pragma unused params
237
238 if(IznajmioVozilo[playerid] == 0) return SendClientMessage(playerid, 0x0077C7FF, "[ERROR] {FFFFFF}Niste iznajmili vozilo.");
239 KillTimer(RentTimer[playerid]);
240 DestroyVehicle(RentVeh[playerid]);
241 Delete3DTextLabel(RentVehLabel[RentVeh[playerid]]);
242 IznajmioVozilo[playerid] = 0;
243 if(RentOdabir[playerid] == 1) {
244 GivePlayerMoney(playerid, RentVreme[playerid]*100);
245 new str[120];
246 format(str, sizeof(str), "[UNRENT] {FFFFFF}Uspesno ste vratili iznamljeno vozilo te vam je vraceno %d$", RentVreme[playerid]*100);
247 SendClientMessage(playerid, 0x0077C7FF, str);
248 RentOdabir[playerid] = 0;
249 RentVreme[playerid] = 0;
250 RentVeh[playerid] = 0;
251 }
252 else if(RentOdabir[playerid] == 2) {
253 GivePlayerMoney(playerid, RentVreme[playerid]*70);
254 new str[120];
255 format(str, sizeof(str), "[UNRENT] {FFFFFF}Uspesno ste vratili iznamljeno vozilo te vam je vraceno %d$", RentVreme[playerid]*70);
256 SendClientMessage(playerid, 0x0077C7FF, str);
257 RentOdabir[playerid] = 0;
258 RentVreme[playerid] = 0;
259 RentVeh[playerid] = 0;
260 }
261 return 1;
262}