• Please note: In an effort to ensure that all of our users feel welcome on our forums, we’ve updated our forum rules. You can review the updated rules here: http://forums.wolflair.com/showthread.php?t=5528.

    If a fellow Community member is not following the forum rules, please report the post by clicking the Report button (the red yield sign on the left) located on every post. This will notify the moderators directly. If you have any questions about these new rules, please contact support@wolflair.com.

    - The Lone Wolf Development Team

Help with Custom Spell List

So, I try changing the eval script to add an exclusion of the specific spells, by
Code:
field[cSpellExpr].text = "(sClass.cHelpMag & !(sSchool.Divination | sSchool.Illusion | sSchool.Enchant)) | (sSchool.Conjur & sSubschool.Healing & (ClsDenySp.spLifeCon1 | ClsDenySp.spRejuEid1 | ClsDenySp.spLeResEi2 | ClsDenySp.spLifeCon3 | ClsDenySp.spRejuEid3 | ClsDenySp.spRestEid3 | ClsDenySp.spPuriCal4 | ClsDenySp.spGrLifCo5 | ClsDenySp.spRejuEid5)) & !Helper.Obsolete"
My thought was that ClsDenySP would be my ticket, but I get this error
Code:
Hero Lab was forced to stop compilation after the following errors were detected:

Syntax error in 'eval' script for Thing 'cHelpRBM' (Eval Script '#2') on line 1
  -> Non-existent field 'ClsDenySp' used by script

Back to the starting board....

I next try just putting the spells in as !(spSpell1 | spSpell2 | etc...) In various positions in the previous expression.

Code:
field[cSpellExpr].text = "!(spLifeCon1 | spRejuEid1 | spLeResEi2 | spLifeCon3 | spRejuEid3 | spRestEid3 | spPuriCal4 | spGrLifCo5 | spRejuEid5)) | (sClass.cHelpMag & !(sSchool.Divination | sSchool.Illusion | sSchool.Enchant)) | (sSchool.Conjur & sSubschool.Healing & !Helper.Obsolete"

It compiles, I go to check my spell list and I see every option under the sun, (custom scrolls and riffle scrolls?) as I close the Spell selection, I get this error

Code:
Syntax error in dynamic 'candidate' tag expression

Where am I going wrong, What am I missing, and what does Helper.Obsolete do?

Helper.Obsolete is a tag applied to things which are, funnily enough, obsolete. Thus they aren't normally addable and shouldn't be selectable in a chooser either. It's used for things like "Oops, we created three different adjustments for age when we can do that with a single adjustment. We don't want to break old characters, so Obsolete the old versions of the adjustment so they can't be added anymore but they continue to function just fine. Since the new version isn't obsoleted, all future characters will use it instead."

With the huge number of books that reprint spells, we sometimes duplicate those as well, so spells are another place where Helper.Obsolete is something you have to be aware of.

As for your compile error, I see in the code you posted that you opened a "(" near the end but didn't close it.
 
Let's break the tag expression I gave you down by pieces:

(sClass.cHelpMag & !(sSchool.Divination | sSchool.Illusion | sSchool.Enchant))

The above means "The matching thing must have the Magus spells tag and NOT the School tags for Divination or Illusion or Enchantment"

|

The above means "Or" or in context "Or if it didn't match the previous set of conditions..."

(sSchool.Conjur & sSubschool.Healing)

The above means "The matching thing must have both the Conjuration school tag and the Healing subschool tag"

& !Helper.Obsolete

The above means "AND even if either of the previous are true, the matching thing must NOT have the Helper.Obsolete tag"

If you want to exclude specific spells you can simply add more AND NOTs onto the end of the tag expression, for example:

& !Helper.Obsolete & !thingid.spRejuEid1 & !thingid.spRejuEid3 & !thingid.spRejuEid5

That will work fine for a small number of specific exclusions, but there is a limit to how many characters the field which stores the spell expression has, so I wouldn't try to exclude a lot of specific spells by name. Better if you can exclude them by group. For example, Summoners don't have many healing spells (that I know of anyway), so you could add an exclusion to the earlier part. In effect, changing "The matching thing must have both the Conjuration school tag and the Healing subschool tag" to add "But it can't be a summoner spell".
 
Big old light bulb going off there, Aaron. and I figured three points of failure.

  1. Coder Fail: I lost track of my parentheses
  2. Logic Fail: I was using "|" in a chain instead of individual "&!"
  3. Word-thingy Fail: I was using the Unique ID's without the canidate "thingid." tag in front of it.

Armed with more knowledge I trudge onward to victory! I hope.

And Success!

Code:
          field[cSpellExpr].text = "(sClass.cHelpMag & !(sSchool.Divination | sSchool.Illusion | sSchool.Enchant)) | (sClass.cHelpClr & (sSchool.Conjur & sSubschool.Healing)) & !Helper.Obsolete & !sLevel.7 & !sLevel.8 & !sLevel.9"

Which Should mean, For my class list, give me "All Magus Spells that are not from the Divination, Illusion, or Enchantment Schools", All Cleric spells of the Conjuration(Healing)Subschool, No Obsolete Spells, nor Spells of levels 7, 8 or 9.

I realized that by using A Specific School, I was pulling from every spell list that has healing spells and getting the duplicated spells at different spell levels. taking the time to exclude all of those would be too much to put into the eval script.
Saying Not Summoner removed some of the Conjuration Healing spells I wanted (Restoration Line) because they were on the Summoner list, not just removing spells unique to the Summoner lists. And If I did remove the uniques, Then I would have to do that for Paly, Bard, and Druid (which gets slower heal access)
 
Last edited:
Back
Top