From 9dcb21eefaccbcb7fb5180a40ad97ddb046573aa Mon Sep 17 00:00:00 2001 From: ntr Date: Sun, 3 Mar 2019 13:06:32 +1100 Subject: [PATCH] bot wins --- server/src/game.rs | 7 ------- server/src/instance.rs | 46 ++++++++++++++++++++++++++++++++---------- server/src/skill.rs | 12 ++++++++++- server/src/vbox.rs | 2 +- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/server/src/game.rs b/server/src/game.rs index 133dfba8..87d1a741 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -20,7 +20,6 @@ pub type Log = Vec; #[derive(Debug,Clone,Serialize,Deserialize)] pub struct Team { pub id: Uuid, - pub player: Option, pub bot: bool, cryps: Vec, } @@ -31,15 +30,9 @@ impl Team { id: account, cryps: vec![], bot: false, - player: None, }; } - pub fn set_player(&mut self, id: Uuid) -> &mut Team { - self.player = Some(id); - self - } - pub fn set_bot(&mut self) -> &mut Team { self.bot = true; self diff --git a/server/src/instance.rs b/server/src/instance.rs index 5960f336..25739fa3 100644 --- a/server/src/instance.rs +++ b/server/src/instance.rs @@ -238,7 +238,18 @@ impl Instance { game.start(); assert!(game.finished()); + let winner = game.winner().unwrap(); + round.finished = true; + + for team in game.teams.iter() { + let mut player = self.players.iter_mut().find(|p| p.id == team.id).unwrap(); + match team.id == winner.id { + true => player.add_win(), + false => player.add_loss(), + }; + } + } } } @@ -444,16 +455,29 @@ pub fn instance_game_finished(tx: &mut Transaction, game: &Game, instance_id: Uu // update scores let winner = game.winner().ok_or(err_msg("game not finished"))?; - for team in game.teams.iter() - .filter(|t| !t.bot) - .filter(|t| t.player.is_some()) { - let mut player = player_get(tx, team.id, instance_id)?; - match team.id == winner.id { - true => player.add_win(), - false => player.add_loss(), - }; - println!("{:?}", player); - player_update(tx, player)?; + for team in game.teams.iter() { + match team.bot { + true => { + let mut instance = instance_get(tx, instance_id)?; + { + let mut player = instance.players.iter_mut().find(|p| p.account == team.id).unwrap(); + match team.id == winner.id { + true => player.add_win(), + false => player.add_loss(), + }; + } + instance_update(tx, instance)?; + }, + false => { + let mut player = player_get(tx, team.id, instance_id)?; + match team.id == winner.id { + true => player.add_win(), + false => player.add_loss(), + }; + println!("{:?}", player); + player_update(tx, player)?; + }, + } } // update instance and persist @@ -505,7 +529,7 @@ mod tests { assert!(instance.vbox_phase_finished()); instance.games_phase_start(); - println!("{:?}", instance.rounds); + println!("{:#?}", instance); assert!(instance.games_phase_finished()); } diff --git a/server/src/skill.rs b/server/src/skill.rs index 12ce5e17..048d81a7 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -325,7 +325,7 @@ pub enum Skill { Paralyse, Strangle, // physical dot and disable - + Strike, Stun, // Evade, // actively evade @@ -401,6 +401,7 @@ impl Skill { pub fn base_cd(&self) -> Cooldown { match self { Skill::Attack => None, + Skill::Strike => None, // ----------------- // Nature @@ -486,6 +487,7 @@ impl Skill { pub fn category(&self) -> Category { match self { Skill::Attack => Category::Red, + Skill::Strike => Category::Red, // ----------------- // Nature @@ -590,6 +592,7 @@ impl Skill { // fast phys combat Skill::Attack => 5, + Skill::Strike => 10, Skill::Paralyse => 5, Skill::Strangle => 5, Skill::Banish => 5, @@ -679,6 +682,7 @@ impl Skill { // ----------------- // Nature // ----------------- + Skill::Strike => strike(source, target, resolution), Skill::Block => block(source, target, resolution), Skill::Parry => parry(source, target, resolution), Skill::Snare => snare(source, target, resolution), // TODO prevent physical moves @@ -992,6 +996,12 @@ fn banish(_cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Re return resolution; } +fn strike(cryp: &mut Cryp, target: &mut Cryp, mut resolution: Resolution) -> Resolution { + let amount = cryp.red_damage(); + resolution.results.push(target.deal_red_damage(Skill::Attack, u64::max_value())); + return resolution; +} + #[cfg(test)] mod tests { diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 46925459..47358f94 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -90,7 +90,7 @@ impl Var { Var::Slow => Ok(Skill::Slow), Var::Snare => Ok(Skill::Snare), Var::Strangle => Ok(Skill::Strangle), - // Var::Strike => Ok(Skill::Strike), + Var::Strike => Ok(Skill::Strike), // Var::Clutch => Ok(Skill::Clutch), // Var::Taunt => Ok(Skill::Taunt), Var::Throw => Ok(Skill::Throw),