====== Using the Journal ======
===== Using the Journal Editor =====
**This is not recommended and not an option on Sinfar's main servers.**
\\ \\
But if you are a server admin and really want to:
- Create / Modify your **module** journal: \\ {{:building:journal_20190416-014820.png?400}}
- Upload it in your top haks section of your server's config page: \\ {{:building:journal_20190416-014851.png?600}}
- Use the default scripting functions:AddJournalQuestEntry("Category000", 1, oPC)
It will work but it is bad:
* The module's journal can get very big (you can only have one)
* Changing the module's journal can break existing quests / entries
* It is not persistent (The entries will get cleared on a server reset)
* ...
===== Standalone Scripting Functions =====
Sinfar has scripting functions that let you add and remove entries from a player character's journal, without having to use the journal editor:
void JournalAddQuest(object oPlayer, string sPlotId, string sTitle, string sText, int nState, int nPriority, int bCompleted, int nCalendarDay, int nTimeOfDay);
void JournalRemoveQuest(object oPlayer, string sPlotId);
void NotifyJournalUpdated(object oPlayer, string sMesssage, int bIsQuest=TRUE, int bIsCompleted=FALSE);
There's also an event: 0_init_journal ... that gets called when a PC journal should be initialized.
\\ \\
It is good if you want to get your hands dirty but you will have to handle manually the following:
* The persistence (the entries will be cleared when the PC logs out)
* Getting the current entries (There's no functions to get the currently added entries / quests)
===== Sinfar's Persistent Journal System =====
This system provide higher levels functions so that the added quests be persistent and you can query them. It is in this ERF: [[https://nwn.sinfar.net/res_list.php?erf_id=847]]
\\ \\
All functions are in this include script: [[https://nwn.sinfar.net/res_nss_edit.php?name=jrl_include]]
\\ \\
For example:
#include "jrl_include"
void main()
{
object oPC = OBJECT_SELF;
struct JournalEntry jrlEntry = JRL_GetQuest(oPC, "TEST_QUEST001");
if (jrlEntry.nState > 10)
{
JRL_RemoveQuest(oPC, "TEST_QUEST001");
}
else
{
if (jrlEntry.sTitle == "") //oPC is not yet doing this quest
{
NotifyJournalUpdated(oPC, "TEST_QUEST001 has been added to your journal!!");
jrlEntry.sTitle = "Quest 001";
jrlEntry.sText = "Quest Started";
}
else
{
if (jrlEntry.nState > 5)
{
jrlEntry.sTitle = "Quest 001 - Completed";
jrlEntry.sText = "Quest Completed!!!";
jrlEntry.bCompleted = TRUE;
}
else
{
jrlEntry.sText = "Quest In Progress";
}
jrlEntry.nState++;
}
JRL_AddOrUpdateQuest(oPC, jrlEntry);
}
}