Обложка Техномант: Радонежье | Книга первая

Техномант: Радонежье | Книга первая

Никита Сергеевич

0% прочитано
Стандартный
Никита Сергеевич

Техномант: Радонежье | Книга первая

Введение

Техномант. Книга первая. Радонежье

Попаданец-программист Никита переносится в магический мир, который работает как база данных с багами. Чтобы выжить и спасти деревню от роя стрыг, ему придётся взламывать реальность через консоль, использовать здоровье вместо маны и привыкать к тому, что даже рассвет иногда зависает.

---

Глава 1. Исключение из реальности

Никита ненавидел свою работу. Три года сидеть в подвальном помещении без окон, где вместо вентиляции — вечный запах озона и чужого пота. Сетевая помойка, легаси-код, начальник, который считал, что «дебажить — это для слабаков». Никите было тридцать пять. Ни жены, ни кота, ни нормальной зарплаты. Только стопка энергетиков да старая футболка с надписью «It’s not a bug, it’s a feature».

В тот вечер он менял блок питания на сервере. Простая процедура, сотый раз. Но китайский БП решил сдохнуть красиво — с искрами, с дымом, с мерзким запахом жженой пластмассы.

— Твою ж... — выдохнул Никита.

Мир моргнул.

Без загрузки, без переходов — просто щёлк — и тишина.

---

Он открыл глаза.

Над ним — небо. Настоящее, живое, с крупными звёздами, которые явно не видели смога. Под спиной — колючая трава, пахнущая мятой и тимьяном. Где-то слева чавкало болото.

Никита сел. Резко, слишком резко. Голова закружилась.

Рядом не было ни серверной стойки, ни проводов, ни кружки с остывшим кофе. Только рюкзак из грубой кожи и потрепанная мантия, какие показывают в исторических сериалах.

— Я сплю, — сказал он вслух. — Это стресс. Или угарный газ.

Но по лицу щипал ветер. Холодный, настоящий. Никита опустил взгляд и увидел на левом запястье тяжелый серебряный браслет. В тускло мерцающем камне прыгала надпись:

[ОШИБКА: МИШЕНЬ НЕ ИНИЦИАЛИЗИРОВАН]

Он уставился на текст. Секунду. Другую. А потом внутри, где-то глубоко, вместо паники щёлкнуло что-то знакомое. Привычка системного администратора: видеть ошибку — искать причину.

— Мишень... не инициализирована, — повторил Никита медленно. — Значит, где-то есть инициализация.

Он коснулся камня.

Перед глазами развернулась полупрозрачная таблица:

Системное сообщение

Класс «Инженер (техномант)» не зарегистрирован.

Автоматически присвоен класс: «Бродяга (ур.1)»

Здоровье: 80/80

Мана: 0/0

Особые способности: «Взгляд в код» — не активно.

— Ну привет, Матрица, — тихо сказал Никита и невесело усмехнулся. — В жизни мечтал о нормальном софте, а попал в RPG с открытым исходным кодом.

Он встал. Трава хрустела под ногами. Болотная ряска мерно покачивалась. А вдалеке, шагах в тридцати, из тумана выступила фигура. Человек? Нет. Кости. Человеческий скелет, с ржавым мечом в руке и красными огоньками в пустых глазницах.

Никита замер.

На периферии зрения, поверх картинки, проявились зеленые строки:

<CREATURE TYPE="undead">SKELETON_WARRIOR lvl.5</CREATURE>

Состояние: активен. Цель: ближайший живой объект — ВЫ.

Скелет развернулся. Меч поднялся.

— Чёрт, — выдохнул Никита. — Чёрт-чёрт-чёрт.

Он судорожно нажал на браслете что-то — наугад, как на кнопку «пуск» в панике. Ноль маны. Ноль заклинаний. Но пальцы сами сделали знакомое движение: удерживать, отпустить, два коротких тапа. Рефлекс сисадмина — вызывать консоль.

Браслет пискнул.

[ОШИБКА: НЕТ МАНЫ]

[ПОПЫТКА ВЗЛОМА: использование HP вместо MP]

Здоровье: -15 → 65/80

В груди кольнуло, как от удара током. Но перед Никитой, в воздухе, повисла командная строка. Мигающий зелёный курсор.

Скелет занёс меч. До него оставалось пять метров. Три. Два.

Никита не умел колдовать. Но он умел печатать.

Он выбил в консоли:

creature.setTarget(null)

Мысленно нажал «Enter».

Мир замер на миг.

Скелет остановился. Красные огоньки в глазах мигнули, потухли, зажглись снова — тускло-серыми. Меч опустился. Мертвец развернулся и побрёл обратно в туман, медленно, как старая игрушка с севшим аккумулятором.

Никита выдохнул так, что заложило уши. Пошатнулся. Опустился на колени прямо в траву.

— Я только что... переназначил цель у NPC... — проговорил он сипло. — Это просто база данных. Живая, дышащая, но — база.

Он посмотрел на небо. Там, среди звёзд, пронеслась длинная зелёная строка:

[СИСТЕМНОЕ УВЕДОМЛЕНИЕ: ОБНАРУЖЕНО НЕСАНКЦИОНИРОВАННОЕ ИЗМЕНЕНИЕ ОБЪЕКТОВ. ЗАПРОС АДМИНИСТРАТОРУ.]

— И сейчас меня забанит главный админ, — тихо сказал Никита. — Отлично. Просто отлично.

Он встал, отряхнул мантию и посмотрел на горизонт. Болото чавкало. Ветер шевелил редкие кусты. А где-то там, впереди, наверное, был город. Или локация. Или просто строка кода, ожидающая своего взломщика.

— Ладно, — Никита поправил рюкзак. — Посмотрим, как ты тут устроена, мультивселенная. Уж что-что, а баги я искать умею.

---

Глава 2. Первый патч

Никита шёл уже около часа.

Болото осталось позади, сменившись редколесьем с кривыми берёзами и землёй, которая почему-то хрустела под ногами как свежий снег. Тишина. Ни птиц, ни ветра — только собственное дыхание и редкие капли влаги с листьев.

— Нормальный такой open world, — пробормотал Никита, перешагивая через гнилой пень. — А где звуковой дизайн? Где саундтрек?

Он уже привык к браслету, который всё так же тускло мерцал на запястье. Каждые несколько минут Никита машинально касался камня, вызывая интерфейс. Здоровье медленно восстанавливалось: 72, 74, 76... Мана — по-прежнему ноль.

«Взгляд в код» так и не активировался.

— Видимо, нужен уровень или особые условия, — рассуждал он вслух. — Как скилл в любой ММО. Прокачайся, открой ветку...

Из кустов справа донёсся треск.

Никита мгновенно замер, рука сама потянулась к браслету. Треск повторился. А потом из зарослей вывалился... мальчишка. Лет тринадцати, лохматый, в грязной рубахе и с огромной корзиной грибов за спиной. Увидел Никиту — и заорал таким голосом, будто увидел дракона.

— НЕ УБИВАЙТЕ! Я НИЧЕГО НЕ БРАЛ!

— Тихо-тихо-тихо! — Никита выставил ладони вперёд. — Я не убиваю. Я вообще... по ошибке здесь.

Пацан замер, часто моргая. Глаза — огромные, испуганные, но уже с любопытством.

— По... ошибке? — переспросил он. — А вы не из местных?

— Я из Москвы. Ну, если это тебе о чём-то говорит.

Мальчишка сделал шаг назад, наклонил голову. Помолчал. Потом выдохнул:

— А, пришлый. Ну и напугали же вы, господин хороший. А я думал — упырь болотный.

— Приятно познакомиться, — Никита криво усмехнулся. — Я Никита. А упырем меня ещё никто не называл.

— Я Димка, — пацан уже совсем осмелел. — Да вы не похожи на упыря. У них кожа гнилая и глаза светятся. А у вас... вы просто бледный.

— Спасибо, тёплый комплимент.

Димка огляделся по сторонам, прищурился:

— А вы откуда именно пришли? Через болото? Там же скелеты водятся.

— Водятся. Я одного встретил. — Никита машинально потрогал запястье — здоровье 80, всё ок. — Но он передумал меня убивать.

Пацан уставился на него с новым, почти благоговейным уважением.

— Вы, наверное, маг? Я слыхал, маги могут злых духов отвадить.

Никита замялся. Сказать правду? «Я программист из другого мира и взломал скелет через консоль»? Звучит безумно даже для фэнтези. Он решил придерживаться полуправды:

— Что-то вроде того. Слушай, Димка, а где тут ближайшее жильё? Деревня, город, трактир — что угодно.

— Так Радонежье же рядом, — мальчишка махнул рукой куда-то влево. — Вёрст пять, не больше. Я сам оттуда за грибами ходил. Только... — он замялся, потупился. — Там сейчас неспокойно. Староста велел пришлых не пущать. А вы пришлый.

— А я хороший пришлый, — убедительно сказал Никита. — Я даже заплачу.

Он полез в рюкзак. Внутри оказалось странное ассорти — кусок хлеба, фляга с водой, несколько медных монет с непонятными символами и свёрток с солью. Откуда всё это взялось? Вопросы к системе. Но монеты — это уже деньги.

— Вот, — Никита протянул Димке одну. — Отведи меня к старосте, скажешь, что я мирный путник. А это твоё.

Мальчишка взял монету, повертел, укусил. Кивнул:

— Медяк. Можно. Пошли, господин Никита. Только смотрите — если староста за топор схватится, я не виноватый.

Они двинулись через редколесье. Димка болтал без умолку — про урожай грибов, про соседскую девку Глашу, про то, что в лесу по ночам кто-то воет, уже третью седмицу. Никита слушал вполуха, но одну фразу уловил:

— ...и ещё в Ростове ярмарка открылась, а туда теперь не проехать. Мост через Вёдру сломали.

— Кто сломал?

— Да кто ж его знает. Люди говорят — медведь, а я не верю. Медведь мост не перерубит. Там балки толщиной в руку.

Никита нахмурился. Детали, которые сразу цепляли: сломанный мост, вой по ночам, деревня, боящаяся пришлых. Звучало как начало побочного квеста. Но у него была другая цель — разобраться, как здесь всё устроено, и найти того самого «администратора», который получил его запрос на взлом.

— Дим, а кроме этой вашей Радонежья, есть здесь город побольше?

— Княжий стан, — мальчишка аж оживился. — Там и стражники, и церковь, и торг, и маги даже бывают. Но далеко — полдня пешком, если без обоза.

— Вот туда мне и нужно.

Димка удивлённо взглянул:

— А вы же сказали — к старосте.

— К старосте — чтобы переночевать и понять местные порядки. А дальше — в княжий стан.

Они вышли на опушку. Внизу, в ложбине, дымились крыши. Избы, амбары, длинный частокол с воротами. Радонежье выглядело как типичная средневековая деревня — только вместо телег у ворот стояла... повозка с огромным колёсным кругом, на котором были вырезаны руны. И круг медленно вращался сам по себе.

Никита замер.

— Это что?

— Ветрозащита, — буднично сказал Димка. — От стрыгей и ночниц. А вы разве в своём мире такого не видели?

— У нас, — медленно сказал Никита, глядя на вращающийся рунический круг, — такое показывают только в кино.

Он коснулся браслета. Через мгновение перед глазами появилась зелёная строка:

<OBJECT TYPE="ward">WINDWARD_PROTECTION lvl.3</OBJECT>

Скрипт: runes.rotate(360) [IDLE]

Никита прочитал. Перечитал. И широко, почти безумно улыбнулся.

— Там, в княжьем стане, — сказал он, — есть библиотека?

— А как же, — кивнул Димка. — Князь велел при монастыре собрать книги. Для грамотных.

— Отлично. — Никита сделал шаг в сторону деревни, чувствуя, как внутри разгорается настоящее, почти забытое любопытство. — Потому что мне нужно найти учебник по местному API.

— По чему?

— Неважно. Пошли, Димка. Познакомишь меня со своим старостой. И будем надеяться, что хвататься за топор он будет не сразу.

Они спустились с холма. Солнце клонилось к закату, и тени от изб вытягивались длинными, чёрными полосами. В воздухе запахло дымом и пареной репой. А где-то совсем рядом, в темноте за частоколом, снова раздался протяжный вой.

Никита ускорил шаг.

---

Глава 3. Баг в системе безопасности

— Стоять! — донеслось сверху.

Никита поднял голову. С частокола на него смотрели двое мужиков с рогатинами. Один — рыжий и бородатый, второй — лысый, с огромным шрамом через всю щеку. Оба хмурые, как грозовые тучи.

— Я мирный путник! — крикнул Никита, подняв руки. — Со мной Димка!

— Димка, брысь домой! — рявкнул лысый.

Мальчишка сорвался с места и нырнул в калитку, даже не попрощавшись. Предатель.

— А ты, путник, — рыжий ткнул рогатиной в сторону Никиты, — назови пароль.

— Пароль? — Никита опешил. — Какой пароль?

— А ты откуда пришёл?

— Из Москвы.

Мужики переглянулись.

— Не знаю такой деревни, — сказал лысый. — Это за болотом?

— Дальше. Очень дальше.

— Пароль, говорю, называй. Староста велел: кто не знает пароля — того не пущать.

Никита задумался. Сказать правду «я из другого мира, я тут случайно» — посадят на рогатину. Придумать что-то? Он выпалил первое, что пришло в голову:

— «Форт Боярд».

Мужики снова переглянулись.

— Не подходит, — покачал головой рыжий.

— «Админ пароль 1234»?

— Что-то ты, путник, странные слова говоришь. — Лысый сплюнул вниз. — Колдун, что ль?

— Да какой колдун, — вздохнул Никита, — я программист. Ну, техномант. В общем, пустите, а? Я переночевать, заплачу.

Он выудил из рюкзака медную монету и помахал ей. Рыжий заколебался. Но тут из-за ворот вышел сутулый старик с длинной седой бородой — в тулупе нараспашку и с клюкой в руке. Староста, без сомнения.

— Чего шумите, орлы? — спросил он сипло.

— Пришлый, батя, — доложил лысый. — Пароля не знает, но монету сулит.

Староста окинул Никиту цепким взглядом. Тот выпрямился и постарался выглядеть максимально безобидно.

— С каких краёв, молодец? — спросил старик.

— Из Москвы, — повторил Никита. — Из очень далёкой Москвы. Через болото шёл, скелета встретил, еле ноги унёс.

— Скелета, говоришь? И живой остался?

— Я его... ну... отключил.

Староста прищурился:

— Отключил?

— Переназначил целевую функцию. Ну, в общем, теперь он там без цели бродит, сам не свой.

Пауза. Староста вздохнул и махнул рукой.

— Ладно, проходи. Но без фокусов. У нас тут люди простые, колдовства не любят.

— У меня и нет колдовства, — честно сказал Никита. — У меня администрирование.

Староста крякнул и побрёл внутрь, не оборачиваясь. Никита поспешил за ним.

---

Деревня оказалась даже уютнее, чем казалась сверху. Дома — рубленые, с резными наличниками. Бабы в платках таскают вёдра с водой. Куры роются в пыли. Пахнет хлебом, навозом и мятой.

— Вот тут и переночуешь, — староста ткнул клюкой в покосившуюся баньку на отшибе. — Там чисто, сеновал есть. А утром — проваливай.

— Можно один вопрос? — Никита остановился. — Чего вы так пришлых боитесь? И почему мост сломали?

Староста помрачнел, потеребил бороду.

— Слышал уже, значит. Мост не мы ломали. Его кто-то ночью... того. Перерубил. Как ножом. И воют по ночам. Сначала за околицей, потом всё ближе. А третьего дня у Гришки корову утащили. Прямо со двора.

— Кто утащил?

— Кто ж его знает. Следы — будто человек, но огромный. И пахнет падалью.

Никита поёжился. Вспомнил вой за частоколом.

— А защита ваша руническая? — он кивнул на вращающийся круг у ворот.

— Оборотни не любят её, — кивнул староста. — А это... может, и не оборотень вовсе. Стрыги, говорят, по ночам шалят. Но стрыга мост не перерубит, у неё когти слабые.

— Я понял. — Никита вздохнул. — Ладно, спасибо за ночлег.

Староста ушёл, бормоча под нос что-то про «нахлебников» и «времена нынче не те». Никита залез на сеновал, расстелил мантию, достал хлеб и флягу. Жевать хотелось зверски.

— Типичный RPG, — пробормотал он с набитым ртом. — Первая деревня, первый квест со сломанным мостом и ночными воями. Осталось найти закопанный сундук и убить трёх крыс в подвале.

Он уже почти задремал, когда снаружи раздался протяжный, леденящий душу вой. Совсем близко. Никита подскочил, ударился головой о балку, выругался. Выглянул в щель.

Луна только поднималась, но в лунном свете он успел заметить тень. Огромную, горбатую, бегущую на четырёх лапах — но с человеческими очертаниями. Она остановилась у частокола, принюхалась, и вдруг рванула прямо на ворота.

— Ну здравствуй, — прошептал Никита, хватаясь за браслет. — А говорили, война не начнётся.

Тварь прыгнула. Над воротами вспыхнули руны — защита сработала, отбросив её назад с искрами. Зверь взвыл, но не ушёл. Начал огибать частокол, царапая бревна.

Внизу послышались крики, застучали топоры, кто-то заорал: «СТРЫГА! СТРЫГА У ВОРОТ!»

Никита выскочил из баньки. Перед ним раскинулась деревенская улица, по которой бежали мужики с вилами. У ворот уже собралась толпа. Но тварь была быстрее — она нашла слабое место, старый плетень, перемахнула через него и оказалась внутри.

— ЧТО ЗА... — заорал рыжий стражник, и тут же с криком отлетел в сторону — огромная лапища снесла его с ног.

Никита увидел её вблизи. Существо размером с медведя, но с длинной, почти человеческой мордой, покрытой серой шерстью. Глаза — красные, бешеные. Из пасти свисают слюни.

— Консоль, — выдохнул он, ударив по браслету свою последовательность.

Замигала зелёная строка. Здоровье: 80/80. Мана: 0/0. Способность «Взгляд в код» — всё ещё не активна.

Тварь развернулась к нему. Рыкнула так, что у Никиты заложило уши. Сзади кто-то из крестьян заверещал: «Сожрут господина!»

— Ах ты ж баг неотлаженный, — процедил Никита, лихорадочно соображая. — Цели нет, маны нет... значит, только здоровьем.

Он набрал в консоли:

creature.type = "passive"

Enter.

Браслет пискнул. Система выдала:

[ОШИБКА: НЕДОСТАТОЧНО ПРАВ ДЛЯ ИЗМЕНЕНИЯ ТИПА КЛАССА "BOSS"]

Здоровье: -20 → 60/80

Никита охнул, пошатнулся. Тварь прыгнула. Он едва успел откатиться в сторону, почувствовав, как когти прошли в сантиметре от спины, разорвав мантию. В глазах потемнело.

— Дурацкое неподдающееся legacy-дерьмо, — прохрипел он, поднимаясь на колени. В голову ударила дикая идея.

Он быстро набрал:

creature.setHealth(1)

Нажал Enter. Грудную клетку обожгло — здоровье упало до 40/80. Но перед глазами выскочило:

[ЗАПРОС ПРИНЯТ]

BOSS_STRYGA_HEALTH = 1

Тварь замерла на мгновение. Её бока перестали вздыматься. Шерсть посерела, глаза потускнели. Она сделала шаг, пошатнулась и рухнула наземь, едва дыша.

— ...Чё? — выдохнул кто-то из крестьян.

Никита встал, шатаясь, и подошёл к монстру. Местные мужики смотрели на него с открытыми ртами. Староста перекрестился.

— Не убивай её, — тихо сказал Никита, обращаясь к старосте. — Она больше не опасна. Я ей здоровье на единицу снёс. Это как... ну, временное оглушение.

— Ты, никак, маг? — благоговейно спросил рыжий стражник, потирая ушибленный бок.

— Техномант, — поправил Никита устало. — Разница есть, но вам не понять.

Он повернулся к старосте и улыбнулся самой обаятельной улыбкой, на которую был способен (с капающей из носа кровью и порванной мантией):

— Так о чём я? Ах да. Насчёт переночевать... вы не против, если я задержусь на пару дней? Кажется, у вас тут проблема с неотлаженной системой безопасности. А я, знаете ли, неплохо правлю баги.

Староста молчал долгую секунду. Потом кивнул и сказал лишь одно слово:

— Меду принести?

Никита хрюкнул от неожиданного смеха.

— Принесите. И ещё, если есть... — он замялся, — у вас тут случайно нет чего-то вроде... записной книжки и пера? Мне нужно задокументировать эксплойт.

— Чего?

— Записную книжку, говорю, дай. И свечку. Я тут один интересный глитч нашёл.

Староста крякнул, махнул рукой и ушёл в избу. А Никита опустился прямо на траву, глядя на неподвижное тело стрыги. Браслет на руке тускло мерцал — здоровье медленно восстанавливалось: 42, 44, 45...

— День первый, — сказал он сам себе. — Скелет отключил, мини-босса посадил на единицу хп. Неплохо для бродяги нулевого уровня.

Вдалеке снова завыли — но теперь уже далеко. И Никита вдруг понял, что это воет не одна тварь. Их было много. И они шли к деревне.

— Отлично, — вздохнул он. — Патч вышел с багами. Как всегда.

---

Глава 4. Разведка боем

Никита не спал всю ночь.

После того как он уронил стрыгу единицами здоровья, деревенские перестали смотреть на него как на сумасшедшего. Теперь они косились с уважением и суеверным ужасом. Особенно когда он попросил старосту принести не мёду, а чистую тряпку и сказал, что «надо взять образец шерсти для дебага».

— Вы это… не колдуйте больше, — попросил рыжий стражник, по имени Митяй. — А то нам потом от батюшки достанется.

— Я не колдую, — вздохнул Никита, перевязывая царапину на руке. — Я анализирую.

Вдалеке снова завыли. Теперь уже ближе, с двух сторон.

Староста Макар — кряжистый мужик с мудрыми глазами — собрал сход прямо посреди ночи. Пришли все, кто мог держать топор или вилы. Никита сидел на бревне, чувствуя себя странно: его мнение вдруг стало важным.

— Сказывай, пришлый, — начал Макар. — Что за тварь? Как с ей быть?

— Это не одна тварь, — Никита поднял палец. — Это, судя по звукам, стая. Штук пять-шесть. И они не просто воют — они координируются. Один голос слева, другой справа. Классический фланговый обход.

— По-нашему — окружают, — перевёл Митяй.

— Именно.

Мужики загудели, закрестились. Бабы заголосили. Макар стукнул клюкой о землю:

— Цыц! Ещё не вечер. Пришлый, говори, что делать.

Никита хотел сказать «бежать», но понял, что это не вариант. Деревня была в глуши, к тому же сломанный мост отрезал путь к княжьему стану. Оставалось либо умереть, либо...

— Укрепить ворота, — сказал он. — Собрать всех в одном месте — например, в избе старосты. И факелы. Много факелов.

— А ты? — спросила какая-то баба.

— А я попробую взломать их спавн.

— Чего?

— Понять, откуда они берутся, и вырубить систему, — устало пояснил Никита. — Или хотя бы замедлить.

Староста кивнул, будто речь шла о капусте. Мужики разошлись по местам: кто к воротам, кто к амбару. Никита остался у баньки, глядя на браслет. Здоровье восстановилось до 60. Мана по-прежнему 0. Способность «Взгляд в код» — молчала.

— Всё как в старом проекте, — проворчал он. — Документация отсутствует, API не работает, тимлид не отвечает.

Он решил рискнуть. Открыл консоль и ввел:

map.scan()

Браслет мигнул. Перед глазами развернулась полупрозрачная карта окрестностей — деревня, лес, болото. И пять красных точек, двигающихся к частоколу.

— О, есть что-то вроде радара, — обрадовался Никита. Потом заметил мелкий шрифт внизу: [DEMO VERSION. ОСТАЛОСЬ 2 ИСПОЛЬЗОВАНИЯ].

— Серьёзно? Демо-версия мира? — он едва не заорал. — Где купить полную, скажите на милость?

Но ответа не было.

Первая точка пересекла границу карты — и тут же у частокола раздался треск. Огромная тень перемахнула через забор. В этот раз в деревню ворвались сразу две стрыги.

— Суки! — заорал Митяй, замахиваясь рогатиной.

Началось.

Никита рванул к воротам, набирая на ходу в консоли:

creatureList.find("type", "STRYGA").forEach(c => c.setHealth(1))

Нажал Enter — и мир взорвался болью. Здоровье упало до 20/80. Голова закружилась, в ушах зашумело. Но на долю секунды перед глазами пронеслось: [4 OBJECTS MODIFIED].

Две стрыги, уже вцепившиеся в Митяя и какого-то парня в фартуке, вдруг обмякли и рухнули. Третья, только перелезавшая через забор, зависла в неестественной позе и с глухим стуком свалилась в канаву.

— Есть! — выдохнул Никита, но тут же покачнулся и упал на колени.

— Господин! — Димка, оказывается, никуда не убегал, а стоял рядом с вилами наперевес. — Господин, у вас кровь из носа!

— Побочный эффект, — прохрипел Никита, вытирая лицо рукавом. — Использование HP вместо маны... не рекомендую.

Но четвёртая стрыга — та, что была в лесу и не попала под массовое изменение, — не ушла. Она выскочила с другой стороны, где защита была слабее, и набросилась на старосту. Макар успел отбиться клюкой, но тварь отшвырнула его, как котёнка.

Никита рванул было к нему, но ноги подкосились. Здоровье 20 — он сам был на грани.

— Димка, тащи сюда... того мужика с рогатиной! — крикнул он, пытаясь открыть консоль.

Димка метнулся, а Никита кое-как набрал:

if (distanceTo(creature, "Макар") < 5) creature.attackTarget = "null"

Enter. Удар в грудь — здоровье 15/80. Но стрыга, уже занёсшая лапу над старостой, замерла, помотала башкой и, словно передумав, бросилась прочь, прямо в лес.

— Ушла, — прошептал кто-то.

Тишина. Только стоны раненых и треск факелов.

Никита потерял сознание.

---

Он очнулся на сеновале. Под головой — что-то мягкое, пахнущее травами. Рядом сидел Димка и отгонял мух березовой веткой.

— Живой, — констатировал мальчишка.

— Какой гениальный вывод, — просипел Никита. — Сколько я был в отключке?

— Час, не больше. Староста велел беречь вас как зеницу ока. Вы, господин, спасли деревню.

Никита приподнялся. Всё болело, но браслет показывал 40/80 — восстановление шло. Он посмотрел на свои руки: пальцы дрожали, но консоль всё ещё была доступна.

— Димка, у вас тут есть местный лекарь?

— А как же, бабка Марфа. Она уже приходила, сказала, что вы неживой, потому что у живых так с носа не течёт. Я ей сказал, что вы техномант. Она перекрестилась и ушла.

— Отлично. — Никита вздохнул. — Ладно, мне нужно встать и подумать, как отбить следующую волну.

— А они ещё придут?

— Судя по карте... — он глянул на браслет, использовал последнее сканирование ([DEMO: ОСТАЛОСЬ 1 ИСПОЛЬЗОВАНИЕ]). На карте горело шесть новых красных точек. — Придут. Через полчаса.

Димка побледнел:

— И как вы их остановите?

Никита помолчал. Потом повернулся к парню и сказал совершенно серьёзно:

— Скажи старосте, пусть соберут все мёд, дёготь и пустые бутылки. И ещё — найди мне кусок бересты и уголь. Я попробую написать скрипт.

— Чего?

— Берёсту и уголь, говорю. И не отвлекай.

Димка выбежал. Никита оперся спиной о стену и уставился в потолок.

— Так, — сказал он вслух. — Если это всё — база данных, у каждой твари есть уникальный ID. Я могу перехватить событие спавна... но на это нужна мана, которой нет. Значит, надо копать в сторону багов. Использовать что-то вроде бесконечного цикла, чтобы они зависали.

Он начал быстро писать пальцем в воздухе, вызывая консоль снова и снова. Каждый вызов отжирал по 1 HP, но сейчас было не до диеты.

Через десять минут Никита сгенерировал черновик скрипта на псевдокоде, записал его углём на бересте и вручил Димке:

— Держи. Если я сдохну — передай следующему техноманту, который свалится из Москвы.

— А такие часто падают? — с надеждой спросил Димка.

— Не знаю. Но судя по тому, как этот мир забагован — возможно, чаще, чем хотелось бы.

За околицей завыли. Никита встал, взял рогатину (про запас) и вышел на улицу.

— Последний патч перед релизом, — пробормотал он. — Как обычно, в пятницу вечером.

---

Глава 5. Скрипт на берёсте

Шесть красных точек на карте приближались. Никита стоял у ворот, сжимая в одной руке рогатину, а в другой — бересту с каракулями. Мужики за его спиной шептались, бабы крестились. Дым от факелов смешивался с туманом.

— Слушайте сюда, — сказал Никита громко. — Сейчас они придут. Возможно, все шесть. Мой скрипт рассчитан на массовое отключение, но он сырой. Как любая программа перед дедлайном.

— Чего? — переспросил Митяй.

— Он может сработать не до конца, — перевёл Димка. Все удивлённо посмотрели на пацана. — Я уже привык, — пожал плечами тот.

— Именно, — кивнул Никита. — Поэтому ваша задача — держать строй и не дать им разорвать меня в клочья, пока я буду стучать по клавиатуре. А моя задача — сделать так, чтобы они потеряли цель или упали в спячку. Вопросы?

— А если ты помрёшь? — спросил лысый стражник.

— Тогда бегите в лес и молитесь, чтобы следующая волна пришла не раньше, чем вы доберётесь до княжьего стана.

Бабы завыли, но Макар рявкнул: «Цыц!». И вовремя — из темноты донеслось первое рычание.

Твари вышли одновременно. Шесть серых теней, огромных, горбатых, с горящими глазами. Они не спешили — шли медленно, окружая деревню с трёх сторон. Никита насчитал: три спереди, две слева, одна справа. Умные твари.

— Начинаю, — сказал он и открыл консоль.

run script_from_bark();

Браслет мигнул, и из камня вырвалась тонкая зелёная нить, потянувшаяся к бересте. Листок засветился, по нему побежали буквы.

[ПОПЫТКА ВЫПОЛНЕНИЯ НЕКОМПИЛИРОВАННОГО СКРИПТА]

[ОШИБКА: НЕИЗВЕСТНАЯ ФУНКЦИЯ "SLEEP_ALL_MOBS"]

[ОТКАТ...]

— Вот чёрт, — выдохнул Никита. — Синтаксическая ошибка. Димка, ты уверен, что переписал всё без опечаток?

— Я слово в слово! — обиделся пацан.

Первая стрыга перешла на рысь. Митяй замахнулся рогатиной, но Никита выставил руку:

— Стойте!

Он лихорадочно правил скрипт прямо в консоли, заменяя вызовы:

foreach(creature in radius(50)) { if(creature.type=="STRYGA") { creature.health=1; creature.target=null; } }

Enter. Боль прострелила виски — здоровье упало до 32/80. Но система ответила:

[5 OBJECTS MODIFIED. 1 OBJECT RESISTED.]

Пять тварей рухнули одновременно, как подкошенные. Шестая — та, что справа, — даже не пошатнулась. Она зарычала громче, прыгнула через плетень и кинулась прямо на Никиту. У неё был не такой ID, как у остальных. Может быть, босс? Или просто баг?

— Береги господина! — заорал Димка, и мужики с вилами ринулись наперерез.

Началась свалка. Никита откатился в сторону, изо всех сил пытаясь открыть консоль повторно, но система выдала: [DEMO: ЛИМИТ КОМАНД НА СЕАНС ИСЧЕРПАН. ОЖИДАНИЕ 15 МИНУТ.]

— ЧТО? — заорал Никита. — КАКОЙ ЛИМИТ?

Но ответа не было. Только звуки битвы: рык, звон металла, крики. Митяй с размаху всадил рогатину в бок твари, но та лишь разозлилась и сбросила его, как комара. Лысый стражник получил лапой по голове и отлетел в сторону.

Никита остался один против взбешённого монстра. У него не было маны. Команды кончились. Здоровье — 32. В руках — только рогатина, которую он едва держал.

— Ну, — сказал он, сжимая древко. — Раньше я чинил принтеры с закрытыми глазами. Тоже было весело.

Стрыга прыгнула. Никита инстинктивно выставил рогатину вперёд, и тварь сама насадилась на неё, зарычав от боли. Но не умерла — начала извиваться, пытаясь достать его когтями.

— Помогите! — заорал Никита не своим голосом.

И тут из темноты вылетел Димка с горящей головнёй. Пацан сунул огонь прямо в морду стрыги — та взвизгнула, отпустила рогатину и отшатнулась. В тот же миг подоспел староста Макар с огромным топором и одним ударом отрубил твари лапу.

— Бей её! — крикнул Макар, и мужики навалились всем скопом.

Стрыга, ослабленная, истекающая чёрной жижей, попыталась уползти, но Никита, чувствуя, что силы на исходе, набрал последнюю команду — не через консоль, а через прямой доступ к камню, просто сжав его изо всех сил и прошептав:

— /kill @e[type=stryga,limit=1]

Мир потемнел. Последнее, что он услышал, — всплеск и довольное «Готово» из браслета.

---

Он очнулся в той же баньке, но уже не на сеновале, а на лавке. Рядом сидела бабка Марфа — костлявая, с острым носом и выцветшими глазами — вливала ему в рот какую-то горькую жижу.

— Открой рот, техномант, — командовала она. — Пей. Это от кровотечения.

— Что произошло? — просипел Никита.

— Всё. Тварь сдохла. Мужики закопали за околицей. Ты молодец, но дурак. Нельзя столько сил из себя тянуть, — бабка поджала губы. — У тебя сейчас здоровья, как у новорождённого цыплёнка. Полежи.

Но Никита сел, превозмогая боль. Посмотрел на браслет: 5/80. Он едва жив. Демо-режим? Лимит команд? Это требовало срочного расследования.

— Димка, — позвал он. Пацан тут же вынырнул из-за двери. — Спасибо. Ты меня спас.

— Это вы старосту спасли, — Димка засмущался. — А я просто... огонь сунул.

— Достаточно. Слушай, мне нужно найти способ снять ограничения. Где здесь ближайшая точка с сильной магией? Или место, где можно пополнить... ну, магический резерв?

Димка задумался:

— В княжьем стане есть капище. Там жрецы заряжают амулеты и лечат. Но до него через лес идти, а в лесу волки.

— Волки — не проблема, — усмехнулся Никита. — Проблема — стрыги. Но их, надеюсь, пока нет.

Бабка Марфа крякнула:

— Будут. Ещё как будут. Эта стая — только разведка. Настоящий рой объявится через три дня, когда луна нальётся. Так в старых свитках писано.

— Три дня? — переспросил Никита. — Успею.

Он встал, пошатнулся, опёрся о стену. Здоровье — всего 5, но восстановление шло медленно: плюс 1 каждые десять минут. За три дня он, конечно, восстановится полностью — если доживёт.

— Макар, — обратился он к старосте, который вошёл с кружкой мёда. — Мне нужна лошадь. Или хотя бы осёл.

— Лошади нет, осёл есть, — степенно ответил старик. — Управишься?

— А он кусается?

— Как все.

— Сойдёт, — кивнул Никита. — Завтра на рассвете выезжаю в княжий стан.

— А как же деревня? — спросил Митяй, с перевязанной головой. — Если вы уедете, а они вернутся?

Никита помолчал. Потом достал бересту, на которой ошибался, и начал писать заново, уже с учётом синтаксиса.

— Я оставлю вам «одноразовый скрипт», — сказал он, не поднимая глаз. — Если твари полезут — просто приложите эту бумагу к камню у ворот. Должно сработать. Если нет... ну, тогда бегите.

— Куда бежать-то?

— В княжий стан. За мной. Я там обустрою облачное хранилище и вызову подкрепление.

Мужики переглянулись, но спорить не стали. От Никиты всё равно пахло магией и безумием, а в деревне, как известно, таких не перечат.

---

На рассвете он сидел верхом на осле. Животное упрямо не хотело двигаться, пока Димка не сунул ему под нос морковку.

— Счастливо, господин техномант! — крикнул пацан.

— Не помри там! — добавил Митяй.

Никита поднял руку, прощаясь, и тронул поводья. Лес начинался сразу за околицей. Здоровье уже поднялось до 12. Впереди — княжий стан, жрецы, библиотека и, возможно, нормальный доступ к API.

А где-то в глубине леса снова завыли. Но теперь — далеко. И Никита почему-то подумал, что этот вой — не только угроза, но и предупреждение.

— Первый патч вышел с багами, — сказал он ослу. — Но я научусь их чинить. Когда-нибудь.

Осёл ответил неприличным звуком.

---

Глава 6. Платная подписка

Осёл оказался существом вредным, но выносливым. К полудню Никита одолел половину пути до княжьего стана. Лес вокруг поредел, уступив место полям и редким хуторам. Здоровье поднялось до 30 — медленно, но верно.

— Главное, не встречать больше стрыг, — бормотал Никита, почесывая осла за ухом. — Или встретить, но на своих условиях.

Осёл фыркнул, выражая солидарность.

Впереди показались стены. Не деревянный частокол, а настоящие каменные стены, с башнями и воротами. Над ними реял вымпел с изображением меча и книги. Княжий стан — не город даже, а небольшая крепость с прилегающим посадом.

— Ничего так, — оценил Никита. — Графика высокого разрешения.

У ворот толпился народ. Крестьяне с телегами, торговцы, монахи в чёрных рясах. Стражники в кольчугах проверяли документы. Никита понял, что у него нет никаких «вид на жительство» и даже имени местного. Придётся импровизировать.

— Стоять! — окликнул его стражник с алебардой. — Кто таков? Откуда? Зачем?

— Никита. Из Москвы. По делам магическим.

Стражник сощурился:

— Москва? Это что за княжество?

— Очень далёкое. За болотом. — Никита решил не углубляться. — Мне нужно к жрецам в капище. У меня... проблемы с резервом.

Стражник оглядел его рваную мантию, синяки, осунувшееся лицо и кивнул:

— Проходи. Капище — за торговой площадью, у старой липы. Только без глупостей.

— Я сама глупость, — вздохнул Никита и въехал на осле в город.

---

Княжий стан бурлил жизнью. Лавки, кузницы, корчмы. Пахло жареным мясом, кожей и навозом, но Никита почти не замечал — глаза разбегались от вывесок. «Магическая лавка Герасима», «Настойки от всех хворей», «Кузница Хрум — мечи и плуги». Всё как в дешёвой RPG, только без квестовых значков над головами.

Он наткнулся на капище случайно. Здание из грубого камня, крытое черепицей. У входа дымилась кадильница, а на крыльце сидел молодой парень в белой рясе и читал книгу.

— Здравствуйте, — начал Никита. — Я ищу жреца, который разбирается в... ну, в магических ограничениях.

Парень поднял глаза. У него было бледное лицо, умный взгляд и обгрызенное перо в руке.

— Вы пришли по адресу. Я — Алёша, послушник. Чем могу помочь?

— У меня странный артефакт, — Никита показал браслет. — Он работает в демо-режиме. Ограниченное число команд. Мне нужно снять лимит.

Алёша замер, потом осторожно взял его за руку и повертел браслет.

— Так это же... это же знак Хранителя! — выдохнул он. — Где вы его взяли? Такие только у высших магов.

— Проснулся — на руке висел. Неважно. Ты можешь помочь?

— Я всего лишь послушник, — Алёша замялся. — Но наш настоятель, отец Никон, много знает о чарах. Он сегодня принимает с полудня до заката. Подождите внутри, я доложу.

Никита кивнул, привязал осла к колонне и вошёл в капище. Внутри пахло ладаном и старым деревом. Стены покрыты фресками с изображениями святых и — что его удивило — схемами магических рун. Некоторые руны он уже видел на вращающемся круге в Радонежье.

— Интересно, — пробормотал он. — Это не фэнтези, а какой-то гибрид с инженерией.

Через десять минут вышел настоятель. Сухой старик с пронзительными глазами, в расшитой мантии. Он посмотрел на браслет Никиты — и вдруг побледнел.

— Это... Вы знаете, что это такое? — спросил он голосом, полным трепета.

— Артефакт с демо-версией? — предположил Никита.

— Нет. Это ключ доступа первого уровня. Их выдают только тем, кто пришёл из-за грани. Вы, должно быть, техномант?

— Техномант, но слабый, — кивнул Никита. — У меня нет маны, только здоровье. А любая команда отжирает HP. И лимит — 3-4 за сеанс.

Настоятель Никон задумался.

— Дело в том, что в этом мире магия — не бесплатна. Каждый заклинатель платит энергией — своей или накопленной. Вы, видимо, не прошли инициализацию, поэтому система выдала вам «гостевой доступ». Чтобы получить полные права, нужно пройти обряд подключения.

— Обряд подключения? — переспросил Никита. — Как регистрация на сайте?

— Не кощунствуйте, но да, — усмехнулся настоятель. — Нужно найти камень-накопитель, ввести своё имя в Книгу Судьбы и принять магический код. После этого вы получите нормальный расход маны, а не HP. И лимит снимут.

— Где найти этот камень?

Никон указал на алтарь. Там, в серебряной чаше, лежал небольшой гладкий камень голубоватого оттенка. Он мерцал как старый добрый Wi-Fi роутер.

— Протяните руку с браслетом к камню и произнесите: «Принять условия пользования».

— Серьёзно? — Никита подошёл к алтарю. — И никакого «я согласен» мелкими буквами?

— Условия просты: вы обязуетесь не использовать магию во вред невинным и не пытаться взломать систему выше вашего уровня. Иначе — бан.

— Вечный?

— Навсегда. Вы станете обычным человеком.

Никита задумался на секунду, но выхода не было. С одной стороны — стать нормальным техномантом с маной, с другой — риск. Он вздохнул, приложил браслет к камню и сказал:

— Принимаю условия пользования.

Камень вспыхнул. Браслет завибрировал, а перед глазами развернулось:

[РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ]

Имя: Никита

Родной мир: Москва. Текущий мир: Радонежье

Класс: Техномант (ур.1)

Мана: 50/50

Особые способности: «Взгляд в код» (активируется на 2 уровне)

— Уровень первый, — разочарованно сказал Никита. — И для «Взгляда в код» нужен второй.

— Никто не даёт новичку сразу админку, — спокойно ответил настоятель. — Развивайтесь. Выполняйте задания, защищайте людей, изучайте мир. Тогда и уровни поднимутся.

— У меня нет времени. Через три дня к Радонежью подойдёт рой стрыг. Если я не подниму уровень до второго, деревню сожрут.

Никон нахмурился.

— Стрыги — это проблема. Но в нашем городе есть тренировочный полигон, где вы можете потренироваться в бою и набрать опыт. А ещё — библиотека, где хранятся свитки с дополнительными командами.

— Библиотека! — оживился Никита. — Это мне и нужно.

— Тогда поспешите. Библиотека закрывается на закате, — настоятель указал на дверь. — И возьмите с собой Алёшу. Он проведёт и, если что, подлечит.

Никита кивнул, поблагодарил и вышел. На улице Алёша уже седлал своего коня.

— Вы согласились? — спросил он радостно. — Я так и знал! Вы настоящий техномант из сказаний!

— Из сказаний? — удивился Никита. — Вы что, про нас слышали?

— Легенды гласят, что раз в сто лет приходит техномант из другого мира, чтобы исправить глюки реальности, — глаза Алёши горели. — Предыдущий, говорят, починил гравитацию у Водопада Слёз и перестал зависать рассвет.

— Зависать рассвет? — Никита представил себе утро, которое тормозит как старый компьютер. — Да у вас тут багов — на три патча.

Они направились к библиотеке.

---

Здание библиотеки оказалось двухэтажным, с витражами и дубовой дверью. Внутри пахло пергаментом и пылью. Старый монах-библиотекарь сидел за кафедрой и вязал узлы.

— Нам нужны свитки доступа к API, — сказал Никита, как само собой разумеющееся.

Монах поднял бровь:

— Какого API, сын мой?

— Прикладного программного интерфейса. Ну, как управлять магией через команды.

— А, вот вы о чём, — монах понимающе кивнул. — Есть у нас пара свитков. Но доступ к ним платный.

— Сколько?

— Десять серебряных за свиток.

Никита похлопал себя по карманам. В рюкзаке нашлось всего три медяка. Он вздохнул и повернулся к Алёше:

— У тебя есть деньги?

— Я послушник, — развёл руками тот. — У меня только постная каша и благословение.

— Подписка, — прошептал Никита. — Тут даже свитки — по подписке. Демо-режим сняли, теперь плати.

Он зло посмотрел на браслет. Тот показывал ману 50/50, но без дополнительных команд он был как игрушечный пистолет. Нужно было срочно заработать серебро.

— Есть какие-нибудь простые задания для техноманта? — спросил он у монаха. — Заплатят?

Монах почесал нос:

— У нас тут в подвале завелся баг-скрипт. Заклинание «Свет» перестало гаснуть. Уже три луны горит, мешает спать.

— То есть — баг с бесконечным циклом? — глаза Никиты загорелись. — Это я люблю. Давайте ваш подвал.

Он спустился вниз, и в полумраке действительно заметил тусклый магический шарик, который висел в воздухе и не тух. Никита открыл консоль (теперь она работала на мане, не отжирая HP) и ввел:

spell_light.isPermanent = false

spell_light.duration = 0

Мирно мигнуло [ОК]. Шарик погас.

— Готово, — крикнул Никита, поднимаясь. — Баг пофикшен.

Монах восхищённо всплеснул руками и протянул мешочек с монетами.

— Ваша плата. Десять серебряных. Берите свиток.

Никита схватил свиток «Основы магического API. Версия 2.0». Развернул. Там были перечислены команды: set_mana, get_target, spawn_object, find_by_id... И одна странная команда: override_admin_check.

— А это что? — спросил он.

— Это легаси-функция для древних магов, — сказал монах. — Но лучше не используйте, если не хотите получить бан от Хранителей.

Никита сунул свиток за пазуху, поблагодарил и вышел. У крыльца его уже ждали двое стражников с подозрительными лицами.

— Господин техномант, — сказал один. — Вас желает видеть князь.

— Князь? — удивился Никита. — Зачем?

— Говорят, вы чините магию. А у князя сломался родовой амулет. Заплатит хорошо.

Никита переглянулся с Алёшей. Деньги, опыт, возможно, новый уровень — всё это приближало его к защите Радонежья.

— Ведите, — сказал он. — Но учтите: я дорогой специалист.

Стражники с сомнением посмотрели на его драную мантию, но промолчали. Никита взобрался на осла и поехал к княжескому терему, чувствуя, что приключение только начинается.

---

Глава 7. Легаси-код и княжеский баг

Княжеский терем оказался меньше, чем ожидал Никита. Двухэтажный сруб из тёмного дуба, крыльцо на резных столбах, у входа — два волкодава, которые лениво проводили осла равнодушными взглядами.

— Слазь, — скомандовал стражник. — Князь внутри.

Никита передал поводья Алёше и вошёл. Внутри пахло воском и нагретым металлом. В большой горнице за столом сидел мужчина лет сорока, коренастый, с короткой бородой и усталыми глазами. На шее — кожаный шнурок, а на нём — тусклый медальон без свечения. Князь Вячеслав.

Знакомиться церемонно не стали. Князь махнул рукой на стул напротив и сразу перешёл к делу:

— Говорят, ты техномант. Почини амулет. Третий день не работает, а без него защита княжества падает. Заплачу серебром. Или золотом, если результат будет.

Никита взял медальон. Обычный кусок серебра с руной в центре. Руна не горела, но при прикосновении пальцы ощутили слабую вибрацию. Как будто программа висела в бесконечном цикле.

Он открыл консоль и направил её на амулет:

scan(amulet)

Перед глазами вывалилось:

OBJECT: Родовой амулет князей Радонежских

Состояние: Ошибка при выполнении скрипта "blood_protection"

Причина: Переполнение стека вызовов

Рекомендация: Очистить кеш или перезагрузить объект

— Переполнение стека, — вслух прочитал Никита. — Знакомая боль. Княже, а вы случайно не пробовали его... ну, выключить и включить?

— Чего? — не понял Вячеслав.

— Снять на ночь, положить на стол, утром надеть?

— Пробовал. Толку ноль.

— Понятно. Тогда будем чистить кеш вручную.

Никита сосредоточился. Консоль позволяла редактировать свойства объектов, но для этого нужна была мана. Он рискнул и ввел:

amulet.blood_protection.stack.clear()

На это ушло 15 маны. Браслет пискнул, и амулет на мгновение вспыхнул, но снова потух. Система выдала: [ОШИБКА: НЕДОСТАТОЧНО ПРАВ ДЛЯ ОЧИСТКИ СТЕКА. ТРЕБУЕТСЯ УРОВЕНЬ 2].

— Вот чёрт, — выдохнул Никита. — У меня только первый уровень. Мне нужен второй, но в Радонежье стрыги через три дня, а тут... — Он задумался, потом достал свиток «Основы магического API», который купил у монаха. — Но у меня есть кое-что.

Он развернул свиток и нашёл команду override_admin_check. Описание гласило: «Используется для временного обхода проверки прав в нештатных ситуациях. Может вызвать санкции Хранителей. Применять с осторожностью».

— Санкции Хранителей — это, наверное, бан, — пробормотал Никита. — Но если я не починю амулет, не получу опыт и не подниму уровень. А стрыги сожрут деревню. Выбора нет.

Он глубоко вздохнул и набрал в консоли:

override_admin_check(true)

Браслет нагрелся, полыхнул красным:

[ПРЕДУПРЕЖДЕНИЕ: НЕСАНКЦИОНИРОВАННОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ]

[ВРЕМЕННЫЙ ДОСТУП К УРОВНЮ 2 ПРЕДОСТАВЛЕН ДЛЯ ОДНОЙ КОМАНДЫ]

[СЧЁТЧИК НАРУШЕНИЙ: +1]

Никита быстро ввел очистку стека снова:

amulet.blood_protection.stack.clear()

На этот раз система ответила [ОК], и амулет вспыхнул ровным золотистым светом. Руна на нём загорелась, замерцала, а потом начала нормально пульсировать.

— Готово, — выдохнул Никита.

Он тут же отозвал повышение: override_admin_check(false). Браслет погас. Нарушение осталось в логах — счётчик так и показывал 1, но доступ был отозван.

Князь Вячеслав надел медальон и облегчённо выдохнул. В этот миг перед Никитой выскочило системное сообщение:

[ВЫ ПОЛУЧИЛИ ОПЫТ: 500 XP]

[УРОВЕНЬ ПОВЫШЕН: ТЕХНОМАНТ УР. 1 → УР. 2]

[МАНА: 50/50 → 80/80]

[ОТКРЫТА СПОСОБНОСТЬ: "ВЗГЛЯД В КОД"]

Никита чуть не подпрыгнул от радости. Уровень 2! «Взгляд в код» активирован! Жаль, что счётчик нарушений так и остался 1 — висит в логах, напоминание о взломе. Но сейчас главное — не бан, а победа над стрыгами.

— Спасибо, техномант, — сказал князь. — Проси любую награду.

— Мне нужен доступ к библиотечным свиткам второго уровня и место для тренировок. И желательно... не могли бы вы организовать мне встречу с местным специалистом по магической безопасности? У меня тут временный доступ к админке, Хранители могут быть недовольны.

Князь нахмурился:

— С Хранителями шутки плохи. У нас в городе есть дозорный маг, Ферапонт. Он бывший смотритель системы. Живёт отшельником у старой мельницы. Можешь наведаться к нему.

— Спасибо, князь. А сейчас разрешите удалиться — нужно испытать новую способность.

Никита вышел на крыльцо, где его ждал Алёша с ослом.

— Ну что, — спросил послушник. — Получилось?

— Не только! — Никита поднял руку с браслетом. — Я теперь второго уровня. И у меня есть «Взгляд в код».

Он активировал способность. Мир вокруг изменился: над каждым объектом появились полупрозрачные надписи. Над ослом — CREATURE: donkey | HP: 45 | MANA: 0 | TEMPER: hostile (99%). Над Алёшей — NPC: Alesha (cleric lvl.1) | QUESTS: none. Над стражниками — GUARD: generic lvl.3 | AGGRESSION: 10%.

— Это как отладчик, только в реальной жизни, — прошептал Никита, поворачивая голову. — Круто.

— Вы чего застыли? — спросил Алёша.

— Смотрю на ваши теги, — Никита улыбнулся. — Не обращай внимания. Поехали к старой мельнице, нужно найти Ферапонта.

---

Мельница находилась на окраине города, у реки. Колесо не вращалось, а на пороге сидел тощий мужик в драном плаще и ковырял палкой землю. Увидев повозку, он поднял голову. Глаза — острые, внимательные.

— Ты тот техномант, который повысил себе уровень через override_admin_check? — спросил он без приветствия. — Система зафиксировала нарушение. Я пришёл посмотреть, кто такой умный.

— Ферапонт? — догадался Никита.

— Он самый. Дозорный маг, в отставке. И если ты не хочешь, чтобы Хранители забанили тебя навсегда, ты сейчас же сбросишь этот флаг и будешь пользоваться только легальными командами.

— Уже сбросил, — сказал Никита. — Счётчик нарушений остался на единице, но доступ отозван.

— Молодец, — буркнул Ферапонт. — Теперь слушай. Чтобы защитить Радонежье от роя стрыг, тебе нужно не только видеть код, но и уметь его править в реальном времени. Я покажу тебе пару трюков. У тебя есть два дня. На третий — ты должен вернуться в деревню и встретить врага.

— Два дня? — переспросил Никита. — А успею?

— Если ты такой же умный, как кажешься, успеешь. Пошли на полигон.

Они двинулись к тренировочной площадке за городом. Никита чувствовал, что время сжимается, но впервые за последние дни он был готов. «Взгляд в код», второй уровень, немного нормальной маны — теперь он мог не просто выживать, а сражаться.

— Ферапонт, — сказал он по дороге. — А стрыги... это баг или фича?

— И то, и другое, — ответил старый маг. — Баг, потому что их спавн не должен быть таким частым. И фича, потому что они — часть проверки системы на прочность. Если Радонежье выстоит, то получит бонус к защите.

— А если нет?

— Тогда система перезагрузит этот кусок карты. Вместе с деревней.

Никита сжал кулаки.

— Значит, не дадим системе перезагрузиться.

---

Глава 8. Рой и последний патч

Два дня тренировок пролетели как один миг. Ферапонт гонял Никиту по полигону, заставляя использовать «Взгляд в код» в бою. К вечеру второго дня Никита научился:

· видеть слабые места монстров (точки с минимальной защитой);

· изменять атрибуты объектов в реальном времени, тратя ману, а не здоровье;

· создавать временные «ловушки» — участки кода, где враги зависали на несколько секунд.

— Неплохо для новичка, — буркнул Ферапонт на прощание. — Но помни: легальные команды не отключат весь рой. Тебе придётся драться. Используй голову. И не геройствуй.

— Я программист, а не герой, — усмехнулся Никита. — Моё оружие — клавиатура.

Он оседлал осла (который за два дня немного привык к нему и теперь кусался только по утрам) и отправился в Радонежье. Алёша вызвался сопровождать — для подстраховки и лечения.

---

Деревня встретила их тишиной. Обычно шумная, с кудахтаньем кур и перебранками баб, теперь она замерла. На стенах дежурили мужики с рогатинами и вилами. Увидев Никиту, Митяй облегчённо вздохнул:

— Живой! А мы думали, ты сбежал.

— Сбежал? Я патч вам нёс. — Никита спешился. — Где староста?

Макар вышел из избы, хмурый, но спокойный.

— К ночи будут, — сказал он. — Воют уже с утра, всё ближе.

— Знаю. Я их вижу.

Никита активировал «Взгляд в код». Над лесом, на расстоянии километра, горели десятки красных точек. Не пять и не шесть — по крайней мере пятнадцать стрыг. А в центре роя — одна огромная метка, пульсирующая багровым. Матка.

— Их много, — сказал он. — Но я знаю, как их замедлить.

Он достал свитки, купленные у монаха, и начал наносить руны прямо на частокол. Алёша помогал — подавал мел, чернила, травы по указанию Ферапонта. К вечеру вокруг деревни образовался контур из магических символов.

— Это ловушка, — объяснил Никита мужикам. — Как только стрыги коснутся частокола, сработает скрипт задержки. Они зависнут на несколько секунд. Ваше дело — бить их вилами, пока они не двигаются.

— А если не зависнут? — спросил Митяй.

— Тогда будет весело.

---

Ночь опустилась быстро. Луна вышла из-за туч, огромная, жёлтая — «налилась», как говорила бабка Марфа. И сразу из леса донёсся вой. Не один, а многоголосый, как хор неудачников на прослушивании.

— Готовьтесь, — сказал Никита.

Первая стрыга вылетела из кустов, за ней вторая, пятая, десятая… Они не шли — они неслись, перепрыгивая друг через друга. Рычание смешалось в сплошной гул. Никита насчитал восемнадцать тварей плюс матку, которая оставалась в лесу, координируя атаку.

— Твою ж... — выдохнул он. — Скрипт, запуск!

Он ударил по браслету, активируя руны на частоколе. Вспыхнули, засветились все символы разом, и по земле побежали зелёные линии, связывая их в сеть.

[СКРИПТ "STASIS_FIELD" АКТИВИРОВАН]

[ОХВАТ: 20 МЕТРОВ]

[ВРЕМЯ ДЕЙСТВИЯ: 10 СЕКУНД]

Первая волна стрыг влетела в поле — и замерла. Как остановленное видео. Мужики не растерялись: вилы, топоры, рогатины — за десять секунд они уложили пять тварей. Но за ними лезли новые.

— Не хватит, — крикнул Митяй. — Их слишком много!

Никита лихорадочно вбивал команды:

foreach(creature in radius(20)) { if(creature.type=="STRYGA") creature.speed = 0.3 }

Мана упала с 80 до 40. Скорость стрыг снизилась — они стали медленнее, но не остановились. Мужики рубились уже в ближнем бою. Алёша раздавал благословения и лечил раненых. Двое упали, их утащили в избу.

Вдруг матка вышла из леса. Огромная, в два раза больше обычной стрыги, с длинной шеей и светящимися красными глазами. Она взревела, и по полю прошла ударная волна — часть рун на частоколе погасла.

[ПРЕДУПРЕЖДЕНИЕ: ЩИТ ПОВРЕЖДЁН]

[СКРИПТ "STASIS_FIELD" НЕСТАБИЛЕН]

— Матка ломает защиту! — заорал Никита. — Я должен её отключить!

Он сконцентрировался, навёл «Взгляд в код» на матку. Перед глазами развернулись строки:

CREATURE: STRYGA_MATRIARCH (BOSS lvl.8)

HP: 500 | MANA: 200

WEAK POINT: neck (armor 40%)

RESISTANCES: physical 60%, magic 20%

SCRIPTS: spawn_stryga (cooldown 10s), terror_aura (active)

— Шея — слабое место, но броня 40%, — проговорил Никита. — И она каждые десять секунд спавнит новых.

Он посмотрел на свой уровень — всего 2. Маны осталось 30. В руках — только консоль и пара одноразовых скриптов на бересте.

— Ладно, — сказал он. — Один баг всё решит.

Он набрал:

override_admin_check(true)

Браслет засиял красным, высветив: [СЧЁТЧИК НАРУШЕНИЙ: 2]. Но сейчас было не до санкций. Никита получил временные права до 3 уровня и ввёл:

creature_stryga_matriarch.scripts.spawn_stryga.cooldown = 999999

creature_stryga_matriarch.terror_aura.active = false

Мана упала до 5. Матка взревела, но новых тварей не появилось. Её аура страха исчезла — мужики перестали пятиться. Но сама она всё ещё была жива и зла.

— Теперь бейте её по шее! — крикнул Никита, отключая повышение (override_admin_check(false)). Счётчик нарушений остался 2.

Митяй и Макар бросились на матку. Та отбивалась лапами, но без поддержки стаи и без парализующей ауры она стала уязвимее. Митяй всадил рогатину в шею. Макар рубанул топором. Матка взвыла, пошатнулась.

Никита, шатаясь от усталости, набрал последнюю команду на остатках маны:

creature_stryga_matriarch.health = 1

Enter. Мана упала до 0. Матка замерла, сделала один шаг и рухнула.

В тот же миг все оставшиеся стрыги, потеряв связь с матриархом, разбежались в лес.

Тишина.

Никита опустился на колени. Алёша подбежал, положил руку на плечо.

— Живы… — прошептал послушник.

— Живы, — ответил Никита. — И баг пофикшен.

Он посмотрел на браслет. Системное сообщение гласило:

[ПОБЕДА НАД МАТКОЙ СТРЫГ. ПОЛУЧЕНО 2000 XP]

[УРОВЕНЬ ПОВЫШЕН: ТЕХНОМАНТ УР. 2 → УР. 3]

[МАНА: 0/100 → 100/100]

[СЧЁТЧИК НАРУШЕНИЙ: 2 (ПРЕДУПРЕЖДЕНИЕ: ПРИ 3 НАРУШЕНИЯХ БАН)]

[НОВЫЙ СКИЛЛ: "РЕДАКТОР КОДА" — ПОЗВОЛЯЕТ ПРАВИТЬ КОД ОБЪЕКТОВ БЕЗ КОНСОЛИ]

— Третий уровень, — выдохнул Никита. — И счётчик нарушений — два. Ещё одна ошибка — и бан.

Он устало улыбнулся. Деревенские уже обнимались, бабы плакали от радости. Макар хлопнул его по плечу:

— Спасибо, техномант. Век не забудем.

— Обращайтесь, — Никита поднялся, держась за частокол. — Но в следующий раз вызывайте специалиста по лицензионной магии. У меня счётчик на пределе.

---

На рассвете Никита сидел на крыльце старосты и пил мёд. Алёша рядом перевязывал ему царапины. Осёл тёрся мордой о плечо — видимо, признал.

— Что дальше? — спросил послушник.

— В княжий стан. Нужно найти способ сбросить счётчик нарушений, — сказал Никита. — И разобраться, кто такая «система» и почему она работает на демо-режиме.

— А потом?

— А потом, — Никита посмотрел на горизонт, где вставало солнце, — может, найду дорогу домой. В Москву. Но сначала — патч номер два.

Осёл фыркнул, соглашаясь.

Спасибо за чтение

Вернуться к книге