Como Cargar objectos desde un archivo .txt?
#1

Buenas amigos de Samp Forum estoy creando un sistema desde 0
Uso <mseleccion> puse objectos y los puedes crear In-game
Te crea un archivo por default en scripfiles
El problema es que no puedo hacer para que cargue los objectos del archivo creado por que cuando reinicio pierdo todo como me imagino el cуdigo seria un ciclo while donde tendrнa que crear los objectos
Si me ayudarian se los agradeceria es un sistema que esta en desarrollo.

public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
if(type == SELECT_OBJECT_GLOBAL_OBJECT)
{
if(guardando[playerid] == true)
{
SendClientMessage(playerid, 0xFF0000FF, "Posiciуn del objeto guardada.");
new File: hFile;
hFile = fopen("craftguardados.txt", io_append);
if(hFile)
{
new Float:X,Float:Y,Float:Z;
GetObjectPos(objectid, X,Y,Z);
new Float:rX,Float:rY,Float:rZ;
GetObjectRot(objectid,rX,rY,rZ);
new string2[256];
format(string2, 256, "CreateObject(%d, %f,%f,%f,%f,%f,%f,100.0\r\n",PlayerInfo[playerid][pObjetoID], X,Y,Z,rX,rY,rZ);
fwrite(hFile, string2);
}
fclose(hFile);
CancelEdit(playerid);
}
}
return 1;
}
Aquн te da las coordenadas:

Aquн se vera como es:

Duda como puedo hacer para que nose pierdan los objectos cuando se reinicie el server
Nacion Zombie version 2.0 beta crйditos kitten
Reply
#2

yo lo haria de la siguiente manera:

Код:
new Float:X,Float:Y,Float:Z;
GetObjectPos(objectid, X,Y,Z);
new Float:rX,Float:rY,Float:rZ;
GetObjectRot(objectid,rX,rY,rZ);
new string2[256];
format(string2, 256, "%d|%f|%f|%f|%f|%f|%f\r\n",PlayerInfo[playerid][pObjetoID], X,Y,Z,rX,rY,rZ);
fwrite(hFile, string2);
entonces, en el archivo te quedarian lineas como estas

Код:
%d|%f|%f|%f|%f|%f|%f
%d|%f|%f|%f|%f|%f|%f
%d|%f|%f|%f|%f|%f|%f
%d|%f|%f|%f|%f|%f|%f
solo basta con crear un bucle que lea linea por linea, y a cada linea la partis con la funcion "split()".
esta funcion requiere un array bidimensional como destino, donde va a almacenar todas las subcadenas, la cadena de la linea a partir, y un char que seria el delimitador, en este caso '|'

Код:
new destino[7][32]; // 7 es la cantidad de datos que vas a guardar, modelid, posx, posy, posz, rotx, roty, rotz.
// 32 es la cantidad maxima de caracteres que va a almacenar cada elemento.
ejecutas split, y ya tenes la cadena separada. ahora ya podes crear el objeto con los datos y pasar a la siguiente linea, si es que la hay.

Код:
CreateObject(strval(destino[0]), floatstr(destino[1]), floatstr(destino[2]), floatstr(destino[3]), floatstr(destino[4]), floatstr(destino[5]), floatstr(destino[6]));
//strval, convierte cadena a integer, como modelid es un integer, usamos esta funcion para convertir
//floatstr, lo mismo que strval, pero convierte a float
Reply
#3

Код:
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
	if(type == SELECT_OBJECT_GLOBAL_OBJECT)
    {
		if(guardando[playerid] == true)
		{
			SendClientMessage(playerid, 0xFF0000FF, "Posiciуn del objeto guardada.");
        	new File: hFile;
			hFile = fopen("mueblesguardados.inc", io_append);
			if(hFile)
			{
				GetObjectPos(objectid, X,Y,Z);
 				new Float:rX,Float:rY,Float:rZ;
  				GetObjectRot(objectid,rX,rY,rZ);
   				new string2[256];
    			format(string2, 256, "CreateObject(%d, %f,%f,%f,%f,%f,%f,100.0\r\n",PlayerInfo[playerid][pObjetoID], X,Y,Z,rX,rY,rZ);
    			fwrite(hFile, string2);
			}
			fclose(hFile);
			CancelEdit(playerid);
		}
    }
    return 1;
}
Block De Notas
Код:
3279|2898.813964|-2065.752197|3.256061|0.000000|0.000000|89.142486
Reply
#4

Quote:
Originally Posted by LANS
Посмотреть сообщение
Код:
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
	if(type == SELECT_OBJECT_GLOBAL_OBJECT)
    {
		if(guardando[playerid] == true)
		{
			SendClientMessage(playerid, 0xFF0000FF, "Posiciуn del objeto guardada.");
        	new File: hFile;
			hFile = fopen("mueblesguardados.inc", io_append);
			if(hFile)
			{
				GetObjectPos(objectid, X,Y,Z);
 				new Float:rX,Float:rY,Float:rZ;
  				GetObjectRot(objectid,rX,rY,rZ);
   				new string2[256];
    			format(string2, 256, "CreateObject(%d, %f,%f,%f,%f,%f,%f,100.0\r\n",PlayerInfo[playerid][pObjetoID], X,Y,Z,rX,rY,rZ);
    			fwrite(hFile, string2);
			}
			fclose(hFile);
			CancelEdit(playerid);
		}
    }
    return 1;
}
Block De Notas
Код:
3279|2898.813964|-2065.752197|3.256061|0.000000|0.000000|89.142486
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
if(type == SELECT_OBJECT_GLOBAL_OBJECT)
{
if(guardando[playerid] == true)
{
SendClientMessage(playerid, 0xFF0000FF, "Posiciуn del objeto guardada.");
new File: hFile;
hFile = fopen("mueblesguardados.inc", io_append);
if(hFile)
{
GetObjectPos(objectid, X,Y,Z);
new Float:rX,Float:rY,Float:rZ;
GetObjectRot(objectid,rX,rY,rZ);
new string2[256];
format(string2, 256, "%d|%f|%f|%f|%f|%f|%f\r\n",PlayerInfo[playerid][pObjetoID], X,Y,Z,rX,rY,rZ);
fwrite(hFile, string2);
}
fclose(hFile);
CancelEdit(playerid);
}
}
return 1;
}
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)