| 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_Name[ 32 ], Entity_Model[ 32 ] }
enum _:ItemType { ITEM_POULET = 0, ITEM_SNACK }
enum _:ItemInfo { ItemTypes:Item_Type, Item_Name[32], Item_Id }
enum _:OriginDimensions { Float:ORIGIN[ 3 ] }
new g_iRetrieveEntityData[ RetrieveItemInfo ];
new const g_szCustomEntitiesFile[ ] = "GameEntities.ini";
new Array:g_aOrigins; new Array:g_aItems[ 33 ];
public plugin_init( ) { register_plugin( "CS Battle Royale BackPack", "1.0", "DoNii" ); InitializeOriginGenerator( ); DumpOriginData( ) ; register_clcmd( "say /backpack", "OnBackPack" ); RegisterHam( Ham_Touch, "info_target", "@HamTouch" ); RegisterHam( Ham_Spawn, "player", "@HamSpawn_Post", 1 ) ; }
public plugin_precache( ) { g_aOrigins = ArrayCreate( OriginDimensions ); for( new i=1; i <= 32; i++ ) g_aItems[ i ] = ArrayCreate( ItemInfo ) precache_model( "models/CS_BattleRoyale/Poulet.mdl" ); precache_model( "models/CS_BattleRoyale/BonBon.mdl" ); }
public @HamSpawn_Post( id ) { if( is_user_alive( id ) ) { new eData[ ItemType ][ MAX_ENTS ][ ItemInfo ]; for( new i; i < ArraySize( g_aItems[ id ] ) - 1; i++ ) { for( new iType=ITEM_POULET; iType <= ITEM_SNACK; iType++ ) { for( new iNum; iNum < MAX_ENTS; iNum++ ) { eData[ iType ][ iNum ][ Item_Id ] = 0; eData[ iType ][ iNum ][ Item_Name ][ 0 ] = EOS; ArraySetArray( g_aItems[ id ], i, eData ); } } } } }
public RoundStarted( ) { ArrayClear( g_aOrigins ); InitializeOriginGenerator( );
RetrieveOrigins( ); ReadCustomEntities( ); }
public @HamTouch( iEnt, id ) { if( ! pev_valid( iEnt ) ) return HAM_IGNORED; if( pev( iEnt, pev_effects ) & EF_NODRAW ) return HAM_SUPERCEDE; new szClassName[ 32 ], eData[ ItemType ][ MAX_ENTS ][ ItemInfo ]; pev( iEnt, pev_classname, szClassName, charsmax( szClassName ) ); if( equal( szClassName, "item_poulet" ) ) { for( new i; i < MAX_ENTS; i++ ) { if( ! eData[ ITEM_POULET ][ i ][ Item_Id ] ) { eData[ ITEM_POULET ][ i ][ Item_Id ] = iEnt; eData[ ITEM_POULET ][ i ][ Item_Name ] = iEnt; ArrayPushArray( g_aItems[ id ], eData ); break; } } set_pev( iEnt, pev_effects, pev( iEnt, pev_effects ) | EF_NODRAW ); set_pev( iEnt, pev_solid, SOLID_NOT ); } else if( equal( szClassName, "item_snack" ) ) { for( new i; i < MAX_ENTS; i++ ) { if( ! eData[ ITEM_POULET ][ i ][ Item_Id ] ) { eData[ ITEM_SNACK ][ i ][ Item_Id ] = iEnt; eData[ ITEM_SNACK ][ i ][ Item_Name ] = iEnt; ArrayPushArray( g_aItems[ id ], eData ); break; } } set_pev( iEnt, pev_effects, pev( iEnt, pev_effects ) | EF_NODRAW ); set_pev( iEnt, pev_solid, SOLID_NOT ); } return HAM_IGNORED; }
public OnBackPack( id ) { if( ! is_user_alive( id ) ) return PLUGIN_HANDLED;
new iMenu = menu_create( "Your BackPack", "OnBackPack_Handler" ); new szEntId[ 2 ], eData[ ItemType ][ MAX_ENTS ][ ItemInfo ]; for( new i; i < ArraySize( g_aItems[ id ] ) - 1; i++ ) { ArrayGetArray( g_aItems[ id ], i, eData ); for( new iType=ITEM_POULET; iType <= ITEM_SNACK; iType++ ) { for( new iNum; iNum < MAX_ENTS; iNum++ ) { if( eData[ iType ][ iNum ][ Item_Id ] > 0 ) { num_to_str( iNum, szEntId, charsmax( szEntId ) ); menu_additem( iMenu, eData[ iType ][ iNum ][ Item_Name ], szEntId ); } } } } menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL ); menu_display( id, iMenu, 0 ); return PLUGIN_CONTINUE; }
public OnBackPack_Handler( id, iMenu, iItem ) { new iAccess, szCount[ 2 ], iCallback, iCount; menu_item_getinfo( iMenu, iItem, iAccess, szCount, charsmax( szCount ), _, _, iCallback ); menu_destroy( iMenu ); iCount = str_to_num( szCount ); new szClassName[ 32 ]; pev( id, pev_classname, szClassName, charsmax( szClassName ) ); new eData[ ItemType ][ MAX_ENTS ][ ItemInfo ]; if( equal( szClassName, "item_poulet" ) ) { if( pev( id, pev_health ) >= 100.0 ) { client_print( id, print_chat, "You can only eat a Poulet when your HP is below 100" ); return PLUGIN_HANDLED; } else { set_pev( id, pev_health, 100.0 ); eData[ ITEM_POULET ][ iCount ][ Item_Id ] = 0; eData[ ITEM_POULET ][ iCount ][ Item_Name ][ 0 ] = EOS; ArraySetArray( g_aItems[ id ], eData ); } } else if( equal( szClassName, "item_snack" ) ) { if( pev( id, pev_health ) > 75.0 ) { client_print( id, print_chat, "You can only eat a Snack when your HP is below 75" ); return PLUGIN_HANDLED; } else { set_pev( id, pev_health, pev( id, pev_health ) + 25.0 ); eData[ ITEM_POULET ][ iCount ][ Item_Id ] = 0; eData[ ITEM_POULET ][ iCount ][ Item_Name ][ 0 ] = EOS; ArraySetArray( g_aItems[ id ], eData ); } } return PLUGIN_CONTINUE; }
ReadCustomEntities( ) { new szConfigsName[ 256 ], szFilename[ 512 ]; get_configsdir( szConfigsName, charsmax( szConfigsName ) ); formatex( szFilename, charsmax( szFilename ), "%s/%s", szConfigsName, g_szCustomEntitiesFile ); new iFile = fopen( szFilename, "r" ); if( iFile ) { new szData[ 128 ]; while( ! feof( iFile ) ) { fgets( iFile, szData, charsmax( szData ) ); trim( szData ); switch( szData[ 0 ] ) { case EOS, '#', ';': continue; default: { new szEntityName[ 32 ], szEntityModel[ 32 ]; if( ( parse( szData, szEntityName, charsmax( szEntityName ), szEntityModel, charsmax( szEntityModel ) ) ) < 2 ) continue; if( ! equal( szEntityName, "item_medkit" ) ) continue; g_iRetrieveEntityData[ Entity_Name ] = szEntityName; g_iRetrieveEntityData[ Entity_Model ] = szEntityModel; CreateCustomEntity( szEntityName, szEntityModel ); } } } } fclose( iFile ); }
RetrieveOrigins( ) { new Float:fOrigin[ 3 ]; for( new i=1; i <= MAX_ORIGINS; i++ ) { GetRandomOrigin( fOrigin ); SaveOrigin( fOrigin ); } }
SaveOrigin( Float:fOrigin[ 3 ] ) { new eData[ OriginDimensions ];
eData[ ORIGIN ][ 0 ] = _:fOrigin[ 0 ]; eData[ ORIGIN ][ 1 ] = _:fOrigin[ 1 ]; eData[ ORIGIN ][ 2 ] = _:fOrigin[ 2 ]; ArrayPushArray( g_aOrigins, eData ); }
GetRandomizedOrigin( Float:fOrigin[ 3 ] ) { new eData[ OriginDimensions ];
new iArraySize = ArraySize( g_aOrigins ); new iRandomEntry = random_num( 0, iArraySize - 1 ); if( iArraySize < 0 ) iArraySize = 0; ArrayGetArray( g_aOrigins, iRandomEntry, eData );
fOrigin[ 0 ] = eData[ ORIGIN ][ 0 ]; fOrigin[ 1 ] = eData[ ORIGIN ][ 1 ]; fOrigin[ 2 ] = eData[ ORIGIN ][ 2 ]; ArrayDeleteItem( g_aOrigins, iRandomEntry ); }
CreateCustomEntity( const szEntityName[ ], const szEntityModel[ ] ) { new Float:fOrigin[ 3 ]; GetRandomizedOrigin( fOrigin );
new iEntity = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) ); set_pev( iEntity, pev_classname, szEntityName ); engfunc( EngFunc_SetModel, iEntity, szEntityModel ); dllfunc( DLLFunc_Spawn, iEntity ); engfunc( EngFunc_SetSize, iEntity, Float:{ -3.0, -3.0, -3.0 }, Float:{ 3.0, 3.0, 3.0 } ); engfunc( EngFunc_SetOrigin, iEntity, fOrigin ); set_pev( iEntity, pev_solid, SOLID_BBOX ); set_pev( iEntity, pev_movetype, MOVETYPE_NONE ); engfunc( EngFunc_DropToFloor, iEntity ); }
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 035: argument type mismatch (argument 2) (227) : error 035: argument type mismatch (argument 2)
|