• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua [ERROR WITH OUTFIER:PHP]

lopez65

Member
Joined
May 10, 2012
Messages
294
Solutions
1
Reaction score
16
Location
Barcelona
Hi
Someone can have a look at this file, it gives me this error:

can not display the image www / ss / outfiter.php because it contains errors

PHP:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';

class Outfitter {

    protected static $instance = null;
    protected static $_outfit_lookup_table = array(
        0xFFFFFF, 0xFFD4BF, 0xFFE9BF, 0xFFFFBF, 0xE9FFBF, 0xD4FFBF,
        0xBFFFBF, 0xBFFFD4, 0xBFFFE9, 0xBFFFFF, 0xBFE9FF, 0xBFD4FF,
        0xBFBFFF, 0xD4BFFF, 0xE9BFFF, 0xFFBFFF, 0xFFBFE9, 0xFFBFD4,
        0xFFBFBF, 0xDADADA, 0xBF9F8F, 0xBFAF8F, 0xBFBF8F, 0xAFBF8F,
        0x9FBF8F, 0x8FBF8F, 0x8FBF9F, 0x8FBFAF, 0x8FBFBF, 0x8FAFBF,
        0x8F9FBF, 0x8F8FBF, 0x9F8FBF, 0xAF8FBF, 0xBF8FBF, 0xBF8FAF,
        0xBF8F9F, 0xBF8F8F, 0xB6B6B6, 0xBF7F5F, 0xBFAF8F, 0xBFBF5F,
        0x9FBF5F, 0x7FBF5F, 0x5FBF5F, 0x5FBF7F, 0x5FBF9F, 0x5FBFBF,
        0x5F9FBF, 0x5F7FBF, 0x5F5FBF, 0x7F5FBF, 0x9F5FBF, 0xBF5FBF,
        0xBF5F9F, 0xBF5F7F, 0xBF5F5F, 0x919191, 0xBF6A3F, 0xBF943F,
        0xBFBF3F, 0x94BF3F, 0x6ABF3F, 0x3FBF3F, 0x3FBF6A, 0x3FBF94,
        0x3FBFBF, 0x3F94BF, 0x3F6ABF, 0x3F3FBF, 0x6A3FBF, 0x943FBF,
        0xBF3FBF, 0xBF3F94, 0xBF3F6A, 0xBF3F3F, 0x6D6D6D, 0xFF5500,
        0xFFAA00, 0xFFFF00, 0xAAFF00, 0x54FF00, 0x00FF00, 0x00FF54,
        0x00FFAA, 0x00FFFF, 0x00A9FF, 0x0055FF, 0x0000FF, 0x5500FF,
        0xA900FF, 0xFE00FF, 0xFF00AA, 0xFF0055, 0xFF0000, 0x484848,
        0xBF3F00, 0xBF7F00, 0xBFBF00, 0x7FBF00, 0x3FBF00, 0x00BF00,
        0x00BF3F, 0x00BF7F, 0x00BFBF, 0x007FBF, 0x003FBF, 0x0000BF,
        0x3F00BF, 0x7F00BF, 0xBF00BF, 0xBF007F, 0xBF003F, 0xBF0000,
        0x242424, 0x7F2A00, 0x7F5500, 0x7F7F00, 0x557F00, 0x2A7F00,
        0x007F00, 0x007F2A, 0x007F55, 0x007F7F, 0x00547F, 0x002A7F,
        0x00007F, 0x2A007F, 0x54007F, 0x7F007F, 0x7F0055, 0x7F002A,
        0x7F0000,
    );

    public static function instance() {
        if (!isset(self::$instance))
            self::$instance = new self();
        return self::$instance;
    }

    protected function outfit($outfit, $addons, $head, $body, $legs, $feet, $mount, $direction = 3, $animation = 1) {
        $outfitPath = "outfits/";

        $mount_id = ($mount & 0xFFFF);
        $mountState = (($mount & 0xFFFF0000) != 0) ? 2 : 1;
        $creature = false;

        $max = ($addons != 0) ? 3 : 1;
        for ($i = 1; $i <= $max; $i++) {
            //a_b_c_d
            //a animationFrame
            //b mountState
            //c addons
            //d direction
            if (!file_exists($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_' . $i . '_'.$direction.'.png') || !file_exists($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_' . $i . '_'.$direction.'_template.png')) {
                if ($mountState == 2) {
                    $mountState = 1;
                    $i = 1;
                } else {
                    $creature = true;
                    break;
                }
            }
        }

        if ($creature) {
            $tmpOutfit = null;
            if (file_exists($outfitPath . $outfit . '/'.$animation.'_1_1_'.$direction.'.png'))
                $tmpOutfit = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_1_1_'.$direction.'.png');
            elseif (file_exists($outfitPath . $outfit . '/1_1_1_1.png'))
                $tmpOutfit = imagecreatefrompng($outfitPath . $outfit . '/1_1_1_1.png');
            if ($tmpOutfit == null)
                return;
            imagealphablending($tmpOutfit, false);
            imagesavealpha($tmpOutfit, true);
            return $tmpOutfit;
        }

        $image_outfit = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_1_'.$direction.'.png');
        $image_template = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_1_'.$direction.'_template.png');

        if ($addons == 1 || $addons == 3) {
            $image_first = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_2_'.$direction.'.png');
            $image_first_template = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_2_'.$direction.'_template.png');
            $this->alphaOverlay($image_outfit, $image_first, 64, 64);
            $this->alphaOverlay($image_template, $image_first_template, 64, 64);
        }
        if ($addons == 2 || $addons == 3) {
            $image_second = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_3_'.$direction.'.png');
            $image_second_template = imagecreatefrompng($outfitPath . $outfit . '/'.$animation.'_' . $mountState . '_3_'.$direction.'_template.png');
            $this->alphaOverlay($image_outfit, $image_second, 64, 64);
            $this->alphaOverlay($image_template, $image_second_template, 64, 64);
        }

        $this->colorize($image_template, $image_outfit, $head, $body, $legs, $feet);
        if ($mountState == 2 && file_exists($outfitPath . $mount_id . '/'.$animation.'_1_1_'.$direction.'.png')) {
            $mount = imagecreatefrompng($outfitPath . $mount_id . '/'.$animation.'_1_1_'.$direction.'.png');
            $this->alphaOverlay($mount, $image_outfit, 64, 64);
            $image_outfit = $mount;
        }

        imagealphablending($image_outfit, false);
        imagesavealpha($image_outfit, true);
        imagedestroy($image_template);
        return $image_outfit;
    }

   
     // every parameter need to be passed from table players, excluding animation
     // for example u can use POT/OTS_PLayer::getLookType to pass outfit, etc...
    public function renderOutfit($outfit, $addons, $head, $body, $legs, $feet, $mount, $directon = 3, $animation = 1) {
        return imagepng($this->outfit($outfit, $addons, $head, $body, $legs, $feet, $mount, $directon, $animation));
    }

    protected function colorizePixel($_color, &$_r, &$_g, &$_b) {
        if ($_color < count(self::$_outfit_lookup_table))
            $value = self::$_outfit_lookup_table[$_color];
        else
            $value = 0;
        $ro = ($value & 0xFF0000) >> 16; // rgb outfit
        $go = ($value & 0xFF00) >> 8;
        $bo = ($value & 0xFF);
        $_r = (int) ($_r * ($ro / 255));
        $_g = (int) ($_g * ($go / 255));
        $_b = (int) ($_b * ($bo / 255));
    }

    protected function colorize(&$_image_template, &$_image_outfit, $_head, $_body, $_legs, $_feet) {
        for ($i = 0; $i < imagesy($_image_template); $i++) {
            for ($j = 0; $j < imagesx($_image_template); $j++) {
                $templatepixel = imagecolorat($_image_template, $j, $i);
                $outfit = imagecolorat($_image_outfit, $j, $i);

                if ($templatepixel == $outfit)
                    continue;

                $rt = ($templatepixel >> 16) & 0xFF;
                $gt = ($templatepixel >> 8) & 0xFF;
                $bt = $templatepixel & 0xFF;
                $ro = ($outfit >> 16) & 0xFF;
                $go = ($outfit >> 8) & 0xFF;
                $bo = $outfit & 0xFF;

                if ($rt && $gt && !$bt) { // yellow == head
                    $this->colorizePixel($_head, $ro, $go, $bo);
                } else if ($rt && !$gt && !$bt) { // red == body
                    $this->colorizePixel($_body, $ro, $go, $bo);
                } else if (!$rt && $gt && !$bt) { // green == legs
                    $this->colorizePixel($_legs, $ro, $go, $bo);
                } else if (!$rt && !$gt && $bt) { // blue == feet
                    $this->colorizePixel($_feet, $ro, $go, $bo);
                } else {
                    continue; // if nothing changed, skip the change of pixel
                }

                imagesetpixel($_image_outfit, $j, $i, imagecolorallocate($_image_outfit, $ro, $go, $bo));
            }
        }
    }

    protected function alphaOverlay(&$destImg, &$overlayImg, $imgW, $imgH) {
        for ($y = 0; $y < $imgH; $y++) {
            for ($x = 0; $x < $imgW; $x++) {
                $ovrARGB = imagecolorat($overlayImg, $x, $y);
                $ovrA = ($ovrARGB >> 24) << 1;
                $ovrR = $ovrARGB >> 16 & 0xFF;
                $ovrG = $ovrARGB >> 8 & 0xFF;
                $ovrB = $ovrARGB & 0xFF;

                $change = false;
                if ($ovrA == 0) {
                    $dstR = $ovrR;
                    $dstG = $ovrG;
                    $dstB = $ovrB;
                    $change = true;
                } elseif ($ovrA < 254) {
                    $dstARGB = imagecolorat($destImg, $x, $y);
                    $dstR = $dstARGB >> 16 & 0xFF;
                    $dstG = $dstARGB >> 8 & 0xFF;
                    $dstB = $dstARGB & 0xFF;

                    $dstR = (($ovrR * (0xFF - $ovrA)) >> 8) + (($dstR * $ovrA) >> 8);
                    $dstG = (($ovrG * (0xFF - $ovrA)) >> 8) + (($dstG * $ovrA) >> 8);
                    $dstB = (($ovrB * (0xFF - $ovrA)) >> 8) + (($dstB * $ovrA) >> 8);
                    $change = true;
                }
                if ($change) {
                    $dstRGB = imagecolorallocatealpha($destImg, $dstR, $dstG, $dstB, 0);
                    imagesetpixel($destImg, $x, $y, $dstRGB);
                }
            }
        }
        return $destImg;
    }

}
header('Content-Type: image/png');
Outfitter::instance()->renderOutfit($_GET['a'], $_GET['b'], $_GET['c'], $_GET['d'], $_GET['e'], $_GET['f'], $_GET['g'], $_GET['h'], $_GET['i']);

//example
//outfitter.php?a=514&b=2&c=45&d=13&e=65&f=1&g=66083&&h=2&i=3
//a = outfit id
//b = addons
//c = head
//d = body
//e = legs
//f = feet
//g = mount
//h = direction
//i = animation
include 'layout/overall/footer.php'; ?>
 
Back
Top