[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Ist bei beiden Gamemodes natürlich exakt das Selbe ^^

    SA:MP in 2020?

  • Habe in dem englisch sprachigen Forum eine Funktion gefunden um des Fahrzeug zu ermitteln was am nächsten am Spieler ist.
    Allerdings wird mir kein Fahrzeug zurück gegeben sondern die Schleife wird unendlich lang weitergeführt.
    Hier nochmal der Original Code aus dem Forum:


    Hatte es mal umgeschrieben und so geschrieben das die Schleife ein break macht sobald die ID Invalide ist allerdings hat dies nichts gebracht.
    Erkennt ihr den Fehler? :huh:

  • stock GetClosestVehicle(playerid, Float:range)
    {
    new Float:p_X, Float:p_Y, Float:p_Z, Float:tmp, Float:dist = range, id = INVALID_VEHICLE_ID;
    GetPlayerPos(playerid, p_X, p_Y, p_Z);


    for(new vehicleid=1; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    if(!IsValidVehicle(vehicleid)) continue;
    tmp = GetVehicleDistanceFromPoint(vehicleid, p_X, p_Y, p_Z);
    if(tmp < dist)
    {
    id = vehicleid;
    dist = tmp;
    }
    }
    return id;
    }


    Sollte dir weiterhin kein valides Fahrzeug ausgegeben werden, erhöhe mal deinen angegebenen Range.

  • Weiß jemand warum er mir als Code sowas komisches ausgibt?
    format(Gutschein[i][gCode], 16, "%s%d%s%d-%s%d%s%d-%s%d%s%d", getRandomLetter(), random(10), getRandomLetter(), random(10), getRandomLetter(), random(10), getRandomLetter(), random(10), getRandomLetter(), random(10), getRandomLetter(), random(10));


    Wollte 3 Blöcke, wo jeweils Buchstabe, Zahl, Buchstabe und Zahl kommt.
    Er gibt mir jedoch folgendes aus: R6NR4-dNR0n0

  • Du müsstest dein Code posten von deiner Funktion hier ein alternative :


    Code
    static const randomChars[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z'};
    
    
    #define getRandomLetter() randomChars[random(24)]
    #define getRandomNumber(%0) random(%0)




    Code
    format(Gutschein[i][gCode], 16, "%c%d%c%d-%c%d%c%d-%c%d%c%d",getRandomLetter(),getRandomNumber(10), getRandomLetter(),getRandomNumber(10),
    																 getRandomLetter(),getRandomNumber(10), getRandomLetter(),getRandomNumber(10),
    																 getRandomLetter(),getRandomNumber(10), getRandomLetter(),getRandomNumber(10));
  • Wie wäre es hier richtig? :) Die Abfrage ob der Code existiert, funktioniert leider nicht.

    for(new i=1;i<MAX_GUTSCHEINE;i++)
    {
    if(Gutschein[i][gErstellt] != 0)
    {
    if(!strcmp(inputtext, Gutschein[i][gCode], false))
    {
    if(Gutschein[i][gGebunden] == 1)
    {

    }
    else
    {

    }
    SendClientMessage(playerid, COLOR_GREY, "Richtiger Code.");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_GUTSCHEIN, DIALOG_STYLE_INPUT, "Gutschein einlösen", ""COLOR_HEX_YELLOW"Du hast einen ungültigen Gutschein-Code eingegeben\n\n"COLOR_HEX_WHITE"Bitte gebe deinen Gutschein-Code nun in das untere Feld ein.", "Auswählen", "Abbrechen");
    return 1;
    }
    }
    }
    }


    @Kaliber @Jeffry

    Einmal editiert, zuletzt von Speezy ()

  • Hey, kleine Frage:


    Ich öffne und schließe ein Gebäude und setze dann ein Boolean auf true oder false. Danach möchte ich mir in einem Dialog den aktuellen Status anzeigen, habe aber dann nur 0 & 1 zur Verfügung. Wie könnte ich jetzt z.B. Aufgeschlossen / Abgeschlossen anzeigen lassen?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hilft nicht, beim string werden trotzdem weiterhin komische Zahlen ausgegeben (weils's immernoch ein Integer ist).



    MachineCongiguration(playerid)
    {
    new buffer[350];
    if(TowerOpened == true)buffer="Aufgeschlossen";
    else buffer="Abgeschlossen";



    format (buffer, sizeof(buffer), "\
    Name\tStatus\tType\n\
    {0080FF}Min Bet\t{80FF00}%d$\t{FFFFFF}INPUT\n\
    {0080FF}Max Bet\t{80FF00}%d$\t{FFFFFF}INPUT\n\
    {0080FF}Tower Status\t{80FF00}%s\t{FFFFFF}LIST", MinBet, MaxBet, TowerOpened);



    ShowPlayerDialog(playerid, DIALOG_GCFG, DIALOG_STYLE_TABLIST_HEADERS, "Machine Configuration", buffer, "OK", "Close");
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Weiß jemand zufällig, warum nur der erste Eintrag in der Tabelle überprüft wird und die anderen nicht?

    case DIALOG_GUTSCHEIN:
    {
    if(response)
    {
    if(!strlen(inputtext))return ShowPlayerDialog(playerid, DIALOG_GUTSCHEIN, DIALOG_STYLE_INPUT, "Gutschein einlösen", ""COLOR_HEX_WHITE"Bitte gebe deinen Gutschein-Code nun in das untere Feld ein.", "Auswählen", "Abbrechen");
    for(new i=1;i<MAX_GUTSCHEINE;i++)
    {
    if(Gutschein[i][gErstellt] != 0)
    {
    if(!strcmp(inputtext, Gutschein[i][gCode], false))
    {
    if(Gutschein[i][gGebunden] == 1)
    {



    }
    else
    {



    }
    SendClientMessage(playerid, COLOR_GREY, "Richtiger Code.");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_GUTSCHEIN, DIALOG_STYLE_INPUT, "Gutschein einlösen", ""COLOR_HEX_YELLOW"Du hast einen ungültigen Gutschein-Code eingegeben\n\n"COLOR_HEX_WHITE"Bitte gebe deinen Gutschein-Code nun in das untere Feld ein.", "Auswählen", "Abbrechen");
    return 1;
    }
    }
    }
    }
    }

  • Beachte bitte sollte die Bedingung nicht zutreffen lass die Schleife nicht abbrechen und den text anzeigen, sollte der erste EIntrag nicht zutreffen wird die Spalte gleich beendet, daher
    Schau erst nach einem treffer und falls dies sein sollte kannst du ein return plazieren und sollte kein treffer gefunden werden, so gibst du nach der Schleife die Nachricht as nix gefunden wurde.


  • Brauche noch Hilfe wende mich mal hier ^^

  • Gibt es eine Funktion, wo aufgerufen wird wenn jemand ein Fahrzeug verlässt, auch wenn er z.b teleportiert wird?
    also nicht OnPlayerExitVehicle

    Ja, OnPlayerStateChange und dort checken ob oldstate == PLAYER_STATE_PASSENGER oder PLAYER_STATE_DRIVER war :)

    ast2ufdyxkb1.png


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