I realised that there was never a formal announcement here to read up: The Catara NWN server is offline for quite some time now, due to time constraints. I might revive it someday, but it is pretty unlikely. If anyone wants to use our custom classes or tools, ping me on twitter (@jollyorc) and we can see what we can do for you! In the meantime, I do recommend The World of Avlis: https://avlis.org/
Mistcallers Quest Framework
  • Reminder for myself, so I don't need to search for it each time.
    A new quest is easily set-up. It needs a NPC with a conversation and the following variables attached:

    qClassY(String):

    Same as qClassOne,Two etc, but now Y is an integer starting at 1. Any number of classes can be specified. For old quests, there is an automatic mapping of qClassOne -> qClass1, qClassTwo->qClass2, etc.

    Default Value: ""
    qDeity(String):

    Only those with the same Deity field can take the quest. Leave it empty or use "Any" if its for everyone.

    Default Value: ""
    qFrequency(Int):

    Insert the period of time you want the quest to be reset for each PC in RL days. Zero means its always on. -1 means its doable only once.

    Default Value: 0
    qMaxLevel(Int):

    PCs with Hit dice higher than this number cannot take the quest.

    Default Value: 0 (unlimited)
    qMaxXPLevel(Int):

    PCs with Hit dice higher than this number do not take XP when they complete the quest.

    Default Value: 0 (unlimited)
    qMinLevel(Int) :

    PCs with Hit dice lower than this number cannot take the quest.

    Default Value: 0
    qNumberOfTimes(int):

    Number of times to repeat the quest until it is considered succesful.

    Default: 0 (Unlimited)
    qQuestName(String):

    Unique name for the quest. This is used to generate the variable stored in the database.

    Mandatory
    qQuestObjectiveX(Structure):

    Info about the items requested. X is a series of integers (one for each item) starting at 1.

    Each entry should be consisting of at least 4 fields separated by a vertical slash (|).

    These fields are:

    sItemTag (string) : Tag of requested Item. Mandatory
    nQuantity (int): How many are required as minimum to be accepted(Not specifying a quantity defaults it to 1.)
    nXP (int): Total XP reward per min quantity requested.Default Value: 0
    nGold (int): Total Gold reward per min quantity requested. Default Value: 0
    Reward Item (string): ResRef of item to be given as a reward.(optional). Default Value: ""


    qReturnMethod(String):

    This option takes two inputs (OR or AND[default]). If it is AND then the system requires all items requested be turned into, while OR is satisfied even with one of them types.

    If you use AND, then in qQuestObjective, you can fill in the xp and gold or item reward to only one of them.

    Default Value: AND

    Of course, all referenced items should exist in the palette. The QuestObjective items need to be obtainable somewhere in the module. Either as a reward or loot from some other quest/encounter, or harvest- or buyable.
    Each quest giver should have the qst_onspawn attached to his OnSpawn event. This script initializes the variables.The system does not work without this.
  • You can grab a sample conversation with the relevant scripts already attached here:
    http://catara.orkpiraten.de/files/qst1_generic.zip
    There are some includes and such missing, you'll probably not be able to test it (It needs the db anyway). Do NOT alter the basic layout of the conversation branches. The order, especially of the NPC parts is important, things won't work when it is messed up.
    This quest framework is useful for all types of quests where items are to be brought to a NPC. These items can be drops from other critters, harvestable items, basically anything.
  • Oops - my bad: The OnSpawn event should be qst_onspawn.
    Also, please always include an npc_hide on the creature hide.
  • qQuestObjectiveX(Structure)...How do you set this structure variable?
  • It's a string variable, with the different parts seperated by a | (That's the pipe-character, not a small L)
    So you set the variable name to, for example, "qQuestObjective1", the type to "String", and the value to "sItemTag|1|10|20|sRewardItemResRef", to look for 1 item of sItemTag, hand out 10 XP and 20 gold along with a copy of sRewardItemResRef"

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!