11.07.2012, 18:46
(
Последний раз редактировалось Riddick94; 17.07.2012 в 12:52.
)
Hello.
I need some help with my Object Editor.. i don't know what's going on. My problem is that when i create one object i can edit it later but when i create another object i can't edit the first one but second can. Anyone know what's goin' on?
I had the similar problem with my House system, when i created one Checkpoint for house and enter then exit house it was works okey but when i create another house and enter to the first house what i created then when i exiting it's setting my position to the second house what i created..
Code:
I need some help with my Object Editor.. i don't know what's going on. My problem is that when i create one object i can edit it later but when i create another object i can't edit the first one but second can. Anyone know what's goin' on?
I had the similar problem with my House system, when i created one Checkpoint for house and enter then exit house it was works okey but when i create another house and enter to the first house what i created then when i exiting it's setting my position to the second house what i created..
Code:
pawn Код:
// Include'y
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include "YSI\y_ini"
#define MAX_OBJECTS_CREATED (2000)
#define DIALOG_CREATE_OBJECTS (5999)
enum oInfo
{
oObjectID,
oModelID,
Float:oX,
Float:oY,
Float:oZ,
Float:roX,
Float:roY,
Float:roZ
};
new ObjectInfo[MAX_OBJECTS_CREATED][oInfo];
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptInit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptInit()
{
return true;
}
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptExit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptExit()
{
return true;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_CREATE_OBJECTS:
{
switch(listitem)
{
// Tworzenie obiektu.
case 0:
{
if(!response)return false;
else
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS+1, DIALOG_STYLE_INPUT, "ID Obiektu", "Wpisz poniżej ID swojego obiektu", "Wpisz", "Anuluj");
}
}
// Edycja najbliższego obiektu.
case 1:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
new Float:X, Float:Y, Float:Z;
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
new distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(distance <= 2.0)
{
EditObject(playerid, ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Edycja obiektu ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
return true;
}
// Usuwanie najbliższego obiektu.
case 2:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
new Float:X, Float:Y, Float:Z;
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
new distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(distance <= 2.0)
{
DestroyObject(ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Usunieto obiekt o ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
return true;
}
}
return true;
}
// Edycja stworzonego obiektu.
case DIALOG_CREATE_OBJECTS+1:
{
if(!response)return false;
else
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
GetXYInFrontOfPlayer(playerid, X, Y, 3.0);
for(new i; i < sizeof(ObjectInfo); i++)
{
ObjectInfo[i][oModelID] = strval(inputtext);
ObjectInfo[i][oObjectID] = CreateObject(strval(inputtext), X, Y, Z, 0.0, 0.0, 0.0);
EditObject(playerid, ObjectInfo[i][oObjectID]);
break;
}
}
return true;
}
}
return true;
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
switch(response)
{
case EDIT_RESPONSE_FINAL:
{
new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
GetObjectPos(objectid, X, Y, Z);
GetObjectRot(objectid, rX, rY, rZ);
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
ObjectInfo[i][oX] = fX;
ObjectInfo[i][oY] = fY;
ObjectInfo[i][oZ] = fZ;
ObjectInfo[i][roX] = fRotX;
ObjectInfo[i][roY] = fRotY;
ObjectInfo[i][roZ] = fRotZ;
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
new INI:Objects = INI_Open(ObjectFile(GetFreeObjectFileID()));
INI_WriteInt (Objects, "ObjectID", ObjectInfo[i][oObjectID]);
INI_WriteInt (Objects, "ModelID", ObjectInfo[i][oModelID]);
INI_WriteFloat (Objects, "oX", ObjectInfo[i][oX]);
INI_WriteFloat (Objects, "oY", ObjectInfo[i][oY]);
INI_WriteFloat (Objects, "oZ", ObjectInfo[i][oZ]);
INI_WriteFloat (Objects, "roX", ObjectInfo[i][roX]);
INI_WriteFloat (Objects, "roY", ObjectInfo[i][roY]);
INI_WriteFloat (Objects, "roZ", ObjectInfo[i][roZ]);
INI_Close (Objects);
break;
}
}
}
case EDIT_RESPONSE_CANCEL:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
break;
}
}
}
}
return true;
}
CMD:creator(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS, DIALOG_STYLE_LIST, "Kreator obiektуw", "1. Stwуrz obiekt\n2. Edytuj najbliższy obiekt\n3. Usuń najbliższy obiekt", "Wybierz", "Anuluj");
return true;
}
stock ObjectFile(objectid)
{
new filename[32];
format(filename, sizeof(filename), "/CreatedObjects/%d.ini", objectid);
return filename;
}
stock GetFreeObjectFileID()
{
for(new i = 0; i < MAX_OBJECTS_CREATED; i++)
{
if(!fexist(ObjectFile(i)))
{
return i;
}
}
return -1;
}
forward GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy);
public GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy)
{
new Float:x1, Float:y1, Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid, x1, y1, z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(xx,x1)), 2)+floatpower(floatabs(floatsub(yy, y1)), 2));
return floatround(tmpdis);
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// --- Pobieranie pozycji z przed gracza ---
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
stock GetXYInFrontOfPlayer(playerid, &Float:X, &Float:Y, Float:distance)
{
new Float:A;
GetPlayerPos(playerid, X, Y, A);
GetPlayerFacingAngle(playerid, A);
if(GetPlayerVehicleID(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), A);
X += (distance * floatsin(-A, degrees));
Y += (distance * floatcos(-A, degrees));
return true;
}