summaryrefslogtreecommitdiffstats
path: root/source/BlockID.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/BlockID.cpp')
-rw-r--r--source/BlockID.cpp55
1 files changed, 31 insertions, 24 deletions
diff --git a/source/BlockID.cpp b/source/BlockID.cpp
index 177652a46..7193094d8 100644
--- a/source/BlockID.cpp
+++ b/source/BlockID.cpp
@@ -42,20 +42,20 @@ class cBlockIDMap
public:
cBlockIDMap(void)
{
- cIniFile Ini("items.ini");
- if (!Ini.ReadFile())
+ cIniFile Ini;
+ if (!Ini.ReadFile("items.ini"))
{
return;
}
- long KeyID = Ini.FindKey("Items");
+ int KeyID = Ini.FindKey("Items");
if (KeyID == cIniFile::noID)
{
return;
}
- unsigned NumValues = Ini.GetNumValues(KeyID);
- for (unsigned i = 0; i < NumValues; i++)
+ int NumValues = Ini.GetNumValues(KeyID);
+ for (int i = 0; i < NumValues; i++)
{
- AString Name = Ini.ValueName(KeyID, i);
+ AString Name = Ini.GetValueName(KeyID, i);
if (Name.empty())
{
continue;
@@ -79,40 +79,43 @@ public:
bool ResolveItem(const AString & a_ItemName, cItem & a_Item)
{
- ItemMap::iterator itr = m_Map.find(a_ItemName);
+ // Split into parts divided by either ':' or '^'
+ AStringVector Split = StringSplitAndTrim(a_ItemName, ":^");
+ if (Split.empty())
+ {
+ return false;
+ }
+
+ ItemMap::iterator itr = m_Map.find(Split[0]);
if (itr != m_Map.end())
{
+ // Resolved as a string, assign the type and the default damage / count
a_Item.m_ItemType = itr->second.first;
a_Item.m_ItemDamage = itr->second.second;
if (a_Item.m_ItemDamage == -1)
{
a_Item.m_ItemDamage = 0;
}
- a_Item.m_ItemCount = 1;
- return true;
- }
-
- // Not a resolvable string, try pure numbers: "45:6", "45^6" etc.
- AStringVector Split = StringSplit(a_ItemName, ":");
- if (Split.size() == 1)
- {
- Split = StringSplit(a_ItemName, "^");
}
- if (Split.empty())
- {
- return false;
- }
- a_Item.m_ItemType = (short)atoi(Split[0].c_str());
- if ((a_Item.m_ItemType == 0) && (Split[0] != "0"))
+ else
{
- // Parsing the number failed
- return false;
+ // Not a resolvable string, try pure numbers: "45:6", "45^6" etc.
+ a_Item.m_ItemType = (short)atoi(Split[0].c_str());
+ if ((a_Item.m_ItemType == 0) && (Split[0] != "0"))
+ {
+ // Parsing the number failed
+ return false;
+ }
}
+
+ // Parse the damage, if present:
if (Split.size() < 2)
{
+ // Not present, set the item as valid and return success:
a_Item.m_ItemCount = 1;
return true;
}
+
a_Item.m_ItemDamage = atoi(Split[1].c_str());
if ((a_Item.m_ItemDamage == 0) && (Split[1] != "0"))
{
@@ -662,6 +665,7 @@ public:
g_BlockTransparent[E_BLOCK_GLASS_PANE] = true;
g_BlockTransparent[E_BLOCK_ICE] = true;
g_BlockTransparent[E_BLOCK_IRON_DOOR] = true;
+ g_BlockTransparent[E_BLOCK_LAVA] = true;
g_BlockTransparent[E_BLOCK_LEAVES] = true;
g_BlockTransparent[E_BLOCK_LEVER] = true;
g_BlockTransparent[E_BLOCK_MELON_STEM] = true;
@@ -674,11 +678,14 @@ public:
g_BlockTransparent[E_BLOCK_RED_MUSHROOM] = true;
g_BlockTransparent[E_BLOCK_RED_ROSE] = true;
g_BlockTransparent[E_BLOCK_SIGN_POST] = true;
+ g_BlockTransparent[E_BLOCK_STATIONARY_LAVA] = true;
+ g_BlockTransparent[E_BLOCK_STATIONARY_WATER] = true;
g_BlockTransparent[E_BLOCK_STONE_PRESSURE_PLATE] = true;
g_BlockTransparent[E_BLOCK_SNOW] = true;
g_BlockTransparent[E_BLOCK_TALL_GRASS] = true;
g_BlockTransparent[E_BLOCK_TORCH] = true;
g_BlockTransparent[E_BLOCK_VINES] = true;
+ g_BlockTransparent[E_BLOCK_WATER] = true;
g_BlockTransparent[E_BLOCK_WALLSIGN] = true;
g_BlockTransparent[E_BLOCK_WOODEN_DOOR] = true;
g_BlockTransparent[E_BLOCK_WOODEN_PRESSURE_PLATE] = true;