• 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

Iterative script issue

RavenX

Well-known member
I am trying to make a script that adds one to the count for an advance only if the advance has a cost of 4 xp. I'd like for the iteration to ignore advances in the count if it has a cost other than 4xp. Ultimately, once the code is counting correctly I will divide it by 4 and round up so the advance applies to the level it was attained at.

Here is the code I came up with.
For some reason it's still counting the advances that cost less than 4 xp and I want it to not do that. How could I fix the code? Ideas?


Code:
      doneif (field[advCost].value <> 4)

      if (tagis[AdvanceCat.Advancement] <> 0) then

          var advcount as number
          var advcur as number
          var i as number

          advcur = field[advOrder].value
          for i = 1 to advcur
            if (field[advCost].value = 4) then
              advcount += 1 
              endif
            next

            field[advCount].value = advcount 
            advcount /= 4
            advcount = round(advcount,0,1)


        endif
 
Attached you will see the error issue, it's counting an iteration when the tag I am looking for is not present. In the source code its looking for a fieldval equal to 4 for a specific field but I tried it with a tag and it still gives me the error. How can I get it to not count those when running the iterative script?
 

Attachments

  • Advances and tier counting error.jpg
    Advances and tier counting error.jpg
    133.5 KB · Views: 3
I just tried doing it like this thinking it would go through each of the items in advances and pick off a count for only certain ones but it seems to not work like I intended.

Code:
      doneif (field[advCost].value <> 4)

      if (tagis[AdvanceCat.Advancement] <> 0) then

          var advcount as number
          var advcur as number
          var i as number

          advcur = field[advOrder].value
 
            i = 1
            foreach pick in hero from Advance where "AdvanceCat.Advancement"
              while (i <= field[advOrder].value)
                if (eachpick.field[advCost].value = 4) then
                  advcount += 1
                  endif
                i += 1
                loop
              nexteach

            field[advCount].value = advcount 
            advcount /= 4
            advcount = round(advcount,0,1)

          endif
 
What is this part of the script supposed to be doing?

Code:
          advcur = field[advOrder].value
          for i = 1 to advcur
            if (field[advCost].value = 4) then
              advcount += 1 
              endif
            next

It is checking the same field on the same pick over and over again, so advCount will either be 0 (if field[advCost] isn't 4) or advcur (if field[advCost] is 4)?
 
What is this part of the script supposed to be doing?

Code:
          advcur = field[advOrder].value
          for i = 1 to advcur
            if (field[advCost].value = 4) then
              advcount += 1 
              endif
            next

It is checking the same field on the same pick over and over again, so advCount will either be 0 (if field[advCost] isn't 4) or advcur (if field[advCost] is 4)?

For each of the picks, I wanted it to cycle through the previous picks and determine if the cost field or tag was present, then increment the field. If the advancement costs 4 xp, increment the field. The idea was for the script to cycle through all the picks and increment only for the ones that meet the 4 xp requirement.

If the pick has an advOrder field of 3, it should count picks from 1 to 3 and increment only if the pick has an xp value of 4 xp.
 
I think I found a work around for it.

Code:
    <!-- If we're a character advancement, lock us into the first available slot on the advances array  -->
    <eval index="8" phase="Final" priority="8000" name="Assign To Table"><![CDATA[
      doneif (tagis[AdvanceCat.Advancement] = 0) 
      var i as number

      for i=0 to 23
        if (empty(herofield[acXPAdvTier].arraytext[i]) <> 0) then
          herofield[acXPAdvTier].arraytext[i] = field[name].text
          field[advCount].value = i
          done
          endif
        next



      ]]></eval>

    <!-- If we're an advancement that uses a tier slot, we have a text to display -->
    <eval index="9" phase="Render" priority="8500" name="Assign Advance Tier Count"><![CDATA[
      if (tagis[AdvanceCat.Advancement] <> 0) then
        field[advCount].value += 1
        field[advTier].value = field[advCount].value
        endif
      ]]></eval>

    <!-- If we're an advancement that uses a tier slot, we have a text to display -->
    <eval index="10" phase="Render" priority="10000" name="Assign Tier Advance"><![CDATA[
      if (tagis[AdvanceCat.Advancement] <> 0) then
        if (tagis[Advance.LongTerm] <> 0) then
          field[advTierTxt].text &= "Tier " & field[advTier].value
          endif
        endif
      ]]></eval>

Doing it this way the numbers are coming out correctly, though I had to force feed them into an array... consequently I think I figured out how skills get modifiers in arrays with this bit of coding though...
 
Back
Top