Ошибка в плагине AWPoff [1.7]

Сообщения
148
Реакции
48
Помог
4 раз(а)
Ошибка
L 12/25/2018 - 17:47:06: Start of error session.
L 12/25/2018 - 17:47:06: Info (map "de_cbble_winter") (file "addons/amxmodx/logs/error_20181225.log")
L 12/25/2018 - 17:47:06: [FAKEMETA] Invalid entity 7 (no private data)
L 12/25/2018 - 17:47:06: [AMXX] Displaying debug trace (plugin "hlds_awp_off.amxx", version "1.7")
L 12/25/2018 - 17:47:06: [AMXX] Run time error 10: native error (native "get_pdata_int")
L 12/25/2018 - 17:47:06: [AMXX] [0] hlds_awp_off.sma::MenuSelect (line 265)
L 12/25/2018 - 21:33:20: Start of error session.
L 12/25/2018 - 21:33:20: Info (map "de_russka") (file "addons/amxmodx/logs/error_20181225.log")
L 12/25/2018 - 21:33:20: [FAKEMETA] Invalid entity 30 (no private data)
L 12/25/2018 - 21:33:20: [AMXX] Displaying debug trace (plugin "hlds_awp_off.amxx", version "1.7")
L 12/25/2018 - 21:33:20: [AMXX] Run time error 10: native error (native "get_pdata_int")
L 12/25/2018 - 21:33:20: [AMXX] [0] hlds_awp_off.sma::MenuSelect (line 265)
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5235
Билд
ReHLDS version: 3.4.0.668-dev
ReGamedll
ReGameDLL version: 5.7.0.318-dev
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Список метамодулей
[ 1] Reunion          RUN   -    reunion_mm_i386.so                       v0.1.0.92       ini  Start Never
[ 2] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 3] Rechecker RUN - rechecker_mm_i386.so v2.5 ini Chlvl ANY
[ 4] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC3 ini ANY ANY
[ 5] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5235 ini Start ANY
[ 6] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 7] WHBlocker RUN - whblocker_mm_i386.so v1.5.696 ini Chlvl ANY
[ 8] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 9] VTC AMXX API RUN - VoiceTranscoderApiProvider_amxx_i386.so v2017 RC pl5 ANY ANY
[10] ReAPI RUN - reapi_amxx_i386.so v5.6.0.160-dev pl5 ANY Never
[11] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl5 ANY Never
[12] MySQL RUN - mysql_amxx_i386.so v1.9.0.5235 pl5 ANY ANY
[13] SQLite RUN - sqlite_amxx_i386.so v1.9.0.5235 pl5 ANY ANY
[14] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5235 pl5 ANY ANY
[15] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5235 pl5 ANY ANY
[16] Engine RUN - engine_amxx_i386.so v1.9.0.5235 pl5 ANY ANY
16 plugins, 16 running
Список плагинов
[  1] Admin Loader            3.5         neygomon          admin_loader.am  running  
[ 2] DopBan 3.0.3b kanagava dop_ban.amxx running
[ 3] FreshBans 1.4.0b kanagava fresh_bans_140. running
[ 4] ScreenMaker 1.1 neygomon screen_maker.am running
[ 5] WebHS 0.1 kanagava fb_web_online.a running
[ 6] ReAimDetector API 0.2.1 ReHLDS Team reaimdetector.a running
[ 7] Ultimate Chats Control 4.7 neygomon ucc.amxx running
[ 8] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 9] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 10] AES: Admin Tools 0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 11] AES: StatsX 0.5.9 [REA serfreeman1337/s aes_statsx_cstr running
[ 12] AES: Informer 0.5.9 [REA serfreeman1337/s aes_informer.am running
[ 13] Info Rank 0.4.5 ConnorMcLeod info_rank.amxx running
[ 14] CSStatsX SQL 0.7.4+1 serfreeman1337 csstatsx_sql.am running
[ 15] Test Vip 0.1 ill testvip_sql.amx running
[ 16] Map Manager: Core 3.0.0 Mistrick map_manager_cor running
[ 17] Map Manager: Scheduler 0.1.0 Mistrick map_manager_sch running
[ 18] Map Manager: Rtv 0.0.4 Mistrick map_manager_rtv running
[ 19] Map Manager: Nominatio 0.0.8 Mistrick map_manager_nom running
[ 20] Map Manager: BlockList 0.0.3 Mistrick map_manager_blo running
[ 21] Map Manager: Online so 0.0.2 Mistrick map_manager_onl running
[ 22] Map Manager: Effects 0.0.8 Mistrick map_manager_eff running
[ 23] Map Manager: Informer 0.0.5 Mistrick map_manager_inf running
[ 24] Map Manager: Advanced 0.0.4 Mistrick map_manager_adv running
[ 25] MM block ext 0.0.1 dev-cs map_manager_blo running
[ 26] Hide HUD/Menu on Vote 1.2 d3m37r4 hide_hud_and_me running
[ 27] Menus Front-End 1.5 neugomon menufront_end.a running
[ 28] Admin Commands 1.9.0.5235 AMXX Dev Team admincmd.amxx running
[ 29] Players Menu 1.7 neugomon players_menu.am running
[ 30] Maps Menu 1.4.1+1 neugomon mapsmenu.amxx running
[ 31] Say me and Say hp 1.4 neygomon sayme.amxx running
[ 32] Stats Configuration 1.9.0.5235 AMXX Dev Team statscfg.amxx running
[ 33] CS Stats Logging 1.9.0.5235 AMXX Dev Team stats_logging.a running
[ 34] AdminFreeLook 1.0 ReHLDS Team adminfreelook.a running
[ 35] Lite Admin ESP 1.0 neygomon admin_esp.amxx running
[ 36] Ping Control 1.31 neygomon Ping_Control.am running
[ 37] Admin Models 1.2 pUzzlik admin_models_v1 running
[ 38] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 39] Weapon Restrict 1.7 s1lent weapon_rest.amx running
[ 40] Advert Messages 1.22 neygomon adverts.amxx running
[ 41] Auto Demo Recorder 2.3 F@nt0M demo_recorder.a running
[ 42] Kills Counter 1.0 Safety1st killscounter.am running
[ 43] SF Warn Menu 0.1.4f serfreeman1337 sf_admin_warns. running
[ 44] AFK Control 1.4.1 [Rnd neygomon afk_control.amx running
[ 45] Block Advert 1.4 neygomon block_advert.am running
[ 46] Flash Control 2.2 neygomon flash_control.a running
[ 47] [ReAPI]Vip Weapons 3.5 ill Vip_Weapons.amx running
[ 48] Night Damager_Parashut 1.0 ill NightLiteVip.am stopped
[ 49] Steam Bonus 1.1 ill+F@nToM steam_bonus_a2. stopped
[ 50] No Players Map 0.1 X-factor no_players_map. stopped
[ 51] [ReAPI] Round Balancer 1.1 neygomon round_balancer. debug
[ 52] GameName Changer 1.0 neugomon gamename_change running
[ 53] AWPoff 1.7 PAffAEJIkA :3 hlds_awp_off.am debug
[ 54] Killer ScreenFade 0.0.5 Vaqtincha reapi_killer_sc running
[ 55] Yet Another Voteban 1.7 AndrewZ/voed/wop yet_another_vot running
[ 56] Time Pause Plugins 1.0 maFFyoZZyk & Mak time_pause_plug running
[ 57] block ip 0.2 legenda amx_blockip.amx running
[ 58] [ReAPI] Random Weapons 2.4.9 neugomon/h1k3 random_weapons_ running
[ 59] Custom Smoke 1.05 bionext custom_smoke.am running
[ 60] Vip drop take block 1.3 bionext vip_drop_take_b running
[ 61] Lite Translit 2.8+1 neygomon lite_translit.a running
[ 62] Christmas hat 0.3 AMXX.Shop christmas_hat_r running
[ 63] Snow 0.1 floatman snow.amxx running
[ 64] Models Replacement 0.0.2 ConnorMcLeod | V models_replacem running
64 plugins, 61 running
Автор плагина
PAffAEJIkA :3 (paffgame)
Версия плагина
1.7 [17.03.18]
Исходный код
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta_util >

#if AMXX_VERSION_NUM < 183
#include < colorchat >
#define MAX_PLAYERS 32
#define client_disconnected client_disconnect
#endif

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

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

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

// ^4 - зелёный | ^3 - цвет тимы (КТ - синий | Т - красный | SPEC - серый) | ^1 - жёлтый
#define MSG_PREFIX "^1[^4AWP^1]"
#define MSG_LOWONLINE "У вас^4 отобрано^3 AWP. Причина:^4 низкий онлайн."
#define MSG_LIMIT "У вас^4 отобрано^3 AWP. Причина:^4 превышен лимит."

#define FLAG ADMIN_BAN //Флаг для иммунитета от лимита

#define RETURN_MONEY //Возвращать деньги при отборе авп в конце раунда из-за низкого онлайна? (Закоментируйте, если не хотите, чтобы возвращало деньги)
#if defined RETURN_MONEY
#define MONEY_AWP 4750 //Сколько денег возвращать?

new g_MoneyMsgID;
#endif

//#define PERCENT_PLAYERS
/*
Разкоменитруйте, если хотите чтобы лимит зависил от процента игроков [I am chetko ob'yasnyat']

Например: Онлайн = 10, Процент в кваре(awp_limit_max) = 20
10/100*20 = 2 авп на тиму (2 у терров и 2 у кт)
*/

//#define NOEND //Если разкоментировано, то не будет отбирать АВП в конце раунда из-за низкого онлайна. [Если онлайн ниже чем указан в кваре и человек сам дропнет авп или потеряет ее, то подобрать заного не сможет]
//■■■■■■■■■■■■■■■■■■■■■■■■ CONFIG END ■■■■■■■■■■■■■■■■■■■■■■■■//

const iMoney = 115;
const iMenu = 205;
const iTeam = 114;
const idRifleMenu = 6;
const idNoMenu = 0;
const OFFSET_LINUX_WEAPONS = 4;
const OFFSET_WEAPONID = 43;
const AWP_COST = 4750;

#define get_menuid(%0) get_pdata_int(%0, iMenu)
#define fm_get_user_team(%0) ETEAMS:get_pdata_int(%0, iTeam)
#define fm_get_weaponid(%0) get_pdata_int(%0, OFFSET_WEAPONID, OFFSET_LINUX_WEAPONS)
#define fm_get_user_money(%0) get_pdata_int(%0 , iMoney)
#define IsPlayer(%0) (0 < %0 < 33)
#define TASK_ID 2281337

enum ETEAMS {
TEAM_TERRORIST = 1,
TEAM_CT,

TEAM_SPECTATOR
};

enum ECVARS {
CVAR_ONLINE = 0,
CVAR_LIMIT_AWP_STATUS,
CVAR_LIMIT_MAX_AWP,
CVAR_LIMIT_IMMUN,
CVAR_BUYTIME
};

enum {
AWP_NONE = 0,
AWP_BUY,
AWP_PICK_UP
};

new gBuy = true;
new sAwp[ETEAMS: TEAM_SPECTATOR], gCount, gCvar[ECVARS], sCvars[ECVARS], gAwp[MAX_PLAYERS + 1], ETEAMS: gTeam[MAX_PLAYERS + 1];
#if defined PERCENT_PLAYERS
new gLimit;
#endif

public plugin_precache(){
register_plugin("AWPoff", "1.7", "PAffAEJIkA :3");

gCvar[CVAR_ONLINE] = register_cvar("awp_players_low", "8"); //Если онлайн ниже указнного в кваре, в конце раунда у всех отберет авп, и запретит ее. (Что бы отключить поставьте 0) [стандартно: при онлайне меньше 8]
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", "1"); //Включить|Выключить иммунитет от лимита(Людей с флагом не учитывает вообще) [Стандартно включен]

gCvar[CVAR_BUYTIME] = get_cvar_pointer("mp_buytime");
}

public plugin_init(){
new mapname[32];
get_mapname(mapname, charsmax(mapname));

new maps[][] = { "awp", "aim", "35hp", "$" };
for(new i; i < sizeof maps; i++){
if(containi(mapname, maps[i]) != -1){
pause("ad");
return;
}
}

register_logevent("EventRoundStart", 2, "1=Round_Start");
#if !defined NOEND
register_logevent("EventRoundEnd", 2, "1=Round_End");
#endif
register_logevent("EventRestartRound", 2, "1&Restart_Round_");

register_menucmd(register_menuid("BuyRifle", true), (1<<4|1<<5), "BuyRifle_Handle");
register_clcmd("menuselect", "MenuSelect");
register_clcmd("awp", "AwpBuy");
register_clcmd("magnum", "AwpBuy");

RegisterHam(Ham_Item_AddToPlayer, "weapon_awp", "AddToPlayer");
RegisterHam(Ham_RemovePlayerItem, "player", "RemoveItem");
RegisterHam(Ham_Spawn, "player", "SpawnPlayer", true);

register_concmd("awpoff_reload", "load_cvars");

#if defined RETURN_MONEY
g_MoneyMsgID = get_user_msgid("Money");
#endif
}

public plugin_cfg(){
#if AMXX_VERSION_NUM < 183
server_exec();
#endif
load_cvars(0);
}

public load_cvars(id){
sCvars[CVAR_ONLINE] = get_pcvar_num(gCvar[CVAR_ONLINE]);
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_MAX_AWP]);

if(IsPlayer(id))
client_print(id, print_center, "[AWPoff] Cvars have been reloaded!");
}

public client_disconnected(id) if(IsPlayer(id)) minus_awp(id);

public EventRestartRound(){
sAwp[TEAM_CT] = 0;
sAwp[TEAM_TERRORIST] = 0;
arrayset(gAwp, AWP_NONE, sizeof gAwp);
}

public EventRoundStart(){
gBuy = true;
remove_task(TASK_ID);
set_task(get_pcvar_float(gCvar[CVAR_BUYTIME]) * 60.0, "off_buy", TASK_ID);

new pl[32];
get_pl(pl, gCount);

#if defined PERCENT_PLAYERS
const MAX_PERCENT = 100;
gLimit = gCount * sCvars[CVAR_LIMIT_MAX_AWP] / MAX_PERCENT;
#endif
}

public off_buy()
gBuy = false;

#if !defined NOEND
public EventRoundEnd(){
static players[32], cnt;
get_pl(players, cnt);

if(cnt >= sCvars[CVAR_ONLINE])
return PLUGIN_CONTINUE;

for(new i = 0, id; i < cnt; i ++){
id = players[i];

#if defined ALLPLAYERS
if(!is_user_valid(id))
continue;
#endif

if(gAwp[id] == AWP_NONE)
continue;

fm_strip_user_gun(id, CSW_AWP);
#if defined RETURN_MONEY
if(gAwp[id] == AWP_BUY){
new gMoney = fm_get_user_money(id) + MONEY_AWP;
fm_set_user_money(id, gMoney);
}
#endif
client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
}
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_TERRORIST <= fm_get_user_team(players[i]) < TEAM_SPECTATOR)
players1[cnt ++] = players[i];
}

players = players1;
count = cnt;
#endif
}

public SpawnPlayer(id){
if(!is_user_alive(id))
return HAM_IGNORED;

gTeam[id] = fm_get_user_team(id);
return HAM_IGNORED;
}

public AddToPlayer(wId, id){
if(!check_awp(id, AWP_PICK_UP)){
SetHamReturnInteger(0);
return HAM_SUPERCEDE;
}

return HAM_IGNORED;
}

public RemoveItem(id,iEnt){
if(fm_get_weaponid(iEnt) == CSW_AWP)
minus_awp(id);
}

public BuyRifle_Handle(id, key){
if(key != (gTeam[id] == TEAM_TERRORIST ? 4 : 5))
return PLUGIN_CONTINUE;

if(!check_buy(id))
return PLUGIN_CONTINUE; //Чтобы сообщениео нехватке денег или о конце тайма покупки вылазило, было сделано в виде таких проверочек

if(check_awp(id, AWP_BUY))
return PLUGIN_CONTINUE;

set_pdata_int(id, iMenu, idNoMenu);
return PLUGIN_HANDLED;
}

public MenuSelect(id){
if(get_menuid(id) != idRifleMenu)
return PLUGIN_CONTINUE;

new szSlot[3], Slot;
read_argv(true, szSlot, charsmax(szSlot));
Slot = str_to_num(szSlot);

if(Slot != (gTeam[id] == TEAM_TERRORIST ? 5 : 6))
return PLUGIN_CONTINUE;

if(!check_buy(id))
return PLUGIN_CONTINUE; //Чтобы сообщениео нехватке денег или о конце тайма покупки вылазило, было сделано в виде таких проверочек

if(check_awp(id, AWP_BUY))
return PLUGIN_CONTINUE;

set_pdata_int(id, iMenu, idNoMenu);
return PLUGIN_HANDLED;
}

public AwpBuy(id){
if(!check_buy(id))
return PLUGIN_CONTINUE; //Чтобы сообщениео нехватке денег или о конце тайма покупки вылазило, было сделано в виде таких проверочек

if(check_awp(id, AWP_BUY))
return PLUGIN_CONTINUE;

return PLUGIN_HANDLED;
}

//Native's
public plugin_natives()
register_native("awpoff_check", "check_native", true);

public check_native(id)
return check_awp(id, AWP_NONE);
//Native's

check_buy(id){
if(!gBuy) //Ничего умнее не придумал (1)
return false;

new gMoney = fm_get_user_money(id); //Ничего умнее не придумал (2)
if(gMoney < AWP_COST)
return false;

return true;
}

check_awp(id, type){
if(gAwp[id] != AWP_NONE || !is_user_valid(id) || !is_user_alive(id))
return true;

gAwp[id] = type;

if(gCount < sCvars[CVAR_ONLINE])
client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LOWONLINE);
else if(sCvars[CVAR_LIMIT_AWP_STATUS]){

if(sCvars[CVAR_LIMIT_IMMUN] && 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(type != AWP_NONE)
sAwp[gTeam[id]] ++;
return true;
}else
client_print_color(id, false, "%s %s", MSG_PREFIX, MSG_LIMIT);
}else
return true;

gAwp[id] = AWP_NONE;
return false;
}

minus_awp(id){
if(!is_user_valid(id) || gAwp[id] == AWP_NONE)
return;

gAwp[id] = AWP_NONE;

if(!sCvars[CVAR_LIMIT_AWP_STATUS])
return;

if(sCvars[CVAR_LIMIT_IMMUN] && get_user_flags(id) & FLAG)
return;

sAwp[gTeam[id]] --;
}

stock fm_set_user_money(id, money){
set_pdata_int(id, iMoney, money);

message_begin(MSG_ONE_UNRELIABLE, g_MoneyMsgID, _, id);
write_long(money);
write_byte(true);
message_end();
}

is_user_valid(id){
if(is_user_bot(id)) return false;
if(is_user_hltv(id)) return false;
return true;
}
Вроде все работает, но неприятно когда сыпятся каждый день файлы ошибок. Подскажите, плиз, как решить.
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
265-ая строка
Код:
- if(get_menuid(id) != idRifleMenu)
+ if(!is_user_connected(id) || get_menuid(id) != idRifleMenu)
 
Сообщения
282
Реакции
34
Помог
3 раз(а)
When players buy awp and its crossed limit, they lose money. Is there possibility to prevent losing money and not buying at all, with text restriction "You cannot buy..." ?
 
Сообщения
1,340
Реакции
529
Помог
91 раз(а)
drag1c, есть возможность, заказать за деньги доработку плагина.
 
Сообщения
282
Реакции
34
Помог
3 раз(а)
[QUOTE = "present, post: 113333, member: 394"]
[USER = 7940] drag1c [/ USER], it is possible to order a plug-in modification for money.
[/ QUOTE]
Thank you for information.
Plugin actually not working properly, because people losing money not knowing they are above limit.
 

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

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