Aktualisiere Logik zur Schwangerschaftsplanung: Ändere die Intervalle für die Schwangerschaftsplanung in den SQL-Abfragen auf 18 Stunden und entferne nicht benötigte Abfragen zur Geburt. Dies verbessert die Einhaltung der Regel, dass eine Mutter pro Kalendertag nur ein Kind gebären kann.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m44s
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m44s
This commit is contained in:
@@ -23,10 +23,9 @@ use super::sql::{
|
||||
QUERY_GET_ACTIVE_LOVER_ROWS_FOR_DAILY, QUERY_GET_ACTIVE_LOVER_ROWS_FOR_MONTHLY,
|
||||
QUERY_GET_ACTIVE_LOVER_ROWS_FOR_INSTALLMENT, QUERY_GET_LOVER_PREGNANCY_CANDIDATES,
|
||||
QUERY_HAS_MOTHER_BIRTH_TODAY,
|
||||
QUERY_GET_MARRIAGE_ROWS, QUERY_GET_USER_HOUSE_ROW_BY_USER, QUERY_INSERT_CHILD,
|
||||
QUERY_INSERT_CHILD_RELATION_LOVER, QUERY_LOVER_BIRTH_PENALTY_MARRIAGE,
|
||||
QUERY_LOVER_BIRTH_PENALTY_REPUTATION, QUERY_LOVER_INSTALLMENT_SCHEMA_READY,
|
||||
QUERY_GET_MARRIAGE_ROWS, QUERY_GET_USER_HOUSE_ROW_BY_USER, QUERY_LOVER_INSTALLMENT_SCHEMA_READY,
|
||||
QUERY_MARK_LOVER_DAILY_DONE, QUERY_MARK_LOVER_INSTALLMENT_AT, QUERY_MARK_LOVER_MONTHLY_DONE,
|
||||
QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER,
|
||||
QUERY_MARRIAGE_SUBTRACT_SATISFACTION, QUERY_RESET_LOVER_UNDERPAY_COUNTERS,
|
||||
QUERY_UPDATE_CHARACTER_REPUTATION, QUERY_UPDATE_LOVER_UNDERPAY_STATE,
|
||||
QUERY_UPDATE_LOVER_VISIBILITY_DISCRETION, QUERY_UPDATE_MARRIAGE_STATE_AND_BUFFS,
|
||||
@@ -1010,12 +1009,9 @@ impl FalukantFamilyWorker {
|
||||
.map_err(|e| DbError::new(format!("DB-Verbindung fehlgeschlagen: {e}")))?;
|
||||
|
||||
conn.prepare("lover_preg", QUERY_GET_LOVER_PREGNANCY_CANDIDATES)?;
|
||||
conn.prepare("set_lover_preg", QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER)?;
|
||||
let rows = conn.execute("lover_preg", &[])?;
|
||||
|
||||
conn.prepare("insert_child", QUERY_INSERT_CHILD)?;
|
||||
conn.prepare("insert_child_rel_lover", QUERY_INSERT_CHILD_RELATION_LOVER)?;
|
||||
conn.prepare("pen_mar", QUERY_LOVER_BIRTH_PENALTY_MARRIAGE)?;
|
||||
conn.prepare("pen_rep", QUERY_LOVER_BIRTH_PENALTY_REPUTATION)?;
|
||||
conn.prepare("has_mother_birth_today", QUERY_HAS_MOTHER_BIRTH_TODAY)?;
|
||||
|
||||
for row in rows {
|
||||
@@ -1024,60 +1020,28 @@ impl FalukantFamilyWorker {
|
||||
if father_cid < 0 || mother_cid < 0 {
|
||||
continue;
|
||||
}
|
||||
let title_of_nobility = parse_i32(&row, "title_of_nobility", 0);
|
||||
let last_name = parse_i32(&row, "last_name", 0);
|
||||
let region_id = parse_i32(&row, "region_id", 0);
|
||||
let father_uid = parse_opt_i32(&row, "father_uid");
|
||||
let mother_uid = parse_opt_i32(&row, "mother_uid");
|
||||
if mother_uid.is_some() && Self::mother_already_had_birth_today(&mut conn, mother_cid)? {
|
||||
if Self::mother_already_had_birth_today(&mut conn, mother_cid)? {
|
||||
continue;
|
||||
}
|
||||
|
||||
let gender = if self.dist.sample(&mut self.rng) < 0.5 {
|
||||
"male"
|
||||
} else {
|
||||
"female"
|
||||
};
|
||||
|
||||
let inserted =
|
||||
conn.execute("insert_child", &[®ion_id, &gender, &last_name, &title_of_nobility])?;
|
||||
let child_cid = inserted
|
||||
.first()
|
||||
.and_then(|r| r.get("child_cid"))
|
||||
.and_then(|v| v.parse::<i32>().ok())
|
||||
.unwrap_or(-1);
|
||||
if child_cid < 0 {
|
||||
let set_rows = conn.execute("set_lover_preg", &[&mother_cid, &father_cid])?;
|
||||
if set_rows.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
conn.execute(
|
||||
"insert_child_rel_lover",
|
||||
&[&father_cid, &mother_cid, &child_cid],
|
||||
)?;
|
||||
|
||||
conn.execute("pen_mar", &[&father_cid])?;
|
||||
conn.execute("pen_mar", &[&mother_cid])?;
|
||||
conn.execute("pen_rep", &[&father_cid])?;
|
||||
conn.execute("pen_rep", &[&mother_cid])?;
|
||||
|
||||
if let Some(uid) = father_uid {
|
||||
self.publish_children(uid);
|
||||
self.publish_falukant_update_family_and_status(uid, "lover_pregnancy");
|
||||
}
|
||||
if let Some(uid) = mother_uid {
|
||||
self.publish_children(uid);
|
||||
self.publish_falukant_update_family_and_status(uid, "lover_pregnancy");
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn publish_children(&self, user_id: i32) {
|
||||
let children_update =
|
||||
format!(r#"{{"event":"children_update","user_id":{}}}"#, user_id);
|
||||
self.base.broker.publish(children_update);
|
||||
self.publish_falukant_update_family_and_status(user_id, "lover_birth");
|
||||
}
|
||||
|
||||
fn mother_already_had_birth_today(
|
||||
conn: &mut crate::db::DbConnection,
|
||||
mother_character_id: i32,
|
||||
|
||||
Reference in New Issue
Block a user