Browse Source

bugfix: allow implicit KH/KL
bugfix: don't double-erase elements

Sam Jaffe 1 year ago
parent
commit
3a280652ae
2 changed files with 4 additions and 2 deletions
  1. 2 2
      src/parser.cxx
  2. 2 0
      src/roll.cxx

+ 2 - 2
src/parser.cxx

@@ -40,11 +40,11 @@ void parser::parse_keep(char token) {
   switch (token) {
   case 'h':
   case 'H':
-    dice_.of.back().keep = {keep::Highest, read()};
+    dice_.of.back().keep = {keep::Highest, read(1, false)};
     break;
   case 'l':
   case 'L':
-    dice_.of.back().keep = {keep::Lowest, read()};
+    dice_.of.back().keep = {keep::Lowest, read(1, false)};
     break;
   default:
     throw unexpected_token("Expected high/low in keep expression", is_.tellg());

+ 2 - 0
src/roll.cxx

@@ -37,10 +37,12 @@ die_roll roll_impl(die const & d, engine::random & gen) {
     for (int i = 0; i < d.num - d.keep.amount; ++i) {
       hits.erase(std::min_element(hits.begin(), hits.end()));
     }
+    break;
   case keep::Lowest:
     for (int i = 0; i < d.num - d.keep.amount; ++i) {
       hits.erase(std::max_element(hits.begin(), hits.end()));
     }
+    break;
   default:
     break;
   }