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