summaryrefslogtreecommitdiff
path: root/src/game-server/itemmanager.cpp
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2008-09-27 03:55:19 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2008-09-27 03:55:19 +0000
commit29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358 (patch)
tree41ca7bb0f8b557e096a2b783f6c94ea4d3e5006a /src/game-server/itemmanager.cpp
parentc27d73abc52bdc463a029a5f6a95e1db5df5abf6 (diff)
downloadmanaserv-29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358.tar.gz
manaserv-29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358.tar.bz2
manaserv-29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358.tar.xz
manaserv-29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358.zip
Implemented getting the attack zone of weapons from the item database and implemented single target attacks useful for projectile weapons like bows.
Diffstat (limited to 'src/game-server/itemmanager.cpp')
-rw-r--r--src/game-server/itemmanager.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/game-server/itemmanager.cpp b/src/game-server/itemmanager.cpp
index 211334ff..159b8356 100644
--- a/src/game-server/itemmanager.cpp
+++ b/src/game-server/itemmanager.cpp
@@ -27,6 +27,7 @@
#include "game-server/itemmanager.hpp"
#include "defines.h"
+#include "game-server/attackzone.hpp"
#include "game-server/item.hpp"
#include "game-server/resourcemanager.hpp"
#include "utils/logger.h"
@@ -122,6 +123,10 @@ void ItemManager::reload()
int maxPerSlot = XML::getProperty(node, "max-per-slot", 0);
int sprite = XML::getProperty(node, "sprite_id", 0);
std::string scriptName = XML::getProperty(node, "script_name", std::string());
+ std::string attackShape = XML::getProperty(node, "attack-shape", "cone");
+ std::string attackTarget = XML::getProperty(node, "attack-target", "multi");
+ int attackRange = XML::getProperty(node, "attack-range", 32);
+ int attackAngle = XML::getProperty(node, "attack-angle", 90);
ItemModifiers modifiers;
if (itemType == ITEM_EQUIPMENT_ONE_HAND_WEAPON ||
@@ -182,6 +187,42 @@ void ItemManager::reload()
item->setSpriteID(sprite ? sprite : id);
++nbItems;
+ if (itemType == ITEM_EQUIPMENT_ONE_HAND_WEAPON ||
+ itemType == ITEM_EQUIPMENT_TWO_HANDS_WEAPON)
+ {
+ AttackZone *zone = new AttackZone;
+
+ if (attackShape == "cone")
+ {
+ zone->shape = ATTZONESHAPE_CONE;
+ }
+ else
+ {
+ LOG_WARN("Item Manager: Unknown attack zone shape \"" << attackShape
+ <<"\" for weapon " << id << " in " << itemReferenceFile << '.');
+ zone->shape = ATTZONESHAPE_CONE;
+ }
+
+ if (attackTarget == "multi")
+ {
+ zone->multiTarget = true;
+ }
+ else if (attackTarget == "single")
+ {
+ zone->multiTarget = false;
+ }
+ else
+ {
+ LOG_WARN("Item Manager: Unknown target mode \"" << attackTarget
+ <<"\" for weapon " << id << " in " << itemReferenceFile << '.');
+ zone->multiTarget = true;
+ }
+ zone->range = attackRange;
+ zone->angle = attackAngle;
+
+ item->setAttackZone(zone);
+ }
+
LOG_DEBUG("Item: ID: " << id << ", itemType: " << itemType
<< ", weight: " << weight << ", value: " << value <<
", scriptName: " << scriptName << ", maxPerSlot: " << maxPerSlot << ".");