Как я могу создать этот хэш? - PullRequest
0 голосов
/ 12 июня 2009

Я новичок в программировании (только начал!) И недавно ударил стену. Я делаю фанатский сайт для World of Warcraft и хочу дать ссылку на популярный сайт (wowhead.com). На следующей странице показано, что я пытаюсь выяснить: http://www.wowhead.com/?talent#ozxZ0xfcRMhuVurhstVhc0c

Насколько я понимаю, часть ссылки "ozxZ0xfcRMhuVurhstVhc0c" является хешем. Он содержит всю информацию об этой конкретной спецификации таланта на странице и изменяется всякий раз, когда я добавляю или удаляю баллы в талант. Я хочу иметь возможность воссоздать эту часть, чтобы затем я мог связать своих пользователей напрямую с wowhead для просмотра их деревьев талантов, но я не представлял себе ни малейшей идеи, как это сделать. Кто-нибудь может дать какое-нибудь руководство?

Ответы [ 6 ]

8 голосов
/ 12 июня 2009

Первый символ указывает на класс:

0 Druid
c Hunter
o Mage
s Paladin
b Priest
f Rogue
h Shaman
I Warlock
L Warrior
j Death Knight

Остальные символы указывают, где в каждом дереве были выделены точки. Каждое дерево является отдельным, разделенным «Z». Так, например, если все точки находятся в третьем дереве, тогда 2-й и 3-й символы будут "ZZ", обозначая "конец первого дерева" и "конец второго дерева".

Чтобы сгенерировать код для данного дерева, разбейте таланты на пары, идущие слева направо и сверху вниз. Каждая пара талантов представлена ​​одним персонажем. Так, например, в сегменте дерева Крови ДК первый символ будет указывать количество очков, выделенных для Мясника и Подрывной деятельности, а второй символ будет обозначать Барьерный клинок и Доспех с клинком.

Какой символ представляет каждое распределение среди пары? Я уверен, что есть алгоритм, вероятно, основанный на наборе символов ASCII, но все, что я до сих пор работал, - это таблица поиска. Найдите количество очков во втором таланте вдоль верхней части и количество очков во втором таланте вдоль левой стороны. Кодированный символ находится на пересечении.

  0 1 2 3 4 5
0 0 o b h L x
1 z k d u p t
2 M R r G T g
3 c s f I j e
4 m a w N n v
5 V q i A y E

Так что, если у нашего Рыцаря Смерти есть одно очко в Мясничестве и два очка в Подрывной деятельности, первым персонажем является 'R'. Если вместо этого мы не ставим точки в этих двух и пяти в Blade Barrier, первые два символа будут «0x». Конечные '0' (все остальные пары в дереве без выделенных точек) могут быть опущены, также как и конечные разделители 'Z' (когда в последующих деревьях нет точек). В одном последнем примере весь код DK с единственной точкой в ​​Стойкости был бы «jZ0o»: «Рыцарь смерти», «Конец первого дерева», «Нет точек в первой паре талантов», «один Точка в первом таланте второй пары ".

Может кто-нибудь выяснить, какая функция генерирует таблицу поиска выше? Вероятно, есть подсказка в кодах для классов: в алфавитном порядке (за исключением DK, который был добавлен в игру после других), они соответствуют серии в таблице поиска (0,0), (0,3 ), (1,0), (1,3), (2,0) и т. Д.

6 голосов
/ 12 июня 2009

Если вы перейдете на http://www.wowhead.com/?talent и начнете использовать дерево талантов, вы увидите загадочный код, который создается в адресной строке, когда вы нажимаете на различные поля. Так что это определенно не хеш, а какая-то закодированная структура данных.

Поскольку код создается по мере нажатия, логика построения кода будет в JavaScript на этой странице.

Так что мой совет: сделайте просмотр источника на странице, загрузите файлы JavaScript и посмотрите на них.

5 голосов
/ 12 июня 2009

Я думаю, что это не хеш-значение, потому что хеш-значения обычно являются односторонними. Это означает, что вы не можете (легко) восстановить исходную информацию, из которой был создан хеш-код.

Лучше всего было бы связаться с кем-то из wowhead.com и спросить его, как интерпретировать эту информацию. Я уверен, что они помогут вам с некоторой информацией о том, какой тип кодирования они используют для параметров. Но без какой-либо помощи разработчиков из wowhead.com практически невозможно выяснить, какая информация закодирована в этом параметре.

Я даже не уверен, что упомянутый вами параметр содержит таланты вашего персонажа. Может быть, это просто идентификатор сеанса или что-то в этом роде. Посмотрите данные публикации, которые ваш браузер отправляет на сервер, они могут содержать скрытое поле со значением, которое вы ищете (вы можете использовать Tamper Data Firefox Addon ).

1 голос
/ 12 июня 2009

Я не думаю, что ozxZ0xfcRMhuVurhstVhc0c является хеш-значением. Я думаю, что это ключ (вероятно, зашифрованный / закодированный каким-то образом). Сервер использует этот ключ для извлечения информации из своей базы данных. Поскольку у вас нет доступа к базе данных, вы не знаете, какой ключ нужен, не говоря уже о том, как его кодировать.

0 голосов
/ 12 июня 2009

Эти хэши трудно "перепроектировать", если вы не знаете, как они были сгенерированы.

Например, это может быть:

   s1 = "random_string-" + score;
   hash = encrypt(s1) 
   ...etc

, поэтому трудно получить исходные данные из хеша (в этом вся суть).

вашей лучшей ставкой будет ссылка на профиль с самым последним счетом .. и т.д.

0 голосов
/ 12 июня 2009

Вам нужна оригинальная функция, которая генерирует хэш. Я не думаю, что это публично, хотя: (

Проверьте это: хэш-википедия

Удачи в обучении программированию!

...