--- /dev/null
+#ifndef __GS__FileArmorDAO_H__\r
+#define __GS__FileArmorDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <list>\r
+using std::list;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+namespace GameServ { namespace DataLayer { namespace File\r
+{\r
+ //! File implementation of IArmorDAO interface\r
+ /*!\r
+ If you're using an File datasource, you will be using this\r
+ DAO to access Armors.\r
+ */\r
+ class FileArmorDAO : public IArmorDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ FileArmorDAO(void);\r
+ FileArmorDAO(const string &filename);\r
+ virtual ~FileArmorDAO();\r
+\r
+ // Methods ////////////////////////////////////////////////////////////\r
+ virtual shared_ptr<ArmorGO> GetById(const string &Id) const;\r
+\r
+ virtual bool IdExists(const string &Id) const;\r
+\r
+ void LoadArmorCache(void);\r
+\r
+ private:\r
+ //! Data file\r
+ string mFilename;\r
+\r
+ // Helper Methods /////////////////////////////////////////////////////\r
+\r
+ //! Creates the ArmorGO found at iterator position\r
+ shared_ptr<ArmorGO> CreateArmorFromLine(const string &line) const;\r
+\r
+ //! Get the Armor database file path\r
+ string GetArmorFilePath(void) const;\r
+\r
+ void Initialize(const string &filename);\r
+\r
+\r
+ map<string, shared_ptr<ArmorGO> > spArmorCache;\r
+ };\r
+} } } // GameServ.DataLayer.DataAccessObjects.File\r
+\r
+#endif // __GS__FileArmorDAO_H__\r
using GameServ::DataLayer::IDAOFactory;\r
\r
#include <GameServ/DataLayer/IPlayerDAO.h>\r
-\r
-\r
using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
-\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
\r
#include <boost/shared_ptr.hpp>\r
using boost::shared_ptr;\r
// Overrides //////////////////////////////////////////////////////////\r
\r
virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const;\r
+ virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const;\r
private:\r
\r
\r
virtual void SetFlags(shared_ptr<PlayerGO> spPlayer, const int &flags) const;\r
virtual int GetFlags(shared_ptr<PlayerGO> spPlayer) const;\r
\r
+ void LoadPlayerCache(void);\r
+ void WritePlayerCache(void) const;\r
+\r
private:\r
//! Data file\r
string mFilename;\r
\r
// Helper Methods /////////////////////////////////////////////////////\r
- //! Get control sector information\r
- void GetControlInfo(void);\r
\r
//! Creates the PlayerGO found at iterator position\r
shared_ptr<PlayerGO> CreatePlayerFromLine(const string &line) const;\r
string GetPlayerFilePath(void) const;\r
\r
void Initialize(const string &filename);\r
- void LoadPlayerCache();\r
- void WritePlayerCache();\r
\r
- //! string is the id and the shared_ptr<PlayerGO> is the player object\r
map<string, shared_ptr<PlayerGO> > spPlayerCache;\r
-\r
};\r
} } } // GameServ.DataLayer.DataAccessObjects.File\r
\r
--- /dev/null
+#ifndef __GS_IARMORDAO_H__\r
+#define __GS_IARMORDAO_H__\r
+\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+\r
+#include <boost/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <list>\r
+using std::list;\r
+#include <string>\r
+using std::string;\r
+\r
+namespace GameServ { namespace DataLayer { namespace DataAccessObjects\r
+{\r
+ //! Interface for Armor Data Access Objects \r
+ /*! \r
+ This is the interface for all Armor DAOs. Each specific datasource\r
+ will need to inherit this common interface.\r
+ */\r
+ class IArmorDAO\r
+ {\r
+ public:\r
+ // Ctors, Dtors ///////////////////////////////////////////////////////\r
+ IArmorDAO(void);\r
+ virtual ~IArmorDAO(void); // Needs to be virtual \r
+\r
+ //! Get the Armor using a unique data/object Id\r
+ /*!\r
+ \param Id Unique identifier\r
+ \return A boost shared pointer to a Armor game object if found\r
+ otherwise the list is empty.\r
+ */\r
+ virtual shared_ptr<ArmorGO> GetById(const string &Id) const = 0;\r
+\r
+ //! Function to quickly search to see if an Id exists or not\r
+ /*!\r
+ \param Id The Id of the game object to search for\r
+ \return true if the Id is valid and exists in the data, false otherwise\r
+ */\r
+ virtual bool IdExists(const string &Id) const = 0;\r
+\r
+ private:\r
+ \r
+ \r
+ };\r
+} } }\r
+\r
+#endif
\ No newline at end of file
#define __GS__IDAOFACTORY_H__\r
\r
#include <GameServ/DataLayer/IPlayerDAO.h>\r
-\r
using GameServ::DataLayer::DataAccessObjects::IPlayerDAO;\r
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
\r
#include <boost/shared_ptr.hpp>\r
using boost::shared_ptr;\r
//! Test DataAccessObject for all test related operations\r
virtual shared_ptr<IPlayerDAO> GetPlayerDAO(void) const = 0;\r
\r
+ virtual shared_ptr<IArmorDAO> GetArmorDAO(void) const = 0;\r
+\r
private:\r
\r
};\r
//! Property get - LastLogin\r
ptime LastLogin(void) const;\r
\r
- // TODO: Add boolean flags\r
+ //! Property get - FoughtMaster\r
+ bool FoughtMaster(void) const;\r
+\r
+ //! Property set - Fought master\r
+ void FoughtMaster(const bool &value);\r
+\r
+ //! Property get - Alive\r
+ bool Alive(void) const;\r
+\r
+ //! Property set - Alive\r
+ void Alive(const bool &value);\r
\r
bool operator==(const PlayerGO &right) const;\r
bool operator!=(const PlayerGO &right) const;\r
vector< shared_ptr<ItemGO> > mInventory;\r
ptime mLastLogin;\r
\r
- // TODO: Add flag long int\r
+ bool mFoughtMaster;\r
+ bool mAlive;\r
};\r
}}} // GameServ::GameLayer::GameObjects\r
#endif
\ No newline at end of file
RelativePath=".\include\GameServ\DataLayer\DataLayerExceptions.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath=".\src\DataLayer\IArmorDAO.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\include\GameServ\DataLayer\IArmorDAO.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath=".\include\GameServ\DataLayer\IDAOFactory.h"\r
>\r
<Filter\r
Name="File"\r
>\r
+ <File\r
+ RelativePath=".\src\DataLayer\File\FileArmorDAO.cpp"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\include\GameServ\DataLayer\File\FileArmorDAO.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath=".\src\DataLayer\File\FileDAOFactory.cpp"\r
>\r
--- /dev/null
+#include <GameServ/DataLayer/File/FileArmorDAO.h>\r
+using GameServ::DataLayer::File::FileArmorDAO;\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+\r
+#include <GameServ/DataLayer/DataLayerExceptions.h>\r
+using GameServ::DataLayer::Exceptions::ResourceException;\r
+using GameServ::DataLayer::Exceptions::DataLayerException;\r
+\r
+#include <GameServ/DataLayer/File/FileId.h>\r
+using GameServ::DataLayer::File::FileId;\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
+#include <boost/tokenizer.hpp>\r
+typedef boost::tokenizer<boost::char_separator<char> > \r
+ tokenizer;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+#include <fstream>\r
+using std::ifstream;\r
+using std::getline;\r
+using std::ofstream;\r
+using std::endl;\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+// TODO: Switch filename to be loaded from a config file\r
+FileArmorDAO::FileArmorDAO() : mFilename("data/items/masteritems.dat")\r
+{\r
+ Initialize(GetArmorFilePath());\r
+}\r
+\r
+FileArmorDAO::FileArmorDAO(const string &filename)\r
+{\r
+ Initialize(filename);\r
+}\r
+\r
+FileArmorDAO::~FileArmorDAO()\r
+{\r
+}\r
+\r
+void FileArmorDAO::Initialize(const string &filename)\r
+{\r
+ mFilename = filename;\r
+ LoadArmorCache();\r
+}\r
+\r
+string FileArmorDAO::GetArmorFilePath() const\r
+{\r
+ return mFilename;\r
+}\r
+\r
+shared_ptr<ArmorGO> FileArmorDAO::GetById(const string &Id) const\r
+{\r
+ string line;\r
+ ifstream infile;\r
+ infile.open(GetArmorFilePath().c_str());\r
+\r
+ if (infile.fail())\r
+ {\r
+ throw ResourceException(str(format("Unable to open file %1%") % GetArmorFilePath()), __FILE__, __LINE__);\r
+ }\r
+\r
+\r
+ while (getline(infile, line))\r
+ {\r
+ shared_ptr<ArmorGO> spArmor = CreateArmorFromLine(line);\r
+ if (spArmor->Id() == Id)\r
+ {\r
+ return spArmor;\r
+ }\r
+ }\r
+ return shared_ptr<ArmorGO>();\r
+}\r
+\r
+shared_ptr<ArmorGO> FileArmorDAO::CreateArmorFromLine(const string &line) const\r
+{\r
+ assert(!line.empty());\r
+ shared_ptr<ArmorGO> spArmor;\r
+ spArmor = shared_ptr<ArmorGO>(new ArmorGO());\r
+ boost::char_separator<char> sep(" ", 0, boost::keep_empty_tokens);\r
+ tokenizer tokens(line, sep);\r
+ tokenizer::iterator tok_iter = tokens.begin();\r
+\r
+\r
+\r
+ return spArmor;\r
+}\r
+bool FileArmorDAO::IdExists(const string &Id) const\r
+{\r
+ map<string, shared_ptr<ArmorGO> >::const_iterator iter;\r
+ iter = spArmorCache.find(Id);\r
+ return (iter != spArmorCache.end());\r
+}\r
+\r
+void FileArmorDAO::LoadArmorCache(void)\r
+{\r
+}
\ No newline at end of file
#include <GameServ/DataLayer/File/FileDAOFactory.h>\r
#include <GameServ/DataLayer/File/FilePlayerDAO.h>\r
+#include <GameServ/DataLayer/File/FileArmorDAO.h>\r
\r
using GameServ::DataLayer::File::FileDAOFactory;\r
using GameServ::DataLayer::File::FilePlayerDAO;\r
+using GameServ::DataLayer::File::FileArmorDAO;\r
\r
#include <boost/shared_ptr.hpp>\r
using boost::shared_ptr;\r
return shared_ptr<IPlayerDAO>(new FilePlayerDAO());\r
}\r
\r
+shared_ptr<IArmorDAO> FileDAOFactory::GetArmorDAO(void) const\r
+{\r
+ return shared_ptr<IArmorDAO>(new FileArmorDAO());\r
+}\r
+\r
\r
using boost::format;\r
using boost::str;\r
using boost::algorithm::to_upper;\r
+using boost::algorithm::to_lower;\r
using boost::lexical_cast;\r
#include <boost/tokenizer.hpp>\r
typedef boost::tokenizer<boost::char_separator<char> > \r
LoadPlayerCache();\r
}\r
\r
-void FilePlayerDAO::LoadPlayerCache()\r
+void FilePlayerDAO::LoadPlayerCache(void)\r
{\r
assert(!mFilename.empty());\r
spPlayerCache.clear();\r
shared_ptr<PlayerGO> spPlayer;\r
getline(infile, line);\r
spPlayer = CreatePlayerFromLine(line);\r
- spPlayerCache[spPlayer->Id()] = spPlayer;\r
+ string id = spPlayer->Id();\r
+ to_lower(id);\r
+ spPlayerCache[id] = spPlayer;\r
}\r
infile.close();\r
}\r
\r
-void FilePlayerDAO::WritePlayerCache()\r
+void FilePlayerDAO::WritePlayerCache(void) const\r
{\r
ofstream outfile;\r
outfile.open(mFilename.c_str());\r
throw ResourceException(str(format("Unable to open file %1%") % GetPlayerFilePath()), __FILE__, __LINE__);\r
}\r
\r
-\r
+ string id = Id;\r
+ to_lower(id);\r
while (getline(infile, line))\r
{\r
shared_ptr<PlayerGO> spPlayer = CreatePlayerFromLine(line);\r
- if (spPlayer->Id() == Id)\r
+ \r
+ // No need to convert the playerId to lowercase here, because it should already be lowercase\r
+ if (spPlayer->Id() == id)\r
{\r
return spPlayer;\r
}\r
\r
void FilePlayerDAO::SetFlags(shared_ptr<PlayerGO> spPlayer, const int &flags) const\r
{\r
- // TODO: Add flags of course\r
+ if ((flags & 0x00000001) == 0x00000001)\r
+ {\r
+ spPlayer->FoughtMaster(true);\r
+ }\r
+ else\r
+ {\r
+ spPlayer->FoughtMaster(false);\r
+ }\r
+\r
+ if ((flags & 0x00000002) == 0x00000002)\r
+ {\r
+ spPlayer->Alive(true);\r
+ }\r
+ else\r
+ {\r
+ spPlayer->Alive(false);\r
+ }\r
}\r
\r
int FilePlayerDAO::GetFlags(shared_ptr<PlayerGO> spPlayer) const\r
{\r
- // TODO: Return real flags\r
+ int flags = 0;\r
+\r
+ if (spPlayer->FoughtMaster())\r
+ {\r
+ flags |= 0x00000001;\r
+ }\r
+ if (spPlayer->Alive())\r
+ {\r
+ flags |= 0x00000002;\r
+ }\r
return 0;\r
}\r
\r
// TODO: Lock the file\r
if (IdExists(spPlayer->Id()))\r
{\r
- spPlayerCache[spPlayer->Id()] = spPlayer;\r
+ string id = spPlayer->Id();\r
+ to_lower(id);\r
+ spPlayerCache[id] = spPlayer;\r
WritePlayerCache();\r
}\r
else\r
if (!IdExists(FileId::CreatePlayerId(spPlayer->Name())))\r
{\r
spPlayer->Id(FileId::CreatePlayerId(spPlayer->Name()));\r
- spPlayerCache[spPlayer->Id()] = spPlayer;\r
+ string id = spPlayer->Id();\r
+ to_lower(id);\r
+ spPlayerCache[id] = spPlayer;\r
ofstream outfile;\r
outfile.open(mFilename.c_str(), std::ios::app);\r
if (outfile.fail())\r
bool FilePlayerDAO::IdExists(const string &Id) const\r
{\r
map<string, shared_ptr<PlayerGO> >::const_iterator iter;\r
- iter = spPlayerCache.find(Id);\r
+ string id = Id;\r
+ to_lower(id);\r
+ iter = spPlayerCache.find(id);\r
return (iter != spPlayerCache.end());\r
}\r
\r
--- /dev/null
+#include <GameServ/DataLayer/IArmorDAO.h>\r
+using GameServ::DataLayer::DataAccessObjects::IArmorDAO;\r
+\r
+IArmorDAO::IArmorDAO()\r
+{\r
+}\r
+\r
+IArmorDAO::~IArmorDAO()\r
+{\r
+}
\ No newline at end of file
mPlayerFights = value;\r
}\r
\r
+bool PlayerGO::Alive(void) const\r
+{\r
+ return mAlive;\r
+}\r
+\r
+void PlayerGO::Alive(const bool &value)\r
+{\r
+ mAlive = value;\r
+}\r
+\r
+bool PlayerGO::FoughtMaster(void) const\r
+{\r
+ return mFoughtMaster;\r
+}\r
+\r
+void PlayerGO::FoughtMaster(const bool &value)\r
+{\r
+ mFoughtMaster = value;\r
+}\r
+\r
shared_ptr<WeaponGO> PlayerGO::Weapon(void) const\r
{\r
return mWeapon;\r