• 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

I am a Script Noob...

LordValerius

Active member
...when it comes to trying to script things in HL that I would like to script. I have a question and I think I know the answer, but figured I would ask anyway on the off chance I am wrong.

Is it possible to script a Wondrous Item that gives a +1 enhancement bonus to Strength, but does not actually modify the Strength Score, only the carrying capacity? In other words, when wearing the item, your carrying capacity is equal to 1 Strength score better than current, but does not modify any other aspect of the Strength score.

Thanks!

Val
 
That's be tricky, but possible. You'll want to...

Find the value of strength +1, and use that in the encumberance calculations (don't forget to check for a tag for quadraped and adjust for size) to find out what your new encumberance should be. You'll want to break it down into light medium and heavy limit.

Then compare each of those to the hero fields "tEncumLgt", "tEncumMed", and "tEncumHvy" to find the difference for each. Then add that difference to the hero fields (so that it now matches your calculated value). I'd say add rather than set equal to so later calculations can easily adjust further.

Clear as mud?
 
=)

Heh, yep, total mud. I suck at this scripting language. I've muddled through with simple stuff using examples I've found, etc. The character has a current Strength of 12. Examining the carrying capacity chart, it seems a +1 Strength bonus would increase each as follows; Light by 7 lbs., Medium by 14 lbs. and Heavy by 20 lbs.

What you have suggested...is this to be done with an Eval Script or Bootstrap? I'm not too good on finding the id's you'd mentioned...as I said, I suck at this. Trying to understand it so I don't have to ask so many questions. And I hate being a noob. LOL Is there a more definitive guide or place to learn this Editor other than the brief Editor Help File?

Any further clarification would be greatly appreciated.

Thanks!

Val
 
Last edited:
It'd be an eval script. Looking at the encumberance table there doesn't seem to be a set formula for max weight, which will make things tedious. Here is a rough sketch of the eval,

var newstr as number
var newmaxwt as number
var newmedwt as number
var newlitwt as number

~ If we have enhancement bonus 1 or higher, we don't stack, so stop now.
doneif (hero.child[aSTR].field[BonEnhance].value >= 1)

~ Get our strength +1
newstr = hero.child[aSTR].field[aFinalVal].value + 1

~ Generate our new max encumberance, this is annoying
if (newstr = 29) then
newmaxwt = 1400
elseif (newstr = 28) then
newmaxwt = 1200
~ On and on until newstr = 2, just following the table

~ If we are quadrapedal we multiply by one factor based on size...
if (hero.tagis[Helper.Quadraped] <> 0) then

~ If we are Colossal for example it is x24
if (herofield[tSize].value >= 4) then
newmaxwt *= 24

~ If we are gargantuan...
elseif (herofield[tSize].value = 3) then
newmaxwt *= 12

~ and down through all the sizes
BLAHBLAH
endif
~ now we need to check for non-quadraped and do the same
elseif (hero.tagis[Helper.Quadraped] = 0) then
~ If we are Colossal for example it is x16
if (herofield[tSize].value >= 4) then
newmaxwt *= 16

~ If we are gargantuan...
elseif (herofield[tSize].value = 3) then
newmaxwt *= 8

BLAHBLAH
endif
endif

~ Now that we have the max wt, we need to define out medium encumberance and light encumberance limits. Fortunately they are merely 2/3 and 1/3 of our max, rounded down to the nearest pound.

newmedwt = round(newmaxwt *.66, 0, -1)
newlitwt = round(newmaxwt *.33, 0, -1)

~ Now compare our values to the current encumberance values and adjust them up
var diff as number

diff = newmaxwt - herofield[tEncumHvy].value
herofield[tEncumHvy].value += diff

diff = newmedwt - herofield[tEncumMed].value
herofield[tEncumMed].value += diff

diff = newlitwt - herofield[tEncumLgt].value
herofield[tEncumLgt].value += diff
 
Agreed, the encumbrance table is weird stuff, there is a formula, but the book doesn't adhere to it. You can carry more (relatively) at Str 10 than you can at Str 19. According to the formula, +10 to Str should be 4 times the value of the Str at 10 less. So at Str 10 thru 19 you can carry progressively less weight until you hit Str 20, where everything magically meets the formula. Crazy math, needs to go into Murphy's Law (of Gaming, if anyone remembers that from way back).
 
I would be nice if the code was the same as it is for Pathfinder. If you look under Backpack, Master work the code is basically one line.

Code:
if (field[gIsEquip].value <> 0) then
  herofield[tEncumSTR].value += 1
  endif
 
Gah

Ok, thanks for the assist...question....and please forgive my lack of scripting knowledge...but I am trying to understand what number this is...

~ If we are Colossal for example it is x24
if (herofield[tSize].value >= 4) then
newmaxwt *= 24

Mostly understanding the rest of it, but this number confuses me even more. Once I know what that number represents, I should be able to work out the rest....I hope. LOL

Thanks!

Val
 
Character size in d20 is stored as a number.

-1 = small
0 = medium
4 = colossal

(Of course I left out a few numbers, but you can see how the progression works)
 
Thank you very much!

Val

Edit: Seems it doesn't like the "helper.quadraped" statement....States it is not defined...Is this a tag I have to add to the item?
 
Last edited:
Hero Lab is a case sensitive language. So helper.quadraped is not the same as Helper.Quadraped.

My bad for not capping it in my description of the problem, but it is properly capped in the script. Error states ->tag 'Helper.Quadraped' not defined.

Val
 
Last edited:
My bad for not capping it in my description of the problem, but it is properly capped in the script. Error states ->tag 'Helper.Quadraped' not defined.

Val
LOL try Helper.Quadruped I mean its not getting raped. :p :D

That is what I get for trusting Lawful_g and doing a Copy/Paste. :)
 
Bah, well that fixed the error I was getting but the item doesn't seem to add the increase at all..and it is most likely due to my inability to understand parts of the language...Not sure if I am supposed to be changing any of the script as written in the example...such as lines like 'var newstr as number' and etc. I did type out all the size and quadrUped info as directed, but some of those lines, I just don't understand. This is what I have so far...See any glaring problems? Besides what I probably didn't understand and left in when I shouldn't have? Heh.

doneif (field[gIsEquip].value = 0)

var newstr as number
var newmaxwt as number
var newmedwt as number
var newlitwt as number

~ If we have enhancement bonus 1 or higher, we don't stack, so stop now.
doneif (hero.child[aSTR].field[BonEnhance].value >= 1)

~ Get our strength +1
newstr = hero.child[aSTR].field[aFinalVal].value + 1

~ Generate our new max encumberance...
if (newstr = 29) then
newmaxwt = 1400
elseif (newstr = 28) then
newmaxwt = 1200
elseif (newstr = 27) then
newmaxwt = 1040
elseif (newstr = 26) then
newmaxwt = 920
elseif (newstr = 25) then
newmaxwt = 800
elseif (newstr = 24) then
newmaxwt = 700
elseif (newstr = 23) then
newmaxwt = 600
elseif (newstr = 22) then
newmaxwt = 520
elseif (newstr = 21) then
newmaxwt = 460
elseif (newstr = 20) then
newmaxwt = 400
elseif (newstr = 19) then
newmaxwt = 350
elseif (newstr = 18) then
newmaxwt = 300
elseif (newstr = 17) then
newmaxwt = 260
elseif (newstr = 16) then
newmaxwt = 230
elseif (newstr = 15) then
newmaxwt = 200
elseif (newstr = 14) then
newmaxwt = 175
elseif (newstr = 13) then
newmaxwt = 150
elseif (newstr = 12) then
newmaxwt = 130
elseif (newstr = 11) then
newmaxwt = 115
elseif (newstr = 10) then
newmaxwt = 100
elseif (newstr = 9) then
newmaxwt = 90
elseif (newstr = 8) then
newmaxwt = 80
elseif (newstr = 7) then
newmaxwt = 70
elseif (newstr = 6) then
newmaxwt = 60
elseif (newstr = 5) then
newmaxwt = 50
elseif (newstr = 4) then
newmaxwt = 40
elseif (newstr = 3) then
newmaxwt = 30
elseif (newstr = 2) then
newmaxwt = 20
elseif (newstr = 1) then
newmaxwt = 10
endif

if (hero.tagis[Helper.Quadruped] <> 0) then

if (herofield[tSize].value >= 4) then
newmaxwt *= 24

elseif (herofield[tSize].value >= 3) then
newmaxwt *= 12

elseif (herofield[tSize].value >= 2) then
newmaxwt *= 6

elseif (herofield[tSize].value >= 1) then
newmaxwt *= 3

elseif (herofield[tSize].value >= 0) then
newmaxwt *= 1.5

elseif (herofield[tSize].value >= -1) then
newmaxwt *= 1

elseif (herofield[tSize].value >= -2) then
newmaxwt *= .75

elseif (herofield[tSize].value >= -3) then
newmaxwt *= .50

elseif (herofield[tSize].value >= -4) then
newmaxwt *= .25

endif

if (hero.tagis[Helper.Quadruped] = 0) then

if (herofield[tSize].value >= 4) then
newmaxwt *= 16

elseif (herofield[tSize].value >= 3) then
newmaxwt *= 8

elseif (herofield[tSize].value >= 2) then
newmaxwt *= 4

elseif (herofield[tSize].value >= 1) then
newmaxwt *= 2

elseif (herofield[tSize].value >= 0) then
newmaxwt *= 0

elseif (herofield[tSize].value >= -1) then
newmaxwt *= .75

elseif (herofield[tSize].value >= -2) then
newmaxwt *= .50

elseif (herofield[tSize].value >= -3) then
newmaxwt *= .25

elseif (herofield[tSize].value >= -4) then
newmaxwt *= .125

endif
endif

~ Now that we have the max wt, we need to define out medium encumberance and light encumberance limits. Fortunately they are merely 2/3 and 1/3 of our max, rounded down to the nearest pound.

newmedwt = round(newmaxwt *.66, 0, -1)
newlitwt = round(newmaxwt *.33, 0, -1)

~ Now compare our values to the current encumberance values and adjust them up
var diff as number

diff = newmaxwt - herofield[tEncumHvy].value
herofield[tEncumHvy].value += diff

diff = newmedwt - herofield[tEncumMed].value
herofield[tEncumMed].value += diff

diff = newlitwt - herofield[tEncumLgt].value
herofield[tEncumLgt].value += diff

endif
 
You didn't note what phase & priority you are running this script at.

Also, there's a code button among the advanced reply options on this forum - it looks like a "#" - if you post something as code, that preserves the formatting, like indentations. Seeing the indentations you've used would be very helpful in tracking where your ifs and endifs match up.

(You can edit existing posts)

(I think there may be some mis-placed if/endifs among the quadruped section, but I can't quite tell - the quadruped = 0 part may be within the quadruped <> 0 portion).
 
Code

Hmm..Used the Code function in Advanced, but it looks the same to me...As far as Phase and Timing goes...that's a whole different issue...Blah...I think I had it set at Phase - Post Attributes, no specific timing,

Code:
doneif (field[gIsEquip].value = 0)

var newstr as number
var newmaxwt as number
var newmedwt as number
var newlitwt as number

~ If we have enhancement bonus 1 or higher, we don't stack, so stop now.
doneif (hero.child[aSTR].field[BonEnhance].value >= 1)

~ Get our strength +1
newstr = hero.child[aSTR].field[aFinalVal].value + 1

~ Generate our new max encumberance...
if (newstr = 29) then
newmaxwt = 1400
elseif (newstr = 28) then
newmaxwt = 1200
elseif (newstr = 27) then
newmaxwt = 1040
elseif (newstr = 26) then
newmaxwt = 920
elseif (newstr = 25) then
newmaxwt = 800
elseif (newstr = 24) then
newmaxwt = 700
elseif (newstr = 23) then
newmaxwt = 600
elseif (newstr = 22) then
newmaxwt = 520
elseif (newstr = 21) then
newmaxwt = 460
elseif (newstr = 20) then
newmaxwt = 400
elseif (newstr = 19) then
newmaxwt = 350
elseif (newstr = 18) then
newmaxwt = 300
elseif (newstr = 17) then
newmaxwt = 260
elseif (newstr = 16) then
newmaxwt = 230
elseif (newstr = 15) then
newmaxwt = 200
elseif (newstr = 14) then
newmaxwt = 175
elseif (newstr = 13) then
newmaxwt = 150
elseif (newstr = 12) then
newmaxwt = 130
elseif (newstr = 11) then
newmaxwt = 115
elseif (newstr = 10) then
newmaxwt = 100
elseif (newstr = 9) then
newmaxwt = 90
elseif (newstr = 8) then
newmaxwt = 80
elseif (newstr = 7) then
newmaxwt = 70
elseif (newstr = 6) then
newmaxwt = 60
elseif (newstr = 5) then
newmaxwt = 50
elseif (newstr = 4) then
newmaxwt = 40
elseif (newstr = 3) then
newmaxwt = 30
elseif (newstr = 2) then
newmaxwt = 20
elseif (newstr = 1) then
newmaxwt = 10
endif

if (hero.tagis[Helper.Quadruped] <> 0) then

if (herofield[tSize].value >= 4) then
newmaxwt *= 24

elseif (herofield[tSize].value >= 3) then
newmaxwt *= 12

elseif (herofield[tSize].value >= 2) then
newmaxwt *= 6

elseif (herofield[tSize].value >= 1) then
newmaxwt *= 3

elseif (herofield[tSize].value >= 0) then
newmaxwt *= 1.5

elseif (herofield[tSize].value >= -1) then
newmaxwt *= 1

elseif (herofield[tSize].value >= -2) then
newmaxwt *= .75

elseif (herofield[tSize].value >= -3) then
newmaxwt *= .50

elseif (herofield[tSize].value >= -4) then
newmaxwt *= .25

endif

if (hero.tagis[Helper.Quadruped] = 0) then

if (herofield[tSize].value >= 4) then
newmaxwt *= 16

elseif (herofield[tSize].value >= 3) then
newmaxwt *= 8

elseif (herofield[tSize].value >= 2) then
newmaxwt *= 4

elseif (herofield[tSize].value >= 1) then
newmaxwt *= 2

elseif (herofield[tSize].value >= 0) then
newmaxwt *= 0

elseif (herofield[tSize].value >= -1) then
newmaxwt *= .75

elseif (herofield[tSize].value >= -2) then
newmaxwt *= .50

elseif (herofield[tSize].value >= -3) then
newmaxwt *= .25

elseif (herofield[tSize].value >= -4) then
newmaxwt *= .125

endif
endif

~ Now that we have the max wt, we need to define out medium encumberance and light encumberance limits. Fortunately they are merely 2/3 and 1/3 of our max, rounded down to the nearest pound.

newmedwt = round(newmaxwt *.66, 0, -1)
newlitwt = round(newmaxwt *.33, 0, -1)

~ Now compare our values to the current encumberance values and adjust them up
var diff as number

diff = newmaxwt - herofield[tEncumHvy].value
herofield[tEncumHvy].value += diff

diff = newmedwt - herofield[tEncumMed].value
herofield[tEncumMed].value += diff

diff = newlitwt - herofield[tEncumLgt].value
herofield[tEncumLgt].value += diff 

endif
 
Last edited:
A helpful thing when you have a lot of tests is to use indentations to make everything clearer.

if
else
elseif

are not indented, but the things within them are indented some amount (we use 2 spaces for each indent for our own code in Hero Lab).

So:

Code:
if (hero.tagis[Helper.Quadruped] <> 0) then
 
  if (herofield[tSize].value >= 4) then
    newmaxwt *= 24
 
  elseif (herofield[tSize].value >= 3) then
    newmaxwt *= 12

When there's lots of if statements, that's useful to me in tracking where one ends and the next begins.
 
Looks like you need to be after Post-Attributes/1000, and before Post-Attributes/2000.

1950 looks like a good priority, then.
 
Yeah, that phase/priority looks like it should work, but it is not.

The variables being set return the correct value, but it looks like the value of the herofields are not able to be added to for some reason.
 
Last edited:
Alright, I finally discovered the problem, in the previous code medium non quadraped characters were multiplying their newmaxstr times 0, when they should have multiplied by 1. Also it looks like some lines in the table round up, and others round down. I changed it to round up here.

Code:
      doneif (field[gIsEquip].value = 0)

      var newstr as number
      var newmaxwt as number
      var newmedwt as number
      var newlitwt as number
      var diff as number

      ~ If we have enhancement bonus 1 or higher, we don't stack, so stop now.
      doneif (hero.child[aSTR].field[BonEnhance].value >= 1)

      ~ Get our strength +1
      newstr = hero.child[aSTR].field[aFinalVal].value + 1

      ~ Generate our new max encumberance...
      if (newstr = 29) then
        newmaxwt = 1400
      elseif (newstr = 28) then
        newmaxwt = 1200
      elseif (newstr = 27) then
        newmaxwt = 1040
      elseif (newstr = 26) then
        newmaxwt = 920
      elseif (newstr = 25) then
        newmaxwt = 800
      elseif (newstr = 24) then
        newmaxwt = 700
      elseif (newstr = 23) then
        newmaxwt = 600
      elseif (newstr = 22) then
        newmaxwt = 520
      elseif (newstr = 21) then
        newmaxwt = 460
      elseif (newstr = 20) then
        newmaxwt = 400
      elseif (newstr = 19) then
        newmaxwt = 350
      elseif (newstr = 18) then
        newmaxwt = 300
      elseif (newstr = 17) then
        newmaxwt = 260
      elseif (newstr = 16) then
        newmaxwt = 230
      elseif (newstr = 15) then
        newmaxwt = 200
      elseif (newstr = 14) then
        newmaxwt = 175
      elseif (newstr = 13) then
        newmaxwt = 150
      elseif (newstr = 12) then
        newmaxwt = 130
      elseif (newstr = 11) then
        newmaxwt = 115
      elseif (newstr = 10) then
        newmaxwt = 100
      elseif (newstr = 9) then
        newmaxwt = 90
      elseif (newstr = 8) then
        newmaxwt = 80
      elseif (newstr = 7) then
        newmaxwt = 70
      elseif (newstr = 6) then
        newmaxwt = 60
      elseif (newstr = 5) then
        newmaxwt = 50
      elseif (newstr = 4) then
        newmaxwt = 40
      elseif (newstr = 3) then
        newmaxwt = 30
      elseif (newstr = 2) then
        newmaxwt = 20
      elseif (newstr = 1) then
        newmaxwt = 10
        endif

      if (hero.tagis[Helper.Quadruped] <> 0) then
        if (herofield[tSize].value >= 4) then
          newmaxwt *= 24
        elseif (herofield[tSize].value >= 3) then
          newmaxwt *= 12
        elseif (herofield[tSize].value >= 2) then
          newmaxwt *= 6
        elseif (herofield[tSize].value >= 1) then
          newmaxwt *= 3
        elseif (herofield[tSize].value >= 0) then
          newmaxwt *= 1.5
        elseif (herofield[tSize].value >= -1) then
          newmaxwt *= 1
        elseif (herofield[tSize].value >= -2) then
          newmaxwt *= .75
        elseif (herofield[tSize].value >= -3) then
          newmaxwt *= .50
        elseif (herofield[tSize].value >= -4) then
          newmaxwt *= .25
          endif
      elseif (hero.tagis[Helper.Quadruped] = 0) then
        if (herofield[tSize].value >= 4) then
          newmaxwt *= 16
        elseif (herofield[tSize].value >= 3) then
          newmaxwt *= 8
        elseif (herofield[tSize].value >= 2) then
          newmaxwt *= 4
        elseif (herofield[tSize].value >= 1) then
          newmaxwt *= 2
        elseif (herofield[tSize].value >= 0) then
          newmaxwt *= 1
        elseif (herofield[tSize].value >= -1) then
          newmaxwt *= .75
        elseif (herofield[tSize].value >= -2) then
          newmaxwt *= .50
        elseif (herofield[tSize].value >= -3) then
          newmaxwt *= .25
        elseif (herofield[tSize].value >= -4) then
          newmaxwt *= .125
          endif
        endif

      ~ Now that we have the max wt, we need to define out medium encumberance and light encumberance limits. Fortunately they are merely 2/3 and 1/3 of our max, rounded up to the nearest pound.
      newmedwt = round(newmaxwt *.66, 0, 1)
      newlitwt = round(newmaxwt *.33, 0, 1)

      ~ Now compare our values to the current encumberance values and adjust them up
      diff = newmaxwt - herofield[tEncumHvy].value
      herofield[tEncumHvy].value += diff

      diff = newmedwt - herofield[tEncumMed].value
      herofield[tEncumMed].value += diff

      diff = newlitwt - herofield[tEncumLgt].value
      herofield[tEncumLgt].value += diff
 
Back
Top