Raised This Month: $ Target: $400
 0% 

Solved Data storage


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 12:49   Data storage
Reply With Quote #1

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
__________________

Last edited by edon1337; 07-30-2018 at 09:25.
edon1337 is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-25-2018 , 13:06   Re: Data storage
Reply With Quote #2

PHP Code:
new Array:g_ePlayerData[33
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 13:08   Re: Data storage
Reply With Quote #3

Quote:
Originally Posted by OciXCrom View Post
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 ?
__________________

Last edited by edon1337; 07-25-2018 at 13:10.
edon1337 is offline
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 07-25-2018 , 13:15   Re: Data storage
Reply With Quote #4

Should work.
__________________
HamletEagle is offline
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 13:18   Re: Data storage
Reply With Quote #5

Quote:
Originally Posted by HamletEagle View Post
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 );
                }
            }
        }
    } 
__________________

Last edited by edon1337; 07-25-2018 at 13:46.
edon1337 is offline
CrAzY MaN
Senior Member
Join Date: Mar 2017
Location: India
Old 07-25-2018 , 13:48   Re: Data storage
Reply With Quote #6

Why not use enums?
__________________
CrAzY MaN is offline
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 13:52   Re: Data storage
Reply With Quote #7

Quote:
Originally Posted by CrAzY MaN View Post
Why not use enums?
What do you think these are?
Quote:
eData[ ItemType ][ MAX_ENTS ][ ItemInfo ];
__________________

Last edited by edon1337; 07-25-2018 at 13:53.
edon1337 is offline
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 14:03   Re: Data storage
Reply With Quote #8

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 ); 
__________________
edon1337 is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 07-25-2018 , 14:07   Re: Data storage
Reply With Quote #9

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
__________________

Last edited by OciXCrom; 07-25-2018 at 14:10.
OciXCrom is offline
Send a message via Skype™ to OciXCrom
edon1337
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
Old 07-25-2018 , 14:10   Re: Data storage
Reply With Quote #10

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
__________________

Last edited by edon1337; 07-25-2018 at 14:13.
edon1337 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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