Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Plugin generated by AMXX-Studio */
- #include <amxmodx>
- #include <amxmisc>
- #define PLUGIN "blacklist"
- #define VERSION "1.0"
- #define AUTHOR "rk"
- #define PREFIX "AMXX"
- #define DEF_TIME 60
- #define REMOVE_TASK 89794
- #define MINUTE 1
- #define HOUR 60
- #define DAY 1440
- #define MONTH 43200
- #define YEAR 518400
- new const szFile[] = "addons/amxmodx/data/blacklist.txt";
- enum _: EInfo
- {
- szSID[32],
- szLastName[32],
- szLastOnline[32],
- g_iBanTime
- }
- new g_iTime[33], g_iLooking[33];
- new Array: g_iArray;
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_clcmd("say /blacklist", "cmdBlackList");
- register_clcmd("choose_time", "cmdChooseTime");
- g_iArray = ArrayCreate(EInfo);
- cmdLoad();
- new minimal = getMinimal();
- if(minimal!=-1)
- {
- new szTemp[EInfo], szP[3];
- szP[0] = minimal;
- ArrayGetArray(g_iArray, minimal, szTemp);
- set_task(float(szTemp[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
- }
- }
- public plugin_end()
- {
- cmdSave();
- ArrayDestroy(g_iArray);
- }
- public plugin_natives()
- {
- register_native("isBanned", "native_isBanned");
- }
- public native_isBanned(params)
- {
- if(params < 1)
- {
- return PLUGIN_CONTINUE;
- }
- new id = get_param(1);
- if(isExists(getSID(id)))
- return 1;
- return 0;
- }
- public client_disconnect(id)
- {
- new k = isExists(getSID(id));
- if(k != -1)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, k, szTemp);
- formatex(szTemp, charsmax(szTemp), "%s", getName(id));
- }
- }
- public cmdRemoveMinimal(szParm[])
- {
- new key = szParm[0], szTemp[EInfo];
- ArrayGetArray(g_iArray, key, szTemp);
- new k = isOnline(szTemp[szSID]);
- if(k==-1)
- client_print(0, print_chat, "%s's ban is over", szTemp[szLastName]);
- else
- client_print(0, print_chat, "%s's ban is over", getName(k));
- ArrayDeleteItem(g_iArray, key);
- new minimal = getMinimal();
- if(minimal!=-1)
- {
- new szTemp1[EInfo], szP[3];
- szP[0] = minimal;
- ArrayGetArray(g_iArray, minimal, szTemp1);
- set_task(float(szTemp1[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
- }
- }
- public cmdChooseTime(id)
- {
- static szMessage[32];
- read_argv(1, szMessage, charsmax(szMessage));
- g_iTime[id] = str_to_num(szMessage);
- cmdAddInfo(id, g_iLooking[id]);
- return PLUGIN_HANDLED;
- }
- public cmdBlackList(id)
- {
- if( !(get_user_flags(id) & ADMIN_BAN))
- {
- client_print(id, print_chat, "you have no access to this menu");
- return PLUGIN_HANDLED;
- }
- g_iLooking[id] = -1;
- new szText[256];
- formatex(szText, charsmax(szText), "\r[%s]\w Black List - main menu", PREFIX);
- new menu = menu_create(szText, "cmdBlackListHandler");
- menu_additem(menu, "\wAdd a person");
- formatex(szText, charsmax(szText), "\wRemove a person \y[%i]", ArraySize(g_iArray));
- menu_additem(menu, szText);
- menu_display(id, menu);
- return PLUGIN_HANDLED;
- }
- public cmdBlackListHandler(id, menu, item)
- {
- menu_destroy(menu);
- if(item == MENU_EXIT)
- {
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0: cmdAdd(id);
- case 1:
- {
- cmdRemove(id);
- }
- }
- return PLUGIN_HANDLED;
- }
- public cmdAdd(id)
- {
- g_iLooking[id] = -1;
- new szText[256], players[32], len, szParm[3];
- formatex(szText, charsmax(szText), "\r[%s]\w Black List - add menu", PREFIX);
- new menu = menu_create(szText, "cmdAddHandler");
- getPlayersID(players, len);
- if(!len)
- {
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- for(new i=0; i<sizeof(players); i++)
- {
- if(!is_user_connected(players[i]))
- continue;
- num_to_str(players[i], szParm, charsmax(szParm));
- formatex(szText, charsmax(szText), "%s", getName(players[i]));
- menu_additem(menu, szText, szParm);
- }
- menu_display(id, menu);
- return PLUGIN_HANDLED;
- }
- public cmdAddHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- menu_destroy(menu);
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- new key = MenuKey(menu, item);
- g_iTime[id] = DEF_TIME;
- if(isExists(getSID(id)) == -1)
- cmdAddInfo(id, key);
- else
- client_print(id, print_chat, "this player is already banned.");
- return PLUGIN_HANDLED;
- }
- public cmdAddInfo(id, player)
- {
- g_iLooking[id] = player;
- new szText[256], szParm[3];
- formatex(szText, charsmax(szText), "\r[%s]\w Black List - adding %s", PREFIX, getName(player));
- new menu = menu_create(szText, "cmdAddInfoHandler");
- new cb = menu_makecallback("disabled");
- formatex(szText, charsmax(szText), "\wName: %s", getName(player));
- menu_additem(menu, szText, .callback = cb);
- formatex(szText, charsmax(szText), "\wTime: %s", GenerateTime(g_iTime[id]));
- menu_additem(menu, szText);
- num_to_str(player, szParm, charsmax(szParm));
- menu_additem(menu, "\rAdd!", szParm);
- menu_display(id, menu);
- return PLUGIN_HANDLED;
- }
- public cmdAddInfoHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- g_iTime[id] = DEF_TIME;
- g_iLooking[id] = -1;
- cmdAdd(id);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 1:
- {
- client_cmd(id, "messagemode choose_time");
- }
- case 2:
- {
- new key = MenuKey(menu, 2);
- cmdFinalAdd(id, key, g_iTime[id]);
- }
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- public cmdRemove(id)
- {
- new szText[256];
- new size = ArraySize(g_iArray);
- if(size == 0)
- {
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- formatex(szText, charsmax(szText), "\r[%s]\w Black List - remove menu (%i total bans)", PREFIX, size);
- new menu = menu_create(szText, "cmdRemoveHandler");
- for(new i=0; i<size; i++)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, i, szTemp);
- formatex(szText, charsmax(szText), "%s", szTemp[szLastName]);
- new k = isOnline(szTemp[szSID]);
- if(k != -1)
- formatex(szText, charsmax(szText), "%s", getName(k));
- menu_additem(menu, szText);
- }
- menu_display(id, menu, 0);
- return PLUGIN_HANDLED;
- }
- public cmdRemoveHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- cmdRemoveInfo(id, item);
- return PLUGIN_HANDLED;
- }
- public cmdRemoveInfo(id, player)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, player, szTemp);
- new szText[256], Name[32], szParm[3];
- new k = isOnline(szTemp[szSID]);
- formatex(Name, charsmax(Name), "%s", szTemp[szLastName]);
- if(k != -1)
- formatex(Name, charsmax(Name), "%s", getName(k));
- formatex(szText, charsmax(szText), "\r[%s]\w Black List - info %s", PREFIX, Name);
- new menu = menu_create(szText, "cmdRemoveInfoHandler");
- new cb = menu_makecallback("disabled");
- formatex(szText, charsmax(szText), "\wName: %s", Name);
- menu_additem(menu, szText, .callback = cb);
- if(k == -1)
- formatex(szText, charsmax(szText), "\wLast Online: %s", szTemp[szLastOnline]);
- else
- formatex(szText, charsmax(szText), "\wLast Online: \yONLINE");
- menu_additem(menu, szText, .callback = cb);
- new temp = (szTemp[g_iBanTime] - get_systime()) / 60;
- if(!temp)
- temp = 1;
- formatex(szText, charsmax(szText), "\wExpired Time: %s^n", GenerateTime(temp));
- menu_additem(menu, szText, .callback = cb);
- num_to_str(player, szParm, charsmax(szParm));
- menu_additem(menu, "\rRemove!", szParm);
- menu_display(id, menu);
- return PLUGIN_HANDLED;
- }
- public cmdRemoveInfoHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- cmdRemove(id);
- return PLUGIN_HANDLED;
- }
- if(item == 3)
- {
- new key = MenuKey(menu, 2);
- cmdFinalRemove(id, key, );
- }
- return PLUGIN_HANDLED;
- }
- public cmdFinalAdd(id, player, Time)
- {
- if(isExists(getSID(player)) != -1)
- {
- client_print(id, print_chat, "this player is already banned.");
- return PLUGIN_HANDLED;
- }
- new szTemp[EInfo];
- formatex(szTemp[szLastName], 31, "%s", getName(player));
- formatex(szTemp[szSID], 31, "%s", getSID(player));
- get_time("%m/%d/%Y-%H:%M:%S", szTemp[szLastOnline], charsmax(szTemp[szLastOnline]));
- szTemp[g_iBanTime] = Time*60 + get_systime();
- ArrayPushArray(g_iArray, szTemp);
- client_print(0, print_chat, "%s added %s to blacklist (time: %i)", getName(id), getName(player), Time);
- remove_task(REMOVE_TASK);
- new minimal = getMinimal();
- if(minimal != -1)
- {
- new szTemp1[EInfo], szP[3];
- szP[0] = minimal;
- ArrayGetArray(g_iArray, minimal, szTemp1);
- set_task(float(szTemp1[g_iBanTime] - get_systime()), "cmdRemoveMinimal",REMOVE_TASK, szP, charsmax(szP));
- }
- g_iTime[id] = DEF_TIME;
- g_iLooking[id] = -1;
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- public cmdFinalRemove(id, key, S[])
- {
- if(isExists(szTemp[szSID]) == -1)
- {
- client_print(id, print_chat, "this player is no longer banned.");
- return PLUGIN_HANDLED;
- }
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, key, szTemp);
- new k = isOnline(szTemp[szSID]);
- if(k==-1)
- client_print(0, print_chat, "%s removed %s's ban", getName(id), szTemp[szLastName]);
- else
- client_print(0, print_chat, "%s removed %s's ban", getName(id), getName(k));
- ArrayDeleteItem(g_iArray, key);
- cmdBlackList(id);
- return PLUGIN_HANDLED;
- }
- public disabled(id, menu, item)
- {
- return ITEM_DISABLED;
- }
- public getPlayersID(players[], &l)
- {
- new p[32], num= 0, temp = 0;
- get_players(p, num);
- for(new i=0; i<num; i++)
- {
- if(isExists(getSID(p[i])) == -1 && is_user_connected(p[i]))
- {
- players[temp++] = p[i];
- }
- }
- l = temp
- }
- public GenerateTime(t)
- {
- new szText[256], szTemp[100];
- new year, month, day, hour, minute;
- year = t/YEAR;
- t-=year*YEAR;
- month = t/MONTH;
- t-=month*MONTH;
- day = t/DAY;
- t-=day*DAY;
- hour = t/HOUR;
- t-=hour*HOUR;
- minute = t/MINUTE;
- if(year)
- {
- formatex(szTemp, charsmax(szTemp), "%i Year%s", year, year>1? "s" : "");
- format(szText, charsmax(szText), "%s %s ", szText, szTemp);
- }
- if(month)
- {
- formatex(szTemp, charsmax(szTemp), "%i Month%s", month, month>1? "s" : "");
- format(szText, charsmax(szText), "%s %s ", szText, szTemp);
- }
- if(day)
- {
- formatex(szTemp, charsmax(szTemp), "%i Day%s", day, day>1? "s" : "");
- format(szText, charsmax(szText), "%s %s ", szText, szTemp);
- }
- if(hour)
- {
- formatex(szTemp, charsmax(szTemp), "%i Hour%s", hour, hour>1? "s" : "");
- format(szText, charsmax(szText), "%s %s ", szText, szTemp);
- }
- if(minute)
- {
- formatex(szTemp, charsmax(szTemp), "%i Minute%s", minute, minute>1? "s" : "");
- format(szText, charsmax(szText), "%s %s", szText, szTemp);
- }
- return szText;
- }
- public cmdLoad()
- {
- new f = fopen(szFile, "rt");
- new szData[500];
- while(fgets(f, szData, charsmax(szData)))
- {
- new szTemp[EInfo], steam[32], name[32], online[32], t[32];
- parse(szData, steam, 31, name, 31, online,31, t,31);
- formatex(szTemp[szSID], 31, "%s", steam);
- formatex(szTemp[szLastName], 31, "%s", name);
- formatex(szTemp[szLastOnline], 31, "%s", online);
- szTemp[g_iBanTime] = str_to_num(t);
- ArrayPushArray(g_iArray, szTemp);
- }
- fclose(f);
- }
- public cmdSave()
- {
- new f = fopen(szFile, "wt");
- new szData[500];
- while(ArraySize(g_iArray) > 0)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, 0 , szTemp);
- formatex(szData, charsmax(szData), "^"%s^" ^"%s^" ^"%s^" ^"%i^"", szTemp[szSID], szTemp[szLastName], szTemp[szLastOnline], szTemp[g_iBanTime]);
- fputs(f, szData);
- ArrayDeleteItem(g_iArray, 0);
- }
- fclose(f);
- }
- public getMinimal()
- {
- new minimalTime = -1, minimalKey = -1, size = ArraySize(g_iArray);
- for(new i=0; i<size; i++)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, i, szTemp);
- if(minimalTime == -1 || szTemp[g_iBanTime] < minimalTime)
- {
- minimalTime = szTemp[g_iBanTime];
- minimalKey = i;
- }
- }
- return minimalKey;
- }
- stock MenuKey(menu, item)
- {
- new szData[10];
- new access, callback;
- menu_item_getinfo(menu, item, access, szData, charsmax(szData), _, _, callback);
- return str_to_num(szData);
- }
- stock isExists(SID[])
- {
- new size = ArraySize(g_iArray);
- for(new i=0; i<size; i++)
- {
- new szTemp[EInfo];
- ArrayGetArray(g_iArray, i, szTemp);
- if(equali(szTemp[szSID], SID))
- return i;
- }
- return -1;
- }
- stock isOnline(SID[])
- {
- new players[32], num;
- get_players(players, num);
- for(new i=0; i<num; i++)
- {
- if(equali(getSID(players[i]), SID))
- return players[i];
- }
- return -1;
- }
- stock getName(id)
- {
- new szName[32];
- get_user_name(id, szName, charsmax(szName));
- return szName;
- }
- stock getSID(id)
- {
- new szS[32];
- get_user_authid(id, szS, charsmax(szS));
- return szS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement