01/07/2018, 11:15 PM
Proba
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <adv_vault>
new g_playertag[33], g_admintag[33], g_frags[33], g_level[33], g_reset[33]
new g_vault, g_contra[33][20], g_contra2[33][20], g_fecha[33][32], g_ip[33][32], g_estados[33], g_can[33]
new g_MsgVgui, g_MsgShowMenu;
const MAX_FRAGS = 9999
new const FRAGS_REQUIRED[] = { 5, 18, 26, 30, 36, 45, 58, 65, 78, 88, 97, 110, 200, 300, 400, 500, 600, 700, 800, 900, 100, MAX_FRAGS }
const MAX_LEVEL = 12
const MAX_RESET = 10
const TASK_MAINHUD = 6385
const Float:HUD_POS_X = 0.01
const Float:HUD_POS_Y = 0.22
const HUD_ID = 9873
const HUD_CHANNEL = 1
new g_SyncHudMsg
enum {
CAMPO_FECHA,
CAMPO_PASSWORD,
CAMPO_IP,
CAMPO_FRAGS,
CAMPO_LEVEL,
CAMPO_RESET,
MAX_FIELDS
}
enum {
NOREGISTRADO,
REGISTRADO,
LOGUEADO,
ESTADOS
}
new const Estados[ESTADOS][] = { "No-Registrado", "registrado", "Logueado" }
new g_cuenta[MAX_FIELDS];
public plugin_init() {
register_plugin("Mod de prueba", "1.0", "Saber")
register_clcmd("say", "HookSay")
register_clcmd("say /cuenta", "CmdCuenta")
register_clcmd("INGRESAR_PASSWORD", "Contra")
register_clcmd("say /reset", "CmdReset")
g_SyncHudMsg = CreateHudSyncObj()
g_MsgVgui = get_user_msgid("VGUIMenu");
g_MsgShowMenu = get_user_msgid("ShowMenu");
register_message(g_MsgVgui, "message_VGUImenu");
register_message(g_MsgShowMenu, "message_VGUImenu");
register_forward(FM_ClientUserInfoChanged, "fw_clientinfo_changed");
RegisterHam(Ham_Killed, "Player", "fw_PlayerKilled_Post")
g_vault = adv_vault_open("Cuentas", false)
g_cuenta[CAMPO_FECHA] = adv_vault_register_field(g_vault, "Fecha", DATATYPE_STRING, 32)
g_cuenta[CAMPO_PASSWORD] = adv_vault_register_field(g_vault, "Password", DATATYPE_STRING, 20)
g_cuenta[CAMPO_IP] = adv_vault_register_field(g_vault, "Ip", DATATYPE_STRING, 32)
g_cuenta[CAMPO_FRAGS] = adv_vault_register_field(g_vault, "Frags")
g_cuenta[CAMPO_LEVEL] = adv_vault_register_field(g_vault, "Level")
g_cuenta[CAMPO_RESET] = adv_vault_register_field(g_vault, "Reset")
adv_vault_init(g_vault)
}
public client_putinserver(id)
{
get_user_name(id, g_playertag[id], charsmax(g_playertag))
get_time("%c", g_fecha[id], 31)
g_estados[id] = NOREGISTRADO;
g_contra[id][0] = '^0';
g_can[id] = 0
Cargar(id)
switch(get_user_flags(id))
{
case ADMIN_RCON:
{
formatex(g_admintag[id], charsmax(g_admintag), "STAFF")
return PLUGIN_HANDLED;
}
case ADMIN_LEVEL_A:
{
formatex(g_admintag[id], charsmax(g_admintag), "MODERADOR")
return PLUGIN_HANDLED;
}
case ADMIN_LEVEL_B:
{
formatex(g_admintag[id], charsmax(g_admintag), "ADMIN")
return PLUGIN_HANDLED;
}
case ADMIN_LEVEL_C:
{
formatex(g_admintag[id], charsmax(g_admintag), "V.I.P")
return PLUGIN_HANDLED;
}
}
return PLUGIN_HANDLED;
}
public HookSay(id)
{
static szSay[192]
read_args(szSay, charsmax(szSay))
remove_quotes(szSay)
replace_all(szSay, charsmax(szSay), "%", "")
if(is_user_admin(id))
{
chatcolor(id, "[!g%s!y] %s:!g%s", g_admintag[id], g_playertag[id], szSay)
}
else
{
chatcolor(id, "[Nivel:!g%d!y][Reset:!g%d!y] %s:%s", g_level[id], g_reset[id], g_playertag[id], szSay)
}
}
public ask_hudmain(id)
{
id -= HUD_ID
set_hudmessage(255, 0, 0, HUD_POS_X, HUD_POS_Y, 0, 0.0, 1.0, 0.0, 0.0, HUD_CHANNEL)
ShowSyncHudMsg(id, g_SyncHudMsg, "Nick:%s^nNivel:%d (%d / %d)^nReset:%d", g_playertag[id], g_level[id], g_frags[id], FRAGS_REQUIRED[g_level[id]], g_reset)
}
public fw_PlayerKilled_Post(victim, attacker, shouldgib)
{
if(victim == attacker || !is_user_alive(attacker))
{
return HAM_IGNORED;
}
g_frags[attacker]++
CheckLevel(attacker)
return HAM_IGNORED;
}
public CheckLevel(id)
{
if(g_level[id] == MAX_LEVEL)
{
return PLUGIN_HANDLED;
}
if(g_frags[id] == FRAGS_REQUIRED[g_level[id]])
{
g_level[id]++
}
return PLUGIN_HANDLED;
}
public client_disconnect(id)
{
remove_task(id+TASK_MAINHUD)
Guardar(id)
return PLUGIN_HANDLED;
}
public Guardar(id)
{
get_user_ip(id, g_ip[id], 31, 1)
adv_vault_set_start(g_vault)
adv_vault_set_field(g_vault, g_cuenta[CAMPO_FECHA], g_fecha[id])
adv_vault_set_field(g_vault, g_cuenta[CAMPO_PASSWORD], g_contra[id])
adv_vault_set_field(g_vault, g_cuenta[CAMPO_IP], g_ip[id])
adv_vault_set_field(g_vault, g_cuenta[CAMPO_FRAGS], g_frags[id])
adv_vault_set_field(g_vault, g_cuenta[CAMPO_LEVEL], g_level[id])
adv_vault_set_field(g_vault, g_cuenta[CAMPO_RESET], g_reset[id])
adv_vault_set_end(g_vault, 0, g_cuenta[id])
}
public Cargar(id)
{
if(!adv_vault_get_prepare(g_vault, _, g_cuenta[id]))
{
g_estados[id] = NOREGISTRADO;
return PLUGIN_HANDLED;
}
else
{
g_estados[id] = REGISTRADO
adv_vault_get_field(g_vault, g_cuenta[CAMPO_FECHA], g_fecha[id], charsmax(g_fecha[]))
adv_vault_get_field(g_vault, g_cuenta[CAMPO_IP], g_ip[id], charsmax(g_ip[]))
adv_vault_get_field(g_vault, g_cuenta[CAMPO_PASSWORD], g_contra[id], charsmax(g_contra[]))
g_frags[id] = adv_vault_get_field(g_vault, g_cuenta[CAMPO_FRAGS])
g_level[id] = adv_vault_get_field(g_vault, g_cuenta[CAMPO_LEVEL])
g_reset[id] = adv_vault_get_field(g_vault, g_cuenta[CAMPO_RESET])
}
return PLUGIN_HANDLED;
}
public CmdCuenta(id)
{
new len[50]
formatex(len, charsmax(len), "\wSistema de cuentas \yV1.0^nBienvenido:%s^nESTADO:%s^nTu ultima visita fue:%s", g_playertag[id], Estados[g_estados[id]], g_fecha[id])
new menu = menu_create(len, "HandlerCuenta")
menu_additem(menu, (g_estados[id] == REGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id])) ? "Loguearse" : "\dLoguearse", "1")
menu_additem(menu, (g_estados[id] == NOREGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id])) ? "Registrarse" : "\dRegistrarse", "2")
menu_additem(menu, (g_estados[id] == LOGUEADO && !g_can[id]) ? "Cambiar contra" : "\dCambiar Contra", "3")
menu_display(id, menu, 0)
}
public HandlerCuenta(id, menu, item)
{
if(item == MENU_EXIT)
{
return PLUGIN_HANDLED;
}
switch(item)
{
case 0:
{
if(g_estados[id] == REGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id]))
{
client_print(id, print_center, "Ingresa tu PASSWORD para ingresar a tu cuenta")
client_cmd(id, "messagemode INGRESAR_PASSWORD")
}
else
{
client_print(id, print_center, "No puedes elejir esta opcion")
return PLUGIN_HANDLED;
}
}
case 1:
{
if(g_estados[id] == NOREGISTRADO && adv_vault_get_prepare(g_vault, _, g_cuenta[id]))
{
client_print(id, print_center, "Ingresa tu PASSWORD para crear tu cuenta")
client_cmd(id, "messagemode INGRESAR_PASSWORD")
}
else
{
client_print(id, print_center, "No puedes elejir esta opcion")
return PLUGIN_HANDLED;
}
}
case 2:
{
if(g_estados[id] == LOGUEADO && !g_can[id])
{
client_print(id, print_center, "Ingresa tu nueva PASSWORD")
client_cmd(id, "messagemode INGRESAR_PASSWORD")
}
else
{
client_print(id, print_center, "No estas logueado o ya cambiaste tu clave en este mapa")
return PLUGIN_HANDLED;
}
}
}
return PLUGIN_HANDLED;
}
public Confirmar(id)
{
new len[50]
formatex(len, charsmax(len), "La clave sera:\r%s^n^nCONFIRMAR?", g_contra2[id])
new menu = menu_create(len, "HandlerConfirmar")
menu_additem(menu, "Si, confirmar", "1")
menu_additem(menu, "No, no confirmar", "2")
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
menu_display(id, menu, 0)
return PLUGIN_HANDLED;
}
public HandlerConfirmar(id, menu, item)
{
switch(item)
{
case 0:
{
switch(g_estados[id])
{
case LOGUEADO:
{
copy(g_contra[id], 19, g_contra2[id])
Guardar(id)
client_print(id, print_center, "Tu PASSWORD ha sido cambiada satisfactoriamente")
g_can[id] = 1
}
case NOREGISTRADO:
{
client_print(id, print_center, "Tu cuenta ha sido creada satisfactoriamente")
copy(g_contra[id], 31, g_contra2[id])
Guardar(id)
jTeam(id)
}
}
}
case 2:
{
menu_destroy(menu)
client_cmd(id, "messagemode INGRESAR_PASSWORD")
if(g_estados[id] == LOGUEADO)
{
client_print(id, print_center, "Ingresa la nueva clave de tu cuenta")
}
else
{
client_print(id, print_center, "Ingresa la clave de tu nueva cuenta")
}
}
}
return PLUGIN_HANDLED;
}
public fw_clientinfo_changed(id, buffer) {
if(is_user_connected(id)) {
if(g_estados[id] == LOGUEADO) {
static OldName[33];
engfunc(EngFunc_InfoKeyValue, buffer, "name", OldName, sizeof OldName - 1);
if(equal(OldName, g_cuenta[id]))
return FMRES_IGNORED;
set_user_info(id, "name", g_cuenta[id]);
client_cmd(id, "setinfo ^"name^" ^"%s^"", g_cuenta[id]);
}
}
return FMRES_IGNORED;
}
public Contra(id) {
read_args(g_contra[id], charsmax(g_contra));
remove_quotes(g_contra[id]);trim(g_contra[id]);
if(equal(g_contra[id],"") || containi(g_contra[id]," ") != -1 ) {
client_print(id, print_center, "Tu password contiene errores");
return 1;
}
switch(g_estados[id]) {
case NOREGISTRADO: {
client_print(id, print_center, "Confirma tu password para proseguir");
copy(g_contra2[id], 19, g_contra[id]);
Confirmar(id);
}
case REGISTRADO: {
new buffer[40];
adv_vault_get_prepare(g_vault, _, g_cuenta[id]);
adv_vault_get_field(g_vault, g_cuenta[CAMPO_PASSWORD], buffer, charsmax(buffer));
if(equal(buffer, g_contra[id])) {
Guardar(id);
client_print(id, print_center, "Te logueaste satisfactoriamente en tu cuenta");
jTeam(id);
} else {
CmdCuenta(id);
client_print(id, print_center, "Password Incorrecta.");
}
}
case LOGUEADO: {
if(g_can[id]) {
client_print(id, print_center, "Ya cambiaste tu contra en este mapa");
return PLUGIN_HANDLED;
}
client_print(id, print_center, "Confirma tu password para cambiarla...");
copy(g_contra2[id], 19, g_contra[id]);
Confirmar(id);
}
}
return PLUGIN_HANDLED;
}
public message_VGUImenu(msgid, dest, id) {
if(g_estados[id] != LOGUEADO)
CmdCuenta(id);
return 1;
}
public jTeam(id){
static teammsg_block, teammsg_block_vgui, restore, vgui;
restore = get_pdata_int(id, 510);
vgui = restore & (1<<0);
if (vgui)
set_pdata_int(id, 510, restore & ~(1<<0));
teammsg_block = get_msg_block(g_MsgShowMenu);
teammsg_block_vgui = get_msg_block(g_MsgVgui);
set_msg_block(g_MsgShowMenu, BLOCK_ONCE);
set_msg_block(g_MsgVgui, BLOCK_ONCE);
engclient_cmd(id, "jointeam", "5");
engclient_cmd(id, "joinclass", "5");
set_msg_block(g_MsgShowMenu, teammsg_block);
set_msg_block(g_MsgVgui, teammsg_block_vgui);
if (vgui)
set_pdata_int(id, 510, restore);
g_estados[id] = LOGUEADO;
}
public CmdReset(id)
{
new len[50]
formatex(len, charsmax(len), "\wSistema de reset \yV1.0^n^nNivel necesario:%d^n^nNivel actual:%d", MAX_LEVEL, g_level[id])
new menu = menu_create(len, "HandlerReset")
menu_additem(menu, "Si, hacer reset", "1")
menu_additem(menu, "No, no hacer reset", "2")
menu_addtext(menu, "\yOJO:\wAl hacer reset volveras a ser nivel 1")
menu_display(id, menu, 0)
return PLUGIN_HANDLED;
}
public HandlerReset(id, menu, item)
{
switch(item)
{
case 0:
{
if(g_reset[id] == MAX_RESET)
{
chatcolor(id, "No puedes hacer mas reset")
return PLUGIN_HANDLED;
}
if(g_level[id] < MAX_LEVEL)
{
chatcolor(id, "No tienes nivel suficiente para hacer reset")
}
else
{
chatcolor(0, "felicidades %s ha hecho reset satisfactoriamente")
g_reset[id]++
g_level[id] = 0
g_frags[id] = 0
}
}
case 2:
{
menu_destroy(menu)
}
}
return PLUGIN_HANDLED;
}
stock chatcolor(id, const input[], any:...)
{
static szMsg[191], msgSayText;
if (!msgSayText)
msgSayText = get_user_msgid("SayText");
vformat(szMsg, 190, input, 3);
replace_all(szMsg, 190, "!g", "^4");
replace_all(szMsg, 190, "!y", "^1");
replace_all(szMsg, 190, "!team", "^3");
message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, .player = id);
write_byte(id ? id : 33);
write_string(szMsg);
message_end();
}