Kicknachricht an spieler ausgeben und eine verbergen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Morgen :)


    Und zwar..


    Ich möchte dem gekicktem spieler eine Nachricht ausgeben das er gekickt wurde.. aber will nicht das er sieht, das alle User sehen, das er gekickt wurde..


    ocmd:kick(playerid,params[])
    {
    if(sD[playerid][pAdmin] >= 1)
    {
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,COLOR_GRAU,"Benutze: /kick [ID] [grund]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_GRAU,"Dieser Spieler ist nicht Aktiv!");
    if(sD[pID][pAdmin] > sD[playerid][pAdmin])
    {
    SendClientMessage(playerid, COLOR_GRAU, "Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    return 1;
    }
    KickundBanTimer[playerid] = SetTimerEx("KickTimer", 200, true, "i", playerid);
    format(string,sizeof(string),"Info: %s wurde vom Admin ( %s ) gekickt | Grund: %s",Spielername(pID),Spielername(playerid),reason);//Diese Nachricht soll er nicht sehen
    SendClientMessageToAll(COLOR_ROT,string);
    Log("Adminkicks.log",string);
    }
    else
    {
    return SendClientMessage(playerid,COLOR_GRAU,"Du bist kein Admin!");
    }
    return 1;
    }
    Wie bekomm ichn das bewerkstelligt.. xD

  • Naja Gib ihn erst eine Private nachricht mit SendClientMessage und dann kick ihn und dann die nachricht zu alle.
    Beispiel:

    new string[128];
    format(string,128,"Du wurdest von Admin %s gekickt, Grund: %s",SpielerName(playerid),grund);
    SendClientMessage(pID,COLOR_ROT,string);
    Kick(pID);
    format(string,128,"Info: %s wurde von %s gekickt, Grund: %s",SpielerName(pID),SpielerName(playerid),grund);
    SendClientMessageToAll(COLOR_ROT,string);


  • Das hab ich ja schon versucht.. deshalb habe ich ja den Timer der da drin steht, da er mir wenn ich es genau so mache keine Kicknachricht an den spieler bringt..


    Daher einen 200ms Timer.
    Nur dadurch wurde er halt auch die Globale Message sehen.

  • Ich weiß ehrlich gesagt gerade nicht weiter, aber probier mal folgendes:
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,COLOR_GRAU,"Benutze: /kick [ID] [grund]");


    zu:
    if(sscanf(params,"us[128]",pID,reason))return SendClientMessage(playerid,COLOR_GRAU,"Benutze: /kick [ID] [grund]");

  • Hat auch nichts gebracht :D


    public KickTimer(playerid)
    {
    Kick(playerid);
    }



    Das ist der public den der KickTimer aufruft..


    Da wird aber die Reason ect nicht gespeichert.. das hab ich nämlich schon versucht.. und es hat nicht funktioniert.

  • [LSC]PsychoX:


    Oben im Script


    #include <banfix>


    Dein Befehl



    ocmd:kick(playerid,params[])
    {
    if(sD[playerid][pAdmin] >= 1)return SendClientMessage(playerid,COLOR_GRAU,"Du bist kein Admin!");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,COLOR_GRAU,"Benutze: /kick [ID] [grund]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_GRAU,"Dieser Spieler ist nicht Aktiv!");
    if(sD[pID][pAdmin] > sD[playerid][pAdmin])
    {
    SendClientMessage(playerid, COLOR_GRAU, "Du kannst diesen Spieler nicht kicken, da er ein höheres Adminlevel hat als du!");
    return 1;
    }
    new string[128];
    format(string, sizeof(string), "Info: Du wurdest von Admin %s gekickt, Grund: %s",SpielerName(playerid),reason);
    SendClientMessage(pID,COLOR_ROT,string);
    Kick(pID);
    format(string, sizeof(string), "Info: %s wurde von %s gekickt, Grund: %s",,SpielerName(pID),SpielerName(playerid), reason);
    SendClientMessageToAll(COLOR_ROT,string);
    Log("Adminkicks.log",string);
    return 1;
    }

    Mit freundlichen Grüßen


  • CptSky_: Das möchte er ja nicht haben ... Er möchte das die SendClientMessageToAll Funktion nicht dem gekickten Spieler eine Nachricht sendet. Wie schon auf meinen ersten Beitrag im Thema geschrieben, geht dies mit einer for Schleife .


    Wie du aber bei dem Code von CptSky_ siehst, bekommt playerid seine Nachricht, wird dann gekickt und es bekommen alle eine Massage ausser playerid.

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Falls noch Bedarf besteht:
    stock SendExceptMessageToAll(e_ID, color, const string[])
    {
    new i;
    for(;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || e_ID == i)continue;
    SendClientMessage(i,color,string);
    }
    return 1;
    }


    e_ID = Spieler, der die Nachricht nicht bekommen soll.
    Verwendung:
    SendExceptMessageToAll(ID,color,nachricht);


    /Edit, wurde bereits geschrieben.

  • Bitte mach es so:
    Zusätzlich zum Kick-Timer:

    SetTimerEx("SKick",500,false,"s",string);

    forward SKick(kstring[]);
    public Skick(kstring[]){
    SendClientMessageToAll(COLOR_ROT,kstring);
    return 1;
    }


    Und warum verwendest du eine Variable bei dem KickTimer?
    SetTimerEx("KickTimer", 200, false, "i", playerid);
    Würde doch vollkommen ausreichen?
    Du brauchst ja keine Wiederholung bei dem Timer 8|