Beiträge von Haxler

    Du könntest eine Schleife erstellen, die alle Objekt-IDs durchläuft und per IsValidObject überprüfen, ob das Objekt erstellt wurde. Wenn ja eine Variable hochzählen.

    Aus der 0 eine 1 zu machen ändert nichts an der Tatsache, dass du die Schleife nach dem ersten Durchlauf beendest.

    for(new i=0;i<sizeof(SchimpfWort);i++)
    {
    if(strfind(text,SchimpfWort[i],true) != -1)
    {
    new string1[128];
    format(string1,sizeof(string1),"AdmCmd: %s wurde vom Anti - Beleidigungs System gekickt, Grund: Beleidigung",SpielerName(playerid));
    SendClientMessageToAll(HELLROT,string1);
    Kick(playerid);
    return 1; //Wort gefunden, Schleife wird abgebrochen
    }
    }

    edit: Falls die Abfrage unter OnPlayerText stattfindet musst du return 0 verwenden, um das Abschicken zu verhindern.

    Hab den Code mal ein wenig verbessert:

    ocmd:report(playerid,params[])
    {
    new pID, grund[80];
    if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid,grau,"INFO: /report [Spieler der Reportet werden soll] [Grund]");
    //falls du sscanf2 verwendest musst du die Größe des Strings mit "s[80]" angeben
    new string[128];
    format(string,sizeof(string),"Report von %s : Der Spieler %s wurde Reportet: %s ",SpielerName(playerid),SpielerName(pID),grund); //Es reicht, den String nur einmal zu formatieren


    for(new i = 0; i < MAX_PLAYERS; i++) // Spieler-ID's werden von 0 bis MAX_PLAYERS-1 vergeben
    {
    if(isPlayerAnAdmin(i,2))
    {
    SendClientMessage(i,drot,string); //wenn du die Nachricht an playerid sendest bekommt der Spieler, der den Befehl eingegeben hat die Meldung
    //return 1; //return hat hier keinen Sinn, da die Nachricht dann nur an den ersten Spieler gesendet und die Schleife dann abgebrochen wird.
    }
    }
    return 1;
    }

    new count = 0;
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!SpielerInfo[i][Eingeloggt] || !SpielerInfo[i][Wantedlevel]) continue;
    format(buffer,sizeof(buffer),"Name: %s Level: %i Wantedlevel: %i Fahndungslevel: %i\n",SpielerName(i),i,GetPlayerWantedLevel(i),SpielerInfo[i][Wantedlevel]);
    strins(string,buffer,strlen(string),sizeof(string));
    count++; //Spieler gefunden, count wird erhöht
    }
    if(count == 0)return SendClientMessage(playerid,0xFF0000FF,"Keine Spieler gefunden."); //Wenn count immer noch 0 ist wurde kein Spieler gefunden
    else ShowPlayerDialog(...);

    Du könntest unter OnPlayerEnterVehicle per SendClientMessage eine Nachricht an den NPC senden und diese mit OnClientMessage im NPC-Mode abfangen.
    Jetzt musst du nur noch die Aufnahme abspielen (StartRecordingPlayback).
    edit: wäre noch besser wenn du die Nachricht unter OnPlayerStateChange abschickst

    new /*text[50],Name[MAX_PLAYER_NAME],string[126],rankname[20],*/rank; // rank = 0
    SpielerInfo[playerid][pTeammitglied] = rank; //pTeammitglied wird auf rank gesetzt, was 0 beträgt
    switch(rank) //rang ist Null -> wird nicht ausgeführt
    {


    }
    rank = SpielerInfo[playerid][pTeammitglied];
    wäre die richtige Lösung. Alternativ kannst du auch direkt switch(SpielerInfo[playerid][pTeammitglied]) verwenden.

    Wenn du eine zufällige Zahl zwischen 1 und 11 erzeugen willst, kannst du nicht einfach random(1-11) verwenden, das würde erst 1 minus 11 rechnen -> random(-10)
    Der richtige Code wäre:
    1 + random(11); , da random(11) dir eine Zahl zwischen 0 und 10 ausgibt, das ganze +1 würde dir dann die Zahl zwischen 1 und 11 ausgeben.

    Geht auch viel einfacher:


    #define JaNein(%0) ((%0 == 1) ? ("Ja") : ("Nein"))


    new str[15];
    format(str,15,"Ausweis: %s",JaNein(SpielerInfo[playerid][pPersonal]));

    Falls du meinen Beitrag gelesen hättest, wüsstest du was der Fehler ist.
    Verwende

    SpielerDaten[playerid][pPasswort][0] = '\0';
    strcat(SpielerDaten[playerid][pPasswort],inputtext);
    zum Ändern des Passwortes und beim Laden:
    strcat(SpielerDaten[playerid][pPasswort],dini_Get(Spielerdatei,"Passwort"));

    Zitat

    pPasswort ist ein String.


    Dann ist diese Zeile auch falsch: new code = SpielerDaten[playerid][pPasswort];
    Du könntest die Variable auch direkt im String formatieren:
    format(codestring, sizeof(codestring), "{FFFFFF}Dein Code für den Login lautet: %s", SpielerDaten[playerid][pPasswort]);

    Zitat


    Selfmade.pwn(947) : warning 202: number of arguments does not match definition
    Selfmade.pwn(947) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")


    Da hast du wohl strcat falsch verwendet:

    SpielerDaten[playerid][pPasswort][0] = '\0'; //damit das alte Passwort überschrieben wird, strcat fügt den String nur hinzu
    strcat(SpielerDaten[playerid][pPasswort],inputtext);

    Ist SpielerDaten[playerid][pPasswort] eine Zahl oder ein String?


    SpielerDaten[playerid][pPasswort] = strlen(inputtext);
    strlen gibt dir die Länge des Textes wieder. Falls pPasswort ein Integer ist musst du strval verwenden bzw. strcat falls es ein String ist.

    Sehe nur dass nach Filterscripts gefragt wurde. Falls du z.b. zcmd oder ocmd inkludierst funktioniert OnPlayerCommandText im GameMode nichtmehr.
    Kannst mir auch gerne deine TV-Daten per PN schicken, dann kann ich mir das mal anschauen :D

    Aus dem Samp-Wiki: This function can be used to make objects rotate smoothly. In order to achieve this however, the object must also be moved
    D.h. du musst das Objekt ein wenig bewegen, damit es rotiert wird.
    MoveObject(Baum[baumid],x,y,z+0.01,5.0,0,90,0);

    Wieso willst du denn den Wert aus der Datenbank auslesen? Ich gehe mal davon aus, dass du das schon beim Connecten machst.
    if(SpielerInfo[playerid][pFraktion] == SpielerInfo[i][pFraktion])

    Du kannst Strings nicht einfach mit = zuweisen, dafür gibts Funktionen wie strcat. Eine bessere Lösung wäre, die Ränge in einen Array zu packen. Dann kannst du viel besser darauf zugreifen:



    new RangArray[2 /*Fraktionen*/][3 /*Anzahl der Ränge*/][15] =
    {
    { //Fraktion 0
    {"Rang1"},{"Rang2"}, {"Rang3"}
    },
    { //Fraktion 1
    {"Rang1"},{"Rang2"}, {"Rang3"}
    }
    };
    //...
    printf("Rang: %s",RangArray[1][1]); //würde dir den 2. Rang von Fraktion 1 ausgeben("Rang2").

    Dabei musst du nur aufpassen, dass jede Fraktion die gleiche Anzahl an Rängen hat bzw. der Array komplett ausgefüllt ist.