· 8 years ago · Apr 01, 2018, 08:08 PM
1//INCLUDY
2#include <a_samp>
3#include <a_mysql>
4
5main() {}
6
7//NATIVEY
8native WP_Hash(buffer[], len, const str[]);
9
10//FORWARDY
11forward bool:IsStrValid(string[]);
12
13//Ustawienia
14#define START_MONEY 1200
15
16//Dialogi
17#define DIALOG_REGISTER1 0
18#define DIALOG_LOGIN 1
19#define DIALOG_REGISTER2 2
20#define DIALOG_REGISTER3 3
21
22//DEFINICJE
23#define SCRIPT_NAME "Role Play"
24#define SCRIPT_VERSION "Alpha"
25#define SCRIPT_AUTHOR "Stocku"
26#define INFO_STRING "{00FF00}[Info]{FFFFFF}:"
27#define ERROR_STRING "{FF0000}[Blad]{FFFFFF}:"
28#define INFO_BAD_CMD "{00FF00}[Info]{FFFFFF}: Serwer nie posiada takiej komendy."
29
30//Parametry postaci
31#define GENDER_MALE 1
32#define GENDER_FEMALE 0
33
34//Textdrawy
35new Text:SkinSelector_Title;
36new Text:SkinSelector_Right;
37new Text:SkinSelector_Left;
38new Text:SkinSelector_Accept;
39
40//Enumeratory
41enum PlayerData
42{
43 bool:LoggedIn,
44 bool:ShowMouse,
45 Cache:Cache_ID,
46 UID,
47 Password[129],
48 Age,
49 Level,
50 Gender,
51 SkinID,
52 Money,
53 AdminLVL,
54
55 //Wybor postaci
56 SelectedSkinID
57};
58new Player[MAX_PLAYERS][PlayerData];
59
60//Zmienne globalne
61new MySQL:SQL_ID;
62new Skins_Male[][] = {6, 7, 20, 21, 22, 23, 24, 26}; //Mezczyzni
63new Skins_Female[][] = {31, 40, 41, 54, 55, 56, 65, 148}; //Kobiety
64
65public OnGameModeInit()
66{
67 SetGameModeText("RolePlay - Alpha Test");
68 printf("[Uruchamiam] Skrypt: %s\n>Wersja: %s\n>Autor: [%s]\n", SCRIPT_NAME,SCRIPT_VERSION, SCRIPT_AUTHOR);
69 if(MySQL_Init())
70 {
71 //WCZYTYWANIE
72 MySQL_SetUpTables(); //Tworzy tabele w bazie MySQL jesli nie istnieje
73 CreateGlobalTD(); //Tworzy globalne TextDrawy
74
75 //TIMERY
76 SetTimer("SecondUpdate", 1000, true);
77
78 //USTAWIENIA
79 DisableInteriorEnterExits();
80 EnableStuntBonusForAll(false);
81 UsePlayerPedAnims();
82
83 printf("[Sprawdzam] Skrypt: %s pomyslnie uruchomiony!\n", SCRIPT_NAME);
84 }
85 return 1;
86}
87
88public OnGameModeExit()
89{
90 mysql_close(SQL_ID); //Rozlacza z bazy
91 return 1;
92}
93
94public OnPlayerRequestSpawn(playerid)
95{
96
97 return 1;
98}
99
100public OnPlayerRequestClass(playerid, classid)
101{
102 SpawnPlayer(playerid);
103 return 1;
104}
105
106public OnPlayerConnect(playerid)
107{
108 if(IsRPName(PlayerName(playerid)))
109 {
110 ClearPlayerChat(playerid);
111 SetSpawnInfo(playerid, NO_TEAM, 0, 0.0,0.0,0.0,0.0, 0, 0, 0, 0, 0, 0); //To tylko sprawia by gracz ominal standardowy wybor postaci.
112 }
113 else
114 {
115 SendClientMessage(playerid, -1, ERROR_STRING"Twoja nazwa jest niezgodna zasadami Role-Play, użyj formatu Imię_Nazwisko!");
116 KickEx(playerid);
117 }
118 return 1;
119}
120
121public OnPlayerDisconnect(playerid, reason)
122{
123 new query[258];
124 if(Player[playerid][LoggedIn])
125 {
126 SaveAccount(playerid); //Zapisuje dane gracza
127 mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET lastonline = NOW() WHERE uid = %i", Player[playerid][UID]);
128 mysql_tquery(SQL_ID, query);
129 }
130 ResetPlayerData(playerid); //Resetuje dane gracza
131 return 1;
132}
133
134public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
135{
136 switch(dialogid)
137 {
138 case DIALOG_LOGIN: //Login gracza
139 {
140 if(response)
141 {
142 if(strlen(inputtext) && IsStrValid(inputtext))
143 {
144 new buff[129], query[258], ip[18];
145 WP_Hash(buff, 129, inputtext); //Szyfruje haslo ktory podal gracza by sprawdzic haslo z bazy.
146 if(strcmp(Player[playerid][Password], buff, true) == 0)
147 {
148 //Haslo sie zgadza
149 AssignPlayerData(playerid); //Ustawia graczowi dane do pamieci.
150
151 Player[playerid][LoggedIn] = true;
152 ResetPlayerMoney(playerid);
153 GivePlayerMoney(playerid, Player[playerid][Money]);
154 SetPlayerScore(playerid, Player[playerid][Level]);
155 SpawnPlayer(playerid);
156 ClearPlayerChat(playerid);
157 SendClientMessage(playerid, -1, INFO_STRING"Zostałeś pomyślnie zalogowany! Miłej gry!");
158 GetPlayerIp(playerid, ip, 18);
159 mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET lastip = '%s', lastonline = NOW() WHERE uid = %i", ip, Player[playerid][UID]);
160 mysql_tquery(SQL_ID, query);
161 }
162 else
163 {
164 //Haslo sie nie zgadza
165 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
166 SendClientMessage(playerid, -1, ERROR_STRING"Podano błędne hasło! Spróbuj ponownie!");
167 }
168 }
169 else
170 {
171 //Haslo sie nie zgadza
172 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
173 SendClientMessage(playerid, -1, ERROR_STRING"Podano błędne hasło! Spróbuj ponownie!");
174 }
175 }
176 else KickEx(playerid);
177 }
178 case DIALOG_REGISTER3: //Rejestracja Wiek postaci
179 {
180 if(response)
181 {
182 if(IsNumeric(inputtext) && strlen(inputtext) == 2 && strval(inputtext) >= 18 && strval(inputtext) <= 55)
183 {
184 Player[playerid][Age] = strval(inputtext);
185 SetPlayerCameraPos(playerid, -2168.2939,642.1371,1057.5938);
186 SetPlayerCameraLookAt(playerid, -2165.8633,644.5464,1057.5000, CAMERA_MOVE);
187 Player[playerid][SelectedSkinID] = 0;
188 new sskin = Player[playerid][SelectedSkinID];
189 if(Player[playerid][Gender] == GENDER_MALE)
190 {
191 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
192 Player[playerid][SkinID] = Skins_Male[sskin][0];
193 }
194 else
195 {
196 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
197 Player[playerid][SkinID] = Skins_Female[sskin][0];
198 }
199 TextDrawShowForPlayer(playerid, SkinSelector_Title);
200 TextDrawShowForPlayer(playerid, SkinSelector_Right);
201 TextDrawShowForPlayer(playerid, SkinSelector_Left);
202 TextDrawShowForPlayer(playerid, SkinSelector_Accept);
203 }
204 else
205 {
206 ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_INPUT, "Rejestracja", "Wybierz wiek Twojej postaci.", "Potwierdz", "Wyjdz");
207 SendClientMessage(playerid, -1, ERROR_STRING"Wiek postaci musi byc od 18-55 lat!");
208 }
209 }
210 else KickEx(playerid);
211 }
212 case DIALOG_REGISTER2: //Rejestracja Plec postaci
213 {
214 Player[playerid][Gender] = response;
215 ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_INPUT, "Rejestracja", "Wybierz wiek Twojej postaci.", "Potwierdz", "Wyjdz");
216 }
217 case DIALOG_REGISTER1: //Rejestracja konta haslo
218 {
219 if(response)
220 {
221 if(strlen(inputtext) >= 6 && IsStrValid(inputtext))
222 {
223 WP_Hash(Player[playerid][Password], 129, inputtext); //Szyfruje haslo ktory potem wpiszemy do bazy.
224 ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_MSGBOX, "Rejestracja", "Wybierz płeć swojej postaci.", "Mężczyzna", "Kobieta");
225 }
226 else
227 {
228 ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "Rejestracja", "Aby zagrać na serwerze, musisz stworzyć konto.\nPodaj poniżej swoje hasło.", "Potwierdz", "Wyjdz");
229 SendClientMessage(playerid, -1, ERROR_STRING"Hasło musi zawierać przynajmniej 6 znaków i nie może posiadać przerw i znaków specjalnych!");
230 }
231 }
232 else KickEx(playerid);
233 }
234 }
235 return 0;
236}
237
238public OnPlayerClickTextDraw(playerid, Text:clickedid)
239{
240 if(clickedid == SkinSelector_Right) //Wybor postaci nastepna postac
241 {
242 if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
243 {
244 if(Player[playerid][SelectedSkinID] == (sizeof Skins_Male - 1))
245 Player[playerid][SelectedSkinID] = 0;
246 else
247 Player[playerid][SelectedSkinID]++;
248 new sskin = Player[playerid][SelectedSkinID];
249 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
250 Player[playerid][SkinID] = Skins_Male[sskin][0];
251 }
252 else //Kobiety
253 {
254 if(Player[playerid][SelectedSkinID] == (sizeof Skins_Female - 1))
255 Player[playerid][SelectedSkinID] = 0;
256 else
257 Player[playerid][SelectedSkinID]++;
258 new sskin = Player[playerid][SelectedSkinID];
259 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
260 Player[playerid][SkinID] = Skins_Female[sskin][0];
261 }
262 }
263 if(clickedid == SkinSelector_Left) //Wybor postaci poprzednia postac
264 {
265 if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
266 {
267 if(Player[playerid][SelectedSkinID] == 0)
268 Player[playerid][SelectedSkinID] = (sizeof Skins_Male - 1);
269 else
270 Player[playerid][SelectedSkinID]--;
271 new sskin = Player[playerid][SelectedSkinID];
272 SetPlayerSkin(playerid, Skins_Male[sskin][0]);
273 Player[playerid][SkinID] = Skins_Male[sskin][0];
274 }
275 else //Kobiety
276 {
277 if(Player[playerid][SelectedSkinID] == 0)
278 Player[playerid][SelectedSkinID] = (sizeof Skins_Female - 1);
279 else
280 Player[playerid][SelectedSkinID]--;
281 new sskin = Player[playerid][SelectedSkinID];
282 SetPlayerSkin(playerid, Skins_Female[sskin][0]);
283 Player[playerid][SkinID] = Skins_Female[sskin][0];
284 }
285 }
286 if(clickedid == SkinSelector_Accept) //Wybor postaci akzeptacja.
287 {
288 TextDrawHideForPlayer(playerid, SkinSelector_Title);
289 TextDrawHideForPlayer(playerid, SkinSelector_Right);
290 TextDrawHideForPlayer(playerid, SkinSelector_Left);
291 TextDrawHideForPlayer(playerid, SkinSelector_Accept);
292 CreateAccount(playerid); //Tworzy konto dla gracza
293 }
294 return 1;
295}
296
297public OnPlayerSpawn(playerid)
298{
299 new query[258];
300 if(Player[playerid][LoggedIn] == false)
301 {
302 new ip[18];
303 //NIE ZALOGOWANY
304 SetPlayerSkin(playerid, GetRandomSkin()); //Skin gracza podczas okna logowania i rejestracji, jest wybrany losowo.
305 SetPlayerPos(playerid, -2165.8633,644.5464,1057.5938); //Pozycja postaci podczas okna logowania i rejestracji
306 SetPlayerFacingAngle(playerid, 90.0000); //Rotacja gracza okna logowania i rejestracji
307 SetPlayerInterior(playerid, 1); //Ustawia Interior
308 //
309 SetPlayerVirtualWorld(playerid, 50 + playerid); //UStawia kazdego gracza w swoim Wirtualnym swiecie.
310 SetPlayerCameraPos(playerid, -2160.5630,642.1472,1058.5938); //Pozycja kamera.
311 SetPlayerCameraLookAt(playerid, -2167.0398,644.4033,1059.1016); //Gdzie kamera sie ma patrzec.
312 TogglePlayerControllable(playerid, false); //Zamraza gracza
313 ShowPlayerMouse(playerid, true); //Pokazuje myszke
314 GetPlayerIp(playerid, ip, 18); //Pobiera IP gracza
315 mysql_format(SQL_ID, query, sizeof query, "SELECT * FROM accounts WHERE name = '%s' LIMIT 1", PlayerName(playerid));
316 mysql_tquery(SQL_ID, query, "OnAccountCheck", "iss", playerid, ip, PlayerName(playerid));
317 }
318 else
319 {
320 //ZALOGOWANY
321 SetPlayerSkin(playerid, Player[playerid][SkinID]); //Skin gracza
322 SetPlayerPos(playerid, 817.2330, -1348.2781, 12.5273); //Pozycja Spawnu gracza
323 SetPlayerFacingAngle(playerid, 359.6867); //Rotacja Spawnu gracza
324 SetPlayerInterior(playerid, 0); //Ustawia interior.
325 //
326 SetPlayerVirtualWorld(playerid, 0); //UStawia wirtualny swiat na 0 by zobaczyc innych graczy.
327 TogglePlayerControllable(playerid, true); //Odmraza gracza.
328 SetCameraBehindPlayer(playerid); //Ustawia kamere za gracza.
329 ShowPlayerMouse(playerid, false); //Chowa myszke gracza.
330 }
331 return 1;
332}
333
334
335public OnPlayerCommandText(playerid, cmdtext[])
336{
337 if(strcmp("/jet", cmdtext, true) == 0)
338 {
339 SetPlayerSpecialAction(playerid,SPECIAL_ACTION_USEJETPACK);
340 return 1;
341 }
342 return SendClientMessage(playerid, -1, INFO_BAD_CMD);
343}
344
345//CALLBACKI MYSQL
346forward OnAccountCreate(playerid);
347public OnAccountCreate(playerid)
348{
349 SendClientMessage(playerid, -1, INFO_STRING"Konto zostało pomyślnie stworzone!");
350 SpawnPlayer(playerid);
351 return 1;
352}
353
354forward OnAccountCheck(playerid, ip[], name[]);
355public OnAccountCheck(playerid, ip[], name[])
356{
357 //Sprawdza czy dane ktory pobral z bazy, nalezy nadal dla tego gracza.
358 if(!IsPlayerConnected(playerid)) //Czy jest nadal polaczony?
359 return 1;
360 new tmpip[18];
361 GetPlayerIp(playerid, tmpip, 18);
362 if(strcmp(ip, tmpip, true) != 0 && strcmp(name, PlayerName(playerid), true) != 0) //Czy IP i Nazwa gracza sie zgadza?
363 return KickEx(playerid);
364 //Sprawdzamy czy konto istnieje.
365 if(cache_num_rows() > 0)
366 {
367 //ZNALAZL KONTO
368 cache_get_value(0, "password", Player[playerid][Password], 129); //Pobieramy haslo gracza z bazy
369 Player[playerid][Cache_ID] = cache_save(); //Zapiszemy cache i ID wpiszemy do enumeratora by pozniej moc pobrac dane.
370 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
371 }
372 else
373 {
374 //NIE ZNALAZL KONTO
375 ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "Rejestracja", "Aby zagrać na serwerze, musisz stworzyć konto.\nPodaj poniżej swoje hasło.", "Potwierdz", "Wyjdz");
376 }
377 return 1;
378}
379
380//TIMERY
381
382forward DelayKick(playerid);
383public DelayKick(playerid)
384 return Kick(playerid);
385
386forward SecondUpdate();
387public SecondUpdate()
388{
389 for(new playerid, j = GetPlayerPoolSize(); playerid <= j; playerid++)
390 {
391 if(IsPlayerConnected(playerid))
392 {
393 if(Player[playerid][ShowMouse])
394 {
395 ShowPlayerMouse(playerid, true);
396 }
397 }
398 }
399 return 1;
400}
401
402//STOCKI
403
404stock GetRandomSkin()
405{
406 new rgender = random(2);
407 if(rgender == 1)
408 {
409 new rand = random(sizeof Skins_Male);
410 return Skins_Male[rand][0];
411 }
412 else if(rgender == 0)
413 {
414 new rand = random(sizeof Skins_Female);
415 return Skins_Female[rand][0];
416 }
417 return 0;
418}
419
420stock KickEx(playerid, delay = 1000)
421 return SetTimerEx("DelayKick", delay, false, "i", playerid);
422
423stock ResetPlayerData(playerid)
424{
425 if(cache_is_valid(Player[playerid][Cache_ID]))
426 {
427 cache_delete(Player[playerid][Cache_ID]);
428 Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
429 }
430 static const null_players[PlayerData];
431 Player[playerid] = null_players;
432 return 1;
433}
434
435stock IsRPName(name[], minname = 3, bool:firstupperthenlower = true) //By Nickk888
436{
437 new count, checknumcount, where, tmpname[24], tmpsname[24];
438 new len = strlen(name);
439 for(new i; i < len; i++) {
440 if(name[i] == '_')
441 count++,
442 where = i;
443 switch(name[i]) {
444 case 'A'..'Z', 'a'..'z', '_':
445 checknumcount++;
446 }
447 }
448 if(count != 1 || (where < minname || len < ((where + 1) + minname)) || checknumcount != len)
449 return 0;
450 strmid(tmpname, name, 0, where);
451 strmid(tmpsname, name, where+1, len);
452 checknumcount = 0;
453 if(firstupperthenlower) {
454 switch(tmpname[0]) {
455 case 'A'..'Z':
456 checknumcount++;
457 }
458 for(new i = 1, j = strlen(tmpname); i < j; i++){
459 switch(tmpname[i]) {
460 case 'a'..'z':
461 checknumcount++;
462 }
463 }
464 switch(tmpsname[0]) {
465 case 'A'..'Z':
466 checknumcount++;
467 }
468 for(new i = 1, j = strlen(tmpsname); i < j; i++){
469 switch(tmpsname[i]) {
470 case 'a'..'z':
471 checknumcount++;
472 }
473 }
474 if((checknumcount + 1) != len)
475 return 0;
476 }
477 return 1;
478}
479
480stock IsNumeric(const string[])
481{
482 for (new i = 0, j = strlen(string); i < j; i++)
483 {
484 if (string[i] > '9' || string[i] < '0') return 0;
485 }
486 return 1;
487}
488
489stock bool:IsStrValid(string[])
490{
491 new num;
492 new len = strlen(string);
493 for(new i; i < len; i++)
494 switch(string[i])
495 {
496 case 'A'..'Z':num++;
497 case 'a'..'z':num++;
498 case '0'..'9':num++;
499 }
500 if(num == len) return true;
501 else return false;
502}
503
504stock PlayerName(playerid)
505{
506 new name[MAX_PLAYER_NAME];
507 GetPlayerName(playerid, name, sizeof name);
508 return name;
509}
510
511stock ClearPlayerChat(playerid)
512{
513 for(new i; i < 15; i++)
514 SendClientMessage(playerid, -1, "");
515 return 1;
516}
517
518stock ShowPlayerMouse(playerid, bool:show)
519{
520 if(show)
521 {
522 SelectTextDraw(playerid, 0xFF0000FF);
523 Player[playerid][ShowMouse] = true;
524 }
525 else
526 {
527 CancelSelectTextDraw(playerid);
528 Player[playerid][ShowMouse] = false;
529 }
530 return 1;
531}
532
533stock AssignPlayerData(playerid)
534{
535 cache_set_active(Player[playerid][Cache_ID]); //Ponownie aktywujemy Cache gracza.
536
537 //Pobieramy dane z cache
538 cache_get_value_int(0, "uid", Player[playerid][UID]);
539 cache_get_value_int(0, "skinid", Player[playerid][SkinID]);
540 cache_get_value_int(0, "money", Player[playerid][Money]);
541 cache_get_value_int(0, "gender", Player[playerid][Gender]);
542 cache_get_value_int(0, "age", Player[playerid][Age]);
543 cache_get_value_int(0, "level", Player[playerid][Level]);
544 cache_get_value_int(0, "adminlvl", Player[playerid][AdminLVL]);
545
546 cache_delete(Player[playerid][Cache_ID]); //Usuwa caly Cache
547 Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE; //Resetujemy Cache ID
548 return 1;
549}
550
551stock SaveAccount(playerid)
552{
553 new query[258];
554 mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET money = %i, skinid = %i, level = %i WHERE uid = %i",
555 GetPlayerMoney(playerid),
556 GetPlayerSkin(playerid),
557 GetPlayerScore(playerid),
558 Player[playerid][UID]);
559 mysql_tquery(SQL_ID, query);
560 return 1;
561}
562
563stock CreateAccount(playerid)
564{
565 new query[258], string[258];
566 strcat(query, "INSERT INTO accounts(");
567 //
568 strcat(query, "name,");
569 strcat(query, "password,");
570 strcat(query, "skinid,");
571 strcat(query, "age,");
572 strcat(query, "gender,");
573 strcat(query, "money");
574 //
575 strcat(query, ") VALUES (");
576 //
577 format(string, 258, "'%s',", PlayerName(playerid));
578 strcat(query, string);
579 format(string, 258, "'%s',", Player[playerid][Password]);
580 strcat(query, string);
581 format(string, 258, "'%i',", Player[playerid][SkinID]);
582 strcat(query, string);
583 format(string, 258, "'%i',", Player[playerid][Age]);
584 strcat(query, string);
585 format(string, 258, "'%i',", Player[playerid][Gender]);
586 strcat(query, string);
587 format(string, 258, "'%i'", START_MONEY);
588 strcat(query, string);
589 //
590 strcat(query, ")");
591 mysql_tquery(SQL_ID, query, "OnAccountCreate", "i", playerid);
592 return 1;
593}
594
595stock MySQL_SetUpTables()
596{
597 mysql_tquery(SQL_ID, "CREATE TABLE IF NOT EXISTS `accounts` ( \
598 `uid` INT(11) NOT NULL AUTO_INCREMENT, \
599 `name` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
600 `password` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
601 `skinid` INT(11) NOT NULL, \
602 `money` INT(11) NOT NULL DEFAULT '0', \
603 `gender` INT(11) NOT NULL, \
604 `age` INT(11) NOT NULL, \
605 `level` INT(11) NOT NULL DEFAULT '1', \
606 `adminlvl` INT(11) NOT NULL DEFAULT '0', \
607 `lastip` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
608 `lastonline` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
609 `createdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
610 PRIMARY KEY (`uid`))");
611 return 1;
612}
613
614stock MySQL_Init()
615{
616 mysql_log();
617 SQL_ID = mysql_connect_file("mysql.ini"); //Probujemy sie polaczyc z baza MySQL
618 if(SQL_ID == MYSQL_INVALID_HANDLE || mysql_errno(SQL_ID) != 0)
619 {
620 //Jesli polaczenie sie nie powiodlo
621 print("[MYSQL - BLAD] Nie mozna polaczyc sie z baza danych! Wylaczam serwer.");
622 SendRconCommand("exit");
623 return 0;
624 }
625 //Jesli sie powiodlo
626 print("[MYSQL - Info] Pomyslnie polaczono z baza danych!");
627 return 1;
628}
629
630stock CreateGlobalTD()
631{
632 SkinSelector_Title = TextDrawCreate(316.000000, 370.000000, "WYBIERZ POSTAC");
633 TextDrawFont(SkinSelector_Title, 2);
634 TextDrawLetterSize(SkinSelector_Title, 0.291666, 2.049999);
635 TextDrawTextSize(SkinSelector_Title, 400.000000, 405.000000);
636 TextDrawSetOutline(SkinSelector_Title, 1);
637 TextDrawSetShadow(SkinSelector_Title, 0);
638 TextDrawAlignment(SkinSelector_Title, 2);
639 TextDrawColor(SkinSelector_Title, -1378294017);
640 TextDrawBackgroundColor(SkinSelector_Title, 255);
641 TextDrawBoxColor(SkinSelector_Title, 50);
642 TextDrawUseBox(SkinSelector_Title, 0);
643 TextDrawSetProportional(SkinSelector_Title, 1);
644 TextDrawSetSelectable(SkinSelector_Title, 0);
645
646 SkinSelector_Right = TextDrawCreate(351.000000, 392.000000, ">>>");
647 TextDrawFont(SkinSelector_Right, 2);
648 TextDrawLetterSize(SkinSelector_Right, 0.258332, 1.750000);
649 TextDrawTextSize(SkinSelector_Right, 16.500000, 33.500000);
650 TextDrawSetOutline(SkinSelector_Right, 1);
651 TextDrawSetShadow(SkinSelector_Right, 0);
652 TextDrawAlignment(SkinSelector_Right, 2);
653 TextDrawColor(SkinSelector_Right, -1);
654 TextDrawBackgroundColor(SkinSelector_Right, 255);
655 TextDrawBoxColor(SkinSelector_Right, 76);
656 TextDrawUseBox(SkinSelector_Right, 1);
657 TextDrawSetProportional(SkinSelector_Right, 1);
658 TextDrawSetSelectable(SkinSelector_Right, 1);
659
660 SkinSelector_Left = TextDrawCreate(281.000000, 392.000000, "<<<");
661 TextDrawFont(SkinSelector_Left, 2);
662 TextDrawLetterSize(SkinSelector_Left, 0.258332, 1.750000);
663 TextDrawTextSize(SkinSelector_Left, 16.500000, 33.500000);
664 TextDrawSetOutline(SkinSelector_Left, 1);
665 TextDrawSetShadow(SkinSelector_Left, 0);
666 TextDrawAlignment(SkinSelector_Left, 2);
667 TextDrawColor(SkinSelector_Left, -1);
668 TextDrawBackgroundColor(SkinSelector_Left, 255);
669 TextDrawBoxColor(SkinSelector_Left, 76);
670 TextDrawUseBox(SkinSelector_Left, 1);
671 TextDrawSetProportional(SkinSelector_Left, 1);
672 TextDrawSetSelectable(SkinSelector_Left, 1);
673
674 SkinSelector_Accept = TextDrawCreate(316.000000, 392.000000, "OK");
675 TextDrawFont(SkinSelector_Accept, 2);
676 TextDrawLetterSize(SkinSelector_Accept, 0.258332, 1.750000);
677 TextDrawTextSize(SkinSelector_Accept, 16.500000, 23.500000);
678 TextDrawSetOutline(SkinSelector_Accept, 1);
679 TextDrawSetShadow(SkinSelector_Accept, 0);
680 TextDrawAlignment(SkinSelector_Accept, 2);
681 TextDrawColor(SkinSelector_Accept, -1);
682 TextDrawBackgroundColor(SkinSelector_Accept, 255);
683 TextDrawBoxColor(SkinSelector_Accept, 76);
684 TextDrawUseBox(SkinSelector_Accept, 1);
685 TextDrawSetProportional(SkinSelector_Accept, 1);
686 TextDrawSetSelectable(SkinSelector_Accept, 1);
687 return 1;
688}