[Problema] Mi Sistema -
sonnkz - 10.04.2013
bueno, estuve haciendo un sistema de creacion de HQ ingame pero los problemas son los siguientes
- al setearse un virtual world en los archivos aparecen numeros enormes como "2343242526" y cosas asi, nose por que pero nose si afectaria a algo
-cuando creo una hq se me crea un archivo solo, llamado 0.ini y cuando creo otra hq es como que la anterior se elimina y se crea otro archivo con el mismo numero 0.ini
lo que queria hacer es que se creen los archivos con los nombres de cada faccion, es decir
Barzini.ini, groove Steet.ini etc , es decir, simplemente crear los archivos con los nombres que se setearon en el primer parametro del comando que seria "Nombrehq"
Otra duda
Como ago para hacer espacios en un texto ? yo al utilizar el comando /crearhq [Nombre] pongo Groove Street y me salta el if de como usarlo, pero si pongo GrooveStreet todo junto si me funciona, necesito saber como hacer para que se puedan crear espacios en parametros de string
Saludos, les dejo el codigo por si alguien lo quiere ver
STOCKS :
[SPOILER]
Код:
stock CargarHQ()
{
new CArch[22],c;
print("[AVISO] Las HQ de facciones se cargaron Exitosamente!..\n");
while(c < MAX_HQ)//el loop
{
format(CArch,sizeof(CArch),"hqs/%d.ini",c);//el destino para cargar
if(fexist(CArch))//si existe el archivo formateado
{
new Str[128];
INI_ParseFile(CArch,"CargarHQ_%s",.bExtra = true, .extra = c);//carga del archivo INI
LabelHq[c] = Create3DTextLabel(Str,0xFFFFFFFF,PickupHQ[c][Entrada_x],PickupHQ[c][Entrada_y],PickupHQ[c][Entrada_z],20,0);
pHQ[c] = CreatePickup(1239,1,PickupHQ[c][Entrada_x],PickupHQ[c][Entrada_y],PickupHQ[c][Entrada_z]);
}
c++;
}
return 1;
}
forward CargarHQ_data(i,name[],value[]);
public CargarHQ_data(i,name[],value[])
{
INI_Float("Entrada_x",PickupHQ[i][Entrada_x]);
INI_Float("Entrada_y",PickupHQ[i][Entrada_y]);
INI_Float("Entrada_z",PickupHQ[i][Entrada_z]);
INI_Float("Salida_x",PickupHQ[i][Salida_x]);
INI_Float("Salida_y",PickupHQ[i][Salida_y]);
INI_Float("Salida_z",PickupHQ[i][Salida_z]);
INI_Int("Interior",PickupHQ[i][Int]);
INI_Int("VirtualWorld",PickupHQ[i][VW]);
format(Nombrehq, 128, "%s",PickupHQ[i][NombreHQs]);
return 1;
}
stock ActualizarHQ(playerid)
{
new CArch[19];
format(CArch,sizeof(CArch),"hqs/%d.ini",playerid);//el destino para guardar
new INI:Arch = INI_Open(CArch);
INI_SetTag(Arch,"Creadas HQ");//el TAg con el que lo leeremos al archivo (en el ini saldrб [data])
INI_WriteFloat(Arch,"Entrada_x",PickupHQ[playerid][Entrada_x]);
INI_WriteFloat(Arch,"Entrada_y",PickupHQ[playerid][Entrada_y]);
INI_WriteFloat(Arch,"Entrada_z",PickupHQ[playerid][Entrada_z]);
INI_WriteFloat(Arch,"Salida_x",PickupHQ[playerid][Salida_x]);
INI_WriteFloat(Arch,"Salida_y",PickupHQ[playerid][Salida_y]);
INI_WriteFloat(Arch,"Salida_z",PickupHQ[playerid][Salida_z]);
INI_WriteInt(Arch,"Interior",PickupHQ[playerid][Int]);
INI_WriteInt(Arch,"VirtualWorld",PickupHQ[playerid][VW]);
INI_WriteString(Arch,"Nombre",PickupHQ[playerid][NombreHQs]);
INI_Close(Arch);//cerramos el archivo
}
[/SPOILER]
Defines y news :
Код:
#define MAX_HQ 30
new Text3D:LabelHq[MAX_HQ];
new pHQ[MAX_HQ];
new Nombrehq[128];
Enum :
Код:
enum InfoHq
{
Float:Entrada_x,
Float:Entrada_y,
Float:Entrada_z,
Float:Salida_x,
Float:Salida_y,
Float:Salida_z,
Int,
VW,
NombreHQs
}
new PickupHQ[MAX_HQ][InfoHq];
y el comando /crearhq
[SPOILER]
Код:
CMD:crearhq(playerid, params[])
{
if(PlayerInfo[playerid][Admin] != 2013) return SendClientMessage(playerid, -1, "{00CED1}[ERROR]{FFFFFF} Tu no eres administrador!");
new Float:eX,Float:eY,Float:eZ;
new pInt;
if(sscanf(params, "s[128]ifff",Nombrehq,pInt,pInt,eX,eY,eZ)) return SendClientMessage(playerid,-1,"{FF8C00}Uso:{FFFFFF}/crearhq [Nombre de HQ] [interior] [cordenada x interior] [cordenada y interior] [cordenada z interior]");
GetPlayerPos(playerid, PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z]);
PickupHQ[playerid][Salida_x] = eX;//almacenamos las cordenadas de los paremetros
PickupHQ[playerid][Salida_y] = eY;
PickupHQ[playerid][Salida_z] = eZ;
format(PickupHQ[playerid][NombreHQs], 128, "%s", Nombrehq);
PickupHQ[playerid][Int] = pInt;
PickupHQ[playerid][VW] = pInt+100;
pHQ[playerid] = CreatePickup(1239, 1, PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z]);
new str[128];
format(str, sizeof(str), "{94AEE6}%s{FFFFFF}\nUtiliza /entrar", Nombrehq);
LabelHq[playerid] = Create3DTextLabel(str,0xFFFFFFFF,PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z],20,0);
ActualizarHQ(playerid);
return 1;
}
[/SPOILER]
Gracias
Respuesta: [Problema] Mi Sistema -
JustBored - 10.04.2013
Se utiliza %s para definir strings. Estбs usando %d (Se usa para integrers) en ves de %s. Despuйs el comando serнa asн
pawn Код:
CMD:crearhq(playerid, params[])
{
if(PlayerInfo[playerid][Admin] != 2013) return SendClientMessage(playerid, -1, "{00CED1}[ERROR]{FFFFFF} Tu no eres administrador!");
new Float:eX,Float:eY,Float:eZ;
new pInt;
if(!sscanf(params, "s[128]ifff",Nombrehq,pInt,pInt,eX,eY,eZ)) return SendClientMessage(playerid,-1,"{FF8C00}Uso:{FFFFFF}/crearhq [Nombre de HQ] [interior] [cordenada x interior] [cordenada y interior] [cordenada z interior]");
GetPlayerPos(playerid, PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z]);
PickupHQ[playerid][Salida_x] = eX;//almacenamos las cordenadas de los paremetros
PickupHQ[playerid][Salida_y] = eY;
PickupHQ[playerid][Salida_z] = eZ;
format(PickupHQ[playerid][NombreHQs], 128, "%s", Nombrehq);
PickupHQ[playerid][Int] = pInt;
PickupHQ[playerid][VW] = pInt+100;
pHQ[playerid] = CreatePickup(1239, 1, PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z]);
new str[128];
format(str, sizeof(str), "{94AEE6}%s{FFFFFF}\nUtiliza /entrar", Nombrehq);
LabelHq[playerid] = Create3DTextLabel(str,0xFFFFFFFF,PickupHQ[playerid][Entrada_x],PickupHQ[playerid][Entrada_y],PickupHQ[playerid][Entrada_z],20,0);
ActualizarHQ(playerid);
return 1;
}
Respuesta: [Problema] Mi Sistema -
sonnkz - 10.04.2013
Solucionado lo de la definicion de string, ahora me falta solucionar para que cree un archivo .ini para cada HQ
Respuesta: [Problema] Mi Sistema -
JuliPera - 10.04.2013
Estas guardando las HQ's con tu ID, por eso se guardan con 0.
Tenes que poner el ID de la HQ, o el nombre.
Te conviene guardarlas con ID y no con Nombre, porque cuando los cargas empazas con el 0, cargas esa y sumas 1, y asi hasta la ultima. Si lo haces con nombre no podes hacer esto.
Respuesta: [Problema] Mi Sistema -
sonnkz - 10.04.2013
Entonces como seria ? por que la verdad, me re perdi en este sistema que hice
Respuesta: [Problema] Mi Sistema -
JustBored - 11.04.2013
Te recomiendo crear un archivo .cfg (manualmente se crea porque sino la PC no lo abre, al menos la mнa.) y luego meterle ahн los datos. No sй supongo que serнa mбs fбcil, despuйs vos mismo te darнas cuenta, o sino no sй usa un code masomenso asн
pawn Код:
new File:hFile, string[64];
format(string, sizeof(string), "directorio/%s.ini", NombreHQ); //creo que esa es la variable
hFile = fopen(string, io_readwrite);
if(hFile)
{
//cуdigos
}
fclose(hFile);
}
return 1;
}
Lo que ese cуdigo hace es crear un archivo nuevo en el directorio deseado con el nombre del nombre al que le pusiste a la HQ, el archivo va en la carpeta scriptfiles aunque se puede crear otra carpeta dentro de scriptifles tipo no sй "Facciones" y metes el coso asн "facciones/%s.ini" para que el archivo se cree dentro de la carpeta "facciones"