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