· 6 years ago · Jan 07, 2020, 01:50 AM
1#include <a_samp>
2#include <inc/a_mysql>
3#include <inc/whirlpool>
4#include <inc/Pawn.CMD>
5#include <inc/streamer>
6#include <inc/sscanf2>
7#include <inc/foreach>
8
9main(){}
10
11#define DIALOG_VEHICLES 1000
12
13#define DIALOG_BUY_VEHICLE 2000
14#define DIALOG_WYBOR_POJAZD 2001
15#define DIALOG_BUY_CLOVER 3000
16#define DIALOG_BUY_TAMPA 3001
17#define DIALOG_WYBOR_COL1 4000
18#define DIALOG_WYBOR_COL2 4001
19
20#define pos_salon 2129.2078, -1129.9963, 25.5823
21
22#define MAX_VEHICLE_SLOTS 4
23
24new message[500];
25
26enum pInfo
27{
28 ID,
29 Nick[MAX_PLAYER_NAME],
30 Password[129],
31 Cache:Cache_ID,
32 Money,
33 VehicleSlot[MAX_VEHICLE_SLOTS]
34};
35new PlayerInfo[MAX_PLAYERS][pInfo];
36
37enum VehiclesData
38{
39 DB_ID,
40 vID,
41 vehModel,
42 vehName[25],
43 vehOwner[MAX_PLAYER_NAME],
44 vehColorOne,
45 vehColorTwo,
46 Text3D:vehLabel,
47 Float:vehX,
48 Float:vehY,
49 Float:vehZ,
50 Float:vehA
51};
52new vInfo[MAX_VEHICLES][VehiclesData];
53
54new Iterator:Vehicles<MAX_VEHICLES>; // New vehicles iterator
55
56//new VehicleUID[MAX_VEHICLES];
57
58new pojazdid[MAX_PLAYERS];
59new CenaPojazdu[MAX_PLAYERS];
60new KolorPierwszy[MAX_PLAYERS];
61
62new Float:LosowyParking[27][4] = {
63{2161.2605,-1197.3385,23.5517,89.7108},//1
64{2161.0071,-1192.6439,23.4812,90.5042},//2
65{2160.9656,-1187.9816,23.4800,90.5042},//3
66{2160.9233,-1183.1466,23.4788,90.5042},//4
67{2160.8806,-1178.2858,23.4776,90.5042},//5
68{2160.8352,-1173.1339,23.4763,90.5042},//6
69{2160.7915,-1168.2013,23.4751,90.5042},//7
70{2160.7498,-1163.4933,23.4739,90.5042},//8
71{2160.7043,-1158.3149,23.4726,90.5042},//9
72{2160.6587,-1153.1633,23.4713,90.5042},//10
73{2160.6128,-1148.3796,23.9337,90.5042},//11
74{2160.5649,-1143.8113,24.8596,90.5042},//12
75{2148.7363,-1203.4053,23.5150,270.6497},//13
76{2148.6887,-1199.0850,23.6128,270.6497},//14
77{2148.6409,-1194.7642,23.7106,270.6497},//15
78{2148.5842,-1189.6375,23.8267,270.6497},//16
79{2148.5342,-1185.1234,23.9289,270.6497},//17
80{2148.4814,-1180.3663,24.0366,270.6497},//18
81{2148.3794,-1171.1194,24.2460,270.6497},//19
82{2148.3274,-1166.4340,24.3521,270.6497},//20
83{2148.2791,-1162.0425,24.4516,270.6497},//21
84{2148.2290,-1157.5012,24.5544,270.6497},//22
85{2148.1829,-1153.3276,24.6489,270.6497},//23
86{2148.1255,-1148.1309,24.7666,270.6497},//24
87{2148.0740,-1143.4689,24.8721,270.6497},//25
88{2148.0215,-1138.7086,24.9799,270.6497},//26
89{2148.6426,-1133.7229,25.2246,268.2947}//27
90};
91
92new VehicleNames[212][] =
93{
94 "Landstalker", "Bravura", "Buffalo", "Linerunner", "Pereniel", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus","Voodoo", "Pony",
95 "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer",
96 "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero",
97 "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy",
98 "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad",
99 "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR3 50", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick",
100 "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson", "Mesa",
101 "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropdust",
102 "Stunt", "Tanker", "RoadTrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
103 "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet",
104 "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster A",
105 "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight", "Trailer", "Kart", "Mower",
106 "Duneride", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan", "Tug", "Trailer A", "Emperor", "Wayfarer", "Euros",
107 "Hotdog", "Club", "Trailer B", "Trailer C", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)", "Police Car (LVPD)", "Police Ranger",
108 "Picador", "S.W.A.T. Van", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A", "Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow", "Utility Trailer"
109};
110
111LoadDynamicVehicles()
112{
113 mysql_query(g_SQL, "SELECT * FROM privcars");
114
115 new rows = cache_num_rows();
116
117 printf("Number of player vehicles: %d", rows);
118
119 if(rows > 0)
120 {
121 for (new i = 0; i < rows; i++)
122 {
123 new slot;
124
125 cache_get_value_int(i, "vehID", slot);
126 cache_get_value_name(i, "vehOwner", vInfo[slot][vehOwner], .max_len = MAX_PLAYER_NAME);
127 cache_get_value_name_int(i, "vehModel", vInfo[slot][vehModel]);
128 cache_get_value_name(i, "vehName", vInfo[slot][vehName], 25);
129 cache_get_value_name_int(i, "vehColorOne", vInfo[slot][vehColorOne]);
130 cache_get_value_name_int(i, "vehColorTwo", vInfo[slot][vehColorTwo]);
131 cache_get_value_name_float(i, "vehX", vInfo[slot][vehX]);
132 cache_get_value_name_float(i, "vehY", vInfo[slot][vehY]);
133 cache_get_value_name_float(i, "vehZ", vInfo[slot][vehZ]);
134 cache_get_value_name_float(i, "vehA", vInfo[slot][vehA]);
135
136 vInfo[slot][vID] = CreateVehicle(vInfo[slot][vehModel], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], -1);
137 vInfo[slot][DB_ID] = slot;
138
139 new string[200];
140 format(string, sizeof(string), "Pojazd UID: %d\nWlasciciel: %s\nNazwa: %s", vInfo[slot][DB_ID], vInfo[slot][vehOwner], vInfo[slot][vehName]);
141 vInfo[slot][vehLabel] = CreateDynamic3DTextLabel(string, -1, vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], 10.0, INVALID_PLAYER_ID, vInfo[slot][vID]);
142
143 Iter_Add(Vehicles, slot);
144 }
145 }
146
147 return 1;
148}
149
150forward LoadPlayerVehicles(playerid);
151public LoadPlayerVehicles(playerid)
152{
153 new rows = cache_num_rows();
154
155 if(rows != 0)
156 {
157 for (new i = 0; i < rows; i++)
158 {
159 new slot;
160
161 cache_get_value_int(i, "vehID", slot);
162
163 PlayerInfo[playerid][VehicleSlot][i] = slot;
164 }
165 }
166 print("vehhhhhhhhhhhhhhh");
167
168 return 1;
169}
170
171GetDynamicVehicleID(vehicleid)
172{
173 foreach(new i : Vehicles)
174 {
175 if(vehicleid == vInfo[i][vID]) return i;
176 }
177 return -1;
178}
179
180public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
181{
182 switch(dialogid)
183 {
184 case 440:
185 {
186 if(response)
187 {
188 switch(listitem)
189 {
190 case 0:
191 {
192 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
193 }
194 }
195 }
196 }
197 case 457:
198 {
199 if(response)
200 {
201 switch(listitem)
202 {
203 case 0:
204 {
205 ShowPlayerDialog(playerid, 4700, DIALOG_STYLE_MSGBOX, "Kupowanie Clovera", "Clover\n\nCena: 45.000$", "Kup!", "Wróć");
206 pojazdid[playerid] = 542;
207 CenaPojazdu[playerid] = 45000;
208 }
209 case 1:
210 {
211 ShowPlayerDialog(playerid, 4701, DIALOG_STYLE_MSGBOX, "Kupowanie Tampy", "Tampa\n\nCena: 40.000$", "Kup!", "Wróć");
212 pojazdid[playerid] = 549;
213 CenaPojazdu[playerid] = 40000;
214 }
215 }
216 }
217 if(!response)
218 {
219 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
220 }
221 }
222 case 4700:
223 {
224 if(response)
225 {
226 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
227 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
228 }
229 if(!response)
230 {
231 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
232 pojazdid[playerid] = 0;
233 CenaPojazdu[playerid] = 0;
234 }
235 }
236 case 4701:
237 {
238 if(response)
239 {
240 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
241 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
242 }
243 if(!response)
244 {
245 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
246 pojazdid[playerid] = 0;
247 CenaPojazdu[playerid] = 0;
248 }
249 }
250 case 31:
251 {
252 if(response)
253 {
254 switch(listitem)
255 {
256 case 0:
257 {
258 KolorPierwszy[playerid] = 0;
259 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
260 }
261 case 1:
262 {
263 KolorPierwszy[playerid] = 1;
264 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
265 }
266 }
267 }
268 if(!response)
269 {
270 pojazdid[playerid] = 0;
271 CenaPojazdu[playerid] = 0;
272 }
273 }
274 case 32:
275 {
276 if(response)
277 {
278 switch(listitem)
279 {
280 case 0:
281 {
282 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 0, CenaPojazdu[playerid]);
283 }
284 case 1:
285 {
286 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 1, CenaPojazdu[playerid]);
287 }
288 }
289 }
290 if(!response)
291 {
292 pojazdid[playerid] = 0;
293 CenaPojazdu[playerid] = 0;
294 KolorPierwszy[playerid] = 0;
295 }
296 }
297
298 //
299 case 9848:
300 {
301 if(response)
302 {
303 new count = 0;
304 for(new i = 0; i < MAX_VEHICLES; i++)
305 {
306 if(!vInfo[i][DB_ID]) continue;
307
308 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
309 {
310 if(count == listitem)
311 {
312 PlayerInfo[playerid][VehicleSlot] = i;
313 format(message, sizeof(message), "%s - %d", VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
314 break;
315 }
316 else
317 {
318 count++;
319 }
320 }
321 }
322 }
323 }
324
325 default: return 0;
326 }
327
328 return 1;
329}
330
331stock BuyCar(playerid, model, color1, color2, cena)
332{
333 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Exit veh.");
334
335 new losuj = random(sizeof(LosowyParking));
336 new komunikat[256];
337
338 if(GetPlayerMoney(playerid) >= cena)
339 {
340 if(model >= 400 && model <= 611)
341 {
342 if(CountPlayerVehicles(playerid) == PlayerInfo[playerid][VehicleSlot]) return SendClientMessage(playerid, -1, "You not free slot.");
343
344 /* CarCreate section, we need the code here in order to access the free slot in vInfo, can't return two values in Car_Create*/
345
346 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array
347
348 if(slot == ITER_NONE) return SendClientMessage(playerid, -1, "Can't create vehicle.. no free slot found!");
349
350 vInfo[slot][vehModel] = model;
351 vInfo[slot][vehColorOne] = color1;
352 vInfo[slot][vehColorTwo] = color2;
353 vInfo[slot][vehX] = LosowyParking[losuj][0];
354 vInfo[slot][vehY] = LosowyParking[losuj][1];
355 vInfo[slot][vehZ] = LosowyParking[losuj][2];
356 vInfo[slot][vehA] = LosowyParking[losuj][3];
357
358 vInfo[slot][vID] = CreateVehicle(model, LosowyParking[losuj][0], LosowyParking[losuj][1], LosowyParking[losuj][2], LosowyParking[losuj][3], color1, color2, -1);
359
360 PutPlayerInVehicle(playerid, vInfo[slot][vID], 0);
361
362 format(vInfo[slot][vehName], 25, GetVehicleName(model));
363 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
364
365 mysql_format(g_SQL, query, sizeof(query),
366 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
367 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
368 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
369 mysql_query(g_SQL, query);
370
371 vInfo[slot][DB_ID] = cache_insert_id();
372
373 Iter_Add(Vehicles, slot);
374
375 new freeslot;
376 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
377 {
378 if(PlayerInfo[playerid][VehicleSlot][i] == -1)
379 {
380 freeslot = i;
381 break;
382 }
383 }
384 PlayerInfo[playerid][VehicleSlot][freeslot] = vInfo[slot][DB_ID];
385
386 printf("FREESLOT: %d ||| SLOT: %d", freeslot, slot);
387
388 format(komunikat, sizeof(komunikat), "Buy %s %d$. CMD: /myveh!", GetVehicleName(model), cena);
389 SendClientMessage(playerid, -1, komunikat);
390
391 GivePlayerMoney(playerid, -cena);
392
393 format(komunikat, sizeof(komunikat), "%s buy veh %s %d$. UID %d", GetName(playerid), GetVehicleName(model), cena, slot);
394 SendClientMessageToAll(-1, komunikat);
395 }
396 else
397 {
398
399 }
400 }
401 else
402 {
403
404 }
405
406 return 1;
407}
408
409forward GetVehicleDatabaseID(slot);
410public GetVehicleDatabaseID(slot) // Here we get the database id to store for later use (saving vehicles)
411{
412 SaveVehicle(slot);
413 return vInfo[slot][DB_ID] = cache_insert_id();
414}
415
416SetupPrivCarTable()
417{
418 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `privcars` (\
419 `vehID` int(11) NOT NULL AUTO_INCREMENT,\
420 `vehModel` int(11) NOT NULL,\
421 `vehName` varchar(25) NOT NULL,\
422 `vehOwner` varchar(24) NOT NULL default '-',\
423 `vehColorOne` int(11) NOT NULL,\
424 `vehColorTwo` int(11) NOT NULL,\
425 `vehX` float NOT NULL,\
426 `vehY` float NOT NULL,\
427 `vehZ` float NOT NULL,\
428 `vehA` float NOT NULL,\
429 PRIMARY KEY (`vehID`))");
430 return 1;
431}
432
433ZerujZmienne(playerid)
434{
435 PlayerInfo[playerid][VehicleSlot][0] = 0;
436 PlayerInfo[playerid][VehicleSlot][1] = 0;
437 PlayerInfo[playerid][VehicleSlot][2] = 0;
438 PlayerInfo[playerid][VehicleSlot][3] = 0;
439
440 PlayerInfo[playerid][VehicleSlot][4] = -1;
441 PlayerInfo[playerid][VehicleSlot][5] = -1;
442 PlayerInfo[playerid][VehicleSlot][6] = -1;
443 PlayerInfo[playerid][VehicleSlot][7] = -1;
444 PlayerInfo[playerid][VehicleSlot][8] = -1;
445 PlayerInfo[playerid][VehicleSlot][9] = -1;
446
447 return 1;
448}
449
450GetVehicleName(modelid)
451{
452 new string[25];
453 format(string, sizeof(string), "%s", VehicleNames[modelid - 400]);
454 return string;
455}
456
457GetVehicleArrayIDBySlot(id, slot)
458{
459 //new id;
460
461 foreach(new i : Vehicles)
462
463CountPlayerVehicles(playerid)
464{
465 new count;
466
467 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
468 {
469 if(PlayerInfo[playerid][VehicleSlot][i] != -1) count++;
470 }
471
472 return count;
473}
474
475CMD:myveh(playerid, params[])
476{
477 if(CountPlayerVehicles(playerid) == 0) return SendClientMessage(playerid, -1, "You not car!");
478
479 new msg[256];
480
481 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
482 {
483 new arrayid = GetVehicleArrayIDBySlot(playerid, PlayerInfo[playerid][VehicleSlot][i]);
484
485 switch(PlayerInfo[playerid][VehicleSlot][i])
486 {
487 case -1:
488 {
489 continue;
490 }
491 case 0: // slot bought, but no vehicle
492 {
493 format(msg, sizeof(msg), "%sBought slot [not buy car]\n", msg);
494 }
495 default: // slot bought and vehicle bought
496 {
497 format(msg, sizeof(msg), "%s%d %s\n", msg, vInfo[arrayid][DB_ID], VehicleNames[vInfo[arrayid][vehModel] - 400]);
498 }
499 }
500 }
501
502 ShowPlayerDialog(playerid, 9848, DIALOG_STYLE_LIST, "Twoje pojazdy", msg, "Wybierz", "Anuluj");
503
504 return 1;
505}