Kód: #include <amxmodx>
#define VERSION "0.7.0"
#define MAXPLAYERS 32 + 1
//Cells for user info storage #define TEMP_CELLS 33
//Time after player reconnect to remove player info. Used to remove it if player disconnects after reconnect #define RECONNECT_TASK_TIME 3.0
//User info store methods enum { STORE_STEAM = 1, STORE_IP }
//Connect Messages are stored here new g_Messages[3][192]
//Cells currently occupied by user info's new g_CurCells
//A multi-dimensional array that holds player info new g_PlayerReconnectInfo[TEMP_CELLS][33]
//Cvars new c_OnOff,c_Message,c_Token,c_StoreType
public plugin_init() { register_plugin("Server Connect Message",VERSION,"shine") register_cvar("servconmsg",VERSION,FCVAR_SERVER|FCVAR_SPONLY) //Cvars c_OnOff = register_cvar("amx_connect_msg_on","1") c_Token = register_cvar("amx_connect_msg_token","$") c_Message = register_cvar("amx_conmsg","Udvozollek a szerveren!$Jo jatekot") c_StoreType = register_cvar("amx_connect_store_type","1") //1 - steamid, 2 - ip new tStr[192],Token[2] //Get Connect Messages from cvars get_pcvar_string(c_Message,tStr,191) get_pcvar_string(c_Token,Token,1) //Write them to a global array for(new i=0;i < 3;i++) strtok(tStr,g_Messages[i],191,tStr,191,Token[0]) }
public client_connect(id) { //Check if user hasn't already been forced to reconnect and check if he isn't a bot if(!CheckReconnect(id) && get_pcvar_num(c_OnOff) && !is_user_bot(id)) { //Set player cvars static i for(i = 1; i < 3; i++) client_cmd(id,"scr_connectmsg%d ^"%s^"",i,g_Messages[i]) client_cmd(id,"scr_connectmsg ^"%s^"",g_Messages[0]) //Store player Info switch(get_pcvar_num(c_StoreType)) { case STORE_STEAM : { get_user_authid(id,g_PlayerReconnectInfo[g_CurCells],32) } case STORE_IP : { get_user_ip(id,g_PlayerReconnectInfo[g_CurCells],32) } } //Set the time the user info will be automatically removed if user doesn't reconnect set_task(RECONNECT_TASK_TIME,"RemoveCell",_,g_PlayerReconnectInfo[g_CurCells],32) g_CurCells++ //Force user to reconnect client_cmd(id,"reconnect") } }
public RemoveCell(Data[]) { new i for(i = 0; i < g_CurCells; i++) { if(equal(Data,g_PlayerReconnectInfo[i])) { MoveCellsUp(i) } } }
public client_disconnect(id) remove_task(id)
//Make a 1 second delay after user has joined the game to remove those connect messages public client_putinserver(id) if(get_pcvar_num(c_OnOff) && !is_user_bot(id)) set_task(1.0,"ClearPlayerMessages",id)
public ClearPlayerMessages(id) { //Reset player cvars new i for(i = 1; i < 3; i++) client_cmd(id,"scr_connectmsg%d ^"^"",i) client_cmd(id,"scr_connectmsg ^"^"") }
public CheckReconnect(id) { new SteamID_IP[33],i switch(get_pcvar_num(c_StoreType)) { case STORE_STEAM : { get_user_authid(id,SteamID_IP,32) } case STORE_IP : { get_user_ip(id,SteamID_IP,32) } } //Compare every info cell to player info. If it matches then return true and clean his info cell. for(i = 0; i < g_CurCells; i++) { if(equal(SteamID_IP,g_PlayerReconnectInfo[i])) { MoveCellsUp(i) return true } } //If no matching info was found - return false return false }
public MoveCellsUp(Line) {
new i for(i = Line; i < g_CurCells - 1; i++) { copy(g_PlayerReconnectInfo[i],191,g_PlayerReconnectInfo[i+1]) } g_CurCells-- }
|