Передать двумерные массивы

Сообщения
192
Реакции
148
Помог
1 раз(а)
Как передать двумерный массив в аргумент native?

Сейчас делаю так:
Plugin1:
Код:
#define IsValidArray(%0)                    bool: ( %0 != Invalid_Array )

public plugin_natives( )
{
    g_aSounds1 = ArrayCreate( 64 );
    g_aSounds2 = ArrayCreate( 64 );

    register_native( "_register_sounds", "Native__RegisterSounds" );
}

public bool: Native__RegisterSounds( )
{
    new Array: aSounds = Array: get_param( 1 );

    if ( !IsValidArray( aSounds ) )
        return false;

    new szBuffer[ 64 ], iSounds1 = get_param( 2 );/*, iSounds2 = get_param( 3 );*/

    for ( new i = 0; i < ArraySize( aSounds ); i++ )
    {
        ArrayGetString( aSounds, i, szBuffer, charsmax( szBuffer ) );
        engfunc( EngFunc_PrecacheSound, szBuffer );

        ArrayPushString( ( i < iSounds1 ) ? g_aSounds1 : g_aSounds2, szBuffer );
        server_print( "%i.Sound %s", i, szBuffer );
    }
    ArrayDestroy( aSounds );

    return true;
}
Inc:
Код:
native bool: _register_sounds( const Array: aSounds, iSounds1/*, iSounds2*/ );

stock bool: hoh_register_sounds( const Sounds1[ ][ ], const Sounds2[ ][ ], iSounds1 = sizeof Sounds1, iSounds2 = sizeof Sounds2 )
{
    new Array: aSounds = ArrayCreate( 64 ), i;
    for ( i = 0; i < iSounds1; i++ ) ArrayPushString( aSounds, Sounds1[ i ] );
    iSounds1 = ArraySize( aSounds );
    for ( i = 0; i < iSounds2; i++ ) ArrayPushString( aSounds, Sounds2[ i ] );
    //iSounds2 = ArraySize( aSounds );
    return _register_sounds( aSounds, iSounds1/*, iSounds2*/ );
}
Plugin2:
Код:
new const HOH_SOUNDS1[ ][ ] = { "hoh1.wav", "hoh1.wav" };
new const HOH_SOUNDS2[ ][ ] = { "hoh3.wav", "hoh4.wav" };
public plugin_init( )
{
    hoh_register_sounds( HOH_SOUNDS1, HOH_SOUNDS2 )
}
Мб есть лучше способ?
 
Последнее редактирование:
Сообщения
1,291
Реакции
2,288
Помог
57 раз(а)
Видел как зануляют аррейсетом многомерники целиком?

Код:
stock arrayset_2d(any:array[][], any:value, size1, size2) {
    arrayset(array[0], value, size1 * size2);
}
Можно попробовать аналогичным образом "обмануть" get/set_array(). Я не пробовал, просто теория.
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Ruby, на скорую руку
C++:
Plugin 1

enum _:eEnum
{
    someString[32],
    someInt,
    someString2[16]
}

public plugin_natives()
{
    register_native("some_native", "_some_native");
}

public _some_native()
{
    new aSomeData[eEnum];
    
    aSomeData[someString] = ...
    aSomeData[someInt] = ...

    if(set_array(2, aSomeData, sizeof(aSomeData)))
        return 1;
    
    return 0;
}

///////////

Plugin 2
native some_native(iClient, aSomeData[eEnum]);
 
Сообщения
192
Реакции
148
Помог
1 раз(а)
zhorzh78, б.., я не так выразился, нужно передать двумерный массив в уже созданный натив и там уже получить его:crazy:
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Ruby, Ваша задумка не понятна. Вы регистрируете звуки, занося их в массив Array. О каком 2-х мерном массиве идет речь?
 

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

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