Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
May your rolls be merry + bright! 🎄
Create a free account

Sheet worker not working

1504511700
Gustav
Sheet Author
I made a sheet worker and after some trial and error, it's still not working. I will be grateful if someone can tell me where is the problem. It needs to get two stats (FUE and TAM) add them and compare with a table. The result has to be saved in Damage-Bonus <script type="text/worker"> on("change:FUE change:TAM", function() { getAttrs(["FUE","TAM"], function(values) { if((values.FUE+values.TAM)<13){ setAttrs({attr_Damage-Bonus: "-1d6"}); } else if((values.FUE+values.TAM)<17){ setAttrs({attr_Damage-Bonus: "-1d4"}); } else if((values.FUE+values.TAM)<25){ setAttrs({attr_Damage-Bonus: "0"}); } else if((values.FUE+values.TAM)<33){ setAttrs({attr_Damage-Bonus: "-1d6"}); } else if((values.FUE+values.TAM)<42){ setAttrs({attr_Damage-Bonus: "1d4"}); } else if((values.FUE+values.TAM)<57){ setAttrs({attr_Damage-Bonus: "1d6"}); } else if((values.FUE+values.TAM)<73){ setAttrs({attr_Damage-Bonus: "2d6"}); } else if((values.FUE+values.TAM)<89){ setAttrs({attr_Damage-Bonus: "3d6"}); } else if((values.FUE+values.TAM)<105){ setAttrs({attr_Damage-Bonus: "4d6"}); } else if((values.FUE+values.TAM)<121){ setAttrs({attr_Damage-Bonus: "5d6"}); } else if((values.FUE+values.TAM)<137){ setAttrs({attr_Damage-Bonus: "6d6"}); } else if((values.FUE+values.TAM)<153){ setAttrs({attr_Damage-Bonus: "7d6"}); } else if((values.FUE+values.TAM)<169){ setAttrs({attr_Damage-Bonus: "8d6"}); } else if((values.FUE+values.TAM)<185){ setAttrs({attr_Damage-Bonus: "9d6"}); } else if((values.FUE+values.TAM)<201){ setAttrs({attr_Damage-Bonus: "10d6"}); } else if((values.FUE+values.TAM)<217){ setAttrs({attr_Damage-Bonus: "11d6"}); } else if((values.FUE+values.TAM)<233){ setAttrs({attr_Damage-Bonus: "12d6"}); } else if((values.FUE+values.TAM)<249){ setAttrs({attr_Damage-Bonus: "13d6"}); } else { setAttrs({attr_Damage-Bonus: "21d6"}); } }); }); </script> Also, the line where it's used is: <td><span data-i18n="dmg-bonus-u">Bonificación al daño</span> <input type="text" name="attr_Damage-Bonus" style="width: 130px" readonly="true" /></td>
1504526826

Edited 1504527105
Azurift
Sheet Author
The naming of your properties within the object of the setAttrs function appears to be wrong. It shouldn't be "setAttrs({attr_Damage-Bonus: "-1d6"});", but rather "setAttrs({"Damage-Bonus": "-1d6"});" You ignore the attr_ prefix when addressing such variables using getAttrs and setAttrs. Also make sure to include quotes around the property name when utilizing hyphens (as seen above), otherwise it won't run. EDIT: Also I forgot to mention that you should be parsing variables FUE and TAM using the parseInt or parseFloat function, otherwise it could conceivably attempt to add two strings together instead of adding the respective ints and/or float data types. An example of this in action would be "parseInt(values.FUE)+parseInt(values.TAM)".
1504556191
Gustav
Sheet Author
Thank you very much, changes done.
1504800192
Gustav
Sheet Author
It's still not working, I changed it this way: <script type="text/worker"> on("change:FUE change:TAM", function() { getAttrs(["FUE","TAM"], function(values) { if((parseInt(values.FUE)+parseInt(values.TAM))<13){ setAttrs({"Damage-Bonus": "-1d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<17){ setAttrs({"Damage-Bonus": "-1d4"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<25){ setAttrs({"Damage-Bonus": "0"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<33){ setAttrs({"Damage-Bonus": "-1d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<42){ setAttrs({"Damage-Bonus": "1d4"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<57){ setAttrs({"Damage-Bonus": "1d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<73){ setAttrs({"Damage-Bonus": "2d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<89){ setAttrs({"Damage-Bonus": "3d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<105){ setAttrs({"Damage-Bonus": "4d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<121){ setAttrs({"Damage-Bonus": "5d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<137){ setAttrs({"Damage-Bonus": "6d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<153){ setAttrs({"Damage-Bonus": "7d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<169){ setAttrs({"Damage-Bonus": "8d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<185){ setAttrs({"Damage-Bonus": "9d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<201){ setAttrs({"Damage-Bonus": "10d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<217){ setAttrs({"Damage-Bonus": "11d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<233){ setAttrs({"Damage-Bonus": "12d6"}); } else if((parseInt(values.FUE)+parseInt(values.TAM))<249){ setAttrs({"Damage-Bonus": "13d6"}); } else { setAttrs({"Damage-Bonus": "21d6"}); } }); }); </script>
I would like prefice this that I work in API scripts, but am starting to delve into sheet workers, so I hope this helps but it might not. What I would do here is utilize the _.range functionality rather than a giant if-else table. I've also bolded some comments that might help you to ensure that it works the way you want. <script type="text/worker"> var DAMAGE_BONUS = { table : [ {bonus: '-1d6', range: _.range( 0,  12)}, {bonus: '-1d4', range: _.range( 13, 16)}, {bonus:    '0', range: _.range( 17, 24)}, // This one seems to go backwards in value to the worst possible, is that correct. {bonus: '-1d6', range: _.range( 25, 32)}, {bonus:  '1d4', range: _.range( 33, 41)}, {bonus:  '1d6', range: _.range( 42, 56)}, {bonus:  '2d6', range: _.range( 57, 72)}, {bonus:  '3d6', range: _.range( 73, 88)}, {bonus:  '4d6', range: _.range( 89,104)}, {bonus:  '5d6', range: _.range(105,120)}, {bonus:  '6d6', range: _.range(121,136)}, {bonus:  '7d6', range: _.range(137,152)}, {bonus:  '8d6', range: _.range(153,168)}, {bonus:  '9d6', range: _.range(169,184)}, {bonus: '10d6', range: _.range(185,200)}, {bonus: '11d6', range: _.range(201,216)}, {bonus: '12d6', range: _.range(217,232)}, {bonus: '13d6', range: _.range(233,248)}, {bonus: '21d6', range: _.range(249,999)}, ], getBonusForValue : function(value) { var checkRange = function(entry) { return entry.range.indexOf(parseInt(value||0)) !== -1 }; var tableEntry = _.find(this.table, checkRange); return tableEntry.bonus; } }; on("change:FUE change:TAM", function() {   getAttrs(["FUE","TAM"], function(values) { var v = parseInt(values.FUE) + parseInt(values.TAM); // LOG V to see if it is correct for the conditions var damage_bonus = DAMAGE_BONUS.getBonusForValue(v); // LOG damage bonus to see if it is correct setAttrs({ "Damage-Bonus": damage_bonus});   }); }); </script>