[ADV] Cuentas y estadísticas
#1
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.

REQUISITOS IMPORTANTES:
[API] Advanced Vault System
[INC] Unix Time
[STOCK] printf by [R]ak.- (adjuntado al mensaje) Este stock está modificado para soporte "0".

LIBRERÍAS:

Código PHP:
#include <amxmodx>
#include <adv_vault>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <printf>
#include <unixtime> 

CAMBIOS:

Cita:
  • v2.01 - [14/06/2015 - 23:05 ARG]
  • Removida la función "resetInfo".
  • v2.00 - [14/06/2015 - 17:25 ARG]
  • Publicación del código.
  • El código está escrito desde 0.
  • Mejor uso de ADV.
  • Más agradable a la vista. (Espero que para la máquina también)

DESCARGA:

.sma   Descargar AMXX / cuentas_estadisticas_adv.sma (Tamaño: 53.12 KB / Descargas: 158)
.inc   printf.inc (Tamaño: 1.93 KB / Descargas: 69)




SISTEMA DE ESTADÍSTICAS


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.

REQUISITOS IMPORTANTES:
[API] Advanced Vault System
[INC] Unix Time

LIBRERÍAS:

Código PHP:
#include <amxmodx>
#include <adv_vault>
#include <amxmisc>
#include <cstrike>
#include <dhudmessage>
#include <fakemeta>
#include <hamsandwich>
#include <unixtime> 

CAMBIOS:

Cita:
  • v1.50 BETA - [10/02/2015 - 16:30 ARG]
  • Corregido: Error en el guardado. get -> set.
  • Corregido: Error con arrayset en crear_cuenta(id).
  • Corregido: Varios errores de tipeo en crear_cuenta(id).
  • Eliminado: Native formatex() del menú de registro.
  • Eliminado: 2 switch de fw_PlayerKilled.
  • Modificado: g_Fecha_Registro[id] y g_Ultima_Sesion[id] de string a int.
  • Modificado: get_time() por get_systime().
  • Modificado: El sistema de TOPS 15, ahora crea y destruye el ordenamiento en el momento de uso.
  • Modificado: El menú de ingreso al servidor.
  • Agregado: Un contador de minutos/horas/dias/meses/años.
  • Agregado: INC Unix Time.
  • Agregado: Daño hecho y recibido, por cada equipo.
  • Agregado: 2 TOPS 15 por daño hecho como CT y TT.
  • Agregado: 1 página más al menú de estadísticas.
  • Revisado: Todo el sistema de cuentas en busca de alguna falla. Funcionando 100%
  • v1.00 BETA - [07/02/2015 - 17:00 ARG]
  • Publicación del código.

CRÉDITOS:

CSAxel (Rubio.-) - Extraje ideas de su sistema de cuentas.
Neeeeeeeeeel.- - Por ayudarme con el sistema de conteo de minutos/horas/dias/meses/años.

DESCARGA:

.sma   Descargar AMXX / Sistema_estadisticas.sma (Tamaño: 46.33 KB / Descargas: 247)
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#2
Oh cool :3 Se ve bueno. Lo probare! C:
[Imagen: 76561198086476173.png]
Responder
#3
y el include? D:
(adv_vault)
Responder
#4
good job no lo lei ni por la mitad por pajaYao ming, pero solo una cosa si estoy un año en el sv y no me di cuenta Crab
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#5
(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 pajaYao ming, pero solo una cosa si estoy un año en el sv y no me di cuenta Crab

No entiendo a que te referís. Dafuq
Cuando te registras por primera vez te guarda la fecha y hora exacta.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#6
(07/02/2015, 05:38 PM)Federicomb escribió:
(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 pajaYao ming, pero solo una cosa si estoy un año en el sv y no me di cuenta Crab

No entiendo a que te referís. Dafuq
Cuando te registras por primera vez te guarda la fecha y hora exacta.

Te dice la cantidad de años q estuviste jugando?Crab
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#7
(07/02/2015, 05:53 PM)mongito100 escribió:
(07/02/2015, 05:38 PM)Federicomb escribió:
(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 pajaYao ming, pero solo una cosa si estoy un año en el sv y no me di cuenta Crab

No entiendo a que te referís. Dafuq
Cuando te registras por primera vez te guarda la fecha y hora exacta.

Te dice la cantidad de años q estuviste jugando?Crab

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 ❤

https://github.com/FEDERICOMB96
Responder
#8
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...
Responder
#9
(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 ❤

https://github.com/FEDERICOMB96
Responder
#10
Con muchos if creo q se podriaWhatever
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#11
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*36560*60*24*3060*60*2460*60};

for (new 
i=0sizeof szDividiri++){
    if (
iLastLogin >= szDividir[i]){
        new 
num iLastLogin szDividir[i];
        if (
num == 0){
            
num 1;
        }
        
formatex(szBuffercharsmax(szBuffer), "Hace %d %s%s"numszUnidad[i], num == 1?"":"s");
        break;
    }
}
console_print(0szBuffer); 
[Imagen: paypalqr.png]
Responder
#12
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.

[Imagen: lIUeW7T.jpg]
[Imagen: Rpx54ha.jpg]
[Imagen: 4V7ysu3.jpg]

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*36560*60*24*3060*60*2460*6060};

new 
FechaActual get_systime();

new 
DiasRegistrado FechaActual g_Fecha_Registro[id];    
for (new 
0sizeof(szDividir); ++i) {
    if (
DiasRegistrado >= szDividir[i]) {
        new 
num = (DiasRegistrado szDividir[i]);
        
        if (
num == 0) {
            
formatex(szBuffercharsmax(szBuffer), "");
        }
        else {
            
formatex(szBuffercharsmax(szBuffer), " (Hace %d %s)"numszUnidad[i]);
        }
        
        break;
    }


Aún me faltan un par de detalles en cuanto a la estética y un poco el rendimiento, pero es sistema está y esta funcionando correctamente.



Lo único en que la pifiaste es acá Nel:
Código PHP:
new const szDividir[] = {60*60*24*36560*60*24*3060*60*2460*60/* aca pusiste 0 */60}; 

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.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#13
este código es bueno xd le daré uso Sonrisa
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#14
(09/02/2015, 01:42 AM)kikizon2 escribió: este código es bueno xd le daré uso Sonrisa

Tené en cuenta que se vienen grandes mejoras, esto solo es el principio.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#15
(09/02/2015, 01:44 AM)Federicomb escribió:
(09/02/2015, 01:42 AM)kikizon2 escribió: este código es bueno xd le daré uso Sonrisa

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*36560*60*24*3060*60*2460*60};

for (new 
i=0sizeof szDividiri++){
    if (
iLastLogin >= szDividir[i]){
        new 
num iLastLogin szDividir[i];
        if (
num == 0){
            
num 1;
        }
        
formatex(szBuffercharsmax(szBuffer), "Hace %d %s%s"numszUnidad[i], num == 1?"":"s");
        break;
    }
}
console_print(0szBuffer); 


Igual me descargo tu plugin para darle una mirada Guiño
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#16
Bueno, todo sirve al fin y al cabo. Podes sacar ideas, eso es bastante bueno.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#17
(09/02/2015, 01:39 AM)Federicomb escribió: Lo único en que la pifiaste es acá Nel:
Código PHP:
new const szDividir[] = {60*60*24*36560*60*24*3060*60*2460*60/* aca pusiste 0 */60}; 

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.
[Imagen: uGZLd8W.png]

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(szBuffercharsmax(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.
[Imagen: paypalqr.png]
Responder
#18
(09/02/2015, 08:39 AM)Neeeeeeeeeel.- escribió:
(09/02/2015, 01:39 AM)Federicomb escribió: Lo único en que la pifiaste es acá Nel:
Código PHP:
new const szDividir[] = {60*60*24*36560*60*24*3060*60*2460*60/* aca pusiste 0 */60}; 

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.
[Imagen: uGZLd8W.png]

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(szBuffercharsmax(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*36560*60*24*3060*60*2460*6060};

new 
FechaActual get_systime();

new 
DiasRegistrado FechaActual g_Fecha_Registro[id];    
for (new 
0sizeof(szDividir); ++i) {
    if (
DiasRegistrado >= szDividir[i]) {
        new 
num = (DiasRegistrado szDividir[i]);
        
        if (!
num) {
            
szBuffer[0] = '^0';
        }
        else {
            if (
== 1) {
                
formatex(szBuffercharsmax(szBuffer), " (Hace %d %s%s)"numszUnidad[i], num == "" "es");
            }
            else {
                
formatex(szBuffercharsmax(szBuffer), " (Hace %d %s%s)"numszUnidad[i], num == "" "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 ❤

https://github.com/FEDERICOMB96
Responder
#19
Buen plugin.

Podrias mejorar esto mira
Código PHP:
formatex(g_menucharsmax(g_menu), "%sREGISTRARSE"g_Estado[id] == REGISTRADO "\d" "\w"); 
------>
Código PHP:
menu_additem(g_menug_Estado[id] == REGISTRADO "\dREGISTRARSE" "\wREGISTRARSE"

te ahorras en hacer el formatex
Responder
#20
Actualizado!
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#21
(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.
[Imagen: paypalqr.png]
Responder
#22
Lei mal -.-
[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
Responder
#23
(10/02/2015, 04:39 PM)Neeeeeeeeeel.- escribió:
(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 ❤

https://github.com/FEDERICOMB96
Responder
#24
(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(szBuffercharsmax(szBuffer), "Hace %d %s%s"numszUnidad[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.
Claro es verdad... no pensé en eso.
[Imagen: paypalqr.png]
Responder
#25
Bug:

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(victiminflictorattackerFloat:damagedamage_type) {
    if (
victim == attacker || !g_Conectado[attacker])
        return 
HAM_IGNORED;
    
    if (
get_cvar_num("mp_friendlyfire") == && cs_get_user_team(victim) == cs_get_user_team(attacker))
        return 
HAM_SUPERCEDE;
    
    static 
iDamageiDamage floatround(damage);
        
    switch (
cs_get_user_team(victim)) {
        case 
CS_TEAM_Tg_danio_recibido[victim][TERRORISTAS] += iDamage;
        case 
CS_TEAM_CTg_danio_recibido[victim][ANTI_TERRORISTAS] += iDamage;
    }
    
    switch (
cs_get_user_team(attacker)) {
        case 
CS_TEAM_Tg_danio_hecho[attacker][TERRORISTAS] += iDamage;
        case 
CS_TEAM_CTg_danio_hecho[attacker][ANTI_TERRORISTAS] += iDamage;
    }
    
    return 
HAM_IGNORED;

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)