· 6 years ago · Jul 10, 2019, 04:12 PM
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 MYSQL_HOST "127.0.0.1"
12#define MYSQL_USER "root"
13#define MYSQL_PASSWORD ""
14#define MYSQL_DATABASE "mojabaza"
15
16//Kolory
17#define BIALY "{FFFFFF}"
18#define ZIELONY "{99CC00}"
19
20#define DIALOG_REGISTER 0
21#define DIALOG_LOGIN 1
22
23#define DIALOG_VEHICLES 1000
24
25#define DIALOG_BUY_VEHICLE 2000
26#define DIALOG_WYBOR_POJAZD 2001
27#define DIALOG_BUY_CLOVER 3000
28#define DIALOG_BUY_TAMPA 3001
29#define DIALOG_WYBOR_COL1 4000
30#define DIALOG_WYBOR_COL2 4001
31
32#define pos_salon 2129.2078, -1129.9963, 25.5823
33
34new MySQL:g_SQL;
35new MySQLRaceCheck[MAX_PLAYERS];
36
37new Zalogowany[MAX_PLAYERS];
38
39#define MAX_VEHICLE_SLOTS 4
40
41new message[500];
42
43enum pInfo
44{
45 ID,
46 Nick[MAX_PLAYER_NAME],
47 Password[129],
48 Cache:Cache_ID,
49 Money,
50 VehicleSlot[MAX_VEHICLE_SLOTS]
51};
52new PlayerInfo[MAX_PLAYERS][pInfo];
53
54enum VehiclesData
55{
56 DB_ID,
57 vID,
58 vehModel,
59 vehName[25],
60 vehOwner[MAX_PLAYER_NAME],
61 vehColorOne,
62 vehColorTwo,
63 Text3D:vehLabel,
64 Float:vehX,
65 Float:vehY,
66 Float:vehZ,
67 Float:vehA
68};
69new vInfo[MAX_VEHICLES][VehiclesData];
70
71new Iterator:Vehicles<MAX_VEHICLES>; // New vehicles iterator
72
73//new VehicleUID[MAX_VEHICLES];
74
75new pojazdid[MAX_PLAYERS];
76new CenaPojazdu[MAX_PLAYERS];
77new KolorPierwszy[MAX_PLAYERS];
78
79new Float:LosowyParking[27][4] = {
80{2161.2605,-1197.3385,23.5517,89.7108},//1
81{2161.0071,-1192.6439,23.4812,90.5042},//2
82{2160.9656,-1187.9816,23.4800,90.5042},//3
83{2160.9233,-1183.1466,23.4788,90.5042},//4
84{2160.8806,-1178.2858,23.4776,90.5042},//5
85{2160.8352,-1173.1339,23.4763,90.5042},//6
86{2160.7915,-1168.2013,23.4751,90.5042},//7
87{2160.7498,-1163.4933,23.4739,90.5042},//8
88{2160.7043,-1158.3149,23.4726,90.5042},//9
89{2160.6587,-1153.1633,23.4713,90.5042},//10
90{2160.6128,-1148.3796,23.9337,90.5042},//11
91{2160.5649,-1143.8113,24.8596,90.5042},//12
92{2148.7363,-1203.4053,23.5150,270.6497},//13
93{2148.6887,-1199.0850,23.6128,270.6497},//14
94{2148.6409,-1194.7642,23.7106,270.6497},//15
95{2148.5842,-1189.6375,23.8267,270.6497},//16
96{2148.5342,-1185.1234,23.9289,270.6497},//17
97{2148.4814,-1180.3663,24.0366,270.6497},//18
98{2148.3794,-1171.1194,24.2460,270.6497},//19
99{2148.3274,-1166.4340,24.3521,270.6497},//20
100{2148.2791,-1162.0425,24.4516,270.6497},//21
101{2148.2290,-1157.5012,24.5544,270.6497},//22
102{2148.1829,-1153.3276,24.6489,270.6497},//23
103{2148.1255,-1148.1309,24.7666,270.6497},//24
104{2148.0740,-1143.4689,24.8721,270.6497},//25
105{2148.0215,-1138.7086,24.9799,270.6497},//26
106{2148.6426,-1133.7229,25.2246,268.2947}//27
107};
108
109new VehicleNames[212][] =
110{
111 "Landstalker", "Bravura", "Buffalo", "Linerunner", "Pereniel", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus","Voodoo", "Pony",
112 "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer",
113 "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero",
114 "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy",
115 "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad",
116 "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR3 50", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick",
117 "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson", "Mesa",
118 "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropdust",
119 "Stunt", "Tanker", "RoadTrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
120 "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet",
121 "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster A",
122 "Monster B", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight", "Trailer", "Kart", "Mower",
123 "Duneride", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan", "Tug", "Trailer A", "Emperor", "Wayfarer", "Euros",
124 "Hotdog", "Club", "Trailer B", "Trailer C", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)", "Police Car (LVPD)", "Police Ranger",
125 "Picador", "S.W.A.T. Van", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage Trailer A", "Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow", "Utility Trailer"
126};
127
128public OnGameModeInit()
129{
130 new MySQLOpt:option_id = mysql_init_options();
131
132 mysql_set_option(option_id, AUTO_RECONNECT, true);
133
134 g_SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
135
136 if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
137 {
138 print("[MYSQL - BŁĄD] Nie można było połączyć się z bazą danych! Wyłączam serwer...");
139 SendRconCommand("exit");
140 return 1;
141 }
142 else
143 {
144 print("[MYSQL] Połączenie z bazą danych została nawiązana!");
145 }
146
147 SetupPlayerTable();
148 SetupPrivCarTable();
149
150 //StworzonePojazdy();
151
152 SetTimer("OnPlayerUpdateEx", 15000, true);
153
154 LoadDynamicVehicles();
155
156 DisableInteriorEnterExits();
157 EnableStuntBonusForAll(0);
158
159 AddPlayerClass(29, pos_salon, 0.0, -1, -1, -1, -1, -1, -1);
160 return 1;
161}
162
163LoadDynamicVehicles()
164{
165 mysql_query(g_SQL, "SELECT * FROM privcars");
166
167 new rows = cache_num_rows();
168
169 printf("Number of player vehicles: %d", rows);
170
171 if(rows > 0)
172 {
173 for (new i = 0; i < rows; i++)
174 {
175 new slot;
176
177 cache_get_value_int(i, "vehID", slot);
178 cache_get_value_name(i, "vehOwner", vInfo[slot][vehOwner], .max_len = MAX_PLAYER_NAME);
179 cache_get_value_name_int(i, "vehModel", vInfo[slot][vehModel]);
180 cache_get_value_name(i, "vehName", vInfo[slot][vehName], 25);
181 cache_get_value_name_int(i, "vehColorOne", vInfo[slot][vehColorOne]);
182 cache_get_value_name_int(i, "vehColorTwo", vInfo[slot][vehColorTwo]);
183 cache_get_value_name_float(i, "vehX", vInfo[slot][vehX]);
184 cache_get_value_name_float(i, "vehY", vInfo[slot][vehY]);
185 cache_get_value_name_float(i, "vehZ", vInfo[slot][vehZ]);
186 cache_get_value_name_float(i, "vehA", vInfo[slot][vehA]);
187
188 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);
189 vInfo[slot][DB_ID] = slot;
190
191 new string[200];
192 format(string, sizeof(string), "Pojazd UID: %d\nWlasciciel: %s\nNazwa: %s", vInfo[slot][DB_ID], vInfo[slot][vehOwner], vInfo[slot][vehName]);
193 vInfo[slot][vehLabel] = CreateDynamic3DTextLabel(string, -1, vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], 10.0, INVALID_PLAYER_ID, vInfo[slot][vID]);
194
195 Iter_Add(Vehicles, slot);
196 }
197 }
198
199 return 1;
200}
201
202forward LoadPlayerVehicles(playerid);
203public LoadPlayerVehicles(playerid)
204{
205 new rows = cache_num_rows();
206
207 if(rows != 0)
208 {
209 for (new i = 0; i < rows; i++)
210 {
211 new slot;
212
213 cache_get_value_int(i, "vehID", slot);
214
215 PlayerInfo[playerid][VehicleSlot][i] = slot;
216 }
217 }
218 print("vehhhhhhhhhhhhhhh");
219
220 return 1;
221}
222
223GetDynamicVehicleID(vehicleid)
224{
225 foreach(new i : Vehicles)
226 {
227 if(vehicleid == vInfo[i][vID]) return i;
228 }
229 return -1;
230}
231
232public OnGameModeExit()
233{
234 foreach(new i : Vehicles)
235 {
236 if(!strcmp(vInfo[i][vehOwner], "-") || strcmp(vInfo[i][vehOwner], "-"))
237 {
238 SaveVehicle(i);
239 DestroyVehicle(vInfo[i][vID]);
240 DestroyDynamic3DTextLabel(vInfo[i][vehLabel]);
241 }
242 }
243
244 mysql_close(g_SQL);
245 return 1;
246}
247
248public OnPlayerConnect(playerid)
249{
250 TogglePlayerSpectating(playerid, 1);
251
252 MySQLRaceCheck[playerid]++;
253
254 static const empty_player[pInfo];
255 PlayerInfo[playerid] = empty_player;
256
257 ZerujZmienne(playerid);
258
259 GetPlayerName(playerid, PlayerInfo[playerid][Nick], MAX_PLAYER_NAME);
260
261 new query[103];
262 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Nick` = '%s' LIMIT 1", PlayerInfo[playerid][Nick]);
263 mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, MySQLRaceCheck[playerid]);
264
265 return 1;
266}
267
268public OnPlayerDisconnect(playerid, reason)
269{
270 OnPlayerUpdateEx(playerid);
271
272 for(new i = 0; i < MAX_PLAYERS; i++)
273 {
274 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
275 {
276 SaveVehicle(i);
277 //DestroyVehicle(vInfo[i][vID]); //delete
278 print("Zapisano veh!");
279 }
280 }
281
282 return 1;
283}
284
285public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
286{
287 new vid;
288 if((vid = GetDynamicVehicleID(vehicleid)) != -1)
289 {
290 if(!strcmp(vInfo[vid][vehOwner], GetName(playerid)))
291 {
292 SendClientMessage(playerid, -1, "This vehicle belongs to you!");
293 }
294 else
295 {
296 SendClientMessage(playerid, -1, "This is not one of your vehicles!");
297 ClearAnimations(playerid);
298 return 1;
299 }
300 }
301 else
302 {
303 SendClientMessage(playerid, -1, "Not a scripted vehicle!");
304 }
305
306 return 1;
307}
308
309forward OnPlayerDataLoaded(playerid, race_check);
310public OnPlayerDataLoaded(playerid, race_check)
311{
312 if(race_check != MySQLRaceCheck[playerid]) return Kick(playerid);
313
314 new string[115];
315 if(cache_num_rows() > 0)
316 {
317 cache_get_value(0, "Password", PlayerInfo[playerid][Password], 129);
318
319 PlayerInfo[playerid][Cache_ID] = cache_save();
320
321 format(string, sizeof(string), "To konto (%s) jest zarejestrowane. Zaloguj się, podając swoje hasło w poniższym polu:", PlayerInfo[playerid][Nick]);
322 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", string, "Zaloguj", "Wyjdź");
323 }
324 else
325 {
326 format(string, sizeof(string), "Witamy %s, możesz zarejestrować się, wpisując swoje hasło w polu poniżej:", PlayerInfo[playerid][Nick]);
327 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", string, "Zarejestruj", "Wyjdź");
328 }
329 return 1;
330}
331
332forward OnPlayerRegister(playerid);
333public OnPlayerRegister(playerid)
334{
335 PlayerInfo[playerid][ID] = cache_insert_id();
336
337 GivePlayerMoney(playerid, 500000);
338
339 Zalogowany[playerid] = 1;
340 return 1;
341}
342
343forward OnPlayerUpdateEx(playerid);
344public OnPlayerUpdateEx(playerid)
345{
346 if(IsPlayerConnected(playerid))
347 {
348 if(Zalogowany[playerid])
349 {
350 new query[650];
351
352 PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
353
354 mysql_format(g_SQL, query, sizeof(query), "UPDATE `accounts` SET `Money` = %d, `VehSlot` = %d WHERE `ID` = %d LIMIT 1", PlayerInfo[playerid][Money], PlayerInfo[playerid][VehicleSlot], PlayerInfo[playerid][ID]);
355 mysql_tquery(g_SQL, query);
356 }
357 SendClientMessage(playerid, -1, "Zapisano acc!");
358 }
359 return 1;
360}
361
362public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
363{
364 switch(dialogid)
365 {
366 case DIALOG_LOGIN:
367 {
368 if(response)
369 {
370 new HashPass[129];
371 WP_Hash(HashPass, sizeof(HashPass), inputtext);
372
373 if(strcmp(HashPass, PlayerInfo[playerid][Password]) == 0)
374 {
375 cache_set_active(PlayerInfo[playerid][Cache_ID]);
376
377 AssignPlayerData(playerid);
378
379 cache_delete(PlayerInfo[playerid][Cache_ID]);
380 PlayerInfo[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
381
382 TogglePlayerSpectating(playerid, 0);
383
384 new query[100];
385 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM privcars WHERE vehOwner = '%i'", GetNick(playerid));
386 mysql_pquery(g_SQL, query, "LoadPlayerVehicles", "i", playerid);
387
388 Zalogowany[playerid] = 1;
389
390 GivePlayerMoney(playerid, 500000);
391
392 SetSpawnInfo(playerid, 0, 29, pos_salon, 0.0, -1, -1, -1, -1, -1, -1);
393 SpawnPlayer(playerid);
394 }
395 else
396 {
397 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", "Złe hasło!\nW polu poniżej wpisz swoje hasło:", "Zaloguj", "Wyjdź");
398 }
399 }
400 if(!response)
401 {
402 Kick(playerid);
403 }
404 }
405 case DIALOG_REGISTER:
406 {
407 if(response)
408 {
409 if(strlen(inputtext) >= 6 && strlen(inputtext) <= 64)
410 {
411 new HashPass[129];
412 WP_Hash(HashPass, sizeof(HashPass), inputtext);
413
414 new query[300];
415 mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `accounts` (`Nick`, `Password`) VALUES ('%s', '%s')", PlayerInfo[playerid][Nick], HashPass);
416 mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
417
418 TogglePlayerSpectating(playerid, 0);
419 }
420 else
421 {
422 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", "Twoje hasło musi mieć od 6 do 64 znaków!\nW polu poniżej wpisz swoje hasło:", "Zarejestruj", "Wyjdź");
423 }
424 }
425 if(!response)
426 {
427 Kick(playerid);
428 }
429 }
430
431 case 440:
432 {
433 if(response)
434 {
435 switch(listitem)
436 {
437 case 0:
438 {
439 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
440 }
441 }
442 }
443 }
444 case 457:
445 {
446 if(response)
447 {
448 switch(listitem)
449 {
450 case 0:
451 {
452 ShowPlayerDialog(playerid, 4700, DIALOG_STYLE_MSGBOX, "Kupowanie Clovera", "Clover\n\nCena: 45.000$", "Kup!", "Wróć");
453 pojazdid[playerid] = 542;
454 CenaPojazdu[playerid] = 45000;
455 }
456 case 1:
457 {
458 ShowPlayerDialog(playerid, 4701, DIALOG_STYLE_MSGBOX, "Kupowanie Tampy", "Tampa\n\nCena: 40.000$", "Kup!", "Wróć");
459 pojazdid[playerid] = 549;
460 CenaPojazdu[playerid] = 40000;
461 }
462 }
463 }
464 if(!response)
465 {
466 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
467 }
468 }
469 case 4700:
470 {
471 if(response)
472 {
473 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
474 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
475 }
476 if(!response)
477 {
478 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
479 pojazdid[playerid] = 0;
480 CenaPojazdu[playerid] = 0;
481 }
482 }
483 case 4701:
484 {
485 if(response)
486 {
487 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
488 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
489 }
490 if(!response)
491 {
492 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
493 pojazdid[playerid] = 0;
494 CenaPojazdu[playerid] = 0;
495 }
496 }
497 case 31:
498 {
499 if(response)
500 {
501 switch(listitem)
502 {
503 case 0:
504 {
505 KolorPierwszy[playerid] = 0;
506 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
507 }
508 case 1:
509 {
510 KolorPierwszy[playerid] = 1;
511 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
512 }
513 }
514 }
515 if(!response)
516 {
517 pojazdid[playerid] = 0;
518 CenaPojazdu[playerid] = 0;
519 }
520 }
521 case 32:
522 {
523 if(response)
524 {
525 switch(listitem)
526 {
527 case 0:
528 {
529 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 0, CenaPojazdu[playerid]);
530 }
531 case 1:
532 {
533 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 1, CenaPojazdu[playerid]);
534 }
535 }
536 }
537 if(!response)
538 {
539 pojazdid[playerid] = 0;
540 CenaPojazdu[playerid] = 0;
541 KolorPierwszy[playerid] = 0;
542 }
543 }
544
545 //
546 case 9848:
547 {
548 if(response)
549 {
550 new count = 0;
551 for(new i = 0; i < MAX_VEHICLES; i++)
552 {
553 if(!vInfo[i][DB_ID]) continue;
554
555 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
556 {
557 if(count == listitem)
558 {
559 PlayerInfo[playerid][VehicleSlot] = i;
560 format(message, sizeof(message), "%s - %d", VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
561 break;
562 }
563 else
564 {
565 count++;
566 }
567 }
568 }
569 }
570 }
571
572 default: return 0;
573 }
574
575 return 1;
576}
577
578stock KupowaniePojazdu(playerid, model, kolor1, kolor2, cena)
579{
580 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
581
582 new losuj = random(sizeof(LosowyParking));
583 new komunikat[256];
584
585 if(GetPlayerMoney(playerid) >= cena)
586 {
587 if(model >= 400 && model <= 611)
588 {
589 if(CountPlayerVehicles(playerid) == PlayerInfo[playerid][VehicleSlot]) return SendClientMessage(playerid, -1, "Nie masz wolnych slotów.");
590
591 new vtemp;
592 vtemp = Car_Create(model, playerid, LosowyParking[losuj][0], LosowyParking[losuj][1], LosowyParking[losuj][2], LosowyParking[losuj][3], kolor1, kolor2);
593
594 format(komunikat, sizeof(komunikat), "Kupiłeś %s za %d$. Komendy auta znajdziesz w /pp. Gratulujemy zakupu!", GetVehicleName(model), cena);
595 SendClientMessage(playerid, -1, komunikat);
596
597 GivePlayerMoney(playerid, -cena);
598
599 format(komunikat, sizeof(komunikat), "%s kupil pojazd %s za %d$. UID %d", GetName(playerid), GetVehicleName(model), cena, vtemp);
600 SendClientMessageToAll(-1, komunikat);
601
602 PlayerInfo[playerid][VehicleSlot]++;
603
604 PutPlayerInVehicle(playerid, vtemp, 0);
605 }
606 else
607 {
608 SendClientMessage(playerid, -1, "BŁĄD - zły model! Zgłoś okoliczności na forum.");
609 }
610 }
611 else
612 {
613 format(komunikat, sizeof(komunikat), "Nie stać Cię na zakup tego pojazdu. Kosztuje on %d$ a Ty posiadasz tylko %d$.", cena, GetPlayerMoney(playerid));
614 SendClientMessage(playerid, -1, komunikat);
615 }
616
617 return 1;
618}
619
620stock Car_Create(model, playerid, Float:x, Float:y, Float:z, Float:angle, color1, color2)
621{
622 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array;
623
624 vInfo[slot][vehModel] = model;
625 vInfo[slot][vehColorOne] = color1;
626 vInfo[slot][vehColorTwo] = color2;
627 vInfo[slot][vehX] = x;
628 vInfo[slot][vehY] = y;
629 vInfo[slot][vehZ] = z;
630 vInfo[slot][vehA] = angle;
631
632 vInfo[slot][vID] = CreateVehicle(model, x, y, z, angle, color1, color2, -1);
633
634 format(vInfo[slot][vehName], 25, GetVehicleName(model));
635 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
636
637 //VehicleUID[vInfo[slot][vID]] = index;
638
639 mysql_format(g_SQL, query, sizeof(query),
640 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
641 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
642 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
643 mysql_tquery(g_SQL, query, "GetVehicleDatabaseID", "i", slot);
644
645 return vInfo[slot][vID];
646}
647
648forward GetVehicleDatabaseID(slot);
649public GetVehicleDatabaseID(slot) // Here we get the database id to store for later use (saving vehicles)
650{
651 SaveVehicle(slot);
652 return vInfo[slot][DB_ID] = cache_insert_id();
653}
654
655SaveVehicle(slot)
656{
657 format(vInfo[slot][vehName], 25, GetVehicleName(vInfo[slot][vehModel]));
658 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(slot));
659
660 GetVehiclePos(vInfo[slot][vID], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ]);
661 GetVehicleZAngle(vInfo[slot][vID], vInfo[slot][vehA]);
662
663 new query[500];
664 mysql_format(g_SQL, query, sizeof(query), "UPDATE `privcars` SET `vehName` = '%e', `vehOwner` = '%e', `vehModel` = %i, `vehColorOne` = %i, `vehColorTwo` = %i,\
665 `vehX` = %f, `vehY` = %f, `vehZ` = %f, `vehA` = %f WHERE `vehID` = %d", vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehModel],
666 vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA], vInfo[slot][DB_ID]);
667 mysql_tquery(g_SQL, query);
668
669 SendClientMessageToAll(-1, "Zapisano!");
670 return 1;
671}
672
673AssignPlayerData(playerid)
674{
675 cache_get_value_int(0, "ID", PlayerInfo[playerid][ID]);
676 cache_get_value_int(0, "Money", PlayerInfo[playerid][Money]);
677 cache_get_value_int(0, "VehSlot", PlayerInfo[playerid][VehicleSlot]);
678 return 1;
679}
680
681SetupPlayerTable()
682{
683 new query[1000];
684 strcat(query, "CREATE TABLE IF NOT EXISTS `accounts` (");
685 strcat(query, "`ID` INT(11) NOT NULL AUTO_INCREMENT,");
686 strcat(query, "`Nick` VARCHAR(24) NOT NULL,");
687 strcat(query, "`Password` CHAR(129) NOT NULL,");
688 strcat(query, "`Money` INT NOT NULL DEFAULT '0',");
689 strcat(query, "`VehSlot` INT NOT NULL DEFAULT '0',");
690 strcat(query, "PRIMARY KEY (`ID`), UNIQUE KEY `Nick` (`Nick`))");
691 mysql_tquery(g_SQL, query);
692 return 1;
693}
694
695SetupPrivCarTable()
696{
697 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `privcars` (\
698 `vehID` int(11) NOT NULL AUTO_INCREMENT,\
699 `vehModel` int(11) NOT NULL,\
700 `vehName` varchar(25) NOT NULL,\
701 `vehOwner` varchar(24) NOT NULL default '-',\
702 `vehColorOne` int(11) NOT NULL,\
703 `vehColorTwo` int(11) NOT NULL,\
704 `vehX` float NOT NULL,\
705 `vehY` float NOT NULL,\
706 `vehZ` float NOT NULL,\
707 `vehA` float NOT NULL,\
708 PRIMARY KEY (`vehID`))");
709 return 1;
710}
711
712ZerujZmienne(playerid)
713{
714 Zalogowany[playerid] = 0;
715
716 PlayerInfo[playerid][Money] = 0;
717
718 PlayerInfo[playerid][VehicleSlot] = 0;
719
720 return 1;
721}
722
723stock GetName(playerid)
724{
725 new pName[MAX_PLAYER_NAME];
726 GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
727 return pName;
728}
729
730stock GetNick(playerid)
731{
732 new nick_[MAX_PLAYER_NAME];
733 GetPlayerName(playerid, nick_, sizeof(nick_));
734 return nick_;
735}
736
737GetVehicleName(modelid)
738{
739 new string[25];
740 format(string, sizeof(string), "%s", VehicleNames[modelid - 400]);
741 return string;
742}
743
744CMD:kuppojazd(playerid)
745{
746 if(IsPlayerInRangeOfPoint(playerid, 10.0, 2132.0371, -1149.7332, 24.2372))
747 {
748 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
749 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
750 }
751 else
752 {
753 SendClientMessage(playerid, -1, "Nie jesteś przy salonie aut.");
754 }
755 return 1;
756}
757
758CMD:myv(playerid, params[])
759{
760 new bool:found = false, msg[256];
761
762 for(new i = 0; i < MAX_VEHICLES; i++)
763 {
764 if(!vInfo[i][DB_ID]) continue;
765
766 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
767 {
768 found = true;
769 format(msg, sizeof(msg), "%s%s ID : %d\n", msg, VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
770 }
771 }
772 if(found)
773 {
774 ShowPlayerDialog(playerid, 9848, DIALOG_STYLE_LIST, "My Vehicles", msg, "Choose", "Cancel");
775 }
776 else
777 {
778 SendClientMessage(playerid, -1, "You didn't have any vehicles.");
779 }
780 return 1;
781}
782
783CountPlayerVehicles(playerid)
784{
785 new count;
786
787 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
788 {
789 if(PlayerInfo[playerid][VehicleSlot][i] != -1) count++;
790 }
791
792 return count;
793}