Перейти к содержанию

Saltfire

Постоялец
  • Публикаций

    642
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Весь контент Saltfire

  1. Saltfire

    Защита.

    Короче, пацаны, давайте снимем розовые очки. Защищать клиент - это диагноз. Всё, что крутится на стороне игрока, априори принадлежит реверсеру с Ring 0 драйвером наперевес. Обфускация, протекторы, античиты - это просто ширма для самоуспокоения админов. Единственный путь к тотальному контролю - жесткий, авторитарный серверный бэкенд. Но главная боль даже не в читах, а в том, какое беспросветное говно скрывается под капотом самой Линейки. Неважно, Java-эмули это или оригинальный C++ PTS — архитектура там родом из каменного века, написанная через колено. Этот легаси-код годами передавался по кругу как переходящее знамя: корейцы навелосипедили, приватные команды отреверсили, Вася-кодер допилил костыль, Петя-админ прикрутил заплатку поверх заплатки. В итоге мы имеем циклический ад из спагетти-кода. В чём главный технический зашквар архитектуры L2? Тотальный оверлоадинг памяти: Эта дичь при старте тупо выкачивает всю БД в ОЗУ. Квесты, которые никто никогда не пройдет, итемы, которые никто не выбьет, весь спавн и гигабайты геодаты - всё это мертвым грузом висит в памяти. Никакого Lazy Loading (ленивой загрузки), никакого динамического кэширования. Сервер жрет гигабайты оперативки просто потому, что архитекторы начала 2000-х не слышали про оптимизацию пулов. Сломанный сетевой код движения: Движок движения - это вообще клиника. Клиент шлет пакет MoveToLocation, и сервер ему слепо верит, пытаясь догнать чара в своем потоке. Отсюда все эти клик-хаки, телепорты на гео-дате, полеты и пакетные прыжки. А если ты попытаешься закрутить гайки и жестко валидировать координаты на сервере - легитные игроки при малейшем пинге превращаются в резиновых мячиков из-за корявого тикрейта. Адская связанность: Там нарушены вообще все принципы SOLID. Класс на классе, синглтон на синглтоне. Логика квеста намертво завязана на пакетную часть, расчет урона переплетен с инвентарем. Ты меняешь копеечный конфиг в одном месте - и у тебя раком встает движок Олимпиады или спавн эпиков, потому что код связан как узлы на морском канате. Как должен выглядеть нормальный, здоровый бэкенд L2? Если мы хотим спать спокойно, старый монолит надо не латать, а пускать под нож и переписывать по канонам современного Highload-бэкенда: Дата-центричный подход: Чар зашел в игру - только тогда его профиль, инвентарь и квесты поднимаются из БД. Чар вышел - всё в кэш или обратно в базу. Квестовые скрипты должны инициализироваться только тогда, когда первый бедолага на сервере вообще нажал на этот квест у NPC. Изоляция и Микросервисы: Логику мира надо дробить на независимые сервисы. Чат, Олимпиада, Рынок, Квесты - это не должно висеть в одном общем потоке ядра и ронять весь сервер при малейшем эксепшене. Серверный авторитаризм и ECS: Клиент - это просто тупой, слепой терминал для отрисовки полигонов. Он не имеет права голоса. Клиент шлет только намерения (клики), а сервер жестко считает вектор скорости, радиус легитного перемещения и делает рейкастинг (Raycast) луча видимости по геодате до того, как пропустить пакет. Потоковая фильтрация видимости: Если моб или враг находится за стеной или вне радиуса обзора - сервер вообще НЕ должен отправлять пакет CharInfo на клиент. Нет пакета в памяти процесса - никакие радары, ВХ и Ring 0 читы физически не смогут его отрисовать. Хватит тратить миллионы на защиту клиента и латание этого дырявого решета. Старый кодовый базис L2 безнадежен. Единственное рабочее решение - это тотальный серверный контроль, жесткий менеджмент памяти и архитектура нулевого доверия к тому, что прилетает из сети.
  2. За ухом себе почеши. Уровень понимания 2000-х годов. Читай что такое DMA-карты и KVM. Ага и про моники читерские почитай!
  3. Игра и античит работают на компьютере игрока. Тот, у кого есть физический доступ к железу и права администратора, всегда сможет расковырять память, снять дамп и обойти любой хук. Ваши защиты - это пустышки. Сверять хеши файлов - бесполезно, бот не трогает файлы клиента. А настройка защиты через config.xml без пересборки сервера, означает, что этот гвард отвязывается от процесса игры за пару минут. Всё остальное - просто мусорные свистелки вроде Ctrl+V и Discord RPC. Хваленые баны по HWID (железу) обходятся копеечными спуферами за секунды. Как только код игры расшифрован в памяти для процессора - он расшифрован и для создателя бота. Блокировка Adrenaline - миф. Все эти гварды банят только старый бесплатный софт. Платный, приватный Адреналин - это огромный бизнес. Его авторы выпускают обходы быстрее, чем античиты обновляют свои базы. Тадань... Админы покупают эти защиты только ради красивой плашки при запуске, чтобы успокоить наивных игроков. Защитить сервер от умного ботовода со стороны клиента технически невозможно.
  4. Saltfire

    Защита.

    Чувак, твой пост - это классический манифест дилетанта, который год изобретал велосипед в подвале и словил синдром Бога. Запомни базу: безопасность через неясность (Security through obscurity) не работает. Если твоя "непробиваемость" держится на том, что ты "не будешь писать, на чем она завязана", то грош ей цена. Погугли принцип Керкгоффса: надежная система остается безопасной, даже если противнику известен весь её алгоритм. Твой L2j — это Java. Она декомпилируется в читаемый исходный код тремя кликами в Bytecode Viewer или jadx. Любой реверсер средней руки вскроет твою "хитрую логику" за час, просто лениво листая код под пиво. Ты проверил защиту на себе и друзьях? Это не тест, это клоунада. Покажи софт парням, которые ломали SmartGuard и Strix. Они тебе за 15 минут объяснят, почему NCSoft за 20 лет не смогли сделать непробиваемый клиент, а Вася после года изучения мануалов - "смог". Спустись на землю, не позорься.
  5. Чувак, твой пост - это классический манифест дилетанта, который год изобретал велосипед в подвале и словил синдром Бога. Запомни базу: безопасность через неясность (Security through obscurity) не работает. Если твоя "непробиваемость" держится на том, что ты "не будешь писать, на чем она завязана", то грош ей цена. Погугли принцип Керкгоффса: надежная система остается безопасной, даже если противнику известен весь её алгоритм. Твой L2j — это Java. Она декомпилируется в читаемый исходный код тремя кликами в Bytecode Viewer или jadx. Любой реверсер средней руки вскроет твою "хитрую логику" за час, просто лениво листая код под пиво. Ты проверил защиту на себе и друзьях? Это не тест, это клоунада. Покажи софт парням, которые ломали SmartGuard и Strix. Они тебе за 15 минут объяснят, почему NCSoft за 20 лет не смогли сделать непробиваемый клиент, а Вася после года изучения мануалов - "смог". Спустись на землю, не позорься.
  6. Да бросьте, когда это было-то? Неужели ни у кого это до сих пор не реализовано в клиенте на серверах?
  7. Автор чешит. https://acis.i-live.eu/index.php?topic=1974.0 https://gitlab.com/Tryskell/acis_public
  8. Ты сам виноват. В следующий раз не плати авансы незнакомцам. Иди в банк и оспаривай платежи, если еще не поздно. А здесь никто твои проблемы решать не будет.
  9. Еще однин, чудо, - юдо, некрофил. Под подушку себе положи - этот кусок говна.
  10. Зачем и для чего ты возвращаешь темы к жизни!? Уходи! Некрик.
  11. ШТА? Кого, что ты с нуля там начал? Не смеши мои тапочки.
  12. Размеры коллайдера исправьте. Дагер не может быть таких размеров.
  13. а к чему тогда остальное все там лежит?
  14. Saltfire

    Проблема JAVA_HOME

    Свойства-системы -> Переменные среды -> Системные переменные среды: Path <- дабл-клик, и в самый вверх списка, создай или подними если уже есть javapath адрес в среде. (видимо могут быть конфликты между сборками явы, ты можешь менять версии явы путем поднятия пути выше списком, чем предыдущий путь) Если нет, добавь: C:\Program Files\Common Files\Oracle\Java\javapath (измени на свой путь) Перезапусти комп.
  15. А что ты сделал то? Как было все плохо, так и осталось. Как был распухший до боли Region с IBlock[] массивом который сжирает сотни и тысячи мегабайт, так и осталось. Теперь сравни с моим: private final ByteBuffer types; @Override public int getNearestZ(int x, int y, int z) { final int offset = getBlockOffset(x, y); final byte type = types.get(offset); return switch (type) { case FLAT -> readFlatZ(offset + 1); case COMPLEX -> readComplexZ(offset + 1, x, y, z); ////////.................. }; }
  16. Saltfire

    Проблема JAVA_HOME

    Твой уровень развития не позволяет тебе общаться с этой консолью, возвращайся, когда выучишь, что такое переменная ©Даннинг&Крюгер
  17. Фантазер Это не галочка в настройках, которую можно снять. Чтобы убрать animation wait, нужно переписать клиент, потому что новый движок не умеет работать без клиентского буфера.
  18. Ты защищаешь систему, которая скрывает косяки движка за плавностью, а я говорю про контроль. Interlude - это честный хардкор. Classic - это симулятор с инпут-лагом (мультик с плавной картинкой и ватным управлением). В Interlude -> /forceattack работает через прямой посыл пакета в каждый тик. В Classic встроена задержка на стороне клиента, чтобы игроки не могли разгонять скорость атаки и каста больше, чем разрешили корейцы ("""некий баланс"""). В Interlude -> /shortcuts работает без задержек и честно каждый тик. В Classic встроена задержка на стороне клиента, чтобы игроки не могли так быстро использовать предметы и скиллы. В Interlude анимация была прибита гвоздями к логике. В Classic анимация - это просто скин, натянутый поверх серверных расчетов. Поэтому в Interlude ты чувствуешь удары и каст скиллов, а в Classic ты их смотришь и постоянно ждешь Animation Lock которой в 2007-м в таком виде не существовало. В Interlude я хирург: нажал - отрезал. В Classic я зритель: нажал - подождал, пока клиент доиграет мультик - и только потом отрезал.
  19. Saltfire

    Looking for OvC Source

    I still don't get why you're doing this. It's 2026, for heaven's sake! Use live projects that are actually supported today instead of trying to dig up old junk from 2016. Everything in there is so outdated it's impossible to debug or use with modern tools.
  20. Ошибаешься: это актуально для UX (User Experience). Игроку плевать, где считаются цифры, если его глаза видят одно, а руки чувствуют задержку из-за несовпадения серверного тика и клиентского кадра. Это база любого сервера, но она не решает проблему Input Lag. Если серверный пакет о прохождении дебаффа приходит позже, чем закончилась красивая анимация нового клиента, игрок получает визуальный лаг и рваный геймплей. Клиент - это интерфейс взаимодействия. Если твой слой рисует цель на дистанции 2000, а серверный Interlude-лимит не дает нажать на нее скилл до 900, ты ломаешь позиционирование и логику боя, превращая игру в симулятор чтения ошибок Цель слишком далеко. Ментальный тайминг игрока завязан именно на анимацию. Если ты не используешь animation commit, ты получаешь эффект киселя: персонаж уже докастовал визуально, но стоит столбом, потому что сервер еще досчитывает старый темп. Это невозможно без рассинхрона, потому что движок Classic и движок Interlude имеют разную частоту обновления (tick rate). Пытаясь сохранить темп 2006 года в оболочке 2024-го, ты создаешь не комфорт, а вечное ощущение высокого пинга, либо вялого геймплея. Ты пытаешься адаптировать математику, забывая про физику восприятия. Без передачи части логики на клиент (что ты отрицаешь), ты никогда не добьешься той отзывчивости персонажа, за которую ценят Interlude. Это будет просто кривой скин на старом движке.
  21. Если оставить старый темп в новом теле, игра ощущается неестественной, а если ускорить процесс - теряется дух хардкора. Как только ты добавляешь в Interlude хроники, современный Classic клиент, то вместо приключения, получается галерея иконок на экране. Старые формулы урона будут работать криво. Например, лучники или маги могут стать либо имбами из-за новой дистанции прорисовки, либо бесполезными из-за того, что в новом коде, иначе считается шанс крита и скорости каста.
  22. Interlude - это финал старой школы с её ограничениями и если и бесплатно брать то лучше устоявшиеся команды. Classic - это попытка корейцев продать ностальгию, упаковав её в современную систему с автобоем. Classic базируется на современном клиенте (от хроник GoD/Helios). Отсюда другая плавность анимаций, иные задержки (cooldowns) и механика откликов. В оригинальном Interlude всё было топорнее и иначе, но именно это создавало те самые тайминги. В Classic переработаны формулы шанса крита, прохождения дебаффов и скорости каста. То, что в Interlude работало по принципу прошел летал - убил, в Classic заменено на более современный математический баланс. Сравнивать их - это как пересесть с механической коробки передач (Interlude) на современный автомат (Classic): вроде машина та же, но контроль ощущается совсем иначе.
  23. Худший выбор, надо как минимум, 166 протокол, 110 мобиус зафриженый и кривой какой-то недо Classic. Обмен данными сделан через попен-гагенс. Сразу в утиль.
  24. Нашел что взять за основу. Очередной вброс, который никаких целей кроме сруба бабла на незнайках, преследовать в будущем не будет. Инфа выдавленная из пальца. Это попытка номер +100501 сделать мего крутой сервер?
  25. По твоему описанию понятно только то, что ты криво впихнул ресурсы Tauti в движок HF, и у тебя либо шейдеры ложатся при повторном обращении к кэшу, либо версия Engine.dll не переваривает кастомные меши. Без логов из папки system после черного экрана и скриншотов консоли, список файлов, которые ковыряли в SysTextures и Maps - это гадание на кофейной гуще.
×
×
  • Создать...