M client/src/api/game/mod.rs => client/src/api/game/mod.rs +4 -0
@@ 73,6 73,10 @@ pub enum Command {
GivePlays {
amount: usize,
},
+ RollForPlays {
+ amount: usize,
+ sides: usize,
+ },
GiveBuys {
amount: usize,
},
M client/src/game_status/parser.rs => client/src/game_status/parser.rs +42 -1
@@ 253,17 253,58 @@ fn parse_action(action: &Action, game: &Game, game_status: &mut GameStatus) {
target.state = *state;
}
Command::RollForCurrency { amount, sides } => {
+ let mut results: Vec<usize> = Vec::with_capacity(*amount);
for _ in 0..*amount {
let result = Rng::with_seed(action.seed.parse::<u64>().unwrap()).usize(1..=*sides);
target.currency += result;
+
+ results.push(result);
+ }
+
+ if *amount == 1 {
game_status.log.push(LogEntry::from_sections([
- LogSection::bold(&format!(" {}", result.to_string())),
+ LogSection::bold(&results.first().unwrap().to_string()),
+ ]));
+ } else {
+ game_status.log.push(LogEntry::from_sections([
+ LogSection::bold(
+ &format!(
+ " {} = {}",
+ results.iter().map(ToString::to_string).collect::<Vec<String>>().join(" "),
+ results.iter().sum::<usize>(),
+ )
+ ),
]));
}
}
Command::GivePlays { amount } => {
target.plays += amount;
}
+ Command::RollForPlays { amount, sides } => {
+ let mut results: Vec<usize> = Vec::with_capacity(*amount);
+ for _ in 0..*amount {
+ let result = Rng::with_seed(action.seed.parse::<u64>().unwrap()).usize(1..=*sides);
+ target.plays += result;
+
+ results.push(result);
+ }
+
+ if *amount == 1 {
+ game_status.log.push(LogEntry::from_sections([
+ LogSection::bold(&results.first().unwrap().to_string()),
+ ]));
+ } else {
+ game_status.log.push(LogEntry::from_sections([
+ LogSection::bold(
+ &format!(
+ " {} = {}",
+ results.iter().map(ToString::to_string).collect::<Vec<String>>().join(" "),
+ results.iter().sum::<usize>(),
+ )
+ ),
+ ]));
+ }
+ }
Command::GiveBuys { amount } => {
target.buys += amount;
}
M client/src/util/action_to_log.rs => client/src/util/action_to_log.rs +6 -0
@@ 94,6 94,12 @@ pub fn action_to_log(action: &Action, game_status: &GameStatus) -> LogEntry {
LogSection::bold(&format!("{}d{}", amount, sides)),
LogSection::normal(" for currency:"),
]),
+ Command::RollForPlays { amount, sides } => LogEntry::from_sections(vec![
+ LogSection::bold(invoker_name),
+ LogSection::normal(" rolled "),
+ LogSection::bold(&format!("{}d{}", amount, sides)),
+ LogSection::normal(" for plays:"),
+ ]),
#[allow(unreachable_patterns)]
_ => LogEntry {
sections: vec![LogSection::normal("No log configuration for this command")],