Beiträge von IPrototypeI

    das ganze wird via timer gemacht und erstmal die runde ausgelesen und die anzahl der checkpoint wo die jeweilige person durch ist und die distance zu dem jeweiligen checkpoint
    danach werden noch die jeweilige ermittelte ergebnisse für jeden spieler abgeprüft.
    so zufrieden


    Also mir gefällts eigentlich :o
    Wenn du meine anderen Designs gesehen hättest
    wüsstest du auch warum .. Aber naja okay ,
    danke für dein Feedback . Und ich werde mich
    mal an was einfaches machen .


    Das soll jetzt auf keinenfall angreiflich sein ich zeig dir mal ein beispiel:


    Das war mein Anfang



    auch nicht wirklich das wahre in meinen Augen und dann hab ich mich mal daran gemacht einfach von mehreren Designen ein Element was mir gefallen hat
    zu übernehmen und einen eigenen touch rein zu bringen



    und dann sah das ganze auch ihrgend wan auch so aus, aber momentan bezieh ich mich eher auf grafik rips xD aber das ist nebensächlich
    ist nicht fertig


    Am besten ist auch teilweise wenn du personen hast die einen einigermaßen angemessenen geschmack haben und die frägst was die davon halten hab ich auch gemacht, anfangs musste ich mit der kritik leben das die
    designs scheiße waren aber nun gut ihrgend wann hat sich das auch geändert.

    Das einzigste gute an dem design wäre der background aber der rest nicht obwohl die container sind auch noch zu gebrauchen im main bereich.
    1. Dein header ist überladen und durch das Userpanel wird der größte teil verdeckt probier dich mal eher an was schlichtem.
    Mir ist und bleibt es eine rätsel wie es leute gut finden können auch die farbwahl ist auch nicht das gelbe vom ei.
    Ich gebe dir mal ein tipp such dir ihrgend ein design erstmal raus was dir gefällt und versuch ihm dein eigenen tatsch mit zu geben weil sowas gefällt doch einem doch selbst nicht.

    Mag sein , ich stelle mich Dumm an, aber ich habe leider 0 Ahnung von diesem System möchte es aber gerne Haben Stur eben :D, Wie macht man das genau mit dem SSCANF denn?


    Ich erklär dir das ganze mal
    enum SpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pLevel,
    pAlter,
    pGeld,
    pBundesland,
    pAdmin,
    pKills,
    pTode,
    Float:pHealth,
    pPerso,
    pCarLic,
    pBikeLic,
    pFlyLic,
    pWaffenLic,
    pTruckLic,
    pBan,
    pWarn,
    pLeader[11],
    pRang[28],
    pFraktion[24],
    pStory,
    pMember
    };
    sscanf("260|PuSchKiiNX|Test123|1|1|0|0|50|0|0|0|0|0|0|0|0|0||||1|88|0","p<|>e<{i}s["#MAX_PLAYER_NAME"]{s[128]}dddddddfdddddddds[11]s[28]s[24]dd>",SpielerInfo[playerid]);


    an dem code
    zum einen werden die ganzen buchstaben und zeichen in was gesplittet werden soll specifer genannt.
    p<|> bedeutet das der string gesplittet werden soll sobald dieses | zeichen vorhanden ist das geht auch mit kommas p<,>.
    so die standart specifer solltest du kennen
    i,d => Integer
    f => Float
    l => bool wert als true /false bei bool:bla;
    s[x] => string x steht für eine zahl die string länge ist das x hier also
    new string[10] würde so aussehen s[10] du kannst auch die länge des defines rein hauen sieh eoben.
    e<> bedeutet das es dem entsprechenden enum entlang gesplittet wird.
    daher muss die reihenfolge der specifer auch gleich dem des enums entsprechen haben wir oben.
    a<i>[x] gibt es auch ein array aus integer
    beispiel
    new array[5]; wäre a<i>[5]
    das gilt nicht für string hier da gibt es auch wieder ein bestimmtes specifer.
    so das wäre hier mal eine grobe erklärung weiter erklärungen findest du hier
    http://forum.sa-mp.com/showthread.php?t=120356
    ahja mit den Klammern { } wird dafür gesorgt das der wert übersprungen wird
    beispiel: 11,12,10 auf {ii}i soll an var1,var2,var3 übergeben werden durch das splitten
    jetzt 11 und 12 übersprungen und var1 hat den wert 10
    nun kann man mit -i- zum beispiel auch die reihenfolge des enums überspringen
    11,12,10 auf i-i-i an var1,var2,var3
    so hat var1 = 11 var2 = 0 wurde übersprungen var3 = 12 und 10 geht jetzt leer aus


    //edit
    wozu sscanf genutzt wird ist ganz einfach zum splitten von string es ist eine bessere alternative zu strok und den split funktionen wo mal geschrieben wurden
    explode mein ich

    Natürlich kann es nicht speichern weil du wieder das scheiß komma drinnen hast
    und
    sscanf(str,"ddds[24]s[24]ddfds[11]ddddddds[12]s[12]s[13]ds[12]",SetPlayerScore(playerid,SpielerInfo[playerid][pLevel]),
    das soll wohl ein scherz sein ?


    :rolleyes:



    Von was für einer Menge reden wir hier...?


    mfg. :thumbup:



    http://forum.sa-mp.com/showthread.php?t=305158&page=2
    http://forum.sa-mp.com/showthread.php?t=169462&page=3


    Nun gut man sollte beachten das es so aussieht wenn leute SQLite benutzen die keine Ahnung haben daher ist es besser die include von Slice zusätzlich noch zu nutzen.
    Jedoch denk ich wenn du 100 oder 1000 mal 1000 Autos ausließt speicherst oder einträgst wird SQLite auch nachgeben aber mann sollte schon alles einsetzen was so im möglichen von den mysql plugin her ist.
    Aber ein eigenen Test habe ich noch nicht gemacht ich hab es nur gehört das kannst du mit strcat und memcpy vergleichen das eine ist bei einem größeren string schneller als das andere.
    Zu dem kannst noch hin schreiben das ich das auch vom lieben MyU habe

    Um hier ihrgend wie einiger massen helfen zu können bräuchte man die datenbank struktur es sei den du hast bei deinem update query keine felder ausgelassen da du wieder
    werte überspringst

    Dein Enum muss genauso in der Reihenfolge strukturiert sein, wie du die Spalten ausliest per SSCANF.


    LG


    Nein nur wenn man den specifer e benutz und siehst du in seinem code ein e


    wen dein string so aussehen würde würde es gehen jedoch ist das bei dir nicht der fall passwort wird bei dir in ein integer rein gehauen
    wie der name auch und richtung ende wird es auch nochmal kritisch da versteh ich auch nicht laut deinem enum warum du dort strings verwendest.


    sscanf("260|PuSchKiiNX|test123|1|1|0|0|50|0|0|0|0|0|0|0|0|0|0|0|1|88|0","p<|>{i}s[24]s[130]ddddfdddddddddddddd",
    SpielerInfo[playerid][pName],
    SpielerInfo[playerid][pPasswort],
    SpielerInfo[playerid][pLevel],
    SpielerInfo[playerid][pGeld],
    SpielerInfo[playerid][pKills],
    SpielerInfo[playerid][pTode],
    SpielerInfo[playerid][pHealth],
    SpielerInfo[playerid][pPerso],
    SpielerInfo[playerid][pCarLic],
    SpielerInfo[playerid][pBikeLic],
    SpielerInfo[playerid][pFlyLic],
    SpielerInfo[playerid][pAdmin],
    SpielerInfo[playerid][pBan],
    SpielerInfo[playerid][pWarn],
    SpielerInfo[playerid][pWaffenLic],
    SpielerInfo[playerid][pLeader],
    SpielerInfo[playerid][pRang],
    SpielerInfo[playerid][pFraktion],
    SpielerInfo[playerid][pStory],
    SpielerInfo[playerid][pAlter],
    SpielerInfo[playerid][pBundesland]);
    printf("%s %d",SpielerInfo[playerid][pName],SpielerInfo[playerid][pAlter]);

    das ganze kannst du so leicht überprüfen einfach unter main oder OnGameModeInit


    //edit zu dem ist mir gerade aufgefallen du lässt elmente wie zum beispiel Fraktion als string speichern und ließt das auch als string aus in deinem enum sieht das wiederrum anders aus dort steht das als integer drinne genau so wie beim rang

    Die hat keine Lust runter zu zählen.
    natürlich nicht was für eine dumme Frage die bleibt konstant wnen du diese nicht änderst was auch nicht nötig ist wenn man das ergebnis was man ausließt vergleicht


    ocmd:premium(playerid,params[])
    {
    new pID,dauer;
    new timestamp,str[128];
    if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
    new sekunden= dauer * 7*24*60*60;
    timestamp = gettime() + sekunden;
    format(str,128,"Blabla hat %d Wochen Premium",dauer);
    SendClientMessageToAll(ROT,str);
    mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
    return 1;
    }


    warum erst speichern und danach gleich nochmal ?


    du meinst speichern


    zu dem PuSchKiiN_x3 lass einfach mal was laden und poste das query lass es dir ausgeben oder nehme das aus der mysql_log.
    zu dem noch dein enum welches SpielerInfo als index dient

    Das ganze geht auch via mysql

    SQL
    DATE_ADD(NOW(), INTERVAL 7 DAY)//beim INSERT befehl natürlich

    dazu braucht auch die spaltedie richtige einstellung

    SQL
    `PremiumTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' // beim erstellen der tabelle die jeweilige einstellung


    die reihen folge kann man auch ändern.


    Danach kann man wenn der spieler sich einloggt das ganze noch überprüfen entweder mit einem weiteren query ob die jeweilige zeit größer ist sollte ein ergebnis zurück kommen
    dan hat er noch premium also schon wieder beim einloggen mit NOW() überprüfen.
    oder direkt im query

    SQL
    IF(`Zeit`>NOW(),1,0)) AS premium// das beim select query

    Wenn du schon die tabellen über das skript erstellen willst gibt es da auch eine MySQL Log sofern man mysql_debug auf true hat bei einem anderen mysql plugin auch abweichbar
    dort werden die fehler ausgeben. Du hast weitaus mehr als 500 Zeichen einfach mal in einen großen string packen und mit strlen das ganze ausgeben lassen also die länge.