Accuracy Fix (индекс выходит за пределы)

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
8
Реакции
2
Ошибка
L 02/11/2025 - 01:22:00: Start of error session.
L 02/11/2025 - 01:22:00: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20250211.log")
L 02/11/2025 - 01:22:00: [AMXX] Displaying debug trace (plugin "AccuracyFix.amxx", version "0.0.6")
L 02/11/2025 - 01:22:00: [AMXX] Run time error 4: index out of bounds
L 02/11/2025 - 01:22:00: [AMXX] [0] AccuracyFix.sma::plugin_init (line 24)
ОС
Linux
Amx Mod X
Amx Mod X 1.9.0,
Билд
Rehlds  3.13.0 788-dev
ReGamedll
Regamedll 5.26.0 668-dev
Версия Metamod
MetaMod v1.3.0.128
Список метамодулей
[ 1] Accuracy Fix RUN - accuracyfix_mm.so v1.1.17 ini ANY ANY 
[ 2] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5294 ini Start ANY
[ 3] WHBlocker RUN - whblocker_mm_i386.so v1.5.695 ini Chlvl ANY
[ 4] Fun RUN - fun_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[ 5] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[ 6] CSX RUN - csx_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[ 7] ReAPI RUN - reapi_amxx_i386.so v5.24.0.300-dev pl2 ANY Never
[ 8] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[ 9] MySQL RUN - mysql_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[10] Engine RUN - engine_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
[11] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5294 pl2 ANY ANY
11 plugins, 11 running
Список плагинов
стандарт
Автор плагина
SmileY
Версия плагина
0.0.6
Исходный код
#include <amxmodx>
#include <fakemeta>

// Max Weapons
#define MAX_WEAPONS 32

// Weapon Slots by index
new const g_iWeaponSlot[] = {0, 2, 0, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3, 1};

// Player Weapon Index
new g_iPlayerWeaponId[MAX_PLAYERS+1] = {0, ...};

// Weapon accuracy value
new g_iAccuracyWeapon[MAX_WEAPONS+1] = {8192, ...};

public plugin_init()
{
register_plugin("Accuracy Fix", "0.0.6", "SmileY", "https://github.com/smileyzn/accuracyfix", "Accuracy Fix (AMXX Plugin)");

new szWeapon[MAX_NAME_LENGTH];

for (new iWeaponId = 0; iWeaponId < MAX_WEAPONS; iWeaponId++)
{
if (1 <= g_iWeaponSlot[iWeaponId] <= 2)
{
get_weaponname(iWeaponId, szWeapon, charsmax(szWeapon));

format(szWeapon, charsmax(szWeapon), "af_distance_%s", szWeapon);

bind_pcvar_num(create_cvar(szWeapon, "8192", FCVAR_NONE, "", true, 0.0, true, 8192.0), g_iAccuracyWeapon[iWeaponId]);
}
}

register_event("CurWeapon", "EV_CurWeapon", "be", "1=1");

register_forward(FM_TraceLine, "FW_FM_TraceLine", true);
}

public EV_CurWeapon(id)
{
g_iPlayerWeaponId[id] = get_user_weapon(id);

return PLUGIN_CONTINUE;
}

public FW_FM_TraceLine(Float:vStart[3], Float:vEnd[3], iSkipMonsters, iEntity, iResult)
{
if (iEntity > 0 && iEntity <= MaxClients)
{
if (pev_valid(iEntity))
{
if (pev(iEntity, pev_flags) & FL_CLIENT|FL_ONGROUND|FL_FAKECLIENT)
{
if (1 <= g_iWeaponSlot[g_iPlayerWeaponId[iEntity]] <= 2)
{
if (g_iAccuracyWeapon[g_iPlayerWeaponId[iEntity]] > 0)
{
new iTarget, iBody;

new Float:Distance = get_user_aiming(iEntity, iTarget, iBody, g_iAccuracyWeapon[g_iPlayerWeaponId[iEntity]]);

if (iTarget > 0 && iTarget <= MaxClients)
{
if (pev_valid(iTarget))
{
if (pev(iTarget, pev_flags) & FL_CLIENT|FL_FAKECLIENT)
{
new Float:vAngle[3];

pev(iEntity, pev_angles, vAngle);

engfunc(EngFunc_MakeVectors, vAngle);

new Float:vForward[3];

global_get(glb_v_forward, vForward);

new Float:vEndResult[3];

vEndResult[0] = vStart[0] + vForward[0] * Distance;
vEndResult[1] = vStart[1] + vForward[1] * Distance;
vEndResult[2] = vStart[2] + vForward[2] * Distance;

engfunc(EngFunc_TraceLine, vStart, vEndResult, iSkipMonsters, iEntity, iResult);
}
}
}
}
}
}
}
}

return FMRES_IGNORED;
}
Здравствуйте помогите исправить ошибку
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
155
Реакции
29
Помог
2 раз(а)
At line 24 try
C++:
- if (1 <= g_iWeaponSlot[iWeaponId] <= 2)
+ if (g_iWeaponSlot[iWeaponId] >= 1 && g_iWeaponSlot[iWeaponId] <= 2)
 
Сообщения
24
Реакции
-9
Предупреждения
18
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
mIDnight, Не вы ли читы продавали с одноименным названием с вашим ником и аналогичной аватаркой?
 
Сообщения
1,193
Реакции
90
Помог
15 раз(а)
ProMatic, при создании массива new const g_iWeaponSlot[] = {0, 2, 0, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3, 1};, длинна вашего массива равна 31, а до этого у вас указано #define MAX_WEAPONS 32, следовательно в цикле for (new iWeaponId = 0; iWeaponId < MAX_WEAPONS; iWeaponId++) на последней итерации будет выход за пределы массива. Измените
Код:
--#define MAX_WEAPONS 32
++#define MAX_WEAPONS 31
 
Последнее редактирование:
Сообщения
24
Реакции
-9
Предупреждения
18
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
mIDnight, Молчание тоже ответ, всë ясно. Я бы сказал вам пару ласковых за вашу деятельность, но и меня же первым камнями закидают. "Успехов" вам по жизни.
 
Сообщения
1,193
Реакции
90
Помог
15 раз(а)
LuaProject, как можно приписывать человеку, без доказательств? Некрасиво как минимум
 
Сообщения
155
Реакции
32
Помог
2 раз(а)
LuaProject, он тебе даже ещё ничего не ответил, а ты уже ему клеймо поставил, что это он. )))). Сам с собой разговариваешь?)) :crazy:
 
Сообщения
66
Реакции
7
Помог
1 раз(а)
а если попробывать так?
Код:
public plugin_init()
{
    register_plugin("Accuracy Fix", "0.0.6", "SmileY", "https://github.com/smileyzn/accuracyfix", "Accuracy Fix (AMXX Plugin)");
    new szWeapon[MAX_NAME_LENGTH];
    
    // реализуем исправленный цикл с проверкой границ массива:
    for (new iWeaponId = 0; iWeaponId < MAX_WEAPONS; iWeaponId++)
    {
        // сделаем проверку, что индекс находится в допустимых границах массива:
        if (iWeaponId < sizeof(g_iWeaponSlot))
        {
            // создадим исправленное условие для проверки слота оружия:
            if (g_iWeaponSlot[iWeaponId] >= 1 && g_iWeaponSlot[iWeaponId] <= 2)
            {
                get_weaponname(iWeaponId, szWeapon, charsmax(szWeapon));
                
                format(szWeapon, charsmax(szWeapon), "af_distance_%s", szWeapon);
                
                bind_pcvar_num(create_cvar(szWeapon, "8192", FCVAR_NONE, "", true, 0.0, true, 8192.0), g_iAccuracyWeapon[iWeaponId]);
            }
        }
    }
    
    register_event("CurWeapon", "EV_CurWeapon", "be", "1=1");
    register_forward(FM_TraceLine, "FW_FM_TraceLine", true);
}
 
Сообщения
155
Реакции
29
Помог
2 раз(а)
mIDnight, Silence is also an answer, everything is clear. I would say a few kind words to you for your activity, but I would be the first to be stoned. "Success" to you in life.
I don't have to explain to you anything i am here with years and everyone knows me, but let me answer you shortly. No that's not me you have messed me with someones else
 
Сообщения
66
Реакции
7
Помог
1 раз(а)
upd: с моим кусочком кода, плагин успешно компилируется.
ошибок в консоли не наблюдаю.

я считаю, проблему человека решил.
 
Сообщения
1,193
Реакции
90
Помог
15 раз(а)
midnightfury, а чем вам не понравилось это решение?
Код:
#include <amxmodx>
#include <fakemeta>

// Max Weapons
#define MAX_WEAPONS 31

// Weapon Slots by index
new const g_iWeaponSlot[] = {0, 2, 0, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3, 1};

// Player Weapon Index
new g_iPlayerWeaponId[MAX_PLAYERS+1] = {0, ...};

// Weapon accuracy value
new g_iAccuracyWeapon[MAX_WEAPONS+1] = {8192, ...};

public plugin_init()
{
    register_plugin("Accuracy Fix", "0.0.6", "SmileY", "https://github.com/smileyzn/accuracyfix", "Accuracy Fix (AMXX Plugin)");

    new szWeapon[MAX_NAME_LENGTH];
    
    for (new iWeaponId = 0; iWeaponId < MAX_WEAPONS; iWeaponId++)
    {
        if (1 <= g_iWeaponSlot[iWeaponId] <= 2)
        {
            get_weaponname(iWeaponId, szWeapon, charsmax(szWeapon));
            
            format(szWeapon, charsmax(szWeapon), "af_distance_%s", szWeapon);
            
            bind_pcvar_num(create_cvar(szWeapon, "8192", FCVAR_NONE, "", true, 0.0, true, 8192.0), g_iAccuracyWeapon[iWeaponId]);
        }
    }
    
    register_event("CurWeapon", "EV_CurWeapon", "be", "1=1");

    register_forward(FM_TraceLine, "FW_FM_TraceLine", true);
}

public EV_CurWeapon(id)
{
    g_iPlayerWeaponId[id] = get_user_weapon(id);
    
    return PLUGIN_CONTINUE;
}

public FW_FM_TraceLine(Float:vStart[3], Float:vEnd[3], iSkipMonsters, iEntity, iResult)
{
    if (iEntity > 0 && iEntity <= MaxClients)
    {
        if (pev_valid(iEntity))
        {
            if (pev(iEntity, pev_flags) & FL_CLIENT|FL_ONGROUND|FL_FAKECLIENT)
            {
                if (1 <= g_iWeaponSlot[g_iPlayerWeaponId[iEntity]] <= 2)
                {
                    if (g_iAccuracyWeapon[g_iPlayerWeaponId[iEntity]] > 0)
                    {
                        new iTarget, iBody;
                        
                        new Float:Distance = get_user_aiming(iEntity, iTarget, iBody, g_iAccuracyWeapon[g_iPlayerWeaponId[iEntity]]);
                        
                        if (iTarget > 0 && iTarget <= MaxClients)
                        {
                            if (pev_valid(iTarget))
                            {
                                if (pev(iTarget, pev_flags) & FL_CLIENT|FL_FAKECLIENT)
                                {
                                    new Float:vAngle[3];
                                
                                    pev(iEntity, pev_angles, vAngle);
                                    
                                    engfunc(EngFunc_MakeVectors, vAngle);
                                
                                    new Float:vForward[3];
                                
                                    global_get(glb_v_forward, vForward);
                                    
                                    new Float:vEndResult[3];
                                    
                                    vEndResult[0] = vStart[0] + vForward[0] * Distance;
                                    vEndResult[1] = vStart[1] + vForward[1] * Distance;
                                    vEndResult[2] = vStart[2] + vForward[2] * Distance;
                                    
                                    engfunc(EngFunc_TraceLine, vStart, vEndResult, iSkipMonsters, iEntity, iResult);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    return FMRES_IGNORED;
}
 
Сообщения
66
Реакции
7
Помог
1 раз(а)
Code_0xABC, я не обратил внимания на другие решения, написал сразу своё))
 
Сообщения
24
Реакции
-9
Предупреждения
18
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
dreamxleo, могу с тобой. Твои книги по кс успешно продаются в интернете? Как успехи в блогерстве?
 
Сообщения
1,193
Реакции
90
Помог
15 раз(а)
LuaProject, хватит флудить в этой теме, автор создал ее не для этого, есть разделы для этого.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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