]> jfr.im git - irc/gameservirc.git/commitdiff
Changed all modifiers to be ranges. A single number is now treated as a range of...
authorkainazzzo <redacted>
Thu, 17 Sep 2009 22:00:14 +0000 (22:00 +0000)
committerkainazzzo <redacted>
Thu, 17 Sep 2009 22:00:14 +0000 (22:00 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@526 bc333340-6410-0410-a689-9d09f3c113fa

gameserv-2.0/data/items/masteritems.dat
gameserv-2.0/libgameservcore/include/GameServ/Types.h
gameserv-2.0/libgameservcore/src/Types.cpp
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/File/FileItemDAO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/ItemGO.h
gameserv-2.0/libgameservgldl/src/DataLayer/File/FileItemDAO.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/PotionGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/WeaponGO.cpp
gameserv-2.0/testdriver/main.cpp

index ccdb4018827c10916986dfaf13fbd9048e751470..8a325246397b048fc850cee73dc1dda07ef0a784 100644 (file)
@@ -36,12 +36,13 @@ Armor~3013~Hades' Cloak~40000000~-1~0~400~0~0
 Armor~3014~Dragon Scales~100000000~-1~0~600~0~0\r
 Armor~3015~Adamantium~400000000~-1~0~1000~0~0\r
 # Potions 6001-9000\r
-# type~ID~name~price~uses~strengthmax~defensemax~maxhpmod~hpmod~forestfightsmod~playerfightsmod~goldmod~bankbalmod\r
-Potion~6001~Very Weak Healing Potion~600~1~0~0~0~30~0~0~0~0\r
-Potion~6002~Weak Healing Potion~1200~1~0~0~0~60~0~0~0~0\r
-Potion~6003~Healing Potion~5400~1~0~0~0~250~0~0~0~0\r
-Potion~6004~Strong Healing Potion~50000~1~0~0~0~1000~0~0~0~0\r
-Potion~6005~Defense Potion~25000~1~0~2~0~0~0~0~0~0\r
-Potion~6006~Strength Potion~25000~1~2~0~0~0~0~0~0~0\r
-Potion~6007~Max Health Potion~25000~1~0~0~4~0~0~0~0~0\r
+#type~id~name~price~uses~strength low~strength high~defense l~defense h~maxhp range~hp range~forest fights range\\r
+#~player fights range~gold range~bank range\r
+Potion~6001~Very Weak Healing Potion~600~1~0~0~0~0~0~0~10~40~0~0~0~0~0~0~0~0\r
+Potion~6002~Weak Healing Potion~1200~1~0~0~0~0~0~0~20~60~0~0~0~0~0~0~0~0\r
+Potion~6003~Healing Potion~5400~1~0~0~0~0~0~0~100~250~0~0~0~0~0~0~0~0\r
+Potion~6004~Strong Healing Potion~50000~1~0~0~0~0~0~0~500~1000~0~0~0~0~0~0~0~0\r
+Potion~6005~Defense Potion~25000~1~0~0~1~2~0~0~0~0~0~0~0~0~0~0~0~0\r
+Potion~6006~Strength Potion~25000~1~1~2~0~0~0~0~0~0~0~0~0~0~0~0~0~0\r
+Potion~6007~Health Potion~25000~1~0~0~0~0~2~6~0~0~0~0~0~0~0~0~0~0\r
 # Miscellaneous 9001-12000
\ No newline at end of file
index ef6229efef4de12d30c665e1cd9a4a4079e5b596..72611a7623e34675cd95ade74a16981ca3ab00e7 100644 (file)
@@ -6,16 +6,6 @@ using std::string;
 #include <GameServ/GameServException.h>\r
 using GameServ::Exceptions::GameServException;\r
 \r
-\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
-\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
 namespace GameServ \r
 {              \r
        namespace Types\r
@@ -87,6 +77,7 @@ namespace GameServ
                class Range\r
                {\r
                public:\r
+                       Range();\r
                        Range(const unsigned int &high, const unsigned int &low);\r
                        ~Range();\r
 \r
@@ -108,7 +99,6 @@ namespace GameServ
                private:\r
                        unsigned int mHigh;\r
                        unsigned int mLow;\r
-                       base_generator_type generator;\r
                };\r
        } \r
 }\r
index 0c23771a3bef49ebd1bed61288ed055ef4c9f64b..f61558117c2d16b145c294525eeebf03071e6461 100644 (file)
@@ -31,6 +31,9 @@ namespace std {
 }\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
@@ -110,11 +113,16 @@ Modifiers::Modifier Modifiers::Parse(const string &modifier)
        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
+}\r
+\r
 Range::Range(const unsigned int &high, const unsigned int &low)\r
 {\r
        mHigh = high;\r
        mLow = low;\r
-       generator.seed(static_cast<unsigned int>(std::time(0)));\r
 }\r
 \r
 Range::~Range()\r
@@ -145,6 +153,7 @@ unsigned int Range::Low(void) const
 \r
 unsigned int Range::Random()\r
 {\r
+       static base_generator_type generator(static_cast<unsigned int>(std::time(0)));\r
        boost::uniform_int<> uni_dist(mHigh, mLow);\r
        boost::variate_generator<base_generator_type&, boost::uniform_int<> > uni(generator, uni_dist);\r
        return static_cast<unsigned int>(uni());\r
index cf0e532c464ccd5da07cf8bccd152669c8f59c72..f7e3fcc7c85510470a4be6fb6daf5c3ec60fd293 100644 (file)
@@ -50,6 +50,7 @@ namespace GameServ {  namespace DataLayer { namespace File
 \r
                //! Creates the ItemGO found at iterator position\r
                shared_ptr<ItemGO> CreateItemFromLine(const string &line) const;\r
+               shared_ptr<ItemGO> CreatePotionFromLine(const string &line) const;\r
 \r
                //! Get the Item database file path\r
                string GetItemFilePath(void) const;\r
index a147a8992a08afc0336e77aa85408552894f845d..534eaf0610d0530ca7350154484051520d07437f 100644 (file)
@@ -5,6 +5,7 @@ using GameServ::GameLayer::GameObjects::GameObject;
 #include <GameServ/Types.h>\r
 using GameServ::Types::ItemTypes;\r
 using GameServ::Types::Modifiers;\r
+using GameServ::Types::Range;\r
 \r
 #include <string>\r
 using std::string;\r
@@ -41,10 +42,10 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                void Type(const ItemTypes::ItemType &value);\r
 \r
                //! Property get - Modifiers\r
-               map<Modifiers::Modifier, int> Modifiers(void) const;\r
+               map<Modifiers::Modifier, Range> Modifiers(void) const;\r
 \r
                //! Property set - Modifiers\r
-               void Modifiers(const map<Modifiers::Modifier, int> &modifiers);\r
+               void Modifiers(const map<Modifiers::Modifier, Range> &modifiers);\r
 \r
                //! Use item on a player.\r
                void Use(shared_ptr<GameObject> spPlayer);\r
@@ -56,10 +57,10 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                unsigned long int mPrice;\r
                int mUses;\r
                ItemTypes::ItemType mType;\r
-               map<Modifiers::Modifier, int> mModifiers;\r
+               map<Modifiers::Modifier, Range> 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, const int &num);\r
+               virtual void ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r);\r
        };\r
 }}}\r
 #endif
\ No newline at end of file
index ec2a0216be3f2915d99c4906cc9f6b9221a748b2..60d5802533a5bd7f1c9808cd4a526d12f92c876a 100644 (file)
@@ -85,12 +85,18 @@ shared_ptr<ItemGO> FileItemDAO::GetById(const string &Id) const
                return shared_ptr<ItemGO>();\r
        }\r
 }\r
+shared_ptr<ItemGO> FileItemDAO::CreatePotionFromLine(const string &line) const\r
+{\r
+       shared_ptr<PotionGO> spPotion = shared_ptr<PotionGO>(new PotionGO());\r
+\r
+       return spPotion;\r
+}\r
 \r
 shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const\r
 {\r
        assert(!line.empty());\r
        shared_ptr<ItemGO> spItem;\r
-       map<Modifiers::Modifier, int> modifiers;\r
+       map<Modifiers::Modifier, Range> 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
@@ -115,7 +121,7 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
                spItem = shared_ptr<ArmorGO>(new ArmorGO());\r
                break;\r
        case ItemTypes::Potion:\r
-               spItem = shared_ptr<PotionGO>(new PotionGO());\r
+               return CreatePotionFromLine(line);\r
                break;\r
        default:\r
                throw DataLayerException(str(format("Unknown Item type: %1%") % type), __FILE__, __LINE__);\r
@@ -155,52 +161,52 @@ shared_ptr<ItemGO> FileItemDAO::CreateItemFromLine(const string &line) const
                throw DataLayerException(str(format("Corrupt %1% file. Missing information on line %2%") %\r
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
-       modifiers[Modifiers::strength] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::strength] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                throw DataLayerException(str(format("Corrupt %1% file. Missing information on line %2%") %\r
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
-       modifiers[Modifiers::defense] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::defense] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                throw DataLayerException(str(format("Corrupt %1% file. Missing information on line %2%") %\r
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
-       modifiers[Modifiers::maxhealth] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::maxhealth] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                throw DataLayerException(str(format("Corrupt %1% file. Missing information on line %2%") %\r
                        mFilename %  line), __FILE__, __LINE__);\r
        }\r
-       modifiers[Modifiers::health] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::health] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                return spItem;\r
        }\r
-       modifiers[Modifiers::forestfights] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::forestfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                return spItem;\r
        }\r
-       modifiers[Modifiers::playerfights] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::playerfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                return spItem;\r
        }\r
-       modifiers[Modifiers::gold] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::gold] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        tok_iter++;\r
        if (tok_iter == tokens.end())\r
        {\r
                return spItem;\r
        }\r
-       modifiers[Modifiers::bank] = lexical_cast<int>((*tok_iter));\r
+       modifiers[Modifiers::bank] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
        spItem->Modifiers(modifiers);\r
 \r
        return spItem;\r
index 75905ab027f83d25e6276a2dec02bf0ad9a7f526..7c29dd7ecda8623291916948672f72ab790a7e4a 100644 (file)
@@ -28,9 +28,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = strength;\r
-       mModifiers[Modifiers::defense] = defense;\r
-       mModifiers[Modifiers::maxhealth] = maxhealth;\r
+       mModifiers[Modifiers::strength] = Range(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
        mType = ItemTypes::Armor;\r
 }\r
 \r
index 8cb7be6d8f7d396bff23fa5ce96505a7c766b626..6c8246e8407822270dc7033c8513fdf07e2474c0 100644 (file)
@@ -6,6 +6,7 @@ using GameServ::GameLayer::GameObjects::PlayerGO;
 #include <GameServ/Types.h>\r
 using GameServ::Types::ItemTypes;\r
 using GameServ::Types::Modifiers;\r
+using GameServ::Types::Range;\r
 \r
 #include <string>\r
 using std::string;\r
@@ -61,41 +62,41 @@ void ItemGO::Uses(const int &value)
 \r
 void ItemGO::Use(shared_ptr<GameObject> spPlayer)\r
 {\r
-       map<Modifiers::Modifier, int>::const_iterator iter;\r
+       map<Modifiers::Modifier, Range>::const_iterator iter;\r
        for (iter = mModifiers.begin(); iter != mModifiers.end(); iter++)\r
        {\r
                ApplyModifier(spPlayer, iter->first, iter->second);\r
        }\r
 }\r
 \r
-void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, const int &num)\r
+void ItemGO::ApplyModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r
 {\r
        shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r
        switch (modifier)\r
        {\r
        case Modifiers::strength:\r
-               spPlayer->Strength(spPlayer->Strength() + num);\r
+               spPlayer->Strength(spPlayer->Strength() + r.Random());\r
                break;\r
        case Modifiers::defense:\r
-               spPlayer->Defense(spPlayer->Defense() + num);\r
+               spPlayer->Defense(spPlayer->Defense() + r.Random());\r
                break;\r
        case Modifiers::health:\r
-               spPlayer->Health(spPlayer->Health() + num);\r
+               spPlayer->Health(spPlayer->Health() + r.Random());\r
                break;\r
        case Modifiers::maxhealth:\r
-               spPlayer->MaxHealth(spPlayer->MaxHealth() + num);\r
+               spPlayer->MaxHealth(spPlayer->MaxHealth() + r.Random());\r
                break;\r
        case Modifiers::gold:\r
-               spPlayer->Gold(spPlayer->Gold() + num);\r
+               spPlayer->Gold(spPlayer->Gold() + r.Random());\r
                break;\r
        case Modifiers::bank:\r
-               spPlayer->Bank(spPlayer->Bank() + num);\r
+               spPlayer->Bank(spPlayer->Bank() + r.Random());\r
                break;\r
        case Modifiers::forestfights:\r
-               spPlayer->ForestFights(spPlayer->ForestFights() + num);\r
+               spPlayer->ForestFights(spPlayer->ForestFights() + r.Random());\r
                break;\r
        case Modifiers::playerfights:\r
-               spPlayer->PlayerFights(spPlayer->PlayerFights() + num);\r
+               spPlayer->PlayerFights(spPlayer->PlayerFights() + r.Random());\r
                break;\r
        default:\r
                throw GameServException(str(format("Invalid modifier %1%") % modifier), __FILE__, __LINE__);\r
@@ -112,12 +113,12 @@ void ItemGO::Type(const ItemTypes::ItemType &value)
        mType = value;\r
 }\r
 \r
-map<Modifiers::Modifier, int> ItemGO::Modifiers(void) const\r
+map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r
 {\r
        return mModifiers;\r
 }\r
 \r
-void ItemGO::Modifiers(const map<Modifiers::Modifier, int> &modifiers)\r
+void ItemGO::Modifiers(const map<Modifiers::Modifier, Range> &modifiers)\r
 {\r
        mModifiers.clear();\r
        mModifiers.insert(modifiers.begin(), modifiers.end());\r
index e03c382c4023626d2a1205de57dd55adb08cb61b..1a5c4123774b7477a568514c65fd25d5424b943a 100644 (file)
@@ -28,9 +28,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = strength;\r
-       mModifiers[Modifiers::defense] = defense;\r
-       mModifiers[Modifiers::maxhealth] = maxhealth;\r
+       mModifiers[Modifiers::strength] = Range(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
        mType = ItemTypes::Potion;\r
 }\r
 \r
index 1f6c1691504fabe49ff044092e56f887a295d56b..453b449bb4b76e2dfba4fb412ac91af62f6a105b 100644 (file)
@@ -28,9 +28,9 @@ ItemGO()
        mPrice = price;\r
        mUses = uses;\r
        mModifiers.clear();\r
-       mModifiers[Modifiers::strength] = strength;\r
-       mModifiers[Modifiers::defense] = defense;\r
-       mModifiers[Modifiers::maxhealth] = maxhealth;\r
+       mModifiers[Modifiers::strength] = Range(strength, strength);\r
+       mModifiers[Modifiers::defense] = Range(defense, defense);\r
+       mModifiers[Modifiers::maxhealth] = Range(maxhealth, maxhealth);\r
        mType = ItemTypes::Weapon;\r
 }\r
 \r
index 11a31f2f7c59d564cb7070781758ff63a620d1e2..3f8bb933c0d4a8092a2fbce1ca9eb45959f0cf41 100644 (file)
@@ -21,11 +21,20 @@ int main()
                spPlayer->Name("Kainazzzo");\r
                pgl.Insert(spPlayer);*/\r
 \r
-               Range testrange(20, 100);\r
-\r
-               for (int x = 0; x < 100; x++)\r
+               \r
+               map <unsigned int, unsigned int> frequencies;\r
+               int x;\r
+               for (x = 0; x < 1000000; x++)\r
+               {\r
+                       Range testrange(1, 100);\r
+                       unsigned int randnum = testrange.Random();\r
+                       frequencies[randnum]++;\r
+               }\r
+               map<unsigned int, unsigned int>::const_iterator iter;\r
+               for (iter = frequencies.begin(); iter != frequencies.end(); iter++)\r
                {\r
-                       cout << testrange.Random() << endl;\r
+                       cout << iter->first << ": ";\r
+                       cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;\r
                }\r
        }\r
        catch (GameServException &e)\r