fix purge

This commit is contained in:
ntr 2019-09-06 17:21:43 +10:00
parent 6b84fe92d7
commit fe04c0d2db
2 changed files with 43 additions and 44 deletions

View File

@ -132,12 +132,12 @@ impl Events {
}, },
Event::Subscribe(id, obj) => { Event::Subscribe(id, obj) => {
info!("subscribe id={:?} object={:?}", id, obj); trace!("subscribe id={:?} object={:?}", id, obj);
match self.clients.get_mut(&id) { match self.clients.get_mut(&id) {
Some(client) => { Some(client) => {
client.subs.insert(obj); client.subs.insert(obj);
info!("client={:?} subscriptions={:?}", id, client.subs.len()); trace!("client={:?} subscriptions={:?}", id, client.subs.len());
Ok(()) Ok(())
}, },
None => return Err(format_err!("unknown client {:?}", id)) None => return Err(format_err!("unknown client {:?}", id))
@ -145,12 +145,12 @@ impl Events {
}, },
Event::Unsubscribe(id, obj) => { Event::Unsubscribe(id, obj) => {
info!("unsubscribe id={:?} object={:?}", id, obj); trace!("unsubscribe id={:?} object={:?}", id, obj);
match self.clients.get_mut(&id) { match self.clients.get_mut(&id) {
Some(mut client) => { Some(mut client) => {
client.subs.remove(&obj); client.subs.remove(&obj);
info!("unsubscribe subscriptions removed={:?}", client.subs.len()); trace!("unsubscribe subscriptions removed={:?}", client.subs.len());
Ok(()) Ok(())
}, },
None => return Err(format_err!("unknown client {:?}", id)) None => return Err(format_err!("unknown client {:?}", id))
@ -158,7 +158,7 @@ impl Events {
}, },
Event::Push(id, msg) => { Event::Push(id, msg) => {
info!("push id={:?}", id); trace!("push id={:?}", id);
let mut subs = 0; let mut subs = 0;
let mut dead = vec![]; let mut dead = vec![];
@ -177,11 +177,11 @@ impl Events {
} }
if !dead.is_empty() { if !dead.is_empty() {
info!("dead connections={:?}", dead.len()); trace!("dead connections={:?}", dead.len());
dead.iter().for_each(|id| self.remove_client(*id)); dead.iter().for_each(|id| self.remove_client(*id));
} }
info!("push subscribers={:?}", subs); trace!("push subscribers={:?}", subs);
Ok(()) Ok(())
}, },

View File

@ -503,181 +503,181 @@ pub enum Skill {
AmplifyPlus, AmplifyPlus,
#[serde(rename = "Amplify++")] #[serde(rename = "Amplify++")]
AmplifyPlusPlus, AmplifyPlusPlus,
Absorb, Absorb,
#[serde(rename = "Absorb+")] #[serde(rename = "Absorb+")]
AbsorbPlus, AbsorbPlus,
#[serde(rename = "Absorb++")] #[serde(rename = "Absorb++")]
AbsorbPlusPlus, AbsorbPlusPlus,
Banish, Banish,
#[serde(rename = "Banish+")] #[serde(rename = "Banish+")]
BanishPlus, BanishPlus,
#[serde(rename = "Banish++")] #[serde(rename = "Banish++")]
BanishPlusPlus, BanishPlusPlus,
Bash, Bash,
#[serde(rename = "Bash+")] #[serde(rename = "Bash+")]
BashPlus, BashPlus,
#[serde(rename = "Bash++")] #[serde(rename = "Bash++")]
BashPlusPlus, BashPlusPlus,
Blast, Blast,
#[serde(rename = "Blast+")] #[serde(rename = "Blast+")]
BlastPlus, BlastPlus,
#[serde(rename = "Blast++")] #[serde(rename = "Blast++")]
BlastPlusPlus, BlastPlusPlus,
Chaos, Chaos,
#[serde(rename = "Chaos+")] #[serde(rename = "Chaos+")]
ChaosPlus, ChaosPlus,
#[serde(rename = "Chaos++")] #[serde(rename = "Chaos++")]
ChaosPlusPlus, ChaosPlusPlus,
Sustain, Sustain,
#[serde(rename = "Sustain+")] #[serde(rename = "Sustain+")]
SustainPlus, SustainPlus,
#[serde(rename = "Sustain++")] #[serde(rename = "Sustain++")]
SustainPlusPlus, SustainPlusPlus,
Electrify, Electrify,
#[serde(rename = "Electrify+")] #[serde(rename = "Electrify+")]
ElectrifyPlus, ElectrifyPlus,
#[serde(rename = "Electrify++")] #[serde(rename = "Electrify++")]
ElectrifyPlusPlus, ElectrifyPlusPlus,
Curse, Curse,
#[serde(rename = "Curse+")] #[serde(rename = "Curse+")]
CursePlus, CursePlus,
#[serde(rename = "Curse++")] #[serde(rename = "Curse++")]
CursePlusPlus, CursePlusPlus,
Decay, Decay,
#[serde(rename = "Decay+")] #[serde(rename = "Decay+")]
DecayPlus, DecayPlus,
#[serde(rename = "Decay++")] #[serde(rename = "Decay++")]
DecayPlusPlus, DecayPlusPlus,
Hex, Hex,
#[serde(rename = "Hex+")] #[serde(rename = "Hex+")]
HexPlus, HexPlus,
#[serde(rename = "Hex++")] #[serde(rename = "Hex++")]
HexPlusPlus, HexPlusPlus,
Haste, Haste,
#[serde(rename = "Haste+")] #[serde(rename = "Haste+")]
HastePlus, HastePlus,
#[serde(rename = "Haste++")] #[serde(rename = "Haste++")]
HastePlusPlus, HastePlusPlus,
Heal, Heal,
#[serde(rename = "Heal+")] #[serde(rename = "Heal+")]
HealPlus, HealPlus,
#[serde(rename = "Heal++")] #[serde(rename = "Heal++")]
HealPlusPlus, HealPlusPlus,
Hybrid, Hybrid,
#[serde(rename = "Hybrid+")] #[serde(rename = "Hybrid+")]
HybridPlus, HybridPlus,
#[serde(rename = "Hybrid++")] #[serde(rename = "Hybrid++")]
HybridPlusPlus, HybridPlusPlus,
Invert, Invert,
#[serde(rename = "Invert+")] #[serde(rename = "Invert+")]
InvertPlus, InvertPlus,
#[serde(rename = "Invert++")] #[serde(rename = "Invert++")]
InvertPlusPlus, InvertPlusPlus,
Counter, Counter,
#[serde(rename = "Counter+")] #[serde(rename = "Counter+")]
CounterPlus, CounterPlus,
#[serde(rename = "Counter++")] #[serde(rename = "Counter++")]
CounterPlusPlus, CounterPlusPlus,
Purge, Purge,
#[serde(rename = "Purge+")] #[serde(rename = "Purge+")]
PurgePlus, PurgePlus,
#[serde(rename = "Purge++")] #[serde(rename = "Purge++")]
PurgePlusPlus, PurgePlusPlus,
Purify, Purify,
#[serde(rename = "Purify+")] #[serde(rename = "Purify+")]
PurifyPlus, PurifyPlus,
#[serde(rename = "Purify++")] #[serde(rename = "Purify++")]
PurifyPlusPlus, PurifyPlusPlus,
Reflect, Reflect,
#[serde(rename = "Reflect+")] #[serde(rename = "Reflect+")]
ReflectPlus, ReflectPlus,
#[serde(rename = "Reflect++")] #[serde(rename = "Reflect++")]
ReflectPlusPlus, ReflectPlusPlus,
Recharge, Recharge,
#[serde(rename = "Recharge+")] #[serde(rename = "Recharge+")]
RechargePlus, RechargePlus,
#[serde(rename = "Recharge++")] #[serde(rename = "Recharge++")]
RechargePlusPlus, RechargePlusPlus,
Ruin, Ruin,
#[serde(rename = "Ruin+")] #[serde(rename = "Ruin+")]
RuinPlus, RuinPlus,
#[serde(rename = "Ruin++")] #[serde(rename = "Ruin++")]
RuinPlusPlus, RuinPlusPlus,
Link, Link,
#[serde(rename = "Link+")] #[serde(rename = "Link+")]
LinkPlus, LinkPlus,
#[serde(rename = "Link++")] #[serde(rename = "Link++")]
LinkPlusPlus, LinkPlusPlus,
Silence, Silence,
#[serde(rename = "Silence+")] #[serde(rename = "Silence+")]
SilencePlus, SilencePlus,
#[serde(rename = "Silence++")] #[serde(rename = "Silence++")]
SilencePlusPlus, SilencePlusPlus,
Slay, Slay,
#[serde(rename = "Slay+")] #[serde(rename = "Slay+")]
SlayPlus, SlayPlus,
#[serde(rename = "Slay++")] #[serde(rename = "Slay++")]
SlayPlusPlus, SlayPlusPlus,
Sleep, Sleep,
#[serde(rename = "Sleep+")] #[serde(rename = "Sleep+")]
SleepPlus, SleepPlus,
#[serde(rename = "Sleep++")] #[serde(rename = "Sleep++")]
SleepPlusPlus, SleepPlusPlus,
Restrict, Restrict,
#[serde(rename = "Restrict+")] #[serde(rename = "Restrict+")]
RestrictPlus, RestrictPlus,
#[serde(rename = "Restrict++")] #[serde(rename = "Restrict++")]
RestrictPlusPlus, RestrictPlusPlus,
Strike, Strike,
#[serde(rename = "Strike+")] #[serde(rename = "Strike+")]
StrikePlus, StrikePlus,
#[serde(rename = "Strike++")] #[serde(rename = "Strike++")]
StrikePlusPlus, StrikePlusPlus,
Siphon, Siphon,
#[serde(rename = "Siphon+")] #[serde(rename = "Siphon+")]
SiphonPlus, SiphonPlus,
#[serde(rename = "Siphon++")] #[serde(rename = "Siphon++")]
SiphonPlusPlus, SiphonPlusPlus,
Intercept, Intercept,
#[serde(rename = "Intercept+")] #[serde(rename = "Intercept+")]
InterceptPlus, InterceptPlus,
#[serde(rename = "Intercept++")] #[serde(rename = "Intercept++")]
InterceptPlusPlus, InterceptPlusPlus,
Break, Break,
#[serde(rename = "Break+")] #[serde(rename = "Break+")]
BreakPlus, BreakPlus,
#[serde(rename = "Break++")] #[serde(rename = "Break++")]
BreakPlusPlus, BreakPlusPlus,
Triage, Triage,
#[serde(rename = "Triage+")] #[serde(rename = "Triage+")]
TriagePlus, TriagePlus,
@ -695,7 +695,7 @@ pub enum Skill {
CounterAttackPlus, CounterAttackPlus,
#[serde(rename = "CounterAttack++")] #[serde(rename = "CounterAttack++")]
CounterAttackPlusPlus, CounterAttackPlusPlus,
Electrocute, Electrocute,
#[serde(rename = "Electrocute+")] #[serde(rename = "Electrocute+")]
ElectrocutePlus, ElectrocutePlus,
@ -1758,17 +1758,16 @@ fn purge(source: &mut Construct, target: &mut Construct, mut results: Resolution
.event(Event::Removal { effect: ce.effect, construct_effects: target.effects.clone() })); .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() { for cs in target.skills.iter_mut() {
if Effect::Purge.disables_skill(cs.skill) { if Effect::Purge.disables_skill(cs.skill) {
turns += 1; turns += 1;
} }
} }
if turns > 0 {
let mut effect = skill.effect()[0]; let mut effect = skill.effect()[0];
effect.duration = effect.duration * turns; effect.duration = effect.duration * turns;
results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly)); results.push(Resolution::new(source, target).event(target.add_effect(skill, effect)).stages(EventStages::PostOnly));
}
return results; return results;
} }