· 6 years ago · Jul 09, 2019, 01: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 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
161LoadDynamicVehicles()
162{
163 mysql_query(g_SQL, "SELECT * FROM privcars");
164
165 new rows = cache_num_rows();
166
167 printf("Number of player vehicles: %d", rows);
168
169 if(rows > 0)
170 {
171 for (new i = 0; i < rows; i++)
172 {
173 new slot;
174
175 cache_get_value_int(i, "vehID", slot);
176 cache_get_value_name(i, "vehOwner", vInfo[slot][vehOwner], .max_len = MAX_PLAYER_NAME);
177 cache_get_value_name_int(i, "vehModel", vInfo[slot][vehModel]);
178 cache_get_value_name(i, "vehName", vInfo[slot][vehName], 25);
179 cache_get_value_name_int(i, "vehColorOne", vInfo[slot][vehColorOne]);
180 cache_get_value_name_int(i, "vehColorTwo", vInfo[slot][vehColorTwo]);
181 cache_get_value_name_float(i, "vehX", vInfo[slot][vehX]);
182 cache_get_value_name_float(i, "vehY", vInfo[slot][vehY]);
183 cache_get_value_name_float(i, "vehZ", vInfo[slot][vehZ]);
184 cache_get_value_name_float(i, "vehA", vInfo[slot][vehA]);
185
186 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);
187 vInfo[slot][DB_ID] = slot;
188
189 new string[200];
190 format(string, sizeof(string), "Pojazd UID: %d\nWlasciciel: %s\nNazwa: %s", vInfo[slot][DB_ID], vInfo[slot][vehOwner], vInfo[slot][vehName]);
191 vInfo[slot][vehLabel] = CreateDynamic3DTextLabel(string, -1, vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], 10.0, INVALID_PLAYER_ID, vInfo[slot][vID]);
192
193 Iter_Add(Vehicles, slot);
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(!strcmp(vInfo[i][vehOwner], "-") || strcmp(vInfo[i][vehOwner], "-"))
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 for(new i = 0; i < MAX_PLAYERS; i++)
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
280 return 1;
281}
282
283public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
284{
285 new vid;
286 if((vid = GetDynamicVehicleID(vehicleid)) != -1)
287 {
288 if(!strcmp(vInfo[vid][vehOwner], GetName(playerid)))
289 {
290 SendClientMessage(playerid, -1, "This vehicle belongs to you!");
291 }
292 else
293 {
294 SendClientMessage(playerid, -1, "This is not one of your vehicles!");
295 ClearAnimations(playerid);
296 return 1;
297 }
298 }
299 else
300 {
301 SendClientMessage(playerid, -1, "Not a scripted vehicle!");
302 }
303
304 return 1;
305}
306
307forward OnPlayerDataLoaded(playerid, race_check);
308public OnPlayerDataLoaded(playerid, race_check)
309{
310 if(race_check != MySQLRaceCheck[playerid]) return Kick(playerid);
311
312 new string[115];
313 if(cache_num_rows() > 0)
314 {
315 cache_get_value(0, "Password", PlayerInfo[playerid][Password], 129);
316
317 PlayerInfo[playerid][Cache_ID] = cache_save();
318
319 format(string, sizeof(string), "To konto (%s) jest zarejestrowane. Zaloguj się, podając swoje hasło w poniższym polu:", PlayerInfo[playerid][Nick]);
320 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", string, "Zaloguj", "Wyjdź");
321 }
322 else
323 {
324 format(string, sizeof(string), "Witamy %s, możesz zarejestrować się, wpisując swoje hasło w polu poniżej:", PlayerInfo[playerid][Nick]);
325 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", string, "Zarejestruj", "Wyjdź");
326 }
327 return 1;
328}
329
330forward OnPlayerRegister(playerid);
331public OnPlayerRegister(playerid)
332{
333 PlayerInfo[playerid][ID] = cache_insert_id();
334
335 GivePlayerMoney(playerid, 500000);
336
337 Zalogowany[playerid] = 1;
338 return 1;
339}
340
341forward OnPlayerUpdateEx(playerid);
342public OnPlayerUpdateEx(playerid)
343{
344 if(IsPlayerConnected(playerid))
345 {
346 if(Zalogowany[playerid])
347 {
348 new query[650];
349
350 PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
351
352 mysql_format(g_SQL, query, sizeof(query), "UPDATE `accounts` SET `Money` = %d WHERE `ID` = %d LIMIT 1", PlayerInfo[playerid][Money], PlayerInfo[playerid][ID]);
353 mysql_tquery(g_SQL, query);
354 }
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[100];
382 mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM privcars WHERE vehOwner = '%i'", 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", "Złe hasło!\nW polu poniżej wpisz swoje hasło:", "Zaloguj", "Wyjdź");
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 hasło musi mieć od 6 do 64 znaków!\nW polu poniżej wpisz swoje hasło:", "Zarejestruj", "Wyjdź");
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 każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
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óć");
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óć");
456 pojazdid[playerid] = 549;
457 CenaPojazdu[playerid] = 40000;
458 }
459 }
460 }
461 if(!response)
462 {
463 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
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", "Wyjdź");
472 }
473 if(!response)
474 {
475 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
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", "Wyjdź");
486 }
487 if(!response)
488 {
489 ShowPlayerDialog(playerid, 457, DIALOG_STYLE_LIST, "Na każdą kieszeń", "Clover 45tys\nTampa 40tys", "Wybierz", "Wróć");
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", "Wyjdź");
504 }
505 case 1:
506 {
507 KolorPierwszy[playerid] = 1;
508 ShowPlayerDialog(playerid, 32, DIALOG_STYLE_LIST, "Wybierz Kolor 2", "Czarny\nBialy", "Wybierz", "Wyjdź");
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 //
543 case 9848:
544 {
545 if(response)
546 {
547 new count = 0;
548 for(new i = 0; i < MAX_VEHICLES; i++)
549 {
550 if(!vInfo[i][DB_ID]) continue;
551
552 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
553 {
554 if(count == listitem)
555 {
556 PlayerInfo[playerid][VehicleSlot] = i;
557 format(message, sizeof(message), "%s - %d", VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
558 break;
559 }
560 else
561 {
562 count++;
563 }
564 }
565 }
566 }
567 }
568
569 default: return 0;
570 }
571
572 return 1;
573}
574
575stock KupowaniePojazdu(playerid, model, kolor1, kolor2, cena)
576{
577 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
578
579 new losuj = random(sizeof(LosowyParking));
580 new komunikat[256];
581
582 if(GetPlayerMoney(playerid) >= cena)
583 {
584 if(model >= 400 && model <= 611)
585 {
586 if(PlayerInfo[playerid][VehicleSlot] == MAX_VEHICLE_SLOTS) return SendClientMessage(playerid, -1, "Nie masz wolnych slotów.");
587
588 new vtemp;
589 vtemp = Car_Create(model, playerid, LosowyParking[losuj][0], LosowyParking[losuj][1], LosowyParking[losuj][2], LosowyParking[losuj][3], kolor1, kolor2);
590
591 format(komunikat, sizeof(komunikat), "Kupiłeś %s za %d$. Komendy auta znajdziesz w /pp. Gratulujemy zakupu!", GetVehicleName(model), cena);
592 SendClientMessage(playerid, -1, komunikat);
593
594 GivePlayerMoney(playerid, -cena);
595
596 format(komunikat, sizeof(komunikat), "%s kupil pojazd %s za %d$. UID %d", GetName(playerid), GetVehicleName(model), cena, vtemp);
597 SendClientMessageToAll(-1, komunikat);
598
599 PlayerInfo[playerid][VehicleSlot]++;
600
601 PutPlayerInVehicle(playerid, vtemp, 0);
602 }
603 else
604 {
605 SendClientMessage(playerid, -1, "BŁĄD - zły model! Zgłoś okoliczności na forum.");
606 }
607 }
608 else
609 {
610 format(komunikat, sizeof(komunikat), "Nie stać Cię na zakup tego pojazdu. Kosztuje on %d$ a Ty posiadasz tylko %d$.", cena, GetPlayerMoney(playerid));
611 SendClientMessage(playerid, -1, komunikat);
612 }
613
614 return 1;
615}
616
617stock Car_Create(model, playerid, Float:x, Float:y, Float:z, Float:angle, color1, color2)
618{
619 new query[220], slot = Iter_Free(Vehicles); // Get a free slot from the vehicles array;
620
621 vInfo[slot][vehModel] = model;
622 vInfo[slot][vehColorOne] = color1;
623 vInfo[slot][vehColorTwo] = color2;
624 vInfo[slot][vehX] = x;
625 vInfo[slot][vehY] = y;
626 vInfo[slot][vehZ] = z;
627 vInfo[slot][vehA] = angle;
628
629 vInfo[slot][vID] = CreateVehicle(model, x, y, z, angle, color1, color2, -1);
630
631 format(vInfo[slot][vehName], 25, GetVehicleName(model));
632 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(playerid));
633
634 //VehicleUID[vInfo[slot][vID]] = index;
635
636 mysql_format(g_SQL, query, sizeof(query),
637 "INSERT INTO `privcars` (vehModel, vehName, vehOwner, vehColorOne, vehColorTwo, vehX, vehY, vehZ, vehA) VALUES (%d, '%e', '%e', %d, %d, %f, %f, %f, %f)",
638 vInfo[slot][vehModel], vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX],
639 vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA]);
640 mysql_tquery(g_SQL, query, "GetVehicleDatabaseID", "i", slot);
641
642 return vInfo[slot][vID];
643}
644
645forward GetVehicleDatabaseID(slot);
646public GetVehicleDatabaseID(slot) // Here we get the database id to store for later use (saving vehicles)
647{
648 SaveVehicle(slot);
649 return vInfo[slot][DB_ID] = cache_insert_id();
650}
651
652SaveVehicle(slot)
653{
654 format(vInfo[slot][vehName], 25, GetVehicleName(vInfo[slot][vehModel]));
655 format(vInfo[slot][vehOwner], MAX_PLAYER_NAME, GetName(slot));
656
657 GetVehiclePos(vInfo[slot][vID], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ]);
658 GetVehicleZAngle(vInfo[slot][vID], vInfo[slot][vehA]);
659
660 new query[500];
661 mysql_format(g_SQL, query, sizeof(query), "UPDATE `privcars` SET `vehName` = '%e', `vehOwner` = '%e', `vehModel` = %i, `vehColorOne` = %i, `vehColorTwo` = %i,\
662 `vehX` = %f, `vehY` = %f, `vehZ` = %f, `vehA` = %f WHERE `vehID` = %d", vInfo[slot][vehName], vInfo[slot][vehOwner], vInfo[slot][vehModel],
663 vInfo[slot][vehColorOne], vInfo[slot][vehColorTwo], vInfo[slot][vehX], vInfo[slot][vehY], vInfo[slot][vehZ], vInfo[slot][vehA], vInfo[slot][DB_ID]);
664 mysql_tquery(g_SQL, query);
665
666 SendClientMessageToAll(-1, "Zapisano!");
667 return 1;
668}
669
670AssignPlayerData(playerid)
671{
672 cache_get_value_int(0, "ID", PlayerInfo[playerid][ID]);
673 cache_get_value_int(0, "Money", PlayerInfo[playerid][Money]);
674 return 1;
675}
676
677SetupPlayerTable()
678{
679 new query[1000];
680 strcat(query, "CREATE TABLE IF NOT EXISTS `accounts` (");
681 strcat(query, "`ID` INT(11) NOT NULL AUTO_INCREMENT,");
682 strcat(query, "`Nick` VARCHAR(24) NOT NULL,");
683 strcat(query, "`Password` CHAR(129) NOT NULL,");
684 strcat(query, "`Money` INT NOT NULL DEFAULT '0',");
685 strcat(query, "PRIMARY KEY (`ID`), UNIQUE KEY `Nick` (`Nick`))");
686 mysql_tquery(g_SQL, query);
687 return 1;
688}
689
690SetupPrivCarTable()
691{
692 mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `privcars` (\
693 `vehID` int(11) NOT NULL AUTO_INCREMENT,\
694 `vehModel` int(11) NOT NULL,\
695 `vehName` varchar(25) NOT NULL,\
696 `vehOwner` varchar(24) NOT NULL default '-',\
697 `vehColorOne` int(11) NOT NULL,\
698 `vehColorTwo` int(11) NOT NULL,\
699 `vehX` float NOT NULL,\
700 `vehY` float NOT NULL,\
701 `vehZ` float NOT NULL,\
702 `vehA` float NOT NULL,\
703 PRIMARY KEY (`vehID`))");
704 return 1;
705}
706
707ZerujZmienne(playerid)
708{
709 Zalogowany[playerid] = 0;
710
711 PlayerInfo[playerid][Money] = 0;
712
713 return 1;
714}
715
716stock GetName(playerid)
717{
718 new pName[MAX_PLAYER_NAME];
719 GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
720 return pName;
721}
722
723stock GetNick(playerid)
724{
725 new nick_[MAX_PLAYER_NAME];
726 GetPlayerName(playerid, nick_, sizeof(nick_));
727 return nick_;
728}
729
730GetVehicleName(modelid)
731{
732 new string[25];
733 format(string, sizeof(string), "%s", VehicleNames[modelid - 400]);
734 return string;
735}
736
737CMD:kuppojazd(playerid)
738{
739 if(IsPlayerInRangeOfPoint(playerid, 10.0, 2132.0371, -1149.7332, 24.2372))
740 {
741 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "Wyjdź z pojazdu.");
742 ShowPlayerDialog(playerid, 440, DIALOG_STYLE_LIST, "Wybierz kategorię kupowanego pojazdu", "Na każdą kieszeń", "Wybierz", "Wyjdź");
743 }
744 else
745 {
746 SendClientMessage(playerid, -1, "Nie jesteś przy salonie aut.");
747 }
748 return 1;
749}
750
751CMD:myv(playerid, params[])
752{
753 new bool:found = false, msg[256];
754
755 for(new i = 0; i < MAX_VEHICLES; i++)
756 {
757 if(!vInfo[i][DB_ID]) continue;
758
759 if(!strcmp(vInfo[i][vehOwner], GetName(playerid)))
760 {
761 found = true;
762 format(msg, sizeof(msg), "%s%s ID : %d\n", msg, VehicleNames[vInfo[i][vehModel] - 400], vInfo[i][vID]);
763 }
764 }
765 if(found)
766 {
767 ShowPlayerDialog(playerid, 9848, DIALOG_STYLE_LIST, "My Vehicles", msg, "Choose", "Cancel");
768 }
769 else
770 {
771 SendClientMessage(playerid, -1, "You didn't have any vehicles.");
772 }
773 return 1;
774}