summaryrefslogtreecommitdiff
path: root/src/game-server/specialmanager.h
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2012-04-03 13:29:05 +0200
committerErik Schilling <ablu.erikschilling@googlemail.com>2012-04-04 16:22:11 +0200
commitf8e816d9185c09d1c17d921b775e483d132982e5 (patch)
tree3ab299ab6057db3bfd8feb24130a6fcb7e64a60d /src/game-server/specialmanager.h
parente4baa92aae537921dd17873328a95ab17afcfdfc (diff)
downloadmanaserv-f8e816d9185c09d1c17d921b775e483d132982e5.tar.gz
manaserv-f8e816d9185c09d1c17d921b775e483d132982e5.tar.bz2
manaserv-f8e816d9185c09d1c17d921b775e483d132982e5.tar.xz
manaserv-f8e816d9185c09d1c17d921b775e483d132982e5.zip
Enhanced special support
- Made the current charge being saved. - Added script binds: - chr_set_special_recharge_speed - chr_get_special_recharge_speed - chr_set_special_mana - chr_get_special_mana - get_special_info - Added special info lua class. Functions: - name - needed_mana - rechargeable - on_use - on_recharged - category Further the engine no longer sets charge to 0 after using of specials this allows more flexbilillity (like failing specials). Changes on the xml database: - recharge renamed to rechargeable (needed by client and server) - needed - the needed mana to trigger a special (server only) - rechargespeed - the defailt recharge speed in mana per tick (server only) - target - the type of target (either being or point) (server and client) I also made the lua engine pushing nil instead of a 0 light userdata when the pointer was 0. Database update needed. Change is tested. Mana-Mantis: #167, #156 Reviewed-by: bjorn.
Diffstat (limited to 'src/game-server/specialmanager.h')
-rw-r--r--src/game-server/specialmanager.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/game-server/specialmanager.h b/src/game-server/specialmanager.h
new file mode 100644
index 00000000..b7a4f54b
--- /dev/null
+++ b/src/game-server/specialmanager.h
@@ -0,0 +1,114 @@
+/*
+ * 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 SPECIALMANAGER_H
+#define SPECIALMANAGER_H
+
+#include "utils/string.h"
+#include "utils/xml.h"
+
+#include "scripting/script.h"
+
+
+
+class SpecialManager
+{
+public:
+ enum TargetMode
+ {
+ TARGET_BEING,
+ TARGET_POINT
+ };
+
+ struct SpecialInfo
+ {
+ SpecialInfo() :
+ id(0),
+ rechargeable(false),
+ defaultRechargeSpeed(0),
+ neededMana(0),
+ target(TARGET_BEING)
+ {}
+
+ unsigned int id;
+ std::string name;
+ std::string setName;
+ bool rechargeable;
+ int defaultRechargeSpeed;
+ unsigned int neededMana;
+ TargetMode target;
+ Script::Ref rechargedCallback;
+ Script::Ref useCallback;
+ };
+
+ SpecialManager(const std::string &specialFile):
+ mSpecialFile(specialFile)
+ { }
+
+ ~SpecialManager()
+ { clear(); }
+
+ /**
+ * Loads special reference file.
+ */
+ void initialize();
+
+ /**
+ * Reloads special reference file.
+ */
+ void reload();
+
+ /**
+ * Gets the specials Id from a set and a special string.
+ */
+ unsigned int getId(const std::string &set, const std::string &name) const;
+
+ /**
+ * Gets the specials Id from a string formatted in this way:
+ * "setname_skillname"
+ */
+ unsigned int getId(const std::string &specialName) const;
+
+ const std::string getSpecialName(int id) const;
+ const std::string getSetName(int id) const;
+
+ SpecialInfo *getSpecialInfo(int id);
+
+private:
+ /**
+ * Clears up the special maps.
+ */
+ void clear();
+
+ void readSpecialNode(xmlNodePtr skillNode,
+ const std::string &setName);
+
+ std::string mSpecialFile;
+ typedef std::map<unsigned int, SpecialInfo*> SpecialsInfo;
+ SpecialsInfo mSpecialsInfo;
+ typedef utils::NameMap<SpecialInfo*> NamedSpecialsInfo;
+ NamedSpecialsInfo mNamedSpecialsInfo;
+
+};
+
+extern SpecialManager *specialManager;
+
+#endif // SPECIALMANAGER_H