Integrate servant management into Falukant family dynamics: Added support for servant-related logic in FalukantFamilyWorker, including daily and monthly processing of servant data. Updated SQL queries to handle servant attributes and integrated servant discretion modifiers into relationship calculations, enhancing family interaction and satisfaction tracking.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
//! Liebhaber, Ehezufriedenheit, Ansehen, Monatskosten (Handoff: docs/FALUKANT_DAEMON_HANDOFF.md).
|
||||
//! Benötigt `migrations/001_falukant_family_lovers.sql` (ggf. `002` bei Altbestand), `003` für Ehe-Buffs.
|
||||
//! Benötigt `migrations/001_falukant_family_lovers.sql` (ggf. `002` bei Altbestand), `003` für Ehe-Buffs,
|
||||
//! optional `004` + Backend-Stammdaten für Dienerschaft (`falukant_servants`).
|
||||
//!
|
||||
//! WebSocket: `falukantUpdateFamily` (reason) + `falukantUpdateStatus` für betroffene Nutzer.
|
||||
|
||||
@@ -36,6 +37,8 @@ pub struct FalukantFamilyWorker {
|
||||
last_daily: Option<Instant>,
|
||||
last_monthly: Option<Instant>,
|
||||
schema_ready: bool,
|
||||
/// Migration `004_falukant_servants_daemon.sql` (Dienerschaft-Ticks).
|
||||
servants_schema_ready: bool,
|
||||
}
|
||||
|
||||
impl FalukantFamilyWorker {
|
||||
@@ -47,6 +50,7 @@ impl FalukantFamilyWorker {
|
||||
last_daily: None,
|
||||
last_monthly: None,
|
||||
schema_ready: false,
|
||||
servants_schema_ready: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,14 +102,21 @@ impl FalukantFamilyWorker {
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
conn.prepare("family_schema", QUERY_FAMILY_SCHEMA_READY)?;
|
||||
let rows = conn.execute("family_schema", &[])?;
|
||||
Ok(rows
|
||||
let family_ok = rows
|
||||
.first()
|
||||
.and_then(|r| r.get("ready"))
|
||||
.map(|v| v == "true" || v == "t")
|
||||
.unwrap_or(false))
|
||||
.unwrap_or(false);
|
||||
self.servants_schema_ready =
|
||||
super::falukant_servants::servants_schema_ready(&self.base.pool).unwrap_or(false);
|
||||
Ok(family_ok)
|
||||
}
|
||||
|
||||
fn process_daily(&mut self) -> Result<(), DbError> {
|
||||
if self.servants_schema_ready {
|
||||
super::falukant_servants::run_daily(&self.base, &self.base.broker)?;
|
||||
}
|
||||
|
||||
let mut conn = self
|
||||
.base
|
||||
.pool
|
||||
@@ -160,6 +171,8 @@ impl FalukantFamilyWorker {
|
||||
user1_id: parse_opt_i32(&r, "user1_id"),
|
||||
user2_id: parse_opt_i32(&r, "user2_id"),
|
||||
min_age_years: parse_i32(&r, "min_age_years", 99),
|
||||
servant_disc_u1: parse_i32(&r, "servant_disc_u1", 0),
|
||||
servant_disc_u2: parse_i32(&r, "servant_disc_u2", 0),
|
||||
})
|
||||
})
|
||||
.filter(|l| l.rel_id > 0)
|
||||
@@ -209,6 +222,8 @@ impl FalukantFamilyWorker {
|
||||
if l.maintenance_level >= 70 {
|
||||
v_net -= 1;
|
||||
}
|
||||
let comb = (l.servant_disc_u1 + l.servant_disc_u2) / 2;
|
||||
v_net += comb / 4;
|
||||
let new_vis = clamp_i32(l.visibility + v_net, 0, 100);
|
||||
|
||||
let mut d_net = 0i32;
|
||||
@@ -488,6 +503,10 @@ impl FalukantFamilyWorker {
|
||||
}
|
||||
|
||||
fn process_monthly(&mut self) -> Result<(), DbError> {
|
||||
if self.servants_schema_ready {
|
||||
super::falukant_servants::run_monthly(&self.base, &self.base.broker)?;
|
||||
}
|
||||
|
||||
let mut conn = self
|
||||
.base
|
||||
.pool
|
||||
@@ -780,6 +799,9 @@ struct LoverData {
|
||||
user2_id: Option<i32>,
|
||||
/// Jüngeres Alter beider Partner (Jahre, ganzzahlig); für Altersmalus / Skandal / Ehe.
|
||||
min_age_years: i32,
|
||||
/// Dienerschaft: Diskretionsmodifikator je Haushalt (user_house), MAX pro User.
|
||||
servant_disc_u1: i32,
|
||||
servant_disc_u2: i32,
|
||||
}
|
||||
|
||||
fn push_user_id(set: &mut HashSet<i32>, uid: Option<i32>) {
|
||||
|
||||
Reference in New Issue
Block a user