Beiträge von Pille

    Guten Abend,


    ich möchte einen Dialog mit Tabellen erstellen, bei dem Werte aus einer Datenbank gelesen werden,
    und diese dann in die Tabelle gelistet werden.


    Die Kategorien unterteile ich mit \t.


    Das Problem ist allerdings, dass sobald ein ausgelesener Wert länger (von dem Platz, nicht von der Zeichenlänge)
    ist, rückt die ganze Spalte eins zuviel nach rechts.


    Spoiler anzeigen
    Richtig:


    Danke im Vorraus.

    1. Du brauchst nicht jeden Wert in ´´ bzw. '' angeben.
    Zeichnketten musst du in '' angeben, den Rest nicht (es sei denn der Feldname ist ein "spezielles" Wort wie z.B. SELECT)
    Außerdem kannst du die Leerzeichen wegmachen, das spart Platz:

    SQL
    UPDATE accounts SET Level=%d,Geld=%d,Adminlevel=%d,Language=%d,Cop=%d,Banned=%d,Bank=%d WHERE Name='%s'


    2. Damit MySQL nach dem ersten Fund nicht weitersucht, kann

    SQL
    LIMIT 1


    an den Query gehängt werden. Der muss sich ja nicht totsuchen ^^


    3. Wenn du zwischen Groß- und Kleinschreibung unterscheiden möchtest,
    verwende statt "WHERE Name='%s'":

    SQL
    WHERE Name = BINARY '%s' LIMIT 1


    4. Alle Zeichketten sollten mit mysql_real_escape bzw. mysql_format in Verbindung mit %e überprüft werden,
    weil es sonst sein kann, dass ein Syntax-Fehler auftritt.


    Beispiel:
    Admin A bannt User A mit dem Banngrund: "Beleidigung: 'Trottel'"
    Der Syntax würde dann so aussehen:

    SQL
    UPDATE accounts SET Bangrund='Beleidigung: 'Trottel'' WHERE ....


    Das gäbe ein Syntaxfehler (ich hoffe es ist verständlich warum).


    5. Werte aus den Tabellen sollten mit

    SQL
    SELECT * FROM accounts WHERE ...


    herausgelesen werden. Das geht schneller und ist besser fürs Script.


    6. Wenn der Spieler connected, sollte zuerst überprüft werden ob der Spieler existiert.
    Wenn nicht, wird er in die Datenbank eingetragen (INSERT INTO...).
    Wenn er existiert wird das Passwort herausgelesen und abgefragt.



    Hoffe ich konnte dir ein paar Tipps geben :)

    SELECT * FROM memberstabelle WHERE fraktion = 1


    Das wäre ein einfaches SQL-Statement.
    Dann musst du das Ergebnis noch fetchen (in einem Array) und dieses Array ganz normal per for-schleife durchlaufen.


    Du brauchst doch nicht alles..


    SQL
    SELECT Name FROM memberstabelle WHERE Fraktion = 1

    Mir ist klar, warum der Fehler auftritt.
    Ich weiß aber leider nicht, wie ich diesen Fehler behebe.


    Code
    D:\...pwn(59849) : warning 213: tag mismatch


    War wohl doch nur ein Warning.
    Trotzdem ärgerlich, da ich nicht weiß wie ich den unterdrücken kann.

    Guten Abend,


    ich habe folgendes Problem:
    Ich möchte ein define machen, jedoch ergibt es Fehler, wenn ich ein ! vor der Funktion schreibe,
    Wie kann ich das ändern?


    #define strlost(%0) param>%0 // param ist eine Variable die vorher definiert wurde.


    //Verwendung:
    if(strlost(5)) // funktioniert
    {
    //blabla
    }


    if(!strlost(8)) // ERROR!
    {
    //blablabla
    }

    Bin mir nicht sicher, aber vielleicht würde ja das hier funktionieren:CallLocalFunction("OnPlayerCommandText", "ds", playerid, "/timestamp");Kommt halt drauf an ob es möglich ist darüber SA:MP interne Befehle aufzurufen/auszuführen.


    Falls es geht kann man endlich den Chat vom Script aus ausblenden :thumbup:


    Funktioniert nicht.

    Ist eigentlich egal warum ich die Variable erstelle.
    Ich weiß wie man das Problem bzw. den Fehler löst,
    aber ich möchte verstehen warum mir pawn einen Error zeigt.


    Das ist nämlich für mich überhaupt nicht logisch.

    Hallo,


    ich suche eine Funktion die die Wörter in einer Zeichenkette zählt.


    Beispiel:
    new string[56]="Das ist ein Beispieltext."; // 4 Wörter
    string="Das ist ein weiterer Text ."; // 6 Wörter
    string=" letzter Beispiel text"; // 3 Wörter


    Dankeschön :)

    Die erste Integervariable i wird erstellt, wenn die Schleife ausgeführt wird und gelöscht, wenn sie beendet wurde.
    Sie existiert also nur dann, wenn die Schleife aktiv ist. Das bedeutet, sobald die erste Schleife fertig ist,
    kann ich theoretisch problemlos eine neue gleichnamige Variable erstellen.


    Beispiel:
    for(new i=0;i<5;i++)
    {


    }


    for(new i=0;i<5;i++)
    {


    }


    Keine Errors, keine Warnings. Ist ja auch logisch, die Variable ist nur in der Schleifenebene gültig.


    Aber warum kommt der Error, wenn ich in der Schleife eine zweidimensionale Integervariable erstelle?



    @Music4You:
    Richtig, könnte ich, das beantwortet aber leider nicht meine Frage :/

    Hallo Community,


    ich bekomme folgenden Error:


    Code
    D:\...\Neu.pwn(512) : error 021: symbol already defined: "i"


    Warum? Ich versteh das nicht.
    Hier der Code:


    for(new i=0;i<5;i++)
    {
    new string[4][20];
    }

    for(new i=0;i<5;i++)
    {


    }


    new AutoIDs[]=
    {
    400, 409, 415, 422, 434, 442, 459, 475, 482, 492,
    401, 410, 418, 423, 436, 444, 466, 477, 483, 494,
    402, 411, 419, 424, 438, 445, 467, 478, 489, 495,
    404, 413, 420, 426, 439, 451, 470, 479, 490, 496,
    405, 414, 421, 429, 440, 458, 474, 480, 491, 500,
    502, 503, 504, 505, 506, 507, 516, 517, 518, 525,
    526, 527, 528, 529, 532, 533, 534, 535, 536, 540,
    541, 542, 543, 545, 546, 547, 549, 550, 551, 552,
    554, 555, 556, 557, 558, 559, 560, 561, 562, 565,
    566, 567, 568, 575, 576, 579, 580, 582, 585, 587,
    589, 596, 597, 598, 599, 600, 601, 602, 603, 604,
    605
    };


    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if(newstate==PLAYER_STATE_DRIVER)
    {
    new vehicleid=GetPlayerVehicleID(playerid);
    new model=GetVehicleModel(GetPlayerVehicleID(playerid));
    for(new i=0;i<sizeof(AutoIDs);i++)
    {
    if(model==AutoIDs[i])
    {
    SendClientMessage(playerid,-1,"Du bist in ein Auto eingestiegen.");
    break;
    }
    }
    }
    }

    Wo soll ich strings sonst verwenden, wenn nicht in "Funktionen"?


    Du meinst, es ist sicherer immer einen Array mehr zu definieren um in ihr den Null-Character bzw. EOS einzuspeichern,
    damit der zugesicherte Speicher für die Variable nicht überschritten werden und so Fehler auftreten, auch wenn
    es in diesem Beispiel einwandfrei funktioniert?

    Hallo,


    mir ist eben aufgefallen, dass man in pawn garkeinen Null-Character am Ende braucht.


    new teststring[6];
    for(new i=0;i<6;i++)
    {
    teststring[i]='.';
    }
    print(teststring);
    printf("%i",strlen(teststring));
    printf("'%c'",teststring[5]);


    Serverlog:

    Code
    [21:42:38] ......
    [21:42:38] 6
    [21:42:38] '.'




    Stimmt das jetzt oder was habe ich übersehen?