]> jfr.im git - irc/gameservirc.git/commitdiff
Scrapping work on the File DAOs and going straight for MySQL for now. The file based...
authorkainazzzo <redacted>
Wed, 30 Sep 2009 14:10:26 +0000 (14:10 +0000)
committerkainazzzo <redacted>
Wed, 30 Sep 2009 14:10:26 +0000 (14:10 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@541 bc333340-6410-0410-a689-9d09f3c113fa

25 files changed:
gameserv-2.0/libgameservcore/include/GameServ/Types.h
gameserv-2.0/libgameservcore/libgameservcore.vcproj
gameserv-2.0/libgameservcore/src/Types.cpp
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLDAOFactory.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLId.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLItemDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLLevelDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMasterDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMonsterDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLPlayerDAO.h [new file with mode: 0644]
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/ItemGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/Helpers/InventoryManager.h
gameserv-2.0/libgameservgldl/libgameservgldl.vcproj
gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLDAOFactory.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLId.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLItemDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLLevelDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMasterDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMonsterDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLPlayerDAO.cpp [new file with mode: 0644]
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/ItemGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/Helpers/InventoryManager.cpp
gameserv-2.0/testdriver/main.cpp
gameserv-2.0/testdriver/testdriver.vcproj

index de0fab22f7bec9ef24843919bc967db1ce77a6cd..821d066197c4d304edefd5031483cfebc9bf8efd 100644 (file)
@@ -105,7 +105,7 @@ namespace GameServ
                        //! Logical Modifer enumerator\r
                        enum Modifier\r
                        {\r
-                               strength, defense, maxhealth, health, forestfights, playerfights, gold, bank\r
+                               strength, defense, maxhealth, health, forestfights, playerfights, gold, bank, experience\r
                        };\r
 \r
                        //! Get the name of a modifier\r
@@ -135,6 +135,7 @@ namespace GameServ
                        {\r
                                mHigh = high;\r
                                mLow = low;\r
+                               mLastRandom = T(0);\r
                        }\r
 \r
                        ~Range()\r
index 99209b0772ace6c8f9e0c85389eb51449030cdf1..596a8b769968f4c1b59b749aabf2fa161702ed08 100644 (file)
@@ -44,7 +44,7 @@
                                PreprocessorDefinitions="WIN32;_DEBUG;_LIB;TIXML_USE_STL;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
-                               RuntimeLibrary="1"\r
+                               RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Detect64BitPortabilityProblems="false"\r
                                DebugInformationFormat="4"\r
index 7fd6fbe217499e1da269c7e34e5983af49a02ca4..bf1fe96b5fac4d5027c976f47329e71ed7db1958 100644 (file)
@@ -98,7 +98,7 @@ ObjectTypes::ObjectType ObjectTypes::Parse(const string &objecttype)
 const Modifiers::modifierinfo Modifiers::mModifierInfoTable[] =\r
 {\r
        { strength, "Strength"}, { defense, "Defense" }, { maxhealth, "MaxHealth" }, { health, "Health" }, { forestfights, "ForestFights" },\r
-       { playerfights, "PlayerFights" }, { gold, "Gold" }, { bank, "Bank" }\r
+       { playerfights, "PlayerFights" }, { gold, "Gold" }, { bank, "Bank" }, { experience, "Experience" }\r
 };\r
 \r
 string Modifiers::GetName(Modifiers::Modifier modifier)\r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLDAOFactory.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLDAOFactory.h
new file mode 100644 (file)
index 0000000..575f466
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef __GS__MYSQLDAOFACTORY_H__\r
+#define __GS__MYSQLDAOFACTORY_H__\r
+\r
+#include <GameServ/DataLayer/IDAOFactory.h>\r
+using GameServ::DataLayer::IDAOFactory;\r
+\r
+#include <GameServ/DataLayer/IPlayerDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
+#include <GameServ/DataLayer/IItemDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IItemDAO;\r
+#include <GameServ/DataLayer/IMonsterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMonsterDAO;\r
+#include <GameServ/DataLayer/IMasterDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IMasterDAO;\r
+#include <GameServ/DataLayer/ILevelDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::ILevelDAO;\r
+\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+namespace GameServ { namespace DataLayer { namespace MySQL\r
+{\r
+       //! Concrete MySQL Data Factory\r
+       class MySQLDAOFactory : public IDAOFactory\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               //! Default ctor\r
+               MySQLDAOFactory(void);\r
+               //! Virtual dtor to insure proper desctruction\r
+               virtual ~MySQLDAOFactory(void);\r
+\r
+               // Overrides //////////////////////////////////////////////////////////\r
+               \r
+               virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const;\r
+               virtual shared_ptr<IItemDAO> GetItemDAO(void) const;\r
+               virtual shared_ptr<IMonsterDAO> GetMonsterDAO(void) const;\r
+               virtual shared_ptr<IMasterDAO> GetMasterDAO(void) const;\r
+               virtual shared_ptr<ILevelDAO> GetLevelDAO(void) const;\r
+\r
+       private:\r
+\r
+\r
+       };\r
+\r
+}}} // GameServ::DataLayer::MySQL\r
+\r
+#endif // __GS__MYSQLDAOFACTORY_H__\r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLId.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLId.h
new file mode 100644 (file)
index 0000000..acc2f0b
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef __GS__MYSQLID_H__\r
+#define __GS__MYSQLID_H__\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ItemTypes;\r
+\r
+namespace GameServ { namespace DataLayer { namespace MySQL {\r
+       class MySQLId\r
+       {\r
+       public:\r
+               static string CreatePlayerId(const string &Name);\r
+               static string GetNameFromPlayerId(const string &Id);\r
+\r
+               static string CreateItemId(const string &Number);\r
+               static unsigned int GetItemNumberFromId(const string &Id);\r
+\r
+               static string CreateMonsterId(const string &LevelId, const string &Name);\r
+               static string CreateLevelId(const unsigned int &Number);\r
+               static unsigned int GetLevelNumberFromId(const string &Id);\r
+               static string CreateMasterId(const unsigned int &LevelNumber, const string &Name);\r
+\r
+       private:\r
+               MySQLId();\r
+               ~MySQLId();\r
+       };\r
+}}}\r
+#endif\r
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLItemDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLItemDAO.h
new file mode 100644 (file)
index 0000000..f2344dd
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef __GS__MYSQLITEMDAO_H__\r
+#define __GS__MYSQLITEMDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
+using GameServ::GameLayer::GameObjects::ItemGO;\r
+#include <GameServ/DataLayer/IItemDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IItemDAO;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <mysql++.h>\r
+#include <ssqls.h>\r
+\r
+namespace GameServ {  namespace DataLayer { namespace MySQL\r
+{\r
+       //! MySQL implementation of IItemDAO interface\r
+       /*!\r
+               If you're using an MySQL datasource, you will be using this\r
+               DAO to access Items.\r
+       */\r
+                       sql_create_22(item, 1, 0,\r
+               mysqlpp::sql_varchar, id,\r
+               mysqlpp::sql_varchar, name,\r
+               mysqlpp::sql_int, strengthhigh,\r
+               mysqlpp::sql_int, strengthlow,\r
+               mysqlpp::sql_int, defensehigh,\r
+               mysqlpp::sql_int, defenselow,\r
+               mysqlpp::sql_int, healthhigh,\r
+               mysqlpp::sql_int, healthlow,\r
+               mysqlpp::sql_int, goldhigh,\r
+               mysqlpp::sql_int, goldlow,\r
+               mysqlpp::sql_int, experiencehigh,\r
+               mysqlpp::sql_int, experiencelow,\r
+               mysqlpp::sql_int, startinguses,\r
+               mysqlpp::sql_varchar, type,\r
+               mysqlpp::sql_int, bankhigh,\r
+               mysqlpp::sql_int, banklow,\r
+               mysqlpp::sql_int, forestfightshigh,\r
+               mysqlpp::sql_int, forestfightslow,\r
+               mysqlpp::sql_int, playerfightshigh,\r
+               mysqlpp::sql_int, playerfightslow,\r
+               mysqlpp::sql_int, maxhealthhigh,\r
+               mysqlpp::sql_int, maxhealthlow);\r
+\r
+       class MySQLItemDAO : public IItemDAO\r
+       {\r
+       public:\r
+               // Ctors, Dtors ///////////////////////////////////////////////////////\r
+               MySQLItemDAO(void);\r
+               virtual ~MySQLItemDAO();\r
+\r
+               // Methods ////////////////////////////////////////////////////////////\r
+               virtual shared_ptr<ItemGO> GetById(const string &Id) const;\r
+\r
+               virtual bool IdExists(const string &Id) const;\r
+\r
+       private:\r
+               //! Data mysql\r
+               string mTableName;\r
+\r
+               // Helper Methods /////////////////////////////////////////////////////\r
+\r
+               //! Creates the ItemGO found at iterator position\r
+               shared_ptr<ItemGO> CreateItemFromItemSSQLS(const item &i) const;\r
+\r
+               //! Get the Item database mysql path\r
+               string GetItemTableName(void) const;\r
+\r
+               void Initialize(const string &tablename);\r
+       };\r
+} } } // GameServ.DataLayer.DataAccessObjects.MySQL\r
+\r
+#endif // __GS__MYSQLITEMDAO_H__
\ No newline at end of file
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLLevelDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLLevelDAO.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMasterDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMasterDAO.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMonsterDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLMonsterDAO.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLPlayerDAO.h b/gameserv-2.0/libgameservgldl/include/GameServ/DataLayer/MySQL/MySQLPlayerDAO.h
new file mode 100644 (file)
index 0000000..e69de29
index f2dbc305cf2fc118fa039b18a3c5f2b1fffd8ef6..646b138b176041d25fca6eb6b7e2681562379a3b 100644 (file)
@@ -21,6 +21,12 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                ItemGO();\r
                virtual ~ItemGO();\r
 \r
+               //! Property get - Number\r
+               unsigned int Number(void) const;\r
+\r
+               //! Property set - Number\r
+               void Number(const unsigned int &value);\r
+\r
                //! Property get - Name\r
                string Name(void) const;\r
                //! Property set - Name\r
@@ -55,6 +61,7 @@ namespace GameServ { namespace GameLayer { namespace GameObjects {
                virtual ObjectTypes::ObjectType ObjectType(void) const;\r
 \r
        protected:\r
+               unsigned int mNumber;\r
                string mName;\r
                unsigned long int mPrice;\r
                int mUses;\r
index c880fba01439dad9850dcea803c7ec94b06a06dc..32683478aa8902c2c4a23551734e9a02e157a169 100644 (file)
@@ -33,6 +33,7 @@ public:
        void AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
        void RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
        ItemList GetInventory(shared_ptr<PlayerGO> spPlayer) const;     \r
+       bool PlayerHasInventory(shared_ptr<PlayerGO> spPlayer) const;\r
 \r
 protected:\r
        InventoryManager();\r
index 8e733bf36cacf7507bd60724f29698ae4ac580e4..96510d8615eae709a2aacbb9133b1da9f7d9cb74 100644 (file)
@@ -44,7 +44,7 @@
                                PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS ;_SCL_SECURE_NO_WARNINGS"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
-                               RuntimeLibrary="1"\r
+                               RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Detect64BitPortabilityProblems="false"\r
                                DebugInformationFormat="4"\r
@@ -60,6 +60,7 @@
                        />\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
+                               AdditionalDependencies="libmysql.lib wsock32.lib mysqlpp_d.lib"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                                        >\r
                                </File>\r
                        </Filter>\r
+                       <Filter\r
+                               Name="MySQL"\r
+                               >\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLDAOFactory.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLDAOFactory.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLId.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLId.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLItemDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLItemDAO.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLLevelDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLLevelDAO.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLMasterDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLMasterDAO.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLMonsterDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLMonsterDAO.h"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\src\DataLayer\MySQL\MySQLPlayerDAO.cpp"\r
+                                       >\r
+                               </File>\r
+                               <File\r
+                                       RelativePath=".\include\GameServ\DataLayer\MySQL\MySQLPlayerDAO.h"\r
+                                       >\r
+                               </File>\r
+                       </Filter>\r
                </Filter>\r
                <Filter\r
                        Name="GameLayer"\r
index 2bbb255508b32b3d1f32dff7087b9415e6a40af3..21ea22c62b288f8d1997ff29c6b320654c381c0e 100644 (file)
@@ -61,6 +61,7 @@ FilePlayerDAO::FilePlayerDAO(const string &filename)
 \r
 FilePlayerDAO::~FilePlayerDAO()\r
 {\r
+       WritePlayerCache();\r
 }\r
 \r
 void FilePlayerDAO::Initialize(const string &filename)\r
@@ -101,7 +102,7 @@ void FilePlayerDAO::LoadPlayerCache(void)
                        spPlayerCache[id] = spPlayer;\r
                        // Load all the items into the player's inventory\r
                        shared_ptr<InventoryManager> inventory = InventoryManager::Instance();\r
-                       if (inventory->GetInventory(spPlayer).size() == 0)\r
+                       if (!inventory->PlayerHasInventory(spPlayer))\r
                        {\r
                                LoadInventoryFromLine(spPlayer, line);\r
                        }\r
@@ -408,7 +409,6 @@ void FilePlayerDAO::Update(shared_ptr<PlayerGO> spPlayer)
                string id = spPlayer->Id();\r
                to_lower(id);\r
                spPlayerCache[id] = spPlayer;\r
-               WritePlayerCache();\r
        }\r
        else\r
        {\r
@@ -436,7 +436,6 @@ void FilePlayerDAO::Insert(shared_ptr<PlayerGO> spPlayer)
                }\r
                outfile << CreateLineFromPlayer(spPlayer) << endl;\r
                outfile.close();*/\r
-               WritePlayerCache();\r
        }\r
        else\r
        {\r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLDAOFactory.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLDAOFactory.cpp
new file mode 100644 (file)
index 0000000..68863ee
--- /dev/null
@@ -0,0 +1,55 @@
+#define MYSQLPP_SSQLS_NO_STATICS\r
+#include <GameServ/DataLayer/MySQL/MySQLDAOFactory.h>\r
+#include <GameServ/DataLayer/MySQL/MySQLPlayerDAO.h>\r
+#include <GameServ/DataLayer/MySQL/MySQLItemDAO.h>\r
+#include <GameServ/DataLayer/MySQL/MySQLMonsterDAO.h>\r
+#include <GameServ/DataLayer/MySQL/MySQLMasterDAO.h>\r
+#include <GameServ/DataLayer/MySQL/MySQLLevelDAO.h>\r
+\r
+using GameServ::DataLayer::MySQL::MySQLDAOFactory;\r
+//using GameServ::DataLayer::MySQL::MySQLPlayerDAO;\r
+using GameServ::DataLayer::MySQL::MySQLItemDAO;\r
+//using GameServ::DataLayer::MySQL::MySQLMonsterDAO;\r
+//using GameServ::DataLayer::MySQL::MySQLMasterDAO;\r
+//using GameServ::DataLayer::MySQL::MySQLLevelDAO;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+MySQLDAOFactory::MySQLDAOFactory(void)\r
+{\r
+}\r
+\r
+MySQLDAOFactory::~MySQLDAOFactory(void)\r
+{\r
+}\r
+\r
+shared_ptr<IPlayerDAO> MySQLDAOFactory::GetPlayerDAO(void) const\r
+{\r
+       //return shared_ptr<IPlayerDAO>(new MySQLPlayerDAO());\r
+       throw GameServException("Not implemented", __FILE__, __LINE__);\r
+}\r
+\r
+shared_ptr<IItemDAO> MySQLDAOFactory::GetItemDAO(void) const\r
+{\r
+       return shared_ptr<IItemDAO>(new MySQLItemDAO());\r
+}\r
+\r
+shared_ptr<IMonsterDAO> MySQLDAOFactory::GetMonsterDAO(void) const\r
+{\r
+       //return shared_ptr<IMonsterDAO>(new MySQLMonsterDAO());\r
+       throw GameServException("Not implemented", __FILE__, __LINE__);\r
+}\r
+\r
+shared_ptr<IMasterDAO> MySQLDAOFactory::GetMasterDAO(void) const\r
+{\r
+//     return shared_ptr<IMasterDAO>(new MySQLMasterDAO());\r
+       throw GameServException("Not implemented", __FILE__, __LINE__);\r
+}\r
+\r
+shared_ptr<ILevelDAO> MySQLDAOFactory::GetLevelDAO(void) const\r
+{\r
+//     return shared_ptr<ILevelDAO>(new MySQLLevelDAO());\r
+       throw GameServException("Not implemented", __FILE__, __LINE__);\r
+}\r
+\r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLId.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLId.cpp
new file mode 100644 (file)
index 0000000..dded2c8
--- /dev/null
@@ -0,0 +1,66 @@
+#include <GameServ/DataLayer/MySQL/MySQLId.h>\r
+using GameServ::DataLayer::MySQL::MySQLId;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ItemTypes;\r
+\r
+#include <GameServ/GameServException.h>\r
+using GameServ::Exceptions::GameServException;\r
+\r
+#include <boost/format.hpp>\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/lexical_cast.hpp>\r
+using boost::str;\r
+using boost::format;\r
+using boost::lexical_cast;\r
+\r
+MySQLId::MySQLId()\r
+{\r
+}\r
+\r
+MySQLId::~MySQLId()\r
+{\r
+}\r
+\r
+string MySQLId::CreatePlayerId(const string &Name)\r
+{\r
+       return Name;\r
+}\r
+\r
+string MySQLId::GetNameFromPlayerId(const string &Id)\r
+{\r
+       return Id;\r
+}\r
+\r
+string MySQLId::CreateItemId(const string &Number)\r
+{\r
+       return Number;\r
+}\r
+\r
+unsigned int MySQLId::GetItemNumberFromId(const string &Id)\r
+{\r
+       return lexical_cast<unsigned int>(Id);\r
+}\r
+\r
+string MySQLId::CreateMonsterId(const string &LevelId, const string &Name)\r
+{\r
+       return str(format("%1%:%2%") % LevelId % Name);\r
+}\r
+\r
+string MySQLId::CreateLevelId(const unsigned int &Number)\r
+{\r
+       return lexical_cast<string>(Number);\r
+}\r
+\r
+unsigned int MySQLId::GetLevelNumberFromId(const string &Id)\r
+{\r
+       return lexical_cast<unsigned int>(Id);\r
+}\r
+\r
+string MySQLId::CreateMasterId(const unsigned int &LevelNumber, const string &Name)\r
+{\r
+       return str(format("%1%:%2%") % LevelNumber % Name);\r
+}
\ No newline at end of file
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLItemDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLItemDAO.cpp
new file mode 100644 (file)
index 0000000..649f4d8
--- /dev/null
@@ -0,0 +1,140 @@
+#include <GameServ/DataLayer/MySQL/MySQLItemDAO.h>\r
+using GameServ::DataLayer::MySQL::MySQLItemDAO;\r
+#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
+using GameServ::GameLayer::GameObjects::ItemGO;\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\r
+#include <GameServ/GameLayer/GameObjects/PotionGO.h>\r
+using GameServ::GameLayer::GameObjects::PotionGO;\r
+\r
+#include <GameServ/DataLayer/DataLayerExceptions.h>\r
+using GameServ::DataLayer::Exceptions::ResourceException;\r
+using GameServ::DataLayer::Exceptions::DataLayerException;\r
+\r
+#include <GameServ/DataLayer/MySQL/MySQLId.h>\r
+using GameServ::DataLayer::MySQL::MySQLId;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ItemTypes;\r
+using GameServ::Types::Modifiers;\r
+using GameServ::Types::Exceptions::TypeException;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+#include <boost/format.hpp>\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/lexical_cast.hpp>\r
+using boost::shared_ptr;\r
+using boost::format;\r
+using boost::str;\r
+using boost::algorithm::to_upper;\r
+using boost::lexical_cast;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <vector>\r
+using std::vector;\r
+\r
+#include <mysql++.h>\r
+#include <ssqls.h>\r
+\r
+MySQLItemDAO::MySQLItemDAO()\r
+{\r
+       Initialize("items");\r
+}\r
+\r
+MySQLItemDAO::~MySQLItemDAO()\r
+{\r
+}\r
+\r
+void MySQLItemDAO::Initialize(const string &tablename)\r
+{\r
+       mTableName = tablename;\r
+}\r
+\r
+shared_ptr<ItemGO> MySQLItemDAO::GetById(const string &Id) const\r
+{\r
+       mysqlpp::Connection conn(false);\r
+       if (conn.connect("gameserv", "localhost", "gameserv", "gameserv", 3306))\r
+       {\r
+               mysqlpp::Query query = conn.query();\r
+               query << "select * from items where id = 1";\r
+               \r
+               vector<item> items;\r
+               query.storein(items);\r
+\r
+               if (items.size() == 1)\r
+               {\r
+                               return CreateItemFromItemSSQLS(items[0]);\r
+               }\r
+               else if (items.size() == 0)\r
+               {\r
+                       return shared_ptr<ItemGO>();\r
+               }\r
+               else\r
+               {\r
+                       throw DataLayerException("Problem with key... more than one row returned on getbyid", __FILE__,\r
+                               __LINE__);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               throw DataLayerException("Unable to connect to the database", __FILE__, __LINE__);\r
+       }\r
+}\r
+\r
+shared_ptr<ItemGO> MySQLItemDAO::CreateItemFromItemSSQLS(const GameServ::DataLayer::MySQL::item &i) const\r
+{\r
+       shared_ptr<ItemGO> spItem;\r
+\r
+       ItemTypes::ItemType type = ItemTypes::Parse(i.type);\r
+\r
+       switch (type)\r
+       {\r
+       case ItemTypes::Armor:\r
+               spItem = shared_ptr<ArmorGO>(new ArmorGO());\r
+               break;\r
+       case ItemTypes::Weapon:\r
+               spItem = shared_ptr<WeaponGO>(new WeaponGO());\r
+               break;\r
+       case ItemTypes::Potion:\r
+               spItem = shared_ptr<PotionGO>(new PotionGO());\r
+               break;\r
+       case ItemTypes::NOTYPE:\r
+       default:\r
+               throw DataLayerException(str(format("Invalid item type %1%") % i.type));\r
+       }\r
+       spItem->Id(i.id);\r
+       spItem->Number(MySQLId::GetItemNumberFromId(i.id));\r
+       spItem->Name(i.name);\r
+       spItem->Uses(i.startinguses);\r
+       map<Modifiers::Modifier, Range<int> > modifiers;\r
+       modifiers[Modifiers::strength] = Range<int>(i.strengthhigh, i.strengthlow);\r
+       modifiers[Modifiers::defense] = Range<int>(i.defensehigh, i.defenselow);\r
+       modifiers[Modifiers::bank] = Range<int>(i.bankhigh, i.banklow);\r
+       modifiers[Modifiers::gold] = Range<int>(i.goldhigh, i.goldlow);\r
+       modifiers[Modifiers::forestfights] = Range<int>(i.forestfightshigh, i.forestfightslow);\r
+       modifiers[Modifiers::health] = Range<int>(i.healthhigh, i.healthlow);\r
+       modifiers[Modifiers::maxhealth] = Range<int>(i.maxhealthhigh, i.maxhealthlow);\r
+       modifiers[Modifiers::playerfights] = Range<int>(i.playerfightshigh, i.playerfightslow);\r
+       modifiers[Modifiers::experience] = Range<int>(i.experiencehigh, i.experiencelow);\r
+       \r
+       \r
+       spItem->Modifiers(modifiers);\r
+\r
+       return spItem;\r
+}\r
+\r
+bool MySQLItemDAO::IdExists(const std::string &Id) const\r
+{\r
+       return false;\r
+}\r
+\r
+string MySQLItemDAO::GetItemTableName(void) const\r
+{\r
+       return mTableName;\r
+}\r
+\r
+\r
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLLevelDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLLevelDAO.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMasterDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMasterDAO.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMonsterDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLMonsterDAO.cpp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLPlayerDAO.cpp b/gameserv-2.0/libgameservgldl/src/DataLayer/MySQL/MySQLPlayerDAO.cpp
new file mode 100644 (file)
index 0000000..e69de29
index a13c04cb583c52d130a9dfc89f24da934b38baaf..d69cf5ed3b08b7ac9ffe240d35d5e3591c7fe6f8 100644 (file)
@@ -26,14 +26,28 @@ using boost::shared_static_cast;
 using boost::str;\r
 using boost::format;\r
 \r
-ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1)\r
+ItemGO::ItemGO() : GameObject()\r
 {\r
+       mName = "";\r
+       mPrice = 0;\r
+       mUses = 0;\r
+       mNumber = 0;\r
 }\r
 \r
 ItemGO::~ItemGO()\r
 {\r
 }\r
 \r
+unsigned int ItemGO::Number(void) const\r
+{\r
+       return mNumber;\r
+}\r
+\r
+void ItemGO::Number(const unsigned int &value)\r
+{\r
+       mNumber = value;\r
+}\r
+\r
 string ItemGO::Name(void) const\r
 {\r
        return mName;\r
index 07cc348d5fd17a97aaaa0bd68832b305371455f1..dad6b4886b3657f3e10b0bea1b440573d0200e80 100644 (file)
@@ -57,6 +57,12 @@ void InventoryManager::RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<Item
        }\r
 }\r
 \r
+bool InventoryManager::PlayerHasInventory(shared_ptr<PlayerGO> spPlayer) const\r
+{\r
+       PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
+       return (iter != mInventoryTable.end());\r
+}\r
+\r
 ItemList InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
 {\r
        PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
index 4a8dcc7c31b02123b82187013d19fd8334dc5a1c..967e5e9bd2f133e5693f7b1be136fc3276f315f3 100644 (file)
@@ -40,6 +40,11 @@ using boost::format;
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
 \r
+// just to test\r
+#define MYSQLPP_SSQLS_NO_STATICS\r
+#include <GameServ/DataLayer/MySQL/MySQLItemDAO.h>\r
+using GameServ::DataLayer::MySQL::MySQLItemDAO;\r
+\r
 string ItemInfo(shared_ptr<ItemGO> spItem);\r
 string MonsterInfo(shared_ptr<MonsterGO> spMonster);\r
 string PlayerInfo(shared_ptr<PlayerGO> spPlayer);\r
@@ -50,71 +55,77 @@ int main()
 {\r
        try\r
        {\r
-               PlayerGL pgl;\r
-               shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
-               \r
-               \r
-               \r
-               cout << "Name: " << spPlayer->Name() << endl\r
-                        << "Level: " << spPlayer->LevelNumber() << endl\r
-                        << "Exp: " << spPlayer->Experience() << endl\r
-                        << "Strength: " << spPlayer->Strength() << endl\r
-                        << "Defense: " << spPlayer->Defense() << endl\r
-                        << "Gold: " << spPlayer->Gold() << endl\r
-                        << "Bank: " << spPlayer->Bank() << endl\r
-                        << "Items: " << endl;\r
-\r
-\r
-\r
-               shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
-               ItemList inventory = spInventory->GetInventory(spPlayer);\r
-               ItemList::const_iterator iter;\r
-               for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
-               {\r
-                       shared_ptr<ItemGO> spItem = (*iter);\r
-                       cout << ItemInfo(spItem) << endl;\r
-               }\r
-\r
-               ForestGL forestGL;\r
-               FightGL fightGL;\r
-               string cmd = "";\r
-               while (cmd != "quit")\r
-               {\r
-                       spPlayer->Health(spPlayer->MaxHealth());\r
-                       spPlayer->Alive(true);\r
-                       DisplayPlayer(spPlayer);\r
-                       getline(cin, cmd);\r
-                       if (cmd == "search")\r
-                       {\r
-                               cout << "Searching the forest..." << endl;\r
-                               shared_ptr<MonsterGO> spMonster = forestGL.GetRandomMonsterForPlayer(spPlayer);\r
-                               \r
-                               while (spPlayer->Alive() && spMonster->Alive())\r
-                               {\r
-                                       DisplayMonster(spMonster);\r
-                                       cout << "Hit Enter to attack: " << endl;\r
-                                       getline(cin, cmd);\r
-                                       cout << "You hit " << spMonster->Name() << " for " <<\r
-                                               fightGL.PlayerAttackMonster(spPlayer, spMonster) << endl;\r
-                                       if (!spMonster->Alive())\r
-                                       {\r
-                                               cout << "You have killed " << spMonster->Name() << endl;\r
-                                               cout << "He shouts: " << spMonster->DeathCry() << endl;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               cout << spMonster->Name() << " hits you with their "\r
-                                                        << spMonster->WeaponName() << " for " << fightGL.MonsterAttackPlayer(spMonster, spPlayer)\r
-                                                       <<      endl;\r
-                                               if (!spPlayer->Alive())\r
-                                               {\r
-                                                       cout << spMonster->Name() << " has killed you!" << endl;\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
+               //PlayerGL pgl;\r
+               //shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
+               //\r
+               //\r
+               //\r
+               //cout << "Name: " << spPlayer->Name() << endl\r
+               //       << "Level: " << spPlayer->LevelNumber() << endl\r
+               //       << "Exp: " << spPlayer->Experience() << endl\r
+               //       << "Strength: " << spPlayer->Strength() << endl\r
+               //       << "Defense: " << spPlayer->Defense() << endl\r
+               //       << "Gold: " << spPlayer->Gold() << endl\r
+               //       << "Bank: " << spPlayer->Bank() << endl\r
+               //       << "Items: " << endl;\r
+\r
+\r
+\r
+               //shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
+               //ItemList inventory = spInventory->GetInventory(spPlayer);\r
+               //ItemList::const_iterator iter;\r
+               //for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
+               //{\r
+               //      shared_ptr<ItemGO> spItem = (*iter);\r
+               //      cout << ItemInfo(spItem) << endl;\r
+               //}\r
+\r
+               //ForestGL forestGL;\r
+               //FightGL fightGL;\r
+               //string cmd = "";\r
+               ////while (cmd != "quit")\r
+               //for (int x = 0; x < 10000; x++)\r
+               //{\r
+               //      spPlayer->Health(spPlayer->MaxHealth());\r
+               //      spPlayer->Alive(true);\r
+               //      //DisplayPlayer(spPlayer);\r
+               //      //getline(cin, cmd);\r
+               //      cmd="search";\r
+               //      if (cmd == "search")\r
+               //      {\r
+               //              //cout << "Searching the forest..." << endl;\r
+               //              shared_ptr<MonsterGO> spMonster = forestGL.GetRandomMonsterForPlayer(spPlayer);\r
+               //              \r
+               //              while (spPlayer->Alive() && spMonster->Alive())\r
+               //              {\r
+               //                      //DisplayMonster(spMonster);\r
+               //                      //cout << "Hit Enter to attack: " << endl;\r
+               //                      //getline(cin, cmd);\r
+               //                      unsigned int attack = fightGL.PlayerAttackMonster(spPlayer, spMonster);\r
+               //                      //cout << "You hit " << spMonster->Name() << " for " << attack << endl;\r
+               //                      if (!spMonster->Alive())\r
+               //                      {\r
+               //                              //cout << "You have killed " << spMonster->Name() << endl;\r
+               //                              //cout << "He shouts: " << spMonster->DeathCry() << endl;\r
+               //                      }\r
+               //                      else\r
+               //                      {\r
+               //                              unsigned int mAttack = fightGL.MonsterAttackPlayer(spMonster, spPlayer);\r
+               //                              /*cout << spMonster->Name() << " hits you with their "\r
+               //                                       << spMonster->WeaponName() << " for " << mAttack\r
+               //                                      <<      endl;*/\r
+               //                              if (!spPlayer->Alive())\r
+               //                              {\r
+               //                                      /*cout << spMonster->Name() << " has killed you!" << endl;*/\r
+               //                              }\r
+               //                      }\r
+               //              }\r
+               //      }\r
+               //}\r
+\r
 \r
+               MySQLItemDAO test;\r
+               shared_ptr<ItemGO> spItem = test.GetById("test");\r
                \r
                //map <int, int> frequencies;\r
                //int x;\r
index ac7c9869caa306d11580d34e23952434fa03960a..0a2ba01f5157cacce760f72f2dca36efb7819c76 100644 (file)
@@ -43,7 +43,7 @@
                                AdditionalIncludeDirectories="$(SolutionDir)/libgameservgldl/include;$(SolutionDir)/libgameservcore/include"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
-                               RuntimeLibrary="1"\r
+                               RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                DebugInformationFormat="4"\r
                        />\r