[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
  • Hier bitteschön:


    ast2ufdyxkb1.png


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

  • Du könntest uns als Anfang den entsprechenden Code zeigen, bei dem das Problem auftritt. :)

    Diese 2 werden gleichzeitig ausgewählt wenn ich einen von ihnen anklicken will. Sind halt auf einer linie aber ich möchte halt, dass man nur jeweils eins auswählt und nicht beide gleichzeitig


    Screen wie es aussieht:


    http://www.pic-upload.de/view-30482467/sa-mp-049d.png.html

    Einmal editiert, zuletzt von tayson87 ()

  • Diese 2 werden gleichzeitig ausgewählt wenn ich einen von ihnen anklicken will. Sind halt auf einer linie aber ich möchte halt, dass man nur jeweils eins auswählt und nicht beide gleichzeitig

    Die Funktion musst du dafür verwenden: https://wiki.sa-mp.com/wiki/TextDrawTextSize :)

    ast2ufdyxkb1.png


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

  • Das ist ganz einfach. Du musst einfach den Wert von jedem Spieler von der Spalte "Leader" (+ Name, um dann den Namen im Game anzeigen zu können) auslesen und überprüfen ob dieser true (1) ist.
    Versuch das mal, und wenn du am zweifeln bist oder Fragen hast, dann kannst du dich ja gerne an uns wenden.


    => mysql_format()
    => mysql_tquery()
    => cache_num_rows()


    Die Funktion brauchst du grundsätzlich für dein Vorhaben. ;)

  • Hab mit dem TextdrawEditor ausprobiert aber das Problem ist ich kann des irgendwie nicht einstellen..

    Da du ja einen TextDraw Editor verwendest, kannst du, so würde ich das machen, eine Box über das Textdraw erstellen. Die Box kannst du dann, wenn sie direkt darüber ist, transparent (durchsichtig) machen. In der erstellten Datei sollte dann auch die Funktion TextDrawTextSize enthalten sein, sodass du diese Zeile übernehmen kannst. Im Script musst du die Box aber nicht mit einfügen, das geht nur um die Funktion TextDrawTextSize, die durch die Box erstellt wird.

  • @_Marvin ich habe meinen /leader Befehl mit einer schleife gemacht.
    Er geht jeden Spieler auf dem Server durch und guckt ob sein Rank 10 ist(Leaderrank).
    Doch wie gebe ich dazu die Fraktion aus.


    forward Showleader();
    public Showleader()
    {
    new string[32], fraction[32];
    cache_get_field_content(0, "name", string);
    cache_get_field_content(
    printf("Es gibt folgende Leader '%s'.", string);
    return 1;
    }


    ocmd:leaders(playerid)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM accounts WHERE frank = '10'");
    mysql_pquery(handle, query, "Showleader");
    }
    }
    return 1;
    }


    Ich würde eine Erklärung feiern, da ich nicht immer fragen möchte sondern das auch mal lernen möchte

  • Da du ja einen TextDraw Editor verwendest, kannst du, so würde ich das machen, eine Box über das Textdraw erstellen. Die Box kannst du dann, wenn sie direkt darüber ist, transparent (durchsichtig) machen. In der erstellten Datei sollte dann auch die Funktion TextDrawTextSize enthalten sein, sodass du diese Zeile übernehmen kannst. Im Script musst du die Box aber nicht mit einfügen, das geht nur um die Funktion TextDrawTextSize, die durch die Box erstellt wird.

    klappt nicht bzw dann lassen sich keine Textdraws mehr anklicken

  • @The Sensei
    Die Idee an sich ist bereits richtig, allerdings hast du bei deinem Befehl ("/leaders") einen kleinen Fehler.
    Als erstes brauchst du dort keine Schleife, weil du eh mit deiner Query ("SELECT .....") durch alle Spieler in der Datenbank gehst. Zweitens brauchst du dort kein mysql_format verwenden, weil es nichts zu formatieren (= auslesen von Variablen, welche den Wert in den String schreiben) gibt.
    Daher sollte der Befehl so lauten:

    C
    ocmd:leaders(playerid)
    {
    	mysql_pquery(handle, "SELECT * FROM accounts WHERE frank = '10'", "Showleader");
    	return 1;
    }




    C
    forward Showleader();
    public Showleader()
    {
    	if(!cache_num_rows())return 1;
        new string[32], fraction[32];
        cache_get_field_content(0, "name", string);
        cache_get_field_content(
    	printf("Es gibt folgende Leader '%s'.", string);
    	return 1;
    }

    "Showleader" sollte mit der Abfrage (= if(!cache_num_rows....) gemacht werden, denn das fragt ab, falls keine Dateneinträge gefunden wurden, dann wird der Code abgebrochen.
    Das auslesen der Namen machst du richtig, solltest das aber dennoch so schreiben:

    C
    cache_get_field_content(0, "name", string,handle,MAX_PLAYER_NAME);


    Das gleiche machst du dann auch mit der Fraktion (außer das dort string zu fraction geändert wird, und MAX_PLAYER_NAME zu den Wert von fraction.
    Insgesamt (hier: ohne Fraktion) sieht das so aus:


    C
    forward Showleader();
    public Showleader()
    {
    	if(!cache_num_rows())return 1;
        new string[MAX_PLAYER_NAME], fraction[32];
        cache_get_field_content(0, "name", string,handle,MAX_PLAYER_NAME);
        cache_get_field_content(
    	printf("Es gibt folgende Leader '%s'.", string);
    	return 1;
    }

    Das mit der Fraktion musst du noch einfügen, und dann schaust du mal.

  • Was meinst du mit "und MAX_PLAYER_NAME zu den Wert von fraction."?
    Meinst du vielleicht die String länge?

    • Offizieller Beitrag

    Kann man irgendwie auslegen, was man in einem LIST- Dialog ausgewählt hat?
    Mein Code: (http://pastebin.com/XDCyAFdC)



    if(Tanken[i][t_HatSuper] >= 1)
    {
    format(string, sizeof(string), "Super\n");
    }
    if(Tanken[i][t_HatSuperPlus] >= 1)
    {
    if(!strlen(string)) format(string, sizeof(string), "%sSuperPlus\n", string);
    else format(string, sizeof(string), "SuperPlus\n");
    }
    if(Tanken[i][t_HatDiesel] >= 1)
    {
    if(!strlen(string)) format(string, sizeof(string), "%sDiesel\n", string);
    else format(string, sizeof(string), "Diesel\n");
    }
    if(Tanken[i][t_HatAutogas] >= 1)
    {
    if(!strlen(string)) format(string, sizeof(string), "%sAutogas\n", string);
    else format(string, sizeof(string), "Autogas\n");
    }
    if(Tanken[i][t_HatKerosin] >= 1)
    {
    if(!strlen(string)) format(string, sizeof(string), "%sKerosin\n", string);
    else format(string, sizeof(string), "Kerosin\n");
    }
    if(Tanken[i][t_HatStrom] >= 1)
    {
    if(!strlen(string)) format(string, sizeof(string), "%sStrom\n", string);
    else format(string, sizeof(string), "Strom\n");
    }
    if(!strlen(string)) return SendClientMessage(playerid, COLOR_RED, "Etwas ist falsch gelaufen, bitte Informiere umgehend den Support!");
    format(string, sizeof(string), "{FFFFFF}%s", string);
    ShowPlayerDialog(playerid, DIALOG_TANKEN_TANKART, DIALOG_STYLE_LIST, "{FFFFFF}Was möchten Sie tanken?", string, "Bestätigen", "Abbrechen");
    return 1;



    Und hier möchte ich es denn auslesen aber wenn ich da nur Super eingebe gehts nicht

    case DIALOG_TANKEN_TANKART:
    {
    if(!response)return 1;
    switch(listitem)
    {
    case Super:
    {
    return 1;
    }
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen