diff --git a/blastmud_game/src/services/sharing.rs b/blastmud_game/src/services/sharing.rs index aa0559a..0460c3f 100644 --- a/blastmud_game/src/services/sharing.rs +++ b/blastmud_game/src/services/sharing.rs @@ -4,7 +4,7 @@ use std::sync::Arc; #[double] use crate::db::DBTrans; use crate::{ - language::{self, indefinite_article}, + language::{self, indefinite_article, join_words}, message_handler::{ user_commands::{user_error, UResult, UserError, VerbContext}, ListenerSession, @@ -20,6 +20,7 @@ use crate::{ task::{Task, TaskDetails, TaskMeta}, }, regular_tasks::{TaskHandler, TaskRunContext}, + services::skills::calculate_total_stats_skills_for_user, static_content::journals::award_journal_if_needed, DResult, }; @@ -762,12 +763,12 @@ async fn apply_conversation_buff(trans: &DBTrans, to_player: &mut Item) -> DResu }); to_player.temporary_buffs.push(Buff { description: "Sharing knowledge improved you (for a while)".to_owned(), - code: "sharing".to_owned(), + code: "sharIng".to_owned(), cause: BuffCause::WaitingTask { task_type: "ExpireBuff".to_owned(), task_code: exp_task_code.clone(), }, - impacts: buffs, + impacts: buffs.clone(), }); trans .upsert_task(&Task { @@ -783,6 +784,40 @@ async fn apply_conversation_buff(trans: &DBTrans, to_player: &mut Item) -> DResu }) .await?; + if to_player.item_type == "player" { + if let Some(user) = trans.find_by_username(&to_player.item_code).await? { + calculate_total_stats_skills_for_user(to_player, &user); + } + + if let Some((sess, _)) = trans.find_session_for_player(&to_player.item_code).await? { + let impacts_vec = buffs + .iter() + .filter_map(|b| match b { + BuffImpact::ChangeStat { stat, magnitude } => { + Some(format!("{} is increased by {}", stat.display(), magnitude)) + } + _ => None, + }) + .collect::>(); + let impact = join_words( + &impacts_vec + .iter() + .map(|b| b.as_str()) + .collect::>(), + ); + + trans + .queue_for_session( + &sess, + Some(&format!(ansi!( + "You feel sharing knowledge improved you [for the next 10 minutes, {}]\n"), + impact + )), + ) + .await?; + } + } + Ok(()) }