Beiträge von Pille

    format(str,sizeof(str),"AddPlayerClass(%i,%i,%i,%i,%i,0,0,0,0,0,0) Interior: %i //%s\r\n",skin,x,y,z,a,int,kommi);


    Da liegt der Fehler.
    Mit '%i' gibt man keine Floatvariablen aus.


    Hilfe?



    //edit:
    Ich würde unbedingt die Datei nach dem öffnen mit
    fclose(datei);
    schließen.

    ocmd:admins(playerid,params[])
    {
    SendClientMessage(playerid, Sh12, "[====[: Admin's Online :]====]");
    new count;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(PlayerInfo[i][pAdmin] < 0) continue;
    count++;
    new Admins[100];
    format(Admins,sizeof(Admins),"%s %s\n%s %s",RangName(i),GetName(i));
    SendClientMessage(i,Grau,Admins);
    }
    if(count==0) return SendClientMessage(playerid,Sh12,"Keine Administratoren online!");
    return 1;
    }


    Du fragst bei jedem Spieler ab, ob er Admin ist.
    Falls nicht, wird die Message "Kein Admin da" ausgesand...


    Das darfst du aber so nicht machen, da ist klar dass es so spammt ;)



    //edit:
    Im Endeffekt brauchst du eigentlich nur folgende Zeile weglassen:
    else{SendClientMessage(playerid,Grau,"Momentan sind keine Admins Online!");}

    Hallo Leute,


    Folgendes Problem:


    Ich habe eine Tabelle in MySQL angelegt, welche die Namen des Spielers, das Passwort und ein paar andere Daten speichert.
    Außerdem den Integerwert "Banned". Wenn er auf 1 ist, ist man gebannt.


    Jetzt will ich per Befehl alle User aufgelistet haben, die gebannt sind.


    new string[256],ziel[100][24],iii;
    format(string,sizeof(string),"SELECT Name FROM Test WHERE Banned > 0");
    mysql_query(string);
    mysql_store_result();
    while(mysql_retrieve_row())
    {
    mysql_fetch_row(ziel[iii]);
    iii++;
    }
    mysql_free_result();
    for(new i=0;i<20;i++) printf("%i: %s",i,ziel[i]);


    Funktioniert leider nicht, ich bekomm es nicht hin....


    Danke für die Hilfe schonmal!

    stock fdeleteline(Name[],Line[])
    {
    new File:datei=fopen(Name,io_read);
    new File:datei2=fopen("tmp.tmp",io_append);
    new string[200];
    strins(Line,"\r\n",strlen(Line),200);
    while(fread(datei,string)) if(strcmp(string,Line,true)!=0) fwrite(datei2,string);
    fclose(datei);
    fclose(datei2);
    datei=fopen(Name,io_write);
    datei2=fopen("tmp.tmp",io_read);
    while(fread(datei2,string)) fwrite(datei,string);
    fclose(datei2);
    fclose(datei);
    fremove("tmp.tmp");
    return 1;
    }


    Entfernt eine Zeile aus einer Textdatei.



    Was will ich damit?
    Ich bitte um die Lösung eines Problems, und nicht ums Neuscripten meines Befehls.
    Der Befehl funktioniert, abgesehen von der Nachricht, wenn sie die Länge 128 überschreitet, problemlos.


    Trotzdem danke an Marv und KingKane.

    Wenn man beim /kick-Befehl

    Code
    /kick [Spieler] [Grund]


    einen Grund angibt, welcher ziemlich lange ist, dann wird die

    Code
    SendClientMessageToAll(0xE3654DFF,string);


    nicht ausgesand. Nimmt man allerdings einen kurzen Grund, funktioniert es.


    Befehl:
    if(strcmp(strget(cmdtext,0),"/kick",true)==0)
    {
    if(strlost(cmdtext,2)) return SendClientMessage(playerid,0xE3654DFF,"Benutze: /kick [Spieler] [Grund]");
    new pID,grund[256];
    if(SpielerSuchen(strget(cmdtext,1),pID)==-1) return SendClientMessage(playerid,0xE3654DFF,"Spieler wurde nicht gefunden.");
    new string[512];
    format(grund,sizeof(grund),strgetrest(cmdtext,2));
    format(string,sizeof(string),"%s wurde von %s gekickt || Grund: %s",Spieler[pID][Name],Spieler[playerid][Name],grund);
    SendClientMessageToAll(0xE3654DFF,string);
    Kick(pID);
    return 1;
    }


    Die 3 Funktionen (strlost, SpielerSuchen, strgetrest) sind eigene Funktionen.
    Sie tragen nachweisbar keine Schuld an dem Versagen der SendClientMessage.



    Bitte um Hilfe.

    iif(!strcmp(cmdtext,"/afklist", true))
    {
    new stri[1024], pName[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(SpielerIstAFK[i]==false) continue;
    new string[100];
    GetPlayerName(i, pName,sizeof(pName));
    format(string,sizeof(string),"%s[%d]\n",i,pName);
    strins(stri,string,strlen(stri));
    }
    if(strlen(stri)==0) return SendClientMessage(playerid, COLOR_GRAU, "Niemand befindet sich im AFK-Modus!");
    ShowPlayerDialog(playerid,DIALOG_AFKLIST,DIALOG_STYLE_LIST,"Folgende Spieler befinden sich im AFK-Modus:",stri,"Schließen","");
    return 1;
    }


    So würd ich es machen :)

    Eine for-Schleife wird mit "for" erstellt.
    Dann kommen in die Klammer verschiedene Dinge.


    for(new i=0; // Wir erstellen eine neue Integervariable namens i. Wir weisen sie den Wert 0 zu. i = 0
    for(new i=0;i<100; // Nun kommt die Abfrage, wann die Schleife beendet werden soll: Sie soll nämlich nur laufen, solange i kleiner als 100 ist.[
    for(new i=0;i<100;i++) //das i++ erhöt die Variable i bei jedem Schleifendurchlauf um eins. Man könnte genauso schreiben i=i+1;


    Die Schleife wird sich nun 100x wiederholen.
    Bei jedem Schleifendurchlauf wird Variable i um eins erhöht.


    So kannst du z.B. allen Spielern (ID 0-99) Geld geben, undzwar so:


    for(new i=0;i<100;i++)
    {
    GivePlayerMoney(i,200);
    }