Какой мод блокирует реконект?, как установить на сервер защиту от реконектов? |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Какой мод блокирует реконект?, как установить на сервер защиту от реконектов? |
Prodigy555 |
12.7.2009, 21:04
Сообщение
|
Сделал сервер, все что нужно есть, не хватает только этой одной мелкой, но важной детали.
как установить на сервер защиту от реконектов? |
|
|
|
Makzz |
12.7.2009, 21:41
Сообщение
|
|
|
Поблагодарили 1 раз
|
|
Zefir |
12.7.2009, 21:54
Сообщение
|
Защититься от этого нельзя, но можно свести на нет, усилия любителей реконнектов.
Вернее есть тупейшая защита, это когда тебя кикает если ты делаешь реконнект. Но лучше применить плагин которые не дает преимуществ реконектчикам. Лучший на мой взгляд это reconnect_features от ConnorMcLeod. Но вот моя переделка, ведет учет по именам адресам или стиму. Выставляеться параметром amx_noreconnect_identity, 0 - steam_id 1 - IP 2 - name Пользуйтесь :) В Цербере у меня это много круче сделано, но то уже на любителя. Блин файлик не прикрепляеться... Прям сюда залью, надеюсь меня не забанят :): Код #include <amxmodx>
#include <fakemeta> // Переделал Zefir, для запоминания по нику, IP или steam_id #define MAX_ID 64 #if AMXX_VERSION_NUM < 180 #define charsmax(%1) sizeof(%1) - 1 #endif #define MAX_PLAYERS 32 #define OFFSET_CSMONEY 115 #define OFFSET_CSDEATHS 444 enum storage { steamid[32], Float:frags, deaths, money, round } new bool:g_RestartAttempt[MAX_PLAYERS+1] new bool:g_will_restart new bool:g_authorized[MAX_PLAYERS+1] new bool:g_putinserved[MAX_PLAYERS+1] new g_disconnected_roundnum[MAX_PLAYERS+1] new g_player_info[MAX_ID][storage] new g_roundnum new maxstored = 1 new clear_after, nr_score, nr_money, nr_spawn, nr_startmoney, mp_startmoney, nr_identity public plugin_init() { register_plugin("Reconnect Features", "0.1b beta", "ConnorMcLeod") clear_after = register_cvar("amx_noreconnect_time", "30") nr_score = register_cvar("amx_noreconnect_score", "1") nr_money = register_cvar("amx_noreconnect_money", "1") nr_spawn = register_cvar("amx_noreconnect_spawn", "1") nr_startmoney = register_cvar("amx_noreconnect_startmoney", "0") nr_identity = register_cvar("amx_noreconnect_identity", "0") mp_startmoney = get_cvar_pointer("mp_startmoney") register_event("HLTV", "eNewRound", "a", "1=0", "2=0") register_event("TextMsg", "eRestartAttempt", "a", "2=#Game_will_restart_in") register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w") register_event("ResetHUD", "eResetHUD", "be") register_clcmd("clcmd_fullupdate", "fullupdateCmd") } public fullupdateCmd() { return PLUGIN_HANDLED_MAIN } public eRestartAttempt() { new players[MAX_PLAYERS], num get_players(players, num, "a") for (new i; i < num; ++i) g_RestartAttempt[players[i]] = true } public eRestart() { g_will_restart = true maxstored = 1 } public eResetHUD(id) { if (g_RestartAttempt[id]) { g_RestartAttempt[id] = false return } event_player_spawn(id) } public event_player_spawn(id) { if(!g_disconnected_roundnum[id]) return if(g_disconnected_roundnum[id] == g_roundnum) { g_disconnected_roundnum[id] = 0 set_task(0.1, "delay_kill", id) } } public delay_kill(id) { user_kill(id) } public eNewRound() { g_roundnum++ if(g_will_restart) { for(new i; i < maxstored; i++) { g_player_info[i][steamid][0] = '^0' } g_will_restart = false } } public client_disconnect(id) { new Float:task_time = get_pcvar_float(clear_after) if(!task_time) return if(is_user_bot(id) || is_user_hltv(id)) return g_authorized[id] = false g_putinserved[id] = false new free = -1 for(new i; i < maxstored; i++) { if(!g_player_info[i][steamid][0]) { free = i break } } if(free == -1) return if(free == maxstored && free < MAX_ID) maxstored++ switch(get_pcvar_num(nr_identity)) { case 0: get_user_authid(id, g_player_info[free][steamid], 31) case 1: get_user_ip(id, g_player_info[free][steamid], 31) case 2: get_user_name(id, g_player_info[free][steamid], 31) } pev(id, pev_frags, g_player_info[free][frags]) g_player_info[free][deaths] = get_pdata_int(id, OFFSET_CSDEATHS) g_player_info[free][money] = get_pdata_int(id, OFFSET_CSMONEY) g_player_info[free][round] = g_roundnum g_disconnected_roundnum[id] = 0 set_task(task_time, "clear", free) } public clear(taskid) { g_player_info[taskid][steamid][0] = '^0' // g_player_info[taskid][round] = 0 } public client_authorized(id) { g_authorized[id] = true if(g_putinserved[id]) check_player(id) } public client_putinserver(id) { if(!get_pcvar_num(clear_after)) return if(is_user_bot(id) || is_user_hltv(id)) return if(g_authorized[id]) check_player(id) else g_putinserved[id] = true } check_player(id) { new authid[32], len len = 31 switch(get_pcvar_num(nr_identity)) { case 0: get_user_authid(id, authid, len) case 1: get_user_ip(id, authid, len) case 2: get_user_name(id, authid, len) } for(new i; i < maxstored; i++) { if(!g_player_info[i][steamid][0]) continue if(equal(g_player_info[i][steamid], authid, len)) { if(get_pcvar_num(nr_score)) { set_pev(id, pev_frags, g_player_info[i][frags]) set_pdata_int(id, OFFSET_CSDEATHS, g_player_info[i][deaths]) } if(get_pcvar_num(nr_money)) { new _money = g_player_info[i][money] new startmoney = get_pcvar_num(mp_startmoney) if(get_pcvar_num(nr_startmoney) && _money > startmoney) set_pdata_int(id, OFFSET_CSMONEY, startmoney) else set_pdata_int(id, OFFSET_CSMONEY, _money) } if(get_pcvar_num(nr_spawn)) { g_disconnected_roundnum[id] = g_player_info[i][round] } remove_task(i) clear(i) return } } } |
|
Поблагодарили 3 раз
|
|
Prodigy555 |
12.7.2009, 22:06
Сообщение
|
спс большое!
У меня стоит Amx Mod X 1.8.1. Что мне изменить (куда залезть и что сделать по подробнее) чтобы установить время повторного реконекта? Zefir, можешь мне простому юзеру написать небольшую подробную инструкцию как мне использовать твой код, куда его и как залить на мой сервер,, +небольшая инструкция по настройке (как регулировать время запрета повторного реконекта) чтоб оно работало. У меня повторюсь стоит CS 1.6 патч 2.1, Amx Mod X 1.8.1, Reallite_HLG_2.8. Собрал 2 сервера: 1 для КВ (где такая защита не нужна), другой для "мяса", где это очень нужно. Все работает прекрасно. ВОт тока не хватает защиты от реконекта. Надеюсь на твою помошь...
Отредактировал: Prodigy555, - 12.7.2009, 22:09
|
|
|
|
ost |
13.7.2009, 8:47
Сообщение
|
|
какая то тяжелая штука, если нужен обычны то вот лови...
Antireconnect 1. исключает возможность после смерти вновь ожить используя retry или reconnect 2. не позволяет так запросто обнулять счёт, что будет показывать более общую картину игры игрока Параметры: amx_reconnect_can=1 // реконнект разрешён (не кикает) amx_reconnect_time=7 // при запрете реконнекта не будет разрешать заходить 7 секунд amx_reconnect_ss=1 // сохранять счёт при реконнекте (если он разрешён amx_reconnect_can 1) amx_reconnect_stime=7 // сохраняет счёт для игрока в течении 7 секунд после его ухода по ip amx_reconnect_static=1 // отсчёт времени с момента ухода игрока с сервера (если будет amx_reconnect_static 0 - с момента входа игрока на сервер)
Прикрепленные файлы:
|
Поблагодарили 1 раз
|
|
Saimon |
13.7.2009, 9:45
Сообщение
|
|
CVARS :
amx_retrytime - time in seconds to determine if retry was used ( default: 15 ) amx_retrykick - set to 1 if you want to kick retry users ( default: 0 ) amx_retryshow - set to 0 if you want to disable public announces about use of retry ( default: 0 ) amx_retrychat - show usage in playerchat ( default: 1 ) amx_retrymsg - message which is displayed after reconnect to user ( default: "No retry allowed here, %s" ) * amx_retrykickmsg - reason when kicked ( default: "DO NOT USE RETRY COMMAND" ) amx_retrychatmsg - message in playerchat ( default: "%s was kicked: reconnect in %t seconds" ) *
Прикрепленные файлы:
|
|
|
Zefir |
13.7.2009, 10:58
Сообщение
|
Prodigy555, блин ну вы даете. Зачем заниматься созданием своих серверов если элементарные действия за вас должен ктото делать? Может вас еще из ложечки покормить?
1. Скопируй весь текст в файл amxmodx/scripting/reconnect_features.sma. 2. скомпилируй его 3. Cкопируй полученный файл reconnect_features.amxx в каталог amxmodx/plugins 4. Пропиши в plugins.ini строку reconnect_features.amxx amx_noreconnect_time 30 время после реконнекта в течении которого плагин сработает amx_noreconnect_score 1 указывает сохранять ли счет, то есть минуса остануться минусами :) amx_noreconnect_money 1 указывает сохранять ли деньги игроку, дополнительных денег никто не получит. amx_noreconnect_spawn 1 запрещает играть два раза в одном раунде убъет игрока если он респавниться в том же раунде amx_noreconnect_startmoney 0 сколько денег давать после реконнекта amx_noreconnect_identity 0 запоминать игрока по: 0 - steam 1 - Ip 2 - name
Отредактировал: Zefir, - 13.7.2009, 11:04
|
|
Поблагодарили 2 раз
|
|
Prodigy555 |
13.7.2009, 13:39
Сообщение
|
Zefir,создать сервер возникла необходимость, т.к. самый популярный сервер города "ушел в отпуск", и остались те, на которых играть не интересно, да и из за глюков с sXeInjected не все могут. Я задался задачей сделать сервер, где будут "мои правила". До этого этим еще не занимался, потому не знаю еще до конца структуру взаимосвязей модулей, плагинов и файлов внутри сервера. Я думаю это лишь вопрос времени. Спс тебе за подробное описание! Правда не до конца понятен пункт "скомпилируй его" (вопрос как и чем?).
Makzz, No More Reconnects - не работает! no_reconnect - не работает! Reconnect Features (видимо исходник того что выложил Zefir) - работает, но в 4aT пишет какую-то непонятную и никому не нужную байду. Щас еще попробую то, что выложили позже.
Отредактировал: Prodigy555, - 13.7.2009, 13:56
|
|
|
|
mozart-1 |
25.7.2009, 12:15
Сообщение
|
не нужно говорить что плагин не работает так как он может быть работает но не срабатывает на тебя лично - возможно из за иммунити ...)
amx_plugins и смотри напротив - если running тогда ок. кодировку перепроверь |
|
|
|
VAN_VAN |
30.8.2009, 22:13
Сообщение
|
|
Сделал сервер, все что нужно есть, не хватает только этой одной мелкой, но важной детали. как установить на сервер защиту от реконектов? no_reconn.rar ( 5,82 килобайт ) Кол-во скачиваний: 29 |
|
|