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

Vetalll

Пользователи
  • Публикаций

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

  • Посещение

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

    1
  • Отзывы

    N/A

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

  1. И Вы абсолютно правы. Да пакеты и структуру классов я взял с лыж. Но как ПОЖО! Всю логику хотел вынести в валидаторы и юз кейсы. И классов может выйдет и больше. Хотел решить основную проблему - дублирование логики. Когда пришел пакет на отложенное действие. Атака. Есть старт а есть ее конец. Попытался вынести в отдельные классы. Чтоб не было копипасты как в лыжах - и в пакете и в классы. Вроде норм. Но много классов. Ещё я начал осознавать что тики и не нужны. Ну по факту только бег и отдельные менеджеры типа осад и анонсов. В общем я для этого и пописываю . Научиться в что-то большое. Громоздкое. Так как мой опыт ограничен апи бекендом и Андроид. И ещё раз. Вы точно все подметили. Но я хз как по другому. Буду рад за хороший линк в динамик сорцы.
  2. Нет, я не делаю ничего схожего с л2ж и подобными сборкми. Можете ознакомиться тут https://github.com/lebedynskyi/L2Server (дай бог есть 2% от всего сервера) Я посмотрел в исходник именно изза того, что мои значения очень сильно расходились с тем что присылал клиент на валидацию. Пришлось заглянуть в л2ж. И вот да. Вы говорите так, как я увидел в Люцера. Просто каждые условных 360 МС просчитать дистанцию на эти 360 МС. А в Акис - запоминается время последнего расчета и в след раз при тике идет расчет от реально пройденного времени..
  3. Собсвтенно пишу свой сервер с нуля(в архитектурном плане) в целях самообразования. Столкнулся с вопросом расчета координат во время перемещения. Загуглил формулы - сделал. Относительно все ок. ОТНОСИТЕЛЬНО! решил сравнить с исходниками. есть такая строчка в 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 от клиента. Что может быть связанно как раз с тик рейтом на клиенте.
  4. Ну и дурак.. есть скрипты даже для Пилота.. От туда и черпнул идею. С Января на Реборне стоит SmartGuard.. Работает на ура по сей день. Каптча парсится.. Спойл спойлится.. Манор манорится и здается в 2 замка с 99% вероятностью
  5. Да.. проигрывает и колосально.. На выходе все равно это смесь Автокликера + частички разума.. Это все делалось для личного пользования.. Акуму я писал еще весной. Там реально трудно отхендлить это все. а захват делается примитивно.. просто скрин всего экрана..
  6. Да.. как первая часть.. И она контрится тем же смарт гвардом на проверку isInjected event Но если посомтреть глубже class ArduinoKeyboard(Keyboard): Маленькая железяка которая за $5 + OpenCV. = обходит абсолютно все. Нет инжекта в процессы или память или еще куда.. просто парсинг екрана и вытаскивание всей инфы. Управление клиентов через физичесскую клавиатуру через сокет с ардуинкой. ПРУФ -
  7. Ну чисто для боевого сервера мой вариант не проканает.. Но моя основная цель - Сделать Архитектуру довольно большого сервера пименно по SOLID и с паттернами.. Так как сказать визитку на Гит хабе. Если интересно вот https://github.com/lebedynskyi/L2Server А еще если покапаться в моих репах то там и бот который обходит Акуму )
  8. Не ты не понял.. байты это я все понимаю. Просто сама логика. К примеру Пакет Чат.. Socket -> Client -> Player -> World -> Player -> Client -> Socket Получается классы знаю про классы на уровень выше. А не должны.. в моем понимании должно быть что-то КАКАЯТО_МАГИЯ -> World -> Player -> Client -> Socket и вот вся суть в КАКАЯТО_МАГИЯ. разве что подписку реализовать на пакеты...
  9. Всем привет.. как хобби ковыряю сервер снуля.. были тут от меня вопросы.. Я программист с опытом на разных платформах. Но есть одна задача которую я никак не могу решить... Это архитектура без круговых зависимостей. К примеру. есть игрок который должен знать о мире который должен знать о всех игроках. что-то подобное с сокетами. Есть сокет который завернут в клиент который внутри игрока. и вот когда приходит новый пакет то клиент должен дать команду игроку или миру. ну потом обратная реакция от игрока или мира. Кто-то пытался вообще решить эту проблему? Сделать красиво? Часть проблемы могу решить через Observer паттерн. Но часть нет. особенно та что с сокетом. Ни литературы ни статей толковых не нашел.
  10. В том что не могу найти. Так как я пишу с нуля.. Просто хотел заспавнить мобов на своем (самописном) сервере. Но в итоге к приеру Варка есть. А гремлинов нет..
  11. Ковыряю исходники Акис как небольшой туториал для написания своего сервера и не нашел в spawnlist спавна гремлинов. Да, понимаю что в своем сервере я могу из заспавнить сам. Достточно отправить NpcInfo пакет.. Но вопрос именно в акисе. Где и как они могут спанится? Смотрел на зоны, регионы.. Нигде не нашел.. Ктот подскажет? То что спавн отсутствует в акисе я не поверю.. сборку пилят 10+ лет.
  12. Спасибо большое.. Но Вы же понимаете что сама по себе идея так себе. Что-то деальноего на выходе не будет... дай бог мне закончить спавн НПЦ с мобами. Даже боюсь подумать что там с диалогами.. Моя основные цели были: - реально понять как работают Сокет Селекторы - Понять шифрование. Основное понял, не пойму как работает XOR в гейм сервере и Хеш сумы в логине - Сделать более мнее норм архитектуру без кучи статики (уже на старте куча вопросов и цикличесских зависимостей. Как плееру отправить пакет если плеер это часть коннектед клиента ?)
  13. Ага. Тогда заведу сервер и подебажу. Главное что не нехватка другого пакета. И так же меня смущают нули. Статы то я распарсил
  14. Я пишу свой Интерлюд сервер с нуля. Не спрашивайте зайчем - чисто для фана и для практики архитектуры, много-поточности, корутин и тд и тп. Подглядываю в исходники aCis для структуры пакетов. По этой ссылке не все понятно что и когда слать - http://www.la2kings.ru/la2bot/packets.html#UserInfo Суть вопроса - Дописал я свой сервер уже до входа в игру. Получаю пакет 0x03 EnterWorld и в ответ шлю 0x04 UserInfo Клиент загружается и появляется в точке респа все ОК. Но Клиент не отображает имя. Если открыть инвентарь и закрыть то клиент крашится с еррором связанным с именем. Я так понимаю что я шлю не правильный пакет 0x04 UserInfo или надо еще что-то отправить клиенту. В Акисе пакетов много. Копировать без разбору яне планирую. Есть идеи куда копать: В Юзер Инфо или что-то еще отправить?
  15. Все проблему решил.. Я был прав на счет пункта 2 Имя персонажа шифруется XOR ключем. Все пакеты ГеймСервера шифруются XOR ключем. XOR ключ оказывается не простой.. а 16 байтовый массив где первые 8 байт рандом, а вторые 8 байт это статик значения. (Вот тут и была моя проблема.. я юзал просто рандом на все 16 байт) Тему можно закрыть или вообще удалить.. Спасибо что хоть попытались помочь.
  16. Да. Это в Логин Сервере - тут у меня все ок. А вот в Гейм сервере. В aCis. сборке он называется AuthLogin. Подправлю название пакета в топике Посмотрите пример с CharacterCreate в топике выше. проблемы в чтении имени в этом пакете в чтении никнейма более 3х символов public final class CharacterCreate extends L2GameClientPacket { @Override protected void readImpl() { _name = readS(); _race = readD(); _sex = (byte) readD(); _classId = readD(); _int = readD(); _str = readD(); _con = readD(); _men = readD(); _dex = readD(); _wit = readD(); _hairStyle = (byte) readD(); _hairColor = (byte) readD(); _face = (byte) readD(); } } Ну и в AuthLogin в чтении аккаунта длинее 3х символов Собсвтено я думаю тут 2 проблемы - Корявый патч или папка систем (У меня Win 10 x 64) - Не правильно инициализирую шифрование в CryptPacket / CryprInit
  17. Я пишу свой Интерлюд сервер с нуля. Не спрашивайте зайчем - чисто для фана и для практики архитектуры, много-поточности, корутин и тд и тп. В момент когда клиент подключается к гейм серверу есть 2 основых пакета: 08 - RequestAuthLogin 0B - CharacterCreate Первый пакет шлет аккаунт а второй имя создаваемого перса. Так вот проблема в том что клиент шлет только 3 символа правильно. Если аккаунт или имя длинее 3х символов то все ломается. Вот расшифрованный пакет CharacterCreate с именем нового чара TheName: [67, 0, 11, 84, 0, 104, 0, 101, 0, 78, 63, 31, -54, 69, 45, 16, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 4, 83, 0, 86, 86, 83, 1, 9, 2, 9, 1, 81, 84, 81, 9, 85, 86, 9, 3, 4, 7, 5, 85, 4, 6, 85, 4, 6, 9, 4, 81, 1, 8, +65,436 more] Вопрос в начале пакета 67 - Длина пакета 0,11 - Оп код 84,0 - 'T' 104,0 - 'h' 101,0 - 'e' 78 - 'N'. (1 байт вместо 2) !!!!!!! 63, 31, -54 и так далее уже какойто мусор Я подглядываю в фришные исхдники для всяких частей по типу структуры пакета и шифрации. Шифрование должно работать ОК (В теории, так как я брал с aCis исходников) Запустить Акис сервер пока нет возможности.. На выходных уже буду пробовать..
×
×
  • Создать...