Двоє мужиків і жінка без обличчя
У партії на бойовому сервері з-за рогу вийшли двоє мужиків. У стані гри з’явився один запис:
npc_watchers_men descriptor = «двое мужиков из-за угла»
Один персонаж на двох людей. Далі все, що гра вміє робити з персонажем, стало робитися з парою разом: один портрет на двох, одне ставлення до героя, одна шкала довіри. Померти вони теж могли тільки разом.
Жінка без обличчя
Майже одразу прийшов другий звіт, на вигляд зовсім про інше: у свіжій партії в персонажа немає портрета. Жінка на ґанку, герой із нею розмовляє, картинки немає.
Перша підозра — зламалася генерація зображень. Пішли дивитися логи.
А там порожньо. Жодної помилки: запити відповідають як треба, кеш поповнюється, остання картинка намальована кілька хвилин тому.
Порожній лог і виявився відповіддю. Генерація не падала — її ніхто не просив.
Портрет малюється за одним полем, appearance: один-два рядки про обличчя, одяг, прикмети. У жінки на ґанку це поле було порожнім. Немає опису — немає з чого зібрати ключ картинки; немає ключа — нема чого ставити в чергу. Персонаж лишився без обличчя не тому, що рисувальник не впорався, а тому що замовлення ніхто не оформив.
Окремо корисне спостереження: ми спеціально пишемо в лог кожну невдачу генерації. Тому порожній лог тут — це не «нічого не видно», а повноцінний висновок. Якби помилки не записувалися, та сама порожнеча нічого б не означала, і вечір пішов би на пошуки поломки, якої немає.
Що спільного
В інструкції Майстрові написано і те, і інше. Юрбу і «двох» окремим записом заводити не можна. appearance при зустрічі віч-на-віч обов’язковий.
Ні те, ні інше нічим не перевірялося. Про цю хворобу ми вже писали в розборі про коваля: поки правило ніхто не перевіряє на виході, воно лишається побажанням. Повторюватися не будемо — цього разу цікавішим виявилося наступне питання.
Куди повертати відмову
Звичайне місце для таких перевірок у нас — валідатор: він розбирає зміни світу, які запропонував Майстер, і відхиляє неможливі. Туди й просилося: побачив «двох» — відхилив, побачив порожній опис — відхилив.
І це була б помилка гірша за початкову.
Відхилена зміна просто викидається. Текст ходу при цьому вже написаний і вже показаний гравцеві. Отже, жінка на ґанку лишилася б у тексті — і не потрапила б до світу. Майстер продовжив би з нею розмовляти, а гра вважала б, що поруч нікого немає.
Персонаж без картинки — дрібна неприємність. Персонаж, якого бачить гравець і не бачить гра, — це та сама розсинхронізація тексту і стану, з якою ми боремося весь цей час. Міняли б подряпину на перелом.
Тому відмову підняли на рівень вище — в розбір самого ходу. Різниця в тому, хто дізнається про помилку. Відхилення у валідаторі нікому нічого не повідомляє. Помилка в розборі ходу повертається Майстрові разом із поясненням, і він переписує хід цілком — уже з однією людиною замість двох і з описом обличчя.
Правило, яке з цього випливає, просте: відмова не має коштувати дорожче за саму помилку. Перш ніж щось забороняти, варто подивитися, що лишиться на місці забороненого.
Одне слово
Перевірка на «юрбу» дивиться тільки на перше слово опису. Це не економія, а необхідність.
«Ватажок банди» — цілком законний персонаж: одна людина, названа через групу, якою вона верховодить. Він і в наших же прикладах наведений як зразок гарного опису. Перевірка, яка шукає слово «банда» будь-де в рядку, викреслила б його.
Перше слово несе зміст: опис, який починається з «двоє», «юрба», «загін», — про багатьох. Те, що починається з «ватажок», — про одного.
Список слів там короткий і завідомо неповний. Розбирати російську морфологію всерйоз заради цього не варто: пропустити рідкісний випадок не страшно, а от заборонити живого персонажа — страшно.
Що далі
Обидві перевірки вже на бойовому сервері. Що буде далі, ми чесно не знаємо: Майстер може почати заводити по одній людині з групи, як задумано, а може почати сперечатися з перевіркою. Друге теж побачимо — переписані ходи видно в логах.
Заразом перевірили на живому сервері те, через що все це ледь не зламалося інакше: «ватажок банди» так само заводиться без заперечень. Одна людина, названа через свою банду, — законний персонаж, і перевірка зобов’язана його пропускати.
А двоє мужиків з-за рогу так і лишаться в старій партії одним записом. Лагодити минулі збереження ми не стали.