ayuda con esta funcion
#1

Buenas, queria pedirles ayuda para solucionar este problema que tengo, y es que me hice un pequeсo sistema de idiomas en mysql, que de hecho al principio era totalmente mysql (pedia directamente a la bd, cada vez que era llamada) y funcionaba bien, pero decidi cambiar por que me dijieron que podria volverse un problema al haber muchos usuarios, luego decidi solo pedirlo de un solo al iniciar la gm y que guardara las cadenas en variables.

Problema: la funcion GetMsgByLangKey deberia extraer de la variable la cadena(string), pero no lo hace bien devuelve un valor vacio.

PHP код:
DescargarInfo()
{
    new 
conteo_datos 0;
    
mysql_query(MySQL,"SELECT `idio_nombre`,`idio_key`,`idio_contenido` FROM "TABLA_IDIOMA"");
    for(new 
i;i<cache_num_rows();i++)
    {
        
cache_save_string(i,"idio_key",infIdioma[i][Key]);
        
cache_save_string(i,"idio_contenido",infIdioma[i][Cadena]);
           
cache_save_int(i,"idio_nombre",infIdioma[i][Lenguage]);
           
conteo_datos++;
           
TOT_CADS conteo_datos;
    }
    
printf("Informaciуn de idiomas descargada y almacenada.");
    
printf("R: %d Cadenas de Idioma.",conteo_datos);
    
printf("Se descargo la informacion desde la base de datos en %d ms.",GetTickCount()-debug_time);
    return 
1;
}
// esta es la funcion del problema.
stock GetMsgByLangKey(playerid, const langkey[])
{
    new 
tempstr[256],
        
debug_time=GetTickCount();
    for(new 
i;i<TOT_CADS;i++)
    {
        if(!
strcmp(infIdioma[i][Key],langkey,true))
        {
            if(
infIdioma[i][Lenguage] == infJugador[playerid][Idioma])
            {
                
format(tempstr,sizeof(tempstr),"%s",infIdioma[i][Cadena]);
                
printf("%s",tempstr);
                break;
            }
        }
    }
    
printf("GetMsgByLangKey | Obtencion de cadena en %d ms.",GetTickCount()-debug_time);
    return 
tempstr;

Reply
#2

La estructura para hacer eso no es la adecuada, hay un mal diseсo en tu base de datos, preferiblemente yo lo harнa de esta manera.

PHP код:
DescargarInfo()
{
    new 
conteo_datos 0;
    
mysql_query(MySQL,"SELECT `idio_nombre`,`idio_key`,`idio_contenido` FROM "TABLA_IDIOMA"");
    for(new 
i;i<cache_num_rows();i++)
    {
        
//Te faltaria tener un campo auto increment como id del idioma (un integer)
        //Supongamos que se almacenara en la variable infIdioma[i][IdiomaID]
        
cache_save_string(i,"idio_key",infIdioma[i][Key]);
        
cache_save_string(i,"idio_contenido",infIdioma[i][Cadena]);
        
cache_save_int(i,"idio_nombre",infIdioma[i][Lenguage]);
        
conteo_datos++;
    }
    
TOT_CADS conteo_datos;
    
printf("Informaciуn de idiomas descargada y almacenada.");
    
printf("R: %d Cadenas de Idioma.",conteo_datos);
    
printf("Se descargo la informacion desde la base de datos en %d ms.",GetTickCount()-debug_time);
    return 
1;

PHP код:
//Al jugador deberia guardarse en su cuenta el ID del idioma
//(no el nombre) y almacenarlo en infJugador[playerid][IdiomaDB_ID]
GetPlayerLangID(playerid) {
    for(new 
i;i<TOT_CADS;i++) {
        if(
infIdioma[i][IdiomaID] == infJugador[playerid][IdiomaDB_ID]) {
            return 
i;
        }
    }
      return 
0//Cambiar el 0 por el ID de un idioma por default

PHP код:
//En el login (necesaria la variable pIdiomaID para el jugador)
infJugador[playerid][pIdiomaID] = GetPlayerLangID(playerid);
//Luego donde se quiera utilizar el idioma
printf("JUGADOR: %d | IDIOMA: %s",playerid,infIdioma[[infJugador[playerid][pIdiomaID]][Ideoma]); 
PHP код:
//Para que sea mas entendible
#define GetPlayerLang(%1) infIdioma[[infJugador[%1][pIdiomaID]][Ideoma]
printf("JUGADOR: %d | IDIOMA: %s",playerid,GetPlayerLang(playerid)); 
Es solamente un cуdigo ejemplo, no compilarб si hace un copiar y pegar debe adaptarse a tu cуdigo.
Reply
#3

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
La estructura para hacer eso no es la adecuada, hay un mal diseсo en tu base de datos, preferiblemente yo lo harнa de esta manera.

PHP код:
DescargarInfo()
{
    new 
conteo_datos 0;
    
mysql_query(MySQL,"SELECT `idio_nombre`,`idio_key`,`idio_contenido` FROM "TABLA_IDIOMA"");
    for(new 
i;i<cache_num_rows();i++)
    {
        
//Te faltaria tener un campo auto increment como id del idioma (un integer)
        //Supongamos que se almacenara en la variable infIdioma[i][IdiomaID]
        
cache_save_string(i,"idio_key",infIdioma[i][Key]);
        
cache_save_string(i,"idio_contenido",infIdioma[i][Cadena]);
        
cache_save_int(i,"idio_nombre",infIdioma[i][Lenguage]);
        
conteo_datos++;
    }
    
TOT_CADS conteo_datos;
    
printf("Informaciуn de idiomas descargada y almacenada.");
    
printf("R: %d Cadenas de Idioma.",conteo_datos);
    
printf("Se descargo la informacion desde la base de datos en %d ms.",GetTickCount()-debug_time);
    return 
1;

PHP код:
//Al jugador deberia guardarse en su cuenta el ID del idioma
//(no el nombre) y almacenarlo en infJugador[playerid][IdiomaDB_ID]
GetPlayerLangID(playerid) {
    for(new 
i;i<TOT_CADS;i++) {
        if(
infIdioma[i][IdiomaID] == infJugador[playerid][IdiomaDB_ID]) {
            return 
i;
        }
    }
      return 
0//Cambiar el 0 por el ID de un idioma por default

PHP код:
//En el login (necesaria la variable pIdiomaID para el jugador)
infJugador[playerid][pIdiomaID] = GetPlayerLangID(playerid);
//Luego donde se quiera utilizar el idioma
printf("JUGADOR: %d | IDIOMA: %s",playerid,infIdioma[[infJugador[playerid][pIdiomaID]][Ideoma]); 
PHP код:
//Para que sea mas entendible
#define GetPlayerLang(%1) infIdioma[[infJugador[%1][pIdiomaID]][Ideoma]
printf("JUGADOR: %d | IDIOMA: %s",playerid,GetPlayerLang(playerid)); 
Es solamente un cуdigo ejemplo, no compilarб si hace un copiar y pegar debe adaptarse a tu cуdigo.
Ya tengo una llave primaria con auto increment, solo que no la utilizo en el codigo, ya que practicamente no tiene uso, debido a que el string se llama por medio de la key(Campo tipo VarChar, que almacena el nombre para luego ser llamado, ya que es mucho mas facil recordar), el idioma del jugador si se guarda por medio de un campo numerico, en su respectiva tabla, las cadenas en la bd tienen su campo idioma que igualmente es un tipo numerico( 1=CASTELLANO,2=INGLES).
Reply
#4

Solucionado, simplemente era que el idioma debia ser de lo primero en cargar, y al no haber ese dato, pues la funcion fallada.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)