Beiträge von Jeffry

    Da du es anscheinend nicht auf die Reihe bekommst die komplette Funktion zu posten, werde ich nach 3 Nachfragen nicht weiter danach fragen.
    Zudem sieht es, den Teilen die du gepostet hast danach aus, dass dort weitere Funktionen aufgerufen werden, daher ist eine Nachvollziehbarkeit kaum möglich.



    Setze dich bitte mit dem Ersteller des Gamemodes in Verbindung.

    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {
    new Float:oldX, Float:oldY, Float:oldZ,
    Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetObjectPos(objectid, oldX, oldY, oldZ);
    GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    if(!playerobject) // If this is a global object, move it for other players
    {
    if(!IsValidObject(objectid)) return 1;
    MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }

    if(response == EDIT_RESPONSE_FINAL)
    {
    new id = -1;
    for(new i = 0; i < sizeof(aInfo); i++)
    {
    if(aInfo[id][a_objectID] == objectid) break;
    }
    if(id == -1) return 1;
    updateAtm(id);
    //In Datenbank abspeichern
    new query[256];
    format(query, sizeof(query), "UPDATE atm SET a_x = '%f', a_y = '%f', a_z = '%f' WHERE id = '%d'", fX, fY, fZ, aInfo[id][a_id]);
    mysql_function_query(dbhandle, query, false, "", "");
    }

    if(response == EDIT_RESPONSE_CANCEL)
    {
    // Spieler hat abgebrochen
    if(!playerobject) // Objekt ist kein Player-Objekt
    {
    SetObjectPos(objectid, oldX, oldY, oldZ);
    SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    }
    else
    {
    SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
    SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
    }
    }
    return 1;
    }


    Die Warnung in Zeile 608 kommt, da du anscheinend etwas beim updateAtm geändert hast, im Funktionskopf.

    1.)
    Entferne das hier aus updateAtm:
    CreateObject(2942, aInfo[id][a_x], aInfo[id][a_y], aInfo[id][a_z], 0.0, 0.0, 96.0);


    2.)
    Füge beim Befehl das hier hinzu:
    aInfo[id][a_objectID] = CreateObject(2942, aInfo[id][a_x], aInfo[id][a_y], aInfo[id][a_z], 0.0, 0.0, 96.0);
    EditObject(playerid, aInfo[id][a_objectID]);


    3.)
    Füge im enum hinzu:
    a_objectID,


    4.)
    Bei http://wiki.sa-mp.com/wiki/OnPlayerEditObject:
    new id = -1;
    for(new i = 0; i < sizeof(aInfo); i++)
    {
    if(aInfo[id][a_objectID] == objectid) break;
    }
    if(id == -1) return 1;
    updateAtm(id);
    //In Datenbank abspeichern
    new query[256];
    format(query, sizeof(query), "UPDATE atm SET a_x = '%f', a_y = '%f', a_z = '%f' WHERE id = '%d'", fX, fY, fZ, aInfo[id][a_id]);
    mysql_function_query(dbhandle, query, false, "", "");
    Beachte auch diese Response Types: http://wiki.sa-mp.com/wiki/ObjectEditionResponesTypes
    Den obigen Code kannst du beim Update (?) und Final nutzen, beim Cancel musst du das Objekt löschen und einen DELETE auf die Datenbank machen.



    Eventuell musst du noch eine Spielervariable anlegen, damit du weißt, dass der Spieler gerade eine ATM erstellt, und dies bei OnPlayerEditObject abfragen.


    Versuche hiermit mal, wie weit du kommst. Bei Fragen kannst du natürlich gerne nachfragen.

    Jetzt bevor ich sinnlos umspringe auf einem schnelleren wollte ich Fragen, inwiefern sich das auswirkt.

    Gar nicht. Ich habe meinen Server 6 Jahre lang, zum Teil mit über 100 Spielern, am laufen gehabt, ohne dass es je Probleme gab. Habe dcmd genutzt, und zum Teil waren die alten Commands noch mit strcmp am laufen, die ohne Parameter.
    Für alles mögliche ein Plugin zu nutzen finde ich nicht sinnvoll. Solange es einen wirklichen Mehrwert bringt (Streamer Plugin, IRC Plugin, etc) macht es Sinn, aber für 0,1ms pro Aufruf eines Befehls, das wirkt sich niemals aus. Da müssten in der gleichen Sekunde 100 Spieler einen Befehl eingeben, dass sich das um 10ms auswirkt, und selbst das merkt man nicht, da die 0,1ms in Relation zu der Dauer die der Befehl selbst benötigt, um alle Statements darin durchzuführen, ein Vielfaches ist.

    Sorry, das war ein Copy Paste Fehler von mir, da fehlt immer die Klammer zu am Ende.


    Versuche es so:
    if(!IsChar(inputtext[0]) || !IsChar(inputtext[1])) return ShowPlayerDialog(playerid,DIALOG_Kennzeichen,DIALOG_STYLE_INPUT,"{004BFF}Kennzeichen","{FFFFFF}Die ersten {FF0000}zwei {FFFFFF}Zeichen müssen Buchstaben sein\nzb.(PS203)","Weiter","Beenden");
    if(!IsNum(inputtext[2]) || !IsNum(inputtext[3]) || !IsNum(inputtext[4])) return ShowPlayerDialog(playerid,DIALOG_Kennzeichen,DIALOG_STYLE_INPUT,"{004BFF}Kennzeichen","{FFFFFF}Die letzten {FF0000}drei {FFFFFF}Zeichen müssen Zahlen sein\nzb.(PS203)","Weiter","Beenden");

    if(strlen(inputtext) != 4) return SendClientMessage(playerid, 0xFF0000FF, "Error: Es müssen 4 Zeichen sein.");
    if(!IsChar(inputtext[0] || !IsChar(inputtext[1]) return SendClientMessage(playerid, 0xFF0000FF, "Error: Die ersten 2 Zeichen müssen Buchstaben sein.");
    if(!IsNum(inputtext[2] || !IsNum(inputtext[3]) return SendClientMessage(playerid, 0xFF0000FF, "Error: Die letzten 2 Zeichen müssen Zahlen sein.");


    Zusammen mit diesen Stocks:
    stock IsChar(c)
    {
    switch(c)
    {
    case 'a'..'z', 'A'..'Z': return 1;
    }
    return 0;
    }


    stock IsNum(c)
    {
    switch(c)
    {
    case '0'..'9': return 1;
    }
    return 0;
    }

    Versuche es so:
    new userid = strval(inputtext);
    if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Ungütltige{FFFFFF} SpielerID!");
    if(IsPlayerConnected(userid))
    {
    new name[MAX_PLAYER_NAME], str2[50], bool:found;
    GetPlayerName(userid, name, sizeof(name));
    for(new i = 0; i < sizeof(AkteInfo); i++)
    {
    if(!strcmp(AkteInfo[i][akte_name],name) && strlen(AkteInfo[i][akte_name])) //!strcmp heißt strcmp == 0. strcmp gibt 0 zurück, wenn beide Strings identisch sind, daher !strcmp.
    {
    PlayerTextDrawShow(playerid, AktenBox[playerid][7]);
    format(str2, sizeof(str2),"%s", AkteInfo[i][akte_grund1]);
    PlayerTextDrawSetString(playerid, AktenBox[playerid][7], str2);
    found = true;
    break;
    }
    }
    if(!found) return SendClientMessage(playerid, COLOR_WHITE, "Spieler konnte {FF8484}nicht{FFFFFF} gefunden werden.");
    }
    else SendClientMessage(playerid, COLOR_WHITE, "Spieler ist {FF8484}Offline{FFFFFF}!");

    Im Dialog kannst du es dann so machen:
    new i, count = -1;
    for(i=0;i<MAX_VEHICLES;i++)
    {
    if(sInfo[playerid][id] != aInfo[Fahrzeugid[i]][besitzer]) continue;
    count++;
    if(count == listitem)
    {
    break;
    }
    }
    printf("Es wurde der %s angeklickt.", FahrzeugNamen[GetVehicleModel(i)-400]);

    Mache erst mal den Code um die Fahrzeuge dem Spieler im Dialog anzuzeigen. Ohne den Code wird es nämlich schwer dir zu zeigen, wie du bei OnDialogResponse vorgehen musst, da der Code dafür benötigt wird (gleiche Struktur).