need: Range-Ban

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
  • leute, möchte zu gerne einen rangeban haben.
    also die funktion gelingt ja auch im RCON:
    /rcon banip 00.00*.* (oder wie das war.)
    sondern so, dass man wie beim (selfmade logischerweiße) /ban [playerid] cmd, einfach nur die ID / name eingeben muss.
    wie müsste man das machen?
    GetPlayerIp und dann? :D


    wäre echt nett von euch.
    (könnte man gut gebrauchen :))

    Einmal editiert, zuletzt von Loadup[GER] ()

  • <--- hats in scriptwünsche geschrieben, bedeutet, das ich es nicht selbst auf die Kette bekomme ^^
    (im grunde frage ich hier nur nach dem komplettem CMD, somit sehe ich mir auch den code an.)

    Einmal editiert, zuletzt von Loadup[GER] ()

  • oh gott, dann muss ich denke ich auch wieder was mit definieren :rolleyes:
    naja danke schonmal. *eigenitiative nutz' & nach SeifAdmin such'* ^^


    so hier:

    [..............]
    if(strcmp(cmd, "/rangeban", true) == 0) // Range-bans a player with the amount of ranges entered.
    {
    if (AccountInfo[playerid][AdminLevel] >= 4)
    {
    tmp = strtok(cmdtext,idx);
    if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /rangeban [playername/id] [ranges(2 max)]");
    new ip[20],ban[128];
    new giveplayerid = ReturnUser(tmp);
    if (IsPlayerConnected(giveplayerid))
    {
    tmp = strtok(cmdtext,idx);
    if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /rangeban [playername/id] [RANGES(2 max)]");
    new ranges = strval(tmp);
    if (ranges < 0 || ranges > 2) return SendClientMessage(playerid, RED, "Minimum ranges: 0 | Maximum ranges: 2");
    if (ranges == 0)
    {
    Ban(giveplayerid);
    }
    GetPlayerName(giveplayerid, giveplayername, sizeof giveplayername);
    GetPlayerIp(giveplayerid, ip, sizeof ip);
    new count = 1;
    for(new i = strlen(ip); i > 0; i--)
    {
    if (ip[i] == '.')
    {
    if (count == ranges)
    {
    format(ban, sizeof ban, "banip %s", ip);
    SendRconCommand(ban);
    break;
    }
    else count++;
    }
    else ip[i] = '*';
    }
    format(ban, sizeof ban, "%s has been banned with the ip '%s'", giveplayername, ip);
    SendClientMessage(playerid, GREEN, ban);
    }
    else
    {
    format(string, sizeof(string), "%i is not an active player.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "You're not a lead admin !");
    return 1;
    }


    ich guck mal nach obs so per copy&paste klappt :P (wird aber net der fall sein)+
    //EDIT:
    achso ja noch zu meinem admin sciprt anpassen^^
    //EDIT:
    hm ... angepasst:
    //===========================RANGE-BAN ADMIN-CMD LEVEL-5!!!======================================
    if(strcmp(cmd, "/rangeban", true) == 0) // Range-bans a player with the amount of ranges entered.
    {
    if(PlayerInfo[playerid][pAdmin] == 3)
    {
    tmp = strtok(cmdtext,idx);
    if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /rangeban [playername/id] [ranges(2 max)]");
    new ip[20],ban[128];
    new giveplayerid = ReturnUser(tmp);
    if (IsPlayerConnected(giveplayerid))
    {
    tmp = strtok(cmdtext,idx);
    if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /rangeban [playername/id] [RANGES(2 max)]");
    new ranges = strval(tmp);
    if (ranges < 0 || ranges > 2) return SendClientMessage(playerid, RED, "Minimum ranges: 0 | Maximum ranges: 2");
    if (ranges == 0)
    {
    Ban(giveplayerid);
    }
    GetPlayerName(giveplayerid, giveplayername, sizeof giveplayername);
    GetPlayerIp(giveplayerid, ip, sizeof ip);
    new count = 1;
    for(new i = strlen(ip); i > 0; i--)
    {
    if (ip[i] == '.')
    {
    if (count == ranges)
    {
    format(ban, sizeof ban, "banip %s", ip);
    SendRconCommand(ban);
    break;
    }
    else count++;
    }
    else ip[i] = '*';
    }
    format(ban, sizeof ban, "%s has been banned with the ip '%s'", giveplayername, ip);
    SendClientMessage(playerid, GREEN, ban);
    }
    else
    {
    format(string, sizeof(string), "%i is not an active player.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "You're not a lead admin !");
    return 1;
    }


    //================================SSCENF====================================
    dcmd(kick,4,cmdtext);
    dcmd(ban,3,cmdtext);
    dcmd(sethealth,9,cmdtext);
    dcmd(announce,8,cmdtext);
    return 0;
    }
    //============================SETHEALTH===========================
    dcmd_sethealth(playerid,params[]) {
    [.......................]


    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(792) : error 017: undefined symbol "ReturnUser"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(803) : error 017: undefined symbol "giveplayername"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(803) : error 017: undefined symbol "giveplayername"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(820) : error 017: undefined symbol "giveplayername"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(825) : error 017: undefined symbol "string"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(825) : error 017: undefined symbol "string"
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(825) : error 029: invalid expression, assumed zero
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(825) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    8 Errors.


    EDIT:
    so ...
    nur noch ein error!:
    D:\Programme\SAMP Server\gamemodes\DM_RL.pwn(797) : error 017: undefined symbol "ReturnUser"
    wie muss ich das nun definieren? XD
    unter onplayercommandtext das ist mir klar. aber wie genau?
    sry bin ein noob in sachen definieren.

    Einmal editiert, zuletzt von Loadup[GER] ()

  • welches stock return?
    denke mal womit das definiert wurde (soweit ich weiß ist ein stock ne art "public") bg xD


    //EDIT:
    hehe ... keins drin^^ (doch, habs erst übersehen.)
    also hab ich mich vertan.
    sry, bitte erklär es nochmal.^^


    //EDIT:
    wie mach ich es nun das er wenn er (NUR) den namen eines spieler's nimmt, das er dann die IP ermittelt und die ersten paar zahlen (die für die range zuständig sind) bannt?


    pls help. wie gesagt das ist ein wunsch ^^ büdde^^
    bin mal offline,
    hoffe mir kann jemand helfen :P
    (nochmal:
    ich will das wenn man nur /rangeban [playerid] eingibt,das dann irgendwie die ip festgestellt wird, und dann nur die rangezahlenwerte bannt. wäre echt nett :))

    5 Mal editiert, zuletzt von Loadup[GER] ()

  • Für dieses Beispiel brauchst du getstr (Nützliche Codeschnipsel)


    //onplayercommandtext
    new msg[128];
    getstr("%w", cmdtext, msg, 0);
    if(!strcmp(msg, "/nameban"))
    {
    getstr("%w", cmdtext, msg, 1);
    if(!msg[0])
    return SendClientMessage(playerid, 0xFF0000AA, "/nameban [Spielername]");
    new ip[32], ip_range[8];
    if(!GetIpByName(msg, ip))
    return SendClientMessage(playerid, 0xFF0000AA, "Unbekannter User!");
    getstr(".", ip, ip_range, 0);
    format(msg, sizeof msg, ip_range);
    getstr(".", ip, ip_range, 1);
    format(msg, sizeof msg, "%s.%s.*.*", msg, ip_range);
    format(msg, sizeof msg, "banip %s", msg);
    SendRconCommand(msg);
    SendClientMessage(playerid, 0xFF6900AA, "Spieler erfolgreich gebannt!");
    return 1;
    }
    // anywhere
    GetIPbyName(const name[], ip[], length = sizeof ip)
    {
    new msg[24];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    GetPlayerName(i, msg, 24);
    if(!strcmp(msg, name))
    {
    GetPlayerIp(i, ip, length);
    return 1;
    }
    }
    return 0;
    }


    Ungetestet, Fehler kannst du aber selbst fixen. :>

  • danke ;)
    gut, das ich sehr wichtige sagen (wie hier,) oder strok, dcmd (blabla^^) .... habe.


    *testing*


    //EDIT:

    Error:(bin zu doof das selbst zu lösen.^^)


    waren eig. 6 errors, konnte es herunter setzen :/


    //EDIT:
    und hier so hab ich's unten hin gemacht:


    2 Mal editiert, zuletzt von Loadup[GER] ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ah ok danke.
    /EDIT: ( mach ich schonmal für gleich :P )
    geht, jetzt der praktische teil xD
    selfmade ban (kann man es auch machen das man sich net selbst bannen kann? also das der die ID von playerid abruft und wenn die ID dann von dem CMD Admin ist, sagt der das es net geht und returnt das.?)


    //EDIT:
    wenns doch nur so einfach wäre!
    geht net :(
    wenn ich nur '/Rangeban' eingebe kommt 'unbekannter user!' dannach versuchte ich 'Rangeban Player(so heiße ich.)' dannach: 'unbekannter user!' :(
    dannach mal '/Rangeban 0' auch wieder 'Unbekannter User!'

    2 Mal editiert, zuletzt von Loadup[GER] ()

  • wie meinst du das?
    ich versteh nicht, worauf du hinauswillst.
    ab dem wort "msg" (was ja für message steht" hab ich leider nichts mehr verstanden, sry^^

    2 Mal editiert, zuletzt von Loadup[GER] ()

  • ok, und wie soll ich das machen? DE ÄM AH, meld dich bitte nochmal :) oder jemand anders, aber ich brauche das bitte!


    rofl?
    kann mir vllt jemand per teamviewers helfen?
    vllt liegts ja woanders dran, denn mein dcmd /announce hat das selbe problem!


    //EDIT:
    war der BR code zu sehen. (wieso kommt das manchmal? O.o_o.O)
    wie gesagt, bitte um hilfe!

    7 Mal editiert, zuletzt von Loadup[GER] ()

  • Ich weiß das thema ist schon 298 Tage her, da ich das aber gesucht habe, und ich das anderen auch mitteilen wollte, da ich einige anfragen bekommen hatte hier nochmal der richtige Code:
    new ip[32], ip_range[8];
    new msg[256];
    GetPlayerIp(playerid, ip, 32);
    getstr(".", ip, ip_range, 0);
    format(msg, sizeof msg, ip_range);
    getstr(".", ip, ip_range, 1);
    format(msg, sizeof msg, "%s.%s*.*", msg, ip_range);
    format(msg, sizeof msg, "banip %s", msg);
    SendRconCommand(msg);


    So Funktioniert es bei mir.
    Mit format(msg, sizeof msg, "%s.%s.*.*", msg, ip_range);
    hat er eine ip 192.168..2.1 gebannt. ALso mit 2x ..
    Dann hab ich da einen punkt wegenommen, und es hat funktioniert.