Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Веб Класс для работы со скинами.

DoctorBooooom

Активный участник
Пользователь
Баллы
78
Имя в Minecraft
DoctorBooooom
Здравствуйте уважаемые форумчане.
Недавно мне потребовались скины для личного кабинета и так как скрипт не представляет коммерческой тайны я делюсь им с вами)

Скачать: CSkin.zip

Настройка:

В функциях GetSkinPath и GetCloakPath указать ссылки до скинов игроков. (переменная $local)
в самом начале класса CSkin задать путь к скину по умолчанию (переменная $defaultSkin)

Класс отлично задокументирован, однако я приложу пример использования:
HTML:
<img src='getSkin.php?LOGIN=DoctorBooooom'>

Файл getSkin.php
PHP:
<?
require_once 'CSkin.php';

$login = htmlspecialchars($_GET['LOGIN']);//Получаем логин игрока

$obSkin = new \LastWorld\CSkin($login);// создаем экземпляр класса инициализируя его нужным игроком.

if ($obSkinReady = $obSkin->getFrontCloak())//проверяем что нам действительно вернулся объект готового скина
{
    header ("Content-type: image/png");
    $obSkinReady->resizeImage(256)->getImage(); //Сначала установим максимальную высоту изображения, после чего выведем его на экран
}

Несколько замечаний:
1. resizeImage устанавливает высоту скина или плаща. Ширина подстраивается автоматически.
2. Вывод изображения осуществляется функцией getImage()

Доступные функии (над классом CSkin):
  • getFrontHead() - получить лицо игрока
  • getBackHead() - получить затылок игрока
  • getFrontSkin() - получить полный скин игрока спереди
  • getBackSkin() - получить полный скин игрока сзади
  • getFrontCloak() - получить плащь игрока спереди
  • getBackCloak() - получить плащ игрока сзади

ВНИМАНИЕ: все функции возвращают объект со скином(CSkinReady) или false если построить скин не удалось.

Жду ваших комментариев и пожеланий.


FAQ:
Не понял для чего служит этот скрипт. Каково его предназначение?
Мой скрипт грузит скин игрока (с вашего сайта, а если его нет то проверяет официальный), после чего строит из него картинку (голову, плащ, скин) и позволяет изменить ее размер/вывести в браузер/сохранить.
 
Последнее редактирование:
Не понял для чего служит этот скрипт. Каково его предназначение?
 
Не понял для чего служит этот скрипт. Каково его предназначение?
класс для загрузки и отображения скина а куда ты его уже прилепишь ограничивается только фантазией.....
 
Код вполне вменяемый , мне поравилось, спасибо )
 
Разве найдя местоположение скрипта я подстановкой другого логина не смогу сменить кому угодно скин?
 
Разве найдя местоположение скрипта я подстановкой другого логина не смогу сменить кому угодно скин?
Сменить? Мой скрипт никуда ничего не загружает. Вывести скин другого игрока - да. А вот сменить - нет.

Предлагаю вам сначала изучить PHP и ООП, а потом задавать вопросы
 
Сменить? Мой скрипт никуда ничего не загружает. Вывести скин другого игрока - да. А вот сменить - нет.

Предлагаю вам сначала изучить PHP и ООП, а потом задавать вопросы
класс для загрузки и отображения скина а куда ты его уже прилепишь ограничивается только фантазией.....

PHP:
<?
require_once 'CSkin.php';

$login = htmlspecialchars($_GET['LOGIN']);//Получаем логин игрока

$obSkin = new \LastWorld\CSkin($login);// создаем экземпляр класса инициализируя его нужным игроком.

if ($obSkinReady = $obSkin->getFrontCloak())//проверяем что нам действительно вернулся объект готового скина
{
    header ("Content-type: image/png");
    $obSkinReady->resizeImage(256)->getImage(); //Сначала установим максимальную высоту изображения, после чего выведем его на экран
}
$_GET['LOGIN']
Судил по выделенному тексту. Скрипт не качал
 
Мой скрипт грузит скин игрока (с вашего сайта, а если его нет то проверяет официальный), после чего строит из него картинку (голову, плащ, скин) и позволяет изменить ее размер/вывести в браузер/сохранить.
 
получаем логин игрока для вывода его скина
Все остальное нужно делать своими ручками в том числе и загрузку

У меня была цель сделать вывод скина в лк. Это означает что вы можете получить картинку, которая отображает скин в одном из ракурсов. Если вам нужна загрузка или что либо еще придется писать самим.

Кроме того у скрипта есть побочный эффект. Его можно использовать для получения скина в клиенте:
Скин: \LastWorld\CSkin::GetSkinPath($player);
Плащ: \LastWorld\CSkin::GetSkinPath($player);
Эти 2 метода объявлены статичными, соответственно создавать экземпляр класса не нужно.
 
Немного валидационной магии.
Код:
Width: 64 Height: 32 - pass
Width: 64 Height: 64 - failed
Width: 64 Height: 128 - failed
Width: 128 Height: 64 - pass
Width: 128 Height: 32 - failed
Width: 256 Height: 32 - failed
Width: 32 Height: 128 - failed
Width: 1 Height: 128 - failed
Width: 128 Height: 1 - failed
Width: 1 Height: 1 - failed

Width: 60 Height: 30 - pass
Width: 120 Height: 60 - pass
Width: 100 Height: 50 - pass

PHP:
<?php
    class Validation_Test {
        public $width;
        public $height;
     
        public function isValid () {
            if (!$skinRatio = (int)$this->width / 64)
                return false;
         
            $validWidth = $this->width / $skinRatio == 64;
            $validHeight = $this->height / $skinRatio == 32;
         
            return ($validWidth && $validHeight) ? true : false;
        }
    }
 
    // [ width, height ]
    $tests = [
        [64, 32],
        [64, 64],
        [64, 128],
        [128, 64],
        [128, 32],
        [256, 32],
        [32, 128],
     
        [1, 128],
        [128, 1],
        [1, 1],
     
        [60, 30],
        [120, 60],
        [100, 50]
    ];
 
    $validator = new Validation_Test();
    foreach ($tests as $test) {
        list ($width, $height) = $test;
        $validator->width = $width;
        $validator->height = $height;
     
        echo 'Width: ', $width, ' Height: ', $height, ' - ',
            ($validator->isValid()) ? 'pass' : 'failed',
            '<br />';
    }
?>

PS: imageCopyAlpha стоило бы переписать по нормальному, не дело ворочать подобные массивы средствами пыха. Уж больно медленно.
 
Последнее редактирование:
Немного валидационной магии.
Код:
Width: 64 Height: 32 - pass
Width: 64 Height: 64 - failed
Width: 64 Height: 128 - failed
Width: 128 Height: 64 - pass
Width: 128 Height: 32 - failed
Width: 256 Height: 32 - failed
Width: 32 Height: 128 - failed
Width: 1 Height: 128 - failed
Width: 128 Height: 1 - failed
Width: 1 Height: 1 - failed

Width: 60 Height: 30 - pass
Width: 120 Height: 60 - pass
Width: 100 Height: 50 - pass

PHP:
<?php
    class Validation_Test {
        public $width;
        public $height;
    
        public function isValid () {
            if (!$skinRatio = (int)$this->width / 64)
                return false;
        
            $validWidth = $this->width / $skinRatio == 64;
            $validHeight = $this->height / $skinRatio == 32;
        
            return ($validWidth && $validHeight) ? true : false;
        }
    }

    // [ width, height ]
    $tests = [
        [64, 32],
        [64, 64],
        [64, 128],
        [128, 64],
        [128, 32],
        [256, 32],
        [32, 128],
    
        [1, 128],
        [128, 1],
        [1, 1],
    
        [60, 30],
        [120, 60],
        [100, 50]
    ];

    $validator = new Validation_Test();
    foreach ($tests as $test) {
        list ($width, $height) = $test;
        $validator->width = $width;
        $validator->height = $height;
    
        echo 'Width: ', $width, ' Height: ', $height, ' - ',
            ($validator->isValid()) ? 'pass' : 'failed',
            '<br />';
    }
?>
Забыл взять выражение в скобки после (int). Исправил и перезалил.

Всем кому лень перекачивать надо в функции:
validSkin() заменить $this->skinRatio = (int)$this->width($this->skin) / 64; на $this->skinRatio = (int)($this->width($this->skin) / 64);
validCloak()
заменить $this->cloakRatio = (int)$this->width($this->cloak) / 22; на $this->cloakRatio = (int)($this->width($this->cloak) / 22);
 
Здравствуйте уважаемые форумчане.
Недавно мне потребовались скины для личного кабинета и так как скрипт не представляет коммерческой тайны я делюсь им с вами)

Скачать: CSkin.zip

Настройка:

В функциях GetSkinPath и GetCloakPath указать ссылки до скинов игроков. (переменная $local)
в самом начале класса CSkin задать путь к скину по умолчанию (переменная $defaultSkin)

Класс отлично задокументирован, однако я приложу пример использования:
HTML:
<img src='getSkin.php?LOGIN=DoctorBooooom'>

Файл getSkin.php
PHP:
<?
require_once 'CSkin.php';

$login = htmlspecialchars($_GET['LOGIN']);//Получаем логин игрока

$obSkin = new \LastWorld\CSkin($login);// создаем экземпляр класса инициализируя его нужным игроком.

if ($obSkinReady = $obSkin->getFrontCloak())//проверяем что нам действительно вернулся объект готового скина
{
    header ("Content-type: image/png");
    $obSkinReady->resizeImage(256)->getImage(); //Сначала установим максимальную высоту изображения, после чего выведем его на экран
}

Несколько замечаний:
1. resizeImage устанавливает высоту скина или плаща. Ширина подстраивается автоматически.
2. Вывод изображения осуществляется функцией getImage()

Доступные функии (над классом CSkin):
  • getFrontHead() - получить лицо игрока
  • getBackHead() - получить затылок игрока
  • getFrontSkin() - получить полный скин игрока спереди
  • getBackSkin() - получить полный скин игрока сзади
  • getFrontCloak() - получить плащь игрока спереди
  • getBackCloak() - получить плащ игрока сзади

ВНИМАНИЕ: все функции возвращают объект со скином(CSkinReady) или false если построить скин не удалось.

Жду ваших комментариев и пожеланий.


FAQ:

Мой скрипт грузит скин игрока (с вашего сайта, а если его нет то проверяет официальный), после чего строит из него картинку (голову, плащ, скин) и позволяет изменить ее размер/вывести в браузер/сохранить.
А не мог бы ты сделать, чтобы со скинов вместе плащ показывало?
строка 282 :D
АХАХАХАХА:D
* Магия оставшаяся от предыдущих шаманов.
PHP:
function SkinView($obj, $type = 0)// для ленивых жоп
{
    $func = ["getFrontSkin", "getBackSkin", "getFrontHead", "getBackHead", "getFrontCloak", "getBackCloak"];
    /* нижн 5.5
        $func = array("getFrontSkin", "getBackSkin", "getFrontHead", "getBackHead", "getFrontCloak", "getBackCloak");
    */
    for ($i = 0; $i < count($func); $i++)
    {
        if ($type == $i) return $obj->$func[$i]();
    }
}

Памарочка...
Скины не 22х17
а 64х32
http://skins.minecraft.net/MinecraftCloaks/Notch.png
 
Последнее редактирование:
Скины вместе с плащем сделаю.
Странно. Раньше плащи были вырезаны прям по контуру...
Им видимо предали те же размеры, что и скинам, дабы упростить работу и уменьшить код.
 

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

Назад
Верх