ReHLDS/ReAPI AWPoff

paffgame

D0L64E6
Разработчик
Регистрация
9 Июн 2017
Сообщения
154
Симпатии
84
Пол
Мужской
Telegram
@paffgame
Khan, именно так
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
вот посмотри пожалуйста что я не правильно сделал
#include < amxmodx >
#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 "^3[^4AWP^3]"
#define MSG_LOWONLINE "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."
#define MSG_ROUND "%s У вас^4 отобрано^3 AWP. Причина:^4 подождите %d %s"

#define ALLPLAYERS
/*
Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).

Пример:
Допустим на сервере 5 ботов и 2 человека 1 хлтв.
Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).

Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG ADMIN_LEVEL_H //Флаг для иммунитета от лимита и блока на раунды

#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", "1"); //На сколько раундов блочить?
#endif
}
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
Здравствуйте ошибку выдает какой то посмотрите плииз! откл роунд лимит!
#include < amxmodx >
#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 "^3[^4AWP^3]"
#define MSG_LOWONLINE "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."
#define MSG_ROUND "%s У вас^4 отобрано^3 AWP. Причина:^4 подождите %d %s"

#define ALLPLAYERS
/*
Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).

Пример:
Допустим на сервере 5 ботов и 2 человека 1 хлтв.
Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).

Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG ADMIN_LEVEL_H //Флаг для иммунитета от лимита и блока на раунды

#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", "2"); //Сколько АВП разрешено при лимите [Стандартно по 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", "1"); //На сколько раундов блочить?
#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) != -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;

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))
continue;
#endif

return_awp(players);
}
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, m_iTeam) < TEAM_SPECTATOR)
players1[cnt ++] = players;
}

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;
}


L 04/14/2018 - 19:32:26: Start of error session.
L 04/14/2018 - 19:32:26: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180414.log")
L 04/14/2018 - 19:32:26: [AMXX] Run time error 4 (plugin "awp_off.amxx") - debug not enabled!
L 04/14/2018 - 19:32:26: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 04/14/2018 - 19:32:26: [awp_off.amxx] AddItem : Can't suppress original function call without new return value set
L 04/14/2018 - 19:32:26: [AMXX] Run time error 2 (plugin "awp_off.amxx") - debug not enabled!
L 04/14/2018 - 19:32:26: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Здравствуйте ошибку выдает какой то посмотрите плииз! откл роунд лимит!
#include < amxmodx >
#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 "^3[^4AWP^3]"
#define MSG_LOWONLINE "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."
#define MSG_ROUND "%s У вас^4 отобрано^3 AWP. Причина:^4 подождите %d %s"

#define ALLPLAYERS
/*
Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).

Пример:
Допустим на сервере 5 ботов и 2 человека 1 хлтв.
Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).

Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG ADMIN_LEVEL_H //Флаг для иммунитета от лимита и блока на раунды

#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", "2"); //Сколько АВП разрешено при лимите [Стандартно по 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", "1"); //На сколько раундов блочить?
#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) != -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;

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))
continue;
#endif


return_awp(players);
}
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, m_iTeam) < TEAM_SPECTATOR)
players1[cnt ++] = players;
}

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;
}

L 04/14/2018 - 19:32:26: Start of error session.
L 04/14/2018 - 19:32:26: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180414.log")
L 04/14/2018 - 19:32:26: [AMXX] Run time error 4 (plugin "awp_off.amxx") - debug not enabled!
L 04/14/2018 - 19:32:26: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 04/14/2018 - 19:32:26: [awp_off.amxx] AddItem : Can't suppress original function call without new return value set
L 04/14/2018 - 19:32:26: [AMXX] Run time error 2 (plugin "awp_off.amxx") - debug not enabled!
L 04/14/2018 - 19:32:26: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Чтобы понять, где ошибка нужно прописать debug
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
Чтобы понять, где ошибка нужно прописать debug
L 04/15/2018 - 20:52:27: Start of error session.
L 04/15/2018 - 20:52:27: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180415.log")
L 04/15/2018 - 20:52:27: [AMXX] Displaying debug trace (plugin "awp_off.amxx", version "1.4.3")
L 04/15/2018 - 20:52:27: [AMXX] Run time error 4: index out of bounds
L 04/15/2018 - 20:52:27: [AMXX] [0] awp_off.sma::check_awp (line 350)
L 04/15/2018 - 20:52:27: [AMXX] [1] awp_off.sma::AddItem (line 298)
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
здорово ошибку выдает Debug прописал вот что в логе
L 04/15/2018 - 20:52:27: Start of error session.
L 04/15/2018 - 20:52:27: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180415.log")
L 04/15/2018 - 20:52:27: [AMXX] Displaying debug trace (plugin "awp_off.amxx", version "1.4.3")
L 04/15/2018 - 20:52:27: [AMXX] Run time error 4: index out of bounds
L 04/15/2018 - 20:52:27: [AMXX] [0] awp_off.sma::check_awp (line 350)
L 04/15/2018 - 20:52:27: [AMXX] [1] awp_off.sma::AddItem (line 298)
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
L 04/17/2018 - 11:41:12: Start of error session.
L 04/17/2018 - 11:41:12: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20180417.log")
L 04/17/2018 - 11:41:12: [AMXX] Displaying debug trace (plugin "awp_off.amxx", version "1.4.3")
L 04/17/2018 - 11:41:12: [AMXX] Run time error 4: index out of bounds
L 04/17/2018 - 11:41:12: [AMXX] [0] awp_off.sma::check_awp (line 350)
L 04/17/2018 - 11:41:12: [AMXX] [1] awp_off.sma::AddItem (line 298)
L 04/17/2018 - 22:20:33: Start of error session.
L 04/17/2018 - 22:20:33: Info (map "de_inferno") (file "addons/amxmodx/logs/error_20180417.log")
L 04/17/2018 - 22:20:33: [AMXX] Displaying debug trace (plugin "awp_off.amxx", version "1.4.3")
L 04/17/2018 - 22:20:33: [AMXX] Run time error 4: index out of bounds
L 04/17/2018 - 22:20:33: [AMXX] [0] awp_off.sma::minus_awp (line 407)
L 04/17/2018 - 22:20:33: [AMXX] [1] awp_off.sma::client_disconnected (line 168)
L 04/17/2018 - 23:05:47: Start of error session.
L 04/17/2018 - 23:05:47: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20180417.log")
L 04/17/2018 - 23:05:47: [AMXX] Displaying debug trace (plugin "awp_off.amxx", version "1.4.3")
L 04/17/2018 - 23:05:47: [AMXX] Run time error 4: index out of bounds
L 04/17/2018 - 23:05:47: [AMXX] [0] awp_off.sma::minus_awp (line 407)
L 04/17/2018 - 23:05:47: [AMXX] [1] awp_off.sma::client_disconnected (line 168)
 

Khan

Пользователь
Регистрация
13 Июн 2017
Сообщения
58
Симпатии
0
Пол
Мужской
кто поможет исправить ошибку или хз что там ?
 

Molodoi

Команда форума
Модератор
Регистрация
14 Июн 2017
Сообщения
606
Симпатии
126
Khan, а исходник с поста ReHLDS/ReAPI - AWPoff ??? И луче исходник в спойлер бросать в кодировке вот так
PHP:
#include < amxmodx >
#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 "^3[^4AWP^3]"
#define MSG_LOWONLINE "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."
#define MSG_ROUND "%s У вас^4 отобрано^3 AWP. Причина:^4 подождите %d %s"

#define ALLPLAYERS
/*
Закоментируйте, чтобы для проверки на онлайн брались только КТ и ТТ(ботов, хлтв и спектаров считать не будет).

Пример:
Допустим на сервере 5 ботов и 2 человека 1 хлтв.
Дефайн закоментирован: Посчитает, что на сервере 2 из Максимально возможных игроков.
Дефайн раскоментирован: Посчитает, что на сервере 8 игроков из Максимально возможных игроков (5 ботов + 2 человека + 1 хлтв).

Отбирать авп будет ТОЛЬКО У ЛЮДЕЙ в любом случае.
*/

#define FLAG ADMIN_LEVEL_H //Флаг для иммунитета от лимита и блока на раунды

#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", "2"); //Сколько АВП разрешено при лимите [Стандартно по 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", "1"); //На сколько раундов блочить?
#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) != -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;

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))
continue;
#endif

return_awp(players);
}
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, m_iTeam) < TEAM_SPECTATOR)
players1[cnt ++] = players;
}

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;
}
Просто видно луче.
 

present

Пользователь
Регистрация
27 Сен 2017
Сообщения
87
Симпатии
-73
Эта ошибка может быть связана с тем, что проверка стоит на всех игроков (онлайн не стабильный: коннект/дисконнект постоянно)? Или же другие причины?
Код:
Run time error 4: index out of bounds
    [0] awp_off_14.sma::check_awp (line 348)
    [1] awp_off_14.sma::BuyWeaponByWeaponID (line 285)
Displaying debug trace (plugin "awp_off_14.amxx")
Run time error 4: index out of bounds
    [0] awp_off_14.sma::check_awp (line 348)
    [1] awp_off_14.sma::AddItem (line 298)
awp_players_low "0"
awp_limit "1"
awp_limit_max "13"
awp_limit_immun "3"
awp_limit_round "0"
 

xramer

Пользователь
Регистрация
23 Июл 2017
Сообщения
3
Симпатии
0
Пол
Мужской

praccprefere

Пользователь
Регистрация
8 Июн 2017
Сообщения
45
Симпатии
2
Пол
Мужской
Skype
AbrQst
ВКонтакте
praccprefere
Telegram
@praccprefere
такая проблема, плагин работает, но у меня тт не могут купить авп. Подскажите что нибудь
 

deemann

Пользователь
Регистрация
27 Июн 2018
Сообщения
17
Симпатии
0
Всем привет. Отличный плагин. Появляется ошибка в логах.

L 11/29/2018 - 09:37:28: Start of error session.
L 11/29/2018 - 09:37:28: Info (map "$2000$") (file "addons/amxmodx/logs/error_20181129.log")
L 11/29/2018 - 09:37:28: [AMXX] Displaying debug trace (plugin "awp_off.amxx")
L 11/29/2018 - 09:37:28: [AMXX] Run time error 4: index out of bounds
L 11/29/2018 - 09:37:28: [AMXX] [0] cd6d6b0d2b940d05093c767a97c4275b.sma::check_awp (line 384)
L 11/29/2018 - 09:37:28: [AMXX] [1] cd6d6b0d2b940d05093c767a97c4275b.sma::AddItem (line 332)
L 11/29/2018 - 13:43:15: Start of error session.
L 11/29/2018 - 13:43:15: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20181129.log")
L 11/29/2018 - 13:43:15: [AMXX] Displaying debug trace (plugin "awp_off.amxx")
L 11/29/2018 - 13:43:15: [AMXX] Run time error 4: index out of bounds
L 11/29/2018 - 13:43:15: [AMXX] [0] cd6d6b0d2b940d05093c767a97c4275b.sma::minus_awp (line 441)
L 11/29/2018 - 13:43:15: [AMXX] [1] cd6d6b0d2b940d05093c767a97c4275b.sma::client_disconnect (line 202)
 

Sekret

Пользователь
Регистрация
19 Июн 2017
Сообщения
28
Симпатии
2
Пол
Мужской
Всем добрый вечер, я попал с плагином во временную петлю, я собрал сервер на амх 1.9.0 ( ну решил с прогрессом пойти в ногу_) так мало того что он никому не даёт купить авп кроме у кого иммунка, так я его удаляю он мне ложит веапонменю, сразу проблему с Бд в стате от фримена) и удалить его теперь не могу , тогда сервер по новой пере собирать либо вот такие пироги, кто подскажет у кого такая проблема была? и есть ли выход?
 

Vesuvius

НЕ СКРИПТЕР!!!
Команда форума
Администратор
Регистрация
8 Июн 2017
Сообщения
1.595
Симпатии
572
Пол
Мужской
Sekret, amx_plugins в консоль!
 

Sekret

Пользователь
Регистрация
19 Июн 2017
Сообщения
28
Симпатии
2
Пол
Мужской
Sekret, amx_plugins в консоль!
amxx plugins
Currently loaded plugins:
name version author file status
[ 1] Ultimate Chats Control 4.7 neygomon ucc.amxx running
[ 2] CSStatsX SQL 0.7.4+1 serfreeman1337 aes_csstatsx_sq running
[ 3] Admin Loader 2.5.2 neygomon admin_loader_fo running
[ 4] unknown unknown unknown ucc_api_example running
[ 5] UCC Addon: VoteGAG 1.2 neygomon ucc_votegag.amx running
[ 6] Chat Manager 1.1.1-11 Mistrick chatmanager.amx running
[ 7] Chat Manager: Addon 0.0.4-70 Mistrick chatmanager_add running
[ 8] Auto Team Balance Adva 1.4.3 Radius auto_team_balan running
[ 9] Advert Messages 1.3.5 neygomon | Radiu advert_messages running
[ 10] FreshBans 1.3.6 kanagava fresh_bans.amxx running
[ 11] Admin Commands 1.9.0.5241 AMXX Dev Team admincmd.amxx running
[ 12] Commands Menu 1.9.0.5241 AMXX Dev Team cmdmenu.amxx running
[ 13] AmxModMenu_New 2.0 CaNiBaL menufront.amxx running
[ 14] Maps Menu 1.8.2 AMXX Dev Team mapsmenu.amxx running
[ 15] NextMap 1.9.0.5241 AMXX Dev Team nextmap.amxx running
[ 16] Lite MapChooser 2.6 neygomon mapchooser.amxx running
[ 17] Players Menu 1.9.0.5241 AMXX Dev Team plmenu.amxx running
[ 18] Admin Votes 1.9.0.5241 AMXX Dev Team adminvote.amxx running
[ 19] CS Stats Logging 1.9.0.5241 AMXX Dev Team stats_logging.a running
[ 20] Stats Configuration 1.9.0.5241 AMXX Dev Team statscfg.amxx running
[ 21] NO_FITH_TEXT 1.1w perf No_fith_text.am running
[ 22] First Killer Bonus 0.0.1f wopox1337 FirstKillerBonu running
[ 23] Weaponmenu 1.0 ill | Ilya Koren weaponmenu1_0.a running
[ 24] vipmenu 2.0 CaNiBaL vipmenu.amxx running
[ 25] PS VIPKA panicaskil 3.3 vipka.amxx running
[ 26] Yet Another Voteban 1.8 AndrewZ/voed yet_another_vot running
[ 27] Demo Recorder 1.0 Ev demo_record.amx running
[ 28] [Reapi] NameChangeTime 1.0 Vaqtincha NameChangeTime. running
[ 29] Weapon Restrict 2.1 s1lent & neugomo weaponrest.amxx running
[ 30] Motd pravila 1.0 mQ? pravila.amxx running
[ 31] [ReAPI] AdminFreeLook 1.0 ReHLDS Team adminfreelook.a running
[ 32] Kill plugin 1.0 daywer naemnik_sql.amx running
[ 33] Ping Control 1.31 neygomon Ping_Control.am running
[ 34] Warn 1.0 KanyCT@ warn.amxx running
[ 35] Steam Bonus 2.0b neygomon and Aci steam_bonus.amx running
[ 36] C4 Timer 1.1 SAMURAI & Remod: c4_timer.amxx running
[ 37] Kills Counter 1.0 Safety1st killscounter.am running
[ 38] [ReAPI] AWPoff 1.4 PAffAEJIkA :3 awp_off.amxx running
[ 39] [ReAPI] No Team Flash 0.0.2 Vaqtincha no_team_flash.a running
[ 40] [ReAPI] AFK Control 1.4.2 [Rnd neygomon afk_control.amx running
[ 41] [ReApi] Killer ScreenF 0.0.4 Vaqtincha reapi_killer_sc running
[ 42] Killbonus 1.0 PAffAEJIkA :3 killstreak.amxx running
[ 43] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 44] primerbest 0.1 ill the_smartest.am running
[ 45] fb_forwards 0.1.5 Kanagava & Realu fb_forwards.amx running
[ 46] [ReApi] Spec Money Sav 0.1 F@nt0M spec_money_save running
[ 47] Last Played Maps 1.0 Factor LastPlayedMaps. running
[ 48] unknown unknown unknown GirlModel.amxx running
[ 49] Radio Block 2.1 syakin007 block_radio.amx running
[ 50] Mode 2x2 2.5re s1lent mode_2x2.amxx running
[ 51] Parachute for ALL [ReA 3.0 Leo_[BH] parachute_for_a running
[ 52] Advanced Experience Sy 0.5 Vega serfreeman1337 aes_main.amxx running
[ 53] AES: StatsX 0.5 Vega serfreeman1337 aes_statsx.amxx running
[ 54] AES: CStrike Addon 0.5 Vega serfreeman1337 aes_exp_cstrike running
[ 55] AES: Informer 0.5 Vega serfreeman1337 aes_informer.am running
[ 56] AES: Admin Tools 0.5 Vega serfreeman1337 aes_exp_editor. running
[DOUBLEPOST=1556806869][/DOUBLEPOST]да там вообще с 190 траблы, плагины как на таймер бомбы не работают, никаких надписей, ну много плагинов которые с худ оповещением точно не работают) а отступать уже поздно(извините что немного добавил флуда)
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Всем добрый вечер, я попал с плагином во временную петлю, я собрал сервер на амх 1.9.0 ( ну решил с прогрессом пойти в ногу_) так мало того что он никому не даёт купить авп кроме у кого иммунка, так я его удаляю он мне ложит веапонменю, сразу проблему с Бд в стате от фримена) и удалить его теперь не могу , тогда сервер по новой пере собирать либо вот такие пироги, кто подскажет у кого такая проблема была? и есть ли выход?
Ничего непонятно. Как настраивали?
Почему вы считаете что отключение этого плагина что то "ложит"?
 

r1nk0

Пользователь
Регистрация
3 Окт 2018
Сообщения
258
Симпатии
53
Всем добрый вечер, я попал с плагином во временную петлю, я собрал сервер на амх 1.9.0 ( ну решил с прогрессом пойти в ногу_) так мало того что он никому не даёт купить авп кроме у кого иммунка, так я его удаляю он мне ложит веапонменю, сразу проблему с Бд в стате от фримена) и удалить его теперь не могу , тогда сервер по новой пере собирать либо вот такие пироги, кто подскажет у кого такая проблема была? и есть ли выход?
 
Сверху Снизу