-Kain 1 1 100 0 10 10 10 10 100 3 0 test 19730303T094640 1 3001 3001 -1 1 -1 3002 -1 6001 1 6002 1 6003 1\r
-Kainazzzo 1 1 100 0 10 10 10 10 100 3 0 test 19730303T094640 1 3001 3001 -1 1 -1 3002 -1 6001 1 6002 1 6003 1\r
+Kain 1 1 100 0 10 10 10 10 100 3 0 test 19730303T094640 1 3001 3001 -1 1 -1 3002 -1 6001 1 6002 1 6003 1
\ No newline at end of file
\r
}; // ItemTypes class\r
\r
+ class ObjectTypes\r
+ {\r
+ public:\r
+ //! Logical ObjectType enumerator\r
+ enum ObjectType \r
+ { \r
+ Player, Item, Level, Master, Monster\r
+ };\r
+\r
+ //! Get the name of an object type\r
+ static string GetName(ObjectType objecttype);\r
+\r
+ //! Parse the name and return the enumeration value\r
+ static ObjectType Parse(const string &objecttype);\r
+\r
+ private:\r
+ //! Internal struct to hold type information statically in a table\r
+ typedef struct objecttypeinfo\r
+ {\r
+ ObjectTypes::ObjectType objecttype; //!< The ObjectType enumeration value\r
+ string name; //!< The Name of the type\r
+ } objecttypeinfo;\r
+\r
+ static const objecttypeinfo mObjectTypeInfoTable[];\r
+\r
+ }; // ObjectTypes class\r
+\r
class Modifiers\r
{\r
public:\r
\r
//! Property set - Low\r
void Low(const int &value);\r
+\r
+ //! Property get - Last random number to be generated\r
+ int LastRandom(void) const;\r
\r
private:\r
int mHigh;\r
int mLow;\r
+ int mLastRandom;\r
};\r
} \r
}\r
using GameServ::Types::ItemTypes;\r
using GameServ::Types::Modifiers;\r
using GameServ::Types::Range;\r
+using GameServ::Types::ObjectTypes;\r
using GameServ::Types::Exceptions::TypeException;\r
\r
#include <string>\r
\r
const ItemTypes::itemtypeinfo ItemTypes::mItemTypeInfoTable[] =\r
{\r
- { Weapon, "Weapon" }, { Armor, "Armor" }, { Potion, "Potion"}\r
+ { Weapon, "Weapon" }, { Armor, "Armor" }, { Potion, "Potion"}, { NOTYPE, "NOTYPE" }\r
}; // mItemTypeInfoTable[]\r
\r
string ItemTypes::GetName(ItemTypes::ItemType itemtype)\r
return mItemTypeInfoTable[i].itemtype;\r
}\r
}\r
- return ItemTypes::NOTYPE;\r
+ throw TypeException(str(format("No itemtype enumeration found for %1%") % itemtype), __FILE__, __LINE__);\r
}\r
\r
+const ObjectTypes::objecttypeinfo ObjectTypes::mObjectTypeInfoTable[] =\r
+{\r
+ { Player, "Player" }, { Level, "Level" }, { Item, "Item" },\r
+ { Master, "Master" }, { Monster, "Monster" }\r
+}; // mObjectTypeInfoTable[]\r
+\r
+string ObjectTypes::GetName(ObjectTypes::ObjectType objecttype)\r
+{\r
+ for (unsigned int i = 0; i < sizeof(mObjectTypeInfoTable) / sizeof(objecttypeinfo); i++)\r
+ {\r
+ if (mObjectTypeInfoTable[i].objecttype == objecttype)\r
+ {\r
+ return mObjectTypeInfoTable[i].name;\r
+ }\r
+ }\r
+\r
+ // This should never happen because an enumeration is passed, but in the case where a user\r
+ // may attempt an invalid integer cast, it provides protection\r
+ throw TypeException(str(format("No object type found for %1% enumeration value") % objecttype).c_str());\r
+}\r
+\r
+ObjectTypes::ObjectType ObjectTypes::Parse(const string &objecttype)\r
+{\r
+ for (unsigned int i = 0; i < sizeof(mObjectTypeInfoTable) / sizeof(objecttypeinfo); i++)\r
+ {\r
+ if (mObjectTypeInfoTable[i].name == objecttype)\r
+ {\r
+ return mObjectTypeInfoTable[i].objecttype;\r
+ }\r
+ }\r
+ throw TypeException(str(format("No object type enumeration found for %1%") % objecttype), __FILE__, __LINE__);\r
+}\r
+\r
+\r
const Modifiers::modifierinfo Modifiers::mModifierInfoTable[] =\r
{\r
- { strength, "Strength"}, { defense, "Defense" }, { maxhealth, "MaxHealth" }, { health, "Health" }, { forestfights, "Forest Fights" },\r
- { playerfights, "Player Fights" }, { gold, "Gold" }, { bank, "Bank" }\r
+ { strength, "Strength"}, { defense, "Defense" }, { maxhealth, "MaxHealth" }, { health, "Health" }, { forestfights, "ForestFights" },\r
+ { playerfights, "PlayerFights" }, { gold, "Gold" }, { bank, "Bank" }\r
};\r
\r
string Modifiers::GetName(Modifiers::Modifier modifier)\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
static base_generator_type generator(static_cast<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<int>(uni());\r
+ mLastRandom = uni();\r
+ return mLastRandom;\r
+}\r
+\r
+int Range::LastRandom(void) const\r
+{\r
+ return mLastRandom;\r
}
\ No newline at end of file
ArmorGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &maxhealth);\r
virtual ~ArmorGO();\r
\r
+ virtual ItemTypes::ItemType Type(void) const;\r
+ virtual ArmorGO *Clone(void) const;\r
+\r
private:\r
};\r
\r
#ifndef __GS__GAMEOBJECT_H__\r
#define __GS__GAMEOBJECT_H__\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
+\r
#include <functional>\r
#include <string>\r
using std::string;\r
*/\r
virtual GameObject *Clone(void) const = 0;\r
\r
+ virtual ObjectTypes::ObjectType ObjectType(void) const = 0;\r
+\r
bool operator==(const GameObject &right) const;\r
bool operator!=(const GameObject &right) const;\r
\r
+\r
protected:\r
string mId;\r
friend class GameObjectIds_Eq;\r
using GameServ::Types::ItemTypes;\r
using GameServ::Types::Modifiers;\r
using GameServ::Types::Range;\r
+using GameServ::Types::ObjectTypes;\r
\r
#include <string>\r
using std::string;\r
void Uses(const int &value);\r
\r
//! Property get - Item Type\r
- ItemTypes::ItemType Type(void) const;\r
-\r
- //! Property set - Item Type\r
- void Type(const ItemTypes::ItemType &value);\r
+ virtual ItemTypes::ItemType Type(void) const = 0;\r
\r
//! Property get - Modifiers\r
map<Modifiers::Modifier, Range> Modifiers(void) const;\r
//! Property set - 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
+ //! Use item on a game object\r
+ virtual void Use(shared_ptr<GameObject> spObject);\r
+ //! Undo item's last effect on a game object\r
+ virtual void Undo(shared_ptr<GameObject> spObject);\r
+\r
+ virtual ItemGO *Clone(void) const = 0;\r
\r
- virtual ItemGO *Clone(void) const;\r
+ virtual ObjectTypes::ObjectType ObjectType(void) const;\r
\r
protected:\r
string mName;\r
unsigned long int mPrice;\r
int mUses;\r
- ItemTypes::ItemType mType;\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, Range r);\r
+ virtual void UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r);\r
};\r
}}}\r
#endif
\ No newline at end of file
\r
virtual MasterGO *Clone(void) const;\r
\r
+ virtual ObjectTypes::ObjectType ObjectType(void) const;\r
+\r
private:\r
string mName;\r
unsigned long int mGold;\r
\r
virtual MonsterGO *Clone(void) const;\r
\r
+ virtual ObjectTypes::ObjectType ObjectType(void) const;\r
+\r
private:\r
string mName;\r
unsigned long int mGold;\r
#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
using GameServ::GameLayer::GameObjects::WeaponGO;\r
\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
+\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
\r
\r
virtual PlayerGO *Clone(void) const;\r
\r
+ virtual ObjectTypes::ObjectType ObjectType(void) const;\r
+\r
private:\r
string mName;\r
int mLevel;\r
PotionGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &maxhealth);\r
virtual ~PotionGO();\r
\r
+ virtual ItemTypes::ItemType Type(void) const;\r
+ virtual PotionGO *Clone(void) const;\r
+\r
private:\r
};\r
\r
WeaponGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &maxhealth);\r
virtual ~WeaponGO();\r
\r
+ virtual ItemTypes::ItemType Type(void) const;\r
+ virtual WeaponGO *Clone(void) const;\r
+\r
private:\r
};\r
\r
throw DataLayerException(str(format("Corrupt %1% file. Missing information on line %2%") %\r
mFilename % line), __FILE__, __LINE__);\r
}\r
- modifiers[Modifiers::strength] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::strength] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\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] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::defense] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\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] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::maxhealth] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\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] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::health] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\r
tok_iter++;\r
if (tok_iter == tokens.end())\r
{\r
+ spItem->Modifiers(modifiers);\r
return spItem;\r
}\r
- modifiers[Modifiers::forestfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::forestfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\r
tok_iter++;\r
if (tok_iter == tokens.end())\r
{\r
+ spItem->Modifiers(modifiers);\r
return spItem;\r
}\r
- modifiers[Modifiers::playerfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::playerfights] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\r
tok_iter++;\r
if (tok_iter == tokens.end())\r
{\r
+ spItem->Modifiers(modifiers);\r
return spItem;\r
}\r
- modifiers[Modifiers::gold] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::gold] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\r
tok_iter++;\r
if (tok_iter == tokens.end())\r
{\r
+ spItem->Modifiers(modifiers);\r
return spItem;\r
}\r
- modifiers[Modifiers::bank] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ if ((*tok_iter) != "0")\r
+ {\r
+ modifiers[Modifiers::bank] = Range(lexical_cast<int>((*tok_iter)), lexical_cast<int>((*tok_iter)));\r
+ }\r
spItem->Modifiers(modifiers);\r
\r
return spItem;\r
\r
ArmorGO::ArmorGO() : ItemGO()\r
{\r
- mType = ItemTypes::Armor;\r
}\r
\r
ArmorGO::ArmorGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &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
ArmorGO::~ArmorGO()\r
{\r
}\r
\r
+ItemTypes::ItemType ArmorGO::Type(void) const\r
+{\r
+ return ItemTypes::Armor;\r
+}\r
\r
+ArmorGO *ArmorGO::Clone(void) const\r
+{\r
+ return new ArmorGO(*this);\r
+}\r
\r
\r
\r
using GameServ::Types::ItemTypes;\r
using GameServ::Types::Modifiers;\r
using GameServ::Types::Range;\r
+using GameServ::Types::ObjectTypes;\r
+\r
+#include <GameServ/GameServException.h>\r
+using GameServ::Exceptions::GameServException;\r
\r
#include <string>\r
using std::string;\r
using boost::str;\r
using boost::format;\r
\r
-ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1), mType(ItemTypes::NOTYPE)\r
+ItemGO::ItemGO() : GameObject(), mName(""), mPrice(0), mUses(1)\r
{\r
}\r
\r
mUses = value;\r
}\r
\r
-void ItemGO::Use(shared_ptr<GameObject> spPlayer)\r
+void ItemGO::Use(shared_ptr<GameObject> spObject)\r
{\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
+ ApplyModifier(spObject, iter->first, iter->second);\r
+ }\r
+}\r
+\r
+void ItemGO::Undo(shared_ptr<GameObject> spObject)\r
+{\r
+ map<Modifiers::Modifier, Range>::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
{\r
+ if (spObject->ObjectType() != ObjectTypes::Player)\r
+ {\r
+ throw GameServException(str(format("Item %1%:%2% used on an unsupported object type: %3%") %\r
+ Id() % Name() % ObjectTypes::GetName(spObject->ObjectType())), __FILE__, __LINE__);\r
+ }\r
+\r
shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r
+\r
switch (modifier)\r
{\r
case Modifiers::strength:\r
}\r
}\r
\r
-ItemTypes::ItemType ItemGO::Type(void) const\r
+void ItemGO::UndoModifier(shared_ptr<GameObject> spObject, const Modifiers::Modifier &modifier, Range r)\r
{\r
- return mType;\r
-}\r
+ if (spObject->ObjectType() != ObjectTypes::Player)\r
+ {\r
+ throw GameServException(str(format("Item %1%:%2% used on an unsupported object type: %3%") %\r
+ Id() % Name() % ObjectTypes::GetName(spObject->ObjectType())), __FILE__, __LINE__);\r
+ }\r
\r
-void ItemGO::Type(const ItemTypes::ItemType &value)\r
-{\r
- mType = value;\r
+ shared_ptr<PlayerGO> spPlayer = shared_static_cast<PlayerGO>(spObject);\r
+\r
+ switch (modifier)\r
+ {\r
+ case Modifiers::strength:\r
+ spPlayer->Strength(spPlayer->Strength() - r.LastRandom());\r
+ break;\r
+ case Modifiers::defense:\r
+ spPlayer->Defense(spPlayer->Defense() - r.LastRandom());\r
+ break;\r
+ case Modifiers::health:\r
+ spPlayer->Health(spPlayer->Health() - r.LastRandom());\r
+ break;\r
+ case Modifiers::maxhealth:\r
+ spPlayer->MaxHealth(spPlayer->MaxHealth() - r.LastRandom());\r
+ break;\r
+ case Modifiers::gold:\r
+ spPlayer->Gold(spPlayer->Gold() - r.LastRandom());\r
+ break;\r
+ case Modifiers::bank:\r
+ spPlayer->Bank(spPlayer->Bank() - r.LastRandom());\r
+ break;\r
+ case Modifiers::forestfights:\r
+ spPlayer->ForestFights(spPlayer->ForestFights() - r.LastRandom());\r
+ break;\r
+ case Modifiers::playerfights:\r
+ spPlayer->PlayerFights(spPlayer->PlayerFights() - r.LastRandom());\r
+ break;\r
+ default:\r
+ throw GameServException(str(format("Invalid modifier %1%") % modifier), __FILE__, __LINE__);\r
+ }\r
}\r
\r
map<Modifiers::Modifier, Range> ItemGO::Modifiers(void) const\r
mModifiers.insert(modifiers.begin(), modifiers.end());\r
}\r
\r
-ItemGO *ItemGO::Clone(void) const\r
+//ItemGO *ItemGO::Clone(void) const\r
+//{\r
+// return new ItemGO(*this);\r
+//}\r
+\r
+ObjectTypes::ObjectType ItemGO::ObjectType(void) const\r
{\r
- return new ItemGO(*this);\r
+ return ObjectTypes::Item;\r
}\r
\r
-\r
-\r
+//ItemTypes::ItemType ItemGO::Type(void) const\r
+//{\r
+// return ItemTypes::NOTYPE;\r
+//}\r
\r
\r
\r
#include <GameServ/GameLayer/GameObjects/MasterGO.h>\r
using GameServ::GameLayer::GameObjects::MasterGO;\r
\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
+\r
#include <string>\r
using std::string;\r
\r
bool MasterGO::operator!=(const MasterGO &right) const\r
{\r
return (!(*this == right));\r
-}
\ No newline at end of file
+}\r
+\r
+ObjectTypes::ObjectType MasterGO::ObjectType(void) const\r
+{\r
+ return ObjectTypes::Master;\r
+}\r
+\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/GameServException.h>\r
+using GameServ::Exceptions::GameServException;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
\r
#include <boost/smart_ptr/shared_ptr.hpp>\r
using boost::shared_ptr;\r
+using boost::shared_static_cast;\r
\r
-#include <GameServ/GameServException.h>\r
-using GameServ::Exceptions::GameServException;\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/format.hpp>\r
+using boost::str;\r
+using boost::format;\r
\r
#include <boost/date_time/posix_time/posix_time.hpp>\r
using boost::posix_time::ptime;\r
{\r
for (int x = 0; x < Number; ++x)\r
{\r
- shared_ptr<ItemGO> item = shared_ptr<ItemGO>(new ItemGO(*spItem->Clone()));\r
- mItems.push_back(item);\r
+ shared_ptr<ItemGO> item;\r
+ switch (spItem->Type())\r
+ {\r
+ case ItemTypes::Armor:\r
+ mItems.push_back(shared_ptr<ArmorGO>(new ArmorGO(*(ArmorGO *)spItem->Clone())));\r
+ break;\r
+ case ItemTypes::Weapon:\r
+ mItems.push_back(shared_ptr<WeaponGO>(new WeaponGO(*(WeaponGO *)spItem->Clone())));\r
+ break;\r
+ case ItemTypes::Potion:\r
+ mItems.push_back(shared_ptr<PotionGO>(new PotionGO(*(PotionGO *)spItem->Clone())));\r
+ break;\r
+ default:\r
+ throw GameServException(str(format("Unsupported item type added to Player inventory: %1%") %\r
+ ItemTypes::GetName(spItem->Type())), __FILE__, __LINE__);\r
+ }\r
}\r
}\r
\r
return new PlayerGO(*this);\r
}\r
\r
+ObjectTypes::ObjectType PlayerGO::ObjectType(void) const\r
+{\r
+ return ObjectTypes::Player;\r
+}\r
\r
PotionGO::PotionGO() : ItemGO()\r
{\r
- mType = ItemTypes::Potion;\r
}\r
\r
PotionGO::PotionGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &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
PotionGO::~PotionGO()\r
{\r
}\r
\r
+ItemTypes::ItemType PotionGO::Type(void) const\r
+{\r
+ return ItemTypes::Potion;\r
+}\r
\r
+PotionGO *PotionGO::Clone(void) const\r
+{\r
+ return new PotionGO(*this);\r
+}\r
\r
\r
\r
\r
WeaponGO::WeaponGO() : ItemGO()\r
{\r
- mType = ItemTypes::Weapon;\r
}\r
\r
WeaponGO::WeaponGO(const string &name, const int &price, const int &uses, const int &strength, const int &defense, const int &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
WeaponGO::~WeaponGO()\r
{\r
}\r
\r
+ItemTypes::ItemType WeaponGO::Type(void) const\r
+{\r
+ return ItemTypes::Weapon;\r
+}\r
\r
+WeaponGO *WeaponGO::Clone(void) const\r
+{\r
+ return new WeaponGO(*this);\r
+}\r
\r
\r
\r
#include <GameServ/GameLayer/PlayerGL.h>\r
using GameServ::GameLayer::PlayerGL;\r
\r
+#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
+using GameServ::GameLayer::GameObjects::ItemGO;\r
+#include <GameServ/GameLayer/GameObjects/WeaponGO.h>\r
+using GameServ::GameLayer::GameObjects::WeaponGO;\r
+#include <GameServ/GameLayer/GameObjects/ArmorGO.h>\r
+using GameServ::GameLayer::GameObjects::ArmorGO;\r
+#include <GameServ/GameLayer/GameObjects/PotionGO.h>\r
+using GameServ::GameLayer::GameObjects::PotionGO;\r
+\r
+\r
#include <GameServ/GameServException.h>\r
using GameServ::Exceptions::GameServException;\r
\r
#include <GameServ/Types.h>\r
using GameServ::Types::Range;\r
+using GameServ::Types::ItemTypes;\r
+using GameServ::Types::Modifiers;\r
+\r
+#include <boost/algorithm/string.hpp>\r
+#include <boost/format.hpp>\r
+using boost::str;\r
+using boost::format;\r
\r
int main()\r
{\r
try\r
{\r
- //PlayerGL pgl;\r
- //shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
- //cout << spPlayer->Name() << endl;\r
- //spPlayer->Name("Kainazzzo");\r
- //pgl.Insert(spPlayer);\r
-\r
- \r
- map <int, int> frequencies;\r
- int x;\r
- for (x = 0; x < 10000; x++)\r
+ PlayerGL pgl;\r
+ shared_ptr<PlayerGO> spPlayer = pgl.GetById("Kain");\r
+ cout << "Name: " << spPlayer->Name() << endl\r
+ << "Level: " << spPlayer->Level() << 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
+ 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
{\r
- Range testrange(-100, 100);\r
- int randnum = testrange.Random();\r
- frequencies[randnum]++;\r
- }\r
- map<int, int>::const_iterator iter;\r
- for (iter = frequencies.begin(); iter != frequencies.end(); iter++)\r
- {\r
- cout << iter->first << ": ";\r
- cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;\r
+ shared_ptr<ItemGO> spItem = (*iter);\r
+ cout << str(format("Name: %1% Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
}\r
+ \r
+\r
+ \r
+ //map <int, int> frequencies;\r
+ //int x;\r
+ //for (x = 0; x < 10000; x++)\r
+ //{\r
+ // Range testrange(-100, 100);\r
+ // int randnum = testrange.Random();\r
+ // frequencies[randnum]++;\r
+ //}\r
+ //map<int, int>::const_iterator iter;\r
+ //for (iter = frequencies.begin(); iter != frequencies.end(); iter++)\r
+ //{\r
+ // cout << iter->first << ": ";\r
+ // cout << (iter->second / (double)(x + 1)) * 100 << '%' << endl;\r
+ //}\r
}\r
catch (GameServException &e)\r
{\r