5-слойный щит.
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект

Работая с предметами, создал фичу — многослойный щит 😂
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Работая с предметами, создал фичу — многослойный щит 😂
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
В 2025 году профессии в сфере IT остаются одними из самых востребованных. Специалисты по программированию, системному администрированию, кибербезопасности и цифровому дизайну требуются в компаниях разных отраслей.
Если вы окончили 9 или 11 класс и хотите быстро войти в профессию, обучение в колледже на IT-направлениях станет отличным выбором. Формат дистанционного образования открывает дополнительные возможности: учиться из любого региона, совмещать занятия с работой и осваивать навыки онлайн.
В колледжах чаще всего предлагаются такие направления:
Ниже представлен обзор колледжей, которые предлагают IT-специальности в онлайн-формате.
Дистанционное обучение на IT-специальностях в колледже — это возможность за 2–3 года получить профессию будущего. Такой путь подходит тем, кто хочет учиться онлайн, ценит гибкость и планирует либо продолжить обучение в вузе, либо сразу выйти на рынок труда.
Всем доброго здравия, уважаемые вомбатовцы (я не знаю, как у вас тут принято обращаться друг к другу, надеюсь, никого не обидел).
Кто-то из вас знает, кто-то нет, но где-то месяц тому назад мы весьма немаленькой компанией были вынуждены покинуть насиженное место. Некоторых из нас, в частности меня, заклеймили злодеем вором сайтов, но я человек простой, мне во всей этой грязи возиться лень, я пару раз какашкой кинулся. да самоустранился. «Собака лает, караван идёт».
В итоге что получилось? Решили мы написать новый проект с нуля. Когда-то давно, ещё тогда, когда был большой исход с Пикабу (как раз когда и Вомбат появился на свет). Я решил написать свою площадку. В итоге довёл её за пару месяцев до состояния, что этим можно было пользоваться, но потом работа отъела ресурсы, а когда решил вернуться опять к проекту, уже вышли в открытый доступ варианты Того же Вомбата и Капибары. Свой я отложил в долгий ящик (искренне был уверен, что забросил навсегда).
Но тут вот как получилось.
Использовать код того проекта мне показалось не самой хорошей идеей, так как и технологии устарели и я чуть умнее стал, поэтому начал писать с нуля, но оглядываясь на опыт прошлой писанины.
В качестве основы был выбрал фреймворк Laravel. Почему? Да потому что я его знаю вдоль и поперёк и на нём подобные штуки поднимаются достаточно легко и быстро.
Большой вопрос по фронтэнду. Я вроде как фулстек, но JS фреймворки, аля VUE и React считаю излишеством, тем паче, что открытого АПИ у проекта всё равно нет и не планируется. Поэтому решил совместить удобное с быстрым. И тут мне под руки попалась такая интересная фигня (ну как попалась, чат ГПТ мне её посоветовал. Говорит: «Потыкай в неё палочкой, перспективная фигня»), как Livewire.
И вот, совместив стандартный ларавелевский шаблонизатор, вот эту вот вундервафлу и обычный ванильный JS, удалось собрать проект буквально за пару недель. Пришлось правда отложить все прочие свои поделки, но тут уж как получается 🤷♂️
Ещё две недели активный тестов небольшой, но очень умелой группой пользователей. И вот сегодня я открыл сайт для общего польования.
Согласно пункту правил 10, я, вроде как могу тут делиться ссылками на свои ресурсы, но с другой стороны, этот ресурс не полностью мой, там за ним целая толпа стоит. Поэтому не буду гневить ВомбатоМодераторов. Тем более, что цели переманить людей отсюда к нам у меня нет, я просто хвастаюсь ☺
Что могу сказать по итогу: задачка интересная. И работы предстоит по её доделыванию уйма, но и опыт это прям хороший. Особенно по работе с БД. Так что, готов ответить на вопросы, поделиться, если у кого-то есть что спросить. А если кто-то вдруг ещё и шарит в описанных мной технологиях, буду раз помощи)
Linux, а для меня основная ОС для дома (удевлены?), является продолжателем самых первых операционок семейства UNIX, фактически - родоначальника всех ОСей. И есть в ней такая замечательная "либа", некий аналог виндовой DLLки.
Практически во всех линухах (и частенько в MAC-OS/Windows) не только библиотека есть, но и её обёртка, что бы можно было использовать в командной строке.
Так вот, разраба данной библиотеки хакнули, причём конкретно его самого. Это наивысшый уровень социального инжиниринга.
Т.к. его библиотека была распростанённой, и достаточно эффективной, то хакеры решили "хакнуть" большинство дистров на базе Linux одним махом.
Там была цельная спецоперация.
Сначала долбили разраба фич-реквестави (пожелалками) - продолжалось енто пару лет. Потом появляются коммитеры, которые енти фичи реализуют. Их количество росло, а чел (ну не буду я его ФИО писать, что блы поисковики его опять пердолили ссылаясь на ентот пост - не хочу), просто устал, выгорел. И дал права над исходниками левому чуваку, который был наиболее активен среди коммитеров.
Результат не заставил себя ждать - в качестве очередного патча, в библиотеку был внедрён бэкдур, позволяющий получить права root.
Так будет тост: "Не давайте прав кому либо выше Ваших! Программисты - вы боги-создатели своего кода".
Я не программист, но даже меня немного коробит. ))
Нуссс. Начну из далека. На заре вычислительной техники народ довольствовался механическими вычислительными машинками. Не буду на них останавливаться - это тема для длинющего поста, начиная с камешков на берегу и заканчивая машинкой "Энигма".
Потом, почти одновременно, появились аналоговые вычислительные машины - АВМ. Они имели крайне узкую направленность, и грубо говоря пытались электронными, а зачастую и физическими методами повторить некий физ. процесс и получить результат/расчёт того или иного физ. процесса. Головоломка уже не для программистов, а для физиков и математеков.
Про квантовые компы я промолчу тихи в тряпочку - сколько ни читал - муть мутная и мне непонятная. Стар я видать стал, а может стал и СуперСтар...
Говорить я буду о привычных компах - которые работают с единичками и ноликами (троичные погибли, хотя в СССР были нехилые наработки). Вроде всё норм, но комп, процессор, понимает как раз енти нули и единички. Ещё на этапе проектирования железяки народ понял енту проблему и начал объединять их в группы, кратные степени двойки. Так появился байт (2^3 = 8), а потом и слово (2^4 = 16). И тут же различные производители железа придумали первый геморрой для программистов - порядок следования байт в слове. Little-Endian и Big-Endial - эти слова знакомы каждому сетевику и привычно вызывают когнитивный диссонанс...
Но ладно, вернёмся к ассемблеру. На заре программирования под цифровые процессора народ вбивал программу тумблерами - битик за битиком. Производительность труда была на наименьшейшем уровне, а вероятность щёлкнуть не тот битик самой большой.
Нервы не выдержали и мисс Кэтлин Бут решила облегчить себе работу, создав первый в мире ассемблер для ARC2 (военный авиационный вычислитель).
Эту идею подхватили остальные. Что самое интересное - на языке Ассемблера можно добиваться максимальной производительности (самая популярная библиотека ffmpeg имеет множество ассемблерного кода под разные архитектуры) - выжать из процессора все соки. Такое же происходит в различных математических библиотеках.
Вроде всё с ассемблером хорошо, кроме одного - там команды процессору заменены на мнемокоды - краткие символьные представления команды процессора. Писать программу стало удобно, понятно. Появились кросс-ассемблеры (низкий уровень llvm)
Но оснавная засада осталась - трудоёмкость программирования и половина башки программиста занята архитектурой компа (да-да, там не только про проц надо помнить, но и про периферию).
А что итого? Я понимаю, что питонисты нифига не поймут - они даже не понимают, что каждая питон-либа это просто обёртка под высокоэффективным кодом на Си. Ассемблер жив и будет жив, те же "тысяча строк" ассемблера под линуксом - это и есть основа ядра ОС. Потом уже можно писать на Си, Си++, даже Расте (чёт ОС растоманов зачахла - видать пришло понимание, что язык высокого уровня не может использоваться наравне с Ассемблером или СИ).
Язык Ассемблера, как продился, так и будет жив. Есть яыки программирования близкие к АСМу - тот же Си, или Форт, но никто не даст программисту той мощи и контроля за компом как АСМ. Тот же Си в своих диалектах везде имеет возможность АСМ-вставок.
Что же до программирования на АСМе - мне он нравится, но... Всегда надо иметь баланс в голове. Поверьте strncpy() из Си будет более оптимизирована чем ваша реализаций на АСМе, а вот к-либо формула, вычисляющая интеграл, которого нет в clib - лучше уже на асме, особенно если оно вычисляется в цикле..
Я всегда работал в командах, где рядом были гики.
Они могли часами ковыряться в исходниках, спорить о фреймворках, разбирать архитектуры до последнего байта.
И я часто чувствовал себя самозванцем.
Я не получал удовольствия от бесконечного копания в технологиях.
Меня всегда больше заводила другая часть - продукт.
Чтобы было что показать людям. Чтобы оно работало и решало задачу.
И вот недавно я наткнулся на простую мысль: есть два типа разработчиков.
Когда я это понял — многое встало на свои места.
Я перестал сравнивать себя с теми, кто живёт кодом ради кода.
Я нашёл отдушину в пет-проектах и indie-hacking. Там как раз важнее другое — скорость, гипотезы, первые пользователи.
💡 Поэтому если ты тоже чувствуешь синдром самозванца — попробуй честно ответить себе: кто ты?
Гик или продуктовый.
И тогда сравнивать станет проще, а работать легче.
Я делюсь такими наблюдениями про код, проекты и indie-hacking у себя в телеге. Если эта тема отзывается — заглядывайте, ссылка в профиле
О проекте: Пишем один код - собираем на разные 8 бит МК!
https://vm5277.ru - это универсальное решение для embedded-разработки, которое позволяет сократить время создания прошивки для 8 бит микроконтроллеров в разы.
Как это работает?
Что входит в решение:
Ключевые преимущества:
Проект находится на ранней стадии, но я активно над ним работаю. Уже можно видеть, как высокоуровневый код на Java-подобном языке превращается в чистый и эффективный ассемблер! Это ещё не итоговый вариант, но прогресс уже есть.
Что уже работает в этом примере:
Также приведу одну из функций RTOS(код сырой, может содержать ошибки)
Ключевые фрагменты сгенерированного ассемблерного кода:
1. Метаданные класса:
Компилятор автоматически формирует структуру для поддержки RTTI (Run-Time Type Information), необходимую для instanceof.
2. Динамическое создание объекта в куче:
Код конструктора new Byte(0x08) транслируется в вызов менеджера динамической памяти (os_dram_alloc) и инициализацию полей.
3. Проверка типа (is / instanceof):
Оператор if(b1 is Byte) компилируется в вызов процедуры j8bproc_instanceof_nr, которая проверяет метаданные объекта.
4. Полиморфный вызов метода:
Вызов b1.toByte() через интерфейс Number преобразуется в универсальный механизм поиска и диспетчеризации метода.
5. Интеграция с системными сервисами:
Вывод в "консоль" (System.out) — это вызов системного сервиса ОСРВ.
Что это значит?
Это доказывает, что подход vm5277 работоспособен. Мы можем писать на высокоуровневом ООП-языке, а под капотом получать код, который:
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Продолжая работать над скилами, заметил, что некоторые атакующие скилы можно направить на себя.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Высокочувствительный модуль цвета TCS3472, который способен определять RGB цвета (красный, зеленый, синий), и светить именно тем светом, цвет предмета которого был поднесён к датчику, потребляя при этом доли миллиампер и имеет широкую область применения. Кстати, стоит такой 138 руб. Ссылка на него
Многие новички в программировании совершают эту ошибку — пытаются написать всё и сразу. Говорю им, что нужно разбивать на подзадачи и писать маленькими порциями — всё равно пишут всё сразу, а потом ищут ошибки сразу по всему коду. Вместо того, чтобы отлавливать их на маленьких кусочках.
Начинающим вообще каждые 2-3 строчки лучше запускать. 10 строк кода уже много, уже тяжеловато в них ориентироваться. Но вот пишут, делают ошибки, искать их и исправлять ещё не умеют, поэтому при исправлении часто только ещё сильнее ломают... Сколько мучений на ровном месте.
И нет, я не всегда специально затягиваю посты до последнего. Чаще просто лень и внезапно осознанный дедлайн.
Одна из частых ошибок молодых программистов — экономия времени на чтении. Читают текст недостаточно внимательно, не понимают, что требуется, как именно должен быть оформлен результат — и создают вообще не ту программу, тратя кучу времени.
Читать нужно раз 5. Даже если там 2 строчки — 5 раз хотя бы. Тогда шансов так ошибиться гораздо меньше.
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
В первом же квесте Fighter's Tutorial (даёт SP и карту мира) столкнулся с любопытным моментом. Охота на внешне одинаковых NPC, но на деле разных!
Речь пойдет только о квесте для людей на острове Talking Island Village.
В чём подвох?
В мире Lineage есть два NPC с одинаковым именем - Bearded Keltir.
Внутри сервера это разные NPC: ID 12082(tuto_keltir) и ID 481(keltir).
По квесту Fighter's Tutorial надо добыть Keltir Fang.
Убивайте Bearded Keltir, пока не получите Keltir Fang x4.
Как различать Bearded Keltir?
У этих NPC есть несколько зон spawn'a. Некоторые зоны пересекаются и в одной зоне могут находиться разные Bearded Keltir.
Так например если вы решите проходить квест возле Talking Island Village то вот на что надо обратить внимание:
* Keltir Fang падает с шансом в 100%. Если не упал, то вы убили не того NPC.
* С нужного Bearded Keltir не падает дроп. Дроп у ID 12082(tuto_keltir) отсутствует.
Вывод
Лучше всего проходить квест возле Cedric's Training Hall так как там одна из зон появления Bearded Keltir они же ID 12082(tuto_keltir).
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
При добавлении SoulShot функционала не добавил проверку не только на наличие оружия, но и кто атакует — игрок или NPC. Как итог теперь все атакуют с помощью SoulShot.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Я решил создать игру при помощи нейросети. Читал, что люди
заморачиваются, используют по несколько нейросетей для разных задач,
максимально подробно всё описывают. Мне было впадлу. Поэтому я скинул
всё на chatgpt. "Разработай 3д песочницу с возможностью строительства.
Вся разработка на тебе"
Что я могу сказать. Chatgpt вообще не
приспособлен для такого. Он пишет каждый раз код с нуля. Когда
количество строк подходит к 300, он начинает удалять часть кода и
ставить заглушки.
Следующим я скачал windsurf. Это редактор основанный на vs
code с встроенной нейронкой swe-1. (там есть ещё, но они за кредиты. А
мне дали за регистрацию бесплатный доступ к swe-1 на две недели) Уже
получше. Выбираешь папку и она даже сама может создавать файлы. Даже
ctrl-c ctrl-v делать не надо. каааайф. Swe-1 уже не удаляет предыдущий
код. Он может работать с файлами в несколько тысяч строк.
Минусы:
пиздец какой медленный. Куча багов. За 5 часов мы создали человечка в
космосе, корабль. Подошли к управлению кораблем и потом игра вконец
сломалась. На экране полнейший пиздец, он потратил 100+ сообщений на
исправление багов и у него нихуя не вышло. Думаю, если проявить
терпение, то впринципе в теории он может сделать игру, но... за это
время проще самому выучить программирование и самому всё сделать
Далее я купил подписку на copilot. У него такие же проблемы. Он работает побыстрее, но после определенного момента игра ломается. Багов столько, что он их правит по 100-200 сообщений и у него нихуя не получается.
Ещё у copilot есть лимиты. И также хочу сказать, что я сталкивался с лимитом даже на модель 4.1. хотя на самом сайте майкрософт написано, что лимитов нет.
Sorry, you have exhausted the agent mode usage limit. Please switch to ask mode and try again later.
Майкрософт пидарасы.
А ещё если вы хоить ненадолго зайдете с русского ip в свой
аккаунт, его заблочат. Я случайно открыл vs code без впн и мне ак
заблокировали. Пришлось второй аккаунт покупать. Microsoft вдвойне
пидарасы.
Могли, как теже openai просто не давать доступ с рос.
айпи и всё. Я бывает случайно chatgpt открываю без впн, они просто не
дают доступ и всё. Включаю впн и свободно пользуюсь. Нахуй сразу аккаунт
блочить? Мрази ебаные.
Я устал от нейросетей... Пойду расслаблюсь, посмотрю боку но пико. Прикоснусь к гениальному.
Мне сказали, что там сюжет неплохой. Попробую обзор на него сделать
Сразу хочу внести ясность. Я не экстремист и не пропагандирую ЛГБТ. Я за Россию и Боженьку Путина. Я ему даже регулярно молюсь. Не сажайте плз
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Копаясь в серверных файлах наткнулся на пасхалку.
На острове Talking Island Village в храме Einhasad есть два NPC, которые стоят рядом друг с другом и имеют имена Harrys и Petron.
У каждого NPC на сервере есть цифровой ID и текстовый ID.
Так, например, для Harrys(ID 7035) его текстовый ID - Harry, а для Petron(ID 7036) - Potter
Таким образом, если сложить их ID, получится - Harry Potter
npc_beginguild_coach7035[harry]level=70...npc_end
npc_begin
guild_coach
7036
[potter]
level=70
...
npc_end
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Наверное невозможно найти человека, который бы никогда не встречал программ на Java. Сначала телефоны с J2ME, потом Android, который использует свои варианты реализации JVM и свой байткод. Даже многие сим-карты внутри используют свою оптимизированную разновидность Java.
Даже JavaScript обязан своим названием популярности Java, хотя и не имеет с ней прямого родства.
(При этом некоторый промежуток времени существовали Java-апплеты)
По официальной информации, 23 мая 1995 года, ровно 30 лет назад, Sun Microsystems выпустили первую бета-версию Java. Первая полноценная официальная версия JDK 1.0 выйдет только 23 января 1996.
Изначально язык должен был называться "Oak" (дуб, который рос рядом с офисом разработчиков), после чего был переименован "Green" (зеленый), а потом в честь кофе с острова Ява. А в качестве целей языка ставились:
Синтаксис был практически полностью позаимствован из C++, который уже был знаком многим программистам. Были выброшены процедурные артефакты C в виде "бродячих" глобальных переменных и функций, всё должно принадлежать классам. Также выбросили некоторые "неудачные" решения C++, к примеру дружественные классы, множественное наследование (его заменили интерфейсы), перегрузку операторов (зачем?!) и еще немного. Вместо ручного управления памятью было решено внедрить сборщик мусора, чтобы облегчить разработку и снизить количество ошибок и уязвимостей.
Главной особенностью языка стала концепция "напиши единожды, запускай везде" (хотя правильнее это будет назвать "напиши единожды, отлаживай везде" из-за различных реализаций и окружения), возможная благодаря тому, что код сначала компилируется в стандартизированный и независимый от процессора байткод для виртуальной машины (JVM), а в машинный код переводится только на машине потребителя, учитывая её архитектуру и особенности. Получается что-то среднее между интерпретируемым и компилируемым языком.
Язык получился... интересным.
То, что планировалось простым, в итоге превратилось в многословное нечто, а в сочетании со всякими архитектурными извращениями стало притчей во языцех о громоздкости корпоративного стиля. Потом появились совместимые с JVM альтернативы по типу Kotlin, ибо Java старательно игнорирует и не вводит ничего, что бы могло замазать многословность и неудобство. Android давно официально рекомендует использовать его вместо Java.
Добиться высокой скорости на интерпретируемом языке со сборкой мусора тоже проблемно. JIT замедляет запуск и жрет память, AOT поддерживается плохо и с ним невозможно реализовать некоторые вещи (кодогенерацию, к примеру), плюс остается сборщик мусора. Плюс некоторые не очень удачные решения и ограничения, тоже не способствующие высокой производительности (видно на контрасте с C#, в котором их исправили).
Тем не менее, Java на очень долгое время стала самым востребованным языком и отлично продолжает жить и сейчас, находясь на 4 месте популярности по версии TIOBE и дважды становясь языком года (в 2005 и 2015).
Хотел написать про работу системы управления памятью, но понял, что для полноценной статьи у меня не хватает практических знаний. Поэтому кратко
Помимо стека, о котором было рассказано в прошлой статье и который содержит локальные переменные, в "потребительской" программе в среднестатистической ОС еще бывают глобальные переменные и динамическая память. Глобальные переменные описываются внутри сегментов .bss и .data, резервируясь в памяти сразу после загрузки образа программы (по-правильному это называется процессом).
Динамическая память иначе называется кучей, так как представляет из себя кучу динамических данных, который могут появляться и исчезать во время работы.
Для работы с динамической памятью в C существует malloc(size_t), запрашивающий (выделяющий, аллоцирующий) у ОС кусок памяти указанного размера и возвращающий указатель на первый байт, и free(void *), принимающий этот указатель и возвращающий (освобождающий) кусок назад в ОС.
В C++ есть операторы new и delete, они устроены гораздо сложнее и я не буду их рассматривать, ибо не пишу на нем. Помимо запроса памяти у ОС они занимаются ее инициализацией.
Если по какой-то причине стандартной библиотеки языка в наличии не имеется, то в Windows за память отвечает HeapAlloc и устаревшие GlobalAlloc и LocalAlloc из времен Windows 3.11 (malloc к ним и обращается внутри. Еще есть парные HeapFree, GlobalFree и LocalFree). Они предоставляют больше контроля над результатом, но проприетарны для Windows. А полный список функций для работы с памятью в WinAPI есть здесь, их сотни на любой случай жизни. Можно даже внутри контекста чужого процесса выделить или освободить кусок памяти (обычно такое используется вирусами и прочей нечистью).
А что будет, если постоянно выделять, но не освобождать? А еще лучше: выделять, но терять адреса выделенной памяти. ОС достаточно быстро подскажет правильный ответ.
В теории есть несколько возможных выходов, можно даже обработать подобный случай и, к примеру, экстренно освободить всё выделенное (только если не терять указатели) или попытаться спасти нужные данные из разваливающейся программы, но если никаких действий не предпринять, то ОС заставит процесс экстренно прекратить свою деятельность и существование.
Случай с потерей указателей на выделенную память называется утечкой памяти и ее последствия необратимы. Но как только ОС завершает выполнение процесса, то вся его память, даже утекшая, становится снова свободной.
Отслеживание правильности выделения и освобождения памяти является достаточно сложной и опасной задачей, особенно если требуется обеспечивать стабильность и безопасность (лучше даже не думать, что будет, если рукожопый программист забьет на MISRA и устроит утечку памяти в подсистеме тормозов в Тесле), и практически невыполнимой в некоторых парадигмах (особенно в функциональном программировании). Поэтому еще с древнейших времен (с 1959 года) существуют языки со сборкой мусора:
Но несмотря не это, практически все современные языки используют сборку мусора, кроме C++ и Rust. C++ по большей части перешел на умные указатели, которые тоже считают количество активных ссылок, но делают это без сборщика мусора. А Rust использует свой уникальный Borrow Checker, который понимают только растофилы.
На этом вроде у меня всё.