/* plugin_cavey_warn.sma version 1.1, By Caveman ICQ# 70710878 Please read the readme Also available from http://gosh.ex.ac.uk/~py99jan/ */ #include <core> #include <console> #include <string> #include <admin> #include <adminlib> new ACCESS_WARN; new WARN_BURY; new WARN_SLAY; new WARN_KICK; new WARN_BAN; new Require_reason; new WARN_DELAY; #define MAX_IPADDRESS 32 new STRING_VERSION[MAX_DATA_LENGTH] = "2.50.11"; new UserIP[MAX_PLAYERS][MAX_IPADDRESS]; /*0 the timer, 1 the flag, 2 the TargetIndex*/ new gTimer[MAX_PLAYERS][3]; public admin_warn(HLCommand,HLData,HLUserName,UserIndex) { /*Input variables*/ new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; new User[MAX_NAME_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,User,MAX_NAME_LENGTH); if ( access(ACCESS_WARN, User)==0 ){ getstrvar("admin_reject_msg",Data,MAX_DATA_LENGTH); messageex(User,Data,print_console); return PLUGIN_CONTINUE; } /*Identify user variables*/ new TargetName[MAX_NAME_LENGTH]; new WarnTarget[MAX_DATA_LENGTH]; new OldID; new TargetIdentifier[MAX_AUTHID_LENGTH]; new TargetIndex; /*"Say" variables*/ new Text[MAX_TEXT_LENGTH]; new Reason[MAX_TEXT_LENGTH]; /*File reading and writing*/ new iBanType = bBanByID; strbreak(Data,WarnTarget,Reason, MAX_DATA_LENGTH); if ( ( strlen(Reason) == 0 ) && (Require_reason != 0)) { selfmessage("Please enter a reason for the logs"); selfmessage("Use ^"admin_warn <target> <reason>^""); return PLUGIN_HANDLED; } if (getvar("sv_lan") == 1){ iBanType = bBanByIP; } if (check_user(WarnTarget)==1) { get_username(WarnTarget,TargetName,MAX_NAME_LENGTH); say_command(User,Command,TargetName); if ( check_immunity(TargetName) == 1 ) { snprintf(Text, MAX_TEXT_LENGTH, "You can't issue a warning to %s, you silly bear.", TargetName); say(Text); } else { get_userindex(TargetName, TargetIndex); if ( iBanType == bBanByIP ){ strtok(UserIP[TargetIndex], ":", TargetIdentifier, MAX_IPADDRESS); } else if ( iBanType == bBanByID ){ new SessionID,Team,Dead; playerinfo(TargetIndex,TargetName,MAX_NAME_LENGTH,SessionID,OldID,Team,Dead,TargetIdentifier); } /*Block abuse of command*/ if ( (gTimer[UserIndex][1]!= 0) && (gTimer[UserIndex][2]==TargetIndex) ){ snprintf(Text, MAX_TEXT_LENGTH, "%d", UserIndex); kill_timer(gTimer[UserIndex][0]); gTimer[UserIndex][0] = set_timer("Warn_Timer", (WARN_DELAY), 1, Text); selfmessage("You may not repeatedly warn a player in so short a time!"); slap(User); return PLUGIN_HANDLED; } gTimer[UserIndex][1] = 1; gTimer[UserIndex][0] = set_timer("Warn_Timer", WARN_DELAY, 1, Text); /*End blocking*/ writefile("warnings.ini",TargetIdentifier,-1); new FileSize = filesize("warnings.ini"); new Warnings = 0; for(new Count=1;Count<=FileSize;Count++) { readfile("warnings.ini",Text,Count,MAX_TEXT_LENGTH); if ( (strcasestr(Text,TargetIdentifier) != -1) ) { Warnings++; } } if ( ( Warnings < WARN_BURY ) ){ snprintf(Text, MAX_TEXT_LENGTH, "A WARNING has been issued to^n^n%s^n^nfor %s", TargetName,Reason); centersay(Text,10,10,250,10); slap(TargetName); } else if ( ( Warnings >= WARN_BURY ) && ( Warnings < WARN_SLAY ) ){ snprintf(Text, MAX_TEXT_LENGTH, "A WARNING has been issued to^n^n%s^n^nfor %s", TargetName,Reason); centersay(Text,10,250,250,10); plugin_exec("admin_bury",TargetName); } else if ( ( Warnings >= WARN_SLAY ) && ( Warnings < WARN_KICK ) ){ snprintf(Text, MAX_TEXT_LENGTH, "WARNING %d has been issued to^n^n%s^n^nfor %s", Warnings, TargetName,Reason); centersay(Text,10,250,10,10); slay(TargetName); } else if ( ( Warnings >= WARN_KICK ) && ( Warnings < WARN_BAN ) ){ snprintf(Text, MAX_TEXT_LENGTH, "WARNING %d has been issued to %s^n^nfor %s^n^nPlayer will be kicked", Warnings, TargetName,Reason); centersay(Text,10,250,10,10); snprintf(Text, MAX_TEXT_LENGTH, "%s has been kicked for warning %d of %d", TargetName, Warnings, WARN_KICK); say(Text); snprintf(Text, MAX_TEXT_LENGTH, "After %d warnings you will be banned", WARN_KICK); message(TargetName, Text); kick(TargetName); } else if ( ( Warnings >= WARN_BAN ) ){ snprintf(Text, MAX_TEXT_LENGTH, "WARNING %d has been issued to %s^n^nfor %s^n^nPlayer will be banned", Warnings, TargetName,Reason); centersay(Text,10,250,10,10); snprintf(Text, MAX_TEXT_LENGTH, "You have been permanantly banned from this server"); message(TargetName, Text); snprintf(Text, MAX_TEXT_LENGTH, "%s has been kicked and banned", TargetName); say(Text); ban(TargetName,0,iBanType); kick(TargetName); } gTimer[UserIndex][2] = TargetIndex; } } return PLUGIN_HANDLED; } public Warn_Timer(Timer, Repeat, HLUserName, HLParam){ new Data[MAX_DATA_LENGTH]; new UserIndex; convert_string(HLParam,Data,MAX_DATA_LENGTH); UserIndex = strtonum(Data); gTimer[UserIndex][1] = 0; gTimer[UserIndex][2] = 0; return PLUGIN_CONTINUE; } public plugin_connect(HLUserName, HLIP, UserIndex) { if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) { strinit(UserIP[UserIndex]); convert_string(HLIP, UserIP[UserIndex], MAX_IPADDRESS); } if ( gTimer[UserIndex][0] != 0 ) { kill_timer(gTimer[UserIndex][0]); } return PLUGIN_CONTINUE; } public plugin_disconnect(HLUserName, UserIndex) { if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) { strinit(UserIP[UserIndex]); } if ( gTimer[UserIndex][0] != 0 ) { kill_timer(gTimer[UserIndex][0]); } return PLUGIN_CONTINUE; } public plugin_init() { plugin_registerinfo("Caveys Admin Warn Plugin","Command for warning TKers sequentially.",STRING_VERSION); plugin_registercmd("admin_warn","admin_warn",ACCESS_ALL,"admin_warn ^"<target>^" ^"<reason>^": Issues warnings sequentially with a punishment to get their attention."); new Text[MAX_TEXT_LENGTH]; strinit(Text); get_vaultdata("WARN_BURY",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ WARN_BURY = 4; } else { WARN_BURY = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",WARN_BURY); set_vaultdata("WARN_BURY",Text); strinit(Text); get_vaultdata("WARN_SLAY",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ WARN_SLAY = 5; } else { WARN_SLAY = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",WARN_SLAY); set_vaultdata("WARN_SLAY",Text); strinit(Text); get_vaultdata("WARN_KICK",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ WARN_KICK = 8; } else { WARN_KICK = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",WARN_KICK); set_vaultdata("WARN_KICK",Text); strinit(Text); get_vaultdata("WARN_BAN",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ WARN_BAN = 10; } else { WARN_BAN = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",WARN_BAN); set_vaultdata("WARN_BAN",Text); strinit(Text); get_vaultdata("WARN_REQUIRE_REASON",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ Require_reason = 10; } else { Require_reason = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",Require_reason); set_vaultdata("WARN_REQUIRE_REASON",Text); strinit(Text); get_vaultdata("WARN_DELAY",Text, MAX_TEXT_LENGTH); if (strlen(Text) == 0){ WARN_DELAY = 60; } else { WARN_DELAY = strtonum(Text); } snprintf(Text,MAX_TEXT_LENGTH,"%d",WARN_DELAY); set_vaultdata("WARN_DELAY",Text); new i; for (i=1;i<MAX_PLAYERS;i++){ gTimer[i][0] = 0; gTimer[i][1] = 0; } return PLUGIN_CONTINUE; }