Ragnarok Online на Godot + Python, часть 3. Отчитываюсь по списку
В конце прошлого поста я написал, чем займусь дальше. Прошла неделя, пора отчитаться.
Путь после академии закончил. От выпуска до Job 10 теперь можно дойти через Излюд, Пронтеру, Пайон, Гефен и Морок, с посылками для Kafra и аудиенцией у короля. Посылки стали настоящими предметами в сумке. Квестовые вещи случайно выбросить нельзя, проверял.
Ссылки на вещи в чате сделал. Тащишь вещь из инвентаря в строку сообщения, и в чате появляется жёлтое [название]. Щёлкнул по нему и видишь именно этот нож: заточку, карты, опознан или нет. Ссылку собирает сервер из твоей сумки, так что нарисовать себе «+10 с четырьмя картами» не получится.
Патчи похудели. Раньше обновление весило 170–186 МБ, и линуксоиды (я в том числе) ругались. Теперь клиент держит базу и докачивает к ней маленький кусок. Манифест подписан, подменить патч по дороге нельзя.
Доска объявлений появилась. Стоит у Kafra в центре Пронтеры: просьбы горожан и охота на каждый день.
Боссы научились драться. Про них ниже, это была самая большая работа недели.
Лавки и аукцион есть. Аукционистка ждёт у южной Kafra Пронтеры, а лавка Торговца запоминает название и цены.
Обновления больше не выкидывают из игры. Сервер перезапустился, клиент сам переподключился, персонаж стоит где стоял. Без пароля и лобби.
А вот перечитывать настройки сервера без перезапуска я так и не научил. Зато сам перезапуск теперь почти не видно, так что не очень и надо было.
Из восьми пунктов семь. Ниже подробнее и про то, что в список не влезло.
Немного цифр
На сервере 36 аккаунтов, за ними 28 человек: мультиаккаунты у нас не запрещены. Персонажей 46, пик за сутки 7 человек онлайн. Немного, но они бегают по миру, ловят баги и пишут мне о них. Мне это очень нравится.
С первого поста прошло две недели:
версия игры была 0.223, сейчас 0.511, это почти 270 обновлений;
локаций было 100, стало 122;
видов монстров на картах было 160, стало 186;
автотестов было около 3 300, стало около 5 400;
строк кода на Python было 68 тысяч, стало 138 (вместе с сайтом), на GDScript было 75 тысяч, стало 100, на Lua было 18 тысяч, стало 33.
Боссы стали боссами
В первом посте Осирис, Фрионни и Эддга просто стояли на картах и били как обычные мобы. Теперь все монстры пользуются своими навыками. Какой навык, когда, с каким шансом и на кого, берётся из базы rAthena. Над монстром всплывает название навыка, у заклинаний есть полоса каста, и если ударить кастующего, каст можно сбить.
Монстры лечатся, телепортируются, прячутся (Ruwach их находит), ставят ловушки, кидают Meteor Storm и Lord of Vermilion. Оглушают, усыпляют, проклинают, превращают в камень. Есть даже поломка вещей и Full Strip, так что к Repairman теперь ходят по делу.
Боссы зовут свиту. Baphomet приводит Baphomet Jr., Moonlight Flower зовёт Nine Tail, Eddga зовёт Bigfoot. Свита ходит за хозяином, бьёт того же, кого он, и умирает вместе с ним.
Кто нанёс боссу больше всего урона, тот MVP. Ему особый опыт, вещь из MVP-дропа и тот самый эффект с официальным спрайтом и звуком. На месте убитого босса остаётся надгробие со временем смерти, а таймер возрождения не сбрасывается при перезапуске сервера.
Ещё монстры снова превращаются. Fabre окукливается в Pupa, из Pupa вылупляется Creamy, из яиц Thief Bug вылезают жуки.
Вторые профессии
Спрайты и данные всех тринадцати вторых профессий уже в игре. Открыты пока пять:
Охотник. Экзамен в гильдии охотников: собеседование, материалы для стрел и лес с ловушками на время. Умения тоже есть, включая ловушки, сокола и Blitz Beat.
Кузнец. Экзамен, умения и ковка.
Священник. Экзамен с духовной практикой, умения и эффекты.
Ассасин. Гильдия убийц в пустыне Сограт: письменный тест, охота на шесть целей за три минуты, потом пройти мимо мумий и гидр, никого не тронув. Ассасин держит оружие в обеих руках, бьёт катаром, травит ядами и уходит в невидимость. Заодно открыл подземелье Сфинкса, давно просилось.
Волшебник. Экзамен в башне Гефена: тест и арена стихий, где надо пройти комнаты Воды, Земли и Огня. Белая собака Мария рассказывает про гильдию, и в диалоге появляются её картинки, как в RO. Все умения на месте, включая Storm Gust и Ice Wall, которую можно разбить.
Сменить профессию можно с Job 40. Умения первой профессии остаются, а в окне умений появились вкладки «Первая» и «Вторая». Остальные буду открывать по одной, когда каждая будет готова и полностью проверена.
Про рейты
Под прошлым постом больше всего спорили про рейты. Понимаю: сутками стоять на подсолнухах, как в 15 лет, уже никто не может.
Рейты останутся x1. Честно скажу: экономики, которую можно сломать, у нас пока нет, на сервере три десятка человек. Но я примерно представляю, что будет, если поднять рейты до x100.
Первая беда в том, что игру делаю я один. На x100 до 99 уровня добегают за выходные. Открыто пять вторых профессий из тринадцати, и через неделю самые активные всё пройдут, всех боссов убьют и спросят, что дальше. А дальше пусто, и они уйдут. Новые карты и профессии я делаю быстро, но не со скоростью x100.
Вторая беда в дропе. Карты и MVP-вещи, за которые на x1 бьются неделями, на x100 сыплются мешками. Через месяц у всех всё есть, зени горы, торговать незачем, лавки стоят пустые. Так жили многие высокорейтовые серверы: первые две недели онлайн, потом тишина и вайп.
Третья беда в мире. Если уровень берётся за вечер, поля между городами никому не нужны. В пати не собираются, гильдии не нужны, и игра сжимается до «убил босса, ушёл». А мне хочется, чтобы по Мидгарду ходили и встречались.
И последнее. Поднять рейты можно когда угодно. А опустить обратно без скандала и вайпа нельзя, люди уже привыкнут. Поэтому начинаю с x1, а дальше посмотрим по живым игрокам.
Но мне хочется, чтобы за пару часов после работы можно было продвинуться, а не просто постоять у поринга. Поэтому делаю задания:
путь до Job 10 стал в разы короче. Раньше будущему присту или магу приходилось часов восемь колотить порингов и лунатиков. Теперь квесты за полчаса проводят за ручку по всем основным городам, знакомят с миром и местами для новичков и доводят до Job 10. Любители хардкора могут отказаться от квестов и валить Фабре пачками, никто не запрещает;
журнал подсказывает, что делать на экзамене на профессию и в квестах на навыки первых профессий;
на доске объявлений каждый день есть поручения, охота и просьбы горожан.
Гриндить по-прежнему можно, никто не запрещает. Если есть идеи, как сделать игру удобнее для тех, у кого час в день, напишите в комментариях. Мне правда интересно.
Что взял из ваших комментариев
Стайные монстры. Под первым постом бывший разработчик eAthena из команды мобов напомнил про флаги монстров. Режим Assist лежал в базе с самого импорта и ничего не делал. Теперь работает. Hornet сама не нападает, но стоит задеть одну, и она ужалит в ответ, а соседки в 11 клетках, которые это видят, летят к ней всей стаей. Долетели, ужалили, позвали своих. Так себя ведут 24 вида, среди них волки, кондоры, Peco Peco, Thief Bug и Yoyo.
Сначала я перестарался. Монстр звал своих, пока просто бежал за игроком, и за человеком тянулся целый паровоз волков. Прислали баг-репорт. Теперь зовёт только тот, кто бьёт, и не чаще раза в секунду.
Шапки. «Чем больше шапочек, тем лучше» мне написали прямым текстом, пришлось делать. В Гефене Ипоре вырастит на голове гриб за 300 спор, Сет сложит бумажный тюльпан из маски Mr. Smile. В Пайоне Неко Неко сошьёт кошачьи ушки, в Пронтере Нефия завяжет красный бант. Шапки образца 2004 года. Маску Mr. Smile продают в пяти городах.
Кафры. «Не увидел Кафры, не канон!» Вот, все девять 😄
Приложение для телефона
Сделал ZeRO для Android. Играть в нём нельзя, это компаньон к игре. Видно, кто сейчас в игре, есть друзья и личка. История переписки хранится на сервере, уведомления приходят, даже если телефон заблокирован. Есть чат группы и аукцион: можно искать лоты, следить за своими продажами и ждать нужную вещь. Удобно, когда до компьютера не добраться, а другу ответить хочется.
Приложение тоже на Godot, отдельным маленьким проектом. Новая версия сама выкладывается на сайт, а приложение само предлагает обновиться.








Приложение ZeRO для Android: кто в игре, друзья, переписка, чат группы, аукцион, свой персонаж и уведомления
Ошибки бывают и в логике
Под первым постом спрашивали, не задохнётся ли Python. Сервер действительно один раз начал тормозить, но виноват был не язык, а моя ошибка в логике монстров.
Игроки пожаловались, что сообщения в чате приходят с опозданием. Стал искать и нашёл 12 тысяч монстров на картах, где нет ни одного игрока. Они там гуляли. Около 2800 одновременно куда-то шли, сервер заводил им примерно 20 тысяч таймеров в секунду и считал пути в обход стен. Процессор был занят на 70–100 %. Напиши я сервер на Go или C++, получилось бы ровно то же самое: лишнюю работу никакой язык не ускорит.
В RO монстр, рядом с которым не было игроков, просто стоит. Я этого не сделал, а надо было. Исправил: пришёл игрок, и монстры вокруг просыпаются. Таймеров стало около 85 в секунду, нагрузка от монстров упала с 66 % до 2 %.
Заодно сервер научился сам записывать в журнал, на чём он застрял, если мир замер дольше чем на 200 мс. В следующий раз искать будет проще.
Мелочи из оригинала
Камера получила узкий объектив, как в RO. Спрайты по краям экрана больше не заваливаются набок.
Тени под ногами, крупные цифры урона, название заклинания над головой и круг под целью.
Оригинальные эффекты заклинаний Мага.
Скорость ходьбы и порталы как в оригинале.
Почта с вещами и зени, друзья, дуэли по согласию.
Заточка оружия и брони по правилам pre-renewal, очистка руды у кузнецов.
Наёмники.
Монстры чувствуют каст. Начал читать на Isis Fire Bolt, а она уже бежит к тебе, хотя урона ещё не было.
Сквозь стены больше никто не стреляет, ни игроки, ни монстры.
Новые земли: поля Комодо, крепость Сандаруман, Муравейник с MVP Maya, остров маяка Фарос.
Есть и своё, чего в RO не было. За вход каждый день дают подарок. Скины часов-Поринга из прошлого поста теперь собираются в коллекцию на аккаунте, их выдают за коды наград. А ещё можно стать невидимкой для друзей, как в Discord, или включить инкогнито: вместо твоего ника все, кроме друзей и группы, видят «???». Зачем? Да просто так.
Что дальше
Остальные вторые профессии, по одной, когда каждая будет готова и проверена.
Новые города и подземелья.
Гильдии. PvP в игре уже есть, а для войны гильдий сначала нужны сами гильдии. А ещё люди, так что заходите 🙂
Спасибо всем, кто писал под прошлыми постами. И тем, кто вспоминал свою первую гильдию, и тем, кто ругал рейты, Python и dev-версию Godot. Много чего из этого поста появилось из ваших комментариев.
Сайт игры: zeroro.ru
Поринги передают привет. Плюх.






























