mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-30 13:15:32 +00:00
Accept an implicit reference in Journal (Fixes #3135)
This commit is contained in:
parent
ef20962fc5
commit
f315a4386f
6 changed files with 19 additions and 12 deletions
|
@ -50,8 +50,9 @@ namespace MWBase
|
|||
|
||||
virtual ~Journal() {}
|
||||
|
||||
virtual void addEntry (const std::string& id, int index) = 0;
|
||||
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor) = 0;
|
||||
///< Add a journal entry.
|
||||
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
||||
|
||||
virtual void setJournalIndex (const std::string& id, int index) = 0;
|
||||
///< Set the journal index without adding an entry.
|
||||
|
|
|
@ -102,8 +102,8 @@ namespace MWDialogue
|
|||
{}
|
||||
|
||||
StampedJournalEntry::StampedJournalEntry (const std::string& topic, const std::string& infoId,
|
||||
int day, int month, int dayOfMonth)
|
||||
: JournalEntry (topic, infoId, MWWorld::Ptr()), mDay (day), mMonth (month), mDayOfMonth (dayOfMonth)
|
||||
int day, int month, int dayOfMonth, const MWWorld::Ptr& actor)
|
||||
: JournalEntry (topic, infoId, actor), mDay (day), mMonth (month), mDayOfMonth (dayOfMonth)
|
||||
{}
|
||||
|
||||
StampedJournalEntry::StampedJournalEntry (const ESM::JournalEntry& record)
|
||||
|
@ -119,12 +119,12 @@ namespace MWDialogue
|
|||
entry.mDayOfMonth = mDayOfMonth;
|
||||
}
|
||||
|
||||
StampedJournalEntry StampedJournalEntry::makeFromQuest (const std::string& topic, int index)
|
||||
StampedJournalEntry StampedJournalEntry::makeFromQuest (const std::string& topic, int index, const MWWorld::Ptr& actor)
|
||||
{
|
||||
int day = MWBase::Environment::get().getWorld()->getGlobalInt ("dayspassed");
|
||||
int month = MWBase::Environment::get().getWorld()->getGlobalInt ("month");
|
||||
int dayOfMonth = MWBase::Environment::get().getWorld()->getGlobalInt ("day");
|
||||
|
||||
return StampedJournalEntry (topic, idFromIndex (topic, index), day, month, dayOfMonth);
|
||||
return StampedJournalEntry (topic, idFromIndex (topic, index), day, month, dayOfMonth, actor);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,13 +64,13 @@ namespace MWDialogue
|
|||
StampedJournalEntry();
|
||||
|
||||
StampedJournalEntry (const std::string& topic, const std::string& infoId,
|
||||
int day, int month, int dayOfMonth);
|
||||
int day, int month, int dayOfMonth, const MWWorld::Ptr& actor);
|
||||
|
||||
StampedJournalEntry (const ESM::JournalEntry& record);
|
||||
|
||||
void write (ESM::JournalEntry& entry) const;
|
||||
|
||||
static StampedJournalEntry makeFromQuest (const std::string& topic, int index);
|
||||
static StampedJournalEntry makeFromQuest (const std::string& topic, int index, const MWWorld::Ptr& actor);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ namespace MWDialogue
|
|||
mTopics.clear();
|
||||
}
|
||||
|
||||
void Journal::addEntry (const std::string& id, int index)
|
||||
void Journal::addEntry (const std::string& id, int index, const MWWorld::Ptr& actor)
|
||||
{
|
||||
// bail out of we already have heard this...
|
||||
std::string infoId = JournalEntry::idFromIndex (id, index);
|
||||
|
@ -83,7 +83,7 @@ namespace MWDialogue
|
|||
if (i->mTopic == id && i->mInfoId == infoId)
|
||||
return;
|
||||
|
||||
StampedJournalEntry entry = StampedJournalEntry::makeFromQuest (id, index);
|
||||
StampedJournalEntry entry = StampedJournalEntry::makeFromQuest (id, index, actor);
|
||||
|
||||
mJournal.push_back (entry);
|
||||
|
||||
|
|
|
@ -29,8 +29,9 @@ namespace MWDialogue
|
|||
|
||||
virtual void clear();
|
||||
|
||||
virtual void addEntry (const std::string& id, int index);
|
||||
virtual void addEntry (const std::string& id, int index, const MWWorld::Ptr& actor);
|
||||
///< Add a journal entry.
|
||||
/// @param actor Used as context for replacing of escape sequences (%name, etc).
|
||||
|
||||
virtual void setJournalIndex (const std::string& id, int index);
|
||||
///< Set the journal index without adding an entry.
|
||||
|
|
|
@ -22,12 +22,17 @@ namespace MWScript
|
|||
{
|
||||
namespace Dialogue
|
||||
{
|
||||
template <class R>
|
||||
class OpJournal : public Interpreter::Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Interpreter::Runtime& runtime)
|
||||
{
|
||||
MWWorld::Ptr ptr = R()(runtime, false); // required=false
|
||||
if (ptr.isEmpty())
|
||||
ptr = MWBase::Environment::get().getWorld()->getPlayerPtr();
|
||||
|
||||
std::string quest = runtime.getStringLiteral (runtime[0].mInteger);
|
||||
runtime.pop();
|
||||
|
||||
|
@ -37,7 +42,7 @@ namespace MWScript
|
|||
// Invoking Journal with a non-existing index is allowed, and triggers no errors. Seriously? :(
|
||||
try
|
||||
{
|
||||
MWBase::Environment::get().getJournal()->addEntry (quest, index);
|
||||
MWBase::Environment::get().getJournal()->addEntry (quest, index, ptr);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
|
@ -270,7 +275,7 @@ namespace MWScript
|
|||
|
||||
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||
{
|
||||
interpreter.installSegment5 (Compiler::Dialogue::opcodeJournal, new OpJournal);
|
||||
interpreter.installSegment5 (Compiler::Dialogue::opcodeJournal, new OpJournal<ImplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Dialogue::opcodeSetJournalIndex, new OpSetJournalIndex);
|
||||
interpreter.installSegment5 (Compiler::Dialogue::opcodeGetJournalIndex, new OpGetJournalIndex);
|
||||
interpreter.installSegment5 (Compiler::Dialogue::opcodeAddTopic, new OpAddTopic);
|
||||
|
|
Loading…
Reference in a new issue