Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- gen=Random.new()
- puts "Usage: <times>d<size>(+<mod>), add \"drop low\" or \"drop hi\" followed by amount of dice to drop to do so. 'q' to quit."
- while (input=gets().chomp)!='q'
- if (cmd=/(?<roll>(?<times>\d+)[dD](?<die>\d+))\s*(?<add>(?:\s*[\+|\-]\s*\d+)*)?\s*(?:(?<drop>drop)\s*(?<dropmod>l|h)\w*\s*(?<dropN>\d)\s*\z|\z)/.match(input))!=nil
- dice=Array.new()
- cmd['times'].to_i.times do
- cmd['die'].to_i!=0 ? dice.push(gen.rand(cmd['die'].to_i)+1) : dice.push(0)
- end
- dice=dice.sort
- output=cmd['roll'] + ": "
- sum=0
- for i in 0..dice.size-1
- if i!=dice.size-1
- output = output + dice[i].to_s + ", "
- else
- output = output + dice[i].to_s
- end
- sum=sum+dice[i]
- end
- if cmd['drop']!=nil
- output=output + "; "
- if cmd['dropN'].to_i>=dice.size
- output=output + "dropped all dice, result 0."
- else
- output=output + "dropping " + (cmd['dropN']=='1' ? "the" : cmd['dropN']) + (cmd['dropmod']=='l' ? " lowest" : " highest") + (cmd['dropN']==1 ? " die; " : " dice; ")
- cmd['dropmod']=='l' ? dice=dice.drop(cmd['dropN'].to_i) : dice.pop(cmd['dropN'].to_i)
- sum=0
- for i in 0..dice.size-1
- if i!=dice.size-1
- output = output + dice[i].to_s + ", "
- else
- output = output + dice[i].to_s
- end
- sum=sum+dice[i]
- end
- end
- end
- output=output + "; total " + sum.to_s
- addition=cmd['add'].gsub(/\s+/, "")
- if addition!=""
- add=addition.scan(/\+|\-|\d+/)
- output=output + addition + "="
- i=0
- while i<add.size-1
- if add[i]=='+'
- sum=sum+add[i+1].to_i
- else
- sum=sum-add[i+1].to_i
- end
- i=i+2
- end
- output=output+sum.to_s
- end
- puts output
- else
- puts "Invalid format! Please use the format <times>d<size>(+<mod>)(\"drop lo/hi\")"
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement