Проблемы с приписыванием id

Сообщения
21
Реакции
2
Всем привет. Решил исправить свой старый недописанный мини-плагин, однако, столкнулся с бредовой ошибкой в компиляторе.
Вот код:
Код:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <reapi>

#define PLUGIN "Realistic Reload"
#define VERSION "1.0"
#define AUTHOR "Mylo Neath"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    new const WeaponNames[][] = { "weapon_glock18", "weapon_ak47", "weapon_aug", "weapon_awp", "weapon_deagle", "weapon_elite",
    "weapon_famas", "weapon_fiveseven", "weapon_g3sg1", "weapon_galil", "weapon_m4a1", "weapon_m249", "weapon_mac10", "weapon_mp5navy",
    "weapon_p90", "weapon_p228", "weapon_scout", "weapon_sg550", "weapon_sg552", "weapon_tmp", "weapon_ump45", "weapon_usp" };

    for(new i = 0; i < sizeof(WeaponNames); i++)
    RegisterHam(Ham_Weapon_Reload, WeaponNames[i], "ReloadTime")
//    RegisterHookChain(RG_CBasePlayerWeapon_DefaultReload, "ReloadTime", false);
}

public ReloadTime(weapon_entity)
{
    new id = get_member(weapon_entity, m_pPlayer)
    new Clip = rg_get_user_ammo(id, weapon_entity)
    new MaxClip = rg_get_iteminfo(weapon_entity, ItemInfo_iMaxClip, MaxClip)
    new Ammo = rg_get_user_bpammo(id, weapon_entity)
//    get_user_ammo(id, weapon_entity, Clip, Ammo)
    if(MaxClip > Clip > 0 && Ammo > 0 )
    {
        set_task(1.0, "NotEmptyClip", weapon_entity, id)
    }
}

public NotEmptyClip(weapon_entity, id)
{
    rg_set_user_ammo(id, weapon_entity, 0)
//    cs_set_weapon_ammo(weapon_entity, 0)
}
Суть в том, чтобы при перезарядке оставшиеся патроны в магазине пропадали. Прописал давным давно все это дело, но теперь перезаряжать оружие стало возможно при полном магазине и даже без патронов в рюкзаке, патроны ,соответственно, пропадали, а анимация не проигрывалась. Сейчас решил добавить аргументов в условие, заодно переписать плагин под reapi. Убрал в комментарии старые части кода, добавил reapi аналоги, прописал присвоение переменной "id" айди игрока через get_member, но это не срабатывает. Компилятор не видит в упор присвоенное значение переменной и выдает ошибку в 35 строке "error 035: argument type mismatch (argument 4)", не считая с полдюжины варнингов в строках с использованием id. В чем может быть проблема? Также хотелось бы узнать, где можно найти нормальные гайды по reapi или нормальные описания констант в инклюдах? В инклюдах нет 2/3 описаний, отчего приходится гуглить и находить в большинстве случаев только левый код с их применением без какого-либо объяснения. И еще я тут наткнулся на RG_CBasePlayerWeapon_DefaultReload, кажется это аналог Ham_Weapon_Reload, но описание не нашел, так что не уверен. Можно ли его тут использовать?
 
Сообщения
862
Реакции
144
Помог
25 раз(а)
В сет таске так не проканает, если хочешь передавать индекс игрока, и индекс оружия, то индекс игрока нужно передавать уже по другому.
9 Авг 2023
1-й вариант.

C#:
public ReloadTime(weapon_entity)
{
    new id = get_member(weapon_entity, m_pPlayer)
    new Clip = rg_get_user_ammo(id, weapon_entity)
    new MaxClip = rg_get_iteminfo(weapon_entity, ItemInfo_iMaxClip, MaxClip)
    new Ammo = rg_get_user_bpammo(id, weapon_entity)
//    get_user_ammo(id, weapon_entity, Clip, Ammo)
    if(MaxClip > Clip > 0 && Ammo > 0 )
    {
        set_task(1.0, "NotEmptyClip", weapon_entity)
    }
}

public NotEmptyClip(weapon_entity)
{
    // опять получаем индекс
    new id = get_member(weapon_entity, m_pPlayer)

    rg_set_user_ammo(id, weapon_entity, 0)
//    cs_set_weapon_ammo(weapon_entity, 0)
}
Либо с таском:
C#:
public ReloadTime(weapon_entity)
{
    new id = get_member(weapon_entity, m_pPlayer)
    new Clip = rg_get_user_ammo(id, weapon_entity)
    new MaxClip = rg_get_iteminfo(weapon_entity, ItemInfo_iMaxClip, MaxClip)
    new Ammo = rg_get_user_bpammo(id, weapon_entity)
    new szArgs[2]
    szArgs[0] = id
//    get_user_ammo(id, weapon_entity, Clip, Ammo)
    if(MaxClip > Clip > 0 && Ammo > 0 )
    {
        set_task(1.0, "NotEmptyClip", weapon_entity, szArgs, charsmax(szArgs))
    }
}

public NotEmptyClip(szArgs[1], weapon_entity)
{
    new id;
    id = szArgs[0];

    // дальше код
}
И в таске не забывай проверять на валидность оружие, а то игрок нажмет р, сделает свич гана в момент срабатывания таска и всё, хотя, возможно ошибаюсь и ошибки не будет.
 
Последнее редактирование:
  • Нравится
Реакции: b0t.
Сообщения
3,381
Реакции
1,480
Помог
124 раз(а)
error 035: argument type mismatch (argument 4)
Ну сравни тип аргумента, указанного в документации и свой тип. Как правильно сделать, написали выше, я просто к тому, что в случае такой ошибки надо проверять типы аргументов.
 
  • Нравится
Реакции: b0t.
Сообщения
21
Реакции
2
ImmortalAmxx, спасибо, и правда ошибка пропала, если прописать айди внутри функции таска.
Nordic Warrior, упустил этот момент, есть такое.
Вот только вторая проблема не исчезла:

Код:
new Clip = rg_get_user_ammo(id, weapon_entity)
new Ammo = rg_get_user_bpammo(id, weapon_entity)
rg_set_user_ammo(id, weapon_entity, 0)
В этих строчках выдается warning tag mismatch.
 

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

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