189 lines
4.6 KiB
PHP
189 lines
4.6 KiB
PHP
<?php
|
|
|
|
include('config.inc');
|
|
include('ctf_map.inc');
|
|
session_start();
|
|
|
|
|
|
function handleInput() {
|
|
if ($_GET['c'] == 'n') {
|
|
$op = 'e';
|
|
$_SESSION['edit_map'] = new ctf_map();
|
|
} elseif ($_GET['c'] == 'e') {
|
|
$op = 'e';
|
|
$_SESSION['edit_map'] = new ctf_map($_GET['id']);
|
|
} elseif ($_GET['c'] == 'd') {
|
|
if ($_GET['ok']) {
|
|
$map = new ctf_map($_GET['id']);
|
|
$map->destroy();
|
|
$op = '';
|
|
} else if ($_GET['cancel']) {
|
|
$op = "";
|
|
} else {
|
|
$op = 'd';
|
|
}
|
|
} elseif ($_POST['c'] == 'ms' && $_SESSION['edit_map'] instanceof ctf_map) {
|
|
$map = $_SESSION['edit_map'];
|
|
$map->setName(stripslashes($_POST['name']));
|
|
$map->setDescription(stripslashes($_POST['desc']));
|
|
$map->setWidth((int) $_POST['width']);
|
|
$map->setHeight((int) $_POST['height']);
|
|
$map->setAlliances((int) $_POST['alliances']);
|
|
|
|
$minY = -floor($map->getHeight() / 2); $maxY = $minY + $map->getHeight() - 1;
|
|
$minX = -floor($map->getWidth() / 2); $maxX = $minX + $map->getWidth() - 1;
|
|
|
|
$layout = explode('#', $_POST['map']);
|
|
for ($y = $minY; $y <= $maxY; $y ++) {
|
|
$str = array_shift($layout);
|
|
for ($x = $minX; $x <= $maxX; $x ++) {
|
|
$type = $str{0};
|
|
$map->setSystemType($x, $y, $type);
|
|
if ($type != 'S') {
|
|
$str = substr($str, 1);
|
|
continue;
|
|
}
|
|
$alloc = (int) $str{1};
|
|
$map->setSystemAlloc($x, $y, $alloc);
|
|
if ($alloc == 0) {
|
|
$str = substr($str, 2);
|
|
continue;
|
|
}
|
|
$map->setSystemSpawn($x, $y, $str{2} == '1');
|
|
$str = substr($str, 3);
|
|
}
|
|
}
|
|
$map->save();
|
|
$_SESSION['edit_map'] = null;
|
|
$op = '';
|
|
} else {
|
|
$op = '';
|
|
}
|
|
return $op;
|
|
}
|
|
|
|
|
|
|
|
function listMaps() {
|
|
?>
|
|
<h2>Available maps</h2>
|
|
<?php
|
|
$maps = ctf_map::allMaps();
|
|
if (count($maps) == 0) {
|
|
?>
|
|
<p>
|
|
There are no maps on the server at this time.
|
|
</p>
|
|
<?php
|
|
} else {
|
|
?>
|
|
<table border="1">
|
|
<tr>
|
|
<th align="left">Name & description</th>
|
|
<th align="center">Size</th>
|
|
<th align="center">Alliances</th>
|
|
<th align="left"> </th>
|
|
</tr>
|
|
<?php
|
|
|
|
foreach ($maps as $map) {
|
|
?>
|
|
<tr>
|
|
<td style='vertical-align:top'><?="<u>" . htmlentities($map->getName()) . "</u>"
|
|
. (is_null($map->getDescription()) ? "" : ("<br/>" . htmlentities($map->getDescription())))?></td>
|
|
<td style='text-align:center'><?=$map->getWidth()?>x<?=$map->getHeight()?></td>
|
|
<td style='text-align:center'><?=$map->getAlliances()?></td>
|
|
<td><a href="?c=e&id=<?=$map->getID()?>">Edit</a> - <a href="?c=d&id=<?=$map->getID()?>">Delete</a></td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
|
|
?>
|
|
</table>
|
|
<?
|
|
}
|
|
?>
|
|
<p>
|
|
<a href='?c=n'>Create a map</a>
|
|
</p>
|
|
<?php
|
|
}
|
|
|
|
|
|
function editMap() {
|
|
?>
|
|
<h2>Map editor</h2>
|
|
<form method="POST" action="?" onSubmit="return false;">
|
|
<div id="mapedit"><p>Loading, please wait ...</p></div>
|
|
</form>
|
|
<form method="POST" action="?" id="sendform" style="display: none">
|
|
<input type="hidden" name="c" value="ms" />
|
|
<input type="hidden" id="sf-name" name="name" value="" />
|
|
<input type="hidden" id="sf-desc" name="desc" value="" />
|
|
<input type="hidden" id="sf-width" name="width" value="" />
|
|
<input type="hidden" id="sf-height" name="height" value="" />
|
|
<input type="hidden" id="sf-alliances" name="alliances" value="" />
|
|
<input type="hidden" id="sf-map" name="map" value="" />
|
|
</form>
|
|
<script language="JavaScript"><!--
|
|
var initMap = {
|
|
name: '<?=addslashes($_SESSION['edit_map']->getName())?>',
|
|
description: '<?=preg_replace(array('/\\n/', '/\\r/'), array('\\n', '\\r'), addslashes($_SESSION['edit_map']->getDescription()))?>',
|
|
alliances: <?=$_SESSION['edit_map']->getAlliances()?>,
|
|
width: <?=$_SESSION['edit_map']->getWidth()?>,
|
|
height: <?=$_SESSION['edit_map']->getHeight()?>,
|
|
map: [ <?=$_SESSION['edit_map']->jsDump()?> ]
|
|
};
|
|
//--></script>
|
|
<script language="JavaScript" src="map_edit.js"></script>
|
|
<?
|
|
}
|
|
|
|
|
|
function confirmDelete() {
|
|
$map = new ctf_map((int)$_GET['id']);
|
|
?>
|
|
<h2>Map deletion</h2>
|
|
<p>
|
|
You are about to delete the map called <b><?=htmlentities($map->getName())?></b>.<br/>
|
|
Please confirm.
|
|
</p>
|
|
<form method="GET" action="?">
|
|
<input type="hidden" name="c" value="d" />
|
|
<input type="hidden" name="id" value="<?=$map->getID()?>" />
|
|
<input type="submit" name="ok" value="Confirm" />
|
|
<input type="submit" name="cancel" value="Cancel" />
|
|
</form>
|
|
<?
|
|
}
|
|
|
|
|
|
?>
|
|
<html>
|
|
<head>
|
|
<title>LegacyWorlds Beta 5 > Administration > Maps management</title>
|
|
</head>
|
|
<body>
|
|
<h1><a href="index.html">LWB5 > Administration</a> > Maps management</h1>
|
|
<p>
|
|
The purpose of this tool is to create new maps, edit existing ones or delete unused ones.
|
|
</p>
|
|
<?php
|
|
|
|
$h = handleInput();
|
|
|
|
switch($h) :
|
|
case 'e':
|
|
editMap();
|
|
break;
|
|
case 'd':
|
|
confirmDelete();
|
|
break;
|
|
default:
|
|
listMaps();
|
|
break;
|
|
endswitch;
|
|
|
|
?>
|
|
</body>
|
|
</html>
|