Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def roll_element(element)
- # sample ["1d6", nil, "1", "d6"]
- # sample ["+1d6", "+", "1", "d6"]
- # sample ["+1", "+", "1", nil]
- original, sign, numerator, denominator = element[0], element[1], element[2], element[3]
- sign = "+" unless sign
- error = false
- # Dice cap
- if numerator.to_i > 10000
- numerator = "10000"
- original = sign + numerator + denominator # feign original
- error = true
- end
- if denominator && denominator.delete("d").to_i > 10000
- denominator = "d10000"
- original = sign + numerator + denominator # feign original
- error = true
- end
- # fix for "d20"
- if (not denominator) and original =~ /^(\+|-)?d(\d+)/
- sign = $1
- numerator = 1
- denominator = $2
- end
- if denominator
- result = []
- numerator.to_i.times do
- result << random(denominator.delete("d").to_i)
- end
- else
- result = [numerator.to_i]
- end
- # flip result unless sign
- if sign == "-"
- result = result.map{ |r| 0 - r}
- end
- # Dice cap
- # invoke "too many dice message" by triggering long line
- if error
- 200.times do
- result << 9999
- end
- end
- return result
- end
- def random(value)
- return 0 if value == 0
- return rand(value)+1
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement