sheet workers go in the html sheet. At the bottom of your html, add the following <script type="text/worker">
</script> That is a script block. All sheet workers you create, like Scott's above, go in that script block: between those two script statements. The approach I'd use is below. This single worker will work for all your skills, if they are named appropriately. const skills = ['blacksmithing','fencing','alertness','etc']; skills.forEach(skill => { on(`change:${skill}`, function(){ getAttrs(['skill'], values => { const levelUp = [0,200,500,700,1000,1500,2000,3500]; const value = values[skill]*1||0; const level = levelUp[Math.min(value, levelUp.length -1)]; setAttrs({ [`${skill}_xp`]: level },{silent:true}); }); }); }); In this version, you need make three changes. First, edit the following lines: const skills = ['blacksmithing', 'fencing', 'alertness']; Add an extra entry for each skill, after a comma and enclosed in quotes like above. So if you also had carpentry and jeweller skills, you'd change that to const skills = ['blacksmithing', 'fencing', 'alertness', 'carpentry', 'jeweller']; You can list the skills in any order. Also you'd ned to change this: const levelUp = [0,200,500,700,1000,1500,2000,3500]; to whatever your Level -> XP sequence is. And finally in this section [`${skill}_xp`]: levelUp[level] I've assumed your skill levels are named like, "blacksmithing" and the XP box is named "blacksmithing_xp". If so just change the '_xp' in the above to whatever you use. If you use a different naming sequence, you might need to make tweaks. If for instance, your names are 'blacksmithing_level' and 'blackmsmith_xp' its a touch trickier, but not much. Let us know what naming scheme you use.