summaryrefslogtreecommitdiffstats
path: root/src/game-server/abilitymanager.h
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2013-04-13 12:32:22 +0200
committerErik Schilling <ablu.erikschilling@googlemail.com>2013-05-08 14:02:50 +0200
commit708896008ad8ea391d542ce37b9871318a84fb97 (patch)
tree30c862cb18d354f879ffb0b426d5ff133d2bde3b /src/game-server/abilitymanager.h
parente2b6a4efe72333ab0e0761f4e9e8ce9eb29a5335 (diff)
downloadmanaserv-708896008ad8ea391d542ce37b9871318a84fb97.tar.gz
manaserv-708896008ad8ea391d542ce37b9871318a84fb97.tar.xz
manaserv-708896008ad8ea391d542ce37b9871318a84fb97.zip
[Abilities] Renamed specials to abilities
Diffstat (limited to 'src/game-server/abilitymanager.h')
-rw-r--r--src/game-server/abilitymanager.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/game-server/abilitymanager.h b/src/game-server/abilitymanager.h
new file mode 100644
index 0000000..969cd70
--- /dev/null
+++ b/src/game-server/abilitymanager.h
@@ -0,0 +1,117 @@
+/*
+ * The Mana Server
+ * Copyright (C) 2004-2010 The Mana World Development Team
+ *
+ * This file is part of The Mana Server.
+ *
+ * The Mana Server is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana Server is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana Server. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef ABILITYMANAGER_H
+#define ABILITYMANAGER_H
+
+#include "utils/string.h"
+#include "utils/xml.h"
+
+#include "scripting/script.h"
+
+
+
+class AbilityManager
+{
+public:
+ enum TargetMode
+ {
+ TARGET_BEING,
+ TARGET_POINT
+ };
+
+ struct AbilityInfo
+ {
+ AbilityInfo() :
+ id(0),
+ rechargeable(false),
+ defaultRechargeSpeed(0),
+ neededPoints(0),
+ target(TARGET_BEING)
+ {}
+
+ unsigned id;
+ std::string name;
+ std::string setName;
+ bool rechargeable;
+ int defaultRechargeSpeed;
+ unsigned neededPoints;
+ TargetMode target;
+ Script::Ref rechargedCallback;
+ Script::Ref useCallback;
+ };
+
+ AbilityManager()
+ { }
+
+ ~AbilityManager()
+ { clear(); }
+
+ /**
+ * Loads ability reference file.
+ */
+ void initialize();
+
+ /**
+ * Reloads ability reference file.
+ */
+ void reload();
+
+ /**
+ * Gets the abilities Id from a set and a ability string.
+ */
+ unsigned getId(const std::string &set, const std::string &name) const;
+
+ /**
+ * Gets the abilities Id from a string formatted in this way:
+ * "setname_abilityname"
+ */
+ unsigned getId(const std::string &abilityName) const;
+
+ const std::string getAbilityName(int id) const;
+ const std::string getSetName(int id) const;
+
+ AbilityInfo *getAbilityInfo(int id);
+
+
+ void readAbilitySetNode(xmlNodePtr node, const std::string &filename);
+
+ void checkStatus();
+
+private:
+ /**
+ * Clears up the ability maps.
+ */
+ void clear();
+
+ void readAbilityNode(xmlNodePtr skillNode,
+ const std::string &setName);
+
+ typedef std::map<unsigned, AbilityInfo*> AbilitiesInfo;
+ AbilitiesInfo mAbilitiesInfo;
+ typedef utils::NameMap<AbilityInfo*> NamedAbilitiesInfo;
+ NamedAbilitiesInfo mNamedAbilitiesInfo;
+
+};
+
+extern AbilityManager *abilityManager;
+
+#endif // ABILITYMANAGER_H