13/04/2015, 02:30 PM
(Última modificación: 13/04/2015, 03:21 PM por arrozconpollo.)
Entro al servidor y cuando voy a crear mi contraseña me manda el mensaje de la imagen y no solo a mi a la mayoría de los usuarios, yo probé mas de 8 claves diferentes cortas, largas y sin espacios y seguía con lo mismo (Algunos si pudieron entrar).
https://amxmodx-es.com/Thread-Sistema-de...vault-BETA
Como hago para permitir todos los caracteres en los nombres de los user? supongo que esta es la parte del code
No lo quiero hacer yo para no dañar el sma
https://amxmodx-es.com/Thread-Sistema-de...vault-BETA
Código PHP:
/** Versión del Plugin **/
new const g_szPluginVersion[] = "v2.0 BETA";
/**
Publicación: https://amxmodx-es.com/Thread-Sistema-de-Cuentas-por-adv-vault
Créditos:
- kikizon2: Por su sistema de cuentas también hecho por adv_vault. Me inspiró a que yo haga uno nuevo más dinámico y más cosas.
- Destro: Por su sistema API de guardado Advance Vault System
- Metrikcz: Por su Aporte: https://amxmodx-es.com/Thread-CODIGO-Buscador-de-jugadores-Adv-Vault
- Mario.AR: Por su código de mejorar el remuevo de comillas
- Gonza.-*: Por su stock para Chequear un caracter inválido
Changelog (Cambios producidos)
- v2.0
- Se arregló un error en el comando amx_bancuentas que se cancelaba la restricción al comando (Es decir que lo podía usar cualquiera)
- Se optimizaron todos los chequeos (Condiciones)
- Se eliminaron aquellos chequeos innecesarios
- Se agregaron chequeos adicionales para evitar errores de tipeo
- Se arregló un error con la obtención de la fecha sobre los usuarios baneados
- Se agregó un nuevo stock: StringCount();
- Se agregó nuevamente las restricciones al menú OldStyle (Gracias FierroCross)
- client_infochanged(); --> FM_ClientUserInfoChanged
- Agregado Callbacks a los menús
- Se agregaron comentarios para entender más las funciones y demases
- Se modificó la mayoría del código para un mejor uso
- v1.5
- Se cambió la estructura del Sistema
- Se corrigió un mega BUG que crasheaba el CS con el Auto-ban
- Se corrigió un mega BUG que las fechas no coincidian como corresponde
- Se corrigió un BUG del menú al registrarse
- Se corrigió un BUG que expulsaba al usuario que dio ban, en vez del al baneado
- Se removió el comando menuselect para menú de estilo viejo (Se recomienda usar el estilo VGUI)
- Se eliminó bastante código innecesario
- Se agregaron menús y otras cosas eficientes
- Se agrego la hora al momento de banear
- v1.4
- Se corrigieron varios bugs que se encontraron al probar el Sistema más profundamente
- Se agrego un sistema de ban automático (Se explica en la parte de contenido)
- v1.3
- Se agregó un mejor sistema de restricción de caracteres
- Se agregó un stock para remover las comillas con más facilidad (Gracias Mario.AR)
- Se agregó un menú de confirmación de ban (Si acepta, lo banea instantaneamente, sino, vuelve al menú de ban)
- Se arregló un problema con el auto-ingreso
- Se arregló un problema con el guardado de datos y cargado de los mismos
- Se mejoró el guardado de IP y el ingreso automático por su medio
- Se mejoró el sistema de ban / desban de cuentas
- Se mejoraron las variables booleanas (Utilizando Bitsums)
- Se optimizó el programa para mayor utilidad
- v1.2
- Se agregó un sistema de cambio de contraseña (A través de un comando)
- Se agregó en el menú de Ban de cuenta, un Sub-menú que te muestra el listado de exclusiones realizadas.
- Se optimizó el programa y removido algunos comandos innecesarios
- Se corrigieron algunos errores en el guardado
- Se corrigió un error en la función de desbaneo de cuentas (A través del tiempo)
- Se corrigieron algunas faltas de ortografía :S
- v1.1:
- Se agrego la restricción de caracteres especiales sobre los Nombres y contraseñas.
- Se agregó el Fix Label para el registro de nombres.
- Se arreglaron errores menores.
- v1.0: Lanzamiento del programa.
**/
/** Librerías **/
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <adv_vault>
#include <colorchat>
#include <hamsandwich>
/** Datos del Plugin **/
new const g_szPluginName[] = "Sistema de Cuentas";
new const g_szPluginAuthor[] = "CSAxel (Rubio.-)";
new const g_szPluginCvar[] = "sys_version";
#pragma semicolon 1
/** Enumeraciones **/
enum
{
D_PJ = 0,
D_PASSWORD,
D_IP,
D_ADMINBAN,
D_FECHABAN,
D_FECHAVEN,
D_RAZONBAN,
D_AUTOLOG,
MAX_DATOS
};
/** Arrays strings **/
new const g_szPrefix[] = "[AMXX]";
new const g_szMessage1[] = "Tu nombre está restringido en este servidor";
new const g_szMessage2[] = "Vuelve cuando no estés baneado";
new const g_szCaracteres[][] =
{
"#",
"/",
"(",
")",
"\\",
"%",
"^""
};
/** Variables del jugador (Bits) **/
new g_bConnected;
new g_bBanned;
new g_bLogged;
new g_bChangePass;
/** Variables del jugador (Ints) **/
new g_iTypeBan[33];
new g_iAutoLog[33];
/** Variables del jugador (String) **/
new g_szPlayerName[33][32];
new g_szPassword[33][34];
new g_szPlayerIP[33][21];
new g_szFechaBan[33][20];
new g_szFechaVen[33][20];
new g_szAdminBan[33][32];
new g_szRazonBan[33][64];
/** Variables Globales (Strings) **/
new g_szSimbol[2];
new g_szPlayerName_Ban[32];
/** Variables globales (Ints) **/
new g_iVault;
new g_iMenuCB;
new g_iCampos[MAX_DATOS];
new g_iMaxPlayers[1 char];
/** Variables globales (MsgID) **/
new g_iMsgID_ShowMenu;
new g_iMsgID_VGUIMenu;
/** HamHook **/
new HamHook:g_iHam_PreThink;
/** Constantes **/
const TASK_DESBAN = 21050;
const OFFSET_MENU = 205;
const OFFSET_VGUI_MENU = 2;
const ADMIN_ACCESS_MENU = ADMIN_RCON;
const TIME_DESBAN = 600;
/** Inicio del Plugin **/
public plugin_init()
{
/** Datos del plugin **/
register_plugin(g_szPluginName, g_szPluginVersion, g_szPluginAuthor);
register_cvar(g_szPluginCvar, g_szPluginVersion, FCVAR_SERVER | FCVAR_SPONLY);
set_cvar_string(g_szPluginCvar, g_szPluginVersion);
/** Ham Forwards **/
DisableHamForward(g_iHam_PreThink = RegisterHam(Ham_Player_PreThink, "player", "Ham_PlayerPreThink_Post", true));
/** Fakemeta Forwards **/
register_forward(FM_ClientUserInfoChanged, "Fwd_ClientChangeName");
register_forward(FM_ChangeLevel, "Fwd_ChangeLevel");
/** Messages ID **/
g_iMsgID_ShowMenu = get_user_msgid("ShowMenu");
g_iMsgID_VGUIMenu = get_user_msgid("VGUIMenu");
register_message(g_iMsgID_ShowMenu, "Message_ShowMenu");
register_message(g_iMsgID_VGUIMenu, "Message_VGUIMenu");
/** Comandos de consola (Cliente) **/
register_concmd("amx_bancuentas", "ConCmd_BanCuentas", ADMIN_ACCESS_MENU);
/** Comandos del cliente **/
register_clcmd("say /configs", "Clcmd_ShowConfig");
register_clcmd("CREATE_PASSWORD", "Clcmd_CreatePw");
register_clcmd("CONFIRM_PASSWORD", "Clcmd_ConfirmPw");
register_clcmd("IDENTIFLY_PASSWORD", "Clcmd_IdentiflyPw");
register_clcmd("CURRENT_PASSWORD", "Clcmd_CurrentPw");
register_clcmd("INSERT_USERNAME", "Clcmd_InsertUsername");
register_clcmd("INSERT_DATE", "Clcmd_InsertDate");
register_clcmd("INSERT_REASON", "Clcmd_InsertReason");
/** Comandos del servidor **/
register_clcmd("chooseteam", "Clcmd_ChangeTeam");
register_clcmd("jointeam", "Clcmd_ChangeTeam");
register_clcmd("menuselect", "Clcmd_MenuSelect");
/** MaxPlayers y Callbacks **/
g_iMaxPlayers{0} = get_maxplayers();
g_iMenuCB = menu_makecallback("CM_Register");
/** Creación de la DB **/
g_iVault = adv_vault_open("DB_Cuentas", false);
g_iCampos[D_PJ] = adv_vault_register_field(g_iVault, "PJ", DATATYPE_STRING, sizeof(g_szPlayerName[]));
g_iCampos[D_PASSWORD] = adv_vault_register_field(g_iVault, "Password", DATATYPE_STRING, sizeof(g_szPassword[]));
g_iCampos[D_IP] = adv_vault_register_field(g_iVault, "IP", DATATYPE_STRING, sizeof(g_szPlayerIP[]));
g_iCampos[D_ADMINBAN] = adv_vault_register_field(g_iVault, "AdminBAN", DATATYPE_STRING, sizeof(g_szAdminBan[]));
g_iCampos[D_FECHABAN] = adv_vault_register_field(g_iVault, "FechaBAN", DATATYPE_STRING, sizeof(g_szFechaBan[]));
g_iCampos[D_FECHAVEN] = adv_vault_register_field(g_iVault, "FechaVEN", DATATYPE_STRING, sizeof(g_szFechaVen[]));
g_iCampos[D_RAZONBAN] = adv_vault_register_field(g_iVault, "RazonBAN", DATATYPE_STRING, sizeof(g_szRazonBan[]));
g_iCampos[D_AUTOLOG] = adv_vault_register_field(g_iVault, "AutoLog");
adv_vault_init(g_iVault);
/** Ciclo/Chequeo de cuentas baneadas **/
set_task(float(TIME_DESBAN), "DesbanCuentas", TASK_DESBAN, .flags = "b");
}
/** AmxMod Forwards **/
public client_putinserver(id)
{
get_user_name(id, g_szPlayerName[id], charsmax(g_szPlayerName[]));
get_user_ip(id, g_szPlayerIP[id], charsmax(g_szPlayerIP[]));
if (CheckString(g_szPlayerName[id], g_szSimbol, charsmax(g_szSimbol)))
{
server_cmd("kick #%d ^"%s^"", get_user_userid(id), g_szMessage1);
return;
}
g_szPassword[id][0] = '^0';
g_szAdminBan[id][0] = '^0';
g_szFechaBan[id][0] = '^0';
g_szFechaVen[id][0] = '^0';
g_szRazonBan[id][0] = '^0';
g_bConnected |= (1<<(id - 1));
g_bBanned &= ~(1<<(id - 1));
g_bLogged &= ~(1<<(id - 1));
g_bChangePass &= ~(1<<(id - 1));
g_iTypeBan[id] = 0;
g_iAutoLog[id] = 0;
CargarDatos(id);
}
public client_disconnect(id)
{
if (g_bLogged & (1<<(id - 1)) && ~g_bBanned & (1<<(id - 1)))
GuardarDatos(id, 0);
g_bConnected &= ~(1<<(id - 1));
g_bLogged &= ~(1<<(id - 1));
g_bBanned &= ~(1<<(id - 1));
g_bChangePass &= ~(1<<(id - 1));
}
/** Ham Forwards **/
public Ham_PlayerPreThink_Post(id)
{
set_pdata_int(id, OFFSET_MENU, 0);
DisableHamForward(g_iHam_PreThink);
}
/** Fakemeta Forwards **/
public Fwd_ClientChangeName(id)
{
if (~g_bConnected & (1<<(id - 1)))
return FMRES_IGNORED;
static szCurrentName[32];
get_user_info(id, "name", szCurrentName, charsmax(szCurrentName));
if (equal(szCurrentName, g_szPlayerName[id]))
return FMRES_IGNORED;
set_user_info(id, "name", g_szPlayerName[id]);
return FMRES_SUPERCEDE;
}
public Fwd_ChangeLevel()
{
static id;
for (id = 1; id <= g_iMaxPlayers{0}; id++)
{
if (~g_bConnected & (1<<(id - 1)))
continue;
if (~g_bLogged & (1<<(id - 1)) || g_bBanned & (1<<(id - 1)))
continue;
GuardarDatos(id, 0);
}
return FMRES_IGNORED;
}
/** Comandos de consola (Cliente) **/
public ConCmd_BanCuentas(id, iLevel)
{
if (~get_user_flags(id) & iLevel)
return PLUGIN_HANDLED;
SM_BanMenu(id);
return PLUGIN_HANDLED;
}
/** Comandos del cliente **/
public Clcmd_ShowConfig(id)
{
if (~g_bLogged & (1<<(id - 1)) || g_bBanned & (1<<(id - 1)))
return PLUGIN_HANDLED;
SM_Configs(id);
return PLUGIN_HANDLED;
}
public Clcmd_CreatePw(id)
{
read_args(g_szPassword[id], charsmax(g_szPassword[]));
szRemove_Quotes(g_szPassword[id], g_szPassword[id]);
trim(g_szPassword[id]);
if (!g_szPassword[id][0] || StringCount(g_szPassword[id], ' ') > 1)
{
client_cmd(id, "messagemode ^"CREATE_PASSWORD^"");
ChatColor(id, RED, "^x04%s^x03 Tu contraseña contiene espacios. Inténtalo nuevamente", g_szPrefix);
return;
}
if (CheckString(g_szPassword[id], g_szSimbol, charsmax(g_szSimbol)))
{
client_cmd(id, "messagemode ^"CREATE_PASSWORD^"");
ChatColor(id, RED, "^x04%s^x03 Tu contraseña contiene un caracter inválido ^x04(^x01%s^x04)", g_szPrefix, g_szSimbol);
return;
}
client_cmd(id, "messagemode ^"CONFIRM_PASSWORD^"");
ChatColor(id, BLUE, "^x04%s^x03 Para completar tu registro... Repite tu contraseña", g_szPrefix);
}
public Clcmd_ConfirmPw(id)
{
static szPassword[32];
read_args(szPassword, charsmax(szPassword));
szRemove_Quotes(szPassword, szPassword);
trim(szPassword);
if (!equal(szPassword, g_szPassword[id]))
{
SM_Register(id);
ChatColor(id, RED, "^x04%s^x03 Las contraseñas no coinciden... Inténtalo nuevamente.", g_szPrefix);
return;
}
GuardarDatos(id, 0);
if (g_bChangePass & (1<<(id - 1)))
{
SM_Configs(id);
ChatColor(id, BLUE, "^x04%s^x03 Tu contraseña ha sido cambiada correctamente.", g_szPrefix);
return;
}
g_bLogged |= (1<<(id - 1));
engclient_cmd(id, "chooseteam");
ChatColor(id, BLUE, "^x04%s^x03 Tu contraseña ha sido creada correctamente.", g_szPrefix);
set_task(1.0, "Bienvenida", id);
}
public Clcmd_IdentiflyPw(id)
{
read_args(g_szPassword[id], charsmax(g_szPassword[]));
szRemove_Quotes(g_szPassword[id], g_szPassword[id]);
trim(g_szPassword[id]);
static szBuffer[32];
adv_vault_get_prepare(g_iVault, _, g_szPlayerName[id]);
adv_vault_get_field(g_iVault, g_iCampos[D_PASSWORD], szBuffer, charsmax(szBuffer));
if (!equal(szBuffer, g_szPassword[id]))
{
client_cmd(id, "messagemode ^"IDENTIFLY_PASSWORD^"");
ChatColor(id, RED, "^x04%s^x03 Contraseña incorrecta!.", g_szPrefix);
return;
}
GuardarDatos(id, 1);
g_bLogged |= (1<<(id - 1));
engclient_cmd(id, "chooseteam");
}
public Clcmd_CurrentPw(id)
{
static szPassword[32];
read_args(szPassword, charsmax(szPassword));
szRemove_Quotes(szPassword, szPassword);
trim(szPassword);
static szBuffer[32];
adv_vault_get_prepare(g_iVault, _, g_szPlayerName[id]);
adv_vault_get_field(g_iVault, g_iCampos[D_PASSWORD], szBuffer, charsmax(szBuffer));
if (!equal(szPassword, szBuffer))
{
client_cmd(id, "messagemode ^"CURRENT_PASSWORD^"");
ChatColor(id, RED, "^x04%s^x03 Contraseña incorrecta!.", g_szPrefix);
return;
}
g_bChangePass |= (1<<(id - 1));
g_szPassword[id][0] = '^0';
client_cmd(id, "messagemode ^"CREATE_PASSWORD^"");
ChatColor(id, BLUE, "^x04%s^x03 Contraseña correcta... Para completar tu registro escribe tu nueva contraseña.", g_szPrefix);
}
public Clcmd_InsertUsername(id)
{
static szName[32];
read_args(szName, charsmax(szName));
szRemove_Quotes(szName, szName);
trim(szName);
if (!szName[0] || StringCount(szName, ' ') > 1)
{
client_cmd(id, "messagemode ^"INSERT_USERNAME^"");
ChatColor(id, RED, "^x04%s^x03 El nombre no contiene espacios. Inténtalo nuevamente.", g_szPrefix);
return;
}
SM_FindPlayer(id, szName);
formatex(g_szAdminBan[id], charsmax(g_szAdminBan[]), g_szPlayerName[id]);
}
public Clcmd_InsertDate(id)
{
read_args(g_szFechaVen[id], charsmax(g_szFechaVen[]));
szRemove_Quotes(g_szFechaVen[id], g_szFechaVen[id]);
trim(g_szFechaVen[id]);
if (!g_szFechaVen[id][0] || StringCount(g_szFechaVen[id], ' ') > 1)
{
client_cmd(id, "messagemode ^"INSERT_DATE^"");
ChatColor(id, RED, "^x04%s^x03 La fecha no contiene espacios. Inténtalo nuevamente o más tarde", g_szPrefix);
return;
}
static szHora[10];
get_time("%H:%M:%S", szHora, charsmax(szHora));
format(g_szFechaVen[id], charsmax(g_szFechaVen[]), "%s - %s", g_szFechaVen[id], szHora);
client_cmd(id, "messagemode ^"INSERT_REASON^"");
ChatColor(id, BLUE, "^x04%s^x03 Ingresa la razón sobre el ban del jugador.", g_szPrefix);
}
public Clcmd_InsertReason(id)
{
read_args(g_szRazonBan[id], charsmax(g_szRazonBan[]));
szRemove_Quotes(g_szRazonBan[id], g_szRazonBan[id]);
trim(g_szRazonBan[id]);
if (!g_szRazonBan[id][0] || StringCount(g_szRazonBan[id], ' ') > 1)
{
client_cmd(id, "messagemode ^"INSERT_REASON^"");
ChatColor(id, RED, "^x04%s^x03 La razón no contiene espacios. Inténtalo nuevament", g_szPrefix);
return;
}
static iMenu, szText[156];
iMenu = menu_create("¿ Confirmar ?", "HandlerMenu_Confirmar");
menu_additem(iMenu, "Si, banear ahora");
menu_additem(iMenu, "No, reescribir datos");
menu_addblank(iMenu, 0);
formatex(szText, charsmax(szText), "\yJugador\r: \w%s^n\
\yFecha de vencimiento\r: \w%s^n\
\yRazón del ban\r: \w%s",
g_szPlayerName_Ban, g_szFechaVen[id], g_szRazonBan[id]);
menu_addtext(iMenu, szText, 0);
menu_setprop(iMenu, MPROP_EXIT, MEXIT_NEVER);
menu_display(id, iMenu);
}
/** Comandos del servidor **/
public Clcmd_ChangeTeam(id)
{
if (g_bLogged & (1<<(id - 1)))
return PLUGIN_CONTINUE;
SM_Register(id);
return PLUGIN_HANDLED;
}
public Clcmd_MenuSelect(id)
{
if (g_bLogged & (1<<(id - 1)))
return PLUGIN_CONTINUE;
static szArgs[2], iKey;
read_argv(1, szArgs, charsmax(szArgs));
iKey = (str_to_num(szArgs) - 1);
switch (iKey)
{
case 0: client_cmd(id, "messagemode ^"CREATE_PASSWORD^"");
case 1: client_cmd(id, "messagemode ^"IDENTIFLY_PASSWORD^"");
default:
{
SM_Register(id);
return PLUGIN_HANDLED;
}
}
ChatColor(id, BLUE, "^x04%s^x03 Ingresa tu contraseña!.", g_szPrefix);
return PLUGIN_HANDLED;
}
/** ShowMenus **/
SM_Register(id)
{
static iMenu, szText[256];
formatex(szText, charsmax(szText), "Bienvenido a nuestro servidor con \r%s", g_szPluginName);
iMenu = menu_create(szText, "HM_Register");
if (g_bBanned & (1<<(id - 1)))
{
menu_additem(iMenu, "Salir del servidor^n");
formatex(szText, charsmax(szText), "\yTU CUENTA ESTA BANEADA\r:^n\
\yAdministrador\r:\w %s^n\
\yFecha de ban\r:\w %s^n\
\yFecha de Vencimiento\r:\w %s^n\
\yRazón\r:\w %s", g_szAdminBan[id], g_szFechaBan[id], g_szFechaVen[id], g_szRazonBan[id]);
menu_addtext(iMenu, szText, 0);
}
else
{
menu_additem(iMenu, "Crear nueva cuenta", .callback = g_iMenuCB);
menu_additem(iMenu, "Identificarse", .callback = g_iMenuCB);
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_NEVER);
menu_display(id, iMenu);
}
SM_BanMenu(id)
{
static iMenu, szText[18];
iMenu = menu_create("Ban de cuentas", "HM_BanMenu");
menu_additem(iMenu, "Buscar jugador...");
formatex(szText, charsmax(szText), "Acción: %s^n", g_iTypeBan[id] ? "\rDesbanear" : "\yBanear");
menu_additem(iMenu, szText);
menu_additem(iMenu, "Lista de jugadores excluidos");
menu_setprop(iMenu, MPROP_EXITNAME, "Salir");
menu_display(id, iMenu);
}
SM_FindPlayer(id, szName[])
{
static iKeyIndex, iResultados, iMenu, szKeyIndex[2], szText[64];
formatex(szText, charsmax(szText), "\yNombres que contengan\r: \w%s\r\R", szName);
iMenu = menu_create(szText, "HM_FindPlayer");
iResultados = 0;
adv_vault_find_start(g_iVault, g_iCampos[D_PJ], szName, FINDFLAGS_CONTAIN|FINDFLAGS_CASE_SENSITIVE);
while ((iKeyIndex = adv_vault_find_next(g_iVault)))
{
adv_vault_get_field(g_iVault, g_iCampos[D_PJ], szText, charsmax(szText));
num_to_str(iKeyIndex, szKeyIndex, charsmax(szKeyIndex));
menu_additem(iMenu, szText, szKeyIndex);
iResultados++;
}
adv_vault_find_closed(g_iVault);
if (!iResultados)
menu_additem(iMenu, "Iniciar nueva busqueda", "0");
if (iResultados > 7)
{
menu_setprop(iMenu, MPROP_BACKNAME, "Atrás");
menu_setprop(iMenu, MPROP_NEXTNAME, "Siguiente");
}
menu_setprop(iMenu, MPROP_EXITNAME, "Salir");
menu_display(id, iMenu);
}
SM_PlayerList(id)
{
static iMenu, iKeyIndex, iResultados, szName[32], szFecha[12], szText[64];
iMenu = menu_create("Lista de jugadores excluidos\r\R", "HM_PlayerList");
iResultados = 0;
adv_vault_find_start(g_iVault, g_iCampos[D_FECHAVEN], "/", FINDFLAGS_CONTAIN);
while ((iKeyIndex = adv_vault_find_next(g_iVault)))
{
adv_vault_get_field(g_iVault, g_iCampos[D_FECHAVEN], szFecha, charsmax(szFecha));
adv_vault_get_keyname(g_iVault, iKeyIndex, szName, charsmax(szName));
formatex(szText, charsmax(szText), "\w%s \r- \yFecha\r: \w%s", szName, szFecha);
menu_additem(iMenu, szText);
iResultados++;
}
adv_vault_find_closed(g_iVault);
if (!iResultados)
menu_additem(iMenu, "No se encontraron usuarios baneados");
if (iResultados > 7)
{
menu_setprop(iMenu, MPROP_BACKNAME, "Atrás");
menu_setprop(iMenu, MPROP_NEXTNAME, "Siguiente");
}
menu_setprop(iMenu, MPROP_EXITNAME, "Salir");
menu_display(id, iMenu);
}
SM_Configs(id)
{
static iMenu, szText[52];
iMenu = menu_create("Configurar mi cuenta", "HM_Configs");
menu_additem(iMenu, "Cambiar mi contraseña");
formatex(szText, charsmax(szText), "¿ Recordar mi cuenta ? %s^n^n\
\yCUENTA\r: \w#%d", g_iAutoLog[id] ? "\y[Si]" : "\r[No]", adv_vault_get_keyindex(g_iVault, g_szPlayerName[id]));
menu_additem(iMenu, szText);
menu_setprop(iMenu, MPROP_EXITNAME, "Salir");
menu_display(id, iMenu);
}
/** Callbacks Menus **/
public CM_Register(id, iMenu, iItem)
{
if (!CheckName(id) && !iItem)
return ITEM_ENABLED;
else if (CheckName(id) && iItem)
return ITEM_ENABLED;
return ITEM_DISABLED;
}
/** Handlers Menus **/
public HM_Register(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
if (g_bBanned & (1<<(id - 1)))
{
menu_destroy(iMenu);
server_cmd("kick #%d ^"%s^"", get_user_userid(id), g_szMessage2);
return PLUGIN_HANDLED;
}
menu_destroy(iMenu);
client_cmd(id, "messagemode ^"%s^"", iItem ? "IDENTIFLY_PASSWORD" : "CREATE_PASSWORD");
ChatColor(id, BLUE, "^x04%s^x03 Ingresa tu contraseña!.", g_szPrefix);
return PLUGIN_HANDLED;
}
public HM_BanMenu(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
switch (iItem)
{
case 0:
{
client_cmd(id, "messagemode ^"INSERT_USERNAME^"");
ChatColor(id, BLUE, "^x04%s^x03 Ingresa el nombre del jugador ^x04(^x01Puede ser una parte de él^x04)^x01.", g_szPrefix);
}
case 1:
{
g_iTypeBan[id] = !(g_iTypeBan[id]);
SM_BanMenu(id);
}
case 2: SM_PlayerList(id);
}
return PLUGIN_HANDLED;
}
public HM_FindPlayer(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
SM_BanMenu(id);
g_szAdminBan[id][0] = '^0';
return PLUGIN_HANDLED;
}
static iGetInfo, szItem[2], szName[32], iKeyIndex;
menu_item_getinfo(iMenu, iItem, iGetInfo, szItem, charsmax(szItem), szName, charsmax(szName), iGetInfo);
iKeyIndex = str_to_num(szItem);
if (!iKeyIndex)
{
menu_destroy(iMenu);
client_cmd(id, "messagemode ^"INSERT_USERNAME^"");
return PLUGIN_HANDLED;
}
formatex(g_szPlayerName_Ban, charsmax(g_szPlayerName_Ban), szName);
if (g_iTypeBan[id])
ShowBanPlayer(id, 1);
else
{
client_cmd(id, "messagemode ^"INSERT_DATE^"");
ChatColor(id, BLUE, "^x04%s^x03 Ingresa la fecha de vencimiento", g_szPrefix);
ChatColor(id, BLUE, "^x04%s^x03 Formato de fecha:^x01 MES / DÍA / AÑO ^x04(Dos últimos dígitos).", g_szPrefix);
}
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
public HM_PlayerList(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
SM_BanMenu(id);
return PLUGIN_HANDLED;
}
menu_destroy(iMenu);
SM_PlayerList(id);
return PLUGIN_HANDLED;
}
public HandlerMenu_Confirmar(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
if (!iItem)
ShowBanPlayer(id, 0);
else
SM_BanMenu(id);
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
public HM_Configs(id, iMenu, iItem)
{
if (~g_bConnected & (1<<(id - 1)) || iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
if (iItem)
{
g_iAutoLog[id] = !(g_iAutoLog[id]);
SM_Configs(id);
}
else
{
client_cmd(id, "messagemode ^"CURRENT_PASSWORD^"");
ChatColor(id, BLUE, "^x04%s^x03 Ingresa tu contraseña actual para continuar.", g_szPrefix);
}
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
public Message_ShowMenu(iMsgID, iDest, iEntity)
{
static szMenuCode[32];
get_msg_arg_string(4, szMenuCode, charsmax(szMenuCode));
if (contain(szMenuCode, "#Team") == -1)
return PLUGIN_CONTINUE;
static CsTeams:iTeam;
iTeam = cs_get_user_team(iEntity);
if (g_bLogged & (1<<(iEntity - 1)) && (iTeam == CS_TEAM_SPECTATOR || iTeam == CS_TEAM_UNASSIGNED))
return PLUGIN_CONTINUE;
CheckUser(iEntity);
EnableHamForward(g_iHam_PreThink);
return PLUGIN_HANDLED;
}
public Message_VGUIMenu(iMsgID, iDest, iEntity)
{
if (get_msg_arg_int(1) != OFFSET_VGUI_MENU)
return PLUGIN_CONTINUE;
static CsTeams:iTeam;
iTeam = cs_get_user_team(iEntity);
if (g_bLogged & (1<<(iEntity - 1)) && (iTeam == CS_TEAM_SPECTATOR || iTeam == CS_TEAM_UNASSIGNED))
return PLUGIN_CONTINUE;
CheckUser(iEntity);
return PLUGIN_HANDLED;
}
public CheckUser(id)
{
if (~g_bLogged & (1<<(id - 1)))
{
static szFechaBan[15], szPlayerIP[21];
adv_vault_get_prepare(g_iVault, _, g_szPlayerName[id]);
adv_vault_get_field(g_iVault, g_iCampos[D_FECHAVEN], szFechaBan, charsmax(szFechaBan));
if (strlen(szFechaBan) > 3)
g_bBanned |= (1<<(id - 1));
else
{
adv_vault_get_field(g_iVault, g_iCampos[D_IP], szPlayerIP, charsmax(szPlayerIP));
if (g_iAutoLog[id] && equal(szPlayerIP, g_szPlayerIP[id]))
{
g_bLogged |= (1<<(id - 1));
engclient_cmd(id, "chooseteam");
return;
}
}
SM_Register(id);
}
}
public ShowBanPlayer(id, iTypeBan)
{
switch (iTypeBan)
{
case 0:
{
get_time("%d/%m/%Y - %H:%M:%S", g_szFechaBan[id], charsmax(g_szFechaBan[]));
adv_vault_set_start(g_iVault);
adv_vault_set_field(g_iVault, g_iCampos[D_ADMINBAN], g_szAdminBan[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_FECHABAN], g_szFechaBan[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_FECHAVEN], g_szFechaVen[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_RAZONBAN], g_szRazonBan[id]);
adv_vault_set_end(g_iVault, 0, g_szPlayerName_Ban);
server_cmd("kick ^"%s^" ^"%s^"", g_szPlayerName_Ban, g_szMessage2);
ChatColor(0, GREEN, "^x04%s^x01 Admin ^x04%s^x01 baneó la cuenta de ^x04%s^x03 -^x01 Fecha de vencimiento: ^x04%s", g_szPrefix, g_szAdminBan[id], g_szPlayerName_Ban, g_szFechaVen[id]);
ChatColor(0, GREEN, "^x04%s^x01 Razón de ban:^x04 %s", g_szPrefix, g_szRazonBan[id]);
}
case 1:
{
static szFechaBan[21];
adv_vault_get_prepare(g_iVault, _, g_szPlayerName_Ban);
adv_vault_get_field(g_iVault, g_iCampos[D_FECHAVEN], szFechaBan, charsmax(szFechaBan));
if (containi(szFechaBan[2], "") != -1 && containi(szFechaBan[5], "") != -1)
{
ChatColor(id, GREEN, "^x04%s^x01 El jugador que intentas desbanear, no está baneado en el servidor.", g_szPrefix);
return;
}
adv_vault_set_start(g_iVault);
adv_vault_set_field(g_iVault, g_iCampos[D_ADMINBAN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_FECHABAN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_FECHAVEN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_RAZONBAN], "");
adv_vault_set_end(g_iVault, 0, g_szPlayerName_Ban);
ChatColor(0, GREEN, "^x04%s^x01 Admin ^x04%s^x01 desbaneó la cuenta de ^x04%s", g_szPrefix, g_szPlayerName[id], g_szPlayerName_Ban);
}
}
}
public GuardarDatos(id, isIP)
{
adv_vault_set_start(g_iVault);
if (isIP)
adv_vault_set_field(g_iVault, g_iCampos[D_IP], g_szPlayerIP[id]);
else
{
adv_vault_set_field(g_iVault, g_iCampos[D_PJ], g_szPlayerName[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_PASSWORD], g_szPassword[id]);
}
adv_vault_set_field(g_iVault, g_iCampos[D_AUTOLOG], g_iAutoLog[id]);
adv_vault_set_end(g_iVault, 0, g_szPlayerName[id]);
}
public CargarDatos(id)
{
if (!adv_vault_get_prepare(g_iVault, _, g_szPlayerName[id]))
return;
adv_vault_get_field(g_iVault, g_iCampos[D_PASSWORD], g_szPassword[id], charsmax(g_szPassword[]));
adv_vault_get_field(g_iVault, g_iCampos[D_ADMINBAN], g_szAdminBan[id], charsmax(g_szAdminBan[]));
adv_vault_get_field(g_iVault, g_iCampos[D_FECHABAN], g_szFechaBan[id], charsmax(g_szFechaBan[]));
adv_vault_get_field(g_iVault, g_iCampos[D_FECHAVEN], g_szFechaVen[id], charsmax(g_szFechaVen[]));
adv_vault_get_field(g_iVault, g_iCampos[D_RAZONBAN], g_szRazonBan[id], charsmax(g_szRazonBan[]));
g_iAutoLog[id] = adv_vault_get_field(g_iVault, g_iCampos[D_AUTOLOG]);
}
public Bienvenida(id)
{
ChatColor(0, GREEN, "^x04%s^x01 Bienvenido ^x03%s^x01. Eres la cuenta registrada ^x04#%d", g_szPrefix, g_szPlayerName[id], adv_vault_get_keyindex(g_iVault, g_szPlayerName[id]));
static iKeyIndex, szPlayerBan[32];
adv_vault_find_start(g_iVault, g_iCampos[D_IP], g_szPlayerIP[id], FINDFLAGS_CONTAIN);
while ((iKeyIndex = adv_vault_find_next(g_iVault)))
{
adv_vault_get_keyname(g_iVault, iKeyIndex, szPlayerBan, charsmax(szPlayerBan));
static szFechaBan[21];
adv_vault_get_prepare(g_iVault, _, szPlayerBan);
adv_vault_get_field(g_iVault, g_iCampos[D_FECHAVEN], szFechaBan, charsmax(szFechaBan));
if (containi(szFechaBan[2], "/") != -1 && containi(szFechaBan[5], "/") != -1)
{
get_time("%d/%m/%Y - %H:%M:%S", g_szFechaBan[id], charsmax(g_szFechaBan[]));
adv_vault_set_start(g_iVault);
adv_vault_set_field(g_iVault, g_iCampos[D_ADMINBAN], g_szAdminBan[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_FECHABAN], g_szFechaBan[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_FECHAVEN], g_szFechaVen[id]);
adv_vault_set_field(g_iVault, g_iCampos[D_RAZONBAN], g_szRazonBan[id]);
adv_vault_set_end(g_iVault, 0, g_szPlayerName[id]);
server_cmd("kick #%d ^"%s^"", get_user_userid(id), g_szMessage2);
ChatColor(0, RED, "^x04%s^x01 El usuario (^x03%s^x01) ha sido baneado por coincidencias con otro usuario baneado", g_szPrefix, g_szPlayerName[id]);
}
}
adv_vault_find_closed(g_iVault);
}
public DesbanCuentas(task)
{
static iKeyIndex, szKeyName[32], szDate[25];
get_time("%d/%m/%Y - %H:%M:%S", szDate, charsmax(szDate));
adv_vault_find_start(g_iVault, g_iCampos[D_FECHAVEN], szDate, FINDFLAGS_CONTAIN);
while ((iKeyIndex = adv_vault_find_next(g_iVault)))
{
adv_vault_get_keyname(g_iVault, iKeyIndex, szKeyName, charsmax(szKeyName));
adv_vault_set_start(g_iVault);
adv_vault_set_field(g_iVault, g_iCampos[D_ADMINBAN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_FECHABAN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_FECHAVEN], "");
adv_vault_set_field(g_iVault, g_iCampos[D_RAZONBAN], "");
adv_vault_set_end(g_iVault, 0, szKeyName);
ChatColor(0, GREEN, "^x04%s^x01 El usuario ^x04%s^x01 no está más baneado y puede volver a jugar", g_szPrefix, szKeyName);
}
adv_vault_find_closed(g_iVault);
}
public CheckName(id)
{
if (!adv_vault_get_prepare(g_iVault, _, g_szPlayerName[id]))
return false;
return true;
}
stock CheckString(szString[], szCaracter[], iLen)
{
static iSz;
for (iSz = 0; iSz < sizeof(g_szCaracteres); iSz++)
{
if (containi(szString, g_szCaracteres[iSz]) != -1)
{
formatex(szCaracter, iLen, "%s", g_szCaracteres[iSz]);
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
stock szRemove_Quotes(const szStr[], szOut[])
{
if (!szStr[1])
{
szOut[0] = EOS;
return 0;
}
copy(szOut, strlen(szStr)-2, szStr[1]);
trim(szOut);
static iLen;
iLen = strlen(szOut);
for (new i = 0; i < iLen; i++)
{
if (szOut[i] == '"')
return 0;
}
return iLen;
}
stock StringCount(const szString[], szSeachStr)
{
static iCount, iLen;
iLen = strlen(szString);
for (new i = 0; i <= iLen; i++)
{
if (szString[i] == szSeachStr)
iCount++;
}
return iCount;
}
Como hago para permitir todos los caracteres en los nombres de los user? supongo que esta es la parte del code
Código PHP:
/** Arrays strings **/
new const g_szPrefix[] = "[AMXX]";
new const g_szMessage1[] = "Tu nombre está restringido en este servidor";
new const g_szMessage2[] = "Vuelve cuando no estés baneado";
new const g_szCaracteres[][] =
{
"#",
"/",
"(",
")",
"\\",
"%",
"^""
};
No lo quiero hacer yo para no dañar el sma