· 6 years ago · Apr 19, 2019, 10:14 PM
1#include <a_samp>
2#include <a_mysql>
3#include <streamer>
4#include <zcmd>
5#include <mapandreas>
6#include <zones>
7main(){}
8
9native WP_Hash(buffer[], len, const str[]);
10//Forwardy
11forward bool:IsStrValid(const string[]);
12
13//Ustawienia
14#define MONEY_MONEY_START 6500
15#define PRESSED(%O) \
16//Dialogi
17#define REGISTER1_DIALOG 0
18#define LOGIN_DIALOG 1
19#define REGISTER2_DIALOG 2
20#define REGISTER3_DIALOG 3
21
22//Definicje
23#define SKRYPT_NAME "Najlepszy Polski Serwer"
24#define SKRYPT_VER "V1.0.0"
25#define INFO_STRING "{008080}[INFO]{C0C0C0}: "
26#define ERROR_STRING "{FF0000}[BÅÄ„D]{800000}: "
27
28#define MAX_ENTRACES 100
29
30#define GENDER_MALE 0
31#define GENDER_FEMALE 1
32
33 //textdrawy
34new Text:SkinSelector_Title;
35new Text:SkinSelector_Right;
36new Text:SkinSelector_Left;
37new Text:SkinSelector_Accept;
38
39//eNUMY
40enum DataPlayer
41{
42 bool:LoggedIn,
43 bool:ShowMouse,
44 bool:IsFreezed,
45 bool:FirstSpawn,
46 Cache:Cache_ID,
47 UID,
48 Password[129],
49 Age,
50 Lvl,
51 Gender,
52 IDSkin,
53 Money,
54 AdminLV,
55 Float:LastPos[4],
56 Linterior,
57 LVW,
58 Float:HP,
59 Float:Armour,
60
61 //Wybierałka
62 SelectedIDSkin
63};
64
65new entranceindex;
66enum EntranceData
67{
68 bool:e_freeze,
69 Float:e_posx,
70 Float:e_posy,
71 Float:e_posz,
72 Float:e_rotation,
73 e_interior,
74 e_vw,
75 e_conid
76};
77new Entrance[MAX_ENTRACES][EntranceData];
78
79
80new Player[MAX_PLAYERS][DataPlayer];
81new MySQL:SQL_ID;
82 //Zmienne Globalne
83new Skins_Male[][] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57, 58, 59, 60, 61, 62, 66, 67, 68, 70, 71, 72, 73, 74, 78, 79, 80, 81, 82, 83, 84, 86, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 132, 133, 134, 135, 136, 137, 142, 143, 144, 146, 147, 149, 153, 154, 155, 156, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 170, 171, 173, 174, 175, 176, 177, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 200, 202, 203, 204, 206, 208, 209, 210, 212, 213, 220, 221, 222, 223, 227, 228, 229, 230, 234, 235, 236, 239, 240, 241, 242, 247, 248, 249, 250, 252, 253, 254, 255, 258, 259, 260, 261, 262, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304, 305, 310, 311}; //Facety
84new Skins_Female[][] = {9, 10, 11, 12, 13, 31, 38, 39, 40, 41, 53, 54, 55, 56, 63, 64, 65,69,75, 76, 77, 85, 87, 88, 89, 90, 91, 92, 93, 129, 130, 131,138, 139, 140, 141, 145, 148, 150, 151, 152, 157, 169, 172, 178, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 201, 205, 207, 211, 214, 215, 216, 217, 218, 219, 224, 225, 226, 231, 232, 233, 237, 238, 243, 244, 245, 246, 251, 256, 257, 263, 298, 306, 307, 308, 309}; //Babsztyle
85
86public OnGameModeInit()
87{
88 UsePlayerPedAnims();
89
90 printf("Gamemode %s %s ® by Kreto Wystartował", SKRYPT_NAME, SKRYPT_VER);
91 AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
92 if(MySQL_Init())
93 {
94 //Wczytywanie
95 MySQL_SetUpTables();
96 CreateGlobalTD();
97
98 //Timer
99 SetTimer("SecondUpdate", 1000, true);
100
101 //Ustawienia
102 DisableInteriorEnterExits();
103 EnableStuntBonusForAll(false);
104 SetGameModeText("Najlepszy Polski Serwer. Zapraszamy");
105
106 //mapicon
107
108 CreateDynamicMapIcon(2324.3040, -1135.8479, 1051.3047, 37, 0, 0, 0, -1, 500, MAPICON_GLOBAL, -1, 0);
109
110 //Wejścia/Wyjścia
111 ConnectEntrances(
112 CreateEntrance("UrzÄ…d Miasta w Los Santos", 1219.2979, -1812.3729, 16.5938, 177.8039, 0, 0, -1, 62, false),
113 CreateEntrance("Urząd Miasta w Los Santos - Wyjście", 384.80864,173.804992,1008.382812, 90.0, 3, 1, -1, -1, false));
114
115 ConnectEntrances(
116 CreateEntrance("UrzÄ…d Miasta w San Fierro", -2765.3870, 375.6902, 6.3359, 269.3221, 0, 0, -1, 61, false),
117 CreateEntrance("Urząd Miasta w San Fierro - Wyjście", 384.80864,173.804992,1008.382812, 90.0, 3, 2, -1, -1, false));
118
119 ConnectEntrances(
120 CreateEntrance("UrzÄ…d Miasta w Las Venturas", 2633.6101, 1823.1554, 11.0161, 80.6707, 0, 0,-1, 58, false),
121 CreateEntrance("Urząd Miasta w Las Venturas - Wyjście", 384.80864,173.804992,1008.382812, 90.0, 3, 3, -1, -1, false));
122
123 printf("Gamemode %s %s ® by Kreto działa\n", SKRYPT_NAME, SKRYPT_VER);
124 }
125 else
126 {
127 print("Brak połączenia z bazą danych.");
128 }
129 return 1;
130}
131
132public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
133{
134 if(newkeys & KEY_SECONDARY_ATTACK)
135 {
136 if(!IsPlayerInAnyVehicle(playerid))
137 {
138 if(Player[playerid][IsFreezed] == false)
139 {
140 new p_vw = GetPlayerVirtualWorld(playerid);
141 new p_int = GetPlayerInterior(playerid);
142 for(new i; i < entranceindex; i++)
143 {
144 if(IsPlayerInRangeOfPoint(playerid, 1.0, Entrance[i][e_posx],Entrance[i][e_posy],Entrance[i][e_posz]) && Entrance[i][e_interior] == p_int && Entrance[i][e_vw] == p_vw)
145 {
146 new conid = Entrance[i][e_conid];
147 SetPlayerPos(playerid, Entrance[conid][e_posx],Entrance[conid][e_posy], Entrance[conid][e_posz]);
148 SetPlayerFacingAngle(playerid, Entrance[conid][e_rotation]);
149 SetPlayerInterior(playerid, Entrance[conid][e_interior]);
150 SetPlayerVirtualWorld(playerid, Entrance[conid][e_vw]);
151 SetCameraBehindPlayer(playerid);
152 if(Entrance[conid][e_freeze])
153 FreezePlayer(playerid, 3000, "Wczytywanie");
154 break;
155 }
156 }
157 }
158 }
159
160 }
161 return 1;
162}
163
164
165
166
167
168
169
170public OnGameModeExit()
171{
172 mysql_close(SQL_ID);
173 return 1;
174}
175
176public OnPlayerRequestSpawn(playerid)
177{
178
179 return 1;
180}
181
182public OnPlayerRequestClass(playerid, classid)
183{
184 SpawnPlayer(playerid);
185 return 1;
186}
187
188public OnPlayerConnect(playerid)
189{
190 ClearPlayerChat(playerid);
191 SetSpawnInfo(playerid, NO_TEAM, 0, 1248.2993,-1563.6338,12.6017, 186.4331, 0, 0, 0, 0, 0, 0);
192 return 1;
193}
194
195public OnPlayerDisconnect(playerid, reason)
196{
197 new query[258];
198 if(Player[playerid][LoggedIn])
199 {
200 SaveAccount(playerid);
201 mysql_format(SQL_ID, query, sizeof query, "UPDATE players_accounts SET lastonline = NOW() WHERE uid = %i", Player[playerid][UID]);
202 mysql_tquery(SQL_ID, query);
203 }
204 ResetPlayerData(playerid);
205 return 1;
206}
207
208public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
209{
210 switch(dialogid)
211 {
212 case LOGIN_DIALOG: //Login playersa
213 {
214 if(response)
215 {
216 if(strlen(inputtext) && IsStrValid(inputtext))
217 {
218 new buff[129], query[258];
219 WP_Hash(buff, 129, inputtext);
220 if(strcmp(Player[playerid][Password], buff, true) == 0)
221 {
222 // Hasło poprawne
223 AssignPlayerData(playerid); // odczyt z bazy danych
224
225 Player[playerid][LoggedIn] = true;
226 Player[playerid][FirstSpawn] = true;
227 ResetPlayerMoney(playerid);
228 GivePlayerMoney(playerid, Player[playerid][Money]);
229 SetPlayerScore(playerid, Player[playerid][Lvl]);
230 SetSpawnInfo(playerid, NO_TEAM, Player[playerid][IDSkin], 1248.2993,-1563.6338,12.6017, 186.4331, 0, 0, 0, 0, 0, 0);
231 SetPlayerInterior(playerid, 12);
232 TogglePlayerControllable(playerid, 1);
233 SpawnPlayer(playerid);
234 ClearPlayerChat(playerid);
235 SendClientMessage(playerid, -1, INFO_STRING"Logowanie udane. Życzymy pomyślnej gry !");
236 new ip[18];
237 GetPlayerIp(playerid, ip, 18);
238 mysql_format(SQL_ID, query, sizeof query, "UPDATE players_accounts SET lastip = '%s', lastonline = NOW() WHERE uid = %i", ip, Player[playerid][UID]);
239 mysql_tquery(SQL_ID, query);
240 }
241 else
242 {
243 // hasło błędne
244 ShowPlayerDialog(playerid, LOGIN_DIALOG, DIALOG_STYLE_PASSWORD, "Logowanie", "Znaleźliśmy rejestrację Twojego konta. \n\tPodaj {7EFD00}hasło aby zagrać.", "Logowanie", "Opuść Serwer");
245 SendClientMessage(playerid, -1, ERROR_STRING"Hasło nieprawidłowe. Spróbuj ponownie!");
246 }
247 //nic nie wpisane
248 }
249 else
250 {
251 ShowPlayerDialog(playerid, LOGIN_DIALOG, DIALOG_STYLE_PASSWORD, "Logowanie", "Znaleźliśmy rejestrację Twojego konta. \n\tPodaj {7EFD00}hasło aby zagrać.", "Logowanie", "Opuść Serwer");
252 SendClientMessage(playerid, -1, ERROR_STRING"Nie wprowadzono hasła! Spróbuj ponownie!");
253 }
254 }
255 else KickEX(playerid);
256 }
257 case REGISTER3_DIALOG: // Rejestracja wiek
258 {
259 if(response)
260 {
261 if(IsNumeric(inputtext) && strlen(inputtext) == 2 && strval(inputtext) >= 13 && strval(inputtext) <= 30 )
262 {
263 Player[playerid][Age] = strval(inputtext);
264 Player[playerid][Age] = strval(inputtext);
265 SetPlayerPos(playerid, 2324.3662, -1148.7382, 1050.7101);
266 SetPlayerInterior(playerid, 12);
267 SetPlayerFacingAngle(playerid, 359.6589);
268 InterpolateCameraPos(playerid, 2324.4150, -1138.6611, 1051.4922, 2324.3513, -1144.7060, 1050.7031, 5000, CAMERA_CUT);
269 InterpolateCameraLookAt(playerid, 2324.3662, -1148.7382, 1050.7101, 2324.3513, -1144.7360, 1050.7031, 5000, CAMERA_CUT);
270 Player[playerid][SelectedIDSkin] = 0;
271 new sskin = Player[playerid][SelectedIDSkin];
272 if(Player[playerid][Gender] == GENDER_MALE)
273 {
274 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
275 Player[playerid][IDSkin] = Skins_Male[sskin][0];
276 }
277 else
278 {
279 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
280 Player[playerid][IDSkin] = Skins_Female[sskin][0];
281 }
282 TextDrawShowForPlayer(playerid, SkinSelector_Title);
283 TextDrawShowForPlayer(playerid, SkinSelector_Accept);
284 TextDrawShowForPlayer(playerid, SkinSelector_Right);
285 TextDrawShowForPlayer(playerid, SkinSelector_Left);
286 }
287 else
288 {
289 ShowPlayerDialog(playerid, REGISTER3_DIALOG, DIALOG_STYLE_INPUT, "Rejestracja", "Podaj swój wiek", "Akceptuj", "Opuść Serwer");
290 SendClientMessage(playerid, -1, ERROR_STRING"Żeby zagrać musisz mieć 13-30 lat!");
291 }
292 }
293 else KickEX(playerid);
294 }
295 case REGISTER2_DIALOG: // Rejestracja wybór Gender
296 {
297 Player[playerid][Gender] = response;
298 ShowPlayerDialog(playerid, REGISTER3_DIALOG, DIALOG_STYLE_INPUT, "Rejestracja", "Podaj swój wiek", "Akceptuj", "Opuść Serwer");
299 }
300 case REGISTER1_DIALOG: //zAKÅADNIE KONTA
301 {
302 if(response)
303 {
304 if(strlen(inputtext) >= 8 && IsStrValid(inputtext))
305 {
306 WP_Hash(Player[playerid][Password], 129, inputtext);
307 ShowPlayerDialog(playerid, REGISTER2_DIALOG, DIALOG_STYLE_MSGBOX, "Rejestracja", "Wybierz swoją przynależność sexualną.", "Kobieta", "Mężczyzna");
308 }
309 else
310 {
311 ShowPlayerDialog(playerid, REGISTER1_DIALOG, DIALOG_STYLE_PASSWORD, "REJESTRACJA", "Aby zagrać na serwerze, prosimy stwórz konto. \n\tHasło proszę wpisać poniżej", "Akceptuj", "Anuluj");
312 SendClientMessage(playerid, -1, ERROR_STRING"Hasło powinno zawierać min. 8 zanków, nie może zawierać przerw ani znaków specjalnych!!");
313 }
314 }
315 else KickEX(playerid);
316 }
317 }
318 return 0;
319}
320
321public OnPlayerClickTextDraw(playerid, Text:clickedid)
322{
323 if(clickedid == SkinSelector_Right) //Wybor postaci nastepna postac
324 {
325 if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
326 {
327 if(Player[playerid][SelectedIDSkin] == (sizeof Skins_Male - 1))
328 Player[playerid][SelectedIDSkin] = 0;
329 else
330 Player[playerid][SelectedIDSkin]++;
331 new sskin = Player[playerid][SelectedIDSkin];
332 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
333 Player[playerid][IDSkin] = Skins_Male[sskin][0];
334 }
335 else //Kobiety
336 {
337 if(Player[playerid][SelectedIDSkin] == (sizeof Skins_Female - 1))
338 Player[playerid][SelectedIDSkin] = 0;
339 else
340 Player[playerid][SelectedIDSkin]++;
341 new sskin = Player[playerid][SelectedIDSkin];
342 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
343 Player[playerid][IDSkin] = Skins_Female[sskin][0];
344 }
345 }
346 if(clickedid == SkinSelector_Left) //Wybor postaci poprzednia postac
347 {
348 if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
349 {
350 if(Player[playerid][SelectedIDSkin] == 0)
351 Player[playerid][SelectedIDSkin] = (sizeof Skins_Male - 1);
352 else
353 Player[playerid][SelectedIDSkin]--;
354 new sskin = Player[playerid][SelectedIDSkin];
355 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
356 Player[playerid][IDSkin] = Skins_Male[sskin][0];
357 }
358 else //Kobiety
359 {
360 if(Player[playerid][SelectedIDSkin] == 0)
361 Player[playerid][SelectedIDSkin] = (sizeof Skins_Female - 1);
362 else
363 Player[playerid][SelectedIDSkin]--;
364 new sskin = Player[playerid][SelectedIDSkin];
365 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
366 Player[playerid][IDSkin] = Skins_Female[sskin][0];
367 }
368 }
369 if(clickedid == SkinSelector_Accept)
370 {
371 TextDrawHideForPlayer(playerid, SkinSelector_Title);
372 TextDrawHideForPlayer(playerid, SkinSelector_Accept);
373 TextDrawHideForPlayer(playerid, SkinSelector_Right);
374 TextDrawHideForPlayer(playerid, SkinSelector_Left);
375 CreateAccount(playerid);
376 }
377 return 1;
378}
379
380public OnPlayerSpawn(playerid)
381{
382 new query[258];
383 if(Player[playerid][LoggedIn] == false)
384 {
385 // nie zalogowany
386 SetPlayerSkin(playerid, GetRandomSkin());
387 SetPlayerInterior(playerid, 12);
388 SetPlayerPos(playerid, 2324.3040, -1135.8479, 1051.3047);
389 SetPlayerFacingAngle(playerid, 180.2658);
390 SetPlayerVirtualWorld(playerid, 50 + playerid);
391 SetPlayerCameraPos(playerid, 2324.5247, -1138.4045, 1050.4990);
392 SetPlayerCameraLookAt(playerid, 2324.3040, -1135.8479, 1051.3047);
393 TogglePlayerControllable(playerid, false);
394 ShowPlayerMouse(playerid, true);
395 new ip[18];
396 GetPlayerIp(playerid, ip, 18);
397 mysql_format(SQL_ID, query, sizeof query, "SELECT * FROM players_accounts WHERE Login = '%s' LIMIT 1", PlayerName(playerid));
398 mysql_tquery(SQL_ID, query, "OnAccountCheck", "iss", playerid, ip, PlayerName(playerid));
399 }
400 else
401 {
402 //zalogowany
403 SetPlayerInterior(playerid, 0);
404 SetPlayerVirtualWorld(playerid, 0);
405 TogglePlayerControllable(playerid, true);
406 SetCameraBehindPlayer(playerid);
407 ShowPlayerMouse(playerid, false);
408 }
409 return 1;
410}
411
412//CALLBACK MYSQL
413
414forward OnAccountCreate(playerid);
415public OnAccountCreate(playerid)
416{
417 SendClientMessage(playerid, -1, INFO_STRING"Gratuluję! Twoje Konto zostało pomyślnie stworzone.Życzymy udanej gry, Administracja serwera.");
418 SpawnPlayer(playerid);
419 return 1;
420}
421
422forward OnAccountCheck(playerid, ip[], name[]);
423public OnAccountCheck (playerid, ip[], name[])
424{
425 if(!IsPlayerConnected(playerid))
426 return 1;
427 new tmpip[18];
428 GetPlayerIp(playerid, tmpip, 18);
429 if(strcmp(ip, tmpip, true) != 0 && strcmp(name, PlayerName(playerid)) != 0)
430 return KickEX(playerid);
431 if(cache_num_rows() > 0)
432 {
433 //konto odnalezione
434 cache_get_value(0, "password", Player[playerid][Password], 129);
435 Player[playerid][Cache_ID] = cache_save();
436 ShowPlayerDialog(playerid, LOGIN_DIALOG, DIALOG_STYLE_PASSWORD, "Logowanie", "Znaleźliśmy rejestrację Twojego konta. \n\tPodaj hasło aby zagrać.", "Logowanie", "Opuść Serwer");
437 }
438 else
439 {
440 //Konton nie odnalezione
441 ShowPlayerDialog(playerid, REGISTER1_DIALOG, DIALOG_STYLE_PASSWORD, "REJESTRACJA", "Aby zagrać na serwerze, prosimy stwórz konto. \n\tHasło proszę wpisać poniżej", "Akceptuj", "Anuluj");
442 }
443 return 1;
444}
445
446stock IsNumeric(const string[])
447{
448 for (new i = 0, j = strlen(string); i < j; i++)
449 {
450 if (string[i] > '9' || string[i] < '0') return 0;
451 }
452 return 1;
453}
454
455stock bool:IsStrValid(const string[])
456{
457 new num;
458 new len = strlen(string);
459 for(new i; i < len; i++)
460 switch(string[i])
461 {
462 case 'A'..'Z':num++;
463 case 'a'..'z':num++;
464 case '0'..'9':num++;
465 }
466 if(num == len) return true;
467 else return false;
468}
469
470//Timery
471
472
473forward UnFreezePlayer(playerid);
474public UnFreezePlayer(playerid)
475{
476 Player[playerid][IsFreezed] = false;
477 TogglePlayerControllable(playerid, true);
478 return 1;
479}
480
481forward DelayKick(playerid);
482public DelayKick(playerid)
483 return Kick(playerid);
484
485forward SecondUpdate();
486public SecondUpdate()
487{
488 for(new playerid, j = GetPlayerPoolSize(); playerid <= j; playerid++)
489 {
490 if(IsPlayerConnected(playerid))
491 {
492 if(Player[playerid][ShowMouse])
493 {
494 ShowPlayerMouse(playerid, true);
495 }
496 }
497 }
498 return 1;
499}
500
501//STOCKI
502
503stock ConnectEntrances(id1, id2)
504{
505 Entrance[id1][e_conid] = id2;
506 Entrance[id2][e_conid] = id1;
507 return 1;
508}
509
510stock FreezePlayer(playerid, interval, text[])
511{
512 new string[128];
513 format(string, sizeof string, "~p~%s", text);
514 TogglePlayerControllable(playerid, false);
515 SetTimerEx("UnFreeze", interval, false, "i", playerid);
516 GameTextForPlayer(playerid, string, interval, 6);
517 Player[playerid][IsFreezed] = true;
518 return 1;
519}
520
521
522stock CreateEntrance(const name[], Float:x, Float:y, Float:z, Float:rotacja, interior, virtualworld, pickupid = -1, mapiconid = -1, bool:freezeplayer = false)
523{
524 new string[128];
525 new entid =entranceindex;
526 Entrance[entid][e_posx] = x;
527 Entrance[entid][e_posy] = y;
528 Entrance[entid][e_posz] = z;
529 Entrance[entid][e_rotation] = rotacja;
530 Entrance[entid][e_interior] = interior;
531 Entrance[entid][e_vw] = virtualworld;
532 Entrance[entid][e_freeze] = freezeplayer;
533 if(pickupid == -1)
534 {
535 pickupid = 1318;
536 if(mapiconid != -1)
537 CreateDynamicMapIcon(x, y, z, mapiconid, 0, virtualworld, interior, -1, 800, MAPICON_GLOBAL, -1, 0);
538 CreateDynamicPickup(pickupid, 1, x, y, z, virtualworld, interior);
539 format(string,sizeof string, "{F3DC3A}%s\n{FFFFFF}Aby wejść wciśnij : {D34BF5}ENTER", name);
540 CreateDynamic3DTextLabel(string, -1, x, y, z, 15, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, virtualworld, interior, -1, 15);
541 entranceindex++;
542 }
543 return entid;
544}
545
546stock GetRandomSkin()
547{
548 new rgender = random(2);
549 if(rgender == 1)
550 {
551 new rand = random(sizeof Skins_Male);
552 return Skins_Male[rand][0];
553 }
554 else if(rgender == 0)
555 {
556 new rand = random(sizeof Skins_Female);
557 return Skins_Female[rand][0];
558 }
559 return 0;
560}
561
562
563stock KickEX(playerid, delay = 1000)
564 return SetTimerEx("DelayKick", delay, false, "i", playerid);
565
566stock AssignPlayerData(playerid)
567{
568 cache_set_active(Player[playerid][Cache_ID]);
569
570 cache_get_value_int(0, "uid", Player[playerid][UID]);
571 cache_get_value_int(0, "IDSkina", Player[playerid][IDSkin]);
572 cache_get_value_int(0, "money", Player[playerid][Money]);
573 cache_get_value_int(0, "gender", Player[playerid][Gender]);
574 cache_get_value_int(0, "age", Player[playerid][Age]);
575 cache_get_value_int(0, "lvl", Player[playerid][Lvl]);
576 cache_get_value_int(0, "admin_lv", Player[playerid][AdminLV]);
577
578 cache_get_value_float(0, "lastposx",Player[playerid][LastPos][0]);
579 cache_get_value_float(0, "lastposy",Player[playerid][LastPos][1]);
580 cache_get_value_float(0, "lastposz",Player[playerid][LastPos][2]);
581 cache_get_value_float(0, "lastposrot",Player[playerid][LastPos][3]);
582 cache_get_value_int(0, "linterior",Player[playerid][Linterior]);
583 cache_get_value_int(0, "lvw",Player[playerid][LVW]);
584 cache_get_value_float(0, "hp",Player[playerid][HP]);
585 cache_get_value_float(0, "armour",Player[playerid][Armour]);
586
587 cache_delete(Player[playerid][Cache_ID]);
588 Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
589 return 1;
590}
591
592stock ResetPlayerData(playerid)
593{
594 if(cache_is_valid(Player[playerid][Cache_ID]))
595 {
596 cache_delete(Player[playerid][Cache_ID]);
597 Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
598 }
599 static const null_players[DataPlayer];
600 Player[playerid] = null_players;
601 return 1;
602}
603
604stock PlayerName(playerid)
605{
606 new name[MAX_PLAYER_NAME];
607 GetPlayerName(playerid, name, sizeof name);
608 return name;
609}
610
611forward ShowPlayerMouse(playerid, bool:show);
612public ShowPlayerMouse(playerid, bool:show)
613{
614 if(show)
615 {
616 SelectTextDraw(playerid, 0xFF0000FF);
617 Player[playerid][ShowMouse] = true;
618 }
619 else
620 {
621 CancelSelectTextDraw(playerid);
622 Player[playerid][ShowMouse] = false;
623 }
624 return 1;
625}
626
627stock ClearPlayerChat(playerid)
628{
629 for(new i; i < 15; i++)
630 SendClientMessage(playerid, -1, " ");
631 return 1;
632}
633
634 stock SaveAccount(playerid)
635 {
636 new query[258];
637 new Float:tempPos[4], Float:hp, Float:armour;
638 GetPlayerHealth(playerid, hp);
639 GetPlayerArmour(playerid, armour);
640 GetPlayerPos(playerid, tempPos[0], tempPos[1], tempPos[2]);
641 GetPlayerFacingAngle(playerid, tempPos[3]);
642 if(hp > 100 && !IsPlayerAdmin(playerid)) hp = 100;
643 if(armour > 100) armour = 100;
644 mysql_format(SQL_ID, query, sizeof query, "UPDATE players_accounts SET money =%i, IDSkina = %i, lvl = %i, lastposx = %f, lastposy = %f, lastposz = %f, \
645 lastposrot = %f, linterior = %i, lvw = %i, hp = %f, armour = %f WHERE uid = %i",
646 GetPlayerMoney(playerid),
647 Player[playerid][IDSkin],
648 GetPlayerScore(playerid),
649 tempPos[0], tempPos[1], tempPos[2], tempPos[3],
650 GetPlayerInterior(playerid),
651 GetPlayerVirtualWorld(playerid),
652 hp,armour,
653 Player[playerid][UID]);
654 mysql_tquery(SQL_ID, query);
655 return 1;
656 }
657
658 stock CreateAccount(playerid)
659{
660 new query[258], string[258];
661 strcat(query, "INSERT INTO players_accounts(");
662 //
663 strcat(query, "Login, ");
664 strcat(query, "password, ");
665 strcat(query, "IDSkina, ");
666 strcat(query, "age, ");
667 strcat(query, "gender, ");
668 strcat(query, "money");
669 //
670 strcat(query, ")VALUES(");
671 //
672 format(string, 258, "'%s',",PlayerName(playerid));
673 strcat(query,string);
674 format(string, 258, "'%s',",Player[playerid][Password]);
675 strcat(query,string);
676 format(string, 258, "'%i',",Player[playerid][IDSkin]);
677 strcat(query,string);
678 format(string, 258, "'%i',",Player[playerid][Age]);
679 strcat(query,string);
680 format(string, 258, "'%i',",Player[playerid][Gender]);
681 strcat(query,string);
682 format(string, 258, "'%i'",MONEY_MONEY_START);
683 strcat(query,string);
684 //
685 strcat(query,")");
686 mysql_tquery(SQL_ID, query, "OnAccountCreate", "i", playerid);
687 return 1;
688}
689
690stock MySQL_SetUpTables ()
691{
692 mysql_tquery(SQL_ID, " CREATE TABLE IF NOT EXISTS `Players Accounts` ( \
693 `uid` INT(11) NOT NULL AUTO_INCREMENT, \
694 `Login` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
695 `password` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
696 `ID Skina` INT(11) NOT NULL, \
697 `money` INT(11) NOT NULL DEFAULT '0', \
698 `gender` INT(11) NOT NULL, \
699 `age` INT(11) NOT NULL, \
700 `lvl` INT(11) NOT NULL DEFAULT '1', \
701 `admin lv` INT(11) NOT NULL DEFAULT '0', \
702 `lastip` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
703 `lastonline` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
704 `createdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
705 PRIMARY KEY (`uid`))");
706 return 1;
707}
708
709stock MySQL_Init()
710{
711 mysql_log();
712 SQL_ID = mysql_connect_file("mysql.ini");
713 if(SQL_ID == MYSQL_INVALID_HANDLE ||mysql_errno(SQL_ID) != 0)
714 {
715 print("[MYSQL - BLAD] Nie można było połączyć się z bazą danych! Serwer wyłączony ..!");
716 SendRconCommand("exit");
717 return 0;
718 }
719 print("[MYSQL] Połączenie z bazą danych zostało nawiązane!");
720 return 1;
721}
722
723// Stock TD
724
725stock CreateGlobalTD()
726{
727 SkinSelector_Title = TextDrawCreate(316.000000, 370.000000, "WYBIERZ POSTAC");
728 TextDrawFont(SkinSelector_Title, 2);
729 TextDrawLetterSize(SkinSelector_Title, 0.291666, 2.049999);
730 TextDrawTextSize(SkinSelector_Title, 400.000000, 405.000000);
731 TextDrawSetOutline(SkinSelector_Title, 1);
732 TextDrawSetShadow(SkinSelector_Title, 0);
733 TextDrawAlignment(SkinSelector_Title, 2);
734 TextDrawColor(SkinSelector_Title, -1378294017);
735 TextDrawBackgroundColor(SkinSelector_Title, 255);
736 TextDrawBoxColor(SkinSelector_Title, 50);
737 TextDrawUseBox(SkinSelector_Title, 0);
738 TextDrawSetProportional(SkinSelector_Title, 1);
739 TextDrawSetSelectable(SkinSelector_Title, 0);
740
741 SkinSelector_Right = TextDrawCreate(351.000000, 392.000000, ">>>");
742 TextDrawFont(SkinSelector_Right, 2);
743 TextDrawLetterSize(SkinSelector_Right, 0.258332, 1.750000);
744 TextDrawTextSize(SkinSelector_Right, 16.500000, 33.500000);
745 TextDrawSetOutline(SkinSelector_Right, 1);
746 TextDrawSetShadow(SkinSelector_Right, 0);
747 TextDrawAlignment(SkinSelector_Right, 2);
748 TextDrawColor(SkinSelector_Right, -1);
749 TextDrawBackgroundColor(SkinSelector_Right, 255);
750 TextDrawBoxColor(SkinSelector_Right, 76);
751 TextDrawUseBox(SkinSelector_Right, 1);
752 TextDrawSetProportional(SkinSelector_Right, 1);
753 TextDrawSetSelectable(SkinSelector_Right, 1);
754
755 SkinSelector_Left = TextDrawCreate(281.000000, 392.000000, "<<<");
756 TextDrawFont(SkinSelector_Left, 2);
757 TextDrawLetterSize(SkinSelector_Left, 0.258332, 1.750000);
758 TextDrawTextSize(SkinSelector_Left, 16.500000, 33.500000);
759 TextDrawSetOutline(SkinSelector_Left, 1);
760 TextDrawSetShadow(SkinSelector_Left, 0);
761 TextDrawAlignment(SkinSelector_Left, 2);
762 TextDrawColor(SkinSelector_Left, -1);
763 TextDrawBackgroundColor(SkinSelector_Left, 255);
764 TextDrawBoxColor(SkinSelector_Left, 76);
765 TextDrawUseBox(SkinSelector_Left, 1);
766 TextDrawSetProportional(SkinSelector_Left, 1);
767 TextDrawSetSelectable(SkinSelector_Left, 1);
768
769 SkinSelector_Accept = TextDrawCreate(316.000000, 392.000000, "OK");
770 TextDrawFont(SkinSelector_Accept, 2);
771 TextDrawLetterSize(SkinSelector_Accept, 0.258332, 1.750000);
772 TextDrawTextSize(SkinSelector_Accept, 16.500000, 23.500000);
773 TextDrawSetOutline(SkinSelector_Accept, 1);
774 TextDrawSetShadow(SkinSelector_Accept, 0);
775 TextDrawAlignment(SkinSelector_Accept, 2);
776 TextDrawColor(SkinSelector_Accept, -1);
777 TextDrawBackgroundColor(SkinSelector_Accept, 255);
778 TextDrawBoxColor(SkinSelector_Accept, 76);
779 TextDrawUseBox(SkinSelector_Accept, 1);
780 TextDrawSetProportional(SkinSelector_Accept, 1);
781 TextDrawSetSelectable(SkinSelector_Accept, 1);
782 return 1;
783}