Beiträge von Campbell

    Du musst dir die GTA:Karte wie einen Kasten vorstellen. Unten ist die Karte die man so kennt, Pershing Square, Idlewood, Market, ...


    Oben im Himmel versteckt sind die Interiors. D.h. wenn man in einen Interior geht, dann springt man irgendwo in den Himmel. Wenn man nun einen Interior mappt ist das nicht anders. Der ist irgendwo im Himmel. Nehmen wir an das ist ein Objekt des Interiors:


    CreateObject(2587, 2001.195679, 1547.113892, 14.283400, 0.0, 0.0, 96.0);


    So, nun springst du eben zu diesen Koordinaten:


    SetPlayerPos(playerid, 2001.195679, 1547.113892, 14.2834009);


    Einen genauen Spawnpunkt kannst du ja später In-Game per /save festlegen. Oder du haust erst den Interior in ein Mapping Programm /save'st dort und nimmst direkt diese Koordinaten.

    Schau dir die Parameter von CreateObject() an. Dort steht die X, Y und Z Koordinate und u. U. der Interior und die Virtual World. Meist sind aber die meisten Interiors in allen Interiors und alles Virtual Worlds vorhanden, dann sind SetPlayerInterior() und SetPlayerVirtualWorld() schnuppe. Man kann aber alles anpassen. Musst dir eben dir Parameter anschauen.

    Du kannst in CreatePickup() einer virtuelle Welt setzen. Damit kannst du es im einen Interior ausblenden. Oder du verwendest am besten direkt einen Streamer wie z.B. Incognitos Streamer.

    Fange mal damit an MySQLi oder PDO zu verwenden. Die standard MySQL Extension ist in PHP schon seit einer Weile als deprecated gekennzeichnet.

    Das ist so nicht ganz korrekt.

    • Ein String wird NULL-terminiert. D.h. ein String endet mit einer 0 oder '\0'.
    • Derzeit können bei SA:MP nur Leute mit Namen von einer Länge zwischen 3 und 20 Zeichen verbinden. Folglich kann man MAX_PLAYER_NAME, was derzeit auf 24 gesetzt ist auf 21 setzen.

    // NULL-Terminator:


    string[4] = 0;


    // oder:


    string[4] = '\0';


    // Beispiel:


    new string[9];
    string[0] = 83;
    string[1] = 65;
    string[2] = 77;
    string[3] = 80;
    string[4] = 124;
    string[5] = 83;
    string[6] = 65;
    string[7] = 77;
    string[8] = 80;
    print(string); // Gibt aus: "SAMP|SAMP"

    new string2[10];
    string2[0] = 83;
    string2[1] = 65;
    string2[2] = 77;
    string2[3] = 80;
    string2[4] = '\0';
    string2[5] = 124;
    string2[6] = 83;
    string2[7] = 65;
    string2[8] = 77;
    string2[9] = 80;
    print(string2); // Gibt aus: "SAMP" - String wurde bei string[4] terminiert!


    // Redefine:


    #if defined MAX_PLAYER_NAME
    #undef MAX_PLAYER_NAME
    #define MAX_PLAYER_NAME (21)
    #endif

    Dann solltest du damit anfangen. Das sind Basics. Spiele etwas mit Arrays und for-Schleifen in der main()-Funktion rum, sodass du ein Gefühl dafür bekommst. Dinge, die du in der main()-Funktion machst, werden direkt im cmd-Fenster beim Verwenden der samp-server.exe ausgeführt und wenn du print/printf verwendest auch ausgegeben.

    • Erstelle einen TextDraw - nur die Schrift! - dort, wo du den ersten Eintrag haben möchtest.
    • Füge diesen TextDraw unter OnGameModeInit() ein.
    • Verpasse dem TextDraw eine for-Schleife und erstelle in einer Schleife soviele TextDraws, wie du Zeilen haben möchtest. D.h. du wirst einen Array für die TextDrawIDs benötigen. Auch wirst du auf der y-Koordinate die TextDraws verschieben müssen. Du musst also zum Beispiel schreiben: Y-Koordinate + i * 10. Musst eben schauen, wann es vom Design her passt.
    • Wenn nun eine Supportnachricht empfangen wird, verpasst du dieser Supportnachricht eine ID. Diese ID repräsentiert die Zeile, in der die Nachricht angezeigt wird bzw. auch die Nummer, in der Schlange von Supportanfragen.
    • Dann verwendest du TextDrawSetString() und TextDrawShowForPlayer() - TextDrawShowForPlayer() natürlich nur für diejenigen, die es auch sehen sollen und in TextDrawSetString() kannst du nun die TextDrawID dieses TextDraws verwenden, dessen Index im Array = die ID der Supportnachricht ist.
    • Beim löschen der Supportnachricht musst du nun folglich die IDs und TextDraw-Strings updaten.


    Schritt für Schritt Anleitung ist gegeben. Wenn du Fragen hast, bitte Ansatz posten mit expliziter Frage zum Schritt mit Problembeschreibung.

    Man kann es auch mit diesem Kick/Ban Fix von Beavis machen.
    [ INCLUDE ] Kick/Ban Fix


    Ist doch das genau gleiche Prinzip. Zum Quellcode von Mentalist. Warum verwendest du zwei Strings von der Größe von 128? Das macht keinen Sinn. Vor allem auch wenn du den einen String in den anderen einsetzen möchtest. Auch kann man niemals 128 Zeichen als Grund eingeben!