Thanks, but I still get some mismatches..
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);
}