Beiträge von Jeffry

    Du nimmst diesen Teil aus dem Befehl:
    FreezePlayer(playerid);
    SendClientMessage(playerid, COLOR_WHITE, "Dein Fahrzeug wird getankt ...");
    SetTimerEx("FillVehicle", 5000, 0, "iii", playerid, vehicleid, i);
    pRefillVehicle[playerid] = 1;

    und öffnest dort stattdessen den ShowPlayerDialog mit den verschiedenen Tankarten.


    Im dazugehörigen OnDialogResponse kommt dann obiger Code rein (mitsamt der Schleife aus dem Befehl), sowie nochmal die Plausi-Prüfungen aus dem Befehl (Spieler könnte sich ja bewegt haben).


    Über das listitem gibts du dann die Tankart mit, und zwar in dem Timer:
    SetTimerEx("FillVehicle", 5000, 0, "iii", playerid, vehicleid, i);
    zu:
    SetTimerEx("FillVehicle", 5000, 0, "iiii", playerid, vehicleid, i, listitem);


    Der Kopf des Timers sieht dann so aus:
    forward FillVehicle(playerid, vehicleid, bizid, tankart);
    public FillVehicle(playerid, vehicleid, bizid, tankart)


    Und dann kannst du darin einen switch über die tankart machen.

    Habe nochmal etwas gefunden.
    https://community.woltlab.com/…t-seit-4-1-18-nicht-mehr/


    Scheint dann wohl seit 4.1.18 aufzutreten, was sich mit dem Datum der Aktualisierung aus dem Screenshot von seegras und meinem Post exakt deckt.
    Zudem geht es unter 4.1.16 noch, wie m4a_X sagt.


    @seegras Habt ihr auch den Core aktualisiert?
    Das würde dann eventuell auch noch ein Hinweis sein:
    https://community.woltlab.com/…933-patch-day-14-03-2018/


    Der Syntax-Highlighter konnte bei extrem langen Kommentaren bzw. Strings fehlschlagen. 2.1.20+

    Dort wurde dann ja offensichtlich etwas geändert, was gegebenenfalls zu dem aktuellen Fehler führt.


    Vielleicht könnt ihr das Problem mal an WoltLab weitergeben.

    Gibt es ein Editor der Speziell für Fahrzeuge gedacht ist um Sachen darauf zu machen und das man die Koordinaten raus findet?

    http://forum.sa-mp.com/showthread.php?t=282883


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Live jetzt:


    Start der SpaceX Falcon 9 Rakete mit zehn Iridium-5 NEXT Satelliten, vom Space Launch Complex 4E der Vandenberg Air Force Base in Kalifornien. Es ist der fünfte Satz von zehn Satelliten aus einer Serie von insgesamt 75 Satelliten, die SpaceX für Iridium starten wird.
    Die erste Stufe der Falcon 9 wurde bereits in der Iridium-3 Mission im Oktober 2017 verwendet, daher wird SpaceX keinen Landeversuch unternehmen.


    Liftoff um 16:13 (Zeitfenster: 1 Sekunde / Ersatztermin: 31.03. 16:08).

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Sollte deine "sAutos"-Funktion (und auch die anderen) noch so sein, wie oben, dann vertausche return 1 und return 0.
    Es darf nur am Ende ein "return 0" stehen, bei allen anderen Fällen (die dann ja positiv sind), muss return 1 stehen.
    Bzw. false (0) und true (1).

    Erstelle das Textdraw als PlayerTextDraw in OnPlayerConnect mit:
    http://wiki.sa-mp.com/wiki/CreatePlayerTextDraw
    und den entsprechenden Funktionen zur Designanpassung.


    ptd_Speedo[playerid] = CreatePlayerTextDraw(playerid, 491.000000, 340.000000, "string");
    PlayerTextDrawFont(playerid, ptd_Speedo[playerid], 2);
    PlayerTextDrawLetterSize(playerid, ptd_Speedo[playerid], 0.220833, 1.100000);
    ...usw


    Unter den Includes:
    new PlayerText:ptd_Speedo[MAX_PLAYERS];


    Der Timer:
    public sekunde()
    {
    new string[16];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!IsPlayerInAnyVehicle(i))continue;
    format(string,sizeof(string),"%ikm/h", getPlayerSpeed(i));
    PlayerTextDrawSetString(i, ptd_Speedo[i], string);
    }
    return 1;
    }

    if(sAutos(vehicleid))
    {
    if(pInfo[playerid][pAutoschein] == 0)
    {
    SendClientMessage(playerid, -1,"{c45461}Du hast noch keinen Auto-Schein.");
    RemovePlayerFromVehicle(playerid);
    }
    else
    {
    SendClientMessage(playerid,-1,"{FAFAFA}Benutze den Befehl{009BFF} /Motor{FAFAFA} um den Motor zu starten. Mit den Befehl {009BFF}/Licht{FAFAFA} schaltest du das Licht ein.");
    }
    }
    else if(sMotorrad(vehicleid))
    {
    if(pInfo[playerid][pMotorradschein] == 0)
    {
    SendClientMessage(playerid, -1,"{c45461}Du hast noch keinen Motorrad-Schein.");
    RemovePlayerFromVehicle(playerid);
    }
    else
    {
    SendClientMessage(playerid,-1,"{FAFAFA}Benutze den Befehl{009BFF} /Motor{FAFAFA} um den Motor zu starten. Mit den Befehl {009BFF}/Licht{FAFAFA} schaltest du das Licht ein.");
    }
    }

    Wenn das Fahrzeug im entsprechenden Index i noch nicht existiert, ist GetVehicleModel = 0, machst du dann -400 kommt ein Index von -400 für den Fahrzeugname raus, das geht nicht.
    Schreibe es so:
    ocmd:cs(playerid, params[])
    {
    if(sInfo[playerid][pLoggedIn] == false)return SendClientMessage(playerid,-1,"Du bist nicht eingeloggt!");
    if(sInfo[playerid][pAdmin] == 0)return SendClientMessage(playerid,-1,"Du kannst diesen Befehl nicht nutzen!");
    new string[256], idx;
    for(new i; i<sizeof(erstellteCars); i++)
    {
    idx = GetVehicleModel(erstellteCars[i])-400;
    if(idx >= 0) format(string,sizeof(string),"%sFahrzeug: %s\n",string,FahrzeugName[idx]);
    }
    if(!strlen(string))return SendClientMessage(playerid,-1,"Es wurde noch kein Fahrzeug erstellt!");
    ShowPlayerDialog(playerid,DIALOG_CARD,DIALOG_STYLE_MSGBOX,"Erstellte Fahrzeuge",string,"Weiter","Abbrechen");
    return 1;
    }

    Du hattest die Zeichen beim Berechnen des Restgeldes vertauscht.
    Versuche es so:
    if(dialogid == DIALOG_AUTOMAT1)
    {
    switch(listitem)
    {
    case 0:
    {
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT3, DIALOG_STYLE_INPUT, "Geldautomat Transaktion, Auszahlen", "Gebe bitte deinen gewünschten Betrag ein, den du von deinem\nBankkonto abheben möchtest.\n\nDer Automat kann Maximal $350000 aufeinmal auszahlen.", "Auszahlen", "Abbrechen");
    }
    case 1:
    {
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT4, DIALOG_STYLE_INPUT, "Geldautomat Transaktion, Einzahlung", "Gebe bitte deinen gewünschten Betrag ein, den du auf deinem\nBankkonto einzahlen möchtest.\n\nDer Automat kann Maximal $350000 aufeinmal annehmen.", "Einzahlen", "Abbrechen");
    }
    }
    return 1;
    }
    if(dialogid == DIALOG_AUTOMAT3)
    {
    if(response)
    {
    new aGeld = strval(inputtext);
    if(aGeld>=0 && aGeld <=350000)
    {
    if (pInfo[playerid][pBankgeld] > aGeld)
    {
    pInfo[playerid][pBankgeld] -= aGeld;
    GivePlayerMoney(playerid, aGeld);
    pInfo[playerid][pGeld] += aGeld;
    SendClientMessage(playerid,GREEN,"Transaktion wurde erfolgreich abgeschlossen, das Geld wurde erfolgreich von deinem Konto abgebucht.");
    }
    else
    {
    SendClientMessage(playerid,-1,"{bc4343}Du kannst den eingegebenen Betrag nicht abheben, da du zu wenig Geld auf deinem Konto hast.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Der Automat kann dir nur $350.000 mit einer Transaktion auszahlen.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Du hast deine offene Transaktion abgebrochen.");
    }
    return 1;
    }
    if(dialogid == DIALOG_AUTOMAT4)
    {
    if(response)
    {
    new aGeld = strval(inputtext);
    if(aGeld>=0 && aGeld <=350000)
    {
    if (pInfo[playerid][pGeld] > aGeld)
    {
    pInfo[playerid][pBankgeld] += aGeld;
    GivePlayerMoney(playerid, -aGeld);
    pInfo[playerid][pGeld] -= aGeld;
    SendClientMessage(playerid,GREEN,"Transaktion wurde erfolgreich abgeschlossen, das Geld ist jetzt auf deinem Konto verfügbar");
    }
    else
    {
    SendClientMessage(playerid,-1,"{bc4343}Du kannst den eingegebenen Betrag nicht abheben, da du zu wenig Geld auf der Hand hast.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Der Automat kann nur $350.000 mit einer Transaktion einzahlen.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Du hast deine offene Transaktion abgebrochen.");
    }
    return 1;
    }
    if(dialogid == DIALOG_AUTOMAT2)
    {
    if(response)
    {
    if (pInfo[playerid][pGeld] > 928)
    {
    ShowPlayerDialog(playerid, DIALOG_SERVICE2, DIALOG_STYLE_PASSWORD, "{FFFFFF}Bankkonto Einrichtung", "{FFFFFF}Gebe hier deinen gewünschten Bank-PIN ein\nEr muss 4 stellig sein und darf nur Zahlen enthalten\n\nDer Bank-PIN wird aus Sicherheitsgründen verwendet, mit diesem wirst du\nTransaktionen abschließen. Dein Bank-PIN kannst du jeder Zeit im Forum nachsehen.", "{FFFFFF}Bestätigen", "");
    pInfo[playerid][pBankkonto]=1;
    pInfo[playerid][pBankgeld]=250;
    }
    else
    {
    SendClientMessage(playerid,-1,"{bc4343}Du brauchst $928 um ein Bankkonto einzurichten!");
    }
    }
    return 1;
    }


    Achte auch darauf, nach if's, wenn der Code in einer neuen Zeile steht, die geschweiften Klammern zu nutzen, sonst führt das früher oder später zu massiver Unübersichtlichkeit.

    Am Ende der Zeilen waren zwei Anführungszeichen.
    Schreibe es so, die return's verhindern, dass der Code noch bis nach unten durchläuft, wenn der eine Dialog abgeschlossen ist, das ist nämlich dann nicht mehr notwendig.
    if(dialogid == DIALOG_AUTOMAT1)
    {
    switch(listitem)
    {
    case 0:
    {
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT3, DIALOG_STYLE_INPUT, "Geldautomat Transaktion, Auszahlen", "Gebe bitte deinen gewünschten Betrag ein, den du von deinem\nBankkonto abheben möchtest.\n\nDer Automat kann Maximal $350000 aufeinmal auszahlen.", "Auszahlen", "Abbrechen");
    }
    case 1:
    {
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT4, DIALOG_STYLE_INPUT, "Geldautomat Transaktion, Einzahlung", "Gebe bitte deinen gewünschten Betrag ein, den du auf deinem\nBankkonto einzahlen möchtest.\n\nDer Automat kann Maximal $350000 aufeinmal annehmen.", "Einzahlen", "Abbrechen");
    }
    }
    return 1;
    }
    if(dialogid == DIALOG_AUTOMAT3)
    {
    if(response)
    {
    new aGeld = strval(inputtext);
    if(aGeld > 350000)
    {
    if (pInfo[playerid][pGeld] > aGeld)
    {
    pInfo[playerid][pBankgeld] -= aGeld;
    GivePlayerMoney(playerid, aGeld);
    }
    else
    {
    SendClientMessage(playerid,-1,"{bc4343}Du kannst den eingegebenen Betrag nicht abheben, da du zu wenig Geld auf deinem Konto hast.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Der Automat kann dir nur $350.000 mit einer Transaktion auszahlen.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Deine Transaktion wurde erfolgreich abgebrochen");
    }
    return 1;
    }
    if(dialogid == DIALOG_AUTOMAT4)
    {
    if(response)
    {
    new aGeld = strval(inputtext);
    if(aGeld > 350000)
    {
    if (pInfo[playerid][pGeld] > aGeld)
    {
    pInfo[playerid][pBankgeld] += aGeld;
    GivePlayerMoney(playerid, -aGeld);
    }
    else
    {
    SendClientMessage(playerid,-1,"{bc4343}Du kannst den eingegebenen Betrag nicht abheben, da du zu wenig Geld auf deinem Konto hast.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Der Automat kann nur $350.000 mit einer Transaktion annehmen.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "{bc4343}Deine Transaktion wurde erfolgreich abgebrochen");
    }
    return 1;
    }

    new Float:atmArray[][] = {
    {1719.1000000, -1873.9000000, 13.2000000}
    };
    Beachte, dass wenn du weitere Koordinaten hinzufügst, nur die letzte Zeile kein Komma hinten haben darf, alle anderen müssen mit Komma getrennt werden.


    Den Befehl so:
    ocmd:automat(playerid,params[])
    {
    for(new i = 0; i < sizeof(atmArray); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, atmArray[i][0], atmArray[i][1], atmArray[i][2]))
    {
    if(pInfo[playerid][pBankkonto] == 1)
    {
    new str[64];
    format(str,sizeof str, "{FFFFFF}Kontostand: %s", sMoney(pInfo[playerid][pBankgeld]));
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT1, DIALOG_STYLE_LIST, str, "{FFFFFF}Geld einzahlen\nGeld abheben", "Auswählen", "Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_AUTOMAT2, DIALOG_STYLE_MSGBOX, "{FFFFFF}Bankkonto Einrichtung", "Damit du ein Bankkonto nutzen kannst musst du dir zu erst eins erstellen\nDie einmaligen Gebühren betragen {bc4343}928${FFFFFF}, zusätzliches Startguthaben in höhe von {009C00}$250{FFFFFF}.\n\nBestätige bitte die Einrichtung deines Bankkontos, um das Bankkonto nutzen zu können", "Bestätigen", "Abbrechen");
    }
    }
    }
    return SendClientMessage(playerid,-1,"{c45461}Du bist nicht in der Nähe eines Bankautomaten!");
    }

    Hallo Zusammen,


    der PWN-Tag zeigt Kommentare mittels "//" und "/* */" nicht mehr an.


    Beispiel:
    SendClientMessage(playerid, 0xFFFFFFFF, "Hallo Welt."); //Gibt im Chat "Hallo Welt" aus.
    [pwn]SendClientMessage(playerid, 0xFFFFFFFF, "Hallo Welt."); //Gibt im Chat "Hallo Welt" aus.[/pwn]


    Auch beim "code" Tag geht es nicht mehr.


    Besonders in den Tutorials sieht das momentan ziemlich komisch aus.


    Viele Grüße
    Jeffry

    Außerdem klappt da etwas bei mir nicht


    Der Code jeweils nach dem ShowPlayerDialog muss in einem neuen "if(dialogid == ...)" abgefragt werden.
    Außerdem musst zu zwei unterschiedliche Dialog IDs aufrufen, da diese ja etwas anderes machen. Dort dann jeweils den entsprechenden Code einfügen.



    Also ich habe ja zwei Automaten als Beispiel und ich will die nicht alle in einer Zeile schreiben also die Position von den beiden Automaten, deswegen möchte ich ein Array machen und es dann abfragen wenn der Spiele von diesen Koordinaten in der Nähe ist.


    Das Array so:
    new Float:atmArray[][] = {
    {x, y, z},
    {x, y, z}
    };
    Und dann die Abfrage so:
    for(new i = 0; i < sizeof(atmArray); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, atmArray[i][0], atmArray[i][1], atmArray[i][2]))
    {
    / * Spieler in der Nähe * /
    return 1;
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist nicht in der Nähe einer ATM Maschine.");