Last active
June 6, 2023 17:21
-
-
Save rk1432/399d90f6fa18cbda416dbe538b104932 to your computer and use it in GitHub Desktop.
black list for CS 1.6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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[szLastName], 31, "%s", getName(id)); | |
ArraySetArray(g_iArray, k, szTemp); | |
} | |
} | |
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) | |
{ | |
if(!(get_user_flags(id) & ADMIN_BAN)) | |
{ | |
client_print(id, print_chat, "you have no access to this menu"); | |
return PLUGIN_HANDLED; | |
} | |
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(key)) == -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; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment