Сделать иммунитет в кс
#include < reapi >
#if AMXX_VERSION_NUM < 183
#include < colorchat >
#define client_disconnected client_disconnect
#define MAX_PLAYERS 32
#endif
#define IsPlayer(%0) (0 < %0 < 33)
//■■■■■■■■■■■■■■■■■■■■■■■ CONFIG START ■■■■■■■■■■■■■■■■■■■■■■■//
#define AWP_ONLINE //Закоментируйте, если не нужен функционал отключения авп при низком онлайне
#define AWP_LIMIT //Закоментируйте, если не нужен функционал ограничения авп по командам
#define AWP_ROUND_LIMIT //Закоментируйте, если не нужен функционал ограничения авп по раундам
// ^4 — зелёный | ^3 — цвет тимы (КТ — синий | Т — красный | SPEC — серый) | ^1 — жёлтый
#define MSG_PREFIX «^1[^4AWP_ONLINE^1]»
#define MSG_LOWONLINE «У вас отобрано^4 AWP^1. Причина:^3 Низкий онлайн игроков»
#define MSG_LIMIT «У вас отобрано^4 AWP^1. Причина:^3 Превышен лимит на команду»
#define MSG_ROUND «%s У вас отобрано^4 AWP^1. Причина:^3 подождите %d %s»
//#define ALLPLAYERS
/*
Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).
Пример:
Допустим на сервере 5 ботов и 2 человека 1 хлтв.
Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).
Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/
#define FLAG ADMIN_IMMUNITY //Флаг для иммунитета от лимита и блока на раунды
#define RETURN_MONEY //Возвращать деньги при отборе авп в конце раунда из-за низкого онлайна? (Закоментируйте, если не хотите, чтобы возвращало деньги)
#if defined RETURN_MONEY
#define MONEY_AWP 4750 //Сколько денег возвращать?
#endif
//#define PERCENT_PLAYERS
/*
Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob’yasnyat’]
Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/
//#define NOEND //Если разкоментировано, то не будет отбирать АВП в конце раунда из-за низкого онлайна. [Если онлайн ниже чем указан в кваре и человек сам дропнет авп или потеряет ее, то подобрать заного не сможет]
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//
#if !defined AWP_LIMIT && defined PERCENT_PLAYERS
#undef PERCENT_PLAYERS
#endif
#if !defined AWP_ONLINE && !defined NOEND
#define NOEND
#endif
enum ECVARS {
CVAR_ONLINE,
CVAR_LIMIT_AWP_STATUS,
CVAR_LIMIT_MAX_AWP,
CVAR_LIMIT_IMMUN,
CVAR_ROUNDS_LIMIT
};
enum EBLOCKS {
BL_RND,
BL_LIMIT,
BL_ONLINE
};
enum {
AWP_DROP = 0,
AWP_NONE,
AWP_BUY,
AWP_PICK_UP
};
new gCvar[ECVARS], sCvars[ECVARS], COST_AWP, gAwp[MAX_PLAYERS + 1], gCount;
#if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
new TeamName: gTeam[MAX_PLAYERS + 1];
#endif
#if defined AWP_LIMIT
new sAwp[TeamName: TEAM_SPECTATOR];
#endif
#if defined AWP_ROUND_LIMIT
new gBlock[MAX_PLAYERS + 1], gRound;
#endif
#if defined PERCENT_PLAYERS
new gLimit;
#endif
public plugin_precache(){
register_plugin(«[ReAPI] AWPoff», «1.4.3», «PAffAEJIkA :3»);
#if !defined AWP_LIMIT && !defined AWP_ROUND_LIMIT && !defined AWP_ONLINE
set_fail_state(«xmm, ti ubral ves’ funkcional plagina, no postavil ego na server… ti molodec!»);
#endif
#if defined AWP_ONLINE
gCvar[CVAR_ONLINE] = register_cvar(«awp_players_low», «10»); //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
#endif
#if defined AWP_LIMIT
gCvar[CVAR_LIMIT_AWP_STATUS] = register_cvar(«awp_limit», «1»); //Включить|Выключить лимит авп [Стандартно: включен]
gCvar[CVAR_LIMIT_MAX_AWP] = register_cvar(«awp_limit_max», «3»); //Сколько АВП разрешено при лимите [Стандартно по 2 авп на команду] | Если раскоментирован PERCENT_PLAYERS, то сюда вписывать нужный процент
gCvar[CVAR_LIMIT_IMMUN] = register_cvar(«awp_limit_immun», «3»); //Иммунитет для админов. [0 — Выкл | 1 — Иммунитет от лимита кол-ва АВП | 2 — Иммунитет от блока АВП по раундам | 3 — Имумунитет от 1 и 2]
#endif
#if defined AWP_ROUND_LIMIT
gCvar[CVAR_ROUNDS_LIMIT] = register_cvar(«awp_limit_round», «5»); //На сколько раундов блочить?
#endif
}
public plugin_init(){
new mapname[32];
get_mapname(mapname, charsmax(mapname));
static maps[][] = { «awp», «aim», «35hp» };
for(new i; i < sizeof maps; i++){
if(containi(mapname, maps[i]) != -1){
pause(«ad»);
return;
}
}
COST_AWP = rg_get_weapon_info(WEAPON_AWP, WI_COST);
RegisterHookChain(RG_CBasePlayer_AddPlayerItem, «AddItem»);
RegisterHookChain(RG_BuyWeaponByWeaponID, «BuyWeaponByWeaponID»);
RegisterHookChain(RG_CBasePlayer_RemovePlayerItem, «RemoveItem»);
register_concmd(«awpoff_reload», «load_cvars»);
register_event(«HLTV», «EventRoundStart», «a», «1=0», «2=0»);
register_logevent(«EventRestartRound», 2, «1&Restart_Round_»);
#if !defined NOEND
register_logevent(«EventRoundEnd», 2, «1=Round_End»);
#endif
}
public plugin_cfg(){
#if AMXX_VERSION_NUM < 183
server_exec();
#endif
load_cvars(0);
}
public load_cvars(id){
#if defined AWP_ONLINE
sCvars[CVAR_ONLINE] = get_pcvar_num(gCvar[CVAR_ONLINE]);
#endif
#if defined AWP_LIMIT
sCvars[CVAR_LIMIT_AWP_STATUS] = get_pcvar_num(gCvar[CVAR_LIMIT_AWP_STATUS]);
sCvars[CVAR_LIMIT_MAX_AWP] = get_pcvar_num(gCvar[CVAR_LIMIT_MAX_AWP]);
sCvars[CVAR_LIMIT_IMMUN] = get_pcvar_num(gCvar[CVAR_LIMIT_IMMUN]);
#endif
#if defined AWP_ROUND_LIMIT
sCvars[CVAR_ROUNDS_LIMIT] = get_pcvar_num(gCvar[CVAR_ROUNDS_LIMIT]);
#endif
if(IsPlayer(id))
client_print(id, print_center, «[AWPoff] Cvars have been reloaded!»);
}
public client_disconnected(id) if(IsPlayer(id)) minus_awp(id);
public EventRoundStart(){
#if defined AWP_ROUND_LIMIT
gRound ++;
#endif
gCount = 0;
static pl[32];
get_pl(pl, gCount);
#if defined PERCENT_PLAYERS
const MAX_PERCENT = 100;
gLimit = gCount * sCvars[CVAR_LIMIT_MAX_AWP] / MAX_PERCENT;
#endif
#if defined AWP_LIMIT
sAwp[TEAM_CT] = 0;
sAwp[TEAM_TERRORIST] = 0;
#endif
#if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
for(new i,id; i < gCount; i ++){
id = pl[i];
gTeam[id] = get_member(id, m_iTeam);
#if defined ALLPLAYERS
if(!(TEAM_UNASSIGNED < gTeam[id] < TEAM_SPECTATOR) || !is_user_valid(id))
continue;
#endif
switch(gAwp[id]){
case AWP_NONE: continue;
#if defined AWP_ROUND_LIMIT
case AWP_DROP:{
gAwp[id] = AWP_NONE;
gBlock[id] = gRound + sCvars[CVAR_ROUNDS_LIMIT];
}
#endif
#if defined AWP_LIMIT
default: sAwp[gTeam[id]] ++;
#endif
}
}
#endif
}
public EventRestartRound(){
#if defined AWP_LIMIT
sAwp[TEAM_CT] = 0;
sAwp[TEAM_TERRORIST] = 0;
#endif
#if defined AWP_ROUND_LIMIT
gRound = 0;
arrayset(gBlock, false, sizeof gBlock);
#endif
arrayset(gAwp, AWP_NONE, sizeof gAwp);
}
#if !defined NOEND
public EventRoundEnd(){
new players[32], count;
get_pl(players, count);
if(count >= sCvars[CVAR_ONLINE])
return PLUGIN_CONTINUE;
for(new i = 0; i < count; i ++){
#if defined ALLPLAYERS
if(!is_user_valid(players[i]))
continue;
#endif
return_awp(players[i]);
}
EventRestartRound();
return PLUGIN_CONTINUE;
}
#endif
stock get_pl(players[32], &count){
#if defined ALLPLAYERS
get_players(players, count);
#else
get_players(players, count, «ch»);
new players1[32], cnt = 0;
for(new i; i < count; i ++){
if(TEAM_UNASSIGNED < get_member(players[i], m_iTeam) < TEAM_SPECTATOR)
players1[cnt ++] = players[i];
}
players = players1;
count = cnt;
#endif
}
stock return_awp(id){
if(gAwp[id] <= AWP_NONE)
return;
rg_remove_item(id, «weapon_awp»);
#if defined RETURN_MONEY
if(gAwp[id] == AWP_BUY)
rg_add_account(id, MONEY_AWP);
#endif
client_print_color(id, false, «%s %s», MSG_PREFIX, MSG_LOWONLINE);
}
public BuyWeaponByWeaponID(id, WeaponIdType:weaponID){
if(weaponID != WEAPON_AWP || !is_user_valid(id) || gAwp[id] > AWP_NONE)
return HC_CONTINUE;
new gMoney = get_member(id, m_iAccount);
if(gMoney < COST_AWP)
return HC_CONTINUE;
if(check_awp(id)){
gAwp[id] = AWP_BUY;
return HC_CONTINUE;
}
SetHookChainReturn(ATYPE_INTEGER, true);
return HC_SUPERCEDE;
}
public AddItem(id, pItem){
if(get_member(pItem, m_iId) != WEAPON_AWP || gAwp[id] > AWP_NONE || !is_user_valid(id))
return HC_CONTINUE;
if(check_awp(id)){
gAwp[id] = AWP_PICK_UP;
return HC_CONTINUE;
}
SetHookChainReturn(ATYPE_INTEGER, false);
return HC_SUPERCEDE;
}
//Native’s
public plugin_natives()
register_native(«awpoff_check», «check_native», true);
public check_native(id, chat){
#if defined AWP_LIMIT
#if defined ALLPLAYERS
if(!(TEAM_UNASSIGNED < gTeam[id] < TEAM_SPECTATOR))
return false;
#endif
return check_awp(id, true, chat);
#else
return check_awp(id, chat);
#endif
}
//Native’s
#if defined AWP_LIMIT
bool: check_awp(id, check = false, chat = true)
#else
bool: check_awp(id, chat = true)
#endif
{
new EBLOCKS:block;
#if defined AWP_ROUND_LIMIT
if(gBlock[id] > gRound)
block = BL_RND;
else
#endif
#if defined AWP_ONLINE
if(gCount < sCvars[CVAR_ONLINE])
block = BL_ONLINE;
else
#endif
#if defined AWP_LIMIT
if(sCvars[CVAR_LIMIT_AWP_STATUS]){
if(sCvars[CVAR_LIMIT_IMMUN] && sCvars[CVAR_LIMIT_IMMUN] != 2 && get_user_flags(id) & FLAG)
return true;
#if defined PERCENT_PLAYERS
if(sAwp[gTeam[id]] < gLimit)
#else
if(sAwp[gTeam[id]] < sCvars[CVAR_LIMIT_MAX_AWP])
#endif
{
if(!check)
sAwp[gTeam[id]] ++;
return true;
}else
block = BL_LIMIT;
}else
#endif
return true;
if(chat){ //Слишком туп, чтобы придумать какой нибудь другой вариант с чатом.
switch(block){
#if defined AWP_ROUND_LIMIT
case BL_RND:{
new c = gBlock[id] — gRound;
client_print_color(id, false, MSG_ROUND, MSG_PREFIX, c, get_text(c));
}
#endif
#if defined AWP_ONLINE
case BL_ONLINE: client_print_color(id, false, «%s %s», MSG_PREFIX, MSG_LOWONLINE);
#endif
#if defined AWP_LIMIT
case BL_LIMIT: client_print_color(id, false, «%s %s», MSG_PREFIX, MSG_LIMIT);
#endif
}
}
return false;
}
public RemoveItem(id, pItem){
if(get_member(pItem, m_iId) == WEAPON_AWP)
minus_awp(id);
}
stock minus_awp(id){
if(!is_user_valid(id) || gAwp[id] <= AWP_NONE)
return;
#if defined AWP_LIMIT || defined AWP_ROUND_LIMIT
new flag = get_user_flags(id) & FLAG;
#endif
#if defined AWP_ROUND_LIMIT
gAwp[id] = (flag && sCvars[CVAR_LIMIT_IMMUN] > 1) ? AWP_NONE : AWP_DROP;
#else
gAwp[id] = AWP_NONE;
#endif
#if defined AWP_LIMIT
if(!sCvars[CVAR_LIMIT_AWP_STATUS])
return;
if(sCvars[CVAR_LIMIT_IMMUN] && sCvars[CVAR_LIMIT_IMMUN] != 2 && flag)
return;
sAwp[gTeam[id]] —;
#endif
}
stock bool: is_user_valid(id){
if(is_user_bot(id) || is_user_hltv(id))
return false;
return true;
}
stock get_text(tm){
new ost = tm % 10, ost2 = tm % 100, buff[16];
if(ost2 >= 5 && ost2 <= 20)
format(buff, charsmax(buff), «раундов»);
else{
switch(ost){
case 1: format(buff, charsmax(buff), «раунд»);
case 2..4: format(buff, charsmax(buff), «раунда»);
case 0, 5..9: format(buff, charsmax(buff), «раундов»);
}
}
return buff;
}
iphone532776 | 2.2.2016, 18:16 Сообщение |
Стаж: 5 лет 6 месяцев Сообщений: 66 | Добрый вечер. У меня вопрос по поводу администрирования на сервере. Как сделать так что бы я (Гл.Админ) мог кикать, банить итд других админов. Но при этом что бы обычные админы не могли друг друга банить кикать итд… ??? |
|
energydance | 2.2.2016, 18:22 Сообщение |
Стаж: 5 лет 1 месяц Сообщений: 2639 | Цитата(iphone532776 @ 2.2.2016, 19:11) Добрый вечер. У меня вопрос по поводу администрирования на сервере. Как сделать так что бы я (Гл.Админ) мог кикать, банить итд других админов. Но при этом что бы обычные админы не могли друг друга банить кикать итд… ??? Убери у всех админов флаг RCON |
|
|
iphone532776 | 2.2.2016, 18:25 Сообщение |
Стаж: 5 лет 6 месяцев Сообщений: 66 |
|
|
|
meloman | 2.2.2016, 18:28 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 | |
| Поблагодарили 1 раз
|
energydance | 2.2.2016, 18:32 Сообщение |
Стаж: 5 лет 1 месяц Сообщений: 2639 |
не нужно людей вводить в заблуждение Каждый раз одни и те же слова , обновись )) |
| Поблагодарили 1 раз
|
meloman | 2.2.2016, 18:35 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 |
|
| Поблагодарили 1 раз
|
iphone532776 | 2.2.2016, 18:36 Сообщение |
Стаж: 5 лет 6 месяцев Сообщений: 66 |
|
|
|
georgeml | 2.2.2016, 18:36 Сообщение |
Стаж: 6 лет 6 месяцев Сообщений: 1443 |
Отредактировал: georgeml, — 2.2.2016, 18:37 |
|
|
meloman | 2.2.2016, 18:41 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 |
Цитата Как сделать так что бы я (Гл.Админ) мог кикать, банить итд других админов. Но при этом что бы обычные админы не могли друг друга банить кикать итд… ??? я скинул ссылку где уже выложили готовый переделанный плагин разве этого не достаточно? |
|
|
georgeml | 2.2.2016, 18:46 Сообщение |
Стаж: 6 лет 6 месяцев Сообщений: 1443 |
Цитата И еще вопрос сейчас админы с флагом а могут банить, кикать друг друга. как сделать что бы не могли ??? |
| Поблагодарили 1 раз
|
meloman | 2.2.2016, 18:48 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 | Цитата(iphone532776 @ 2.2.2016, 21:32)
значит вы что то не так сделали что вы меняли говорите =) |
|
|
georgeml | 2.2.2016, 18:50 Сообщение |
Стаж: 6 лет 6 месяцев Сообщений: 1443 |
|
|
|
meloman | 2.2.2016, 18:52 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 | Цитата(iphone532776 @ 2.2.2016, 21:32)
и да, это у вас после установки того плагина? |
|
|
iphone532776 | 2.2.2016, 18:55 Сообщение |
Стаж: 5 лет 6 месяцев Сообщений: 66 |
|
|
|
meloman | 2.2.2016, 18:57 Сообщение |
Стаж: 4 года 10 месяцев Сообщений: 746 | Цитата(iphone532776 @ 2.2.2016, 21:50)
ну так говорите по подробнее что вы ставили что редактировали |
|
|
qvadro | 2.2.2016, 19:09 Сообщение |
Стаж: 10 лет Сообщений: 358 |
Код: /* Вопрос по флагами администратора (Пост #888731) вынес линк из под спойлера чтоыб читабельным cnfk Отредактировал: qvadro, — 2.2.2016, 19:19 |
|
|
пользователей и 2 гостей читают эту тему:
#1
Привет всем.У меня есть давно проблема с иммунитетом админов.То есть я хочу,чтобы админы с иммунитетом 99 не могли банить друг друга,Именно те админы которые имеют равный иммунитет.sm_immunity_mode пробовал менять значение как угодно.Кто может помочь или подсказать?
R1KO
fuck society
Команда форума
Сообщения
8,880
Реакции
6,518
KorDen
Atra esterní ono thelduin!
Сообщения
2,187
Реакции
1,425
#3
// 0: Ignore immunity levels (except for specific group immunities).
// 1: Protect from admins of lower access only.
// 2: Protect from admins of equal to or lower access.
// 3: Same as 2, except admins with no immunity can affect each other.
Возможен только вариант «меньше либо равно», т.е. sm_immunity_mode 2
просто «равно» нету
Т.е. при 2 тот, у кого 99 не может забанить тех, у кого 99, 100 и выше.
#4
Возможен только вариант «меньше либо равно», т.е. sm_immunity_mode 2
просто «равно» нетуТ.е. при 2 тот, у кого 99 не может забанить тех, у кого 99, 100 и выше.
Я что то не понял,я поставил значение sm_immunity_mode 2,выставил иммунитет 99 себе и другому админу,но также могу его забанить.Или что то не так?
R1KO
fuck society
Команда форума
Сообщения
8,880
Реакции
6,518
#5
arte, значит что-то не так
#6
arte, значит что-то не так
Можете подсказать,может что-то в sm не так настроено?
#7
Зачем ставить 99 и 10 хватит
#8
Зачем ставить 99 и 10 хватит
даже если 10 ,то как сделать,чтобы админы не смогли друг друга забанить
R1KO
fuck society
Команда форума
Сообщения
8,880
Реакции
6,518
#9
arte, sm_immunity_mode 2
сказали же
#10
даже если 10 ,то как сделать,чтобы админы не смогли друг друга забанить
/ 0: Игнорировать иммунитет уровнях (за исключением специфических иммунитетов группы).
/ / 1: Защита от админов нижних доступом.
/ / 2: Защита от админов, равной или ниже доступа.
/ / 3: То же, что 2, за исключением администраторов, без иммунитета может влиять друг на друга.
#11
arte, sm_immunity_mode 2
сказали же
ну поставил 2,все так же
KorDen
Atra esterní ono thelduin!
Сообщения
2,187
Реакции
1,425
#13
czar45, 100% 1.4.2 или какая там, ну ты понял
R1KO
fuck society
Команда форума
Сообщения
8,880
Реакции
6,518
#14
czar45, 100% 1.4.2 или какая там, ну ты понял
Если ты намекаешь на 34 (не обсуждение), то у других же всё нормально.
Но если это действительно в34 то это плохо.
ТС, инфу у сервере и sm и mm