mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-10 06:39:49 +00:00
e1458453f3
Could be observed in TG_OverduePayments quest when talking to Trasteve about Dwemer Artifacts. Info Refusal responses are not specific to any particular topic, so they should not be added to the journal. Trying to do so anyway will cause "unknown id" exceptions because MWDialogue::Entry expects the infoId to be from the Dialogue for the supplied topic.
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
#ifndef GAME_MWBASE_JOURNAL_H
|
|
#define GAME_MWBASE_JOURNAL_H
|
|
|
|
#include <string>
|
|
#include <deque>
|
|
#include <map>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "../mwdialogue/journalentry.hpp"
|
|
#include "../mwdialogue/topic.hpp"
|
|
#include "../mwdialogue/quest.hpp"
|
|
|
|
namespace Loading
|
|
{
|
|
class Listener;
|
|
}
|
|
|
|
namespace ESM
|
|
{
|
|
class ESMReader;
|
|
class ESMWriter;
|
|
}
|
|
|
|
namespace MWBase
|
|
{
|
|
/// \brief Interface for the player's journal (implemented in MWDialogue)
|
|
class Journal
|
|
{
|
|
Journal (const Journal&);
|
|
///< not implemented
|
|
|
|
Journal& operator= (const Journal&);
|
|
///< not implemented
|
|
|
|
public:
|
|
|
|
typedef std::deque<MWDialogue::StampedJournalEntry> TEntryContainer;
|
|
typedef TEntryContainer::const_iterator TEntryIter;
|
|
typedef std::map<std::string, MWDialogue::Quest> TQuestContainer; // topic, quest
|
|
typedef TQuestContainer::const_iterator TQuestIter;
|
|
typedef std::map<std::string, MWDialogue::Topic> TTopicContainer; // topic-id, topic-content
|
|
typedef TTopicContainer::const_iterator TTopicIter;
|
|
|
|
public:
|
|
|
|
Journal() {}
|
|
|
|
virtual void clear() = 0;
|
|
|
|
virtual ~Journal() {}
|
|
|
|
virtual void addEntry (const std::string& id, int index) = 0;
|
|
///< Add a journal entry.
|
|
|
|
virtual void setJournalIndex (const std::string& id, int index) = 0;
|
|
///< Set the journal index without adding an entry.
|
|
|
|
virtual int getJournalIndex (const std::string& id) const = 0;
|
|
///< Get the journal index.
|
|
|
|
virtual void addTopic (const std::string& topicId, const std::string& infoId, const std::string& actorName) = 0;
|
|
|
|
virtual TEntryIter begin() const = 0;
|
|
///< Iterator pointing to the begin of the main journal.
|
|
///
|
|
/// \note Iterators to main journal entries will never become invalid.
|
|
|
|
virtual TEntryIter end() const = 0;
|
|
///< Iterator pointing past the end of the main journal.
|
|
|
|
virtual TQuestIter questBegin() const = 0;
|
|
///< Iterator pointing to the first quest (sorted by topic ID)
|
|
|
|
virtual TQuestIter questEnd() const = 0;
|
|
///< Iterator pointing past the last quest.
|
|
|
|
virtual TTopicIter topicBegin() const = 0;
|
|
///< Iterator pointing to the first topic (sorted by topic ID)
|
|
///
|
|
/// \note The topic ID is identical with the user-visible topic string.
|
|
|
|
virtual TTopicIter topicEnd() const = 0;
|
|
///< Iterator pointing past the last topic.
|
|
|
|
virtual int countSavedGameRecords() const = 0;
|
|
|
|
virtual void write (ESM::ESMWriter& writer, Loading::Listener& progress) const = 0;
|
|
|
|
virtual void readRecord (ESM::ESMReader& reader, int32_t type) = 0;
|
|
};
|
|
}
|
|
|
|
#endif
|