Here's an example of one of the quests from my module. It loops through the party, giving them the reward, and adds the journal entry. I then have to tweak the OnClientEnter to give them the journal again if they don't already have it. It looks like your text above is suggesting to have a separate script that fires from the OnClientEnter. That way, the quest state and journal entry will always exist, even if the module reloads.
Basically, I have an undroppable item in the PC's inventory that stores all quest states. Some of the script below is using optional checks to increase their rewards based upon successful Persuasion and Intimidate checks as well (rolls 1d20, adds Persuasion & Intimidate, and yes I know Charisma is counted twice). You could get rid of this section, but look at the rest of my logic:
//::///////////////////////////////////////////////
//:: FileName weznor_reward
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 6/29/2002 1:00:21 PM
//:://////////////////////////////////////////////
#include "nw_i0_tool"
#include "nw_o2_coninclude"
#include "color"
void main()
{
object oPC = GetPCSpeaker();
int nPersuade = d20(1) +GetSkillRank(SKILL_PERSUADE, oPC);
int nIntimidate =GetSkillRank(SKILL_INTIMIDATE, oPC);
int nPersuasion = nPersuade+nIntimidate;
string sPersuasion =IntToString(nPersuasion);
AssignCommand(oPC, SpeakString(ColorString("Persuade & Intimidate: Rolled a "+sPersuasion, 210, 105, 30)));
// Give the Party some gold
object oParty =GetFirstFactionMember(oPC);
while (GetIsObjectValid(oParty) == TRUE)
{
object oQuestLog =GetItemPossessedBy(oParty,"APTS_TOKBOX_NODD");
if(GetLocalInt(oQuestLog, "Weznor_Done") !=1)
{
SetLocalInt(oQuestLog,"Weznor_Done",1);
GiveGoldToCreature(oParty, 5000);
GiveXPToCreature(oParty, 2500);
CreateItemOnObject("baneofthedead", oParty);
AddJournalQuestEntry("Weznor_Done", 1, oParty, FALSE, FALSE, FALSE);
//Random Treasure based upon Persuasion & Intimidate
if (nPersuasion > 30)
{
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
}
if ( nPersuasion > 25 & nPersuasion <31)
{
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
}
if (nPersuasion > 18 & nPersuasion <26)
{
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
}
if (nPersuasion > 12 & nPersuasion <19)
{
GenerateHighTreasure(oParty, oParty);
GenerateHighTreasure(oParty, oParty);
}
if (nPersuasion > 8 & nPersuasion <13)
{
GenerateHighTreasure(oParty, oParty);
}
oParty = GetNextFactionMember(oPC);
}
else
oParty = GetNextFactionMember(oPC);
}
// Remove items from the player's inventory
object oItemToTake;
oItemToTake = GetItemPossessedBy(oPC, "WeznorNote");
if(GetIsObjectValid(oItemToTake) != 0)
DestroyObject(oItemToTake);
}