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