diff --git a/src/worker/sql.rs b/src/worker/sql.rs index d29dc1e..ee4f272 100755 --- a/src/worker/sql.rs +++ b/src/worker/sql.rs @@ -2098,9 +2098,8 @@ pub const QUERY_AUTOBATISM: &str = r#" // Konzeption: genau ein Wurf pro Ehe und Kalendertag (`UserCharacterWorker`), mit random() < prob_year. // Entspricht „ein Spieljahr pro Kalendertag“: keine 24× stündlichen Versuche mehr, keine „Hochzeitsnacht“ // als Extra-Event — erste mögliche Konzeption am nächsten täglichen Fertilitätslauf nach der Hochzeit. -// Grenzen in Tagen: 1 Jahr ≈ 365 Tage (mother_age_days). -// Erstes gemeinsames Kind (0 Zeilen in child_relation für dieses Paar): prob_year mindestens 1.0 -// im Alter 18–~44 (6570–16000 Tage), damit kinderlose Ehen nicht über viele Jahre ohne Nachwuchs bleiben. +// Ein Kalendertag entspricht einem Spieljahr; `mother_age_days` ist daher zugleich das +// Alter in Spieljahren. Die Altersgrenze muss folglich 16 (nicht 16 * 365) sein. // WICHTIG: Vater/Mutter und Alter immer über gender ableiten — nicht character1/2 fest als Mutter! // // Ablauf Ehe: (1) Konzeption setzt `marriage_pregnancy_due_at` (+18 Stunden), (2) Geburt wenn fällig. @@ -2209,7 +2208,7 @@ pub const QUERY_TRY_MARRIAGE_CONCEPTION_UPDATE: &str = r#" conceivable AS ( SELECT ma.relationship_id FROM mother_age ma - WHERE ma.mother_age_days >= 5110 + WHERE ma.mother_age_days >= 16 AND random() < ma.prob_year ) UPDATE falukant_data.relationship r @@ -2286,7 +2285,7 @@ pub const QUERY_GET_LEGACY_MARRIAGE_INSTANT_PREGNANCY_CANDIDATES: &str = r#" mother_age_days, prob_year * 100.0 AS prob_pct FROM mother_age - WHERE mother_age_days >= 5110 + WHERE mother_age_days >= 16 AND random() < prob_year; "#; @@ -3855,7 +3854,8 @@ pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#" WHERE cr.mother_character_id = c_female.id AND cr.created_at::date = CURRENT_DATE ) - AND (CURRENT_DATE - c_female.birthdate::date) >= 5110 + -- Ein Kalendertag entspricht einem Spieljahr (vgl. Ehe-Konzeption). + AND (CURRENT_DATE - c_female.birthdate::date) >= 16 AND random() * 100.0 < ( LEAST(12.0, GREATEST(0.0, CASE rs.lover_role @@ -4088,4 +4088,16 @@ mod tests { assert!(QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER.contains(AGE_16_GUARD)); assert!(QUERY_GET_PLANNED_CHARACTER_BIRTH_DELIVERIES.contains("pregnancy_due_at <= NOW()")); } + + #[test] + fn automatic_conception_uses_game_years_not_real_world_days() { + for query in [ + QUERY_TRY_MARRIAGE_CONCEPTION_UPDATE, + QUERY_GET_LEGACY_MARRIAGE_INSTANT_PREGNANCY_CANDIDATES, + QUERY_GET_LOVER_PREGNANCY_CANDIDATES, + ] { + assert!(!query.contains("5110"), "{query}"); + assert!(query.contains(">= 16"), "{query}"); + } + } }