Получить название или id extra itema zp 4.3

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
11
Реакции
-3
Добрый день, решил добавить найтив в BuyMenu для получения названия итема, для вывода в худ, но никак не получается
Это найтив, который я дописал, но все тщетно..
Код:
public Native_GetUser_Item(iPlayer)
{
    new i, iWeapon[MAX_ITEMS], szWeaponName[32];

    get_user_weapons(iPlayer, iWeapon, g_iItemsNum);

    for(i = 0; i < ArraySize(g_iItemsNum); i++)
    {
        ArrayGetString(aItemName, i, szWeaponName, charsmax(szWeaponName));

        get_weaponname(iWeapon, szWeaponName, charsmax(szWeaponName));
    }
}
Ниже исходник BuyMenu, пожалуйста подскажите
 

Вложения

Сообщения
192
Реакции
148
Помог
1 раз(а)
Ну, это не то.
Можешь записать в какой-то var на пушке название и потом получать или ты можешь осознать, шо это всё ненужная информация на экране игрока и забить на всё это.
 
Последнее редактирование:
Сообщения
192
Реакции
148
Помог
1 раз(а)
applience12, set_entvar( item_id, var_noise, "zxc" );
В Ham_Spawn пушки добавляешь. Потом где нужно получаешь m_pActiveItem и потом инфу get_entvar( item_id, var_noise, szName, charsmax( szName ) )
 
Сообщения
11
Реакции
-3
Ruby, а set_entvar это какая функция в amxx? Просто переписывать все buymenu не хочется
 
Сообщения
11
Реакции
-3
@Ruby,сделал в ham_spawn pev_noise, и вывод в таск но не воркает, в чем дело? может я не так понял
Код:
public CPlayer__Spawn_Post( iPlayer )
{
    for( new iItemID = 0, szWeaponName[32]; iItemID < g_iItemsNum; iItemID++ )
    {
        ArrayGetString(aItemName, iItemID, szWeaponName, charsmax(szWeaponName));
        set_pev(iItemID, pev_noise);
    }
}
Это в спавне
Код:
public CTask__ShowUserHud( iTask )
{
    new iPlayer = iTask - TASK_SHOWHUD;
    new szText[ 256 ], szWeaponName[32], iWeapon;
    
    if( !is_user_alive( iPlayer ) )
        return;

    new iItemID = get_pdata_cbase(iPlayer, 373);
    iWeapon = pev(iItemID, pev_noise, szWeaponName, charsmax(szWeaponName));


    switch( get_pcvar_num( pCvar[ LevelSystem_Hud_Type ] ) )
    {
        case 0: formatex( szText, charsmax( szText ), "" );
        case 1: formatex( szText, charsmax( szText ), "[ Level: %d | Exp: %d/%d ][%s]", g_iUserData[ iPlayer ][ Level ], g_iUserData[ iPlayer ][ Exp ], Native_GetUserExpForNextLevel( iPlayer ), iWeapon );
        case 2: formatex( szText, charsmax( szText ), "[ Level: %d | %d%% ][%s]", g_iUserData[ iPlayer ][ Level ], floatround( 99.0 / Native_GetUserExpForNextLevel( iPlayer ) * g_iUserData[ iPlayer ][ Exp ] ), iWeapon );
    }

    // red, green, blue, x, y, effect, fxtime, holdtime, fadeintime, fadeouttime
    set_dhudmessage( 0, 255, 255, -1.0, 0.875, 0, 0.0, 1.1, 0.0, 0.0 );
    show_dhudmessage( iPlayer, "%s", szText );
}
И вот что в таске
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Глобальный массив на каждого игрока, например, добавить
Код:
enum _: eData
{
    Level = 0,
-    Exp 
+    Exp,
+    Item
};
При выборе пункта в меню запомнить iItemID
g_iUserData[id][Item] = iItemID
Где нужно, получить название по iItemID ArrayGetString( aItemName, g_iUserData[id][Item], szBuffer, charsmax( szBuffer ) );
 
Последнее редактирование:
Сообщения
11
Реакции
-3
zhorzh78, все так же не работает(
Код:
new g_iItemName[ MAX_CLIENTS ];
Код:
ExecuteForward( g_fwItemSelected, g_iForwardResult, iPlayer, iItemID );
g_iItemName[ iPlayer ] = iItemID;
Код:
public Native_ItemName( iPlayer )
{
    new szBuffer[ 32 ];
    ArrayGetString(aItemName, g_iItemName[ iPlayer ], szBuffer, charsmax( szBuffer ) );
}
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
applience12,

Код:
public Native_ItemName( iPlayer )
{
    new szBuffer[ 32 ];
    ArrayGetString(aItemName, g_iItemName[ iPlayer ], szBuffer, charsmax( szBuffer ) );
}
Код:
register_native("Native_ItemName", "Native_ItemName")

public Native_ItemName()
{
    new iPlayer = get_param(1);
    new iLen = get_param(3);

    
    new szBuffer[ 32 ];
    ArrayGetString(aItemName, g_iItemName[ iPlayer ], szBuffer, charsmax( szBuffer ) );
    
    if(iLen > 0)
        set_string(2, szBuffer, iLen);
}
а там уже получаешь
Код:
new szItem[32];
Native_ItemName(pId, szItem, charsmax(szItem))
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
@applience12,натив ты должен обьявить так

native Native_ItemName(pId, string[] = '", iLen = 0)
 
Сообщения
11
Реакции
-3
Код:
L 06/19/2021 - 13:31:40: String formatted incorrectly - parameter 8 (total 7)
L 06/19/2021 - 13:31:40: [AMXX] Displaying debug trace (plugin "zp_buymenu_level.amxx", version "1.1")
L 06/19/2021 - 13:31:40: [AMXX] Run time error 25: parameter error
@Limbooc,не работает, мне кажется это из-за массива, так как в логах пишет
19 Июн 2021
@Ruby,название текущего предмета в руках (который покупается в buymenu)
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
@applience12,кидай полный код попыток (с diff), а не обрывки
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
applience12, Что такое "не работает"? Где в логе вывод szBuffer? Что за функция такая? Натив или что? Куда дальше szBuffer ушел?
Самый главный вопрос- оно кому-то надо задавать столько наводящих вопросов? Мне- нет.
 
Сообщения
192
Реакции
148
Помог
1 раз(а)
Код:
#include <amxmodx>
#include <reapi>

new Array: g_aWeapon_UID,
    Array: g_aWeapon_ID,
    Array: g_aWeapon_Name;

public plugin_natives( )
{
    g_aWeapon_UID = ArrayCreate( );
    g_aWeapon_ID = ArrayCreate( );
    g_aWeapon_Name = ArrayCreate( 32 );

    register_native( "mark_as_weapon", "Native__MarkAsWeapon" );
    register_native( "get_active_weapon_name", "Native__GetActiveWeaponName" );
}

public Native__MarkAsWeapon( )
{
    enum { arg_uid = 1, arg_weapon_id, arg_name };

    new szName[ 32 ]; get_string( arg_name, szName, charsmax( szName ) );

    if ( szName[ 0 ] == EOS || ArrayFindString( g_aWeapon_Name, szName ) != -1 )
        return;

    ArrayPushCell( g_aWeapon_UID, get_param( arg_uid ) );
    ArrayPushCell( g_aWeapon_ID, get_param( arg_weapon_id ) );
    ArrayPushString( g_aWeapon_Name, szName );
}

public bool: Native__GetActiveWeaponName( )
{
    enum { arg_player_id = 1, arg_name };

    new pPlayer = get_param( arg_player_id );
    if ( !is_user_alive( pPlayer ) )
        return false;

    new pActiveItem = get_member( pPlayer, m_pActiveItem );
    if ( is_nullent( pActiveItem ) )
        return false;

    new iUID = get_entvar( pActiveItem, var_impulse ), iItem;
    if ( iUID )
    {
        if ( ( iItem = ArrayFindValue( g_aWeapon_UID, iUID ) ) == -1 )
            return false;
    }
    else
    {
        if ( ( iItem = ArrayFindValue( g_aWeapon_ID, get_member( pActiveItem, m_iId ) ) ) == -1 )
            return false;
    }

    new szName[ 32 ]; ArrayGetString( g_aWeapon_Name, iItem, szName, charsmax( szName ) );
    set_string( arg_name, szName, charsmax( szName ) );

    return true;
}
Делаешь отдельный плагин или всё в бм добавь. И к нему inc с этим:
Код:
native mark_as_weapon( const iUID = 0, const iID = -1, const szName[ 32 ] = "" );
native get_active_weapon_name( const pPlayer, const szName[ 32 ] );
Дальше переходишь в пушку и добавляешь:
#include <название твоего inc>
Находишь BM_Register_Item или где-то в public plugin_init( ) добавляешь mark_as_weapon
Для кастомных пушек:
mark_as_weapon( impulse пушки, _, название );
Для дефолтных: mark_as_weapon( _, weaponId пушки(WEAPON_DEAGLE например), название );
И потом получаешь где нужно:new szName[ 32 ]; get_active_weapon_name( pPlayer, szName );
 
Сообщения
11
Реакции
-3
Ruby, все сделал как ты написал, добавил в худ натив и там когда достаю айтем пишет звуки, модели
 
Статус
В этой теме нельзя размещать новые ответы.

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

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