Add Warzone Guide code into /trunk/tools/guidecode/.

git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@9522 4a71c877-e1ca-e34f-864e-861f7616d084
master
Guangcong Luo 2010-01-25 21:41:50 +00:00 committed by Git SVN Gateway
parent 1fa11735d0
commit 23b3d52c46
41 changed files with 5707 additions and 0 deletions

32
tools/guidecode/.htaccess Normal file
View File

@ -0,0 +1,32 @@
<IfModule mod_rewrite.c>
RewriteEngine on
#RewriteLog "/home/wz/public_html/cache/rewrite.log"
#RewriteLogLevel 5
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
ErrorDocument 404 /404
DirectoryIndex index.html index.php /fileman/dirindex.php
# Root
RewriteRule ^index(\.php|\.html)?$ / [R=301,L]
RewriteRule ^(w|r|c)/([a-z0-9-]+)/$ /$1/$2 [R=301,L]
RewriteRule ^r/tech\-tree\-chart/?$ /r/tech-tree [R=301,L]
RewriteRule ^([a-z0-9]+)$ $1.php [L,QSA]
RewriteRule ^w/([a-z0-9]+)$ w/w.php?$1 [L,QSA]
RewriteRule ^r/([a-z0-9]+)$ r/r.php?$1 [L,QSA]
RewriteRule ^c/([a-z0-9]+)$ c/c.php?$1 [L,QSA]
RewriteRule ^c/([a-z0-9]+)\-([a-z0-9]+)\-([a-z0-9]+)$ c/t.php?w=$1&b=$2&p=$3&cyborg [L,QSA]
RewriteRule ^u/([a-z0-9]+)\-([a-z0-9]+)\-([a-z0-9]+)$ c/t.php?w=$1&b=$2&p=$3 [L,QSA]
RewriteRule ^b/([a-z0-9]+)$ b/b.php?$1 [L,QSA]
RewriteRule ^d/([a-z0-9]+)$ d/d.php?$1 [L,QSA]
RewriteRule ^bp/([a-z0-9]+)$ bp/bp.php?$1 [L,QSA]
RewriteRule ^r/tech\-tree$ r/graphicaltechtree.html [L,QSA]
RewriteRule ^r/tech\-tree-linear$ r/techtree.html [L,QSA]
</IfModule>

46
tools/guidecode/404.php Normal file
View File

@ -0,0 +1,46 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="robots" content="noindex">
<title>404 Not Found</title>
<link rel="icon" href="http://wzguide.co.cc/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="http://wzguide.co.cc/favicon.ico" type="image/x-icon" />
<style type="text/css">
<!--
html,body,table
{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
border: 0;
background: #FFFFFF none;
color: #000000;
}
a
{
text-decoration: none;
}
a img
{
border: 0;
}
a em
{
visibility: hidden;
color: #555555;
}
a:hover em
{
visibility: visible;
}
-->
</style>
</head>
<body>
<table width="100%" height="100%"><tr><td align="center" valign="middle">
<a href="/" style="border:0"><img src="/images/404.gif" alt="404" style="border:0" /><br /><em>(Click to go back to the home page)</em></a>
</td></tr></table>
</body>
</html>

View File

@ -0,0 +1,21 @@
Instructions:
Place data into data/mp/
Edit password at top of r.inc.php
Log in by posting an empty comment to any comment form, using the password instead of
"MG" for the captcha
Open generator.php
Click "next" once
Click "Generate w/"
Click next until you get to the end
Done!
Optional: Generate /cache/researchtree.svg using /trunk/tools/tech-tree-chart-generator/,
render it as a PNG, and place the PNG in /images/researchtree.png

94
tools/guidecode/cms.php Normal file
View File

@ -0,0 +1,94 @@
<?php
include_once 'r.inc.php';
include_once 'guide.inc.php';
include_once 'persist.lib.php';
if (!$is_admin) die('Access denied.');
$pane = $_REQUEST['p'];
function
if ($_REQUEST['act'])
{
switch ($_REQUEST['act'])
{
case 'newfile':
//
break;
case 'newdir':
break;
case 'rm':
}
}
if (!$pane)
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>cms</title>
</head>
<frameset cols="220,*" border="0">
<frame name="s" src="cms.php?p=s" frameborder="0" marginwidth="0" marginheight="0" noresize="noresize" scrolling="auto" />
<frame name="m" src="cms.php?p=m" frameborder="0" marginwidth="0" marginheight="0" noresize="noresize" scrolling="auto" />
<noframes>
Error: Frames-less version not yet supported. Please check back later.
</noframes>
</frameset>
</html>
<?php
}
else if ($pane == 's')
{
?>
<body><strong>List</strong>
<?php
function genlist($items, $loc='')
{
$out = '<ul>';
if ($id) $loc .= $id.'/';
foreach ($items as $item)
{
if ($item['type'] == 'dir')
$out .= '<li>'.$item['name'].genlist($item, $loc).'</li>';
else if ($item['type'] == 'page')
$out .= '<li><a href="textedit.php?id='.$loc.$id.'">'.$item['name'].'</a></li>';
}
$out .= '<li><a href="cms.php?p=m&id='.$loc.'">New</a></li>';
$out .= '</ul>';
return $out;
}
?>
</body>
<?php
}
else if ($pane == 'm')
{
?>
CID: <?=$id?>
<form action="cms.php?p=s&id=<?=$id?>" target="s" method="post">
New file.<br />
ID: <input type="text" name="id" id="id" /><br />
Name: <input type="text" name="name" id="name" /><br />
<input type="hidden" name="act" value="newfile" />
<input type="submit" value="New file" />
</form>
<form action="cms.php?p=m&id=<?=$id?>" method="post">
New dir.<br />
ID: <input type="text" name="id" id="id" /><br />
Name: <input type="text" name="name" id="name" /><br />
<input type="hidden" name="act" value="newdir" />
<input type="submit" value="New dir" />
</form>
<form action="cms.php?p=m&id=<?=$id?>" method="post">
Remove file/dir.<br />
ID: <input type="text" name="id" id="id" /><br />
<input type="hidden" name="act" value="rm" />
<input type="submit" value="Remove" />
</form>
<?php
}
?>

BIN
tools/guidecode/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

944
tools/guidecode/r.inc.php Normal file
View File

@ -0,0 +1,944 @@
<?php
// Warzone Guide main library
// configuration
$adminpass = 'INSERT PASSWORD HERE';
// adminpass must not contain ':', and differences in capitalization and whitespace will be ignored
// code
if (substr($_SERVER['REQUEST_URI'],0,9) === '/r/r.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/r/'.substr($_SERVER['REQUEST_URI'],9));
die();
}
if (substr($_SERVER['REQUEST_URI'],0,9) === '/c/c.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/c/'.substr($_SERVER['REQUEST_URI'],9));
die();
}
if (substr($_SERVER['REQUEST_URI'],0,9) === '/w/w.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/w/'.substr($_SERVER['REQUEST_URI'],9));
die();
}
if (substr($_SERVER['REQUEST_URI'],0,9) === '/d/d.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/d/'.substr($_SERVER['REQUEST_URI'],9));
die();
}
if (substr($_SERVER['REQUEST_URI'],0,9) === '/b/b.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/b/'.substr($_SERVER['REQUEST_URI'],9));
die();
}
if (substr($_SERVER['REQUEST_URI'],0,11) === '/bp/bp.php?')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://guide.wz2100.net/bp/'.substr($_SERVER['REQUEST_URI'],11));
die();
}
$icons = array(
'commandturretmkii' => 'commandturret',
'commandturretmkiii' => 'commandturret',
'commandturretmkiv' => 'commandturret',
'commandturretii' => 'commandturret',
'commandturretiii' => 'commandturret',
'commandturretiv' => 'commandturret',
'vtolclusterbombsbay' => 'vtolclusterbombbay',
'cannon' => 'lightcannon',
'minirocket' => 'minirocketpod',
'mrlemplacement' => 'minirocketbattery',
'archangelmissileemplacement' => 'archangelmissilebattery',
'angelmissileemplacement' => 'angelmissilebattery',
'seraphmissilearray' => 'angelmissile',
'seraphmissilebattery' => 'angelmissilebattery',
'transport' => 'cyborgtransport',
'transportbody' => 'cyborgtransport',
'hypervelocitycannonemplacement' => 'hpvcannonemplacement',
'hypervelocitycannonhardpoint' => 'hpvcannonhardpoint',
'cyborgchaingun1ground' => 'heavygunner',
'cyborgpropulsion' => 'heavygunner',
'empmortar' => 'empmortarpit',
'massdriver' => 'massdriverfortress',
'plasmacannonemplacement' => 'heavylaseremplacement',
'empcannontower' => 'empmissilehardpoint',
'hardcretecornerwall' => 'hardcretewall',
'engineering' => 'truck',
);
$imgroot = '';
if (is_dir('../icon/')) $imgroot = '../';
function geticon($id, $type=false)
{
global $icons, $imgroot, $wz_research;
if ((!$type || $type == 'w') && file_exists($imgroot.'icon/w/'.$id.'.gif'))
return $imgroot.'icon/w/'.$id.'.gif';
if ((!$type || $type == 'c') && file_exists($imgroot.'icon/c/'.$id.'.gif'))
return $imgroot.'icon/c/'.$id.'.gif';
if ((!$type || $type == 'bp') && file_exists($imgroot.'icon/bp/'.$id.'.gif'))
return $imgroot.'icon/bp/'.$id.'.gif';
if ((!$type || $type == 'd') && file_exists($imgroot.'icon/d/'.$id.'.gif'))
return $imgroot.'icon/d/'.$id.'.gif';
if ((!$type || $type == 'b') && file_exists($imgroot.'icon/b/'.$id.'.gif'))
return $imgroot.'icon/b/'.$id.'.gif';
if ($type)
{
if ($icon = geticon($id)) return $icon;
if ($type == 'r' && $wz_research[$id]['results'][0][1]) return geticon($wz_research[$id]['results'][0][1]);
}
if (isset($icons[$id]))
return geticon($icons[$id]);
if (substr($id,0,4) == 'vtol')
return geticon(substr($id,4));
if (substr($id,-1) == '2')
return geticon(substr($id,0,-1));
return false;
}
function iconimg($id, $type=false, $prefix='../')
{
if ($icon = geticon($id, $type))
return '<img src="'.$prefix.$icon.'" alt="" style="vertical-align:middle;" /> ';
return '';
}
$isadmin = false;
$isauth = false;
if (substr($_COOKIE['name'],-strlen($adminpass)-1)===':'.$adminpass)
{
$isadmin = $isauth = true;
$_COOKIE['name'] = substr($_COOKIE['name'],0,-strlen($adminpass)-1);
}
else if ($_REQUEST['captcha'] === $adminpass)
$isadmin = $isauth = true;
else if (substr($_COOKIE['name'],-3) == ':mg')
{
$isauth = true;
$_COOKIE['name'] = substr($_COOKIE['name'],0,-3);
}
else if ($_COOKIE['name']) $_POST['forget'] = true;
@include_once 'cache/research.inc.php';
@include_once 'cache/weapons.inc.php';
@include_once 'cache/weapontable.inc.php';
@include_once 'cache/wsubclasses.inc.php';
@include_once 'cache/functions.inc.php';
@include_once 'cache/structures.inc.php';
@include_once 'cache/bodies.inc.php';
@include_once 'cache/propulsions.inc.php';
@include_once 'cache/templates.inc.php';
@include_once 'persist.lib.php';
@include_once 'guide.inc.php';
$idr = array_keys($_GET);
$id = '';
if (!$_GET[$idr[0]])
{
$id = $idr[0];
}
else if ($_GET['w'] && $_GET['b'] && $_GET['p'])
{
$id = true;
}
if (!$id && $run)
{
header("HTTP/1.0 404 Not Found");
include('404.php');
die();
}
else if ($id && $id !== true && (
substr($_SERVER['REQUEST_URI'],0,3)=='/b/' && !$wz_structures[$id] ||
substr($_SERVER['REQUEST_URI'],0,3)=='/d/' && !$wz_structures[$id] ||
substr($_SERVER['REQUEST_URI'],0,3)=='/w/' && !$wz_weapons[$id] ||
substr($_SERVER['REQUEST_URI'],0,3)=='/c/' && !$wz_cyborgs[$id] && !$wz_templates[$id] ||
substr($_SERVER['REQUEST_URI'],0,4)=='/bp/' && !$wz_bodies[$id] && !$wz_propulsions[$id] ||
substr($_SERVER['REQUEST_URI'],0,3)=='/r/' && !$wz_research[$id]
))
{
header("HTTP/1.0 404 Not Found");
include('404.php');
die();
}
$ar = array();
$dt = array('weaponacc' => 'accuracy', 'weapondam' => 'damage', 'weaponsdam' => 'splash damage', 'weaponfdam' => 'burn damage', 'weaponrof' => 'rate of fire');
$upgrades = array('powerupgrade' => 'power production', 'researchupgrade' => 'research speed', 'repairupgrade' => 'repair facility speed', 'rearmupgrade' => 'VTOL rearming pad speed', 'vehicleconstupgrade' => 'construction speed', 'factoryupgrade' => 'factory production speed', 'cyborgfactoryupgrade' => 'cyborg factory production speed', 'vtolfactoryupgrade' => 'VTOL factory production speed', 'vehiclesensorupgrade' => 'vehicle sensor range', 'vehicleecmupgrade' => 'vehicle ECM range', 'vehicleengine' => 'vehicle engine output', 'vehiclearmor' => 'vehicle kinetic armor', 'vehiclehp' => 'vehicle HP', 'vehiclethermal' => 'vehicle thermal armor', 'cyborgengine' => 'cyborg engine output', 'cyborghp' => 'cyborg HP', 'cyborgarmor' => 'cyborg kinetic armor', 'cyborgthermal' => 'cyborg thermal armor', 'wallarmor' => 'hardcrete kinetic/thermal armor', 'wallhp' => 'hardcrete HP', 'structurearmor' => 'base structure kinetic/thermal armor', 'structurehp' => 'base structure HP', 'structureresist' => 'base structure Nexus link resistance');
$directions = array('direct' => '', 'indirect' => 'indirect ', 'indirecthoming' => 'indirect-homing ', 'homingdirect' => 'homing ', 'erraticdirect' => 'erratic ');
$classes = array('kinetic' => 'kinetic', 'heat' => 'thermal');
$types = array('antiaircraft' => 'anti-air', 'antipersonnel' => 'anti-personnel', 'antitank' => 'anti-tank', 'artilleryround' => 'artillery', 'bunkerbuster' => 'anti-structure', 'flamer' => 'fire', 'allrounder' => 'all-rounder');
$subclasses = array('machinegun' => 'machinegun', 'cannon' => 'cannon', 'flame' => 'flamer', 'mortars' => 'mortar', 'howitzers' => 'howitzer', 'rocket' => 'mini-rocket', 'missile' => 'missile', 'slowrocket' => 'rocket', 'gauss' => 'rail gun', 'energy' => 'laser', 'electronic' => 'electronic weapon', 'command' => 'commander', 'emp' => 'EMP cannon', 'aagun' => 'AA-gun', 'bomb' => 'bomb', 'lassat' => 'laser satellite');
$props = array('legged' => 'Cyborg', 'wheeled' => 'Wheels', 'halftracked' => 'Half-Tracks', 'tracked' => 'Tracks', 'lift' => 'VTOL', 'hover' => 'Hover', 'soft' => 'Soft structures', 'medium' => 'Medium structures', 'hard' => 'Hard structures', 'bunker' => 'Bunkers');
$sensors = array('standard' => 'Sensor', 'indirectcb' => 'Counter-Battery', 'vtolintercept' => 'VTOL Sensor', 'vtolcb' => 'VTOL Counter-Battery', 'super' => 'Sensor, VTOL, CB, VTOL CB', 'radardetector' => 'Sensor Detector', 'uplink' => 'Reveal entire map');
$strengths = array('soft' => 'Soft', 'medium' => 'Medium', 'hard' => 'Hard', 'bunker' => 'Bunker');
$rebalance = false;
if ($wz_weapons['heavycannon']['type'] == 'antiaircraft')
{
$rebalance = true;
$types['antiaircraft'] = 'all-rounder';
}
function simplify($name,$array=array())
{
$name = strtr($name, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz");
$in = ($name[0]=='*');
$name = preg_replace('/[^a-z0-9]+/','',$name);
$i = 1;
if ($name) $id = 'internal-'.$name;
//if (strpos($wzid,'R-') === 0) $name = 'r-'.$name;
//else if (strpos($wzid,'Cyborg-Wpn-') !== false || strpos($wzid,'Cyb-') || //strpos($wzid,'Cyborg') !== false) $name = 'c-'.$name;
$id = $name;
while (in_array($id,$array)) $id = $name.(++$i);
return $id;
}
function tourl($id)
{
if (!$id) return '';
return $id;
}
/*
* GENERATOR FUNCTIONS
*/
function upg($val, $upg=0)
{
return round($val*(100+$upg)/100,1);
}
function iupg($val, $upg=0)
{
return intval($val*(100+$upg)/100);
}
function mktemplate($weapon,$body,$prop)
{
global $wz_weapons, $wz_bodies, $wz_propulsions;
if (is_string($weapon)) $weapon = $wz_weapons[$weapon];
if (is_string($body)) $body = $wz_bodies[$body];
if (is_string($prop)) $prop = $wz_propulsions[$prop];
return array(
'tid' => '',
'name' => $weapon['name'].' '.$body['name'].' '.$prop['name'],
'turrets' => array(
$weapon['wid']
),
'body' => $body['bid'],
'propulsion' => $prop['pid'],
'brain' => '',
'construct' => '',
'ecm' => '',
'repair' => NULL,
'sensor' => NULL,
'prereq' => '',
'hp' => iupg($body['hp'],$prop['hp']),
'armor' => $body['armor'],
'thermal' => $body['thermal'],
'engine' => $body['engine'],
'maxspeed' => $prop['maxspeed'],
'weight' => $weapon['weight']+iupg($body['weight'],$prop['weight']),
'bp' => $weapon['bp']+iupg($body['bp'],$prop['bp']),
'price' => $weapon['price']+$body['price']+$prop['price'],
'aionly' => FALSE
);
}
function weapontype($weapon, $upg=0)
{
global $directions, $classes, $types, $subclasses;
$res = '';
if ($weapon['splash'])
$res = 'Splash: '.iupg($weapon['splashdamage'],$upg).($weapon['splashacc']==100?'':' - '.$weapon['splashacc'].'%').' - radius '.round($weapon['splash']/128,1).' | ';
if ($weapon['burn'])
$res .= 'Burn: '.iupg($weapon['burndamage'],$upg).' - '.($weapon['burntime']/10).' sec - radius '.round($weapon['burn']/128,1).' | ';
return $res.$directions[$weapon['direction']].$classes[$weapon['class']].' '.$types[$weapon['type']].' '.$subclasses[$weapon['subclass']];
}
function weapondam($weapon, $upg=0)
{
if ($weapon['subclass']=='emp' && $weapon['damage']==0)
{
return "<abbr class=\"detail\" title=\"".weapontype($weapon, $upg)."\">EMP".($weapon['splash']?'s':'').($weapon['burn']?'f':'')."</abbr>";
}
return "<abbr class=\"detail".($weapon['class']=='heat'?' thermal':' kinetic')."\" title=\"".weapontype($weapon, $upg)."\">".iupg($weapon['damage'],$upg)."".($weapon['splash']?'s':'').($weapon['burn']?'f':'').($weapon['subclass']=='emp'?'+EMPs':'')."</abbr>";
}
function weaponrof($weapon, $upg=0)
{
if ($weapon['numattackruns'])
return "<abbr class=\"detail\" title=\"".$weapon['nrounds']." round".($weapon['nrounds']==1?'':'s')." every ".round(($weapon['fcooldown']*$weapon['nrounds']+$weapon['cooldown'])*(100-$upg)/1000,1)." sec".($weapon['targetair']?($weapon['targetground']?' | versatile':' | anti-air'):'')."\">".$weapon['nrounds']."<span class=\"smallgrey\">&times;".$weapon['numattackruns']."</span></abbr>";
return "<abbr class=\"detail\" title=\"".$weapon['nrounds']." round".($weapon['nrounds']==1?'':'s')." every ".round(($weapon['fcooldown']*$weapon['nrounds']+$weapon['cooldown'])*(100-$upg)/1000,1)." sec".($weapon['targetair']?($weapon['targetground']?' | versatile':' | anti-air'):'')."\">".round($weapon['rof']*100/(100-$upg),1)."</abbr>";
}
function templatehp($template, $upg=0)
{
global $wz_bodies, $wz_propulsions;
return '<abbr class="detail" title="Body: '.($wz_bodies[$template['body']]['hp']).', Propulsion: '.($wz_bodies[$template['body']]['hp']*$wz_propulsions[$template['propulsion']]['hp']/100).', Turret: '.($template['hp']-$wz_bodies[$template['body']]['hp']*($wz_propulsions[$template['propulsion']]['hp']+100)/100).($upg?', Upgrades: +'.(iupg($template['hp'],$upg)-$template['hp']):'').'">'.iupg($template['hp'],$upg)."</abbr>";
}
function structurehp($structure, $upg=0)
{
global $wz_weapons;
if (!$structure['turrets']) return ''.$structure['hp'];
return '<abbr class="detail" title="Base: '.($structure['hp']-$wz_weapons[$structure['turrets'][0]]['hp']).', Turret: '.($wz_weapons[$structure['turrets'][0]]['hp']).($upg?', Upgrades: +'.(iupg($structure['hp'],$upg)-$structure['hp']):'').'">'.iupg($structure['hp'],$upg)."</abbr>";
}
function bodyarmor($body, $upg1=0, $upg2=0)
{
//if ($body['body']) $body = $GLOBALS['wz_bodies'][$body['body']];
return '<span class="armor"><span class="kinetic">'.iupg($body['armor'],$upg1).'</span>/<span class="thermal">'.iupg($body['thermal'],$upg2).'</span></span>';
}
function structurearmor($struct, $upg=0)
{
//if ($body['body']) $body = $GLOBALS['wz_bodies'][$body['body']];
return '<span class="armor"><span class="kinetic">'.iupg($struct['armor'],$upg).'</span>/<span class="thermal">'.iupg($struct['armor'],$upg).'</span></span>';
}
function templatespeed($template, $upg=0)
{
global $wz_propulsions, $wz_proptypes, $wz_bodies;
$prop = $wz_propulsions[$template['propulsion']];
if (!$template['weight']) return 0;
return intval(min(
$prop['maxspeed'],
$wz_proptypes[$prop['prop']]['speed']*iupg($wz_bodies[$template['body']]['engine'],$upg)/$template['weight']
));
}
function weaponupgrades($weapon, $root='')
{
global $wz_wsubclasses, $wz_research, $wz_functions;
if (is_string($weapon)) $weapon = $GLOBALS['wz_weapons'][$weapon];
$tout = '';
if ($weapon['turret'] == 'weapon' && $wz_wsubclasses[$weapon['subclass']]['upgrades'])
{
foreach ($wz_wsubclasses[$weapon['subclass']]['upgrades'] as $upgrade)
{
if ($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['type'] == 'weapondam')
$tout .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
}
if ($tout) $out .= "<h4 id=\"damupgrades\">Damage upgrades</h4>\n<ul>".$tout."</ul>\n";
else $out .= "<h4 id=\"damupgrades\">Damage upgrades</h4>\n<p><em>No damage upgrades available.</em></p>\n";
$tout = '';
foreach ($wz_wsubclasses[$weapon['subclass']]['upgrades'] as $upgrade)
if ($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['type'] == 'weaponrof')
$tout .= '<li>'.round(10000/(100-$wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']),0).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
if ($tout) $out .= "<h4 id=\"rofupgrades\">ROF upgrades</h4>\n<ul>".$tout."</ul>\n";
else $out .= "<h4 id=\"rofupgrades\">ROF upgrades</h4>\n<p><em>No ROF upgrades available.</em></p>\n";
$tout = '';
foreach ($wz_wsubclasses[$weapon['subclass']]['upgrades'] as $upgrade)
if ($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['type'] == 'weaponacc')
$tout .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
if ($tout) $out .= "<h4 id=\"accupgrades\">Accuracy upgrades</h4>\n<ul>".$tout."</ul>\n";
else $out .= "<h4 id=\"accupgrades\">Accuracy upgrades</h4>\n<p><em>No accuracy upgrades available.</em></p>\n";
}
else if ($weapon['turret'] == 'construct')
{
$out .= "<ul>";
foreach ($wz_wsubclasses['construct']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
else if ($weapon['turret'] == 'sensor')
{
$out .= "<ul>";
foreach ($wz_wsubclasses['sensor']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
else $out .= "<p><em>No upgrades available.</em></p>\n";
return $out;
}
function bodyupgrades($cyborg=true, $root='')
{
global $wz_upgrades, $wz_research, $wz_functions;
$out = '<h4 id="hpupgrades">HP / kinetic-armor upgrades</h4>';
$out .= "<ul>";
foreach ($wz_upgrades[$cyborg?'cyborghp':'vehiclehp']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% / '.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][1]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
$out .= '<h4 id="thermalupgrades">Thermal-armor upgrades</h4>';
$out .= "<ul>";
foreach ($wz_upgrades[$cyborg?'cyborgthermal':'vehiclethermal']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
$out .= '<h4 id="engineupgrades">Engine upgrades</h4>';
$out .= "<ul>";
foreach ($wz_upgrades['vehicleengine']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
return $out;
}
function structureupgrades($structid, $root='', $base=false)
{
global $wz_upgrades, $wz_research, $wz_functions;
if (!is_string($structid)) $structid = $structid['sid'];
$out = '';
if ($structid == 'researchfacility' || $structid == 'researchmodule')
{
$out .= "<ul>";
foreach ($wz_upgrades['researchupgrade']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
if ($structid == 'factory' || $structid == 'vtolfactory' || $structid == 'cyborgfactory' || $structid == 'factorymodule')
{
$out .= "<ul>";
foreach ($wz_upgrades['factoryupgrade']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
if ($structid == 'powergenerator' || $structid == 'powermodule' || $structid == 'oilderrick')
{
$out .= "<ul>";
foreach ($wz_upgrades['powerupgrade']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
if ($structid == 'vtolrearmingpad')
{
$out .= "<ul>";
foreach ($wz_upgrades['rearmupgrade']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
if ($structid == 'repairfacility')
{
$out .= "<ul>";
foreach ($wz_upgrades['repairupgrade']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
}
$out .= '<h4 id="hpupgrades">HP / armor upgrades</h4>';
$out .= "<ul>";
foreach ($wz_upgrades[$base?'structurehp':'wallhp']['upgrades'] as $upgrade)
$out .= '<li>'.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][0]['amt']+100).'% / '.($wz_functions[$wz_research[$upgrade]['result'][0][1]]['funcs'][1]['amt']+100).'% - <a href="'.$root.'r/'.$upgrade.'">'.$wz_research[$upgrade]['name']."</a></li>\n";
$out .= "</ul>\n";
return $out;
}
function weapondesc($weapon, $root='')
{
global $wz_wsubclasses, $wz_research, $wz_wids, $sensors;
if (is_string($weapon)) $weapon = $GLOBALS['wz_weapons'][$weapon];
$out = '<p>'.iconimg($weapon['tid']?$weapon['tid']:$weapon['wid'],'w').' <span class="price">$'.$weapon['price'].'</span> <span class="smallgrey indent">Turret ID: '.aval(array_keys($wz_wids,$weapon['wid']),0).'</span></p>';
if ($weapon['turret'] == 'weapon')
$out .= '<p>['.weapontype($weapon)."]</p>\n";
$out .= '<div class="b"><table class="mpad">';
$out .= '<tr><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
if ($weapon['turret'] == 'weapon')
{
$out .= '<tr><th class="r">Damage:</th><td class="l">'.weapondam($weapon).'</td><td class="l">'.weapondam($weapon,$wz_wsubclasses[$weapon['subclass']]['maxdam']).'</td></tr>';
$out .= '<tr><th class="r">ROF:</th><td class="l">'.weaponrof($weapon).'</td><td class="l">'.weaponrof($weapon,$wz_wsubclasses[$weapon['subclass']]['maxrof']).'</td></tr>';
if ($weapon['subclass'] != 'emp') $out .= '<tr><th class="r">DPS:</th><td class="l">'.$weapon['dps'].'</td><td class="l">'.round($weapon['dps']*100/(100-$wz_wsubclasses[$weapon['subclass']]['maxrof'])*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
$out .= '<tr><th class="r">Accuracy:<br /><span class="smallgrey">(close-long)</span></th><td class="l" valign="top"><span class="smallgrey">'.$weapon['sacc'].'-</span>'.$weapon['lacc'].'%</td><td class="l" valign="top"><span class="smallgrey">'.round($weapon['sacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'-</span>'.round($weapon['lacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'%</td></tr>';
$out .= '<tr><th class="r">Range:<br /><span class="smallgrey">(close-long)</span></th><td class="l" colspan="2" valign="top">'."<span class=\"smallgrey\">".round($weapon['srange']/128,1)."-</span><span class=\"fwrap\"> </span>".round($weapon['lrange']/128,1)."</td></tr>";
if ($weapon['numattackruns']) $out .= '<tr><th class="r">Attack runs:</th><td class="l" colspan="2" valign="top">'.$weapon['numattackruns'].'</td></tr>';
if ($weapon['subclass'] != 'emp' && $weapon['numattackruns']) $out .= '<tr><th class="r"><abbr title="Damage Per Rearm">DPR</abbr>:</th><td class="l">'.($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']).'</td><td class="l">'.round($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
}
else if ($weapon['turret'] == 'sensor')
{
$out .= '<tr><th class="r">Sensor:</th><td class="l" colspan="2">'.$sensors[$weapon['sensor']].'</td></tr>';
$out .= '<tr><th class="r">Range:</th><td class="l">'.round($weapon['lrange']/128,1).'</td><td class="l">'.round($weapon['lrange']*($wz_wsubclasses['sensor']['maxrange']+100)/100/128,1).'</td></tr>';
}
else
{
$out .= '<tr><th class="r">Build points:</th><td class="l">'.$weapon['build'].'</td><td class="l">'.round($weapon['build']*($wz_wsubclasses[$weapon['subclass']]['maxbuild']+100)/100,1).'</td></tr>';
}
$out .= '<tr class="nf"><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
$out .= '<tr><th class="r">HP:</th><td class="l" colspan="2" valign="top">'.$weapon['hp']."</td></tr>";
$out .= '<tr><th class="r">Weight:</th><td class="l" colspan="2" valign="top">'.$weapon['weight']."</td></tr>";
$out .= "</table></div>\n";
if ($weapon['prereq']) $out .= "<p><em>Prerequisites:</em> <a href=\"../r/{$weapon['prereq']}\">{$wz_research[$weapon['prereq']]['name']}</a></p>";
return $out;
}
function templatedesc($template, $root='', $cyborg=true)
{
global $wz_wsubclasses, $wz_research, $wz_wids, $wz_tids, $sensors, $wz_upgrades, $wz_templates, $wz_bodies;
if (is_string($template)) $template = $GLOBALS['wz_templates'][$template];
$weapon = $GLOBALS['wz_weapons'][$template['turrets'][0]];
if (iconimg($template['tid'],'c'))
{
$icon = iconimg($template['tid'],'c');
}
else
{
$icon = iconimg($template['turrets'][0],'w').iconimg($template['body'],'bp').iconimg($template['propulsion'],'bp');
}
$out = '<p>'.$icon.' <span class="price">$'.$template['price'].'</span> <span class="smallgrey indent">Template ID: '.aval(array_keys($wz_tids,$template['tid']),0).'</span></p>';
if ($weapon['turret'] == 'weapon')
$out .= '<p>['.weapontype($weapon)."]</p>\n";
$out .= '<div class="b"><table class="mpad">';
$out .= '<tr><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
if ($weapon['turret'] == 'weapon')
{
$out .= '<tr><th class="r">Damage:</th><td class="l">'.weapondam($weapon).'</td><td class="l">'.weapondam($weapon,$wz_wsubclasses[$weapon['subclass']]['maxdam']).'</td></tr>';
$out .= '<tr><th class="r">ROF:</th><td class="l">'.weaponrof($weapon).'</td><td class="l">'.weaponrof($weapon,$wz_wsubclasses[$weapon['subclass']]['maxrof']).'</td></tr>';
if ($weapon['subclass'] != 'emp') $out .= '<tr><th class="r">DPS:</th><td class="l">'.$weapon['dps'].'</td><td class="l">'.round($weapon['dps']*100/(100-$wz_wsubclasses[$weapon['subclass']]['maxrof'])*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
$out .= '<tr><th class="r">Accuracy:<br /><span class="smallgrey">(close-long)</span></th><td class="l" valign="top"><span class="smallgrey">'.$weapon['sacc'].'-</span>'.$weapon['lacc'].'%</td><td class="l" valign="top"><span class="smallgrey">'.round($weapon['sacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'-</span>'.round($weapon['lacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'%</td></tr>';
$out .= '<tr><th class="r">Range:<br /><span class="smallgrey">(close-long)</span></th><td class="l" colspan="2" valign="top">'."<span class=\"smallgrey\">".round($weapon['srange']/128,1)."-</span><span class=\"fwrap\"> </span>".round($weapon['lrange']/128,1)."</td></tr>";
if ($weapon['numattackruns']) $out .= '<tr><th class="r">Attack runs:</th><td class="l" colspan="2" valign="top">'.$weapon['numattackruns'].'</td></tr>';
if ($weapon['subclass'] != 'emp' && $weapon['numattackruns']) $out .= '<tr><th class="r"><abbr title="Damage Per Rearm">DPR</abbr>:</th><td class="l">'.($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']).'</td><td class="l">'.round($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
}
else if ($weapon['turret'] == 'sensor')
{
$out .= '<tr><th class="r">Sensor:</th><td class="l" colspan="2">'.$sensors[$weapon['sensor']].'</td></tr>';
$out .= '<tr><th class="r">Range:</th><td class="l">'.round($weapon['lrange']/128,1).'</td><td class="l">'.round($weapon['lrange']*($wz_wsubclasses['sensor']['maxrange']+100)/100/128,1).'</td></tr>';
}
else
{
$out .= '<tr><th class="r">Build points:</th><td class="l">'.$weapon['build'].'</td><td class="l">'.round($weapon['build']*($wz_wsubclasses[$weapon['subclass']]['maxbuild']+100)/100,1).'</td></tr>';
}
$out .= '<tr class="nf"><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
$out .= '<tr><th class="r">HP:</th><td class="l" valign="top">'.templatehp($template).'</td><td class="l" valign="top">'.templatehp($template,$cyborg?$wz_upgrades['cyborghp']['max']:$wz_upgrades['vehiclehp']['max'])."</td></tr>";
$out .= '<tr><th class="r">Armor:</th><td class="l" valign="top">'.bodyarmor($wz_bodies[$template['body']]).'</td><td class="l" valign="top">'.bodyarmor($wz_bodies[$template['body']],$cyborg?$wz_upgrades['cyborgarmor']['max']:$wz_upgrades['vehiclearmor']['max'],$cyborg?$wz_upgrades['cyborgthermal']['max']:$wz_upgrades['vehiclethermal']['max'])."</td></tr>";
$out .= '<tr><th class="r">Speed:</th><td class="l" valign="top">'.templatespeed($template).'</td><td class="l" valign="top">'.templatespeed($template,$wz_upgrades['vehicleengine']['max'])."</td></tr>";
$out .= '<tr><th class="r">Weight:</th><td class="l" colspan="2" valign="top">'.$template['weight']."</td></tr>";
$out .= "</table></div>\n";
if ($template['prereq']) $out .= "<p><em>Prerequisites:</em> <a href=\"../r/{$template['prereq']}\">{$wz_research[$template['prereq']]['name']}</a></p>";
return $out;
}
function structuredesc($struct, $root='', $base=false)
{
global $wz_wsubclasses, $wz_research, $wz_wids, $wz_sids, $sensors, $wz_upgrades;
if (is_string($struct)) $struct = $GLOBALS['wz_structures'][$struct];
$weapon = array();
if ($struct['turrets'])
{
$weapon = $GLOBALS['wz_weapons'][$struct['turrets'][0]];
}
$out = '<p>'.iconimg($struct['sid'],'c').' <span class="price">$'.$struct['price'].'</span> <span class="smallgrey indent">Structure ID: '.aval(array_keys($wz_sids,$struct['sid']),0).'</span></p>';
if ($weapon && $weapon['turret'] == 'weapon')
$out .= '<p>['.weapontype($weapon)."]</p>\n";
$out .= '<div class="b"><table class="mpad">';
$out .= '<tr><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
if ($weapon['turret'] == 'weapon')
{
$out .= '<tr><th class="r">Damage:</th><td class="l">'.weapondam($weapon).'</td><td class="l">'.weapondam($weapon,$wz_wsubclasses[$weapon['subclass']]['maxdam']).'</td></tr>';
$out .= '<tr><th class="r">ROF:</th><td class="l">'.weaponrof($weapon).'</td><td class="l">'.weaponrof($weapon,$wz_wsubclasses[$weapon['subclass']]['maxrof']).'</td></tr>';
if ($weapon['subclass'] != 'emp') $out .= '<tr><th class="r">DPS:</th><td class="l">'.$weapon['dps'].'</td><td class="l">'.round($weapon['dps']*100/(100-$wz_wsubclasses[$weapon['subclass']]['maxrof'])*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
$out .= '<tr><th class="r">Accuracy:<br /><span class="smallgrey">(close-long)</span></th><td class="l" valign="top"><span class="smallgrey">'.$weapon['sacc'].'-</span>'.$weapon['lacc'].'%</td><td class="l" valign="top"><span class="smallgrey">'.round($weapon['sacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'-</span>'.round($weapon['lacc']*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'%</td></tr>';
$out .= '<tr><th class="r">Range:<br /><span class="smallgrey">(close-long)</span></th><td class="l" colspan="2" valign="top">'."<span class=\"smallgrey\">".round($weapon['srange']/128,1)."-</span><span class=\"fwrap\"> </span>".round($weapon['lrange']/128,1)."</td></tr>";
if ($weapon['numattackruns']) $out .= '<tr><th class="r">Attack runs:</th><td class="l" colspan="2" valign="top">'.$weapon['numattackruns'].'</td></tr>';
if ($weapon['subclass'] != 'emp' && $weapon['numattackruns']) $out .= '<tr><th class="r"><abbr title="Damage Per Rearm">DPR</abbr>:</th><td class="l">'.($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']).'</td><td class="l">'.round($weapon['damage']*$weapon['lacc']/100*$weapon['nrounds']*$weapon['numattackruns']*($wz_wsubclasses[$weapon['subclass']]['maxdam']+100)/100*($wz_wsubclasses[$weapon['subclass']]['maxacc']+100)/100,1).'</td></tr>';
$out .= '<tr class="nf"><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
}
else if ($weapon['turret'] == 'sensor')
{
$out .= '<tr><th class="r">Sensor:</th><td class="l" colspan="2">'.$sensors[$weapon['sensor']].'</td></tr>';
$out .= '<tr><th class="r">Range:</th><td class="l">'.round($weapon['lrange']/128,1).'</td><td class="l">'.round($weapon['lrange']*($wz_wsubclasses['sensor']['maxrange']+100)/100/128,1).'</td></tr>';
$out .= '<tr class="nf"><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
}
else if ($weapon)
{
$out .= '<tr><th class="r">Build points:</th><td class="l">'.$weapon['build'].'</td><td class="l">'.round($weapon['build']*($wz_wsubclasses[$weapon['subclass']]['maxbuild']+100)/100,1).'</td></tr>';
$out .= '<tr class="nf"><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
}
$out .= '<tr><th class="r">HP:</th><td class="l" valign="top">'.structurehp($struct).'</td><td class="l" valign="top">'.structurehp($struct,$base?$wz_upgrades['structurehp']['max']:$wz_upgrades['wallhp']['max'])."</td></tr>";
$out .= '<tr><th class="r">Armor:</th><td class="l" valign="top">'.structurearmor($struct).'</td><td class="l" valign="top">'.structurearmor($struct,$base?$wz_upgrades['structurearmor']['max']:$wz_upgrades['wallarmor']['max'])."</td></tr>";
$out .= '<tr><th class="r">Strength:</th><td class="l" valign="top" colspan="2">'.($GLOBALS['strengths'][$struct['strength']])."</td></tr>";
$out .= '<tr><th class="r">Size:</th><td class="l" valign="top" colspan="2">'.$struct['w'].'&times;'.$struct['h']."</td></tr>";
$out .= '<tr><th class="r">Height:</th><td class="l" valign="top" colspan="2">'.$struct['z']."</td></tr>";
$out .= "</table></div>\n";
if ($struct['prereq']) $out .= "<p><em>Prerequisites:</em> <a href=\"../r/{$struct['prereq']}\">{$wz_research[$struct['prereq']]['name']}</a></p>";
if ($base) $out .= guide('b/'.$struct['sid']);
return $out;
}
function bodydesc($body, $root='', $cyborg=false)
{
global $wz_research, $wz_upgrades, $wz_bids;
if (is_string($body)) $body = $GLOBALS['wz_bodies'][$body];
$out = '<p>'.iconimg($body['bid'],'bp').' <span class="price">$'.$body['price'].'</span> <span class="smallgrey indent">Body ID: '.aval(array_keys($wz_bids,$body['bid']),0).'</span></p>';
$out .= '<div class="b"><table class="mpad">';
$out .= '<tr><th class="r nb">&nbsp;</th><th class="l small">Base</th><th class="l small">Upgraded</th></tr>';
$out .= '<tr><th class="r">HP:</th><td class="l" valign="top">'.$body['hp'].'</td><td class="l" valign="top">'.iupg($body['hp'],$cyborg?$wz_upgrades['cyborghp']['max']:$wz_upgrades['vehiclehp']['max'])."</td></tr>";
$out .= '<tr><th class="r">Armor:</th><td class="l" valign="top">'.bodyarmor($body).'</td><td class="l" valign="top">'.bodyarmor($body,$cyborg?$wz_upgrades['cyborgarmor']['max']:$wz_upgrades['vehiclearmor']['max'],$cyborg?$wz_upgrades['cyborgthermal']['max']:$wz_upgrades['vehiclethermal']['max'])."</td></tr>";
$out .= '<tr><th class="r">Engine:</th><td class="l" valign="top">'.$body['engine'].'</td><td class="l" valign="top">'.iupg($body['engine'],$wz_upgrades['vehicleengine']['max'])."</td></tr>";
$out .= '<tr><th class="r">Weight:</th><td class="l" colspan="2" valign="top">'.$body['weight']."</td></tr>";
$out .= "</table></div>\n";
if ($body['prereq']) $out .= "<p><em>Prerequisites:</em> <a href=\"../r/{$body['prereq']}\">{$wz_research[$body['prereq']]['name']}</a></p>";
return $out;
}
function showprereqs($id, &$ar, $root='', $last=false)
{
global $wz_research, $wz_structures;
if (in_array($id,$ar))
return "<li".($last?' class="last"':'')."><span class=\"expcol nec\"></span><div class=\"smallgrey ti\">{$wz_research[$id]['name']} <em>(See above)</em></div></li>\n";
if (substr($id,0,5)=='../s/')
return "<li".($last?' class="last"':'')."><span class=\"expcol nec\"></span><div class=\"ti\"><em>".$wz_structures[substr($id,5)]['name']." built</em></div></li>\n";
$ar[] = $id;
$out = '<li'.($last?' class="last"':'').'>';
$out .= ($id==$GLOBALS['id']?('<div class="ti">'.$wz_research[$id]['name']):((($wz_research[$id]['prereqs'])&&(substr($wz_research[$wz_research[$id]['prereqs'][0]]['name'],0,4) !== 'CAM1' && $wz_research[$id]['prereqs'][0] != $id)?"<a href=\"#\" id=\"btn$id\" onclick=\"return toggle('$id',this)\" class=\"expcol col\"></a>":($id!=$GLOBALS['id']?'<span class="expcol nec"></span>':'')).'<div class="ti"><a href="'.$root.'r/'.$id.'">'.$wz_research[$id]['name'].'</a>'));
if ($wz_research[$id]['prereqs'])
{
if (substr($wz_research[$wz_research[$id]['prereqs'][0]]['name'],0,4) === 'CAM1')
$out .= ' <span class="grey">[<abbr title="This does not have any prerequisites, and can be researched at the beginning of any game.">base</abbr>]</span></div>';
else if ($wz_research[$id]['prereqs'][0] == $id)
$out .= ' <span class="grey">[<abbr title="This does not need to be researched; it has already been researched in every game.">automatic</abbr>]</span></div>';
else
{
$out .= "</div>\n<ul id=\"prereq$id\">\n";
$n = count($wz_research[$id]['prereqs']);
//if ($wz_research[$id]['prereqs'][$n-1] == 'synapticlink') $n--;
foreach ($wz_research[$id]['prereqs'] as $i => $prereq)
$out .= showprereqs($prereq, $ar, $root, $i==($n-1));
$out .= "</ul>\n";
}
} else $out .= '</div>';
return $out."</li>\n";
}
function gentechtree($id, &$ar, $root='', $last=false, $depth=0, $parent='')
{
global $wz_research, $wz_structures, $deepest, $deepests;
if ($depth>$deepest)
{
$deepest = $depth;
$deepests = array($id);
}
else if ($depth == $deepest) $deepests[] = $id;
if (in_array($id,$ar))
return "<li".($last?' class="last"':'')."><span class=\"expcol nec\"></span><div class=\"smallgrey ti\"><a href=\"{$root}r/{$id}\">{$wz_research[$id]['name']}</a> <em><a href=\"#{$id}\" onclick=\"highlight('{$id}'); return expandto('{$id}')\">(See above)</a></em></div></li>\n";
$ar[] = $id;
$out = '<li'.($last?' class="last"':'').' id="li'.$id.'">';
$out .= (in_array($id,array('machinegun','sensorturret','engineering'))?('<div class="ti" id="'.$id.'"><a href="'.$root.'r/'.$id.'">'.$wz_research[$id]['name'].'</a>'):((($wz_research[$id]['allows'])&&(substr($wz_research[$wz_research[$id]['allows'][0]]['name'],0,4) !== 'CAM1' && $wz_research[$id]['allows'][0] != $id)?"<a href=\"#\" id=\"btn$id\" onclick=\"return toggle('$id',this)\" class=\"expcol col\"></a>":($id!=$GLOBALS['id']?'<span class="expcol nec"></span>':'')).'<div class="ti" id="'.$id.'"><a href="'.$root.'r/'.$id.'" id="item'.$id.'">'.$wz_research[$id]['name'].'</a>'));
if ($wz_research[$id]['allows'])
{
$out .= "</div>\n<ul id=\"prereq$id\">\n";
$n = count($wz_research[$id]['allows']);
foreach ($wz_research[$id]['allows'] as $i => $allow)
$out .= gentechtree($allow, $ar, $root, $i==($n-1), $depth+1, $id);
$out .= "</ul>\n";
} else $out .= '</div>';
return $out."</li>\n";
}
function showallows($id,$root='')
{
global $wz_research, $wz_structures;
$out = "<div class=\"b\"><ul>\n";
if (!$wz_research[$id]['allows'])
return '<p><em>'.$wz_research[$id]['name'].' is not required for any research.</em></p>';
else foreach ($wz_research[$id]['allows'] as $allow)
{
if ($allow == $id) continue;
$prereqs = $wz_research[$allow]['prereqs'];
$fprereqs = array($wz_research[$id]['name']);
foreach ($prereqs as $prereq) if ($prereq != $id)
$fprereqs[] = (substr($prereq,0,5)=='../s/'?'<em>'.$wz_structures[substr($prereq,5)]['name'].' built</em>':'<a href="'.$root.'r/'.$prereq.'">'.$wz_research[$prereq]['name'].'</a>');
$out .= '<li><a href="'.$root.'r/'.$allow.'"><strong>'.$wz_research[$allow]['name'].'</strong></a> &laquo; <span class="small">'.implode(' + ',$fprereqs)."</span></li>\n";
}
return $out.'</ul></div>';
}
function aval($array, $i)
{
return $array[$i];
}
function showdesc($id, $root='')
{
if (!$id) return 'Error: No ID provided.';
if ($id == 'NOID') $id = '';
global $wz_research, $wz_weapons, $wz_templates, $wz_functions, $wz_bodies, $wz_propulsions, $wz_structures, $upgrades, $dt, $wz_rids, $subclasses;
$out = '<p>'.iconimg($id,'r').'<span class="price">$'.min(intval($wz_research[$id]['price']/32),450).'</span> <span class="smallgrey indent">'.aval(array_keys($wz_rids,$id),0).'</span></p>';
$out .= '<p>'.($wz_research[$id]['major']?'<span class="small">[<strong>Major research</strong>]</span>':'<span class="small">[Minor research]</span>').'</p>';
if ($wz_research[$id]['desc']) $out .= '<blockquote><em>'.implode('<br />',$wz_research[$id]['desc']).'</em></blockquote>';
if (count($wz_research[$id]['result']))
{
$out .= "<ul class=\"b\">\n";
foreach ($wz_research[$id]['result'] as $result)
{
if ($result[0]=='function')
{
$funcs = $wz_functions[$result[1]];
foreach ($funcs['funcs'] as $func)
{
if ($func['subclass'] && $func['type']=='weaponrof')
$out .= '<li>Upgrades '.$subclasses[$func['subclass']].' rate of fire to '.round(10000/(100-$func['amt']),0).'%</li>';
else if ($func['subclass'])
$out .= '<li>Upgrades '.$subclasses[$func['subclass']].' '.$dt[$func['type']].' to '.($func['amt']+100).'%</li>';
else if (isset($upgrades[$func['type']]))
$out .= '<li>Upgrades '.$upgrades[$func['type']].' to '.($func['amt']+100).'%</li>';
else
$out .= '<li>Unknown upgrade: '.$func['type'].'</li>';
}
}
else if ($result[0]=='weapon' && $result[1]=='autorepair')
$out .= '<li>Enables auto-repair</li>';
else if ($result[0]=='weapon')
$out .= '<li>Gives new turret: <a href="'.$root.'w/'.$result[1].'">'.$wz_weapons[$result[1]]['name'].'</a></li>';
else if ($result[0]=='cyborg')
$out .= '<li>Gives new cyborg: <a href="'.$root.'c/'.$result[1].'">'.$wz_templates[$result[1]]['name'].'</a></li>';
else if ($result[0]=='rplcweapon')
$out .= '<li>Automatically replaces: <a href="'.$root.'w/'.$result[1].'">'.$wz_weapons[$result[1]]['name'].'</a></li>';
else if ($result[0]=='redweapon')
$out .= '<li>Makes turret obsolete: <a href="'.$root.'w/'.$result[1].'">'.$wz_weapons[$result[1]]['name'].'</a></li>';
else if ($result[0]=='redstructure')
$out .= '<li>Makes structure obsolete: '.$wz_structures[$result[1]]['name'].'</li>';
else if ($result[0]=='struct')
$out .= '<li>Gives new structure: '.$wz_structures[$result[1]]['name'].'</li>';
else if ($result[0]=='body')
$out .= '<li>Gives new body: '.$wz_bodies[$result[1]]['name'].'</li>';
else if ($result[0]=='propulsion')
$out .= '<li>Gives new propulsion: '.$wz_propulsions[$result[1]]['name'].'</li>';
else
$out .= '<li>Unknown result: '.$result[0].'</li>';
}
$out .= "</ul>\n";
}
if ($wz_research[$id]['prereqs'][0] == $id)
$out .= '<p class="small"><em>Automatic</em> &ndash; This does not need to be researched; it has already been researched in every game.</p>';
if (substr($wz_research[$wz_research[$id]['prereqs'][0]]['name'],0,4) === 'CAM1')
$out .= '<p class="small"><em>Base</em> &ndash; This does not have any prerequisites, and can be researched at the beginning of any game.</p>';
return $out;
}
/*
* COMMENTARY FUNCTIONS
*/
$forgotten = false;
$falsecookie = false;
if (!$_POST['forget'] && $_POST['remember'] && ($_COOKIE['name'] != trim($_POST['name']) && ($isauth || simplify($_POST['captcha'])=='mg' || simplify($_POST['captcha'])=='machinegun')))
{
setcookie('name', trim($_POST['name']).($isadmin?':'.$adminpass:':mg'), time()+365*24*60*60,'/');
$_COOKIE['name'] = trim($_POST['name']);
$falsecookie = true;
}
else if ($_POST['forget'] && $_COOKIE['name'])
{
setcookie('name', '', time()-60*60,'/');
$forgotten = true;
$_COOKIE['name'] = '';
$_POST['name'] = '';
$_REQUEST['name'] = '';
$isauth = $isadmin = false;
}
function onreldate($time)
{
if (!$time) return 'never';
$suf = 'ago';
$rtime = ($ctime=time()) - $time;
if (!$rtime) return 'just now';
if ($rtime < 0) { $suf = 'from now'; $rtime = -$rtime; }
if ($rtime < 60) return $rtime.' second'.($rtime==1?'':'s').' '.$suf;
$rtime = intval($rtime/60);
if ($rtime < 60) return $rtime.' minute'.($rtime==1?'':'s').' '.$suf;
if ($rtime < 120) return 'an hour and '.($rtime-60).' minute'.($rtime==61?'':'s').' '.$suf;
//$rtime = intval($rtime/60);
//echo '[rtime '.$rtime.']';
if (intval($time/86400)==intval($ctime/86400)) // same day
return intval($rtime/60).($rtime%60>=30?' and a half':'').' hour'.($rtime<90?'':'s').' '.$suf;
if (($daysago=intval($ctime/86400)-intval($time/86400))==1)
return 'yesterday';
if ($daysago==-1)
return 'tomorrow';
if ($daysago<=3)
return $daysago.' days ago';
$ctimea=getdate($ctime);$timea=getdate($time);
if ($ctimea['year']==$timea['year'])
return 'on '.date('M j',$time);
return 'on '.date('M j, Y',$time);
}
function comments($id, $root='')
{
global $_PERSIST, $isauth, $isadmin, $falsecookie, $forgotten;
$posted = false;
if ($id[1] == '/')
$comments = &$_PERSIST[$id[0]]['subdirs'][substr($id,2)];
else
$comments = &$_PERSIST[$id];
echo '<h3 style="margin-top:100px" id="comments">Commentary</h3>';
if ($_POST['msg'])
{
if (!($_POST['name']=trim($_POST['name'])) || strlen($_POST['name'])>64)
echo '<p style="color:red">Error: Name is invalid.</p>';
if (!$isauth && simplify($_REQUEST['captcha'])!='machinegun' && simplify($_REQUEST['captcha'])!='mg')
echo '<p style="color:red">Error: Wrong answer.</p>';
else
{
if ($isadmin)
{
$comments[] = array(
'name' => stripslashes($_POST['name']),
'msg' => stripslashes($_POST['msg']),
'time' => time(),
'admin' => true
);
}
else
{
$comments[] = array(
'name' => stripslashes($_POST['name']),
'msg' => stripslashes($_POST['msg']),
'time' => time()
);
}
if (persist_update())
$posted = true;
else
echo '<p style="color:red">Error: Internal server error. Please try again later.</p>';
}
}
else if ($_POST['remember'] && !$isauth && simplify($_REQUEST['captcha'])!='machinegun' && simplify($_REQUEST['captcha'])!='mg')
{
echo '<p class="msg" style="color:red">Error: Wrong answer.</p>';
}
if ($comments)
{
foreach ($comments as $i => $comment)
{
if (count($comments)>10 && $i == 0)
echo '<div id="morecomments">';
if (count($comments)>10 && $i == count($comments)-10)
{
?>
</div>
<script type="text/javascript">
<!--
document.getElementById('morecomments').style.display = 'none';
document.write('<p class="backforward" id="morecommentslink" style="text-align: left;"><a href="#comments" onclick="return morecomments();">Earlier comments</a></p>');
function morecomments()
{
document.getElementById('morecomments').style.display = 'block';
document.getElementById('morecommentslink').style.display = 'none';
return false;
}
-->
</script>
<?php
}
echo '<p><em><strong>'.htmlspecialchars($comment['name']).'</strong>'.($comment['admin']?' <span style="color:#556688;font-size:10pt;">[Admin]</span>':'').' wrote '.onreldate($comment['time']).':</em></p><blockquote><p>'.($comment['htmlcomment']?$comment['msg']:nl2br(htmlspecialchars($comment['msg']))).'</p></blockquote>';
}
}
else echo '<p><em>No comments yet.</em></p>';
echo '<h4>Add a comment</h4>';
if ($posted) echo '<p class="msg">Success!</p>';
echo '<form action="'.$root.(tourl($id)=='index'?'./':tourl($id)).'#comments" method="post" onsubmit="if (!document.getElementById(\'captcha\').value) {alert(\'Please answer the question. (Hint: The answer is machinegun)\');return false;}"><p id="testparagraph">Name:<br /><input type="text" class="textbox" name="name" value="'.($_POST['name']?$_POST['name']:$_COOKIE['name']).'" size="20" /> <input type="checkbox" name="remember" id="remember" value="remember"'.($_COOKIE['name']?' checked="checked" />':' />').'<label for="remember">Remember name</label><br />Message:<br /><textarea class="textbox" id="msg" name="msg" rows="8" cols="40">'.($posted?'':$_REQUEST['msg']).'</textarea><br />'.($isauth&&$_COOKIE['name']&&!$falsecookie||$isadmin?'':'To prove you are not a spammer, you must correctly answer this question:<br />The first weapon you get in the single-player campaign is?<br /><input class="textbox" type="text" name="captcha" id="captcha" value="'.($isauth?'machinegun':$_REQUEST['captcha']).'" /><br />(<em>Hint: The answer is machinegun</em>)<br />').'<br /><input type="submit" value="Submit" /></p></form>';
?>
<script>
<!--
document.getElementById('msg').style.width = ''+(document.getElementById('testparagraph').offsetWidth-10>650?650:document.getElementById('testparagraph').offsetWidth-10)+'px';
if (document.getElementById('testparagraph').offsetWidth-10>650) document.getElementById('msg').style.height = '200px';
-->
</script>
<?php
if ($forgotten) echo '<p class="msg">Your name has been forgotten.</p>';
if ($_COOKIE['name']) echo '<form action="'.$root.(tourl($id)=='index'?'./':tourl($id)).'#comments" method="post"><input type="submit" class="small" name="forget" value="Forget name" /></form>';
}
function guide($id, $gen = false, $editbtn = true)
{
global $guide, $isadmin;
$root = '../';
if ($id[1] == '/')
$msg = &$guide[$id[0]]['subdirs'][substr($id,2)];
else
{
$msg = &$guide[$id];
$root = '';
}
$out = '';
if (isset($msg)) $out = $msg['text'];
else if ($gen && $gen !== 'php')
{
$msg['gen'] = $gen;
persist_update('guide');
}
if ($editbtn)
{
if ($gen === 'php')
$out = '<?php if ($isadmin) echo \'<p class="editbtn"><a href="'.$root.'editguide.php?p='.$id.'" target="_blank">Edit</a></p>\'; ?>'.($id=='index'||$id=='panel'?'<div style="clear:right;height:0;"></div>':'').$out;
else if ($id == 'index' && $isadmin)
$out = '<p class="editbtn"><a href="'.$root.'editguide.php?p='.$id.'" target="_blank">Edit</a></p><div style="clear:right;height:0;"></div>'.$out;
else if ($msg['gen'])
$out = '<script type="text/javascript"><!--
if (isadmin()) document.write(\'<p class="editbtn"><a href="'.$root.'editguide.php?p='.$id.'" target="_blank">Edit</a></p>\');
--></script>'.$out;
else if ($_COOKIE['name'] && $isadmin)
$out = '<p class="editbtn"><a href="'.$root.'editguide.php?p='.$id.'" target="_blank">Edit</a></p>'.$out;
}
return $out;
}
function getguide($id)
{
echo '<'.'?php echo guide(\''.$id.'\'); ?'.'>';
}
function leftnav($id)
{
global $guide;
if ($id[1] == '/')
$msg = &$guide[$id[0]]['subdirs'][substr($id,2)];
else
$msg = &$guide[$id];
if ($msg['cachedsb']) return $msg['cachedsb'];
else
{
$msg['cachedsb'] = genleftnav($msg['text']);
persist_update('guide');
}
return $msg['cachedsb'];
}
function genleftnav($text)
{
preg_match_all('/<h(3|4)[^>]* id="([a-z0-9]+)">([^<]*)<\/h(3|4)>/', $text, $matches, PREG_SET_ORDER);
$depth = 0;
$ln = '';
//print_r($matches);
foreach ($matches as $match)
{
if ($match[1]=='3' && $depth==2)
{
$ln .= '</ul>';
$depth = 1;
}
if ($match[1]=='3')
{
if ($depth) $ln .= '</li>'; $depth = 1;
$ln .= '<li><a href="#'.$match[2].'">'.$match[3].'</a>';
}
else
{
if ($depth <= 1) $ln .= '<ul>'; $depth = 2;
$ln .= '<li><a href="#'.$match[2].'">'.$match[3].'</a></li>';
}
}
return $ln;
}
function editguide($id, $edit, $gen=false)
{
global $guide;
$success = true;
if ($id[1] == '/')
$msg = &$guide[$id[0]]['subdirs'][substr($id,2)];
else
$msg = &$guide[$id];
if (!isset($msg) && $gen) $msg['gen'] = $gen;
$msg['text'] = $edit;
unset($msg['cachedsb']);
persist_update('guide') || $success = false;
if ($step = $msg['gen']) include 'generate.php';
return $success;
}
//print_r($_REQUEST); echo $isadmin.$isauth;
?>

711
tools/guidecode/style.css Normal file
View File

@ -0,0 +1,711 @@
body,html,div,p,h1,h2,h3,h4,form,table,tr,td,th
{
margin: 0;
padding: 0;
}
body,html
{
font-family: Helvetica, Arial, Tahoma, Verdana, sans-serif;
font-size: 11pt;
background: #F0F4FF none;
color: #000000;
}
#logo
{
font-size: 16pt;
font-style: normal;
font-weight: bold;
padding: 14px 10px 6px 10px;
margin: 0;
height: 36px;
color: #556699;
}
#logo a
{
color: #556699;
text-decoration: none;
}
#logo a:hover
{
color: #7586B9;
}
#logo a span
{
visibility: hidden;
font-weight: normal;
color: #8899DD;
font-size: 12pt;
}
#logo a:hover span,
#logo a span:hover
{
visibility: visible;
text-decoration: none;
}
#ntwlogo
{
font-size: 16pt;
font-style: normal;
font-weight: bold;
padding: 10px 10px 6px 10px;
margin: 0;
height: 40px;
color: #996655;
}
#nav
{
font-size: 11pt;
border-bottom: 1px solid #556699;
padding: 1px 10px;
}
#nav a
{
text-decoration: none;
color: #556699;
padding: 1px 4px 1px 4px;
border: 1px solid #BBC4EE;
border-bottom: 0;
background: #EAEFFF none;
position: relative;
top: 0;
}
#nav a:hover
{
border-color: #8899DD;
padding: 1px 4px 2px 4px;
background: #DFE4FF none;
position: relative;
top: -1px;
}
#nav a.c
{
border: 1px solid #556699;
border-bottom: 0;
padding: 1px 4px 3px 4px;
background: #F0F4FF none;
top: -1px;
}
#nav a.c:hover
{
border-color: #556699;
padding: 1px 4px 3px 4px;
background: #DFE4FF none;
top: -1px;
}
#leftnav
{
font-size: 11pt;
padding: 10px 0 10px 12px;
background: #F0F4FF none;
top: 0;
left: 0;
}
#leftnav ul, #leftnav li
{
list-style: none;
margin: 0;
padding: 0;
}
#leftnav li
{
padding-top: 1px;
}
#leftnav ul ul
{
font-size: 10pt;
border-left: 1px solid #BBC4EE;
padding: 1px 0 2px 7px;
}
#leftnav a
{
display: block;
color: #556699;
background: transparent none;
text-decoration: none;
border: 0;
margin-left: -12px;
padding: 1px 2px 1px 10px;
}
#leftnav a:hover
{
background: #DFE4FF none;
border: 1px solid #8899DD;
border-left: 0;
padding: 0 1px 0 10px;
}
#leftnav ul ul a
{
margin-left: -20px;
padding-left: 20px;
}
#leftnav ul ul a:hover
{
padding-left: 20px;
}
#leftnav a.c
{
border: 1px solid #556699;
background: #F0F4FF none;
border-left: 0;
padding: 0 1px 0 10px;
}
#leftnav a.c:hover
{
border-color: #556699;
background: #DFE4FF none;
}
#leftnav ul ul a.c
{
padding-left: 20px;
}
#header
{
font-size: 12pt;
font-style: normal;
font-weight: normal;
vertical-align: middle;
padding: 10px 10px 10px 10px;
}
#header strong
{
font-size: 14pt;
font-weight: bold;
}
#header a
{
color: #000000;
text-decoration: none;
}
#header a:hover
{
text-decoration: underline;
}
#header .arrow
{
color: #8899DD;
}
.widewindow #header
{
margin-left: 150px;
}
.widewindow #content
{
margin-left: 150px;
}
.widewindow #leftnav
{
float: left;
width: 138px;
}
.widewindow #leftnavwrapper
{
height: 0;
}
.narrowwindow #header
{
margin-left: 0;
}
.narrowwindow #content
{
margin-left: 0;
}
.narrowwindow #leftnav
{
float: none;
width: 60%;
}
.narrowwindow #leftnavwrapper
{
height: auto;
}
h3
{
border-top: 2px solid #8899DD;
border-left: 2px solid #8899DD;
padding: 3px;
margin-left: -2px;
margin-top: 2em;
font-size: 12pt;
font-style: normal;
font-weight: bold;
color: #556699;
}
h4
{
border-left: 2px solid #8899DD;
padding: 3px;
margin-left: -2px;
margin-top: 1em;
font-size: 11pt;
font-style: italic;
font-weight: bold;
color: #556699;
}
#content h3,
#content h4,
#content table,
#content p,
#content ol,
#content blockquote,
#content .b,
#content .p
{
margin-bottom: 12px;
}
#content p,
#content .b,
#content .p
{
max-width: 9in;
}
#content
{
padding: 10px 10px 80px 10px;
}
#content .iconlink,
#content .iconlink:hover,
#content .iconlink span
{
text-decoration: none;
}
#content .iconlink
{
display: block;
}
#content a.iconlink:hover span
{
text-decoration: underline;
}
#content .iconlink img
{
display: block;
float: left;
}
#content .iconlink span
{
display: block;
margin-left: 65px;
padding-top: 15px;
height: 31px;
}
#content a
{
color: #3A416B;
text-decoration: underline;
}
#content a:hover
{
color: #445599;
}
#content a img,
#content a:hover img
{
text-decoration: none;
border: 0;
}
#content ul,
#content li
{
padding: 0;
}
#content li
{
margin: 0;
}
#content ul
{
padding-left: 22px;
font-size: 11pt;
list-style-image: url('images/bullet.gif');
margin: 0 0 8px 0;
}
#content ul ul
{
margin-bottom: 0;
}
#content ul.nav
{
list-style: none;
list-style-image: none;
margin: 0;
padding: 0;
max-width: 8in;
}
#content ul.nav li
{
list-style: none;
margin: 0;
padding: 0 0 3px 20px;
}
#content ul.nav a
{
display: block;
text-decoration: none;
font-size: 13pt;
color: #556699;
padding: 2px 4px 2px 4px;
border: 1px solid #BBC4EE;
background: #EAEFFF none;
}
#content ul.nav a:hover
{
text-decoration: none;
border-color: #8899DD;
background: #DFE4FF none;
}
#content ul.tree *
{
position: static;
}
#content ul.tree
{
padding: 0;
}
#content ul.tree,
#content ul.tree li,
#content ul.tree ul
{
list-style: none outside none;
display: block;
}
/*#content ul.tree li
{
zoom: 1;
}*/
#content ul.tree ul
{
background: transparent url(images/tree_v.gif) repeat-y scroll 22px 0;
clear: both;
}
#content ul a,
#content table a
{
text-decoration: none;
}
#content ul a:hover,
#content table a:hover
{
text-decoration: underline;
}
#content .tree .expcol
{
display: block;
float: left;
margin: 0; padding: 0;
width: 16px; height: 16px;
}
#content .tree .ti
{ display: block; margin: 0 0 0 22px; padding: 0; height: 20px; }
#content .tree li.last
{ background: #F0F4FF none;}
#content .tree .col
{ background: transparent url(images/tree_col.gif) no-repeat; }
#content .tree .exp
{ background: transparent url(images/tree_exp.gif) no-repeat; }
#content .tree .nec
{ background: transparent url(images/tree_b.gif) no-repeat; }
#content .tree .col:hover
{ background-image: url(images/tree_colh.gif); }
#content .tree .exp:hover
{ background-image: url(images/tree_exph.gif); }
.acol
{ background: transparent url(images/tree_expl.gif) no-repeat scroll center left; padding-left: 18px; }
.aexp
{ background: transparent url(images/tree_coll.gif) no-repeat scroll center left; padding-left: 18px; }
.acol:hover
{ background-image: url(images/tree_explh.gif); }
.aexp:hover
{ background-image: url(images/tree_collh.gif); }
#content table
{ border-bottom: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC; vertical-align: middle; }
#content td,
#content th
{ border-top: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; }
#content th
{ background: #E3E6F1; }
#content th.nb,
#content th.rnb,
#content th.rwb
{ background: transparent; }
#content table.wt
{ border-right: 0; }
#content td.nb,
#content th.nb
{ border: 0; }
#content .rnb
{ border-top: 0; }
#content .rwb
{ border-right: 1px solid #CCCCCC; }
#content .nf .rnb,
#content .nf .nb
{ border-top: 1px solid #CCCCCC; }
#content table.list,
#content table.list td,
#content table.list th
{
border: 0;
font-weight: normal;
font-style: normal;
background: transparent none;
font-size: 11pt;
}
#content table.list th
{
width: 11em;
text-align: right;
}
#content blockquote
{
margin-left: 5px;
border-left: 1px solid #AAAAAA;
padding-left: 10px;
}
.textbox
{
font-family: Helvetica, Arial, Tahoma, Verdana, sans-serif;
font-size: 11pt;
padding: 2px;
border: 1px solid #8899DD;
}
.textbox:hover
{
padding: 2px;
border: 1px solid #556699;
}
.textbox:focus, .textbox:active
{
padding: 1px;
border: 2px solid #556699;
}
table
{
border-spacing: 0;
}
table .l
{
text-align: left;
}
table .r
{
text-align: right;
}
table .c
{
text-align: center;
}
table td,
table th
{
padding: 2px;
font-size: 11pt;
}
table.mpad td,
table.mpad th
{
padding: 2px 4px;
}
table th
{
font-size: 10pt;
}
.grey, .smallgrey
{
color: #888888;
}
.small, .smallgrey
{
font-size: 9pt;
}
.grey a,
#content .smallgrey a
{
color: #888888;
text-decoration: none;
}
.grey a:hover,
#content .smallgrey a:hover
{
color: #888888;
text-decoration: underline;
}
#content .backforward
{
text-align: center;
color: #888888;
}
table th .small,
table th .smallgrey,
table th.small,
table th.smallgrey
{
font-size: 8pt;
}
.fwrap
{
font-size: 1px;
margin-left: -1px;
}
.armor
{
white-space: nowrap;
color: #606060;
}
.armor .kinetic
{ padding-right: 1px; }
.armor .thermal
{ padding-left: 1px; }
.kinetic
{
color: #101080;
}
.thermal
{
color: #B00000;
}
.price
{
color: #116611;
}
.key, kbd
{
font-family: Helvetica, Arial, Tahoma, Verdana, sans-serif;
font-size: 11pt;
padding: 0 2px;
margin: 0 1px;
border-top: 1px solid #EAEAEA;
border-bottom: 1px solid #909090;
border-left: 3px solid #E0E0E0;
border-right: 3px solid #B6B6B6;
background: #D4D4D4 none;
}
.lkey
{
padding: 0 2px;
margin: 0 1px;
border-top: 1px solid #EEEEEE;
border-bottom: 1px solid #A0A0A0;
border-left: 3px solid #E4E4E4;
border-right: 3px solid #C4C4C4;
background: #DDDDDD none;
}
.click
{
color: #717171;
padding: 0 2px;
margin: 0 1px;
border: 1px solid #999999;
white-space: nowrap;
}
.dblclick
{
border: 1px solid #999999;
padding: 0 1px;
}
span.price
{
border: 1px solid #CCCCCC;
padding: 1px 3px;
}
.indent
{
margin-left: 10px;
}
acronym, abbr
{
cursor: help;
}
abbr.detail, acronym.detail
{
border: 0; text-decoration: none;
border-bottom: 1px dotted #888888;
cursor: default;
}
.highlighted
{ background: #D3D6E1; }
.editbtn
{ float: right; }
.msg
{
padding: 5px;
border: 1px solid #8899DD;
background: #EAEFFF none;
}
#content .editbtn a,
#content .backforward a
{
color: #444B62;
padding: 1px 4px 1px 4px;
border: 1px solid #BBC4EE;
background: #EAEFFF none;
text-decoration: none;
}
#content .editbtn a:hover,
#content .backforward a:hover
{
color: #444B62;
border-color: #8899DD;
background: #DFE4FF none;
text-decoration: none;
}
/* image map */
#content .imagemap
{
position: relative;
}
#content .imagemap div
{
height: 0;
overflow: visible;
}
#content .imagemap img
{
display: block;
}
#content .imagemap a
{
display: block;
position: absolute;
text-decoration: none;
}
#content .imagemap a span
{
display: none;
}
#content .imagemap a:hover#interfacecommandpanel
{
background: transparent url(pictures/interface-commandpanel.jpg) no-repeat scroll top left;
}
#content .imagemap a:hover#interfacepower
{
background: transparent url(pictures/interface-power.jpg) no-repeat scroll top left;
}
#content .imagemap a:hover#interfacemap
{
background: transparent url(pictures/interface-map.jpg) no-repeat scroll top left;
}

View File

@ -0,0 +1,223 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<title>{TITLE} - Warzone 2100 Guide</title>
<link rel="icon" href="http://wzguide.co.cc/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="http://wzguide.co.cc/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="{ROOT}style.css" />
<!-- On the downside, I've wasted five hours before finding something that works in IE.
On the upside, I've discovered three IE bugs. -->
<!--[if lte IE 6]>
<style> .tree li { height: 1px; } </style>
<![endif]-->
<!--[if IE 7]>
<style> .tree li { zoom: 1; } </style>
<![endif]-->
</head>
<body onload="begin()">
<h1 id="logo"><a href="{ROOT}">Warzone 2100 Guide <span>(Home)</span></a></h1>
<div id="nav"><a href="{ROOT}"{NAV}>Guide</a> <a href="{ROOT}b/"{NAVb}>Base Structures</a> <a href="{ROOT}d/"{NAVd}>Defenses</a> <a href="{ROOT}w/"{NAVw}>Turrets</a> <a href="{ROOT}c/"{NAVc}>Cyborgs</a> <a href="{ROOT}bp/"{NAVbp}>Bodies and Propulsion</a> <a href="{ROOT}r/"{NAVr}>Research</a></div>
<script type="text/javascript">
<!--
var timer = null;
var wideWindow = false;
if (document.body.offsetWidth > 800)
{
wideWindow = true;
document.write('<div id="mainwrapper" class="widewindow">');
}
else
{
wideWindow = false;
document.write('<div id="mainwrapper" class="narrowwindow">');
}
-->
</script>
<div id="leftnavwrapper"><div id="leftnav" onclick="clearTimeout(timer); timer = setTimeout('chk()',10);"><ul>
{LEFTNAV}
</ul></div></div>
<!--[if IE 6]>
<script>
document.getElementById('leftnavwrapper').style.display = 'none';
</script>
<![endif]-->
<script language="javascript" type="text/javascript">
<!--
var th = document.getElementById('logo').offsetHeight + document.getElementById('nav').offsetHeight;
var lnf = false;
var spos = new Array(), sname = new Array(), cloc = '', ci;
function chk()
{
if (!wideWindow) return;
var pos = (document.body.scrollTop || document.documentElement.scrollTop);
if ((pos >= th) != lnf)
{
if (lnf = !lnf) document.getElementById('leftnav').style.position = 'fixed';
else document.getElementById('leftnav').style.position = 'static';
}
var loc = '';
for (var i=0; i<=spos.length; i++)
{
if (i == spos.length || pos < spos[i] - 30)
{
if (i!=0) loc = sname[i-1];
break;
}
}
//alert(i+' '+loc);
if (loc != cloc)
{
var links=document.getElementById('leftnav').getElementsByTagName('a');
if (cloc != '') links[ci].className = 'nc';
ci = i-1;
if ((cloc=loc) != '') links[ci].className = 'c';
}
}
function resizechk()
{
if (document.body.offsetWidth > 800 && !wideWindow)
{
wideWindow = true;
document.getElementById('mainwrapper').className = 'widewindow';
chk();
}
else if (document.body.offsetWidth <= 800 && wideWindow)
{
wideWindow = false;
document.getElementById('mainwrapper').className = 'narrowwindow';
document.getElementById('leftnav').style.position = 'static';
}
}
window.onscroll = chk;
window.onresize = resizechk;
chk();
function begin()
{
var links=document.getElementById('leftnav').getElementsByTagName('a');
var name;
spos = new Array(); sname = new Array();
for (var i=0; i<links.length; i++)
{
name = links[i].href.substr(links[i].href.indexOf('#')+1);
//document.getElementsByName(name)[0].id = name;
spos[spos.length] = ypos(document.getElementById(name));
sname[sname.length] = name;
links[i].onclick = function() {clearTimeout(timer); timer = setTimeout('chk();scrollBy(0,-10)',10);};
}
if (document.getElementById('comments'))
{
spos[spos.length] = ypos(document.getElementById('comments'));
sname[sname.length] = '';
}
resizechk();
chk();
}
function ypos(obj)
{
var y = 0;
if (obj.offsetParent) do
{
y += obj.offsetTop;
} while (obj = obj.offsetParent);
return y;
}
function isadmin() // Do not use for verification - this function would be better named isadminorsomeonepretendingtobeadmin()
{
var cookies = document.cookie.split(';'), c;
for (var i=0; i < cookies.length; i++)
{
c = cookies[i];
while (c.charAt(0)==' ') c = c.substr(1);
if (c.substr(0,5) == 'name=') return (c.length > 5 && c.substr(c.length-3) != 'mg');
}
return false;
}
-->
</script>
<h2 id="header">{TITLEBAR}</h2>
<div id="content">
{CONTENT}
</div>
<script language="javascript" type="text/javascript">
<!--
document.write('</div>');
begin();
function toggle(id, that)
{
if (document.getElementById('prereq'+id).style.display=='none')
{
document.getElementById('prereq'+id).style.display = 'block';
that.className = 'expcol col';
}
else
{
document.getElementById('prereq'+id).style.display = 'none';
that.className = 'expcol exp';
}
that.blur();
//that.style.marginLeft = '-22px'; // Workaround for IE7 bug
return false;
}
function collapseall(that)
{
var links = that.getElementsByTagName('a');
for (var i=0; i<links.length; i++)
{
if (links[i].className == 'expcol col')
toggle(links[i].id.substr(3),links[i]);
}
return false;
}
function expandall(that)
{
var links = that.getElementsByTagName('a');
for (var i=0; i<links.length; i++)
{
if (links[i].className == 'expcol exp')
toggle(links[i].id.substr(3),links[i]);
}
return false;
}
function expandto(id)
{
var par = document.getElementById('li'+id).parentNode;
if (par.id.substr(0,6) == 'prereq') par = par.parentNode;
if (par.id.substr(0,2) == 'li')
{
id = par.id.substr(2);
if (document.getElementById('btn'+id) && document.getElementById('btn'+id).className == 'expcol exp') toggle(id,document.getElementById('btn'+id));
return expandto(id);
}
return true;
}
var highlighted = '';
function highlight(id)
{
if (highlighted) document.getElementById('item'+highlighted).className = 'n';
highlighted = id;
document.getElementById('item'+id).className = 'highlighted';
}
// Analytics
//-->
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-8534680-2']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();
</script>
</body>
</html>

View File

@ -0,0 +1,93 @@
body,html,div,p,h1,h2,h3,h4,form,table,tr,td,th
{
margin: 0;
padding: 0;
}
body
{
font-size: 9px;
font-family: Arial, Helvetica, sans-serif;
}
img
{
display: block;
}
a
{
background-color: #E0E0E0;
margin:0;
padding:0;
border: 1px solid #999999;
color: #111111;
text-align:center;
text-decoration:none;
}
a span
{
display:block;
padding-top:6px;
}
a:hover
{
border-color: #666666;
background-color: #CCCCCC;
}
a.struct
{
border-color: #9494A9;
background-color: #D8D8F0;
}
a.struct:hover
{
border-color: #606077;
background-color: #C5C5DD;
}
a.weapon
{
border-color: #A99494;
background-color: #F0D8D8;
}
a.weapon:hover
{
border-color: #776060;
background-color: #DDC5C5;
}
a.component
{
border-color: #94A994;
background-color: #D8F0D8;
}
a.component:hover
{
border-color: #607760;
background-color: #C5DDC5;
}
#linkbar
{
display:block;position:fixed;_position:absolute;top:0;left:10px;padding-top:2px;
}
#linkbar a
{
font-size:10pt;padding:3px 5px;
background-color: #eaefff;
border-color: #bbc4ee;
border-top: 0;
color: #556699;
}
#linkbar a:hover
{
padding:3px 5px;
background-color: #dfe4ff;
border-color: #556699;
border-top: 0;
color: #556699;
}