sounds nice!
If it will be single player capable I would love to try it.
If you decide to release the hub and worlds separately then it might be difficult to keep track of variables - you would have to use database for that.
Alternatively you could make the worlds such that their level range restrict that players complete them in order or make a copy of hub area in each chapter (in case of death it would simplify things.
The only way I am restricting level is through the use of keyed transitions. If you were seasoned enough to get the key and survived, you are ready for the next section the key opens up or you should be. There are also places where you may run into an area only to be immediately defeated because you were unprepared and ignored the NPC I had at the start of that area that told you that you weren't ready. Nothing quite like a good death to let you know you aren't ready.
#include "nw_i0_plot"
void main()
{
object oPC = GetPCSpeaker();
string sCamp = GetLocalString(OBJECT_SELF, "Campaign");
string sInt = GetLocalString(OBJECT_SELF, "Integer");
string sQuest = GetLocalString(OBJECT_SELF, "Quest");
string sTag = GetLocalString(OBJECT_SELF, "Item");
int iXP = GetLocalInt(OBJECT_SELF, "XP");
int iGP = GetLocalInt(OBJECT_SELF, "GP");
if(HasItem(oPC, sTag) == TRUE)
{
object oItem = GetObjectByTag(sTag);
DestroyObject(oItem);
GiveXPToCreature(oPC, iXP);
GiveGoldToCreature(oPC, iGP);
SetCampaignInt(sCamp, sInt, 2, oPC);
AddJournalQuestEntry(sQuest, 2, oPC, FALSE, FALSE, FALSE);
}
}
This script is used when the PC returns the item the NPC requested. One script for them all. Persistent data is stored in a database designated by the variables stored locally on a quest object. In this case, that object with database variables is the quest giver.