Advertisement
Guest User

Untitled

a guest
Jun 11th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.83 KB | None | 0 0
  1. //INCLUDY
  2. #include <a_samp>
  3. #include <a_mysql>
  4. #include <streamer>
  5. #include <sscanf2>
  6. #include <zcmd>
  7.  
  8. //KOLORY
  9. #define COLOR_WHITE 0xFFFFFFFF
  10. #define COLOR_LIGHTGRAY 0xC0C0C0FF
  11. #define COLOR_DARKGRAY 0x808080FF
  12. #define COLOR_PINK 0xFF80C0FF
  13. #define COLOR_DARKCYAN 0x008080FF
  14.  
  15. main() {}
  16. //NATIVEY
  17. native WP_Hash(buffer[], len, const str[]);
  18.  
  19. //FORWARDY
  20. forward bool:IsStrValid(string[]);
  21.  
  22. //USTAWIENIA
  23. #define START_MONEY 1500
  24. #define MAP_ICON_RANGE 600
  25.  
  26. //DIALOGI
  27. #define DIALOG_REGISTER1 0
  28. #define DIALOG_LOGIN 1
  29. #define DIALOG_REGISTER2 2
  30. #define DIALOG_REGISTER3 3
  31.  
  32. //DEFINICJE
  33. #define SCRIPT_NAME "Super Serwer"
  34. #define SCRIPT_VERSION "V1.0"
  35. #define INFO_STRING "{00FF00}[INFO]{FFFFFF}: "
  36. #define ERROR_STRING "{FF0000}[BŁĄD]{FFFFFF}: "
  37. #define MAX_ENTRANCES 50
  38.  
  39. #define GENDER_MALE 1
  40. #define GENDER_FEMALE 0
  41.  
  42. //TEXTDRAWY
  43. new Text:SkinSelector_Title;
  44. new Text:SkinSelector_Right;
  45. new Text:SkinSelector_Left;
  46. new Text:SkinSelector_Accept;
  47.  
  48. //ENUMERATORY
  49. enum PlayerData
  50. {
  51. bool:LoggedIn,
  52. bool:ShowMouse,
  53. bool:IsFreezed,
  54. bool:FirstSpawn,
  55. Cache:Cache_ID,
  56. UID,
  57. Password[129],
  58. Age,
  59. Level,
  60. Gender,
  61. SkinID,
  62. Money,
  63. AdminLVL,
  64. Float:LastPos[4],
  65. LastPosInt,
  66. LastPosVW,
  67. Float:LastHealth,
  68. Float:LastArmour,
  69.  
  70. //Wybor postaci
  71. SelectedSkinID
  72. };
  73. new Player[MAX_PLAYERS][PlayerData];
  74.  
  75. new entranceindex;
  76. enum EntranceData
  77. {
  78. bool:e_freeze,
  79. Float:e_posx,
  80. Float:e_posy,
  81. Float:e_posz,
  82. Float:e_posrot,
  83. e_interior,
  84. e_vw,
  85. e_conid
  86. };
  87. new Entrance[MAX_ENTRANCES][EntranceData];
  88.  
  89. //ZMIENNE GLOBALNE
  90. new MySQL:SQL_ID;
  91. new Skins_Male[][] = {6, 7, 20, 21, 22, 23, 24, 26}; //Mezczyzni
  92. new Skins_Female[][] = {31, 40, 41, 54, 55, 56, 65, 148}; //Kobiety
  93.  
  94. public OnGameModeInit()
  95. {
  96. printf("Włączam skrypt %s %s...\n", SCRIPT_NAME, SCRIPT_VERSION);
  97. if(MySQL_Init())
  98. {
  99. AddPlayerClass(0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
  100.  
  101. //WCZYTYWANIE
  102. MySQL_SetUpTables(); //Tworzy tabele w bazie MySQL jesli nie istnieje
  103. CreateGlobalTD(); //Tworzy globalne TextDrawy
  104.  
  105. //TIMERY
  106. SetTimer("SecondUpdate", 1000, true);
  107.  
  108. //USTAWIENIA
  109. DisableInteriorEnterExits();
  110. EnableStuntBonusForAll(false);
  111. UsePlayerPedAnims();
  112. SetGameModeText("Serwer RP");
  113.  
  114. //IKONKI NA MAPIE
  115. CreateDynamicMapIcon(-2424.9399,337.3700,37.0021, 38, 0, 0, 0, -1, MAP_ICON_RANGE, MAPICON_GLOBAL, -1, 0);
  116.  
  117. //WEJSCIA/WYJSCIA
  118. ConnectEntrances(
  119. CreateEntrance("Urząd obywatela", -2649.3245, 376.1054, 6.1593, 87.0203, 0, 0, -1, 40, false),
  120. CreateEntrance("Urząd obywatela - Wyjście", 390.2535, 173.8476, 1008.3828, 90.0, 3, 1, -1, -1, false));
  121.  
  122. ConnectEntrances(
  123. CreateEntrance("Ammu-Nation", -2625.9133,208.8289,4.6147,1.8954, 0, 0, -1, 18, false),
  124. CreateEntrance("Ammu-Nation - Wyjście", 285.7935,-86.3259,1001.5229,356.4808, 4, 2, -1, -1, false));
  125.  
  126. ConnectEntrances(
  127. CreateEntrance("Siłownia", -2270.1841, -171.1174, 35.3203, 268.7586, 0, 0, -1, 54, false),
  128. CreateEntrance("Siłownia - Wyjście", 774.1893,-50.0189,1000.5859,356.7941, 6, 3, -1, -1, false));
  129.  
  130. ConnectEntrances(
  131. CreateEntrance("Szkoła jazdy", -2026.5427, -101.5651, 35.1641, 0.4915, 0, 0, -1, 36, false),
  132. CreateEntrance("Szkoła jazdy - Wyjście", 1494.4624,1304.0168,1093.2891,0.0, 3, 4, -1, -1, false));
  133.  
  134. ConnectEntrances(
  135. CreateEntrance("San Fierro Police Department", -1605.4698, 710.7346, 13.8672, 357.7381, 0, 0, -1, 30, false),
  136. CreateEntrance("San Fierro Police Department - Wyjście", 246.5194,107.7477,1003.2188,353.0341, 10, 5, -1, -1, false));
  137.  
  138. //-Restauracje-
  139. ConnectEntrances(
  140. CreateEntrance("Burger Shot", -1912.1199, 828.1166, 35.2071, 317.9252, 0, 0, -1, 10, false),
  141. CreateEntrance("Burger Shot - Wyjście", 363.1646,-74.9205,1001.5078,312.1554, 10, 6, -1, -1, false));
  142.  
  143. ConnectEntrances(
  144. CreateEntrance("Burger Shot", -2356.1631, 1008.1310, 50.8984, 86.7594, 0, 0, -1, 10, false),
  145. CreateEntrance("Burger Shot - Wyjście", 363.1646,-74.9205,1001.5078,312.1554, 10, 7, -1, -1, false));
  146.  
  147. ConnectEntrances(
  148. CreateEntrance("Burger Shot", -2336.4722, -166.8134, 35.5547, 271.3614, 0, 0, -1, 10, false),
  149. CreateEntrance("Burger Shot - Wyjście", 363.1646,-74.9205,1001.5078,312.1554, 10, 8, -1, -1, false));
  150.  
  151. ConnectEntrances(
  152. CreateEntrance("Cluckin' Bell", -2671.4756, 258.3640, 4.6328, 359.5883, 0, 0, -1, 14, false),
  153. CreateEntrance("Cluckin' Bell - Wyjście", 364.9311,-11.1630,1001.8516,357.7341, 9, 9, -1, -1, false));
  154.  
  155. ConnectEntrances(
  156. CreateEntrance("Cluckin' Bell", -1816.5823, 618.2886, 35.1719, 175.8732, 0, 0, -1, 14, false),
  157. CreateEntrance("Cluckin' Bell - Wyjście", 364.9311,-11.1630,1001.8516,357.7341, 9, 10, -1, -1, false));
  158.  
  159. ConnectEntrances(
  160. CreateEntrance("Well Stacked Pizza Co.", -1808.4951, 945.5543, 24.8906, 221.4736, 0, 0, -1, 29, false),
  161. CreateEntrance("Well Stacked Pizza Co. - Wyjście", 372.3931,-133.3447,1001.4922,358.3374, 5, 11, -1, -1, false));
  162.  
  163. ConnectEntrances(
  164. CreateEntrance("Well Stacked Pizza Co.", -1721.3975, 1359.7289, 7.1853, 88.8329, 0, 0, -1, 29, false),
  165. CreateEntrance("Well Stacked Pizza Co. - Wyjście", 372.3931,-133.3447,1001.4922,358.3374, 5, 12, -1, -1, false));
  166.  
  167. printf("Skrypt %s %s został pomyślnie włączony!\n", SCRIPT_NAME, SCRIPT_VERSION);
  168. }
  169. return 1;
  170. }
  171.  
  172. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  173. {
  174. #define PRESSED(%0) \
  175. (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  176. if(PRESSED(KEY_SECONDARY_ATTACK))
  177. {
  178. if(!IsPlayerInAnyVehicle(playerid))
  179. {
  180. if(Player[playerid][IsFreezed] == false)
  181. {
  182. new p_vw = GetPlayerVirtualWorld(playerid);
  183. new p_int = GetPlayerInterior(playerid);
  184. for(new i; i < entranceindex; i++)
  185. {
  186. if(IsPlayerInRangeOfPoint(playerid, 1.0, Entrance[i][e_posx], Entrance[i][e_posy], Entrance[i][e_posz]) &&
  187. Entrance[i][e_interior] == p_int && Entrance[i][e_vw] == p_vw)
  188. {
  189. new conid = Entrance[i][e_conid];
  190. SetPlayerPos(playerid, Entrance[conid][e_posx], Entrance[conid][e_posy], Entrance[conid][e_posz]);
  191. SetPlayerFacingAngle(playerid, Entrance[conid][e_posrot]);
  192. SetPlayerInterior(playerid, Entrance[conid][e_interior]);
  193. SetPlayerVirtualWorld(playerid, Entrance[conid][e_vw]);
  194. SetCameraBehindPlayer(playerid);
  195. if(Entrance[conid][e_freeze])
  196. FreezePlayer(playerid, 3000, "Wczytuje obiekty...");
  197. break;
  198. }
  199. }
  200. }
  201. }
  202. }
  203. return 1;
  204. }
  205.  
  206. public OnGameModeExit()
  207. {
  208. mysql_close(SQL_ID); //Rozlacza z bazy
  209. return 1;
  210. }
  211.  
  212. public OnPlayerRequestSpawn(playerid)
  213. {
  214.  
  215. return 1;
  216. }
  217.  
  218. public OnPlayerRequestClass(playerid, classid)
  219. {
  220. SpawnPlayer(playerid);
  221. return 1;
  222. }
  223.  
  224. public OnPlayerText(playerid, text[])
  225. {
  226. new message[258];
  227. format(message, sizeof message, "%s[%i] mówi: %s", PlayerName(playerid), playerid, text);
  228. SendClientMessageInRange(playerid, COLOR_LIGHTGRAY, 15.0, message);
  229. return 0;
  230. }
  231.  
  232. public OnPlayerConnect(playerid)
  233. {
  234. if(IsRPName(PlayerName(playerid)))
  235. {
  236. ClearPlayerChat(playerid);
  237. 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.
  238. }
  239. else
  240. {
  241. SendClientMessage(playerid, -1, ERROR_STRING"Twoja nazwa jest niezgodna zasadami Role-Play, uzyj formatu Nazwa_Nazwisko!");
  242. KickEx(playerid);
  243. }
  244. return 1;
  245. }
  246.  
  247. public OnPlayerDisconnect(playerid, reason)
  248. {
  249. new query[258];
  250. if(Player[playerid][LoggedIn])
  251. {
  252. SaveAccount(playerid); //Zapisuje dane gracza
  253. mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET lastonline = NOW() WHERE uid = %i", Player[playerid][UID]);
  254. mysql_tquery(SQL_ID, query);
  255. }
  256. ResetPlayerData(playerid); //Resetuje dane gracza
  257. return 1;
  258. }
  259.  
  260. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  261. {
  262. switch(dialogid)
  263. {
  264. case DIALOG_LOGIN: //Login gracza
  265. {
  266. if(response)
  267. {
  268. if(strlen(inputtext) && IsStrValid(inputtext))
  269. {
  270. new buff[129], query[258], ip[18];
  271. WP_Hash(buff, 129, inputtext); //Szyfruje haslo ktory podal gracza by sprawdzic haslo z bazy.
  272. if(strcmp(Player[playerid][Password], buff, true) == 0)
  273. {
  274. //Haslo sie zgadza
  275. AssignPlayerData(playerid); //Ustawia graczowi dane do pamieci.
  276. Player[playerid][LoggedIn] = true;
  277. Player[playerid][FirstSpawn] = true;
  278. ResetPlayerMoney(playerid);
  279. GivePlayerMoney(playerid, Player[playerid][Money]);
  280. SetPlayerScore(playerid, Player[playerid][Level]);
  281. SpawnPlayer(playerid);
  282. ClearPlayerChat(playerid);
  283. SendClientMessage(playerid, -1, INFO_STRING"Zostałeś pomyślnie zalogowany! Miłej gry!");
  284. GetPlayerIp(playerid, ip, 18);
  285. mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET lastip = '%s', lastonline = NOW() WHERE uid = %i", ip, Player[playerid][UID]);
  286. mysql_tquery(SQL_ID, query);
  287. }
  288. else
  289. {
  290. //Haslo sie nie zgadza
  291. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
  292. SendClientMessage(playerid, -1, ERROR_STRING"Podano błędne hasło! Spróbuj ponownie!");
  293. }
  294. }
  295. else
  296. {
  297. //Haslo sie nie zgadza
  298. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
  299. SendClientMessage(playerid, -1, ERROR_STRING"Podano błędne hasło! Spróbuj ponownie!");
  300. }
  301. }
  302. else KickEx(playerid);
  303. }
  304. case DIALOG_REGISTER3: //Rejestracja Wiek postaci
  305. {
  306. if(response)
  307. {
  308. if(IsNumeric(inputtext) && strlen(inputtext) == 2 && strval(inputtext) >= 18 && strval(inputtext) <= 60)
  309. {
  310. Player[playerid][Age] = strval(inputtext);
  311. SetPlayerCameraPos(playerid, -2168.2939,642.1371,1057.5938);
  312. SetPlayerCameraLookAt(playerid, -2165.8633,644.5464,1057.5000, CAMERA_MOVE);
  313. Player[playerid][SelectedSkinID] = 0;
  314. new sskin = Player[playerid][SelectedSkinID];
  315. if(Player[playerid][Gender] == GENDER_MALE)
  316. {
  317. SetPlayerSkin(playerid, Skins_Male[sskin][0]);
  318. Player[playerid][SkinID] = Skins_Male[sskin][0];
  319. }
  320. else
  321. {
  322. SetPlayerSkin(playerid, Skins_Female[sskin][0]);
  323. Player[playerid][SkinID] = Skins_Female[sskin][0];
  324. }
  325. TextDrawShowForPlayer(playerid, SkinSelector_Title);
  326. TextDrawShowForPlayer(playerid, SkinSelector_Right);
  327. TextDrawShowForPlayer(playerid, SkinSelector_Left);
  328. TextDrawShowForPlayer(playerid, SkinSelector_Accept);
  329. }
  330. else
  331. {
  332. ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_INPUT, "Rejestracja", "Wybierz wiek Twojej postaci.", "Potwierdz", "Wyjdz");
  333. SendClientMessage(playerid, -1, ERROR_STRING"Wiek postaci musi byc od 18-60 lat!");
  334. }
  335. }
  336. else KickEx(playerid);
  337. }
  338. case DIALOG_REGISTER2: //Rejestracja Plec postaci
  339. {
  340. Player[playerid][Gender] = response;
  341. ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_INPUT, "Rejestracja", "Wybierz wiek Twojej postaci.", "Potwierdz", "Wyjdz");
  342. }
  343. case DIALOG_REGISTER1: //Rejestracja konta haslo
  344. {
  345. if(response)
  346. {
  347. if(strlen(inputtext) >= 6 && IsStrValid(inputtext))
  348. {
  349. WP_Hash(Player[playerid][Password], 129, inputtext); //Szyfruje haslo ktory potem wpiszemy do bazy.
  350. ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_MSGBOX, "Rejestracja", "Wybierz płeć swojej postaci.", "Mężczyzna", "Kobieta");
  351. }
  352. else
  353. {
  354. ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "Rejestracja", "Aby zagrać na serwerze, musisz stworzyć konto.\nPodaj poniżej swoje hasło.", "Potwierdz", "Wyjdz");
  355. SendClientMessage(playerid, -1, ERROR_STRING"Hasło musi zawierać przynajmniej 6 znaków i nie może posiadać przerw i znaków specjalnych!");
  356. }
  357. }
  358. else KickEx(playerid);
  359. }
  360. }
  361. return 0;
  362. }
  363.  
  364. public OnPlayerClickTextDraw(playerid, Text:clickedid)
  365. {
  366. if(clickedid == SkinSelector_Right) //Wybor postaci nastepna postac
  367. {
  368. if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
  369. {
  370. if(Player[playerid][SelectedSkinID] == (sizeof Skins_Male - 1))
  371. Player[playerid][SelectedSkinID] = 0;
  372. else
  373. Player[playerid][SelectedSkinID]++;
  374. new sskin = Player[playerid][SelectedSkinID];
  375. SetPlayerSkin(playerid, Skins_Male[sskin][0]);
  376. Player[playerid][SkinID] = Skins_Male[sskin][0];
  377. }
  378. else //Kobiety
  379. {
  380. if(Player[playerid][SelectedSkinID] == (sizeof Skins_Female - 1))
  381. Player[playerid][SelectedSkinID] = 0;
  382. else
  383. Player[playerid][SelectedSkinID]++;
  384. new sskin = Player[playerid][SelectedSkinID];
  385. SetPlayerSkin(playerid, Skins_Female[sskin][0]);
  386. Player[playerid][SkinID] = Skins_Female[sskin][0];
  387. }
  388. }
  389. if(clickedid == SkinSelector_Left) //Wybor postaci poprzednia postac
  390. {
  391. if(Player[playerid][Gender] == GENDER_MALE) //Mezczyzni
  392. {
  393. if(Player[playerid][SelectedSkinID] == 0)
  394. Player[playerid][SelectedSkinID] = (sizeof Skins_Male - 1);
  395. else
  396. Player[playerid][SelectedSkinID]--;
  397. new sskin = Player[playerid][SelectedSkinID];
  398. SetPlayerSkin(playerid, Skins_Male[sskin][0]);
  399. Player[playerid][SkinID] = Skins_Male[sskin][0];
  400. }
  401. else //Kobiety
  402. {
  403. if(Player[playerid][SelectedSkinID] == 0)
  404. Player[playerid][SelectedSkinID] = (sizeof Skins_Female - 1);
  405. else
  406. Player[playerid][SelectedSkinID]--;
  407. new sskin = Player[playerid][SelectedSkinID];
  408. SetPlayerSkin(playerid, Skins_Female[sskin][0]);
  409. Player[playerid][SkinID] = Skins_Female[sskin][0];
  410. }
  411. }
  412. if(clickedid == SkinSelector_Accept) //Wybor postaci akzeptacja.
  413. {
  414. TextDrawHideForPlayer(playerid, SkinSelector_Title);
  415. TextDrawHideForPlayer(playerid, SkinSelector_Right);
  416. TextDrawHideForPlayer(playerid, SkinSelector_Left);
  417. TextDrawHideForPlayer(playerid, SkinSelector_Accept);
  418. CreateAccount(playerid); //Tworzy konto dla gracza
  419. }
  420. return 1;
  421. }
  422.  
  423. public OnPlayerSpawn(playerid)
  424. {
  425. new query[258];
  426. if(Player[playerid][LoggedIn] == false)
  427. {
  428. new ip[18];
  429. //NIE ZALOGOWANY
  430. SetPlayerSkin(playerid, GetRandomSkin()); //Skin gracza podczas okna logowania i rejestracji, jest wybrany losowo.
  431. SetPlayerPos(playerid, -2165.8633,644.5464,1057.5938); //Pozycja postaci podczas okna logowania i rejestracji
  432. SetPlayerFacingAngle(playerid, 90.0000); //Rotacja gracza okna logowania i rejestracji
  433. SetPlayerInterior(playerid, 1); //Ustawia Interior
  434. //
  435. SetPlayerVirtualWorld(playerid, 50 + playerid); //UStawia kazdego gracza w swoim Wirtualnym swiecie.
  436. SetPlayerCameraPos(playerid, -2160.5630,642.1472,1058.5938); //Pozycja kamera.
  437. SetPlayerCameraLookAt(playerid, -2167.0398,644.4033,1059.1016); //Gdzie kamera sie ma patrzec.
  438. TogglePlayerControllable(playerid, false); //Zamraza gracza
  439. ShowPlayerMouse(playerid, true); //Pokazuje myszke
  440. GetPlayerIp(playerid, ip, 18); //Pobiera IP gracza
  441. mysql_format(SQL_ID, query, sizeof query, "SELECT * FROM accounts WHERE name = '%s' LIMIT 1", PlayerName(playerid));
  442. mysql_tquery(SQL_ID, query, "OnAccountCheck", "iss", playerid, ip, PlayerName(playerid));
  443. }
  444. else
  445. {
  446. //ZALOGOWANY
  447. if(Player[playerid][FirstSpawn] && Player[playerid][LastPos] != 0)
  448. {
  449. SetPlayerPos(playerid, Player[playerid][LastPos][0], Player[playerid][LastPos][1], Player[playerid][LastPos][2]);
  450. SetPlayerFacingAngle(playerid, Player[playerid][LastPos][3]);
  451. SetPlayerInterior(playerid, Player[playerid][LastPosInt]);
  452. SetPlayerVirtualWorld(playerid, Player[playerid][LastPosVW]);
  453. SetPlayerHealth(playerid, Player[playerid][LastHealth]);
  454. SetPlayerArmour(playerid, Player[playerid][LastArmour]);
  455. }
  456. else
  457. {
  458. SetPlayerPos(playerid, -2424.9399,337.3700,37.0021); //Pozycja Spawnu gracza
  459. SetPlayerFacingAngle(playerid, 242.0000); //Rotacja Spawnu gracza
  460. SetPlayerInterior(playerid, 0); //Ustawia interior.
  461. SetPlayerVirtualWorld(playerid, 0); //UStawia wirtualny swiat na 0 by zobaczyc innych graczy.
  462. }
  463. SetPlayerSkin(playerid, Player[playerid][SkinID]); //Skin gracza
  464. TogglePlayerControllable(playerid, true); //Odmraza gracza.
  465. SetCameraBehindPlayer(playerid); //Ustawia kamere za gracza.
  466. ShowPlayerMouse(playerid, false); //Chowa myszke gracza.
  467. Player[playerid][FirstSpawn] = false;
  468. }
  469. return 1;
  470. }
  471.  
  472. //CALLBACKI MYSQL
  473. forward OnAccountCreate(playerid);
  474. public OnAccountCreate(playerid)
  475. {
  476. SendClientMessage(playerid, -1, INFO_STRING"Konto zostało pomyślnie stworzony!");
  477. SpawnPlayer(playerid);
  478. return 1;
  479. }
  480.  
  481. forward OnAccountCheck(playerid, ip[], name[]);
  482. public OnAccountCheck(playerid, ip[], name[])
  483. {
  484. //Sprawdza czy dane ktory pobral z bazy, nalezy nadal dla tego gracza.
  485. if(!IsPlayerConnected(playerid)) //Czy jest nadal polaczony?
  486. return 1;
  487. new tmpip[18];
  488. GetPlayerIp(playerid, tmpip, 18);
  489. if(strcmp(ip, tmpip, true) != 0 && strcmp(name, PlayerName(playerid), true) != 0) //Czy IP i Nazwa gracza sie zgadza?
  490. return KickEx(playerid);
  491. //Sprawdzamy czy konto istnieje.
  492. if(cache_num_rows() > 0)
  493. {
  494. //ZNALAZL KONTO
  495. cache_get_value(0, "password", Player[playerid][Password], 129); //Pobieramy haslo gracza z bazy
  496. Player[playerid][Cache_ID] = cache_save(); //Zapiszemy cache i ID wpiszemy do enumeratora by pozniej moc pobrac dane.
  497. ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Twoje konto zostało odnalezione!\nPodaj poniżej swoje hasło aby się zalogować!", "Zaloguj", "Wyjdz");
  498. }
  499. else
  500. {
  501. //NIE ZNALAZL KONTO
  502. ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "Rejestracja", "Aby zagrać na serwerze, musisz stworzyć konto.\nPodaj poniżej swoje hasło.", "Potwierdz", "Wyjdz");
  503. }
  504. return 1;
  505. }
  506.  
  507. //TIMERY
  508.  
  509. forward UnFreezePlayer(playerid);
  510. public UnFreezePlayer(playerid)
  511. {
  512. Player[playerid][IsFreezed] = false;
  513. TogglePlayerControllable(playerid, true);
  514. return 1;
  515. }
  516.  
  517. forward DelayKick(playerid);
  518. public DelayKick(playerid)
  519. return Kick(playerid);
  520.  
  521. forward SecondUpdate();
  522. public SecondUpdate()
  523. {
  524. for(new playerid, j = GetPlayerPoolSize(); playerid <= j; playerid++)
  525. {
  526. if(IsPlayerConnected(playerid))
  527. {
  528. if(Player[playerid][ShowMouse])
  529. {
  530. ShowPlayerMouse(playerid, true);
  531. }
  532. }
  533. }
  534. return 1;
  535. }
  536. //KOMENDY
  537. CMD:ooc(playerid, params[])
  538. {
  539. new message[128], string[192];
  540. if(sscanf(params, "s[128]", message)) SendClientMessage(playerid, -1, "UŻYJ: /OOC [Wiadomość]");
  541. else
  542. {
  543. format(string, sizeof string, "OOC | %s[%i]: %s", PlayerName(playerid), playerid, message);
  544. SendClientMessageToAll(COLOR_WHITE, string);
  545. }
  546. return 1;
  547. }
  548.  
  549. CMD:k(playerid, params[])
  550. {
  551. new message[128], string[192];
  552. if(sscanf(params, "s[128]", message)) SendClientMessage(playerid, -1, "UŻYJ: /K [Wiadomość]");
  553. else
  554. {
  555. format(string, sizeof string, "%s[%i] krzyczy: %s", PlayerName(playerid), playerid, message);
  556. SendClientMessageInRange(playerid, COLOR_WHITE, 30.0, string);
  557. }
  558. return 1;
  559. }
  560.  
  561. CMD:s(playerid, params[])
  562. {
  563. new message[128], string[192];
  564. if(sscanf(params, "s[128]", message)) SendClientMessage(playerid, -1, "UŻYJ: /S [Wiadomość]");
  565. else
  566. {
  567. format(string, sizeof string, "%s[%i] szepcze: %s", PlayerName(playerid), playerid, message);
  568. SendClientMessageInRange(playerid, COLOR_DARKGRAY, 5.0, string);
  569. }
  570. return 1;
  571. }
  572.  
  573. CMD:me(playerid, params[])
  574. {
  575. new message[128], string[192];
  576. if(sscanf(params, "s[128]", message)) SendClientMessage(playerid, -1, "UŻYJ: /ME [Czynność]");
  577. else
  578. {
  579. format(string, sizeof string, "* %s %s", PlayerName(playerid), message);
  580. SendClientMessageInRange(playerid, COLOR_PINK, 15.0, string);
  581. }
  582. return 1;
  583. }
  584.  
  585. CMD:do(playerid, params[])
  586. {
  587. new message[128], string[192];
  588. if(sscanf(params, "s[128]", message)) SendClientMessage(playerid, -1, "UŻYJ: /DO [Opis sytuacji]");
  589. else
  590. {
  591. format(string, sizeof string, "[%i] ( %s )", playerid, message);
  592. SendClientMessageInRange(playerid, COLOR_DARKCYAN, 15.0, string);
  593. }
  594. return 1;
  595. }
  596.  
  597. //STOCKI
  598. stock SendClientMessageInRange(playerid, color, Float:range, text[])
  599. {
  600. new Float:x, Float:y, Float:z;
  601. GetPlayerPos(playerid, x, y, z);
  602. for(new i, j = GetPlayerPoolSize(); i <= j; i++)
  603. {
  604. if(IsPlayerConnected(i))
  605. {
  606. if(IsPlayerInRangeOfPoint(i, range, x, y, z))
  607. {
  608. SendClientMessage(i, color, text);
  609. }
  610. }
  611. }
  612. return 1;
  613. }
  614.  
  615. stock FreezePlayer(playerid, interval, text[])
  616. {
  617. new string[128];
  618. format(string, sizeof string, "~y~%s", text);
  619. TogglePlayerControllable(playerid, false);
  620. SetTimerEx("UnFreezePlayer", interval, false, "i", playerid);
  621. GameTextForPlayer(playerid, string, interval, 3);
  622. Player[playerid][IsFreezed] = true;
  623. return 1;
  624. }
  625.  
  626. stock ConnectEntrances(id1, id2)
  627. {
  628. Entrance[id1][e_conid] = id2;
  629. Entrance[id2][e_conid] = id1;
  630. return 1;
  631. }
  632.  
  633. stock CreateEntrance(name[], Float:x, Float:y, Float:z, Float:rot, interior, virtualworld, pickupid = -1, mapiconid = -1, bool:freezeplayer = false)
  634. {
  635. new string[128];
  636. new entid = entranceindex;
  637. Entrance[entid][e_posx] = x;
  638. Entrance[entid][e_posy] = y;
  639. Entrance[entid][e_posz] = z;
  640. Entrance[entid][e_posrot] = rot;
  641. Entrance[entid][e_interior] = interior;
  642. Entrance[entid][e_vw] = virtualworld;
  643. Entrance[entid][e_freeze] = freezeplayer;
  644. if(pickupid == -1)
  645. pickupid = 1318;
  646. if(mapiconid != -1)
  647. CreateDynamicMapIcon(x, y, z, mapiconid, 0, virtualworld, interior, -1, MAP_ICON_RANGE, MAPICON_GLOBAL, -1);
  648. CreateDynamicPickup(pickupid, 1, x, y, z, virtualworld, interior);
  649. format(string, sizeof string, "{FF8040}%s\n{FFFFFF}Użyj: {FF0000}ENTER", name);
  650. CreateDynamic3DTextLabel(string, -1, x, y, z, 10, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, virtualworld, interior, -1, 10);
  651. entranceindex++;
  652. return entid;
  653. }
  654.  
  655. stock GetRandomSkin()
  656. {
  657. new rgender = random(2);
  658. if(rgender == 1)
  659. {
  660. new rand = random(sizeof Skins_Male);
  661. return Skins_Male[rand][0];
  662. }
  663. else if(rgender == 0)
  664. {
  665. new rand = random(sizeof Skins_Female);
  666. return Skins_Female[rand][0];
  667. }
  668. return 0;
  669. }
  670.  
  671. stock KickEx(playerid, delay = 1000)
  672. return SetTimerEx("DelayKick", delay, false, "i", playerid);
  673.  
  674. stock ResetPlayerData(playerid)
  675. {
  676. if(cache_is_valid(Player[playerid][Cache_ID]))
  677. {
  678. cache_delete(Player[playerid][Cache_ID]);
  679. Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  680. }
  681. static const null_players[PlayerData];
  682. Player[playerid] = null_players;
  683. return 1;
  684. }
  685.  
  686. stock IsRPName(name[], minname = 3, bool:firstupperthenlower = true) //By Nickk888
  687. {
  688. new count, checknumcount, where, tmpname[24], tmpsname[24];
  689. new len = strlen(name);
  690. for(new i; i < len; i++) {
  691. if(name[i] == '_')
  692. count++,
  693. where = i;
  694. switch(name[i]) {
  695. case 'A'..'Z', 'a'..'z', '_':
  696. checknumcount++;
  697. }
  698. }
  699. if(count != 1 || (where < minname || len < ((where + 1) + minname)) || checknumcount != len)
  700. return 0;
  701. strmid(tmpname, name, 0, where);
  702. strmid(tmpsname, name, where+1, len);
  703. checknumcount = 0;
  704. if(firstupperthenlower) {
  705. switch(tmpname[0]) {
  706. case 'A'..'Z':
  707. checknumcount++;
  708. }
  709. for(new i = 1, j = strlen(tmpname); i < j; i++){
  710. switch(tmpname[i]) {
  711. case 'a'..'z':
  712. checknumcount++;
  713. }
  714. }
  715. switch(tmpsname[0]) {
  716. case 'A'..'Z':
  717. checknumcount++;
  718. }
  719. for(new i = 1, j = strlen(tmpsname); i < j; i++){
  720. switch(tmpsname[i]) {
  721. case 'a'..'z':
  722. checknumcount++;
  723. }
  724. }
  725. if((checknumcount + 1) != len)
  726. return 0;
  727. }
  728. return 1;
  729. }
  730.  
  731. stock IsNumeric(const string[])
  732. {
  733. for (new i = 0, j = strlen(string); i < j; i++)
  734. {
  735. if (string[i] > '9' || string[i] < '0') return 0;
  736. }
  737. return 1;
  738. }
  739.  
  740. stock bool:IsStrValid(string[])
  741. {
  742. new num;
  743. new len = strlen(string);
  744. for(new i; i < len; i++)
  745. switch(string[i])
  746. {
  747. case 'A'..'Z':num++;
  748. case 'a'..'z':num++;
  749. case '0'..'9':num++;
  750. }
  751. if(num == len) return true;
  752. else return false;
  753. }
  754.  
  755. stock PlayerName(playerid)
  756. {
  757. new name[MAX_PLAYER_NAME];
  758. GetPlayerName(playerid, name, sizeof name);
  759. return name;
  760. }
  761.  
  762. stock ClearPlayerChat(playerid)
  763. {
  764. for(new i; i < 15; i++)
  765. SendClientMessage(playerid, -1, "");
  766. return 1;
  767. }
  768.  
  769. stock ShowPlayerMouse(playerid, bool:show)
  770. {
  771. if(show)
  772. {
  773. SelectTextDraw(playerid, 0xFF0000FF);
  774. Player[playerid][ShowMouse] = true;
  775. }
  776. else
  777. {
  778. CancelSelectTextDraw(playerid);
  779. Player[playerid][ShowMouse] = false;
  780. }
  781. return 1;
  782. }
  783.  
  784. stock AssignPlayerData(playerid)
  785. {
  786. cache_set_active(Player[playerid][Cache_ID]); //Ponownie aktywujemy Cache gracza.
  787.  
  788. //Pobieramy dane z cache
  789. cache_get_value_int(0, "uid", Player[playerid][UID]);
  790. cache_get_value_int(0, "skinid", Player[playerid][SkinID]);
  791. cache_get_value_int(0, "money", Player[playerid][Money]);
  792. cache_get_value_int(0, "gender", Player[playerid][Gender]);
  793. cache_get_value_int(0, "age", Player[playerid][Age]);
  794. cache_get_value_int(0, "level", Player[playerid][Level]);
  795. cache_get_value_int(0, "adminlvl", Player[playerid][AdminLVL]);
  796. cache_get_value_float(0, "lastposx", Player[playerid][LastPos][0]);
  797. cache_get_value_float(0, "lastposy", Player[playerid][LastPos][1]);
  798. cache_get_value_float(0, "lastposz", Player[playerid][LastPos][2]);
  799. cache_get_value_float(0, "lastposrot", Player[playerid][LastPos][3]);
  800. cache_get_value_int(0, "lastposint", Player[playerid][LastPosInt]);
  801. cache_get_value_int(0, "lastposvw", Player[playerid][LastPosVW]);
  802. cache_get_value_float(0, "lasthealth", Player[playerid][LastHealth]);
  803. cache_get_value_float(0, "lastarmour", Player[playerid][LastArmour]);
  804.  
  805. cache_delete(Player[playerid][Cache_ID]); //Usuwa caly Cache
  806. Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE; //Resetujemy Cache ID
  807. return 1;
  808. }
  809.  
  810. stock SaveAccount(playerid)
  811. {
  812. new query[258];
  813. new Float:tempPos[4], Float:health, Float:armour;
  814. GetPlayerHealth(playerid, health);
  815. GetPlayerArmour(playerid, armour);
  816. GetPlayerPos(playerid, tempPos[0], tempPos[1], tempPos[2]);
  817. GetPlayerFacingAngle(playerid, tempPos[3]);
  818. if(health > 100) health = 100;
  819. if(armour > 100) armour = 100;
  820. mysql_format(SQL_ID, query, sizeof query, "UPDATE accounts SET money = %i, skinid = %i, level = %i, lastposx = %f, lastposy = %f, \
  821. lastposz = %f, lastposrot = %f, lastposint = %i, lastposvw = %i, lasthealth = %f, lastarmour = %f WHERE uid = %i",
  822. GetPlayerMoney(playerid),
  823. GetPlayerSkin(playerid),
  824. GetPlayerScore(playerid),
  825. tempPos[0], tempPos[1], tempPos[2], tempPos[3],
  826. GetPlayerInterior(playerid),
  827. GetPlayerVirtualWorld(playerid),
  828. health, armour,
  829. Player[playerid][UID]);
  830. mysql_tquery(SQL_ID, query);
  831. return 1;
  832. }
  833.  
  834. stock CreateAccount(playerid)
  835. {
  836. new query[258], string[258];
  837. strcat(query, "INSERT INTO accounts(");
  838. //
  839. strcat(query, "name,");
  840. strcat(query, "password,");
  841. strcat(query, "skinid,");
  842. strcat(query, "age,");
  843. strcat(query, "gender,");
  844. strcat(query, "money");
  845. //
  846. strcat(query, ") VALUES (");
  847. //
  848. format(string, 258, "'%s',", PlayerName(playerid));
  849. strcat(query, string);
  850. format(string, 258, "'%s',", Player[playerid][Password]);
  851. strcat(query, string);
  852. format(string, 258, "'%i',", Player[playerid][SkinID]);
  853. strcat(query, string);
  854. format(string, 258, "'%i',", Player[playerid][Age]);
  855. strcat(query, string);
  856. format(string, 258, "'%i',", Player[playerid][Gender]);
  857. strcat(query, string);
  858. format(string, 258, "'%i'", START_MONEY);
  859. strcat(query, string);
  860. //
  861. strcat(query, ")");
  862. mysql_tquery(SQL_ID, query, "OnAccountCreate", "i", playerid);
  863. return 1;
  864. }
  865.  
  866. stock MySQL_SetUpTables()
  867. {
  868. mysql_tquery(SQL_ID, "CREATE TABLE IF NOT EXISTS `accounts` ( \
  869. `uid` INT(11) NOT NULL AUTO_INCREMENT, \
  870. `name` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
  871. `password` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
  872. `skinid` INT(11) NOT NULL, \
  873. `money` INT(11) NOT NULL DEFAULT '0', \
  874. `gender` INT(11) NOT NULL, \
  875. `age` INT(11) NOT NULL, \
  876. `level` INT(11) NOT NULL DEFAULT '1', \
  877. `adminlvl` INT(11) NOT NULL DEFAULT '0', \
  878. `lastip` TEXT NOT NULL COLLATE 'utf8_polish_ci', \
  879. `lastonline` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
  880. `createdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, \
  881. PRIMARY KEY (`uid`))");
  882. return 1;
  883. }
  884.  
  885. stock MySQL_Init()
  886. {
  887. mysql_log();
  888. SQL_ID = mysql_connect_file("mysql.ini"); //Probujemy sie polaczyc z baza MySQL
  889. if(SQL_ID == MYSQL_INVALID_HANDLE || mysql_errno(SQL_ID) != 0)
  890. {
  891. //Jesli polaczenie sie nie powiodlo
  892. print("[MYSQL - BŁĄD] Nie można było połączyć się z baza danych! Wyłączam serwer...");
  893. SendRconCommand("exit");
  894. return 0;
  895. }
  896. //Jesli sie powiodlo
  897. print("[MYSQL] Połączenie z bazą danych została nawiązana!");
  898. return 1;
  899. }
  900.  
  901. stock CreateGlobalTD()
  902. {
  903. SkinSelector_Title = TextDrawCreate(316.000000, 370.000000, "WYBIERZ POSTAC");
  904. TextDrawFont(SkinSelector_Title, 2);
  905. TextDrawLetterSize(SkinSelector_Title, 0.291666, 2.049999);
  906. TextDrawTextSize(SkinSelector_Title, 400.000000, 405.000000);
  907. TextDrawSetOutline(SkinSelector_Title, 1);
  908. TextDrawSetShadow(SkinSelector_Title, 0);
  909. TextDrawAlignment(SkinSelector_Title, 2);
  910. TextDrawColor(SkinSelector_Title, -1378294017);
  911. TextDrawBackgroundColor(SkinSelector_Title, 255);
  912. TextDrawBoxColor(SkinSelector_Title, 50);
  913. TextDrawUseBox(SkinSelector_Title, 0);
  914. TextDrawSetProportional(SkinSelector_Title, 1);
  915. TextDrawSetSelectable(SkinSelector_Title, 0);
  916.  
  917. SkinSelector_Right = TextDrawCreate(351.000000, 392.000000, ">>>");
  918. TextDrawFont(SkinSelector_Right, 2);
  919. TextDrawLetterSize(SkinSelector_Right, 0.258332, 1.750000);
  920. TextDrawTextSize(SkinSelector_Right, 16.500000, 33.500000);
  921. TextDrawSetOutline(SkinSelector_Right, 1);
  922. TextDrawSetShadow(SkinSelector_Right, 0);
  923. TextDrawAlignment(SkinSelector_Right, 2);
  924. TextDrawColor(SkinSelector_Right, -1);
  925. TextDrawBackgroundColor(SkinSelector_Right, 255);
  926. TextDrawBoxColor(SkinSelector_Right, 76);
  927. TextDrawUseBox(SkinSelector_Right, 1);
  928. TextDrawSetProportional(SkinSelector_Right, 1);
  929. TextDrawSetSelectable(SkinSelector_Right, 1);
  930.  
  931. SkinSelector_Left = TextDrawCreate(281.000000, 392.000000, "<<<");
  932. TextDrawFont(SkinSelector_Left, 2);
  933. TextDrawLetterSize(SkinSelector_Left, 0.258332, 1.750000);
  934. TextDrawTextSize(SkinSelector_Left, 16.500000, 33.500000);
  935. TextDrawSetOutline(SkinSelector_Left, 1);
  936. TextDrawSetShadow(SkinSelector_Left, 0);
  937. TextDrawAlignment(SkinSelector_Left, 2);
  938. TextDrawColor(SkinSelector_Left, -1);
  939. TextDrawBackgroundColor(SkinSelector_Left, 255);
  940. TextDrawBoxColor(SkinSelector_Left, 76);
  941. TextDrawUseBox(SkinSelector_Left, 1);
  942. TextDrawSetProportional(SkinSelector_Left, 1);
  943. TextDrawSetSelectable(SkinSelector_Left, 1);
  944.  
  945. SkinSelector_Accept = TextDrawCreate(316.000000, 392.000000, "OK");
  946. TextDrawFont(SkinSelector_Accept, 2);
  947. TextDrawLetterSize(SkinSelector_Accept, 0.258332, 1.750000);
  948. TextDrawTextSize(SkinSelector_Accept, 16.500000, 23.500000);
  949. TextDrawSetOutline(SkinSelector_Accept, 1);
  950. TextDrawSetShadow(SkinSelector_Accept, 0);
  951. TextDrawAlignment(SkinSelector_Accept, 2);
  952. TextDrawColor(SkinSelector_Accept, -1);
  953. TextDrawBackgroundColor(SkinSelector_Accept, 255);
  954. TextDrawBoxColor(SkinSelector_Accept, 76);
  955. TextDrawUseBox(SkinSelector_Accept, 1);
  956. TextDrawSetProportional(SkinSelector_Accept, 1);
  957. TextDrawSetSelectable(SkinSelector_Accept, 1);
  958. return 1;
  959. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement