Author Topic: ECL subrace system?  (Read 1369 times)

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« on: August 19, 2010, 04:59:04 pm »


               Got the following questions for this topic:

1: Is an ECL really required getting a Subrace system? Or can you actually implant that on a player?

2: Can anyone recommend me a good Subrace/ecl system?

Well thanks for the posting!
               
               

               
            

Legacy_Psyammy

  • Jr. Member
  • **
  • Posts: 83
  • Karma: +0/-0
ECL subrace system?
« Reply #1 on: August 20, 2010, 02:31:36 am »


               shayns subrace system is pretty good, and easy to use, as well as makeing your own subs.

http://nwvault.ign.c....Detail&id=2603
               
               

               


                     Modifié par Psyammy, 20 août 2010 - 01:32 .
                     
                  


            

Legacy_Jargh193

  • Newbie
  • *
  • Posts: 36
  • Karma: +0/-0
ECL subrace system?
« Reply #2 on: August 20, 2010, 05:08:42 am »


               Coldblade had a nice system, based on idcilicus (spelling on his name) found at http://nwvault.ign.c...s.Detail&id=300  no need for hak unless you want wings.



But, to answer the ECL question, I know you can turn it off in coldblade script, but when some 1st level character (Astral Diva) is more powerfull then a lvl 20 RDD then you will see why ECL is important.
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #3 on: August 20, 2010, 02:05:38 pm »


               ahhh sounds both very interesting indeed, I just wonder if there is also some sort of lock you could put on it, since I don't want everyone just picking their subrace
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #4 on: August 20, 2010, 04:24:06 pm »


               Okay downloaded Shayans engine BUT after following the instructions carefully it simply doesnt work! THe onenterclient script doesnt compile after I added the Shayan onenter script....
what must I do to solve this? Here is the script I tried to compile....though it keeps giving me a permanent duplication error...

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::: Shayan's Subrace Engine::::::::::::::::::::::::::::::
//:::::::::::::::::File Name: sha_on_cl_enter ::::::::::::::::::::::::::::::::::
//::::::::::::::::::::: OnClientEnter script :::::::::::::::::::::::::::::::::::
//:: Written By: Shayan.
//:: Contact: mail_shayan@yahoo.com
//
// Description: This script is used to check, and load or reload all the subracial
// properties on the PC entering the Module.

#include "sha_subr_methds"
void main()
{
SubraceOnClientEnter();
}
//:://////////////////////////////////////
// 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);
//}


void DisableAllPrestigeclasses(object oPC, int bExistingToo=FALSE)
{
if(bExistingToo || GetLevelByclass(class_TYPE_SHADOWDANCER,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowShadow",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_HARPER,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowHarper",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_ARCANE_ARCHER,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowArcher",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_ASSASSIN,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowAsasin",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_BLACKGUARD,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowBlkGrd",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_DIVINE_CHAMPION,oPC) < 1)
{
SetLocalInt(oPC,"X2_AllowDivcha",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_WEAPON_MASTER,oPC) < 1)
{
SetLocalInt(oPC,"X2_AllowWM",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_PALE_MASTER,oPC) < 1)
{
SetLocalInt(oPC,"X2_AllowPalema",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_SHIFTER,oPC) < 1)
{
SetLocalInt(oPC,"X2_AllowShiftr",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_DWARVEN_DEFENDER,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowDwDef",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_DRAGON_DISCIPLE,oPC) < 1)
{
SetLocalInt(oPC,"X1_AllowDrDis",1);
}
if(bExistingToo || GetLevelByclass(class_TYPE_PURPLE_DRAGON_KNIGHT,oPC) < 1)
{
SetLocalInt(oPC,"DLA_AllowPDK",1);
}
}
void main()
{
ExecuteScript ("cnr_module_oce", OBJECT_SELF);
object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

DelayCommand(1000.0, SendMessageToPC(oPC, "For more information, requests or more go to http://theforgotteni...freeforums.org. Have fun!"));

}

please I really need help with this!
               
               

               
            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
ECL subrace system?
« Reply #5 on: August 20, 2010, 08:38:21 pm »


               Looks like you need a bit of help with inlcudes. Hopefully I can explain this decently.

Basically include scripts just need to BE in your mod. So that you can see it in your list of scripts. You don't put then in other scripts. You just reference them by using the "#include "xxx_xxx_xxx" at the top of a script(above the void main) that needs a function from that include. So when script_x needs to use an include for one of it's functions you need to reference the include script at the top of the script_x.

Your OnClientEnter should look something more like so:

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::: Shayan's Subrace Engine::::::::::::::::::::::::::::::
//:::::::::::::::::File Name: sha_on_cl_enter ::::::::::::::::::::::::::::::::::
//::::::::::::::::::::: OnClientEnter script :::::::::::::::::::::::::::::::::::
//:: Written By: Shayan.
//:: Contact: mail_shayan@yahoo.com
//
// Description: This script is used to check, and load or reload all the subracial
// properties on the PC entering the Module.

#include "_pw_journal_inc"
#include "sha_subr_methds"
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;

//this line used for unknown system
ExecuteScript ("cnr_module_oce", oPC);

//this line added for Shayan's
SubraceOnClientEnter();

//this line added for persistent journal
RestorePersistentJournal(oPC);
}

Although I'm not sure If I left anything out from Shayan's since I don't use it.

Hopefully that helps. Good luck.

P.S. If your using the NWN horses or any other systems that require adding to the OnClientEnter then you will want to add other #include references or execute script lines to this as well.
               
               

               


                     Modifié par GhostOfGod, 20 août 2010 - 09:06 .
                     
                  


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #6 on: August 21, 2010, 05:54:54 am »


               okay now it keeps saying that the string in the PW journal script aint working
pctokentag....saying: FUNCTION DEFINITION NAME

sorry but I simply don't get it apparantly.....
               
               

               


                     Modifié par Who said that I, 21 août 2010 - 04:56 .
                     
                  


            

Legacy_GhostOfGod

  • Hero Member
  • *****
  • Posts: 1490
  • Karma: +0/-0
ECL subrace system?
« Reply #7 on: August 21, 2010, 10:17:25 am »


               No worries. I had to learn too. '<img'> I still got a lot to learn.

Hmm. Not sure what happened. Maybe you didn't save the script with the exact name it needed or missed some characters when copying paste. Maybe accidentaly deleted something.

Also very important! When messing with includes or adding include references to the top of other scripts, you have to make sure that you either recompile any scripts assiciated with that include. Easiest way is to just go up to the "build" tab in the toolset at the top and then click "Build Module" and make sure the compile box is checked. This will auotmtically compile all the script for ya so you don't have to go looking.

But once again here is the "_pw_journal_inc" script. And make sure that
this is saved as "_pw_journal_inc" exactly but withouth the quotes. Also
make sure you do not add or take anything away from this 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);
//}


Good Luck.
               
               

               


                     Modifié par GhostOfGod, 21 août 2010 - 09:23 .
                     
                  


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #8 on: August 21, 2010, 02:12:45 pm »


               alright, should be easy enough I guess.....



anyway I bumped into another thing of Shayan that is bugging me, there is an XPscript in there, when a PC kills a monster it gives a big text telling if the pc is in a party yes or no, if it has NPC's in the party, etc....rather annoying.



Been trying to find out how I can turn it off so only the XP are being shown to the npc...though I have been unsuccesful in that, can anyone help me solve this issue?
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #9 on: August 22, 2010, 07:15:38 am »


               okay think I need more help with the oncliententer script....since all I get are errors....
I don't know what to do anymore since I tried all I could think of...

I managed to compile everything though I cannot put the following code in: 

void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
DelayCommand(1000.0, SendMessageToPC(oPC, "For more information, requests or more go to http://theforgotteni....freeforums.org. Have fun!"));
}
               
               

               


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


            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #10 on: August 22, 2010, 03:25:04 pm »


               okay everything seems to work, beside the whole subrace thing, the DM subrace wand doesnt seem to work and the module keeps saying that its waiting for the module to load, even if I try everything to fix it, I am at my wits end here....if someone can help me with making it all work "correctly" Then I really really REALLY appreciate it...
               
               

               


                     Modifié par Who said that I, 22 août 2010 - 03:18 .
                     
                  


            

Legacy_Taino

  • Sr. Member
  • ****
  • Posts: 268
  • Karma: +0/-0
ECL subrace system?
« Reply #11 on: August 23, 2010, 04:46:32 am »


               What version of SSE are you using?

Also are your testing the subraces? If you are how? Is it by running it out of the toolset or shutting the toolset down and then opening it up on the server end.



Have you tried to find the solotion on the SSE forum?
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #12 on: August 23, 2010, 02:40:22 pm »


               I have set it up, shut down the toolset and ran it on the module



I have asked on the SSE forum but there is almost no one on there anymore it seems, also my game seems to crash each time I play an subrace....
               
               

               
            

Legacy_Who said that I

  • Hero Member
  • *****
  • Posts: 931
  • Karma: +0/-0
ECL subrace system?
« Reply #13 on: August 23, 2010, 02:50:43 pm »


               okay am totally lost with Shayans, I cannot get the wand to work, some of the erf files don't work and some of the subraces don't work properly aswell....seeing that SSE forum doesnt respond. If anyone know of a better subrace system then please let me know....one that does not require a hak please....
               
               

               
            

Legacy_Psyammy

  • Jr. Member
  • **
  • Posts: 83
  • Karma: +0/-0
ECL subrace system?
« Reply #14 on: August 24, 2010, 02:55:45 am »


               shayns works, did you try the demo? was that working? if so you can always copy paste the scripts from the demo in to your mod. (i had to do this) the only prob i have at the moment is that the server keeps relogging me after i take a sub (like it is in a loop or something it relogs me every 5 secs) but the stats are fine, also you have to "turn on" alot of the demo subs, if you llook at the scripts you will see that the stats are mostly commented out. just uncommente them, and once again try the demo. also what vershion (i am useing SSE30) are you useing? and did you place the subrace clock in your mod? i gave you the link to the older copy cuz i could not get the stary nights (the most up to date) to work at all. i had all the probs you are talking about with the more up to date vershion.
               
               

               


                     Modifié par Psyammy, 24 août 2010 - 02:04 .