[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
    • Offizieller Beitrag

    Hat das Feld ID einen Primary Key und Auto Increment?
    Wenn ich das richtig sehe, dann meckert er, dass ein Primary Key dubliziert (kopiert) wird.
    Also das 2x 0 eingetragen wird.

    Kann eigentlich nicht sein.
    strcat(AddDatabase,"CREATE TABLE IF NOT EXISTS `Accounts` (`ID` int(30) NOT NULL,`Name` varchar(24) NOT NULL,`Passwort` varchar(34) NOT NULL, `Online` int(1) NOT NULL, `Admin` int(2) NOT NULL DEFAULT '0',`Warns` int(2) NOT NULL DEFAULT '0',`Leader` int(2) NOT NULL,`Fraktion` int(2) NOT NULL,`Rang` int(2) NOT NULL,"); strcat(AddDatabase,"`Job` int(3) NOT NULL,"); strcat(AddDatabase,"`Geschlecht` int(1) NOT NULL,`Level` int(4) NOT NULL,`Geld` int(10) NOT NULL, `Bankkonto` int(15) NOT NULL,"); strcat(AddDatabase,"`Wantedlevel` int(3) NOT NULL,`Skin` int(3) NOT NULL,"); strcat(AddDatabase,"`Fightstyle` int(2) NOT NULL,`Handy` int(2) NOT NULL, `Nummer` int(8) NOT NULL DEFAULT '12345',"); strcat(AddDatabase,"`Biz` int(3) NOT NULL DEFAULT '-1',`Haus` int(3) NOT NULL DEFAULT '-1', `Jailtime` int(10) NOT NULL,"); strcat(AddDatabase,"`Living` int(1) NOT NULL,`Kills` int(5) NOT NULL,`Deaths` int(5) NOT NULL, `Partner` varchar(24) NOT NULL, `Notiz` varchar(24) NOT NULL, `Register` varchar(24) NOT NULL, PRIMARY KEY (`ID`))"); mysql_query(AddDatabase);

  • format(str, sizeof(str), "SELECT * FROM `Troll` WHERE `Name` = '%s'", DB_Escape(name));


    Wie kann ich hier jetzt das was in der Tabelle steht in einem Dialog anzeigen lassen?


    bzw. den str?


    denke mal mit str als text Angabe im Dialog wohl eher nicht? :D


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • eine for schleife machen (num_rows dazu nutzen)
    Dann je nach plugin fetch_field nutzen und dann die einzelnen Spalten nehmen
    Hier mal ein Muster
    new blabla[128],load[50];
    mysql_query("SELECT * FROM `Baum`;", (-1), (0), SQL);
    mysql_store_result(SQL);
    new Rows = mysql_num_rows(SQL);
    for(new i = 0; i < Rows; i ++)
    {
    mysql_fetch_row_data(SQL);
    mysql_fetch_field("Name",load,SQL);
    format(blabla,sizeof(blabla),"%s\n%s",blabla,load);
    }
    mysql_free_result(SQL);
    ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"Hannes",blabla,"Ok","");

    All in all it's just another brick in the wall


  • Okay, danke werds gleich mal versuchen.


    Lassen sich damit z.b. auch 10 Texteinträge hinter einnander aus der DB laden d.h.


    %s, %s, %s, %s .. .und so weiter? Also würd die 10 gerne untereinnander anzeigen lassen. :D


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • ja das kommt aber auf die größe des Strings an wie viel der inhalt sein darf
    aber wenn du nur 10 einträge auslesen willst, dann nutz die LIMIT funktion
    bsp:
    mysql_query("SELECT * FROM `Baum` LIMIT 10;", (-1), (0), SQL);
    damit werden maximal 10 einträge geladen

    All in all it's just another brick in the wall

  • Okay, was ich vergessen haben zu erwähne, dass ich das nicht auf MySQL schreibe, sondern SQLite.


    Wie gehts da? kleines bsp evtl? :D


    Oder einfach mysql_ weg lassen?


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • So sollte es Funktionieren
    new DBResult:query,Data[30];
    query = db_query(...,"SELECT * FROM `Baum` LIMIT 10;");//das ... auf die Connection unbenennen!
    new Rows = db_num_rows(query);
    new Inhalt[50*Rows];
    for(new i = 0; i < Rows; i++)
    {
    db_get_field_assoc(query,"Name",Data,sizeof(Data));
    format(Inhalt,sizeof(Inhalt),"%s\n%s",Inhalt,Data);
    db_next_row(query);
    }
    db_free_result(query);
    ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"Hannes",Inhalt,"Ok","");

    All in all it's just another brick in the wall


  • So, erst mal danke.


    Funktioniert auch soweit, bloß das Zeile 160, im dem Falle:

    new Inhalt[50*Rows];

    4 Error Nachrichten ausgibt:


    error 008: must be a constant expression; assumed zero
    error 009: invalid array size (negative, zero or out of bounds)
    error 036: empty statement
    fatal error 107: too many error messages on one line


    //E: Ja, habe alles an mein Script angepasst. :D


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ok dann geht das so nicht :D
    Da ich Limit 10 habe, schreib da einfach 500 rein


    Danke, hat funktioniert.


    Allerdings wird als Inhalt (Dialog) jetzt nur mein Name angezeigt.


    format(str,sizeof(str),"%s\n%s",str,Data);


    Hier einfach noch eine %s angabe, hinter der Texten? Also für den Text in der der Datenbank ?(


    //E: Ich glaub hat sich erledigt.


    db_get_field_assoc(query,"Name",Data,sizeof(Data));


    Einfach noch ein Feld abfragen?


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Bei 2 Felden könnte es so sein
    new DBResult:query,Data[2][30],Inhalt[500];
    query = db_query(...,"SELECT * FROM `Baum` LIMIT 10;");//das ... auf die Connection unbenennen!
    new Rows = db_num_rows(query);
    for(new i = 0; i < Rows; i++)
    {
    db_get_field_assoc(query,"Feld 1",Data[0],sizeof(Data[0]));
    db_get_field_assoc(query,"Feld 2",Data[1],sizeof(Data[1]));
    format(Inhalt,sizeof(Inhalt),"%s\n%s - %s",Inhalt,Data[0],Data[1]);
    db_next_row(query);
    }
    db_free_result(query);
    ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"Hannes",Inhalt,"Ok","");

    All in all it's just another brick in the wall


  • Danke dir, geht nun alles.


    Eine Frage noch, wie ist die Syntax um einen Eintrag zu löschen?


    db_query(....DELETE `` where `` = '%s'); ?


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Kann mir hier, wer die Fraktionen (gangs) vom Godfather einfügen? (id 5,6,12,13,14)
    Kriege es wirklich nicht auf die reihe, bitte um hilfe.



    stock GetPlayerFaction(playerid){
    new Member = CallRemoteFunction("GetPlayerMember","i",playerid);
    if(Member)
    return Member;
    new Leader = CallRemoteFunction("GetPlayerLeader","i",playerid);
    if(Leader)
    return Leader;
    return 0;
    }

  • Von den Airport interior´s war irgenteiner buggy ^^. da spawnt man dann draussen und der Boden ist weiß und man kann überall durchlaufen.

    Okay ist bei dem aber eigendlich nicht,zumindest sieht man das durch das unsichtbare Dach nicht :)


    Zeig mal den Ganzen code .. Wo man entert wo man rauskommt etc.

    HIer der Code:
    if(pickupid == Flugeingang)
    {
    SetPlayerPos(playerid,-1861.936889,54.908092,1061.143554);
    SetPlayerInterior(playerid,14);
    return 1;
    }

  • Wie kann ich "UPDATE" in 2 formate machen?, da es heißt die Linie wäre zu Lange..


    format(query, sizeof(query), "UPDATE `accounts` SET `Level` = '%d',`Geld` = '%d',`Alter` = '%d',`Bundesland` = '%s',`Admin` = '%d',`Kills` = '%d',\
    `Tode` = '%d', `Health` = '%f',`Perso` = '%d',`CarLic` = '%d',`BikeLic` = '%d',`FlyLic` = '%d', `WaffenLic` = '%d',`TruckLic` = '%d',`Ban` = '%d',\
    `Warn` = '%d',`Leader` = '%s', `Rang` = '%s', `Fraktion` = '%s',`Story` = '%d',`Member` = '%s', `Skin` = '%d', `Geschlecht` = '%d', `Job` = '%d', \
    `Premium` = '%d', `IP` = '%d',`Wanteds` = '%d' WHERE `Name` = '%s'",