Probleme mit EditObject

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
  • Moin



    Ich habe mal wieder ein kleines Problem, und zwar bekomme ich es nicht ganz gebacken mit der Funktion "EditObject" richtig umzugehen,
    ich will mit der Funktion meine erstellten Geldautomaten bewegen lassen, nur geht irgendwie will das ganze nicht, es schaut bei mir so aus. Hier mal ein BILD davon.



    Mein befehl schaut derzeit so aus:


    ocmd:atmedit(playerid, params[])
    {
    for(new atmid=1;atmid<MAX_ATMS;atmid++)
    {
    new atmauswahl,ATMPfad[40];
    if(!isPlayerAnAdmin(playerid,2000))return SendClientMessage(playerid,DUNKELROT," Du hast kein Zugriff auf diesen Befehl!");
    if(sscanf(params,"i", atmauswahl))return SendClientMessage(playerid, ORANGE, "Benutzung: /atmedit [ATM-ID]");
    if(atmauswahl<1||atmauswahl>30)return SendClientMessage(playerid,ROT,"Bitte wähle eine ID zwischen 1 und 30");
    format(ATMPfad,sizeof(ATMPfad),"/Automaten/%i.txt", atmauswahl);
    if(dini_Exists(ATMPfad))
    {
    // Die Datei "file.ini" ist im Ordner "folder" vorhanden
    SendClientMessage(playerid, WEIS, "Geldautomat ist Vorhanden, viel Spaß beim bearbeiten.");
    SelectObject(playerid);
    EditObject(playerid, ATMInfo[atmid][atmobjectid]);
    return 1;
    }
    else
    {
    // Die Datei "file.ini" gibt es im Ordner "folder" nicht
    SendClientMessage(playerid, WEIS, "Diese Geldautomat-ID wurde nicht gefunden.");
    return 1;
    }


    }
    return 1;
    }



    Hoffe ihr könnt mir da weiter helfen.




    Grüße

  • Dein Befehl ist etwas sinnfrei aufgebaut.

    ocmd:atmedit(playerid, params[])
    {


    if(!isPlayerAnAdmin(playerid,2000))return SendClientMessage(playerid,DUNKELROT," Du hast kein Zugriff auf diesen Befehl!");
    SelectObject(playerid);
    return 1;
    }



    public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
    {
    if(type == SELECT_OBJECT_GLOBAL_OBJECT)
    {
    for(new atmid=0;atmid<MAX_ATMS;atmid++)if(objectid == ATMInfo[atmid][atmobjectid])return EditObject(playerid, objectid);
    }
    return 1;
    }


    Warum so ?


    Ganz einfach du willst nur die atms bewegen die du auswählst das tuhen wir in dem wir den spieler über SelectObject in die auswahl bringen um ein objekte anzuklicken.
    Klickt er ein Objekte an so wird das callback OnPlayerSelectObject aufgerufen wo wir abprüfen ob dieser einen atm anklickt. Da du in dem array auch die objectid speicherst nach dem
    laden der Atms.


    Sollte das nicht gewährleistet sein so passiert nix.


    Man könnte das ganze auch anders aufbauen in dem man dem man die slotid eintippt wie du nur braucht man die extra auswahl nicht von dir , ebenfalls wie die for-schleife und das generelle überprüfen ob
    das ganze als file existiert.
    //edit
    Zusätzlich würde ich das ganze umschreiben damit die Objekte über den streamer laufen und nicht global erstellt werden