07/02/2015, 05:00 PM (Última modificación: 14/06/2015, 11:04 PM por Federicomb.)
SISTEMA DE CUENTAS Y ESTADÍSTICAS 2.0
DESCRIPCIÓN:
Un sistema de estadísticas personales, que incluye un registro y guardado de datos por ADV_VAULT para proteger robos de nick.
También incluye tiempo jugado total, tiempo jugado por equipo y muchas cosas más.
Las contraseñas de las cuentas están protegidas por encriptación.
DESCRIPCIÓN:
Un sistema de estadísticas personales, que incluye un registro y guardado de datos por ADV_VAULT para proteger robos de nick.
También incluye RANK, TOPS 15, tiempo jugado total, tiempo jugado por equipo y muchas cosas más.
Las contraseñas de las cuentas están protegidas por encriptación.
(07/02/2015, 05:28 PM)nicoxxbzn escribió: y el include? D:
(adv_vault)
Lo tenes que descargar por tu cuenta. Ahí deje el link en el primer mensaje.
(07/02/2015, 05:36 PM)mongito100 escribió: good job no lo lei ni por la mitad por paja, pero solo una cosa si estoy un año en el sv y no me di cuenta
No entiendo a que te referís.
Cuando te registras por primera vez te guarda la fecha y hora exacta.
Te dice la cantidad de años q estuviste jugando?
No. Tampoco en la ultima sesion te dice "(Hace 5 minutos)" o "(Hace 5 días)", tengo la idea, pero como es un string no tengo forma de poder hacerlo. Luego pensaré alguna forma, también me pueden ayudar con algunas ideas, son bienvenidas.
Cuando termine de fixear bien todo, voy a agregar las estadísticas por cada arma del juego. Por ejemplo, tiempo usado, matados, veces muerto por esa arma, daño echo, etc..
Believe, be yourself and don't hold on to just one dream ❤
(07/02/2015, 09:42 PM)matrix123 escribió: a que te referis? a que te diga el tiempo jugado dentro del server ? si tenes la string la pasas como el inc de UnixToTime o stock no recuerdo bien...
Te doy un ejemplo:
Yo me registré el día: 10/02/2014 - 17:00:00
El día 10/02/2015 - 17:00:00 se cumple 1 año, entonces la idea de mongito la represento como podría ser:
(Esto apareceria en el menú cuando ingresas al servidor y te logueas)
REGISTRO: 10/02/2014 - 17:00:00 (Hace 1 año)
Lo mismo para la última sesión:
Yo la última vez que entre fue el día 15/02/2014 - 20:00:00 y el dia que entras es 15/02/2015 - 20:00:00 tendría que decir (Hace 1 año) o también si el dia es 16/02/2014 - 20:00:00 diria (Hace 1 año y 1 día)
No sé si me explico. Ese contador sería solamente con días/años, no con horas, ni minutos.
Believe, be yourself and don't hold on to just one dream ❤
08/02/2015, 08:27 PM (Última modificación: 09/02/2015, 08:36 AM por Neeeeeeeeeel.-.)
Código PHP:
new iLastLogin = get_systime()-lastLoginTimeStamp; new szBuffer[64]; new const szUnidad[][] = {"anio", "mes", "dia", "hora", "minuto"}; new const szDividir[] = { 60*60*24*365, 60*60*24*30, 60*60*24, 60*60, 1 };
for (new i=0; i < sizeof szDividir; i++){ if (iLastLogin >= szDividir[i]){ new num = iLastLogin / szDividir[i]; if (num == 0){ num = 1; } formatex(szBuffer, charsmax(szBuffer), "Hace %d %s%s", num, szUnidad[i], num == 1?"":"s"); break; } } console_print(0, szBuffer);
Bueno, gracias a la ayuda de Neeeeeeeeeel.- puedo decir que termine el sistema que cuenta la cantidad de días, ya sea desde que te registraste hasta la ultima conexión.
Al parecer todo funciona como debería. Los cambios notables en esto es que ya no guardaré como string las fechas sino que serán números.
Código PHP:
new const szUnidad[][] = {"años", "meses", "días", "horas", "minutos"}; new const szDividir[] = {60*60*24*365, 60*60*24*30, 60*60*24, 60*60, 60};
new FechaActual = get_systime();
new DiasRegistrado = FechaActual - g_Fecha_Registro[id]; for (new i = 0; i < sizeof(szDividir); ++i) { if (DiasRegistrado >= szDividir[i]) { new num = (DiasRegistrado / szDividir[i]);
(09/02/2015, 01:42 AM)kikizon2 escribió: este código es bueno xd le daré uso
Tené en cuenta que se vienen grandes mejoras, esto solo es el principio.
Ok, aunque yo me refería al código de nelson xd
(08/02/2015, 08:27 PM)Neeeeeeeeeel.- escribió:
Código PHP:
new iLastLogin = get_systime()-lastLoginTimeStamp; new szBuffer[64]; new const szUnidad[][] = {"anio", "mes", "dia", "hora", "minuto"}; new const szDividir[] = { 60*60*24*365, 60*60*24*30, 60*60*24, 60*60, 0 };
for (new i=0; i < sizeof szDividir; i++){ if (iLastLogin >= szDividir[i]){ new num = iLastLogin / szDividir[i]; if (num == 0){ num = 1; } formatex(szBuffer, charsmax(szBuffer), "Hace %d %s%s", num, szUnidad[i], num == 1?"":"s"); break; } } console_print(0, szBuffer);
Como al principio serán minutos, al hacer la división por "0" el número será infinito, por lo que es imposible. Arreglado eso, todo funciona.
Claro, no me di cuenta de la división por 0. Pero debería ir 1 y no 60, porque si son 30 segundos, sale del loop sin cargar nada en el string. Entonces lo mínimo que dice sería "Hace 1 minuto" (aunque fácilmente podrías ponerle que diga los segundos, aunque no vale mucho la pena).
¿Por qué le agregaste la S? Como lo tenés ahora aparecería: "Hace 1 minutos", "Hace 1 horas", "Hace 1 meses"... etc.
Bueno, un pequeño error para un código que escribí directamente en el textarea del foro y sin probarlo jaja, bastante bien.
Ah esto no tiene ningún sentido:
Código PHP:
formatex(szBuffer, charsmax(szBuffer), "");
Mejor hacer una asignación simple:
Código PHP:
szBuffer[0] = '^0';
Si bien no borra todo lo de la memoria (igual la memoria queda reservada lo borres o no), cualquier string es recorrido hasta que se encuentra el byte 0x0, si el primero es un 0 frena la iteración.
Como al principio serán minutos, al hacer la división por "0" el número será infinito, por lo que es imposible. Arreglado eso, todo funciona.
Claro, no me di cuenta de la división por 0. Pero debería ir 1 y no 60, porque si son 30 segundos, sale del loop sin cargar nada en el string. Entonces lo mínimo que dice sería "Hace 1 minuto" (aunque fácilmente podrías ponerle que diga los segundos, aunque no vale mucho la pena).
Ah, tenés razón. Iba a decir que funciona igual pero después me di cuenta "sale del loop sin cargar nada en el string", sí aparece al minuto la frase pero seguramente el loop lo carga igual innecesariamente, ahora lo cambio. La verdad que no tiene mucho sentido agregarle los segundos, no le hace mucho a la estética. (Hace unos segundos), tal vez.
(09/02/2015, 08:39 AM)Neeeeeeeeeel.- escribió: ¿Por qué le agregaste la S? Como lo tenés ahora aparecería: "Hace 1 minutos", "Hace 1 horas", "Hace 1 meses"... etc.
Porque en un principio lo quería arreglar bien y probarlo, lo pensé eso seguro. Pasa que también como lo pasaste vos cuando son meses diría "mess" y estaría mal. Después pienso algo para arreglar eso antes de actualizarlo.
(09/02/2015, 08:39 AM)Neeeeeeeeeel.- escribió: Ah esto no tiene ningún sentido:
Código PHP:
formatex(szBuffer, charsmax(szBuffer), "");
Mejor hacer una asignación simple:
Código PHP:
szBuffer[0] = '^0';
Si bien no borra todo lo de la memoria (igual la memoria queda reservada lo borres o no), cualquier string es recorrido hasta que se encuentra el byte 0x0, si el primero es un 0 frena la iteración.
Tenés razón, nunca lo había pensado de esa manera. Al pedo usar una native para algo que se soluciona más fácil.
EDIT:
Ya lo arreglé y mejoré un poco.
Código PHP:
new szBuffer[30];
new const szUnidad[][] = {"año", "mes", "día", "hora", "minuto"}; new const szDividir[] = {60*60*24*365, 60*60*24*30, 60*60*24, 60*60, 60};
new FechaActual = get_systime();
new DiasRegistrado = FechaActual - g_Fecha_Registro[id]; for (new i = 0; i < sizeof(szDividir); ++i) { if (DiasRegistrado >= szDividir[i]) { new num = (DiasRegistrado / szDividir[i]);
if (!num) { szBuffer[0] = '^0'; } else { if (i == 1) { formatex(szBuffer, charsmax(szBuffer), " (Hace %d %s%s)", num, szUnidad[i], num == 1 ? "" : "es"); } else { formatex(szBuffer, charsmax(szBuffer), " (Hace %d %s%s)", num, szUnidad[i], num == 1 ? "" : "s"); } }
break; } }
No puedo reemplazar 60 por 1, ya que me estaría contando los segundos y yo quiero que empiece a contar desde los minutos transcurridos.
Believe, be yourself and don't hold on to just one dream ❤
(09/02/2015, 03:49 PM)Federicomb escribió: No puedo reemplazar 60 por 1, ya que me estaría contando los segundos y yo quiero que empiece a contar desde los minutos transcurridos.
Si podés, lo que pasaría es que cuando pase 1 segundo o más (hasta los 119 segundos) va a decir "Hace 1 minuto", es estimativo, no está mal.
(09/02/2015, 03:49 PM)Federicomb escribió: No puedo reemplazar 60 por 1, ya que me estaría contando los segundos y yo quiero que empiece a contar desde los minutos transcurridos.
Si podés, lo que pasaría es que cuando pase 1 segundo o más (hasta los 119 segundos) va a decir "Hace 1 minuto", es estimativo, no está mal.
Si, tenés razón. Cuando lo probé así, el sistema no estaba adaptado para segundos, por lo que me contaba minutos como segundos. En todo caso seguiremos mejorando el sistema.
Believe, be yourself and don't hold on to just one dream ❤
10/02/2015, 05:16 PM (Última modificación: 10/02/2015, 05:16 PM por Neeeeeeeeeel.-.)
(09/02/2015, 03:49 PM)Federicomb escribió: Porque en un principio lo quería arreglar bien y probarlo, lo pensé eso seguro. Pasa que también como lo pasaste vos cuando son meses diría "mess" y estaría mal. Después pienso algo para arreglar eso antes de actualizarlo.
Código PHP:
new const szPlural[][] = {"s","es","s","s","s"} formatex(szBuffer, charsmax(szBuffer), "Hace %d %s%s", num, szUnidad[i], num == 1?"":szPlural[i]);
(10/02/2015, 04:42 PM)Federicomb escribió: Si, tenés razón. Cuando lo probé así, el sistema no estaba adaptado para segundos, por lo que me contaba minutos como segundos. En todo caso seguiremos mejorando el sistema.
Cita:L 05/01/2015 - 12:14:10: Start of error session.
L 05/01/2015 - 12:14:10: Info (map "zm_defense") (file "addons/amxmodx/logs/error_20150501.log")
L 05/01/2015 - 12:14:10: [AMXX] Displaying debug trace (plugin "Sistema_estadisticas.amxx")
L 05/01/2015 - 12:14:10: [AMXX] Run time error 4: index out of bounds
L 05/01/2015 - 12:14:10: [AMXX] [0] Sistema_estadisticas.sma::fw_TakeDamage (line 882)
Código PHP:
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { if (victim == attacker || !g_Conectado[attacker]) return HAM_IGNORED;
if (get_cvar_num("mp_friendlyfire") == 0 && cs_get_user_team(victim) == cs_get_user_team(attacker)) return HAM_SUPERCEDE;
static iDamage; iDamage = floatround(damage);
switch (cs_get_user_team(victim)) { case CS_TEAM_T: g_danio_recibido[victim][TERRORISTAS] += iDamage; case CS_TEAM_CT: g_danio_recibido[victim][ANTI_TERRORISTAS] += iDamage; }
switch (cs_get_user_team(attacker)) { case CS_TEAM_T: g_danio_hecho[attacker][TERRORISTAS] += iDamage; case CS_TEAM_CT: g_danio_hecho[attacker][ANTI_TERRORISTAS] += iDamage; }