summaryrefslogtreecommitdiff
path: root/src/itemmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/itemmanager.cpp')
-rw-r--r--src/itemmanager.cpp208
1 files changed, 93 insertions, 115 deletions
diff --git a/src/itemmanager.cpp b/src/itemmanager.cpp
index 2b480397..d30fd276 100644
--- a/src/itemmanager.cpp
+++ b/src/itemmanager.cpp
@@ -34,7 +34,7 @@
xmlFree(prop); \
}
-ItemManager::ItemManager(std::string itemReferenceFile)
+ItemManager::ItemManager(const std::string &itemReferenceFile)
{
ResourceManager *resman = ResourceManager::getInstance();
int size;
@@ -62,127 +62,105 @@ ItemManager::ItemManager(std::string itemReferenceFile)
LOG_ERROR("Item Manager: " << itemReferenceFile
<< " is not a valid database file!", 0);
}
-
- unsigned int nbItems = 0;
- for (node = node->xmlChildrenNode; node != NULL; node = node->next)
+ else
{
- // Properties
- unsigned int id = 0;
- unsigned short itemType = 0;
- unsigned int weight = 0;
- unsigned int value = 0;
- std::string scriptName = "";
- Modifiers modifiers;
-
- if (!xmlStrEqual(node->name, BAD_CAST "item")) {
- continue;
- }
-
- xmlChar *prop = NULL;
- // Properties
- READ_PROP(node, prop, "id", id, atoi);
- READ_PROP(node, prop, "type", itemType, atoi);
- READ_PROP(node, prop, "weight", weight, atoi);
- READ_PROP(node, prop, "value", value, atoi);
- READ_PROP(node, prop, "script_name", scriptName, );
-
- // --- Modifiers
- // General
- READ_PROP(node, prop, "element", modifiers.element, (Element)atoi);
- READ_PROP(node, prop, "lifetime", modifiers.lifetime, atoi);
- // Raw Statistics
- READ_PROP(node, prop, "strength", modifiers.rawStats[STAT_STRENGTH], atoi);
- READ_PROP(node, prop, "agility", modifiers.rawStats[STAT_AGILITY], atoi);
- READ_PROP(node, prop, "vitality", modifiers.rawStats[STAT_VITALITY], atoi);
- READ_PROP(node, prop, "intelligence", modifiers.rawStats[STAT_INTELLIGENCE], atoi);
- READ_PROP(node, prop, "dexterity", modifiers.rawStats[STAT_DEXTERITY], atoi);
- READ_PROP(node, prop, "luck", modifiers.rawStats[STAT_LUCK], atoi);
- // Computed Statistics
- READ_PROP(node, prop, "heat", modifiers.computedStats[STAT_HEAT], atoi);
- READ_PROP(node, prop, "attack", modifiers.computedStats[STAT_ATTACK], atoi);
- READ_PROP(node, prop, "defence", modifiers.computedStats[STAT_DEFENCE], atoi);
- READ_PROP(node, prop, "magic", modifiers.computedStats[STAT_MAGIC], atoi);
- READ_PROP(node, prop, "accuracy", modifiers.computedStats[STAT_ACCURACY], atoi);
- READ_PROP(node, prop, "speed", modifiers.computedStats[STAT_SPEED], atoi);
- // Main Values
- READ_PROP(node, prop, "hp", modifiers.hpMod, atoi);
- READ_PROP(node, prop, "mp", modifiers.mpMod, atoi);
- // Equipment
- READ_PROP(node, prop, "range", modifiers.range, atoi);
- // Status effects addition
- READ_PROP(node, prop, "status_normal",
- modifiers.beingStateEffects.STATE_NORMAL, (bool)atoi);
- READ_PROP(node, prop, "status_poisoned",
- modifiers.beingStateEffects.STATE_POISONED, (bool)atoi);
- READ_PROP(node, prop, "status_stoned",
- modifiers.beingStateEffects.STATE_STONED, (bool)atoi);
- READ_PROP(node, prop, "status_stunned",
- modifiers.beingStateEffects.STATE_STUNNED, (bool)atoi);
- READ_PROP(node, prop, "status_slowed",
- modifiers.beingStateEffects.STATE_SLOWED, (bool)atoi);
- READ_PROP(node, prop, "status_tired",
- modifiers.beingStateEffects.STATE_TIRED, (bool)atoi);
- READ_PROP(node, prop, "status_mad",
- modifiers.beingStateEffects.STATE_MAD, (bool)atoi);
- READ_PROP(node, prop, "status_berserk",
- modifiers.beingStateEffects.STATE_BERSERK, (bool)atoi);
- READ_PROP(node, prop, "status_hasted",
- modifiers.beingStateEffects.STATE_HASTED, (bool)atoi);
- READ_PROP(node, prop, "status_floating",
- modifiers.beingStateEffects.STATE_FLOATING, (bool)atoi);
- // Status Effects deletion
- READ_PROP(node, prop, "status_not_poisoned",
- modifiers.beingStateEffects.STATE_NOT_POISONED, (bool)atoi);
- READ_PROP(node, prop, "status_not_stoned",
- modifiers.beingStateEffects.STATE_NOT_STONED, (bool)atoi);
- READ_PROP(node, prop, "status_not_stunned",
- modifiers.beingStateEffects.STATE_NOT_STUNNED, (bool)atoi);
- READ_PROP(node, prop, "status_not_slowed",
- modifiers.beingStateEffects.STATE_NOT_SLOWED, (bool)atoi);
- READ_PROP(node, prop, "status_not_tired",
- modifiers.beingStateEffects.STATE_NOT_TIRED, (bool)atoi);
- READ_PROP(node, prop, "status_not_mad",
- modifiers.beingStateEffects.STATE_NOT_MAD, (bool)atoi);
- READ_PROP(node, prop, "status_not_berserk",
- modifiers.beingStateEffects.STATE_NOT_BERSERK, (bool)atoi);
- READ_PROP(node, prop, "status_not_hasted",
- modifiers.beingStateEffects.STATE_NOT_HASTED, (bool)atoi);
- READ_PROP(node, prop, "status_not_floating",
- modifiers.beingStateEffects.STATE_NOT_FLOATING, (bool)atoi);
-
- // Checks
- if (id != 0)
- {
- ItemPtr item(new Item(modifiers, itemType, weight, value, scriptName));
- mItemReference[id] = item;
- nbItems++;
- }
-
- if (id == 0)
+ LOG_INFO("Loading item reference...", 0);
+ unsigned int nbItems = 0;
+ for (node = node->xmlChildrenNode; node != NULL; node = node->next)
{
- LOG_WARN("Item Manager: An (ignored) item has no ID in "
- << itemReferenceFile << "!", 0);
- }
- if (itemType == 0)
- {
- LOG_WARN("Item Manager: Missing Item Type for item: "
- << id << " in " << itemReferenceFile << ".", 0);
- }
- if (weight == 0)
- {
- LOG_WARN("Item Manager: Missing weight for item: "
- << id << " in " << itemReferenceFile << ".", 0);
+ // Properties
+ unsigned int id = 0;
+ unsigned short itemType = 0;
+ unsigned int weight = 0;
+ unsigned int value = 0;
+ std::string scriptName = "";
+ Modifiers modifiers;
+
+ if (!xmlStrEqual(node->name, BAD_CAST "item")) {
+ continue;
+ }
+
+ xmlChar *prop = NULL;
+ // Properties
+ READ_PROP(node, prop, "id", id, atoi);
+ READ_PROP(node, prop, "type", itemType, atoi);
+ READ_PROP(node, prop, "weight", weight, atoi);
+ READ_PROP(node, prop, "value", value, atoi);
+ READ_PROP(node, prop, "script_name", scriptName, );
+
+ // --- Modifiers
+ // General
+ READ_PROP(node, prop, "element", modifiers.element,
+ (Element)atoi);
+ READ_PROP(node, prop, "lifetime", modifiers.lifetime, atoi);
+ // Raw Statistics
+ READ_PROP(node, prop, "strength",
+ modifiers.rawStats[STAT_STRENGTH], atoi);
+ READ_PROP(node, prop, "agility",
+ modifiers.rawStats[STAT_AGILITY], atoi);
+ READ_PROP(node, prop, "vitality",
+ modifiers.rawStats[STAT_VITALITY], atoi);
+ READ_PROP(node, prop, "intelligence",
+ modifiers.rawStats[STAT_INTELLIGENCE], atoi);
+ READ_PROP(node, prop, "dexterity",
+ modifiers.rawStats[STAT_DEXTERITY], atoi);
+ READ_PROP(node, prop, "luck",
+ modifiers.rawStats[STAT_LUCK], atoi);
+ // Computed Statistics
+ READ_PROP(node, prop, "heat",
+ modifiers.computedStats[STAT_HEAT], atoi);
+ READ_PROP(node, prop, "attack",
+ modifiers.computedStats[STAT_ATTACK], atoi);
+ READ_PROP(node, prop, "defence",
+ modifiers.computedStats[STAT_DEFENCE], atoi);
+ READ_PROP(node, prop, "magic",
+ modifiers.computedStats[STAT_MAGIC], atoi);
+ READ_PROP(node, prop, "accuracy",
+ modifiers.computedStats[STAT_ACCURACY], atoi);
+ READ_PROP(node, prop, "speed",
+ modifiers.computedStats[STAT_SPEED], atoi);
+ // Main Values
+ READ_PROP(node, prop, "hp", modifiers.hp, atoi);
+ READ_PROP(node, prop, "mp", modifiers.mp, atoi);
+ // Equipment
+ READ_PROP(node, prop, "range", modifiers.range, atoi);
+ // Status effect
+ READ_PROP(node, prop, "status_effect",
+ modifiers.beingStateEffect, (BeingStateEffect)atoi);
+
+ // Checks
+ if (id != 0)
+ {
+ ItemPtr item(new Item(modifiers, itemType, weight,
+ value, scriptName));
+ mItemReference[id] = item;
+ nbItems++;
+ }
+
+ if (id == 0)
+ {
+ LOG_WARN("Item Manager: An (ignored) item has no ID in "
+ << itemReferenceFile << "!", 0);
+ }
+ if (weight == 0)
+ {
+ LOG_WARN("Item Manager: Missing weight for item: "
+ << id << " in " << itemReferenceFile << ".", 0);
+ }
+
+ LOG_INFO("Item: ID: " << id << ", itemType: " << itemType
+ << ", weight: " << weight << ", value: " << value <<
+ ", scriptName: " << scriptName << ".", 3);
+ //TODO: Log level 5 with everything
}
- LOG_INFO("Item: ID: " << id << ", itemType: " << itemType
- << ", weight: " << weight << ", value: " << value <<
- ", scriptName: " << scriptName << ".", 3);
- //TODO: Log level 5 with everything
- }
+ LOG_INFO("Loaded " << nbItems << " items from "
+ << itemReferenceFile << ".", 0);
- LOG_INFO("Loaded " << nbItems << " items from " << itemReferenceFile << ".", 0);
+ } // End if node "items"
xmlFreeDoc(doc);
+
} // End if doc?
} // End if data?
}