oEditor
#1

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:
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;
}
Reply
#2

Anyone? Second day.
Reply
#3

5th page.. sorry for that, but please?
Reply
#4

3rd page, second day.. the same problem.
Reply
#5

6th page, third day.. That is the last request..
Reply
#6

Can you translate most of it to English?
I can't really understand what the Dialogs are doing.
Reply
#7

Quote:

1. Stwуrz obiekt\n2. Edytuj najbliższy obiekt\n3. Usuń najbliższy obiekt

1. Create object.
2. Edit the nearest object.
3. Delete the nearest object.
Reply
#8

7th page, 4th day.. i made some changes but not works at all..

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()
{
    print("====================================");
    print("|  FilterScript został załadowany  |");
    print("====================================");
    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:
                {
                    new Float:X, Float:Y, Float:Z, Float:Distance;
                    for(new i; i < sizeof(ObjectInfo); i++)
                    {
                        if(ObjectInfo[i][oObjectID] > 0)
                        {
                            GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
                            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:
                {
                    new Float:X, Float:Y, Float:Z, Float:Distance;
                    for(new i; i < sizeof(ObjectInfo); i++)
                    {
                        if(ObjectInfo[i][oObjectID] > 0)
                        {
                            GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
                            Distance = GetPlayerDistanceToPoint(playerid, X, Y);
                            if(Distance <= 2.0)
                            {
                                DestroyObject(ObjectInfo[i][oObjectID]);
                                new string[64];
                                format(string, sizeof(string), "~y~Usunieto obiekt 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;

                    new INI:Objects = INI_Open(ObjectFile(objectid));
                    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);

                    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;
                }
            }
        }
       
        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;
}
Please, anyone.. finally?
Reply
#9

Again.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)