Перевод обновления Darkrasp'a от 20 марта 2017 года.
Добрый вечер!
Поздравляю всех северян с началом весны, а жителей Северной Америки – с днем мороженого. А теперь по-быстрому введу вас в курс дела.
Мы продолжаем усиленно работать, хотя и в несколько замедленном темпе из-за чрезвычайной занятости делами в реале. Asura сильно загружен на работе, так что почти каждый день работает сверхурочно. У меня всего пару дней назад умер родственник, так что я занят необходимыми распоряжениями по этому поводу. Однако мы по-прежнему посвящаем большую часть оставшегося свободного времени на разработку и продолжаем двигаться вперед.
Хочу еще раз напомнить, что мы работаем над TBC совместно с классикой. У такой разработки есть несколько преимуществ. Например, оказалось, что для TBC придется произвести ряд изменений в нашем скриптовом движке, системе лута и т. д. Потом, когда мы перенесем сделанные изменения в ядро классики, некоторые аспекты игры на классическом сервере будут более приближены к оригинальным и обработка их будет более эффективной. Чуть позже, когда игровой мир будет приведен в относительный порядок после произведенных изменений в базе данных, Asura сделает несколько тестовых скриптов перед тем как вручить Lua API нашим волонтерам-скриптерам. А еще Asura придумал, как можно улучшить скриптовый SQL-движок, используя условия (Conditions).
Вот об этом стоит рассказать подробнее. Для начала, наше ядро поддерживает создание скриптов на трех разных языках; у такого подхода есть свои преимущества и недостатки.
Ядро написано на С++. Мы также можем писать скрипты на С++. Преимущество: такие скрипты могут непосредственно использовать огромное количество различных гибких и мощных функций ядра, что позволяет сделать в игре практически все, что угодно. Однако тем, кто пишет на С++, придется дать доступ к ядру, чтобы протестировать код (его нужно будет скомпилировать с новыми скриптами), а мы предпочитаем всем подряд такого доступа не давать. Поэтому у нас довольно мало скриптов, написанных на С++.
Lua скрипты по функционалу чуть похуже. Каждая Lua-команда как бы «привязана» к существующей в ядре функции С++, так что можно использовать эту функцию без прямого доступа к ядру. Конечно, я сильно упрощаю; надеюсь, опытные программисты простят меня за такую вольность, однако я пишу для всех, в том числе для далеких от программирования людей. Волонтеры-скриптеры загружают свои тестовые скрипты через FTP, а затем игровой мир достаточно просто перезагрузить, никакой перекомпиляции не требуется. Нам удалось развить свой Lua-движок до такой степени, что по уровню мощности он практически равен скриптингу на С++, и в любой момент мы можем еще более расширить его функционал.
SQL – язык базы данных. В этом случае вы просто вводите данные в таблицу, а уже ядро само разберется, что с этим делать. Преимущество перед Lua в том, что SQL очень прост и эффективен, но, увы, далеко не так функционален (пока что). Мы первоначально применяли SQL только для заклинаний/умений существ, используя при этом старую систему Ai Agents, унаследованную от Ascent. Как это работает: вы пишете в строке таблицы ID существа, ID заклинания, добавляете еще кое-какие параметры вроде максимального расстояния, времени отката заклинания/умения и проч., а уже ядро обработает все эти данные. Позже мы расширили возможности SQL вплоть до обработки событий. В первую очередь сюда входят случаи, когда использование заклинания/умения или эмоции существом зависит от простого единичного условия вроде определенного процента здоровья, вступления в бой или убийства игрока.
После серии усовершенствований SQL-событие может включать в себя не только использование существом умения/заклинания или эмоции, но и более сложные вещи вроде передвижения, смены фаз, различных звуков, изменения самой модели, изменения фракции и многое другое - всего 26 различных действий, которые могут вызываться 24 различными условиями. Asura придумал, как сделать запуск события зависимыми от определенных условий.
Например, одно из событий – AI_EVENT_COMBAT_DAMAGE – активизируется, если существо получает любой урон во время битвы. После ввода условий теперь мы можем поставить активацию события в зависимости от того, заклинание какой школы нанесло урон, или от использования определенного умения (например, оглушения).
Причина произведенных усовершенствований – подготовительная работа на Полуострове адского пламени, где есть такой моб, демон Бездны, который меняет фазу в зависимости от того, заклинание какой школы нанесло ему урон первым. Например, если игрок произносит заклинание школы огня, демон Бездны приобретает большую устойчивость к огню и начинает швыряться огненными заклинаниями. Обычно игроки в битве с ним использовали следующую стратегию: били его жезлом или заклинанием любой школы, кроме наиболее часто используемой, и потом уже наносили урон, используя последнюю. В процессе мы поняли, что на тот момент у нас нет способов реализовать такое поведение, поэтому Asura подумал и нашел решение через пару дней. Как я уже говорил, у нас есть возможность сделать систему событий более гибкой, и вот один из примеров.
А перенос такой системы на классику позволит нам корректно обрабатывать поведение мобов типа Изменчивой эктоплазмы, которые обладают сходными с демоном Бездны свойствами. Система условий для проверки энергии, аур и прочего позволит нам комплексно обрабатывать более сложные события вроде поведения Обсидиановых губителей. Когда система будет окончательно готова, мы попросим нескольких из наших скриптеров-добровольцев протестировать ее и высказать свое мнение. А потом уже можно будет привлечь и остальных.
Система репутаций/фракций уже практически готова – по сравнению со старой она гораздо удобнее, более эффективна и лучше сочетается с системой обработки заданий и событий. Еще мы сделали много всякого, но больше по мелочам, поэтому не буду грузить вас подробностями. В общем, все последнее время мы занимались подготовкой к началу скриптинга и наконец-то готовы перейти к этой стадии.
Когда разработчики трудились над основными изменениями и внедряли их на бета-сервер, многие тестеры помогали нам с расчетами механики игры, нахождением формул и работой по сбору данных. Особенно я хотел бы поблагодарить Nogar’a, потому что он взял на себя самую нудную часть сбора данных по добыче в TBC.
Хватит пока что о программировании. Вкратце: сейчас бета-сервер оффлайн, а как его включат, мы запустим на него новых бета-тестеров (их уже выбрали). С радостью приветствую Chickengrease, Cornholi, Cragus, Cruzix, Ghostly, Indi, Nogar, Soulson, Soyoen, sQweegle, Roadblock, Wolfrig, Yavanne. Вроде бы всех перечислил, если кого-то не назвал, прошу прощения.
Также рад объявить, что теперь Outstanding становится коммьюнити-менеджером. Он оказал нам неоценимую помощь, подсказывая, о чем следует говорить с сообществом и когда это делать, и поработал своего рода тестовым инструментом для оценки реакции игроков на наши предложения. Мы с удовольствием официально назначаем его совестью сервера :)
Пока что на сегодня все, следующее обновление будет 3 апреля, в понедельник. Как обычно, задавайте вопросы, оставляйте комментарии. Скоро увидимся, и спасибо за проявленный к Crestfall’y интерес.
http://forums.crestfall-gaming.com/inde ... -20032017/