Skip to content
Create image from .mapa file (map format of the game Need For Kill)
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples
lib
LICENSE-MIT
README.md
composer.json

README.md

NFK Map Viewer

Генерирует изображение карты из файла .mapa игры Need For Kill

Пример работы скрипта: http://harpywar.com/test/nfkmap/

Требования

PHP >= 5.3 с включенными расширениями php_gd2 и php_bz2

Установка через Composer

Менеджер пакетов Composer упрощает установку сторонних скриптов в вашем проекте. Он сам загрузит необходимые файлы и добавит их в vendor/autoload.php, который будет достаточно включить в начале вашего скрипта.

  1. Откройте папку, где будет размещен NFK Map Viewer, и создайте в ней файл composer.json со следующим содержимым:

     {
         "minimum-stability": "dev",
         "require": {
             "nfk/mapviewer":"dev-master"
         }
     }
    
  2. Положите в эту папку файл http://getcomposer.org/composer.phar и выполните команду:

     php composer.phar install
    
  3. После установки пакета должна появиться папка vendor, внутри которой, помимо автозагрузчика composer'a, расположены исходники MapViewer.

  4. Теперь в начале вашего скрипта достаточно включить загрузочный файл, после чего можно использовать MapViewer:

     include "vendor/autoload.php";
    

Обычная установка

Если вы не используете Composer, то в начале своего скрипта добавьте встроенный автозагрузчик классов:

include("lib/autoloader.php");
Autoloader::register();

Примеры использования (более подробно в examples):

Сохранение полноразмерного изображения из существующей карты:

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


Разбор формата карты

You can’t perform that action at this time.