• 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

Gizmo's, bootstraps, and live state Oh My!

ShadowChemosh

Well-known member
I am getting an error message and have never seen it before but also have never tried this before.

I have a magic Shield that I would like to bootstrap a new ability too but have it only show when at a specific level. The bootstrap works until I put a condition on it then it throws a strange error. I have attached the error image to the post.

Here is the RAW XML of the different Things. But its basically a Magic Shield (iUmGrinSku), with a Heavy Shield as the Gizmo and it is bootstrapping an Ability that is X rounds usable per day. The ability, abUmIPShiF, should only appear after level 3 and when the Custom.iUmGrinSku tag is on the hero.

I have changed the bootstrap, of abUmIPShiF, condition timing from FIRST 99 to 550 and I get the same error. So either its not enough or I am barking up the wrong tree.

Even a point in the direction of what exactly this error means would be helpful.

Code:
<!-- This is Our Magic Shield -->
  <thing id="iUmGrinSku" name="Grinning Skull" compset="MagicArmor">
    <usesource source="PathCCrown"/>
    <tag group="EquipType" tag="Metal"/>
    <tag group="Helper" tag="AlwaysAvl"/>
    <tag group="Custom" tag="iUmGrinSku"/>
    <bootstrap thing="abUmIPShiF">
      <containerreq phase="First" priority="550"><![CDATA[count:Hero.HitDice >= 3 & Custom.iUmGrinSku]]></containerreq>
      </bootstrap>
    <eval phase="First" priority="450"><![CDATA[~If (hero.field[tHitDice].value >=3) Then

~ First check for feat
If (hero.childlives[fIronWill] = 1) Then
 ~ Then check for skill ranks
 If (#skillranks[skKnowRel] >= 4) Then
   ~ If both true then assign tag to Hero
   perform hero.assign[Custom.iUmGrinSku]
 Endif
Endif]]></eval>
    <child entity="wSpecMagic">
      <bootstrap thing="shHvSteel"></bootstrap>
      </child>
    </thing>


<!-- This is the thing we are Bootstrapping to our Magic Shield -->
  <thing id="abUmIPShiF" name="Shield of Force" description="The wielder of Grinning Skull can cause the shield to turn transparent and glow with a holy light for a number of rounds equal to his Charisma modifier (minimum 1). While in effect this ability allows the wielder to add the shield&apos;s total bonus to his AC against attacks from incorporeal creatures.{br}{br}These rounds do not need to be consecutive." compset="Ability">
    <tag group="User" tag="Tracker"/>
    <tag group="AbilType" tag="Super"/>
    <tag group="Helper" tag="ShowSpec"/>
    <eval phase="PostAttr">hero.child[abUmIPShiF].field[trkMax].value = Maximum(#attrbonus[aCHA],1)</eval>
    </thing>

Thanks
 

Attachments

  • Noname.jpg
    Noname.jpg
    17.3 KB · Views: 28
From the error it sounds like a timing issue. Have you messed around with the timing to see if would work at different points?
 
Sigh so it was the timing. It need to be First 1,000 on Condition which is just strange as normally you can't go over 500 but maybe because of the gizmo you have to....
 
I've had this a few times. What's happening is, there is a script on the gizmo that is testing a field before the test on the parent has been determined. For example, if your magic item is looking at the armor bonus of the shield, and the parent (the heavy shield) has not yet run its script to determine the value of its armor bonus, then that gizmo is attempting access something before it has actually been determined (script-wise). My guess is, you are running a condition that looks for a test in First, when that test hasn't been determined yet on the parent (anything after First). Conditions on bootstraps have always been tricky.

So it's a matter of finding the right field or tag to test against that can be done in First because it has already been tested by its parent. So, its not only timing, but also what you test that matters, in that it has to be something that is available during the First phase.
 
Thanks but I am not sure your advice, which is good, applies in this case. There are no scripts on the gizmo or at least none that can be seen inside the editor.

There must be something in the gizmo timming, and the structural files, that is way later then normal bootstrap conditions. Normally you have to be 500 or less to have a bootstrap condition work correctly. I have seen that Mathias likes to use 99 when bootstrapping natural attacks.

So initially didn't think to try anything past 550. In this case it wont matter what I tested for on the bootstrap condition as anything earlier than 1000 caused the above error.

You are correct that when testing for tags and fields trimming is important. Found I could not use #hasfeat[] macro as the tag it checks on the hero is not there at first 450. Which is why I had to use childlives[] instead.
 
Sorry, I said script a few times, if it was a script the script number would have appeared in the error. I meant some test of the thing itself, so the gizmo has something you were trying to access before its value was "filled in". I shouldn't give advice late night... lol. Yeah, it's some structural part of the file then, and it appears you have a firm grasp of what you need to do, so I'll just shut up now. :)

Wait, you are using childlives[] in the bootstrap condition? How'd you get that to work? Give me an example, because I may have learned something new here, as I didn't think I could use normal scripting in the bootstrap condition.
 
Last edited:
Wait, you are using childlives[] in the bootstrap condition? How'd you get that to work? Give me an example, because I may have learned something new here, as I didn't think I could use normal scripting in the bootstrap condition.
Yea I sort of did as I used childlives[] in an Eval script and then based on that logic and some skill ranks I set a tag on to the hero. Then the bootstrap condition checks the TAG and level to see if it should add itself. So its like using childlives[] on a bootstrap condition. :)
 
So need help again to help my player out. This is not fixed actually. It only gets fixed if I do a "Test Now!" on the item. If I do a ctrl-R to reload or restart HL then the error and problem comes back.

I have now gone as high as First 2499, which is as high as I can go, and the error happens if I reload the game system.

So really lost on why it works with no errors if I do a "Test Now!" but not if I do a Reload. :confused: :confused:
 
That's happened to me before too, and I do see some timing issues. Here is where I think the issue is:

Code:
 <eval phase="First" priority="450"><![CDATA[~If (hero.field[tHitDice].value >=3) Then

~ First check for feat
If (hero.childlives[fIronWill] = 1) Then
 ~ Then check for skill ranks
 If (#skillranks[skKnowRel] >= 4) Then
   ~ If both true then assign tag to Hero
   perform hero.assign[Custom.iUmGrinSku]
 Endif
Endif]]></eval>

I understand that you would like to assign the Custom tag here, but there is a problem with the timing. The ranks in a skill are not determined until Pre-Levels/10000 and the first instance of timing that accesses an Iron Will assignment is at First/11000. This may or may not be the case for you, as I don't have access to Pathfinder files to be absolutely sure, but I would right-click the skill and the feat for the Task list and ensure that you are getting the timing after the things you are testing are evaluated. Also, if you are using childlives[] as a condition, that will work, but it will not guarantee that the skill ranks are, in fact, met.

On another note, I've used my conditionals in my bootstrap at timing greater than 550 many times. I've never had any issue with doing so, as long as I keep track of how my timing interacts with any other thing's timing. It is a tricky business, and I wish that conditionals could be applied to thing's after the First phase, but oh well.

Instead of doing it this way, I would make the ability thusly:

Code:
<!-- This is the thing we are Bootstrapping to our Magic Shield -->
  <thing id="abUmIPShiF" name="Shield of Force" description="The wielder of Grinning Skull can cause the shield to turn transparent and glow with a holy light for a number of rounds equal to his Charisma modifier (minimum 1). While in effect this ability allows the wielder to add the shield&apos;s total bonus to his AC against attacks from incorporeal creatures.{br}{br}These rounds do not need to be consecutive." compset="Ability">
    <tag group="User" tag="Tracker"/>
    <tag group="AbilType" tag="Super"/>
    ~ <tag group="Helper" tag="ShowSpec"/> REMOVE THIS
    <eval phase="PostAttr">if (tagis[ShowSpec] <> 0) then ~ ADD THIS 
field[trkMax].value = Maximum(#attrbonus[aCHA],1)
[B]endif[/B]</eval>
    </thing>

Then just bootstrap the ability with no condition, then I would test for the level, skill, and feat at Post-Levels/11500, then do a "perform hero.child[abUmIPShiF].assign[Helper.ShowSpec]" and that should get the same results. When ShowSpec is assigned, that triggers the ability to work, but when it is not assigned, that means the conditions are not met. Hope that works.
 
That's happened to me before too, and I do see some timing issues. Here is where I think the issue is:

Code:
 <eval phase="First" priority="450"><![CDATA[~If (hero.field[tHitDice].value >=3) Then

~ First check for feat
If (hero.childlives[fIronWill] = 1) Then
 ~ Then check for skill ranks
 If (#skillranks[skKnowRel] >= 4) Then
   ~ If both true then assign tag to Hero
   perform hero.assign[Custom.iUmGrinSku]
 Endif
Endif]]></eval>

I understand that you would like to assign the Custom tag here, but there is a problem with the timing. The ranks in a skill are not determined until Pre-Levels/10000 and the first instance of timing that accesses an Iron Will assignment is at First/11000. This may or may not be the case for you, as I don't have access to Pathfinder files to be absolutely sure,
Yea maybe its different in Pathfinder as the above I know works correctly. The ranks seem to be there VERY VERY early in testing just not the skill total. So I am correctly getting the Tag set onto the hero. :)

On another note, I've used my conditionals in my bootstrap at timing greater than 550 many times. I've never had any issue with doing so, as long as I keep track of how my timing interacts with any other thing's timing. It is a tricky business, and I wish that conditionals could be applied to thing's after the First phase, but oh well.
It appears that different Things have different Max timing for the bootstraps. Armor appears to be 2,500 but Adjustments and Natural Attacks seems to be 500 and 99.


Instead of doing it this way, I would make the ability thusly:

Code:
<!-- This is the thing we are Bootstrapping to our Magic Shield -->
  <thing id="abUmIPShiF" name="Shield of Force" description="The wielder of Grinning Skull can cause the shield to turn transparent and glow with a holy light for a number of rounds equal to his Charisma modifier (minimum 1). While in effect this ability allows the wielder to add the shield&apos;s total bonus to his AC against attacks from incorporeal creatures.{br}{br}These rounds do not need to be consecutive." compset="Ability">
    <tag group="User" tag="Tracker"/>
    <tag group="AbilType" tag="Super"/>
    ~ <tag group="Helper" tag="ShowSpec"/> REMOVE THIS
    <eval phase="PostAttr">if (tagis[ShowSpec] <> 0) then ~ ADD THIS 
field[trkMax].value = Maximum(#attrbonus[aCHA],1)
[B]endif[/B]</eval>
    </thing>

Then just bootstrap the ability with no condition, then I would test for the level, skill, and feat at Post-Levels/11500, then do a "perform hero.child[abUmIPShiF].assign[Helper.ShowSpec]" and that should get the same results. When ShowSpec is assigned, that triggers the ability to work, but when it is not assigned, that means the conditions are not met. Hope that works.
Thanks that is a really good alternate method of having the abilities show up correctly at the right level. May go this route if I can't get a solution for the bootstraping. Appreciate it very much. :D

Had hoped Mathias had some ideas. I found THIS older thread for 3.5 legacy weapons has some interesting similar issues. As basically this is a legacy armor that improves as a character levels. Seems having the different check marks next to the "Powers Only Available When Equipped" or the Helper.AlwaysAvl set could be messing with the bootstrap conditions. Will need to try and removing those to see what HL does.

Also found out that Test Now! does have some issues with Bootstrap conditions. So that would explain why the error goes away and works when I do a Test Now! and not when I do a Ctrl-R.
 
I've got my d20 files jumping through hoops by finding innovative ways to use what's available. Of course, it doesn't always work, because of the way HL does things internally or because some timing that I need to be separate happens simultaneously (such as filling out the weapon damage table and outputting said table, wish I could get that put into separate tasks).
 
Sorry I haven't gotten a chance to respond here - I have so much to do on Shadowrun that I haven't had enough time available to study a timing issue - especially a timing issue that's combined with the headaches of live/non-live things.

I'm also of the opinion that live states shouldn't be based on the number of skill ranks - use scripts to disable things, instead. Otherwise, your ability won't activate properly for a race that's using innate ranks, or if the character is getting those ranks from a headband of INT - those are added by scripts, and those scripts can't be moved early enough to be useful for a containerreq.
 
Sorry I haven't gotten a chance to respond here - I have so much to do on Shadowrun that I haven't had enough time available to study a timing issue - especially a timing issue that's combined with the headaches of live/non-live things.
Thanks and no worries. Guess I hoped it was going to be an easy thing but its not. Its so strange how any Test Now! causes everything to work just fine. Very strange.

Its time to go in a different direction as this is not going to work. Going to try out Kendall-DM's idea of just disabling the Powers if things are not correct instead of trying to control the bootstrap.

But way too late and tired to try that big of change tonight. :)
 
So for future readers I did finally find a soultion to the issue. I removed the bootstrap of the Heavy Shield thing on the Gizmo. I then just manually set all the shield values. The error has gone away and everything seems to be working correctly.

Thanks all for the help. :)

Here is the full RAW XML:
Code:
  <thing id="iUmGrinSku" name="Grinning Skull" description="Once owned by Samuel, a cleric of Sarenrae, in the lands of Geb. He carried the shield until his untimely demise several hundred years ago. It was thought lost after the vampire slew him." compset="MagicArmor" uniqueness="unique">
    <fieldval field="BonEnhance" value="1"/>
    <fieldval field="iCL" value="1"/>
    <usesource source="PathCCrown"/>
    <tag group="EquipType" tag="Metal"/>
    <tag group="iSchool" tag="Transmutat"/>
    <tag group="Custom" tag="iUmGrinSku"/>
    <tag group="ShldClass" tag="Heavy"/>
    <tag group="ArmorAC" tag="2"/>
    <tag group="ArmorMaxDx" tag="1000"/>
    <tag group="ArmorCheck" tag="1"/>
    <tag group="ArmorArcFl" tag="15"/>
    <tag group="ArmorClass" tag="Shield"/>
    <tag group="Helper" tag="EquipAvail"/>
    <tag group="Helper" tag="ArtiMinor"/>
    <bootstrap thing="spHaltUnd3">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 10 & Custom.iUmGrinSku]]></containerreq>
      <autotag group="Usage" tag="Day"/>
      <autotag group="Helper" tag="ItemSpell"/>
      <assignval field="trkMax" value="3"/>
      </bootstrap>
    <bootstrap thing="spUndeto6">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 18 & Custom.iUmGrinSku]]></containerreq>
      <autotag group="Usage" tag="Day"/>
      <autotag group="Helper" tag="ItemSpell"/>
      <assignval field="trkMax" value="1"/>
      </bootstrap>
    <bootstrap thing="spDeteUnd1">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 4 & Custom.iUmGrinSku]]></containerreq>
      <autotag group="Usage" tag="Day"/>
      <autotag group="Helper" tag="ItemSpell"/>
      <assignval field="trkMax" value="3"/>
      </bootstrap>
    <bootstrap thing="abUmIPShiF">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 6 & Custom.iUmGrinSku]]></containerreq>
      </bootstrap>
    <bootstrap thing="abUmLifWar"></bootstrap>
    <bootstrap thing="abUmStaSou">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 16 & Custom.iUmGrinSku]]></containerreq>
      </bootstrap>
    <bootstrap thing="abUmSmiUnd">
      <containerreq phase="First" priority="2500"><![CDATA[count:Hero.HitDice >= 12 & Custom.iUmGrinSku]]></containerreq>
      </bootstrap>
    <eval phase="PostLevel" priority="1000" index="2"><![CDATA[~If level 8 and meet requirements then add +1 to weapon

If (herofield[tHitDice].value >=8) Then
   If (hero.tagis[Custom.iUmGrinSku] = 1) Then
      hero.child[iUmGrinSku].field[BonEnhance].value += 1
   Endif
Endif

~If level 14 and meet requirements then add +1 to weapon

If (herofield[tHitDice].value >=14) Then
   If (hero.tagis[Custom.iUmGrinSku] = 1) Then
      hero.child[iUmGrinSku].field[BonEnhance].value += 1
   Endif
Endif

~If level 20 and meet requirements then add +1 to weapon

If (herofield[tHitDice].value >=20) Then
   If (hero.tagis[Custom.iUmGrinSku] = 1) Then
      hero.child[iUmGrinSku].field[BonEnhance].value += 1
   Endif
Endif]]></eval>
    <eval phase="First" priority="2000"><![CDATA[
~ The below checks to see if the character has a specific feat
~ and a specific set of skill ranks. If these are both true
~ then we set a tag on the hero for this specific legendary
~ item. This will tell the bootstrapped conditions that we
~ meet the requirments.

~ First check for feat
If (hero.childlives[fIronWill] = 1) Then
 ~ Then check for skill ranks
 If (#skillranks[skKnowRel] >= 4) Then
   ~ If both true then assign tag to Hero
   perform hero.assign[Custom.iUmGrinSku]
 Endif
Endif]]></eval>
    <child entity="wSpecMagic"></child>
    </thing>
 
Back
Top