
Стаж: 12 лет
Сообщений: 409
Благодарностей: 41
Полезность: < 0
|
Подскажите что я делаю неправильного ? Пытаюсь добавить в bhpk добавить colorchat вроде всё правильно сделал компилируется без проблем но в игре не цветные сообщения! Код:
#pragma semicolon 1 #pragma ctrlchar '\'
#include <amxmodx> #include <amxmisc> #include <colorchat>
#define AUTHOR "Lev" #define PLUGIN "Better High Ping Kicker" #define VERSION "2.6" #define VERSION_CVAR "bhpk_version"
#define ALWAYS_KICK_MULTIPLIER 2 // Player will be kicked even there is less then or equal min_players if player's ping exceed night max ping by this factor. #define DELAY_BEFORE_START_TESTING 20.0 // Delay before showing warning and start ping checking. Real testing starts after hpk_ping_time also passed.
const TASK_ID_BASE = 52635; // random number
const min_hpk_ping_max = 10; const min_hpk_ping_time = 10; const min_hpk_ping_tests = 4;
new pcvar_hpk_ping_max; new pcvar_hpk_ping_max_night; new pcvar_hpk_ping_time; new pcvar_hpk_ping_tests; new pcvar_hpk_min_players; new pcvar_hpk_night_start_hour; new pcvar_hpk_night_end_hour;
new ping_violations[33];
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_cvar(VERSION_CVAR, VERSION, FCVAR_SERVER);
pcvar_hpk_ping_max = register_cvar("hpk_ping_max", "100"); pcvar_hpk_ping_max_night = register_cvar("hpk_ping_max_night", "100"); pcvar_hpk_ping_time = register_cvar("hpk_ping_time", "10"); pcvar_hpk_ping_tests = register_cvar("hpk_ping_tests", "3"); pcvar_hpk_min_players = register_cvar("hpk_min_players", "3"); pcvar_hpk_night_start_hour = register_cvar("hpk_night_start_hour", "3"); pcvar_hpk_night_end_hour = register_cvar("hpk_night_end_hour", "9"); } public client_putinserver(plrid) { ping_violations[plrid] = 0; if (!is_user_bot(plrid) && !is_user_hltv(plrid)) set_task(DELAY_BEFORE_START_TESTING, "showInfo", TASK_ID_BASE + plrid); return PLUGIN_CONTINUE; }
public client_infochanged(plrid) { remove_task(TASK_ID_BASE + plrid); if (!is_user_bot(plrid) && !is_user_hltv(plrid)) set_task(DELAY_BEFORE_START_TESTING, "showInfo", TASK_ID_BASE + plrid); return PLUGIN_CONTINUE; }
public client_disconnect(plrid) { remove_task(TASK_ID_BASE + plrid); return PLUGIN_CONTINUE; }
public showInfo(taskid) { new plrid = taskid - TASK_ID_BASE; if (access(plrid, ADMIN_IMMUNITY) || access(plrid, ADMIN_RESERVATION)) client_print_color(0, RED, "^4[^3Ping^4] Проверка пинга отключена у вас ^3имуннитет!", plrid); else { client_print_color(0, RED, "^4[^3Ping^4] Игроки с пингом ^3%d ^4и выше будут ^3кикнуты!", get_hpk_ping_max(), plrid); set_task(float(get_hpk_ping_time()), "checkPing", TASK_ID_BASE + plrid, _, _, "b"); } return PLUGIN_CONTINUE; }
public checkPing(taskid) { new plrid = taskid - TASK_ID_BASE; new ping, loss;
get_user_ping(plrid, ping, loss);
if (ping > get_hpk_ping_max()) ping_violations[plrid]++; else if (ping_violations[plrid] > 0) ping_violations[plrid]--;
new hpk_ping_tests = get_hpk_ping_tests(); if (ping_violations[plrid] >= hpk_ping_tests) { static players[32]; new playerCount; get_players(players, playerCount, "ch"); // Allow player to stay if there is less or equal than 'min_players' players and player ping is not too high. if (playerCount <= get_pcvar_num(pcvar_hpk_min_players) && ping < get_pcvar_num(pcvar_hpk_ping_max_night) * ALWAYS_KICK_MULTIPLIER) { ping_violations[plrid] = hpk_ping_tests; return PLUGIN_CONTINUE; } kickPlayer(plrid); }
return PLUGIN_CONTINUE; }
kickPlayer(plrid) { new name[33], ip[15]; get_user_name(plrid, name, sizeof(name) - 1); get_user_ip(plrid, ip, charsmax(ip), 1);
client_cmd(plrid, "echo \"[Ping] Извините вы кикнуты из-за большего пинга!\"; disconnect"); server_cmd("addip 1 %s", ip); client_print_color(0, RED, "^4[^3Ping^4] Игрок ^3%s ^4кикнут из-за большего ^3пинга!", name); return PLUGIN_CONTINUE; }
get_hpk_ping_max() { new ping_max; new hour, minute, second;
time(hour, minute, second);
// At night we use different CVAR if (hour >= get_pcvar_num(pcvar_hpk_night_start_hour) && hour < get_pcvar_num(pcvar_hpk_night_end_hour)) ping_max = get_pcvar_num(pcvar_hpk_ping_max_night); else ping_max = get_pcvar_num(pcvar_hpk_ping_max); // Check to be no less then minimum value if (ping_max < min_hpk_ping_max) return min_hpk_ping_max; return ping_max; } get_hpk_ping_time() { new time = get_pcvar_num(pcvar_hpk_ping_time); // Check to be no less then minimum value if (time < min_hpk_ping_time) return min_hpk_ping_time; return time; } get_hpk_ping_tests() { new tests = get_pcvar_num(pcvar_hpk_ping_tests); // Check to be no less then minimum value if (tests < min_hpk_ping_tests) return min_hpk_ping_tests; return tests; }
Пользуюсь данным инклюдом Код:
#if defined WPMGPrintChatColorIncluded #endinput #endif
#define WPMGPrintChatColorIncluded
#include <cstrike>
// Максимальное количество %L в сообщении #define MAX_LANG_ARGS 5
// Цвета сообщений enum { GREY, // Серый RED, // Красный BLUE, // Синий TEAM // Цвет команды игрока которому мы отсылаем или цвет команды определённого игрока (если TEAM + id) };
// Имена команд static const g_aszTeamNames[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" };
stock client_print_color(pReceiver, iColor = TEAM, const szMessage[], any:...) { // Сообщение new szBuffer[256]; // Количество аргументов new iArgs = numargs(); // Отсылаем одному игроку if (pReceiver) { // Заменяем все LANG_PLAYER, на ID получателя for (new iArg = 3; iArg < iArgs; iArg++) { // Если аргумент не равен LANG_PLAYER идём дальше if (getarg(iArg) != LANG_PLAYER) continue; // Меняем численное значение аргумента setarg(iArg, _, pReceiver); } // Форматируем сообщение vformat(szBuffer, 255, szMessage, 4); // Заменяем !y, !t, !g на цвета while (replace(szBuffer, 255, "!y", "^1")) {} while (replace(szBuffer, 255, "!t", "^3")) {} while (replace(szBuffer, 255, "!g", "^4")) {} // Если цвет PLAYERTEAM if (iColor >= TEAM) // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока UTIL_SayText(MSG_ONE, _, pReceiver, (iColor > TEAM) ? iColor - TEAM : pReceiver, szBuffer); else { // Получаем команду получателя new iTeam = _:cs_get_user_team(pReceiver); // Если команда равна цвету сразу отслылаем сообщение if (iTeam % 3 == iColor) UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); else { // Меняем команду (для цвета) UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iColor]); // Отсылаем сообщение UTIL_SayText(MSG_ONE, _, pReceiver, pReceiver, szBuffer); // Возвращаем команду UTIL_TeamInfo(MSG_ONE, _, pReceiver, pReceiver, g_aszTeamNames[iTeam]); } } } // Отсылаем всем else { // Массив для аргументов new aiChangeArgs[MAX_LANG_ARGS]; // Количество аргументов, текущий аргумент new iChangeArgs, iArg; // Записываем все аргументы содержащие LANG_PLAYER for (iArg = 3; iArg < iArgs; iArg++) { // Если аргумент не равен LANG_PLAYER идём дальше if (getarg(iArg) != LANG_PLAYER) continue; // Записываем в массив aiChangeArgs[iChangeArgs++] = iArg; // Если достигнут максимум выходим из цикла if (iChangeArgs == MAX_LANG_ARGS) break; } // Массив из игроков new apPlayers[32]; // Всего игроков new iPlayers; // Последний игрок new pPlayer; // Получаем игроков get_players(apPlayers, iPlayers); // Делаем цикл из игроков for (new i = 0; i < iPlayers; i++) { // Сохраняем последнего игрока pPlayer = apPlayers[i]; // Меняем аргументы LANG_PLAYER на ID игрока for (iArg = 0; iArg < iChangeArgs; iArg++) setarg(aiChangeArgs[iArg], _, pPlayer); // Форматируем сообщение vformat(szBuffer, 255, szMessage, 4); // Заменяем !y, !t, !g на цвета while (replace(szBuffer, 255, "!y", "^1")) {} while (replace(szBuffer, 255, "!t", "^3")) {} while (replace(szBuffer, 255, "!g", "^4")) {} // Если цвет PLAYERTEAM if (iColor >= TEAM) // Отсылаем сообщение игроку, за отправителя берём либо получателя, либо указанного игрока UTIL_SayText(MSG_ONE, _, pPlayer, (iColor > TEAM) ? iColor - TEAM : pPlayer, szBuffer); else { // Получаем команду получателя new iTeam = _:cs_get_user_team(pPlayer); // Если команда равна цвету сразу отслылаем сообщение if (iTeam % 3 == iColor) UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); else { // Меняем команду (для цвета) UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iColor]); // Отсылаем сообщение UTIL_SayText(MSG_ONE, _, pPlayer, pPlayer, szBuffer); // Возвращаем команду UTIL_TeamInfo(MSG_ONE, _, pPlayer, pPlayer, g_aszTeamNames[iTeam]); } } } } }
// Утилита отсылки SayText stock UTIL_SayText(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pSender, const szMessage[], const szArg1[] = "", const szArg2[] = "") { // Получаем ID сообщения SayText static msgSayText; if (!msgSayText) msgSayText = get_user_msgid("SayText"); // Отсылаем SayText message_begin(iDest, msgSayText, vecOrigin, pEntity); write_byte(pSender); write_string(szMessage); if (szArg1[0]) { write_string(szArg1); if (szArg2[0]) write_string(szArg2); } message_end(); }
// Утилита отсылки TeamInfo stock UTIL_TeamInfo(iDest, const vecOrigin[3] = {0, 0, 0}, pEntity, pPlayer, const szTeamName[]) { // Получаем ID сообщения TeamInfo static msgTeamInfo; if (!msgTeamInfo) msgTeamInfo = get_user_msgid("TeamInfo"); // Отсылаем TeamInfo message_begin(iDest, msgTeamInfo, vecOrigin, pEntity); write_byte(pPlayer); write_string(szTeamName); message_end(); }
|