Simple Votekick & Voteban by DJ Deagle

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
  • Hallo,


    aus Langeweile habe ich gerade kurz ein kleines und simples Votekick & Voteban System geschrieben.
    Das System hat folgende Befehle:


    • /votekick [Spieler-ID] [Grund]
    • /voteban [Spieler-ID] [Grund]
    • /yes
    • /no


    Ich habe das System so gut ich kann geschrieben (Ich habe versucht, Ressourcenfreundlich damit umzugehen).
    Viel zu sagen gibts nicht mehr, von daher hier der Pastebin-Link: http://pastebin.com/zrntGabr
    Und hier noch der Hard-Edit von Kaliber: http://pastebin.com/NUzRtgSX


    Credits brauch ich nicht, da falls jemand das System verwendet, die Credits eh wieder gelöscht werden ^^



    lg
    Deagle


    Edits
    /e1: Hard-Edit by Kaliber eingefügt

  • Votkick ist ja in Ordnung aber Voteban finde ich zu viel .. Stell dir vor es sind 3 Leute auf dem Server und 2 User mögen den einen anderen nicht, dann können die den einfach bannen..


    Idee gefällt mir, aber ich finde für einen Ban sollte man nicht voten können. Evt für sonniges Wetter voten oder so.

  • Viel zu viel unsinniger Code enthalten.
    Wozu wird Dini inkludiert, wenn's nicht benutzt wird?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Viele deiner formats und if-clauses etc sind redundant und könnten auf etwa 3/4 - wenn nicht sogar weniger - des Quelltextes reduziert werden.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Viele deiner formats und if-clauses etc sind redundant und könnten auf etwa 3/4 - wenn nicht sogar weniger - des Quelltextes reduziert werden.


    Mh, wenn du das hier meinst:

    Spoiler anzeigen

    if(active == 2) {
    GetPlayerName(target,sendername,sizeof sendername);
    Ban(target);
    format(string,sizeof string,"Es haben %d Spieler für Ja, und %d Spieler für Nein gestimmt!",yes,no);
    SendClientMessageToAll(-1,string);
    format(string,sizeof string,"Der Spieler %s wurde vom Server gebannt!",sendername);
    SendClientMessageToAll(-1,string);
    active = 0; yes = 0; no = 0;
    }

    Ja, man kann es umändern, aber dann würde mir der Code zu unübersichtlich ^^

  • Ja, man kann es umändern, aber dann würde mir der Code zu unübersichtlich


    Die ganze Funktion enthält einige, überflüssige Zeilen. Das sauber zu schreiben wird der Übersichtlichkeit sicher nicht weh tun.. ganz im Gegenteil ;)


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hier mal ein wenig umgeschrieben, ungetestet:


    Spoiler anzeigen
    /*
    * Simple Votekick & Voteban System by DJ Deagle...HARD EDIT by Kaliber
    */
    #include <a_samp>
    #include <ocmd>

    Spoiler anzeigen
    #define SCM SendClientMessage
    #define SCMT SendClientMessageToAll

    Spoiler anzeigen
    static bool:active[2],bool:did[MAX_PLAYERS char],vote[2],name[MAX_PLAYERS][MAX_PLAYER_NAME];

    Spoiler anzeigen
    public OnPlayerConnect(playerid) return GetPlayerName(playerid,name[playerid],MAX_PLAYER_NAME);
    public OnFilterScriptInit() return print("\n-------------------------------------- \nSimple Votekick & Voteban System by DJ Deagle (e) by Kaliber!\n--------------------------------------\n");

    Spoiler anzeigen
    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;
    }


    Kannst ja mal schauen, ob dich das ein wenig inspiriert :D


    mfg. :thumbup:

    ast2ufdyxkb1.png


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