Ermögliche Schwangerschaften während der Verlobung
Some checks failed
Deploy yourpart (blue-green) / deploy (push) Has been cancelled
Some checks failed
Deploy yourpart (blue-green) / deploy (push) Has been cancelled
This commit is contained in:
@@ -1062,11 +1062,16 @@ impl FalukantFamilyWorker {
|
||||
continue;
|
||||
}
|
||||
|
||||
let reason = if row.get("relationship_type").map(String::as_str) == Some("engaged") {
|
||||
"engaged_pregnancy"
|
||||
} else {
|
||||
"lover_pregnancy"
|
||||
};
|
||||
if let Some(uid) = father_uid {
|
||||
self.publish_falukant_update_family_and_status(uid, "lover_pregnancy");
|
||||
self.publish_falukant_update_family_and_status(uid, reason);
|
||||
}
|
||||
if let Some(uid) = mother_uid {
|
||||
self.publish_falukant_update_family_and_status(uid, "lover_pregnancy");
|
||||
self.publish_falukant_update_family_and_status(uid, reason);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2370,7 +2370,7 @@ pub const QUERY_GET_PLANNED_CHARACTER_BIRTH_DELIVERIES: &str = r#"
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM falukant_data.relationship r
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id AND rt.tr = 'lover'
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id AND rt.tr IN ('lover', 'engaged')
|
||||
WHERE (r.character1_id = c_f.id AND r.character2_id = c_m.id)
|
||||
OR (r.character1_id = c_m.id AND r.character2_id = c_f.id)
|
||||
) THEN 'lover'
|
||||
@@ -3907,7 +3907,7 @@ pub const QUERY_UPDATE_CHARACTER_REPUTATION: &str = r#"
|
||||
WHERE id = $2::int;
|
||||
"#;
|
||||
|
||||
/// Liebschafts-Konzeption: gleiche Sperre wie Ehe auf `character.pregnancy_due_at` (geplante Schwangerschaft).
|
||||
/// Konzeption bei Liebschaften und Verlobten: gleiche Sperre wie Ehe auf `character.pregnancy_due_at` (geplante Schwangerschaft).
|
||||
/// Max. ein Kind pro Mutter und Kalendertag — unabhängig vom Vater (Ehe/Liebschaft/geplant).
|
||||
pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
||||
SELECT
|
||||
@@ -3923,10 +3923,11 @@ pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
||||
CASE WHEN c1.gender = 'male' THEN c1.region_id ELSE c2.region_id END AS region_id,
|
||||
CASE WHEN c1.gender = 'male' THEN fu1.id ELSE fu2.id END AS father_uid,
|
||||
CASE WHEN c1.gender = 'female' THEN fu1.id ELSE fu2.id END AS mother_uid,
|
||||
rt.tr AS relationship_type,
|
||||
(CURRENT_DATE - c_female.birthdate::date)::int AS mother_age_days
|
||||
FROM falukant_data.relationship r
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id AND rt.tr = 'lover'
|
||||
JOIN falukant_data.relationship_state rs ON rs.relationship_id = r.id AND rs.active = true
|
||||
JOIN falukant_type.relationship rt ON rt.id = r.relationship_type_id AND rt.tr IN ('lover', 'engaged')
|
||||
LEFT JOIN falukant_data.relationship_state rs ON rs.relationship_id = r.id
|
||||
JOIN falukant_data.character c1 ON c1.id = r.character1_id
|
||||
JOIN falukant_data.character c2 ON c2.id = r.character2_id
|
||||
JOIN falukant_data.character c_female ON c_female.id = (
|
||||
@@ -3936,11 +3937,18 @@ pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
||||
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||
WHERE ((c1.gender = 'female' AND c2.gender = 'male')
|
||||
OR (c1.gender = 'male' AND c2.gender = 'female'))
|
||||
AND rs.affection >= 45
|
||||
AND rs.maintenance_level >= 30
|
||||
-- `last_monthly_processed_at` wird im Familien-Tageslauf mitgeführt (1 Spieljahr = 1 Kalendertag).
|
||||
AND rs.last_monthly_processed_at IS NOT NULL
|
||||
AND rs.last_monthly_processed_at >= NOW() - INTERVAL '50 days'
|
||||
AND (
|
||||
-- Verlobungen brauchen weder Liebschaftsunterhalt noch einen Abrechnungslauf.
|
||||
-- Fehlende Zustandszeilen entsprechen dem Backend-Standard (aktiv, Zuneigung 50).
|
||||
(rt.tr = 'engaged' AND rs.active IS NOT FALSE
|
||||
AND COALESCE(rs.affection, 50) >= 45
|
||||
AND c1.health > 0 AND c2.health > 0)
|
||||
OR (rt.tr = 'lover' AND rs.active = true
|
||||
AND rs.affection >= 45
|
||||
AND rs.maintenance_level >= 30
|
||||
AND rs.last_monthly_processed_at IS NOT NULL
|
||||
AND rs.last_monthly_processed_at >= NOW() - INTERVAL '50 days')
|
||||
)
|
||||
AND (CURRENT_DATE - c1.birthdate::date) >= c1.fertile_from_age
|
||||
AND (CURRENT_DATE - c2.birthdate::date) >= c2.fertile_from_age
|
||||
AND c_female.pregnancy_due_at IS NULL
|
||||
@@ -3964,19 +3972,19 @@ pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
||||
-- Ein Kalendertag entspricht einem Spieljahr (vgl. Ehe-Konzeption).
|
||||
AND random() * 100.0 < (
|
||||
LEAST(12.0, GREATEST(0.0,
|
||||
CASE rs.lover_role
|
||||
CASE WHEN rt.tr = 'engaged' THEN 4.0 ELSE CASE rs.lover_role
|
||||
WHEN 'secret_affair' THEN 2.0
|
||||
WHEN 'lover' THEN 4.0
|
||||
WHEN 'mistress_or_favorite' THEN 6.0
|
||||
ELSE 0.0
|
||||
END
|
||||
END END
|
||||
+ CASE WHEN rs.affection >= 75 THEN 2.0 ELSE 0.0 END
|
||||
+ CASE WHEN rs.visibility >= 70 AND rs.affection < 50 THEN -2.0 ELSE 0.0 END
|
||||
))
|
||||
);
|
||||
"#;
|
||||
|
||||
/// Liebschafts-Konzeption setzt eine geplante Schwangerschaft am Mutter-Charakter
|
||||
/// Konzeption bei Liebschaften/Verlobten setzt eine geplante Schwangerschaft am Mutter-Charakter
|
||||
/// (gleicher Geburtsweg wie Admin/Spiel): Geburt erfolgt, wenn `pregnancy_due_at <= NOW()`.
|
||||
pub const QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER: &str = r#"
|
||||
UPDATE falukant_data.character c_m
|
||||
|
||||
Reference in New Issue
Block a user