Beiträge von Goldkiller

    Dazu müsstest du mal posten wie du "Autohaus" deklarierst + das enum,welches du dort verwendest.
    Könnte mir vorstellen,dass du Float als Tag ( Float: ) vergessen hast bei posx,posy oder posz.

    Habe ich doch geschrieben.
    Dazu lässt du einfach die eckigen Klammern leer [].


    Lass es doch einfach offen und automatisch ermitteln wie groß es sein muss:
    new Buycars[][AKinfo] = {
    Damit sparst du dir sinnloses zählen.Die Größe bekommst auch mit sizeof() zurück.

    Hast oben die Fahrzeug anzahl geändert?
    Also gezählt und +1 dazugerechnet?


    Gruß


    Was für ein Quatsch. Warum soll(te) er +1 rechnen ?


    Lass es doch einfach offen und automatisch ermitteln wie groß es sein muss:
    new Buycars[][AKinfo] = {
    Damit sparst du dir sinnloses zählen.Die Größe bekommst auch mit sizeof() zurück.


    In der letzten Zeile des Arrays muss auch das , am Ende weg.

    Du kannst doch einfach die Nachricht entfernen aus dem Code und stattdessen eine Variable hoch zählen lassen. ( Ob die weg müssen,musst du entscheiden )
    Deklarieren musst du die Variablen außerhalb der Schleife. Wenn die Schleife durchgelaufen ist, eine Nachricht formatieren und dort den Wert der Variablen einfügen.

    Wo hilft dein Post bei dem Fehler,Uppermost ?


    Zitat

    Ich habe den String formatiert, doch weiß jetzt nicht, ob ich bei Versuch % ein %s, %i oder ein %d nehmen muss.


    %i und %d sind identisch. Das müsstest du benutzten anstatt %s.
    Wofür %[s,i,d,etc.] steht,siehst du hier:
    http://wiki.sa-mp.com/wiki/Format


    Zitat

    Übrigens: Ich habe %s, %i und %d probiert, doch bei allen stand: tag misbatch oder so etwas ähnliches.


    Tag Mismatch hat nichts mit %s,%i oder %d zu tun. Denn der Compiler prüft nicht,ob %[s,i,d,etc.] mit dem Variablentyp zusammenpasst, für den es Platzhalter ist.


    format(string,sizeof(string),"Das angegebene Passwort war falsch!\nVersuch % von 3\nBitte gib dein richtiges Passwort ein!",Loginversuche);
    Wieso schreibst du dort nur Loginversuche und nicht SpielerAccount[playerid][Loginversuche] ? Denn das ist dein Fehler.


    //Edit:
    Die Erklärung findest du irgendwo im Forum. Hängt jedenfalls mit der Funktionsweise von "enum" zusammen.

    Ich sehe irgendwie nicht, wo du auf Variablen explizit eingehst.


    Ungarische_Notation
    Find ich persöhnlich ganz praktisch, besonders für Variablen.
    Es lässt 1:1 auf Pawn beziehen,da alle Variablen technisch vom gleichen Typ sind. Lässt sich aber mMn dennoch abstrakt dafür verwenden.


    new sString[] = "String"; // oder sz,wie man es halt möchte
    new Float:fFloat = 0.0;
    new iInteger = 14;
    new aiArrayInteger[10] = {0,1,..};
    //etc


    //Edit: Für spezielle Tags in Pawn nehm ich auch immer ein Präfix.
    new Text:tdTextdraw; // td = TextDraw
    new Text3D:t3dLabel;


    Damit weiss ich zumindest immer, um was für ein "Objekt" es sich bei der Variable handelt.


    Find ich gut,dass Jemand versuchst hier den Coding-Stil zu verbessern.

    new adtext[100],string[200];
    new zeichenpreis = strlen(adtext)*10;
    if(sscanf(params,"s",adtext)) return SendClientMessage(playerid,ROT,"Verwendung: /ad (Deine Werbung)");

    0 * 10 = 0.
    Du solltest mal die Reihenfolge überdenken zwischen Zeile 2 und 3. Macht es nicht mehr Sinn,erst den Text in die Variable adtext zu laden und danach erst dessen Länge auszulesen ? ;)


    //Edit: Eigentlich kannst du auch komplett params verwenden und auf eine extra Variable verzichten ( adtext ).

    Im nachhinein habe ich erst gesehen,dass du gar kein Auto Increment benutzt sondern die IDs manuell vergibst.
    Dann fallen die o.g. Lücken irgendwann wieder weg, sobald neue Häuser "gelöschte alte" ersetzen.


    Würde trotzdem nicht den Index gleich HausID legen.


    Hier ein Punkt:

    Zitat

    Der stock geht eigendlich nur eine For new schleife durch alle häuser und prüft ob er in der nähe des pickups ist.


    Es ist kein stock,sondern eine Funktion. ( siehe Hier )
    Du schreibst was von einer for Schleife,verwendest aber while im Code der nach dem o.g. Zitat folgt.

    Zitat

    Vllt noch verbesserungsvorschläge?


    Ja.
    Wieso ist der Index gleich der HausID ? So hast du definitiv schon eine Lücke beim Index 0. Denn eine ID per AutoIncrement 0 kriegst du sicherlich nicht.
    Leider machen es hier im Forum viele so ( Index = ID ) , verstehe nicht wieso. Ist nämlich kein guter Stil.


    Angenommen ich habe dieses Häuser:

    Spoiler anzeigen
    MAX_HAUS laut Quellcode 100

    1,2,3,5,6,7 ... bis 100.
    Die 0 fehlt, Index ist aber belegt.
    Die 4 fehlt, Index ist aber belegt.
    Die 100 habe ich, der Index 100 existiert aber nicht. Ich habe also theoretisch nicht mal die Möglichkeit 100 Häuser zu erstellen, sondern "nur" 99.
    Spoiler anzeigen
    Denn: Gültiger Index ist 0 bis MAX_HOUSES-1


    Hätte ich folgende Häuser:
    1,2,3,4,5,101,102,103,104
    Die 0 fehlt wieder.Index ist aber wieder belegt.
    Sind Insgesamt 9 Häuser, wovon aber nur die ersten 5 funktionieren. 101,102,103 und 104 würde ich gar nicht erstellt bekommen :/.


    Das Problem mit den Lücken hast du sobald Jemand ein Haus löschst. Das bietest du ja immerhin mit /delhaus an.



    //Edit:
    Da wie oben genannt Lücken durchaus vorhanden sein werden, würde ich dir auch empfehlen auf den Wert von "erstellt" zurückzugreifen.
    Zum Beispiel hier: IsHaus
    Wieso alle 100 Häuser theoretisch prüfen, wenn sowieso nur 3 erstellt wurden ? Die Abfrage von "erstellt" würde ich definitiv vor der Position prüfen.

    Zitat

    Das kommt nicht [...]


    Was soll ich jetzt machen ? Du hast dann die falschen Koordinaten oder bist am falschen Punkt. Das musst du doch selber erkennen können.


    Zitat

    [...] der Label erscheint immernoch nicht.


    Sehr gut. Nur hab ich keine Ahnung was du "jetzt" machst,damit es immernoch nicht geht.

    Dazu brauchst du einen neuen Thread? :wacko:


    Zitat

    Warum geht das nicht wenn ich dort bin


    Woher soll man das wissen ? Füg doch einfach mal Debug Informationen ein. Dann kannst du wenigsten nachvollziehen, bei welcher Abfrage es scheitert.


    Create3DTextLabel("Benutze die\n{1BE032}N Taste", 0x008080FF, 1279.1732,-1651.6665,13.6519, 0, -1);
    0 als drawdistance ist nicht sehr weit.

    if(GetPlayerVehicleID(playerid) == grovefahrzeuge(vehicleid))


    Habe doch oben geschrieben,dass das Quatsch ist.
    Ließ doch nochmal meinen Post.

    Spoiler anzeigen
    Ist zwar sowieso falsch,aber wozu nochmal GetPlayerVehicleID() ? Du ließt doch vorher den Wert eh aus

    Wenn du die Funktion grovefahrzeuge() selber geschrieben hast,dann musst du doch wissen,welchen Wert die Funktion zurück gibt,wenn du in einem Grove Fahrzeug sitzt :wacko: .

    habe keine erors und keine warnings mehr habe über
    if(new.. ein new gesetzt [pwn]


    "if(new" ? Wirklich ?!


    Poste doch einfach mal den ganzen Code von OnPlayerStateChange. Denk doch mal etwas nach. Dir soll Jemand helfen, muss aber alle Grundlegenden Informationen nachfragen anstatt sie einfach direkt zu bekommen. Das hilft dir nicht.
    Du bist damit aber auch leider nicht die Ausnahme.

    Zitat

    was soll ich dann machen um frak auto zu erstellen ?


    Dazu habe ich doch rein gar nichts geschrieben. Ich habe nur gesagt, dass du unter OnPlayerStateChange einen Logik Fehler hast.


    Zitat

    //EDIT weil es funktioniert nicht xD


    Sehr gute Beschreibung. Glaubst du wirklich Jemand außer dir hat jetzt verstanden wo der Fehler ist ?
    Du musst viel genauer sagen,was genau nicht funktioniert. Keiner kann auch nur erahnen wo der Fehler sein kann,da du 0 Informationen gibst.


    Habe deinen Code jetzt einfach kopiert und eingefügt (ich denke das war jetzt diesmal auch Sinn der Sache, hoffentlich) und im Log steht folgendes:


    Code
    [11:38:46] debug 1
    [11:38:46] debug 3
    [11:38:46] debug 4
    [11:38:46] (null)


    PS: Der Dialog wird überhaupt nicht angezeigt.


    Wie du siehst,"debug 2" wird nie ausgegeben.
    Der Code springt also nie in die while Schleife:
    while(mysql_retrieve_row())
    {
    print("debug 2");
    mysql_fetch_field_row("Name", result);
    format(string, sizeof(string), "%s\n%s", string, result);
    }
    Dadurch füllt sich auch nie string und du bekommst nur (null) ausgegeben für den String. Ich gehe mal davon aus,dass es definitiv Einträge geben sollte ( Die Tabelle ist also nicht leer ).


    Ich weiss jetzt nicht welches Plugin du benutzt,aber änder die mysql_store_result() Zeile in folgendes:
    printf("mysql_store_result() = %d",mysql_store_result() );
    http://wiki.sa-mp.com/wiki/MySQL#mysql_store_result


    Je nachdem welches Plugin du verwendest,gibt es auch das Callback OnQueryError.
    http://wiki.sa-mp.com/wiki/MySQL#OnQueryError
    Dort könntest du eventuelle Fehler abfangen und dir per print ausgeben.
    Zum Beispiel so:
    public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
    {
    printf("OnQueryError(%d,%s,%s)",errorid,error,query);
    return 1;
    }


    //Edit:
    Das oben fällt dann wohl weg.


    Laut Wiki gehört mysql_fetch_field_row etwas anders.
    http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_field_row
    Es müssten also getausch werden bei dir in
    mysql_fetch_field_row(result, "Name");
    Hast du auch nur 1 Account in der Tabelle ? Sonst müsstest "debug 2" häufiger ausgegeben bekommen.


    Du sollst auch nicht einfach nur kopieren.Hast du denn überhaupt eine MySQL Datenbank ? Gibt es dort die Tabelle samp und ist dort eine Spalte mit dem Namen Name ? Wird der Dialog angezeigt und ist lediglich der Inhalt leer ?


    Mach doch einfach mal Debug Informationen rein:
    mysql_query("SELECT Name FROM samp");
    mysql_store_result();
    print("debug 1");
    new result[512], string[256];
    while(mysql_retrieve_row())
    {
    print("debug 2");
    mysql_fetch_field_row("Name", result);
    format(string, sizeof(string), "%s\n%s", string, result);
    }
    print("debug 3");
    mysql_free_result();
    print("debug 4");
    print(string);
    ShowPlayerDialog(playerid,temp,DIALOG_STYLE_MSGBOX,"Hi",string,"Ok","");

    Sind denn bei dir alle Spieler auf dem Server die jemals bei dir einen Account angelegt haben ? Ich nehm die Antwort mal vorne weg,Nein.


    Zitat

    Weiß nicht wo da das Problem sein soll, aber gut das du Sachlich bleibst und direkt rumheulen musst.


    Tust du ja gerade.

    Hast du einen stock der mysql_CheckAccount heißt?


    Lösch bitte deinen Beitrag. Was bringt denn diese Funktion ( Es ist eine Funktion,kein stock ) um aufzulisten, was für Accounts es alles gibt ?
    Soll man jetzt etwa zufällig alle möglichen Namen ausprobieren ?

    Spoiler anzeigen
    Wer aber in seiner Signatur auch Pawno Hilfe anbietet hat sich sowieso disqualifiziert :wacko: 


    Der Beitrag von John_Hunter ist gut.