Beiträge von Jeffry

    Wenn es durch die Neu-Installation aufgetreten ist, und du nichts an dem Code verändert hast, dann kann es eigentlich nicht am Code liegen (davor ging es dann ja).


    Was du versuchen kannst ist, dass du mal in deinen Login Code diverse prints setzt und dir die Zeiten ausgeben lässt, das führt dich vielleicht zum Fehler, bzw. an die Stelle, an der viel Zeit benötigt wird.
    Gegebenenfalls macht es Sinn, zeitgleich in der Konsole die prints zu verfolgen, sprich auf der einen Hälfte des Screens GTA offen zu haben (Fenstermodus) und auf der anderen die Server Konsole zu haben (oder 2. Monitor), dann sieht man es besser. Dann kannst du die Prints so aufbauen:
    printf("1");
    //Code...
    printf("2");
    //Code...
    printf("3");
    //...



    Dann siehst du, an welcher Zahl er am längsten hängt. Poste dann gegebenenfalls mal den Server Log, sowie den Code mit den Prints darin.

    Bei mir funktioniert es:
    public OnPlayerText(playerid, text[])
    {
    if(strfind(text, "test") == -1) SendChat("test"); //Die Abfrage nur, damit der Bot sich nicht selbst erkennt und spammt.
    return 1;
    }



    Versuche es gegebenenfalls mal auf einem leeren Server.

    Warum funktionert es über OnPlayerText nicht?

    Scheint als wird das Callback gar nicht aufgerufen.
    Prüfe mal, ob du in allen Filterscripts und Gamemodes, sowie NPC Files, in denen OnPlayerText vorkommt, am Ende des OnPlayerText-Callbacks ein return 1; stehen hast. Falls es fehlt, oder dort ein return 0; steht, füge es hinzu bzw. ändere es zu return 1; ab.

    Kann man die Variable name irgendwie so oft erstellen wie es Reihen gibt?

    Nein, du musst das Maximum fest (als Konstante) im Code hinterlegen.
    Dynamische Arrays gibt es in PAWN nicht.


    Korrekt sieht es so aus:
    new name[100][20]; //100 Namen zu je 20 Zeichen

    Da ich zwei Monate inaktiv war konnte ich leider nicht antworten.

    Ich bin es nochmal durchgegangen und es gibt immernoch fehler.

    Benötigst du noch Hilfe? Wenn ja, sage mir bitte Bescheid.



    Habe nichts am Login/Register verändert, lief alles super, jetzt bekomm ich kein Register Dialog mehr wenn ich mit einem neuem Account connecte.

    Benötigst du noch Hilfe? Wenn ja, sage mir bitte Bescheid.




    Wenn ich den Server verlasse, speichert er mir das Passwort nicht richtig. Wenn ich auf dem Server bin, dann wird alles korrekt gespeichert. Die Passwort-Spalte ist dann einfach leer. Woran liegt das?

    Kannst du bitte mal den Code posten, mit dem du die Spieler-Daten beim Login lädst, sowie den Code, mit dem du den Spieler registrierst?


    @xXBastianXx:
    %e steht für einen escaped-String und kann in mysql_format vom Plugin her verwendet werden, daher spart man sich sowas wie mysql_real_escape_string.

    Das PlayerInfo[playerid][pMoney] ist ja nur eine Variable, die einen Wert enthält, den du rein schreibst.
    Wenn du dort nirgends im Code - außer beim Laden - einen Wert rein schreibst, dann verändert sich der Wert auch nicht.


    Gleiches natürlich bei Kills/Deaths/..., da musst du auch an den entsprechenden Stellen die Variablen füllen, oder im Speicher-/Lade-Code mit deinen Variablen ersetzen.

    -1 steht für der Spieler hat kein Label, welche Zahl steht dafür das er bereits einen hat (xx)?

    Eine Zahl von 0 bis zum Maximum an erstellbaren Player-Labels heißt, dass er eines hat. Da 0 aber der Standard-Wert der Variable ist, geht das nicht abzufragen, da es auch ein Label mit der ID 0 gibt.


    Alternativ, falls du das OnPlayerConnect nicht aufgerufen bekommst, mache es so:
    new PlayerText3D:pLabel[MAX_PLAYERS][MAX_PLAYERS];
    new bool:pLabelSet[MAX_PLAYERS][MAX_PLAYERS];


    if(pLabelSet[playerid][pID]) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    pLabelSet[playerid][pID] = true;


    Und beim Löschen bzw. beim Disconnect:
    pLabelSet[playerid][pID] = false;

    CMD:paint(playerid,params[])
    {
    if(!CheckAdminName(playerid)) return 0;
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /paint [ID]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online");
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, -1, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));
    new str[32];
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    return 1;
    }

    Kleine Frage: Wie frage ich ab ob der Spieler schon markiert ist?

    Dazu musst du dann das Array anlegen (unter den Includes):
    new PlayerText3D:pLabel[MAX_PLAYERS][MAX_PLAYERS];


    und es so abfragen:
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);


    Bei OnPlayerConnect:
    for(new i = 0; i < MAX_PLAYERS; i++) pLabel[playerid][i] = PlayerText3D:-1;


    Beim Löschen die Variable entsprechend auch auf -1 setzen.

    Das X, Y, Z ist das Offset, wenn man das Label attached. Daher so:


    playertextid = CreatePlayer3DTextLabel(playerid,"Test",0xFF0000FF,X,Y,Z,350.0, pID, INVALID_VEHICLE_ID, 1);
    zu:
    new str[32];
    format(str, sizeof(str), "Name: %s", name);
    playertextid = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,2.0,350.0, pID, INVALID_VEHICLE_ID, 1);


    Achte auch darauf, wenn du wieder auf das Label zugreifen willst, nach dem Befehl, dann musst du es in ein globales Array (für jeden Spieler -> [playerid]) speichern.