Advertisement
zoofman

Untitled

Jul 16th, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. def roll_element(element)
  2. # sample ["1d6", nil, "1", "d6"]
  3. # sample ["+1d6", "+", "1", "d6"]
  4. # sample ["+1", "+", "1", nil]
  5. original, sign, numerator, denominator = element[0], element[1], element[2], element[3]
  6. sign = "+" unless sign
  7. error = false
  8.  
  9. # Dice cap
  10. if numerator.to_i > 10000
  11. numerator = "10000"
  12. original = sign + numerator + denominator # feign original
  13. error = true
  14. end
  15.  
  16. if denominator && denominator.delete("d").to_i > 10000
  17. denominator = "d10000"
  18. original = sign + numerator + denominator # feign original
  19. error = true
  20. end
  21.  
  22. # fix for "d20"
  23. if (not denominator) and original =~ /^(\+|-)?d(\d+)/
  24. sign = $1
  25. numerator = 1
  26. denominator = $2
  27. end
  28.  
  29. if denominator
  30. result = []
  31. numerator.to_i.times do
  32. result << random(denominator.delete("d").to_i)
  33. end
  34. else
  35. result = [numerator.to_i]
  36. end
  37.  
  38. # flip result unless sign
  39. if sign == "-"
  40. result = result.map{ |r| 0 - r}
  41. end
  42.  
  43. # Dice cap
  44. # invoke "too many dice message" by triggering long line
  45. if error
  46. 200.times do
  47. result << 9999
  48. end
  49. end
  50.  
  51. return result
  52. end
  53.  
  54. def random(value)
  55. return 0 if value == 0
  56. return rand(value)+1
  57. end
  58.  
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement