Problema con cargado de "Sistemas de Tiendas" - Creacion IG - Y_INI
#1

Buenas a todos los usuarios, les agradezco que esten leyendo el tema
Bueno, tengo un problema con el cargado de datos (uso y_ini), de un sistema de "Tiendas" que estoy haciendo, bбsicamente lo que quiero es que se Cree un Dynamic3DTextLabel en la zona de la tienda. Pero no lo consigo, y es mбs me salta este warning

Код:
warning 213: tag mismatch
La linea del error? :
pawn Код:
new idtienda = CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, InfoTienda[i][tX], InfoTienda[i][tY], InfoTienda[i][tZ], 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
La verdad no sй cual es el problema, yo tengo todo bien definido las variables son tipo flotante, deberнa crearse bien el textdraw y no deberнa darme warnings. Les dejarй el codigo fuente por si ven algun error.

_______________________________________________

Код:
#define MAX_TIENDAS     20
#define TRuta   "/tiendas/%i.ini"

enum tInfo
{
	tID,
	Float:tX,
	Float:tY,
	Float:tZ
}
new InfoTienda[MAX_TIENDAS][tInfo];

cmd(creartienda, playerid, params[])
{
	new id;
    if(InfoJugador[playerid][pAdmin] < 5) return Message(playerid, GRIS, "No autorizado!");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, x, y, z, 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
    InfoTienda[id][tID] = UltimaTiendaID+1;
	InfoTienda[id][tX] = x;
    InfoTienda[id][tY] = y;
    InfoTienda[id][tZ] = z;
    new file[64];
	format(file,sizeof file,TRuta,InfoTienda[id][tID]);
	new INI:arch = INI_Open(file);
	INI_WriteInt(arch,"ID",InfoTienda[id][tID]);
	INI_Close(arch);
    UltimaTiendaID++;
    GuardarTienda(id);
	return 1;
}



public GuardarTienda(idtienda)
{
	new file[64];
 	format(file,sizeof file,TRuta,InfoTienda[idtienda][tID]);
  	new INI:arch = INI_Open(file);
  	INI_WriteFloat(arch,"X",InfoTienda[idtienda][tX]);
  	INI_WriteFloat(arch,"Y",InfoTienda[idtienda][tY]);
  	INI_WriteFloat(arch,"Z",InfoTienda[idtienda][tZ]);
    INI_Close(arch);
    return 1;
}

public CargarTiendas()
{
	for(new i = 0;i<MAX_TIENDAS;i++)
	{
		new file[64];
		format(file,sizeof(file),TRuta,i);
		if(fexist(file))
		{
				new INI:arch = INI_Open(file);
				new idtienda = CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, InfoTienda[i][tX], InfoTienda[i][tY], InfoTienda[i][tZ], 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
				InfoTienda[idtienda][tID] = InfoTienda[i][tID];
		  		InfoTienda[idtienda][tX] = InfoTienda[i][tX];
		  		InfoTienda[idtienda][tY] = InfoTienda[i][tY];
		  		InfoTienda[idtienda][tZ] = InfoTienda[i][tZ];
		     	if(InfoTienda[idtienda][tID] > UltimaTiendaID)
				{
					UltimaTiendaID = InfoTienda[idtienda][tID];
				}
				INI_Close(arch);
		}
	}
	return 1;
}
Disculpen las molestias y al que me ayude estarй muy agradecido... Un saludo.
Reply
#2

El tag de la variable no coincide con el de la funciуn.
pawn Код:
new Text3D:Variable = CreateDynamic.....
Los labels no se crean correctamente porque nunca obtienes la posiciуn en el public CargarTiendas.

y esto que se supone que hace
pawn Код:
InfoTienda[idtienda][tID] = InfoTienda[i][tID];
                InfoTienda[idtienda][tX] = InfoTienda[i][tX];
                InfoTienda[idtienda][tY] = InfoTienda[i][tY];
                InfoTienda[idtienda][tZ] = InfoTienda[i][tZ];
Reply
#3

Gracias, daniel.. estuve re al pedo en eso. Lo que no entiendo, es que ahora me marca el mismo error "Tag Mistmatch" en las variables de abajo.. Como tendrнan que quedar?

pawn Код:
InfoTienda[idtienda][tID] = InfoTienda[i][tID];
                InfoTienda[idtienda][tX] = InfoTienda[i][tX];
                InfoTienda[idtienda][tY] = InfoTienda[i][tY];
                InfoTienda[idtienda][tZ] = InfoTienda[i][tZ];
Especificamente lo marca por el "idtienda"

PD: Eso para asignar la posicion correctamente, mas que nada lo pensй para evitar bugs, solo que estб escrita directamente.

PD2: oops, habнa olvidado cargar la posicion de la tienda.. crearй un stock y luego os cuento como queda
Reply
#4

Ese cуdigo que pones ahн no tiene nada de lуgica, por eso te preguntй en el mensaje de arriba que es lo que deberia hacer segъn vos para asн ayudarte, pero de todos modo borralas las 4 que solo te causaran bugs.

te pongo un esquema
pawn Код:
public CargarTiendas()
{
    for(new i = 0;i<MAX_TIENDAS;i++)
    {
        //Obtines la ruta del archivo
        if(fexist(file)) {
            //abres el archivo
            //obtienes la pos X Y Z y las almacenas en el las variables con el enum creado
            InfoTienda[i][tLabelID] = CreateDinamic...//Creas el label, despues de haber obtenido X Y Z
            //cierras el archivo
        }
    }
}
Recuerda que el ID de la tienda y el ID del label son distintos y debes crear un indentificador para cada uno en el enum, el del label ID debe llevar el tag Text3D:
Reply
#5

Ajam.. gracias por la ayuda Daniel... bueno ya lo voy avanzado harto el sistema.. pero tengo una pequeсa duda. Cuando intento usar las funciones como el INI_WriteInt, o INI_Int... siempre me marca el error: Tag Mistmatch..

Hay alguna forma en especial de cargar/garudar la informacion del Label..?

EJ:

pawn Код:
INI_WriteInt(arch, "LabelID", InfoTienda[idtienda][tLabelID]);

INI_Int("LabelID", InfoTienda[id][tLabelID]);
________________________________

EDIT: Mi problema especнficamente es que, estoy creando ahora un comando para borrar dichas tiendas... y bueno. Funciona todo perfecto, excepto la parte del label, ya que en mis scriptfiles el archivo de la tienda se borra, pero IG el label continua allн.

Actualmente esta es la funciуn como borro las tiendas:
pawn Код:
public BorrarTienda(idtienda)
{
    new file[64];
    format(file,sizeof(file),TRuta,idtienda);
    if(fexist(file))
    {
        DestroyDynamic3DTextLabel(InfoTienda[idtienda][tLabelID]);
        InfoTienda[idtienda][tID] = 0;
        InfoTienda[idtienda][tX] = 0.0;
        InfoTienda[idtienda][tY] = 0.0;
        InfoTienda[idtienda][tZ] = 0.0;
        InfoTienda[idtienda][tID] = -1;
        fremove(file);
    }
    return 0;
}
Y al crearlo o cargarlo es asн..

pawn Код:
InfoTienda[id][tLabelID] = CreateDynamic3DTextLabel(

Otro dato que les puede ser ъtil.. es que al reiniciar mi servidor, y tratar de borrar determinada tienda, el label esta vez SI se borra. Es raro...
Gracias..
Reply
#6

Primeramente el ID del label no lo debes de guardar en el INI solo se guardan en variables cuando el server estб ON. El borrar tienda se ve bien y deberia funcionar, mostrб como dejaste el CargarTiendas.
Reply
#7

Bueno te dejarй el CargarTiendas... y comentarй un mini-bug que tengo

pawn Код:
public CargarTiendas()
{
    for(new i = 0;i<MAX_TIENDAS;i++)
    {
        new file[64];
        format(file,sizeof(file),TRuta,i);
        if(fexist(file))
        {
                new INI:arch = INI_Open(file);
                INI_ParseFile(file,"CargarTienda",.bExtra = true, .extra = i);
                InfoTienda[i][tLabelID] = CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, InfoTienda[i][tX], InfoTienda[i][tY], InfoTienda[i][tZ], 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
                InfoTienda[i][tObjetoID] = CreateDynamicObject(3861, InfoTienda[i][tX], InfoTienda[i][tY], InfoTienda[i][tZ], 0, 0, InfoTienda[i][tA], -1, -1, -1, 200.0);
                if(InfoTienda[i][tID] > UltimaTiendaID)
                {
                    UltimaTiendaID = InfoTienda[i][tID];
                }
                INI_Close(arch);
        }
    }
    return 1;
}
Bueno.. el problema en general que tengo (Ya que han pasado horas y he arreglado varios) es solamente 1... Creй un comando para borrar dichas tiendas IN-GAME.. pero es como si no detectarб bien la ID del Label...

Este es el comando
pawn Код:
cmd(borrartienda, playerid, params[])
{
    new id;
    if(InfoJugador[playerid][pAdmin] < 5) return Message(playerid, GRIS, "No autorizado!");
    if(sscanf(params, "i", id)) return Message(playerid, GRIS, "[ERROR]: /borrartienda + idtienda");
    new string[128];
    if(id >= MAX_TIENDAS || id < 0) return Message(playerid, GRIS, "[ERROR]:ID incorrecto.");
    else
    {
        BorrarTienda(id);
        format(string, sizeof(string), "Tienda %d borrada.", id);
        Message(playerid, GRIS, string);
    }
    return 1;
}
Su dйbida funcion BorrarTienda:
pawn Код:
forward BorrarTienda(idtienda);
public BorrarTienda(idtienda)
{
    new file[64];
    format(file,sizeof(file),TRuta,idtienda);
    if(fexist(file))
    {
        DestroyDynamic3DTextLabel(InfoTienda[idtienda][tLabelID]);
        DestroyDynamicObject(InfoTienda[idtienda][tObjetoID]);
        InfoTienda[idtienda][tID] = 0;
        InfoTienda[idtienda][tX] = 0.0;
        InfoTienda[idtienda][tY] = 0.0;
        InfoTienda[idtienda][tZ] = 0.0;
        InfoTienda[idtienda][tA] = 0.0;
        InfoTienda[idtienda][tID] = -1;
        fremove(file);
    }
    return 0;
}
їEl Problema?
1 Si creo una tienda IN-GAME vнa /creartienda... y luego la intento borrar, se borrar el archivo INI, pero el Objeto y El 3DTextLabel que puse siguen allн en el juego.

2 Y este es un dato curioso, si es que creo una tienda , luego reinicio el servidor, y uso /borrartienda, en esta vez el 3DTextLabel + El objeto Sн resulta borrado.. Es raro :S

PD: El /creartienda.. usa la misma forma para crear el "objeto" y el "3DTextLabel"
pawn Код:
InfoTienda[i][tLabelID] = CreateDynamic3DTextLabel(
Si tienes un poco de mбs dudas puedes pasarte por este post:
https://sampforum.blast.hk/showthread.php?tid=419387

Ah, y gracias por ayudar...
Reply
#8

No estas asignando bien los ids en tu comando creartienda.
pawn Код:
cmd(creartienda, playerid, params[])
{
    new id;
    if(InfoJugador[playerid][pAdmin] < 5) return Message(playerid, GRIS, "No autorizado!");
    if(UltimaTiendaID == MAX_TIENDAS) return Message(playerid, GRIS, "No puedes seguir creando tiendas");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    InfoTienda[UltimaTiendaID][tLabelID] = CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, x, y, z, 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
    InfoTienda[UltimaTiendaID][tID] = UltimaTiendaID;
    InfoTienda[UltimaTiendaID][tX] = x;
    InfoTienda[UltimaTiendaID][tY] = y;
    InfoTienda[UltimaTiendaID][tZ] = z;
    new file[64];
    format(file,sizeof file,TRuta,InfoTienda[UltimaTiendaID][tID]);
    new INI:arch = INI_Open(file);
    INI_WriteInt(arch,"ID",InfoTienda[UltimaTiendaID][tID]);
    INI_Close(arch);
    UltimaTiendaID++;
    GuardarTienda(id);
    return 1;
}
probalo y me contбs.
Reply
#9

Hmm.. no.. es mбs ahora quedan muchos mбs bugs.

1. Sigue igual.. el textdraw NO se elimina
2. Los archivos no se crean correctamente (Es raro explicar, se crean sin guardar la posicion correcta)
Reply
#10

Solucionado

Bueno.. en fin, creo que me aclaraste algo.. el cуdigo lo deje asi:

pawn Код:
cmd(creartienda, playerid, params[])
{
    new id;
    if(InfoJugador[playerid][pAdmin] < 5) return Message(playerid, GRIS, "No autorizado!");
    if(id == MAX_TIENDAS) return Message(playerid, GRIS, "[ERROR]:No puedes seguir creando tiendas");
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    InfoTienda[id][tID] = UltimaTiendaID+1;
    InfoTienda[id][tX] = x;
    InfoTienda[id][tY] = y;
    InfoTienda[id][tZ] = z;
    new file[64];
    format(file,sizeof file,TRuta,InfoTienda[id][tID]);
    new INI:arch = INI_Open(file);
    INI_WriteInt(arch,"ID",InfoTienda[id][tID]);
    INI_Close(arch);
    UltimaTiendaID++;
    InfoTienda[tID][tLabelID] = CreateDynamic3DTextLabel("{FF0000}[TIENDA]{FFFFFF} Venta de armas", BLANCO, x, y, z, 30.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 100.0);
    GuardarTienda(id);
    return 1;
}
Ya sabнa que no era necesario ponerle la UltimaTiendaID en las variables, eso solo lo bugearнa xD.

Asi que lo que hice , fue que luego de asignarle la ID de la tienda... entonces crearб en Dicha Tienda el 3DTextLabel..

Y por supuesto tuve que cambiar la funcion para borrarla.

pawn Код:
forward BorrarTienda(idtienda);
public BorrarTienda(idtienda)
{
    new file[64];
    format(file,sizeof(file),TRuta,idtienda);
    if(fexist(file))
    {
        DestroyDynamic3DTextLabel(InfoTienda[tID][tLabelID]);
        DestroyDynamicObject(InfoTienda[tID][tObjetoID]);
...
En fin.. Muchas gracias Daniel-92. Ahi te deje +REP. Gracias por ayudarme.. me fuiste de mucha ayuda. Gracias
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)