mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
* rewritten to be able to dynamicly load it's components
- CLISetup -> checks for UtilityScripts (config, setup, dbc reader, etc.) -> checks for SetupScripts (individual sql/file generators)
- each step may now have a help prompt attached. If none are provided, the containing script may provide it's help.
- all Scripts are self contained modules. No more editing of 3+ files if some component is added/removed
* removed intermediaries FileGen & SqlGen
* functional changes
- allow providing CLI arguments to siteconfig and account UtilityScript and skip the interactive prompts
- set slot for consumable enchantment items so they are filtrable
- zones dataset is now localized and generated from GlobalStrings.lua and DungeonMap.dbc. Related data dumps removed.
- 'aowow' and 'prQueue' executables now have shebangs
WARNING - command line options have been renamed!
131 lines
3.7 KiB
PHP
131 lines
3.7 KiB
PHP
<?php
|
|
|
|
if (!defined('AOWOW_REVISION'))
|
|
die('illegal access');
|
|
|
|
if (!CLI)
|
|
die('not in cli mode');
|
|
|
|
|
|
CLISetup::registerSetup("build", new class extends SetupScript
|
|
{
|
|
use TrComplexImage;
|
|
|
|
protected $info = array(
|
|
'img-artwork' => [[], CLISetup::ARGV_PARAM, 'Generate images from /glues/credits (not used on page)'],
|
|
);
|
|
|
|
public $isOptional = true;
|
|
|
|
private const TILEORDER = array(
|
|
1 => [ [1] ],
|
|
2 => [ [1],
|
|
[2] ],
|
|
4 => [ [1, 2],
|
|
[3, 4] ],
|
|
6 => [ [1, 2, 3],
|
|
[4, 5, 6] ],
|
|
8 => [ [1, 2, 3, 4],
|
|
[5, 6, 7, 8] ],
|
|
9 => [ [1, 2, 3],
|
|
[4, 5, 6],
|
|
[7, 8, 9] ]
|
|
);
|
|
|
|
// src, resourcePath, localized, [tileOrder], [[dest, destW, destH]]
|
|
private $genSteps = array(
|
|
['Glues/Credits/', null, false, self::TILEORDER, [['cache/Artworks/', 0, 0]]]
|
|
);
|
|
|
|
public function __construct()
|
|
{
|
|
$this->imgPath = CLISetup::$srcDir.$this->imgPath;
|
|
$this->maxExecTime = ini_get('max_execution_time');
|
|
|
|
foreach ($this->genSteps[0][self::$GEN_IDX_DEST_INFO] as $dir)
|
|
$this->requiredDirs[] = $dir[0];
|
|
}
|
|
|
|
public function generate() : bool
|
|
{
|
|
if (!$this->checkSourceDirs())
|
|
{
|
|
CLI::write('one or more source directories are missing:', CLI::LOG_ERROR);
|
|
$this->success = false;
|
|
return false;
|
|
}
|
|
|
|
sleep(2);
|
|
|
|
[, $realPath, , $tileOrder, $outInfo] = $this->genSteps[0];
|
|
|
|
$sum = 0;
|
|
$imgGroups = [];
|
|
$files = CLISetup::filesInPath('/'.str_replace('/', '\\/', $realPath).'/i', true);
|
|
$fileTpl = $outInfo[0][0].'%s.png';
|
|
|
|
foreach ($files as $f)
|
|
{
|
|
if (preg_match('/([^\/]+)(\d).blp/i', $f, $m))
|
|
{
|
|
if (!$m[1] || !$m[2])
|
|
continue;
|
|
|
|
if (!isset($imgGroups[$m[1]]))
|
|
$imgGroups[$m[1]] = $m[2];
|
|
else if ($imgGroups[$m[1]] < $m[2])
|
|
$imgGroups[$m[1]] = $m[2];
|
|
}
|
|
}
|
|
|
|
// errör-korrekt
|
|
if (isset($imgGroups['Desolace']))
|
|
$imgGroups['Desolace'] = 4;
|
|
|
|
$total = count($imgGroups);
|
|
|
|
CLI::write('Processing '.$total.' files from '.$realPath.' ...');
|
|
|
|
foreach ($imgGroups as $name => $fmt)
|
|
{
|
|
ini_set('max_execution_time', $this->maxExecTime);
|
|
|
|
$sum++;
|
|
$this->status = ' - '.str_pad($sum.'/'.$total, 8).str_pad('('.number_format($sum * 100 / $total, 2).'%)', 9);
|
|
$file = sprintf($fileTpl, $name);
|
|
|
|
if (!CLISetup::getOpt('force') && file_exists($file))
|
|
{
|
|
CLI::write($this->status.' - file '.$file.' was already processed', CLI::LOG_BLANK, true, true);
|
|
continue;
|
|
}
|
|
|
|
if (!isset($tileOrder[$fmt]))
|
|
{
|
|
CLI::write(' - pattern for file '.$name.' not set. skipping', CLI::LOG_WARN);
|
|
$this->success = false;
|
|
continue;
|
|
}
|
|
|
|
$order = $tileOrder[$fmt];
|
|
|
|
$im = $this->assembleImage($realPath.'/'.$name, $order, count($order[0]) * 256, count($order) * 256);
|
|
if (!$im)
|
|
{
|
|
CLI::write(' - could not assemble file '.$name, CLI::LOG_ERROR);
|
|
$this->success = false;
|
|
continue;
|
|
}
|
|
|
|
if (!$this->writeImageFile($im, $file, count($order[0]) * 256, count($order) * 256))
|
|
$this->success = false;
|
|
}
|
|
|
|
ini_set('max_execution_time', $this->maxExecTime);
|
|
|
|
return $this->success;
|
|
}
|
|
});
|
|
|
|
?>
|