Мне вот интересно, как работает код колоды? По какому принципу? Я пробовал меня пару символов, в надежде что некоторые карты поменяются, но код просто не читался.
Это система уже не работает. Кодов колод нет. Их убрали. Забудь. Не грузи себя и других.
мамкин хакер
Причём тут хакерство? Мне интересен сам принцип
Попробуй поменять буковки, только правильно, может получится :3
Очередная юзлесс-тема.
Если не работает редактирование шифра, значит, это не шифр, а учётная единица.
ну это я по рофлу написал, просто любой чел с дефолтной логикой бы взял код деки поменял там 1 карту несколько раз, чтобы понять коды карт и систему. А ты вместо такого простого действия начал подбирать символы, хотя там по самому виду кода понятно, что так просто не попадёшь в код карты.
Так тот код, что копируется из игры, это строка в формате Base64.
https://ru.wikipedia.org/wiki/Base64
Разумеется, если нарушить её целостность, шифротекст перестанет преобразовываться обратно.
То есть нагуглить https://hearthsim.info/docs/deckstrings/
это уже не дефолтная логика…
Принцип достаточно сложный! Знаешь игру Borderlands2/3?
Так вот там есть редакторы сохранений (читерство) и там система схожа, пример:
№1
AwAAAAC2M4A8V2NBE3QaEMfjZ0AcLBqP6ASUuyuEAAAAAAAAZ0AA
№2
AwAAAACy5IA8V2NBE3waEMfjZ0AcLBqP6HQCyt0VQgAAAAAAgDMgAA==
Если ты заметишь то тут отличий хватает но при этом это 1н и тот-же предмет но различается он тем что во 2м случае у этого дробовика продублирован прицел, да их тут целых джва!
Тут простая смена символов не поможет…
Я не беру получение информации из внешних источников. Я имел в виду, что чел даже не додумался вместо подбора изменять доступные данные.
Код колоды это закодированная в Base64 последовательность байт. Менять “шифр” напрямую, конечно же не стоит, это ни к чему не приведёт. Сначала нужно его раскодировать и получить оригинальные байты. А о структуре данных в этих байтах можно почитать здесь: https://hearthsim.info/docs/deckstrings/
Подробный разбор на примере
Возьмём код колоды для примера
AAEBAf0GAo+CA9a5Aw4w9wTOB8II2RXUswK8tgLy0AL9pAO1uQO2uQPXzgPV0QPQ4QMA
Base64 это просто способ записать бинарные данные с помощью букв латинского алфавита и некоторых спецсимволов. Суть в том, что такую строку можно передавать в виде текста во всевозможных чатах, постах и т.д. и с лёгкостью обмениваться данными даже там, где их передача не предусмотрена. Более подробно о Base64 рассказывать не буду, у меня цель другая. Нужно раскодировать Base64 обратно в оригинальную последовательность байт. Получается вот такое:
Последовательность
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 253
[5] => 6
[6] => 2
[7] => 143
[8] => 130
[9] => 3
[10] => 214
[11] => 185
[12] => 3
[13] => 14
[14] => 48
[15] => 247
[16] => 4
[17] => 206
[18] => 7
[19] => 194
[20] => 8
[21] => 217
[22] => 21
[23] => 212
[24] => 179
[25] => 2
[26] => 188
[27] => 182
[28] => 2
[29] => 242
[30] => 208
[31] => 2
[32] => 253
[33] => 164
[34] => 3
[35] => 181
[36] => 185
[37] => 3
[38] => 182
[39] => 185
[40] => 3
[41] => 215
[42] => 206
[43] => 3
[44] => 213
[45] => 209
[46] => 3
[47] => 208
[48] => 225
[49] => 3
[50] => 0
Как видите, каждое число довольно маленькое. В одном байте можно записать число от 0 до 255. Но карт же в игре гораздо больше, да? Прикол в том, некоторые числа занимают сразу несколько байт. Конкретно в данном случае используется VarInt. Это особый тип данных с динамическим числом байт. Конкретное число байт, занимаемое числом, зависит от размера самого числа. Если интересно, можете загуглить про это. Проходимся по массиву и считываем VarInt. Получается такое:
Последовательность
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 893
[5] => 2
[6] => 49423
[7] => 56534
[8] => 14
[9] => 48
[10] => 631
[11] => 974
[12] => 1090
[13] => 2777
[14] => 39380
[15] => 39740
[16] => 43122
[17] => 53885
[18] => 56501
[19] => 56502
[20] => 59223
[21] => 59605
[22] => 61648
[23] => 0
Всё, теперь у нас есть исходные данные, и с ними можно работать. Читаем далее инфу о структуре данных.
Первое число - резервный байт. На данный момент не используется и должен быть равен 0.
Второе число - версия. С момента введения не менялась и должна быть равна 1.
Третье число - формат. 1 - вольный, 2 - стандарт. Возможно со введением классики появится и значение 3 - классика.
Четвёртое число - количество героев. На данный момент всегда равно 1.
Пятое число - ID героя. По нему узнаётся класс колоды. При чём ID указывается конкретного скина. Так что по коду колоды можно узнать каким скином вы играете.
Шестое число - количество карт в колоде, которых по одной копии. Далее идёт перечисление их ID.
Седьмое (+число карт из шестого) число - количество карт в колоде, которых по две копии. Далее идёт перечисление их ID.
Восьмое (+число карт из седьмого+число карт из шестого) число - количество карт в колоде, которых более 2 копий. Далее идёт перечисление по 2 числа. Первое - ID карты, второе - количество копий.
Последовательность с подписью значений
[0] => 0 (Резервный байт. Должен быть равен 0.)
[1] => 1 (Версия. Должна быть равна 1.)
[2] => 1 (Формат колоды. 1 = вольный, 2 = стандарт.)
[3] => 1 (Размер массива с героем. Должен быть равен 1.)
[4] => 893 (ID героя колоды. По нему узнаётся класс.)
[5] => 2 (Количество карт в колоде, которых в ней по одной копии. Далее перечисление их ID.)
[6] => 49423
[7] => 56534
[8] => 14 (Количество карт в колоде, которых в ней по две копии. Далее перечисление их ID.)
[9] => 48
[10] => 631
[11] => 974
[12] => 1090
[13] => 2777
[14] => 39380
[15] => 39740
[16] => 43122
[17] => 53885
[18] => 56501
[19] => 56502
[20] => 59223
[21] => 59605
[22] => 61648
[23] => 0 (Количество карт в колоде, которых в ней более двух копий. Далее их перечисление, сначала ID затем количество копий.)
Ссылку на источник бы дал для приличия.
Ctrl c/ctrl f больше не модно и молодёжно?)
Источник чего? Ссылку на инфу по структуре данных я дал.
Источник статьи.
Всё что под спойлером я писал сам.
Ну оке, для раскодировки использовал сайт http://somepony.space/hsdeck/
с добавлением доп. параметра в адрес debug=1
. Но текст сам писал.