]> jfr.im git - irc/gameservirc.git/commitdiff
Changed Range to be a template class so it can be used with unsigned & signed ints...
authorkainazzzo <redacted>
Fri, 25 Sep 2009 20:43:18 +0000 (20:43 +0000)
committerkainazzzo <redacted>
Fri, 25 Sep 2009 20:43:18 +0000 (20:43 +0000)
Changed GetMonstersByLevelId to GetMonsterIdsByLevelId and implemented an index table for mapping lists of monsters to their respective levels. This results in a much faster GetRandomMonsterForPlayer function in ForestGL... 10,000 gets in about 3 seconds
Added FightGL with functions for when players fight things

git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@539 bc333340-6410-0410-a689-9d09f3c113fa

25 files changed:
gameserv-2.0/libgameservcore/include/GameServ/Types.h
gameserv-2.0/libgameservcore/src/Types.cpp
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileMonsterDAO.h
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/IMonsterDAO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/FightGL.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/ItemGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/MasterGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/MonsterGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h
gameserv-2.0/libgameservgldl/libgameservgldl.vcproj
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileItemDAO.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileLevelDAO.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileMonsterDAO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/FightGL.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/GameLayer/ForestGL.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ArmorGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MonsterGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PotionGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/WeaponGO.cpp
gameserv-2.0/testdriver/main.cpp

index 1d8fcfcd6d215e135a7346fde8da6835f2458feb..de0fab22f7bec9ef24843919bc967db1ce77a6cd 100644 (file)
@@ -6,6 +6,27 @@ using std::string;
 #include <GameServ/GameServException.h>\r
 using GameServ::Exceptions::GameServException;\r
 \r
+#include <ctime>\r
+#include <boost/random/linear_congruential.hpp>\r
+#include <boost/random/uniform_int.hpp>\r
+#include <boost/random/uniform_real.hpp>\r
+#include <boost/random/variate_generator.hpp>\r
+// Sun CC doesn't handle boost::iterator_adaptor yet\r
+#if !defined(__SUNPRO_CC) || (__SUNPRO_CC > 0x530)\r
+#include <boost/generator_iterator.hpp>\r
+#endif\r
+\r
+#ifdef BOOST_NO_STDC_NAMESPACE\r
+namespace std {\r
+  using ::time;\r
+}\r
+#endif\r
+\r
+// This is a typedef for a random number generator.\r
+// Try boost::mt19937 or boost::ecuyer1988 instead of boost::minstd_rand\r
+typedef boost::minstd_rand base_generator_type;\r
+\r
+\r
 namespace GameServ \r
 {              \r
        namespace Types\r
@@ -101,35 +122,82 @@ namespace GameServ
                        static const modifierinfo mModifierInfoTable[];\r
                }; // Modifiers class\r
 \r
+               template <class T>\r
                class Range\r
                {\r
                public:\r
-                       Range();\r
-                       Range(const int &high, const int &low);\r
-                       ~Range();\r
+\r
+                       Range()\r
+                       {\r
+                       }\r
+\r
+                       Range(const T &high, const T &low)\r
+                       {\r
+                               mHigh = high;\r
+                               mLow = low;\r
+                       }\r
+\r
+                       ~Range()\r
+                       {\r
+                       }\r
 \r
                        //! Generate a random number within the range\r
-                       int Random();\r
+                       T Random()\r
+                       {\r
+                               static base_generator_type generator(static_cast<T>(std::time(0)));\r
+                               if (mLow == mHigh)\r
+                               {\r
+                                       return mLow;\r
+                               }\r
+                               else\r
+                               {\r
+                                       boost::uniform_int<> uni_dist(mLow, mHigh);\r
+                                       boost::variate_generator<base_generator_type&, boost::uniform_int<> > uni(generator, uni_dist);\r
+                                       mLastRandom = uni();\r
+                                       return mLastRandom;\r
+                               }\r
+                       }\r
 \r
                        //! Property get - High\r
-                       int High(void) const;\r
+                       T High(void) const\r
+                       {\r
+                               return mHigh;\r
+                       }\r
                        \r
                        //! Property set - High\r
-                       void High(const int &value);\r
+                       void High(const T &value)\r
+                       {\r
+                               if (value >= mLow)\r
+                               {\r
+                                       mHigh = value;\r
+                               }\r
+                       }\r
 \r
                        //! Property get - Low\r
-                       int Low(void) const;\r
+                       T Low(void) const\r
+                       {\r
+                               return mLow;\r
+                       }\r
 \r
                        //! Property set - Low\r
-                       void Low(const int &value);\r
+                       void Low(const T &value)\r
+                       {\r
+                               if (value <= mHigh)\r
+                               {\r
+                                       mLow = value;\r
+                               }\r
+                       }\r
 \r
                        //! Property get - Last random number to be generated\r
-                       int LastRandom(void) const;\r
+                       T LastRandom(void) const\r
+                       {\r
+                               return mLastRandom;\r
+                       }\r
                        \r
                private:\r
-                       int mHigh;\r
-                       int mLow;\r
-                       int mLastRandom;\r
+                       T mHigh;\r
+                       T mLow;\r
+                       T mLastRandom;\r
                };\r
        } \r
 }\r
index 969908ff18054e5d1d481cb3ec79c1e8576b55da..7fd6fbe217499e1da269c7e34e5983af49a02ca4 100644 (file)
@@ -16,25 +16,6 @@ using std::exception;
 using boost::format;\r
 using boost::str;\r
 \r
-#include <ctime>\r
-#include <boost/random/linear_congruential.hpp>\r
-#include <boost/random/uniform_int.hpp>\r
-#include <boost/random/uniform_real.hpp>\r
-#include <boost/random/variate_generator.hpp>\r
-// Sun CC doesn't handle boost::iterator_adaptor yet\r
-#if !defined(__SUNPRO_CC) || (__SUNPRO_CC > 0x530)\r
-#include <boost/generator_iterator.hpp>\r
-#endif\r
-\r
-#ifdef BOOST_NO_STDC_NAMESPACE\r
-namespace std {\r
-  using ::time;\r
-}\r
-#endif\r
-\r
-// This is a typedef for a random number generator.\r
-// Try boost::mt19937 or boost::ecuyer1988 instead of boost::minstd_rand\r
-typedef boost::minstd_rand base_generator_type;\r
 \r
 TypeException::TypeException(const string &ErrorMsg, const char *pFilename, int SourceLine)\r
 : GameServException(ErrorMsg, pFilename, SourceLine)\r
@@ -147,67 +128,3 @@ Modifiers::Modifier Modifiers::Parse(const string &modifier)
 \r
        throw TypeException(str(format("No modifier enumeration found for %1%") % modifier), __FILE__, __LINE__);\r
 }\r
-\r
-Range::Range()\r
-{\r
-       mHigh = 0;\r
-       mLow = 0;\r
-       mLastRandom = 0;\r
-}\r
-\r
-Range::Range(const int &high, const int &low)\r
-{\r
-       mHigh = high;\r
-       mLow = low;\r
-       mLastRandom = 0;\r
-}\r
-\r
-Range::~Range()\r
-{\r
-       mHigh = 0;\r
-       mLow = 0;\r
-       mLastRandom = 0;\r
-}\r
-\r
-void Range::High(const int &value)\r
-{\r
-       if (mHigh >= mLow)\r
-               mHigh = value;\r
-}\r
-\r
-int Range::High(void) const\r
-{\r
-       return mHigh;\r
-}\r
-\r
-void Range::Low(const int &value)\r
-{\r
-       if (mLow <= mHigh)\r
-               mLow = value;\r
-}\r
-\r
-int Range::Low(void) const\r
-{\r
-       return mLow;\r
-}\r
-\r
-int Range::Random()\r
-{\r
-       static base_generator_type generator(static_cast<int>(std::time(0)));\r
-       if (mLow == mHigh)\r
-       {\r
-               return mLow;\r
-       }\r
-       else\r
-       {\r
-               boost::uniform_int<> uni_dist(mHigh, mLow);\r
-               boost::variate_generator<base_generator_type&, boost::uniform_int<> > uni(generator, uni_dist);\r
-               mLastRandom = uni();\r
-               return mLastRandom;\r
-       }\r
-}\r
-\r
-int Range::LastRandom(void) const\r
-{\r
-       return mLastRandom;\r
-}
\ No newline at end of file
index 75515bb44e5b0d6dedc3ffcb8dcb29b6b43a8750..b89ae7105c16d153aa7f56197bddd1cf13a65c46 100644 (file)
@@ -36,7 +36,7 @@ namespace GameServ {  namespace DataLayer { namespace File
                // Methods ////////////////////////////////////////////////////////////\r
                virtual shared_ptr<MonsterGO> GetById(const string &Id) const;\r
 \r
-               virtual vector< shared_ptr<MonsterGO> > GetMonstersByLevelId(const string &LevelId) const;\r
+               virtual vector<string> GetMonsterIdsByLevelId(const string &LevelId) const;\r
 \r
                virtual bool IdExists(const string &Id) const;\r
 \r
index c1783e801ecba23e8fa3911e86932c3de3593e85..1235cd13f8f213eb7a95fa72cc3dada1c934ad03 100644 (file)
@@ -41,7 +41,7 @@ namespace GameServ { namespace DataLayer { namespace DataAccessObjects
                */\r
                virtual bool IdExists(const string &Id) const = 0;\r
 \r
-               virtual vector< shared_ptr<MonsterGO> > GetMonstersByLevelId(const string &LevelId) const = 0;\r
+               virtual vector<string> GetMonsterIdsByLevelId(const string &LevelId) const = 0;\r
 \r
        private:\r
                \r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/FightGL.h b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/FightGL.h
new file mode 100644 (file)
index 0000000..c4f9fc0
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef __GS__FIGHTGL_H__\r
+#define __GS__FIGHTGL_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r
+#include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
+using GameServ::GameLayer::GameObjects::PlayerGO;\r
+using GameServ::GameLayer::GameObjects::MonsterGO;\r
+\r
+#include <GameServ/DataLayer/IPlayerDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
+\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace GameLayer {\r
+\r
+class FightGL\r
+{\r
+public:\r
+       FightGL();\r
+       ~FightGL();\r
+       \r
+       unsigned int PlayerAttackMonster(shared_ptr<PlayerGO> spPlayer, shared_ptr<MonsterGO> spMonster);\r
+       unsigned int MonsterAttackPlayer(shared_ptr<MonsterGO> spMonster, shared_ptr<PlayerGO> spPlayer);\r
+\r
+       unsigned int PlayerAttackPlayer(shared_ptr<PlayerGO> spPlayerAttacker, shared_ptr<PlayerGO> spPlayerDefender);\r
+       \r
+\r
+private:\r
+\r
+       unsigned int CalculateAttack(unsigned int strength, unsigned int defense);\r
+       void Initialize();\r
+       shared_ptr<IPlayerDAO> mspPlayerDAO;\r
+};\r
+\r
+}}\r
+\r
+#endif
\ No newline at end of file
index 3e23295b451334321685b87891c6c2d7e15f09b6..f2dbc305cf2fc118fa039b18a3c5f2b1fffd8ef6 100644 (file)
@@ -40,10 +40,10 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                virtual ItemTypes::ItemType Type(void) const = 0;\r
 \r
                //! Property get - Modifiers\r
-               map<Modifiers::Modifier, Range> Modifiers(void) const;\r
+               map<Modifiers::Modifier, Range<int> > Modifiers(void) const;\r
 \r
                //! Property set - Modifiers\r
-               void Modifiers(const map<Modifiers::Modifier, Range> &modifiers);\r
+               void Modifiers(const map<Modifiers::Modifier, Range<int> > &modifiers);\r
 \r
                //! Use item on a game object\r
                virtual void Use(shared_ptr<GameObject> spObject);\r
@@ -58,11 +58,11 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                string mName;\r
                unsigned long int mPrice;\r
                int mUses;\r
-               map<Modifiers::Modifier, Range> mModifiers;\r
+               map<Modifiers::Modifier, Range<int> > mModifiers;\r
 \r
                //! Base class standard modifier applier. Simply adds the modified stat to the correct stat\r
-               virtual void ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r);\r
-               virtual void UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r);\r
+               virtual void ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r);\r
+               virtual void UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r);\r
        };\r
 }}}\r
 #endif
\ No newline at end of file
index 091a10e9ac0040fe499fae0878b5e441b9664666..0bf17073802bf0308573557bda574b483701533d 100644 (file)
@@ -44,40 +44,40 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                unsigned int Number(void) const;\r
 \r
                //! Property set - Strength Range\r
-               void StrengthRange(const Range &value);\r
+               void StrengthRange(const Range<int> &value);\r
                //! Property get - Strength Range\r
-               Range StrengthRange(void) const;\r
+               Range<int> StrengthRange(void) const;\r
 \r
 \r
                //! Property set - Defense Range\r
-               void DefenseRange(const Range &value);\r
+               void DefenseRange(const Range<int> &value);\r
                //! Property get - Defense Range\r
-               Range DefenseRange(void) const;\r
+               Range<int> DefenseRange(void) const;\r
 \r
                //! Property set - Gold Range\r
-               void GoldRange(const Range &value);\r
+               void GoldRange(const Range<int> &value);\r
                //! Property get - Gold Range\r
-               Range GoldRange(void) const;\r
+               Range<int> GoldRange(void) const;\r
 \r
                //! Property set - Experience Range\r
-               void ExperienceRange(const Range &value);\r
+               void ExperienceRange(const Range<int> &value);\r
                //! Property get - Experience Range\r
-               Range ExperienceRange(void) const;\r
+               Range<int> ExperienceRange(void) const;\r
 \r
 \r
                //! Property set - Health Range\r
-               void HealthRange(const Range &value);\r
+               void HealthRange(const Range<int> &value);\r
                //! Property get - Health Range\r
-               Range HealthRange(void) const;\r
+               Range<int> HealthRange(void) const;\r
 \r
                \r
        private:\r
                unsigned int mNumber;\r
-               Range mStrength;\r
-               Range mDefense;\r
-               Range mGold;\r
-               Range mExperience;\r
-               Range mHealth;\r
+               Range<int> mStrength;\r
+               Range<int> mDefense;\r
+               Range<int> mGold;\r
+               Range<int> mExperience;\r
+               Range<int> mHealth;\r
        };\r
 }}} // GameServ::GameLayer::GameObjects\r
 #endif
\ No newline at end of file
index 91ea8691f5003350fd9dbcff13fe4c2121e77a77..fe4b038e49e6c756dbd6d174733ee697048882b9 100644 (file)
@@ -17,6 +17,11 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
 \r
                virtual ~MasterGO();\r
 \r
+               //! Property set - Alive\r
+               void Alive(const bool &value);\r
+               //! Property get - Alive\r
+               bool Alive(void) const;\r
+\r
                //! Property set - Level\r
                void Level(const unsigned int &value);\r
                //! Property get - Level\r
@@ -77,6 +82,7 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                virtual ObjectTypes::ObjectType ObjectType(void) const;\r
 \r
        private:\r
+               bool mAlive;\r
                unsigned int mLevel;\r
                string mName;\r
                unsigned long int mGold;\r
index 22ebbf1e151a9f4a30d8a8082e35d7fe314e74ff..c2894eb1928c6d60c837364c9fb18b60607d30a2 100644 (file)
@@ -69,6 +69,11 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                //! Property set - Death Cry\r
                void DeathCry(const string &value);\r
 \r
+               //! Property get - Alive\r
+               bool Alive(void) const;\r
+               //! Property set - Alive\r
+               void Alive(const bool &value);\r
+\r
                bool operator==(const MonsterGO &right) const;\r
                bool operator!=(const MonsterGO &right) const;\r
 \r
@@ -89,6 +94,7 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                unsigned int mDefense;\r
                string mWeaponName;\r
                string mDeathCry;\r
+               bool mAlive;\r
        };\r
 }}} // GameServ::GameLayer::GameObjects\r
 #endif
\ No newline at end of file
index cd6db5cd1d9a6407f663846d723735da412ca249..4fb8003ab8aa89d351f666c32b076eefa870a023 100644 (file)
@@ -67,24 +67,24 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                void Bank(const unsigned long int &value);\r
 \r
                //! Property get - Health\r
-               int Health(void) const;\r
+               unsigned int Health(void) const;\r
                //! Property set - Health\r
-               void Health(const int &value);\r
+               void Health(const unsigned int &value);\r
 \r
                //! Property get - Max Health\r
-               int MaxHealth(void) const;\r
+               unsigned int MaxHealth(void) const;\r
                //! Property set - Max Health\r
-               void MaxHealth(const int &value);\r
+               void MaxHealth(const unsigned int &value);\r
 \r
                //! Property get - Strength\r
-               int Strength(void) const;\r
+               unsigned int Strength(void) const;\r
                //! Property set - Strength\r
-               void Strength(const int &value);\r
+               void Strength(const unsigned int &value);\r
 \r
                //! Property get - Defense\r
-               int Defense(void) const;\r
+               unsigned int Defense(void) const;\r
                //! Property set - Defense\r
-               void Defense(const int &value);\r
+               void Defense(const unsigned int &value);\r
 \r
                //! Property get - Forest Fights\r
                int ForestFights(void) const;\r
@@ -142,10 +142,10 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                unsigned long int mExperience;\r
                unsigned long int mGold;\r
                unsigned long int mBank;\r
-               int mHealth;\r
-               int mMaxHealth;\r
-               int mStrength;\r
-               int mDefense;\r
+               unsigned int mHealth;\r
+               unsigned int mMaxHealth;\r
+               unsigned int mStrength;\r
+               unsigned int mDefense;\r
                int mForestFights;\r
                int mPlayerFights;\r
                string mPassword;\r
index bf697f758314632c7427c2dda8cbd01ad46a1902..8e733bf36cacf7507bd60724f29698ae4ac580e4 100644 (file)
                <Filter\r
                        Name="GameLayer"\r
                        >\r
+                       <File\r
+                               RelativePath=".\src\GameLayer\FightGL.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath=".\include\GameServ\GameLayer\FightGL.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath=".\src\GameLayer\ForestGL.cpp"\r
                                >\r
index 3b654e0045a8aa5fa4fbf143c9c4f1a4857f277e..1065ca5e32484f18db5f94f34bb53f7d3eb1b97e 100644 (file)
@@ -89,7 +89,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
 {\r
        assert(!line.empty());\r
        shared_ptr<PotionGO> spPotion = shared_ptr<PotionGO>(new PotionGO());\r
-       map<Modifiers::Modifier, Range> modifiers;\r
+       map<Modifiers::Modifier, Range<int> > modifiers;\r
        boost::char_separator<char> sep("~", 0, boost::keep_empty_tokens);\r
        tokenizer tokens(line, sep);\r
        tokenizer::iterator tok_iter = tokens.begin();\r
@@ -141,7 +141,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        int high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::strength] = Range(high, low);\r
+       modifiers[Modifiers::strength] = Range<int>(high, low);\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
@@ -156,7 +156,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::defense] = Range(high, low);\r
+       modifiers[Modifiers::defense] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -172,7 +172,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::maxhealth] = Range(high, low);\r
+       modifiers[Modifiers::maxhealth] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -188,7 +188,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::health] = Range(high, low);\r
+       modifiers[Modifiers::health] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -204,7 +204,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::forestfights] = Range(high, low);\r
+       modifiers[Modifiers::forestfights] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -220,7 +220,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::playerfights] = Range(high, low);\r
+       modifiers[Modifiers::playerfights] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -236,7 +236,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::gold] = Range(high, low);\r
+       modifiers[Modifiers::gold] = Range<int>(high, low);\r
 \r
                tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -252,7 +252,7 @@ shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
        high = lexical_cast<int>((*tok_iter));\r
-       modifiers[Modifiers::bank] = Range(high, low);\r
+       modifiers[Modifiers::bank] = Range<int>(high, low);\r
 \r
        return spPotion;\r
 }\r
@@ -261,7 +261,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
 {\r
        assert(!line.empty());\r
        shared_ptr<ItemGO> spItem;\r
-       map<Modifiers::Modifier, Range> modifiers;\r
+       map<Modifiers::Modifier, Range<int> > modifiers;\r
        boost::char_separator<char> sep("~", 0, boost::keep_empty_tokens);\r
        tokenizer tokens(line, sep);\r
        tokenizer::iterator tok_iter = tokens.begin();\r
@@ -328,7 +328,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::strength] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::strength] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -338,7 +338,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::defense] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::defense] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -348,7 +348,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::maxhealth] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::maxhealth] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -358,7 +358,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::health] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::health] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -368,7 +368,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::forestfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::forestfights] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -378,7 +378,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::playerfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::playerfights] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -388,7 +388,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::gold] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::gold] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
@@ -398,7 +398,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
        }\r
        if ((*tok_iter) != "0")\r
        {\r
-               modifiers[Modifiers::bank] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+               modifiers[Modifiers::bank] = Range<int>(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        }\r
        spItem->Modifiers(modifiers);\r
 \r
index 8a3397af42ce62439d628039950d1ba73b068508..9fe1cd545e08952bbbf727f8619b4f96bad6a2af 100644 (file)
@@ -154,8 +154,14 @@ shared_ptr<LevelGO> FileLevelDAO::CreateLevelFromLine(const string &line) const
                        line % (*tok_iter)));\r
        }\r
 \r
-       spLevel->StrengthRange(Range(high, low));\r
+       spLevel->StrengthRange(Range<int>(high, low));\r
 \r
+       tok_iter++;\r
+       if (tok_iter == tokens.end())\r
+       {\r
+               throw DataLayerException(str(format("Corrupt level line %1%. Missing information") %\r
+                       line), __FILE__, __LINE__);\r
+       }\r
        try\r
        {\r
                low = lexical_cast<int>((*tok_iter));\r
@@ -180,8 +186,14 @@ shared_ptr<LevelGO> FileLevelDAO::CreateLevelFromLine(const string &line) const
                throw DataLayerException(str(format("Corrupt level line %1%. Invalid integer value %2%") % \r
                        line % (*tok_iter)));\r
        }\r
-       spLevel->DefenseRange(Range(high, low));\r
+       spLevel->DefenseRange(Range<int>(high, low));\r
 \r
+       tok_iter++;\r
+       if (tok_iter == tokens.end())\r
+       {\r
+               throw DataLayerException(str(format("Corrupt level line %1%. Missing information") %\r
+                       line), __FILE__, __LINE__);\r
+       }\r
        try\r
        {\r
                low = lexical_cast<int>((*tok_iter));\r
@@ -206,8 +218,14 @@ shared_ptr<LevelGO> FileLevelDAO::CreateLevelFromLine(const string &line) const
                throw DataLayerException(str(format("Corrupt level line %1%. Invalid integer value %2%") % \r
                        line % (*tok_iter)));\r
        }\r
-       spLevel->GoldRange(Range(high, low));\r
+       spLevel->GoldRange(Range<int>(high, low));\r
 \r
+       tok_iter++;\r
+       if (tok_iter == tokens.end())\r
+       {\r
+               throw DataLayerException(str(format("Corrupt level line %1%. Missing information") %\r
+                       line), __FILE__, __LINE__);\r
+       }\r
        try\r
        {\r
                low = lexical_cast<int>((*tok_iter));\r
@@ -232,8 +250,14 @@ shared_ptr<LevelGO> FileLevelDAO::CreateLevelFromLine(const string &line) const
                throw DataLayerException(str(format("Corrupt level line %1%. Invalid integer value %2%") % \r
                        line % (*tok_iter)));\r
        }\r
-       spLevel->ExperienceRange(Range(high, low));\r
+       spLevel->ExperienceRange(Range<int>(high, low));\r
 \r
+       tok_iter++;\r
+       if (tok_iter == tokens.end())\r
+       {\r
+               throw DataLayerException(str(format("Corrupt level line %1%. Missing information") %\r
+                       line), __FILE__, __LINE__);\r
+       }\r
        try\r
        {\r
                low = lexical_cast<int>((*tok_iter));\r
@@ -258,7 +282,7 @@ shared_ptr<LevelGO> FileLevelDAO::CreateLevelFromLine(const string &line) const
                throw DataLayerException(str(format("Corrupt level line %1%. Invalid integer value %2%") % \r
                        line % (*tok_iter)));\r
        }\r
-       spLevel->HealthRange(Range(high, low));\r
+       spLevel->HealthRange(Range<int>(high, low));\r
        \r
        return spLevel;\r
 }\r
index 10aed07ade8497f8825d7351e5402c9debf031f1..b612f817207583806cf49baa682dd932ba59ac69 100644 (file)
@@ -163,17 +163,27 @@ bool FileMonsterDAO::IdExists(const string &Id) const
        return (iter != spMonsterCache.end());\r
 }\r
 \r
-vector< shared_ptr<MonsterGO> > FileMonsterDAO::GetMonstersByLevelId(const string &LevelId) const\r
+vector<string> FileMonsterDAO::GetMonsterIdsByLevelId(const string &LevelId) const\r
 {\r
-       vector< shared_ptr<MonsterGO> > monsters;\r
-\r
-       map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
-       for (iter = spMonsterCache.begin(); iter != spMonsterCache.end(); iter++)\r
+       static map<string, vector<string> > MonsterLevelIndex;\r
+       map<string, vector<string> >::const_iterator leveliter;\r
+       leveliter = MonsterLevelIndex.find(LevelId);\r
+       if (leveliter == MonsterLevelIndex.end())\r
        {\r
-               if (iter->second->LevelId() == LevelId)\r
+               vector<string> monsterIds;\r
+               map<string, shared_ptr<MonsterGO> >::const_iterator iter;\r
+               for (iter = spMonsterCache.begin(); iter != spMonsterCache.end(); iter++)\r
                {\r
-                       monsters.push_back(shared_ptr<MonsterGO>(iter->second->Clone()));\r
+                       if (iter->second->LevelId() == LevelId)\r
+                       {\r
+                               monsterIds.push_back(iter->second->Id());\r
+                       }\r
                }\r
+               MonsterLevelIndex[LevelId] = monsterIds;\r
+               return monsterIds;\r
+       }\r
+       else\r
+       {\r
+               return MonsterLevelIndex[LevelId];\r
        }\r
-       return monsters;\r
 }\r
diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/FightGL.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/FightGL.cpp
new file mode 100644 (file)
index 0000000..8340ab3
--- /dev/null
@@ -0,0 +1,89 @@
+#include <GameServ/GameLayer/FightGL.h>\r
+using GameServ::GameLayer::FightGL;\r
+\r
+#include <GameServ/DataLayer/DataAccess.h>\r
+using GameServ::DataLayer::DataAccess;\r
+#include <GameServ/DataLayer/IDAOFactory.h>\r
+using GameServ::DataLayer::IDAOFactory;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::Range;\r
+using GameServ::Types::Modifiers;\r
+\r
+FightGL::FightGL()\r
+{\r
+       Initialize();\r
+}\r
+\r
+FightGL::~FightGL()\r
+{\r
+}\r
+\r
+void FightGL::Initialize()\r
+{\r
+       // TODO: Load from config\r
+       shared_ptr<IDAOFactory> factory = DataAccess::GetDataAccessFactory("File");\r
+       mspPlayerDAO = factory->GetPlayerDAO();\r
+}\r
+\r
+unsigned int FightGL::PlayerAttackMonster(shared_ptr<PlayerGO> spPlayer, shared_ptr<MonsterGO> spMonster)\r
+{\r
+       unsigned int attack = CalculateAttack(spPlayer->Strength(), spMonster->Defense());\r
+       if (attack >= spMonster->Health())\r
+       {\r
+               spMonster->Health(0);\r
+               spMonster->Alive(false);\r
+       }\r
+       else\r
+       {\r
+               spMonster->Health(spMonster->Health() - attack);\r
+       }\r
+       return attack;\r
+}\r
+\r
+unsigned int FightGL::MonsterAttackPlayer(shared_ptr<MonsterGO> spMonster, shared_ptr<PlayerGO> spPlayer)\r
+{\r
+       unsigned int attack = CalculateAttack(spMonster->Strength(), spPlayer->Defense());\r
+       if (attack >= spPlayer->Health())\r
+       {\r
+               spPlayer->Health(0);\r
+               spPlayer->Alive(false);\r
+       }\r
+       else\r
+       {\r
+               spPlayer->Health(spPlayer->Health() - attack);\r
+       }\r
+       return attack;\r
+}\r
+\r
+unsigned int FightGL::PlayerAttackPlayer(shared_ptr<PlayerGO> spPlayerAttacker, shared_ptr<PlayerGO> spPlayerDefender)\r
+{\r
+       unsigned int attack = CalculateAttack(spPlayerAttacker->Strength(), spPlayerDefender->Defense());\r
+       if (attack >= spPlayerDefender->Health())\r
+       {\r
+               spPlayerDefender->Health(0);\r
+               spPlayerDefender->Alive(false);\r
+       }\r
+       else\r
+       {\r
+               spPlayerDefender->Health(spPlayerDefender->Health() - attack);\r
+       }\r
+       return attack;\r
+}\r
+\r
+unsigned int FightGL::CalculateAttack(unsigned int strength, unsigned int defense)\r
+{\r
+       if (defense >= strength)\r
+       {\r
+               return 0;\r
+       }\r
+       Range<unsigned int> r(strength, strength / 2);\r
+       if (r.Random() <= defense)\r
+       {\r
+               return 0;\r
+       }\r
+       else\r
+       {\r
+               return r.LastRandom() - defense;\r
+       }\r
+}
\ No newline at end of file
index 2b9c07c3e26eb93bcc93eefec64e36acb76ee90a..5131cafb9933f0c8bbc786b9fb7a7e4d8b5fc8c5 100644 (file)
@@ -46,11 +46,11 @@ shared_ptr<MonsterGO> ForestGL::GetRandomMonsterForPlayer(shared_ptr<PlayerGO> s
 {\r
        assert (spPlayer != 0);\r
        shared_ptr<LevelGO> spLevel = mspLevelDAO->GetById(spPlayer->LevelId());\r
-       vector< shared_ptr<MonsterGO> > monsters = mspMonsterDAO->GetMonstersByLevelId(spLevel->Id());\r
-       if (monsters.size() > 0)\r
+       vector<string> monsterIds = mspMonsterDAO->GetMonsterIdsByLevelId(spLevel->Id());\r
+       if (monsterIds.size() > 0)\r
        {\r
-               Range r(monsters.size() - 1, 0);\r
-               shared_ptr<MonsterGO> spMonster = shared_ptr<MonsterGO>(monsters[r.Random()]->Clone());\r
+               Range<unsigned int> r(monsterIds.size() - 1, 0);\r
+               shared_ptr<MonsterGO> spMonster = mspMonsterDAO->GetById(monsterIds[r.Random()]);\r
                spMonster->MaxHealth(spLevel->HealthRange().Random());\r
                spMonster->Health(spMonster->MaxHealth());\r
                spMonster->Strength(spLevel->StrengthRange().Random());\r
index 6a8a697c02186f34b84d229f128a67244fa9734d..768a77b9c29797bb693fa1cdf5a8d51e9d2c63e6 100644 (file)
@@ -27,9 +27,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = Range(strength, strength);\r
-       mModifiers[Modifiers::defense] = Range(defense, defense);\r
-       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
+       mModifiers[Modifiers::strength] = Range<int>(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range<int>(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range<int>(maxhealth, maxhealth);\r
 }\r
 \r
 ArmorGO::~ArmorGO()\r
index 33472b034c9352d8fd2d6cd147a1a109bd2de459..a13c04cb583c52d130a9dfc89f24da934b38baaf 100644 (file)
@@ -66,7 +66,7 @@ void ItemGO::Uses(const int &value)
 \r
 void ItemGO::Use(shared_ptr<GameObject> spObject)\r
 {\r
-       map<Modifiers::Modifier, Range>::const_iterator iter;\r
+       map<Modifiers::Modifier, Range<int> >::const_iterator iter;\r
        for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++)\r
        {\r
                ApplyModifier(spObject, iter->first, iter->second);\r
@@ -75,14 +75,14 @@ void ItemGO::Use(shared_ptr<GameObject> spObject)
 \r
 void ItemGO::Undo(shared_ptr<GameObject> spObject)\r
 {\r
-       map<Modifiers::Modifier, Range>::const_iterator iter;\r
+       map<Modifiers::Modifier, Range<int> >::const_iterator iter;\r
        for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++)\r
        {\r
                UndoModifier(spObject, iter->first, iter->second);\r
        }\r
 }\r
 \r
-void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r
+void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r)\r
 {\r
        if (spObject->ObjectType() != ObjectTypes::Player)\r
        {\r
@@ -123,7 +123,7 @@ void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Mod
        }\r
 }\r
 \r
-void ItemGO::UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r
+void ItemGO::UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range<int> r)\r
 {\r
        if (spObject->ObjectType() != ObjectTypes::Player)\r
        {\r
@@ -164,12 +164,12 @@ void ItemGO::UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modi
        }\r
 }\r
 \r
-map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r
+map<Modifiers::Modifier, Range<int> > ItemGO::Modifiers(void) const\r
 {\r
        return mModifiers;\r
 }\r
 \r
-void ItemGO::Modifiers(const map<Modifiers::Modifier, Range> &modifiers)\r
+void ItemGO::Modifiers(const map<Modifiers::Modifier, Range<int> > &modifiers)\r
 {\r
        mModifiers.clear();\r
        mModifiers.insert(modifiers.begin(), modifiers.end());\r
index 2d5913082b5226ea66f3a6e29c3d79fc0718cf1f..64396dbbe1d22751e0d48fcde3885b33908c1677 100644 (file)
@@ -44,52 +44,52 @@ unsigned int LevelGO::Number(void) const
        return mNumber;\r
 }\r
 \r
-void LevelGO::StrengthRange(const Range &value)\r
+void LevelGO::StrengthRange(const Range<int> &value)\r
 {\r
        mStrength = value;\r
 }\r
 \r
-Range LevelGO::StrengthRange(void) const\r
+Range<int> LevelGO::StrengthRange(void) const\r
 {\r
        return mStrength;\r
 }\r
 \r
-void LevelGO::DefenseRange(const Range &value)\r
+void LevelGO::DefenseRange(const Range<int> &value)\r
 {\r
        mDefense = value;\r
 }\r
 \r
-Range LevelGO::DefenseRange(void) const\r
+Range<int> LevelGO::DefenseRange(void) const\r
 {\r
        return mDefense;\r
 }\r
 \r
-void LevelGO::GoldRange(const Range &value)\r
+void LevelGO::GoldRange(const Range<int> &value)\r
 {\r
        mGold = value;\r
 }\r
 \r
-Range LevelGO::GoldRange(void) const\r
+Range<int> LevelGO::GoldRange(void) const\r
 {\r
        return mGold;\r
 }\r
 \r
-void LevelGO::ExperienceRange(const Range &value)\r
+void LevelGO::ExperienceRange(const Range<int> &value)\r
 {\r
        mExperience = value;\r
 }\r
 \r
-Range LevelGO::ExperienceRange(void) const\r
+Range<int> LevelGO::ExperienceRange(void) const\r
 {\r
        return mExperience;\r
 }\r
 \r
-void LevelGO::HealthRange(const Range &value)\r
+void LevelGO::HealthRange(const Range<int> &value)\r
 {\r
        mHealth = value;\r
 }\r
 \r
-Range LevelGO::HealthRange(void) const\r
+Range<int> LevelGO::HealthRange(void) const\r
 {\r
        return mHealth;\r
 }\r
index 7b79f611309b9a63f4e54007034646286d9f5daf..3c35860eae32956094784085f603590bf4d8667b 100644 (file)
@@ -16,6 +16,7 @@ MasterGO::MasterGO() : GameObject()
        mGold = 0;\r
        mStrength = 0;\r
        mDefense = 0;\r
+       mAlive = true;\r
 }\r
 \r
 MasterGO::MasterGO(const string &Id) : GameObject(Id)\r
@@ -25,6 +26,7 @@ MasterGO::MasterGO(const string &Id) : GameObject(Id)
        mGold = 0;\r
        mStrength = 0;\r
        mDefense = 0;\r
+       mAlive = true;\r
 }\r
 \r
 MasterGO::~MasterGO()\r
@@ -140,6 +142,16 @@ string MasterGO::PartingWords(void) const
        return mPartingWords;\r
 }\r
 \r
+void MasterGO::Alive(const bool &value)\r
+{\r
+       mAlive = value;\r
+}\r
+\r
+bool MasterGO::Alive(void) const\r
+{\r
+       return mAlive;\r
+}\r
+\r
 bool MasterGO::operator==(const MasterGO &right) const\r
 {\r
        return mId == right.mId && mHealth == right.mHealth &&\r
index b9ca812fe6a7307e1f6592ca51c7abb66ba3ed61..fb14740de56962d14ba1bd225543a9e546052398 100644 (file)
@@ -24,6 +24,7 @@ void MonsterGO::Initialize(void)
        mStrength = 0;\r
        mDefense = 0;\r
        mExperience = 0;\r
+       mAlive = true;\r
 }\r
 \r
 MonsterGO::~MonsterGO()\r
@@ -138,6 +139,16 @@ string MonsterGO::DeathCry(void) const
        return mDeathCry;\r
 }\r
 \r
+void MonsterGO::Alive(const bool &value)\r
+{\r
+       mAlive = value;\r
+}\r
+\r
+bool MonsterGO::Alive(void) const\r
+{\r
+       return mAlive;\r
+}\r
+\r
 bool MonsterGO::operator==(const MonsterGO &right) const\r
 {\r
        return mId == right.mId && mfkLevelId == right.mfkLevelId && mHealth == right.mHealth &&\r
index b6120a7408207cc7f0f0bfa80d6aa82795c8f599..c6331329606c1509d1c72a0bd7dbf95e180dc091 100644 (file)
@@ -108,45 +108,45 @@ void PlayerGO::Bank(const unsigned long int &value)
        mBank = value;\r
 }\r
 \r
-int PlayerGO::Health(void) const\r
+unsigned int PlayerGO::Health(void) const\r
 {\r
        return mHealth;\r
 }\r
 \r
-void PlayerGO::Health(const int &value)\r
+void PlayerGO::Health(const unsigned int &value)\r
 {\r
        assert(value >= 0);\r
        mHealth = value;\r
 }\r
 \r
-int PlayerGO::MaxHealth(void) const\r
+unsigned int PlayerGO::MaxHealth(void) const\r
 {\r
        return mMaxHealth;\r
 }\r
 \r
-void PlayerGO::MaxHealth(const int &value)\r
+void PlayerGO::MaxHealth(const unsigned int &value)\r
 {\r
        assert (value >= 0);\r
        mMaxHealth = value;\r
 }\r
 \r
-int PlayerGO::Strength(void) const\r
+unsigned int PlayerGO::Strength(void) const\r
 {\r
        return mStrength;\r
 }\r
 \r
-void PlayerGO::Strength(const int &value)\r
+void PlayerGO::Strength(const unsigned int &value)\r
 {\r
        assert (value > 0);\r
        mStrength = value;\r
 }\r
 \r
-int PlayerGO::Defense(void) const\r
+unsigned int PlayerGO::Defense(void) const\r
 {\r
        return mDefense;\r
 }\r
 \r
-void PlayerGO::Defense(const int &value)\r
+void PlayerGO::Defense(const unsigned int &value)\r
 {\r
        assert(value > 0);\r
        mDefense = value;\r
index d0f416c982610c6623079799de2bad8697a14c35..3ce5789aff93fd191e76081d0280154c9b924d2c 100644 (file)
@@ -27,9 +27,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = Range(strength, strength);\r
-       mModifiers[Modifiers::defense] = Range(defense, defense);\r
-       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
+       mModifiers[Modifiers::strength] = Range<int>(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range<int>(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range<int>(maxhealth, maxhealth);\r
 }\r
 \r
 PotionGO::~PotionGO()\r
index eecb4daa23dcf2f6e7f1a8b882a54610b65e5b64..ec3ede657df2cd6c96899262907d436ec51f3fb8 100644 (file)
@@ -27,9 +27,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = Range(strength, strength);\r
-       mModifiers[Modifiers::defense] = Range(defense, defense);\r
-       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
+       mModifiers[Modifiers::strength] = Range<int>(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range<int>(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range<int>(maxhealth, maxhealth);\r
 }\r
 \r
 WeaponGO::~WeaponGO()\r
index 31baef059cee6d9704bc93ba570bcf23ec0ff4fd..fe97ad3e4d74206428350fa86090e47b29cc3e97 100644 (file)
@@ -67,17 +67,11 @@ int main()
                }\r
 \r
                ForestGL fgl;\r
-               shared_ptr<MonsterGO> spMonster = fgl.GetRandomMonsterForPlayer(spPlayer);\r
-               cout << MonsterInfo(spMonster) << endl;\r
-\r
-       /*      vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
-               vector< shared_ptr<ItemGO> >::const_iterator iter;\r
-               for (iter = spInventory.begin(); iter != spInventory.end(); iter++)\r
+               for (int x = 0; x < 10000; x++)\r
                {\r
-                       shared_ptr<ItemGO> spItem = (*iter);\r
-                       cout << str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
-               }*/\r
-               \r
+                       shared_ptr<MonsterGO> spMonster = fgl.GetRandomMonsterForPlayer(spPlayer);\r
+                       //cout << "\nMonster:\n" << MonsterInfo(spMonster) << endl;\r
+               }\r
 \r
                \r
                //map <int, int> frequencies;\r
@@ -100,8 +94,9 @@ int main()
                cout << e.VerboseError() << endl;\r
 \r
        }\r
+       cout << "Done. Type a key and hit enter to quit." << endl;\r
        string temp;\r
-       cin >> temp;\r
+       getline(cin, temp);\r
        return 0;\r
 }\r
 \r