05/08/2016, 11:49 AM
(Última modificación: 05/08/2016, 02:01 PM por SytOws2j22.)
Bueno espero que esten bien quisiera aportarles este plugins de logros que tenia realizado por alli y decidi compartirlos con ustedes espero que sea de su agrado. Comenten cualquier cosa. y si me pueden dar ideas para optimizarlo o mejor el codigo son todas bienvenidas.
Código PHP:
/*** Descripcion:
debes ir desbloqueado cada logro segun la accion que te pida realizar para poderlo completar.
Cvars:
estas son las cvars que se ultilizaran ponerle un maxinmo de kills a cada logro
"cvarl_killct",
"cvarl_killtt",
"cvarl_killct_round",
"cvarl_killtt_round",
"cvarl_knife",
"cvarl_glock",
"cvarl_usp",
"cvarl_deagle",
"cvarl_he",
"cvarl_mp5",
"cvarl_m4a1",
"cvarl_ak47",
"cvarl_scout",
"cvarl_m3",
"cvarl_xm1014",
"cvarl_g3g1",
"cvarl_sg550",
"cvarl_awp",
"cvarl_m249",
"cvarl_headshot"
PD; es recomendable cambiar las cvars mediante el codigo y luego activar el plugin recuerden que lleva guardado y se podrian
bugear el conteo de los logros ganados si ya un jugador ah ganado un logro y luego suben el kill requerido de ese logro.
ya que el jugador tendria que volverlo a completar y le contara 2 veces el mismo logro ganado.
Changelogs:
version 1.0 Realizacion del plugin por la parte rapida.
version 1.1 Mejoramiento de la Esctructura del codigo
version 1.2 Arreglado un bug el menu de ver logros.
Creditos: Gonza* me base en su sistema de logros.
Destro por su Api adv_vault.
***/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <colorchat>
#include <adv_vault>
#define MaxLogros 20
#define LogroSonido "Logros/logro_ganado.wav"
#define CONTACTO "visita amxmodx-es.com"
new const PLUGIN[][] = { "Evento de Logros" , "1.2", "SytOws2j" }
new const TAG[] = "^4[AMXX]^1"
new bool:g_conectado[33], bool:g_round
new gKillsCT[33];
new gKillsTT[33];
new gKCTRound[33];
new gKTTRound[33];
new gKnife[33]
new gGlock[33]
new gUsp[33]
new gDeagle[33]
new gHe[33]
new gMp5[33]
new gM4[33]
new gAk47[33]
new gScout[33]
new gM3[33]
new gXm1014[33]
new gG3G1[33]
new gSG550[33];
new gAwp[33];
new gM2[33];
new gHs[33];
new gVarContadores[33][22];
enum _:NombreCvars
{
CVAR_KILLCT = 0,
CVAR_KILLTT,
CVAR_KILLCT_ROUND,
CVAR_KILLTT_ROUND,
CVAR_KNIFE,
CVAR_GLOCK,
CVAR_USP,
CVAR_DEAGLE,
CVAR_HE,
CVAR_MP5,
CVAR_M4A1,
CVAR_AK47,
CVAR_SCOUT,
CVAR_M3,
CVAR_XM1414,
CVAR_G3G1,
CVAR_SG550,
CVAR_AWP,
CVAR_M249,
CVAR_HEADSHDOT
};
enum _:Cvars
{
CVAR_NOMBRE = 0,
CVAR_INT
};
new const CvarsRequerido[Cvars][][] =
{
{
"cvarl_killct",
"cvarl_killtt",
"cvarl_killct_round",
"cvarl_killtt_round",
"cvarl_knife",
"cvarl_glock",
"cvarl_usp",
"cvarl_deagle",
"cvarl_he",
"cvarl_mp5",
"cvarl_m4a1",
"cvarl_ak47",
"cvarl_scout",
"cvarl_m3",
"cvarl_xm1014",
"cvarl_g3g1",
"cvarl_sg550",
"cvarl_awp",
"cvarl_m249",
"cvarl_headshot"
},
{
"2000", // CVAR_KILLCT
"2000", // CVAR_KILLTT
"7", // CVAR_KILLCT_ROUND
"7", // CVAR_KILLTT_ROUND
"500", // CVAR_KNIFE,
"500", // CVAR_GLOCK
"500", // CVAR_USP
"500", // CVAR_DEAGLE
"300", // CVAR_HE
"400", // CVAR_MP5
"1000", // CVAR_M4A1
"1000", // CVAR_AK47
"500", // CVAR_SCOUT
"3000", // CVAR_M3
"1500", // CVAR_XM1414
"1500", // CVAR_G3G1
"1500", // CVAR_SG550
"1000", // CVAR_AWP
"500", // CVAR_M249
"1000" // CVAR_HEADSHDOT
}
}
new g_cvars[NombreCvars]
enum _:LOGROS
{
LOGROS_NOMBRE = 0,
LOGROS_DESCRIPCION
}
enum _:LOGROS_TIPO
{
LOGROS_GENERALES = 0
};
new const TodosLogrosProgreso[LOGROS][][] =
{
{
"El CT Mas Potente",
"El Terrorista Mas Potente", // 0// 0
"El CT Audaz",
"El Terrorista Audaz",
"El Dios del Cuchillo", // 2
"El Dios de la Glock", // 3
"El Dios de la Usp", // 4
"El Dios de la Deagle", // 5
"Bombardero Experto",
"Sargento de SWATT", // 6
"Elite de SWATT", // 7
"Taliban de la Elite", // 8
"Franco Tirador Sigiloso", // 9
"Surfista Tirador Elite", // 10
"Surfista Tirador Habilidoso", // 11
"Franco Tirador Capacitado 1", // 12
"Franco Tirador Capacitado 2", // 13
"Franco Tirador Experto" , // 14
"Sylvestre Stallone Rambo", // 15// 1// 0
"Soldado Habil Experto" // 1
},
{
"Asesina a 2000 TTs",
"Asesina a 2000 CTs", // 0// 0
"Asesina a 7 TTs en una Ronda",
"Asesina a 7 CTs en una Ronda",
"Asesina a 500 enemigos con Cuchillo",
"Asesina a 500 enemigos con Glock",
"Asesina a 500 enemigos con Usp",
"Asesina a 500 enemigos con Deagle",
"Asesina a 300 enemigos Con Granada HE",
"Asesina a 400 enemigos con la Mp5",
"Asesina a 1000 enemigos con la M4a1",
"Asesina a 1000 enemigos con Ak47",
"Asesina a 500 enemigos con Scout",
"Asesina a 3000 enemigos con M3", // 10
"Asesina a 1500 enemigos con Xm1014",
"Asesina a 1500 enemigos con TAKA TT",
"Asesina a 1500 enemigos con TAKA CT",
"Asesina a 1000 enemigos con AWP",
"Asesina a 500 enemigos con M249",
"Asesina a 1000 enemigos de HS" //
}
}
new g_logros[33][LOGROS_TIPO][22]
new g_MenuLogro[33], LogrosGanados[33];
enum
{
LOGRO_RONDA_CT,
LOGRO_RONDA_TT,
LOGRO_LOGROSGENERALES,
LOGRO_CT,
LOGRO_TT,
LOGRO_HS,
LOGRO_GLOCK,
LOGRO_CUCHILLO,
LOGRO_USP,
LOGRO_DEAGLE,
LOGRO_MP5,
LOGRO_M4A1,
LOGRO_AK47,
LOGRO_SCOUT,
LOGRO_M3,
LOGRO_HE,
LOGRO_XM1014,
LOGRO_TAKACT,
LOGRO_TAKATT,
LOGRO_AWP,
LOGRO_M2,
LOGRO_GANADO,
MAX
}
new field[MAX], vault, vNombre[33][32] ,g_sort;
new motd[1536];
public plugin_init()
{
register_plugin(PLUGIN[0], PLUGIN[1], PLUGIN[2]);
register_clcmd("say /logros","MenuProgresoLogros",_,"<mostrar menu de pogreso de logros>");
register_clcmd("say /ltop","pfn_top",_,"<mostrar top de logros>");
register_clcmd("say /layuda","MostrarAyuda",_,"<brindar ayuda al cliente>");
register_clcmd("say /lmenu","ShowMenuPrincipal");
register_concmd("amxx_verlogros","pfn_verlogros",ADMIN_RCON,"<#amxx_verlogros #nombre>")
register_concmd("say /ljugadores","verlogros_jugadores",ADMIN_RCON,"<ver los logros completados de los jugadores por un menu>")
for (new i = 0; i < sizeof(CvarsRequerido[]); i++)
{
g_cvars[i] =register_cvar(CvarsRequerido[CVAR_NOMBRE][i],CvarsRequerido[CVAR_INT][i]);
}
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn", 1)
register_event("HLTV" , "round_start" , "a", "1=0", "2=0")
register_event( "SendAudio", "TTRonda", "a", "2&%!MRAD_terwin" );
register_event( "SendAudio", "CTRonda", "a", "2&%!MRAD_ctwin" );
register_event( "SendAudio", "EmpateRonda","a","2&%!MRAD_rounddraw" );
register_event("DeathMsg", "event_DeathMsg", "a")
register_menu("Descripcion", 1 << 9, "MenuProgresoLogrosDesc_h")
vault = adv_vault_open("EventoLogros", false)
field[LOGRO_RONDA_CT] = adv_vault_register_field(vault, "RONDACT", DATATYPE_INT)
field[LOGRO_RONDA_TT] = adv_vault_register_field(vault, "RONDATT", DATATYPE_INT)
field[LOGRO_LOGROSGENERALES] = adv_vault_register_field(vault, "LOGROGENERALES", DATATYPE_ARRAY,22)
field[LOGRO_CT] = adv_vault_register_field(vault, "KILLCT", DATATYPE_INT)
field[LOGRO_TT] = adv_vault_register_field(vault, "KILLTT", DATATYPE_INT)
field[LOGRO_HS] = adv_vault_register_field(vault, "HS", DATATYPE_INT)
field[LOGRO_GLOCK] = adv_vault_register_field(vault, "GLOCK", DATATYPE_INT)
field[LOGRO_CUCHILLO] = adv_vault_register_field(vault, "CUCHILLO", DATATYPE_INT)
field[LOGRO_USP] = adv_vault_register_field(vault, "USP", DATATYPE_INT)
field[LOGRO_DEAGLE] = adv_vault_register_field(vault, "DEAGLE", DATATYPE_INT)
field[LOGRO_MP5] = adv_vault_register_field(vault, "MP5", DATATYPE_INT)
field[LOGRO_M4A1] = adv_vault_register_field(vault, "M4A1", DATATYPE_INT)
field[LOGRO_AK47] = adv_vault_register_field(vault, "AK47", DATATYPE_INT)
field[LOGRO_SCOUT] = adv_vault_register_field(vault, "SCOUT", DATATYPE_INT)
field[LOGRO_M3] = adv_vault_register_field(vault, "M3", DATATYPE_INT)
field[LOGRO_HE] = adv_vault_register_field(vault, "HE", DATATYPE_INT)
field[LOGRO_XM1014] = adv_vault_register_field(vault, "XM1014", DATATYPE_INT)
field[LOGRO_TAKACT] = adv_vault_register_field(vault, "TAKACT", DATATYPE_INT)
field[LOGRO_TAKATT] = adv_vault_register_field(vault, "TAKATT", DATATYPE_INT)
field[LOGRO_AWP] = adv_vault_register_field(vault, "AWP", DATATYPE_INT)
field[LOGRO_M2] = adv_vault_register_field(vault, "M2", DATATYPE_INT)
field[LOGRO_GANADO] = adv_vault_register_field(vault, "LOGRO_GANADO", DATATYPE_INT)
adv_vault_init(vault)
g_sort = adv_vault_sort_create(vault,ORDER_DESC,0,2000,field[LOGRO_GANADO]);
}
public plugin_precache() precache_sound(LogroSonido)
public round_start(skip)
{
for(new id=1; id <= get_maxplayers(); id++)
{
if(is_user_connected(id)) Guardar(id)
TemporizarDatos(id)
}
if(!skip)
{
adv_vault_sort_update(vault, g_sort)
update_motd()
}
}
public pfn_top(id)
{
show_motd(id, motd, "LOGROS COMPLETADOS TOP-10")
}
public client_infochanged(id)
{
if(!is_user_connected(id)) return
static newname[32], name[32]
get_user_info(id, "name", newname, 31)
get_user_name(id, name, 31)
if(!equal(newname, name))
{
Cargar(id)
}
}
public client_putinserver(id)
{
g_conectado[id] = true;
g_round = true;
get_user_name(id, vNombre[id], charsmax(vNombre[]))
// Seteamos los contadores en 0
gKnife[id] = gHs[id] = 0
gGlock[id] = gUsp[id] = gDeagle[id] = gHe[id] = gMp5[id] = gM4[id] = gAk47[id] = gKCTRound[id] = gKTTRound[id] = 0;
gScout[id] = gM3[id] = gXm1014[id] = gG3G1[id] = gSG550[id] = gAwp[id] = gM2[id] = gKillsCT[id] = gKillsTT[id] = 0
LogrosGanados[id] = 0
// Y los logros en incompletos (Si usa un sistema de guardado, hagalo como y donde corresponda)
arrayset(g_logros[id][LOGROS_GENERALES], 0, sizeof(g_logros[][]))
Cargar(id) // cargamos datos
TemporizarDatos(id)
set_task(10.0,"Mensaje",id);
}
public Mensaje(id)
{
ColorChat(id, NORMAL,"%s Evento de Logros escriba /lmenu para informarte.",TAG);
}
public ShowMenuPrincipal(id)
{
new menu = menu_create("\yEvento de Logros","handler_principal")
menu_additem(menu,"\wMenu de Logros","1");
menu_additem(menu,"\wTop10 de Logros","2");
menu_additem(menu,"\wAyuda","3");
menu_additem(menu,"\wVer Logros Completados \r[ADMIN]","4");
menu_additem(menu,"\wContacto","5");
menu_setprop(menu,MPROP_EXITNAME,"Salir")
menu_display(id,menu)
return PLUGIN_HANDLED;
}
public handler_principal( id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
switch( item )
{
case 0: MenuProgresoLogros( id )
case 1: pfn_top( id )
case 2: MostrarAyuda( id );
case 3: verlogros_jugadores(id);
case 4: Contacto( id );
case 6: return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public MostrarAyuda(id)
{
new szTitle[32];
formatex(szTitle,charsmax(szTitle),"Comandos y Ayuda General");
show_motd(id,"logroshelp.txt",szTitle);
return PLUGIN_HANDLED;
}
public Contacto(id)
{
set_hudmessage(0, 0, 225, -1.0, -1.0, 1, 0.0, 3.0, 2.0, 5.0)
show_hudmessage(id, "Contacto: %s", CONTACTO)
}
public CTRonda()
{
g_round = false;
for (new id = 1; id <= get_maxplayers(); id++)
{
if(g_round == true && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else
{
gKTTRound[id] = 0;
TemporizarDatos(id);
}
if(g_round == true && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
}
else
{
gKCTRound[id] = 0;
TemporizarDatos(id);
}
}
return PLUGIN_HANDLED;
}
public TTRonda()
{
g_round = false;
for (new id = 1; id <= get_maxplayers(); id++)
{
if(g_round == true && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else
{
gKTTRound[id] = 0;
TemporizarDatos(id);
}
if(g_round == true && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
}
else
{
gKCTRound[id] = 0;
TemporizarDatos(id);
}
}
return PLUGIN_HANDLED;
}
public EmpateRonda()
{
g_round = false;
for (new id = 1; id <= get_maxplayers(); id++)
{
if(g_round == true && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else
{
gKTTRound[id] = 0;
TemporizarDatos(id);
}
if(g_round == true && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
}
else
{
gKCTRound[id] = 0;
TemporizarDatos(id);
}
}
return PLUGIN_HANDLED;
}
public client_disconnect(id)
{
g_conectado[id] = false // seteamos la variable en falso ya que se desconectó
g_round = false // seteamos la variable round en falso ya que se desconectó no puede hacer logros
Guardar(id) // checkeamos lo del define y guardamos
}
public pfn_verlogros(id, level ,cid)
{
if(!cmd_access(id,level,cid,2))
{
ColorChat(id,NORMAL,"%s no tienes acceso a este comando",TAG);
return;
}
static szArgumento[32],player,szName[35]
read_argv(id, szArgumento, charsmax(szArgumento))
player = cmd_target(id, szArgumento, CMDTARGET_ALLOW_SELF)
if(!player)
{
console_print(id,"%s nombre invalido o jugador no existente",TAG)
return;
}
get_user_name(player,szName, charsmax(szName))
ColorChat(id,NORMAL,"%s El Jugador ^4%s^1 tiene (^4%d^1 / ^4%d^1) logros completos",TAG,szName,LogrosGanados[player],MaxLogros)
}
public verlogros_jugadores(id)
{
if(!is_user_admin(id))
{
console_print(id,"%s no tienes acceso a este comando",TAG);
return PLUGIN_HANDLED;
}
new menu = menu_create("Logros Completados de Jugadores","AdminLogros_C")
new iPlayers[32],iNum,iPlayer;
get_players(iPlayers,iNum,"ch");
new szName[32], szNum[5], szData[64];
for(new i;i < iNum;i++)
{
iPlayer = iPlayers[i];
get_user_name(iPlayer,szName,charsmax(szName));
formatex(szData,charsmax(szData),"%s | \yLOGROS \w(\r%d \y/ \r%d\w)",szName, LogrosGanados[iPlayer], MaxLogros)
num_to_str(iPlayer,szNum,charsmax(szNum))
menu_additem(menu, szData, szNum)
}
menu_setprop(menu,MPROP_NEXTNAME,"Siguiente")
menu_setprop(menu ,MPROP_BACKNAME, "Atras" )
menu_setprop(menu ,MPROP_EXITNAME, "Salir");
menu_display(id,menu)
return PLUGIN_HANDLED;
}
public AdminLogros_C(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
if(item != 0) return ITEM_DISABLED;
menu_destroy(menu)
return PLUGIN_HANDLED;
}
public MenuProgresoLogros(id)
{
new szData[64]
formatex(szData,charsmax(szData), "\yLOGROS COMPLETADOS \w(\r%d \y/ \r%d\w)",LogrosGanados[id], MaxLogros)
new menu = menu_create(szData, "MenuProgresoLogros_h")
new szNombre[60], szNum[5],szData2[64] // Para el nombre del item y el numero de logro
for (new logro = 0; logro < sizeof(TodosLogrosProgreso[]); logro++)
{
// Agregamos un item con el nombre del logro y si esta completo o no
formatex(szData2,charsmax(szData2),"\w(\r%d \y/ \r%d\w)",gVarContadores[id][logro], get_pcvar_num(g_cvars[logro]))
formatex(szNombre, charsmax(szNombre), "%s | \yFrags: %s", TodosLogrosProgreso[LOGROS_NOMBRE][logro] ,gVarContadores[id][logro] != get_pcvar_num(g_cvars[logro]) ? szData2 : "\rCOMPLETOS")
num_to_str(logro, szNum, charsmax(szNum))
menu_additem(menu, szNombre, szNum)
}
menu_setprop(menu, MPROP_NEXTNAME, "Siguiente")
menu_setprop(menu, MPROP_BACKNAME, "Anterior")
menu_setprop(menu, MPROP_EXITNAME, "Atras")
menu_display(id, menu)
}
public MenuProgresoLogros_h(id, menu , item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new ac, cb, num[5]
menu_item_getinfo(menu, item, ac, num, charsmax(num), "", 0, cb) // Obtenemos el numero del logro
g_MenuLogro[id] = str_to_num(num) // Seteamos el numero de logro en la variable
MenuProgresoLogrosDescripcion(id) // Segundo sub-menu con la descripcion del logro
menu_destroy(menu)
return PLUGIN_HANDLED
}
public MenuProgresoLogrosDescripcion(id)
{
new szText[512], len
len += formatex(szText[len], charsmax(szText) - len, "\yProgreso de Logros\y [GENERALES]^n^n")
len += formatex(szText[len], charsmax(szText) - len, "\r-\y NOMBRE:\w %s^n^n",
TodosLogrosProgreso[LOGROS_NOMBRE][g_MenuLogro[id]])
len += formatex(szText[len], charsmax(szText) - len, "\r-\y DESCRIPCION:\w %s^n^n",
TodosLogrosProgreso[LOGROS_DESCRIPCION][g_MenuLogro[id]])
len += formatex(szText[len], charsmax(szText) - len, "\r0.\w Atras")
show_menu(id, 1 << 9, szText, -1, "Descripcion")
}
// Como el unico boton que podemos tocar es 0 (Atras) mostramos directamente el sub-menu anterior
public MenuProgresoLogrosDesc_h(id, key) MenuProgresoLogros(id)
public Ham_PlayerSpawn(id) { // cuando el jugador respawnea
g_round = true;
if(is_user_alive(id))
{ // si esta vivo el jugador
/*checkeamos si no cumplio el logro seteamos los contadores de los logros matar x en x ronda(s) en 0*/
if(g_round == true && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKTTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else
{
gKTTRound[id] = 0;
TemporizarDatos(id);
}
if(g_round == true && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
return PLUGIN_HANDLED;
}
else if(g_round == false && gKCTRound[id] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[id] = get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]);
TemporizarDatos(id);
}
else
{
gKCTRound[id] = 0;
TemporizarDatos(id);
}
}
return PLUGIN_HANDLED;
// seteamos la variable round en verdadero para checkear los logros de matar x en x ronda(s)
}
// Cada vez que un jugador muere...
public event_DeathMsg()
{
new iAttacker = read_data(1) // Obtenemos el index del atacante
new iVictim = read_data(2) // Obtenemos el index de la victima
new iHs = read_data(3) // Obtenemos si fue de headshot (1 si, 0 no)
new iWeapon[64]
read_data(4, iWeapon, charsmax(iWeapon)) // Obtenemos el nombre del arma con el que se produjo el asesinato xD
// Si se suicido (con una bomba por ejemplo), o lo mato una entidad o una caida, retornamos
if (!is_user_connected(iAttacker) || iAttacker == iVictim) return;
// Obtenemos el team del atacante y de la victima
new team = get_user_team(iAttacker)
new vteam = get_user_team(iVictim)
if(team == 1 && vteam == 2 && gKillsTT[iAttacker] < get_pcvar_num(g_cvars[CVAR_KILLTT]))
{
gKillsTT[iAttacker]++
if(gKillsTT[iAttacker] == get_pcvar_num(g_cvars[CVAR_KILLTT]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker , LOGROS_GENERALES, CVAR_KILLTT)
}
}
else if(team == 2 && vteam == 1 && gKillsCT[iAttacker] < get_pcvar_num(g_cvars[CVAR_KILLCT]))
{
gKillsCT[iAttacker]++
if(gKillsCT[iAttacker] == get_pcvar_num(g_cvars[CVAR_KILLCT]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker , LOGROS_GENERALES, CVAR_KILLCT)
}
}
if(iHs && gHs[iAttacker] < get_pcvar_num(g_cvars[CVAR_HEADSHDOT]))
{
gHs[iAttacker]++;
if(gHs[iAttacker] == get_pcvar_num(g_cvars[CVAR_HEADSHDOT]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker , LOGROS_GENERALES, CVAR_HEADSHDOT)
}
}
if(g_round == true && team == 1 && vteam == 2 && gKTTRound[iAttacker] < get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
gKTTRound[iAttacker]++
if(gKTTRound[iAttacker] == get_pcvar_num(g_cvars[CVAR_KILLTT_ROUND]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker , LOGROS_GENERALES, CVAR_KILLTT_ROUND)
}
}
else if(g_round == true && team == 2 && vteam == 1 && gKCTRound[iAttacker] < get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
gKCTRound[iAttacker]++
if(gKCTRound[iAttacker] == get_pcvar_num(g_cvars[CVAR_KILLCT_ROUND]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker , LOGROS_GENERALES, CVAR_KILLCT_ROUND)
}
}
if(equali(iWeapon,"knife") && gKnife[iAttacker] < get_pcvar_num(g_cvars[CVAR_KNIFE]))
{
gKnife[iAttacker]++;
if(gKnife[iAttacker] == get_pcvar_num(g_cvars[CVAR_KNIFE]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_KNIFE)
}
}
else if(equali(iWeapon,"glock18") && gGlock[iAttacker] < get_pcvar_num(g_cvars[CVAR_GLOCK]))
{
gGlock[iAttacker]++;
if(gGlock[iAttacker] == get_pcvar_num(g_cvars[CVAR_GLOCK]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_GLOCK)
}
}
else if(equali(iWeapon,"usp") && gUsp[iAttacker] < get_pcvar_num(g_cvars[CVAR_USP]))
{
gUsp[iAttacker]++;
if(gUsp[iAttacker] == get_pcvar_num(g_cvars[CVAR_USP]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_USP)
}
}
else if(equali(iWeapon,"deagle") && gDeagle[iAttacker] < get_pcvar_num(g_cvars[CVAR_DEAGLE]))
{
gDeagle[iAttacker]++;
if(gDeagle[iAttacker] == get_pcvar_num(g_cvars[CVAR_DEAGLE]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_DEAGLE)
}
}
else if(equali(iWeapon,"hegrenade") && gHe[iAttacker] < get_pcvar_num(g_cvars[CVAR_HE]))
{
gHe[iAttacker]++;
if(gHe[iAttacker] == get_pcvar_num(g_cvars[CVAR_HE]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_HE)
}
}
else if(equali(iWeapon,"mp5navy") && gMp5[iAttacker] < get_pcvar_num(g_cvars[CVAR_MP5]))
{
gMp5[iAttacker]++;
if(gMp5[iAttacker] == get_pcvar_num(g_cvars[CVAR_MP5]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_MP5)
}
}
else if(equali(iWeapon,"m4a1") && gM4[iAttacker] < get_pcvar_num(g_cvars[CVAR_M4A1]))
{
gM4[iAttacker]++;
if(gM4[iAttacker] == get_pcvar_num(g_cvars[CVAR_M4A1]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_M4A1)
}
}
else if(equali(iWeapon,"ak47") && gAk47[iAttacker] < get_pcvar_num(g_cvars[CVAR_AK47]))
{
gAk47[iAttacker]++;
if(gAk47[iAttacker] == get_pcvar_num(g_cvars[CVAR_AK47]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_AK47)
}
}
else if(equali(iWeapon,"scout") && gScout[iAttacker] < get_pcvar_num(g_cvars[CVAR_SCOUT]))
{
gScout[iAttacker]++;
if(gScout[iAttacker] == get_pcvar_num(g_cvars[CVAR_SCOUT]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_SCOUT)
}
}
else if(equali(iWeapon,"m3") && gM3[iAttacker] < get_pcvar_num(g_cvars[CVAR_M3]))
{
gM3[iAttacker]++;
if(gM3[iAttacker] == get_pcvar_num(g_cvars[CVAR_M3]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_M3)
}
}
else if(equali(iWeapon,"xm1014") && gXm1014[iAttacker] < get_pcvar_num(g_cvars[CVAR_XM1414]))
{
gXm1014[iAttacker]++;
if(gXm1014[iAttacker] == get_pcvar_num(g_cvars[CVAR_XM1414]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_XM1414)
}
}
else if(equali(iWeapon,"g3sg1") && gG3G1[iAttacker] < get_pcvar_num(g_cvars[CVAR_G3G1]))
{
gG3G1[iAttacker]++;
if(gG3G1[iAttacker] == get_pcvar_num(g_cvars[CVAR_G3G1]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_G3G1)
}
}
else if(equali(iWeapon,"sg550") && gSG550[iAttacker] < get_pcvar_num(g_cvars[CVAR_SG550]))
{
gSG550[iAttacker]++;
if(gSG550[iAttacker] == get_pcvar_num(g_cvars[CVAR_SG550]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_SG550)
}
}
else if(equali(iWeapon,"awp") && gAwp[iAttacker] < get_pcvar_num(g_cvars[CVAR_AWP]))
{
gAwp[iAttacker]++;
if(gAwp[iAttacker] == get_pcvar_num(g_cvars[CVAR_AWP]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_AWP)
}
}
else if(equali(iWeapon,"m249") && gM2[iAttacker] < get_pcvar_num(g_cvars[CVAR_M249]))
{
gM2[iAttacker]++;
if(gM2[iAttacker] == get_pcvar_num(g_cvars[CVAR_M249]))
{
LogrosGanados[iAttacker]++;
pCheckLogro(iAttacker, LOGROS_GENERALES , CVAR_M249)
}
}
TemporizarDatos(iVictim);
Guardar(iAttacker)
}
public pCheckLogro(id, Logro, LogroNum)
{
// Si el logro ya fue completado, retornamos
if (g_logros[id][Logro][LogroNum]) return
// Seteamos la variable en 1 para saber que el jugador completo un logro
g_logros[id][Logro][LogroNum] = 1
// Obtenemos el nombre del jugador
new szName[33]
get_user_name(id, szName, charsmax(szName))
// Mostramos por say el nombre del jugador que completo el logro, y el nombre del logro
ColorChat(0, NORMAL, "%s El Jugador ^4%s^1 Ha completado el logro ^"%s^"",TAG, szName,TodosLogrosProgreso[LOGROS_NOMBRE][LogroNum])
client_cmd(id, "spk %s", LogroSonido);
if(LogrosGanados[id] == MaxLogros)
{
ColorChat(0, NORMAL, "%s El Jugador ^4%s^1 Ha completado Todos los Logros (%d / %d)",TAG, szName,LogrosGanados[id], MaxLogros)
client_cmd(id, "spk %s", LogroSonido);
}
Guardar(id);
}
public Cargar(id)
{
if(!adv_vault_get_prepare(vault, _, vNombre[id])) return;
gKCTRound[id] = adv_vault_get_field(vault, field[LOGRO_RONDA_CT])
gKTTRound[id] = adv_vault_get_field(vault, field[LOGRO_RONDA_TT])
adv_vault_get_field(vault, field[LOGRO_LOGROSGENERALES] , g_logros[id][LOGROS_GENERALES],sizeof g_logros[][])
gKnife[id] = adv_vault_get_field(vault, field[LOGRO_CUCHILLO])
gGlock[id] = adv_vault_get_field(vault, field[LOGRO_GLOCK])
gUsp[id] = adv_vault_get_field(vault, field[LOGRO_USP])
gDeagle[id] = adv_vault_get_field(vault, field[LOGRO_DEAGLE])
gHe[id] = adv_vault_get_field(vault, field[LOGRO_HE])
gMp5[id] = adv_vault_get_field(vault, field[LOGRO_MP5])
gM4[id] = adv_vault_get_field(vault, field[LOGRO_M4A1])
gAk47[id] = adv_vault_get_field(vault, field[LOGRO_AK47])
gScout[id] = adv_vault_get_field(vault, field[LOGRO_SCOUT])
gM3[id] = adv_vault_get_field(vault, field[LOGRO_M3])
gXm1014[id] = adv_vault_get_field(vault, field[LOGRO_XM1014])
gG3G1[id] = adv_vault_get_field(vault, field[LOGRO_TAKATT])
gSG550[id] = adv_vault_get_field(vault, field[LOGRO_TAKACT])
gAwp[id] = adv_vault_get_field(vault, field[LOGRO_AWP])
gM2[id] = adv_vault_get_field(vault, field[LOGRO_M2])
gKillsCT[id] = adv_vault_get_field(vault, field[LOGRO_CT])
gKillsTT[id] = adv_vault_get_field(vault, field[LOGRO_TT])
gHs[id] = adv_vault_get_field(vault, field[LOGRO_HS])
LogrosGanados[id] = adv_vault_get_field(vault, field[LOGRO_GANADO])
}
public Guardar(id)
{
if(!is_user_connected(id)) return;
adv_vault_set_start(vault)
adv_vault_set_field(vault, field[LOGRO_RONDA_CT], gKCTRound[id])
adv_vault_set_field(vault, field[LOGRO_RONDA_TT], gKTTRound[id])
adv_vault_set_field(vault, field[LOGRO_LOGROSGENERALES], g_logros[id][LOGROS_GENERALES])
adv_vault_set_field(vault, field[LOGRO_CUCHILLO], gKnife[id])
adv_vault_set_field(vault, field[LOGRO_GLOCK], gGlock[id])
adv_vault_set_field(vault, field[LOGRO_USP], gUsp[id] )
adv_vault_set_field(vault, field[LOGRO_DEAGLE], gDeagle[id] )
adv_vault_set_field(vault, field[LOGRO_HE], gHe[id] )
adv_vault_set_field(vault, field[LOGRO_MP5], gMp5[id])
adv_vault_set_field(vault, field[LOGRO_M4A1], gM4[id])
adv_vault_set_field(vault, field[LOGRO_AK47], gAk47[id])
adv_vault_set_field(vault, field[LOGRO_SCOUT], gScout[id] )
adv_vault_set_field(vault, field[LOGRO_M3], gM3[id])
adv_vault_set_field(vault, field[LOGRO_XM1014], gXm1014[id])
adv_vault_set_field(vault, field[LOGRO_TAKATT], gG3G1[id])
adv_vault_set_field(vault, field[LOGRO_TAKACT], gSG550[id] )
adv_vault_set_field(vault, field[LOGRO_AWP], gAwp[id] )
adv_vault_set_field(vault, field[LOGRO_M2], gM2[id] )
adv_vault_set_field(vault, field[LOGRO_CT], gKillsCT[id])
adv_vault_set_field(vault, field[LOGRO_TT], gKillsTT[id])
adv_vault_set_field(vault, field[LOGRO_HS], gHs[id])
adv_vault_set_field(vault, field[LOGRO_GANADO], LogrosGanados[id])
adv_vault_set_end(vault, 0, vNombre[id])
}
update_motd()
{
new logros, keyindex, nick[96], len
motd[0] = 0
add(motd, charsmax(motd),
"<html><style>\
body{background:#060606 url('https://c1.staticflickr.com/9/8157/7427165626_7863914fc6_n.jpg')repeat-x;color:#000;font-weight:bold;font-size:8pt;}\
.t{color:#808080;text-align:left; }\
#h{background: #222 url('http://weknowyourdreamz.com/images/background/background-03.jpg') repeat-x;color:#000;font-weight:bold;}\
#p{color:#F41313;}\
#n{color:#fff;}\
</style><body>\
<table cellspacing=0 width=100% class=t>")
add(motd, charsmax(motd),
"<tr><td id=h width=7%>#</td>\
<td id=h>Nombre</td>\
<td id=h>Logros</td></tr>")
len = strlen(motd)
new toploop = min(adv_vault_sort_numresult(vault, g_sort), 10)
for(new posicion=1; posicion <= toploop; posicion++)
{
keyindex = adv_vault_sort_position(vault, g_sort, posicion)
if(!adv_vault_get_prepare(vault, keyindex)) continue
logros = adv_vault_get_field(vault, field[LOGRO_GANADO]);
adv_vault_get_keyname(vault, keyindex, nick, charsmax(nick))
replace_all(nick, charsmax(nick), "<", "<")
replace_all(nick, charsmax(nick), ">", ">")
len += formatex(motd[len], charsmax(motd)-len,
"<tr><td id=p>#%d</td>\
<td id=n>%s</td>\
<td>%d</td>", posicion, nick, logros)
}
add(motd, charsmax(motd), "</table></body></html>")
}
TemporizarDatos(id)
{
gVarContadores[id][0] = gKillsCT[id];
gVarContadores[id][1] = gKillsTT[id];
gVarContadores[id][2] = gKCTRound[id];
gVarContadores[id][3] = gKTTRound[id];
gVarContadores[id][4] = gKnife[id]
gVarContadores[id][5] = gGlock[id]
gVarContadores[id][6] = gUsp[id]
gVarContadores[id][7] = gDeagle[id]
gVarContadores[id][8] = gHe[id]
gVarContadores[id][9] = gMp5[id]
gVarContadores[id][10] = gM4[id]
gVarContadores[id][11] = gAk47[id]
gVarContadores[id][12] = gScout[id]
gVarContadores[id][13] = gM3[id]
gVarContadores[id][14] = gXm1014[id]
gVarContadores[id][15] = gG3G1[id]
gVarContadores[id][16] = gSG550[id];
gVarContadores[id][17] = gAwp[id];
gVarContadores[id][18] = gM2[id];
gVarContadores[id][19] = gHs[id];
}
[PLUGIN] Dominacion CSGO [v1.3a] + Guardo TOP 10
[APORTES] Evento de Logros [v1.2] + Guardado TOP 10
[APORTES] Evento de Logros [v1.2] + Guardado TOP 10
Código:
La tristeza es una parte ensencal de la vida, solo aquel que la conoce, es capaz de disfrutar de la verdadera felicidad.