AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Solved Data storage (https://forums.alliedmods.net/showthread.php?t=309422)

edon1337 07-25-2018 12:49

Data storage
 
What can I use as an alternative of this? As I can't have 4 dimensions
PHP Code:

new g_iPlayerData33 ][ ItemTypes ][ MAX_ITEMS ][ ItemInfo ]; 

I need 1 dimension for player IDs, 1 for the type of items, 1 for the limit of items and 1 for the item name & id

OciXCrom 07-25-2018 13:06

Re: Data storage
 
PHP Code:

new Array:g_ePlayerData[33


edon1337 07-25-2018 13:08

Re: Data storage
 
Quote:

Originally Posted by OciXCrom (Post 2606103)
PHP Code:

new Array:g_ePlayerData[33


Can I use this
PHP Code:

new eDataItemType ][ MAX_ENTS ][ ItemInfo 

and then after filling it, to store it in the array ?

HamletEagle 07-25-2018 13:15

Re: Data storage
 
Should work.

edon1337 07-25-2018 13:18

Re: Data storage
 
Quote:

Originally Posted by HamletEagle (Post 2606106)
Should work.

Should work but it's terrible, lol, I haven't even finished the code yet and there's already 4 loops inside each-other when retrieving
PHP Code:

new szEntId], eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
    for( new 
iArraySizeg_aItemsid ] ) - 1i++ )
    {
        
ArrayGetArrayg_aItemsid ], ieData );
        
        for( new 
iType=ITEM_POULETiType <= ITEM_SNACKiType++ )
        {
            for( new 
iNumiNum MAX_ENTSi++ )
            {
                if( 
eDataiType ][ iNum ][ Item_Id ] > )
                {
                    
num_to_striNumszEntIdcharsmaxszEntId ) );
                    
menu_additemiMenug_iPlayerDataid ][ ][ Item_Name ], szEntId );
                }
            }
        }
    } 


CrAzY MaN 07-25-2018 13:48

Re: Data storage
 
Why not use enums?

edon1337 07-25-2018 13:52

Re: Data storage
 
Quote:

Originally Posted by CrAzY MaN (Post 2606119)
Why not use enums?

What do you think these are?
Quote:

eData[ ItemType ][ MAX_ENTS ][ ItemInfo ];

edon1337 07-25-2018 14:03

Re: Data storage
 
PHP Code:

#define MAX_ENTS 3

enum _:ItemType
{
    
ITEM_POULET,
    
ITEM_SNACK
}

enum _:ItemInfo
{
    
Item_Name32 ],
    
Item_Id,
}

new Array:
g_aItems33 ];

public 
plugin_init( )
{
    
register_clcmd"say /backpack""OnBackPack" );
    
    
RegisterHamHam_Touch"info_target""@HamTouch" );
}

public 
plugin_precache( )
{    
    for( new 
i33i++ )
    
g_aItems] = ArrayCreateItemInfo );
}

public @
HamTouchiEntid )
{
    if( ! 
pev_validiEnt ) )
    return 
HAM_IGNORED;
    
    if( 
peviEntpev_effects ) & EF_NODRAW )
    return 
HAM_SUPERCEDE;
    
    new 
szClassName32 ], eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
peviEntpev_classnameszClassNamecharsmaxszClassName ) );
    
    if( 
equalszClassName"item_poulet" ) )
    {        
        for( new 
iMAX_ENTSi++ )
        {
            if( ! 
eDataITEM_POULET ][ ][ Item_Id ] )
            {
                
eDataITEM_POULET ][ ][ Item_Id ] = iEnt;
                
eDataITEM_POULET ][ ][ Item_Name ] = iEnt;
                
                
ArrayPushArrayg_aItemsid ], eData );
                
                break;
            }
        }
        
        
set_peviEntpev_effectspeviEntpev_effects ) | EF_NODRAW );
        
set_peviEntpev_solidSOLID_NOT );
    }
    
    else if( 
equalszClassName"item_snack" ) )
    {        
        for( new 
iMAX_ENTSi++ )
        {
            if( ! 
eDataITEM_POULET ][ ][ Item_Id ] )
            {
                
eDataITEM_SNACK ][ ][ Item_Id ] = iEnt;
                
eDataITEM_SNACK ][ ][ Item_Name ] = iEnt;
                
                
ArrayPushArrayg_aItemsid ], eData );
                
                break;
            }
        }
        
        
set_peviEntpev_effectspeviEntpev_effects ) | EF_NODRAW );
        
set_peviEntpev_solidSOLID_NOT );
    }
    
    return 
HAM_IGNORED;
}

public 
OnBackPackid )
{
    if( ! 
is_user_aliveid ) )
    return 
PLUGIN_HANDLED;

    new 
iMenu menu_create"Your BackPack""OnBackPack_Handler" );
    
    new 
szEntId], eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
    for( new 
iArraySizeg_aItemsid ] ) - 1i++ )
    {
        
ArrayGetArrayg_aItemsid ], ieData );
        
        for( new 
iType=ITEM_POULETiType <= ITEM_SNACKiType++ )
        {
            for( new 
iNumiNum MAX_ENTSiNum++ )
            {
                if( 
eDataiType ][ iNum ][ Item_Id ] > )
                {
                    
num_to_striNumszEntIdcharsmaxszEntId ) );
                    
menu_additemiMenueDataiType ][ iNum ][ Item_Name ], szEntId );
                }
            }
        }
    }
    
    
menu_setpropiMenuMPROP_EXITMEXIT_ALL );
    
menu_displayidiMenu);
    
    return 
PLUGIN_CONTINUE;
}

public 
OnBackPack_HandleridiMenuiItem )
{
    new 
iAccessszCount], iCallbackiCount;
    
menu_item_getinfoiMenuiItemiAccessszCountcharsmaxszCount ), __iCallback );
    
menu_destroyiMenu );
    
    
iCount str_to_numszCount );
    
    new 
szClassName32 ];
    
pevidpev_classnameszClassNamecharsmaxszClassName ) );
    
    new 
eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
    if( 
equalszClassName"item_poulet" ) )
    {
        if( 
pevidpev_health ) >= 100.0 )
        {
            
client_printidprint_chat"You can only eat a Poulet when your HP is below 100" );
            return 
PLUGIN_HANDLED;
        }
        
        else
        {
            
set_pevidpev_health100.0 );
            
            
eDataITEM_POULET ][ iCount ][ Item_Id ] = 0;
            
eDataITEM_POULET ][ iCount ][ Item_Name ][ ] = EOS;
            
            
ArraySetArrayg_aItemsid ], eData );    
        }
    }
    
    else if( 
equalszClassName"item_snack" ) )
    {
        if( 
pevidpev_health ) > 75.0 )
        {
            
client_printidprint_chat"You can only eat a Snack when your HP is below 75" );
            return 
PLUGIN_HANDLED;
        }
        
        else
        {
            
set_pevidpev_healthpevidpev_health ) + 25.0 );
            
            
eDataITEM_POULET ][ iCount ][ Item_Id ] = 0;
            
eDataITEM_POULET ][ iCount ][ Item_Name ][ ] = EOS;
            
            
ArraySetArrayg_aItemsid ], eData );    
        }
    }
    return 
PLUGIN_CONTINUE;


Errors:
Code:
(115) : error 048: array dimensions do not match (134) : error 048: array dimensions do not match (158) : error 048: array dimensions do not match (207) : error 035: argument type mismatch (argument 2) (226) : error 035: argument type mismatch (argument 2)

Line 115
PHP Code:

ArrayPushArrayg_aItemsid ], eData ); 

Line 132
PHP Code:

ArrayPushArrayg_aItemsid ], eData ); 

Line 158
PHP Code:

ArrayGetArrayg_aItemsid ], ieData ); 

Line 207
PHP Code:

ArraySetArrayg_aItemsid ], eData ); 

Line 226
PHP Code:

ArraySetArrayg_aItemsid ], eData ); 


OciXCrom 07-25-2018 14:07

Re: Data storage
 
Well that's not exactly how you should use the enum.

PHP Code:

enum _:ItemTypes
{
    
ITEM_POULET 0,
    
ITEM_SNACK
}

enum _:ItemInfo
{
    
ItemTypes:Item_Type,
    
Item_Name[32],
    
Item_Id
}

new Array:
g_aItems[33]

for(new 
1<= 32i++) // Client 0 is not valid.
    
g_aItems[i] = ArrayCreate(ItemInfo


edon1337 07-25-2018 14:10

Re: Data storage
 
Thanks, but I still get some mismatches..

Full code:
PHP Code:

#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < rog >
#include < cs_battleroyale_roundmanager >

#define MAX_ORIGINS 100
#define MAX_ENTS 3

enum _:RetrieveItemInfo
{
    
Entity_Name32 ],
    
Entity_Model32 ]
}

enum _:ItemType
{
    
ITEM_POULET 0,
    
ITEM_SNACK
}

enum _:ItemInfo
{
    
ItemTypes:Item_Type,
    
Item_Name[32],
    
Item_Id
}

enum _:OriginDimensions
{
    
Float:ORIGIN]
}

new 
g_iRetrieveEntityDataRetrieveItemInfo ];

new const 
g_szCustomEntitiesFile[ ] = "GameEntities.ini";

new Array:
g_aOrigins;
new Array:
g_aItems33 ];

public 
plugin_init( )
{
    
register_plugin"CS Battle Royale BackPack""1.0""DoNii" );
    
    
InitializeOriginGenerator( );
    
DumpOriginData( ) ;
    
    
register_clcmd"say /backpack""OnBackPack" );
    
    
RegisterHamHam_Touch"info_target""@HamTouch" );
    
RegisterHamHam_Spawn"player""@HamSpawn_Post")  ;
}

public 
plugin_precache( )
{    
    
g_aOrigins ArrayCreateOriginDimensions );
    
    for( new 
i=1<= 32i++ )
    
g_aItems] = ArrayCreateItemInfo )
    
    
precache_model"models/CS_BattleRoyale/Poulet.mdl" );
    
precache_model"models/CS_BattleRoyale/BonBon.mdl" );
}

public @
HamSpawn_Postid )
{
    if( 
is_user_aliveid ) )
    {
        new 
eDataItemType ][ MAX_ENTS ][ ItemInfo ];
        
        for( new 
iArraySizeg_aItemsid ] ) - 1i++ )
        {
            for( new 
iType=ITEM_POULETiType <= ITEM_SNACKiType++ )
            {
                for( new 
iNumiNum MAX_ENTSiNum++ )
                {
                    
eDataiType ][ iNum ][ Item_Id ] = 0;
                    
eDataiType ][ iNum ][ Item_Name ][ ] = EOS;
                    
                    
ArraySetArrayg_aItemsid ], ieData );
                }
            }
        }
    }
}

public 
RoundStarted( )
{
    
ArrayClearg_aOrigins );
    
InitializeOriginGenerator( );

    
RetrieveOrigins( );
    
ReadCustomEntities( );
}    

public @
HamTouchiEntid )
{
    if( ! 
pev_validiEnt ) )
    return 
HAM_IGNORED;
    
    if( 
peviEntpev_effects ) & EF_NODRAW )
    return 
HAM_SUPERCEDE;
    
    new 
szClassName32 ], eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
peviEntpev_classnameszClassNamecharsmaxszClassName ) );
    
    if( 
equalszClassName"item_poulet" ) )
    {        
        for( new 
iMAX_ENTSi++ )
        {
            if( ! 
eDataITEM_POULET ][ ][ Item_Id ] )
            {
                
eDataITEM_POULET ][ ][ Item_Id ] = iEnt;
                
eDataITEM_POULET ][ ][ Item_Name ] = iEnt;
                
                
ArrayPushArrayg_aItemsid ], eData );
                
                break;
            }
        }
        
        
set_peviEntpev_effectspeviEntpev_effects ) | EF_NODRAW );
        
set_peviEntpev_solidSOLID_NOT );
    }
    
    else if( 
equalszClassName"item_snack" ) )
    {        
        for( new 
iMAX_ENTSi++ )
        {
            if( ! 
eDataITEM_POULET ][ ][ Item_Id ] )
            {
                
eDataITEM_SNACK ][ ][ Item_Id ] = iEnt;
                
eDataITEM_SNACK ][ ][ Item_Name ] = iEnt;
                
                
ArrayPushArrayg_aItemsid ], eData );
                
                break;
            }
        }
        
        
set_peviEntpev_effectspeviEntpev_effects ) | EF_NODRAW );
        
set_peviEntpev_solidSOLID_NOT );
    }
    
    return 
HAM_IGNORED;
}

public 
OnBackPackid )
{
    if( ! 
is_user_aliveid ) )
    return 
PLUGIN_HANDLED;

    new 
iMenu menu_create"Your BackPack""OnBackPack_Handler" );
    
    new 
szEntId], eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
    for( new 
iArraySizeg_aItemsid ] ) - 1i++ )
    {
        
ArrayGetArrayg_aItemsid ], ieData );
        
        for( new 
iType=ITEM_POULETiType <= ITEM_SNACKiType++ )
        {
            for( new 
iNumiNum MAX_ENTSiNum++ )
            {
                if( 
eDataiType ][ iNum ][ Item_Id ] > )
                {
                    
num_to_striNumszEntIdcharsmaxszEntId ) );
                    
menu_additemiMenueDataiType ][ iNum ][ Item_Name ], szEntId );
                }
            }
        }
    }
    
    
menu_setpropiMenuMPROP_EXITMEXIT_ALL );
    
menu_displayidiMenu);
    
    return 
PLUGIN_CONTINUE;
}

public 
OnBackPack_HandleridiMenuiItem )
{
    new 
iAccessszCount], iCallbackiCount;
    
menu_item_getinfoiMenuiItemiAccessszCountcharsmaxszCount ), __iCallback );
    
menu_destroyiMenu );
    
    
iCount str_to_numszCount );
    
    new 
szClassName32 ];
    
pevidpev_classnameszClassNamecharsmaxszClassName ) );
    
    new 
eDataItemType ][ MAX_ENTS ][ ItemInfo ];
    
    if( 
equalszClassName"item_poulet" ) )
    {
        if( 
pevidpev_health ) >= 100.0 )
        {
            
client_printidprint_chat"You can only eat a Poulet when your HP is below 100" );
            return 
PLUGIN_HANDLED;
        }
        
        else
        {
            
set_pevidpev_health100.0 );
            
            
eDataITEM_POULET ][ iCount ][ Item_Id ] = 0;
            
eDataITEM_POULET ][ iCount ][ Item_Name ][ ] = EOS;
            
            
ArraySetArrayg_aItemsid ], eData );    
        }
    }
    
    else if( 
equalszClassName"item_snack" ) )
    {
        if( 
pevidpev_health ) > 75.0 )
        {
            
client_printidprint_chat"You can only eat a Snack when your HP is below 75" );
            return 
PLUGIN_HANDLED;
        }
        
        else
        {
            
set_pevidpev_healthpevidpev_health ) + 25.0 );
            
            
eDataITEM_POULET ][ iCount ][ Item_Id ] = 0;
            
eDataITEM_POULET ][ iCount ][ Item_Name ][ ] = EOS;
            
            
ArraySetArrayg_aItemsid ], eData );    
        }
    }
    return 
PLUGIN_CONTINUE;
}

ReadCustomEntities( )
{
    new 
szConfigsName256 ], szFilename512 ];
    
get_configsdirszConfigsNamecharsmaxszConfigsName ) );
    
    
formatexszFilenamecharsmaxszFilename ), "%s/%s"szConfigsNameg_szCustomEntitiesFile );
    
    new 
iFile fopenszFilename"r" );
    
    if( 
iFile )
    {
        new 
szData128 ];
        
        while( ! 
feofiFile ) )
        {
            
fgetsiFileszDatacharsmaxszData ) );
            
trimszData );
            
            switch( 
szData] )
            {
            case 
EOS'#'';'
                continue;
                
            default:
                {
                    new 
szEntityName32 ], szEntityModel32 ];
                    
                    if( ( 
parseszDataszEntityNamecharsmaxszEntityName ), szEntityModelcharsmaxszEntityModel ) ) ) < )
                    continue;
                    
                    if( ! 
equalszEntityName"item_medkit" ) )
                    continue;
                    
                    
g_iRetrieveEntityDataEntity_Name ] = szEntityName;
                    
g_iRetrieveEntityDataEntity_Model ] = szEntityModel;
                    
                    
CreateCustomEntityszEntityNameszEntityModel );
                }
            }
        }
    }
    
fcloseiFile );
}

RetrieveOrigins( )
{
    new 
Float:fOrigin];
    
    for( new 
i=1<= MAX_ORIGINSi++ )
    {
        
GetRandomOriginfOrigin );
        
SaveOriginfOrigin );
    }
}

SaveOriginFloat:fOrigin] )
{
    new 
eDataOriginDimensions ];

    
eDataORIGIN ][ ] = _:fOrigin];
    
eDataORIGIN ][ ] = _:fOrigin];
    
eDataORIGIN ][ ] = _:fOrigin];
    
    
ArrayPushArrayg_aOriginseData );
}

GetRandomizedOriginFloat:fOrigin] )
{
    new 
eDataOriginDimensions ];

    new 
iArraySize ArraySizeg_aOrigins );
    
    new 
iRandomEntry random_num0iArraySize );
    
    if( 
iArraySize )
    
iArraySize 0;
    
    
ArrayGetArrayg_aOriginsiRandomEntryeData );

    
fOrigin] = eDataORIGIN ][ ];
    
fOrigin] = eDataORIGIN ][ ];
    
fOrigin] = eDataORIGIN ][ ];
    
    
ArrayDeleteItemg_aOriginsiRandomEntry );
}

CreateCustomEntity( const szEntityName[ ], const szEntityModel[ ] )
{
    new 
Float:fOrigin];
    
GetRandomizedOriginfOrigin );

    new 
iEntity engfuncEngFunc_CreateNamedEntityengfuncEngFunc_AllocString"info_target" ) );
    
    
set_peviEntitypev_classnameszEntityName );
    
engfuncEngFunc_SetModeliEntityszEntityModel );
    
dllfuncDLLFunc_SpawniEntity );
    
engfuncEngFunc_SetSizeiEntityFloat:{ -3.0, -3.0, -3.0 }, Float:{ 3.03.03.0 } );
    
    
engfuncEngFunc_SetOriginiEntityfOrigin );
    
    
set_peviEntitypev_solidSOLID_BBOX );
    
set_peviEntitypev_movetypeMOVETYPE_NONE );
    
    
engfuncEngFunc_DropToFlooriEntity );
}

get_configsdir(name[],len)
{
    return 
get_localinfo("amxx_configsdir",name,len);


Errors:
PHP Code:

(116) : error 048: array dimensions do not match
(135) : error 048: array dimensions do not match
(159) : error 048: array dimensions do not match
(208) : error 035argument type mismatch (argument 2)
(
227) : error 035argument type mismatch (argument 2



All times are GMT -4. The time now is 12:23.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.