Генерирует изображение карты из файла .mapa
игры Need For Kill
Пример работы скрипта: http://harpywar.com/test/nfkmap/
PHP >= 5.3 с включенными расширениями php_gd2
и php_bz2
Менеджер пакетов Composer упрощает установку сторонних скриптов в вашем проекте. Он сам загрузит необходимые файлы и добавит их в vendor/autoload.php
, который будет достаточно включить в начале вашего скрипта.
-
Откройте папку, где будет размещен NFK Map Viewer, и создайте в ней файл
composer.json
со следующим содержимым:{ "minimum-stability": "dev", "require": { "nfk/mapviewer":"dev-master" } }
-
Положите в эту папку файл http://getcomposer.org/composer.phar и выполните команду:
php composer.phar install
-
После установки пакета должна появиться папка
vendor
, внутри которой, помимо автозагрузчика composer'a, расположены исходники MapViewer. -
Теперь в начале вашего скрипта достаточно включить загрузочный файл, после чего можно использовать MapViewer:
include "vendor/autoload.php";
Если вы не используете Composer, то в начале своего скрипта добавьте встроенный автозагрузчик классов:
include("lib/autoloader.php");
Autoloader::register();
Сохранение полноразмерного изображения из существующей карты:
use NFK\MapViewer\MapViewer;
$nmap = new MapViewer("tourney4.mapa");
$nmap->LoadMap();
$im = $nmap->DrawMap();
imagepng($im, $nmap->GetFileName() . '.png');
Можно создать свою карту, или изменить существующую:
// хелперы для удобного создания объектов
use NFK\MapViewer\MapObject\SimpleObject
use NFK\MapViewer\MapObject\SpecialObject
$nmap = new MapViewer("test.mapa");
// следующий код заполнит бриками границу карты
for ($x = 0; $x < $nmap->Header->MapSizeX; $x++)
for ($y = 0; $y < $nmap->Header->MapSizeY; $y++)
if ($x == 0 || $x == $nmap->Header->MapSizeX - 1 || $y == 0 || $y == $nmap->Header->MapSizeY - 1)
$nmap->Bricks[$x][$y] = 228;
// респавн в левом нижнем углу
$nmap->Bricks[1][$nmap->Header->MapSizeY - 2] = SimpleObject::Respawn();
// установим в правом нижнем углу портал, с телепортом в левый нижний угол
$obj = SpecialObject::Teleport
(
$nmap->Header->MapSizeX - 2, // x
$nmap->Header->MapSizeY - 2, // y
2, // goto x
$nmap->Header->MapSizeY - 2 // goto y
);
$nmap->Objects[] = $obj; // добавить портал в массив объектов
$nmap->SaveMap();
Можно извлечь и сохранить карту .mapa
из демки:
$nmap = new NFKMap("demo.ndm");
$nmap->LoadMap();
// хеш содержимого карты
$filename = md5( $nmap->GetMapBytes() );
$nmap->SaveMap($filename);
На очень больших картах может потребоваться большое количество памяти для создания изображения. Поэтому, в скрипте желательно убрать ограничение памяти, или установить его до максимально возможного значения:
ini_set('memory_limit', '-1');
ini_set('memory_limit', '256M');
Расход памяти на примере большой карты http://ge.tt/5uyLLIW/v/0
- 0.7 мб до загрузки карты
- 5.7 мб после загрузки карты в память
- 6.7 мб после загрузки ресурсов (картинки палитры и объектов)
- 151 мб после создания слоя карты через
imagecreatetruecolor
размером 7776х3888 px - 151 мб после рисования всех объектов
- 237 мб после сохранения картинки через
imagepng
Замер производился функцией memory_get_peak_usage
-
[Структура карты NFK MAP](https://github.com/HarpyWar/nfkmap-viewer/wiki/Структура карты NFK MAP)
-
[Файл карты в демке NFK DEMO](https://github.com/HarpyWar/nfkmap-viewer/wiki/Структура демки NFK DEMO)