Ошибка при поиске вхождения entity id в массив

Сообщения
12
Реакции
0
Имеется следующий код, задача которого найти entity id и заменить модель для него:
C++:
for (new i = 0; i < sizeof(g_ak_models); i++)
{
    if (g_ak_models[i] == entityId)
    {
        // Установка v_ модели, которая отображается в руках игрока
        entity_set_string(id, EV_SZ_viewmodel, VIEW_MODEL)
        // Установка p_ модели, которая отображается, когда мы смотрим на игрока
        entity_set_string(id, EV_SZ_weaponmodel, PLAYER_MODEL)
    }
}
Из if условия у меня падает ошибка при компиляции:
Код:
stderr: terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Я только учусь, так что прошу помощи, а может быть и совета как лучше найти вхождение entityId?
 
Сообщения
1,661
Реакции
1,486
Помог
24 раз(а)
А где делаешь?
 
Сообщения
144
Реакции
276
Помог
1 раз(а)
entity id - это ID игрока ? Ибо только для него работают данные pev. Если это игрок, то смысл кода вообще не понятен. Больше кода выкладывайте.
 
Сообщения
12
Реакции
0
entity id - это ID игрока ? Ибо только для него работают данные pev. Если это игрок, то смысл кода вообще не понятен. Больше кода выкладывайте.
Кароче код функции для AES системы. Хочу чтобы пользователи могли за очки покупать в /anew оружия с моделью.
C++:
#include <amxmodx>
#include <reapi>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "AES: Bonus Functions"
#define VERSION "0.0.1 [REAPI]"
#define AUTHOR "Engineer"

new VIEW_MODEL[]    = "models/cs_zapret/aes/v_ak47.mdl"
new PLAYER_MODEL[]    = "models/cs_zapret/aes/p_ak47.mdl"
new WORLD_MODEL[]    = "models/cs_zapret/aes/w_ak47.mdl"

new g_ak_players[32];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
    register_forward(FM_SetModel, "fw_SetModel")
    // Events for resetting weapons list
    register_event("DeathMsg", "Death", "a")
    RegisterHam(Ham_Spawn, "player", "resetWeaponModelOnReSpawn", 1)
}

public client_connect(id)
{
    g_ak_players[id] = false
}

public client_disconnected(id)
{
    g_ak_players[id] = false
}

public Death()
{
    g_ak_players[read_data(2)] = false
}

public resetWeaponModelOnReSpawn(id)
{
    g_ak_players[id] = false
}


public GiveModelAK(id){
    if(!is_user_alive(id))
    {
        client_print_color(id,0,"%L %L",id,"AES_TAG",id,"AES_ANEW_ALIVE");
        return false;
    }
    rg_give_item(id, "weapon_ak47", GT_REPLACE);
    rg_set_user_bpammo(id, WEAPON_AK47, 35);
    g_ak_players[id] = true;

    return true;
}

public Event_CurWeapon(id)
{
    new szWeapID = read_data(2);
  
    if ( szWeapID == CSW_AK47 && g_ak_players[id] )
    {
        set_pev(id, pev_viewmodel2, VIEW_MODEL)
        set_pev(id, pev_weaponmodel2, PLAYER_MODEL)
        return PLUGIN_HANDLED
    }
    else
    {
        return PLUGIN_CONTINUE
    }
}

public fw_SetModel(entity, model[])
{
    // Проверяем существует ли объект
    if (!is_valid_ent(entity))
        return FMRES_IGNORED

    new className[33]

    // Получаем класс объекта
    entity_get_string(entity, EV_SZ_classname, className, 32)

    // Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
    if (equal(className, "weaponbox") || equal(className, "armoury_entity"))
    {
        // Установка w_ модели, которая отображается на земле
        entity_set_model(entity, WORLD_MODEL)
        return FMRES_SUPERCEDE
        
    }
    return FMRES_IGNORED
}

public plugin_precache()
{   
    precache_model(VIEW_MODEL)     
    precache_model(PLAYER_MODEL)
    precache_model(WORLD_MODEL)
}
31 Авг 2019
Кароче код функции для AES системы. Хочу чтобы пользователи могли за очки покупать в /anew оружия с моделью.
C++:
#include <amxmodx>
#include <reapi>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "AES: Bonus Functions"
#define VERSION "0.0.1 [REAPI]"
#define AUTHOR "Engineer"

new VIEW_MODEL[]    = "models/cs_zapret/aes/v_ak47.mdl"
new PLAYER_MODEL[]    = "models/cs_zapret/aes/p_ak47.mdl"
new WORLD_MODEL[]    = "models/cs_zapret/aes/w_ak47.mdl"

new g_ak_players[32];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
    register_forward(FM_SetModel, "fw_SetModel")
    // Events for resetting weapons list
    register_event("DeathMsg", "Death", "a")
    RegisterHam(Ham_Spawn, "player", "resetWeaponModelOnReSpawn", 1)
}

public client_connect(id)
{
    g_ak_players[id] = false
}

public client_disconnected(id)
{
    g_ak_players[id] = false
}

public Death()
{
    g_ak_players[read_data(2)] = false
}

public resetWeaponModelOnReSpawn(id)
{
    g_ak_players[id] = false
}


public GiveModelAK(id){
    if(!is_user_alive(id))
    {
        client_print_color(id,0,"%L %L",id,"AES_TAG",id,"AES_ANEW_ALIVE");
        return false;
    }
    rg_give_item(id, "weapon_ak47", GT_REPLACE);
    rg_set_user_bpammo(id, WEAPON_AK47, 35);
    g_ak_players[id] = true;

    return true;
}

public Event_CurWeapon(id)
{
    new szWeapID = read_data(2);
 
    if ( szWeapID == CSW_AK47 && g_ak_players[id] )
    {
        set_pev(id, pev_viewmodel2, VIEW_MODEL)
        set_pev(id, pev_weaponmodel2, PLAYER_MODEL)
        return PLUGIN_HANDLED
    }
    else
    {
        return PLUGIN_CONTINUE
    }
}

public fw_SetModel(entity, model[])
{
    // Проверяем существует ли объект
    if (!is_valid_ent(entity))
        return FMRES_IGNORED

    new className[33]

    // Получаем класс объекта
    entity_get_string(entity, EV_SZ_classname, className, 32)

    // Сравниваем равняется ли полученный класс объекта weaponbox (выкинутое оружие) или armoury_entity (оружие, которое лежит на карте), или grenade (C4 и гранаты)
    if (equal(className, "weaponbox") || equal(className, "armoury_entity"))
    {
        // Установка w_ модели, которая отображается на земле
        entity_set_model(entity, WORLD_MODEL)
        return FMRES_SUPERCEDE
       
    }
    return FMRES_IGNORED
}

public plugin_precache()
{  
    precache_model(VIEW_MODEL)    
    precache_model(PLAYER_MODEL)
    precache_model(WORLD_MODEL)
}
Мне нужно как то хранить id оружия или же хранить состояние для пользователя. Сейчас такая штука, что если я покупаю оружие в стандартном оружейке, потом покупаю калаш в /anew, а затем подбираю оружие из стандартной оружейки, то у меня оно тоже поднимается с моделью. А хотелось хранить состояние оружия.
 
Сообщения
1,661
Реакции
1,486
Помог
24 раз(а)
кокой кошмар
 
Сообщения
12
Реакции
0
Есть какой нибудь динамический массив или как в таких случая хранят состояние?
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
Есть какой нибудь динамический массив или как в таких случая хранят состояние?
Оружию (ентити) можно установить уникальный ключ (в пределах плагина) в свойство var_impulse (и не только, но не суть).
 
Сообщения
578
Реакции
338
Предупреждения
2
Помог
9 раз(а)
папробуй
p.s: скриптирам не сматреть
Код:
#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#include <fakemeta>

#define FLAG_ACCESS                     ADMIN_BAN    // флаг админа который может поднимать и брать оружие (// - выкл)

#if defined FLAG_ACCESS
    #define ONLY_ADMIN_CAN_TOUCH                        // только админ может поднимать пуху (// - выкл)
#endif

#define IsCustomItem(%0)                 (pev(%0, pev_impulse) == WEAPON_KEY)

new const PLUGIN_NAME[]             =     "[ReAPI] Custom Weapon";
new const PLUGIN_VERSION[]             =     "0.0.1";

const WEAPON_KEY                     =     1337; // super code
const WEAPON_AMMO                    =    35; // сколько выдавать патрон
new const WEAPON_REFERENCE[]         =     "weapon_ak47"; // какое оружие использовать и выдавать xd

new const WEAPON_MODEL_VIEW[]         =     "models/cs_zapret/aes/v_ak47.mdl";
new const WEAPON_MODEL_PLAYER[]     =     "models/cs_zapret/aes/p_ak47.mdl";
new const WEAPON_MODEL_WORLD[]         =     "models/cs_zapret/aes/w_ak47.mdl";

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, "Add your favorite scripter");
    register_clcmd("say /giveweapon", "GiveModelAK");

    RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon_Deploy_Post", .Post = true);
#if defined ONLY_ADMIN_TOUCH
    RegisterHam(Ham_Touch, "weaponbox", "CWeapon_Touch_Pre", .Post = false);
#endif
    RegisterHookChain(RG_CWeaponBox_SetModel, "CWeapon_SetModel_Pre", .post = false);
}

public GiveModelAK(iPlayer)
{
#if defined FLAG_ACCESS
    if(!(get_user_flags(iPlayer) & FLAG_ACCESS))
    {
        client_print(iPlayer, print_center, "* Нет доступа *");
        return;
    }
#endif
    if(!is_user_alive(iPlayer))
    {
        client_print(iPlayer, print_center, "* Только для живых *");
        return;
    }

    rg_give_custom_item(iPlayer, WEAPON_REFERENCE, GT_REPLACE, WEAPON_KEY);
    rg_set_user_bpammo(iPlayer, rg_get_weapon_info(WEAPON_REFERENCE, WI_ID), WEAPON_AMMO);

    return;
}

public plugin_precache()
{
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_VIEW);
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_PLAYER);   
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_WORLD);
}

public CWeapon_Deploy_Post(iItem)
{
    if(!is_entity(iItem))
    {
        return;
    }

    if(!IsCustomItem(iItem))
    {
        return;
    }

    new iPlayer = get_member(iItem, m_pPlayer);
    
    set_entvar(iPlayer, var_viewmodel, WEAPON_MODEL_VIEW);
    set_entvar(iPlayer, var_weaponmodel, WEAPON_MODEL_PLAYER);
}

public CWeapon_SetModel_Pre(iEntity, szModel[])
{
    static iItem;
    for(new i = 0; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_member(iEntity, m_WeaponBox_rgpPlayerItems, i);
        if(iItem > 0 && IsCustomItem(iItem))
        {
            SetHookChainArg(2, ATYPE_STRING, WEAPON_MODEL_WORLD);
            set_entvar(iEntity, var_impulse, WEAPON_KEY);

            return HC_CONTINUE;
        }
    }
    return HC_CONTINUE;
}

#if defined ONLY_ADMIN_CAN_TOUCH
public CWeapon_Touch_Pre(iItem, iPlayer)
{
    if(!is_entity(iItem) || !is_user_connected(iPlayer))
    {
        return HAM_IGNORED;
    }

    if(IsCustomItem(iItem))
    {
        if(!(get_user_flags(iPlayer) & FLAG_ACCESS))
        {
            return HAM_SUPERCEDE;
        }
    }
    
    return HAM_IGNORED;
}
#endif
 
Последнее редактирование:
Сообщения
12
Реакции
0
папробуй
p.s: скриптирам не сматреть
Код:
#include <amxmodx>
#include <reapi>
#include <hamsandwich>
#include <fakemeta>

#define FLAG_ACCESS                     ADMIN_BAN    // флаг админа который может поднимать и брать оружие (// - выкл)

#if defined FLAG_ACCESS
    #define ONLY_ADMIN_CAN_TOUCH                        // только админ может поднимать пуху (// - выкл)
#endif

#define IsCustomItem(%0)                 (pev(%0, pev_impulse) == WEAPON_KEY)

new const PLUGIN_NAME[]             =     "[ReAPI] Custom Weapon";
new const PLUGIN_VERSION[]             =     "0.0.1";

const WEAPON_KEY                     =     1337; // super code
const WEAPON_AMMO                    =    35; // сколько выдавать патрон
new const WEAPON_REFERENCE[]         =     "weapon_ak47"; // какое оружие использовать и выдавать xd

new const WEAPON_MODEL_VIEW[]         =     "models/cs_zapret/aes/v_ak47.mdl";
new const WEAPON_MODEL_PLAYER[]     =     "models/cs_zapret/aes/p_ak47.mdl";
new const WEAPON_MODEL_WORLD[]         =     "models/cs_zapret/aes/w_ak47.mdl";

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, "Add your favorite scripter");
    register_clcmd("say /giveweapon", "GiveModelAK");

    RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon_Deploy_Post", .Post = true);
#if defined ONLY_ADMIN_TOUCH
    RegisterHam(Ham_Touch, "weaponbox", "CWeapon_Touch_Pre", .Post = false);
#endif
    RegisterHookChain(RG_CWeaponBox_SetModel, "CWeapon_SetModel_Pre", .post = false);
}

public GiveModelAK(iPlayer)
{
#if defined FLAG_ACCESS
    if(!(get_user_flags(iPlayer) & FLAG_ACCESS))
    {
        client_print(iPlayer, print_center, "* Нет доступа *");
        return;
    }
#endif
    if(!is_user_alive(iPlayer))
    {
        client_print(iPlayer, print_center, "* Только для живых *");
        return;
    }

    rg_give_custom_item(iPlayer, WEAPON_REFERENCE, GT_REPLACE, WEAPON_KEY);
    rg_set_user_bpammo(iPlayer, rg_get_weapon_info(WEAPON_REFERENCE, WI_ID), WEAPON_AMMO);

    return;
}

public plugin_precache()
{
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_VIEW);
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_PLAYER);  
    engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_WORLD);
}

public CWeapon_Deploy_Post(iItem)
{
    if(!is_entity(iItem))
    {
        return;
    }

    if(!IsCustomItem(iItem))
    {
        return;
    }

    new iPlayer = get_member(iItem, m_pPlayer);
   
    set_entvar(iPlayer, var_viewmodel, WEAPON_MODEL_VIEW);
    set_entvar(iPlayer, var_weaponmodel, WEAPON_MODEL_PLAYER);
}

public CWeapon_SetModel_Pre(iEntity, szModel[])
{
    static iItem;
    for(new i = 0; i < MAX_ITEM_TYPES; i++)
    {
        iItem = get_member(iEntity, m_WeaponBox_rgpPlayerItems, i);
        if(iItem > 0 && IsCustomItem(iItem))
        {
            SetHookChainArg(2, ATYPE_STRING, WEAPON_MODEL_WORLD);
            set_entvar(iEntity, var_impulse, WEAPON_KEY);

            return HC_CONTINUE;
        }
    }
    return HC_CONTINUE;
}

#if defined ONLY_ADMIN_CAN_TOUCH
public CWeapon_Touch_Pre(iItem, iPlayer)
{
    if(!is_entity(iItem) || !is_user_connected(iPlayer))
    {
        return HAM_IGNORED;
    }

    if(IsCustomItem(iItem))
    {
        if(!(get_user_flags(iPlayer) & FLAG_ACCESS))
        {
            return HAM_SUPERCEDE;
        }
    }
   
    return HAM_IGNORED;
}
#endif
Это то что нужно, буду изучать, спасибо!
 

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

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