|
发表于 2003-10-14 21:59:59
|
显示全部楼层
|阅读模式
来自 中国–湖北–襄阳
这个插件的功能是检查服务器中名字包括[NO C-D]的PLAYER的比分,超过某个限制就需要KICK,可以解决人气和CD之间的关系,请编程大侠们帮帮忙!谢谢!设定的有奖金,不过如果哪位大侠可以解决,请直接共享给大家一起使用,再次感谢!
这个插件目前的主要问题就是无法识别目前的steamid,官方地址如下:
http://amxmod.net/forums/viewtop ... der=asc&start=0
为了顶这个帖子还被 AMXMOD.NET 版主警告了一次,真是没办法呀........
// PsychoMediator, Copyright 2002, PsychoGuard. No warranties.
// Props to JustinHoMi for his Mediator plugin.
//
// This is a simple C-D Mediator plugin. Players without C-D
// can be warned and kicked after a certain amount of kills.
// The decision can also be based on their K/D ratio.
// Checks are performed on round start.
// Already kicked players are remembered by their wonid and
// are immediately required to run C-D after they reconnected.
//
// The plugin stores remembered wonids in
// .../addons/amx/pdmed.ini
//
// Cvars:
// pd_mediator_kills - default 9
// After that many kills players without C-D maybe kicked.
// See mode "c" and pd_mediator_ratio.
//
// pd_mediator_warn - default 5
// After that many kills players without C-D maybe warned.
// See mode "c" and pd_mediator_ratio.
//
// pd_mediator_ratio - default 2.0
// If mode "c" is active, players are not warned or kicked
// based only on their kills, but also on ther kill/death-
// ratio. If they have pd_mediator_kills many kills *and*
// their K/D is higher than pd_mediator_ratio they are
// kicked. The same goes for warnings.
//
// pd_mediator_mode - default "ab"
// a - Enabled. Without this flag the mediator will not
// do any kicks or warnings.
// b - Warn players before being kicked
// c - Decide by K/D ratio
//
// Commands:
// pd_mediator_add <part of nick>
// Requires the player to immediately use Cheating-Death,
// without the neccessity to be kicked before.
#include <amxmod>
#include <amxmisc>
#define MAX_KICK_HISTORY 128
#define MODE_ENABLED 1 << 0
#define MODE_WARN 1 << 1
#define MODE_RATIO 1 << 2
#define REASON_ALREADY_KICKED 1
#define REASON_NORMAL_KICK 2
new bool:is_invalid[33];
new kicked_wonids[MAX_KICK_HISTORY];
new kick_count = 0;
new mode_flags = 0;
new max_kills = 0;
new max_warn = 0;
new settings_file[] = "addons/amx/pdmed.ini";
already_kicked(id) {
new wonid = get_user_wonid(id);
for (new i = 0; i < kick_count; i++) {
if (kicked_wonids == wonid)
return true;
}
return false;
}
check_player(id) {
new kills = get_user_frags(id);
new deaths = get_user_deaths(id);
if (deaths == 0) deaths = 1;
new name[32];
get_user_name(id, name, 31);
log_message("[PD-MED] Checking player '%s', K/D: %.2f", name, float(kills) / float(deaths));
if (already_kicked(id)) {
kick_player(id, REASON_ALREADY_KICKED);
} else if (kills > max_kills) {
if (! (mode_flags & MODE_RATIO)
|| (float(kills) / float(deaths)) >= get_cvar_float("pd_mediator_ratio")) {
remember_player(id);
kick_player(id, REASON_NORMAL_KICK);
}
} else if (kills > max_warn && (mode_flags & MODE_WARN)) {
if (! (mode_flags & MODE_RATIO)
|| (float(kills) / float(deaths)) >= get_cvar_float("pd_mediator_ratio")) {
warn_player(id);
}
}
}
remember_player(id) {
kicked_wonids[kick_count] = get_user_wonid(id);
kick_count++;
if (kick_count > (MAX_KICK_HISTORY - 1))
kick_count = 0;
}
warn_player(id) {
set_hudmessage(0, 225, 0);
show_hudmessage(id, "Get Cheating-Death from http://www.unitedadmins.com/");
}
kick_player(id, reason) {
new name[32];
get_user_name(id, name, 31);
client_print(0, print_chat, "%s kicked for not having C-D running.", name);
switch (reason) {
case REASON_NORMAL_KICK: {
log_message("[PD-MED] %s kicked for not having C-D running.", name);
}
case REASON_ALREADY_KICKED: {
log_message("[PD-MED] %s kicked for repeatedly not having C-D running.", name);
}
}
client_cmd(id, "echo ^"Cheating-Death is required to play here.^"");
client_cmd(id, "echo ^"Get it from www.unitedadmins.com.^"");
server_cmd("kick #%d", get_user_userid(id));
}
public round_start() {
mode_flags = get_mode();
if (mode_flags & MODE_ENABLED == 0)
return;
max_kills = get_cvar_num("pd_mediator_kills");
max_warn = get_cvar_num("pd_mediator_warn");
new player_count = get_playersnum();
new players[32];
get_players(players, player_count, "c");
for (new i = 0; i < player_count; i++) {
if (is_invalid[players]) {
check_player(players);
}
}
}
public user_invalid_event(id) {
new user_id[8];
read_argv(1, user_id, 7);
new player_id = find_player("k", strtonum(user_id));
is_invalid[player_id] = true;
}
get_mode() {
new mode_str[4];
get_cvar_string("pd_mediator_mode", mode_str, 4);
return read_flags(mode_str);
}
public add_player(id, level, cid) {
if (! cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED;
new name[32];
read_argv(1, name, 31);
new player = find_player("b", name);
if (! player) {
console_print(id, "[PD-MED] No client matching '%s'.", name);
} else {
get_user_name(player, name, 31);
if (already_kicked(player)) {
console_print(id, "[PD-MED] %s is already required to use C-D.", name);
} else {
remember_player(get_user_wonid(player));
console_print(id, "[PD-MED] %s is required to use C-D under all circumstances now.", name);
}
}
return PLUGIN_HANDLED;
}
public list_kicks(id, level, cid) {
if (! cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
console_print(id, "%d registered wonids", kick_count);
for (new i = 0; i < kick_count; i++) {
console_print(id, "%d", kicked_wonids);
}
return PLUGIN_HANDLED;
}
load_settings() {
if (!file_exists(settings_file)) {
kick_count = 0;
} else {
new line = 0;
new text[256];
new wonid[12];
new len;
while (read_file(settings_file, line, text, 255, len)){
if ( text[0] != ';' ) {
parse(text, wonid, 11);
kicked_wonids[line] = strtonum(wonid);
}
line++;
}
kick_count = line;
}
}
save_settings() {
if (file_exists(settings_file)) {
delete_file(settings_file);
}
new text[256];
for (new i = 0; i < kick_count; i++) {
format(text, 255, "%d", kicked_wonids);
write_file(settings_file, text);
}
}
public client_connect(id) {
is_invalid[id] = false;
return PLUGIN_CONTINUE;
}
public plugin_end() {
save_settings();
return PLUGIN_CONTINUE;
}
public plugin_init() {
register_plugin("Psycho's CD-Mediator", "0.9.3.1", "PsychoGuard");
register_srvcmd("pd_user_invalid", "user_invalid_event");
register_concmd("pd_mediator_list", "list_kicks", ADMIN_RCON, "");
register_concmd("pd_mediator_add", "add_player", ADMIN_RCON, "<part of nick>");
register_logevent("round_start", 2, "1=Round_Start");
register_cvar("pd_mediator_mode", "ab");
register_cvar("pd_mediator_kills", "9");
register_cvar("pd_mediator_warn", "5");
register_cvar("pd_mediator_ratio", "2");
set_cvar_string("cdnovalidatecmd","pd_user_invalid %d");
set_cvar_string("cdoldvalidatecmd","pd_user_invalid %d");
load_settings();
return PLUGIN_CONTINUE;
} |
|