Offline |
|
|
Csatlakozott: 2008.09.15. 16:41 Hozzászólások: 76
Megköszönték neki: 6 alkalommal
|
Adatvédelmi okokból md5 hashelni amxben nem igazán látom értelmét, bár egy jó dolog, hogy erre figyelsz, sajnos letölteni nem tudom amíg nincs jóváhagyva. annyit tudok segíteni, hogy jó, ha forwardot raksz a loginhoz (pre és post is) valamint a logouthoz is, ez jól jöhet, ha másik plugint akarsz csatolni ehhez. (főleg zombi szervernél jó, ahol a sok dolgot még ez után mysql-ben akarod menteni, pl lcs, zombitípus, esetleg fegyverraktár vagy éppen valamilyen stat plugin és egyebek) Hasznos kiegészítés tud lenni, ha írsz hozzá külön ban plugint akkor lockolni lehetne időre az accot is natívval. (azaz amíg nem jár le a banja addig nem fér az acchoz sem, ha ns-el jön fel) Az is külön jó, hogy védve van a dupla bejelentkezéstől, ez sok helyen hiba (volt):D Az enyém egyelőre így néz ki (segítségképpen, félkész állapot, van még mit rajta javítanom. Természetesen én is egy már kész pluginból indultam ki, de tele volt hibával...): ► Spoiler mutatása /***************************************************************************\ ===================================== * || [ZP] Register System || * =====================================
------------------- *||DESCRIPTION||* -------------------
This plugins adds mysql register system to Counter Strike server Function: -register /name & password/ -login /name & password/ Natives: -------------------------------------- - bank_loggedin(id) return if the player logged in -1 if error (player not connected) 0 Not logged in 1 Logged in - bank_user(id, name[], len) return player registered username
- bank_pass(id, pass[], len) return player registered password
- bank_locked(id) return if the player account locked -1 if error (player not connected) 0 Not locked 1 locked Forwards: --------------------------------------- - bank_login_pre execute before when player login - bank_login_post execute after when player login - bank_logout_pre execute before when player logout - bank_logout_post execute after when player logout MYSQL tables: --------------------------------------- -username VARCHAR(50) *SQLRESULT 0 -password VARCHAR(50) *SQLRESULT 1 -steamid VARCHAR(33) *SQLRESULT 2 -ip VARCHAR(25) *SQLRESULT 3 -registered DATETIME *SQLRESULT 4 -lastjoin DATETIME *SQLRESULT 5 -steamuser INT(1) *SQLRESULT 6 -locked INT(1) *SQLRESULT 7 -autologin INT(1) *SQLRESULT 8 --------------- *||CREDITS||* ---------------
------------------ *||CHANGE LOG||* ------------------ v1.0 ====> - Initial Release v1.1 ====> - New native: - bank_locked(id) (for future ban system) ----------------- *||TODO LIST||* ----------------- - include client_putinserver function for aoutologin(for steamusers) need new mysql record:autologin INT(1) (default 0) DONE megvizsgálni hogy steames , ha igen: megvizsgálni hogy be van e jelentkezve, ha nincs: mysql lekérés * a steamid és a steamuser record alapján (bank_login_post forwardot beépíteni!! ) - chat login/logout function: change register_clcmd("say /login", "Loginbank") with args (if not loggedin)(bank_login_post forwardot beépíteni!! ) new register_clcmd("say /logout", "Logoutbank") (if loggedin)(bank_logout_pre forwardot beépíteni!! ) - change for needregforgame function register_clcmd("jointeam", "menuRegister") 1-t 2-ct 5- autojoin 6 spectator enable spectator mode (just 1-2-5 need for menuregister)
\***************************************************************************/
#include <amxmodx> #include <amxmisc> #include <sqlx>
#define PLUGIN "[REGISTER SYSTEM] " #define VERSION "1.1" #define AUTHOR "Furion"
#pragma dynamic 32768
#define is_valid_player(%1) (1 <= %1 <= 32)
new g_maxplayers new Handle:g_SqlTuple
// Register System new bool:g_LoggedIn[33] = false new g_RegisterSelection[33] = 2
new g_szTempName[33][50] new g_szTempPassWord[33][50] new g_szTempSteamid[33][33] new g_szTempIp[33][25] new g_Locked[33] = 0
new g_Registered[33] new g_Lastjoin[33]
// forwards new g_fwUserLogin_pre,g_fwUserLogin_post, g_fwUserLogout_post, g_fwUserLogout_pre,g_fwDummyResult
// Cvars new cvHost, cvUserName, cvPassWord, cvDbName ,cvTable new g_Host[100], g_UserName[20], g_PassWord[20], g_DbName[100], g_Table[100] new needregforgame
public plugin_precache() { register_plugin(PLUGIN,VERSION,AUTHOR) static szCvar[30] formatex(szCvar, charsmax(szCvar), "v%s by %s", VERSION, AUTHOR) register_cvar("Register_System", szCvar, FCVAR_SERVER|FCVAR_SPONLY) cvHost = register_cvar("bank_sql_host", "127.0.0.1",FCVAR_SPONLY ) cvUserName = register_cvar("bank_sql_username", "bank",FCVAR_SPONLY ) cvPassWord = register_cvar("bank_sql_password", "",FCVAR_SPONLY ) cvDbName = register_cvar("bank_sql_database", "amxx",FCVAR_SPONLY ) cvTable = register_cvar("bank_sql_table", "bank") }
public plugin_init() { needregforgame = register_cvar("bank_request_reg_4_game", "0")
g_maxplayers = get_maxplayers() register_clcmd("say /login", "menuBank") register_clcmd("say /bank", "menuBank") register_clcmd("jointeam", "menuRegister") //change jointeam 1 & 2 (t or ct ) jointeam 6 = spectator register_event("TeamInfo", "joinTeamOldMenu", "a")
register_clcmd("szUsername", "cmdUsername") register_clcmd("szPassword", "cmdPw") get_pcvar_string(cvTable, g_Table, 99) get_pcvar_string(cvHost, g_Host, 99) get_pcvar_string(cvUserName, g_UserName, 19) get_pcvar_string(cvPassWord, g_PassWord, 19) get_pcvar_string(cvDbName, g_DbName, 99) g_SqlTuple = SQL_MakeDbTuple(g_Host, g_UserName, g_PassWord, g_DbName) }
public plugin_cfg() { g_fwUserLogin_pre = CreateMultiForward("bank_login_pre", ET_IGNORE,FP_CELL) g_fwUserLogin_post = CreateMultiForward("bank_login_post", ET_IGNORE,FP_CELL) g_fwUserLogout_pre = CreateMultiForward("bank_logout_pre", ET_IGNORE,FP_CELL) g_fwUserLogout_post = CreateMultiForward("bank_logout_post", ET_IGNORE,FP_CELL) createTable()
} /*************************************************************************** NATIVES ****************************************************************************/ public plugin_natives() { register_native("bank_loggedin", "native_bank_loggedin", 1) register_native("bank_user", "native_bank_user", 1) register_native("bank_pass", "native_bank_pass", 1) register_native("bank_locked", "native_bank_locked", 1) }
public native_bank_loggedin(id) { if (!is_valid_player(id)) { log_error(AMX_ERR_NATIVE, "[BANK] native:bank_loggedin Invalid player id (%d)", id) return -1; } if (g_LoggedIn[id]) {
return 1; } else return 0;
}
public native_bank_user(id, name[], len) {
if (!g_LoggedIn[id]) return false; // not connected if (!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[BANK]native:bank_user Invalid player id (%d)",id) return false; } // Strings passed byref param_convert(2) // Fetch username info copy(name, len, g_szTempName[id]) return true; }
public native_bank_pass(id, pass[], len) {
if (!g_LoggedIn[id]) return false; // not connected if (!is_user_connected(id)) { log_error(AMX_ERR_NATIVE, "[BANK]native:bank_pass Invalid player id (%d)", id) return false; } // Strings passed byref param_convert(2) // Fetch password info copy(pass, len, g_szTempPassWord[id]) return true; }
public native_bank_locked(id) { if (!is_valid_player(id)) { log_error(AMX_ERR_NATIVE, "[BANK] native:bank_loggedin Invalid player id (%d)", id) return -1; } if (g_Locked[id]) { return 1; } else return 0; }
public joinTeamOldMenu() { new id = read_data(1) new user_team[32]
read_data(2, user_team, 31)
if(!is_user_connected(id)) return PLUGIN_HANDLED
if(g_LoggedIn[id]) return PLUGIN_HANDLED
switch(user_team[0]) { case 'C': { menuRegister(id) } case 'T': { menuRegister(id) } }
return PLUGIN_HANDLED }
public menuBank(id) {
new title[100] formatex(title, 99, "\y Regisztrációs rendszer") new bankMenu = menu_create(title, "menuBankHandler")
if(g_LoggedIn[id] && is_valid_player(id)) {
/* forward kell a menu additemhez (menü neve, pozíció (szabad:3,4,5,6,7)
*/
menu_additem(bankMenu, "\y Ruházat^n", "7") menu_additem(bankMenu, "\y Kijelentkezés^n", "8") menu_additem(bankMenu, "\w Kilépés", "9") } else { menu_additem(bankMenu, "\w Bejelentkezés", "1") menu_additem(bankMenu, "\y Regisztráció^n", "2") menu_additem(bankMenu, "\w Kilépés", "9") } menu_display(id, bankMenu, 0)
return PLUGIN_HANDLED; }
public menuBankHandler(id, menu, item) { new data[6], iName[64], access, callback menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data) if(g_LoggedIn[id] && is_valid_player(id)) { switch(key) { case 7: { client_cmd(id,"say /hc") } //logout case 8: { client_print_color(id ,print_team_default, "^4[Bank]^1 Kijeletkezve | ^4%s^1.", g_szTempName[id]) updateTable(id) reset_user(id) menu_destroy(menu) } //menu exit case 9: { menu_destroy(menu) } } } else { switch(key) { // register case 1: { g_RegisterSelection[id] = 2 client_cmd(id, "messagemode szUsername") } //login case 2: { g_RegisterSelection[id] = 1 client_cmd(id, "messagemode szUsername") } //exit case 9: { menu_destroy(menu) } } } }
/******************************************************************** JOIN TEAM *********************************************************************/ public menuRegister(id) {
if(!g_LoggedIn[id] && is_valid_player(id)) { new iquestion = get_pcvar_num(needregforgame)
switch (iquestion) { case 0: //no need reg for game {
} case 1: //nned reg for game {
new needmenu = menu_create("\yRegisztrációs rendszer", "menuRegister_Handler") menu_additem(needmenu, "\wBejelentkezés", "1") menu_additem(needmenu, "\yRegisztráció^n", "2") menu_display(id, needmenu, 0) // Prevent them from Joining a Team return PLUGIN_HANDLED }
} } return PLUGIN_CONTINUE }
public menuRegister_Handler(id, needmenu, item) { new data[6], iName[64], access, callback menu_item_getinfo(needmenu, item, access, data, 5, iName, 63, callback) new key = str_to_num(data) switch(key) { // New Account case 1: { g_RegisterSelection[id] = 2 client_cmd(id, "messagemode szUsername") } case 2: { g_RegisterSelection[id] = 1 client_cmd(id, "messagemode szUsername") } } }
/****************************************************************** LOGIN INTERNAL FUNCTIONS *******************************************************************/ public cmdUsername(id) { // if user is already logged in stop him if(g_LoggedIn[id]) { return PLUGIN_HANDLED }
read_args(g_szTempName[id], 49) remove_quotes(g_szTempName[id])
if(contain(g_szTempName[id], " ") != -1 || strlen(g_szTempName[id]) < 3 || strlen(g_szTempName[id]) > 50 ) { client_print_color(id ,print_team_default, "^4[Bank]^1 Érvénytelen felhasználónév. Próbálj másikat.") client_print_color(id ,print_team_default, "^4[Bank]^1 A felhasználónév nem tartalmazhat szóközt, minimum 3 maximum 50 karakter lehet.")
client_cmd(id, "messagemode szUsername") return PLUGIN_HANDLED }
if(g_RegisterSelection[id] == 1 || g_RegisterSelection[id] == 2) { new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511) if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM %s WHERE username='%s'",g_Table, g_szTempName[id]) if(!SQL_Execute(Query)) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) } new iRowsFound = SQL_NumRows(Query) SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) switch(g_RegisterSelection[id]) { case 1: { // No Resluts if(iRowsFound < 1) { client_cmd(id, "messagemode szPassword") } // Username Found else { client_print_color(id ,print_team_default, "^4[Bank]^1 Ez a felhasználónév már használatban van a szerveren. Próbálj másikat.") client_cmd(id, "messagemode szUsername") } } case 2: { // No Resluts if(iRowsFound < 1) { client_print_color(id ,print_team_default, "^4[Bank]^1 Ez a felhasználónév nincs regisztrálva a szerveren. Próbálj másikat!") client_cmd(id, "messagemode szUsername") } // Username Found else { client_cmd(id, "messagemode szPassword") } } } } return PLUGIN_CONTINUE }
public cmdPw(id) { // if user is already logged in stop him if(g_LoggedIn[id] == true) { return PLUGIN_HANDLED }
read_args(g_szTempPassWord[id], 49) remove_quotes(g_szTempPassWord[id])
if(contain(g_szTempPassWord[id], " ") != -1 || strlen(g_szTempPassWord[id]) < 3 || strlen(g_szTempName[id]) < 3 || strlen(g_szTempName[id]) > 50 ) { client_print_color(id ,print_team_default, "^4[Bank]^1 Rossz jelszó. Próbálj másikat.") client_print_color(id ,print_team_default, "^4[Bank]^1 A jelszó nem tartalmazhat szóközt és minimum 3 max 100 karakter lehet.") client_cmd(id, "messagemode szPassword") return PLUGIN_HANDLED } new i_steam,i_locked; if (is_user_steam(id)) i_steam = 1 else i_steam = 0 i_locked = 0 switch(g_RegisterSelection[id]) { // Register new User case 1: { ExecuteForward(g_fwUserLogin_pre, g_fwDummyResult, id) new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
if(SqlConnection == Empty_Handle) { set_fail_state(Error) } new Handle:Query = SQL_PrepareQuery(SqlConnection, "INSERT INTO %s (username, password,steamid,ip,registered,lastjoin,steamuser,locked) VALUES('%s','%s','%s','%s',NOW(),NOW(),%i, %i);",g_Table, g_szTempName[id], g_szTempPassWord[id],g_szTempSteamid[id],g_szTempIp[id],i_steam,i_locked) if(!SQL_Execute(Query)) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) }
// Set user as new in User g_LoggedIn[id] = true
client_print_color(id ,print_team_default, "^4[Bank]^1 A regisztráció sikeres!") client_print_color(id ,print_team_default, "^4[Bank]^1 Felhasználónév | ^4'%s'^1", g_szTempName[id]) client_print_color(id ,print_team_default, "^4[Bank]^1 Jelszó | ^4'%s'^1", g_szTempPassWord[id]) SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) ExecuteForward(g_fwUserLogin_post, g_fwDummyResult, id)
} // Login User case 2: { ExecuteForward(g_fwUserLogin_pre, g_fwDummyResult, id) new ErrorCode new Error[512] new Handle:SqlConnection = SQL_Connect(g_SqlTuple, ErrorCode, Error, 511)
if(SqlConnection == Empty_Handle) { set_fail_state(Error) }
new Handle:Query = SQL_PrepareQuery(SqlConnection, "SELECT * FROM %s WHERE username='%s'",g_Table, g_szTempName[id])
if(!SQL_Execute(Query)) { SQL_QueryError(Query, Error, 511) set_fail_state(Error) }
new i_StoredPassword[50] SQL_ReadResult(Query, 1, i_StoredPassword, 49) // if password is right if(equal(g_szTempPassWord[id], i_StoredPassword)) { // Kick Player who has logged in with same data new players[32], pnum, tempid get_players(players, pnum) for(new i; i<pnum; i++) { tempid = players[i] if(equal(g_szTempName[id], g_szTempName[tempid]) && id != tempid) { client_cmd(id, "disconnect") } } g_Locked[id]= SQL_ReadResult(Query, 7) if (g_Locked[id] == 1) { reset_user(id) client_print_color(id ,print_team_default, "^4[Bank]^1 Zárolva | ^4%s.", g_szTempName[id]) } else { g_LoggedIn[id] = true g_Lastjoin[id] = SQL_ReadResult(Query, 5) client_print_color(id ,print_team_default, "^4[Bank]^1 Bejeletkezve | ^4%s.", g_szTempName[id]) }
} else { client_print_color(id ,print_team_default, "^4[Bank]^1 Rossz jelszó! Próbáld újra.") client_cmd(id, "messagemode szPassword") } SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) ExecuteForward(g_fwUserLogin_post, g_fwDummyResult, id)
} } return PLUGIN_CONTINUE }
public client_disconnected(id) { updateTable(id) reset_user(id) }
public reset_user(id) { g_LoggedIn[id] = false g_szTempName[id][0] = EOS g_szTempPassWord[id][0] = EOS g_Lastjoin[id] = EOS g_Registered[id] = EOS g_szTempSteamid[id][0] = EOS g_szTempIp[id][0] = EOS
}
/******************************************************************** MYSQL FUNCTIONS ************************************************************************/ public createTable() { new szQuery[2048] new len len += format(szQuery[len], 2048,"CREATE TABLE IF NOT EXISTS %s(",g_Table) len += format(szQuery[len], 2048-len,"username VARCHAR(100), ") len += format(szQuery[len], 2048-len,"password VARCHAR(100), ") len += format(szQuery[len], 2048-len,"steamid VARCHAR(50), ") len += format(szQuery[len], 2048-len,"ip VARCHAR(50), ") len += format(szQuery[len], 2048-len,"registered DATETIME NOT NULL DEFAULT NOW(), ") len += format(szQuery[len], 2048-len,"lastjoin DATETIME NOT NULL DEFAULT NOW(), ") len += format(szQuery[len], 2048-len,"steamuser INT(1) NOT NULL default '0', ") len += format(szQuery[len], 2048-len,"locked INT(1) NOT NULL default '0', ") len += format(szQuery[len], 2048-len,"autologin INT(1) NOT NULL default '0'); ") SQL_ThreadQuery(g_SqlTuple,"createTableThread", szQuery) } public createTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { if(FailState == TQUERY_CONNECT_FAILED) return set_fail_state("Could not connect to SQL database.") else if(FailState == TQUERY_QUERY_FAILED) return set_fail_state("Query failed.") if(Errcode) return log_amx("Error on query: %s",Error) return PLUGIN_CONTINUE }
public updateTable(id) { // Save Data if(g_LoggedIn[id]) { ExecuteForward(g_fwUserLogout_pre, g_fwDummyResult, id) get_user_ip(id,g_szTempIp[id],49) get_user_authid(id,g_szTempSteamid[id],49) new szQuery[2048] new len = 0 len += format(szQuery[len], 2048, "UPDATE %s SET ",g_Table) len += format(szQuery[len], 2048-len,"lastjoin = NOW(), ") len += format(szQuery[len], 2048-len,"steamid = '%s', ",g_szTempSteamid[id]) len += format(szQuery[len], 2048-len,"ip = '%s' ",g_szTempIp[id]) len += format(szQuery[len], 2048-len,"WHERE username = '%s'", g_szTempName[id]) SQL_ThreadQuery(g_SqlTuple,"updateTableThread", szQuery) ExecuteForward(g_fwUserLogout_post, g_fwDummyResult, id) } }
public updateTableThread(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) { // lots of error checking if(FailState == TQUERY_CONNECT_FAILED) return set_fail_state("Could not connect to SQL database.") else if(FailState == TQUERY_QUERY_FAILED) return set_fail_state("Query failed.") if(Errcode) return log_amx("Error on query: %s",Error) return PLUGIN_CONTINUE }
public plugin_end() { for (new id; id <= g_maxplayers; id++) { if(g_LoggedIn[id] && is_valid_player(id)) { updateTable(id) reset_user(id) } } SQL_FreeHandle(g_SqlTuple) }
stock bool:is_user_steam(id) { static dp_pointer; if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider"))) { server_cmd("dp_clientinfo %d", id); server_exec(); return (get_pcvar_num(dp_pointer) == 2) ? true : false; } return false; } szemezgess belőle ötletet ha akarsz, nekem most se időm, se kedvem befejezni. Egyébként az a vicc, hogy reg rendszerből igen sok fajta van (mint másból is) de teljesen jól működőt és funkcionalitásában egyszerűen bővíthetőt nehéz megírni.
_________________
|
|