1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

[PHP]UUID -> Nickname

Тема в разделе "Оффтопик", создана пользователем Studenikin, 6 апр 2015.

  1. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Столкнулся с такой ситуацией: пытаюсь сделать топ богачей на сайте, но плагин использует не ники игроков, а UUID. Как можно на php преобразовать uuid в ник игрока? (сервер offline mode)
     
  2. CryBot

    CryBot Активный участник Пользователь

    Баллы:
    88
    Если сервер пиратский, то никак. Нужно, чтобы плагин писал ники игроков в базу данных, а не uuid.
     
  3. LazyFire

    LazyFire Активный участник Пользователь

    Баллы:
    93
    Как вариант при регистрации писать в базу ещё и uuid, но это как-то костыльно.
     
  4. MrTrojan

    MrTrojan Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    BlackTrojan
    Перепиши плагин, чтобы ники были.
     
  5. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    это не вариант
     
  6. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    PHP:
            function uuid ($string) {
                
    $val md5('OfflinePlayer:'.$stringtrue);
                
    $byte array_values(unpack('C16'$val));
                
    $tLo = ($byte[0] << 24) | ($byte[1] << 16) | ($byte[2] << 8) | $byte[3];
                
    $tMi = ($byte[4] << 8) | $byte[5];
                
    $tHi = ($byte[6] << 8) | $byte[7];
                
    $csLo $byte[9];
                
    $csHi $byte[8] & 0x3f | (<< 7);
                if (
    pack('L'0x6162797A) == pack('N'0x6162797A)) {
                    
    $tLo = (($tLo 0x000000ff) << 24) | (($tLo 0x0000ff00) << 8) | (($tLo 0x00ff0000) >> 8) | (($tLo 0xff000000) >> 24);
                    
    $tMi = (($tMi 0x00ff) << 8) | (($tMi 0xff00) >> 8);
                    
    $tHi = (($tHi 0x00ff) << 8) | (($tHi 0xff00) >> 8);
                }
                
    $tHi &= 0x0fff;
                
    $tHi |= (<< 12);
                
    $uuid sprintf('%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',$tLo$tMi$tHi$csHi$csLo,$byte[10], $byte[11], $byte[12], $byte[13], $byte[14], $byte[15]);
                return 
    $uuid;
            }
     
  7. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    это NICKNAME -> UUID, а мне нужно наоборот
     
  8. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    Юзай mojang api так как md5 не декодится просто
     
  9. danilko

    danilko Старожил Пользователь

    Баллы:
    103
    А они совпадают ? (Ну, UUID генерируемый этой функцией и сервером)
    Если да, то можно попробовать прогнать БД с логинами через этот алгоритм и составить табличку, в которой хранятся UUID и логины. А потом уже периодически обновлять базу.
     
  10. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    У mojang та ники зареганы вот и он сделает из uuid ник
     
  11. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    У Mojang вообще-то другие UUID'ы (реально уникальные), а в online-mode=false UUID привязан к нику и зависит от него, поэтому по серверам Mojang ничего не светит. Можно воспользоваться usermap.csv от Essentials, но тут не обойтись без сторонних скриптов, либо пилить базу данных на его основе и составлять лишний запрос для получения ника каждого богача (помним про кеш)
     
    Последнее редактирование: 7 апр 2015
  12. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    Ну у меня fe economy в online-mode: true генерирует тот же uuid что и оффлайн через php. Сверялся с mojang
     
  13. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Так-то я обновил сообщение. Но ты пошустрее
    То, что PHP и online-mode=false генерируют одинаковый UUID, то это несомненно. Я не понимаю, что ты пытаешься до меня донести, так что расскажи подробнее, что ты делаешь
     
  14. Vladlen_198

    Vladlen_198 Старожил Пользователь

    Баллы:
    108
    Skype:
    ultrashock98
    Имя в Minecraft:
    UltraShock
    Использование uuid для плагинов и pex
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тс флаг тебе в руки, я не представляю как ты собрался декодировать md5. Так что сперись и выбросись в окно.
    А мы как все нормальные люди пишем уиды в базе с никами рядом.
     
  16. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Ну до 6ти символов включительно даже на процессоре можно составить все доступные ники за пару часов. Если заюзать OpenCL и фигачить на видюхе ту думаю за месяц можно будет перебрать все ники ограниченные стандартной регуляркой и длиной и записать их в базу.
    Но так вообще player.dat игрока хранит информацию о его нике.
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Про player.dat я знаю, есть даже софтина которая их ремапит.
     
  18. MySt1k

    MySt1k Старожил Пользователь

    Баллы:
    173
    Где то даже был php скрипт
     
  19. Автор темы
    Studenikin

    Studenikin Старожил Пользователь

    Баллы:
    123
    Skype:
    vanya.studenikin
    Имя в Minecraft:
    stuvanya
    Действительно, uuid которые пишет мой плагин экономики, не соответствуют моджанговским. Придется переписывать плагин, чтобы он писал в бд ники
     
  20. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Реализация на жабе оффлайн уидов.
    import java.util.UUID;
    Код:
      private static UUID uuid(String player) {
        return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player).getBytes(Charset.forName("UTF-8")));
      }
     

Поделиться этой страницей