Temporäres /warn system!

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
  • Ganz einfach.
    Erstellst eine Variable wo du maximal Definierst von den Warns.
    Nun erstellst die einen befehl der wie kick aufgebaut ist, nur das du dort den Pvar erstellst und ihn erhöhst, dabei rufst du ein Publik auf der anschliessend überprüft ob Define === Variable ist.


    ( Tut mir leid für die Rechtschreibung, bin am ipad )

  • Ganz einfach.
    Erstellst eine Variable wo du maximal Definierst von den Warns.
    Nun erstellst die einen befehl der wie kick aufgebaut ist, nur das du dort den Pvar erstellst und ihn kickst, dabei rufst du ein Publik auf der anschliessend überprüft ob Define === Variable ist.


    ( Tut mir leid für die Rechtschreibung, bin am ipad )

    Joa alles gut , ipad ist ja auch nur schwer ^^ (Mittel schwer für die die's können ^_^)


    #define MAX_WARNINGS 5 // /warn command



    new Anti_Warn[MAX_PLAYERS];



    Code
    CMD:warn(playerid,params[]) {    if(PlayerInfo[playerid][Level] >= 1);	    new tmp[256], tmp2[256], Index;		tmp = strtok(params,Index), tmp2 = strtok(params,Index);	    if(isnull(tmp) || isnull(tmp2)) return SendClientMessage(playerid, red, "USAGE: /warn [playerid] [grund]");    	new warned = strval(tmp), str[128];		if(PlayerInfo[warned][Level] == ServerInfo[MaxAdminLevel] && PlayerInfo[playerid][Level] != ServerInfo[MaxAdminLevel]) return SendClientMessage(playerid,red,"ERROR: You cannot use this command on this admin");	 	if(IsPlayerConnected(warned) && warned != INVALID_PLAYER_ID) { 	    	if(warned != playerid) { 	    	if(Anti_Warn[warned] == 1) return SendClientMessage(playerid, orange,"ERROR: Nein!.");			    CMDMessageToAdmins(playerid,"WARN");				PlayerInfo[warned][Warnings]++;				if(PlayerInfo[playerid][Level] >= 1) {				if( PlayerInfo[warned][Warnings] == MAX_WARNINGS) {					format(str, sizeof (str), "Administrator "%s" hat User "%s" Gekickt!. (Warnungen: %d/%d)***", pName(playerid), pName(warned),  PlayerInfo[warned][Warnings], MAX_WARNINGS);					SendClientMessageToAll(red, str);					format(str, sizeof (str), "[GRUND: %s ]",params[1+strlen(tmp)]);					SendClientMessageToAll(red, str);					SaveToFile("KickLog",str);	Kick(warned);					return PlayerInfo[warned][Warnings] = 0;				} else {					format(str, sizeof (str), "*Administrator "%s" hat User "%s" Verwarnt! (Warnungen: %d/%d)***", pName(playerid), pName(warned), PlayerInfo[warned][Warnings], MAX_WARNINGS);					SendClientMessageToAll(yellow, str);					format(str, sizeof (str), "[GRUND: %s ]",  params[1+strlen(tmp)]);				    SendClientMessageToAll(yellow, str);				    Anti_Warn[warned] = 1;				    Warn[playerid] = warned;				    format(str, 9909, "{FF7E19}Name: %s\n{00F700}Admin: %s\n{E10000}GRUND: %s\n{FF9E00}Warnungen: %d/%d",pName(warned),pName(playerid),params[1+strlen(tmp)], PlayerInfo[warned][Warnings], MAX_WARNINGS);                    ShowPlayerDialog((warned), 9909, DIALOG_STYLE_MSGBOX, "{00F700}Warned", str, "Close", "");					}				}				Anti_Warn[warned] = 1;				SetTimerEx("AntiWarn", 5000, true, "i", playerid);				return 1;			} else return SendClientMessage(playerid, red, "ERROR: Du kannst dich doch nicht selber warnen du dulli ^_^");		} else return SendClientMessage(playerid, red, "ERROR: Player ist nicht mit dem Server verbunden!");	} else return SendClientMessage(playerid,red,"ERROR: Du bist nicht Befugt solch eine Art von Commandos zu Benutzen! Verwende /help!");}


    forward AntiWarn(playerid);public AntiWarn(playerid){ Anti_Warn[Warn[playerid]] = 0;}




    ?

  • Ich würde es bei mir so machen, keine Gewähr dases die nützlichste oder sogar beste lösung sei.
    -
    Also, am besten erstellst du beim Command, wo wie beim kickbefehl, nun sozusagen die kick Funktion stehen würde einen Pvar für die Playerid, wo sich immer um +1 erhöt.
    Dabei kannste wenn du willst noch eine Funktion basteln, das auch die Kickmessage ankommt, mit eine, Timr, du überprüfst ob MaxWarns === Warns sind,wenn ja, kick


  • D:\Edit\gamemodes\Reallife.pwn(50307) : error 029: invalid expression, assumed zeroD:\Edit\gamemodes\Reallife.pwn(50307) : error 017: undefined symbol "cmd_Warn"D:\Edit\gamemodes\Reallife.pwn(50307) : error 029: invalid expression, assumed zero


  • Hier mal eben geschrieben, vielleicht hilft es dir weiter.


    Das ist ein Filterscript (also bitte als solches einfügen) + in den Scriptfiles den Ordner Warnings erstellen.


    Es speichert die Warnings und sobald du jemanden mehr als 3x verwarnt hast, bekommst dieser einen kick und die Warnings resetten sich.


    PS: Farben kannst du oben gerne noch einstellen ;)


    Spoiler anzeigen
    //(c) by Kaliber
    #include <a_samp>
    /******************************************************************************/
    #undef MAX_PLAYERS
    #define MAX_PLAYERS 100
    #define MAX_WARNINGS 3
    #define SCM SendClientMessage
    #define rot 0xFF0000FF
    #define MAX_TEXT 144
    /******************************************************************************/
    static warnings[MAX_PLAYERS char],name[MAX_PLAYERS][MAX_PLAYER_NAME];
    /******************************************************************************/
    public OnFilterScriptInit() return print("\t *** Warnsystem (c) by Kaliber was loaded. ***");
    public OnFilterScriptExit() return print("\t *** Warnsystem (c) by Kaliber was unloaded. ***");
    public OnPlayerConnect(playerid) return GetPlayerName(playerid,name[playerid],MAX_PLAYER_NAME),warnings{playerid}=LoadWarnings(playerid);
    public OnPlayerDisconnect(playerid) return (warnings{playerid}) ? SaveWarnings(playerid) : 1;
    public OnPlayerCommandText(playerid,cmdtext[]) {
    new cmd[32];strcat(cmd,cut(cmdtext),32);
    if(!strcmp(cmd,"/warn")) {
    if(!IsPlayerAdmin(playerid)) return SCM(playerid,rot,"Du bist kein Administrator!");
    new pID = Get(cmdtext),string[MAX_TEXT];
    warnings{pID}++;
    format(string,MAX_TEXT,"* Du hast %s (ID: %d) verwarnt! (%d / %d)",name[pID],pID,warnings{pID},MAX_WARNINGS),SCM(playerid,rot,string);
    format(string,MAX_TEXT,"* Admin %s (ID: %d) hat dich verwarnt! (%d / %d)",name[playerid],playerid,warnings{pID},MAX_WARNINGS),SCM(pID,rot,string);
    if(warnings{pID} >= MAX_WARNINGS) return warnings{pID}=0,f_Kick(playerid,pID);
    return 1;
    }
    return 0;
    }
    /******************************************************************************/
    stock LoadWarnings(playerid) {
    new path[MAX_PLAYER_NAME + 14];
    format(path,sizeof path,"Warnings/%s.txt",name[playerid]);
    if(!fexist(path)) return 0;
    new File:f = fopen(path,io_read),buffer[11];
    return fread(f,buffer,sizeof buffer),fclose(f),strval(buffer);
    }
    stock SaveWarnings(playerid) {
    new path[MAX_PLAYER_NAME + 14];
    format(path,sizeof path,"Warnings/%s.txt",name[playerid]);
    new File:f = fopen(path,io_write),buffer[11];
    return valstr(buffer,warnings{playerid}),fwrite(f,buffer),fclose(f);
    }
    stock cut(cmd[]) {
    new pos = strfind(cmd," "),buffer[32];
    return strcat(buffer,cmd,32),strdel(buffer,pos,strlen(buffer)),buffer;
    }
    stock Get(cmd[]) {
    new pos = strfind(cmd," ");
    return strdel(cmd,0,pos+1),strval(cmd);
    }
    stock f_Kick(playerid,i) {
    new string[MAX_TEXT];
    format(string,MAX_TEXT,"* Admin %s kickt Spieler %s (ID: %d) wegen %d Verwarnugen!",name[playerid],name[i],i,MAX_WARNINGS);
    return SendClientMessageToAll(rot,string),Kick(i);
    }


    mfg. :thumbup:


    //Edit: Die prints noch entfernt ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    2 Mal editiert, zuletzt von Kaliber ()

  • Endlich einer der es versteht !
    Danke


  • ocmd:warn(playerid,params[])
    {
    if(pInfo[playerid][padmin] >=2)
    {
    new pID,grund[64],string[128];
    if(sscanf(params,"us[64]",pID,grund))return SendClientMessage(playerid,COLOR_GRAU,"Verwendung: /warn [playerid] [grund]");
    if(pID == INVALID_PLAYER_ID)SendClientMessage(playerid,COLOR_GRAU,"Der Spieler ist nicht Online!");
    if(pInfo[pID][pwarn] >=2)
    {
    format(string,sizeof(string),"[AdmCmd]: %s wurde von %s gebannt. Grund: (3Warnungen)",SpielerName(pID),SpielerName(playerid));
    SendClientMessageToAll(COLOR_ROT,string);
    Kick(pID);
    }
    else
    {
    format(string,sizeof(string),"[AdmCmd]: %s wurde von %s gewarnt. Grund: %s",SpielerName(pID),SpielerName(playerid),grund);
    SendClientMessageToAll(COLOR_ROT,string);
    pInfo[pID][pwarn] +=1;
    }
    }
    else return SendClientMessage(playerid,COLOR_GRAU,"Du bist nicht befugt diesen befehl zu nutzen!");
    return 1;
    }

  • @Pascal1998:


    Wieso postest du einen fehlerhaften, lückenvollen Code ohne jeglichen Zusammenhang?!


    Das ist unnötiger Spam, zudem ich schon ein System vorgeschlagen habe!


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S