diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-04-03 13:29:05 +0200 |
---|---|---|
committer | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-04-04 16:22:11 +0200 |
commit | f8e816d9185c09d1c17d921b775e483d132982e5 (patch) | |
tree | 3ab299ab6057db3bfd8feb24130a6fcb7e64a60d /src/game-server/specialmanager.h | |
parent | e4baa92aae537921dd17873328a95ab17afcfdfc (diff) | |
download | manaserv-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.h | 114 |
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 |