LenAnderson / SillyTavern-LALib

Library of helpful STScript commands for SillyTavern.
18 stars 8 forks source link

Seemingly a problem with the while loop. #5

Closed BradlyFinau closed 2 months ago

BradlyFinau commented 2 months ago

I'm making a system where the silly tavern will DM using the WoD style of dice rolling. Here is a quick description of the relevant rules. role a number of ten sided dice. dice above a certain amount are successes. When ten is rolled you can roll again to potentially gain additional successes. Here is the code that models this behavior.

/setvar key=successes 0|
/setvar key=dice 5|
/setvar key=goodroll 0|
/while left={{getvar::dice}} rule=gt right=0 {:
    /if left={{getvar::dice}} rule=gt right=0 {:
        /incvar goodroll
    :}|
    /setvar key=roll {{random::1::2::3::4::5::6::7::8::9::10}}|
    /if left={{getvar::roll}} rule=gte right=6 {:
        /incvar successes
    :}|
    /if left={{getvar::roll}} rule=lt right=10 {:
        /decvar dice
    :}
:}|
/echo 
dice left:{{getvar::dice}}
successes:{{getvar::successes}}
good rolls:{{getvar::goodroll}}

When this snippet is run the result is dice will be a negative number usually between -90 and -80 when logically it should be 0. Essentially what it seems is happening is that when /while does the gt test it continues instead of breaking the loop when left>right evaluates to false until it hits the hard limit. I've inserted a counter to see test if "gt" is working properly in other commands.

/if left={{getvar::dice}} rule=gt right=0 {:
    /incvar goodroll
:}

the final result of goodroll is sane (above 5 and usually below 10).

LenAnderson commented 2 months ago

/while is not LALib, it is ST core. You need to use just the var name in while, not the macro.