Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.94 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_mysql>
  3. #include <izcmd>
  4. #include <foreach>
  5. #include <sscanf2>
  6. #include <easyDialog>
  7. #include <streamer>
  8.  
  9. #define SQL_HOST                        "127.0.0.1"
  10. #define SQL_USER                        "root"
  11. #define SQL_PASS                        ""                
  12. #define SQL_DB                          "sg"                
  13.  
  14. #define SERVER_NAME                     "StarGaming"
  15. #define SERVER_MODE                     "SG:RP"
  16. #define SERVER_VERSION                  "v0.0.1"
  17.  
  18. #define LOGIN_SUCCESS "Ingreso exitoso."
  19. #define LOGIN_TEXT_1 "Ingresa tu password:"
  20. #define BAD_LOGIN_2 "Contraseña incorrecta"
  21.  
  22.  
  23. #define SECONDS_TO_LOGIN                (30)                    // tiempo máximo de log
  24.  
  25. #define DEFAULT_POS_X                   (1958.3783)
  26. #define DEFAULT_POS_Y                   (1343.1572)
  27. #define DEFAULT_POS_Z                   (15.3746)
  28. #define DEFAULT_POS_A                   (270.1425)
  29.  
  30. #define COLOR_LIGHTRED                  (0xFF6347AA)
  31. #define COLOR_ORANGE                    (0xFF9900FF)
  32. #define COLOR_GREY                      (0xAFAFAFAA)
  33. #define COLOR_PURPLE                    (0xC2A2DAAA)
  34. #define COLOR_FADE1                     (0xFFFFFFFF)
  35. #define COLOR_FADE2                     (0xC8C8C8C8)
  36. #define COLOR_FADE3                     (0xAAAAAAAA)
  37. #define COLOR_FADE4                     (0x8C8C8C8C)
  38. #define COLOR_FADE5                     (0x6E6E6E6E)
  39.  
  40. #if !defined IsValidVehicle
  41.      native IsValidVehicle(vehicleid);
  42. #endif
  43.  
  44. new
  45.     MySQL: g_SQL,
  46.     g_MysqlRaceCheck[MAX_PLAYERS];
  47.  
  48. new
  49.     String[2048],
  50.     query[1024];
  51.  
  52. new
  53.     gmLoaded = 0;
  54.  
  55. enum pData
  56. {
  57.     ID,
  58.     Name[MAX_PLAYER_NAME],
  59.     Password[65],
  60.     Salt[17],
  61.     Admin,
  62.     Skin,
  63.     Float: Health,
  64.     Float: Armor,
  65.     Money,
  66.     BankMoney,
  67.     Float: X_Pos,
  68.     Float: Y_Pos,
  69.     Float: Z_Pos,
  70.     Float: A_Pos,
  71.     Interior,
  72.     Cache: Cache_ID,
  73.     bool: LoggedIn,
  74.     LoginAttempts,
  75.     LoginTimer
  76. };
  77. new Player[MAX_PLAYERS][pData];
  78.  
  79. main()
  80. {
  81.  
  82. }
  83.  
  84. public OnGameModeInit()
  85. {
  86.     new MySQLOpt: option_id = mysql_init_options();
  87.  
  88.     mysql_set_option(option_id, AUTO_RECONNECT, true);
  89.  
  90.     g_SQL = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB, option_id);
  91.     if (g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
  92.     {
  93.         print("MySQL falló.");
  94.         SendRconCommand("exit");
  95.         return 1;
  96.     }
  97.     print("MySQL funcionando.");
  98.  
  99.     SetGameModeText(""SERVER_MODE" "SERVER_VERSION"");
  100.  
  101.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  102.  
  103.     gmLoaded = 1;
  104.     return 1;
  105. }
  106.  
  107. public OnGameModeExit()
  108. {
  109.     for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
  110.     {
  111.         if (IsPlayerConnected(i))
  112.         {
  113.             OnPlayerDisconnect(i, 1);
  114.         }
  115.     }
  116.     mysql_close(g_SQL);
  117.  
  118.     DestroyLog(adminlog);
  119.     return 1;
  120. }
  121.  
  122. public OnPlayerRequestClass(playerid, classid)
  123. {
  124.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  125.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  126.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  127.     return 1;
  128. }
  129.  
  130. public OnPlayerConnect(playerid)
  131. {
  132.     if(gmLoaded == 0)
  133.     {
  134.         SendClientMessage(playerid, -1, "Servidor iniciandose.");
  135.         Kick(playerid);
  136.     }
  137.     g_MysqlRaceCheck[playerid]++;
  138.  
  139.     static const empty_player[pData];
  140.     Player[playerid] = empty_player;
  141.  
  142.     GetPlayerRPName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);
  143.  
  144.     mysql_format(g_SQL, query, 103, "SELECT * FROM `players` WHERE `Name` = '%e' LIMIT 1", pName(playerid));
  145.     mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);
  146.     return 1;
  147. }
  148.  
  149. public OnPlayerDisconnect(playerid, reason)
  150. {
  151.     g_MysqlRaceCheck[playerid]++;
  152.  
  153.     UpdatePlayerData(playerid, reason);
  154.  
  155.     if (cache_is_valid(Player[playerid][Cache_ID]))
  156.     {
  157.         cache_delete(Player[playerid][Cache_ID]);
  158.         Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  159.     }
  160.  
  161.     if (Player[playerid][LoginTimer])
  162.     {
  163.         KillTimer(Player[playerid][LoginTimer]);
  164.         Player[playerid][LoginTimer] = 0;
  165.     }
  166.  
  167.     Player[playerid][LoggedIn] = false;
  168.     return 1;
  169. }
  170.  
  171. public OnPlayerSpawn(playerid)
  172. {
  173.     SetPlayerInterior(playerid, Player[playerid][Interior]);
  174.     SetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  175.     SetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  176.    
  177.     SetCameraBehindPlayer(playerid);
  178.     return 1;
  179. }
  180.  
  181. public OnPlayerDeath(playerid, killerid, reason)
  182. {
  183.     return 1;
  184. }
  185.  
  186. public OnVehicleSpawn(vehicleid)
  187. {
  188.     return 1;
  189. }
  190.  
  191. public OnVehicleDeath(vehicleid, killerid)
  192. {
  193.     return 1;
  194. }
  195.  
  196. public OnPlayerText(playerid, text[])
  197. {
  198.     format(String, 128, "%s dice: %s", Player[playerid][Name], text);
  199.     SendLocalMessage(30.0, playerid, -1, String);
  200.     if(!IsPlayerInAnyVehicle(playerid)) ApplyAnimation(playerid, "PED", "IDLE_CHAT", 4.1, 0, 1, 1, 1, 1);
  201.     return 0;
  202. }
  203.  
  204. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  205. {
  206.     return 1;
  207. }
  208.  
  209. public OnPlayerExitVehicle(playerid, vehicleid)
  210. {
  211.     return 1;
  212. }
  213.  
  214. public OnPlayerStateChange(playerid, newstate, oldstate)
  215. {
  216.     return 1;
  217. }
  218.  
  219. public OnPlayerEnterCheckpoint(playerid)
  220. {
  221.     return 1;
  222. }
  223.  
  224. public OnPlayerLeaveCheckpoint(playerid)
  225. {
  226.     return 1;
  227. }
  228.  
  229. public OnPlayerEnterRaceCheckpoint(playerid)
  230. {
  231.     return 1;
  232. }
  233.  
  234. public OnPlayerLeaveRaceCheckpoint(playerid)
  235. {
  236.     return 1;
  237. }
  238.  
  239. public OnRconCommand(cmd[])
  240. {
  241.     return 1;
  242. }
  243.  
  244. public OnPlayerRequestSpawn(playerid)
  245. {
  246.     return 1;
  247. }
  248.  
  249. public OnObjectMoved(objectid)
  250. {
  251.     return 1;
  252. }
  253.  
  254. public OnPlayerObjectMoved(playerid, objectid)
  255. {
  256.     return 1;
  257. }
  258.  
  259. public OnVehicleMod(playerid, vehicleid, componentid)
  260. {
  261.     return 1;
  262. }
  263.  
  264. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  265. {
  266.     return 1;
  267. }
  268.  
  269. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  270. {
  271.     return 1;
  272. }
  273.  
  274. public OnPlayerSelectedMenuRow(playerid, row)
  275. {
  276.     return 1;
  277. }
  278.  
  279. public OnPlayerExitedMenu(playerid)
  280. {
  281.     return 1;
  282. }
  283.  
  284. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  285. {
  286.     return 1;
  287. }
  288.  
  289. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  290. {
  291.     return 1;
  292. }
  293.  
  294. public OnRconLoginAttempt(ip[], password[], success)
  295. {
  296.     return 1;
  297. }
  298.  
  299. public OnPlayerUpdate(playerid)
  300. {
  301.     return 1;
  302. }
  303.  
  304. public OnPlayerStreamIn(playerid, forplayerid)
  305. {
  306.     return 1;
  307. }
  308.  
  309. public OnPlayerStreamOut(playerid, forplayerid)
  310. {
  311.     return 1;
  312. }
  313.  
  314. public OnVehicleStreamIn(vehicleid, forplayerid)
  315. {
  316.     return 1;
  317. }
  318.  
  319. public OnVehicleStreamOut(vehicleid, forplayerid)
  320. {
  321.     return 1;
  322. }
  323.  
  324. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  325. {
  326.     return 1;
  327. }
  328.  
  329. forward OnPlayerDataLoaded(playerid, race_check);
  330. public OnPlayerDataLoaded(playerid, race_check)
  331. {
  332.     if (race_check != g_MysqlRaceCheck[playerid]) return Kick(playerid);
  333.  
  334.     if(cache_num_rows() > 0)
  335.     {
  336.         cache_get_value(0, "Password", Player[playerid][Password], 65);
  337.         cache_get_value(0, "Salt", Player[playerid][Salt], 17);
  338.  
  339.         Player[playerid][Cache_ID] = cache_save();
  340.  
  341.         format(String, 115, "La cuenta %s está registrada, ingresa la password:", Player[playerid][Name]);
  342.         Dialog_Show(playerid, Login, DIALOG_STYLE_PASSWORD, "Login", String, "Login", "Abortar");
  343.  
  344.         Player[playerid][LoginTimer] = SetTimerEx("OnLoginTimeout", SECONDS_TO_LOGIN * 1000, false, "d", playerid);
  345.     }
  346.     else
  347.     {
  348.         format(String, sizeof String, "Bienvenido %s, ingresa tu password:", Player[playerid][Name]);
  349.         Dialog_Show(playerid, Register, DIALOG_STYLE_PASSWORD, "Registro", String, "Registrar", "Abortar");
  350.     }
  351.     return 1;
  352. }
  353.  
  354. forward OnLoginTimeout(playerid);
  355. public OnLoginTimeout(playerid)
  356. {
  357.     Player[playerid][LoginTimer] = 0;
  358.    
  359.     Dialog_Show(playerid, Null, DIALOG_STYLE_MSGBOX, "Login", ""BAD_LOGIN_2"", "OK", "");
  360.     DelayedKick(playerid);
  361.     return 1;
  362. }
  363.  
  364. forward OnPlayerRegister(playerid);
  365. public OnPlayerRegister(playerid)
  366. {
  367.     Player[playerid][ID] = cache_insert_id();
  368.  
  369.     Dialog_Show(playerid, Null, DIALOG_STYLE_MSGBOX, "Registro", ""SUCCESS_REGISTER"", "OK", "");
  370.  
  371.     Player[playerid][LoggedIn] = true;
  372.  
  373.     Player[playerid][X_Pos] = DEFAULT_POS_X;
  374.     Player[playerid][Y_Pos] = DEFAULT_POS_Y;
  375.     Player[playerid][Z_Pos] = DEFAULT_POS_Z;
  376.     Player[playerid][A_Pos] = DEFAULT_POS_A;
  377.    
  378.     SetSpawnInfo(playerid, NO_TEAM, 0, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos], Player[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
  379.     SpawnPlayer(playerid);
  380.     return 1;
  381. }
  382.  
  383. forward _KickPlayerDelayed(playerid);
  384. public _KickPlayerDelayed(playerid)
  385. {
  386.     Kick(playerid);
  387.     return 1;
  388. }
  389.  
  390. AssignPlayerData(playerid)
  391. {
  392.     cache_get_value_int(0, "ID", Player[playerid][ID]);
  393.  
  394.     cache_get_value_int(0, "Admin", Player[playerid][Admin]);
  395.     cache_get_value_int(0, "Skin", Player[playerid][Skin]);
  396.     cache_get_value_float(0, "Health", Player[playerid][Health]);
  397.     cache_get_value_float(0, "Armor", Player[playerid][Armor]);
  398.     cache_get_value_int(0, "Money", Player[playerid][Money]);
  399.     cache_get_value_int(0, "BankMoney", Player[playerid][BankMoney]);
  400.    
  401.     cache_get_value_float(0, "X", Player[playerid][X_Pos]);
  402.     cache_get_value_float(0, "Y", Player[playerid][Y_Pos]);
  403.     cache_get_value_float(0, "Z", Player[playerid][Z_Pos]);
  404.     cache_get_value_float(0, "Angle", Player[playerid][A_Pos]);
  405.     cache_get_value_int(0, "Interior", Player[playerid][Interior]);
  406.  
  407.     SetMoney(playerid, Player[playerid][Money]);
  408.     SetPlayerSkin(playerid, Player[playerid][Skin]);
  409.     SetHealth(playerid, Player[playerid][Health]);
  410.     SetArmor(playerid, Player[playerid][Armor]);
  411.     return 1;
  412. }
  413.  
  414. DelayedKick(playerid, time = 500)
  415. {
  416.     SetTimerEx("_KickPlayerDelayed", time, false, "d", playerid);
  417.     return 1;
  418. }
  419.  
  420. UpdatePlayerData(playerid, reason)
  421. {
  422.     if(Player[playerid][LoggedIn] == false) return 0;
  423.  
  424.     GetPlayerHealth(playerid, Player[playerid][Health]);
  425.     GetPlayerArmour(playerid, Player[playerid][Armor]);
  426.  
  427.     if(reason == 1)
  428.     {
  429.         GetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  430.         GetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  431.     }
  432.    
  433.     mysql_format(g_SQL, query, 250, "UPDATE `players` SET `Money` = %d, `BankMoney` = %d, `Health` = %f, `Armor` = %f, `X` = %f, `Y` = %f, `Z` = %f, `Angle` = %f, `Interior` = %d WHERE `ID` = %d LIMIT 1",
  434.         Player[playerid][Money],
  435.         Player[playerid][BankMoney],
  436.         Player[playerid][Health],
  437.         Player[playerid][Armor],
  438.         Player[playerid][X_Pos],
  439.         Player[playerid][Y_Pos],
  440.         Player[playerid][Z_Pos],
  441.         Player[playerid][A_Pos],
  442.         GetPlayerInterior(playerid),
  443.         Player[playerid][ID]);
  444.     mysql_tquery(g_SQL, query);
  445.     return 1;
  446. }
  447.  
  448. GetPlayerRPName(playerid, name[], len)
  449. {
  450.     GetPlayerName(playerid, name, len);
  451.     for(new i = 0; i < len; i++)
  452.     {
  453.         if (name[ i ] == '_')
  454.         name[i] = ' ';
  455.     }
  456. }
  457.  
  458. pName(playerid)
  459. {
  460.     new name[MAX_PLAYER_NAME];
  461.     GetPlayerName(playerid, name, sizeof name);
  462.     return name;
  463. }
  464.  
  465. SetHealth(playerid, Float: health)
  466. {
  467.     Player[playerid][Health] = health;
  468.     SetPlayerHealth(playerid, health);
  469. }
  470.  
  471. SetArmor(playerid, Float: armor)
  472. {
  473.     Player[playerid][Armor] = armor;
  474.     SetPlayerArmour(playerid, armor);
  475. }
  476.  
  477. GiveMoney(playerid, money)
  478. {
  479.     Player[playerid][Money] += money;
  480.     GivePlayerMoney(playerid, money);
  481. }
  482.  
  483. SetMoney(playerid, money)
  484. {
  485.     Player[playerid][Money] = money;
  486.     ResetPlayerMoney(playerid);
  487.     GivePlayerMoney(playerid, money);
  488. }
  489.  
  490. ResetMoney(playerid)
  491. {
  492.     Player[playerid][Money] = 0;
  493.     ResetPlayerMoney(playerid);
  494. }
  495.  
  496. Dialog:Null(playerid, response, listitem, inputtext[]) return 1;
  497.  
  498. Dialog:Register(playerid, response, listitem, inputtext[])
  499. {
  500.     if(!response) return Kick(playerid);
  501.  
  502.     if(strlen(inputtext) <= 5) return Dialog_Show(playerid, Register, DIALOG_STYLE_PASSWORD, "Registro", ""REGISTER_PASSWORD_BAD"", "Registro", "Abortar");
  503.  
  504.     for(new i = 0; i < 16; i++) Player[playerid][Salt][i] = random(94) + 33;
  505.     SHA256_PassHash(inputtext, Player[playerid][Salt], Player[playerid][Password], 65);
  506.  
  507.     mysql_format(g_SQL, query, 221, "INSERT INTO `players` (`Name`, `Password`, `Salt`) VALUES ('%e', '%s', '%e')", pName(playerid), Player[playerid][Password], Player[playerid][Salt]);
  508.     mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
  509.     return 1;
  510. }
  511.  
  512. Dialog:Login(playerid, response, listitem, inputtext[])
  513. {
  514.     if(!response) return Kick(playerid);
  515.  
  516.     new hashed_pass[65];
  517.     SHA256_PassHash(inputtext, Player[playerid][Salt], hashed_pass, 65);
  518.  
  519.     if(strcmp(hashed_pass, Player[playerid][Password]) == 0)
  520.     {
  521.         Dialog_Show(playerid, Null, DIALOG_STYLE_MSGBOX, "Login", ""LOGIN_SUCCESS"", "OK", "");
  522.  
  523.         cache_set_active(Player[playerid][Cache_ID]);
  524.  
  525.         AssignPlayerData(playerid);
  526.  
  527.         cache_delete(Player[playerid][Cache_ID]);
  528.         Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  529.  
  530.         KillTimer(Player[playerid][LoginTimer]);
  531.         Player[playerid][LoginTimer] = 0;
  532.         Player[playerid][LoggedIn] = true;
  533.  
  534.         SetSpawnInfo(playerid, NO_TEAM, 0, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos], Player[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
  535.         SpawnPlayer(playerid);
  536.     }
  537.     else
  538.     {
  539.         Player[playerid][LoginAttempts]++;
  540.  
  541.         if (Player[playerid][LoginAttempts] >= 3)
  542.         {
  543.             Dialog_Show(playerid, Null, DIALOG_STYLE_MSGBOX, "Login", ""FAIL_LOGIN"", "OK", "");
  544.             DelayedKick(playerid);
  545.         }
  546.         else Dialog_Show(playerid, Login, DIALOG_STYLE_PASSWORD, "Login", ""LOGIN_TEXT_1"", "Ingresar", "Salir");
  547.     }
  548.     return 1;
  549. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement