11.04.2012, 11:26
I've made an object editor, you can add object but it doesnt load them, also Im not sure if I done the saving by icon click correct.
TOP
GMI & GMX
SAVE & LOAD FUNCTION
Create Object COMMAND
TOP
pawn Код:
#define MAX_OBIEKTOW 1000
forward LoadObiekty();
forward SaveObiekty();
enum ObiektInfo
{
UID,
OModelID,
Float:fX2,
Float:fY2,
Float:fZ2,
Float:fRotX2,
Float:fRotY2,
Float:fRotZ2,
};
new Obiekt[8][ObiektInfo];
new Obiekt2[MAX_OBIEKTOW];
pawn Код:
public OnGameModeInit()
{
LoadObiekty();
}
public GameModeExitFunc()
{
SaveObiekty();
}
pawn Код:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
if(!IsValidObject(objectid)) return;
MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
if(response == 1)//CLICKED ON THE SAVE ICON
{
new idx;
while (idx < sizeof(Obiekt))
{
GetObjectRot(SelectedO[playerid], fRotX, fRotY, fRotZ);
GetObjectPos(SelectedO[playerid], fX, fY, fZ);
Obiekt[idx][UID] = SelectedO[playerid];
Obiekt[idx][OModelID] = Selected2[playerid];
Obiekt[idx][fX2] = fX;
Obiekt[idx][fY2] = fY;
Obiekt[idx][fZ2] = fZ;
Obiekt[idx][fRotX2] = fRotX;
Obiekt[idx][fRotY2] = fRotY;
Obiekt[idx][fRotZ2] = fRotZ;
}
}
}
public SaveObiekty()
{
new idx;
new File: file2;
while (idx < sizeof(Obiekt))
{
new coordstring[256];
format(coordstring,sizeof(coordstring),"%d,%d,%f,%f,%f,%f,%f,%f\r\n",Obiekt[idx][UID],Obiekt[idx][OModelID],Obiekt[idx][fX2],Obiekt[idx][fY2],Obiekt[idx][fZ2],Obiekt[idx][fRotX2],Obiekt[idx][fRotY2],Obiekt[idx][fRotZ2]);
if(idx == 0)
{
file2 = fopen("/Ustawienia/obiekty.txt", io_write);
}
else
{
file2 = fopen("/Ustawienia/obiekty.txt", io_append);
}
fwrite(file2, coordstring);
idx++;
fclose(file2);
}
return 1;
}
public LoadObiekty()
{
new arrCoords[8][64];
new strFromFile2[256];
new File: file = fopen("/Ustawienia/obiekty.txt", io_read);
if (file)
{
new idx;
while (idx < sizeof(Obiekt))
{
new uid2 = 0;
uid2 ++;
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
Obiekt[idx][UID] = strval(arrCoords[0]);
Obiekt[idx][OModelID] = strval(arrCoords[1]);
Obiekt[idx][fX2] = floatstr(arrCoords[2]);
Obiekt[idx][fY2] = floatstr(arrCoords[3]);
Obiekt[idx][fZ2] = floatstr(arrCoords[4]);
Obiekt[idx][fRotX2] = floatstr(arrCoords[5]);
Obiekt[idx][fRotY2] = floatstr(arrCoords[6]);
Obiekt[idx][fRotZ2] = floatstr(arrCoords[7]);
idx++;
Obiekt2[uid2] = CreateObject(Obiekt[idx][OModelID],Obiekt[idx][fX2],Obiekt[idx][fY2],Obiekt[idx][fZ2],Obiekt[idx][fRotX2],Obiekt[idx][fRotY2],Obiekt[idx][fRotZ2]);
}
printf("Obiekty from file: %d",idx);
fclose(file);
}
return 1;
}
pawn Код:
if(dialogid == OBIEKT2)
{
if(response)
{
new SettingsFile12[35];
format(SettingsFile12,sizeof(SettingsFile12),"Ustawienia/settings.ini");
new uid = dini_Int(SettingsFile12,"Obiektow");
if(IsNumeric(inputtext) || strval(inputtext) > 0 || strval(inputtext) < 19470)
{
new Float:x,Float:y,Float:z,Float:rotX,Float:rotY,Float:rotZ,coordstring[128];
uid ++;
dini_IntSet(SettingsFile12,"Obiektow",uid);
GetPlayerPos(playerid, x,y,z);
Obiekt2[uid] = CreateObject(strval(inputtext), x+1, y+1, z+1, 0.0,0.0,0.0);
SelectedO[playerid] = Obiekt2[uid];
Selected2[playerid] = strval(inputtext);
GetObjectRot(Obiekt2[uid], rotX, rotY, rotZ);
GetObjectPos(Obiekt2[uid], x, y, z);
EditObject(playerid, Obiekt2[uid]);
new File:objects = fopen("/Ustawienia/obiekty.txt",io_append);
format(coordstring,sizeof(coordstring),"%d,%d,%f,%f,%f,%f,%f,%f\r\n",uid,strval(inputtext),x,y,z,rotX,rotY,rotZ);
fwrite(objects, coordstring);
fclose(objects);
return 1;
}
}
}