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