Sign in to follow this  
Ostentatio

Wurm skillcheck/skill gain simulator. Wow! Neato!

Recommended Posts

1 hour ago, Ogare said:

@ChakronI thought you where be a smart aleck (inferring it can't be done yet still asking me to do it) or just plain sarcasm. Anyway, I edited my post as I can't delete.

 

 

A single non-simulated equation can be made. If modified skill ( for example the average of mining skill and pickaxe ql) is supplied then it becomes a simple input of that value and difficulty to move the distribution around. We know the distribution's shape/size so we don't need to simulate it. But and its a big one, there is normal curve deformation that happens as the mean approach either -100 or 100. The deformation might make normal curve stats math inaccurate. I'll see about reviewing stats (as all that stuff is on the internet for free) so I can try to make the equation.

 

I hope you come up with something, as you correctly point out its not just a simple truncated normal distribution unfortunately, you have to find the probability that the result is within the cutoff parameter and skillgain range. I don't have the time to work it out right now but it should be at least somewhat possible. You'd have to look at when the default result of +/-(90-95) is relevant after 100 failed tries. If it helps here is an explanation with sort of mathematical notation I did a while ago.

 3HAUhdb.png

 

Edit: above is just the skill.rollgaussian you'd have to factor in bonus etc as well

Edited by Lethyria

Share this post


Link to post
Share on other sites

Interesting. How does this work for skills that don't follow the standard rules, such as Fighting (and I believe Weaponsmithing, though maybe that's just arbitrarily high difficult). And how about the difference between improvement and creation actions?

Share this post


Link to post
Share on other sites
2 hours ago, Chakron said:

Interesting. How does this work for skills that don't follow the standard rules, such as Fighting (and I believe Weaponsmithing, though maybe that's just arbitrarily high difficult). And how about the difference between improvement and creation actions?

There are two things at play, I was referring to the tickrate, that is standard across skill checks (most skills) the size of the skill tick is determined by a few things but the key ones are: timer length, skill "difficulty", current skill and creation/non creation.

 

As to the exact skillgain amount its a little complicated but the difficulty is a straight divider, so blacksmithing and carpentry at 4000 have 5 times larger ticks than weaponsmithing at 20000, and mining is between the two at 8000. Creation actions give 1/3 skillgain with some exceptions.


Fighting, weapon and shield skills are calculated differently and I haven't fully read that part yet.

Edited by Lethyria
mining number wrong

Share this post


Link to post
Share on other sites

Would  be nice if the calculator could be improved to fully reflect benediction. Currently with benediction the selectable, 0+ and 90+ numbers ignore anything greater than 100.

The two areas where this is a problem are
in statsStore._update 

 skillgain: sumValues(this.data, [0, 40]),
 success: sumValues(this.data, [0, 101]), // Should be [0, 106] or [0, 101 + (paramsStore.params.fixed.benediction ? 5 :0) ]
 selected: this.brush ? sumValues(this.data, [Math.round(this.brush[0]), Math.round(this.brush[1])]) : [],
 meanSelected: this.brush ? computeMean(this.data, [Math.round(this.brush[0]), Math.round(this.brush[1])]) : [],
 top: sumValues(this.data, [90, 101]), // Should be [0, 106] or [0, 101 + (paramsStore.params.fixed.benediction ? 5 :0) ]

and in sumValues

function sumValues(data, _ref2) {
    var _ref3 = _slicedToArray(_ref2, 2),
        xFrom = _ref3[0],
        xTo = _ref3[1];

    if (xTo >= 100) {
        xTo = 100; // should be 105 or 100 + (paramsStore.params.fixed.benediction ? 5 : 0)
    }
    var totalFreq = 0;
    var totalCount = 0;
    data.forEach(function (_ref4) {
        var power = _ref4.power,
            frequency = _ref4.frequency,
            count = _ref4.count;

        if (power >= xFrom && power <= xTo) {
            totalFreq += frequency;
            totalCount += count;
        }
    });
    return { freq: totalFreq, count: totalCount };
}

I'm not certain this is the best way to access the benediction state as I've not used react before.

Edited by Lethyria
corrected first code block

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this