// PlayerQuestObject.h // Copyright 2009, Sony Online Entertainment Inc., all rights reserved. // Author: Matt Boudreaux #ifndef _INCLUDED_PlayerQuestObject_H #define _INCLUDED_PlayerQuestObject_H //----------------------------------------------------------------------- #include "serverGame/CreatureObject.h" #include "serverGame/TangibleObject.h" class ServerPlayerQuestObjectTemplate; //----------------------------------------------------------------------- class PlayerQuestObject : public TangibleObject { public: virtual ~PlayerQuestObject (); static PlayerQuestObject * createPlayerQuestObjectInCreatureDatapad(CreatureObject * creatureWithDatapad); static PlayerQuestObject * createPlayerQuestObjectInCreatureInventory(CreatureObject * creatureWithInventory); virtual PlayerQuestObject * asPlayerQuestObject(); virtual PlayerQuestObject const * asPlayerQuestObject() const; static void removeDefaultTemplate(void); virtual bool canTrade() const; virtual bool onContainerAboutToLoseItem(ServerObject * destination, ServerObject& item, ServerObject* transferer); virtual bool onContainerAboutToTransfer(ServerObject * destination, ServerObject* transferer); virtual int onContainerAboutToGainItem(ServerObject& item, ServerObject* transferer); virtual void getAttributes (std::vector > &data) const; virtual void onAddedToWorld (); int getTotalTasks(); void getTasks(std::vector & taskVector ); void getTaskCounters(std::vector & counterVector); void getTaskStatus(std::vector & taskStatus); int getTaskStatus(int taskIndex); void addNewTask(std::string title, std::string description, int counterMax, std::string waypoint); void setTaskStatus(int taskIndex, int status); void setQuestTitle(std::string title); std::string const & getQuestTitle(); void setQuestDescription(std::string description); std::string const & getQuestDescription(); void setTaskTitle(int index, std::string title); std::string const & getTaskTitle(int index); void setTaskDescription(int index, std::string description); std::string const & getTaskDescription(int index); void setQuestDifficulty(int difficulty); int getQuestDifficulty(); int getTaskCounter(int index); void setTaskCounter(int index, int value); std::string const & getWaypoint(int index); bool isCompleted() const; void setRecipe(bool recipe); bool isRecipe() const; void addRecipeTaskData(std::string data); void setRecipeTaskData(int index, std::string data); std::string const getRecipeTaskData(int index); void setRewards(std::string data); std::string const & getRewards(); void setCreator(NetworkId const & creator); void resetAllData(); virtual void getByteStreamFromAutoVariable(const std::string & name, Archive::ByteStream & target) const; virtual void setAutoVariableFromByteStream(const std::string & name, const Archive::ByteStream & source); protected: virtual void endBaselines (); virtual void initializeFirstTimeObject(); virtual const SharedObjectTemplate * getDefaultSharedTemplate(void) const; friend class ServerPlayerQuestObjectTemplate; PlayerQuestObject (const ServerPlayerQuestObjectTemplate * playerQuestObjectTemplate); private: PlayerQuestObject & operator = (const PlayerQuestObject & rhs); PlayerQuestObject(const PlayerQuestObject & source); void readInObjVarData(); void saveDataToObjVars(); void checkForCompleted(); void fixObjVarDelimiter(); virtual void onLoadedFromDatabase(); private: static const SharedObjectTemplate * m_defaultSharedTemplate; // template to use if no shared template is given // Auto deltas. Archive::AutoDeltaVector m_tasks; Archive::AutoDeltaVector > m_taskCounters; Archive::AutoDeltaVector m_taskStatus; Archive::AutoDeltaVector m_waypoints; Archive::AutoDeltaVariable m_rewards; Archive::AutoDeltaVariable m_creatorName; Archive::AutoDeltaVariable m_completed; Archive::AutoDeltaVariable m_recipe; Archive::AutoDeltaVariable m_title; Archive::AutoDeltaVariable m_description; Archive::AutoDeltaVariable m_creator; Archive::AutoDeltaVariable m_totalTasks; Archive::AutoDeltaVariable m_difficulty; // Task Titles and Descriptions. Archive::AutoDeltaVariable m_taskTitle1; Archive::AutoDeltaVariable m_taskDescription1; Archive::AutoDeltaVariable m_taskTitle2; Archive::AutoDeltaVariable m_taskDescription2; Archive::AutoDeltaVariable m_taskTitle3; Archive::AutoDeltaVariable m_taskDescription3; Archive::AutoDeltaVariable m_taskTitle4; Archive::AutoDeltaVariable m_taskDescription4; Archive::AutoDeltaVariable m_taskTitle5; Archive::AutoDeltaVariable m_taskDescription5; Archive::AutoDeltaVariable m_taskTitle6; Archive::AutoDeltaVariable m_taskDescription6; Archive::AutoDeltaVariable m_taskTitle7; Archive::AutoDeltaVariable m_taskDescription7; Archive::AutoDeltaVariable m_taskTitle8; Archive::AutoDeltaVariable m_taskDescription8; Archive::AutoDeltaVariable m_taskTitle9; Archive::AutoDeltaVariable m_taskDescription9; Archive::AutoDeltaVariable m_taskTitle10; Archive::AutoDeltaVariable m_taskDescription10; Archive::AutoDeltaVariable m_taskTitle11; Archive::AutoDeltaVariable m_taskDescription11; Archive::AutoDeltaVariable m_taskTitle12; Archive::AutoDeltaVariable m_taskDescription12; // Helper containers to keep access simple. std::vector *> m_taskTitles; std::vector *> m_taskDescriptions; private: void addMembersToPackages(); }; //----------------------------------------------------------------------- inline int PlayerQuestObject::getTotalTasks() { return m_totalTasks.get(); } //----------------------------------------------------------------------- inline void PlayerQuestObject::setQuestTitle(std::string title) { m_title = title; } //----------------------------------------------------------------------- inline std::string const & PlayerQuestObject::getQuestTitle() { return m_title.get(); } //----------------------------------------------------------------------- inline void PlayerQuestObject::setQuestDescription(std::string description) { m_description = description; } //----------------------------------------------------------------------- inline std::string const & PlayerQuestObject::getQuestDescription() { return m_description.get(); } //----------------------------------------------------------------------- inline void PlayerQuestObject::setQuestDifficulty(int difficulty) { m_difficulty = difficulty; } //----------------------------------------------------------------------- inline int PlayerQuestObject::getQuestDifficulty() { return m_difficulty.get(); } //----------------------------------------------------------------------- inline int PlayerQuestObject::getTaskCounter(int index) { return m_taskCounters.get()[index].first; } //----------------------------------------------------------------------- inline std::string const & PlayerQuestObject::getWaypoint(int index) { return m_waypoints.get()[index]; } //----------------------------------------------------------------------- inline bool PlayerQuestObject::isCompleted() const { return m_completed.get(); } //----------------------------------------------------------------------- inline bool PlayerQuestObject::isRecipe() const { return m_recipe.get(); } #endif // _INCLUDED_PlayerQuestObject_H