Skip to content

Commit 3392b19

Browse files
committed
Neg
1 parent 9472430 commit 3392b19

File tree

1 file changed

+72
-15
lines changed

1 file changed

+72
-15
lines changed

‎api/src/assessat.rs‎

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -233,17 +233,52 @@ impl AssessCtx {
233233

234234
/// Compute the stats increment per level and assign it to self.
235235
fn compute_increment(&mut self) {
236-
let ratio = if self.item.boss { 0.125f32 } else { 0.1 };
236+
let multiplier = if self.item.boss { 0.125f32 } else { 0.1 };
237+
let quality_ratio = self.quality as f32 / 100.0;
237238
self.increment = FloatStats {
238-
hp: (self.item.hp as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
239-
mana: (self.item.mana as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
240-
attack: (self.item.attack as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
241-
magic: (self.item.magic as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
242-
defense: (self.item.defense as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
243-
resistance: (self.item.resistance as f32 * ratio).ceil()
244-
* (self.quality as f32 / 100.0),
245-
ward: (self.item.ward as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
246-
foresight: (self.item.foresight as f32 * ratio).ceil() * (self.quality as f32 / 100.0),
239+
hp: increment_at(
240+
self.item.hp_affected_by_quality,
241+
self.item.hp,
242+
multiplier,
243+
quality_ratio,
244+
),
245+
mana: increment_at(
246+
self.item.mana_affected_by_quality,
247+
self.item.mana,
248+
multiplier,
249+
quality_ratio,
250+
),
251+
attack: increment_at(
252+
self.item.attack_affected_by_quality,
253+
self.item.attack,
254+
multiplier,
255+
quality_ratio,
256+
),
257+
magic: increment_at(
258+
self.item.magic_affected_by_quality,
259+
self.item.magic,
260+
multiplier,
261+
quality_ratio,
262+
),
263+
defense: increment_at(
264+
self.item.defense_affected_by_quality,
265+
self.item.defense,
266+
multiplier,
267+
quality_ratio,
268+
),
269+
resistance: increment_at(
270+
self.item.resistance_affected_by_quality,
271+
self.item.resistance,
272+
multiplier,
273+
quality_ratio,
274+
),
275+
ward: increment_at(
276+
self.item.ward_affected_by_quality,
277+
self.item.ward,
278+
multiplier,
279+
quality_ratio,
280+
),
281+
foresight: increment_at(true, self.item.foresight, multiplier, quality_ratio),
247282
}
248283
}
249284

@@ -398,10 +433,14 @@ fn raw_assessat_stat<T: NumCast>(
398433
}
399434

400435
let base_stat = <f32 as num::NumCast>::from(base_stat).unwrap();
401-
let final_stat = (base_stat * quality_ratio
402-
+ (base_stat * multiplier).ceil() * level as f32 * quality_ratio)
403-
.ceil();
404-
<T as num::NumCast>::from(final_stat).unwrap()
436+
if base_stat >= 0.0 {
437+
let final_stat = (base_stat * quality_ratio
438+
+ (base_stat * multiplier).ceil() * level as f32 * quality_ratio)
439+
.ceil();
440+
<T as num::NumCast>::from(final_stat).unwrap()
441+
} else {
442+
<T as num::NumCast>::from((base_stat + level as f32) * quality_ratio).unwrap()
443+
}
405444
}
406445

407446
impl AssessatStats {
@@ -516,7 +555,7 @@ impl QualityTier {
516555
if base_bonus == 0.0 {
517556
0.0
518557
} else {
519-
((base_bonus / 100.0 + 1.0) * self.bonus_multiplier() - 1.0) * 100.0
558+
((base_bonus / 100.0 + 1.0) * self.bonus_multiplier() - 1.0) * 100.0
520559
}
521560
}
522561

@@ -582,6 +621,24 @@ fn adorn_slots_at(item: &AdminItem, level: i16, quality_tier: QualityTier) -> u8
582621
}
583622
}
584623

624+
/// Compute a stat level increment of an item at the given quality ratio.
625+
fn increment_at<T: NumCast + num::Signed>(
626+
affected: bool,
627+
base_stat: T,
628+
multiplier: f32,
629+
quality_ratio: f32,
630+
) -> f32 {
631+
if affected {
632+
if !base_stat.is_negative() {
633+
(<f32 as num::NumCast>::from(base_stat).unwrap() * multiplier).ceil() * quality_ratio
634+
} else {
635+
1.0 * quality_ratio
636+
}
637+
} else {
638+
0.0
639+
}
640+
}
641+
585642
/// Compute a base stat of an item at the given quality ratio.
586643
fn base_stat_at<T: NumCast>(affected: bool, base_stat: T, quality_ratio: f32) -> f32 {
587644
if affected {

0 commit comments

Comments
 (0)