Beiträge von IPrototypeI

    Das Problem ich weis ja nicht ob die Person er mit Punkten eingibt, bzw das er keine Buchstaben oder so


    Bei meiner Variante ist es so das der string nur gesplittet wird wenn die punkte vorhanden sind sollte das nicht zutreffen wird 0 zurück gegeben
    dafür sorgt der specifer p<.>

    Dazu gibt es schon zwei codeschnipsel einmal mein variante und die von Hauke:


    http://forum.sa-mp.de/san-andr…Ctzliche-codeschnipsel-40
    sscanf plugin wird benötigt
    stock GetAge(string[])
    {
    new var[4], Date[3];
    sscanf(string, "p<.>iii", var[0], var[1], var[2]);
    if(var[0] > 31 || var[0] <= 0)return 0;
    if(var[1] > 12 || var[1] <= 0)return 0;
    getdate(Date[0],Date[1],Date[2]);
    if(var[2] > Date[0] || var[2] < 1900)return 0;
    var[3] = Date[0] - var[2] - ((Date[1] < var[1])? 1 : ((Date[1] == var[1] && Date[2] < var[0])? 1 : 0));
    return var[3];
    }




    Hauke:
    http://forum.sa-mp.de/san-andr…Ctzliche-codeschnipsel-39
    stock GetAge(Birthday[16])
    {
    new D,M,Y,Age;
    getdate(Y,M,D);
    for(new i = strlen(Birthday); i > -1; i--)
    {
    if(Birthday[i] == '.')
    {
    new Tmp[32];
    for(new o = i-1; o > -1; o--)
    {
    if(Birthday[o] == '.')
    {
    strmid(Tmp,Birthday,o+1,i);
    if(strval(Tmp)>=M)
    {
    strmid(Tmp,Birthday,0,o);
    if(strval(Tmp)>D)
    {
    strmid(Tmp,Birthday,i+1,strlen(Birthday));
    Age = Y-strval(Tmp)-1;
    break;
    }
    }
    strmid(Tmp,Birthday,i+1,strlen(Birthday));
    Age = Y-strval(Tmp);
    break;
    }
    }
    }
    }
    return Age;
    }

    hast du das ganze schon mit strcmp verglichen oder nur mal ausgegeben weil da kann es gut sein das manche werte nicht richtig ausgegeben wurden.
    Zu dem was ist das für eine Verschlüsslung ? und du kannst auch fgetchar noch verwenden und utf8 aktivieren



    = ist der gleichsetzungoperator das bedeutet durch diesen Operator wird der wert der gegenüber also rechts steht der Variabel links zugeordnet ich müsste darüber spekulieren
    wie die opcodes dafür aussehen jedoch denk ich wäre da sganz treffend


    #emit LOAD.S.pri y
    #emit STOR.S.pri x


    Zum zweiten Punkt bei dir das geht anders auch das getdate() ein wert zurück gibt daher stimmt das schon und funktioniert.



    Was ist eine Schleife? :o if - Schleife oder sowas?
    Ich glaube die braucht man im /admins befehl...


    Ich versteh nicht wie das geht ... kann mir da jemand helfen und mir das erklären was ne for schleife usw. ist? :o THX


    eine for-schleife geht in den code welche sich im Anweisungsblox x mal durch bis die bedingung erfüllt ist


    for(hier kannst du sachen deklarieren; Bedingung; inkrementation,veränderung eines wertes was beim nicht zutreffen der Bedingung wiederholt wird){


    }


    for(new i=100, x=10; i != x; --i){
    SendClientMessage(i,-1,"Hallo");
    }


    so nun haben wir dem integer i den wert 100 zugewiesen und die Bedingung hier ist das i alles außer x ist das bedeutet die schleife geht solange bis i nicht mehr alles außer x ist
    und dieser Fall tritt ein wenn i den wert 10 erreicht hat. --i bedeutet das sich bei jedem durchlauf dert wert von i um 1 verringert.
    um i zu erhöhen(inkrementieren) kann man i += 1machen oder i++ oder ++i

    Schalte doch mal dein Hirn ein
    _query[64]
    "INSERT INTO `settings` (`id`,`Datenbankhost`,`Datenbankuser`,`Datenbankpass`,`Datenbank`) VALUES ('%i','%s','%s','%s','%s');"


    allein data[4*16] ergibt 56 und der rest das sind mehr als 64 Zeichen. Also kommt dein query nicht im ganzen stück an und kann nicht richtig ausgeführt werden.

    Du darfst NIE
    eine nachricht in einem Schleife Ausgeben


    Was für ein bullshit weißt du überhaupt für was die schleife hier benutzt wird ?
    Bestimmt nicht daher werde ich dir da smal erläutern und zwar siehe allein die koordinaten an diese sind sehr groß und geben den rückschluss darüber das es sich um ein interior handelt in dem
    die Spieler sind wenn sie in dem bus einsteigen.
    Dieser wert wird zusätzlich wird ein gesetzter wert abgeprüft.
    So nun zur schleife die geht natürlich das array durch un überprüft auch noch ob der spieler in dem jeweiligen bereich ist obwohl das überflüssig ist da ja schon ein wert wahrscheinlich beim betreten gesetzt wurde.
    Nun gut ist der Spieler in der nähe und ist der wert für P_Data[playerid][pBusID] gleich 1 so wird dennen die nachricht und der ton gesendet.


    Was man besser nie machen sollte was auch sinnlose ist, ist wenn die Nachricht an eine Person gesendet werden sollte in der schleife ist also sowas zum beispiel:

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i, 25, 2021.9390,2241.9487,2103.9536) && P_Data[i][pBusID] == 1)
    {
    PlayerPlaySound(i, 1147, 0.0, 0.0, 0.0);
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "Du als Busfahrer hast die Haltestelle xyz erreicht");
    }
    }


    }

    [DT]Midoman
    ja der ist richtig die variabel pLastX ist schon als Float deklariert in deinem Enum. also mit Float:pLastX.


    Wenn du willst kannst du auch mal dein enum posten und die datenbank struktur und ich zeig dir ein beispiel mit sscanf.



    Lass dir mal die Koordinaten ausgeben


    prinf("%f %f %f",SpielerInfo[playerid][pLastX],SpielerInfo[playerid][pLastY],SpielerInfo[playerid][pLastZ]);


    dieses Problem tritt nur auf wenn der Spieler außerhalb der Map ist also die Map hat die größe von -20000.0 bis 20000.0 das gilt für x und y achse.
    sollte man aus dieser Zone draußen sein so kommt diese message.

    Das wurde so gesehen schon genannt und zwar einfach die verwendung von Threaded-querys, weil somit wird einfach eine neue verbindung
    eröffnet und somit staut sich das ganze auch nicht wenn man das über eine verbindung laufen lässt.


    speichern so wie man es normal mit einen intger macht (is ja eh nur 0 und 1)
    laden würd dann so gehen:
    (muster aus meinen Teil)
    SQL::fetch_field("Helm",query,SQL); PlayerInfo[playerid][Helm] = bool:strval(query);


    Auf sowas bin ich auch gekommen jedoch ist das nur unnötige platz verschwendung dafür 10 Spalten zu verschwenden auch an die formatierung zu einem string habe ich gedacht
    jedoch ist das ganz wieder etwas zu umständlich auch wenn man es danach mit sscanf splittet. und als kleine info an dich du kannst auch dazu zum konvertieren ein Operator nehmen
    PlayerInfo[playerid][Helm] = !! bool:strval(query);


    Aber um nochmal auf den Punkt zu kommen ist deine variante umständlich und ist moralisch unverwerflich und nicht ergonomischen fortschrittlich.

    Also nach meinen Tests ist das von BlueG besser gesagt die weiterentwickelte version von Maddintor welcher auch hier im Forum registriert ist am schnellsten.
    Jedoch hab ich in letzter zeit nix mehr im bereich skripting gemacht und kann leider nichts genaues über die stabilität sagen.
    Jedoch dieses Plugin ist auch nicht schlecht
    http://forum.sa-mp.com/showthread.php?t=429464
    es ist nur etwas langsamer.

    Hm mit bools habe ich das ganze noch nicht probiert jedoch kannst du eine bit-array erstellen und diesen speichern dazu beim formatieren des string %b benutzen für binär.
    Ahja und bei der Einstellung der Tabelle die jeweilige spalte umstellen auf bit.

    Dem stimme ich auch zu , dass dies ungewohnheit mit bringt wenn die menuitems auf der linken seite sind und die Suchleiste auf der rechten.
    Was mich jedoch am meisten stört ist die Font diese würde ich ändern und eine kleinere Schriftgröße nehmen und eine andere Font beispiel Arial oder
    NimbusSansBeckerP. Und diese schön ausschmücken mit einem schein nach außen und ein wenig abdunkeln.

    Das kann dir so keiner sagen bitte poste dein enum und die ausglesene datenreihe die findest du in der mysql_log.
    zu dem brauchst du dafür keine while schleife und beachte auch mysql_free_result(), zu benutzen.


    soviel dazu hier wie aussehen sollte das hat jetzt aber nix damit zu tun das deine spielerwerte nicht gesetzt werden

    new str[512],query[300];
    format(query,sizeof(query),"SELECT * FROM `accounts` WHERE `Name` = '%s LIMIT 1'",SpielerInfo[playerid][pName]);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(str);
    sscanf(str,"e<p<|>{i}s[128]s[128]iiiiiiiiiiiiiiiiiiiifffi>",SpielerInfo[playerid]);
    mysql_free_result();

    für doch einfach eine UPDATE query aus, danach kannst du mit mysql_affected_rows abprüfen ob ein eintrag davon betroffen war, wenn keiner betroffen war so wird 0 zurück gegeben das kannst du auch einfach so auch hier im zusammenhang mit den funktionen von maddins tutorial nutzen einfach danach das ganze abfragen.


    if(mysql_affected_rows() == 0)return SendClientMessage(playerid,-1,"Dieser Spieler existiert nicht");