[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
  • Es hat mit einem System zutun wo er Alt drückt eine Animation durchführt und wenn er die Animation macht soll er nicht nochmal Alt drücken können bzw Alt spamen können

    Dann sorge doch dafür (mittels einer Variable), dass das nicht geht, wenn er diese eine Animation ausführt, die nicht abgebrochen werden darf :)

    ast2ufdyxkb1.png


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

  • Dank dir, jetzt ein etwas kompliziertes Problem. Ich arbeite an einer Transaktionübersicht für meine Bankautomaten.
    Möchte das ganze über mehrere Seiten machen. (Es werden immer 10 Transaktionen pro Seite angezeigt, was korrekt ist!)


    Hier mal der Code dazu, welcher funktioniert.

    case 1: //Funktion (Negative Transaktionen)
    {
    Page[playerid] = 0;

    new query[256], Cache: Result;
    mysql_format(MySQLConnection, query, sizeof(query), "SELECT `Absender`, `Empfänger`, `Zeit`, `Betrag` FROM `server_atmlog` WHERE `Absender` = '%e' ORDER BY `Absender` DESC LIMIT %d, 10", PlayerInfo[playerid][pName], Page[playerid] * 15);
    Result = mysql_query(MySQLConnection, query);

    new rows = cache_num_rows();
    if(rows)
    {
    new Header[1024], Sender[64], Receiver[64], Date[64], Deposit;
    format(Header, sizeof(Header), ""HTML_SERVER2"Absender\t"HTML_SERVER2"Empfänger\t"HTML_SERVER2"Zeit\t"HTML_SERVER2"Betrag\n");
    for(new i; i < rows; ++i)
    {
    cache_get_value_name(i, "Absender", Sender);
    cache_get_value_name(i, "Empfänger", Receiver);
    cache_get_value_name(i, "Zeit", Date);
    cache_get_value_name_int(i, "Betrag", Deposit);

    format(Header, sizeof(Header), "%s%s\t%s\t%s\t"HTML_RED"$%s\n", Header, Sender, Receiver, Date, convertNumber(Deposit));
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSAKTIONNOD, DIALOG_STYLE_TABLIST_HEADERS, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Transaktionen (Übersicht)", Header, "Weiter", "Zurück");
    }
    }
    if(!rows)
    {
    Page[playerid] = 0;
    strdel(DialogString, 0, sizeof(DialogString));
    format(DialogString, sizeof(DialogString),""HTML_SERVER2"Willkommen bei der "HTML_SERVER1"Bank of SA"HTML_SERVER2",\n"HTML_SERVER2"derzeit sind keine Transaktionen auf Ihrem Bankkonto vorhanden.");
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSAKTIONNO, DIALOG_STYLE_MSGBOX, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Transaktionen Seite 1)", DialogString, "Schließen", "");
    }
    cache_delete(Result);
    }


    So, jetzt möchte ich gerne auf eine zweite Seite gehen, jedoch bekomme ich von dort keine weiteren Einträge, obwohl mehr als 10 Einträge in der Datenbank vorhanden sind.

    case DIALOG_ATMTRANSAKTIONNOD:
    {
    if(!response)
    {
    strdel(DialogString, 0, sizeof(DialogString));
    format(DialogString, sizeof(DialogString), ""HTML_SERVER1"1. "HTML_SERVER2"Positive Kontotransaktionen\n"HTML_SERVER1"2. "HTML_SERVER2"Negative Kontotransaktionen");
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSAKTIONVIEW, DIALOG_STYLE_LIST, ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Transaktion Übersicht)", DialogString, "Bestätigen", "Zurück");
    }
    if(response)
    {
    Page[playerid] ++;

    new query[256], Overview[256], Cache: Result;
    mysql_format(MySQLConnection, query, sizeof(query), "SELECT `Absender`, `Empfänger`, `Zeit`, `Betrag` FROM `server_atmlog` WHERE `Absender` = '%e' ORDER BY `Absender` DESC LIMIT %d, 10", PlayerInfo[playerid][pName], Page[playerid] * 15);
    Result = mysql_query(MySQLConnection, query);

    format(Overview, sizeof(Overview), ""#HTML_SERVER1""#SERVER_NAME" "HTML_SERVER2"- Bankautomat (Transaktionen Seite %d)", Page[playerid] +1);
    print("1");
    new rows = cache_num_rows();
    if(rows)
    {
    print("2");
    new Header[1024], Sender[64], Receiver[64], Date[64], Deposit;
    format(Header, sizeof(Header), ""HTML_SERVER2"Absender\t"HTML_SERVER2"Empfänger\t"HTML_SERVER2"Zeit\t"HTML_SERVER2"Betrag\n");
    for(new i; i < rows; ++i)
    {
    cache_get_value_name(i, "Absender", Sender);
    cache_get_value_name(i, "Empfänger", Receiver);
    cache_get_value_name(i, "Zeit", Date);
    cache_get_value_name_int(i, "Betrag", Deposit);

    format(Header, sizeof(Header), "%s%s\t%s\t%s\t"HTML_RED"$%s\n", Header, Sender, Receiver, Date, convertNumber(Deposit));
    ShowPlayerDialog(playerid, DIALOG_ATMTRANSAKTIONNOD, DIALOG_STYLE_TABLIST_HEADERS, Overview, Header, "Weiter", "Zurück");
    }
    }
    if(!rows)
    {

    }
    cache_delete(Result);

    }
    }


  • Habe mal eine kurze frage....


    Wen ich /healall mache kriegt keiner Leben warum?

  • Wen ich /healall mache kriegt keiner Leben warum?

    Entweder das foreach ist falsch (keine Ahnung wie das bei dir aussieht) oder keiner hat den PVar Eingeloggt :)



    jetzt ein etwas kompliziertes Problem

    Also zum einen frage ich mich, warum du die alten mysql Funktionen nutzt und nicht mit cache arbeitest.
    Dafür musste das auslagern.


    und auslagern ist das richtige Stichwort, es ist nicht sehr ratsam den ganzen Code einfach dahin zu klatschen, denn wie du selbst sehen solltest, wird das sehr schnell sehr unübersichtlich und man weiß gar nicht wo man nach Fehlern suchen soll :)


    Deshalb gilt, alles ordentlich auslagern und mal mit etwas Struktur an die Sache gehen.


    Ich weigere mich wirklich diesen Code durchzugehen und nach den Fehlern zu suchen xD

    ast2ufdyxkb1.png


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

  • Definiere mir "auslagern"

    Also für die Nutzung der cache Funktionen, musste ja sowas machen:


    //Da halt wo bei dir alles steht
    format(query, sizeof(query), "SELECT * FROM spieler WHERE name = '%s'", name);
    mysql_function_query(handle, query, true, "LoadBankTransaktion", "i", playerid);


    //Und dann weiter unten - Diese Funktion ist dann ausgelagert, da sie nicht bei dem anderen stuff steht
    forward LoadBankTransaktion(playerid);
    public LoadBankTransaktion(playerid)
    {
    //und hier dann halt dein Bankzeug rein.
    return 1;
    }

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Muss ich das wirklich tun, damit du dir meinen Code anguckst? (Bitte nicht böse nehmen, aber ich möchte meinen Code gerne so beibehalten.)

    Quatsch, du musst das nicht tun.


    Ich meine nur, damit du die neuen MySQL Funktionen nutzt: http://forum.sa-mp.com/showthread.php?t=337810


    Sonst bringen dir die cache Funktionen ja nichts.


    Ich geh jetzt aber eh pennen, also viel Erfolg noch :)

    ast2ufdyxkb1.png


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


  • C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(19276) : warning 202: number of arguments does not match definition



    Der Command für das Fahrzeug zum erstellen


    Erstellt das Fahrzeug:


  • Wen ich ihm ein Fahrzeug geben will mit farbe model ect kommt das der befehl nix existiert...


    Command zum erstellen:


    Erstellt das Fahrzeug:


  • CMD:delete(playerid, params[])
    {
    new str[32];
    if(sscanf(params, "s[32]", str))return SendClientMessage(playerid, COLOR_GREY, "Verwendung: /delete [ATM]");
    if(strcmp(str, "ATM", true) == 0)
    {
    new ID, query[128];
    ATMInfo[ID][aPos][0] = 0.0;
    ATMInfo[ID][aPos][1] = 0.0;
    ATMInfo[ID][aPos][2] = 0.0;
    ATMInfo[ID][aPos][3] = 0.0;
    ATMInfo[ID][aPos][4] = 0.0;
    ATMInfo[ID][aPos][5] = 0.0;
    DestroyDynamicObject(ATMInfo[ID][aObject]);
    DestroyDynamic3DTextLabel(ATMInfo[ID][aLabel]);
    ATMInfo[ID][aLabel] = Text3D: INVALID_3DTEXT_ID;



    mysql_format(MySQLConnection, query, sizeof(query), "DELETE FROM `server_atm` WHERE `ID` = '%d' LIMIT 1", ID);
    mysql_query(MySQLConnection, query);
    }
    return 1;
    }


    Wie ist es möglich, dass ich direkt abfrage, welcher ATM ID VOR mir ist. So dass ich keine ID angeben muss, sondern nur der ATM vor mir gelöscht wird.

  • Hast ein Enum dazu?


    Also die X, Y und Z Koordinaten, wo stehen die denn drinnen.


    Im Prinzip loopst durch alle durch, nimmst von jedem den Abstand zu dem Spieler und nimmst die id von dem, wo der Abstand am kleinsten ist und solltest noch auf einen max Abstand prüfen, sodass er auch wirklich davor steht :)

    ast2ufdyxkb1.png


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

  • Code
    MoveDynamicObject(Holzfb[i][holzfb_ID], Holzfb[i][holzfb_x], Holzfb[i][holzfb_y]+0.001, Holzfb[i][holzfb_z], 0.002, Holzfb[i][holzfb_urx], Holzfb[i][holzfb_ury], Holzfb[i][holzfb_urz]);

    Warum wird das Object direkt Umgeworfen ?
    Der Baum steht in der Rotation 0.0.0 ich Move ihn da auf 90.0.0 aber er fällt direkt um ?

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