Информационный выпуск 5
Доброго вечера, пидоры.
Немного информации:
- Для тех, кто видит этот пост первым и не видел прошлые. Я занят созданием сервера Lineage 2 для реакторчан. Работы ведутся на своей версии эмулятора, написание которой велось в течении последних лет. Сервер будет ориентирован на аудиторию реактора, без внешней рекламы. Быть в курсе можно, подписавшись на тег CornShard.
Если вы не хотите видеть эти посты в дальнейшем, просто заблокируйте тег. Если наоборот хотите получать все новости, то подпишитесь на него.
- Для тех кто в "теме". Хочу поделиться некоторыми новостями проекта.
Короче работы идут полным ходом. Я просыпаюсь примерно в 18-19 часов, и кодю примерно до 12-13 следующего дня. Немного провалился в дебри гео движка. Его полная переработка отняла довольно большой кусок времени. Явно больший, чем я хотел бы.
Новости собственно:
[Технические]:
1) Код обновлен до синтаксиса Java 16 и оптимизирован для работы с Eclipse OpenJ9.
2) Пересмотрена логика хранения геоданных в памяти. Ушел от объектов-блоков, в сырые байт-массивы. Из примерно 13.000.000 геоблоков(byte[]), только около 3.500.000 уникальны, остальные 9.500.000 их тем или иным образом дублируют. Поэтому, после загрузки геоданных в память, можно оптимизировать хранение данных в памяти весьма эффективно. Вместе с переходом на массивы, оптимизация уникальных геоблоков дала сокращение потребления оперативной памяти, примерно на 600 мб. + теперь GC OpenJ9 не сходит с ума). Со всеми описанными выше оптимизациями, сборка стабильна на на холостом ходу(в мире 1 игрок), потребляя около 1.85-1.9 гб ОЗУ.
3) Сетевой движок переведен на полностью асинхронную модель работы. Теперь игровые клиенты синхронизируются только с сервером, но не между собой. В теории, это должно помочь в критических ситуациях, при большом онлайне(Ахахахахахах) в одном месте.
[Геймплейные]:
1) Я наконец-то разобрал и реализовал итемы. Их работа на 90% корректна. Вкупе с небольшим реверсом формул, заработали такие прикольные вещи(которые между прочим, почти нигде на явах не работают xD), как "процентное распределение урона между мечами-дуалами", корректные углы атаки для пик, условия срабатывания встроенных скиллов и т.п. Итемы теперь также имееют дохерища параметров, каждый из которых задействован в формулах тем или иным образом.
2) Я полностью переписал логику работы всех петов, суммонов, витаминных петов, ездовых для корректной офлайк работы. Написано куча ИИ(зеленые на скрине). Все работает полностью корректно.
3) Наконец-то я закончил реализацию ВСЕХ низкоуровневых ИИ для мобов.
Т.е базовые ИИ ПТСа, которые отвечают за глобальную логику персонально каждого моба успешно адаптированы и работают.
Что это значит для конечного игрока? Мобы стали значительно умнее и ведут себя намного интереснее. Они убегают к за помощью к сокланам, выкрикивают правильные фразы, даже спойлят игроков)
И таких примеров очень много...
Список низкоуровневых ИИ, которые были успешно реализованы:
https://pastebin.com/U540Gr2a
По срокам - есть понимание, что я чутка не успеваю. Прошу отнестись с пониманием) Дата релиза пока откладывается на неопределенный срок. Возможно, в ближайшие пару недель сделаю тестовый сервер, на котором можно будет какие-то вещи зайти, в живую пощупать. Нужно доделать базовые механики и наверное, можно будет что-то запускать.
В ближайших планах:
- Переписать полностью систему скилов. Это пиздец как много работы и я боюсь, что могу там завязнуть, но результат того стоит, это точно...
Всех целую в десны. Ваша КУКУРУЗА.
Подробнее
О ¿я e_prem¡um_manager.java im e_premium_npc.java im musicbox_npc.java □ im pailaka_pet_ai.java im parade_npc.java □ im pet_active_grow.java □ im pet_cute_baby_use_2skill.java im pet_manager.java □ im pet_passive_grow.java □ im pet_physicalattack.java □ im pet_premium_attacker.java □ im pet_premium_buffer.java □ im pet_premium_criminal.java □ im pet_premium_hybrid.java im pet_use_one_skill.java □ im pet_warrior_use_2skill.java □ im pet_wizard_use_2skill.java □ im summon_bomb.java □ im summon_criminal.java □ im summon_heal.java □ im summon_magical_buffer_use_3skMl.java □ im summon_magical_tanker_use_3skNl.java □ im summon_magicalattack.java □ im summon_magicalattack2.java □ im summon_mutM_skNI_use.java □ n summon_physical_attacker_use_3skill.java □ im summon_physical_buffer_use_3skill.java □ im summon_physicalattack.java □ im summon_siege_cannon.java □ im summon_siege_golem.java □ im summon_siege_tank.java □ im summon_use_skills.java □ im warrior_pet_for_pc.java
О ¿я e_prem¡um_manager.java im e_premium_npc.java im musicbox_npc.java □ im pailaka_pet_ai.java im parade_npc.java □ im pet_active_grow.java □ im pet_cute_baby_use_2skill.java im pet_manager.java □ im pet_passive_grow.java □ im pet_physicalattack.java □ im pet_premium_attacker.java □ im pet_premium_buffer.java □ im pet_premium_criminal.java □ im pet_premium_hybrid.java im pet_use_one_skill.java □ im pet_warrior_use_2skill.java □ im pet_wizard_use_2skill.java □ im summon_bomb.java □ im summon_criminal.java □ im summon_heal.java □ im summon_magical_buffer_use_3skMl.java □ im summon_magical_tanker_use_3skNl.java □ im summon_magicalattack.java □ im summon_magicalattack2.java □ im summon_mutM_skNI_use.java □ n summon_physical_attacker_use_3skill.java □ im summon_physical_buffer_use_3skill.java □ im summon_physicalattack.java □ im summon_siege_cannon.java □ im summon_siege_golem.java □ im summon_siege_tank.java □ im summon_use_skills.java □ im warrior_pet_for_pc.java
JoyReactor Games,Игры,CornShard,Lineage 2,Lineage,большие гифки,большая гифка,гиф анимация,гифки - ПРИКОЛЬНЫЕ gif анимашки
Ссылка: http://joyreactor.cc/post/4881021
На оригинальном сервере очень разветвленный механизм наследования ИИ.
Если на типичной "яве" образца 2018-2020 года, около пятидесяти узкоспециализированных ИИ, которые описывают логику работы популярных мобов в популярных локациях(ДВ, ЛОА, МОС, ЙОП, СОД, СОА и т.п), то для описания логики поведения подавляющего большинства менее популярных мобов используются в лучшем случае с пяток типовых ИИ(Fighter, Wizard, Archer, Priest), которые отличаются между собой некоторыми тонкостями и алгоритмами выборки скилов.
На оригинальном сервере, только базовых ИИ более 600 штук, а еще примерно около 1500 наследников, которые их расширяют тем или иным образом. Также, в отличии от большинства эмуляторов, информация по поведению мобов закладывается не только в ИИ, но и частично в спавн.
Т.е например есть локации, где два моба, с одинаковыми ИД и даже ИИ, будут вести себя по разному.
Все эти тонкости практически не достижимы на типовом эмуляторе.
Т.е Prelude->Настоящее время.
Все что есть в оф, появилось там благодаря непрерывной работе по развитию мира, которая достигает ТАКОГО АХУЕННО ОГРОМНОГО объема, за 15+ лет существования(7+ лет, в случае с ХФ), что не имея исходного кода самого сервера(именно L2Server.exe) и всех его библиотек, реализации оф сервера не достичь никаким образом. Все равно будут оставаться неочевидные моменты, которые блять неочевидны.
Ява же, тоже имеет очень много плюсов. Первый и самый главный - наличие исходного кода. Т.е проект не устареет и будет развиваться хотя бы за счет таких энтузиастов, как я или мои друзья.
Остальные плюсы заключатся в том, что за почти столь же долгое, как и сам оф сервер, существование эмуля, в него напихали также значительное количество всяких плюшек, которых нет и никогда(скорее всего, корейцы любят пиздить идеи у ФШ в последее время) не будет. Все любимые комьюнити борды с кучей начинки, баферы, эвенты, всякие ПВП сервера и прочее, также развивается параллельно официальному серваку. Чем ниже рейты игры, тем больше причин выбирать официальную платформу. Соответственно, чем выше, то тем более весомы плюсы явы.
А по поводу разработки, где как. Кто-то через интеграцию дополнительных модулей расширяет функционал спиженных у NCSoft ПТС серверов, кто-то пилит самобытные проекты, кто-то пилит движок на яве, а использует в качестве датапака полный набор скриптов ПТСа, часть бибиотек и переодически дописывая и реализовывая все больше функций из L2Server.exe, реверся его используя IDA и wireshark, но т.к это нихуя незаконно и в отличии от чистого эмуля L2jServer, который делает почти тоже самое, но под GNU GPLv3, и типа дохуя легальный(пидоры), то мы это не будем обсуждать. Я так не делаю, это уж точно)
1. уже были готовые части реализованы на яве?
2. или у автора это основная технология?
Почему вообще ява? Основа-эмулятор был написан на яве. После этого, десятка полтора лет назад утек в сеть билд оригинального корейского сервера, который оказался написан на C++, который морфологически схожи, что значительно упрощает реверс.
Ну и плюс у явы довольно низкий порог вхождения, что позволило быстро нарастить комьюнити и добиться внушительного уровня оптимизации.
Проект приватный, я пока не планировал сурсы делать общедоступными. В перспективе возможно, если меня заколебает его ковырять в соло, то я могу отдать сурсы комьюнити, но пока это маловероятно...
Надумаешь - пиши.
Не задумывался про чистку мусора из репозитория. bfg это https://rtyley.github.io/bfg-repo-cleaner/ ?
Покурю сегодня. В последних ревизиях я упаковал все что можно в зип и сделал чтение прям от туда, т.к 1.5гб геодаты ужимаются до 200мб, 50000+ html упаковываются в один зип файл и загружаются за 600мс, вместо 8 секунд и т.п. Но вот за идею с чисткой git спасибо
Это очень круто.
Мне уже пеняли, что не ИЛ, но я физически не потяну в ебало сделать нормальный даунгрейд до ИЛ... Ну и + к ХФ у меня невероятно дохуя уже всего сделано и вырезать это все у меня рука не поднимется...
1. Оф сборка чистит кеш сама по себе, потому на фришардах с птс сборкой можно не перезагружать л2 хоть до рестарта. На яве если 2 часа постоишь и погриндишь мобов, а потом сделаешь тп - игра виснет намертво даже на ссд и черный экран будет по 10 минут.
2. Реализация скиллов и некоторых механик. К примеру, вампирик на офе идет 100% от 1 моба, 50% от 2, 25% от 3 и т.д., что не дает дестрам без буста фармить локи в соло. На яве он идет всегда максимум со всех. Минимальный шанс дебаффа на оф сборке = 10%, что позволяет использовать даже скиллы, у которых нет заточки. На яве на все воля Эйнхасад. Механика летального удара (Дагер 1 одноручным ножом при использовании скиллов с "Возможен летальный удар" на оф сборке имеет 6% (8% при заточке скиллов) оставить 1 хп противнику. На яве это не работает вообще.
3. ИИ петов - на оф сборке пет бегает сразу за тобой по правой стороне, если пет пассивный, то он будет пытаться убежать от врага, если его атакуют. На яве пет - это просто мешок за плечом.
1) Насчет очистки кеша сборкой ПТС. Там немного сложнее механизм.
Клиент л2 максимально ориентирован на повторное использование объектов. Сборка в процессе очистки его кеша никак не участвует. Суть проблемы в другом. У каждого объекта в мире л2 есть свой ObjectID номер, который уникален. Т.е например, у всех мобов на локации может быть одинаковый NpcID, но ObjectID всегда будет разный.
Логика клиента какая:
- Получил пакет от клиента, что в мир добавлен объект. Закешировал его параметры вместе по ключу ObjectID.
- Дальнейшие действия, вроде пакетов движения и атаки, имеют ключ-индетификатор ObjectID, по которому клиент понимает, какой из загруженных объектов этот пакет должен на себя применить.
- А ВОТ ТУТ НАЧИНАЮТСЯ ОТЛИЧИЯ.
- Убиваешь ты моба на ПТС. Он дохнет, исчезает, но висит в кеше клиента сохраненный по ObjectID, до тех пор, пока ты из региона не выйдешь(тут тоже есть отличия в логике работы, но о них ниже). Через какое-то время, сборка, которая уже обработала информацию о смерти моба, решает, что пора бы его зареспавнить. и ФОКУС. На ПТС, моб спавнится с тем же самым ObjectID, что и его предшественник. После этого, клиенту остается просто загрузить данные моба из кеша и продолжить работу. На типичной Яве(ВНЕЗАПНО), каждый последующий моб будет иметь НОВЫЙ ObjectID, который каждый раз будет заново сохраняться в кеш клиента, а вот потом, уже когда ты попробуешь покинуть регион, клиент ахуеет от количества инфы в кеше и позволит тебе насладиться 10 минутным таймаутом, пока он его очищает. При грамотной реализации этой части, ява сборка с успехом избегает таких проблем.
2) Тут сложнее. Эта инфа максимально заныкана в сервере и ее можно вытащить в большинстве случаев только реверинжинирингом самого сервера ПТС(если он есть), либо эмпирически, ставя эксперименты на работающем ПТС сервере. Ну тут тоже зависит от подхода админа. Где-то уровень реализации формул 30%, где-то 70%. Разумеется, там где 70% реализация, разница с официальным сервером будет, но не настолько большая, как на том, где реализация 30%. Если разницу видит игрок, то ее скорее всего видит и админ. Въедливый админ добьется того, чтобы показания формул +- бились с офом.
3) Опять же, зависит от реализации ИИ. Смотри приложенную гифу) Это моя ява.
Чтоб основа и пофанится.
Идея заточки предметов путем из использования понравилась, а что-то подобное со скиллами провернуть вариант?
Возможно тогда не заточку, а левел-ап скиллов переделать как в RF Online - хочешь прокачать скилл - пользуйся им.
Касательно геймплея то самое сложное и важное это правильная работа всех связанных со скиллами механик, расчеты КД луков/арбалетов, а не эти вот углы атаки и процентные распределения урона. Вот есть на оффе фишка у дуал-ножей с разным разбросом урона при атаке и при использовании скиллов с них (хотя технически все должно быть привязано к random_damage), только это знают единицы и мало кому нужно.
Я тебе покажу пару скринов с кодом загрузки и расчета формул.
Касательно ИИ: у нас перестали адекватно работать мобы на кругу в ХФ и мобы под пещерой гигантов в адене (silent valley), проверь ведут ли себя они оффлайк или нет.
Кстати забыл еще такую штуку, я так понимаю ты парсишь статы НПЦ тоже из офф.скриптов? Не пропусти тот момент, что на большинстве ява-серверов эти статы вбиты напрямую, в готовом виде, иногда максимум еще пассивки прикручены, а на оффе там вбиты базовые статы + они должны рассчитываться с модификатором от уровня и по таблицам STR\CON\INT и т.д., плюс еще должны ложиться пассивки, которые тоже должны работать. Иначе начнется кавардак с супер-слабыми боссами на которых ложатся все дебаффы и так далее.
Ну судя по твоему описанию, вы как раз допустили ошибку в том, что соотнесли параметр agro_range из npcdata.txt с параметром радиуса агра на яве. Это внезапно разные параметры.
Что сейчас у меня(FULL полностью из скриптов ПТСа, PART Используется частичный распарс, NONE не используется.)
ArmorEnchantBonusData FULL
CategoryData FULL
ConvertData FULL
ExpData FULL
ItemData FULL
AuctionData FULL
DoorData FULL
DyeData FULL
EnchantOption FULL
FieldCycle FULL
Multisell FULL
PetData FULL
Recipe FULL
UserBasicAction FULL
SkillData PART
CubicData FULL
VariationData FULL.
Superpoint FULL
FreewayInfo FULL
NpcData FULL
NpcPos PART(Используются не все мейкеры, примерно 60%)
PCParameter PART
Setting PART
Transform NONE
SkillAcquire PART
optiondata NONE
CursedWeaponData NONE
InstantZoneData NONE
AreaData NONE
CastleData NONE
FormationInfo NONE
Airship FULL
AnnounceSphere NONE
DecoData NONE
FishingData PART
ManorData PART
Minigame NONE
Monrace NONE
Скилы меня пугают пиздец. Чем больше я на них смотрю, тем мне страшнее)
Давай возьмем как раз моба из круга.
22848 Drake Leader
Общие статы
Возможно, я не совсем прав)
hit_time_factor это double значение, коэфициент на эту величину.
Он в статах для того и введен, как константа, чтобы не дрочить сервак расчетами скорости атаки всех мобов, а юзать precalculated значение.
Т.е формально, на яве значение считается по дефолу как 500000 / скорость атаки. Т.е например у тебя скорость атаки загнана под лимит 2500, то между ударами пауза будет 200(500000 / 2500).
У мобов эта величина заранее просчитана и введена как модификатор на время 1000мс., т.е если например hit_time_factor = 0.34, это значит, что между ударами моба пауза не более 340 мс, что по старой формуле равно примерно 1470 атаки. А т.к такой атки у мобов нет, то и визуально удары дольше, т.к по факту например у моба у которого 800 скорость атаки, пауза будет 625мс, вместо 340, что по факту дольше почти вдвое.
как-то так.
Если на первых двух гифках разницы нет, т.к все значения укладываются в стандартные формулы, то вот тут уже модификатор включается и при условии что во всех трех случаях скорость атаки 278, получается вот такая хуйня)
У тебя к сожалению не видно систем чат, но при факторе 1.0 урон должен приходить в конце анимации, при факторе 0.01 - в самом начале, как он только замахивается, а при хит_факторе 3.0 - моб просто ждёт время, равное трем анимациям, чтобы нанести тебе урон и не может начать новую атаку до этого момента.
attack_animation_time / 2
Сейчас сделал вот так. Буду тестить)
(long)(attack_animation_time * getTemplate().hit_time_factor())
Доделаю основное, то что начал сейчас, сделаю настройки и залью для простых тестов, побегать, посмотреть. Отпишу позже.
Ждём когда отдуплится саппорт…
Какой кстати клиет на за основу взят? Ил, грация или год?
Но насколько сервак реально будет актуален в 2021 году, учитывая, что классическая Л2 сводилась к гринду, фарму, мободрочу, причем в жесточайшем прайме. Мало верится, что найдется много людей, кто будет в три окна сидеть на каком-нибудь х4 и долбиться до 80 лвл по-старинке.
Многие поколения ПВП-серверов пытались решить эту проблему, но упирались в новую - люди быстро апали 80, а дальше шел тот же гринд адены на заточки, в ожидании эпиков (1я неделя) , осад (2я неделя), олипм (4 неделя) - все, сервак тухнет.
Не знаю, знакомо ли новое поколение Л2, по крайней мере до того, как из нее сделали анимешного инстансового мутанта, который последний годы висел на руофе (хз работает ли он еще вообще), но даже старое поколение едва ли сможет выделать необходимое время, чтобы укладываться в прайм пати.
Какие альтернативы? Без прайма - сидеть в 4 окна на фулл бафе, ну теперь-то и с нетбука можно 10 окон завести. НПС-бафер - убивает всю соль подбора бафов. В любом случае, Л2 все любили именно за работу в команде. Просто гринд - это чушь. Да и изначально рассчитана Л2 именно под большое кол-во людей, механики типа бафа на всю пати от БД/СВС/варка, да и вообще на весь клан/альянс от овера и т.д.
Словом, мало верояно, что люди, которые тратили часы (иногда дни) на Л2 лет 10-15 назад, смогут сделать то же самое сегодня. Есть работа / семья / ипотека, и еще куча альтернатив, современные ММО, Скаримы всякие и т.д.
Тема с адекватным сервом, да и вообще с возрождением Л2 это очень круто, все же Л2 это один из столпов ММОРПГ, наряду с ВОВ. Вопрос в том - какая будет начинка?
Мне кажется, что для реально крутого и главное живого сервера нужно не просто перекопать игру в плане кода и багов, нужно именно что переосмыслить геймплей, чтобы оставить все самое лучшее, но адаптировать игру под современные реалии, чтобы она стала достойным конкурентом для проведения досуга.
В первую очередь это касается темпа игры и прайма. Сужу по себе и своим знакомым, с кем мы залипали в Л2 - на сегодняшний день они готовы были бы выделять часа 3-4 в неделю. Может и больше - зависит от деятельности в игре.
Второе - та самая деятельность игрока в игре. Чем он будет заниматься эти 3-4 часа? Фармить мобов? Наращивать дежурные 2 лвл?
Недавно посмотрел обзор на Морровинд, где приводились его отличия от Скайрима, и человек правильную весь сказал - упрощение Скайрима произошло потому, чтобы а) у современного школоло голова не взрывалась от поиска нужной пещеры через записи в дневнике, вместо маркера на карте; б) чтобы большой бородатый дядя мог после тяжелого трудового дня пройти занятный, но несложный квестик, сохраниться, вынести по фану пол города и выключить игру доя завтра.
И в этом есть логика. Вот когда Л2 станет такой интересной отдушиной, где можно не только молодость вспомнить, но и реально получить фан, который не дают другие современные игры и это будет комфортно, тогда на сервер будет очередь. А это очень важно, т.к. в ММО чем больше народу - тем веселее.
В любом случае, желаю тебе творческих успехов и крепкой воли, чтобы довести дело до конца.
Действительно все пвп сервы скатываются в олимп и очередь на нубл квест.
Сидеть и гриндить даже на х10 уже нет ни времени, ни желания.
http://joyreactor.cc/post/4864881
Суть моей работы сейчас - актуализировать и модернизировать ядро сервера до современного уровня, чтобы заложить прочный фундамент, который позволит потом в краткие сроки развернуть проект с произвольной концепцией.
Я имею опыт создания большого количества серверов самой разной степени фриковости. Я делал сервера с полностью измененным лором, где основная идея строилась вокруг вторжения потусторонних сущностей в мир, через открывающиеся в произвольных местах разломы. Я делал сервер, где вместо мобов игрокам противостояли кланы и пачки ботов, которые технично отжимали споты, эпиков, замки, суммонились на замесы, сами их иницииировали и делали всякое другое непотребство. Я делал сервак полностью построенный на концепции крафта, на концепции ПВП, на концепции эвентов и прочего. Короче я люблю креативить)
И скажу так - реально крутое переосмысление Л2 для ее вписывания в современный мир видеоигр это супер-мега-архисложная задача. Упрощение - не панацея, это не делает игру интереснее. х10000 с авто-нублом и фуллбафом на 40 слотов это упрощение. Но интереснее игра не стала.
Переосмысление, это нечто иное. Оценить все, что есть в Л2 и понять, как это по-новому выразить, в условиях современных реалий. А в Л2 уже есть ОЧЕНЬ МНОГО ЧЕГО, уже готового, но не все могут это осознать, понять, использовать. Приведу пример из практики. Когда я админил на Ла2ворлде, одно время у нас был паренек, прогер, приглашенный в команду. Так вот у него была супер-мега охуенная идея камнями душ, которые можно было получать с помощью мобов и потом менять на какие-то плюхи у НПСа. Деталей уже не вспомню, но суть в том, что эта механика была спизжена из ТЕС (см. захват душ). Но весь пиздос ситуации был в том, что эта механика И ТАК УЖЕ ЕСТЬ В Л2! СоулКристалы, которые и так апаются с мобов и так дают плюхи на оружие. Но этот челик мыслил слишком узко, и видимо, не мог понять, что он изобрел велосипед, и вместо переосмысления соул кристаллов, интегрирования их в новые механики он просто лепит поверх еще одну мободрочную приблуду, которая сводится все к тому же - фарм.
Так что в Л2 реально есть почти все, что нужно для счастья, но многое из этого не актуального в старой форме. Поэтому и нужно именно переосмысление.
И дело тут не в сюжетно-лорной части, а в социальном аспекте, т.к. именно из-за него люди и будут играть (или не играть) на сервере. Основа такой мотивации - комфорт и интересность.
Вопрос конечно в том, какого рода сервер ты хочешь. Интересный, но с вайпами каждый месяц, или такой, чтобы по два года стоят, а онлайн только рос и рос.
Пока только на потестить. Доступ к серверу закрыт. Файлов пока нет. Созданные аккаунты 100% будут удалены еще не раз, т.к база в процессе доработки.
Я тоже об этом пока думаю.