Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/game/server/tf/bot/tf_bot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4898,9 +4898,8 @@ void CTFBot::AddItem( const char* pszItemName )
{
CItemSelectionCriteria criteria;
criteria.SetQuality( AE_USE_SCRIPT_VALUE );
criteria.BAddCondition( "name", k_EOperator_String_EQ, pszItemName, true );

CBaseEntity *pItem = ItemGeneration()->GenerateRandomItem( &criteria, WorldSpaceCenter(), vec3_angle );
CBaseEntity *pItem = ItemGeneration()->GenerateItem( &criteria, pszItemName, WorldSpaceCenter(), vec3_angle );
if ( pItem )
{
CEconItemView *pScriptItem = static_cast< CBaseCombatWeapon * >( pItem )->GetAttributeContainer()->GetItem();
Expand Down
3 changes: 1 addition & 2 deletions src/game/server/tf/tf_bot_temp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1391,9 +1391,8 @@ void BotGenerateAndWearItem( CTFPlayer *pBot, const char *itemName )
CItemSelectionCriteria criteria;
criteria.SetItemLevel( AE_USE_SCRIPT_VALUE );
criteria.SetQuality( AE_USE_SCRIPT_VALUE );
criteria.BAddCondition( "name", k_EOperator_String_EQ, itemName, true );

CBaseEntity *pItem = ItemGeneration()->GenerateRandomItem( &criteria, pBot->GetAbsOrigin(), vec3_angle );
CBaseEntity *pItem = ItemGeneration()->GenerateItem( &criteria, itemName, pBot->GetAbsOrigin(), vec3_angle );
if ( pItem )
{
// If it's a weapon, remove the current one, and give us this one.
Expand Down
3 changes: 1 addition & 2 deletions src/game/server/tf/tf_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5565,8 +5565,7 @@ CBaseEntity *CTFPlayer::GiveNamedItem( const char *pszName, int iSubType, const
// Generate a base item of the specified type
CItemSelectionCriteria criteria;
criteria.SetQuality( AE_NORMAL );
criteria.BAddCondition( "name", k_EOperator_String_EQ, pszName, true );
pItem = ItemGeneration()->GenerateRandomItem( &criteria, GetAbsOrigin(), vec3_angle, pszName );
pItem = ItemGeneration()->GenerateItem( &criteria, pszName, GetAbsOrigin(), vec3_angle, pszName );
}

if ( pItem == NULL )
Expand Down
13 changes: 13 additions & 0 deletions src/game/shared/econ/econ_entity_creation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,19 @@ CBaseEntity *CItemGeneration::GenerateItemFromDefIndex( int iDefIndex, const Vec
return SpawnItem( iDefIndex, vecOrigin, vecAngles, 1, AE_UNIQUE, NULL );
}

//-----------------------------------------------------------------------------
// Purpose: Generate a item matching the specified definition index
//-----------------------------------------------------------------------------
CBaseEntity *CItemGeneration::GenerateItem( CItemSelectionCriteria *pCriteria, const char *pszItemName, const Vector &vecOrigin, const QAngle &vecAngles, const char* pszOverrideClassName )
{
entityquality_t iQuality;
int iChosenItem = ItemSystem()->GenerateItem( pCriteria, pszItemName, &iQuality );
if ( iChosenItem == INVALID_ITEM_DEF_INDEX )
return NULL;

return SpawnItem( iChosenItem, vecOrigin, vecAngles, pCriteria->GetItemLevel(), iQuality, pszOverrideClassName );
}

//-----------------------------------------------------------------------------
// Purpose: Generate an item from the specified item data
//-----------------------------------------------------------------------------
Expand Down
3 changes: 3 additions & 0 deletions src/game/shared/econ/econ_entity_creation.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ class CItemGeneration : public CAutoGameSystem
// Generate a random item matching the specified definition index
CBaseEntity *GenerateItemFromDefIndex( int iDefIndex, const Vector &vecOrigin, const QAngle &vecAngles );

// Generate a item matching the specified definition index
CBaseEntity* GenerateItem( CItemSelectionCriteria* pCriteria, const char *pszItemName, const Vector& vecOrigin, const QAngle& vecAngles, const char* pszOverrideClassName = NULL );

// Generate an item from the specified item data
CBaseEntity *GenerateItemFromScriptData( const CEconItemView *pData, const Vector &vecOrigin, const QAngle &vecAngles, const char *pszOverrideClassName );

Expand Down
41 changes: 41 additions & 0 deletions src/game/shared/econ/econ_item_system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,47 @@ item_definition_index_t CEconItemSystem::GenerateRandomItem( CItemSelectionCrite
return iChosenItem;
}

//-----------------------------------------------------------------------------
// Purpose: Generate a item matching the specified criteria
//-----------------------------------------------------------------------------
item_definition_index_t CEconItemSystem::GenerateItem( CItemSelectionCriteria *pCriteria, const char *pszItemName, entityquality_t *outEntityQuality )
{
VPROF_BUDGET("CEconItemSystem::GenerateItem", "Econ");
// First, pick a random item quality (use the one passed in first)
if ( !pCriteria->BQualitySet() )
{
pCriteria->SetQuality( GetRandomQualityForItem() );
}

pCriteria->SetIgnoreEnabledFlag( true );

const CEconItemDefinition* pItemDef = GetItemSchema()->GetItemDefinitionByName( pszItemName );
if ( !pItemDef )
{
DevMsg( "CEconItemSystem::GenerateItem: Invalid item %s\n", pszItemName );
return INVALID_ITEM_DEF_INDEX;
}

// If we haven't specified an entity quality, we want to use the item's specified one
if ( pCriteria->GetQuality() == AE_USE_SCRIPT_VALUE )
{
int32 iScriptQuality = pItemDef->GetQuality();
pCriteria->SetQuality( iScriptQuality == AE_UNDEFINED ? GetRandomQualityForItem( true ) : iScriptQuality );
}

// If we haven't specified an item level, we want to use the item's specified one.
if ( !pCriteria->BItemLevelSet() )
{
pCriteria->SetItemLevel( RandomInt( pItemDef->GetMinLevel(), pItemDef->GetMaxLevel() ) );
}

if ( outEntityQuality )
{
*outEntityQuality = pCriteria->GetQuality();
}
return pItemDef->GetDefinitionIndex();
}

//-----------------------------------------------------------------------------
// Purpose: Return a random quality for the item specified
//-----------------------------------------------------------------------------
Expand Down
3 changes: 3 additions & 0 deletions src/game/shared/econ/econ_item_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ class CEconItemSystem
// Select and return a random item's definition index matching the specified criteria
item_definition_index_t GenerateRandomItem( CItemSelectionCriteria *pCriteria, entityquality_t *outEntityQuality );

// Select and return a item's definition index matching the specified criteria
item_definition_index_t GenerateItem( CItemSelectionCriteria *pCriteria, const char *pszItemName, entityquality_t *outEntityQuality );

// Select and return the base item definition index for a class's load-out slot
// Note: baseitemcriteria_t is game-specific and/or may not exist!
virtual item_definition_index_t GenerateBaseItem( struct baseitemcriteria_t *pCriteria ) { return INVALID_ITEM_DEF_INDEX; }
Expand Down