more d2s parsing, refactor

This commit is contained in:
Hash Borgir
2022-06-21 07:06:41 -06:00
parent 5907c8c8d3
commit 5c00d05494
9 changed files with 342 additions and 66 deletions

View File

@@ -18,23 +18,19 @@ require_once './src/D2BitReader.php';
define('DB_FILE', $_SESSION['modname'] . ".db");
PDO_Connect("sqlite:" . DB_FILE);
$sql = "SELECT * FROM strings";
$strings = PDO_FetchAssoc($sql);
$sql = "SELECT code,namestr
FROM armor
$sql = "SELECT code,namestr
FROM armor
UNION SELECT code,namestr
FROM misc
UNION SELECT code,namestr
FROM weapons
FROM weapons
";
$namestr = PDO_FetchAssoc($sql);
$namestr = PDO_FetchAssoc($sql);
//ddump($namestr);
//$filePath = "D:\Diablo II\MODS\ironman-dev\save\Aldur.d2s";
$filePath = "D:\Diablo II\MODS\ironman-dev\save\Sorc.d2s";
//$filePath = "D:\Diablo II\MODS\MedianXL2012\save\Lok.d2s";
@@ -43,6 +39,8 @@ $filePath = "D:\Diablo II\MODS\ironman-dev\save\Sorc.d2s";
$fp = fopen($filePath, 'r+b');
$data = file_get_contents($filePath);
$i_offset = strpos($data, "JM");
fseek($fp, $i_offset + 2);
@@ -82,28 +80,36 @@ foreach ($items as $_item) {
$b = new D2BitReader($_item);
//$b->bseek(27);
//dump($b->bread(1));
$b->seek(76);
// dump($b->bread(32));
$codeBits = str_split($b->read(32), 8);
$itemCode = '';
foreach ($codeBits as $byte) {
// dump(strrev($byte));
//dump(sprintf('%c', bindec($byte)));
$itemCode .= chr(bindec(strrev($byte)));
$b->seek(58);
$parent = bindec(strrev($b->read(3)));
if ($parent == 0) {
$b->seek(73);
$_stored = bindec(strrev($b->read(3)));
switch ($_stored) {
case 0:
$stored = ''; // item is not stored, check bit 58
break;
case 1:
$stored = 'Inventory';
break;
case 4:
$stored = 'Horadric Cube';
break;
case 5:
$stored = 'Stash';
break;
}
dump($stored);
}
$b->seek(76);
$codeBits = str_split($b->read(32), 8);
$itemCode = '';
foreach ($codeBits as $byte) {
$itemCode .= chr(bindec(strrev($byte)));
}
$itemCode = trim($itemCode);
dump($namestr[$itemCode]);
dump($strings[$namestr[$itemCode]]);
// dump($strings[trim($itemCode)]);
}