rerolls
This commit is contained in:
parent
9b180971ce
commit
5b4e189079
@ -167,8 +167,9 @@ impl Cryp {
|
|||||||
self.create()
|
self.create()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create(mut self) -> Cryp {
|
pub fn roll_stat(&mut self, stat: Stat) -> &mut Cryp {
|
||||||
let mut rng = thread_rng();
|
let mut rng = thread_rng();
|
||||||
|
|
||||||
let stam_max = match self.lvl == 64 {
|
let stam_max = match self.lvl == 64 {
|
||||||
true => u64::max_value(),
|
true => u64::max_value(),
|
||||||
false => 2_u64.pow(self.lvl.into()),
|
false => 2_u64.pow(self.lvl.into()),
|
||||||
@ -189,12 +190,30 @@ impl Cryp {
|
|||||||
false => 2_u64.pow(self.lvl.saturating_sub(2).into()),
|
false => 2_u64.pow(self.lvl.saturating_sub(2).into()),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.xp = stam_max;
|
match stat {
|
||||||
|
Stat::PhysicalDamage => self.phys_dmg.set(rng.gen_range(other_min, other_max)),
|
||||||
|
Stat::SpellDamage => self.spell_dmg.set(rng.gen_range(other_min, other_max)),
|
||||||
|
Stat::Stamina => {
|
||||||
|
self.stamina.set(rng.gen_range(stam_min, stam_max));
|
||||||
|
self.hp.set(self.stamina.base)
|
||||||
|
},
|
||||||
|
_ => panic!("{:?} not a rollable stat", stat),
|
||||||
|
};
|
||||||
|
|
||||||
self.phys_dmg.set(rng.gen_range(other_min, other_max));
|
self
|
||||||
self.spell_dmg.set(rng.gen_range(other_min, other_max));
|
}
|
||||||
self.stamina.set(rng.gen_range(stam_min, stam_max));
|
|
||||||
self.hp.set(self.stamina.base);
|
pub fn create(mut self) -> Cryp {
|
||||||
|
let xp = match self.lvl == 64 {
|
||||||
|
true => u64::max_value(),
|
||||||
|
false => 2_u64.pow(self.lvl.into()),
|
||||||
|
};
|
||||||
|
|
||||||
|
self.xp = xp;
|
||||||
|
|
||||||
|
self.roll_stat(Stat::PhysicalDamage);
|
||||||
|
self.roll_stat(Stat::SpellDamage);
|
||||||
|
self.roll_stat(Stat::Stamina);
|
||||||
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
@ -288,7 +307,7 @@ impl Cryp {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reduce_effect_durations(&mut self, log: &mut Log) -> &mut Cryp {
|
pub fn reduce_effect_durations(&mut self, _log: &mut Log) -> &mut Cryp {
|
||||||
self.effects = self.effects.clone().into_iter().filter_map(|mut effect| {
|
self.effects = self.effects.clone().into_iter().filter_map(|mut effect| {
|
||||||
effect.duration = effect.duration.saturating_sub(1);
|
effect.duration = effect.duration.saturating_sub(1);
|
||||||
|
|
||||||
@ -303,10 +322,10 @@ impl Cryp {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rez(&mut self) -> &mut Cryp {
|
// pub fn rez(&mut self) -> &mut Cryp {
|
||||||
self.hp.set(self.stamina.base);
|
// self.hp.set(self.stamina.base);
|
||||||
self
|
// self
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Stats
|
// Stats
|
||||||
pub fn phys_dmg(&self) -> u64 {
|
pub fn phys_dmg(&self) -> u64 {
|
||||||
|
|||||||
@ -6,13 +6,12 @@ use failure::Error;
|
|||||||
|
|
||||||
// drops
|
// drops
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng};
|
||||||
use rand::distributions::{WeightedIndex};
|
use rand::distributions::{WeightedIndex};
|
||||||
|
|
||||||
use account::Account;
|
use account::Account;
|
||||||
use rpc::{ItemUseParams};
|
use rpc::{ItemUseParams};
|
||||||
use cryp::{cryp_get, cryp_write};
|
use cryp::{Stat, cryp_get, cryp_write};
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
#[derive(Debug,Clone,Copy,PartialEq,Serialize,Deserialize)]
|
||||||
pub enum ItemAction {
|
pub enum ItemAction {
|
||||||
@ -41,16 +40,23 @@ impl Item {
|
|||||||
|
|
||||||
fn apply(&mut self, tx: &mut Transaction, target: Uuid) -> Result<(), Error> {
|
fn apply(&mut self, tx: &mut Transaction, target: Uuid) -> Result<(), Error> {
|
||||||
match self.action {
|
match self.action {
|
||||||
ItemAction::RerollStamina => revive(self, tx, target),
|
ItemAction::RerollStamina => reroll(self, tx, target, Stat::Stamina),
|
||||||
ItemAction::RerollPhysDamage => revive(self, tx, target),
|
ItemAction::RerollPhysDamage => reroll(self, tx, target, Stat::PhysicalDamage),
|
||||||
ItemAction::RerollSpellDamage => revive(self, tx, target),
|
ItemAction::RerollSpellDamage => reroll(self, tx, target, Stat::SpellDamage),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn revive(item: &mut Item, tx: &mut Transaction, target: Uuid) -> Result<(), Error> {
|
// fn revive(item: &mut Item, tx: &mut Transaction, target: Uuid) -> Result<(), Error> {
|
||||||
|
// let mut cryp = cryp_get(tx, target, item.account)?;
|
||||||
|
// cryp.rez();
|
||||||
|
// cryp_write(cryp, tx)?;
|
||||||
|
// return Ok(());
|
||||||
|
// }
|
||||||
|
|
||||||
|
fn reroll(item: &mut Item, tx: &mut Transaction, target: Uuid, stat: Stat) -> Result<(), Error> {
|
||||||
let mut cryp = cryp_get(tx, target, item.account)?;
|
let mut cryp = cryp_get(tx, target, item.account)?;
|
||||||
cryp.rez();
|
cryp.roll_stat(stat);
|
||||||
cryp_write(cryp, tx)?;
|
cryp_write(cryp, tx)?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user