Hay Leute,
ich suche mal ein Temporäres /warn system!
bei 3 Warnungen (Einstellbar im #define MAX_WARNINGS oder so!) wird mann gekickt anstatt gebannt!
MFG
VooDooKid
PS:
Ich bin nicht faul sondern ich bin nicht der beste im Scripten!
Hay Leute,
ich suche mal ein Temporäres /warn system!
bei 3 Warnungen (Einstellbar im #define MAX_WARNINGS oder so!) wird mann gekickt anstatt gebannt!
MFG
VooDooKid
PS:
Ich bin nicht faul sondern ich bin nicht der beste im Scripten!
Wenn du nicht faul bist dann lern das scripten..
Hier gibt dir keiner was vor. es ist einfach ein befehl + sscanf + variablen fertig.
Mach du doch schon mal die Grundlagen im Befehl rein. Also bau den Befehl soweit auf, wie du meinst das es richtig ist, und probierst es dann aus.
Wenn du nicht faul bist dann lern das scripten..
Hier gibt dir keiner was vor. es ist einfach ein befehl + sscanf + variablen fertig.
Jetzt hab ich hier die Hilfreichste Antwort! Danke Slash
//Ironieoff
Spam woanders aber nicht in meinem Post
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];
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;}
?
1. iPad ist nicht schwer, auch wenn man es nicht kann
2. Pack den Befehl doch bitte in ein Pawn Quelltext
3. Teste den Befehl doch einfach aus und gucke, ob der funzt?
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
Geh mal in den Tutorial Bereich und guck nach dem Warn-System von Pascal
Da ist ein Bann, da machst du dann einfach das der spieler geckickt werden soll.
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
Dein Profilbild passt gerade sehr gut zu deiner Art..
b2t.
Poste mal den Code & lies dir mal in der Wiki die Basics durch..
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
mfg.
//Edit: Die prints noch entfernt
Alles anzeigenHier 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
/******************************************************************************/
#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.
//Edit: Die prints noch entfernt ^^</a_samp>
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.