You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
5.2 KiB
133 lines
5.2 KiB
|
|
#ifndef ECONITEMDESCRIPTION_H
|
|
#define ECONITEMDESCRIPTION_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "localization_provider.h" // needed for locchar_t type
|
|
|
|
class IEconItemInterface;
|
|
namespace GCSDK
|
|
{
|
|
class CSharedObjectTypeCache;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Generate a description block for an IEconItemInterface. What the
|
|
// client does with the description is anyone's guess, but this will
|
|
// generate a block of UTF16 lines of text with meta/color data that
|
|
// can be used for whatever.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
enum EDescriptionLineMetaFlags
|
|
{
|
|
kDescLineFlag_Name = 0x0001, // the item name (can be renamed by user)
|
|
kDescLineFlag_Type = 0x0002, // the item type (ie., "Level 5 Rocket Launcher")
|
|
kDescLineFlag_Desc = 0x0004, // base item description (description from the item definition, level, etc.)
|
|
kDescLineFlag_Attribute = 0x0008, // some sort of gameplay-affecting attribute
|
|
kDescLineFlag_Misc = 0x0010, // not an attribute, not name/level
|
|
kDescLineFlag_Empty = 0x0020, // line with no content that needs to be displayed; meant for spacing
|
|
kDescLineFlag_Set = 0x0040, // this line is associated with item sets somehow
|
|
kDescLineFlag_LimitedUse = 0x0080, // this is a limited use item
|
|
kDescLineFlag_SetName = 0x0100, // this line is the title for an item set
|
|
kDescLineFlag_Scorecard = 0x0200,
|
|
kDescLineFlag_LootList = 0x0400, // this line belongs to a lootlist block
|
|
kDescLineFlag_OwnerOnly = 0x0800, // this line must be only shown for owner of the item
|
|
kDescLineFlag_DetailedInfo = 0x1000, // this line is detailed info like mission xp
|
|
kDescLineFlag_NameUncustomized = 0x2000, // the item name (not customized)
|
|
|
|
kDescLineFlagSet_DisplayInAttributeBlock = ~(kDescLineFlag_Name | kDescLineFlag_Type),
|
|
};
|
|
|
|
struct econ_item_description_line_t
|
|
{
|
|
attrib_colors_t eColor; // desired color type for this line -- will likely be looked up either in VGUI or in the schema
|
|
uint32 unMetaType; // type information for this line -- "item name"? "item level"?; etc.; can be game-specific
|
|
CUtlConstStringBase<locchar_t> sText; // actual text for this, post-localization
|
|
itemid_t un64FauxItemId; // defindex and paint encoded as an itemid.
|
|
bool bOwned; // a way to keep track of set/collection item presence
|
|
};
|
|
|
|
class IEconItemDescription
|
|
{
|
|
public:
|
|
// This may yield on the GC and should never yield on the client.
|
|
static void YieldingFillOutEconItemDescription( IEconItemDescription *out_pDescription, CLocalizationProvider *pLocalizationProvider, const IEconItemInterface *pEconItem );
|
|
|
|
|
|
public:
|
|
IEconItemDescription() { }
|
|
virtual ~IEconItemDescription() { }
|
|
|
|
uint32 GetLineCount() const { return m_vecDescLines.Count(); }
|
|
const econ_item_description_line_t& GetLine( int i ) const { return m_vecDescLines[i]; }
|
|
|
|
// Finds and returns the first line with *all* of the passed in search flags. Will return NULL if a line
|
|
// will all of the flags cannot be found.
|
|
const econ_item_description_line_t *GetFirstLineWithMetaType( uint32 unMetaTypeSearchFlags ) const;
|
|
|
|
private:
|
|
// When generating an item description, this is guaranteed to be called once and only once before GenerateDescription()
|
|
// is called. Any data that may yield but will be needed somewhere deep inside GenerateDescription() should be determined
|
|
// and cached off here.
|
|
virtual void YieldingCacheDescriptionData( CLocalizationProvider *pLocalizationProvider, const IEconItemInterface *pEconItem ) { }
|
|
|
|
// Take the properties off our pEconItem, and anything that we calculated in YieldingCacheDescriptionData() above and
|
|
// fill out all of our description lines.
|
|
virtual void GenerateDescriptionLines( CLocalizationProvider *pLocalizationProvider, const IEconItemInterface *pEconItem ) = 0;
|
|
|
|
protected:
|
|
CUtlVector<econ_item_description_line_t> m_vecDescLines;
|
|
};
|
|
|
|
#if defined( TF_DLL ) || defined( TF_CLIENT_DLL ) || defined( TF_GC_DLL )
|
|
#define PROJECT_TF
|
|
#endif
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose:
|
|
//-----------------------------------------------------------------------------
|
|
class CSteamAccountIDAttributeCollector : public IEconItemAttributeIterator
|
|
{
|
|
public:
|
|
virtual bool OnIterateAttributeValue( const CEconItemAttributeDefinition *pAttrDef, attrib_value_t value ) OVERRIDE
|
|
{
|
|
if ( pAttrDef->GetDescriptionFormat() == ATTDESCFORM_VALUE_IS_ACCOUNT_ID )
|
|
{
|
|
m_vecSteamAccountIDs.AddToTail( value );
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
virtual bool OnIterateAttributeValue( const CEconItemAttributeDefinition *pAttrDef, float value ) OVERRIDE
|
|
{
|
|
// Intentionally ignore.
|
|
return true;
|
|
}
|
|
|
|
virtual bool OnIterateAttributeValue( const CEconItemAttributeDefinition *pAttrDef, const CAttribute_String& value ) OVERRIDE
|
|
{
|
|
// Intentionally ignore.
|
|
return true;
|
|
}
|
|
|
|
virtual bool OnIterateAttributeValue( const CEconItemAttributeDefinition *pAttrDef, const Vector& value ) OVERRIDE
|
|
{
|
|
// Intentionally ignore.
|
|
return true;
|
|
}
|
|
|
|
// Data access.
|
|
const CUtlVector<uint32>& GetAccountIDs()
|
|
{
|
|
return m_vecSteamAccountIDs;
|
|
}
|
|
|
|
private:
|
|
CUtlVector<uint32> m_vecSteamAccountIDs;
|
|
};
|
|
|
|
#endif // ECONITEMDESCRIPTION_H
|