Author Topic: Quests only being done once?  (Read 2357 times)

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Quests only being done once?
« Reply #15 on: August 17, 2010, 08:52:54 am »


               I highly recommend not using the plot wizard if you can avoid it. Reason being that it creates a bazillion confusing scripts for every quest that you do. You could try using a system that uses the same set of scripts for all or most quests. This way you can also control more easily who gets xp and if you want players to be able to do them again and again or just once or what not.
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #16 on: August 17, 2010, 08:54:32 am »


               Like what then? Since I am only familiar with the plotwizard
               
               

               
            

Legacy_Psyammy

  • Jr. Member
  • **
  • Posts: 83
  • Karma: +0/-0
Quests only being done once?
« Reply #17 on: August 17, 2010, 09:01:03 am »


               ok here is a easy work around for you this is from lilac souls gen and works fine ( this will give documents to every one in party)

//Put this on action taken in the conversation editor
#include "nw_i0_tool"
void main()
{

object oPC = GetPCSpeaker();

RewardPartyXP(0, oPC, TRUE);

RewardPartyGP(0, oPC, TRUE);

CreateItemOnObject("resref of documents ", oPC);

}

and second NPC to finnish

//Put this on action taken in the conversation editor
void main()
{

object oPC = GetPCSpeaker();

object oItem;
oItem = GetItemPossessedBy(oPC, "resref of documents");

if (GetIsObjectValid(oItem))
DestroyObject(oItem);

}

now to reward the player (this goes in second npc if your doing a simple drop off documents type thing, this will give the party XP gold and the item -armor / weapon whatever)


//Put this on action taken in the conversation editor
#include "nw_i0_tool"
void main()
{

object oPC = GetPCSpeaker();

RewardPartyXP(100, oPC, TRUE); // put what ever you want here

RewardPartyGP(100, oPC, TRUE); //put what ever you want here

CreateItemOnObject("resref of item you want to give", oPC);

}

hope this helps in some way
Psyammy
               
               

               


                     Modifié par Psyammy, 17 août 2010 - 08:03 .
                     
                  


            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Quests only being done once?
« Reply #18 on: August 17, 2010, 09:33:10 am »


               Well first off. I'm assuming this is a multiplayer world.
Is this a persistent world?
Do you have a database type item for each player or use the NWN database at all?

There are several ways that people can do this. Their own style.
What I do is first to make sure that the NPC who is giving the quest has the exact same tag as the quest journal entry. This way you can use a universal script that just checks the tag of the NPC speaker and then finds the Journal entry. Then you can do variable checks to see what part of the quest you are on or advance the journal to the next node by increasing the variable.

Super simple quest conversation:

NPC Greeting1: Hello. Can you do me a favor and get me a wolf fur? (starting conditional, checks to see if quest has been started,
--PC Response1: Sure(ActionsTaken: Advance the journal for this quest to the next node, 1)
NPC Greeting2: Did you get the wolf fur?(starting conditional checks to see if journal is on node 1)
--PC Response1: Yes(starting conditional checks for item, ActionsTaken Advance to next Journal node, 2(completed))
------NPC Response1: Thank you so much(ActionsTaken: give xp or gold to who or whatever)
NPC Greeting3: Thanks again for your help(starting condtional checks for journal node 2)

Not sure if that sounds complicated or not but really quests are just Conversations with scripts in the right places, and Journal editing.

I can provide scripts for those places but the ones i use are also used for a PW with a player database item and a persistent journal system that rebuilds when a player logs in. All together I think 6 or 7 scripts for reuse with most quests.

Anyway I hope that was somewhat helpful. I'm half asleep so not sure I even made any sense. haha.

EDIT: If you are still planning on useing the plot wizard though, you should look for the script that it creates, for your specific quest, that has the "AddJournalQuestEntry" function in it. You might see TRUE, FALSE, FALSE at the end of that line for its perameters. Change that first one to FALSE also and the other party members will not get the XP that the plot wizard/jounral entry auto-give when it switches to that node.
               
               

               


                     Modifié par GhostOfGod, 17 août 2010 - 09:02 .
                     
                  


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #19 on: August 17, 2010, 01:24:34 pm »


               Yes it is a persistent world and if you can help me with this then that would be awesome!

and no we don't have a nwndatabase....is that really required?



Well any help would be useful since this is getting rather on my nerves, since this is a multiplayer persistent world
               
               

               
            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Quests only being done once?
« Reply #20 on: August 17, 2010, 09:54:35 pm »


               

no we don't have a nwndatabase....is that really required?

No. I just use an item the players have that they can't drop. Things such as dicebag, autofollow widget, rulebook work perfect for this. You don't need to give them an extra item just for the quests. However some people prefer giving a separate item. This way a DM can take the item away and give them a brandnew one and the player can do the quests over. Totaly up to you.

One other note. I hope that you are working directly with the module and not planning on exporting/importing quests. As far as I know you still can not export the journal and it wold be a pain in the butt for the other person to redo it.

Ok so I suppose we could start with the easiest thing first. We plan the quest out. For this simple example I will use the example already posted above. We'll say an NPC (Betty) needs a wolf pelt.

So let's open up the journal editor first.
-Make sure "Root" is highlighted and click the "Add" icon on the left.
-Now we have a category or a new quest basically. You'll see the different fields for name, tag, priority, XP and comments below. All we're going to worry about is the name and the tag. (If this quest will only be giving XP you can put a value in the xp field and then you can skip the reward script part that we will talk about below) however I've noticed that the amount you put in that field is not always the amount you actuall get. I think that it is altered based on your game difficulty)
-For examples sake we'll name this category/quest Betty's Wolf Pelt.
-For the tag we can call it "BETTY_PELT"(remember this. This will also be the tag of the NPC)
-Click apply.
-Now while the name of the quest is highlighted, click the "Add" icon on the left again.
-We just made the first ID (ID0001)of the quest. Notice the ID, finish category, and text fields below.
-All we need to worry about is the text. This this is the first ID of the quest this will be the part that says we agreed to help Betty find a wolf pelt. So we can just type that in..literaly if you want. "You have agreed to help Betty find a wolf pelt". Now when a player looks at their quest journal they will see this for one of their current quests.
-Now highlight the name of the quest again and click "Add" once more. This will add and ID 0002 node.
-For this quest ID 2 will complete the quest. So we want to check the finish category box and then the text for this one might be, "You gave Betty a wolf pelt. She was so happy she made out with you.";)This will show up in the completed section of the players quest journal.

So that is it for setting up the journal for this particular quest.

Now for the conversation:

You can give the conversation whatever name/tag you want. It won't effect anything.
Note: At the end of the lines i put a three character reference, for the scripts that I will put down below, like "SC1"

NPC Greeting1: Hi there. I was wondering if you could help me find a wolf pelt. I will pay you of course.(Starting conditional, line appears if quest id 1 exist on a database item the player carries, "SC0")
~~PC Response1: Sure I'll get a wolf pelt for you.(ActionsTaken, Add quest ID/Int 1 to database item and journal. Quest has started,"AT1"))
~~~~NPC Response1: Thank you so much. You can find some wolves in the Wild Forest.
~~PC Response2: No way. I love wolfs. I would never hurt one.

NPC Greeting 2: Have you found a wolf pelt for me yet?(Starting conditional, line appears if current quest id is 1,"SC1")
~~PC Response1: Yes I have it right here for you.(starting condtional, line appears only if the player possesses the wolf pet Item, "IC1")(ActionsTaken, advance quest ID/Int to 2 on database item and journal, "AT1")
~~~~NPC Response1: I can finaly finish my coat. Thank you very much and here is your reward...(ActionsTaken, give the player reward, "REW1")
~~PC Response2: I'm sorry no. I haven't found one yet.

NPC Greeting 3: Thanks again for finding that wolf pelt for me.(StartingConditional, line appears when journal ID is 2, "SC2")


And now the scripts:
Note: For all the scripts below I am using the "dmfi_pc_dicebag" as the player database item. Make sure you put in the tag/res ref of whatever item you will use.

First if you want persistence this is what I am currently useing for my persistent journal include type script. You will notice at the bottom it shows you what to add to your mods "OnClientEnter" script:

//:://////////////////////////////////////
// Persistent Journal Include Script.
//:://////////////////////////////////////
// _pw_journal_inc
//
// This version uses an item token carried by the player for persistent storage of
// the journal variables.
//:://////////////////////////////////////
#include "nw_i0_plot"


const string PERSISTENT_JOURNAL_TOKEN_TAG    = "dmfi_pc_dicebag";
const string PERSISTENT_JOURNAL_TOKEN_RESREF = "dmfi_pc_dicebag";


//:://////////////////////////////////////
// object GetPersistentJournalToken( object oPC)
//     Returns the persistent journal token item carried by the specified player. If the
//     player specified is invalid it returns OBJECT_INVALID. If the player is not carrying
//     a persistent journal token item, one is created on him and it is returned.
//:://////////////////////////////////////
// Parameters:  object oPC - the player to retrieve the token from.
//
// Returns: OBJECT_INVALID if oPC is not a valid PC. Otherwise returns the persistent
//          token item he is carrying or the one created on him if he didn't have one.
//:://////////////////////////////////////
object GetPersistentJournalToken( object oPC);
object GetPersistentJournalToken( object oPC)
{ if( !GetIsPC( oPC)) return OBJECT_INVALID;

  object oPJToken = (HasItem( oPC, PERSISTENT_JOURNAL_TOKEN_TAG) ? GetItemPossessedBy( oPC, PERSISTENT_JOURNAL_TOKEN_TAG) : CreateItemOnObject( PERSISTENT_JOURNAL_TOKEN_RESREF, oPC, 1));
  if( GetIsObjectValid( oPJToken))
  { SetItemCursedFlag( oPJToken, TRUE);
    SetPlotFlag( oPJToken, TRUE);
  }
  return oPJToken;
}


//:://////////////////////////////////////
// void AddPersistentJournalQuestEntry( string sCategoryTag, int nEntryID, object oPC, int bAllPartyMembers = TRUE, int bAllPlayers = FALSE, int bAllowOverrideHigher = FALSE)
//        Add a journal entry to a player using the persistent journal system. Works exactly
//        like AddJournalQuestEntry.
//:://////////////////////////////////////
// Parameters: string sCategoryTag         - the journal category tag.
//             int    nEntryID             - the journal entry ID.
//             object oPC                  - the player to have his journal updated.
//             int    bAllPartyMembers     - TRUE to add the entry to oPC's entire party.
//                                           FALSE to add the entry to oPC only.
//             int    bAllPlayers          - TRUE to add the entry to all PCs in the module.
//                                           FALSE to add the entry to oPC only.
//             int    bAllowOverrideHigher - TRUE overrides restriction that nState must be > current Journal Entry.
//                                           FALSE enforces restriction that nState must be > current Journal Entry.
//
// Returns: None.
//:://////////////////////////////////////
void AddPersistentJournalQuestEntry( string sCategoryTag, int nEntryID, object oPC, int bAllPartyMembers = FALSE, int bAllPlayers = FALSE, int bAllowOverrideHigher = FALSE);
void AddPersistentJournalQuestEntry( string sCategoryTag, int nEntryID, object oPC, int bAllPartyMembers = FALSE, int bAllPlayers = FALSE, int bAllowOverrideHigher = FALSE)
{ if( (sCategoryTag == "") || (nEntryID < 0) || !GetIsPC( oPC)) return;

  object oPJToken = GetPersistentJournalToken( oPC);
  if( !GetIsObjectValid( oPJToken)) return;

  if( bAllPlayers)
  { object oPlayer = GetFirstPC();
    while( GetIsPC( oPlayer))
    { AddPersistentJournalQuestEntry( sCategoryTag, nEntryID, oPlayer, FALSE, FALSE, bAllowOverrideHigher);
      oPlayer = GetNextPC();
    }
  }
  else if( bAllPartyMembers)
  { object oParty = GetFirstFactionMember( oPC);
    while( GetIsObjectValid( oParty ))
    { AddPersistentJournalQuestEntry( sCategoryTag, nEntryID, oParty, FALSE, FALSE, bAllowOverrideHigher);
      oParty = GetNextFactionMember( oPC);
    }
  }
  else
  { AddJournalQuestEntry( sCategoryTag, nEntryID, oPC, bAllPartyMembers, bAllPlayers, bAllowOverrideHigher);

    int iEntry = GetLocalInt( oPC, "NW_JOURNAL_ENTRY" +sCategoryTag);
    if( iEntry)
    { SetLocalInt( oPJToken, "NW_JOURNAL_ENTRY" +sCategoryTag, iEntry);

      string sCategories = GetLocalString( oPJToken, "NW_JOURNAL_CATEGORIES");
      string sSearch     = sCategories;
      while( sSearch != "")
      { int iPos = FindSubString( sSearch, "~#~");
        switch( iPos)
        { case -1: if( sSearch == sCategoryTag) return;
                   sSearch = "";
                   break;

          case  0: sSearch = GetStringRight( sSearch, GetStringLength( sSearch) -3);
                   break;

          default: if( GetStringLeft( sSearch, iPos) == sCategoryTag) return;
                   sSearch = GetStringRight( sSearch, GetStringLength( sSearch) -(iPos +3));
                   break;
        }
      }
      sCategories += ((sCategories == "") ? "" : "~#~") +sCategoryTag;
      SetLocalString( oPJToken, "NW_JOURNAL_CATEGORIES", sCategories);
    }
    else DeleteLocalInt( oPJToken, "NW_JOURNAL_ENTRY" +sCategoryTag);
  }
}


//:://////////////////////////////////////
// void RemovePersistentJournalQuestEntry( string sCategoryTag, object oPC, int bAllPartyMembers = TRUE, int bAllPlayers = FALSE)
//        Removes a journal entry from a player using the persistent journal system. Works
//        exactly like RemoveJournalQuestEntry.
//:://////////////////////////////////////
// Parameters: string sCategoryTag         - the journal category tag.
//             int    nEntryID             - the journal entry ID.
//             object oPC                  - the player to have his journal updated.
//             int    bAllPartyMembers     - TRUE to remove the entry from oPC's entire party.
//                                           FALSE to remove the entry from oPC only.
//             int    bAllPlayers          - TRUE to remove the entry from all PCs in the module.
//                                           FALSE to remove the entry from oPC only.
//
// Returns: None.
//:://////////////////////////////////////
void RemovePersistentJournalQuestEntry( string sCategoryTag, object oPC, int bAllPartyMembers = TRUE, int bAllPlayers = FALSE);
void RemovePersistentJournalQuestEntry( string sCategoryTag, object oPC, int bAllPartyMembers = TRUE, int bAllPlayers = FALSE)
{ if( (sCategoryTag == "") || !GetIsPC( oPC)) return;

  object oPJToken = GetPersistentJournalToken( oPC);
  if( !GetIsObjectValid( oPJToken)) return;

  if( bAllPlayers)
  { object oPlayer = GetFirstPC();
    while( GetIsPC( oPlayer))
    { RemovePersistentJournalQuestEntry( sCategoryTag, oPlayer, FALSE, FALSE);
      oPlayer = GetNextPC();
    }
  }
  else if( bAllPartyMembers)
  { object oParty = GetFirstFactionMember( oPC);
    while( GetIsObjectValid( oParty))
    { RemovePersistentJournalQuestEntry( sCategoryTag, oParty, FALSE, FALSE);
      oParty = GetNextFactionMember( oPC);
    }
  }
  else
  { RemoveJournalQuestEntry( sCategoryTag, oPC, bAllPartyMembers, bAllPlayers);
    DeleteLocalInt( oPC, "NW_JOURNAL_ENTRY" +sCategoryTag);
    DeleteLocalInt( oPJToken, "NW_JOURNAL_ENTRY" +sCategoryTag);

    string sCategories = GetLocalString( oPJToken, "NW_JOURNAL_CATEGORIES");
    int iPos = FindSubString( sCategories, "~#~" +sCategoryTag +"~#~");
    if( iPos == -1)
    { iPos = FindSubString( sCategories, sCategoryTag +"~#~");
      if( iPos == -1)
      { iPos = FindSubString( sCategories, "~#~" +sCategoryTag);
        if( iPos == -1) sCategories = ((sCategories == sCategoryTag) ? "" : sCategories);
        else sCategories = GetStringLeft( sCategories, iPos);
      }
      else sCategories = GetStringRight( sCategories, GetStringLength( sCategories) -(GetStringLength( sCategoryTag) +3));
    }
    else sCategories = GetStringLeft( sCategories, iPos) +GetStringRight( sCategories, GetStringLength( sCategories) -(GetStringLength( sCategoryTag) +3));

    if( sCategories == "") DeleteLocalString( oPJToken, "NW_JOURNAL_CATEGORIES");
    else SetLocalString( oPJToken, "NW_JOURNAL_CATEGORIES", sCategories);
  }
}


//:://////////////////////////////////////
// void RestorePersistentJournal( object oPC)
//        Restores a players journal by adding all his journal entries saved on the
//        persistent journal token.
//:://////////////////////////////////////
// Parameters: object oPC - the player to have his journal updated.
//
// Returns: None.
//:://////////////////////////////////////
void RestorePersistentJournal( object oPC);
void RestorePersistentJournal( object oPC)
{ if( !GetIsPC( oPC)) return;

  object oPJToken = GetPersistentJournalToken( oPC);
  if( !GetIsObjectValid( oPJToken)) return;

  string sCategories = GetLocalString( oPJToken, "NW_JOURNAL_CATEGORIES");
  while( sCategories != "")
  { string sCategory = "";
    int iPos = FindSubString( sCategories, "~#~");
    switch( iPos)
    { case -1: sCategory = sCategories;
               sCategories = "";
               break;

      case  0: sCategories = GetStringRight( sCategories, GetStringLength( sCategories) -3);
               break;

      default: sCategory = GetStringLeft( sCategories, iPos);
               sCategories = GetStringRight( sCategories, GetStringLength( sCategories) -(iPos +3));
               break;
    }

    if( sCategory != "")
    { int nEntry = GetLocalInt( oPJToken, "NW_JOURNAL_ENTRY" +sCategory);
      AddJournalQuestEntry( sCategory, nEntry, oPC, FALSE, FALSE, TRUE);
    }
  }
}



// OnClientEnter
//#include "_pw_journal_inc"
//
//void main()
//{ object oEntering = GetEnteringObject();
//  if( !GetIsObjectValid( oEntering)) return;
//
//  RestorePersistentJournal( oEntering);
//}


Next is the script that advances the journal to the next ID and adds/advances an integer variable on a player database item by 1. Adding the separate variable is a way to determine which quest id you are on which we will check in one of the other scripts below "AT1":

//Universal ActionsTaken script. Advances the quest ID by 1 and an integer
//variable on a player database item by 1.
#include "_pw_journal_inc"
void main()
{
object oPC = GetPCSpeaker();
object oItem = GetItemPossessedBy(oPC,"dmfi_pc_dicebag");//Uses item tag.
string sTag = GetTag(OBJECT_SELF);
int iInt = 1 + (GetLocalInt(oItem,sTag));
SetLocalInt(oItem,sTag,iInt);

//Use this line for persistence, if using "_pw_journal_inc", to add journal entry.
AddPersistentJournalQuestEntry(sTag,iInt,oPC,FALSE,FALSE,FALSE);

//Basic NWN fucntion to add journal entry. Non-persistent.
//AddJournalQuestEntry(sTag, iInt, oPC, FALSE, FALSE, FALSE);
}



This starting conditional script is used to check if the quest has been started. "SC0":

int StartingConditional()
{
object oItem = GetItemPossessedBy(GetPCSpeaker(),"dmfi_pc_dicebag");
string sTag = GetTag(OBJECT_SELF);
if (GetLocalInt(oItem,sTag) < 1) return TRUE;
return FALSE;
}



This starting conditional script is used to check if the current quest ID is 1, "SC1":

int StartingConditional()
{
object oItem = GetItemPossessedBy(GetPCSpeaker(),"dmfi_pc_dicebag");
string sTag = GetTag(OBJECT_SELF);
if (GetLocalInt(oItem,sTag) == 1) return TRUE;
return FALSE;
}


This starting conditional script is used to check if the current quest ID is 2, "SC2";

int StartingConditional()
{
object oItem = GetItemPossessedBy(GetPCSpeaker(),"dmfi_pc_dicebag");
string sTag = GetTag(OBJECT_SELF);
if (GetLocalInt(oItem,sTag) == 2) return TRUE;
return FALSE;
}


If you have more parts to your quest you can just keep going with those starting conditionals 3, 4, 5, etc..
Those scripts above are the universal ones. You can use those for all your basic simple quests to advance quest ID's and store the info on a database item.

Now each quest will still have their own unique scripts that pertain to that quest alone. Like the rewards and item possesion checks. So now for the examples of those for this example quest:

First the starting conditional that checks if you have the pelt, "IC1":

int StartingConditional()
{
if (GetItemPossessedBy(oPC, "WOLF_PELT") != OBJECT_INVALID) return FALSE;
return TRUE;
}


And here is an example reward and take item scirpt "REW1":

void main()
{
  object oPC = GetPCSpeaker();
  object oItemTake = GetItemPossessedBy(oPC, "WOLF_PELT);
  GiveXPToCreature(oPC, 1000);
//GiveGoldToCreature(oPC, 1000);
//CreateItemOnObject("resref_of_item", oPC);
  DestoryObject(oItemTake, 0.0);
}


You will also of course need a script that drops the wolf pelt when you kill a wolf or whatever. Can help with that too if you need it.
Well. That is pretty much it. Might look like a lot but really it's easier IMO than using the plot wizard and ending up with like 500 scripts that do pretty much the same thing over and over.
So just make sure you fix up your "OnClientEnter" script for the persistence and make sure you got the right tag/res ref for the database item. Dot your t's and cross yer i's and all that.

I hope this helps ya out and I hope I wasnt too confusing. I also hope I didn't forget anything. Good luck.
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #21 on: August 18, 2010, 05:07:22 am »


               okay...well will try to work this through.

so basically the dmfi dicebag is going to record all that the PC has done right?
               
               

               
            

Legacy_Knight_Shield

  • Hero Member
  • *****
  • Posts: 812
  • Karma: +0/-0
Quests only being done once?
« Reply #22 on: August 19, 2010, 04:54:35 am »


               I havnt tried quests yet but you have explained that excellently.I will give these a try when the time comes.
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #23 on: August 19, 2010, 04:32:48 pm »


               well maybe I am just completely blond but the SC0 script did not compile....said there was an error with a parsin variable list....



what am I doing wrong here?
               
               

               
            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Quests only being done once?
« Reply #24 on: August 19, 2010, 08:10:12 pm »


               Hmm. I just copied it exactly as posted and saved it. It compiled just fine. You are putting it in the "TextAppearsWhen" tab of the conversation? Not the actions taken?
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #25 on: August 20, 2010, 02:33:33 pm »


               okay now it works, I sorta did it in the wrong tab....SILLY ME! XD
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #26 on: August 20, 2010, 02:36:06 pm »


               what I do wonder though, does this allow players doing it multiple times with different toons?
And would all party members get the quest if just one toon acceps tje quest?
               
               

               


                     Modifié par Who said that I, 20 août 2010 - 01:37 .
                     
                  


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #27 on: August 20, 2010, 02:40:36 pm »


               also my other question would be:

I tried compiling the AT1 script though it said that it could not find the #include "_pw_journal_inc"

even I put the script in my oncliententer script.....
               
               

               
            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
Quests only being done once?
« Reply #28 on: August 20, 2010, 08:04:14 pm »


               That really big script I posted is the "_pw_journal_inc". You'll notice at the top it say:

//:://////////////////////////////////////
// Persistent Journal Include Script.
//:://////////////////////////////////////
// _pw_journal_inc

That one you need to save as "_pw_journal_inc" to your mod. You don't put it anywhere since it is an include. It just needs to exist. And at the bottom of this script it shows an example of what to add to your on client enter. So you really only need to add 2 lines to your OnClientEnter. This will update a players journal once they log back in. You'll notice at the top of the script you can also change what item you want to be the journal database item. If you decide you wanted to use another item then you would also have to chage that in the other script that reference that item of course.

Yes people can do the quests with different toons. Since the information is stored on the database object for each character it is unique to that character only.

And no, all party members do not get the quest if one toon accepts it. But you can change that if you want by altering the "_pw_journal_include" script.

I applogize for not explaining some parts better. Hope that helps you.'<img'>
               
               

               


                     Modifié par GhostOfGod, 20 août 2010 - 07:12 .
                     
                  


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
Quests only being done once?
« Reply #29 on: August 21, 2010, 05:01:51 am »


               oooooh! I thought that I had to add it to the oncliententer!! SILLY ME! XD