forked from mirror/openmw-tes3mp
[General] Add optional timestamps to journal entries in PlayerJournal
This commit is contained in:
parent
ea8a41160c
commit
a4b588d1b5
9 changed files with 138 additions and 23 deletions
|
@ -50,6 +50,27 @@ void QuestFunctions::AddJournalEntry(unsigned short pid, const char* quest, unsi
|
||||||
journalItem.quest = quest;
|
journalItem.quest = quest;
|
||||||
journalItem.index = index;
|
journalItem.index = index;
|
||||||
journalItem.actorRefId = actorRefId;
|
journalItem.actorRefId = actorRefId;
|
||||||
|
journalItem.hasTimestamp = false;
|
||||||
|
|
||||||
|
player->journalChanges.journalItems.push_back(journalItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QuestFunctions::AddJournalEntryWithTimestamp(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId,
|
||||||
|
unsigned int daysPassed, unsigned int month, unsigned int day) noexcept
|
||||||
|
{
|
||||||
|
Player *player;
|
||||||
|
GET_PLAYER(pid, player, );
|
||||||
|
|
||||||
|
mwmp::JournalItem journalItem;
|
||||||
|
journalItem.type = JournalItem::ENTRY;
|
||||||
|
journalItem.quest = quest;
|
||||||
|
journalItem.index = index;
|
||||||
|
journalItem.actorRefId = actorRefId;
|
||||||
|
journalItem.hasTimestamp = true;
|
||||||
|
|
||||||
|
journalItem.timestamp.daysPassed = daysPassed;
|
||||||
|
journalItem.timestamp.month = month;
|
||||||
|
journalItem.timestamp.day = day;
|
||||||
|
|
||||||
player->journalChanges.journalItems.push_back(journalItem);
|
player->journalChanges.journalItems.push_back(journalItem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
{"GetKillChangesSize", QuestFunctions::GetKillChangesSize},\
|
{"GetKillChangesSize", QuestFunctions::GetKillChangesSize},\
|
||||||
\
|
\
|
||||||
{"AddJournalEntry", QuestFunctions::AddJournalEntry},\
|
{"AddJournalEntry", QuestFunctions::AddJournalEntry},\
|
||||||
|
{"AddJournalEntryWithTimestamp", QuestFunctions::AddJournalEntryWithTimestamp},\
|
||||||
{"AddJournalIndex", QuestFunctions::AddJournalIndex},\
|
{"AddJournalIndex", QuestFunctions::AddJournalIndex},\
|
||||||
{"AddKill", QuestFunctions::AddKill},\
|
{"AddKill", QuestFunctions::AddKill},\
|
||||||
\
|
\
|
||||||
|
@ -68,7 +69,8 @@ public:
|
||||||
static unsigned int GetKillChangesSize(unsigned short pid) noexcept;
|
static unsigned int GetKillChangesSize(unsigned short pid) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Add a new journal item of type ENTRY to the journal changes for a player.
|
* \brief Add a new journal item of type ENTRY to the journal changes for a player,
|
||||||
|
* with a specific timestamp.
|
||||||
*
|
*
|
||||||
* \param pid The player ID whose journal changes should be used.
|
* \param pid The player ID whose journal changes should be used.
|
||||||
* \param quest The quest of the journal item.
|
* \param quest The quest of the journal item.
|
||||||
|
@ -78,6 +80,22 @@ public:
|
||||||
*/
|
*/
|
||||||
static void AddJournalEntry(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId) noexcept;
|
static void AddJournalEntry(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId) noexcept;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Add a new journal item of type ENTRY to the journal changes for a player,
|
||||||
|
* with a specific timestamp.
|
||||||
|
*
|
||||||
|
* \param pid The player ID whose journal changes should be used.
|
||||||
|
* \param quest The quest of the journal item.
|
||||||
|
* \param index The quest index of the journal item.
|
||||||
|
* \param actorRefId The actor refId of the journal item.
|
||||||
|
* \param The daysPassed for the journal item.
|
||||||
|
* \param The month for the journal item.
|
||||||
|
* \param The day of the month for the journal item.
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
static void AddJournalEntryWithTimestamp(unsigned short pid, const char* quest, unsigned int index, const char* actorRefId,
|
||||||
|
unsigned int daysPassed, unsigned int month, unsigned int day) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Add a new journal item of type INDEX to the journal changes for a player.
|
* \brief Add a new journal item of type INDEX to the journal changes for a player.
|
||||||
*
|
*
|
||||||
|
|
|
@ -60,9 +60,18 @@ namespace MWBase
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor) = 0;
|
/*
|
||||||
|
Start of tes3mp change (minor)
|
||||||
|
|
||||||
|
Make it possible to override current time when adding journal entries, by adding
|
||||||
|
optional timestamp override arguments
|
||||||
|
*/
|
||||||
|
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor, int daysPassed = -1, int month = -1, int day = -1) = 0;
|
||||||
///< Add a journal entry.
|
///< Add a journal entry.
|
||||||
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
||||||
|
/*
|
||||||
|
End of tes3mp change (major)
|
||||||
|
*/
|
||||||
|
|
||||||
virtual void setJournalIndex (const std::string& id, int index) = 0;
|
virtual void setJournalIndex (const std::string& id, int index) = 0;
|
||||||
///< Set the journal index without adding an entry.
|
///< Set the journal index without adding an entry.
|
||||||
|
|
|
@ -93,7 +93,16 @@ namespace MWDialogue
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Journal::addEntry (const std::string& id, int index, const MWWorld::Ptr& actor)
|
/*
|
||||||
|
Start of tes3mp change (minor)
|
||||||
|
|
||||||
|
Make it possible to override current time when adding journal entries, by adding
|
||||||
|
optional timestamp override arguments
|
||||||
|
*/
|
||||||
|
void Journal::addEntry (const std::string& id, int index, const MWWorld::Ptr& actor, int daysPassed, int month, int day)
|
||||||
|
/*
|
||||||
|
End of tes3mp change (major)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
// bail out if we already have heard this...
|
// bail out if we already have heard this...
|
||||||
std::string infoId = JournalEntry::idFromIndex (id, index);
|
std::string infoId = JournalEntry::idFromIndex (id, index);
|
||||||
|
@ -110,6 +119,21 @@ namespace MWDialogue
|
||||||
|
|
||||||
StampedJournalEntry entry = StampedJournalEntry::makeFromQuest (id, index, actor);
|
StampedJournalEntry entry = StampedJournalEntry::makeFromQuest (id, index, actor);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Start of tes3mp addition
|
||||||
|
|
||||||
|
Override the entry's timestamp if provided with valid time arguments
|
||||||
|
*/
|
||||||
|
if (daysPassed != -1 && month != -1 && day != -1)
|
||||||
|
{
|
||||||
|
entry.mDay = daysPassed;
|
||||||
|
entry.mMonth = month;
|
||||||
|
entry.mDayOfMonth = day;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
End of tes3mp addition
|
||||||
|
*/
|
||||||
|
|
||||||
Quest& quest = getQuest (id);
|
Quest& quest = getQuest (id);
|
||||||
quest.addEntry (entry); // we are doing slicing on purpose here
|
quest.addEntry (entry); // we are doing slicing on purpose here
|
||||||
|
|
||||||
|
|
|
@ -39,9 +39,18 @@ namespace MWDialogue
|
||||||
End of tes3mp addition
|
End of tes3mp addition
|
||||||
*/
|
*/
|
||||||
|
|
||||||
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor);
|
/*
|
||||||
|
Start of tes3mp change (minor)
|
||||||
|
|
||||||
|
Make it possible to override current time when adding journal entries, by adding
|
||||||
|
optional timestamp override arguments
|
||||||
|
*/
|
||||||
|
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor, int daysPassed = -1, int month = -1, int day = -1);
|
||||||
///< Add a journal entry.
|
///< Add a journal entry.
|
||||||
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
||||||
|
/*
|
||||||
|
End of tes3mp change (major)
|
||||||
|
*/
|
||||||
|
|
||||||
virtual void setJournalIndex (const std::string& id, int index);
|
virtual void setJournalIndex (const std::string& id, int index);
|
||||||
///< Set the journal index without adding an entry.
|
///< Set the journal index without adding an entry.
|
||||||
|
|
|
@ -723,7 +723,17 @@ void LocalPlayer::addJournalItems()
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (journalItem.type == JournalItem::ENTRY)
|
if (journalItem.type == JournalItem::ENTRY)
|
||||||
|
{
|
||||||
|
if (journalItem.hasTimestamp)
|
||||||
|
{
|
||||||
|
MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound,
|
||||||
|
journalItem.timestamp.daysPassed, journalItem.timestamp.month, journalItem.timestamp.day);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound);
|
MWBase::Environment::get().getJournal()->addEntry(journalItem.quest, journalItem.index, ptrFound);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
MWBase::Environment::get().getJournal()->setJournalIndex(journalItem.quest, journalItem.index);
|
MWBase::Environment::get().getJournal()->setJournalIndex(journalItem.quest, journalItem.index);
|
||||||
}
|
}
|
||||||
|
@ -1455,6 +1465,7 @@ void LocalPlayer::sendJournalEntry(const std::string& quest, int index, const MW
|
||||||
journalItem.quest = quest;
|
journalItem.quest = quest;
|
||||||
journalItem.index = index;
|
journalItem.index = index;
|
||||||
journalItem.actorRefId = actor.getCellRef().getRefId();
|
journalItem.actorRefId = actor.getCellRef().getRefId();
|
||||||
|
journalItem.hasTimestamp = false;
|
||||||
|
|
||||||
journalChanges.journalItems.push_back(journalItem);
|
journalChanges.journalItems.push_back(journalItem);
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,9 @@ namespace mwmp
|
||||||
|
|
||||||
std::string actorRefId;
|
std::string actorRefId;
|
||||||
|
|
||||||
|
bool hasTimestamp;
|
||||||
|
mwmp::Time timestamp;
|
||||||
|
|
||||||
int type; // 0 - An entire entry, 1 - An index
|
int type; // 0 - An entire entry, 1 - An index
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,17 @@ namespace mwmp
|
||||||
SERVER_SCRIPT = 5
|
SERVER_SCRIPT = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Time
|
||||||
|
{
|
||||||
|
float hour;
|
||||||
|
int day;
|
||||||
|
int month;
|
||||||
|
int year;
|
||||||
|
|
||||||
|
int daysPassed;
|
||||||
|
float timeScale;
|
||||||
|
};
|
||||||
|
|
||||||
struct Item
|
struct Item
|
||||||
{
|
{
|
||||||
std::string refId;
|
std::string refId;
|
||||||
|
|
|
@ -34,6 +34,15 @@ void PacketPlayerJournal::Packet(RakNet::BitStream *bs, bool send)
|
||||||
if (journalItem.type == JournalItem::ENTRY)
|
if (journalItem.type == JournalItem::ENTRY)
|
||||||
{
|
{
|
||||||
RW(journalItem.actorRefId, send, true);
|
RW(journalItem.actorRefId, send, true);
|
||||||
|
|
||||||
|
RW(journalItem.hasTimestamp, send);
|
||||||
|
|
||||||
|
if (journalItem.hasTimestamp)
|
||||||
|
{
|
||||||
|
RW(journalItem.timestamp.daysPassed, send);
|
||||||
|
RW(journalItem.timestamp.month, send);
|
||||||
|
RW(journalItem.timestamp.day, send);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!send)
|
if (!send)
|
||||||
|
|
Loading…
Reference in a new issue