Ändere Altersgrenze für Schwangerschaften auf 16 Jahre und passe entsprechende Abfragen an
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 4m14s

This commit is contained in:
Torsten Schulz (local)
2026-08-26 09:39:12 +02:00
parent 1f18fe135e
commit 521a1104ec

View File

@@ -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 (657016000 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}");
}
}
}