· 6 years ago · Jul 10, 2019, 08:48 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 foreach(new i : Vehicles)
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 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
282 {
283 PlayerInfo[playerid][VehicleSlot][i] = -1;
284 }
285
286 return 1;
287}
288
289public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
290{
291 new vid;
292 if((vid = GetDynamicVehicleID(vehicleid)) != -1)
293 {
294 if(!strcmp(vInfo[vid][vehOwner], GetName(playerid)))
295 {
296 SendClientMessage(playerid, -1, "This vehicle belongs to you!");
297 }
298 else
299 {
300 SendClientMessage(playerid, -1, "This is not one of your vehicles!");
301 ClearAnimations(playerid);
302 return 1;
303 }
304 }
305 else
306 {
307 SendClientMessage(playerid, -1, "Not a scripted vehicle!");
308 }
309
310 return 1;
311}
312
313forward OnPlayerDataLoaded(playerid, race_check);
314public OnPlayerDataLoaded(playerid, race_check)
315{
316 if(race_check != MySQLRaceCheck[playerid]) return Kick(playerid);
317
318 new string[115];
319 if(cache_num_rows() > 0)
320 {
321 cache_get_value(0, "Password", PlayerInfo[playerid][Password], 129);
322
323 PlayerInfo[playerid][Cache_ID] = cache_save();
324
325 format(string, sizeof(string), "To konto (%s) jest zarejestrowane. Zaloguj się, podając swoje hasło w poniższym polu:", PlayerInfo[playerid][Nick]);
326 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", string, "Zaloguj", "Wyjdź");
327 }
328 else
329 {
330 format(string, sizeof(string), "Witamy %s, możesz zarejestrować się, wpisując swoje hasło w polu poniżej:", PlayerInfo[playerid][Nick]);
331 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", string, "Zarejestruj", "Wyjdź");
332 }
333 return 1;
334}
335
336forward OnPlayerRegister(playerid);
337public OnPlayerRegister(playerid)
338{
339 PlayerInfo[playerid][ID] = cache_insert_id();
340
341 GivePlayerMoney(playerid, 500000);
342
343 Zalogowany[playerid] = 1;
344 return 1;
345}
346
347forward OnPlayerUpdateEx(playerid);
348public OnPlayerUpdateEx(playerid)
349{
350 if(IsPlayerConnected(playerid))
351 {
352 if(Zalogowany[playerid])
353 {
354 new query[650];
355
356 PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
357
358 mysql_format(g_SQL, query, sizeof(query), "UPDATE `accounts` SET `Money` = %d WHERE `ID` = %d LIMIT 1", PlayerInfo[playerid][Money], PlayerInfo[playerid][ID]);
359 mysql_tquery(g_SQL, query);
360 }
361 SendClientMessage(playerid, -1, "Zapisano acc!");
362 }
363 return 1;
364}
365
366public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
367{
368 switch(dialogid)
369 {
370 case DIALOG_LOGIN:
371 {
372 if(response)
373 {
374 new HashPass[129];
375 WP_Hash(HashPass, sizeof(HashPass), inputtext);
376
377 if(strcmp(HashPass, PlayerInfo[playerid][Password]) == 0)
378 {
379 cache_set_active(PlayerInfo[playerid][Cache_ID]);
380
381 AssignPlayerData(playerid);
382
383 cache_delete(PlayerInfo[playerid][Cache_ID]);
384 PlayerInfo[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
385
386 TogglePlayerSpectating(playerid, 0);
387
388 new query[100];
389 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM privcars WHERE vehOwner = '%i'", GetNick(playerid));
390 mysql_pquery(g_SQL, query, "LoadPlayerVehicles", "i", playerid);
391
392 Zalogowany[playerid] = 1;
393
394 GivePlayerMoney(playerid, 500000);
395
396 SetSpawnInfo(playerid, 0, 29, pos_salon, 0.0, -1, -1, -1, -1, -1, -1);
397 SpawnPlayer(playerid);
398 }
399 else
400 {
401 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", "Złe hasło!\nW polu poniżej wpisz swoje hasło:", "Zaloguj", "Wyjdź");
402 }
403 }
404 if(!response)
405 {
406 Kick(playerid);
407 }
408 }
409 case DIALOG_REGISTER:
410 {
411 if(response)
412 {
413 if(strlen(inputtext) >= 6 && strlen(inputtext) <= 64)
414 {
415 new HashPass[129];
416 WP_Hash(HashPass, sizeof(HashPass), inputtext);
417
418 new query[300];
419 mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `accounts` (`Nick`, `Password`) VALUES ('%s', '%s')", PlayerInfo[playerid][Nick], HashPass);
420 mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
421
422 TogglePlayerSpectating(playerid, 0);
423 }
424 else
425 {
426 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ź");
427 }
428 }
429 if(!response)
430 {
431 Kick(playerid);
432 }
433 }
434
435 case 440:
436 {
437 if(response)
438 {
439 switch(listitem)
440 {
441 case 0:
442 {
443 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
444 }
445 }
446 }
447 }
448 case 457:
449 {
450 if(response)
451 {
452 switch(listitem)
453 {
454 case 0:
455 {
456 ShowPlayerDialog(playerid, 4700, DIALOG_STYLE_MSGBOX, "Kupowanie Clovera", "Clover\n\nCena: 45.000$", "Kup!", "Wróć");
457 pojazdid[playerid] = 542;
458 CenaPojazdu[playerid] = 45000;
459 }
460 case 1:
461 {
462 ShowPlayerDialog(playerid, 4701, DIALOG_STYLE_MSGBOX, "Kupowanie Tampy", "Tampa\n\nCena: 40.000$", "Kup!", "Wróć");
463 pojazdid[playerid] = 549;
464 CenaPojazdu[playerid] = 40000;
465 }
466 }
467 }
468 if(!response)
469 {
470 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
471 }
472 }
473 case 4700:
474 {
475 if(response)
476 {
477 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
478 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
479 }
480 if(!response)
481 {
482 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
483 pojazdid[playerid] = 0;
484 CenaPojazdu[playerid] = 0;
485 }
486 }
487 case 4701:
488 {
489 if(response)
490 {
491 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
492 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
493 }
494 if(!response)
495 {
496 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
497 pojazdid[playerid] = 0;
498 CenaPojazdu[playerid] = 0;
499 }
500 }
501 case 31:
502 {
503 if(response)
504 {
505 switch(listitem)
506 {
507 case 0:
508 {
509 KolorPierwszy[playerid] = 0;
510 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
511 }
512 case 1:
513 {
514 KolorPierwszy[playerid] = 1;
515 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
516 }
517 }
518 }
519 if(!response)
520 {
521 pojazdid[playerid] = 0;
522 CenaPojazdu[playerid] = 0;
523 }
524 }
525 case 32:
526 {
527 if(response)
528 {
529 switch(listitem)
530 {
531 case 0:
532 {
533 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 0, CenaPojazdu[playerid]);
534 }
535 case 1:
536 {
537 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 1, CenaPojazdu[playerid]);
538 }
539 }
540 }
541 if(!response)
542 {
543 pojazdid[playerid] = 0;
544 CenaPojazdu[playerid] = 0;
545 KolorPierwszy[playerid] = 0;
546 }
547 }
548
549 //
550 case 9848:
551 {
552 if(response)
553 {
554 new count = 0;
555 for(new i = 0; i < MAX_VEHICLES; i++)
556 {
557 if(!vInfo[i][DB_ID]) continue;
558
559 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
560 {
561 if(count == listitem)
562 {
563 PlayerInfo[playerid][VehicleSlot] = i;
564 format(message, sizeof(message), "%s - %d", VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
565 break;
566 }
567 else
568 {
569 count++;
570 }
571 }
572 }
573 }
574 }
575
576 default: return 0;
577 }
578
579 return 1;
580}
581
582stock KupowaniePojazdu(playerid, model, color1, color2, cena)
583{
584 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdz z pojazdu.");
585
586 new losuj = random(sizeof(LosowyParking));
587 new komunikat[256];
588
589 if(GetPlayerMoney(playerid) >= cena)
590 {
591 if(model >= 400 && model <= 611)
592 {
593 if(CountPlayerVehicles(playerid) == MAX_VEHICLE_SLOTS) return SendClientMessage(playerid, -1, "Nie masz wolnych slotów.");
594
595 /* CarCreate section, we need the code here in order to access the free slot in vInfo, can't return two values in Car_Create*/
596
597 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array
598
599 if(slot == ITER_NONE) return SendClientMessage(playerid, -1, "Can't create vehicle.. no free slot found!");
600
601 vInfo[slot][vehModel] = model;
602 vInfo[slot][vehColorOne] = color1;
603 vInfo[slot][vehColorTwo] = color2;
604 vInfo[slot][vehX] = LosowyParking[losuj][0];
605 vInfo[slot][vehY] = LosowyParking[losuj][1];
606 vInfo[slot][vehZ] = LosowyParking[losuj][2];
607 vInfo[slot][vehA] = LosowyParking[losuj][3];
608
609 vInfo[slot][vID] = CreateVehicle(model, LosowyParking[losuj][0], LosowyParking[losuj][1], LosowyParking[losuj][2], LosowyParking[losuj][3], color1, color2, -1);
610
611 PutPlayerInVehicle(playerid, vInfo[slot][vID], 0);
612
613 format(vInfo[slot][vehName], 25, GetVehicleName(model));
614 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
615
616 mysql_format(g_SQL, query, sizeof(query),
617 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
618 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
619 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
620 mysql_query(g_SQL, query);
621
622 vInfo[slot][DB_ID] = cache_insert_id();
623
624 Iter_Add(Vehicles, slot);
625
626 new freeslot;
627 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
628 {
629 if(PlayerInfo[playerid][VehicleSlot][i] == -1)
630 {
631 freeslot = i;
632 break;
633 }
634 }
635 PlayerInfo[playerid][VehicleSlot][freeslot] = vInfo[slot][DB_ID];
636
637 format(komunikat, sizeof(komunikat), "Kupiles %s za %d$. Komendy auta znajdziesz w /pp. Gratulujemy zakupu!", GetVehicleName(model), cena);
638 SendClientMessage(playerid, -1, komunikat);
639
640 GivePlayerMoney(playerid, -cena);
641
642 format(komunikat, sizeof(komunikat), "%s kupil pojazd %s za %d$. UID %d", GetName(playerid), GetVehicleName(model), cena, slot);
643 SendClientMessageToAll(-1, komunikat);
644 }
645 else
646 {
647 SendClientMessage(playerid, -1, "BLAD - zly model! Zglos okolicznosci na forum.");
648 }
649 }
650 else
651 {
652 format(komunikat, sizeof(komunikat), "Nie stac Cie na zakup tego pojazdu. Kosztuje on %d$ a Ty posiadasz tylko %d$.", cena, GetPlayerMoney(playerid));
653 SendClientMessage(playerid, -1, komunikat);
654 }
655
656 return 1;
657}
658
659stock Car_Create(model, playerid, Float:x, Float:y, Float:z, Float:angle, color1, color2)
660{
661 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array;
662
663 vInfo[slot][vehModel] = model;
664 vInfo[slot][vehColorOne] = color1;
665 vInfo[slot][vehColorTwo] = color2;
666 vInfo[slot][vehX] = x;
667 vInfo[slot][vehY] = y;
668 vInfo[slot][vehZ] = z;
669 vInfo[slot][vehA] = angle;
670
671 vInfo[slot][vID] = CreateVehicle(model, x, y, z, angle, color1, color2, -1);
672
673 format(vInfo[slot][vehName], 25, GetVehicleName(model));
674 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
675
676 //VehicleUID[vInfo[slot][vID]] = index;
677
678 mysql_format(g_SQL, query, sizeof(query),
679 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
680 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
681 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
682 mysql_tquery(g_SQL, query, "GetVehicleDatabaseID", "i", slot);
683
684 return vInfo[slot][vID];
685}
686
687forward GetVehicleDatabaseID(slot);
688public GetVehicleDatabaseID(slot) // Here we get the database id to store for later use (saving vehicles)
689{
690 SaveVehicle(slot);
691 return vInfo[slot][DB_ID] = cache_insert_id();
692}
693
694SaveVehicle(slot)
695{
696 format(vInfo[slot][vehName], 25, GetVehicleName(vInfo[slot][vehModel]));
697 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(slot));
698
699 GetVehiclePos(vInfo[slot][vID], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ]);
700 GetVehicleZAngle(vInfo[slot][vID], vInfo[slot][vehA]);
701
702 new query[500];
703 mysql_format(g_SQL, query, sizeof(query), "UPDATE `privcars` SET `vehName` = '%e', `vehOwner` = '%e', `vehModel` = %i, `vehColorOne` = %i, `vehColorTwo` = %i,\
704 `vehX` = %f, `vehY` = %f, `vehZ` = %f, `vehA` = %f WHERE `vehID` = %d", vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehModel],
705 vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA], vInfo[slot][DB_ID]);
706 mysql_tquery(g_SQL, query);
707
708 SendClientMessageToAll(-1, "Zapisano!");
709 return 1;
710}
711
712AssignPlayerData(playerid)
713{
714 cache_get_value_int(0, "ID", PlayerInfo[playerid][ID]);
715 cache_get_value_int(0, "Money", PlayerInfo[playerid][Money]);
716 //cache_get_value_int(0, "VehSlot", PlayerInfo[playerid][VehicleSlot]);
717 return 1;
718}
719
720SetupPlayerTable()
721{
722 new query[1000];
723 strcat(query, "CREATE TABLE IF NOT EXISTS `accounts` (");
724 strcat(query, "`ID` INT(11) NOT NULL AUTO_INCREMENT,");
725 strcat(query, "`Nick` VARCHAR(24) NOT NULL,");
726 strcat(query, "`Password` CHAR(129) NOT NULL,");
727 strcat(query, "`Money` INT NOT NULL DEFAULT '0',");
728 //strcat(query, "`VehSlot` INT NOT NULL DEFAULT '0',");
729 strcat(query, "PRIMARY KEY (`ID`), UNIQUE KEY `Nick` (`Nick`))");
730 mysql_tquery(g_SQL, query);
731 return 1;
732}
733
734SetupPrivCarTable()
735{
736 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `privcars` (\
737 `vehID` int(11) NOT NULL AUTO_INCREMENT,\
738 `vehModel` int(11) NOT NULL,\
739 `vehName` varchar(25) NOT NULL,\
740 `vehOwner` varchar(24) NOT NULL default '-',\
741 `vehColorOne` int(11) NOT NULL,\
742 `vehColorTwo` int(11) NOT NULL,\
743 `vehX` float NOT NULL,\
744 `vehY` float NOT NULL,\
745 `vehZ` float NOT NULL,\
746 `vehA` float NOT NULL,\
747 PRIMARY KEY (`vehID`))");
748 return 1;
749}
750
751ZerujZmienne(playerid)
752{
753 Zalogowany[playerid] = 0;
754
755 PlayerInfo[playerid][Money] = 0;
756
757 PlayerInfo[playerid][VehicleSlot] = 0;
758
759 return 1;
760}
761
762stock GetName(playerid)
763{
764 new pName[MAX_PLAYER_NAME];
765 GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
766 return pName;
767}
768
769stock GetNick(playerid)
770{
771 new nick_[MAX_PLAYER_NAME];
772 GetPlayerName(playerid, nick_, sizeof(nick_));
773 return nick_;
774}
775
776GetVehicleName(modelid)
777{
778 new string[25];
779 format(string, sizeof(string), "%s", VehicleNames[modelid - 400]);
780 return string;
781}
782
783CMD:kuppojazd(playerid)
784{
785 if(IsPlayerInRangeOfPoint(playerid, 10.0, 2132.0371, -1149.7332, 24.2372))
786 {
787 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
788 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
789 }
790 else
791 {
792 SendClientMessage(playerid, -1, "Nie jesteś przy salonie aut.");
793 }
794 return 1;
795}
796
797CMD:myv(playerid, params[])
798{
799 new bool:found = false, msg[256];
800
801 for(new i = 0; i < MAX_VEHICLES; i++)
802 {
803 if(!vInfo[i][DB_ID]) continue;
804
805 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
806 {
807 found = true;
808 format(msg, sizeof(msg), "%s%s ID : %d\n", msg, VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
809 }
810 }
811 if(found)
812 {
813 ShowPlayerDialog(playerid, 9848, DIALOG_STYLE_LIST, "My Vehicles", msg, "Choose", "Cancel");
814 }
815 else
816 {
817 SendClientMessage(playerid, -1, "You didn't have any vehicles.");
818 }
819 return 1;
820}
821
822CountPlayerVehicles(playerid)
823{
824 new count;
825
826 for(new i = 0; i < MAX_VEHICLE_SLOTS; i++)
827 {
828 if(PlayerInfo[playerid][VehicleSlot][i] != -1) count++;
829 }
830
831 return count;
832}