diff --git a/VERSION b/VERSION
index 867e5243..589268e6 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.0
\ No newline at end of file
+1.3.0
\ No newline at end of file
diff --git a/acp/package.json b/acp/package.json
index a13e342e..a0aeb290 100644
--- a/acp/package.json
+++ b/acp/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.2.0",
+ "version": "1.3.0",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/client/assets/styles/styles.less b/client/assets/styles/styles.less
index cd773c0d..f64f48fa 100644
--- a/client/assets/styles/styles.less
+++ b/client/assets/styles/styles.less
@@ -208,6 +208,7 @@ button[disabled] {
}
.options {
+ display: flex;
width: 50%;
}
diff --git a/client/package.json b/client/package.json
index 14bc2149..21e2be2a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-client",
- "version": "1.2.0",
+ "version": "1.3.0",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/client/src/components/info.component.jsx b/client/src/components/info.component.jsx
index 36fc19b5..29edb8cb 100644
--- a/client/src/components/info.component.jsx
+++ b/client/src/components/info.component.jsx
@@ -9,7 +9,6 @@ const shapes = require('./shapes');
function InfoComponent(args) {
const {
itemInfo,
- combiner,
player,
info,
} = args;
@@ -25,6 +24,8 @@ function InfoComponent(args) {
double clicking items in the VBOX will purchase and move them to your INVENTORY.
hover over an item to see its effects and combinations.
+ combine a SKILL or SPEC with 2 COLOURS to create an item.
+ combine 3 of the same item to upgrade it.
click an item and then click a construct to equip that item to it.
click the READY button on the right to progress to the GAME PHASE.
@@ -40,17 +41,11 @@ function InfoComponent(args) {
const regEx = /(RedPower|BluePower|GreenPower|RedLife|BlueLife|GreenLife|SpeedStat)/;
const infoDescription = reactStringReplace(fullInfo.description, regEx, match => shapes[match]());
- const itemSource = itemInfo.combos.filter(c => c.item === info);
- const itemSourceInfo = itemSource.length
- ? `${itemSource[0].components[0]} ${itemSource[0].components[1]} ${itemSource[0].components[2]}`
- : false;
- const itemRegEx = /(Red|Blue|Green)/;
- const itemSourceDescription = reactStringReplace(itemSourceInfo, itemRegEx, match => shapes[match]());
return (
{fullInfo.item}
-
{itemSourceDescription}
-
{infoDescription}
+
SKILL
+
{infoDescription}
);
}
@@ -144,6 +139,7 @@ function InfoComponent(args) {
return (
{info}
+
SPEC
{infoDescription}
{thresholds}
@@ -162,30 +158,11 @@ function InfoComponent(args) {
function Combos() {
if (!player) return false;
-
- // show recipe for what's in combiner
- if (combiner.some(u => u !== null)) {
- const filteredCombos = itemInfo.combos
- .filter(combo => combiner.every(u => u === null
- || combo.components.includes(player.vbox.bound[u])));
- if (filteredCombos.length > 6) return false;
- return (
-
-
- {filteredCombos.map((c, i) =>
-
- | {convertItem(c.item)} |
- {c.components.map((u, j) => {convertItem(u)} | )}
-
- )}
-
-
- );
- }
-
if (!info) return false;
+
const vboxCombos = itemInfo.combos.filter(c => c.components.includes(info));
if (vboxCombos.length > 6) return false;
+
return (
diff --git a/client/src/components/vbox.component.jsx b/client/src/components/vbox.component.jsx
index 6768cde6..e659ee72 100644
--- a/client/src/components/vbox.component.jsx
+++ b/client/src/components/vbox.component.jsx
@@ -14,7 +14,6 @@ const addState = connect(
player,
combiner,
reclaiming,
- vboxHighlight,
vboxSelected,
itemInfo,
itemUnequip,
@@ -49,7 +48,6 @@ const addState = connect(
sendVboxCombine,
sendVboxDiscard,
sendVboxReclaim,
- vboxHighlight,
vboxSelected,
itemInfo,
itemUnequip,
@@ -70,10 +68,6 @@ const addState = connect(
return dispatch(actions.setInfo(item));
}
- function setVboxHighlight(v) {
- return dispatch(actions.setVboxHighlight(v));
- }
-
function setVboxSelected(v) {
return dispatch(actions.setVboxSelected(v));
}
@@ -86,7 +80,6 @@ const addState = connect(
setCombiner,
setReclaiming,
setInfo,
- setVboxHighlight,
setVboxSelected,
setItemEquip,
};
@@ -105,7 +98,6 @@ function Vbox(args) {
sendVboxCombine,
sendVboxDiscard,
sendVboxReclaim,
- // vboxHighlight,
setCombiner,
setInfo,
@@ -118,19 +110,12 @@ function Vbox(args) {
sendItemUnequip,
setReclaiming,
- setVboxHighlight,
} = args;
if (!player) return false;
const { vbox } = player;
const vboxSelecting = vboxSelected.length;
- // function setHighlight(type) {
- // if (type === 'skill') return setVboxHighlight(itemInfo.items.filter(v => v.skill).map(v => v.item));
- // if (type === 'spec') return setVboxHighlight(itemInfo.items.filter(v => v.spec).map(v => v.item));
- // return false;
- // }
-
function combinerChange(newCombiner) {
setCombiner(newCombiner);
@@ -140,20 +125,7 @@ function Vbox(args) {
setItemEquip(null);
}
- if (newCombiner.every(c => c === null)) return setVboxHighlight([]);
-
- const combinerValues = newCombiner.map(cv => player.vbox.bound[cv]).filter(cv => cv);
-
- const filteredCombos = itemInfo.combos
- .filter(combo => combinerValues.every(u => combo.components.includes(u)));
-
- const comboValues = itemInfo.items.filter(v => {
- if (!filteredCombos.some(c => c.components.includes(v.item))) return false;
- if (!['Red', 'Green', 'Blue'].includes(v.item) && combinerValues.includes(v.item)) return false;
- return true;
- });
-
- return setVboxHighlight(comboValues.map(v => v.item));
+ return true;
}
//
diff --git a/client/src/reducers.jsx b/client/src/reducers.jsx
index 35c45a64..496a5acc 100644
--- a/client/src/reducers.jsx
+++ b/client/src/reducers.jsx
@@ -50,7 +50,6 @@ module.exports = {
teamPage: createReducer(0, 'SET_TEAM_PAGE'),
teamSelect: createReducer([null, null, null], 'SET_TEAM_SELECT'),
- vboxHighlight: createReducer([], 'SET_VBOX_HIGHLIGHT'),
vboxSelected: createReducer([], 'SET_VBOX_SELECTED'),
ws: createReducer(null, 'SET_WS'),
diff --git a/client/src/socket.jsx b/client/src/socket.jsx
index d4a0c421..d3f91ff4 100644
--- a/client/src/socket.jsx
+++ b/client/src/socket.jsx
@@ -200,7 +200,7 @@ function createSocket(events) {
let pongTimeout;
function onPong() {
events.setPing(Date.now() - ping);
- pongTimeout = setTimeout(sendPing, 1000);
+ // pongTimeout = setTimeout(sendPing, 1000);
}
// -------------
diff --git a/ops/package.json b/ops/package.json
index 75a489af..69c69d72 100755
--- a/ops/package.json
+++ b/ops/package.json
@@ -1,6 +1,6 @@
{
"name": "mnml-ops",
- "version": "1.2.0",
+ "version": "1.3.0",
"description": "",
"main": "index.js",
"scripts": {
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 06eb0264..26856718 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "mnml"
-version = "1.2.0"
+version = "1.3.0"
authors = ["ntr "]
[dependencies]
diff --git a/server/src/account.rs b/server/src/account.rs
index 716c9b10..db90e6a6 100644
--- a/server/src/account.rs
+++ b/server/src/account.rs
@@ -10,7 +10,7 @@ use postgres::transaction::Transaction;
use http::MnmlHttpError;
use names::{name as generate_name};
-use construct::{Construct, construct_recover, construct_spawn};
+use construct::{Construct, ConstructSkeleton, construct_spawn};
use instance::{Instance, instance_delete};
use mtx::{Mtx, FREE_MTX};
use pg::Db;
@@ -350,23 +350,20 @@ pub fn constructs(tx: &mut Transaction, account: &Account) -> Result, _> = result.iter()
- .map(|row| {
+ let mut constructs = result.iter()
+ .filter_map(|row| {
let construct_bytes: Vec = row.get(0);
- match from_slice::(&construct_bytes) {
- Ok(c) => Ok(c),
- Err(_e) => construct_recover(construct_bytes, tx),
+ match from_slice::(&construct_bytes) {
+ Ok(s) => Some(s),
+ Err(e) => {
+ warn!("{:?}", e);
+ None
+ },
}
})
- .collect();
+ .map(|sk| Construct::from_skeleton(&sk))
+ .collect::>();
- // catch any errors
- if constructs.is_err() {
- warn!("{:?}", constructs);
- return Err(err_msg("could not deserialise a construct"));
- }
-
- let mut constructs = constructs.unwrap();
constructs.sort_by_key(|c| c.id);
return Ok(constructs);
}
@@ -382,23 +379,19 @@ pub fn team(tx: &mut Transaction, account: &Account) -> Result, E
let result = tx
.query(query, &[&account.id])?;
- let constructs: Result, _> = result.iter()
- .map(|row| {
+ let mut constructs = result.iter()
+ .filter_map(|row| {
let construct_bytes: Vec = row.get(0);
- match from_slice::(&construct_bytes) {
- Ok(c) => Ok(c),
- Err(_e) => construct_recover(construct_bytes, tx),
+ match from_slice::(&construct_bytes) {
+ Ok(s) => Some(s),
+ Err(e) => {
+ warn!("{:?}", e);
+ None
+ },
}
})
- .collect();
-
- // catch any errors
- if constructs.is_err() {
- warn!("{:?}", constructs);
- return Err(err_msg("could not deserialise a construct"));
- }
-
- let mut constructs = constructs.unwrap();
+ .map(|sk| Construct::from_skeleton(&sk))
+ .collect::>();
if constructs.len() != 3 {
return Err(format_err!("team not size 3 account={:?}", account));
diff --git a/server/src/construct.rs b/server/src/construct.rs
index 5f2e0bb5..c7a4f35c 100644
--- a/server/src/construct.rs
+++ b/server/src/construct.rs
@@ -187,9 +187,10 @@ impl ConstructStat {
}
#[derive(Debug,Clone,Serialize,Deserialize)]
-pub struct ConstructRecover {
+pub struct ConstructSkeleton {
pub id: Uuid,
pub account: Uuid,
+ pub img: Uuid,
pub name: String,
}
@@ -236,6 +237,27 @@ impl Construct {
};
}
+ pub fn from_skeleton(skeleton: &ConstructSkeleton) -> Construct {
+ return Construct {
+ id: skeleton.id,
+ account: skeleton.id,
+ img: skeleton.img,
+ name: skeleton.name.clone(),
+
+ .. Construct::new()
+ };
+ }
+
+ pub fn to_skeleton(&self) -> ConstructSkeleton {
+ ConstructSkeleton {
+ id: self.id,
+ account: self.id,
+ img: self.img,
+ name: self.name.clone(),
+ }
+ }
+
+
pub fn named(mut self, name: &String) -> Construct {
self.name = name.clone();
self
@@ -827,10 +849,9 @@ pub fn construct_get(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Result
let result = result.iter().next().ok_or(format_err!("construct {:} not found", id))?;
let construct_bytes: Vec = result.get(0);
- let construct = from_slice::(&construct_bytes)
- .or_else(|_| construct_recover(construct_bytes, tx))?;
+ let skeleton = from_slice::(&construct_bytes)?;
- return Ok(construct);
+ return Ok(Construct::from_skeleton(&skeleton));
}
pub fn construct_select(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Result {
@@ -847,10 +868,9 @@ pub fn construct_select(tx: &mut Transaction, id: Uuid, account_id: Uuid) -> Res
let result = result.iter().next().ok_or(format_err!("construct {:} not found", id))?;
let construct_bytes: Vec = result.get(0);
- let construct = from_slice::(&construct_bytes)
- .or_else(|_| construct_recover(construct_bytes, tx))?;
+ let skeleton = from_slice::(&construct_bytes)?;
- return Ok(construct);
+ return Ok(Construct::from_skeleton(&skeleton));
}
pub fn construct_spawn(tx: &mut Transaction, account: Uuid, name: String, team: bool) -> Result {
@@ -878,7 +898,7 @@ pub fn construct_spawn(tx: &mut Transaction, account: Uuid, name: String, team:
}
pub fn construct_write(tx: &mut Transaction, construct: Construct) -> Result {
- let construct_bytes = to_vec(&construct)?;
+ let construct_bytes = to_vec(&construct.to_skeleton())?;
let query = "
UPDATE constructs
@@ -897,20 +917,6 @@ pub fn construct_write(tx: &mut Transaction, construct: Construct) -> Result, tx: &mut Transaction) -> Result {
- let c = from_slice::(&construct_bytes)?;
-
- let mut construct = Construct::new()
- .named(&c.name)
- .set_account(c.account);
-
- construct.id = c.id;
-
- info!("recovered construct {:?}", c.name);
-
- return construct_write(tx, construct);
-}
-
#[cfg(test)]
mod tests {
use construct::*;
diff --git a/server/src/events.rs b/server/src/events.rs
index ca1ce5af..da9fe692 100644
--- a/server/src/events.rs
+++ b/server/src/events.rs
@@ -132,12 +132,12 @@ impl Events {
},
Event::Subscribe(id, obj) => {
- info!("subscribe id={:?} object={:?}", id, obj);
+ trace!("subscribe id={:?} object={:?}", id, obj);
match self.clients.get_mut(&id) {
Some(client) => {
client.subs.insert(obj);
- info!("client={:?} subscriptions={:?}", id, client.subs.len());
+ trace!("client={:?} subscriptions={:?}", id, client.subs.len());
Ok(())
},
None => return Err(format_err!("unknown client {:?}", id))
@@ -145,12 +145,12 @@ impl Events {
},
Event::Unsubscribe(id, obj) => {
- info!("unsubscribe id={:?} object={:?}", id, obj);
+ trace!("unsubscribe id={:?} object={:?}", id, obj);
match self.clients.get_mut(&id) {
Some(mut client) => {
client.subs.remove(&obj);
- info!("unsubscribe subscriptions removed={:?}", client.subs.len());
+ trace!("unsubscribe subscriptions removed={:?}", client.subs.len());
Ok(())
},
None => return Err(format_err!("unknown client {:?}", id))
@@ -158,7 +158,7 @@ impl Events {
},
Event::Push(id, msg) => {
- info!("push id={:?}", id);
+ trace!("push id={:?}", id);
let mut subs = 0;
let mut dead = vec![];
@@ -177,11 +177,11 @@ impl Events {
}
if !dead.is_empty() {
- info!("dead connections={:?}", dead.len());
+ trace!("dead connections={:?}", dead.len());
dead.iter().for_each(|id| self.remove_client(*id));
}
- info!("push subscribers={:?}", subs);
+ trace!("push subscribers={:?}", subs);
Ok(())
},
diff --git a/server/src/item.rs b/server/src/item.rs
index 67efb76e..a2d4b5cf 100644
--- a/server/src/item.rs
+++ b/server/src/item.rs
@@ -88,181 +88,181 @@ pub enum Item {
AmplifyPlus,
#[serde(rename = "Amplify++")]
AmplifyPlusPlus,
-
+
Absorb,
#[serde(rename = "Absorb+")]
AbsorbPlus,
#[serde(rename = "Absorb++")]
AbsorbPlusPlus,
-
+
Banish,
#[serde(rename = "Banish+")]
BanishPlus,
#[serde(rename = "Banish++")]
BanishPlusPlus,
-
+
Bash,
#[serde(rename = "Bash+")]
BashPlus,
#[serde(rename = "Bash++")]
BashPlusPlus,
-
+
Blast,
#[serde(rename = "Blast+")]
BlastPlus,
#[serde(rename = "Blast++")]
BlastPlusPlus,
-
+
Chaos,
#[serde(rename = "Chaos+")]
ChaosPlus,
#[serde(rename = "Chaos++")]
ChaosPlusPlus,
-
+
Sustain,
#[serde(rename = "Sustain+")]
SustainPlus,
#[serde(rename = "Sustain++")]
SustainPlusPlus,
-
+
Electrify,
#[serde(rename = "Electrify+")]
ElectrifyPlus,
#[serde(rename = "Electrify++")]
ElectrifyPlusPlus,
-
+
Curse,
#[serde(rename = "Curse+")]
CursePlus,
#[serde(rename = "Curse++")]
CursePlusPlus,
-
+
Decay,
#[serde(rename = "Decay+")]
DecayPlus,
#[serde(rename = "Decay++")]
DecayPlusPlus,
-
+
Hex,
#[serde(rename = "Hex+")]
HexPlus,
#[serde(rename = "Hex++")]
HexPlusPlus,
-
+
Haste,
#[serde(rename = "Haste+")]
HastePlus,
#[serde(rename = "Haste++")]
HastePlusPlus,
-
+
Heal,
#[serde(rename = "Heal+")]
HealPlus,
#[serde(rename = "Heal++")]
HealPlusPlus,
-
+
Hybrid,
#[serde(rename = "Hybrid+")]
HybridPlus,
#[serde(rename = "Hybrid++")]
HybridPlusPlus,
-
+
Invert,
#[serde(rename = "Invert+")]
InvertPlus,
#[serde(rename = "Invert++")]
InvertPlusPlus,
-
+
Counter,
#[serde(rename = "Counter+")]
CounterPlus,
#[serde(rename = "Counter++")]
CounterPlusPlus,
-
+
Purge,
#[serde(rename = "Purge+")]
PurgePlus,
#[serde(rename = "Purge++")]
PurgePlusPlus,
-
+
Purify,
#[serde(rename = "Purify+")]
PurifyPlus,
#[serde(rename = "Purify++")]
PurifyPlusPlus,
-
+
Reflect,
#[serde(rename = "Reflect+")]
ReflectPlus,
#[serde(rename = "Reflect++")]
ReflectPlusPlus,
-
+
Recharge,
#[serde(rename = "Recharge+")]
RechargePlus,
#[serde(rename = "Recharge++")]
RechargePlusPlus,
-
+
Ruin,
#[serde(rename = "Ruin+")]
RuinPlus,
#[serde(rename = "Ruin++")]
RuinPlusPlus,
-
+
Link,
#[serde(rename = "Link+")]
LinkPlus,
#[serde(rename = "Link++")]
LinkPlusPlus,
-
+
Silence,
#[serde(rename = "Silence+")]
SilencePlus,
#[serde(rename = "Silence++")]
SilencePlusPlus,
-
+
Slay,
#[serde(rename = "Slay+")]
SlayPlus,
#[serde(rename = "Slay++")]
SlayPlusPlus,
-
+
Sleep,
#[serde(rename = "Sleep+")]
SleepPlus,
#[serde(rename = "Sleep++")]
SleepPlusPlus,
-
+
Restrict,
#[serde(rename = "Restrict+")]
RestrictPlus,
#[serde(rename = "Restrict++")]
RestrictPlusPlus,
-
+
Strike,
#[serde(rename = "Strike+")]
StrikePlus,
#[serde(rename = "Strike++")]
StrikePlusPlus,
-
+
Siphon,
#[serde(rename = "Siphon+")]
SiphonPlus,
#[serde(rename = "Siphon++")]
SiphonPlusPlus,
-
+
Intercept,
#[serde(rename = "Intercept+")]
InterceptPlus,
#[serde(rename = "Intercept++")]
InterceptPlusPlus,
-
+
Break,
#[serde(rename = "Break+")]
BreakPlus,
#[serde(rename = "Break++")]
BreakPlusPlus,
-
+
Triage,
#[serde(rename = "Triage+")]
TriagePlus,
@@ -748,7 +748,7 @@ impl Item {
Item::Counter|
Item::CounterPlus |
- Item::CounterPlusPlus => format!("Self targetting skill. Recharges RedLife for {:?}% RedPower and blocks red skills for {:?}T.
+ Item::CounterPlusPlus => format!("Self targetting skill. Recharges RedLife for {:?}% RedPower and blocks red skills for {:?}T.
If a red skill is parried the construct will riposte the source dealing {:?}% RedPower as red damage.",
self.into_skill().unwrap().multiplier(),
self.into_skill().unwrap().effect()[0].get_duration(),
diff --git a/server/src/skill.rs b/server/src/skill.rs
index abd132a4..c587a465 100644
--- a/server/src/skill.rs
+++ b/server/src/skill.rs
@@ -503,181 +503,181 @@ pub enum Skill {
AmplifyPlus,
#[serde(rename = "Amplify++")]
AmplifyPlusPlus,
-
+
Absorb,
#[serde(rename = "Absorb+")]
AbsorbPlus,
#[serde(rename = "Absorb++")]
AbsorbPlusPlus,
-
+
Banish,
#[serde(rename = "Banish+")]
BanishPlus,
#[serde(rename = "Banish++")]
BanishPlusPlus,
-
+
Bash,
#[serde(rename = "Bash+")]
BashPlus,
#[serde(rename = "Bash++")]
BashPlusPlus,
-
+
Blast,
#[serde(rename = "Blast+")]
BlastPlus,
#[serde(rename = "Blast++")]
BlastPlusPlus,
-
+
Chaos,
#[serde(rename = "Chaos+")]
ChaosPlus,
#[serde(rename = "Chaos++")]
ChaosPlusPlus,
-
+
Sustain,
#[serde(rename = "Sustain+")]
SustainPlus,
#[serde(rename = "Sustain++")]
SustainPlusPlus,
-
+
Electrify,
#[serde(rename = "Electrify+")]
ElectrifyPlus,
#[serde(rename = "Electrify++")]
ElectrifyPlusPlus,
-
+
Curse,
#[serde(rename = "Curse+")]
CursePlus,
#[serde(rename = "Curse++")]
CursePlusPlus,
-
+
Decay,
#[serde(rename = "Decay+")]
DecayPlus,
#[serde(rename = "Decay++")]
DecayPlusPlus,
-
+
Hex,
#[serde(rename = "Hex+")]
HexPlus,
#[serde(rename = "Hex++")]
HexPlusPlus,
-
+
Haste,
#[serde(rename = "Haste+")]
HastePlus,
#[serde(rename = "Haste++")]
HastePlusPlus,
-
+
Heal,
#[serde(rename = "Heal+")]
HealPlus,
#[serde(rename = "Heal++")]
HealPlusPlus,
-
+
Hybrid,
#[serde(rename = "Hybrid+")]
HybridPlus,
#[serde(rename = "Hybrid++")]
HybridPlusPlus,
-
+
Invert,
#[serde(rename = "Invert+")]
InvertPlus,
#[serde(rename = "Invert++")]
InvertPlusPlus,
-
+
Counter,
#[serde(rename = "Counter+")]
CounterPlus,
#[serde(rename = "Counter++")]
CounterPlusPlus,
-
+
Purge,
#[serde(rename = "Purge+")]
PurgePlus,
#[serde(rename = "Purge++")]
PurgePlusPlus,
-
+
Purify,
#[serde(rename = "Purify+")]
PurifyPlus,
#[serde(rename = "Purify++")]
PurifyPlusPlus,
-
+
Reflect,
#[serde(rename = "Reflect+")]
ReflectPlus,
#[serde(rename = "Reflect++")]
ReflectPlusPlus,
-
+
Recharge,
#[serde(rename = "Recharge+")]
RechargePlus,
#[serde(rename = "Recharge++")]
RechargePlusPlus,
-
+
Ruin,
#[serde(rename = "Ruin+")]
RuinPlus,
#[serde(rename = "Ruin++")]
RuinPlusPlus,
-
+
Link,
#[serde(rename = "Link+")]
LinkPlus,
#[serde(rename = "Link++")]
LinkPlusPlus,
-
+
Silence,
#[serde(rename = "Silence+")]
SilencePlus,
#[serde(rename = "Silence++")]
SilencePlusPlus,
-
+
Slay,
#[serde(rename = "Slay+")]
SlayPlus,
#[serde(rename = "Slay++")]
SlayPlusPlus,
-
+
Sleep,
#[serde(rename = "Sleep+")]
SleepPlus,
#[serde(rename = "Sleep++")]
SleepPlusPlus,
-
+
Restrict,
#[serde(rename = "Restrict+")]
RestrictPlus,
#[serde(rename = "Restrict++")]
RestrictPlusPlus,
-
+
Strike,
#[serde(rename = "Strike+")]
StrikePlus,
#[serde(rename = "Strike++")]
StrikePlusPlus,
-
+
Siphon,
#[serde(rename = "Siphon+")]
SiphonPlus,
#[serde(rename = "Siphon++")]
SiphonPlusPlus,
-
+
Intercept,
#[serde(rename = "Intercept+")]
InterceptPlus,
#[serde(rename = "Intercept++")]
InterceptPlusPlus,
-
+
Break,
#[serde(rename = "Break+")]
BreakPlus,
#[serde(rename = "Break++")]
BreakPlusPlus,
-
+
Triage,
#[serde(rename = "Triage+")]
TriagePlus,
@@ -695,7 +695,7 @@ pub enum Skill {
CounterAttackPlus,
#[serde(rename = "CounterAttack++")]
CounterAttackPlusPlus,
-
+
Electrocute,
#[serde(rename = "Electrocute+")]
ElectrocutePlus,
@@ -1758,13 +1758,14 @@ fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolution
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() }));
}
- let mut turns = 0;
+ let mut turns = 1;
for cs in target.skills.iter_mut() {
if Effect::Purge.disables_skill(cs.skill) {
turns += 1;
}
}
- if turns > 0 {
+
+ if turns > 1 {
let mut effect = skill.effect()[0];
effect.duration = effect.duration * turns;
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly));