Vetalll
Пользователи-
Публикаций
18 -
Зарегистрирован
-
Посещение
-
Победитель дней
1 -
Отзывы
N/A
Vetalll стал победителем дня 27 марта 2022
Vetalll имел наиболее популярный контент!
Репутация
2Информация о Vetalll
-
Звание
Только пришел
-
И Вы абсолютно правы. Да пакеты и структуру классов я взял с лыж. Но как ПОЖО! Всю логику хотел вынести в валидаторы и юз кейсы. И классов может выйдет и больше. Хотел решить основную проблему - дублирование логики. Когда пришел пакет на отложенное действие. Атака. Есть старт а есть ее конец. Попытался вынести в отдельные классы. Чтоб не было копипасты как в лыжах - и в пакете и в классы. Вроде норм. Но много классов. Ещё я начал осознавать что тики и не нужны. Ну по факту только бег и отдельные менеджеры типа осад и анонсов. В общем я для этого и пописываю . Научиться в что-то большое. Громоздкое. Так как мой опыт ограничен апи бекендом и Андроид. И ещё раз. Вы точно все подметили. Но я хз как по другому. Буду рад за хороший линк в динамик сорцы.
-
Нет, я не делаю ничего схожего с л2ж и подобными сборкми. Можете ознакомиться тут https://github.com/lebedynskyi/L2Server (дай бог есть 2% от всего сервера) Я посмотрел в исходник именно изза того, что мои значения очень сильно расходились с тем что присылал клиент на валидацию. Пришлось заглянуть в л2ж. И вот да. Вы говорите так, как я увидел в Люцера. Просто каждые условных 360 МС просчитать дистанцию на эти 360 МС. А в Акис - запоминается время последнего расчета и в след раз при тике идет расчет от реально пройденного времени..
-
Собсвтенно пишу свой сервер с нуля(в архитектурном плане) в целях самообразования. Столкнулся с вопросом расчета координат во время перемещения. Загуглил формулы - сделал. Относительно все ок. ОТНОСИТЕЛЬНО! решил сравнить с исходниками. есть такая строчка в Lucera: double distPassed = getStat().getMoveSpeed() * (gameTicks - m._moveTimestamp) / GameTimeController.TICKS_PER_SECOND; В Acis: double distPassed = (getStat().getMoveSpeed() * (time - m._moveTimestamp)) / 1000 Суть в чем.. Я и Акис сделал расчет дистанции от реально пройденного времени для каждого персонажа независимо. Люцера же считает позицию всех игроков за 1 тик. Что как по мне - на высоком онлайне может привести к неправильному расчету позиции. Но целостности данных сервера.. если лагают, то лагают все. Вопросы: - правильна ли моя догадка - как вообще єто правильно должно быть. - Есть ли реальные причины почему так сделали на Люцере P.S. Мой алгоритм (загугленный) чутка отстаетсяя от пакета ValidatePosition от клиента. Что может быть связанно как раз с тик рейтом на клиенте.
-
Ну и дурак.. есть скрипты даже для Пилота.. От туда и черпнул идею. С Января на Реборне стоит SmartGuard.. Работает на ура по сей день. Каптча парсится.. Спойл спойлится.. Манор манорится и здается в 2 замка с 99% вероятностью
-
Да.. проигрывает и колосально.. На выходе все равно это смесь Автокликера + частички разума.. Это все делалось для личного пользования.. Акуму я писал еще весной. Там реально трудно отхендлить это все. а захват делается примитивно.. просто скрин всего экрана..
-
Да.. как первая часть.. И она контрится тем же смарт гвардом на проверку isInjected event Но если посомтреть глубже class ArduinoKeyboard(Keyboard): Маленькая железяка которая за $5 + OpenCV. = обходит абсолютно все. Нет инжекта в процессы или память или еще куда.. просто парсинг екрана и вытаскивание всей инфы. Управление клиентов через физичесскую клавиатуру через сокет с ардуинкой. ПРУФ -
-
Ну чисто для боевого сервера мой вариант не проканает.. Но моя основная цель - Сделать Архитектуру довольно большого сервера пименно по SOLID и с паттернами.. Так как сказать визитку на Гит хабе. Если интересно вот https://github.com/lebedynskyi/L2Server А еще если покапаться в моих репах то там и бот который обходит Акуму )
-
Не ты не понял.. байты это я все понимаю. Просто сама логика. К примеру Пакет Чат.. Socket -> Client -> Player -> World -> Player -> Client -> Socket Получается классы знаю про классы на уровень выше. А не должны.. в моем понимании должно быть что-то КАКАЯТО_МАГИЯ -> World -> Player -> Client -> Socket и вот вся суть в КАКАЯТО_МАГИЯ. разве что подписку реализовать на пакеты...
-
Всем привет.. как хобби ковыряю сервер снуля.. были тут от меня вопросы.. Я программист с опытом на разных платформах. Но есть одна задача которую я никак не могу решить... Это архитектура без круговых зависимостей. К примеру. есть игрок который должен знать о мире который должен знать о всех игроках. что-то подобное с сокетами. Есть сокет который завернут в клиент который внутри игрока. и вот когда приходит новый пакет то клиент должен дать команду игроку или миру. ну потом обратная реакция от игрока или мира. Кто-то пытался вообще решить эту проблему? Сделать красиво? Часть проблемы могу решить через Observer паттерн. Но часть нет. особенно та что с сокетом. Ни литературы ни статей толковых не нашел.
-
В том что не могу найти. Так как я пишу с нуля.. Просто хотел заспавнить мобов на своем (самописном) сервере. Но в итоге к приеру Варка есть. А гремлинов нет..
-
Ковыряю исходники Акис как небольшой туториал для написания своего сервера и не нашел в spawnlist спавна гремлинов. Да, понимаю что в своем сервере я могу из заспавнить сам. Достточно отправить NpcInfo пакет.. Но вопрос именно в акисе. Где и как они могут спанится? Смотрел на зоны, регионы.. Нигде не нашел.. Ктот подскажет? То что спавн отсутствует в акисе я не поверю.. сборку пилят 10+ лет.
-
Спасибо большое.. Но Вы же понимаете что сама по себе идея так себе. Что-то деальноего на выходе не будет... дай бог мне закончить спавн НПЦ с мобами. Даже боюсь подумать что там с диалогами.. Моя основные цели были: - реально понять как работают Сокет Селекторы - Понять шифрование. Основное понял, не пойму как работает XOR в гейм сервере и Хеш сумы в логине - Сделать более мнее норм архитектуру без кучи статики (уже на старте куча вопросов и цикличесских зависимостей. Как плееру отправить пакет если плеер это часть коннектед клиента ?)
-
Ага. Тогда заведу сервер и подебажу. Главное что не нехватка другого пакета. И так же меня смущают нули. Статы то я распарсил
-
Я пишу свой Интерлюд сервер с нуля. Не спрашивайте зайчем - чисто для фана и для практики архитектуры, много-поточности, корутин и тд и тп. Подглядываю в исходники aCis для структуры пакетов. По этой ссылке не все понятно что и когда слать - http://www.la2kings.ru/la2bot/packets.html#UserInfo Суть вопроса - Дописал я свой сервер уже до входа в игру. Получаю пакет 0x03 EnterWorld и в ответ шлю 0x04 UserInfo Клиент загружается и появляется в точке респа все ОК. Но Клиент не отображает имя. Если открыть инвентарь и закрыть то клиент крашится с еррором связанным с именем. Я так понимаю что я шлю не правильный пакет 0x04 UserInfo или надо еще что-то отправить клиенту. В Акисе пакетов много. Копировать без разбору яне планирую. Есть идеи куда копать: В Юзер Инфо или что-то еще отправить?
-
Все проблему решил.. Я был прав на счет пункта 2 Имя персонажа шифруется XOR ключем. Все пакеты ГеймСервера шифруются XOR ключем. XOR ключ оказывается не простой.. а 16 байтовый массив где первые 8 байт рандом, а вторые 8 байт это статик значения. (Вот тут и была моя проблема.. я юзал просто рандом на все 16 байт) Тему можно закрыть или вообще удалить.. Спасибо что хоть попытались помочь.
- 4 ответа
-
- 1