ocmd:votekick(playerid,params[]) {
if(active[0] || active[1]) return SCM(playerid,-1,"Es ist bereits ein Votekick oder Voteban aktiv, warte bis dieser abgelaufen ist!");
new pID,string[144];
if(sscanf(params,"us",pID,string))return SCM(playerid,-1,"Benutze: /votekick [Spieler-ID] [Grund]");
format(string,sizeof string,"Der Spieler %s möchte den Spieler %s via Votekick vom Server kicken! Grund: %s",name[playerid],name[pID],string);
SCMT(-1," "),SCMT(-1,string),SCMT(-1,"Um zu voten gebe nun /yes oder /no ein!"),SCMT(-1,"Dafür hast du 13 Sekunden Zeit.");
return active[0]=true,vote[0]++,did{playerid}=true,SetTimerEx("@EndVote",13000,0,"d",pID);
}
ocmd:voteban(playerid,params[]) {
if(active[0] || active[1]) return SCM(playerid,-1,"Es ist bereits ein Votekick oder Voteban aktiv, warte bis dieser abgelaufen ist!");
new pID,string[144];
if(sscanf(params,"us",pID,string)) return SCM(playerid,-1,"Benutze: /voteban [Spieler-ID] [Grund]");
format(string,sizeof string,"Der Spieler %s möchte den Spieler %s via Voteban vom Server bannen! Grund: %s",name[playerid],name[pID],string);
SCMT(-1," "),SCMT(-1,string),SCMT(-1,"Um zu voten gebe nun /yes oder /no ein!"),SCMT(-1,"Dafür hast du 13 Sekunden Zeit.");
return active[1]=true,vote[0]++,did{playerid}=true,SetTimerEx("@EndVote",13000,0,"d",pID);
}
ocmd:yes(playerid,params[]) {
if(did{playerid}) return SCM(playerid,-1,"Du kannst nur ein mal Voten!");
if(!active[0] && !active[1])return SCM(playerid,-1,"Es ist kein Votekick oder Voteban aktiv!");
return vote[0]++,did{playerid}=true,SCM(playerid,-1,"Du hast für Ja gevotet.");
}
ocmd:no(playerid,params[]) {
if(did{playerid})return SCM(playerid,-1,"Du kannst nur ein mal Voten!");
if(!active[0] && !active[1])return SCM(playerid,-1,"Es ist kein Votekick oder Voteban aktiv!");
return vote[1]++,did{playerid}=true,SCM(playerid,-1,"Du hast für Nein gevotet.");
}
@EndVote(playerid);@EndVote(playerid) {
new string[128];
SCMT(-1,"Die Abstimmung wurde beendet und die Stimmen werden sortiert!"),SCMT(-1," ");
format(string,sizeof string,"Es haben %d Spieler für Ja, und %d Spieler für Nein gestimmt!",vote[0],vote[1]),SCMT(-1,string);
if(vote[0] > vote[1]){
format(string,sizeof string,"Der Spieler %s wurde vom Server %s!",name[playerid],(active[0]) ? ("gekickt") : ("gebannt")),SCMT(-1,string);
if(active[0]) Kick(playerid); else Ban(playerid);
} else format(string,sizeof string,"Der Spieler %s wurde vom Server nicht %s!",name[playerid],(active[0]) ? ("gekickt") : ("gebannt")),SCMT(-1,string);
return ResetVars();
}
stock ResetVars() {
for(new i; i<MAX_PLAYERS; i++) if(did{i}) did{i}=false;
return active[0]=false,active[1]=false,vote[0]=0,vote[1]=0;
}
stock sscanf(string[], format[], {Float,_}:...) {
if (string[0] == 0 || (string[0] == 1 && string[1] == 0)) return format[0];
new formatPos = 0,stringPos = 0,paramPos = 2,paramCount = numargs(),delim = ' ';
while (string[stringPos] && string[stringPos] <= ' ') stringPos++;
while (paramPos < paramCount && string[stringPos]) {
switch (format[formatPos++]) {
case '\0': return 0;
case 'u': {
new end = stringPos - 1,id = 0,bool:num = true,ch;
while ((ch = string[++end]) && ch != delim) {
if (num) {
if ('0' <= ch <= '9') id = (id * 10) + (ch - '0');
else num = false;
}
}
if (num && IsPlayerConnected(id)) setarg(paramPos, 0, id);
else {
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
string[end] = '\0',num = false,id = end - stringPos;
foreach (Player, playerid) {
if (!strcmp(name[playerid], string[stringPos], true, id)) {
setarg(paramPos, 0, playerid),num = true;
break;
}
}
if (!num) setarg(paramPos, 0, INVALID_PLAYER_ID);
string[end] = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
stringPos = end;
}
case 's', 'z': {
new i = 0,ch;
if (format[formatPos]) {
while ((ch = string[stringPos++]) && ch != delim) setarg(paramPos, i++, ch);
if (!i) return -1;
}
else {
while ((ch = string[stringPos++]))setarg(paramPos, i++, ch);
}
stringPos--,setarg(paramPos, i, '\0');
}
default: continue;
}
while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ') stringPos++;
while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' ')) stringPos++;
paramPos++;
}
do {
if ((delim = format[formatPos++]) > ' ') {
if (delim == '\'') {
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z') return delim;
}
}
while (delim > ' ');
return 0;
}
mfg. 