· 6 years ago · Jul 08, 2019, 10:34 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_CAR_SLOT 1
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 MaPojazd[MAX_CAR_SLOT]
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 mysql_tquery(g_SQL, "SELECT * FROM `privcars`", "LoadDynamicVehicles");
153
154 DisableInteriorEnterExits();
155 EnableStuntBonusForAll(0);
156
157 AddPlayerClass(29, pos_salon, 0.0, -1, -1, -1, -1, -1, -1);
158 return 1;
159}
160
161forward LoadDynamicVehicles();
162public LoadDynamicVehicles()
163{
164 new rows = cache_num_rows(), string[75];
165
166 if(rows > 0)
167 {
168 for (new i = 0; i < rows; i++)
169 {
170 cache_get_value_name(i, "vehOwner", vInfo[i][vehOwner], .max_len = MAX_PLAYER_NAME);
171 cache_get_value_name_int(i, "vehModel", vInfo[i][vehModel]);
172 cache_get_value_name(i, "vehName", vInfo[i][vehName], 25);
173 cache_get_value_name_int(i, "vehColorOne", vInfo[i][vehColorOne]);
174 cache_get_value_name_int(i, "vehColorTwo", vInfo[i][vehColorTwo]);
175 cache_get_value_name_float(i, "vehX", vInfo[i][vehX]);
176 cache_get_value_name_float(i, "vehY", vInfo[i][vehY]);
177 cache_get_value_name_float(i, "vehZ", vInfo[i][vehZ]);
178 cache_get_value_name_float(i, "vehA", vInfo[i][vehA]);
179
180 vInfo[i][vID] = CreateVehicle(vInfo[i][vehModel], vInfo[i][vehX], vInfo[i][vehY], vInfo[i][vehZ], vInfo[i][vehA], vInfo[i][vehColorOne], vInfo[i][vehColorTwo], -1);
181
182 cache_get_value_name_int(i, "vehID", vInfo[i][DB_ID]);
183
184 SetVehicleToRespawn(vInfo[i][vID]);
185
186 format(string, sizeof(string), "Pojazd UID: %d\nWłaściciel: %s\nNazwa: %s", vInfo[i][DB_ID], vInfo[i][vehOwner], vInfo[i][vehName]);
187 vInfo[i][vehLabel] = CreateDynamic3DTextLabel(string, -1, vInfo[i][vehX], vInfo[i][vehY], vInfo[i][vehZ], 10.0, INVALID_PLAYER_ID, vInfo[i][vID]);
188
189 Iter_Add(Vehicles, i);
190 }
191 }
192
193 return 1;
194}
195
196forward LoadPlayerVehicles(playerid);
197public LoadPlayerVehicles(playerid)
198{
199 new results = cache_num_rows();
200 new string[100];
201 new id;
202
203 if(results)
204 {
205 for(new i = 0; i < results; i++)
206 {
207 cache_get_value_name(i, "vehOwner", vInfo[id][vehOwner], .max_len = MAX_PLAYER_NAME);
208 cache_get_value_name_int(i, "vehModel", vInfo[id][vehModel]);
209 cache_get_value_name(i, "vehName", vInfo[id][vehName], 25);
210 cache_get_value_name_int(i, "vehColorOne", vInfo[id][vehColorOne]);
211 cache_get_value_name_int(i, "vehColorTwo", vInfo[id][vehColorTwo]);
212 cache_get_value_name_float(i, "vehX", vInfo[id][vehX]);
213 cache_get_value_name_float(i, "vehY", vInfo[id][vehY]);
214 cache_get_value_name_float(i, "vehZ", vInfo[id][vehZ]);
215 cache_get_value_name_float(i, "vehA", vInfo[id][vehA]);
216
217 cache_get_value_name_int(i, "DB_ID", vInfo[id][DB_ID]);
218
219 format(vInfo[id][vehName], 25, GetVehicleName(vInfo[id][vehModel]));
220 format(vInfo[id][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
221
222 format(string, sizeof(string), "Pojazd UID: %d\nWłaściciel: %s\nNazwa: %s", vInfo[id][DB_ID], vInfo[id][vehOwner], vInfo[id][vehName]);
223 vInfo[id][vehLabel] = CreateDynamic3DTextLabel(string, -1, vInfo[id][vehX], vInfo[id][vehY], vInfo[id][vehZ], 10.0, INVALID_PLAYER_ID, vInfo[id][vID]);
224 }
225 printf("\nZaładowano prywatny pojazd: %d dla gracza: %s\n", results, GetName(playerid));
226 }
227 return 1;
228}
229
230GetDynamicVehicleID(vehicleid)
231{
232 foreach(new i : Vehicles)
233 {
234 if(vehicleid == vInfo[i][vID]) return i;
235 }
236 return -1;
237}
238
239public OnGameModeExit()
240{
241 foreach(new i : Vehicles)
242 {
243 if(!strcmp(vInfo[i][vehOwner], "-") || strcmp(vInfo[i][vehOwner], "-"))
244 {
245 SaveVehicle(i);
246 DestroyVehicle(vInfo[i][vID]);
247 DestroyDynamic3DTextLabel(vInfo[i][vehLabel]);
248 }
249 }
250
251 mysql_close(g_SQL);
252 return 1;
253}
254
255public OnPlayerConnect(playerid)
256{
257 TogglePlayerSpectating(playerid, 1);
258
259 MySQLRaceCheck[playerid]++;
260
261 static const empty_player[pInfo];
262 PlayerInfo[playerid] = empty_player;
263
264 ZerujZmienne(playerid);
265
266 GetPlayerName(playerid, PlayerInfo[playerid][Nick], MAX_PLAYER_NAME);
267
268 new query[103];
269 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Nick` = '%s' LIMIT 1", PlayerInfo[playerid][Nick]);
270 mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, MySQLRaceCheck[playerid]);
271
272 return 1;
273}
274
275public OnPlayerDisconnect(playerid, reason)
276{
277 OnPlayerUpdateEx(playerid);
278
279 for(new i = 0; i < MAX_PLAYERS; i++)
280 {
281 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
282 {
283 SaveVehicle(i);
284 //DestroyVehicle(vInfo[i][vID]); //delete
285 print("Zapisano veh!");
286 }
287 }
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, `MaPojazd` = %d WHERE `ID` = %d LIMIT 1", PlayerInfo[playerid][Money], PlayerInfo[playerid][MaPojazd],
362 PlayerInfo[playerid][ID]);
363 mysql_tquery(g_SQL, query);
364 }
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 Zalogowany[playerid] = 1;
392
393 GivePlayerMoney(playerid, 500000);
394
395 SetSpawnInfo(playerid, 0, 29, pos_salon, 0.0, -1, -1, -1, -1, -1, -1);
396 SpawnPlayer(playerid);
397 }
398 else
399 {
400 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", "Złe hasło!\nW polu poniżej wpisz swoje hasło:", "Zaloguj", "Wyjdź");
401 }
402 }
403 if(!response)
404 {
405 Kick(playerid);
406 }
407 }
408 case DIALOG_REGISTER:
409 {
410 if(response)
411 {
412 if(strlen(inputtext) >= 6 && strlen(inputtext) <= 64)
413 {
414 new HashPass[129];
415 WP_Hash(HashPass, sizeof(HashPass), inputtext);
416
417 new query[300];
418 mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `accounts` (`Nick`, `Password`) VALUES ('%s', '%s')", PlayerInfo[playerid][Nick], HashPass);
419 mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
420
421 TogglePlayerSpectating(playerid, 0);
422 }
423 else
424 {
425 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ź");
426 }
427 }
428 if(!response)
429 {
430 Kick(playerid);
431 }
432 }
433
434 case 440:
435 {
436 if(response)
437 {
438 switch(listitem)
439 {
440 case 0:
441 {
442 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
443 }
444 }
445 }
446 }
447 case 457:
448 {
449 if(response)
450 {
451 switch(listitem)
452 {
453 case 0:
454 {
455 ShowPlayerDialog(playerid, 4700, DIALOG_STYLE_MSGBOX, "Kupowanie Clovera", "Clover\n\nCena: 45.000$", "Kup!", "Wróć");
456 pojazdid[playerid] = 542;
457 CenaPojazdu[playerid] = 45000;
458 }
459 case 1:
460 {
461 ShowPlayerDialog(playerid, 4701, DIALOG_STYLE_MSGBOX, "Kupowanie Tampy", "Tampa\n\nCena: 40.000$", "Kup!", "Wróć");
462 pojazdid[playerid] = 549;
463 CenaPojazdu[playerid] = 40000;
464 }
465 }
466 }
467 if(!response)
468 {
469 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
470 }
471 }
472 case 4700:
473 {
474 if(response)
475 {
476 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
477 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
478 }
479 if(!response)
480 {
481 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
482 pojazdid[playerid] = 0;
483 CenaPojazdu[playerid] = 0;
484 }
485 }
486 case 4701:
487 {
488 if(response)
489 {
490 SendClientMessage(playerid, -1, "Wybierz kolor wybranego wozu");
491 ShowPlayerDialog(playerid, 31, DIALOG_STYLE_LIST, "Wybierz Kolor 1", "Czarny\nBialy", "Wybierz", "Wyjdź");
492 }
493 if(!response)
494 {
495 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
496 pojazdid[playerid] = 0;
497 CenaPojazdu[playerid] = 0;
498 }
499 }
500 case 31:
501 {
502 if(response)
503 {
504 switch(listitem)
505 {
506 case 0:
507 {
508 KolorPierwszy[playerid] = 0;
509 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
510 }
511 case 1:
512 {
513 KolorPierwszy[playerid] = 1;
514 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
515 }
516 }
517 }
518 if(!response)
519 {
520 pojazdid[playerid] = 0;
521 CenaPojazdu[playerid] = 0;
522 }
523 }
524 case 32:
525 {
526 if(response)
527 {
528 switch(listitem)
529 {
530 case 0:
531 {
532 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 0, CenaPojazdu[playerid]);
533 }
534 case 1:
535 {
536 KupowaniePojazdu(playerid, pojazdid[playerid], KolorPierwszy[playerid], 1, CenaPojazdu[playerid]);
537 }
538 }
539 }
540 if(!response)
541 {
542 pojazdid[playerid] = 0;
543 CenaPojazdu[playerid] = 0;
544 KolorPierwszy[playerid] = 0;
545 }
546 }
547
548 //
549 case 9848:
550 {
551 if(response)
552 {
553 new count = 0;
554 for(new i = 0; i < MAX_CAR_SLOT; i++)
555 {
556 if(!vInfo[i][DB_ID]) continue;
557
558 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
559 {
560 if(count == listitem)
561 {
562 PlayerInfo[playerid][MaPojazd] = i;
563 format(message, sizeof(message), "%s - %d", VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
564 break;
565 }
566 else
567 {
568 count++;
569 }
570 }
571 }
572 }
573 }
574
575 default: return 0;
576 }
577
578 return 1;
579}
580
581stock KupowaniePojazdu(playerid, model, kolor1, kolor2, cena)
582{
583 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
584
585 new losuj = random(sizeof(LosowyParking));
586 new komunikat[256];
587
588 if(GetPlayerMoney(playerid) >= cena)
589 {
590 if(model >= 400 && model <= 611)
591 {
592 if(PlayerInfo[playerid][MaPojazd] == 1) return SendClientMessage(playerid, -1, "Nie możesz kupić pojazdu ani mieć 2 pojazdy!");
593
594 new vtemp;
595 vtemp = Car_Create(model, playerid, LosowyParking[losuj][0], LosowyParking[losuj][1], LosowyParking[losuj][2], LosowyParking[losuj][3], kolor1, kolor2);
596
597 format(komunikat, sizeof(komunikat), "Kupiłeś %s za %d$. Komendy auta znajdziesz w /pp. Gratulujemy zakupu!", GetVehicleName(model), cena);
598 SendClientMessage(playerid, -1, komunikat);
599
600 GivePlayerMoney(playerid, -cena);
601
602 format(komunikat, sizeof(komunikat), "%s kupil pojazd %s za %d$. UID %d", GetName(playerid), GetVehicleName(model), cena, vtemp);
603 SendClientMessageToAll(-1, komunikat);
604
605 PlayerInfo[playerid][MaPojazd] = 1;
606
607 PutPlayerInVehicle(playerid, vtemp, 0);
608 }
609 else
610 {
611 SendClientMessage(playerid, -1, "BŁĄD - zły model! Zgłoś okoliczności na forum.");
612 }
613 }
614 else
615 {
616 format(komunikat, sizeof(komunikat), "Nie stać Cię na zakup tego pojazdu. Kosztuje on %d$ a Ty posiadasz tylko %d$.", cena, GetPlayerMoney(playerid));
617 SendClientMessage(playerid, -1, komunikat);
618 }
619
620 return 1;
621}
622
623stock Car_Create(model, playerid, Float:x, Float:y, Float:z, Float:angle, color1, color2)
624{
625 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array;
626
627 vInfo[slot][vehModel] = model;
628 vInfo[slot][vehColorOne] = color1;
629 vInfo[slot][vehColorTwo] = color2;
630 vInfo[slot][vehX] = x;
631 vInfo[slot][vehY] = y;
632 vInfo[slot][vehZ] = z;
633 vInfo[slot][vehA] = angle;
634
635 vInfo[slot][vID] = CreateVehicle(model, x, y, z, angle, color1, color2, -1);
636
637 format(vInfo[slot][vehName], 25, GetVehicleName(model));
638 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
639
640 //VehicleUID[vInfo[slot][vID]] = index;
641
642 mysql_format(g_SQL, query, sizeof(query),
643 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
644 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
645 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
646 mysql_tquery(g_SQL, query, "GetVehicleDatabaseID", "i", slot);
647
648 return vInfo[slot][vID];
649}
650
651forward GetVehicleDatabaseID(slot);
652public GetVehicleDatabaseID(slot) // Here we get the database id to store for later use (saving vehicles)
653{
654 SaveVehicle(slot);
655 return vInfo[slot][DB_ID] = cache_insert_id();
656}
657
658SaveVehicle(slot)
659{
660 format(vInfo[slot][vehName], 25, GetVehicleName(vInfo[slot][vehModel]));
661 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(slot));
662
663 GetVehiclePos(vInfo[slot][vID], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ]);
664 GetVehicleZAngle(vInfo[slot][vID], vInfo[slot][vehA]);
665
666 new query[500];
667 mysql_format(g_SQL, query, sizeof(query), "UPDATE `privcars` SET `vehName` = '%e', `vehOwner` = '%e', `vehModel` = %i, `vehColorOne` = %i, `vehColorTwo` = %i,\
668 `vehX` = %f, `vehY` = %f, `vehZ` = %f, `vehA` = %f WHERE `vehID` = %d", vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehModel],
669 vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA], vInfo[slot][DB_ID]);
670 mysql_tquery(g_SQL, query);
671
672 SendClientMessageToAll(-1, "Zapisano!");
673 return 1;
674}
675
676AssignPlayerData(playerid)
677{
678 cache_get_value_int(0, "ID", PlayerInfo[playerid][ID]);
679 cache_get_value_int(0, "Money", PlayerInfo[playerid][Money]);
680 cache_get_value_int(0, "MaPojazd", PlayerInfo[playerid][MaPojazd]);
681 return 1;
682}
683
684SetupPlayerTable()
685{
686 new query[1000];
687 strcat(query, "CREATE TABLE IF NOT EXISTS `accounts` (");
688 strcat(query, "`ID` INT(11) NOT NULL AUTO_INCREMENT,");
689 strcat(query, "`Nick` VARCHAR(24) NOT NULL,");
690 strcat(query, "`Password` CHAR(129) NOT NULL,");
691 strcat(query, "`Money` INT NOT NULL DEFAULT '0',");
692 strcat(query, "`MaPojazd` INT NOT NULL DEFAULT '0',");
693 strcat(query, "PRIMARY KEY (`ID`), UNIQUE KEY `Nick` (`Nick`))");
694 mysql_tquery(g_SQL, query);
695 return 1;
696}
697
698SetupPrivCarTable()
699{
700 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `privcars` (\
701 `vehID` int(11) NOT NULL AUTO_INCREMENT,\
702 `vehModel` int(11) NOT NULL,\
703 `vehName` varchar(25) NOT NULL,\
704 `vehOwner` varchar(24) NOT NULL default '-',\
705 `vehColorOne` int(11) NOT NULL,\
706 `vehColorTwo` int(11) NOT NULL,\
707 `vehX` float NOT NULL,\
708 `vehY` float NOT NULL,\
709 `vehZ` float NOT NULL,\
710 `vehA` float NOT NULL,\
711 PRIMARY KEY (`vehID`))");
712 return 1;
713}
714
715ZerujZmienne(playerid)
716{
717 Zalogowany[playerid] = 0;
718
719 PlayerInfo[playerid][Money] = 0;
720 PlayerInfo[playerid][MaPojazd] = 0;
721 return 1;
722}
723
724stock GetName(playerid)
725{
726 new pName[MAX_PLAYER_NAME];
727 GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
728 return pName;
729}
730
731stock GetNick(playerid)
732{
733 new nick_[MAX_PLAYER_NAME];
734 GetPlayerName(playerid, nick_, sizeof(nick_));
735 return nick_;
736}
737
738GetVehicleName(modelid)
739{
740 new string[25];
741 format(string, sizeof(string), "%s", VehicleNames[modelid - 400]);
742 return string;
743}
744
745CMD:kuppojazd(playerid)
746{
747 if(IsPlayerInRangeOfPoint(playerid, 10.0, 2132.0371, -1149.7332, 24.2372))
748 {
749 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
750 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
751 }
752 else
753 {
754 SendClientMessage(playerid, -1, "Nie jesteś przy salonie aut.");
755 }
756 return 1;
757}
758
759CMD:myv(playerid, params[])
760{
761 new bool:found = false, msg[256];
762
763 for(new i = 0; i < MAX_VEHICLES; i++)
764 {
765 if(!vInfo[i][DB_ID]) continue;
766
767 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
768 {
769 found = true;
770 format(msg, sizeof(msg), "%s%s ID : %d\n", msg, VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
771 }
772 }
773 if(found)
774 {
775 ShowPlayerDialog(playerid, 9848, DIALOG_STYLE_LIST, "My Vehicles", msg, "Choose", "Cancel");
776 }
777 else
778 {
779 SendClientMessage(playerid, -1, "You didn't have any vehicles.");
780 }
781 return 1;
782}