Merge branch 'develop' into msg-pane
This commit is contained in:
@@ -357,6 +357,10 @@ pub fn constructs(tx: &mut Transaction, account: &Account) -> Result<Vec<Constru
|
||||
},
|
||||
}
|
||||
})
|
||||
.map(|mut sk| {
|
||||
sk.account = account.id;
|
||||
sk
|
||||
})
|
||||
.map(|sk| Construct::from_skeleton(&sk))
|
||||
.collect::<Vec<Construct>>();
|
||||
|
||||
@@ -386,6 +390,10 @@ pub fn team(tx: &mut Transaction, account: &Account) -> Result<Vec<Construct>, E
|
||||
},
|
||||
}
|
||||
})
|
||||
.map(|mut sk| {
|
||||
sk.account = account.id;
|
||||
sk
|
||||
})
|
||||
.map(|sk| Construct::from_skeleton(&sk))
|
||||
.collect::<Vec<Construct>>();
|
||||
|
||||
|
||||
@@ -238,7 +238,7 @@ impl Construct {
|
||||
pub fn from_skeleton(skeleton: &ConstructSkeleton) -> Construct {
|
||||
return Construct {
|
||||
id: skeleton.id,
|
||||
account: skeleton.id,
|
||||
account: skeleton.account,
|
||||
img: skeleton.img,
|
||||
name: skeleton.name.clone(),
|
||||
|
||||
@@ -249,7 +249,7 @@ impl Construct {
|
||||
pub fn to_skeleton(&self) -> ConstructSkeleton {
|
||||
ConstructSkeleton {
|
||||
id: self.id,
|
||||
account: self.id,
|
||||
account: self.account,
|
||||
img: self.img,
|
||||
name: self.name.clone(),
|
||||
}
|
||||
@@ -271,8 +271,11 @@ impl Construct {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn new_name(self, name: String) -> Construct {
|
||||
self.named(&name)
|
||||
pub fn new_name(self, name: String) -> Result<Construct, Error> {
|
||||
if name.len() > 20 {
|
||||
return Err(err_msg("20 character name maximum"));
|
||||
}
|
||||
Ok(self.named(&name))
|
||||
}
|
||||
|
||||
pub fn learn(mut self, s: Skill) -> Construct {
|
||||
|
||||
+1
-1
@@ -322,7 +322,7 @@ impl Game {
|
||||
return Err(err_msg("game not in skill phase"));
|
||||
}
|
||||
let mut game_state = self.clone();
|
||||
self.stack.retain(|s| game_state.construct_by_id(s.source_construct_id).unwrap().account == player_id);
|
||||
self.stack.retain(|s| game_state.construct_by_id(s.source_construct_id).unwrap().account != player_id);
|
||||
|
||||
return Ok(self);
|
||||
}
|
||||
|
||||
+52
-14
@@ -1,7 +1,7 @@
|
||||
use skill::{Skill};
|
||||
use spec::{Spec, SpecValues};
|
||||
use construct::{Colours};
|
||||
use effect::{Colour};
|
||||
use effect::{Colour, Cooldown};
|
||||
|
||||
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)]
|
||||
pub enum Item {
|
||||
@@ -320,18 +320,44 @@ impl Item {
|
||||
let combos = get_combos();
|
||||
let combo = combos.iter().find(|c| c.item == *self)
|
||||
.unwrap_or_else(|| panic!("unable to find components for {:?}", self));
|
||||
return combo.components.iter().fold(0, |acc, c| acc + c.cost());
|
||||
return combo.components.iter().fold(0, |acc, c| {
|
||||
match c {
|
||||
Item::Attack |
|
||||
Item::Block |
|
||||
Item::Buff |
|
||||
Item::Debuff |
|
||||
Item::Stun => acc,
|
||||
Item::Power |
|
||||
Item::Life |
|
||||
Item::Speed => acc + 1,
|
||||
_ => acc + c.cost(),
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn speed(&self) -> u64 {
|
||||
pub fn base_speed(&self) -> u64 {
|
||||
match self {
|
||||
Item::Attack => 1,
|
||||
Item::Stun => 2,
|
||||
Item::Block => 3,
|
||||
Item::Buff |
|
||||
Item::Debuff => 4,
|
||||
Item::Blue => 1,
|
||||
Item::Green => 2,
|
||||
Item::Red => 3,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn speed(&self) -> u64 {
|
||||
match self {
|
||||
Item::Attack |
|
||||
Item::Stun |
|
||||
Item::Block |
|
||||
Item::Buff |
|
||||
Item::Debuff => 24 + self.base_speed(),
|
||||
_ => {
|
||||
let combos = get_combos();
|
||||
let combo = combos.iter().find(|c| c.item == *self)
|
||||
@@ -343,17 +369,17 @@ impl Item {
|
||||
|
||||
combo.components.iter().for_each(|unit| {
|
||||
colour_speed += match unit {
|
||||
Item::Red => 3,
|
||||
Item::Green => 2,
|
||||
Item::Blue => 1,
|
||||
Item::Red |
|
||||
Item::Green |
|
||||
Item::Blue => unit.base_speed(),
|
||||
_ => 0,
|
||||
};
|
||||
skill_speed += match unit {
|
||||
Item::Attack => 1,
|
||||
Item::Stun => 2,
|
||||
Item::Block => 3,
|
||||
Item::Attack |
|
||||
Item::Stun |
|
||||
Item::Block |
|
||||
Item::Buff |
|
||||
Item::Debuff => 4,
|
||||
Item::Debuff => unit.base_speed(),
|
||||
_ => 0,
|
||||
};
|
||||
if colour_speed == 0 && skill_speed == 0 {
|
||||
@@ -960,7 +986,7 @@ impl Item {
|
||||
Item::BreakPlus => vec![Item::Break, Item::Break, Item::Break],
|
||||
Item::BreakPlusPlus => vec![Item::BreakPlus, Item::BreakPlus, Item::BreakPlus],
|
||||
Item::LinkPlus => vec![Item::Link, Item::Link, Item::Link],
|
||||
Item::LinkPlusPlus => vec![Item::LinkPlusPlus, Item::LinkPlusPlus, Item::LinkPlusPlus],
|
||||
Item::LinkPlusPlus => vec![Item::LinkPlus, Item::LinkPlus, Item::LinkPlus],
|
||||
Item::BanishPlus => vec![Item::Banish, Item::Banish, Item::Banish],
|
||||
Item::BanishPlusPlus => vec![Item::BanishPlus, Item::BanishPlus, Item::BanishPlus],
|
||||
|
||||
@@ -1425,9 +1451,12 @@ pub fn get_combos() -> Vec<Combo> {
|
||||
#[derive(Debug,Clone,Serialize,Deserialize)]
|
||||
pub struct ItemInfo {
|
||||
pub item: Item,
|
||||
pub cost: usize,
|
||||
pub spec: bool,
|
||||
pub skill: bool,
|
||||
pub values: Option<SpecValues>,
|
||||
pub skill: bool,
|
||||
pub speed: Option<u64>,
|
||||
pub cooldown: Cooldown,
|
||||
pub description: String,
|
||||
}
|
||||
|
||||
@@ -1455,13 +1484,22 @@ pub fn item_info() -> ItemInfoCtr {
|
||||
.into_iter()
|
||||
.map(|v| ItemInfo {
|
||||
item: v,
|
||||
cost: v.cost(),
|
||||
spec: v.into_spec().is_some(),
|
||||
skill: v.into_skill().is_some(),
|
||||
description: v.into_description(),
|
||||
values: match v.into_spec() {
|
||||
Some(s) => Some(s.values()),
|
||||
None => None
|
||||
},
|
||||
skill: v.into_skill().is_some(),
|
||||
description: v.into_description(),
|
||||
speed: match v.into_skill() {
|
||||
Some(s) => Some(s.speed()),
|
||||
None => None
|
||||
},
|
||||
cooldown: match v.into_skill() {
|
||||
Some(s) => s.base_cd(),
|
||||
None => None
|
||||
},
|
||||
})
|
||||
.collect::<Vec<ItemInfo>>();
|
||||
|
||||
|
||||
+1
-1
@@ -152,7 +152,7 @@ pub fn apply(tx: &mut Transaction, account: &Account, variant: MtxVariant, const
|
||||
account::debit(tx, account.id, cost)?;
|
||||
|
||||
construct = match mtx.variant {
|
||||
MtxVariant::Rename => construct.new_name(name),
|
||||
MtxVariant::Rename => construct.new_name(name)?,
|
||||
_ => construct.new_img(),
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ use cookie::Cookie;
|
||||
use stripe::{Client as StripeClient, Subscription};
|
||||
|
||||
use crossbeam_channel::{unbounded, Sender as CbSender};
|
||||
use ws::{Builder, listen, CloseCode, Message, Handler, Request, Response, Settings, Sender as WsSender};
|
||||
use ws::{Builder, CloseCode, Message, Handler, Request, Response, Settings, Sender as WsSender};
|
||||
|
||||
use account::{Account};
|
||||
use account;
|
||||
|
||||
+12
-11
@@ -293,7 +293,7 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
|
||||
let mut target = game.construct_by_id(target.id).unwrap().clone();
|
||||
|
||||
match event {
|
||||
Event::Damage { amount, skill, mitigation: _, colour: _ } => {
|
||||
Event::Damage { amount, skill, mitigation: _, colour: c } => {
|
||||
if target.affected(Effect::Electric) {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
.find(|e| e.effect == Effect::Electric).unwrap().clone();
|
||||
@@ -315,16 +315,17 @@ fn post_resolve(_skill: Skill, game: &mut Game, mut resolutions: Resolutions) ->
|
||||
_ => panic!("no absorb skill"),
|
||||
};
|
||||
}
|
||||
|
||||
if target.affected(Effect::Counter) {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
.find(|e| e.effect == Effect::Counter).unwrap().clone();
|
||||
match meta {
|
||||
Some(EffectMeta::Skill(s)) => {
|
||||
resolutions = counter_attack(&mut target, &mut source, resolutions, s);
|
||||
},
|
||||
_ => panic!("no counter skill"),
|
||||
};
|
||||
if c == Colour::Red {
|
||||
if target.affected(Effect::Counter) {
|
||||
let ConstructEffect { effect: _, duration: _, meta, tick: _ } = target.effects.iter()
|
||||
.find(|e| e.effect == Effect::Counter).unwrap().clone();
|
||||
match meta {
|
||||
Some(EffectMeta::Skill(s)) => {
|
||||
resolutions = counter_attack(&mut target, &mut source, resolutions, s);
|
||||
},
|
||||
_ => panic!("no counter skill"),
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
_ => (),
|
||||
|
||||
+1
-1
@@ -240,7 +240,7 @@ mod tests {
|
||||
let mut vbox = Vbox::new();
|
||||
vbox.bound = vec![Item::Strike];
|
||||
vbox.reclaim(0).unwrap();
|
||||
assert_eq!(vbox.bits, 22);
|
||||
assert_eq!(vbox.bits, 20);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user