akahallsas

code

Sep 8th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.03 KB | Gaming | 0 0
  1. #include <a_samp>
  2. #include <zcmd>
  3. #include <a_mysql>
  4. #define SSCANF_NO_NICE_FEATURES
  5. #include <sscanf2>
  6.  
  7. #define SERVER_NAME "SFM.lt | San Fierro Miestas"
  8.  
  9. #define HOST "localhost"
  10. #define PASS ""
  11. #define USER "root"
  12. #define DB "sfm"
  13.  
  14. #define DialogRegister 0
  15. #define DialogLogin 1
  16. #define DialogEmail 2
  17. #define DialogGender 3
  18. #define DialogAdminCode 4
  19.  
  20. new MySQL:SQL;
  21.  
  22. new bool:registered[MAX_PLAYERS];
  23. new bool:logged[MAX_PLAYERS];
  24.  
  25. enum Player_Info
  26. {
  27.     sID,
  28.     pPassword,
  29.     pMoney,
  30.     pLevel,
  31.     pSkin,
  32.     pEmail[25],
  33.     bool:pGender,
  34.     pAdmin,
  35.     pAdminCode,
  36.     pInactivity
  37. };
  38. new PlayerInfo[MAX_PLAYERS][Player_Info];
  39.  
  40. main()
  41. {
  42.     print("\n----------------------------------");
  43.     print(" SFM.lt | San Fierro Miestas");
  44.     print("----------------------------------\n");
  45. }
  46.  
  47. public OnGameModeInit()
  48. {
  49.     SQL = mysql_connect(HOST, USER, PASS, DB);
  50.     if(SQL == MYSQL_INVALID_HANDLE || mysql_errno(SQL) != 0)
  51.     {
  52.         print("Failed to connect with the database");
  53.         SendRconCommand("exit");
  54.         return 0;
  55.     }
  56.  
  57.     SetGameModeText("SFM v0.0.0");
  58.     AddPlayerClass(60,1731.6658,-1912.0126,13.5625,90.0,0,0,0,0,0,0);
  59.     return 1;
  60. }
  61.  
  62. public OnGameModeExit()
  63. {
  64.     for(new i = 0; i < MAX_PLAYERS; i++)
  65.     {
  66.         SavePlayer(i);
  67.         PlayerInfo[i][sID] = -1;
  68.     }
  69.     mysql_close(SQL);
  70.     return 1;
  71. }
  72.  
  73. public OnPlayerConnect(playerid)
  74. {
  75.     TogglePlayerSpectating(playerid, true);
  76.     ResetAccount(playerid);
  77.  
  78.     new query[128];
  79.    
  80.     mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e'", GetName(playerid));
  81.     mysql_tquery(SQL, query, "CheckAccount", "i", playerid);
  82.     return 1;
  83. }
  84.  
  85. public OnPlayerDisconnect(playerid, reason)
  86. {
  87.     if(!logged[playerid]) return 1;
  88.     SavePlayer(playerid);
  89.     PlayerInfo[playerid][sID] = -1;
  90.     return 1;
  91. }
  92.  
  93. public OnPlayerSpawn(playerid)
  94. {
  95.     TogglePlayerControllable(playerid, true);
  96.    
  97.     SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  98.     SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
  99.     ResetPlayerMoney(playerid);
  100.     GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
  101.     return 1;
  102. }
  103.  
  104. public OnPlayerDeath(playerid, killerid, reason)
  105. {
  106.     return 1;
  107. }
  108.  
  109. public OnVehicleSpawn(vehicleid)
  110. {
  111.     return 1;
  112. }
  113.  
  114. public OnVehicleDeath(vehicleid, killerid)
  115. {
  116.     return 1;
  117. }
  118.  
  119. public OnPlayerCommandPerformed(playerid, cmdtext[], success)
  120. {
  121.     if(!success) return SendClientMessage(playerid, -1, "{ff0000}ERROR: {ffffff}That command is unknown");
  122.     return 1;
  123. }
  124.  
  125. public OnPlayerText(playerid, text[])
  126. {
  127.     return 1;
  128. }
  129.  
  130. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  131. {
  132.     return 1;
  133. }
  134.  
  135. public OnPlayerExitVehicle(playerid, vehicleid)
  136. {
  137.     return 1;
  138. }
  139.  
  140. public OnPlayerStateChange(playerid, newstate, oldstate)
  141. {
  142.     return 1;
  143. }
  144.  
  145. public OnPlayerEnterCheckpoint(playerid)
  146. {
  147.     return 1;
  148. }
  149.  
  150. public OnPlayerLeaveCheckpoint(playerid)
  151. {
  152.     return 1;
  153. }
  154.  
  155. public OnPlayerEnterRaceCheckpoint(playerid)
  156. {
  157.     return 1;
  158. }
  159.  
  160. public OnPlayerLeaveRaceCheckpoint(playerid)
  161. {
  162.     return 1;
  163. }
  164.  
  165. public OnRconCommand(cmd[])
  166. {
  167.     return 1;
  168. }
  169.  
  170. public OnPlayerRequestSpawn(playerid)
  171. {
  172.     return 1;
  173. }
  174.  
  175. public OnObjectMoved(objectid)
  176. {
  177.     return 1;
  178. }
  179.  
  180. public OnPlayerObjectMoved(playerid, objectid)
  181. {
  182.     return 1;
  183. }
  184.  
  185. public OnPlayerPickUpPickup(playerid, pickupid)
  186. {
  187.     return 1;
  188. }
  189.  
  190. public OnVehicleMod(playerid, vehicleid, componentid)
  191. {
  192.     return 1;
  193. }
  194.  
  195. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  196. {
  197.     return 1;
  198. }
  199.  
  200. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  201. {
  202.     return 1;
  203. }
  204.  
  205. public OnPlayerSelectedMenuRow(playerid, row)
  206. {
  207.     return 1;
  208. }
  209.  
  210. public OnPlayerExitedMenu(playerid)
  211. {
  212.     return 1;
  213. }
  214.  
  215. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  216. {
  217.     return 1;
  218. }
  219.  
  220. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  221. {
  222.     return 1;
  223. }
  224.  
  225. public OnRconLoginAttempt(ip[], password[], success)
  226. {
  227.     return 1;
  228. }
  229.  
  230. public OnPlayerUpdate(playerid)
  231. {
  232.     return 1;
  233. }
  234.  
  235. public OnPlayerStreamIn(playerid, forplayerid)
  236. {
  237.     return 1;
  238. }
  239.  
  240. public OnPlayerStreamOut(playerid, forplayerid)
  241. {
  242.     return 1;
  243. }
  244.  
  245. public OnVehicleStreamIn(vehicleid, forplayerid)
  246. {
  247.     return 1;
  248. }
  249.  
  250. public OnVehicleStreamOut(vehicleid, forplayerid)
  251. {
  252.     return 1;
  253. }
  254.  
  255. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  256. {
  257.     switch(dialogid)
  258.     {
  259.         case DialogAdminCode:
  260.         {
  261.             if(!response) return Kick(playerid);
  262.             if(PlayerInfo[playerid][pAdminCode] != strval(inputtext)) return ShowPlayerDialog(playerid, DialogAdminCode, DIALOG_STYLE_PASSWORD, "Admin Login", "{ff0000}Admin Code Isn't Correct!\n{ffffff}Type your Admin Code to verify.", "Login", "Quit");
  263.             new query[128];
  264.            
  265.             mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e'", GetName(playerid));
  266.             mysql_tquery(SQL, query,"LoadAccount", "i", playerid);
  267.             TogglePlayerSpectating(playerid, false);
  268.  
  269.             SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], -1731.6658,-1912.0126,13.5625,84.0176,0,0,0,0,0,0);
  270.             SpawnPlayer(playerid);
  271.  
  272.             SendClientMessage(playerid, -1, "{1ac42b}Welcome to the Server, Have a Great Time!");
  273.             logged[playerid] = true;
  274.         }
  275.         case DialogRegister:
  276.         {
  277.             //Register
  278.             if(!response) return Kick(playerid);
  279.             if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DialogRegister, DIALOG_STYLE_INPUT, "Register","{ff0000}The Password Is too Short!\nType any password to create a new account.", "Next", "Quit");
  280.             PlayerInfo[playerid][pPassword] = udb_hash(inputtext);
  281.             ShowPlayerDialog(playerid, DialogEmail, DIALOG_STYLE_INPUT, "Email", "Type your E-Mail Address.", "Next", "Quit");
  282.  
  283.         }
  284.         case DialogLogin:
  285.         {
  286.             //Login
  287.             if(!response) return Kick(playerid);
  288.             if(udb_hash(inputtext) == PlayerInfo[playerid][pPassword]) return ShowPlayerDialog(playerid, DialogLogin, DIALOG_STYLE_PASSWORD, "Login", "{ff0000}The Password Is Incorrect!\nType your password to login into your account.", "Login", "Quit");
  289.             if(PlayerInfo[playerid][pAdmin] > 0) return ShowPlayerDialog(playerid, DialogAdminCode, DIALOG_STYLE_PASSWORD, "Admin Login", "Type your Admin Code to verify.", "Login", "Quit");
  290.             new query[128];
  291.             mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e'", GetName(playerid));
  292.             mysql_tquery(SQL, query,"LoadAccount", "i", playerid);
  293.             TogglePlayerSpectating(playerid, false);
  294.  
  295.             SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], -1731.6658,-1912.0126,13.5625,84.0176,0,0,0,0,0,0);
  296.             SpawnPlayer(playerid);
  297.  
  298.             SendClientMessage(playerid, -1, "{1ac42b}Welcome to the Server, Have a Great Time!");
  299.             logged[playerid] = true;
  300.         }
  301.         case DialogEmail:
  302.         {
  303.             if(!response) return Kick(playerid);
  304.             if(strlen(inputtext) < 12) return ShowPlayerDialog(playerid, DialogEmail, DIALOG_STYLE_INPUT, "Email", "{ff0000}The E-Mail Address Is Invalid!\nType your E-Mail Address.", "Next", "Quit");
  305.             new email[25];
  306.             strcat(email, inputtext, sizeof(email));
  307.             PlayerInfo[playerid][pEmail] = email;
  308.             ShowPlayerDialog(playerid, DialogGender, DIALOG_STYLE_MSGBOX, "Gender", "Choose Your Gender.", "Male", "Female");
  309.         }
  310.         case DialogGender:
  311.         {
  312.             if(response)
  313.             {
  314.                 PlayerInfo[playerid][pGender] = true; // Male
  315.                 PlayerInfo[playerid][pSkin] = 26;
  316.             } else {
  317.                 PlayerInfo[playerid][pGender] = false; // Female
  318.                 PlayerInfo[playerid][pSkin] = 12;
  319.             }
  320.             TogglePlayerSpectating(playerid, false);
  321.  
  322.             SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], 1731.6658,-1912.0126,13.5625,84.0176,0,0,0,0,0,0);
  323.             SpawnPlayer(playerid);
  324.  
  325.             PlayerInfo[playerid][pMoney] = 3600;
  326.             PlayerInfo[playerid][pLevel] = 1;
  327.  
  328.             SavePlayer(playerid);
  329.  
  330.             new query[128];
  331.             mysql_format(SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e'", GetName(playerid));
  332.             mysql_tquery(SQL, query,"LoadAccount", "i", playerid);
  333.  
  334.             SendClientMessage(playerid, -1, "{1ac42b}Welcome to the Server, Have a Great Time!");
  335.             logged[playerid] = true;
  336.         }
  337.     }
  338.     return 1;
  339. }
  340.  
  341. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  342. {
  343.     return 1;
  344. }
  345.  
  346. // ------ Commands ------
  347. // If u want to do only Admin command - If(PlayerInfo[playerid][pAdmin] < 2) return 0;
  348. CMD:giveadmin(playerid, params[])
  349. {
  350.     if(!IsPlayerAdmin(playerid) && PlayerInfo[playerid][pAdmin] != 255) return 1;
  351.     new level, player;
  352.     if(sscanf(params, "ud", player, level)) return SendClientMessage(playerid, -1, "{ffff00}Usage: {ffffff}/giveadmin [Player] [Level]");
  353.     if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid, -1, "{ff0000}ERROR: {ffffff}That player isn't online!");
  354.     if(level < 0 || level > 255) return SendClientMessage(playerid, -1, "{ff0000}ERROR: {ffffff}Admin Level has to be between 0 and 255");
  355.  
  356.     if(PlayerInfo[player][pAdmin] == 0)
  357.         PlayerInfo[player][pAdminCode] = RandomInRange(1000, 9999);
  358.  
  359.     PlayerInfo[player][pAdmin] = level;
  360.     if(level == 0)
  361.         PlayerInfo[playerid][pAdminCode] = 0;
  362.     SavePlayer(playerid);
  363.  
  364.     new msg[256];
  365.     format(msg, sizeof(msg), "{1ac42b}INFO: {ffffff}Succesffully set Admin Level %d to %s", level, GetName(player));
  366.     SendClientMessage(playerid, -1, msg);
  367.     format(msg, sizeof(msg), "{1ac42b}INFO: {ffffff}Admin %s set your Admin Level to %d, Congratulations!", GetName(playerid), level);
  368.     SendClientMessage(playerid, -1, msg);
  369.     format(msg, sizeof(msg), "{ff0000}IMPORTANT: {ffffff}Your Admin Code is %d, screenshot it, you will need it when you are logging in!", PlayerInfo[playerid][pAdminCode]);
  370.     SendClientMessage(playerid, -1, msg);
  371.     return 1;
  372. }
  373.  
  374. CMD:veh(playerid, params[])
  375. {
  376.     new Float:X, Float:Y, Float:Z;
  377.     GetPlayerPos(playerid, X, Y, Z);
  378.     CreateVehicle(411, X+2, Y, Z, 0.0, 3, 3, -1);
  379.     return 1;
  380. }
  381.  
  382. // ------ Forwards ------
  383. forward CheckAccount(playerid);
  384. public CheckAccount(playerid)
  385. {
  386.     if(cache_num_rows() > 0)
  387.     {
  388.         cache_get_value_int(0, "Password", PlayerInfo[playerid][pPassword]);
  389.         cache_get_value_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
  390.         cache_get_value_int(0, "AdminCode", PlayerInfo[playerid][pAdminCode]);
  391.         ShowPlayerDialog(playerid, DialogLogin, DIALOG_STYLE_PASSWORD, "Login", "Type your password to login into your account.", "Login", "Quit");
  392.     } else {
  393.         ShowPlayerDialog(playerid, DialogRegister, DIALOG_STYLE_INPUT, "Register","Type any password to create a new account.", "Next", "Quit");
  394.     }
  395.     return 1;
  396. }
  397.  
  398. forward LoadAccount(playerid);
  399. public LoadAccount(playerid)
  400. {
  401.     cache_get_value_int(0, "ID", PlayerInfo[playerid][sID]);
  402.     cache_get_value_int(0, "Money", PlayerInfo[playerid][pMoney]);
  403.     cache_get_value_int(0, "Level", PlayerInfo[playerid][pLevel]);
  404.     cache_get_value_int(0, "Skin", PlayerInfo[playerid][pSkin]);
  405.     cache_get_value_int(0, "Inactivity", PlayerInfo[playerid][pInactivity]);
  406.     cache_get_value_bool(0, "Gender", PlayerInfo[playerid][pGender]);
  407.     cache_get_value(0, "Email", PlayerInfo[playerid][pEmail]);
  408.     return 1;
  409. }
  410.  
  411. // ------ Stock ------
  412. stock RandomInRange(min, max)
  413. {
  414.     new number;
  415.     do {
  416.         number = random(max);
  417.     } while(number < min || number > max);
  418.     return number;
  419. }
  420.  
  421. stock udb_hash(const buf[]) {
  422.     new length=strlen(buf);
  423.     new s1 = 1;
  424.     new s2 = 0;
  425.     new n;
  426.     for (n=0; n<length; n++)
  427.     {
  428.        s1 = (s1 + buf[n]) % 65521;
  429.        s2 = (s2 + s1)     % 65521;
  430.     }
  431.     return (s2 << 16) + s1;
  432. }
  433.  
  434. stock GetName(playerid)
  435. {
  436.     new name[MAX_PLAYER_NAME];
  437.     GetPlayerName(playerid, name, sizeof(name));
  438.     return name;
  439. }
  440.  
  441. stock SavePlayer(playerid) {
  442.     new query[256], dest[1024];
  443.     if (!registered[playerid] && !logged[playerid])
  444.         mysql_format(SQL, dest, sizeof(dest), "INSERT INTO `players` (`Username`, `Password`, `Skin`, `Money`, `Level`, `Email`, `Gender`) VALUES ('%e','%d','%d','%d','%d','%e','%d')", GetName(playerid), PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pMoney], \
  445.             PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pGender]);
  446.     else {
  447.         mysql_format(SQL, query, sizeof(query), "UPDATE `players` SET `Username` = '%e', `Password` = '%d', `Skin` = '%d', `Money` = '%d', `Level` = '%d',", GetName(playerid), PlayerInfo[playerid][pPassword], PlayerInfo[playerid][pSkin], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pLevel]);
  448.         strcat(dest, query, sizeof(dest));
  449.         mysql_format(SQL, query, sizeof(query), "`Email` = '%e', `Gender` = '%d', `Admin` = '%d', `AdminCode` = '%d', `Inactivity` = '%d'WHERE `ID` = '%d' LIMIT 1", PlayerInfo[playerid][pEmail], PlayerInfo[playerid][pGender], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pAdminCode], PlayerInfo[playerid][pInactivity], PlayerInfo[playerid][sID]);
  450.         strcat(dest, query, sizeof(dest));
  451.     }
  452.     mysql_tquery(SQL, dest);
  453. }
  454.  
  455. stock ResetAccount(playerid)
  456. {
  457.     new example[25];
  458.     strcat(example, "[email protected]", sizeof(example));
  459.     registered[playerid] = false;
  460.     PlayerInfo[playerid][sID] = -1;
  461.     PlayerInfo[playerid][pSkin] = 1;
  462.     PlayerInfo[playerid][pMoney] = 0;
  463.     PlayerInfo[playerid][pLevel] = 0;
  464.     PlayerInfo[playerid][pGender] = false;
  465.     PlayerInfo[playerid][pEmail] = example;
  466.     PlayerInfo[playerid][pAdmin] = 0;
  467.     PlayerInfo[playerid][pAdminCode] = 0;
  468.     PlayerInfo[playerid][pInactivity] = 0;
  469.     SetPlayerSkin(playerid, 1);
  470.     SetPlayerScore(playerid, 0);
  471. }
Advertisement
Add Comment
Please, Sign In to add comment