15 KiB
Кабинет директора и классный
Договорённость на срез после событий и общения, не текущий код.
Люди: people.md. Штат: staffing.md.
ИИ: ai.md. Общение: social.md.
События: events.md. Урок: lesson-consequences.md.
У школы появляется власть на карте: проступок помнится коротко, ученика сами гонят к директору — с очередью у кабинета и ожиданием в коридоре. У класса появляется классный (учитель из Управления); он редко оставляет класс после уроков на родительское собрание, и родители реально входят на карту.
Игрок назначает классных и смотрит. Кнопки «вызвать к директору» и «назначить собрание» нет: авто и ИИ классного.
Роль игрока: менеджер / симулятор бога
Экран школы — менеджер, не контроллер юнитов. Игрок задаёт рамку (штат, расписание, правила, классные) и смотрит, как мир сам ходит, ссорится и вызывается к директору. Приказов «этому ученику — сюда» нет и в соседних срезах учёбы и здоровья не появляется.
Что увидит игрок
- В Управлении — у каждого класса слот «классный»: только из нанятых учителей; снять / переназначить.
- На карточке ученика — небольшой список недавних проступков (несколько последних), не шкала дисциплины и не журнал оценок.
- После драки / выговора система может отправить ученика к директору: он идёт, если кабинет занят — ждёт в коридоре у входа, внутри — очередь по одному.
- Редко после последнего урока класса: классный и часть родителей в кабинете класса; тост, что собрание идёт.
На какие вопросы отвечает
- Как приказ «к директору» живёт в том же ИИ, что урок (сильная обязанность), без телепорта.
- Как очередь у
PrincipalsOfficeне ломает присутствие и детерминизм. - Кто такой классный без нового
PositionDef. - Как родитель впервые получает узел на карте и уходит после собрания.
- Что видит игрок без кнопки вмешательства.
Чего нет
- Кнопки игрока «вызвать» / «на собрание».
- Шкалы дисциплины 0…100 и дневника оценок.
- Травм, медкабинета как больницы, выговора в отдельной вкладке «Правила».
- Еженедельного календаря собраний и явки 100%.
- Завуча как отдельной роли в этом срезе.
- Оценок и приказов «отправить домой».
Что меняется в уже принятом
| Было | Стало | Почему |
|---|---|---|
Игрок только наблюдает; приказов нет (ai.md) |
Наблюдает вызовы; назначает классного | Классный — единственное решение игрока в срезе |
Драка → выговор на месте; кабинет директора не заводим (social.md) |
Часть проступков → авто-вызов, очередь | Иначе выговор пустой |
Родители без места на карте (people.md) |
На собрании получают узел и цель | Задел с ростера наконец используется |
SchoolClass — id, год, литера, кабинет, ученики |
Плюс classTeacherId (учитель или пусто) |
Не должность, слот на классе |
EventDef: утро, звонок, сбой генерации |
Плюс вызов / собрание (info) | Игрок видит факт, не только строку в локации |
| «Родителя вызвать — отдельный сюжет» | Собрание классного; не вызов одного родителя к директору | Узкий scope |
Этап A — классный
У SchoolClass опциональный id учителя. Назначить / снять — HTTP через мейлбокс школы (как
предметы), только хозяин. Кандидаты: нанятые с должностью Teacher. Один учитель — классный у
нескольких классов (ваниль не запрещает). Пустой слот: собраний нет, класс живёт как сейчас.
Карточка класса / строка в Управлении показывает имя. Сейв — в people.json / ростере рядом с
классами.
После этапа школа целая: классных можно расставить, вызовов ещё нет.
Этап B — проступки и кабинет
Память
На человеке короткий список недавних проступков (ваниль: несколько последних, потолок в
BehaviorDef, старые вытесняются). Запись: вид (ссора / драка / выговор / …), когда (игровые
часы или день+слот), опционально id второго участника. Не шкала. Писать при содержательном
событии (тот же шов, что мнения), не каждый тик.
Карточка ученика (вкладка «Сейчас» или рядом) показывает список. HTTP через мейлбокс.
Вызов — только авто
Игрок не жмёт. Триггер из уже живых фактов: обрыв драки сотрудником, выговор учителя, при
необходимости грубый срыв с политикой речи — веса и пороги в BehaviorDef, не if по фамилии.
Состояние «вызван» — временное (флаг / обязанность), пока не дошёл, не отбыл приём и не Sorвался день. Без долгой шкалы «дисциплина».
Путь и очередь
Кабинет — PrincipalsOffice (уже в core). Вызванный идёт обычной ходьбой.
- Директор занят приёмом или отсутствует → очередь: ждут в коридоре у связанного узла (ребро карты к кабинету), не толпятся внутри.
- В кабинете — один на приём. Очередь FIFO по id вызова (детерминизм: стабильный порядок).
- Приём — короткое действие (выговор / разговор), мнение о директоре падает, проступок может дописаться; затем ученик свободен (обязанность урока снова тянет).
- Skip пустого времени не оставляет вечный «вызван» без разрешения: утро сбрасывает зависшее или доигрывает по правилу в фазе.
Директор без найма: вызов не стартует (или гаснет) — порог в данных, не паника.
Тост info: кого вызвали (через EventDef). Протокол присутствия: действие / узел достаточно;
отдельное поле «очередь» в кадре — только если без него UI врёт. Версию сокета бампит коммит
фазы, не этот документ.
После этапа школа целая без собраний: драки гонят к директору, очередь видна в коридоре.
Этап C — родительские собрания
Только ИИ классного, редко. Условия (числа в BehaviorDef):
- у класса есть классный;
- рабочий день, после последнего урока этого класса;
- классный сегодня в школе;
- бросок редкости от сида класса и дня.
Классный остаётся в кабинете класса (homeroom). Часть родителей учеников класса приходит: получают место (двор → путь → кабинет), как обычная ходьба. Не 100% семей — доля и «кто» из сида. Учитель-родитель этого класса, если уже в школе, может войти в собрание без второго человека.
Собрание — действие/кружок ограниченной длины; мнения семья↔классный слегка двигаются; тост info. После — родители уходят с карты (снова «вне школы»), классный свободен.
Игрок собрание не назначает и не отменяет.
После этапа школа целая целиком по срезу.
Поток данных
| Что | Где |
|---|---|
classTeacherId |
ростер / сейв; HTTP Управление |
| Список проступков | на человеке; сейв; карточка HTTP |
| Очередь вызовов | состояние школы на потоке воркера; не клиент |
| Выбор «вызвать» / «собрание» | HSchool.Ai + адаптер симуляции |
| Ходьба родителей | те же узлы и travelMinutes, что у всех |
| Тосты | EventDef + доска уведомлений среза 11 |
| Назначение классного | намерение HTTP → мейлбокс (инвариант 3, 7) |
Инвариант 1: клиент не решает, кого вызвать. Инвариант 4: симуляция не знает тосты и ASP.NET.
Где живёт код
Нового проекта нет.
| Что | Куда |
|---|---|
Поля BehaviorDef, триггеры, потолки списка |
HSchool.Content + JSONC core |
SchoolClass + классный |
HSchool.People + сейв |
| Обязанность вызова, очередь, собрание | HSchool.Ai + адаптер в HSchool.Simulation |
| HTTP назначение, карточка проступков | HSchool.Server + клиент Управление / карточка |
EventDef вызова и собрания |
core + шов среза 11 |
| Присутствие | уже есть; бамп протокола только если нужен новый статус |
Советы, которые стоит принять сразу
- Не заводить
PositionDef«классный» — слот на классе, как предметы у учителя. - Не телепортировать к директору и не пихать очередь внутрь кабинета.
- Не давать игроку кнопку вызова: согласие на «только авто».
- Не шкалу дисциплины рядом со списком — два представления одной идеи путают.
- Родитель на карте только на время собрания (этот срез), не «живёт в школе».
- Очередь и вызовы считает поток школы; HTTP их не трогает.
- Редкость собраний — данные, не магическая константа в UI.
Заведомо не сейчас
- Кнопка «вызвать к директору» / «назначить собрание».
- Оценки и журнал —
grades.md; болезни —health.md. - Вызов одного родителя, травмы драки —
fallout.md. - Завуч, рассадка, настроение-нужда.
- Календарь собраний на четверть.
Зафиксировано этим разговором
| Тема | Решение |
|---|---|
| Форма | Именованный срез 12, не off-queue |
| Вызов | Только авто; игрок не жмёт |
| Поведение | Временный «вызван» + короткий список недавних проступков |
| Классный | Только из учителей; Управление |
| Собрание | Только ИИ классного, редко, после последнего урока класса |
| Родители / вызов | Реально ходят по карте; у директора очередь, ждут в коридоре |
| Ваниль | core, не отдельный пак |
| Стоп | После A — классные; после B — кабинет без собраний |
| Протокол | Бамп только если фазе нужен новый статус присутствия |
| Оценки / шкала дисциплины | Не в срезе |
| Роль игрока | Менеджер / симулятор бога: рамка школы, не приказы юнитам |