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;
|
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 {
|
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 {
|
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 (
|
WHEN EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM falukant_data.relationship r
|
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)
|
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)
|
OR (r.character1_id = c_m.id AND r.character2_id = c_f.id)
|
||||||
) THEN 'lover'
|
) THEN 'lover'
|
||||||
@@ -3907,7 +3907,7 @@ pub const QUERY_UPDATE_CHARACTER_REPUTATION: &str = r#"
|
|||||||
WHERE id = $2::int;
|
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).
|
/// Max. ein Kind pro Mutter und Kalendertag — unabhängig vom Vater (Ehe/Liebschaft/geplant).
|
||||||
pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
pub const QUERY_GET_LOVER_PREGNANCY_CANDIDATES: &str = r#"
|
||||||
SELECT
|
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 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 = '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,
|
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
|
(CURRENT_DATE - c_female.birthdate::date)::int AS mother_age_days
|
||||||
FROM falukant_data.relationship r
|
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')
|
||||||
JOIN falukant_data.relationship_state rs ON rs.relationship_id = r.id AND rs.active = true
|
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 c1 ON c1.id = r.character1_id
|
||||||
JOIN falukant_data.character c2 ON c2.id = r.character2_id
|
JOIN falukant_data.character c2 ON c2.id = r.character2_id
|
||||||
JOIN falukant_data.character c_female ON c_female.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
|
LEFT JOIN falukant_data.falukant_user fu2 ON fu2.id = c2.user_id
|
||||||
WHERE ((c1.gender = 'female' AND c2.gender = 'male')
|
WHERE ((c1.gender = 'female' AND c2.gender = 'male')
|
||||||
OR (c1.gender = 'male' AND c2.gender = 'female'))
|
OR (c1.gender = 'male' AND c2.gender = 'female'))
|
||||||
AND rs.affection >= 45
|
AND (
|
||||||
AND rs.maintenance_level >= 30
|
-- Verlobungen brauchen weder Liebschaftsunterhalt noch einen Abrechnungslauf.
|
||||||
-- `last_monthly_processed_at` wird im Familien-Tageslauf mitgeführt (1 Spieljahr = 1 Kalendertag).
|
-- Fehlende Zustandszeilen entsprechen dem Backend-Standard (aktiv, Zuneigung 50).
|
||||||
AND rs.last_monthly_processed_at IS NOT NULL
|
(rt.tr = 'engaged' AND rs.active IS NOT FALSE
|
||||||
AND rs.last_monthly_processed_at >= NOW() - INTERVAL '50 days'
|
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 - c1.birthdate::date) >= c1.fertile_from_age
|
||||||
AND (CURRENT_DATE - c2.birthdate::date) >= c2.fertile_from_age
|
AND (CURRENT_DATE - c2.birthdate::date) >= c2.fertile_from_age
|
||||||
AND c_female.pregnancy_due_at IS NULL
|
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).
|
-- Ein Kalendertag entspricht einem Spieljahr (vgl. Ehe-Konzeption).
|
||||||
AND random() * 100.0 < (
|
AND random() * 100.0 < (
|
||||||
LEAST(12.0, GREATEST(0.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 'secret_affair' THEN 2.0
|
||||||
WHEN 'lover' THEN 4.0
|
WHEN 'lover' THEN 4.0
|
||||||
WHEN 'mistress_or_favorite' THEN 6.0
|
WHEN 'mistress_or_favorite' THEN 6.0
|
||||||
ELSE 0.0
|
ELSE 0.0
|
||||||
END
|
END END
|
||||||
+ CASE WHEN rs.affection >= 75 THEN 2.0 ELSE 0.0 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
|
+ 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()`.
|
/// (gleicher Geburtsweg wie Admin/Spiel): Geburt erfolgt, wenn `pregnancy_due_at <= NOW()`.
|
||||||
pub const QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER: &str = r#"
|
pub const QUERY_SET_CHARACTER_PREGNANCY_FROM_LOVER: &str = r#"
|
||||||
UPDATE falukant_data.character c_m
|
UPDATE falukant_data.character c_m
|
||||||
|
|||||||
Reference in New Issue
Block a user