Поиск плагин, борющийся против кемперов

Сообщения
55
Реакции
5
Помог
1 раз(а)
SISA, а вообще это возможно проследить ?? и всё- таки хотелось бы конкретногго юзера наказать , а не всю команду
 
Сообщения
144
Реакции
276
Помог
1 раз(а)
SISA, а вообще это возможно проследить ?? и всё- таки хотелось бы конкретногго юзера наказать , а не всю команду
Две основные проблемы на классиках в 1.6, это:

1. Отсутствие наказаний за не выполнение миссии карты.
2. Отсутствие умного автобаланса команд.

Как видите, за 20 лет никто не смог реализовать плагин, который решал бы хоть одну из этих задач, а всё потому, что задачи эти сложные и их решение должно быть основано на сборе объемной статистики по каждому игроку, его привычках, поведении на сервере, и т.д. При чем, если речь идет о балансе, то не обязательно перекидывать игроков, вполне достаточно усилить более слабую команду какими-то плюшками или ослабить более сильную. В противном случае, это будет набор компромиссных решений, не более. И уж извините, но одного мозга для решения подобных тасков явно не достаточно.

Третьим пунктом, я бы добавил отсутствие командной игры, для существования которой не предусмотрена какая-либо мотивация.
 
Последнее редактирование:
Сообщения
2,288
Реакции
1,739
Помог
31 раз(а)
вполне достаточно усилить более слабую команду какими-то плюшками или ослабить более сильную
Думаю это будет неправильно, т.к команда которая побеждает должна иметь награду за победу (в данное время это деньги), а если за победу отбирать деньги это будет странно)) или пример - Ваша команда побеждает, а вам урон уменьшили за то, что вы лучше. В кс по сути не должно быть баланса, одна из команд должна победить
 
  • Нравится
Реакции: Ayk
Сообщения
144
Реакции
276
Помог
1 раз(а)
Думаю это будет неправильно, т.к команда которая побеждает должна иметь награду за победу (в данное время это деньги), а если за победу отбирать деньги это будет странно)) или пример - Ваша команда побеждает, а вам урон уменьшили за то, что вы лучше. В кс по сути не должно быть баланса, одна из команд должна победить
Правильно, одна из команда должна победить, а не побеждать раз за разом. Чувствуете разницу ? Лишать игроков денег или чего-то подобного - это не приемлемо, а вот запретить покупку гранат и AWP, пока баланс не восстановится, вполне можно, а если тенденции на улучшение нет, тогда уже перекидывать игроков, но делать это надо опять же, с умом. Впрочем, тема не об этом.

Касательно темы, как я раньше и говорил, нужно определять некую тенденцию и закономерности в поведении игрока. Ну что значит запрет сидения на респе ? Я с респа отошел в сторону и продолжаю сидеть и что дальше ?
 
Сообщения
3
Реакции
1
Помог
1 раз(а)
Возможно чекать сколько пробежал игрок за раунд, и вычислять среднее расстояние от респа до выполнения миссии.
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Дополнительно, ко всему выше сказанному, у меня такие идеи:
- проверить если игрок доходил до зоны плэнта. Как для Т, так и для КТ. Если игрок не заходил на плэнт и выжил в раунде не сделав килл - он был бесполезен = наказываем. (1. можно/надо додумать 2. да, заложники никому не интересны из-за лютого дисбаланса на таких картах).
- наказывать по системе варнов. Пока у тебя есть варны за пассивность ты будешь получать наказания. Снимаются варны полезными действиями - выполнением сценария. Выдаются за кемперство и т.д.
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Извечный холивар по поводу кемперства... Думаю, что такие вопросы должны решать игроки команды, в которой находится кемпер. Но, опять же, понятие "кемпер" - весьма растяжимое. Стоит позволить команде проводить некое голосование за наказание такого игрока (зачем, ибо это игровой процесс?!). Не бан, конечно же, а, например, урезать доступ к части функционала на несколько раундов, аля запрет покупки/поднятия основного оружия и т.п.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
x1DD, он может бегать тупо в пределах респы намативая нужное ратсояние
5 Сен 2019
Думаю, что такие вопросы должны решать игроки команды, в которой находится кемпер.
максиум что они решат это либо ныть какой он идиот, либо обматерить с ног до головы. жаловатся админу никто не будет
5 Сен 2019
урезать доступ к части функционала на несколько раундов, аля запрет покупки/поднятия основного оружия и т.п.
это вынудит его еще больше сидеть
5 Сен 2019
и никаким сейвом никто не занимается нынче
Играя на множестве серверов я пришел к выводу что сейвят в основном АВП. А все из-за того, что на множестве серверов стоит лимит на команду очень низкий. Так вот игроки с АВП, чтобы в след раунде иметь авик зачастую заседают. Это по моим наблюдением, и ни воем случае не претендует на истину.

А так в целом соглсен со со всеми сообщениями SISA за исключением некоторых ньюансов.. Надо наказывать тех кто не исполняет цели карты. И идея наказать всех террористов, которые позволили разминировать бому (а как правило они тупо бегут на другой респ в поисках фрагов) очень даже стоящая. На счет КТ, то я б чекал их растояние от места заложения бомбы, и если оно не умешнается за время установленной бомбы. которая взорвалась. то также наказывал. Из наказаний, я бы не отбирал оружие или еще что то. А просто выдавал предупреждение. И на N-ом преде кикал/банил.

P.S. меня как для игрока это очень напрягают кемперы на респах (ТТ) или те кто не бегут в попитках разминировать пачку просто потому, что "а зачем". И особенно это выбешивает на серверах подобных как у Pokemoshka где победа в раунде имеет больше значения, чем при таймлимите карты. Конешно Pokemoshka прав на счет, того что админов заменить намного сложнее, и люди с задачей идентификации кемпер или нет справляются куда лучше. Но как и в любом правиле везде ест ьисключение. И тут оно зависит от человеческого фактора.
5 Сен 2019
С залогами мне кажется все намного проще имхо. КТ проиграют если не будут пытатся спасти залогов. А теры как сидели так и будут сидеть на подобных картах. Что в порядке вещей
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
fantom, слишком серьезно относитесь к тому, что на пабликах игроки кемперят. Это вполне нормальное явление, тут нет ничего такого, ведь это ни мм, КВ или турнир. Все в порядке вещей и бороться с этим - бессмысленно. Попросту потеряете время. Даже, если у вас как-то затрагивает само кемперство игроков, то лучше заинтересовать их геймплеем, нежели наказывать.
 
Сообщения
144
Реакции
276
Помог
1 раз(а)
Minni, Ну тут какой момент... Мне кажется, админ сам должен решать, какой геймплей будет на его сервере (а не игроки). Если игрок любит посидеть до конца раунда и положить болт на саму суть игры, то пусть найдет сервер единомышленников где все сидят и играет в свое удовольствие. Вот только этого не будет, т.к. ждуну не интересно просто сидеть, ждуну надо фармить фраги, подрезая мяско, а то, что это бесит всех остальных игроков, тут и к гадалке не ходи. В таком случае я вообще рекомендую убрать бомбу и залогов и играть на равных.
 

met

Сообщения
171
Реакции
42
На многих балканских серверах установлен один антикемпер, который начинает слэпать ТТ, если они долгое время остаются на базе. Как называется не знаю, возможно, тот же вокгад, но борется очень эффективно. Кемперов не видать, при чём и с той с другой стороны. В конце раунда также убивает игроков, проигравшей команды
5 Сен 2019
Две основные проблемы на классиках в 1.6, это:

1. Отсутствие наказаний за не выполнение миссии карты.
2. Отсутствие умного автобаланса команд.
PTB - вполне умный балансер
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
met,
C++:
/* AMX Mod script
*
*    AntiCamping Advanced
*    by Homicide, original code by SpaceDude
*
*    This script is a modification to SpaceDude's anti-camping plugin.
*    I used Spacedude’s method for determine camping then added some nice features to the plugin.
*
*        The main feature I added was the heartbeat method of discouraging camping.
*
*    The features include the ability to set punishment, camping time, healthpunish, and toggle 'the campmeter'.
*
*   Cvars:
*    anticamping 0-4            0=disables, 1=slap, 2=health reduction, 3=heartbeat | default: 3
*    anticamping_time n        Sets the speed at which the camp meter increases | default: 20
*    anticamping_healthpunish n     Sets the amount of health a player losses if anticamping is set to 1(slap) or 2(health reduction) | default: 10
*    anticamping_meter 0/1        0=disable campmeter, 1=enable campmeter
*
*    note: this plugin is best used without any other anti-camp plugins
*/

#include <amxmod>

#define SND_STOP (1<<5)

new playercoord0[33][3]
new playercoord1[33][3]
new playercoord2[33][3]
new playercoord3[33][3]
new playercoord4[33][3]
new campmeter[33]
new bool:pausecounter[33]
new bool:bombplanted
new bool:de_map
new camptolerancedefending = 180
new camptoleranceattacking = 200



public sqrt(num) {
    new div = num;
    new result = 1;
    while (div > result) {    // end when div == result, or just below
        div = (div + result) / 2    // take mean value as new divisor
        result = num / div
    }
    return div;
}

public unpausecounter(parm[]) {
    new id = parm[0]
    pausecounter[id] = false
    return PLUGIN_CONTINUE
}

public displaymeter(id) {
    if (get_cvar_num("anticamping_meter") != 0) {
        if (campmeter[id] > 100) {
            set_hudmessage(255, 0, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 90) {
            set_hudmessage(255, 0, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 80){
            set_hudmessage(255, 100, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 50 ) {
            set_hudmessage(255, 255, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 20 ) {
            set_hudmessage(0, 255, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else {
            set_hudmessage(0, 0, 255, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        }
    }
    return PLUGIN_HANDLED
}

public checkcamping(){
    if (get_cvar_num("anticamping") == 0){
        set_task(1.0,"checkcamping",1)
        return PLUGIN_CONTINUE
    }
    new players[32]
    new numberofplayers
    new variance[3]
    new average[3]
    new variancetotal
    new standarddeviation
    new id
    new team
    new i
    new j
    get_players(players, numberofplayers, "a")
    for (i = 0; i < numberofplayers; ++i) {
        while (i < numberofplayers && pausecounter[players[i]]) {
            ++i
        }
        if (i >= numberofplayers){
            set_task(1.0,"checkcamping",1)
            return PLUGIN_CONTINUE
        }
        id = players[i]
        for (j = 0; j < 3; ++j) {
            playercoord4[id][j] = playercoord3[id][j]
            playercoord3[id][j] = playercoord2[id][j]
            playercoord2[id][j] = playercoord1[id][j]
            playercoord1[id][j] = playercoord0[id][j]
        }
        get_user_origin(id, playercoord0[id], 0)
        for (j = 0; j < 3; ++j) {
            average[j] = (playercoord0[id][j] +
                            playercoord1[id][j] +
                            playercoord2[id][j] +
                            playercoord3[id][j] +
                            playercoord4[id][j]) / 5
            variance[j] = (((playercoord0[id][j] - average[j]) * (playercoord0[id][j] - average[j]) +
                              (playercoord1[id][j] - average[j]) * (playercoord1[id][j] - average[j]) +
                              (playercoord2[id][j] - average[j]) * (playercoord2[id][j] - average[j]) +
                              (playercoord3[id][j] - average[j]) * (playercoord3[id][j] - average[j]) +
                              (playercoord4[id][j] - average[j]) * (playercoord4[id][j] - average[j])) / 4)
        }
        variancetotal=variance[0]+variance[1]+variance[2]
        standarddeviation=sqrt(variancetotal)
        team = get_user_team(id)
        if (!de_map){
            if (team==2)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] += (camptoleranceattacking - standarddeviation) / get_cvar_num("anticamping_camptime")
            else
                campmeter[id] += (camptoleranceattacking - standarddeviation) / get_cvar_num("anticamping_camptime")
        }
        else if (bombplanted){
            if (team == 1)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] = 0
            else
                campmeter[id] += (camptoleranceattacking-standarddeviation)/get_cvar_num("anticamping_camptime")
        }
        else{
            if (team==2)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] += (camptolerancedefending-standarddeviation)/get_cvar_num("anticamping_camptime")
            else
                campmeter[id] += (camptoleranceattacking-standarddeviation)/get_cvar_num("anticamping_camptime")
        }
        if (campmeter[id] < 80 ) {
            emit_sound(id,CHAN_VOICE,"player/heartbeat1.wav", 0.0, ATTN_NORM, SND_STOP, PITCH_NORM)
        }
        if (campmeter[id] < 0) {
            campmeter[id] = 0
        } else if (campmeter[id]>100) {
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish"))
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish"))
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                }
            }
            campmeter[id] = 100
        } else if (campmeter[id] > 90) {
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish") / 5)
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish") / 5)
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat1.wav", 0.5, ATTN_NORM, 0, PITCH_NORM)
                }
            }
        } else if (campmeter[id]>80){
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish") / 10)
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish") / 10)
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat1.wav", 0.1, ATTN_NORM, 0, PITCH_NORM)
                }
            }
        }
        displaymeter(id)
    }
    set_task(2.0,"checkcamping",1)
    return PLUGIN_CONTINUE
}

public damage_event(id) {
    if (get_cvar_num("anticamping") != 0) {
        new enemy = get_user_attacker(id)
        if (get_user_team(id)!=get_user_team(enemy)) {
            campmeter[id]=0
            campmeter[enemy]=0
        }
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public new_round(id) {
    if (get_cvar_num("anticamping") != 0) {
        bombplanted=false
        pausecounter[id]=true
        campmeter[id]=0
        new Float:freezetime = get_cvar_float("mp_freezetime")+1.0
        new parm[1]
        parm[0]=id
        set_task(freezetime,"unpausecounter",0,parm,1)
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public bartime_event(id) {
    if (get_cvar_num("anticamping") != 0) {
        pausecounter[id]=true
        campmeter[id]=0
        new Float:bar_time=float(read_data(1)+1)
        new parm[1]
        parm[0]=id
        set_task(bar_time,"unpausecounter",0,parm,1)
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public bomb_planted() {
    if (get_cvar_num("anticamping") != 0) {
        bombplanted=true
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public got_bomb(id) {
    if (get_cvar_num("anticamping") != 0) {
        de_map=true
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public round_end() {
    if (get_cvar_num("anticamping") != 0) {
        new players[32]
        new numberofplayers
        new id
        new i
        get_players(players, numberofplayers, "a")
        for (i = 0; i < numberofplayers; ++i) {
            id=players[i]
            pausecounter[id]=true
            return PLUGIN_CONTINUE
        }
    }
    return PLUGIN_CONTINUE
}

public plugin_precache() {
    precache_sound("player/heartbeat1.wav")
    return PLUGIN_CONTINUE
}
public plugin_init() {
    register_plugin("AntiCamping Advanced","1.01","Homicide-       original code by SpaceDude")
    register_event("Damage", "damage_event", "b", "2!0")
    register_event("BarTime","bartime_event","b")
    register_event("ResetHUD", "new_round", "b")
    register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
    register_event("SendAudio", "round_end", "a", "2&%!MRAD_terwin","2&%!MRAD_ctwin","2&%!MRAD_rounddraw")
    register_event("StatusIcon", "got_bomb", "be", "1=1", "1=2", "2=c4")
    register_cvar("anticamping","3",0)  //0=Disabled, 1=Slap, 2=Health Reduction, 3=Heartbeat
    register_cvar("anticamping_camptime","20",0)  //Amount of time allowed to camp
    register_cvar("anticamping_healthpunish","10",0)  //Amount of health taken due to punishment
    register_cvar("anticamping_meter","1",0) //Display 'campmeter' to each cilent
    set_task(1.0,"checkcamping",1)
    return PLUGIN_CONTINUE
}
C++:
/* AMXx Mod script
*
*    AntiCamping Advanced
*    by Homicide, original code by SpaceDude
*
*    This script is a modification to SpaceDude's anti-camping plugin.
*    I used Spacedude’s method for determine camping then added some nice features to the plugin.
*
*        The main feature I added was the heartbeat method of discouraging camping.
*
*    The features include the ability to set punishment, camping time, healthpunish, and toggle 'the campmeter'.
*
*   Cvars:
*    anticamping 0-4            0=disables, 1=slap, 2=health reduction, 3=heartbeat | default: 3
*    anticamping_time n        Sets the speed at which the camp meter increases | default: 20
*    anticamping_healthpunish n     Sets the amount of health a player losses if anticamping is set to 1(slap) or 2(health reduction) | default: 10
*    anticamping_meter 0/1        0=disable campmeter, 1=enable campmeter
*
*    Additional tweaking by RaWDeaL:
*    1.01b
*    -On de_maps CT can camp until bomb is planted after which T can camp.
*    -On all other maps T can camp, but CT has campmeter running, this is for improved gameplay on cs_ and as_maps.
*    Recommend using the plugin "Custom Map Configs (JustinHoMi/JGHG)" to disable this plugin on whatever map You like.
*    -Replaced heartbeat sound with snoring.
*    1.01c
*    Campmeter not visible unless active
*    note: this plugin is best used without any other anti-camp plugins
*/

#include <amxmodx>
#include <fun>

#define SND_STOP (1<<5)

new playercoord0[33][3]
new playercoord1[33][3]
new playercoord2[33][3]
new playercoord3[33][3]
new playercoord4[33][3]
new campmeter[33]
new bool:pausecounter[33]
new bool:bombplanted
new bool:de_map
new camptolerancedefending = 180
new camptoleranceattacking = 220



public sqrt(num) {
    new div = num;
    new result = 1;
    while (div > result) {    // end when div == result, or just below
        div = (div + result) / 2    // take mean value as new divisor
        result = num / div
    }
    return div;
}

public unpausecounter(parm[]) {
    new id = parm[0]
    pausecounter[id] = false
    return PLUGIN_CONTINUE
}

public displaymeter(id) {
    if (get_cvar_num("anticamping_meter") != 0) {
        if (campmeter[id] > 100) {
            set_hudmessage(255, 0, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 90) {
            set_hudmessage(255, 0, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 80){
            set_hudmessage(255, 100, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 50 ) {
            set_hudmessage(255, 255, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 20 ) {
            set_hudmessage(0, 255, 0, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        } else if (campmeter[id] > 0 ) {
            set_hudmessage(0, 0, 255, -1.0, 0.85, 0, 1.0, 2.0, 0.1, 0.1, 4)
            show_hudmessage(id,"Campmeter: %i%",campmeter[id])
        }
    }
    return PLUGIN_HANDLED
}

public checkcamping(){
    if (get_cvar_num("anticamping") == 0){
        set_task(1.0,"checkcamping",1)
        return PLUGIN_CONTINUE
    }
    new players[32]
    new numberofplayers
    new variance[3]
    new average[3]
    new variancetotal
    new standarddeviation
    new id
    new team
    new i
    new j
    get_players(players, numberofplayers, "a")
    for (i = 0; i < numberofplayers; ++i) {
        while (i < numberofplayers && pausecounter[players[i]]) {
            ++i
        }
        if (i >= numberofplayers){
            set_task(1.0,"checkcamping",1)
            return PLUGIN_CONTINUE
        }
        id = players[i]
        for (j = 0; j < 3; ++j) {
            playercoord4[id][j] = playercoord3[id][j]
            playercoord3[id][j] = playercoord2[id][j]
            playercoord2[id][j] = playercoord1[id][j]
            playercoord1[id][j] = playercoord0[id][j]
        }
        get_user_origin(id, playercoord0[id], 0)
        for (j = 0; j < 3; ++j) {
            average[j] = (playercoord0[id][j] +
                            playercoord1[id][j] +
                            playercoord2[id][j] +
                            playercoord3[id][j] +
                            playercoord4[id][j]) / 5
            variance[j] = (((playercoord0[id][j] - average[j]) * (playercoord0[id][j] - average[j]) +
                              (playercoord1[id][j] - average[j]) * (playercoord1[id][j] - average[j]) +
                              (playercoord2[id][j] - average[j]) * (playercoord2[id][j] - average[j]) +
                              (playercoord3[id][j] - average[j]) * (playercoord3[id][j] - average[j]) +
                              (playercoord4[id][j] - average[j]) * (playercoord4[id][j] - average[j])) / 4)
        }
        variancetotal=variance[0]+variance[1]+variance[2]
        standarddeviation=sqrt(variancetotal)
        team = get_user_team(id)
        if (!de_map){
            if (team==2)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] += (camptoleranceattacking - standarddeviation) / get_cvar_num("anticamping_camptime")
            else
                campmeter[id] = 0
        }
        else if (bombplanted){
            if (team == 1)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] = 0
            else
                campmeter[id] += (camptoleranceattacking-standarddeviation)/get_cvar_num("anticamping_camptime")
        }
        else{
            if (team==2)    // Team 1 = Terro, Team 2 = CT
                campmeter[id] = 0
            else
                campmeter[id] += (camptolerancedefending-standarddeviation)/get_cvar_num("anticamping_camptime")
        }
        if (campmeter[id] < 80 ) {
            emit_sound(id,CHAN_VOICE,"player/heartbeat.wav", 0.0, ATTN_NORM, SND_STOP, PITCH_NORM)
        }
        if (campmeter[id] < 0) {
            campmeter[id] = 0
        } else if (campmeter[id]>100) {
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish"))
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish"))
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
                }
            }
            campmeter[id] = 100
        } else if (campmeter[id] > 90) {
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish") / 5)
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish") / 5)
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat.wav", 0.5, ATTN_NORM, 0, PITCH_NORM)
                }
            }
        } else if (campmeter[id]>80){
            switch(get_cvar_num("anticamping")) {
                case 1: {
                    user_slap(id,get_cvar_num("anticamping_healthpunish") / 10)
                }
                case 2: {
                    set_user_health(id, get_user_health(id) - get_cvar_num("anticamping_healthpunish") / 10)
                }
                case 3: {
                    emit_sound(id,CHAN_VOICE,"player/heartbeat.wav", 0.1, ATTN_NORM, 0, PITCH_NORM)
                }
            }
        }
        displaymeter(id)
    }
    set_task(2.0,"checkcamping",1)
    return PLUGIN_CONTINUE
}

public damage_event(id) {
    if (get_cvar_num("anticamping") != 0) {
        new enemy = get_user_attacker(id)
        if (get_user_team(id)!=get_user_team(enemy)) {
            campmeter[id]=0
            campmeter[enemy]=0
        }
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public new_round(id) {
    if (get_cvar_num("anticamping") != 0) {
        bombplanted=false
        pausecounter[id]=true
        campmeter[id]=0
        new Float:freezetime = get_cvar_float("mp_freezetime")+1.0
        new parm[1]
        parm[0]=id
        set_task(freezetime,"unpausecounter",0,parm,1)
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public bartime_event(id) {
    if (get_cvar_num("anticamping") != 0) {
        pausecounter[id]=true
        campmeter[id]=0
        new Float:bar_time=float(read_data(1)+1)
        new parm[1]
        parm[0]=id
        set_task(bar_time,"unpausecounter",0,parm,1)
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public bomb_planted() {
    if (get_cvar_num("anticamping") != 0) {
        bombplanted=true
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public got_bomb(id) {
    if (get_cvar_num("anticamping") != 0) {
        de_map=true
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public round_end() {
    if (get_cvar_num("anticamping") != 0) {
        new players[32]
        new numberofplayers
        new id
        new i
        get_players(players, numberofplayers, "a")
        for (i = 0; i < numberofplayers; ++i) {
            id=players[i]
            pausecounter[id]=true
            return PLUGIN_CONTINUE
        }
    }
    return PLUGIN_CONTINUE
}

public plugin_precache() {
    precache_sound("player/heartbeat.wav")
    return PLUGIN_CONTINUE
}
public plugin_init() {
    register_plugin("AntiCamping Advanced","1.01c","Homicide- Tweaked by RaWDeaL, original code by SpaceDude")
    register_event("Damage", "damage_event", "b", "2!0")
    register_event("BarTime","bartime_event","b")
    register_event("ResetHUD", "new_round", "b")
    register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL")
    register_event("SendAudio", "round_end", "a", "2&%!MRAD_terwin","2&%!MRAD_ctwin","2&%!MRAD_rounddraw")
    register_event("StatusIcon", "got_bomb", "be", "1=1", "1=2", "2=c4")
    register_cvar("anticamping","3",0)  //0=Disabled, 1=Slap, 2=Health Reduction, 3=Heartbeat
    register_cvar("anticamping_camptime","20",0)  //Amount of time allowed to camp
    register_cvar("anticamping_healthpunish","10",0)  //Amount of health taken due to punishment
    register_cvar("anticamping_meter","1",0) //Display 'campmeter' to each cilent
    set_task(1.0,"checkcamping",1)
    return PLUGIN_CONTINUE
}
 

met

Сообщения
171
Реакции
42
Izmayl7, не знаю. Могу лишь сказать, что плагин начинает выталкивать из зоны и наносить урон по 5 хп, если игрок в ней находится определённое время (секунд 5-10).
 
Сообщения
2,288
Реакции
1,739
Помог
31 раз(а)
PTB - вполне умный балансер
нет. в любом в случае нет учета мнения игрока. Я например всегда играю за ТТ, а этот плагин унесет меня за СТ и что?Вероятнее всего я выйду с такого сервера навсегда. Да и от перемещения 1-2 игроков мало что поменяется, если остальные 13 тел мясо.
5 Сен 2019
Третьим пунктом, я бы добавил отсутствие командной игры, для существования которой не предусмотрена какая-либо мотивация.
Думаю если решить этот пункт, то первые два растворятся
 

met

Сообщения
171
Реакции
42
Pokemoshka, меняется. Редко такое бывает, что одна команда побеждает 3 раза подряд. А насчёт того, кто за кого любит играть, так надо уметь играть за обе команды, особенно за слабую. И перемещает он всего раз за карту (в зависимости от настроек).
А если на сервере соберутся только любители поиграть за ТТ, что делать будут? Дожидаться пока любитель КТ зайдёт?)
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
met,
C++:
CVAR:
anticamping_meter "1" // 0 - Плагин Выкл. | 1 - плагин вкл.
anticamping "1" // 0 - Выкл. | 1 - Слэп | 2 - отнимать HP | 3 - звук сердцебиения
anticamping_time "20" // Устанавливает время в секундах через сколько camper_meter дойдёт до 100% если игрок почти неподвижен.
anticamping_healthpunish "1" // Действия плагина: 1 - начинает слэпать | 2 - начинает отнимать HP
 
Сообщения
144
Реакции
276
Помог
1 раз(а)
Pokemoshka, меняется. Редко такое бывает, что одна команда побеждает 3 раза подряд. А насчёт того, кто за кого любит играть, так надо уметь играть за обе команды, особенно за слабую. И перемещает он всего раз за карту (в зависимости от настроек).
А если на сервере соберутся только любители поиграть за ТТ, что делать будут? Дожидаться пока любитель КТ зайдёт?)
Зависит от ситуации. На Нюке, Инферно и Трэйне, контры могут побеждать в сухую на протяжении всей карты. Вероятность того, что соберутся исключительно любители игры за КТ или ТТ, маловероятна. Выше правильно сказали, что бездумное бросание тела (особенно только что зашедшего) за другую команду, приведет к его потере, а вот перебросить долгоиграющего человека за более слабую команду и посмотреть на его реакцию, можно. Кто мне мешает перейти обратно в свою команду после действия чудоплагина PTB ? Правильно, никто. А если мне помешают, то я вообще выйдут с сервера и так поступят многие, ибо выбор серверов огромный, где меня не будут перекидывать. Так что это крайне не однозначное решение.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу