Dress people at generation from a separate apparel stream.
Wardrobes live on the person in people.json: everyday layers, textbooks per parallel, and chance-based bags from catalog data. Hauling and the carry cap are defs, not constants. The golden roster gains an items column; later family members shift because Hauling consumes extra appearance rolls. Old saves without items are dressed on load. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -20,7 +20,7 @@ way; this file is *how to work in them*.
|
|||||||
| connection handling, workers, saves | `src/HSchool.Server` |
|
| connection handling, workers, saves | `src/HSchool.Server` |
|
||||||
| what runs locally | `src/HSchool.AppHost/AppHost.cs` |
|
| what runs locally | `src/HSchool.AppHost/AppHost.cs` |
|
||||||
| screens, dialogs, formatting, UI language | `src/HSchool.Client/src` |
|
| screens, dialogs, formatting, UI language | `src/HSchool.Client/src` |
|
||||||
| clothing, inventory, climate, dress codes | [`docs/design/inventory.md`](docs/design/inventory.md) — slice 7, phases 29–37; country is live, clothing is not |
|
| clothing, inventory, climate, dress codes | [`docs/design/inventory.md`](docs/design/inventory.md) — slice 7, phases 29–37; country and wardrobes are live, weather is not |
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
|
|||||||
@@ -12,30 +12,30 @@
|
|||||||
|
|
||||||
## Задачи
|
## Задачи
|
||||||
|
|
||||||
- [ ] Экземпляр вещи на человеке: `def`, `color`, `condition` (1), место (`worn` / `bag` /
|
- [x] Экземпляр вещи на человеке: `def`, `color`, `condition` (1), место (`worn` / `bag` /
|
||||||
`locker` / `home`), для учебника — `subject`
|
`locker` / `home`), для учебника — `subject`
|
||||||
- [ ] Генератор одевает учеников, сотрудников, родителей и соискателей от семейного сида:
|
- [x] Генератор одевает учеников, сотрудников, родителей и соискателей от семейного сида:
|
||||||
слои без пересечения, пол, возраст, дефолтные правила (обычная форма, без яркого на теле)
|
слои без пересечения, пол, возраст, дефолтные правила (обычная форма, без яркого на теле)
|
||||||
- [ ] Учебники — по одному на предмет параллели ученика; в сумке пока могут лежать все, разнос
|
- [x] Учебники — по одному на предмет параллели ученика; в сумке пока могут лежать все, разнос
|
||||||
«сегодняшние vs шкафчик» — в фазе 33/35
|
«сегодняшние vs шкафчик» — в фазе 33/35
|
||||||
- [ ] Портфель, телефон, бутылка — с возрастом и шансом из данных, не из константы в генераторе
|
- [x] Портфель, телефон, бутылка — с возрастом и шансом из данных, не из константы в генераторе
|
||||||
- [ ] Навык `Hauling` (`always`); предел массы в дефе правил; на карточке несёшь/можешь.
|
- [x] Навык `Hauling` (`always`); предел массы в дефе правил; на карточке несёшь/можешь.
|
||||||
Перегруз ходьбу не трогает; в сумку сверх предела генератор не кладёт
|
Перегруз ходьбу не трогает; в сумку сверх предела генератор не кладёт
|
||||||
- [ ] `GET .../people/{id}` отдаёт надетое и ношу; список людей — нет
|
- [x] `GET .../people/{id}` отдаёт надетое и ношу; список людей — нет
|
||||||
- [ ] Карточка пока без вкладок: секции «Одежда» и «Ноша» в том же свитке
|
- [x] Карточка пока без вкладок: секции «Одежда» и «Ноша» в том же свитке
|
||||||
- [ ] `people.json` пишется при создании и наборе; золотой отпечаток обновляется в этом коммите
|
- [x] `people.json` пишется при создании и наборе; золотой отпечаток обновляется в этом коммите
|
||||||
с объяснением, что изменилось
|
с объяснением, что изменилось
|
||||||
- [ ] Строки через `t(...)` / локали каталога
|
- [x] Строки через `t(...)` / локали каталога
|
||||||
|
|
||||||
## Тесты, без которых фаза не закрыта
|
## Тесты, без которых фаза не закрыта
|
||||||
|
|
||||||
- [ ] Тот же сид, страна, карта и язык → те же id вещей, цвета и места
|
- [x] Тот же сид, страна, карта и язык → те же id вещей, цвета и места
|
||||||
- [ ] На одном слое не две вещи; платье занимает низ и верх сразу
|
- [x] На одном слое не две вещи; платье занимает низ и верх сразу
|
||||||
- [ ] Юбка не выдаётся мужчинам на тело; яркий верх не выдаётся на тело при дефолтных правилах
|
- [x] Юбка не выдаётся мужчинам на тело; яркий верх не выдаётся на тело при дефолтных правилах
|
||||||
- [ ] Ученик параллели с математикой имеет учебник этого предмета
|
- [x] Ученик параллели с математикой имеет учебник этого предмета
|
||||||
- [ ] Родитель и соискатель одеты
|
- [x] Родитель и соискатель одеты
|
||||||
- [ ] Масса в сумке ≤ предела
|
- [x] Масса в сумке ≤ предела
|
||||||
- [ ] Старый `people.json` без инвентаря поднимается: генератор одевает при загрузке и пишет
|
- [x] Старый `people.json` без инвентаря поднимается: генератор одевает при загрузке и пишет
|
||||||
файл (как пул соискателей в фазе 11)
|
файл (как пул соискателей в фазе 11)
|
||||||
|
|
||||||
## Критерий готовности
|
## Критерий готовности
|
||||||
|
|||||||
+29
-1
@@ -211,7 +211,8 @@ are `400` `invalid-query`. `lang` is `ru` or `en`, same as the catalog — anyth
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The list row is identity only — skills, traits and needs stay on the card. Age is computed from
|
The list row is identity only — skills, traits, needs, clothes and what they carry stay on the
|
||||||
|
card. Age is computed from
|
||||||
`birthDate` and the published game time, not from the World.
|
`birthDate` and the published game time, not from the World.
|
||||||
|
|
||||||
Applicants live in `saves/{id}.people.json` next to the roster and are **not** in this list.
|
Applicants live in `saves/{id}.people.json` next to the roster and are **not** in this list.
|
||||||
@@ -254,6 +255,11 @@ is that def in the request locale. HTTP JSON is additive — no protocol version
|
|||||||
`skills` lists only keys the person has, not every `SkillDef` in the catalog. A first-year has
|
`skills` lists only keys the person has, not every `SkillDef` in the catalog. A first-year has
|
||||||
no Chemistry; a related tongue from the name set may sit beside the native at a low value.
|
no Chemistry; a related tongue from the name set may sit beside the native at a low value.
|
||||||
|
|
||||||
|
`worn` is what is on the body right now: def, colour, and the layers it occupies. `carried` is
|
||||||
|
the bag — textbooks include `subject`. `carryMass` / `carryCapacity` are kilograms; overload
|
||||||
|
does not slow walking. Home and locker stay in `people.json` and are not on this card. The
|
||||||
|
people list does not include any of these fields.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"id": "f0.c0",
|
"id": "f0.c0",
|
||||||
@@ -276,7 +282,29 @@ no Chemistry; a related tongue from the name set may sit beside the native at a
|
|||||||
"children": [],
|
"children": [],
|
||||||
"siblings": [{ "id": "f0.c1", "fullName": "Иванов Кирилл Петрович", "female": false }],
|
"siblings": [{ "id": "f0.c1", "fullName": "Иванов Кирилл Петрович", "female": false }],
|
||||||
"partners": []
|
"partners": []
|
||||||
|
},
|
||||||
|
"worn": [
|
||||||
|
{
|
||||||
|
"defName": "Shirt",
|
||||||
|
"label": "Рубашка",
|
||||||
|
"color": "White",
|
||||||
|
"colorLabel": "Белый",
|
||||||
|
"layers": [{ "defName": "Top", "label": "Верх" }]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"carried": [
|
||||||
|
{
|
||||||
|
"defName": "Textbook",
|
||||||
|
"label": "Учебник",
|
||||||
|
"color": null,
|
||||||
|
"colorLabel": null,
|
||||||
|
"subject": "Mathematics",
|
||||||
|
"subjectLabel": "Математика",
|
||||||
|
"mass": 0.4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"carryMass": 1.2,
|
||||||
|
"carryCapacity": 14
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ describe('t', () => {
|
|||||||
.toBe('Not enough money: 8 000 of 10 000 is committed, 2 000 free, 12 000 needed.');
|
.toBe('Not enough money: 8 000 of 10 000 is committed, 2 000 free, 12 000 needed.');
|
||||||
expect(t('staffUncoveredShort', { label: 'Начальные классы', min: 1, max: 4, n: 3 }))
|
expect(t('staffUncoveredShort', { label: 'Начальные классы', min: 1, max: 4, n: 3 }))
|
||||||
.toBe('Начальные классы (1–4) — 3 short');
|
.toBe('Начальные классы (1–4) — 3 short');
|
||||||
|
expect(t('peopleCarryMass', { held: '1.2', cap: '14' })).toBe('1.2 / 14 kg');
|
||||||
expect(t('mapOccupancy', { name: 'Кабинет 204', activity: 'Математика · 5Б' }))
|
expect(t('mapOccupancy', { name: 'Кабинет 204', activity: 'Математика · 5Б' }))
|
||||||
.toBe('Кабинет 204 (Математика · 5Б)');
|
.toBe('Кабинет 204 (Математика · 5Б)');
|
||||||
expect(t('mapHeadcount', { name: 'Коридор', count: 12 })).toBe('Коридор (12)');
|
expect(t('mapHeadcount', { name: 'Коридор', count: 12 })).toBe('Коридор (12)');
|
||||||
|
|||||||
@@ -128,6 +128,9 @@ const ru = {
|
|||||||
peopleSkills: 'Навыки',
|
peopleSkills: 'Навыки',
|
||||||
peopleTraits: 'Черты',
|
peopleTraits: 'Черты',
|
||||||
peopleNeeds: 'Нужды',
|
peopleNeeds: 'Нужды',
|
||||||
|
peopleApparel: 'Одежда',
|
||||||
|
peopleCarry: 'Ноша',
|
||||||
|
peopleCarryMass: '{held} / {cap} кг',
|
||||||
peopleFamily: 'Семья',
|
peopleFamily: 'Семья',
|
||||||
peopleParents: 'Родители',
|
peopleParents: 'Родители',
|
||||||
peopleChildren: 'Дети',
|
peopleChildren: 'Дети',
|
||||||
@@ -345,6 +348,9 @@ const en: Messages = {
|
|||||||
peopleSkills: 'Skills',
|
peopleSkills: 'Skills',
|
||||||
peopleTraits: 'Traits',
|
peopleTraits: 'Traits',
|
||||||
peopleNeeds: 'Needs',
|
peopleNeeds: 'Needs',
|
||||||
|
peopleApparel: 'Clothes',
|
||||||
|
peopleCarry: 'Carried',
|
||||||
|
peopleCarryMass: '{held} / {cap} kg',
|
||||||
peopleFamily: 'Family',
|
peopleFamily: 'Family',
|
||||||
peopleParents: 'Parents',
|
peopleParents: 'Parents',
|
||||||
peopleChildren: 'Children',
|
peopleChildren: 'Children',
|
||||||
|
|||||||
@@ -291,6 +291,28 @@ export interface PersonCard {
|
|||||||
readonly siblings: readonly PersonRel[];
|
readonly siblings: readonly PersonRel[];
|
||||||
readonly partners: readonly PersonRel[];
|
readonly partners: readonly PersonRel[];
|
||||||
};
|
};
|
||||||
|
readonly worn: readonly WornItem[];
|
||||||
|
readonly carried: readonly CarriedItem[];
|
||||||
|
readonly carryMass: number;
|
||||||
|
readonly carryCapacity: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface WornItem {
|
||||||
|
readonly defName: string;
|
||||||
|
readonly label: string;
|
||||||
|
readonly color: string | null;
|
||||||
|
readonly colorLabel: string | null;
|
||||||
|
readonly layers: readonly DefLabel[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CarriedItem {
|
||||||
|
readonly defName: string;
|
||||||
|
readonly label: string;
|
||||||
|
readonly color: string | null;
|
||||||
|
readonly colorLabel: string | null;
|
||||||
|
readonly subject: string | null;
|
||||||
|
readonly subjectLabel: string | null;
|
||||||
|
readonly mass: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchPeople(schoolId: number, query: PeopleQuery, lang: string): Promise<PeoplePage> {
|
export async function fetchPeople(schoolId: number, query: PeopleQuery, lang: string): Promise<PeoplePage> {
|
||||||
|
|||||||
@@ -644,6 +644,11 @@ body {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.people__carry-mass {
|
||||||
|
margin: 0 0 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
.people__pair {
|
.people__pair {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ function personCard(): PersonCard {
|
|||||||
activity: null,
|
activity: null,
|
||||||
activityLabel: null,
|
activityLabel: null,
|
||||||
family: { parents: [], children: [], siblings: [], partners: [] },
|
family: { parents: [], children: [], siblings: [], partners: [] },
|
||||||
|
worn: [],
|
||||||
|
carried: [],
|
||||||
|
carryMass: 0,
|
||||||
|
carryCapacity: 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* @vitest-environment happy-dom
|
||||||
|
*/
|
||||||
|
import { afterEach, describe, expect, it } from 'vitest';
|
||||||
|
import type { PersonCard } from '../net/api.ts';
|
||||||
|
import { getLocale, setLocale } from '../i18n/locale.ts';
|
||||||
|
import { t } from '../i18n/strings.ts';
|
||||||
|
import { renderPersonCard } from './personCard.ts';
|
||||||
|
|
||||||
|
const initial = getLocale();
|
||||||
|
|
||||||
|
afterEach(() => setLocale(initial));
|
||||||
|
|
||||||
|
function card(overrides: Partial<PersonCard> = {}): PersonCard {
|
||||||
|
return {
|
||||||
|
id: 'f0.c0',
|
||||||
|
fullName: 'Иванова Мария',
|
||||||
|
surname: 'Иванова',
|
||||||
|
given: 'Мария',
|
||||||
|
patronymic: '',
|
||||||
|
female: true,
|
||||||
|
age: 12,
|
||||||
|
birthDate: '2000-03-14',
|
||||||
|
roles: ['student'],
|
||||||
|
classYear: 5,
|
||||||
|
classLetter: 'А',
|
||||||
|
classId: 'class-1',
|
||||||
|
position: null,
|
||||||
|
positionLabel: null,
|
||||||
|
body: [],
|
||||||
|
skills: [],
|
||||||
|
traits: [],
|
||||||
|
needs: [],
|
||||||
|
activity: null,
|
||||||
|
activityLabel: null,
|
||||||
|
family: { parents: [], children: [], siblings: [], partners: [] },
|
||||||
|
worn: [
|
||||||
|
{
|
||||||
|
defName: 'Shirt',
|
||||||
|
label: 'Рубашка',
|
||||||
|
color: 'White',
|
||||||
|
colorLabel: 'Белый',
|
||||||
|
layers: [{ defName: 'Top', label: 'Верх' }],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
carried: [
|
||||||
|
{
|
||||||
|
defName: 'Textbook',
|
||||||
|
label: 'Учебник',
|
||||||
|
color: null,
|
||||||
|
colorLabel: null,
|
||||||
|
subject: 'Mathematics',
|
||||||
|
subjectLabel: 'Математика',
|
||||||
|
mass: 0.4,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
carryMass: 1.2,
|
||||||
|
carryCapacity: 14,
|
||||||
|
...overrides,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('renderPersonCard', () => {
|
||||||
|
it('shows worn layers with colour and carried mass in the same scroll', () => {
|
||||||
|
setLocale('ru');
|
||||||
|
const root = document.createElement('div');
|
||||||
|
renderPersonCard(root, card(), () => {});
|
||||||
|
|
||||||
|
expect(root.textContent).toContain(t('peopleApparel'));
|
||||||
|
expect(root.textContent).toContain('Верх');
|
||||||
|
expect(root.textContent).toContain('Рубашка · Белый');
|
||||||
|
expect(root.textContent).toContain(t('peopleCarry'));
|
||||||
|
expect(root.textContent).toContain(t('peopleCarryMass', { held: '1.2', cap: '14' }));
|
||||||
|
expect(root.textContent).toContain('Учебник · Математика');
|
||||||
|
expect(root.querySelector('.people__tabs')).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -47,6 +47,8 @@ export function renderPersonCard(
|
|||||||
appendPairs(parent, t('peopleSkills'), card.skills);
|
appendPairs(parent, t('peopleSkills'), card.skills);
|
||||||
appendTags(parent, t('peopleTraits'), card.traits.map((row) => row.label));
|
appendTags(parent, t('peopleTraits'), card.traits.map((row) => row.label));
|
||||||
appendNeeds(parent, t('peopleNeeds'), card.needs);
|
appendNeeds(parent, t('peopleNeeds'), card.needs);
|
||||||
|
appendApparel(parent, card.worn);
|
||||||
|
appendCarry(parent, card);
|
||||||
|
|
||||||
const family = section(t('peopleFamily'));
|
const family = section(t('peopleFamily'));
|
||||||
appendRelatives(family, t('peopleParents'), card.family.parents, onRelative);
|
appendRelatives(family, t('peopleParents'), card.family.parents, onRelative);
|
||||||
@@ -112,6 +114,58 @@ function appendPairs(
|
|||||||
parent.append(section(title), grid);
|
parent.append(section(title), grid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function appendApparel(parent: HTMLElement, rows: PersonCard['worn']): void {
|
||||||
|
if (rows.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const grid = el('dl', { class: 'people__pairs' });
|
||||||
|
for (const row of rows) {
|
||||||
|
const layers = row.layers.map((layer) => layer.label).join(', ');
|
||||||
|
const color = row.colorLabel ?? row.color;
|
||||||
|
const value = color !== null && color.length > 0 ? `${row.label} · ${color}` : row.label;
|
||||||
|
grid.append(
|
||||||
|
el(
|
||||||
|
'div',
|
||||||
|
{ class: 'people__pair' },
|
||||||
|
el('dt', { text: layers.length > 0 ? layers : row.label }),
|
||||||
|
el('dd', { text: value }),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent.append(section(t('peopleApparel')), grid);
|
||||||
|
}
|
||||||
|
|
||||||
|
function appendCarry(parent: HTMLElement, card: PersonCard): void {
|
||||||
|
const mass = el('p', {
|
||||||
|
class: 'people__carry-mass',
|
||||||
|
text: t('peopleCarryMass', { held: formatMass(card.carryMass), cap: formatMass(card.carryCapacity) }),
|
||||||
|
});
|
||||||
|
const grid = el('dl', { class: 'people__pairs' });
|
||||||
|
for (const row of card.carried) {
|
||||||
|
const extra = row.subjectLabel ?? row.colorLabel;
|
||||||
|
const value = extra !== null && extra.length > 0 ? `${row.label} · ${extra}` : row.label;
|
||||||
|
grid.append(
|
||||||
|
el(
|
||||||
|
'div',
|
||||||
|
{ class: 'people__pair' },
|
||||||
|
el('dt', { text: value }),
|
||||||
|
el('dd', { text: formatMass(row.mass) }),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent.append(section(t('peopleCarry')), mass);
|
||||||
|
if (card.carried.length > 0) {
|
||||||
|
parent.append(grid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatMass(value: number): string {
|
||||||
|
return String(Math.round(value * 100) / 100);
|
||||||
|
}
|
||||||
|
|
||||||
function appendTags(parent: HTMLElement, title: string, values: readonly string[]): void {
|
function appendTags(parent: HTMLElement, title: string, values: readonly string[]): void {
|
||||||
if (values.length === 0) {
|
if (values.length === 0) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -609,6 +609,11 @@ public sealed class CatalogLoader
|
|||||||
throw new ContentLoadException($"ThingDef '{thing.DefName}' has unknown skirtLength '{thing.SkirtLength}'.");
|
throw new ContentLoadException($"ThingDef '{thing.DefName}' has unknown skirtLength '{thing.SkirtLength}'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (thing.CarryChance is < 0f or > 1f)
|
||||||
|
{
|
||||||
|
throw new ContentLoadException($"ThingDef '{thing.DefName}' carryChance must be 0–1.");
|
||||||
|
}
|
||||||
|
|
||||||
var layers = new HashSet<string>(StringComparer.Ordinal);
|
var layers = new HashSet<string>(StringComparer.Ordinal);
|
||||||
foreach (var layer in thing.Layers)
|
foreach (var layer in thing.Layers)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -104,6 +104,12 @@ public sealed class ThingDef : Def
|
|||||||
|
|
||||||
/// <summary>PE kit. Worn for that lesson; not a second wardrobe of everyday clothes.</summary>
|
/// <summary>PE kit. Worn for that lesson; not a second wardrobe of everyday clothes.</summary>
|
||||||
public bool Pe { get; init; }
|
public bool Pe { get; init; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Chance the dress generator issues this portable non-apparel item. 0 — not rolled (textbooks
|
||||||
|
/// are granted per subject instead). Apparel ignores this and fills layers.
|
||||||
|
/// </summary>
|
||||||
|
public float CarryChance { get; init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class PositionDef : Def;
|
public sealed class PositionDef : Def;
|
||||||
|
|||||||
@@ -513,6 +513,19 @@ internal static class PeopleDefValidator
|
|||||||
throw new ContentLoadException($"BehaviorDef '{behavior.DefName}' goal weights cannot be negative.");
|
throw new ContentLoadException($"BehaviorDef '{behavior.DefName}' goal weights cannot be negative.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (behavior.CarryMassBase < 0f
|
||||||
|
|| behavior.CarryMassPerStrength < 0f
|
||||||
|
|| behavior.CarryMassPerEndurance < 0f
|
||||||
|
|| behavior.CarryMassPerHauling < 0f)
|
||||||
|
{
|
||||||
|
throw new ContentLoadException($"BehaviorDef '{behavior.DefName}' carry mass cannot be negative.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (behavior.OptionalApparelChance is < 0f or > 1f)
|
||||||
|
{
|
||||||
|
throw new ContentLoadException($"BehaviorDef '{behavior.DefName}' optionalApparelChance must be 0–1.");
|
||||||
|
}
|
||||||
|
|
||||||
// A pack may invert this on purpose — lunch then pulls the class out of the lesson.
|
// A pack may invert this on purpose — lunch then pulls the class out of the lesson.
|
||||||
// The warning is the catch; refusing to load would make the number unmoddable.
|
// The warning is the catch; refusing to load would make the number unmoddable.
|
||||||
if (behavior.LunchWeight > behavior.DutyLessonWeight)
|
if (behavior.LunchWeight > behavior.DutyLessonWeight)
|
||||||
|
|||||||
@@ -250,6 +250,18 @@ public sealed class BehaviorDef : Def
|
|||||||
/// pulls anybody out of a lesson.
|
/// pulls anybody out of a lesson.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float LunchWeight { get; init; } = 6f;
|
public float LunchWeight { get; init; } = 6f;
|
||||||
|
|
||||||
|
/// <summary>Kilograms a person can carry at strength/endurance/hauling 0, before the per-skill terms.</summary>
|
||||||
|
public float CarryMassBase { get; init; } = 5f;
|
||||||
|
|
||||||
|
public float CarryMassPerStrength { get; init; } = 0.08f;
|
||||||
|
|
||||||
|
public float CarryMassPerEndurance { get; init; } = 0.04f;
|
||||||
|
|
||||||
|
public float CarryMassPerHauling { get; init; } = 0.08f;
|
||||||
|
|
||||||
|
/// <summary>Chance each optional layer (sweater, coat, hat, accessory) is worn at generation.</summary>
|
||||||
|
public float OptionalApparelChance { get; init; } = 0.4f;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum BodyAttributeKind
|
public enum BodyAttributeKind
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
namespace HSchool.People;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// How much a person may carry in the bag. The curve lives on <see cref="BehaviorDef"/>;
|
||||||
|
/// these fallbacks match vanilla so a pack without the new fields still dresses people.
|
||||||
|
/// Worn mass does not count in this slice, and overload does not slow walking.
|
||||||
|
/// </summary>
|
||||||
|
public static class CarryMass
|
||||||
|
{
|
||||||
|
public const string Strength = "Strength";
|
||||||
|
public const string Endurance = "Endurance";
|
||||||
|
public const string Hauling = "Hauling";
|
||||||
|
|
||||||
|
public const float DefaultBase = 5f;
|
||||||
|
public const float DefaultPerStrength = 0.08f;
|
||||||
|
public const float DefaultPerEndurance = 0.04f;
|
||||||
|
public const float DefaultPerHauling = 0.08f;
|
||||||
|
|
||||||
|
public static float Capacity(DefCatalog catalog, IReadOnlyDictionary<string, int> skills) =>
|
||||||
|
Capacity(catalog, Skill(skills, Strength), Skill(skills, Endurance), Skill(skills, Hauling));
|
||||||
|
|
||||||
|
public static float Capacity(DefCatalog catalog, IReadOnlyDictionary<string, float> skills) =>
|
||||||
|
Capacity(
|
||||||
|
catalog,
|
||||||
|
Skill(skills, Strength),
|
||||||
|
Skill(skills, Endurance),
|
||||||
|
Skill(skills, Hauling));
|
||||||
|
|
||||||
|
public static float Capacity(DefCatalog catalog, float strength, float endurance, float hauling)
|
||||||
|
{
|
||||||
|
var rules = catalog.BehaviorRules;
|
||||||
|
var value = (rules?.CarryMassBase ?? DefaultBase)
|
||||||
|
+ (strength * (rules?.CarryMassPerStrength ?? DefaultPerStrength))
|
||||||
|
+ (endurance * (rules?.CarryMassPerEndurance ?? DefaultPerEndurance))
|
||||||
|
+ (hauling * (rules?.CarryMassPerHauling ?? DefaultPerHauling));
|
||||||
|
return MathF.Round(MathF.Max(value, 0f), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float Held(DefCatalog catalog, IEnumerable<InventoryItem> items)
|
||||||
|
{
|
||||||
|
var sum = 0f;
|
||||||
|
foreach (var item in items)
|
||||||
|
{
|
||||||
|
if (!item.Location.Equals(ItemLocations.Bag, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (catalog.Things.TryGetValue(item.Def, out var def))
|
||||||
|
{
|
||||||
|
sum += def.Mass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MathF.Round(sum, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float Skill(IReadOnlyDictionary<string, int> skills, string name) =>
|
||||||
|
skills.TryGetValue(name, out var value) ? value : 0f;
|
||||||
|
|
||||||
|
private static float Skill(IReadOnlyDictionary<string, float> skills, string name) =>
|
||||||
|
skills.TryGetValue(name, out var value) ? value : 0f;
|
||||||
|
}
|
||||||
@@ -0,0 +1,414 @@
|
|||||||
|
namespace HSchool.People;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Fills a person's wardrobe from a stream that does not touch looks or skills. Same person id
|
||||||
|
/// and school seed always yield the same items, colours and places.
|
||||||
|
/// </summary>
|
||||||
|
public static class DressGenerator
|
||||||
|
{
|
||||||
|
public static Person Dress(DefCatalog catalog, Person person, int schoolSeed, int? pupilYear)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(catalog);
|
||||||
|
ArgumentNullException.ThrowIfNull(person);
|
||||||
|
|
||||||
|
var age = person.AgeOn(RosterGenerator.DefaultAsOf);
|
||||||
|
return Dress(catalog, person, schoolSeed, pupilYear, age);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Person Dress(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int schoolSeed,
|
||||||
|
int? pupilYear,
|
||||||
|
int age)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(catalog);
|
||||||
|
ArgumentNullException.ThrowIfNull(person);
|
||||||
|
|
||||||
|
var rng = new Random(Seed.Mix(schoolSeed, person.Id, dayNumber: 0, Seed.ApparelSalt));
|
||||||
|
var items = new List<InventoryItem>();
|
||||||
|
var occupied = new HashSet<string>(StringComparer.Ordinal);
|
||||||
|
var chance = catalog.BehaviorRules?.OptionalApparelChance ?? 0.4f;
|
||||||
|
|
||||||
|
foreach (var layer in RequiredLayers)
|
||||||
|
{
|
||||||
|
TryWear(catalog, person, age, rng, layer, occupied, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var layer in OptionalLayers)
|
||||||
|
{
|
||||||
|
if (rng.NextDouble() < chance)
|
||||||
|
{
|
||||||
|
TryWear(catalog, person, age, rng, layer, occupied, items);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!occupied.Contains(ApparelLayers.Outer))
|
||||||
|
{
|
||||||
|
TryStashOuter(catalog, person, age, rng, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (person.IsStudent && HasPhysicalEducation(catalog, pupilYear))
|
||||||
|
{
|
||||||
|
GrantPeKit(catalog, person, age, rng, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
var capacity = CarryMass.Capacity(catalog, person.Skills);
|
||||||
|
var held = 0f;
|
||||||
|
GrantChanceCarry(catalog, person, age, rng, items, ref held, capacity);
|
||||||
|
if (person.IsStudent && pupilYear is { } year)
|
||||||
|
{
|
||||||
|
GrantTextbooks(catalog, year, rng, items, ref held, capacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return person with { Items = items };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Person EnsureDressed(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int schoolSeed,
|
||||||
|
int? pupilYear,
|
||||||
|
int age)
|
||||||
|
{
|
||||||
|
if (person.Items.Count > 0)
|
||||||
|
{
|
||||||
|
return person;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Dress(catalog, person, schoolSeed, pupilYear, age);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Roster EnsureRoster(DefCatalog catalog, Roster roster, int schoolSeed, DateTime asOf)
|
||||||
|
{
|
||||||
|
var years = roster.Classes.ToDictionary(
|
||||||
|
schoolClass => schoolClass.Id,
|
||||||
|
schoolClass => schoolClass.Year,
|
||||||
|
StringComparer.Ordinal);
|
||||||
|
var people = new Person[roster.People.Count];
|
||||||
|
for (var i = 0; i < roster.People.Count; i++)
|
||||||
|
{
|
||||||
|
var person = roster.People[i];
|
||||||
|
int? year = person.ClassId is { } classId && years.TryGetValue(classId, out var value)
|
||||||
|
? value
|
||||||
|
: null;
|
||||||
|
people[i] = EnsureDressed(catalog, person, schoolSeed, year, person.AgeOn(asOf));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Roster(people, roster.Families, roster.Classes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ApplicantPool EnsurePool(
|
||||||
|
DefCatalog catalog,
|
||||||
|
ApplicantPool pool,
|
||||||
|
Roster roster,
|
||||||
|
int schoolSeed,
|
||||||
|
DateTime asOf)
|
||||||
|
{
|
||||||
|
var rosterPeople = roster.People.ToDictionary(person => person.Id, StringComparer.Ordinal);
|
||||||
|
var applicants = new Applicant[pool.Applicants.Count];
|
||||||
|
for (var i = 0; i < pool.Applicants.Count; i++)
|
||||||
|
{
|
||||||
|
var applicant = pool.Applicants[i];
|
||||||
|
if (rosterPeople.TryGetValue(applicant.Person.Id, out var member))
|
||||||
|
{
|
||||||
|
applicants[i] = applicant with { Person = member };
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
applicants[i] = applicant with
|
||||||
|
{
|
||||||
|
Person = EnsureDressed(
|
||||||
|
catalog,
|
||||||
|
applicant.Person,
|
||||||
|
schoolSeed,
|
||||||
|
pupilYear: null,
|
||||||
|
applicant.Person.AgeOn(asOf)),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return pool with { Applicants = applicants };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool NeedsDressing(Roster roster, ApplicantPool? pool)
|
||||||
|
{
|
||||||
|
foreach (var person in roster.People)
|
||||||
|
{
|
||||||
|
if (person.Items.Count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pool is null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var applicant in pool.Applicants)
|
||||||
|
{
|
||||||
|
if (applicant.Person.Items.Count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds textbooks for subjects the pupil just became old enough for. Existing clothes stay.
|
||||||
|
/// </summary>
|
||||||
|
public static Person EnsureYearTextbooks(DefCatalog catalog, Person person, int year)
|
||||||
|
{
|
||||||
|
if (!person.IsStudent)
|
||||||
|
{
|
||||||
|
return person;
|
||||||
|
}
|
||||||
|
|
||||||
|
var items = person.Items.ToList();
|
||||||
|
var held = CarryMass.Held(catalog, items);
|
||||||
|
var capacity = CarryMass.Capacity(catalog, person.Skills);
|
||||||
|
var rng = new Random(0);
|
||||||
|
GrantTextbooks(catalog, year, rng, items, ref held, capacity);
|
||||||
|
return person with { Items = items };
|
||||||
|
}
|
||||||
|
|
||||||
|
private static readonly string[] RequiredLayers =
|
||||||
|
[ApparelLayers.Underwear, ApparelLayers.Socks, ApparelLayers.Bottom, ApparelLayers.Top, ApparelLayers.Shoes];
|
||||||
|
|
||||||
|
private static readonly string[] OptionalLayers =
|
||||||
|
[ApparelLayers.OverTop, ApparelLayers.Outer, ApparelLayers.Head, ApparelLayers.Accessory];
|
||||||
|
|
||||||
|
private static void TryWear(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int age,
|
||||||
|
Random rng,
|
||||||
|
string layer,
|
||||||
|
HashSet<string> occupied,
|
||||||
|
List<InventoryItem> items)
|
||||||
|
{
|
||||||
|
if (occupied.Contains(layer))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var candidates = Apparel(catalog, person.Female, age, everyday: true)
|
||||||
|
.Where(def => def.Layers.Contains(layer, StringComparer.Ordinal)
|
||||||
|
&& def.Layers.All(candidate => !occupied.Contains(candidate)))
|
||||||
|
.ToList();
|
||||||
|
if (candidates.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pick = candidates[rng.Next(candidates.Count)];
|
||||||
|
var color = PickColor(catalog, pick, rng, worn: true);
|
||||||
|
items.Add(new InventoryItem(pick.DefName, color, Condition: 1, ItemLocations.Worn));
|
||||||
|
foreach (var taken in pick.Layers)
|
||||||
|
{
|
||||||
|
occupied.Add(taken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void TryStashOuter(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int age,
|
||||||
|
Random rng,
|
||||||
|
List<InventoryItem> items)
|
||||||
|
{
|
||||||
|
var candidates = Apparel(catalog, person.Female, age, everyday: true)
|
||||||
|
.Where(def => def.Layers.Contains(ApparelLayers.Outer, StringComparer.Ordinal))
|
||||||
|
.ToList();
|
||||||
|
if (candidates.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pick = candidates[rng.Next(candidates.Count)];
|
||||||
|
var color = PickColor(catalog, pick, rng, worn: false);
|
||||||
|
items.Add(new InventoryItem(pick.DefName, color, Condition: 1, ItemLocations.Home));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GrantPeKit(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int age,
|
||||||
|
Random rng,
|
||||||
|
List<InventoryItem> items)
|
||||||
|
{
|
||||||
|
foreach (var def in Apparel(catalog, person.Female, age, everyday: false).Where(candidate => candidate.Pe))
|
||||||
|
{
|
||||||
|
var color = PickColor(catalog, def, rng, worn: false);
|
||||||
|
items.Add(new InventoryItem(def.DefName, color, Condition: 1, ItemLocations.Home));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GrantChanceCarry(
|
||||||
|
DefCatalog catalog,
|
||||||
|
Person person,
|
||||||
|
int age,
|
||||||
|
Random rng,
|
||||||
|
List<InventoryItem> items,
|
||||||
|
ref float held,
|
||||||
|
float capacity)
|
||||||
|
{
|
||||||
|
foreach (var def in catalog.Things.Values
|
||||||
|
.Where(thing => !thing.Abstract
|
||||||
|
&& thing.Portable
|
||||||
|
&& thing.Layers.Count == 0
|
||||||
|
&& thing.CarryChance > 0)
|
||||||
|
.OrderBy(thing => thing.DefName, StringComparer.Ordinal))
|
||||||
|
{
|
||||||
|
if (!AgeFits(def, age) || !SexFits(def, person.Female))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rng.NextDouble() >= def.CarryChance)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var color = PickColor(catalog, def, rng, worn: false);
|
||||||
|
Place(catalog, items, def, color, subject: null, ref held, capacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GrantTextbooks(
|
||||||
|
DefCatalog catalog,
|
||||||
|
int year,
|
||||||
|
Random rng,
|
||||||
|
List<InventoryItem> items,
|
||||||
|
ref float held,
|
||||||
|
float capacity)
|
||||||
|
{
|
||||||
|
var textbook = catalog.Things.Values
|
||||||
|
.Where(thing => !thing.Abstract
|
||||||
|
&& thing.Portable
|
||||||
|
&& thing.Layers.Count == 0
|
||||||
|
&& thing.CarryChance <= 0)
|
||||||
|
.OrderBy(thing => thing.DefName, StringComparer.Ordinal)
|
||||||
|
.FirstOrDefault();
|
||||||
|
if (textbook is null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var have = items
|
||||||
|
.Where(item => item.Def.Equals(textbook.DefName, StringComparison.Ordinal) && item.Subject is not null)
|
||||||
|
.Select(item => item.Subject!)
|
||||||
|
.ToHashSet(StringComparer.Ordinal);
|
||||||
|
|
||||||
|
foreach (var subject in catalog.Subjects.Values
|
||||||
|
.Where(def => !def.Abstract && year >= def.Grades.Min && year <= def.Grades.Max)
|
||||||
|
.OrderBy(def => def.DefName, StringComparer.Ordinal))
|
||||||
|
{
|
||||||
|
if (!have.Add(subject.DefName))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var color = PickColor(catalog, textbook, rng, worn: false);
|
||||||
|
Place(catalog, items, textbook, color, subject.DefName, ref held, capacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Place(
|
||||||
|
DefCatalog catalog,
|
||||||
|
List<InventoryItem> items,
|
||||||
|
ThingDef def,
|
||||||
|
string? color,
|
||||||
|
string? subject,
|
||||||
|
ref float held,
|
||||||
|
float capacity)
|
||||||
|
{
|
||||||
|
var location = held + def.Mass <= capacity ? ItemLocations.Bag : ItemLocations.Home;
|
||||||
|
items.Add(new InventoryItem(def.DefName, color, Condition: 1, location, subject));
|
||||||
|
if (location.Equals(ItemLocations.Bag, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
held = MathF.Round(held + def.Mass, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<ThingDef> Apparel(DefCatalog catalog, bool female, int age, bool everyday)
|
||||||
|
{
|
||||||
|
foreach (var def in catalog.Things.Values.OrderBy(thing => thing.DefName, StringComparer.Ordinal))
|
||||||
|
{
|
||||||
|
if (def.Abstract || def.Layers.Count == 0 || !AgeFits(def, age) || !SexFits(def, female))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (everyday)
|
||||||
|
{
|
||||||
|
if (def.Pe)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (def.SkirtLength is not null
|
||||||
|
&& def.SkirtLength.Equals(SkirtLengths.Short, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return def;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string? PickColor(DefCatalog catalog, ThingDef def, Random rng, bool worn)
|
||||||
|
{
|
||||||
|
if (def.Colors.Count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pool = def.Colors.ToList();
|
||||||
|
if (worn)
|
||||||
|
{
|
||||||
|
var quiet = def.Colors
|
||||||
|
.Where(id => catalog.Colors.TryGetValue(id, out var color)
|
||||||
|
&& !color.Tags.Contains(ColorTags.Bright, StringComparer.Ordinal))
|
||||||
|
.ToList();
|
||||||
|
if (quiet.Count > 0)
|
||||||
|
{
|
||||||
|
pool = quiet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.Sort(StringComparer.Ordinal);
|
||||||
|
return pool[rng.Next(pool.Count)];
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool AgeFits(ThingDef def, int age) =>
|
||||||
|
def.Age is not { } range || (age >= range.Min && age <= range.Max);
|
||||||
|
|
||||||
|
private static bool SexFits(ThingDef def, bool female)
|
||||||
|
{
|
||||||
|
if (def.Sex is null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var want = female ? "female" : "male";
|
||||||
|
return def.Sex.Equals(want, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool HasPhysicalEducation(DefCatalog catalog, int? pupilYear)
|
||||||
|
{
|
||||||
|
if (pupilYear is not { } year)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return catalog.Subjects.Values.Any(subject =>
|
||||||
|
!subject.Abstract
|
||||||
|
&& subject.DefName.Equals("PhysicalEducation", StringComparison.Ordinal)
|
||||||
|
&& year >= subject.Grades.Min
|
||||||
|
&& year <= subject.Grades.Max);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -78,6 +78,8 @@ internal static class FamilyFactory
|
|||||||
{
|
{
|
||||||
parentIds.Add(fatherId);
|
parentIds.Add(fatherId);
|
||||||
members.Add(
|
members.Add(
|
||||||
|
DressGenerator.Dress(
|
||||||
|
catalog,
|
||||||
RollAdult(
|
RollAdult(
|
||||||
catalog,
|
catalog,
|
||||||
names,
|
names,
|
||||||
@@ -91,13 +93,18 @@ internal static class FamilyFactory
|
|||||||
fatherGiven,
|
fatherGiven,
|
||||||
NameGrammar.Patronymic(fatherPatronymicSource.Form, female: false, names.PatronymicRule),
|
NameGrammar.Patronymic(fatherPatronymicSource.Form, female: false, names.PatronymicRule),
|
||||||
isParent: childDrafts.Length > 0,
|
isParent: childDrafts.Length > 0,
|
||||||
nativeLanguage));
|
nativeLanguage),
|
||||||
|
schoolSeed,
|
||||||
|
pupilYear: null,
|
||||||
|
SchoolYears.AgeYears(fatherBirth, asOf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasMother)
|
if (hasMother)
|
||||||
{
|
{
|
||||||
parentIds.Add(motherId);
|
parentIds.Add(motherId);
|
||||||
members.Add(
|
members.Add(
|
||||||
|
DressGenerator.Dress(
|
||||||
|
catalog,
|
||||||
RollAdult(
|
RollAdult(
|
||||||
catalog,
|
catalog,
|
||||||
names,
|
names,
|
||||||
@@ -111,7 +118,10 @@ internal static class FamilyFactory
|
|||||||
motherGiven,
|
motherGiven,
|
||||||
NameGrammar.Patronymic(motherPatronymicSource.Form, female: true, names.PatronymicRule),
|
NameGrammar.Patronymic(motherPatronymicSource.Form, female: true, names.PatronymicRule),
|
||||||
isParent: childDrafts.Length > 0,
|
isParent: childDrafts.Length > 0,
|
||||||
nativeLanguage));
|
nativeLanguage),
|
||||||
|
schoolSeed,
|
||||||
|
pupilYear: null,
|
||||||
|
SchoolYears.AgeYears(motherBirth, asOf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
var childIds = new List<string>(childDrafts.Length);
|
var childIds = new List<string>(childDrafts.Length);
|
||||||
@@ -121,6 +131,8 @@ internal static class FamilyFactory
|
|||||||
var id = $"{familyId}.c{i}";
|
var id = $"{familyId}.c{i}";
|
||||||
childIds.Add(id);
|
childIds.Add(id);
|
||||||
members.Add(
|
members.Add(
|
||||||
|
DressGenerator.Dress(
|
||||||
|
catalog,
|
||||||
RollChild(
|
RollChild(
|
||||||
catalog,
|
catalog,
|
||||||
names,
|
names,
|
||||||
@@ -131,7 +143,10 @@ internal static class FamilyFactory
|
|||||||
asOf,
|
asOf,
|
||||||
surname,
|
surname,
|
||||||
fatherGiven.Form,
|
fatherGiven.Form,
|
||||||
nativeLanguage));
|
nativeLanguage),
|
||||||
|
schoolSeed,
|
||||||
|
draft.Seat.Year,
|
||||||
|
SchoolYears.AgeYears(draft.Birth, asOf)));
|
||||||
}
|
}
|
||||||
|
|
||||||
var family = new Family(familyId, parentIds, childIds, childIds.Count, fatherGiven.Form, surname.Male);
|
var family = new Family(familyId, parentIds, childIds, childIds.Count, fatherGiven.Form, surname.Male);
|
||||||
@@ -151,6 +166,7 @@ internal static class FamilyFactory
|
|||||||
DateTime yearStart,
|
DateTime yearStart,
|
||||||
DateTime asOf,
|
DateTime asOf,
|
||||||
int childIndex,
|
int childIndex,
|
||||||
|
int schoolSeed,
|
||||||
string? nativeLanguage = null)
|
string? nativeLanguage = null)
|
||||||
{
|
{
|
||||||
var fatherGiven = FatherGivenOf(family, members);
|
var fatherGiven = FatherGivenOf(family, members);
|
||||||
@@ -184,7 +200,9 @@ internal static class FamilyFactory
|
|||||||
surnameCases,
|
surnameCases,
|
||||||
PatronymicTable(patronymic, female));
|
PatronymicTable(patronymic, female));
|
||||||
|
|
||||||
return new Person
|
return DressGenerator.Dress(
|
||||||
|
catalog,
|
||||||
|
new Person
|
||||||
{
|
{
|
||||||
Id = $"{family.Id}.c{childIndex}",
|
Id = $"{family.Id}.c{childIndex}",
|
||||||
FamilyId = family.Id,
|
FamilyId = family.Id,
|
||||||
@@ -200,7 +218,10 @@ internal static class FamilyFactory
|
|||||||
Skills = skills,
|
Skills = skills,
|
||||||
Traits = traits,
|
Traits = traits,
|
||||||
Needs = needs,
|
Needs = needs,
|
||||||
};
|
},
|
||||||
|
schoolSeed,
|
||||||
|
seat.Year,
|
||||||
|
age);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -226,7 +247,9 @@ internal static class FamilyFactory
|
|||||||
var birth = asOf.AddYears(-(24 + rng.Next(38))).AddDays(-rng.Next(365));
|
var birth = asOf.AddYears(-(24 + rng.Next(38))).AddDays(-rng.Next(365));
|
||||||
|
|
||||||
var id = $"{familyId}.p0";
|
var id = $"{familyId}.p0";
|
||||||
var person = RollAdult(
|
var person = DressGenerator.Dress(
|
||||||
|
catalog,
|
||||||
|
RollAdult(
|
||||||
catalog,
|
catalog,
|
||||||
names,
|
names,
|
||||||
rng,
|
rng,
|
||||||
@@ -239,7 +262,10 @@ internal static class FamilyFactory
|
|||||||
given,
|
given,
|
||||||
NameGrammar.Patronymic(patronymicSource.Form, female, names.PatronymicRule),
|
NameGrammar.Patronymic(patronymicSource.Form, female, names.PatronymicRule),
|
||||||
isParent: false,
|
isParent: false,
|
||||||
nativeLanguage);
|
nativeLanguage),
|
||||||
|
schoolSeed,
|
||||||
|
pupilYear: null,
|
||||||
|
SchoolYears.AgeYears(birth, asOf));
|
||||||
|
|
||||||
return (new Family(familyId, [id], [], NextChild: 0, FatherGiven: string.Empty, Surname: surname.Male), person);
|
return (new Family(familyId, [id], [], NextChild: 0, FatherGiven: string.Empty, Surname: surname.Male), person);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
namespace HSchool.People;
|
||||||
|
|
||||||
|
/// <summary>Where an instance lives. One place at a time — worn, bag, locker or home.</summary>
|
||||||
|
public static class ItemLocations
|
||||||
|
{
|
||||||
|
public const string Worn = "worn";
|
||||||
|
public const string Bag = "bag";
|
||||||
|
public const string Locker = "locker";
|
||||||
|
public const string Home = "home";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// One thing on a person. <see cref="Subject"/> is set only on a textbook instance — the def is
|
||||||
|
/// shared. Condition is 1 at birth; wear is a later phase.
|
||||||
|
/// </summary>
|
||||||
|
public sealed record InventoryItem(
|
||||||
|
string Def,
|
||||||
|
string? Color,
|
||||||
|
float Condition,
|
||||||
|
string Location,
|
||||||
|
string? Subject = null);
|
||||||
@@ -46,6 +46,9 @@ public sealed record Person
|
|||||||
/// <summary>Hourly rate frozen at hire. Null until the person is staff.</summary>
|
/// <summary>Hourly rate frozen at hire. Null until the person is staff.</summary>
|
||||||
public float? HourlyWageAsk { get; init; }
|
public float? HourlyWageAsk { get; init; }
|
||||||
|
|
||||||
|
/// <summary>Worn, bag, locker and home. Empty on rosters written before clothes existed.</summary>
|
||||||
|
public IReadOnlyList<InventoryItem> Items { get; init; } = [];
|
||||||
|
|
||||||
public int AgeOn(DateTime asOf) => SchoolYears.AgeYears(BirthDate, asOf);
|
public int AgeOn(DateTime asOf) => SchoolYears.AgeYears(BirthDate, asOf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public static class Seed
|
|||||||
public const int SkillGrantSalt = 8;
|
public const int SkillGrantSalt = 8;
|
||||||
public const int NativeLanguageSalt = 9;
|
public const int NativeLanguageSalt = 9;
|
||||||
public const int ClimatePresetSalt = 10;
|
public const int ClimatePresetSalt = 10;
|
||||||
|
public const int ApparelSalt = 11;
|
||||||
|
|
||||||
/// <summary>A stream that belongs to the school rather than to one family.</summary>
|
/// <summary>A stream that belongs to the school rather than to one family.</summary>
|
||||||
public static int ForSchool(int schoolSeed, int salt) => Mix(schoolSeed, familyIndex: -1, salt);
|
public static int ForSchool(int schoolSeed, int salt) => Mix(schoolSeed, familyIndex: -1, salt);
|
||||||
|
|||||||
@@ -175,7 +175,9 @@ public static class YearlyIntake
|
|||||||
}
|
}
|
||||||
|
|
||||||
var rng = new Random(Seed.Mix(schoolSeed, person.Id, when.Year, Seed.SkillGrantSalt));
|
var rng = new Random(Seed.Mix(schoolSeed, person.Id, when.Year, Seed.SkillGrantSalt));
|
||||||
people[id] = person with
|
people[id] = DressGenerator.EnsureYearTextbooks(
|
||||||
|
catalog,
|
||||||
|
person with
|
||||||
{
|
{
|
||||||
Skills = PersonSampler.EnsurePupilYear(
|
Skills = PersonSampler.EnsurePupilYear(
|
||||||
catalog,
|
catalog,
|
||||||
@@ -187,7 +189,8 @@ public static class YearlyIntake
|
|||||||
person.Skills,
|
person.Skills,
|
||||||
year,
|
year,
|
||||||
nativeLanguage),
|
nativeLanguage),
|
||||||
};
|
},
|
||||||
|
year);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +239,7 @@ public static class YearlyIntake
|
|||||||
|
|
||||||
var childIndex = family.NextChildIndex;
|
var childIndex = family.NextChildIndex;
|
||||||
var rng = new Random(Seed.Mix(schoolSeed, index, Seed.IntakeSalt + yearStart.Year * 10 + childIndex));
|
var rng = new Random(Seed.Mix(schoolSeed, index, Seed.IntakeSalt + yearStart.Year * 10 + childIndex));
|
||||||
var child = FamilyFactory.AddChild(catalog, names, rng, family, members, seats[cursor], yearStart, asOf, childIndex, nativeLanguage);
|
var child = FamilyFactory.AddChild(catalog, names, rng, family, members, seats[cursor], yearStart, asOf, childIndex, schoolSeed, nativeLanguage);
|
||||||
people[child.Id] = child;
|
people[child.Id] = child;
|
||||||
var familyAt = families.FindIndex(candidate => candidate.Id.Equals(family.Id, StringComparison.Ordinal));
|
var familyAt = families.FindIndex(candidate => candidate.Id.Equals(family.Id, StringComparison.Ordinal));
|
||||||
families[familyAt] = family with
|
families[familyAt] = family with
|
||||||
|
|||||||
@@ -61,7 +61,27 @@ internal sealed record PersonCardResponse(
|
|||||||
IReadOnlyList<NeedStatResponse> Needs,
|
IReadOnlyList<NeedStatResponse> Needs,
|
||||||
string? Activity,
|
string? Activity,
|
||||||
string? ActivityLabel,
|
string? ActivityLabel,
|
||||||
PersonFamilyResponse Family);
|
PersonFamilyResponse Family,
|
||||||
|
IReadOnlyList<WornItemResponse> Worn,
|
||||||
|
IReadOnlyList<CarriedItemResponse> Carried,
|
||||||
|
float CarryMass,
|
||||||
|
float CarryCapacity);
|
||||||
|
|
||||||
|
internal sealed record WornItemResponse(
|
||||||
|
string DefName,
|
||||||
|
string Label,
|
||||||
|
string? Color,
|
||||||
|
string? ColorLabel,
|
||||||
|
IReadOnlyList<DefLabelResponse> Layers);
|
||||||
|
|
||||||
|
internal sealed record CarriedItemResponse(
|
||||||
|
string DefName,
|
||||||
|
string Label,
|
||||||
|
string? Color,
|
||||||
|
string? ColorLabel,
|
||||||
|
string? Subject,
|
||||||
|
string? SubjectLabel,
|
||||||
|
float Mass);
|
||||||
|
|
||||||
internal sealed record LabeledStatResponse(string Id, string Label, string Value);
|
internal sealed record LabeledStatResponse(string Id, string Label, string Value);
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,11 @@ internal static class PersonCardReader
|
|||||||
Needs(needs, catalog, locale),
|
Needs(needs, catalog, locale),
|
||||||
activityId,
|
activityId,
|
||||||
activityLabel,
|
activityLabel,
|
||||||
Family(roster, person));
|
Family(roster, person),
|
||||||
|
Worn(person, catalog, locale),
|
||||||
|
Carried(person, catalog, locale),
|
||||||
|
catalog is null ? 0f : CarryMass.Held(catalog, person.Items),
|
||||||
|
Capacity(person, skills, catalog));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IReadOnlyDictionary<string, float>? LiveNeeds(World world, string personId)
|
private static IReadOnlyDictionary<string, float>? LiveNeeds(World world, string personId)
|
||||||
@@ -260,6 +264,99 @@ internal static class PersonCardReader
|
|||||||
return rows;
|
return rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyList<WornItemResponse> Worn(Person person, DefCatalog? catalog, string locale)
|
||||||
|
{
|
||||||
|
var rows = new List<WornItemResponse>();
|
||||||
|
foreach (var item in person.Items)
|
||||||
|
{
|
||||||
|
if (!item.Location.Equals(ItemLocations.Worn, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
IReadOnlyList<string> layerIds = [];
|
||||||
|
if (catalog is not null && catalog.Things.TryGetValue(item.Def, out var def))
|
||||||
|
{
|
||||||
|
layerIds = def.Layers;
|
||||||
|
}
|
||||||
|
|
||||||
|
var layers = layerIds
|
||||||
|
.Select(layer => new DefLabelResponse(layer, catalog?.Text(locale, layer) ?? layer))
|
||||||
|
.ToArray();
|
||||||
|
rows.Add(new WornItemResponse(
|
||||||
|
item.Def,
|
||||||
|
ThingLabel(catalog, locale, item.Def),
|
||||||
|
item.Color,
|
||||||
|
ColorLabel(catalog, locale, item.Color),
|
||||||
|
layers));
|
||||||
|
}
|
||||||
|
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyList<CarriedItemResponse> Carried(Person person, DefCatalog? catalog, string locale)
|
||||||
|
{
|
||||||
|
var rows = new List<CarriedItemResponse>();
|
||||||
|
foreach (var item in person.Items)
|
||||||
|
{
|
||||||
|
if (!item.Location.Equals(ItemLocations.Bag, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var mass = catalog is not null && catalog.Things.TryGetValue(item.Def, out var def) ? def.Mass : 0f;
|
||||||
|
string? subjectLabel = null;
|
||||||
|
if (item.Subject is not null)
|
||||||
|
{
|
||||||
|
subjectLabel = catalog is not null && catalog.Subjects.TryGetValue(item.Subject, out var subject)
|
||||||
|
? catalog.Label(locale, subject)
|
||||||
|
: item.Subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
rows.Add(new CarriedItemResponse(
|
||||||
|
item.Def,
|
||||||
|
ThingLabel(catalog, locale, item.Def),
|
||||||
|
item.Color,
|
||||||
|
ColorLabel(catalog, locale, item.Color),
|
||||||
|
item.Subject,
|
||||||
|
subjectLabel,
|
||||||
|
mass));
|
||||||
|
}
|
||||||
|
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ThingLabel(DefCatalog? catalog, string locale, string defName)
|
||||||
|
{
|
||||||
|
if (catalog is not null && catalog.Things.TryGetValue(defName, out var def))
|
||||||
|
{
|
||||||
|
return catalog.Label(locale, def);
|
||||||
|
}
|
||||||
|
|
||||||
|
return defName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string? ColorLabel(DefCatalog? catalog, string locale, string? color) =>
|
||||||
|
color is null ? null : catalog?.Text(locale, color) ?? color;
|
||||||
|
|
||||||
|
private static float Capacity(
|
||||||
|
Person person,
|
||||||
|
IReadOnlyDictionary<string, float>? live,
|
||||||
|
DefCatalog? catalog)
|
||||||
|
{
|
||||||
|
if (catalog is null)
|
||||||
|
{
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (live is not null)
|
||||||
|
{
|
||||||
|
return CarryMass.Capacity(catalog, live);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CarryMass.Capacity(catalog, person.Skills);
|
||||||
|
}
|
||||||
|
|
||||||
private static PersonFamilyResponse Family(Roster roster, Person person)
|
private static PersonFamilyResponse Family(Roster roster, Person person)
|
||||||
{
|
{
|
||||||
var family = roster.Families.FirstOrDefault(candidate => candidate.Id.Equals(person.FamilyId, StringComparison.Ordinal));
|
var family = roster.Families.FirstOrDefault(candidate => candidate.Id.Equals(person.FamilyId, StringComparison.Ordinal));
|
||||||
|
|||||||
@@ -924,6 +924,13 @@ internal sealed class SchoolWorker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DressGenerator.NeedsDressing(roster, applicants))
|
||||||
|
{
|
||||||
|
roster = DressGenerator.EnsureRoster(catalog, roster, seed, school.Clock.Time);
|
||||||
|
applicants = DressGenerator.EnsurePool(catalog, applicants, roster, seed, school.Clock.Time);
|
||||||
|
generated = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!RosterFit.Matches(roster, demand))
|
if (!RosterFit.Matches(roster, demand))
|
||||||
{
|
{
|
||||||
throw new SchoolContentUnavailableException(
|
throw new SchoolContentUnavailableException(
|
||||||
|
|||||||
@@ -21,4 +21,11 @@
|
|||||||
// beats walking on to the next room, below the lesson so it never pulls
|
// beats walking on to the next room, below the lesson so it never pulls
|
||||||
// anybody out of class. Raise it past dutyLessonWeight and they will.
|
// anybody out of class. Raise it past dutyLessonWeight and they will.
|
||||||
"lunchWeight": 6,
|
"lunchWeight": 6,
|
||||||
|
// Bag limit: base kg + per point of Strength, Endurance and Hauling.
|
||||||
|
"carryMassBase": 5,
|
||||||
|
"carryMassPerStrength": 0.08,
|
||||||
|
"carryMassPerEndurance": 0.04,
|
||||||
|
"carryMassPerHauling": 0.08,
|
||||||
|
// Sweater, coat, hat, accessory — each rolled separately at generation.
|
||||||
|
"optionalApparelChance": 0.4,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,4 +30,10 @@
|
|||||||
{ "attribute": "Build", "value": "Athletic", "min": 40 },
|
{ "attribute": "Build", "value": "Athletic", "min": 40 },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"defName": "Hauling",
|
||||||
|
"always": true,
|
||||||
|
"range": { "min": 0, "max": 100 },
|
||||||
|
"distribution": { "mean": 50, "stdDev": 12 },
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[
|
[
|
||||||
{ "defName": "SchoolBag", "portable": true, "mass": 0.8 },
|
{ "defName": "SchoolBag", "portable": true, "mass": 0.8, "age": { "min": 6, "max": 18 }, "carryChance": 1 },
|
||||||
{ "defName": "Textbook", "portable": true, "mass": 0.4 },
|
{ "defName": "Textbook", "portable": true, "mass": 0.4 },
|
||||||
{ "defName": "Phone", "portable": true, "mass": 0.15, "colors": ["Black", "White", "Gray"] },
|
{ "defName": "Phone", "portable": true, "mass": 0.15, "colors": ["Black", "White", "Gray"], "age": { "min": 11 }, "carryChance": 0.45 },
|
||||||
{ "defName": "Bottle", "portable": true, "mass": 0.3, "colors": ["Blue", "Green", "White"] },
|
{ "defName": "Bottle", "portable": true, "mass": 0.3, "colors": ["Blue", "Green", "White"], "age": { "min": 6 }, "carryChance": 0.7 },
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -115,6 +115,7 @@
|
|||||||
"Agility": "Agility",
|
"Agility": "Agility",
|
||||||
"Strength": "Strength",
|
"Strength": "Strength",
|
||||||
"Endurance": "Endurance",
|
"Endurance": "Endurance",
|
||||||
|
"Hauling": "Hauling",
|
||||||
"Diligent": "Diligent",
|
"Diligent": "Diligent",
|
||||||
"AbsentMinded": "Absent-minded",
|
"AbsentMinded": "Absent-minded",
|
||||||
"Bully": "Bully",
|
"Bully": "Bully",
|
||||||
|
|||||||
@@ -115,6 +115,7 @@
|
|||||||
"Agility": "Ловкость",
|
"Agility": "Ловкость",
|
||||||
"Strength": "Сила",
|
"Strength": "Сила",
|
||||||
"Endurance": "Выносливость",
|
"Endurance": "Выносливость",
|
||||||
|
"Hauling": "Переноска",
|
||||||
"Diligent": "Усидчивый",
|
"Diligent": "Усидчивый",
|
||||||
"AbsentMinded": "Рассеянный",
|
"AbsentMinded": "Рассеянный",
|
||||||
"Bully": "Задира",
|
"Bully": "Задира",
|
||||||
|
|||||||
@@ -0,0 +1,154 @@
|
|||||||
|
using System.Net.Http.Json;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
|
|
||||||
|
namespace HSchool.AppHost.Tests;
|
||||||
|
|
||||||
|
[Collection(AppHostCollection.Name)]
|
||||||
|
public class InventoryApiTests(AppHostFixture fixture)
|
||||||
|
{
|
||||||
|
private static readonly DateTime Start = new(2012, 4, 3, 6, 0, 0, DateTimeKind.Utc);
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task Card_IncludesWornAndCarried_ListDoesNot()
|
||||||
|
{
|
||||||
|
using var client = fixture.App.CreateHttpClient("server");
|
||||||
|
await SchoolApiTests.ResetAsync(client);
|
||||||
|
var school = await SchoolApiTests.CreateAsync(client, "Гардероб карточка", Start, seed: 31);
|
||||||
|
|
||||||
|
var page = await client.GetFromJsonAsync<PeoplePage>(
|
||||||
|
$"/api/schools/{school.Id}/people?role=student&year=5&pageSize=20",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
Assert.NotNull(page);
|
||||||
|
var girl = page.People.First(person => person.Female);
|
||||||
|
|
||||||
|
using var listResponse = await client.GetAsync(
|
||||||
|
$"/api/schools/{school.Id}/people?pageSize=1",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
var listJson = await listResponse.Content.ReadAsStringAsync(TestContext.Current.CancellationToken);
|
||||||
|
Assert.DoesNotContain("carryMass", listJson, StringComparison.Ordinal);
|
||||||
|
Assert.DoesNotContain("\"worn\"", listJson, StringComparison.Ordinal);
|
||||||
|
Assert.DoesNotContain("\"carried\"", listJson, StringComparison.Ordinal);
|
||||||
|
|
||||||
|
var card = await client.GetFromJsonAsync<Card>(
|
||||||
|
$"/api/schools/{school.Id}/people/{Uri.EscapeDataString(girl.Id)}?lang=ru",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
Assert.NotNull(card);
|
||||||
|
Assert.NotEmpty(card.Worn);
|
||||||
|
Assert.Contains(card.Worn, item => item.Layers.Count > 0 && item.ColorLabel is { Length: > 0 });
|
||||||
|
Assert.True(card.CarryCapacity > 0);
|
||||||
|
Assert.True(card.CarryMass <= card.CarryCapacity);
|
||||||
|
Assert.Contains(card.Carried, item => item.Mass > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task SameSeed_YieldsTheSameShirt()
|
||||||
|
{
|
||||||
|
using var client = fixture.App.CreateHttpClient("server");
|
||||||
|
await SchoolApiTests.ResetAsync(client);
|
||||||
|
var first = await SchoolApiTests.CreateAsync(client, "Синяя рубашка 1", Start, seed: 31);
|
||||||
|
var shirt = await FirstGirlTopAsync(client, first.Id);
|
||||||
|
|
||||||
|
await SchoolApiTests.ResetAsync(client);
|
||||||
|
var second = await SchoolApiTests.CreateAsync(client, "Синяя рубашка 2", Start, seed: 31);
|
||||||
|
var again = await FirstGirlTopAsync(client, second.Id);
|
||||||
|
|
||||||
|
Assert.Equal(shirt.DefName, again.DefName);
|
||||||
|
Assert.Equal(shirt.Color, again.Color);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task PeopleJsonWithoutInventory_IsDressedOnReloadAndRewritten()
|
||||||
|
{
|
||||||
|
using var client = fixture.App.CreateHttpClient("server");
|
||||||
|
await SchoolApiTests.ResetAsync(client);
|
||||||
|
var school = await SchoolApiTests.CreateAsync(client, "Старый сейв без одежды", Start, seed: 31);
|
||||||
|
var before = await FirstGirlTopAsync(client, school.Id);
|
||||||
|
|
||||||
|
var directory = await SavesDirectoryAsync(client);
|
||||||
|
var path = Path.Combine(directory, $"{school.Id}.people.json");
|
||||||
|
StripItems(path);
|
||||||
|
Assert.DoesNotContain("\"items\"", File.ReadAllText(path), StringComparison.Ordinal);
|
||||||
|
|
||||||
|
using var reload = await client.PostAsync("/api/dev/reload-schools", content: null, TestContext.Current.CancellationToken);
|
||||||
|
reload.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
|
var after = await FirstGirlTopAsync(client, school.Id);
|
||||||
|
Assert.Equal(before.DefName, after.DefName);
|
||||||
|
Assert.Equal(before.Color, after.Color);
|
||||||
|
Assert.Contains("\"items\"", File.ReadAllText(path), StringComparison.Ordinal);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<WornItem> FirstGirlTopAsync(HttpClient client, int schoolId)
|
||||||
|
{
|
||||||
|
var page = await client.GetFromJsonAsync<PeoplePage>(
|
||||||
|
$"/api/schools/{schoolId}/people?role=student&sex=female&pageSize=20",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
Assert.NotNull(page);
|
||||||
|
Assert.NotEmpty(page.People);
|
||||||
|
var girl = page.People[0];
|
||||||
|
var card = await client.GetFromJsonAsync<Card>(
|
||||||
|
$"/api/schools/{schoolId}/people/{Uri.EscapeDataString(girl.Id)}?lang=ru",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
Assert.NotNull(card);
|
||||||
|
var top = card.Worn.FirstOrDefault(item =>
|
||||||
|
item.Layers.Any(layer => layer.DefName.Equals("Top", StringComparison.Ordinal)));
|
||||||
|
Assert.NotNull(top);
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<string> SavesDirectoryAsync(HttpClient client)
|
||||||
|
{
|
||||||
|
var payload = await client.GetFromJsonAsync<SavesDirectoryResponse>(
|
||||||
|
"/api/dev/saves-directory",
|
||||||
|
TestContext.Current.CancellationToken);
|
||||||
|
Assert.NotNull(payload);
|
||||||
|
return payload.Path;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void StripItems(string path)
|
||||||
|
{
|
||||||
|
var root = JsonNode.Parse(File.ReadAllText(path))
|
||||||
|
?? throw new InvalidOperationException("People file parsed to nothing.");
|
||||||
|
foreach (var person in root["people"]?.AsArray() ?? [])
|
||||||
|
{
|
||||||
|
person?.AsObject().Remove("items");
|
||||||
|
}
|
||||||
|
|
||||||
|
var applicants = root["applicants"]?["applicants"]?.AsArray();
|
||||||
|
if (applicants is not null)
|
||||||
|
{
|
||||||
|
foreach (var applicant in applicants)
|
||||||
|
{
|
||||||
|
applicant?["person"]?.AsObject()?.Remove("items");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllText(
|
||||||
|
path,
|
||||||
|
root.ToJsonString(new JsonSerializerOptions { WriteIndented = true }));
|
||||||
|
}
|
||||||
|
|
||||||
|
private sealed record SavesDirectoryResponse(string Path);
|
||||||
|
|
||||||
|
private sealed record PeoplePage(IReadOnlyList<PersonRow> People);
|
||||||
|
|
||||||
|
private sealed record PersonRow(string Id, string FullName, bool Female);
|
||||||
|
|
||||||
|
private sealed record Card(
|
||||||
|
IReadOnlyList<WornItem> Worn,
|
||||||
|
IReadOnlyList<CarriedItem> Carried,
|
||||||
|
float CarryMass,
|
||||||
|
float CarryCapacity);
|
||||||
|
|
||||||
|
private sealed record WornItem(
|
||||||
|
string DefName,
|
||||||
|
string Label,
|
||||||
|
string? Color,
|
||||||
|
string? ColorLabel,
|
||||||
|
IReadOnlyList<Layer> Layers);
|
||||||
|
|
||||||
|
private sealed record Layer(string DefName, string Label);
|
||||||
|
|
||||||
|
private sealed record CarriedItem(string DefName, string Label, float Mass);
|
||||||
|
}
|
||||||
@@ -7,6 +7,10 @@ than a new roll.
|
|||||||
These files live forever: a new save field must load `current/` and must not reshuffle
|
These files live forever: a new save field must load `current/` and must not reshuffle
|
||||||
`legacy-no-native/`. A real format change adds a new folder; it does not rewrite the old one.
|
`legacy-no-native/`. A real format change adds a new folder; it does not rewrite the old one.
|
||||||
|
|
||||||
|
Phase 31 rewrote `current/1.people.json` because people are born dressed (`items` on each
|
||||||
|
person, plus `Hauling`). `legacy-no-native/` is left as it was: no inventory, so load still
|
||||||
|
has to dress them and must not reshuffle names.
|
||||||
|
|
||||||
Regenerate after an intentional roster change (same commit):
|
Regenerate after an intentional roster change (same commit):
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -34,6 +34,7 @@ public class ApparelDefTests
|
|||||||
Assert.Empty(chair.Colors);
|
Assert.Empty(chair.Colors);
|
||||||
Assert.Null(chair.SkirtLength);
|
Assert.Null(chair.SkirtLength);
|
||||||
Assert.False(chair.Pe);
|
Assert.False(chair.Pe);
|
||||||
|
Assert.Equal(0, chair.CarryChance);
|
||||||
Assert.Equal(0, chair.PupilSlots);
|
Assert.Equal(0, chair.PupilSlots);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,4 +167,20 @@ public class ApparelDefTests
|
|||||||
|
|
||||||
Assert.Contains("TShirt", ex.Message, StringComparison.Ordinal);
|
Assert.Contains("TShirt", ex.Message, StringComparison.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CarryChanceAboveOne_FailsTheCatalog()
|
||||||
|
{
|
||||||
|
var ex = Assert.Throws<ContentLoadException>(() => _loader.Load(
|
||||||
|
[CatalogLoader.CorePackId],
|
||||||
|
[
|
||||||
|
PackDocuments.Def(
|
||||||
|
CatalogLoader.CorePackId,
|
||||||
|
"things",
|
||||||
|
"phone",
|
||||||
|
"""{ "defName": "Phone", "portable": true, "carryChance": 1.2 }"""),
|
||||||
|
]));
|
||||||
|
|
||||||
|
Assert.Contains("carryChance", ex.Message, StringComparison.Ordinal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,4 +47,20 @@ public class BehaviorDefTests
|
|||||||
warning => warning.Contains("lunchWeight", StringComparison.Ordinal)
|
warning => warning.Contains("lunchWeight", StringComparison.Ordinal)
|
||||||
&& warning.Contains("dutyLessonWeight", StringComparison.Ordinal));
|
&& warning.Contains("dutyLessonWeight", StringComparison.Ordinal));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void NegativeCarryMass_FailsTheCatalog()
|
||||||
|
{
|
||||||
|
var error = Assert.Throws<ContentLoadException>(() => _loader.Load(
|
||||||
|
[CatalogLoader.CorePackId],
|
||||||
|
[
|
||||||
|
PackDocuments.Def(
|
||||||
|
CatalogLoader.CorePackId,
|
||||||
|
"behavior",
|
||||||
|
"rules",
|
||||||
|
"""{ "defName": "Behavior", "carryMassBase": -1 }"""),
|
||||||
|
]));
|
||||||
|
|
||||||
|
Assert.Contains("carry mass", error.Message, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class PeopleDefTests
|
|||||||
Assert.Equal(0.2f, catalog.Needs["Hunger"].DecayPerHour);
|
Assert.Equal(0.2f, catalog.Needs["Hunger"].DecayPerHour);
|
||||||
Assert.True(catalog.Skills["Communication"].Always);
|
Assert.True(catalog.Skills["Communication"].Always);
|
||||||
Assert.True(catalog.Skills["Agility"].Always);
|
Assert.True(catalog.Skills["Agility"].Always);
|
||||||
|
Assert.True(catalog.Skills["Hauling"].Always);
|
||||||
Assert.True(catalog.Skills["Pedagogy"].Work);
|
Assert.True(catalog.Skills["Pedagogy"].Work);
|
||||||
Assert.Equal(0.4f, catalog.Skills["English"].AdultChance);
|
Assert.Equal(0.4f, catalog.Skills["English"].AdultChance);
|
||||||
Assert.Equal(
|
Assert.Equal(
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ public class VanillaCoreTests
|
|||||||
Assert.True(catalog.Things["PeShirt"].Pe);
|
Assert.True(catalog.Things["PeShirt"].Pe);
|
||||||
Assert.True(catalog.Things["Textbook"].Portable);
|
Assert.True(catalog.Things["Textbook"].Portable);
|
||||||
Assert.Empty(catalog.Things["Textbook"].Layers);
|
Assert.Empty(catalog.Things["Textbook"].Layers);
|
||||||
|
Assert.Equal(0, catalog.Things["Textbook"].CarryChance);
|
||||||
|
Assert.Equal(1, catalog.Things["SchoolBag"].CarryChance);
|
||||||
|
Assert.Equal(11, catalog.Things["Phone"].Age?.Min);
|
||||||
Assert.Equal(1, catalog.Things.Values.Count(thing => thing.DefName == "Textbook"));
|
Assert.Equal(1, catalog.Things.Values.Count(thing => thing.DefName == "Textbook"));
|
||||||
Assert.Equal([ColorTags.Bright], catalog.Colors["Red"].Tags);
|
Assert.Equal([ColorTags.Bright], catalog.Colors["Red"].Tags);
|
||||||
Assert.Equal([ColorTags.Neutral, ColorTags.School], catalog.Colors["White"].Tags);
|
Assert.Equal([ColorTags.Neutral, ColorTags.School], catalog.Colors["White"].Tags);
|
||||||
@@ -100,6 +103,8 @@ public class VanillaCoreTests
|
|||||||
Assert.Equal(5f, catalog.BehaviorRules.DutyTravelWeight);
|
Assert.Equal(5f, catalog.BehaviorRules.DutyTravelWeight);
|
||||||
Assert.Equal(20f, catalog.BehaviorRules.NeedWeightAtZero);
|
Assert.Equal(20f, catalog.BehaviorRules.NeedWeightAtZero);
|
||||||
Assert.Equal(6f, catalog.BehaviorRules.LunchWeight);
|
Assert.Equal(6f, catalog.BehaviorRules.LunchWeight);
|
||||||
|
Assert.Equal(5f, catalog.BehaviorRules.CarryMassBase);
|
||||||
|
Assert.Equal(0.4f, catalog.BehaviorRules.OptionalApparelChance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -0,0 +1,154 @@
|
|||||||
|
namespace HSchool.People.Tests;
|
||||||
|
|
||||||
|
public class DressGeneratorTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void SameSeedCountryMapAndLanguage_YieldTheSameItemsColorsAndPlaces()
|
||||||
|
{
|
||||||
|
var map = Fixtures.Classrooms(11);
|
||||||
|
var a = Fixtures.Generate(map);
|
||||||
|
var b = Fixtures.Generate(map);
|
||||||
|
|
||||||
|
Assert.Equal(ItemsSnapshot(a), ItemsSnapshot(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WornLayers_DoNotOverlap_AndADressFillsBottomAndTop()
|
||||||
|
{
|
||||||
|
var catalog = Fixtures.Catalog();
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(11));
|
||||||
|
|
||||||
|
foreach (var person in roster.People)
|
||||||
|
{
|
||||||
|
var occupied = new HashSet<string>(StringComparer.Ordinal);
|
||||||
|
foreach (var item in person.Items.Where(row => row.Location == ItemLocations.Worn))
|
||||||
|
{
|
||||||
|
Assert.True(catalog.Things.TryGetValue(item.Def, out var def));
|
||||||
|
foreach (var layer in def.Layers)
|
||||||
|
{
|
||||||
|
Assert.True(occupied.Add(layer), $"{person.Id} wears two things on {layer}.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Contains(
|
||||||
|
roster.People,
|
||||||
|
person => person.Items.Any(item =>
|
||||||
|
item.Location == ItemLocations.Worn && item.Def.Equals("Dress", StringComparison.Ordinal)));
|
||||||
|
var dressed = roster.People.First(person =>
|
||||||
|
person.Items.Any(item => item.Location == ItemLocations.Worn && item.Def == "Dress"));
|
||||||
|
var worn = dressed.Items.Where(item => item.Location == ItemLocations.Worn).Select(item => item.Def).ToHashSet();
|
||||||
|
Assert.DoesNotContain("TShirt", worn);
|
||||||
|
Assert.DoesNotContain("Shirt", worn);
|
||||||
|
Assert.DoesNotContain("Skirt", worn);
|
||||||
|
Assert.DoesNotContain("Pants", worn);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Men_DoNotWearSkirts_AndWornColors_AreNotBright()
|
||||||
|
{
|
||||||
|
var catalog = Fixtures.Catalog();
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(11));
|
||||||
|
|
||||||
|
foreach (var person in roster.People)
|
||||||
|
{
|
||||||
|
foreach (var item in person.Items.Where(row => row.Location == ItemLocations.Worn))
|
||||||
|
{
|
||||||
|
Assert.True(catalog.Things.TryGetValue(item.Def, out var def));
|
||||||
|
if (!person.Female)
|
||||||
|
{
|
||||||
|
Assert.False(
|
||||||
|
def.Sex is not null && def.Sex.Equals("female", StringComparison.OrdinalIgnoreCase),
|
||||||
|
$"{person.Id} wears {item.Def}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.Color is { } color
|
||||||
|
&& catalog.Colors.TryGetValue(color, out var colorDef))
|
||||||
|
{
|
||||||
|
Assert.DoesNotContain(ColorTags.Bright, colorDef.Tags, StringComparer.Ordinal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void PupilInAMathematicsYear_HasAMathematicsTextbook()
|
||||||
|
{
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(11));
|
||||||
|
var years = roster.Classes.ToDictionary(row => row.Id, row => row.Year, StringComparer.Ordinal);
|
||||||
|
var pupil = roster.People.First(person =>
|
||||||
|
person.IsStudent
|
||||||
|
&& person.ClassId is { } classId
|
||||||
|
&& years[classId] >= 5);
|
||||||
|
|
||||||
|
Assert.Contains(
|
||||||
|
pupil.Items,
|
||||||
|
item => item.Def.Equals("Textbook", StringComparison.Ordinal)
|
||||||
|
&& item.Subject is not null
|
||||||
|
&& item.Subject.Equals("Mathematics", StringComparison.Ordinal));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParentsAndApplicants_AreDressed()
|
||||||
|
{
|
||||||
|
var catalog = Fixtures.Catalog();
|
||||||
|
var roster = Fixtures.Generate(Fixtures.VanillaMap());
|
||||||
|
var pool = ApplicantPool.Create(catalog, roster, Fixtures.SchoolSeed, "Russia", Fixtures.AsOf);
|
||||||
|
|
||||||
|
Assert.Contains(roster.People, person => person.IsParent);
|
||||||
|
Assert.All(
|
||||||
|
roster.People.Where(person => person.IsParent),
|
||||||
|
parent => Assert.Contains(parent.Items, item => item.Location == ItemLocations.Worn));
|
||||||
|
Assert.NotEmpty(pool.Applicants);
|
||||||
|
Assert.All(
|
||||||
|
pool.Applicants,
|
||||||
|
applicant => Assert.Contains(applicant.Person.Items, item => item.Location == ItemLocations.Worn));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BagMass_DoesNotExceedCapacity()
|
||||||
|
{
|
||||||
|
var catalog = Fixtures.Catalog();
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(11));
|
||||||
|
var pool = ApplicantPool.Create(catalog, roster, Fixtures.SchoolSeed, "Russia", Fixtures.AsOf);
|
||||||
|
|
||||||
|
foreach (var person in roster.People.Concat(pool.Applicants.Select(row => row.Person)))
|
||||||
|
{
|
||||||
|
var held = CarryMass.Held(catalog, person.Items);
|
||||||
|
var cap = CarryMass.Capacity(catalog, person.Skills);
|
||||||
|
Assert.True(held <= cap, $"{person.Id} carries {held} over {cap}.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void PeopleJsonWithoutInventory_IsDressedOnEnsure()
|
||||||
|
{
|
||||||
|
var catalog = Fixtures.Catalog();
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
|
||||||
|
var stripped = new Roster(
|
||||||
|
roster.People.Select(person => person with { Items = [] }).ToArray(),
|
||||||
|
roster.Families,
|
||||||
|
roster.Classes);
|
||||||
|
|
||||||
|
Assert.True(DressGenerator.NeedsDressing(stripped, ApplicantPool.Empty));
|
||||||
|
var dressed = DressGenerator.EnsureRoster(catalog, stripped, Fixtures.SchoolSeed, Fixtures.AsOf);
|
||||||
|
Assert.False(DressGenerator.NeedsDressing(dressed, ApplicantPool.Empty));
|
||||||
|
Assert.Equal(ItemsSnapshot(roster), ItemsSnapshot(dressed));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void EveryoneHasHauling()
|
||||||
|
{
|
||||||
|
var roster = Fixtures.Generate(Fixtures.Classrooms(4));
|
||||||
|
Assert.All(roster.People, person => Assert.True(person.Skills.ContainsKey("Hauling")));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string ItemsSnapshot(Roster roster) =>
|
||||||
|
string.Join(
|
||||||
|
'\n',
|
||||||
|
roster.People.OrderBy(person => person.Id, StringComparer.Ordinal).Select(person =>
|
||||||
|
$"{person.Id}|" + string.Join(
|
||||||
|
',',
|
||||||
|
person.Items.Select(item =>
|
||||||
|
$"{item.Def}:{item.Color ?? "-"}:{item.Location}:{item.Subject ?? "-"}:{item.Condition}"))));
|
||||||
|
}
|
||||||
@@ -32,7 +32,7 @@ public class GoldenSaveDump
|
|||||||
Write(Path.Combine(root, "current", "1.json"), current);
|
Write(Path.Combine(root, "current", "1.json"), current);
|
||||||
Write(Path.Combine(root, "current", "1.people.json"), people);
|
Write(Path.Combine(root, "current", "1.people.json"), people);
|
||||||
Write(Path.Combine(root, "legacy-no-native", "1.json"), legacy);
|
Write(Path.Combine(root, "legacy-no-native", "1.json"), legacy);
|
||||||
Write(Path.Combine(root, "legacy-no-native", "1.people.json"), people);
|
// people.json in legacy-no-native stays the historic undressed file: load must dress it.
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static MapLayout TwoClassrooms() =>
|
internal static MapLayout TwoClassrooms() =>
|
||||||
|
|||||||
@@ -198,7 +198,8 @@ public class ReviewFixTests
|
|||||||
seat,
|
seat,
|
||||||
new DateTime(2011, 9, 1, 0, 0, 0, DateTimeKind.Utc),
|
new DateTime(2011, 9, 1, 0, 0, 0, DateTimeKind.Utc),
|
||||||
Fixtures.AsOf,
|
Fixtures.AsOf,
|
||||||
motherOnly.NextChildIndex);
|
motherOnly.NextChildIndex,
|
||||||
|
Fixtures.SchoolSeed);
|
||||||
|
|
||||||
// Boys need the male form of a surname no living member of this household carries.
|
// Boys need the male form of a surname no living member of this household carries.
|
||||||
var entry = names.Surnames.Single(candidate => candidate.Male == motherOnly.Surname);
|
var entry = names.Surnames.Single(candidate => candidate.Male == motherOnly.Surname);
|
||||||
|
|||||||
@@ -54,8 +54,12 @@ internal static class RosterFingerprint
|
|||||||
var skills = string.Join(
|
var skills = string.Join(
|
||||||
',',
|
',',
|
||||||
person.Skills.OrderBy(pair => pair.Key, StringComparer.Ordinal).Select(pair => $"{pair.Key}={pair.Value}"));
|
person.Skills.OrderBy(pair => pair.Key, StringComparer.Ordinal).Select(pair => $"{pair.Key}={pair.Value}"));
|
||||||
|
var items = string.Join(
|
||||||
|
',',
|
||||||
|
person.Items.Select(item =>
|
||||||
|
$"{item.Def}:{item.Color ?? "-"}:{item.Location}{(item.Subject is { } subject ? $":{subject}" : "")}"));
|
||||||
return
|
return
|
||||||
$"person {person.Id} {person.Name.Full} female={person.Female} roles={roles} class={person.ClassId ?? "-"} born={person.BirthDate:yyyy-MM-dd} traits={traits} skills={skills}";
|
$"person {person.Id} {person.Name.Full} female={person.Female} roles={roles} class={person.ClassId ?? "-"} born={person.BirthDate:yyyy-MM-dd} traits={traits} skills={skills} items={items}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<string> Roles(Person person)
|
private static IEnumerable<string> Roles(Person person)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ public class SkillGrantTests
|
|||||||
Assert.True(person.Skills.ContainsKey("Communication"));
|
Assert.True(person.Skills.ContainsKey("Communication"));
|
||||||
Assert.True(person.Skills.ContainsKey("RussianLanguage"));
|
Assert.True(person.Skills.ContainsKey("RussianLanguage"));
|
||||||
Assert.True(person.Skills.ContainsKey("Agility"));
|
Assert.True(person.Skills.ContainsKey("Agility"));
|
||||||
|
Assert.True(person.Skills.ContainsKey("Hauling"));
|
||||||
Assert.True(person.Skills.ContainsKey("Mathematics"));
|
Assert.True(person.Skills.ContainsKey("Mathematics"));
|
||||||
Assert.False(person.Skills.ContainsKey("Chemistry"));
|
Assert.False(person.Skills.ContainsKey("Chemistry"));
|
||||||
Assert.False(person.Skills.ContainsKey("Physics"));
|
Assert.False(person.Skills.ContainsKey("Physics"));
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
# Golden roster
|
# Golden roster
|
||||||
|
|
||||||
`roster.txt` is the fingerprint of `RosterGenerator` for a fixed seed, four classrooms, Slavic
|
`roster.txt` is the fingerprint of `RosterGenerator` for a fixed seed, four classrooms, country
|
||||||
names and Russian as the native language.
|
Russia and Russian as the native language.
|
||||||
|
|
||||||
|
Phase 31 changed this file on purpose: everyone now has `Hauling` (an `always` skill, extra
|
||||||
|
rolls on the shared family stream, so later members' traits/skills shift) and an `items=`
|
||||||
|
column (wardrobe from a separate apparel stream). Names and birth dates of the first child
|
||||||
|
in a family stay; clothes are new.
|
||||||
|
|
||||||
Update it **in the same commit that changes generation**, and say in the commit message what
|
Update it **in the same commit that changes generation**, and say in the commit message what
|
||||||
changed (a new skill, a related-language roll, a different birth window). A red golden test is
|
changed (a new skill, a related-language roll, a different birth window). A red golden test is
|
||||||
|
|||||||
@@ -3,133 +3,133 @@ class class-classroom-00 year=1 letter=А room=classroom-00 capacity=16 pupils=f
|
|||||||
class class-classroom-01 year=2 letter=А room=classroom-01 capacity=16 pupils=f0.c1,f12.c0,f12.c1,f12.c2,f13.c1,f13.c2,f14.c2,f20.c0,f23.c1,f26.c0,f27.c0,f29.c0,f31.c0,f4.c0,f7.c0,f9.c0
|
class class-classroom-01 year=2 letter=А room=classroom-01 capacity=16 pupils=f0.c1,f12.c0,f12.c1,f12.c2,f13.c1,f13.c2,f14.c2,f20.c0,f23.c1,f26.c0,f27.c0,f29.c0,f31.c0,f4.c0,f7.c0,f9.c0
|
||||||
class class-classroom-02 year=3 letter=А room=classroom-02 capacity=16 pupils=f10.c0,f14.c0,f16.c0,f17.c1,f2.c0,f21.c0,f22.c1,f23.c0,f25.c0,f28.c0,f3.c0,f3.c1,f32.c0,f32.c2,f5.c0,f6.c1
|
class class-classroom-02 year=3 letter=А room=classroom-02 capacity=16 pupils=f10.c0,f14.c0,f16.c0,f17.c1,f2.c0,f21.c0,f22.c1,f23.c0,f25.c0,f28.c0,f3.c0,f3.c1,f32.c0,f32.c2,f5.c0,f6.c1
|
||||||
class class-classroom-03 year=4 letter=А room=classroom-03 capacity=16 pupils=f0.c0,f1.c0,f11.c0,f14.c1,f15.c0,f17.c0,f17.c2,f20.c1,f22.c0,f24.c0,f28.c1,f30.c0,f30.c1,f8.c1,f9.c1,f9.c2
|
class class-classroom-03 year=4 letter=А room=classroom-03 capacity=16 pupils=f0.c0,f1.c0,f11.c0,f14.c1,f15.c0,f17.c0,f17.c2,f20.c1,f22.c0,f24.c0,f28.c1,f30.c0,f30.c1,f8.c1,f9.c1,f9.c2
|
||||||
person f0.c0 Андреев Сергей Валериевич female=False roles=student class=class-classroom-03 born=2000-10-23 traits=Quiet skills=Agility=23,BelarusianLanguage=6,Biology=57,Communication=29,Endurance=51,Literature=20,Mathematics=14,PhysicalEducation=77,RussianLanguage=32,Strength=43,UkrainianLanguage=24
|
person f0.c0 Андреев Сергей Валериевич female=False roles=student class=class-classroom-03 born=2000-10-23 traits=Lazy skills=Agility=33,Biology=57,Communication=47,Endurance=46,Hauling=56,Literature=22,Mathematics=12,PhysicalEducation=65,RussianLanguage=47,Strength=64,UkrainianLanguage=31 items=Underwear:Black:worn,Socks:Gray:worn,Jeans:Black:worn,TShirt:Black:worn,Shoes:Gray:worn,Sweater:Gray:worn,Scarf:Black:worn,Coat:Black:home,PeShirt:Gray:home,PeShorts:Gray:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f0.c1 Андреев Александр Валериевич female=False roles=student class=class-classroom-01 born=2002-11-09 traits=Curious,Quiet skills=Agility=47,BelarusianLanguage=14,Biology=56,Communication=42,Endurance=51,Literature=40,Mathematics=35,PhysicalEducation=41,RussianLanguage=45,Strength=45,UkrainianLanguage=40
|
person f0.c1 Андреев Александр Валериевич female=False roles=student class=class-classroom-01 born=2002-11-09 traits=Kind,Quiet skills=Agility=13,Biology=46,Communication=20,Endurance=52,Hauling=24,Literature=35,Mathematics=49,PhysicalEducation=57,RussianLanguage=47,Strength=45 items=Underwear:Black:worn,Socks:Gray:worn,Jeans:Blue:worn,TShirt:LightBlue:worn,Shoes:Gray:worn,Sweater:Black:worn,Coat:Beige:worn,Scarf:Gray:worn,PeShirt:Gray:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f0.p0 Андреев Валерий Николаевич female=False roles=parent class=- born=1971-06-03 traits=Diligent,Quiet skills=Agility=43,Communication=58,Endurance=61,English=62,RussianLanguage=46,Strength=63,UkrainianLanguage=37
|
person f0.p0 Андреев Валерий Николаевич female=False roles=parent class=- born=1971-06-03 traits=Diligent,Quiet skills=Agility=43,Communication=58,Cooking=82,Endurance=61,Hauling=61,Pedagogy=50,RussianLanguage=89,Strength=33 items=Underwear:Black:worn,Socks:White:worn,Jeans:Black:worn,TShirt:LightBlue:worn,WinterBoots:Beige:worn,Jacket:Gray:worn,Bottle:Green:bag
|
||||||
person f0.p1 Андреева Марина Артемовна female=True roles=parent class=- born=1971-09-30 traits= skills=Agility=30,Communication=35,Endurance=46,English=58,Informatics=59,Librarianship=63,Medicine=73,PhysicalEducation=45,RussianLanguage=68,Strength=52
|
person f0.p1 Андреева Марина Артемовна female=True roles=parent class=- born=1971-09-30 traits=Quiet skills=Agility=25,BelarusianLanguage=26,Communication=38,Endurance=35,Hauling=46,History=61,Mathematics=75,RussianLanguage=65,Strength=40,UkrainianLanguage=23 items=Underwear:Gray:worn,Socks:White:worn,Pants:Beige:worn,Shirt:Blue:worn,WinterBoots:Gray:worn,Sweater:Beige:worn,Jacket:Blue:home,Bottle:White:bag,Phone:Black:bag
|
||||||
person f1.c0 Александрова Людмила Борисовна female=True roles=student class=class-classroom-03 born=2001-01-26 traits= skills=Agility=72,Biology=49,Communication=37,Endurance=39,Literature=69,Mathematics=66,PhysicalEducation=65,RussianLanguage=41,Strength=45,UkrainianLanguage=27
|
person f1.c0 Александрова Людмила Борисовна female=True roles=student class=class-classroom-03 born=2001-01-26 traits=AbsentMinded skills=Agility=72,BelarusianLanguage=36,Biology=67,Communication=37,Endurance=39,Hauling=56,Literature=77,Mathematics=29,PhysicalEducation=54,RussianLanguage=51,Strength=45,UkrainianLanguage=28 items=Underwear:Black:worn,Socks:White:worn,Dress:Black:worn,Shoes:White:worn,Belt:Beige:worn,Jacket:Black:home,PeShirt:Blue:home,PeShorts:Blue:home,Bottle:Blue:bag,Phone:Black:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f1.c1 Александров Евгений Борисович female=False roles=student class=class-classroom-00 born=2004-04-01 traits=Diligent,Kind skills=Agility=59,BelarusianLanguage=40,Biology=62,Communication=16,Endurance=56,Literature=83,Mathematics=36,PhysicalEducation=45,RussianLanguage=46,Strength=45
|
person f1.c1 Александров Евгений Борисович female=False roles=student class=class-classroom-00 born=2004-04-01 traits= skills=Agility=31,BelarusianLanguage=27,Biology=50,Communication=38,Endurance=54,Hauling=58,Literature=65,Mathematics=30,PhysicalEducation=88,RussianLanguage=44,Strength=40 items=Underwear:White:worn,Socks:Black:worn,Jeans:Black:worn,TShirt:Blue:worn,WinterBoots:Black:worn,Hat:Black:worn,Coat:Gray:home,PeShirt:Blue:home,PeShorts:Blue:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f1.c2 Александров Юрий Борисович female=False roles=student class=class-classroom-00 born=2003-10-28 traits= skills=Agility=44,BelarusianLanguage=27,Biology=73,Communication=24,Endurance=67,Literature=70,Mathematics=24,PhysicalEducation=54,RussianLanguage=15,Strength=45
|
person f1.c2 Александров Юрий Борисович female=False roles=student class=class-classroom-00 born=2003-10-28 traits= skills=Agility=45,Biology=68,Communication=31,Endurance=30,Hauling=49,Literature=60,Mathematics=29,PhysicalEducation=49,RussianLanguage=53,Strength=74,UkrainianLanguage=23 items=Underwear:Black:worn,Socks:Gray:worn,Pants:Blue:worn,TShirt:LightBlue:worn,Shoes:Black:worn,Sweater:Blue:worn,Scarf:Black:worn,Coat:Beige:home,PeShirt:Red:home,PeShorts:Gray:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f1.p0 Александров Борис Ильич female=False roles=parent class=- born=1968-10-25 traits= skills=Agility=45,Communication=74,Endurance=34,English=63,Librarianship=51,Mathematics=66,RussianLanguage=59,Strength=68,UkrainianLanguage=24
|
person f1.p0 Александров Борис Ильич female=False roles=parent class=- born=1968-10-25 traits= skills=Agility=45,Communication=74,Endurance=34,Hauling=65,RussianLanguage=53,Strength=53,UkrainianLanguage=14 items=Underwear:Black:worn,Socks:White:worn,Trousers:Gray:worn,TShirt:Blue:worn,WinterBoots:Gray:worn,Hat:Beige:worn,Scarf:Gray:worn,FurCoat:Beige:home
|
||||||
person f1.p1 Александрова Елизавета Романовна female=True roles=parent class=- born=1972-01-25 traits=Diligent skills=Agility=61,BelarusianLanguage=29,Communication=35,Endurance=39,English=52,Mathematics=72,RussianLanguage=61,Strength=45,UkrainianLanguage=21
|
person f1.p1 Александрова Елизавета Романовна female=True roles=parent class=- born=1972-01-25 traits= skills=Administration=71,Agility=45,BelarusianLanguage=26,Communication=76,Cooking=59,Endurance=35,English=58,Hauling=48,Mathematics=30,RussianLanguage=42,Strength=66 items=Underwear:Black:worn,Socks:Black:worn,Skirt:Beige:worn,Shirt:Blue:worn,WinterBoots:Beige:worn,Sweater:Beige:worn,Coat:Beige:home,Bottle:White:bag,Phone:White:bag
|
||||||
person f10.c0 Захаров Пётр Виталиевич female=False roles=student class=class-classroom-02 born=2001-11-08 traits= skills=Agility=64,BelarusianLanguage=27,Biology=49,Communication=37,Endurance=47,Literature=51,Mathematics=30,PhysicalEducation=42,RussianLanguage=35,Strength=37,UkrainianLanguage=24
|
person f10.c0 Захаров Пётр Виталиевич female=False roles=student class=class-classroom-02 born=2001-11-08 traits=Diligent skills=Agility=31,BelarusianLanguage=26,Biology=62,Communication=54,Endurance=45,Hauling=56,Literature=25,Mathematics=81,PhysicalEducation=63,RussianLanguage=46,Strength=60 items=Underwear:Black:worn,Socks:Black:worn,Pants:Gray:worn,TShirt:Black:worn,WinterBoots:Beige:worn,Jacket:Gray:home,PeShirt:Red:home,PeShorts:Red:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f10.p0 Захаров Виталий Борисович female=False roles=parent class=- born=1976-09-07 traits=HotTempered,Leader skills=Agility=44,Chemistry=93,Communication=66,Endurance=82,English=31,RussianLanguage=60,Strength=40
|
person f10.p0 Захаров Виталий Борисович female=False roles=parent class=- born=1976-09-07 traits=HotTempered,Leader skills=Agility=44,BelarusianLanguage=22,Communication=66,Endurance=82,English=16,Hauling=40,RussianLanguage=69,Strength=55 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Black:worn,TShirt:White:worn,WinterBoots:Black:worn,FurCoat:Gray:worn,Hat:Blue:worn,Scarf:Blue:worn,Bottle:White:bag,Phone:Black:bag
|
||||||
person f10.p1 Захарова Любовь Валериевна female=True roles=parent class=- born=1978-11-03 traits=AbsentMinded,Neat skills=Administration=66,Agility=36,BelarusianLanguage=38,Communication=64,Endurance=79,Informatics=51,Medicine=64,RussianLanguage=63,Strength=80,UkrainianLanguage=40
|
person f10.p1 Захарова Любовь Валериевна female=True roles=parent class=- born=1978-11-03 traits=AbsentMinded,Kind skills=Administration=43,Agility=45,BelarusianLanguage=21,Communication=61,Endurance=53,English=52,Hauling=52,Medicine=23,PhysicalEducation=42,Physics=59,RussianLanguage=66,Strength=28 items=Underwear:Gray:worn,Socks:Gray:worn,Trousers:Blue:worn,Shirt:White:worn,Shoes:Gray:worn,Sweater:Blue:worn,FurCoat:Gray:home,Bottle:White:bag,Phone:Gray:bag
|
||||||
person f11.c0 Андреева Дарья Ивановна female=True roles=student class=class-classroom-03 born=2001-05-20 traits= skills=Agility=60,BelarusianLanguage=22,Biology=60,Communication=36,Endurance=54,Literature=42,Mathematics=54,PhysicalEducation=48,RussianLanguage=35,Strength=45,UkrainianLanguage=22
|
person f11.c0 Андреева Дарья Ивановна female=True roles=student class=class-classroom-03 born=2001-05-20 traits=Leader skills=Agility=47,BelarusianLanguage=13,Biology=57,Communication=43,Endurance=44,Hauling=50,Literature=59,Mathematics=24,PhysicalEducation=61,RussianLanguage=47,Strength=45,UkrainianLanguage=24 items=Underwear:Gray:worn,Socks:White:worn,Dress:Beige:worn,Shoes:White:worn,Hat:Blue:worn,Coat:Gray:home,PeShirt:Black:home,PeShorts:Black:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f11.p0 Андреев Иван Алексеевич female=False roles=parent class=- born=1976-06-01 traits= skills=Agility=38,BelarusianLanguage=27,Communication=52,Endurance=82,RussianLanguage=72,Strength=30
|
person f11.p0 Андреев Иван Алексеевич female=False roles=parent class=- born=1976-06-01 traits= skills=Agility=38,BelarusianLanguage=16,Communication=52,Endurance=82,Hauling=33,Medicine=48,Pedagogy=61,PhysicalEducation=54,RussianLanguage=82,Strength=67,UkrainianLanguage=22 items=Underwear:White:worn,Socks:White:worn,Jeans:Black:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Sweater:Beige:worn,FurCoat:Beige:worn,Phone:Gray:bag
|
||||||
person f11.p1 Андреева София Александровна female=True roles=parent class=- born=1978-04-24 traits= skills=Agility=39,BelarusianLanguage=18,Communication=41,Endurance=50,English=55,Geography=59,Informatics=47,RussianLanguage=62,Strength=45
|
person f11.p1 Андреева София Александровна female=True roles=parent class=- born=1978-04-24 traits=Diligent,HotTempered skills=Agility=61,Communication=74,Endurance=55,English=61,Hauling=31,History=29,RussianLanguage=54,Strength=43 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Blue:worn,Shirt:Black:worn,WinterBoots:Black:worn,Coat:Gray:worn,Bottle:White:bag
|
||||||
person f12.c0 Кузьмин Олег Владиславович female=False roles=student class=class-classroom-01 born=2003-03-20 traits=AbsentMinded,Bully skills=Agility=51,BelarusianLanguage=30,Biology=64,Communication=54,Endurance=40,Literature=54,Mathematics=32,PhysicalEducation=54,RussianLanguage=40,Strength=70,UkrainianLanguage=18
|
person f12.c0 Кузьмин Олег Владиславович female=False roles=student class=class-classroom-01 born=2003-03-20 traits=Bully,Lazy skills=Agility=49,Biology=58,Communication=48,Endurance=57,Hauling=54,Literature=50,Mathematics=33,PhysicalEducation=39,RussianLanguage=9,Strength=44,UkrainianLanguage=31 items=Underwear:White:worn,Socks:Gray:worn,Pants:Blue:worn,TShirt:LightBlue:worn,WinterBoots:Black:worn,Hat:Black:worn,Belt:Black:worn,FurCoat:Gray:home,PeShirt:Red:home,PeShorts:Red:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f12.c1 Кузьмин Егор Владиславович female=False roles=student class=class-classroom-01 born=2003-05-31 traits=HotTempered,Kind skills=Agility=19,BelarusianLanguage=10,Biology=45,Communication=43,Endurance=42,Literature=60,Mathematics=24,PhysicalEducation=50,RussianLanguage=38,Strength=45
|
person f12.c1 Кузьмин Егор Владиславович female=False roles=student class=class-classroom-01 born=2003-05-31 traits=Lazy,Leader skills=Agility=45,Biology=45,Communication=30,Endurance=59,Hauling=44,Literature=39,Mathematics=30,PhysicalEducation=59,RussianLanguage=49,Strength=35,UkrainianLanguage=23 items=Underwear:Gray:worn,Socks:Gray:worn,Pants:Black:worn,TShirt:Beige:worn,Shoes:Black:worn,Sweater:Black:worn,Coat:Black:worn,Belt:Beige:worn,PeShirt:Black:home,PeShorts:Black:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f12.c2 Кузьмина Дарья Владиславовна female=True roles=student class=class-classroom-01 born=2002-10-29 traits=Curious skills=Agility=43,Biology=42,Communication=37,Endurance=34,Literature=44,Mathematics=25,PhysicalEducation=57,RussianLanguage=38,Strength=45,UkrainianLanguage=18
|
person f12.c2 Кузьмина Дарья Владиславовна female=True roles=student class=class-classroom-01 born=2002-10-29 traits=Curious,Leader skills=Agility=42,BelarusianLanguage=20,Biology=56,Communication=39,Endurance=58,Hauling=59,Literature=35,Mathematics=22,PhysicalEducation=81,RussianLanguage=58,Strength=34,UkrainianLanguage=28 items=Underwear:Black:worn,Socks:Gray:worn,Skirt:Blue:worn,Shirt:Black:worn,Shoes:Black:worn,Sweater:Beige:worn,Coat:Beige:worn,PeShirt:Green:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f12.p0 Кузьмин Владислав Александрович female=False roles=parent class=- born=1975-01-17 traits= skills=Agility=25,BelarusianLanguage=27,Communication=68,Endurance=35,Literature=53,Mathematics=41,RussianLanguage=43,Strength=65,UkrainianLanguage=14
|
person f12.p0 Кузьмин Владислав Александрович female=False roles=parent class=- born=1975-01-17 traits= skills=Administration=56,Agility=25,BelarusianLanguage=10,Communication=68,Endurance=35,English=36,Hauling=63,Informatics=56,Medicine=59,RussianLanguage=54,Strength=36 items=Underwear:Gray:worn,Socks:Gray:worn,Jeans:Blue:worn,Shirt:Blue:worn,Shoes:Gray:worn,Jacket:Blue:worn,Bottle:Blue:bag
|
||||||
person f12.p1 Кузьмина Ольга Кирилловна female=True roles=parent class=- born=1979-10-15 traits=Kind,Lazy skills=Administration=58,Agility=54,BelarusianLanguage=15,Communication=65,Endurance=40,English=50,Physics=34,RussianLanguage=52,Strength=63,UkrainianLanguage=16
|
person f12.p1 Кузьмина Ольга Кирилловна female=True roles=parent class=- born=1979-10-15 traits=AbsentMinded,Kind skills=Administration=38,Agility=39,BelarusianLanguage=25,Chemistry=48,Communication=32,Endurance=41,English=42,Geography=41,Hauling=46,RussianLanguage=32,Strength=34,UkrainianLanguage=40 items=Underwear:Gray:worn,Socks:Gray:worn,Pants:Gray:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Sweater:Gray:worn,FurCoat:Gray:home
|
||||||
person f13.c0 Яковлев Константин Владиславович female=False roles=student class=class-classroom-00 born=2004-06-16 traits=HotTempered skills=Agility=67,Biology=45,Communication=21,Endurance=49,Literature=60,Mathematics=14,PhysicalEducation=63,RussianLanguage=30,Strength=39,UkrainianLanguage=18
|
person f13.c0 Яковлев Константин Владиславович female=False roles=student class=class-classroom-00 born=2004-06-16 traits= skills=Agility=53,BelarusianLanguage=24,Biology=48,Communication=29,Endurance=37,Hauling=64,Literature=58,Mathematics=22,PhysicalEducation=44,RussianLanguage=31,Strength=37 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Gray:worn,Shirt:Blue:worn,WinterBoots:Gray:worn,Jacket:Blue:home,PeShirt:Gray:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f13.c1 Яковлев Юрий Владиславович female=False roles=student class=class-classroom-01 born=2003-07-23 traits=Kind skills=Agility=77,Biology=69,Communication=26,Endurance=55,Literature=54,Mathematics=27,PhysicalEducation=41,RussianLanguage=48,Strength=45
|
person f13.c1 Яковлев Юрий Владиславович female=False roles=student class=class-classroom-01 born=2003-07-23 traits=Diligent,Quiet skills=Agility=36,BelarusianLanguage=22,Biology=56,Communication=43,Endurance=44,Hauling=57,Literature=56,Mathematics=26,PhysicalEducation=51,RussianLanguage=37,Strength=68,UkrainianLanguage=8 items=Underwear:Black:worn,Socks:Gray:worn,Pants:Blue:worn,Shirt:Black:worn,WinterBoots:Gray:worn,Sweater:Gray:worn,FurCoat:Black:worn,PeShirt:Gray:home,PeShorts:Blue:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f13.c2 Яковлева Алина Владиславовна female=True roles=student class=class-classroom-01 born=2003-02-01 traits=Lazy,Neat skills=Agility=42,BelarusianLanguage=22,Biology=66,Communication=43,Endurance=59,Literature=42,Mathematics=38,PhysicalEducation=72,RussianLanguage=40,Strength=54
|
person f13.c2 Яковлева Алина Владиславовна female=True roles=student class=class-classroom-01 born=2003-02-01 traits=Diligent skills=Agility=58,BelarusianLanguage=20,Biology=60,Communication=45,Endurance=54,Hauling=53,Literature=66,Mathematics=34,PhysicalEducation=47,RussianLanguage=59,Strength=45 items=Underwear:White:worn,Socks:White:worn,Trousers:Black:worn,Shirt:Blue:worn,Shoes:Gray:worn,Hat:Gray:worn,Scarf:Blue:worn,Coat:Beige:home,PeShirt:Red:home,PeShorts:Red:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f13.p0 Яковлев Владислав Андреевич female=False roles=parent class=- born=1974-09-23 traits=AbsentMinded,Kind skills=Administration=61,Agility=25,Communication=42,Endurance=35,Geography=31,German=44,History=68,RussianLanguage=44,Strength=52
|
person f13.p0 Яковлев Владислав Андреевич female=False roles=parent class=- born=1974-09-23 traits=AbsentMinded,Kind skills=Agility=25,BelarusianLanguage=28,Communication=42,Endurance=35,English=26,Hauling=52,RussianLanguage=54,Strength=38 items=Underwear:Black:worn,Socks:White:worn,Trousers:Black:worn,TShirt:White:worn,Shoes:Beige:worn,Hat:Beige:worn,Coat:Beige:home,Bottle:Green:bag,Phone:White:bag
|
||||||
person f14.c0 Александров Степан Денисович female=False roles=student class=class-classroom-02 born=2002-01-03 traits=Bully,Lazy skills=Agility=26,BelarusianLanguage=20,Biology=42,Communication=45,Endurance=58,Literature=54,Mathematics=5,PhysicalEducation=51,RussianLanguage=29,Strength=49,UkrainianLanguage=17
|
person f14.c0 Александров Степан Денисович female=False roles=student class=class-classroom-02 born=2002-01-03 traits= skills=Agility=57,BelarusianLanguage=17,Biology=53,Communication=18,Endurance=60,Hauling=64,Literature=34,Mathematics=33,PhysicalEducation=55,RussianLanguage=32,Strength=41 items=Underwear:Gray:worn,Socks:Gray:worn,Pants:Blue:worn,TShirt:Gray:worn,Shoes:Black:worn,Sweater:Beige:worn,Jacket:Gray:worn,Hat:Blue:worn,Scarf:Blue:worn,PeShirt:Gray:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f14.c1 Александрова Вероника Денисовна female=True roles=student class=class-classroom-03 born=2001-08-11 traits=AbsentMinded skills=Agility=52,BelarusianLanguage=22,Biology=59,Communication=38,Endurance=40,Literature=52,Mathematics=9,PhysicalEducation=62,RussianLanguage=53,Strength=43
|
person f14.c1 Александрова Вероника Денисовна female=True roles=student class=class-classroom-03 born=2001-08-11 traits= skills=Agility=45,BelarusianLanguage=15,Biology=52,Communication=38,Endurance=37,Hauling=44,Literature=29,Mathematics=18,PhysicalEducation=65,RussianLanguage=46,Strength=64 items=Underwear:Black:worn,Socks:Gray:worn,Trousers:Gray:worn,TShirt:Black:worn,WinterBoots:Gray:worn,Belt:Gray:worn,FurCoat:Beige:home,PeShirt:Red:home,PeShorts:Gray:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f14.c2 Александров Константин Денисович female=False roles=student class=class-classroom-01 born=2003-08-21 traits= skills=Agility=45,BelarusianLanguage=22,Biology=35,Communication=16,Endurance=36,Literature=62,Mathematics=47,PhysicalEducation=65,RussianLanguage=26,Strength=51
|
person f14.c2 Александров Константин Денисович female=False roles=student class=class-classroom-01 born=2003-08-21 traits= skills=Agility=29,BelarusianLanguage=21,Biology=66,Communication=21,Endurance=51,Hauling=42,Literature=64,Mathematics=27,PhysicalEducation=67,RussianLanguage=20,Strength=45 items=Underwear:White:worn,Socks:Gray:worn,Jeans:Gray:worn,TShirt:Gray:worn,Shoes:Gray:worn,Scarf:Blue:worn,Coat:Black:home,PeShirt:Blue:home,PeShorts:Red:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f14.p1 Александрова Виктория Викторовна female=True roles=parent class=- born=1973-07-23 traits= skills=Agility=45,BelarusianLanguage=23,Communication=72,Cooking=33,Endurance=64,English=36,PhysicalEducation=61,RussianLanguage=55,Strength=42
|
person f14.p1 Александрова Виктория Викторовна female=True roles=parent class=- born=1973-07-23 traits= skills=Agility=45,Communication=72,Cooking=68,Endurance=64,Geography=58,Hauling=44,Physics=38,RussianLanguage=61,Strength=49,UkrainianLanguage=18 items=Underwear:Gray:worn,Socks:Gray:worn,Dress:Gray:worn,WinterBoots:Beige:worn,Hat:Black:worn,Coat:Black:home,Phone:Black:bag
|
||||||
person f15.c0 Воробьёв Игорь Сергеевич female=False roles=student class=class-classroom-03 born=2000-09-20 traits=Diligent skills=Agility=40,BelarusianLanguage=12,Biology=42,Communication=51,Endurance=51,Literature=37,Mathematics=16,PhysicalEducation=31,RussianLanguage=11,Strength=51,UkrainianLanguage=11
|
person f15.c0 Воробьёв Игорь Сергеевич female=False roles=student class=class-classroom-03 born=2000-09-20 traits= skills=Agility=45,BelarusianLanguage=24,Biology=33,Communication=61,Endurance=58,Hauling=42,Literature=45,Mathematics=32,PhysicalEducation=40,RussianLanguage=55,Strength=38 items=Underwear:Black:worn,Socks:White:worn,Trousers:Blue:worn,TShirt:Black:worn,Shoes:Beige:worn,Sweater:Black:worn,Hat:Gray:worn,FurCoat:Black:home,PeShirt:Green:home,PeShorts:Blue:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f15.p0 Воробьёв Сергей Никитич female=False roles=parent class=- born=1974-10-22 traits=Neat,Quiet skills=Agility=45,BelarusianLanguage=28,Communication=54,Endurance=45,English=62,RussianLanguage=70,Strength=33,UkrainianLanguage=16
|
person f15.p0 Воробьёв Сергей Никитич female=False roles=parent class=- born=1974-10-22 traits=Neat,Quiet skills=Agility=45,Communication=54,Endurance=45,Hauling=36,Librarianship=67,Pedagogy=38,RussianLanguage=71,Strength=65,UkrainianLanguage=32 items=Underwear:White:worn,Socks:Black:worn,Pants:Blue:worn,TShirt:Gray:worn,Shoes:Black:worn,Sweater:Black:worn,FurCoat:Beige:home,Bottle:Blue:bag
|
||||||
person f15.p1 Воробьёва Вера Виталиевна female=True roles=parent class=- born=1972-09-07 traits=Curious skills=Agility=60,Communication=60,Endurance=52,Geography=42,History=40,RussianLanguage=40,Strength=64,UkrainianLanguage=25
|
person f15.p1 Воробьёва Вера Виталиевна female=True roles=parent class=- born=1972-09-07 traits=Leader,Neat skills=Agility=42,BelarusianLanguage=40,Communication=30,Endurance=52,Hauling=46,Pedagogy=55,RussianLanguage=46,Strength=45,UkrainianLanguage=25 items=Underwear:Black:worn,Socks:Gray:worn,Pants:Black:worn,TShirt:Black:worn,WinterBoots:Black:worn,Coat:Gray:worn,Hat:Gray:worn,Scarf:Black:worn,Bottle:Blue:bag,Phone:White:bag
|
||||||
person f16.c0 Фролова Елизавета Игоревна female=True roles=student class=class-classroom-02 born=2002-06-29 traits=Lazy,Quiet skills=Agility=65,BelarusianLanguage=14,Biology=19,Communication=30,Endurance=34,Literature=33,Mathematics=27,PhysicalEducation=42,RussianLanguage=17,Strength=67
|
person f16.c0 Фролова Елизавета Игоревна female=True roles=student class=class-classroom-02 born=2002-06-29 traits=Quiet skills=Agility=29,BelarusianLanguage=17,Biology=43,Communication=32,Endurance=19,Hauling=36,Literature=51,Mathematics=51,PhysicalEducation=68,RussianLanguage=24,Strength=45 items=Underwear:Gray:worn,Socks:Black:worn,Jeans:Blue:worn,Shirt:Blue:worn,WinterBoots:Beige:worn,Sweater:Beige:worn,FurCoat:Black:home,PeShirt:Red:home,PeShorts:Gray:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f16.p0 Фролов Игорь Виталиевич female=False roles=parent class=- born=1968-07-25 traits= skills=Agility=57,BelarusianLanguage=37,Communication=58,Endurance=63,English=52,RussianLanguage=52,Strength=49,UkrainianLanguage=20
|
person f16.p0 Фролов Игорь Виталиевич female=False roles=parent class=- born=1968-07-25 traits= skills=Administration=51,Agility=57,BelarusianLanguage=25,Communication=58,Endurance=63,Hauling=49,Medicine=53,RussianLanguage=53,Strength=46 items=Underwear:White:worn,Socks:White:worn,Pants:Gray:worn,Shirt:Gray:worn,Shoes:Gray:worn,Hat:Blue:worn,Jacket:Beige:home
|
||||||
person f16.p1 Фролова Татьяна Олеговна female=True roles=parent class=- born=1970-06-17 traits=Curious,Diligent skills=Agility=80,BelarusianLanguage=5,Communication=63,Endurance=71,RussianLanguage=71,Strength=52
|
person f16.p1 Фролова Татьяна Олеговна female=True roles=parent class=- born=1970-06-17 traits=Leader,Neat skills=Agility=45,BelarusianLanguage=23,Communication=59,Endurance=59,Hauling=62,Literature=51,RussianLanguage=72,Strength=44 items=Underwear:White:worn,Socks:Black:worn,Skirt:Blue:worn,Shirt:Blue:worn,Shoes:Beige:worn,Sweater:Blue:worn,Coat:Beige:home,Bottle:Blue:bag,Phone:Black:bag
|
||||||
person f17.c0 Иванов Андрей Александрович female=False roles=student class=class-classroom-03 born=2001-06-27 traits= skills=Agility=44,BelarusianLanguage=13,Biology=29,Communication=39,Endurance=60,Literature=49,Mathematics=34,PhysicalEducation=60,RussianLanguage=24,Strength=55
|
person f17.c0 Иванов Андрей Александрович female=False roles=student class=class-classroom-03 born=2001-06-27 traits=Leader skills=Agility=60,Biology=53,Communication=54,Endurance=35,Hauling=41,Literature=65,Mathematics=38,PhysicalEducation=55,RussianLanguage=35,Strength=45,UkrainianLanguage=13 items=Underwear:White:worn,Socks:Gray:worn,Jeans:Gray:worn,Shirt:White:worn,WinterBoots:Gray:worn,Coat:Black:home,PeShirt:Green:home,PeShorts:Blue:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f17.c1 Иванова Ксения Александровна female=True roles=student class=class-classroom-02 born=2001-09-10 traits= skills=Agility=45,BelarusianLanguage=21,Biology=25,Communication=28,Endurance=64,Literature=66,Mathematics=37,PhysicalEducation=59,RussianLanguage=58,Strength=45
|
person f17.c1 Иванова Ксения Александровна female=True roles=student class=class-classroom-02 born=2001-09-10 traits=Bully skills=Agility=45,Biology=64,Communication=28,Endurance=64,Hauling=48,Literature=47,Mathematics=37,PhysicalEducation=28,RussianLanguage=43,Strength=45 items=Underwear:White:worn,Socks:Black:worn,Pants:Black:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,FurCoat:Beige:worn,Hat:Black:worn,PeShirt:Blue:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f17.c2 Иванова Полина Александровна female=True roles=student class=class-classroom-03 born=2001-05-21 traits=HotTempered,Kind skills=Agility=36,Biology=53,Communication=45,Endurance=45,Literature=43,Mathematics=29,PhysicalEducation=51,RussianLanguage=42,Strength=45,UkrainianLanguage=23
|
person f17.c2 Иванова Полина Александровна female=True roles=student class=class-classroom-03 born=2001-05-21 traits=HotTempered,Kind skills=Agility=36,Biology=43,Communication=45,Endurance=45,Hauling=47,Literature=43,Mathematics=33,PhysicalEducation=58,RussianLanguage=36,Strength=45,UkrainianLanguage=15 items=Underwear:Gray:worn,Socks:Black:worn,Pants:Black:worn,TShirt:Beige:worn,WinterBoots:Gray:worn,Sweater:Gray:worn,Coat:Beige:worn,Belt:Beige:worn,PeShirt:Red:home,PeShorts:Gray:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f17.p0 Иванов Александр Владимирович female=False roles=parent class=- born=1967-12-24 traits=Diligent,HotTempered skills=Agility=47,Communication=74,Cooking=58,Endurance=52,English=20,RussianLanguage=61,Strength=55
|
person f17.p0 Иванов Александр Владимирович female=False roles=parent class=- born=1967-12-24 traits=Diligent,HotTempered skills=Agility=47,Communication=74,Endurance=52,Hauling=55,Physics=39,RussianLanguage=27,Strength=49 items=Underwear:Black:worn,Socks:Gray:worn,Jeans:Blue:worn,TShirt:Blue:worn,WinterBoots:Black:worn,Belt:Beige:worn,FurCoat:Black:home
|
||||||
person f17.p1 Иванова Александра Ивановна female=True roles=parent class=- born=1967-04-25 traits= skills=Agility=40,BelarusianLanguage=7,Communication=69,Endurance=63,Geography=64,Literature=72,RussianLanguage=73,Strength=40
|
person f17.p1 Иванова Александра Ивановна female=True roles=parent class=- born=1967-04-25 traits= skills=Agility=40,Communication=69,Endurance=63,Hauling=35,RussianLanguage=56,Strength=68,UkrainianLanguage=19 items=Underwear:White:worn,Socks:White:worn,Pants:Beige:worn,Shirt:Blue:worn,Shoes:Beige:worn,FurCoat:Gray:home,Phone:White:bag
|
||||||
person f18.c0 Лебедев Александр Валериевич female=False roles=student class=class-classroom-00 born=2004-02-16 traits= skills=Agility=49,BelarusianLanguage=28,Biology=36,Communication=39,Endurance=28,Literature=38,Mathematics=32,PhysicalEducation=36,RussianLanguage=37,Strength=21
|
person f18.c0 Лебедев Александр Валериевич female=False roles=student class=class-classroom-00 born=2004-02-16 traits=Curious skills=Agility=26,Biology=50,Communication=9,Endurance=53,Hauling=33,Literature=55,Mathematics=20,PhysicalEducation=56,RussianLanguage=23,Strength=35 items=Underwear:Black:worn,Socks:Black:worn,Pants:Black:worn,Shirt:White:worn,WinterBoots:Beige:worn,Sweater:Beige:worn,Jacket:Blue:worn,Belt:Gray:worn,PeShirt:Blue:home,PeShorts:Green:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f18.p0 Лебедев Валерий Романович female=False roles=parent class=- born=1985-03-29 traits=Neat,Quiet skills=Agility=25,Communication=59,Endurance=35,English=60,Mathematics=59,Medicine=44,Pedagogy=62,Physics=45,RussianLanguage=67,Strength=33,UkrainianLanguage=19
|
person f18.p0 Лебедев Валерий Романович female=False roles=parent class=- born=1985-03-29 traits=Neat,Quiet skills=Agility=25,Chemistry=56,Communication=59,Endurance=35,English=49,Geography=50,Hauling=35,Pedagogy=51,RussianLanguage=67,Strength=62 items=Underwear:Gray:worn,Socks:Black:worn,Pants:Black:worn,Shirt:Gray:worn,Shoes:Beige:worn,FurCoat:Gray:worn,Belt:Beige:worn,Bottle:Green:bag
|
||||||
person f18.p1 Лебедева Юлия Михаиловна female=True roles=parent class=- born=1981-01-26 traits=Leader skills=Agility=44,Communication=73,Endurance=86,Geography=30,Medicine=45,Pedagogy=43,RussianLanguage=57,Strength=41,UkrainianLanguage=36
|
person f18.p1 Лебедева Юлия Михаиловна female=True roles=parent class=- born=1981-01-26 traits= skills=Administration=54,Agility=59,BelarusianLanguage=36,Biology=68,Communication=52,Endurance=44,Hauling=67,Mathematics=47,Medicine=37,RussianLanguage=48,Strength=45,UkrainianLanguage=22 items=Underwear:Gray:worn,Socks:White:worn,Dress:Black:worn,Shoes:Gray:worn,Sweater:Gray:worn,Hat:Black:worn,Belt:Black:worn,Jacket:Gray:home,Phone:Black:bag
|
||||||
person f19.c0 Воробьёв Григорий Михаилович female=False roles=student class=class-classroom-00 born=2004-08-29 traits=Quiet skills=Agility=62,Biology=45,Communication=36,Endurance=50,Literature=42,Mathematics=12,PhysicalEducation=56,RussianLanguage=54,Strength=37
|
person f19.c0 Воробьёв Григорий Михаилович female=False roles=student class=class-classroom-00 born=2004-08-29 traits=Quiet skills=Agility=62,BelarusianLanguage=31,Biology=42,Communication=36,Endurance=50,Hauling=39,Literature=34,Mathematics=37,PhysicalEducation=50,RussianLanguage=33,Strength=45,UkrainianLanguage=23 items=Underwear:Black:worn,Socks:White:worn,Pants:Blue:worn,Shirt:Blue:worn,Shoes:Gray:worn,Sweater:Black:worn,Coat:Gray:worn,PeShirt:Blue:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f19.p0 Воробьёв Михаил Егорович female=False roles=parent class=- born=1978-11-03 traits=Lazy skills=Agility=40,BelarusianLanguage=34,Communication=56,Cooking=54,Endurance=46,History=51,RussianLanguage=61,Strength=40
|
person f19.p0 Воробьёв Михаил Егорович female=False roles=parent class=- born=1978-11-03 traits=Lazy skills=Administration=53,Agility=40,Communication=56,Endurance=46,Hauling=41,Librarianship=66,Mathematics=36,RussianLanguage=45,Strength=55 items=Underwear:Black:worn,Socks:Black:worn,Pants:Black:worn,Shirt:Black:worn,Shoes:Beige:worn,Hat:Black:worn,Jacket:Green:home,Bottle:Blue:bag
|
||||||
person f19.p1 Воробьёва Вера Алексеевна female=True roles=parent class=- born=1982-08-29 traits=HotTempered skills=Administration=50,Agility=45,BelarusianLanguage=20,Communication=67,Cooking=21,Endurance=57,Geography=41,PhysicalEducation=46,RussianLanguage=36,Strength=40,UkrainianLanguage=25
|
person f19.p1 Воробьёва Вера Алексеевна female=True roles=parent class=- born=1982-08-29 traits=AbsentMinded,Lazy skills=Administration=50,Agility=58,BelarusianLanguage=20,Communication=46,Endurance=30,Hauling=50,PhysicalEducation=66,RussianLanguage=49,Strength=40,UkrainianLanguage=25 items=Underwear:Gray:worn,Socks:Gray:worn,Dress:Black:worn,WinterBoots:Black:worn,Jacket:Red:home
|
||||||
person f2.c0 Алексеев Григорий Константинович female=False roles=student class=class-classroom-02 born=2002-07-24 traits=AbsentMinded,Curious skills=Agility=35,BelarusianLanguage=27,Biology=50,Communication=30,Endurance=68,Literature=50,Mathematics=8,PhysicalEducation=72,RussianLanguage=9,Strength=45,UkrainianLanguage=17
|
person f2.c0 Алексеев Григорий Константинович female=False roles=student class=class-classroom-02 born=2002-07-24 traits=Neat skills=Agility=40,BelarusianLanguage=36,Biology=64,Communication=34,Endurance=57,Hauling=38,Literature=58,Mathematics=41,PhysicalEducation=47,RussianLanguage=28,Strength=45,UkrainianLanguage=23 items=Underwear:White:worn,Socks:Gray:worn,Jeans:Blue:worn,TShirt:Black:worn,Shoes:Black:worn,FurCoat:Gray:home,PeShirt:Red:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f2.p0 Алексеев Константин Романович female=False roles=parent class=- born=1974-12-11 traits=Neat skills=Administration=52,Agility=36,Communication=60,Cooking=55,Endurance=49,English=30,Geography=52,Mathematics=65,RussianLanguage=64,Strength=47,UkrainianLanguage=9
|
person f2.p0 Алексеев Константин Романович female=False roles=parent class=- born=1974-12-11 traits=Neat skills=Agility=36,BelarusianLanguage=23,Communication=60,Endurance=49,English=34,Hauling=47,Mathematics=63,Medicine=81,Pedagogy=74,RussianLanguage=56,Strength=59,UkrainianLanguage=22 items=Underwear:Gray:worn,Socks:White:worn,Pants:Beige:worn,Shirt:Black:worn,WinterBoots:Beige:worn,Sweater:Black:worn,Hat:Black:worn,FurCoat:Gray:home
|
||||||
person f2.p1 Алексеева Ольга Романовна female=True roles=parent class=- born=1970-07-22 traits=HotTempered skills=Administration=45,Agility=45,BelarusianLanguage=22,Communication=82,Endurance=54,English=46,History=43,Librarianship=65,RussianLanguage=65,Strength=64
|
person f2.p1 Алексеева Ольга Романовна female=True roles=parent class=- born=1970-07-22 traits=Neat skills=Agility=50,Communication=58,Cooking=51,Endurance=43,English=55,Hauling=54,Literature=35,Medicine=76,PhysicalEducation=32,RussianLanguage=38,Strength=42 items=Underwear:Black:worn,Socks:White:worn,Skirt:Gray:worn,TShirt:Blue:worn,Shoes:Beige:worn,Sweater:Gray:worn,Coat:Beige:home,Bottle:White:bag
|
||||||
person f20.c0 Павлова Елена Игоревна female=True roles=student class=class-classroom-01 born=2002-11-09 traits= skills=Agility=48,Biology=38,Communication=37,Endurance=34,Literature=70,Mathematics=48,PhysicalEducation=51,RussianLanguage=26,Strength=40,UkrainianLanguage=21
|
person f20.c0 Павлова Елена Игоревна female=True roles=student class=class-classroom-01 born=2002-11-09 traits= skills=Agility=55,Biology=47,Communication=19,Endurance=51,Hauling=38,Literature=41,Mathematics=34,PhysicalEducation=49,RussianLanguage=44,Strength=42,UkrainianLanguage=20 items=Underwear:White:worn,Socks:Gray:worn,Pants:Black:worn,TShirt:Blue:worn,WinterBoots:Beige:worn,Hat:Beige:worn,Belt:Gray:worn,Coat:Gray:home,PeShirt:Red:home,PeShorts:Gray:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f20.c1 Павлова Валентина Игоревна female=True roles=student class=class-classroom-03 born=2001-01-24 traits= skills=Agility=46,BelarusianLanguage=19,Biology=50,Communication=32,Endurance=50,Literature=44,Mathematics=19,PhysicalEducation=52,RussianLanguage=39,Strength=38,UkrainianLanguage=27
|
person f20.c1 Павлова Валентина Игоревна female=True roles=student class=class-classroom-03 born=2001-01-24 traits=Kind skills=Agility=68,BelarusianLanguage=12,Biology=41,Communication=31,Endurance=58,Hauling=46,Literature=42,Mathematics=19,PhysicalEducation=50,RussianLanguage=45,Strength=42,UkrainianLanguage=9 items=Underwear:White:worn,Socks:Black:worn,Trousers:Gray:worn,TShirt:Blue:worn,Shoes:Black:worn,Sweater:Blue:worn,FurCoat:Beige:home,PeShirt:Green:home,PeShorts:Blue:home,Bottle:Green:bag,Phone:Black:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f20.p0 Павлов Игорь Никитич female=False roles=parent class=- born=1968-08-01 traits=HotTempered,Leader skills=Agility=72,Communication=57,Endurance=43,Informatics=54,Physics=43,RussianLanguage=49,Strength=43
|
person f20.p0 Павлов Игорь Никитич female=False roles=parent class=- born=1968-08-01 traits=HotTempered,Leader skills=Administration=61,Agility=72,Communication=57,Endurance=43,Geography=61,German=73,Hauling=44,Pedagogy=56,RussianLanguage=66,Strength=42,UkrainianLanguage=28 items=Underwear:Black:worn,Socks:White:worn,Trousers:Black:worn,TShirt:Blue:worn,WinterBoots:Gray:worn,FurCoat:Black:home,Bottle:White:bag
|
||||||
person f20.p1 Павлова Людмила Дмитриевна female=True roles=parent class=- born=1970-01-17 traits= skills=Agility=60,BelarusianLanguage=28,Communication=48,Cooking=71,Endurance=56,RussianLanguage=63,Strength=46
|
person f20.p1 Павлова Людмила Дмитриевна female=True roles=parent class=- born=1970-01-17 traits=Curious,Quiet skills=Agility=46,BelarusianLanguage=26,Communication=71,Endurance=39,English=31,Hauling=36,Physics=48,RussianLanguage=53,Strength=56 items=Underwear:White:worn,Socks:Gray:worn,Dress:Beige:worn,WinterBoots:Beige:worn,Hat:Black:worn,Belt:Beige:worn,Coat:Gray:home,Bottle:White:bag
|
||||||
person f21.c0 Ильин Андрей Константинович female=False roles=student class=class-classroom-02 born=2002-05-12 traits= skills=Agility=31,BelarusianLanguage=28,Biology=59,Communication=61,Endurance=48,Literature=47,Mathematics=34,PhysicalEducation=60,RussianLanguage=22,Strength=54
|
person f21.c0 Ильин Андрей Константинович female=False roles=student class=class-classroom-02 born=2002-05-12 traits= skills=Agility=54,BelarusianLanguage=15,Biology=72,Communication=22,Endurance=54,Hauling=58,Literature=58,Mathematics=45,PhysicalEducation=52,RussianLanguage=38,Strength=45,UkrainianLanguage=25 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Black:worn,TShirt:White:worn,WinterBoots:Black:worn,Sweater:Black:worn,Jacket:Black:worn,PeShirt:Gray:home,PeShorts:Blue:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f21.p0 Ильин Константин Никитич female=False roles=parent class=- born=1971-01-21 traits=Diligent,Quiet skills=Agility=45,BelarusianLanguage=30,Communication=53,Endurance=40,Medicine=40,Pedagogy=74,PhysicalEducation=48,Physics=57,RussianLanguage=45,Strength=44,UkrainianLanguage=19
|
person f21.p0 Ильин Константин Никитич female=False roles=parent class=- born=1971-01-21 traits=Diligent,Quiet skills=Agility=45,Biology=50,Communication=53,Endurance=40,English=46,Hauling=45,History=42,Librarianship=57,RussianLanguage=68,Strength=40,UkrainianLanguage=9 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Black:worn,Shirt:Black:worn,Shoes:White:worn,Scarf:Black:worn,FurCoat:Beige:home,Bottle:Blue:bag
|
||||||
person f21.p1 Ильина Яна Борисовна female=True roles=parent class=- born=1975-04-20 traits=Curious skills=Agility=35,BelarusianLanguage=13,Communication=62,Endurance=55,Informatics=60,Pedagogy=42,RussianLanguage=68,Strength=53,UkrainianLanguage=20
|
person f21.p1 Ильина Яна Борисовна female=True roles=parent class=- born=1975-04-20 traits=Lazy skills=Agility=74,BelarusianLanguage=26,Biology=41,Communication=54,Endurance=55,English=77,Hauling=35,Librarianship=44,Medicine=57,RussianLanguage=35,Strength=50,UkrainianLanguage=23 items=Underwear:Black:worn,Socks:White:worn,Jeans:Gray:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Coat:Gray:worn,Bottle:Blue:bag
|
||||||
person f22.c0 Захаров Никита Виталиевич female=False roles=student class=class-classroom-03 born=2000-09-14 traits=Diligent,Quiet skills=Agility=48,Biology=62,Communication=33,Endurance=59,Literature=64,Mathematics=32,PhysicalEducation=49,RussianLanguage=70,Strength=69
|
person f22.c0 Захаров Никита Виталиевич female=False roles=student class=class-classroom-03 born=2000-09-14 traits= skills=Agility=62,BelarusianLanguage=19,Biology=50,Communication=42,Endurance=39,Hauling=47,Literature=68,Mathematics=65,PhysicalEducation=60,RussianLanguage=59,Strength=45,UkrainianLanguage=31 items=Underwear:Gray:worn,Socks:White:worn,Jeans:Gray:worn,TShirt:Beige:worn,Shoes:Beige:worn,FurCoat:Gray:home,PeShirt:Black:home,PeShorts:Blue:home,Bottle:White:bag,Phone:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f22.c1 Захаров Денис Виталиевич female=False roles=student class=class-classroom-02 born=2001-09-11 traits=AbsentMinded skills=Agility=51,BelarusianLanguage=27,Biology=53,Communication=57,Endurance=53,Literature=74,Mathematics=18,PhysicalEducation=46,RussianLanguage=63,Strength=61
|
person f22.c1 Захаров Денис Виталиевич female=False roles=student class=class-classroom-02 born=2001-09-11 traits=Kind,Leader skills=Agility=51,Biology=42,Communication=55,Endurance=51,Hauling=69,Literature=53,Mathematics=60,PhysicalEducation=80,RussianLanguage=50,Strength=53,UkrainianLanguage=16 items=Underwear:White:worn,Socks:White:worn,Trousers:Blue:worn,TShirt:Blue:worn,Shoes:White:worn,Hat:Blue:worn,Coat:Beige:home,PeShirt:Red:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f22.p0 Захаров Виталий Андреевич female=False roles=parent class=- born=1966-04-08 traits= skills=Agility=29,BelarusianLanguage=2,Communication=62,Cooking=40,Endurance=82,English=62,Librarianship=50,RussianLanguage=64,Strength=30
|
person f22.p0 Захаров Виталий Андреевич female=False roles=parent class=- born=1966-04-08 traits= skills=Agility=29,Communication=62,Endurance=82,Hauling=33,RussianLanguage=65,Strength=58,UkrainianLanguage=18 items=Underwear:Black:worn,Socks:Black:worn,Pants:Beige:worn,TShirt:LightBlue:worn,Shoes:Black:worn,Coat:Black:worn,Hat:Gray:worn,Bottle:White:bag,Phone:Black:bag
|
||||||
person f22.p1 Захарова Елизавета Егоровна female=True roles=parent class=- born=1967-09-05 traits=Diligent,HotTempered skills=Administration=51,Agility=51,BelarusianLanguage=6,Biology=40,Communication=56,Endurance=52,English=53,Librarianship=50,Literature=79,RussianLanguage=62,Strength=62
|
person f22.p1 Захарова Елизавета Егоровна female=True roles=parent class=- born=1967-09-05 traits= skills=Administration=37,Agility=42,BelarusianLanguage=28,Communication=82,Cooking=65,Endurance=60,English=52,Hauling=37,Mathematics=67,RussianLanguage=54,Strength=51 items=Underwear:Gray:worn,Socks:White:worn,Dress:Gray:worn,WinterBoots:Gray:worn,FurCoat:Gray:home,Bottle:Green:bag
|
||||||
person f23.c0 Орловская Нина Константиновна female=True roles=student class=class-classroom-02 born=2001-11-01 traits=Neat skills=Agility=55,Biology=45,Communication=40,Endurance=55,Literature=16,Mathematics=38,PhysicalEducation=57,RussianLanguage=39,Strength=45,UkrainianLanguage=15
|
person f23.c0 Орловская Нина Константиновна female=True roles=student class=class-classroom-02 born=2001-11-01 traits=AbsentMinded,Quiet skills=Agility=44,BelarusianLanguage=13,Biology=42,Communication=9,Endurance=51,Hauling=45,Literature=53,Mathematics=34,PhysicalEducation=70,RussianLanguage=46,Strength=38 items=Underwear:White:worn,Socks:White:worn,Trousers:Blue:worn,TShirt:Blue:worn,Shoes:Beige:worn,Sweater:Blue:worn,Coat:Beige:worn,Hat:Gray:worn,PeShirt:Blue:home,PeShorts:Red:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f23.c1 Орловская Полина Константиновна female=True roles=student class=class-classroom-01 born=2003-03-30 traits=Leader,Neat skills=Agility=51,BelarusianLanguage=20,Biology=51,Communication=22,Endurance=42,Literature=39,Mathematics=14,PhysicalEducation=54,RussianLanguage=24,Strength=40
|
person f23.c1 Орловская Полина Константиновна female=True roles=student class=class-classroom-01 born=2003-03-30 traits=Curious,Quiet skills=Agility=39,BelarusianLanguage=20,Biology=70,Communication=19,Endurance=53,Hauling=54,Literature=73,Mathematics=46,PhysicalEducation=55,RussianLanguage=47,Strength=67 items=Underwear:White:worn,Socks:Black:worn,Dress:Blue:worn,Shoes:Black:worn,Sweater:Beige:worn,Jacket:Red:home,PeShirt:Black:home,PeShorts:Gray:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f23.p0 Орловский Константин Михаилович female=False roles=parent class=- born=1965-04-02 traits=Diligent,HotTempered skills=Agility=45,Communication=55,Endurance=50,History=57,Librarianship=42,Mathematics=40,Pedagogy=35,RussianLanguage=46,Strength=50
|
person f23.p0 Орловский Константин Михаилович female=False roles=parent class=- born=1965-04-02 traits=Diligent,HotTempered skills=Agility=45,BelarusianLanguage=23,Communication=55,Endurance=50,Hauling=50,History=40,Librarianship=56,Physics=61,RussianLanguage=52,Strength=32,UkrainianLanguage=17 items=Underwear:Gray:worn,Socks:White:worn,Jeans:Gray:worn,Shirt:Blue:worn,WinterBoots:Beige:worn,FurCoat:Black:worn,Hat:Beige:worn
|
||||||
person f23.p1 Орловская Яна Степановна female=True roles=parent class=- born=1965-10-22 traits= skills=Agility=42,Communication=52,Endurance=55,RussianLanguage=46,Strength=34,UkrainianLanguage=10
|
person f23.p1 Орловская Яна Степановна female=True roles=parent class=- born=1965-10-22 traits=Lazy skills=Agility=56,BelarusianLanguage=28,Communication=44,Endurance=40,Hauling=81,Pedagogy=45,RussianLanguage=62,Strength=56,UkrainianLanguage=26 items=Underwear:Gray:worn,Socks:Gray:worn,Pants:Gray:worn,TShirt:Blue:worn,Shoes:White:worn,Hat:Blue:worn,Coat:Black:home
|
||||||
person f24.c0 Орлов Фёдор Алексеевич female=False roles=student class=class-classroom-03 born=2000-12-05 traits= skills=Agility=56,Biology=45,Communication=20,Endurance=35,Literature=67,Mathematics=23,PhysicalEducation=33,RussianLanguage=65,Strength=36
|
person f24.c0 Орлов Фёдор Алексеевич female=False roles=student class=class-classroom-03 born=2000-12-05 traits=Neat skills=Agility=40,BelarusianLanguage=8,Biology=54,Communication=6,Endurance=40,Hauling=45,Literature=41,Mathematics=10,PhysicalEducation=46,RussianLanguage=52,Strength=63 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Gray:worn,Shirt:Black:worn,Shoes:Gray:worn,Sweater:Black:worn,Jacket:Blue:worn,PeShirt:Blue:home,PeShorts:Blue:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f24.c1 Орлова Оксана Алексеевна female=True roles=student class=class-classroom-00 born=2004-03-01 traits=Neat skills=Agility=55,BelarusianLanguage=4,Biology=40,Communication=43,Endurance=43,Literature=39,Mathematics=17,PhysicalEducation=56,RussianLanguage=27,Strength=26,UkrainianLanguage=25
|
person f24.c1 Орлова Оксана Алексеевна female=True roles=student class=class-classroom-00 born=2004-03-01 traits=Kind,Lazy skills=Agility=75,Biology=30,Communication=23,Endurance=54,Hauling=35,Literature=62,Mathematics=43,PhysicalEducation=50,RussianLanguage=26,Strength=41,UkrainianLanguage=31 items=Underwear:Black:worn,Socks:White:worn,Pants:Beige:worn,TShirt:White:worn,WinterBoots:Black:worn,Scarf:Beige:worn,Jacket:Red:home,PeShirt:Black:home,PeShorts:Red:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f24.p0 Орлов Алексей Денисович female=False roles=parent class=- born=1977-04-17 traits= skills=Agility=45,BelarusianLanguage=21,Communication=51,Endurance=18,English=62,Geography=46,RussianLanguage=67,Strength=46
|
person f24.p0 Орлов Алексей Денисович female=False roles=parent class=- born=1977-04-17 traits= skills=Agility=45,BelarusianLanguage=17,Communication=51,Endurance=18,English=61,Hauling=46,Literature=56,Mathematics=60,RussianLanguage=55,Strength=62,UkrainianLanguage=16 items=Underwear:Black:worn,Socks:Black:worn,Trousers:Gray:worn,Shirt:Gray:worn,WinterBoots:Black:worn,Sweater:Black:worn,Hat:Gray:worn,Jacket:Black:home
|
||||||
person f24.p1 Орлова Надежда Владиславовна female=True roles=parent class=- born=1977-12-04 traits=Quiet skills=Agility=65,Biology=64,Communication=70,Cooking=41,Endurance=45,Librarianship=49,RussianLanguage=71,Strength=65
|
person f24.p1 Орлова Надежда Владиславовна female=True roles=parent class=- born=1977-12-04 traits=Kind skills=Agility=25,BelarusianLanguage=25,Communication=52,Endurance=22,English=70,Hauling=52,Librarianship=51,Medicine=10,RussianLanguage=50,Strength=52,UkrainianLanguage=19 items=Underwear:Black:worn,Socks:Gray:worn,Trousers:Blue:worn,TShirt:LightBlue:worn,WinterBoots:Gray:worn,Sweater:Black:worn,FurCoat:Black:worn,Belt:Black:worn,Bottle:Blue:bag,Phone:Black:bag
|
||||||
person f25.c0 Петрова Александра Игоревна female=True roles=student class=class-classroom-02 born=2001-12-19 traits=AbsentMinded,Lazy skills=Agility=51,BelarusianLanguage=20,Biology=58,Communication=40,Endurance=54,Literature=65,Mathematics=50,PhysicalEducation=35,RussianLanguage=32,Strength=57
|
person f25.c0 Петрова Александра Игоревна female=True roles=student class=class-classroom-02 born=2001-12-19 traits= skills=Agility=57,BelarusianLanguage=29,Biology=64,Communication=32,Endurance=40,Hauling=58,Literature=47,Mathematics=40,PhysicalEducation=79,RussianLanguage=64,Strength=65,UkrainianLanguage=7 items=Underwear:White:worn,Socks:White:worn,Trousers:Black:worn,TShirt:Blue:worn,WinterBoots:Black:worn,Sweater:Gray:worn,Coat:Beige:worn,Hat:Beige:worn,Scarf:Beige:worn,PeShirt:Red:home,PeShorts:Blue:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f25.p1 Петрова Полина Юриевна female=True roles=parent class=- born=1965-12-11 traits=Kind,Neat skills=Agility=53,BelarusianLanguage=15,Communication=50,Endurance=59,RussianLanguage=54,Strength=45
|
person f25.p1 Петрова Полина Юриевна female=True roles=parent class=- born=1965-12-11 traits=Kind,Neat skills=Agility=53,Communication=50,Endurance=59,English=70,Geography=41,Hauling=56,Medicine=42,RussianLanguage=72,Strength=45 items=Underwear:Gray:worn,Socks:White:worn,Pants:Beige:worn,TShirt:LightBlue:worn,WinterBoots:Beige:worn,Coat:Beige:worn,Hat:Black:worn,Bottle:White:bag
|
||||||
person f26.c0 Яковлев Павел Михаилович female=False roles=student class=class-classroom-01 born=2002-12-29 traits=Curious skills=Agility=59,BelarusianLanguage=27,Biology=79,Communication=32,Endurance=57,Literature=35,Mathematics=10,PhysicalEducation=64,RussianLanguage=35,Strength=45
|
person f26.c0 Яковлев Павел Михаилович female=False roles=student class=class-classroom-01 born=2002-12-29 traits=Kind,Neat skills=Agility=45,BelarusianLanguage=30,Biology=59,Communication=8,Endurance=59,Hauling=53,Literature=60,Mathematics=47,PhysicalEducation=43,RussianLanguage=43,Strength=45,UkrainianLanguage=23 items=Underwear:White:worn,Socks:White:worn,Pants:Beige:worn,TShirt:LightBlue:worn,Shoes:Black:worn,Sweater:Blue:worn,Coat:Beige:worn,PeShirt:Gray:home,PeShorts:Red:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f26.c1 Яковлев Вадим Михаилович female=False roles=student class=class-classroom-00 born=2004-06-28 traits=Neat skills=Agility=54,BelarusianLanguage=17,Biology=66,Communication=43,Endurance=52,Literature=40,Mathematics=18,PhysicalEducation=34,RussianLanguage=22,Strength=45
|
person f26.c1 Яковлев Вадим Михаилович female=False roles=student class=class-classroom-00 born=2004-06-28 traits= skills=Agility=40,BelarusianLanguage=24,Biology=36,Communication=14,Endurance=66,Hauling=41,Literature=71,Mathematics=26,PhysicalEducation=55,RussianLanguage=25,Strength=40,UkrainianLanguage=18 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Blue:worn,TShirt:Black:worn,Shoes:Black:worn,FurCoat:Black:home,PeShirt:Blue:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f26.p0 Яковлев Михаил Степанович female=False roles=parent class=- born=1975-12-27 traits=HotTempered,Neat skills=Administration=44,Agility=44,Biology=52,Communication=59,Cooking=40,Endurance=66,English=56,Mathematics=55,RussianLanguage=52,Strength=53
|
person f26.p0 Яковлев Михаил Степанович female=False roles=parent class=- born=1975-12-27 traits=HotTempered,Neat skills=Agility=44,Communication=59,Endurance=66,Hauling=52,Mathematics=44,Medicine=71,PhysicalEducation=53,RussianLanguage=55,Strength=45,UkrainianLanguage=28 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Blue:worn,TShirt:Black:worn,Shoes:Gray:worn,Scarf:Blue:worn,Jacket:Blue:home,Phone:Gray:bag
|
||||||
person f26.p1 Яковлева Марина Кирилловна female=True roles=parent class=- born=1976-12-10 traits=HotTempered,Kind skills=Agility=37,BelarusianLanguage=21,Communication=47,Cooking=44,Endurance=31,Pedagogy=40,RussianLanguage=68,Strength=48,UkrainianLanguage=27
|
person f26.p1 Яковлева Марина Кирилловна female=True roles=parent class=- born=1976-12-10 traits=Diligent,Neat skills=Agility=36,BelarusianLanguage=22,Communication=53,Endurance=66,English=40,Hauling=47,History=43,Medicine=66,PhysicalEducation=45,RussianLanguage=65,Strength=43 items=Underwear:White:worn,Socks:White:worn,Jeans:Black:worn,TShirt:Gray:worn,WinterBoots:Black:worn,FurCoat:Gray:worn,Bottle:Blue:bag,Phone:Gray:bag
|
||||||
person f27.c0 Иванов Виктор Константинович female=False roles=student class=class-classroom-01 born=2002-12-27 traits=AbsentMinded,Curious skills=Agility=35,Biology=50,Communication=26,Endurance=35,Literature=60,Mathematics=1,PhysicalEducation=46,RussianLanguage=57,Strength=38
|
person f27.c0 Иванов Виктор Константинович female=False roles=student class=class-classroom-01 born=2002-12-27 traits=Bully skills=Agility=29,BelarusianLanguage=19,Biology=56,Communication=26,Endurance=46,Hauling=65,Literature=45,Mathematics=53,PhysicalEducation=58,RussianLanguage=27,Strength=45,UkrainianLanguage=22 items=Underwear:Black:worn,Socks:Gray:worn,Pants:Gray:worn,TShirt:Gray:worn,Shoes:Beige:worn,FurCoat:Black:worn,PeShirt:Gray:home,PeShorts:Red:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f27.c1 Иванов Владислав Константинович female=False roles=student class=class-classroom-00 born=2004-07-04 traits= skills=Agility=50,BelarusianLanguage=24,Biology=61,Communication=24,Endurance=76,Literature=72,Mathematics=25,PhysicalEducation=46,RussianLanguage=34,Strength=45,UkrainianLanguage=17
|
person f27.c1 Иванов Владислав Константинович female=False roles=student class=class-classroom-00 born=2004-07-04 traits=Diligent,Neat skills=Agility=38,BelarusianLanguage=23,Biology=27,Communication=31,Endurance=53,Hauling=65,Literature=62,Mathematics=33,PhysicalEducation=64,RussianLanguage=49,Strength=53 items=Underwear:White:worn,Socks:White:worn,Trousers:Black:worn,Shirt:Gray:worn,WinterBoots:Black:worn,Sweater:Blue:worn,Jacket:Gray:worn,Hat:Gray:worn,Scarf:Blue:worn,PeShirt:Blue:home,PeShorts:Green:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f27.c2 Иванов Александр Константинович female=False roles=student class=class-classroom-00 born=2004-05-25 traits=Kind,Neat skills=Agility=65,BelarusianLanguage=28,Biology=49,Communication=43,Endurance=68,Literature=42,Mathematics=46,PhysicalEducation=52,RussianLanguage=35,Strength=45,UkrainianLanguage=32
|
person f27.c2 Иванов Александр Константинович female=False roles=student class=class-classroom-00 born=2004-05-25 traits= skills=Agility=58,Biology=51,Communication=37,Endurance=60,Hauling=37,Literature=65,Mathematics=35,PhysicalEducation=33,RussianLanguage=42,Strength=45,UkrainianLanguage=38 items=Underwear:Black:worn,Socks:Black:worn,Pants:Black:worn,TShirt:White:worn,WinterBoots:Beige:worn,Sweater:Black:worn,Hat:Beige:worn,Scarf:Blue:worn,FurCoat:Gray:home,PeShirt:Blue:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f27.p0 Иванов Константин Иванович female=False roles=parent class=- born=1974-08-25 traits=Neat skills=Administration=49,Agility=44,BelarusianLanguage=34,Communication=77,Endurance=42,English=55,RussianLanguage=36,Strength=64,UkrainianLanguage=26
|
person f27.p0 Иванов Константин Иванович female=False roles=parent class=- born=1974-08-25 traits=Neat skills=Agility=44,BelarusianLanguage=27,Communication=77,Endurance=42,English=53,Hauling=62,Medicine=52,Pedagogy=40,RussianLanguage=32,Strength=28 items=Underwear:Black:worn,Socks:Black:worn,Trousers:Blue:worn,Shirt:Blue:worn,Shoes:Gray:worn,Sweater:Blue:worn,Scarf:Beige:worn,Jacket:Green:home,Bottle:White:bag,Phone:White:bag
|
||||||
person f27.p1 Иванова Марина Константиновна female=True roles=parent class=- born=1969-11-29 traits=Quiet skills=Agility=46,BelarusianLanguage=21,Communication=61,Endurance=32,English=46,Librarianship=53,RussianLanguage=54,Strength=37
|
person f27.p1 Иванова Марина Константиновна female=True roles=parent class=- born=1969-11-29 traits=Curious skills=Agility=43,BelarusianLanguage=16,Communication=71,Endurance=63,English=50,Hauling=59,RussianLanguage=56,Strength=35,UkrainianLanguage=21 items=Underwear:Black:worn,Socks:Gray:worn,Skirt:Beige:worn,TShirt:Black:worn,WinterBoots:Beige:worn,Sweater:Black:worn,FurCoat:Beige:worn,Bottle:Green:bag,Phone:Black:bag
|
||||||
person f28.c0 Иванов Пётр Петрович female=False roles=student class=class-classroom-02 born=2002-08-02 traits=AbsentMinded,Neat skills=Agility=73,Biology=62,Communication=42,Endurance=43,Literature=59,Mathematics=48,PhysicalEducation=39,RussianLanguage=11,Strength=45
|
person f28.c0 Иванов Пётр Петрович female=False roles=student class=class-classroom-02 born=2002-08-02 traits= skills=Agility=43,BelarusianLanguage=34,Biology=36,Communication=42,Endurance=50,Hauling=36,Literature=33,Mathematics=4,PhysicalEducation=78,RussianLanguage=46,Strength=44 items=Underwear:Gray:worn,Socks:White:worn,Pants:Beige:worn,Shirt:Gray:worn,WinterBoots:Black:worn,Sweater:Blue:worn,Jacket:Red:home,PeShirt:Green:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f28.c1 Иванова Наталья Петровна female=True roles=student class=class-classroom-03 born=2000-12-07 traits=Bully,Lazy skills=Agility=64,BelarusianLanguage=30,Biology=46,Communication=27,Endurance=59,Literature=34,Mathematics=67,PhysicalEducation=69,RussianLanguage=51,Strength=45,UkrainianLanguage=23
|
person f28.c1 Иванова Наталья Петровна female=True roles=student class=class-classroom-03 born=2000-12-07 traits=Quiet skills=Agility=58,BelarusianLanguage=30,Biology=46,Communication=52,Endurance=36,Hauling=58,Literature=38,Mathematics=73,PhysicalEducation=77,RussianLanguage=51,Strength=45,UkrainianLanguage=23 items=Underwear:White:worn,Socks:Gray:worn,Pants:Beige:worn,TShirt:Gray:worn,Shoes:Beige:worn,Hat:Black:worn,Coat:Beige:home,PeShirt:Green:home,PeShorts:Gray:home,Phone:Black:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f28.c2 Иванов Максим Петрович female=False roles=student class=class-classroom-00 born=2004-04-05 traits=Lazy skills=Agility=67,BelarusianLanguage=13,Biology=59,Communication=26,Endurance=54,Literature=31,Mathematics=29,PhysicalEducation=63,RussianLanguage=55,Strength=51,UkrainianLanguage=25
|
person f28.c2 Иванов Максим Петрович female=False roles=student class=class-classroom-00 born=2004-04-05 traits=Lazy skills=Agility=67,BelarusianLanguage=23,Biology=32,Communication=26,Endurance=54,Hauling=51,Literature=57,Mathematics=10,PhysicalEducation=57,RussianLanguage=47,Strength=75,UkrainianLanguage=35 items=Underwear:Black:worn,Socks:Gray:worn,Pants:Beige:worn,TShirt:Black:worn,Shoes:Gray:worn,Sweater:Gray:worn,Scarf:Black:worn,Coat:Black:home,PeShirt:Black:home,PeShorts:Red:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f28.p0 Иванов Пётр Олегович female=False roles=parent class=- born=1965-06-23 traits=AbsentMinded,Kind skills=Agility=75,BelarusianLanguage=26,Communication=60,Endurance=74,Informatics=60,Literature=57,Pedagogy=56,RussianLanguage=39,Strength=48
|
person f28.p0 Иванов Пётр Олегович female=False roles=parent class=- born=1965-06-23 traits=AbsentMinded,Kind skills=Agility=75,BelarusianLanguage=24,Biology=51,Communication=60,Cooking=51,Endurance=74,English=57,Geography=66,Hauling=48,RussianLanguage=45,Strength=40,UkrainianLanguage=36 items=Underwear:Black:worn,Socks:Gray:worn,Trousers:Black:worn,Shirt:White:worn,Shoes:White:worn,Sweater:Black:worn,Coat:Gray:worn,Hat:Black:worn,Scarf:Black:worn
|
||||||
person f28.p1 Иванова Полина Алексеевна female=True roles=parent class=- born=1965-11-18 traits= skills=Agility=17,BelarusianLanguage=24,Chemistry=40,Communication=52,Endurance=35,Librarianship=59,Medicine=69,Physics=42,RussianLanguage=50,Strength=61,UkrainianLanguage=21
|
person f28.p1 Иванова Полина Алексеевна female=True roles=parent class=- born=1965-11-18 traits=AbsentMinded,Leader skills=Agility=43,Communication=61,Cooking=49,Endurance=43,Hauling=60,RussianLanguage=46,Strength=45 items=Underwear:White:worn,Socks:White:worn,Dress:Beige:worn,WinterBoots:Gray:worn,Hat:Beige:worn,Belt:Black:worn,FurCoat:Gray:home,Bottle:Green:bag,Phone:Black:bag
|
||||||
person f29.c0 Макарова Ксения Александровна female=True roles=student class=class-classroom-01 born=2002-11-08 traits=Bully skills=Agility=52,BelarusianLanguage=27,Biology=62,Communication=35,Endurance=53,Literature=71,Mathematics=48,PhysicalEducation=35,RussianLanguage=41,Strength=45
|
person f29.c0 Макарова Ксения Александровна female=True roles=student class=class-classroom-01 born=2002-11-08 traits=AbsentMinded,HotTempered skills=Agility=52,Biology=73,Communication=35,Endurance=53,Hauling=68,Literature=64,Mathematics=28,PhysicalEducation=67,RussianLanguage=18,Strength=45 items=Underwear:Gray:worn,Socks:White:worn,Pants:Blue:worn,TShirt:Gray:worn,WinterBoots:Black:worn,Jacket:Black:worn,Hat:Blue:worn,Belt:Beige:worn,PeShirt:Gray:home,PeShorts:Blue:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f29.p0 Макаров Александр Николаевич female=False roles=parent class=- born=1981-11-08 traits=AbsentMinded skills=Administration=40,Agility=50,BelarusianLanguage=25,Chemistry=42,Communication=44,Endurance=55,Geography=56,Librarianship=66,RussianLanguage=69,Strength=40,UkrainianLanguage=19
|
person f29.p0 Макаров Александр Николаевич female=False roles=parent class=- born=1981-11-08 traits=AbsentMinded skills=Agility=50,BelarusianLanguage=34,Communication=44,Endurance=55,Hauling=42,Informatics=34,PhysicalEducation=74,RussianLanguage=54,Strength=64,UkrainianLanguage=10 items=Underwear:Black:worn,Socks:White:worn,Jeans:Blue:worn,Shirt:Blue:worn,WinterBoots:Black:worn,Sweater:Gray:worn,Coat:Black:worn,Hat:Gray:worn,Scarf:Black:worn,Bottle:Blue:bag,Phone:Black:bag
|
||||||
person f29.p1 Макарова Мария Владиславовна female=True roles=parent class=- born=1977-10-31 traits=HotTempered skills=Agility=45,BelarusianLanguage=23,Chemistry=42,Communication=37,Endurance=70,Literature=20,RussianLanguage=54,Strength=44,UkrainianLanguage=25
|
person f29.p1 Макарова Мария Владиславовна female=True roles=parent class=- born=1977-10-31 traits=Curious,Diligent skills=Administration=44,Agility=44,BelarusianLanguage=8,Communication=56,Endurance=62,English=40,Hauling=44,Medicine=15,RussianLanguage=41,Strength=52 items=Underwear:White:worn,Socks:Black:worn,Trousers:Black:worn,Shirt:Blue:worn,Shoes:Beige:worn,Sweater:Black:worn,Hat:Blue:worn,Coat:Black:home,Bottle:White:bag,Phone:White:bag
|
||||||
person f3.c0 Макарова Вероника Петровна female=True roles=student class=class-classroom-02 born=2002-05-15 traits=Curious,Diligent skills=Agility=37,BelarusianLanguage=32,Biology=32,Communication=61,Endurance=71,Literature=63,Mathematics=27,PhysicalEducation=60,RussianLanguage=66,Strength=81
|
person f3.c0 Макарова Вероника Петровна female=True roles=student class=class-classroom-02 born=2002-05-15 traits= skills=Agility=68,BelarusianLanguage=24,Biology=34,Communication=45,Endurance=50,Hauling=48,Literature=37,Mathematics=41,PhysicalEducation=50,RussianLanguage=28,Strength=45,UkrainianLanguage=23 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Blue:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Jacket:Black:home,PeShirt:Gray:home,PeShorts:Blue:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f3.c1 Макаров Роман Петрович female=False roles=student class=class-classroom-02 born=2002-04-16 traits= skills=Agility=40,BelarusianLanguage=28,Biology=55,Communication=32,Endurance=34,Literature=51,Mathematics=41,PhysicalEducation=49,RussianLanguage=44,Strength=37
|
person f3.c1 Макаров Роман Петрович female=False roles=student class=class-classroom-02 born=2002-04-16 traits=Lazy skills=Agility=50,BelarusianLanguage=22,Biology=59,Communication=22,Endurance=46,Hauling=51,Literature=39,Mathematics=17,PhysicalEducation=37,RussianLanguage=31,Strength=45,UkrainianLanguage=23 items=Underwear:Gray:worn,Socks:Black:worn,Jeans:Blue:worn,Shirt:White:worn,WinterBoots:Black:worn,Hat:Beige:worn,Coat:Black:home,PeShirt:Black:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f3.p0 Макаров Пётр Егорович female=False roles=parent class=- born=1977-02-28 traits=Diligent,Neat skills=Agility=67,Communication=28,Endurance=53,English=57,Librarianship=39,RussianLanguage=45,Strength=42,UkrainianLanguage=26
|
person f3.p0 Макаров Пётр Егорович female=False roles=parent class=- born=1977-02-28 traits=Diligent,Neat skills=Agility=67,Communication=28,Endurance=53,English=57,Hauling=43,History=43,Pedagogy=54,RussianLanguage=43,Strength=40 items=Underwear:Black:worn,Socks:White:worn,Pants:Gray:worn,Shirt:Blue:worn,WinterBoots:Black:worn,Sweater:Beige:worn,Hat:Beige:worn,Coat:Black:home
|
||||||
person f3.p1 Макарова Алина Антоновна female=True roles=parent class=- born=1978-04-05 traits= skills=Agility=62,BelarusianLanguage=26,Communication=63,Endurance=39,RussianLanguage=64,Strength=45
|
person f3.p1 Макарова Алина Антоновна female=True roles=parent class=- born=1978-04-05 traits=Kind,Neat skills=Agility=45,BelarusianLanguage=20,Biology=41,Communication=45,Cooking=68,Endurance=51,English=54,Hauling=52,History=69,Medicine=78,RussianLanguage=63,Strength=44 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Black:worn,TShirt:Gray:worn,WinterBoots:Gray:worn,Sweater:Gray:worn,Hat:Beige:worn,FurCoat:Beige:home,Phone:Black:bag
|
||||||
person f30.c0 Иванова Светлана Владимировна female=True roles=student class=class-classroom-03 born=2000-10-08 traits= skills=Agility=38,Biology=51,Communication=37,Endurance=48,Literature=46,Mathematics=39,PhysicalEducation=44,RussianLanguage=33,Strength=45,UkrainianLanguage=38
|
person f30.c0 Иванова Светлана Владимировна female=True roles=student class=class-classroom-03 born=2000-10-08 traits=Leader skills=Agility=43,Biology=53,Communication=26,Endurance=44,Hauling=49,Literature=68,Mathematics=39,PhysicalEducation=73,RussianLanguage=51,Strength=36,UkrainianLanguage=21 items=Underwear:White:worn,Socks:Black:worn,Pants:Blue:worn,Shirt:Gray:worn,Shoes:Gray:worn,Coat:Black:worn,Hat:Blue:worn,Scarf:Gray:worn,PeShirt:Gray:home,PeShorts:Black:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f30.c1 Иванова Надежда Владимировна female=True roles=student class=class-classroom-03 born=2000-12-10 traits=Bully skills=Agility=27,Biology=46,Communication=49,Endurance=61,Literature=36,Mathematics=38,PhysicalEducation=72,RussianLanguage=39,Strength=45,UkrainianLanguage=27
|
person f30.c1 Иванова Надежда Владимировна female=True roles=student class=class-classroom-03 born=2000-12-10 traits=AbsentMinded,Lazy skills=Agility=43,BelarusianLanguage=19,Biology=57,Communication=38,Endurance=66,Hauling=46,Literature=70,Mathematics=17,PhysicalEducation=48,RussianLanguage=41,Strength=40,UkrainianLanguage=10 items=Underwear:White:worn,Socks:Black:worn,Pants:Black:worn,Shirt:White:worn,Shoes:Black:worn,Scarf:Beige:worn,Jacket:Blue:home,PeShirt:Blue:home,PeShorts:Red:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f30.p0 Иванов Владимир Денисович female=False roles=parent class=- born=1974-06-12 traits=Lazy skills=Agility=40,BelarusianLanguage=26,Biology=37,Communication=72,Endurance=50,Librarianship=45,Physics=66,RussianLanguage=46,Strength=40
|
person f30.p0 Иванов Владимир Денисович female=False roles=parent class=- born=1974-06-12 traits=Lazy skills=Agility=40,Biology=17,Communication=72,Cooking=61,Endurance=50,Hauling=32,RussianLanguage=58,Strength=40,UkrainianLanguage=26 items=Underwear:Black:worn,Socks:Black:worn,Trousers:Black:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Coat:Beige:home,Bottle:Blue:bag
|
||||||
person f30.p1 Иванова Мария Андреевна female=True roles=parent class=- born=1973-09-24 traits= skills=Administration=44,Agility=52,Communication=61,Endurance=62,RussianLanguage=46,Strength=45,UkrainianLanguage=30
|
person f30.p1 Иванова Мария Андреевна female=True roles=parent class=- born=1973-09-24 traits=Diligent skills=Agility=52,BelarusianLanguage=40,Communication=61,Endurance=62,Hauling=65,Medicine=47,RussianLanguage=43,Strength=39 items=Underwear:White:worn,Socks:Gray:worn,Skirt:Black:worn,Shirt:Blue:worn,Shoes:Gray:worn,Hat:Beige:worn,Jacket:Blue:home,Phone:Gray:bag
|
||||||
person f31.c0 Иванов Николай Вадимович female=False roles=student class=class-classroom-01 born=2003-08-29 traits= skills=Agility=41,Biology=43,Communication=32,Endurance=44,Literature=45,Mathematics=53,PhysicalEducation=47,RussianLanguage=7,Strength=45,UkrainianLanguage=21
|
person f31.c0 Иванов Николай Вадимович female=False roles=student class=class-classroom-01 born=2003-08-29 traits= skills=Agility=20,BelarusianLanguage=24,Biology=40,Communication=27,Endurance=43,Hauling=46,Literature=36,Mathematics=40,PhysicalEducation=53,RussianLanguage=32,Strength=73,UkrainianLanguage=20 items=Underwear:Gray:worn,Socks:White:worn,Jeans:Black:worn,TShirt:Beige:worn,WinterBoots:Beige:worn,FurCoat:Black:home,PeShirt:Blue:home,PeShorts:Black:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f31.p0 Иванов Вадим Андреевич female=False roles=parent class=- born=1985-06-23 traits=Diligent,Quiet skills=Agility=45,BelarusianLanguage=25,Communication=54,Endurance=71,Medicine=57,PhysicalEducation=60,RussianLanguage=56,Strength=53,UkrainianLanguage=25
|
person f31.p0 Иванов Вадим Андреевич female=False roles=parent class=- born=1985-06-23 traits=Diligent,Quiet skills=Administration=28,Agility=45,BelarusianLanguage=32,Communication=54,Endurance=71,English=55,German=47,Hauling=53,PhysicalEducation=44,RussianLanguage=70,Strength=44,UkrainianLanguage=17 items=Underwear:White:worn,Socks:White:worn,Jeans:Black:worn,Shirt:Black:worn,Shoes:Black:worn,Hat:Blue:worn,Coat:Gray:home,Bottle:Blue:bag,Phone:Gray:bag
|
||||||
person f31.p1 Иванова Александра Юриевна female=True roles=parent class=- born=1980-08-20 traits=Diligent skills=Administration=54,Agility=75,BelarusianLanguage=19,Chemistry=43,Communication=65,Cooking=53,Endurance=50,PhysicalEducation=67,RussianLanguage=36,Strength=48,UkrainianLanguage=37
|
person f31.p1 Иванова Александра Юриевна female=True roles=parent class=- born=1980-08-20 traits=Diligent,HotTempered skills=Agility=70,BelarusianLanguage=29,Communication=50,Endurance=41,English=50,Hauling=51,Librarianship=35,PhysicalEducation=73,Physics=54,RussianLanguage=59,Strength=62,UkrainianLanguage=23 items=Underwear:Black:worn,Socks:Black:worn,Pants:Black:worn,TShirt:Gray:worn,Shoes:Black:worn,Jacket:Black:worn,Hat:Black:worn,Scarf:Blue:worn,Phone:Gray:bag
|
||||||
person f32.c0 Петров Артём Евгениевич female=False roles=student class=class-classroom-02 born=2002-07-14 traits=Quiet skills=Agility=31,BelarusianLanguage=34,Biology=33,Communication=5,Endurance=20,Literature=45,Mathematics=21,PhysicalEducation=64,RussianLanguage=42,Strength=80,UkrainianLanguage=25
|
person f32.c0 Петров Артём Евгениевич female=False roles=student class=class-classroom-02 born=2002-07-14 traits=Neat skills=Agility=78,Biology=58,Communication=47,Endurance=32,Hauling=19,Literature=31,Mathematics=29,PhysicalEducation=60,RussianLanguage=65,Strength=18,UkrainianLanguage=18 items=Underwear:Black:worn,Socks:Black:worn,Trousers:Blue:worn,Shirt:Gray:worn,Shoes:Beige:worn,Sweater:Black:worn,FurCoat:Black:worn,PeShirt:Gray:home,PeShorts:Gray:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f32.c1 Петрова Елена Евгениевна female=True roles=student class=class-classroom-00 born=2003-10-27 traits=Quiet skills=Agility=47,BelarusianLanguage=30,Biology=51,Communication=68,Endurance=48,Literature=46,Mathematics=37,PhysicalEducation=59,RussianLanguage=25,Strength=38,UkrainianLanguage=22
|
person f32.c1 Петрова Елена Евгениевна female=True roles=student class=class-classroom-00 born=2003-10-27 traits=AbsentMinded,HotTempered skills=Agility=37,Biology=54,Communication=39,Endurance=60,Hauling=53,Literature=58,Mathematics=33,PhysicalEducation=75,RussianLanguage=34,Strength=42,UkrainianLanguage=30 items=Underwear:Gray:worn,Socks:Black:worn,Pants:Blue:worn,TShirt:White:worn,Shoes:Gray:worn,Coat:Black:worn,Hat:Gray:worn,Belt:Gray:worn,PeShirt:Blue:home,PeShorts:Green:home,Bottle:Green:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f32.c2 Петрова Ирина Евгениевна female=True roles=student class=class-classroom-02 born=2001-09-18 traits=HotTempered,Kind skills=Agility=54,BelarusianLanguage=29,Biology=54,Communication=28,Endurance=49,Literature=31,Mathematics=41,PhysicalEducation=67,RussianLanguage=50,Strength=52
|
person f32.c2 Петрова Ирина Евгениевна female=True roles=student class=class-classroom-02 born=2001-09-18 traits=Kind,Quiet skills=Agility=41,BelarusianLanguage=32,Biology=80,Communication=32,Endurance=42,Hauling=67,Literature=51,Mathematics=26,PhysicalEducation=33,RussianLanguage=32,Strength=45 items=Underwear:White:worn,Socks:White:worn,Dress:Beige:worn,WinterBoots:Black:worn,Sweater:Black:worn,Jacket:Beige:worn,Belt:Gray:worn,PeShirt:Black:home,PeShorts:Blue:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f32.p0 Петров Евгений Станиславович female=False roles=parent class=- born=1963-05-02 traits= skills=Agility=45,BelarusianLanguage=23,Chemistry=61,Communication=66,Endurance=43,Mathematics=49,Pedagogy=34,RussianLanguage=58,Strength=41,UkrainianLanguage=29
|
person f32.p0 Петров Евгений Станиславович female=False roles=parent class=- born=1963-05-02 traits= skills=Agility=45,Communication=66,Endurance=43,English=53,Hauling=42,PhysicalEducation=51,RussianLanguage=62,Strength=52,UkrainianLanguage=26 items=Underwear:Black:worn,Socks:White:worn,Jeans:Black:worn,Shirt:Black:worn,Shoes:White:worn,Sweater:Black:worn,Belt:Beige:worn,Coat:Beige:home,Bottle:Blue:bag
|
||||||
person f33.c0 Морозова Елизавета Григориевна female=True roles=student class=class-classroom-00 born=2003-11-04 traits=Diligent,Quiet skills=Agility=21,BelarusianLanguage=25,Biology=38,Communication=41,Endurance=55,Literature=54,Mathematics=53,PhysicalEducation=66,RussianLanguage=42,Strength=45
|
person f33.c0 Морозова Елизавета Григориевна female=True roles=student class=class-classroom-00 born=2003-11-04 traits=AbsentMinded,Lazy skills=Agility=59,BelarusianLanguage=25,Biology=55,Communication=45,Endurance=48,Hauling=50,Literature=58,Mathematics=0,PhysicalEducation=54,RussianLanguage=28,Strength=38,UkrainianLanguage=26 items=Underwear:Gray:worn,Socks:Black:worn,Skirt:Gray:worn,TShirt:White:worn,Shoes:Beige:worn,Sweater:Blue:worn,Hat:Blue:worn,Scarf:Gray:worn,Coat:Gray:home,PeShirt:Gray:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f33.p0 Морозов Григорий Михаилович female=False roles=parent class=- born=1968-05-01 traits= skills=Administration=71,Agility=28,BelarusianLanguage=22,Communication=68,Endurance=62,English=53,Librarianship=36,RussianLanguage=52,Strength=51,UkrainianLanguage=14
|
person f33.p0 Морозов Григорий Михаилович female=False roles=parent class=- born=1968-05-01 traits= skills=Agility=28,BelarusianLanguage=8,Communication=68,Endurance=62,Hauling=51,Pedagogy=72,RussianLanguage=56,Strength=46,UkrainianLanguage=22 items=Underwear:Gray:worn,Socks:White:worn,Trousers:Gray:worn,TShirt:Blue:worn,WinterBoots:Beige:worn,Sweater:Blue:worn,Coat:Gray:home,Phone:Black:bag
|
||||||
person f33.p1 Морозова Марина Владимировна female=True roles=parent class=- born=1972-10-24 traits=HotTempered skills=Agility=65,BelarusianLanguage=23,Communication=28,Endurance=40,Pedagogy=57,RussianLanguage=56,Strength=40,UkrainianLanguage=11
|
person f33.p1 Морозова Марина Владимировна female=True roles=parent class=- born=1972-10-24 traits=Leader skills=Administration=54,Agility=41,BelarusianLanguage=28,Communication=42,Endurance=80,English=30,Geography=60,Hauling=41,PhysicalEducation=76,RussianLanguage=74,Strength=37 items=Underwear:Black:worn,Socks:White:worn,Pants:Beige:worn,Shirt:Gray:worn,WinterBoots:Black:worn,Hat:Beige:worn,Belt:Gray:worn,Jacket:Beige:home
|
||||||
person f34.c0 Кузнецова Валентина Ивановна female=True roles=student class=class-classroom-00 born=2004-03-25 traits=Curious,Kind skills=Agility=29,BelarusianLanguage=22,Biology=48,Communication=21,Endurance=69,Literature=30,Mathematics=39,PhysicalEducation=35,RussianLanguage=28,Strength=45,UkrainianLanguage=24
|
person f34.c0 Кузнецова Валентина Ивановна female=True roles=student class=class-classroom-00 born=2004-03-25 traits=Curious,Kind skills=Agility=29,Biology=32,Communication=21,Endurance=69,Hauling=54,Literature=58,Mathematics=28,PhysicalEducation=53,RussianLanguage=16,Strength=43,UkrainianLanguage=24 items=Underwear:Black:worn,Socks:Black:worn,Pants:Black:worn,Shirt:White:worn,Shoes:Black:worn,Sweater:Gray:worn,Jacket:Black:worn,PeShirt:Green:home,PeShorts:Red:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f34.p0 Кузнецов Иван Сергеевич female=False roles=parent class=- born=1970-02-02 traits= skills=Agility=44,Communication=43,Endurance=58,English=73,Geography=37,Physics=49,RussianLanguage=77,Strength=40
|
person f34.p0 Кузнецов Иван Сергеевич female=False roles=parent class=- born=1970-02-02 traits= skills=Agility=44,Communication=43,Endurance=58,English=45,German=55,Hauling=31,Literature=54,RussianLanguage=55,Strength=72 items=Underwear:Black:worn,Socks:Black:worn,Pants:Beige:worn,Shirt:Gray:worn,WinterBoots:Gray:worn,Hat:Black:worn,Scarf:Beige:worn,Coat:Black:home
|
||||||
person f34.p1 Кузнецова Дарья Валериевна female=True roles=parent class=- born=1967-03-25 traits=Lazy skills=Administration=60,Agility=69,BelarusianLanguage=23,Communication=67,Cooking=44,Endurance=47,German=38,RussianLanguage=70,Strength=48,UkrainianLanguage=15
|
person f34.p1 Кузнецова Дарья Валериевна female=True roles=parent class=- born=1967-03-25 traits=HotTempered skills=Agility=47,BelarusianLanguage=23,Communication=52,Endurance=52,German=38,Hauling=32,Informatics=21,RussianLanguage=56,Strength=67,UkrainianLanguage=15 items=Underwear:Black:worn,Socks:Gray:worn,Jeans:Blue:worn,Shirt:Black:worn,Shoes:Black:worn,Sweater:Gray:worn,Jacket:Blue:home,Bottle:Blue:bag,Phone:Gray:bag
|
||||||
person f4.c0 Васильев Денис Федорович female=False roles=student class=class-classroom-01 born=2003-02-01 traits=Neat skills=Agility=50,BelarusianLanguage=6,Biology=39,Communication=27,Endurance=35,Literature=59,Mathematics=36,PhysicalEducation=88,RussianLanguage=47,Strength=21,UkrainianLanguage=13
|
person f4.c0 Васильев Денис Федорович female=False roles=student class=class-classroom-01 born=2003-02-01 traits=Neat skills=Agility=50,BelarusianLanguage=9,Biology=58,Communication=27,Endurance=35,Hauling=25,Literature=52,Mathematics=53,PhysicalEducation=43,RussianLanguage=68,Strength=45,UkrainianLanguage=27 items=Underwear:Gray:worn,Socks:White:worn,Trousers:Black:worn,TShirt:Gray:worn,Shoes:Gray:worn,Sweater:Gray:worn,Jacket:Red:home,PeShirt:Black:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f4.p0 Васильев Фёдор Игоревич female=False roles=parent class=- born=1970-05-21 traits=AbsentMinded skills=Agility=66,BelarusianLanguage=31,Communication=49,Cooking=45,Endurance=44,English=36,Literature=48,Pedagogy=62,RussianLanguage=54,Strength=44
|
person f4.p0 Васильев Фёдор Игоревич female=False roles=parent class=- born=1970-05-21 traits=AbsentMinded skills=Agility=66,Communication=49,Endurance=44,English=25,Geography=47,Hauling=45,Medicine=44,RussianLanguage=45,Strength=47,UkrainianLanguage=31 items=Underwear:Black:worn,Socks:Black:worn,Jeans:Gray:worn,TShirt:LightBlue:worn,Shoes:Gray:worn,Coat:Beige:worn,Hat:Black:worn,Belt:Gray:worn,Phone:White:bag
|
||||||
person f4.p1 Васильева Анастасия Федоровна female=True roles=parent class=- born=1975-01-20 traits=AbsentMinded skills=Agility=45,BelarusianLanguage=22,Communication=70,Endurance=53,English=43,Librarianship=49,Medicine=75,RussianLanguage=49,Strength=73,UkrainianLanguage=13
|
person f4.p1 Васильева Анастасия Федоровна female=True roles=parent class=- born=1975-01-20 traits= skills=Agility=64,BelarusianLanguage=22,Communication=59,Endurance=64,English=43,Hauling=53,Librarianship=49,Medicine=75,RussianLanguage=49,Strength=73,UkrainianLanguage=13 items=Underwear:Gray:worn,Socks:White:worn,Pants:Blue:worn,TShirt:Blue:worn,Shoes:Beige:worn,Sweater:Gray:worn,Hat:Black:worn,Coat:Gray:home,Bottle:White:bag
|
||||||
person f5.c0 Захарова Екатерина Борисовна female=True roles=student class=class-classroom-02 born=2002-07-13 traits=Kind skills=Agility=43,Biology=46,Communication=44,Endurance=43,Literature=38,Mathematics=52,PhysicalEducation=52,RussianLanguage=45,Strength=32
|
person f5.c0 Захарова Екатерина Борисовна female=True roles=student class=class-classroom-02 born=2002-07-13 traits=Kind,Lazy skills=Agility=57,BelarusianLanguage=29,Biology=72,Communication=42,Endurance=39,Hauling=29,Literature=19,Mathematics=37,PhysicalEducation=60,RussianLanguage=28,Strength=54 items=Underwear:Gray:worn,Socks:Black:worn,Dress:Black:worn,WinterBoots:Gray:worn,Sweater:Beige:worn,Hat:Black:worn,Coat:Black:home,PeShirt:Blue:home,PeShorts:Black:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f5.p0 Захаров Борис Николаевич female=False roles=parent class=- born=1980-04-15 traits= skills=Agility=45,Communication=37,Endurance=51,English=44,RussianLanguage=57,Strength=29
|
person f5.p0 Захаров Борис Николаевич female=False roles=parent class=- born=1980-04-15 traits= skills=Agility=45,BelarusianLanguage=29,Communication=37,Cooking=51,Endurance=51,Hauling=32,Pedagogy=36,RussianLanguage=66,Strength=51,UkrainianLanguage=15 items=Underwear:Black:worn,Socks:Gray:worn,Jeans:Blue:worn,Shirt:White:worn,Shoes:Gray:worn,Scarf:Beige:worn,Jacket:Gray:home
|
||||||
person f5.p1 Захарова Вероника Григориевна female=True roles=parent class=- born=1979-06-22 traits= skills=Agility=27,Communication=47,Endurance=76,English=24,RussianLanguage=63,Strength=45,UkrainianLanguage=31
|
person f5.p1 Захарова Вероника Григориевна female=True roles=parent class=- born=1979-06-22 traits= skills=Administration=39,Agility=68,Communication=64,Endurance=40,English=31,Hauling=61,Informatics=35,PhysicalEducation=35,RussianLanguage=55,Strength=65 items=Underwear:Black:worn,Socks:White:worn,Skirt:Beige:worn,Shirt:Blue:worn,WinterBoots:Gray:worn,Sweater:Black:worn,Jacket:Gray:worn,Hat:Beige:worn
|
||||||
person f6.c0 Козловская Юлия Олеговна female=True roles=student class=class-classroom-00 born=2004-08-15 traits= skills=Agility=45,BelarusianLanguage=20,Biology=36,Communication=42,Endurance=61,Literature=49,Mathematics=27,PhysicalEducation=45,RussianLanguage=40,Strength=70
|
person f6.c0 Козловская Юлия Олеговна female=True roles=student class=class-classroom-00 born=2004-08-15 traits= skills=Agility=45,Biology=49,Communication=42,Endurance=61,Hauling=67,Literature=49,Mathematics=54,PhysicalEducation=39,RussianLanguage=23,Strength=58 items=Underwear:Black:worn,Socks:White:worn,Jeans:Black:worn,Shirt:Black:worn,WinterBoots:Black:worn,Sweater:Gray:worn,Coat:Gray:worn,Hat:Blue:worn,Scarf:Black:worn,PeShirt:Gray:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f6.c1 Козловская Светлана Олеговна female=True roles=student class=class-classroom-02 born=2001-12-31 traits=HotTempered,Leader skills=Agility=53,Biology=47,Communication=36,Endurance=40,Literature=59,Mathematics=52,PhysicalEducation=70,RussianLanguage=36,Strength=40
|
person f6.c1 Козловская Светлана Олеговна female=True roles=student class=class-classroom-02 born=2001-12-31 traits=HotTempered,Leader skills=Agility=53,BelarusianLanguage=37,Biology=59,Communication=36,Endurance=40,Hauling=26,Literature=66,Mathematics=34,PhysicalEducation=51,RussianLanguage=53,Strength=47,UkrainianLanguage=10 items=Underwear:White:worn,Socks:Black:worn,Jeans:Gray:worn,Shirt:Black:worn,WinterBoots:Beige:worn,Coat:Black:worn,Hat:Beige:worn,PeShirt:Blue:home,PeShorts:Green:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f6.c2 Козловская Вероника Олеговна female=True roles=student class=class-classroom-00 born=2003-09-29 traits= skills=Agility=17,BelarusianLanguage=17,Biology=38,Communication=36,Endurance=27,Literature=54,Mathematics=10,PhysicalEducation=51,RussianLanguage=16,Strength=29,UkrainianLanguage=40
|
person f6.c2 Козловская Вероника Олеговна female=True roles=student class=class-classroom-00 born=2003-09-29 traits=Diligent skills=Agility=55,Biology=77,Communication=27,Endurance=56,Hauling=46,Literature=56,Mathematics=40,PhysicalEducation=46,RussianLanguage=26,Strength=49,UkrainianLanguage=25 items=Underwear:Gray:worn,Socks:Black:worn,Jeans:Black:worn,TShirt:White:worn,Shoes:White:worn,Coat:Gray:home,PeShirt:Blue:home,PeShorts:Red:home,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f6.p0 Козловский Олег Станиславович female=False roles=parent class=- born=1967-12-18 traits=Kind skills=Agility=42,Biology=44,Communication=82,Endurance=64,Mathematics=33,RussianLanguage=29,Strength=52
|
person f6.p0 Козловский Олег Станиславович female=False roles=parent class=- born=1967-12-18 traits=Kind skills=Agility=42,Communication=82,Endurance=64,Hauling=52,Informatics=53,Literature=33,RussianLanguage=58,Strength=21 items=Underwear:Black:worn,Socks:Black:worn,Pants:Beige:worn,TShirt:White:worn,Shoes:White:worn,Sweater:Gray:worn,Coat:Beige:home,Bottle:Blue:bag
|
||||||
person f6.p1 Козловская Ирина Кирилловна female=True roles=parent class=- born=1963-12-28 traits= skills=Administration=90,Agility=48,BelarusianLanguage=11,Communication=29,Endurance=57,English=48,Librarianship=57,RussianLanguage=48,Strength=61
|
person f6.p1 Козловская Ирина Кирилловна female=True roles=parent class=- born=1963-12-28 traits=AbsentMinded,Lazy skills=Agility=57,BelarusianLanguage=11,Communication=67,Endurance=42,English=48,Hauling=57,RussianLanguage=79,Strength=45 items=Underwear:Gray:worn,Socks:White:worn,Jeans:Gray:worn,TShirt:Gray:worn,WinterBoots:Beige:worn,Coat:Black:worn,Bottle:White:bag
|
||||||
person f7.c0 Андреев Виктор Степанович female=False roles=student class=class-classroom-01 born=2003-07-19 traits=Bully,Leader skills=Agility=20,Biology=38,Communication=31,Endurance=75,Literature=54,Mathematics=40,PhysicalEducation=60,RussianLanguage=8,Strength=45,UkrainianLanguage=7
|
person f7.c0 Андреев Виктор Степанович female=False roles=student class=class-classroom-01 born=2003-07-19 traits=Diligent,Kind skills=Agility=50,BelarusianLanguage=27,Biology=78,Communication=24,Endurance=50,Hauling=73,Literature=51,Mathematics=34,PhysicalEducation=26,RussianLanguage=56,Strength=64,UkrainianLanguage=34 items=Underwear:Gray:worn,Socks:Black:worn,Jeans:Black:worn,Shirt:Black:worn,Shoes:Gray:worn,Belt:Beige:worn,Jacket:Red:home,PeShirt:Blue:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f7.p0 Андреев Степан Андреевич female=False roles=parent class=- born=1973-08-21 traits= skills=Administration=51,Agility=64,BelarusianLanguage=35,Chemistry=42,Communication=76,Endurance=36,Medicine=23,Physics=30,RussianLanguage=67,Strength=46,UkrainianLanguage=27
|
person f7.p0 Андреев Степан Андреевич female=False roles=parent class=- born=1973-08-21 traits= skills=Agility=64,Communication=76,Endurance=36,English=60,Hauling=46,History=47,Literature=57,RussianLanguage=64,Strength=62,UkrainianLanguage=27 items=Underwear:Black:worn,Socks:White:worn,Jeans:Gray:worn,Shirt:Black:worn,Shoes:White:worn,Sweater:Black:worn,Hat:Beige:worn,FurCoat:Gray:home
|
||||||
person f7.p1 Андреева Мария Алексеевна female=True roles=parent class=- born=1977-07-16 traits= skills=Agility=59,Communication=68,Cooking=41,Endurance=49,History=47,Mathematics=54,Medicine=44,RussianLanguage=63,Strength=35,UkrainianLanguage=40
|
person f7.p1 Андреева Мария Алексеевна female=True roles=parent class=- born=1977-07-16 traits=HotTempered skills=Agility=35,BelarusianLanguage=18,Communication=56,Cooking=47,Endurance=45,Hauling=56,Medicine=47,RussianLanguage=58,Strength=64 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Blue:worn,TShirt:Black:worn,Shoes:Gray:worn,Hat:Blue:worn,FurCoat:Beige:home,Bottle:White:bag
|
||||||
person f8.c0 Фролов Евгений Павелович female=False roles=student class=class-classroom-00 born=2003-12-20 traits=Bully skills=Agility=52,Biology=45,Communication=20,Endurance=78,Literature=61,Mathematics=33,PhysicalEducation=64,RussianLanguage=31,Strength=45,UkrainianLanguage=19
|
person f8.c0 Фролов Евгений Павелович female=False roles=student class=class-classroom-00 born=2003-12-20 traits=AbsentMinded,Kind skills=Agility=69,BelarusianLanguage=26,Biology=50,Communication=28,Endurance=29,Hauling=45,Literature=52,Mathematics=31,PhysicalEducation=44,RussianLanguage=43,Strength=31,UkrainianLanguage=24 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Black:worn,Shirt:White:worn,WinterBoots:Beige:worn,Sweater:Gray:worn,FurCoat:Beige:worn,PeShirt:Green:home,PeShorts:Black:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f8.c1 Фролов Станислав Павелович female=False roles=student class=class-classroom-03 born=2000-10-11 traits=Curious skills=Agility=58,BelarusianLanguage=24,Biology=57,Communication=18,Endurance=69,Literature=55,Mathematics=33,PhysicalEducation=48,RussianLanguage=42,Strength=67,UkrainianLanguage=28
|
person f8.c1 Фролов Станислав Павелович female=False roles=student class=class-classroom-03 born=2000-10-11 traits=AbsentMinded,Lazy skills=Agility=57,BelarusianLanguage=20,Biology=56,Communication=57,Endurance=34,Hauling=42,Literature=71,Mathematics=23,PhysicalEducation=25,RussianLanguage=39,Strength=45,UkrainianLanguage=24 items=Underwear:Black:worn,Socks:White:worn,Jeans:Black:worn,TShirt:Black:worn,Shoes:Beige:worn,Jacket:Black:worn,Hat:Black:worn,PeShirt:Red:home,PeShorts:Green:home,Bottle:White:bag,Phone:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f8.p0 Фролов Павел Егорович female=False roles=parent class=- born=1968-06-07 traits=Leader skills=Agility=71,BelarusianLanguage=22,Communication=87,Endurance=39,RussianLanguage=64,Strength=44
|
person f8.p0 Фролов Павел Егорович female=False roles=parent class=- born=1968-06-07 traits=Leader skills=Administration=51,Agility=71,Chemistry=39,Communication=87,Endurance=39,English=42,Hauling=45,Informatics=65,Librarianship=57,RussianLanguage=73,Strength=45,UkrainianLanguage=26 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Gray:worn,TShirt:White:worn,WinterBoots:Black:worn,Sweater:Gray:worn,Coat:Black:home,Phone:Black:bag
|
||||||
person f8.p1 Фролова Виктория Степановна female=True roles=parent class=- born=1963-10-04 traits= skills=Agility=59,BelarusianLanguage=25,Communication=51,Endurance=55,Geography=48,Pedagogy=58,RussianLanguage=25,Strength=63
|
person f8.p1 Фролова Виктория Степановна female=True roles=parent class=- born=1963-10-04 traits=Curious,Leader skills=Agility=57,Chemistry=51,Communication=77,Endurance=45,English=33,Hauling=52,Librarianship=83,RussianLanguage=58,Strength=55 items=Underwear:White:worn,Socks:White:worn,Skirt:Beige:worn,Shirt:Gray:worn,WinterBoots:Black:worn,Coat:Gray:home,Bottle:Green:bag
|
||||||
person f9.c0 Кузьмина Любовь Александровна female=True roles=student class=class-classroom-01 born=2003-06-13 traits=Kind skills=Agility=45,BelarusianLanguage=23,Biology=43,Communication=31,Endurance=32,Literature=46,Mathematics=44,PhysicalEducation=62,RussianLanguage=29,Strength=39,UkrainianLanguage=5
|
person f9.c0 Кузьмина Любовь Александровна female=True roles=student class=class-classroom-01 born=2003-06-13 traits=Kind skills=Agility=45,Biology=47,Communication=31,Endurance=32,Hauling=40,Literature=63,Mathematics=46,PhysicalEducation=48,RussianLanguage=41,Strength=44,UkrainianLanguage=5 items=Underwear:Black:worn,Socks:Gray:worn,Skirt:Beige:worn,Shirt:Blue:worn,WinterBoots:Gray:worn,Sweater:Blue:worn,FurCoat:Beige:worn,PeShirt:Gray:home,PeShorts:Green:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f9.c1 Кузьмин Сергей Александрович female=False roles=student class=class-classroom-03 born=2001-08-20 traits=Curious,Quiet skills=Agility=11,BelarusianLanguage=18,Biology=37,Communication=41,Endurance=59,Literature=59,Mathematics=25,PhysicalEducation=67,RussianLanguage=41,Strength=38
|
person f9.c1 Кузьмин Сергей Александрович female=False roles=student class=class-classroom-03 born=2001-08-20 traits=Curious,Quiet skills=Agility=11,Biology=58,Communication=41,Endurance=59,Hauling=40,Literature=39,Mathematics=31,PhysicalEducation=40,RussianLanguage=51,Strength=52 items=Underwear:Gray:worn,Socks:Black:worn,Trousers:Gray:worn,TShirt:Gray:worn,Shoes:Beige:worn,Sweater:Beige:worn,Hat:Beige:worn,Scarf:Beige:worn,Coat:Gray:home,PeShirt:Gray:home,PeShorts:Blue:home,Bottle:White:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f9.c2 Кузьмина Алина Александровна female=True roles=student class=class-classroom-03 born=2001-01-22 traits= skills=Agility=52,Biology=50,Communication=29,Endurance=53,Literature=38,Mathematics=52,PhysicalEducation=56,RussianLanguage=54,Strength=31
|
person f9.c2 Кузьмина Алина Александровна female=True roles=student class=class-classroom-03 born=2001-01-22 traits= skills=Agility=52,Biology=38,Communication=29,Endurance=53,Hauling=34,Literature=63,Mathematics=31,PhysicalEducation=55,RussianLanguage=42,Strength=63,UkrainianLanguage=12 items=Underwear:White:worn,Socks:Gray:worn,Trousers:Blue:worn,Shirt:Blue:worn,WinterBoots:Gray:worn,Jacket:Gray:worn,Scarf:Gray:worn,PeShirt:Blue:home,PeShorts:Black:home,Bottle:Blue:bag,SchoolBag:-:bag,Textbook:-:bag:PhysicalEducation,Textbook:-:bag:PrimarySchool
|
||||||
person f9.p0 Кузьмин Александр Денисович female=False roles=parent class=- born=1981-12-09 traits= skills=Agility=40,Communication=58,Cooking=58,Endurance=78,Literature=42,Medicine=65,Physics=58,RussianLanguage=68,Strength=42
|
person f9.p0 Кузьмин Александр Денисович female=False roles=parent class=- born=1981-12-09 traits= skills=Agility=40,Chemistry=55,Communication=58,Endurance=78,English=57,Hauling=43,Pedagogy=52,RussianLanguage=67,Strength=63 items=Underwear:White:worn,Socks:White:worn,Jeans:Gray:worn,Shirt:Gray:worn,Shoes:Beige:worn,FurCoat:Beige:worn,Belt:Beige:worn,Bottle:Green:bag
|
||||||
person f9.p1 Кузьмина Анастасия Сергеевна female=True roles=parent class=- born=1977-01-01 traits=AbsentMinded skills=Agility=68,BelarusianLanguage=27,Communication=96,Endurance=46,Librarianship=43,Pedagogy=48,RussianLanguage=61,Strength=40,UkrainianLanguage=21
|
person f9.p1 Кузьмина Анастасия Сергеевна female=True roles=parent class=- born=1977-01-01 traits=Diligent skills=Agility=62,BelarusianLanguage=27,Communication=72,Endurance=92,Hauling=47,Librarianship=43,Pedagogy=48,RussianLanguage=67,Strength=34,UkrainianLanguage=21 items=Underwear:Black:worn,Socks:White:worn,Skirt:Blue:worn,Shirt:Blue:worn,Shoes:Beige:worn,Hat:Black:worn,Belt:Gray:worn,Jacket:Black:home,Bottle:White:bag
|
||||||
|
|||||||
Reference in New Issue
Block a user