Beiträge von Kaliber

    aber beim alten funktioniert es nach meiner Art und Weise oder?

    Nach älterem C-Standard nutzt man scanf :D


    Dort kann man den Buffer quasi als token mitgeben:


    "%50[^\n]" Hier hätten wir einen Buffer von 50 Zeichen.


    Aber, da man auch direkt %s nutzen kann, wäre das natürlich unsicherer, als scanf_s, wo sichergestellt wird, dass ein Buffer mitgegeben wird, um eben einen Buffer-Overflow zu vermeiden.


    Eine Alternative wäre fgets, wo auch ein Buffer das alles sichert :)


    Aber bei scanf_s muss immer ein Buffer mitgegeben werden (bei Strings).


    Ich glaub, du kannst es sogar so schreiben:


    scanf_s("%49s", pers[i].vorname, (unsigned)_countof(pers[i].vorname)); //Ich glaube den & Pointer musst du hier nicht verwenden
    //oder eben
    scanf_s("%49s", pers[i].vorname, 50);


    Die %49s lassen Platz für den null-Charakter.


    Kannst ja mal ein wenig ausprobieren oder dich in die Dokus einlesen :)

    Ahh du nutzt also n neuen C-Standard.


    Dann musst du natürlich alle Parameter für scanf_s nutzen.


    Schreib es mal:


    scanf_s("%s", &pers[i].vorname, 50);


    Musst quasi immer den Buffer angeben :)

    Wieso scanf_s?


    Machs doch einfach:


    Funzt einwandfrrei :o

    @Dr. Frauenarzt einige Includes verändern ihre Parameter.

    Absolut korrekt ;)
    Sehr gut geschlussfolgert mein junger Padawan! :)


    Und zwar rate ich mal ins Blaue und sage du verwendest die color Include von Ryder ;)


    Dort wird die Funktion nämlich gehookt und diese musst du anpassen :P

    Wie kann ich, nachdem ich ein Spieler teleportiere ihn und sein Fahrzeug freezen

    Einfach den Fahrer Freezen ;)


    Bei dem Code unten verwendest du immer i, obwohl du eigentlich d verwenden musst, da das die Variable in der Schleife ist ;)


    Musst dich schon auf eins festlegen :P

    for(new i=1, j=MAX_HOUSES; i<=j; i++)

    Nur mal kurz was fundamentales, was mich daran stört.


    Von der Geschwindigkeit her, wäre es hier besser direkt MAX_HOUSES in der Bedingung zu verwenden, da das eine Konstante ist.


    Du packt es in eine Variable, das macht es langsamer. Das würde nur Sinn machen, wenn MAX_HOUSES eine Funktion wäre xD


    Und davon abgesehen, solltest du bei 0 starten und nicht bei 1 :)


    Zudem musst du die ID auch zurückgeben und nicht nur 1 ;)


    Und wichtig ist auch, dass es kleiner als MAX_HOUSES ist und nicht kleiner gleich :D


    Und die 0 wäre kein invalider Index hahaha xD


    Also die ganze Funktion mal so schreiben:


    C
    stock getFreeHouseID()
    {
        for(new i; i<MAX_HOUSES; i++)
        {
            if(!hInfo[i][hID]) return i;
        }
        return -1;
    }


    C
    stock createHouse(playerid, Float:X, Float:Y, Float:Z)
    {
    	new query[256],fid=getFreeHouseID();
            if(fid == -1) return 0; //Hier wären alle Häuser voll!
    	mysql_format(handle, query, sizeof(query), "INSERT INTO houses (h_id, h_x, h_y, h_z) VALUES ('%d','%f', '%f', '%f')",
      		fid, X, Y, Z);
    	mysql_pquery(handle, query, "OnHouseCreated", "ddfff", playerid, fid, X, Y, Z);
    	return 1;
    }


    Die Beschreibung wird nicht gesetzt, da du bei dem einen insID und bei dem Anderen houseid verwendest...


    Sind diese Werte identisch? Was genau machst du da xD

    Ist es möglich, alle Werte auf 0 zu setzten oder irgendwas invalides wie -1 ?

    Leider geht das nicht, das musst du manuell ein nacheinander machen.

    Actually, gibt es da einen Trick.


    Natürlich kann man es mit einer Schleife machen oooder mit einer temporären Variable:



    new tmp[MAX_PCARS][PCarEnum]; //Temporäre Variable setzt alle Werte auf 0
    PCar[playerid] = tmp; //Resettet alle Variablen für den Spieler


    Ist sogar schneller, als über eine Schleife :)