diff --git a/CHANGELOG.md b/CHANGELOG.md index 99142b7c..63a21137 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ - Amplify no longer increase GreenPower - Purify - Now removes all effects on target - - Applies "Purified" increasing healing taken + - Applies "Pure" increasing healing taken - Purge - Now removes all effects on target diff --git a/VERSION b/VERSION index 0bfbd573..fe4e75fb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.8.2 \ No newline at end of file +1.8.3 \ No newline at end of file diff --git a/acp/package.json b/acp/package.json index 3a0fffbb..18b68a3f 100644 --- a/acp/package.json +++ b/acp/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.8.2", + "version": "1.8.3", "description": "", "main": "index.js", "scripts": { diff --git a/client/assets/styles/instance.less b/client/assets/styles/instance.less index 4bb23969..b94ad2d9 100644 --- a/client/assets/styles/instance.less +++ b/client/assets/styles/instance.less @@ -434,6 +434,10 @@ &.winner { animation: win 2s ease-in-out 0s 1; } + + .cancelled { + color: white; + } } .tutorial { diff --git a/client/package.json b/client/package.json index a6fc3780..96747156 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "mnml-client", - "version": "1.8.2", + "version": "1.8.3", "description": "", "main": "index.js", "scripts": { diff --git a/client/src/components/faceoff.jsx b/client/src/components/faceoff.jsx index ea3858cd..579a9e6e 100644 --- a/client/src/components/faceoff.jsx +++ b/client/src/components/faceoff.jsx @@ -80,6 +80,12 @@ class Faceoff extends preact.Component { } function faceoffText() { if (!instance.winner) { + if (instance.phase === 'Finished') return ( +
+
game cancelled
+
+ ); + return (
{otherTeam.name}
diff --git a/client/src/events.jsx b/client/src/events.jsx index 0741ee51..ab634d98 100644 --- a/client/src/events.jsx +++ b/client/src/events.jsx @@ -209,34 +209,23 @@ function registerEvents(store) { return store.dispatch(actions.setInvite(code)); } - let autoReady = null; function setInstance(v) { - const { account, instance, ws, tutorial } = store.getState(); + const { account, ws, tutorial } = store.getState(); if (v) { setInvite(null); setPvp(false); const player = v.players.find(p => p.id === account.id); store.dispatch(actions.setPlayer(player)); - if (!instance || v.id !== instance.id) { - clearTimeout(autoReady); + const skip = v.time_control === 'Practice' && v.phase === 'Lobby'; + if (skip) { + ws.sendInstanceReady(v.id); } if (v.phase === 'Finished') { ws.sendAccountInstances(); } - if (v.phase_end && v.phase === 'Lobby' && !autoReady) { - const skip = v.time_control === 'Practice' ? 10000 : 2000; - const autoReadyDelay = Date.parse(v.phase_end) - Date.now() - skip; - autoReady = setTimeout(() => { - ws.sendInstanceReady(v.id); - autoReady = null; - }, autoReadyDelay); - } - - if (v.phase !== 'Lobby') clearTimeout(autoReady); - // instance.mobile.less hides info at @media 1000 if (localStorage.getItem('tutorial-complete') || window.innerWidth <= 1100) { store.dispatch(actions.setTutorial(null)); diff --git a/client/src/utils.jsx b/client/src/utils.jsx index c23e9012..a14c684e 100644 --- a/client/src/utils.jsx +++ b/client/src/utils.jsx @@ -282,7 +282,7 @@ function effectInfo(i) { case 'Restrict': return 'Disable construct from casting any red skills'; case 'Stun': return 'Stunned construct cannot use skills'; case 'Intercept': return 'Redirect any skills on team to this target construct'; - case 'Purified': return `Construct will take ${i.meta[1] - 100}% increased healing`; + case 'Pure': return `Construct will take ${i.meta[1] - 100}% increased healing`; case 'Vulnerable': return `Construct will take ${i.meta[1] - 100}% increased red damage`; case 'Silence': return 'Disable construct from casting any blue skills'; case 'Wither': return `Construct will take ${100 - i.meta[1]}% reduced healing`; // diff --git a/ops/package.json b/ops/package.json index e1198adc..654b3f8e 100644 --- a/ops/package.json +++ b/ops/package.json @@ -1,6 +1,6 @@ { "name": "mnml-ops", - "version": "1.8.2", + "version": "1.8.3", "description": "", "main": "index.js", "scripts": { diff --git a/server/Cargo.toml b/server/Cargo.toml index 6461cc90..46acb90a 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mnml" -version = "1.8.2" +version = "1.8.3" authors = ["ntr "] [dependencies] diff --git a/server/src/account.rs b/server/src/account.rs index 66af0821..c404d7d6 100644 --- a/server/src/account.rs +++ b/server/src/account.rs @@ -73,7 +73,7 @@ pub fn chat_wheel(_db: &Db, _id: Uuid) -> Result, Error> { "glhf".to_string(), "ez".to_string(), "rekt".to_string(), - "nice".to_string(), + "wow".to_string(), "wp".to_string(), "ok".to_string(), "...".to_string(), diff --git a/server/src/effect.rs b/server/src/effect.rs index 77d110f9..e1a87604 100644 --- a/server/src/effect.rs +++ b/server/src/effect.rs @@ -16,7 +16,7 @@ pub enum Effect { Hybrid, Intercept, Invert, - Purified, + Pure, Purge, Reflect, Restrict, @@ -104,7 +104,7 @@ impl Effect { Effect::Block => vec![Stat::RedDamageTaken, Stat::BlueDamageTaken], Effect::Buff => vec![Stat::BluePower, Stat::RedPower, Stat::Speed], Effect::Slow => vec![Stat::Speed], - + // Power changes Effect::Absorption => vec![Stat::RedPower, Stat::BluePower], Effect::Amplify => vec![Stat::RedPower, Stat::BluePower], @@ -112,7 +112,7 @@ impl Effect { // Damage taken changes Effect::Curse => vec![Stat::RedDamageTaken, Stat::BlueDamageTaken], - Effect::Purified => vec![Stat::GreenDamageTaken], // increased green taken + Effect::Pure => vec![Stat::GreenDamageTaken], // increased green taken Effect::Vulnerable => vec![Stat::RedDamageTaken], Effect::Wither => vec![Stat::GreenDamageTaken], // reduced green taken @@ -133,7 +133,7 @@ impl Effect { Effect::Haste | Effect::Slow | Effect::Hybrid | - Effect::Purified | + Effect::Pure | Effect::Wither => value.pct(match meta { Some(EffectMeta::Multiplier(d)) => d, _ => 100, @@ -194,7 +194,7 @@ impl Effect { Effect::Decay => Some(Colour::Blue), Effect::Regen => Some(Colour::Green), Effect::Siphon => Some(Colour::Blue), - Effect::Purified => Some(Colour::Green), + Effect::Pure => Some(Colour::Green), Effect::Ko => None, } diff --git a/server/src/game.rs b/server/src/game.rs index 02854483..86fed074 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -469,14 +469,14 @@ impl Game { let mut resolutions = resolution_steps(&cast, &mut self); r_animation_ms = resolutions.iter().fold(r_animation_ms, |acc, r| acc + r.clone().get_delay()); - + // the cast itself goes into this temp vec to handle cooldowns // if theres no resolution events, the skill didn't trigger (disable etc) if resolutions.len() > 0 { casts.push(cast); } - + self.resolved.append(&mut resolutions); // while let Some(resolution) = resolutions.pop() { @@ -635,15 +635,15 @@ impl Game { for player in self.players.iter_mut() { if !player.ready { player.set_ready(true); - player.add_warning(); - info!("upkeep: {:} warned", player.name); - if player.warnings >= 3 { - player.forfeit(); - info!("upkeep: {:} forfeited", player.name); - //todo - // self.resolved.push(forfeit) - // self.log.push(format!("{:} forfeited.", player.name)); - } + // player.add_warning(); + // info!("upkeep: {:} warned", player.name); + // if player.warnings >= 3 { + // player.forfeit(); + // info!("upkeep: {:} forfeited", player.name); + // //todo + // // self.resolved.push(forfeit) + // // self.log.push(format!("{:} forfeited.", player.name)); + // } } } @@ -1622,6 +1622,6 @@ mod tests { game.players[0].set_ready(true); game.phase_end = Some(Utc::now().checked_sub_signed(Duration::seconds(500)).unwrap()); game = game.upkeep(); - assert!(game.players[1].warnings == 1); + // assert!(game.players[1].warnings == 1); } } diff --git a/server/src/item.rs b/server/src/item.rs index 4903ec00..72639073 100644 --- a/server/src/item.rs +++ b/server/src/item.rs @@ -832,7 +832,7 @@ impl Item { Item::PurifyPlus | Item::PurifyPlusPlus => format!( "Remove all effects and heals for {:?}% GreenPower per effect removed. - Applies Purified increasing healing taken by {:?}%.", + Applies Pure increasing healing taken by {:?}%.", self.into_skill().unwrap().multiplier(), self.into_skill().unwrap().effect()[0].get_multiplier() - 100), diff --git a/server/src/names.rs b/server/src/names.rs index 16f0dfcc..07cc6ff0 100644 --- a/server/src/names.rs +++ b/server/src/names.rs @@ -44,7 +44,7 @@ const FIRSTS: [&'static str; 53] = [ "orbiting", "piscine", "polar", - "purified", + "pure", "recalcitrant", "rogue", "sealed", diff --git a/server/src/player.rs b/server/src/player.rs index 0e0baf56..ffa7c379 100644 --- a/server/src/player.rs +++ b/server/src/player.rs @@ -63,7 +63,6 @@ pub struct Player { pub constructs: Vec, pub bot: bool, pub ready: bool, - pub warnings: u8, pub draw_offered: bool, pub score: Score, } @@ -85,7 +84,6 @@ impl Player { constructs, bot: false, ready: false, - warnings: 0, draw_offered: false, score: Score::Zero, }) @@ -100,7 +98,6 @@ impl Player { constructs, bot: false, ready: false, - warnings: 0, draw_offered: false, score: Score::Zero, } @@ -134,11 +131,6 @@ impl Player { self } - pub fn add_warning(&mut self) -> &mut Player { - self.warnings += 1; - self - } - pub fn forfeit(&mut self) -> &mut Player { for construct in self.constructs.iter_mut() { construct.force_ko(); @@ -358,7 +350,7 @@ impl Player { } self.vbox.bound.push(target); - + if target_construct_id.is_some() { let equip_index = self.vbox.bound.len() - 1; self.vbox_apply(equip_index, target_construct_id.expect("no construct"))?; diff --git a/server/src/skill.rs b/server/src/skill.rs index c67e86b9..d490bbec 100644 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -849,7 +849,7 @@ impl Skill { Skill::HybridBlast => 50, Skill::HasteStrike => 60, - + Skill::Absorb=> 95, Skill::AbsorbPlus => 120, Skill::AbsorbPlusPlus => 155, @@ -1024,11 +1024,11 @@ impl Skill { Skill::TriagePlusPlus => vec![ConstructEffect {effect: Effect::Triage, duration: 4, meta: Some(EffectMeta::Skill(Skill::TriageTickPlusPlus)), tick: None}], - Skill::Purify => vec![ConstructEffect { effect: Effect::Purified, duration: 2, + Skill::Purify => vec![ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(150)), tick: None}], - Skill::PurifyPlus => vec![ConstructEffect { effect: Effect::Purified, duration: 2, + Skill::PurifyPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(175)), tick: None}], - Skill::PurifyPlusPlus => vec![ConstructEffect { effect: Effect::Purified, duration: 2, + Skill::PurifyPlusPlus => vec![ConstructEffect { effect: Effect::Pure, duration: 2, meta: Some(EffectMeta::Multiplier(200)), tick: None}], _ => { @@ -1048,7 +1048,7 @@ impl Skill { Skill::Strike=> None, Skill::StrikePlus => None, Skill::StrikePlusPlus => None, - + Skill::Counter| Skill::CounterPlus | Skill::CounterPlusPlus => None, // avoid all damage @@ -1796,7 +1796,7 @@ fn siphon_tick(source: &mut Construct, target: &mut Construct, mut results: Reso fn link(source: &mut Construct, target: &mut Construct, mut results: Resolutions, skill: Skill) -> Resolutions { results.push(Resolution::new(source, target).event(target.add_effect(skill, skill.effect()[0]))); - + let amount = source.blue_power().pct(skill.multiplier().saturating_mul(target.effects.len() as u64)); target.deal_blue_damage(skill, amount) .into_iter()