diff options
author | Philipp Sehmisch <tmw@crushnet.org> | 2008-09-27 03:55:19 +0000 |
---|---|---|
committer | Philipp Sehmisch <tmw@crushnet.org> | 2008-09-27 03:55:19 +0000 |
commit | 29ae6d3f42ac55e7bc8c5ad0b044c7b0e662d358 (patch) | |
tree | 41ca7bb0f8b557e096a2b783f6c94ea4d3e5006a /src/game-server/itemmanager.cpp | |
parent | c27d73abc52bdc463a029a5f6a95e1db5df5abf6 (diff) | |
download | manaserv-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.cpp | 41 |
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 << "."); |