Merge branch 'phase/69-offense-memory'

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	src/HSchool.Server/Api/PeopleModels.cs
#	src/HSchool.Server/Game/PersonCardReader.cs
This commit is contained in:
Leonid Pershin
2026-08-21 09:58:31 +03:00
23 changed files with 761 additions and 17 deletions
@@ -997,6 +997,7 @@ internal static class TalkCircleSystem
? Conflict.FightOpinionDelta(rules)
: Conflict.QuarrelOpinionDelta(rules);
ApplyClash(school, circle, people, action, delta);
RecordConflictOffenses(school, circle, people, rules, reprimanded);
if (reprimanded)
{
foreach (var person in people)
@@ -1020,6 +1021,31 @@ internal static class TalkCircleSystem
school.RosterTalkDirty = true;
}
private static void RecordConflictOffenses(
School school,
ActiveTalkCircle circle,
IReadOnlyList<Person> people,
BehaviorDef? rules,
bool reprimanded)
{
if (rules is null)
{
return;
}
var kind = TalkActions.IsFight(circle.ActionId) ? OffenseKinds.Fight : OffenseKinds.Quarrel;
var time = school.Clock.Time;
foreach (var person in people)
{
var other = OffenseMemory.OtherParticipant(person.Id, circle.VictimId, circle.Members);
OffenseMemory.Record(person, kind, time, other, rules);
if (reprimanded)
{
OffenseMemory.Record(person, OffenseKinds.Reprimand, time, other, rules);
}
}
}
private static void ApplyClash(
School school,
ActiveTalkCircle circle,