Editobject bei einer Enum verwenden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag,
    Und zwar würde ich gerne Editobject bei einer Enum verwenden und würde gerne wissen wie ich das machen soll

    Hier die Enum:

    new AdminObjects[500][AdminObjectsInfo];


    enum AdminObjectsInfo
    {
    AObjectID,
    Float:AObjectX,
    Float:AObjectY,
    Float:AObjectZ,
    ANewsObject
    };



    if(!strcmp(cmdtext, "/oedit", true))
    {
    EditObject(playerid, AObjectID);
    SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: You can now edit the object!");
    return 1;
    }
    mfg.

  • 1. Musst du das Enum über deiner Variablen Deklaration stehen, sprich so:


    enum AdminObjectsInfo
    {
    AObjectID,
    Float:AObjectX,
    Float:AObjectY,
    Float:AObjectZ,
    ANewsObject
    };
    new AdminObjects[MAX_PLAYERS][AdminObjectsInfo];


    2. Musst du die Variable erstmal initialisieren.


    AdminObjects[playerid][AObjectID] = CreateObject(...); //Hier erstmal das Objekt, welches du dann später editieren willst.


    3. Und dann kannst du auf diesen Wert zugreifen:


    if(!strcmp(cmdtext, "/oedit", true))
    {
    EditObject(playerid, AdminObjects[playerid][AObjectID]);
    SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: You can now edit the object!");
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Dazu sollte man noch sagen, das man AObjectID nicht einfach drin stehen lassen kann


    Doch natürlich, wenn man ein Objekt vorher erstellt hat (so wie ich es beschrieben habe), kann man das genau so lassen ;)


    Das Objekt welches man erstellt hat, gibt doch die objektid zurück, die in dieser Variable gespeichert wird und auf diese man zugreift um es zu editieren :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Destroy und neu erstellen ;)
    Natürlich erst mit GetObjectPos die Koordinaten raussuchen


    Um Gottes Willen, nein nicht so machen!


    Dadurch bricht EditObject ab und alles hängt.


    Mach es einfach so:


    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {
    if(!playerobject)
    {
    if(!IsValidObject(objectid)) return 1;
    MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von ChristianW ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Ich habe es jetzt soweit fertig nun möchte ich allerdings noch das die Positionen

    AdminObjects[i][AObjectX] = x;
    AdminObjects[i][AObjectY] = y;
    AdminObjects[i][AObjectZ] = z;

    Auf die neuen Fx, Fy und Fz umgeschrieben werden kann ich mir irgendwie die neue Position des Objects ausgeben lassen?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Habe es jetzt so Kaliber:

    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {



    if(!playerobject)
    {
    if(!IsValidObject(objectid)) return 1;
    MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }







    if(response == EDIT_RESPONSE_FINAL)
    {
    AdminObjects[objectid][AObjectX] = fX;
    AdminObjects[objectid][AObjectY] = fZ;
    AdminObjects[objectid][AObjectZ] = fY;
    }


    return 1;
    }

    allerdings wird es nicht umgesetzt und ich bekomme die Warnings:

    Code
    (57271) : warning 203: symbol is never used: "fx"
    (57271) : warning 203: symbol is never used: "fy"
    (57271) : warning 203: symbol is never used: "fz"
  • Aber nicht durch diesen Code :pinch:


    Der Code ist richtig...wo hast du denn diese Variablen deklariert? :huh:


    STRG+F und suche mal nach fx :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • if(strcmp("/objects", cmd, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 3)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Objecte:");
    for(new i = 0; i < sizeof(AdminObjects); i++)
    {
    if(AdminObjects[i][AObjectID] != -1)
    {
    format(string, sizeof(string), "ID %d, X %f, Y %f, Z %f", i, AdminObjects[i][AObjectX], AdminObjects[i][AObjectY], AdminObjects[i][AObjectZ]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    }
    }
    }
    return 1;
    }

    Wenn ich mich zu dem Object teleportiere bin ich auch an der alten Position

  • Du greifst zu Anfang mit playerid auf den Index zu, dann muss es so sein:
    AdminObjects[playerid][AObjectX] = fX;
    AdminObjects[playerid][AObjectY] = fZ;
    AdminObjects[playerid][AObjectZ] = fY;


    if(strcmp("/objects", cmd, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 3)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Objecte:");
    if(AdminObjects[playerid][AObjectID] != -1)
    {
    format(string, sizeof(string), "ID %d, X %f, Y %f, Z %f", AdminObjects[playerid][AObjectID], AdminObjects[playerid][AObjectX], AdminObjects[playerid][AObjectY], AdminObjects[playerid][AObjectZ]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    }
    }
    return 1;
    }

  • Erstellst du mit der gleichen Spieler ID mehrere Objekte?
    Wenn ja, dann musst du alle entsprechenden [playerid]'s zu [objectid] ändern. Und beim Erstellen:
    AdminObjects[CreateObject(...)][AObjectID];


    Und den Befehl zu:
    if(strcmp("/objects", cmd, true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 3)
    {
    SendClientMessage(playerid, COLOR_YELLOW, "Objecte:");
    for(new i = 0; i < sizeof(AdminObjects); i++)
    {
    if(AdminObjects[i][AObjectID] != -1)
    {
    format(string, sizeof(string), "ID %d, X %f, Y %f, Z %f", AdminObjects[i][AObjectID], AdminObjects[i][AObjectX], AdminObjects[i][AObjectY], AdminObjects[i][AObjectZ]);
    SendClientMessage(playerid, COLOR_YELLOW, string);
    }
    }
    }
    }
    return 1;
    }