1
0

Added enchantment combining into cEnchantments.

This commit is contained in:
madmaxoft 2014-04-20 14:16:26 +02:00
parent bdd8b43b3e
commit 7c6ef26be9
2 changed files with 33 additions and 16 deletions

View File

@ -29,6 +29,18 @@ cEnchantments::cEnchantments(const AString & a_StringSpec)
void cEnchantments::Add(const cEnchantments & a_Other)
{
for (cEnchantments::cMap::const_iterator itr = a_Other.m_Enchantments.begin(), end = a_Other.m_Enchantments.end(); itr != end; ++itr)
{
SetLevel(itr->first, itr->second);
} // for itr - a_Other.m_Enchantments[]
}
void cEnchantments::AddFromString(const AString & a_StringSpec) void cEnchantments::AddFromString(const AString & a_StringSpec)
{ {
// Add enchantments in the stringspec; if a specified enchantment already exists, overwrites it // Add enchantments in the stringspec; if a specified enchantment already exists, overwrites it

View File

@ -40,7 +40,8 @@ Serialization will never put zero-level enchantments into the stringspec and wil
class cEnchantments class cEnchantments
{ {
public: public:
/// Individual enchantment IDs, corresponding to their NBT IDs ( http://www.minecraftwiki.net/wiki/Data_Values#Enchantment_IDs ) /** Individual enchantment IDs, corresponding to their NBT IDs ( http://www.minecraftwiki.net/wiki/Data_Values#Enchantment_IDs )
*/
enum enum
{ {
@ -70,34 +71,38 @@ public:
enchLure = 62, enchLure = 62,
} ; } ;
/// Creates an empty enchantments container /** Creates an empty enchantments container */
cEnchantments(void); cEnchantments(void);
/// Creates an enchantments container filled with enchantments parsed from stringspec /** Creates an enchantments container filled with enchantments parsed from stringspec */
cEnchantments(const AString & a_StringSpec); cEnchantments(const AString & a_StringSpec);
/// Adds enchantments in the stringspec; if a specified enchantment already exists, overwrites it /** Adds the enchantments contained in a_Other into this object.
Existing enchantments are preserved, unless a_Other specifies a different level, in which case the level is changed. */
void Add(const cEnchantments & a_Other);
/** Adds enchantments in the stringspec; if a specified enchantment already exists, overwrites it */
void AddFromString(const AString & a_StringSpec); void AddFromString(const AString & a_StringSpec);
/// Serializes all the enchantments into a string /** Serializes all the enchantments into a string */
AString ToString(void) const; AString ToString(void) const;
/// Returns the level for the specified enchantment; 0 if not stored /** Returns the level for the specified enchantment; 0 if not stored */
int GetLevel(int a_EnchantmentID) const; int GetLevel(int a_EnchantmentID) const;
/// Sets the level for the specified enchantment, adding it if not stored before or removing it if level <= 0 /** Sets the level for the specified enchantment, adding it if not stored before or removing it if level <= 0 */
void SetLevel(int a_EnchantmentID, int a_Level); void SetLevel(int a_EnchantmentID, int a_Level);
/// Removes all enchantments /** Removes all enchantments */
void Clear(void); void Clear(void);
/// Returns true if there are no enchantments /** Returns true if there are no enchantments */
bool IsEmpty(void) const; bool IsEmpty(void) const;
/// Converts enchantment name to the numeric representation; returns -1 if enchantment name not found; case insensitive /** Converts enchantment name to the numeric representation; returns -1 if enchantment name not found; case insensitive */
static int StringToEnchantmentID(const AString & a_EnchantmentName); static int StringToEnchantmentID(const AString & a_EnchantmentName);
/// Returns true if a_Other contains exactly the same enchantments and levels /** Returns true if a_Other contains exactly the same enchantments and levels */
bool operator ==(const cEnchantments & a_Other) const; bool operator ==(const cEnchantments & a_Other) const;
// tolua_end // tolua_end
@ -120,20 +125,20 @@ public:
/** Gets random enchantment from Vector and returns it */ /** Gets random enchantment from Vector and returns it */
static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments); static cEnchantments GetRandomEnchantmentFromVector(cWeightedEnchantments & a_Enchantments);
/// Returns true if a_Other doesn't contain exactly the same enchantments and levels /** Returns true if a_Other doesn't contain exactly the same enchantments and levels */
bool operator !=(const cEnchantments & a_Other) const; bool operator !=(const cEnchantments & a_Other) const;
/// Writes the enchantments into the specified NBT writer; begins with the LIST tag of the specified name ("ench" or "StoredEnchantments") /** Writes the enchantments into the specified NBT writer; begins with the LIST tag of the specified name ("ench" or "StoredEnchantments") */
friend void EnchantmentSerializer::WriteToNBTCompound(cEnchantments const& a_Enchantments, cFastNBTWriter & a_Writer, const AString & a_ListTagName); friend void EnchantmentSerializer::WriteToNBTCompound(cEnchantments const& a_Enchantments, cFastNBTWriter & a_Writer, const AString & a_ListTagName);
/// Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments) /** Reads the enchantments from the specified NBT list tag (ench or StoredEnchantments) */
friend void EnchantmentSerializer::ParseFromNBT(cEnchantments& a_Enchantments, const cParsedNBT & a_NBT, int a_EnchListTagIdx); friend void EnchantmentSerializer::ParseFromNBT(cEnchantments& a_Enchantments, const cParsedNBT & a_NBT, int a_EnchListTagIdx);
protected: protected:
/// Maps enchantment ID -> enchantment level /** Maps enchantment ID -> enchantment level */
typedef std::map<int, int> cMap; typedef std::map<int, int> cMap;
/// Currently stored enchantments /** Currently stored enchantments */
cMap m_Enchantments; cMap m_Enchantments;
} ; // tolua_export } ; // tolua_export