Biohazards Cat Killer Plugin (v1.0) 17.03.2002
-----------------------------------------------------------------------------
Vorwort
--------
Die Idee zu diesem Plugin entstand, als ich vor einiger Zeit auf einem Server
spielte auf dem ein Cheater seinen Unfug trieb. Er war keineswegs verlegen zu
zeigen welche kleinen und großen 'Vorteile' das Cheaten so mit sich bringt.
Neben den mir bereits schon seit längerem bekannten Cheats wie Aimbot, Wall-
hack usw. befand sich aber auch ein mir bis dato unbekannter 'Cheat' darunter.
Undzwar war es ihm möglich nach seinem Tod einfach wieder an einem beliebigen
Startpunkt 'aufzuerstehen' und für sich die Runde von vorn beginnen zu lassen.
Ziemlich entrüstet beschloß ich etwas dagegen zu unternehmen und schrieb jenes
Plugin, und nannte es 'Cat Killer' (da diese Cheater sieben Leben zu haben
scheinen).
Funktionsweise
---------------
Das Plugin speichert in einem Array die Information darüber ob ein Spieler in
der aktuellen Runde bereits gestorben ist, oder nicht. Ist ein Spieler bereits
als tot deklariert worden und tötet einen anderen Spieler oder wird selber ge-
tötet, so muß er jenen Cheat benutzen und wird gekickt oder gebannt (Kann im
Quellcode vor der Kompilierung eingestellt werden).
Das Plugin kann mit dem Befehl
admin_cat_off
ausgeschaltet, und mit dem Befehl
admin_cat_on
wieder eingeschaltet werden.
-----------------------------------------------------------------------------
(c)Copyright 2002 by Biohazard
Code:
/***************************************************************
** Biohazards Cat Killer v 1.0 ******
*** *****
**** INFO: This Plugin detects if a player has more than ****
***** one life in the same round. If so, he will be kicked ***
****** or baned (Depending on your opinion) **
***************************************************************/
#include <core>
#include <console>
#include <string>
#include <admin>
#include <adminlib>
#define ACCESS_CONSOLE 131072
#define ACCESS_CAT 1024
#define CLEAN_SLATE 0
#define SHOW_TIME 5
#define COLOR_R 255
#define COLOR_G 255
#define COLOR_B 255
#define KICK_HIM 1 // If a cheater is detected, he will be kicked
#define BAN_HIM 1 // If a cheater is detected, he will be banned
#define BAN_TIME 10 // Time in minutes a cheater will be banned (set to '0' to ban him for life)
#define DEBUG 0
new STRING_VERSION[MAX_DATA_LENGTH] = "1.0";
new Status[MAX_PLAYERS] = {CLEAN_SLATE,...};
new bEnabled = 1; // 1 - Plugin on, 0 - Plugin off
public admin_cat_off(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bEnabled != 0) {
bEnabled = 0; // Plugin off
say(">>> Cat Killer Plugin has been disabled <<<");
snprintf(Text, MAX_TEXT_LENGTH, "Cat Killer Plugin has been disabled by %s", User);
log(Text);
}
else selfmessage("Cat Killer Plugin already disabled");
return PLUGIN_HANDLED;
}
public admin_cat_on(HLCommand, HLData, HLUserName, UserIndex)
{
new User[MAX_NAME_LENGTH];
new Text[MAX_TEXT_LENGTH];
convert_string(HLUserName, User, MAX_NAME_LENGTH);
if (bEnabled != 1) {
bEnabled = 1; // Plugin on
say(">>> Cat Killer Plugin has been enabled <<<");
snprintf(Text, MAX_TEXT_LENGTH, "Cat Killer Plugin has been enabled by %s", User);
log(Text);
}
else selfmessage("Cat Killer Plugin already enabled");
return PLUGIN_HANDLED;
}
public ck_HandleKill(HLCommand,HLData,HLUserName,UserIndex)
{
if (!bEnabled)
return PLUGIN_CONTINUE;
new Data[MAX_DATA_LENGTH];
new iIDK;
new iIDV;
new sID1[3];
new sID2[3];
new iUserID;
new iWONID;
new iTeamK;
new iTeamV;
new Killer[MAX_NAME_LENGTH];
new Victim[MAX_NAME_LENGTH];
new logText[MAX_DATA_LENGTH];
new Text[MAX_DATA_LENGTH];
new InfoText[MAX_DATA_LENGTH];
///////////////////////////// DEBUG //////////////////////////////
#if DEBUG
status()
#endif
///////////////////////////// DEBUG //////////////////////////////
convert_string(HLData, Data, MAX_DATA_LENGTH);
strsplit(Data, " ", sID1, 3, sID2, 3);
iIDK = strtonum(sID1);
iIDV = strtonum(sID2);
if(playerinfo(iIDK, Killer, MAX_NAME_LENGTH, iUserID, iWONID, iTeamK))
{
if(playerinfo(iIDV, Victim, MAX_NAME_LENGTH, iUserID, iWONID, iTeamV))
{
if (Status[iIDV] == 0) {
Status[iIDV] = 1;
}
// if the victim was allready dead
else if (Status[iIDV] == 1) {
log("-----------------------------");
log("We got a cheater !");
snprintf(logText,MAX_DATA_LENGTH,"-> %s", Victim);
log(logText);
log("-----------------------------");
messageex(Killer,"",print_console);
snprintf(Text,MAX_DATA_LENGTH,"We dont want cheaters in here !");
messageex(Victim,Text,print_console);
snprintf(InfoText,MAX_DATA_LENGTH,"%s is a cheater,^nso he was kicked !", Victim);
centersay(InfoText,SHOW_TIME,COLOR_R,COLOR_G,COLOR_B);
#if BAN_HIM
ban(Victim, BAN_TIME);
#endif
#if KICK_HIM
kick(Victim);
#endif
}
// dead people cant kill players
if (Status[iIDK] == 1) {
log("-----------------------------");
log("We got a cheater !");
snprintf(logText,MAX_DATA_LENGTH,"-> %s", Killer);
log(logText);
log("-----------------------------");
messageex(Killer,"",print_console);
snprintf(Text,MAX_DATA_LENGTH,"We dont want cheaters in here !");
messageex(Killer,Text,print_console);
snprintf(InfoText,MAX_DATA_LENGTH,"%s is a cheater,^nso he was kicked !", Killer);
centersay(InfoText,SHOW_TIME,COLOR_R,COLOR_G,COLOR_B);
#if BAN_HIM
ban(Killer, BAN_TIME);
#endif
#if KICK_HIM
kick(Killer);
#endif
}
}
}
///////////////////////////// DEBUG //////////////////////////////
#if DEBUG
status()
#endif
///////////////////////////// DEBUG //////////////////////////////
return PLUGIN_CONTINUE;
}
public ck_HandleWorld(HLCommand,HLData,HLUserName,UserIndex)
{
if (!bEnabled)
return PLUGIN_CONTINUE;
new Params[MAX_DATA_LENGTH];
new i;
convert_string(HLData,Params,MAX_DATA_LENGTH);
switch( Params[ 6 ] )
{
case 'S':
{
for(i=0; i<MAX_PLAYERS; i++) {
Status[i] = CLEAN_SLATE;
}
return PLUGIN_CONTINUE;
}
}
return PLUGIN_CONTINUE;
}
///////////////////////////// DEBUG //////////////////////////////
#if DEBUG
status()
{
printf("---- DEBUG ----^n");
printf("%d %d %d %d %d %d^n",Status[1],Status[2],Status[3],Status[4],Status[5],Status[6]);
printf("---- DEBUG ----^n");
new DbgText[MAX_DATA_LENGTH];
snprintf(DbgText,MAX_DATA_LENGTH,"%i %i %i %i %i %i",Status[1],Status[2],Status[3],Status[4],Status[5],Status[6]);
say(DbgText);
}
#endif
///////////////////////////// DEBUG //////////////////////////////
public plugin_connect(HLUserName, HLIP, UserIndex)
{
if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) {
Status[UserIndex] = CLEAN_SLATE;
}
return PLUGIN_CONTINUE;
}
public plugin_disconnect(HLUserName, UserIndex)
{
if (UserIndex >= 1 && UserIndex <= MAX_PLAYERS) {
Status[UserIndex] = CLEAN_SLATE;
}
return PLUGIN_CONTINUE;
}
public plugin_init()
{
plugin_registerinfo("Biohazards Cat Killer Plugin","Kicks and/or bans player who have more than one life.",STRING_VERSION);
plugin_registercmd("ck_HandleKill", "ck_HandleKill", ACCESS_CONSOLE);
plugin_registercmd("ck_HandleWorld", "ck_HandleWorld", ACCESS_CONSOLE);
plugin_registercmd("admin_cat_off", "admin_cat_off", ACCESS_CAT, "admin_cat_off: Enables watching for cats.");
plugin_registercmd("admin_cat_on", "admin_cat_on", ACCESS_CAT, "admin_cat_on: Disables watching for cats.");
exec("logd_reg 57 admin_command ck_HandleKill");
exec("logd_reg 62 admin_command ck_HandleWorld");
return PLUGIN_CONTINUE;
}
Ich denke dazu brauche ich nichtmehr viel zu sagen, wenn jemand Fragen an mich hat kann er mir gerne eine Private Message schicken oder hier posten.
Nachtrag: Ich habe alle Tabulatorzeichen im Quellcode in Leerzeichen umgewandelt (Ultra Edit bietet da eine sehr hilfreiche Funktion an), so sollte es beim Kompilieren weniger WARNINGS geben.
Bio