diff --git a/blastmud_game/src/services/combat.rs b/blastmud_game/src/services/combat.rs index aab45c51..5968adc0 100644 --- a/blastmud_game/src/services/combat.rs +++ b/blastmud_game/src/services/combat.rs @@ -130,7 +130,7 @@ impl TaskHandler for AttackTaskHandler { } } -pub async fn consider_xp_gain_for(trans: &DBTrans, by_item: &mut Item, for_item: &Item) -> DResult<()> { +pub async fn consider_reward_for(trans: &DBTrans, by_item: &mut Item, for_item: &Item) -> DResult<()> { if by_item.item_type != "player" { return Ok(()); } @@ -157,10 +157,20 @@ pub async fn consider_xp_gain_for(trans: &DBTrans, by_item: &mut Item, for_item: Some(r) => r }; user.experience.xp_change_for_this_reroll += xp_gain as i64; + + // Now consider kill bonuses... + if for_item.item_type == "npc" { + if let Some(npc) = npc_by_code().get(for_item.item_code.as_str()) { + if let Some(bonus) = &npc.kill_bonus { + user.credits += bonus.payment; + trans.queue_for_session(&session, Some(&format!("{}\nYour wristpad beeps for a credit of {} for that.\n", bonus.msg, bonus.payment))).await?; + } + } + } + trans.save_user_model(&user).await?; trans.queue_for_session(&session, Some(&format!("You gained {} experience points!\n", xp_gain))).await?; - - + Ok(()) } @@ -182,7 +192,7 @@ pub async fn handle_death(trans: &DBTrans, whom: &mut Item) -> DResult<()> { if let Some((atype, acode)) = attacker.split_once("/") { if let Some(aitem) = trans.find_item_by_type_code(atype, acode).await? { let mut new_aitem = (*aitem).clone(); - consider_xp_gain_for(trans, &mut new_aitem, &whom).await?; + consider_reward_for(trans, &mut new_aitem, &whom).await?; stop_attacking_mut(trans, &mut new_aitem, whom, true).await?; trans.save_item_model(&new_aitem).await?; }