Beiträge von Chris.

    Dieses Tutorial scheint kein schlechtes zu sein, wobei Whirlpool zu verwenden auch wieder Murks ist. Da solltest du dich später um eine bessere Alternative kümmern. Auch das Verständnis von Escaping scheint dort falsch zu sein, aber für Anfänger reicht dieses Tutorial (vorerst) aus.

    • Verwende NIEMALS die hier verwendeten Funktionen mysql_GetInt(), mysql_SetInt(), mysql_GetFloat(), ... - Uneffizienter kann man einen Quellcode kaum schreiben. Bad Practise ist das Stichwort. Steige um!
    • Warum verwendest du die Funktion PLAYERNAME() immer wieder erneut? Speichere doch für den Spieler den Namen einmalig ab und verwende diesen String immer wieder. Du hast doch extra "pName" in deinem Enumerator. Verwende ihn doch auch konsequent.
    • Unter OnPlayerConnect() bspw. erstellst du drei Strings. "string", "string1", "string2" - Verwende doch einfach "string" 3x. Dann benötigst du doch viel weniger Speicherkapazität.
    • Warum verwendest du überhaupt ein demaßen uraltes MySQL-Plugin? Wenn du jetzt etwas neues erstellst, dann arbeite doch auch auf dem aktuellen Stand. Diese Version des Plugins ist weitaus unperformanter als die neueren Versionen.
    • Wo dein Fehler zu deinem Problem derzeit liegt, kann ich dir so aus dem Stand auch nicht sagen. Debugge deinen Quellcode, lasse dir Fehler ausgeben etc.
    • Wenn du angibst, dass man bei der Verwendung des Befehls nur maximal ein Wort oder eine Zahl eingeben sollte, dann validiere die Eingabe auch. Sonst kannst du das Ganze auch verwerfen. EVA(S)-Prinzip anschauen!
    • Packe fread() in eine while-Schleife, schließlich möchtest du die gesamte Datei durchsuchen.
    • Du kannst "item" und "string" mit einer Variable ersetzen. Verwende Variablen erneut anstatt mehrere Variablen zu verwenden.
    • Behalte im Hinterkopf, dass dieser Quellcode uneffizient ist und zu möglichem Lag bei hohem Datenaufkommen führen wird.
    • Verwende nicht Funktionen wie ini_GetValue(). Diese sind uneffizient und keineswegs empfehlenswert.
    • Auch die Funktion ProxDetector() ist kompletter Schwachsinn. Da gibt es weit bessere Möglichkeiten das Vorhaben umzusetzen.
    • Das ist nun wirklich unverständlich für mich. Verwende doch direkt die "text" Variable:



    format(string, sizeof(string), "%s", text);
    SetPlayerChatBubble(playerid, string, 0xFF0000FF, 15, 10000);
    Um dein Problem zu lösen: Debugge deinen Quellcode. Schaue nach wann und wie die Variablen gesetzt werden und verfolge die Problematik zum Ausgangspunkt, um sie zu beheben.

    Ganz simple Distanzberechnung im dreidimensionalen Raum nach dem Satz des Phytagoras: http://www.ina-de-brabandt.de/…n/a/abstand-2p-in-r3.html


    Formel:


    Code
    sqrt((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)


    Funktion zur Berechnung einer Wurzel: floatsqroot()
    Funktion zur Handhabung von Exponenten: floatpower()


    Daher:



    Float:distanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
    return floatsqroot(floatpower(x1 - x2, 2) + floatpower(y1 - y2, 2) + floatpower(z1 - z2, 2));
    }


    P.S.: Du befindest dich im falschen Bereich!

    Dini ist für die Tonne, Grund: Es öffnet für jede Kleinigkeit die Datei neu. Y_INI handhabt dies anderst und ist daher um Meilen effizienter. Wer Dini verwendet hat womöglich kein Interesse an einem effizienten Quellcode.

    Zwei Anmerkungen dazu:

    • mysql_errno() gibt nicht i.d.R. 1 zurück, sondern den Error-Code. Für Debugging/Logging/... wichtig.
    • Ich würde "false" zurückgeben, wenn eine Verbindung nicht aufgebaut werden konnte. Macht zwar im weiteren Verlauf wenig Unterschied, da der Server gestoppt wird, jedoch würde es mehr Sinn machen.

    Ich denke nicht, dass du den Ablauf des Beispiel-Quellcodes richtig verstanden hast.



    new dir:dHandle = dir_open("./"); // Ein Verzeichnis wird geöffnet und der Handle dazu wird in der Variable "dHandle" gespeichert.
    new item[40], type; // Es werden zwei neue Variablen erstellt, in welche wir die Namen und Typen (Datei oder Verzeichnis) des Verzeichnis, welches wir ...
    // ... oben geöffnet haben, zwischenspeichern.

    while(dir_list(dHandle, item, type)) // Eine while-Schleife, da dir_list() bis es kein weiteres Objekt im Verzeichnis findet 1 (true) zurückgibt. Sobald ...
    // ... nichts mehr gefunden wird, ist die while-Schleife beendet.
    {
    if(type == FM_FILE) // Wenn das gefundene Objekte eine Datei ist, dann ...
    {
    printf("%s is a file", item); // ... gebe "Dateiname is a file" aus.
    } else if(type == FM_DIR) { // Wenn das gefundene Objekte ein Verzeichnis ist, dann ...
    printf("%s is a directory", item); // ... gebe "Verzeichnisname is a directory" aus.
    }
    }

    dir_close(dHandle); // Schließen des Verzeichnises.


    Diese Beschreibung sollte detailiert genug sein, sodass du nun einen Quellcode aufsetzen kannst, mit welchem du die Dateien auslesen kannst. Beginne einfach mal und poste den Quellcode mit ordentlicher Fehlerbeschreibung hier, wenn du auf Probleme stößt. Deine Posts sind zum Großteil unstrukturiert, nicht durchdacht, hingeschludert und für Hilfestellungen komplett unangebracht. Nehme dir für dein Vorhaben Zeit, dokumiertiere deine Problematiken ordentlich und strukturiert und gebe dir bitte etwas mehr Mühe. Das soll nicht abstoßend klingen, sondern dich lediglich dazu auffordern ausführlicher, ordentlicher und strukturierter zu arbeiten.


    P.S.: Pushe deine Beiträge nicht durch Löschen deiner vorigen Beiträge. :rolleyes:

    Ich denke, dass im gezeigten Beispiel im Thread des Plugins alles beleuchtet wird:



    new dir:dHandle = dir_open("./"); // Verzeichnis öffnen.
    new item[40], type;

    while(dir_list(dHandle, item, type)) // Alle Dateien in einer while-Schleife auslesen.
    {
    if(type == FM_FILE) printf("%s is a file", item); // "type" enthält den Typ des Objekts (Datei oder Verzeichnis).
    else if(type == FM_DIR) printf("%s is a directory", item); // "item" enthält den Namen des Objekts.
    }

    dir_close(dHandle);


    Hab es nun verstanden aber ich hab noch zwei fragen:
    (wie) kann ich alle Datein auslesen lassen und das alles dann auf eine durch new definiertes wort setzen?? (dann soll das alles auf einmal durchgeschaut werden dann muss ich net jede Datei extra)


    Wenn du nicht aus den Daten der verbundenen Spieler die Dateinamen bilden kannst, dann verwende das von Mr.Reese genannte Plugin. Im vorgegebenen Link gibt es auch ein Beispiel, wie man Namen von Dateien in einem bestimmten Verzeichnis auflistet.

    Murks ist es nicht. Ich bin überhaupt froh, dass ich es erstmal so weit geschafft habe. Nur weil es nicht so aussieht wie du es gerne haben möchtest, heißt es nicht dass es gleich Murks ist.
    Da ich ein Anfänger bin, halte ich es für in Ordnung. Und verbuggt ist es nicht mehr.


    Sobald du das System mit mehreren Spielern entsprechend testen wirst, wirst du Probleme erkennen. Es ist nicht, dass ich hier deinen Quellcode herunterziehen möchte. Ich finde vor allem als Anfänger sollte man Tipps beherzigen und die Hintergründe untersuchen, um sich selbst weiterentwickeln zu können. Ob dein Quellcode nun meinen Tipps entspricht, das ist mir herzlichst egal. Schließlich bin ich nur hier um Ratschläge zu geben. Von mir aus kann dein ganzer Server auch abrauchen. Ich versuche lediglich neben einer (primitiven) Lösung für das Problem dir für deinen gesamten Quellcode Verbesserungsvorschläge mitzugeben. Die kannst du nun überdenken und lernen oder du ignorierst sie und schlägst dich mit einem anfängerlichen Quellcode herum und machst zukünftig die exakt selben Fehler wieder.

    Wichtig bei solchen Problemen sind folgende Schritte:

    • Sicherstellen, dass man im richtigen Ordner das richtige Script compiled. Alles schließen, Pawno aus dem richtigen Ordnerverzeichnis wählen und erneut das Script richtig aufrufen.
    • Alles zum Plugin erneut herunterladen. Includes und Plugin ersetzen.
    • Nun erneut compilen (Errors/Warnings?).
    • Sicherstellen, dass "nativechecker" als letztes in der "plugins"-Zeile in der server.cfg genannt wird.
    • Ggf. "crashdetect" hinzufügen.

    P.S.: "Runtime Error 19" besagt nur, dass die Plugins nicht richtig geladen werden konnten. Das ist nicht der eigentliche Fehler des Plugins.

    IPrototypeI: Danke dir!
    Jedoch habe ich mit MapAndreas noch nie gearbeitet.. Könntest du mir vlt erklären, wie ich das mit MapAndreas mache?
    Wäre sehr nett.. Danke im Voraus!


    MapAndreas verfügt lediglich über zwei Funktionen. Mit MapAndreas_Init() initialisierst du, wie die Funktion bereits sagt, das Plugin und mit MapAndreas_FindZ_For2DCoord() ermittelst du die Z-Koordinate (Höhe) des Grunds. Ist die Z-Koordinate deines Autos kleiner, ist es unter dem/im Boden. Ist die Z-Koordinate größer, so ist dein Auto in der Luft über dem Boden.


    Weiß jmd wie ich den Globalen Chat mit den bunten Farben deaktiviere und ein Sagt/Schreit System mit bestimmter Reichweite einbauen kann ?


    Dazu gibt es mehrere Tutorials. Der Ansatz ist:

    • In OnPlayerText() 0 statt 1 returnen, um die Nachrichten nicht global zu senden.
    • Unter OnPlayerText() die "text" Variable entsprechend formatieren und via SendClientMessage() an Spieler in der Nähe senden.

    Ja, beim hochladen gab es ja diesen Error :/


    ... weil du (ich nehme an, du arbeitest mit phpMyAdmin und nicht mit der Konsole) am falschen Ort den Reiter "Importieren" angeklickt hast. Du hast versucht die .sql-Datei auf Serverebene hochzuladen und nicht auf Datenbankebene. Du musst erst in der linken Sidebar die Datenbank auswählen, bevor du die Datei hochladen kannst. Der Fehler ist aussagekräftig genug und ich denke, dass ich nun genug Lösungsansätze vorgegeben habe. Nun bist du an der Reihe, dich daran zu setzen diese (falls auch mit Hilfe von Google) korrekt auszuführen. :rolleyes: