• Просьба не публиковать сообщения с предложениями продажи модов или сборок!

    Мы против использования и перепродажи слитых модов и переделок на их основе. Остальное также сложно верифицировать, поэтому в целом пока что запрещаем эту тему на сайте.

Преобразование из Хэша в Название модели

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
924
Мы можем сделать так:
JavaScript:
const skinHash = mp.joaat('player_zero'); // например, результат 787878
А можно как-то сделать обратное преобразование и из 787878получить player_zero
Может кто сталкивался? Я что-то не могу найти простое решение.
 
Решение
Мы можем сделать так:
JavaScript:
const skinHash = mp.joaat('player_zero'); // например, результат 787878
А можно как-то сделать обратное преобразование и из 787878получить player_zero
Может кто сталкивался? Я что-то не могу найти простое решение.
нельзя, joaat это именно хеш-функция результат её выполнения не содержит ни в каком виде информации об входящих в неё данных.

есть вариант брута или поиска "настоящих названий" и вычисления для них хеша

Вот например мой вариант:
JavaScript:
function jenkinsOneAtATimeHashSigned(key){
    var keyLowered = key.toLowerCase();
    var length = keyLowered.length;
    var hash, i;
    for (hash = i = 0; i < length; i++){
        hash += keyLowered.charCodeAt(i);
        hash +=...
Мы можем сделать так:
JavaScript:
const skinHash = mp.joaat('player_zero'); // например, результат 787878
А можно как-то сделать обратное преобразование и из 787878получить player_zero
Может кто сталкивался? Я что-то не могу найти простое решение.
нельзя, joaat это именно хеш-функция результат её выполнения не содержит ни в каком виде информации об входящих в неё данных.

есть вариант брута или поиска "настоящих названий" и вычисления для них хеша

Вот например мой вариант:
JavaScript:
function jenkinsOneAtATimeHashSigned(key){
    var keyLowered = key.toLowerCase();
    var length = keyLowered.length;
    var hash, i;
    for (hash = i = 0; i < length; i++){
        hash += keyLowered.charCodeAt(i);
        hash += (hash << 10);
        hash ^= (hash >>> 6);
    }
    hash += (hash << 3);
    hash ^= (hash >>> 11);
    hash += (hash << 15);
    return hash;
}
function convertToUnsigned(value){
    return (value >>> 0);
}
[
    "FE_MENU_VERSION_SP_PAUSE",
"FE_MENU_VERSION_MP_PAUSE",
"FE_MENU_VERSION_CREATOR_PAUSE",
"FE_MENU_VERSION_CUTSCENE_PAUSE",
"FE_MENU_VERSION_SAVEGAME",
"FE_MENU_VERSION_PRE_LOBBY",
"FE_MENU_VERSION_LOBBY",
"FE_MENU_VERSION_MP_CHARACTER_SELECT",
"FE_MENU_VERSION_MP_CHARACTER_CREATION",
"FE_MENU_VERSION_EMPTY",
"FE_MENU_VERSION_EMPTY_NO_BACKGROUND",
"FE_MENU_VERSION_TEXT_SELECTION",
"FE_MENU_VERSION_CORONA",
"FE_MENU_VERSION_CORONA_LOBBY",
"FE_MENU_VERSION_CORONA_JOINED_PLAYERS",
"FE_MENU_VERSION_CORONA_INVITE_PLAYERS",
"FE_MENU_VERSION_CORONA_INVITE_FRIENDS",
"FE_MENU_VERSION_CORONA_INVITE_CREWS",
"FE_MENU_VERSION_CORONA_INVITE_MATCHED_PLAYERS",
"FE_MENU_VERSION_CORONA_INVITE_LAST_JOB_PLAYERS",
"FE_MENU_VERSION_CORONA_RACE",
"FE_MENU_VERSION_CORONA_BETTING",
"FE_MENU_VERSION_JOINING_SCREEN",
"FE_MENU_VERSION_LANDING_MENU",
"FE_MENU_VERSION_LANDING_KEYMAPPING_MENU",
].forEach((item) => {
    const hash = convertToUnsigned(jenkinsOneAtATimeHashSigned(item));
   
    console.log(`Hash: ${hash << 2147483648} - String: ${item}`)
});
 
Решение
Понял. Спасибо за помощь!
Придумал как для моей ситуации обойти это по другому. При создании объекта добавлять к нему свойство с оригинальным именем модели... Просто и надежно:)
 
Мап эдитор.
Я добавляю объекты на карту и все указатели складываю в массив. Потом мне это нужно сериализовать и записать в json файлик.
На этом этапе я не могу из объекта получить его название модели, а только хэш. В принципе нет проблем, можно и так хранить.

Но тут я понял, что когда в этом же редакторе мне нужно будет снова загрузить карту и как-то вывести список объектов в интерфейсе, то там мне нужны названия моделей, а не хеш. Поэтому решил что в картах хранить лучше не хэш моделей, а их название. Да и сам файл карты будет более читабельный и дружелюбный.
 
Назад
Верх