<?php error_reporting(E_ERROR | E_PARSE); set_time_limit(-1); ini_set('max_input_time', '-1'); ini_set('max_execution_time', '0'); session_start(); ob_start(); /* Copyright (C) 2021 Hash Borgir This file is part of D2Modder Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * This software must not be used for commercial purposes * without my consent. Any sales or commercial use are prohibited * without my express knowledge and consent. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ require_once './config.php'; require_once './_pdo.php'; require_once "./src/D2Functions.php"; require_once './src/D2ItemData.php'; require_once './src/D2ItemDesc.php'; require_once './src/D2DocGenerator.php'; $pre = "<pre>"; $idata = new D2ItemData(); $idesc = new D2ItemDesc(); // $idoc = new D2DocGenerator(); define('DB_FILE', $_SESSION['modname'] . ".db"); PDO_Connect("sqlite:" . DB_FILE); $idata = new D2ItemData(); // set $cmd if (!empty($_GET['cmd'])) $cmd = $_GET['cmd']; // create mod doc directory $dir = getcwd() . "/docs/{$_SESSION['modname']}"; mkdir($dir, 0777, true); $idoc = new D2DocGenerator(); $isc = $idoc->getIscProps(); $strings = $idoc->getStrings(); $itemtypesTbl = $idoc->getItemTypesTbl(); $namestr = $idoc->getNameStr(); $query = "SELECT ROWID,* FROM magicprefix"; $mpre = PDO_FetchAll($query); $query = "SELECT ROWID,* FROM magicsuffix"; $spre = PDO_FetchAll($query); // htmlTop was huge, so put it into another file and just include it require_once 'templates/htmlTop.php'; $htmlbottom = "</div></body></html>"; // genDocUniqueItems if ($cmd == "genDocUniqueItems") { $tableTop = '<table border="1" class="utable"> <thead> <tr> <th class="gold uname">Name</th> <th class="orange ulvl">Lvl</th> <th class="orange ulvlreq">Lvl Req</th> <th class="yellow utype">Type</th> <th class="green ucode">Code</th> <th class="uitem">Item</th> </tr> </thead> <tbody>'; $tableBottom = '</tbody></table>'; // Grab unique item index only (to save on memory) $sql = "SELECT `index` FROM `uniqueitems` WHERE `enabled`='1'"; $uIndex = PDO_FetchAll($sql); $htmlFinal = ''; $htmlFinal .= $htmltop . $tableTop; echo $htmltop; echo $tableTop; ob_flush(); // Main loop: grab the data for each uIndex (index from uniqueitems.txt) foreach ($uIndex as $u) { $item = $idata->uniqueItems($u['index'], true); $itemBoxTop = '<tr>'; $itemBoxTop .= '<td class="gold uname">' . $item['index'] . '</td>'; $itemBoxTop .= '<td class="orange ulvl">' . $item['lvl'] . '</td>'; $itemBoxTop .= '<td class="orange ulvlreq">' . $item["lvl req"] . '</td>'; $itemBoxTop .= '<td class="utype">' . $item["*type"] . '</td>'; $itemBoxTop .= '<td class="ucode">' . $item['code'] . '</td>'; $itemBoxTop .= <<<HTML <td class="item"> <div class="center item_desc"> <div class="itemimage" style="height: 116px; background: url(img/items/bg.png) center top no-repeat;"> <img class="item img-fluid" src="img/items/{$item["invfile"]}.png"> </div> <div class="item_stats"> <div style="width:auto; margin: 0 auto; background:#111; display:inline-block;"> <p> HTML; $itemBoxBottom = <<<HTML </p> </div> </div> </div> </td> </tr> HTML; echo $itemBoxTop; ob_flush(); $htmlFinal .= $itemBoxTop; // Index $props = '<ul><li class="statindex gold">' . $item['index'] . '</li>'; // Type $props .= '<li class="stattype gold">(' . $item["*type"] . ')</li>'; // Level $props .= '<li style="color: white;">Level: ' . $item["lvl"] . '</li>'; // Level Required $props .= '<li style="color: white;">Level Required: ' . $item["lvl req"] . '</li>'; // Item Code $props .= '<li style="color: #aaa;">Item Code: ' . $item["code"] . '</li>'; // Required Strength if ($item["reqstr"]) { $props .= '<li style="color: white;">' . $item["reqstr"] . '</li>'; } // Required Dexterity if ($item["reqdex"]) { $props .= '<li style="color: white;">' . $item["reqdex"] . '</li>'; } // Sockets $props .= '<li style="color: white;">' . $item["gemsockets"] . '</li>'; foreach ($item['props'] as $prop) { if ($prop['string'][0]) { $props .= '<li class="blue">' . $prop['string'][0] . '</li>'; } } $props .= '</ul>'; echo $props; echo $itemBoxBottom; ob_flush(); $htmlFinal .= $props . $itemBoxBottom; } $htmlFinal .= $tableBottom; echo $htmlbottom; $htmlFinal .= $htmlbottom; file_put_contents("$dir/uniqueitems.html", $htmlFinal); header("Location: /docs/{$_SESSION['modname']}/uniqueitems.html"); } // genDocCube if ($cmd == "genDocCube") { $htmlFinal = ''; $htmlFinal .= $htmltop; echo $htmltop; ob_flush(); $table = <<<EOT <table border=1 class="cubetable"> <thead> <tr> <th>Recipe</th> <th>Input 1</th> <th> 2</th> <th> 3</th> <th> 4</th> <th> 5</th> <th> 6</th> <th> 7</th> <th>Output 1</th> <th> 2</th> <th> 3</th> </tr> </thead> <tbody> EOT; echo $table; $htmlFinal .= $table; ob_flush(); $i_params = [ "any" => "Any Item", "low" => "Low Quality", "hiq" => "Superior Quality", "nor" => "Normal Quality", "mag" => "<span class='blue'>Magic<span> item", "rar" => "<span class='yellow'>Rare<span> item", "set" => "<span class='green'>Set<span> item", "uni" => "<span class='gold'>Unique<span> item", "crf" => "<span class='orange'>Crafted<span> item", "tmp" => "<span class='orange'>Tempered<span> item", "eth" => "<span style='color: #ccc;'>Ethereal<span>item ", "noe" => "<span style='color: #ccc;'>Not Ethereal<span>", "nos" => "No Socket (for input1)", "sock" => "Sockets", "pre" => "Prefix (ID from magicprefix.txt) - ID => (Row Number - 2)", "suf" => "Suffix (ID from magicsuffix.txt) - ID => (Row Number - 2)", "rep" => "Repair item durability", "rch" => "Recharge all of the skill charges on the Item", "qty" => 'Quantity', "upg" => "For inputs only, Item is upgraded.", "bas" => "Base item", "exc" => "Exceptional", "eli" => "Elite", "usetype" => "Uses base type of input1 for output", "useitem" => "Uses item from input1", "uns" => "Unsocket Item(destroys gems)", "rem" => "Unsocket Item(removes gems)", "reg" => "Reroll the item", "mod" => "Transfers properties from input1 to output item.", ]; // get all cube rows // changed enabled=1 to enabled > 0 for CubeOps.dll users $sql = "SELECT * FROM cubemain WHERE enabled > 0 AND `input 1` <> 'ib3' AND `input 1` <> 'ib2' AND `input 1` <> 'ib1' AND `input 2` <> 'ooc' AND `description` NOT LIKE '%Stone x%' AND `description` NOT LIKE 'Rune%' AND `description` NOT LIKE '%Unstacker%' "; $res = PDO_FetchAll($sql); // process each cube row here foreach ($res as $r) { $desc = str_replace('+', '<br>+<br>', $r['description']); $desc = str_replace('->', '<br><span class="" style="color: gold;">=<br>', $desc); $desc .= "</span>"; // grab all inputs $input_codes = array_filter([ "input 1" => $r["input 1"], "input 2" => $r["input 2"], "input 3" => $r["input 3"], "input 4" => $r["input 4"], "input 5" => $r["input 5"], "input 6" => $r["input 6"], "input 7" => $r["input 7"], ]); $input1_code = explode(',', $r['input 1'])[0]; foreach ($input_codes as $inputNum => $value) { if (str_contains($value, ',')) { $input_codes[$inputNum] = explode(",", $value); // hpot,qty=3 $iarray = explode(",", $value); // hpot,qty=3 // For each input code // hpot,qty=3 like mpot/hpot/magharv // if spelldescstr is set, use it. Else use item string tbl // first find the item code in either armor, misc, or weapons // then get spelldesc/spelldescstr // $sql = "SELECT `String` FROM `strings` WHERE Key=\"{$oarray[0]}\""; // $str = PDO_FetchOne($sql); $str = $strings[$iarray[0]]; // Assuming $strings array is defined // if empty str == 4-letter code, call $idoc->getItemName() if (empty($str)) { $input_codes[$inputNum][0] = $iarray[0]; } else { $input_codes[$inputNum][0] = $str; } // get image $input_codes[$inputNum]["img"] = $idoc->getImage($iarray[0]); $input_codes[$inputNum]['code'] = $iarray[0]; } else { $value .= ","; $input_codes[$inputNum] = explode(",", $value); // hpot,qty=3 $iarray = explode(",", $value); // hpot,qty=3 // For each input code // hpot,qty=3 like mpot/hpot/magharv // if spelldescstr is set, use it. Else use item string tbl // first find the item code in either armor, misc, or weapons // then get spelldesc/spelldescstr // $sql = "SELECT `String` FROM `strings` WHERE Key=\"{$oarray[0]}\""; // $str = PDO_FetchOne($sql); $str = $strings[$iarray[0]]; // Assuming $strings array is defined // if empty str == 4-letter code, so just display if (empty($str)) { $input_codes[$inputNum][0] = $iarray[0]; $input_codes[$inputNum]['code'] = $iarray[0]; } else { $input_codes[$inputNum][0] = $str; } // get image $input_codes[$inputNum]["img"] = $idoc->getImage($iarray[0]); } } // processs output, output b, output c // grab all inputs $output_codes = array_filter( [ "output" => str_replace('"', "", $r["output"]), "output b" => str_replace('"', "", $r["output b"]), "output c" => str_replace('"', "", $r["output c"]) ] ); //var_dump(array_filter($r)); //var_dump($r['input 1']); //var_dump($input1_code); //var_dump($output_codes); // output_codes is an array // output codes of outputs, like output, output b, output c. // each output can have 3 or 4 level item code or a amu,mag,pre=331 code // outputNum is output a, or output b, or output c, should have been called outputLetter whatever $oarray = []; foreach ($output_codes as $outputNum => $value) { //outputNum will be output, or output b, or c // value will be 3/4 letter code or sometimes 'Cow Portal' or words // or rin,mag,pre=353 // if value contains a comma, e.g., rin,mag,pre=353 // then explode it at the comma $output_codes[$outputNum] = explode(",", $value); // hpot,qty=3 $oarray = explode(",", $value); // hpot,qty=3 if ($oarray[0] == 'usetype' || $oarray[0] == 'useitem') { $oarray[0] = $input1_code; $oarray[2] = $i_params[$oarray[2]]; } //var_dump($oarray); //if (in_array($oarray[0], $strings)) { $str = $strings[$oarray[0]]; //} // "SELECT `String` FROM `strings` WHERE Key=\"{$oarray[0]}\""; // clean str // $str = PDO_FetchOne($sql); if (str_contains($str, "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $str = preg_replace($p, "", $str); } // what if we set it to input codes 1 code //var_dump($strings[$oarray[0]]); // var_dump($oarray[0]); // var_dump($str); // if empty, str == 4-letter code, so just display if (empty($str)) { $output_codes[$outputNum][0] = ($oarray[0]); } else { $output_codes[$outputNum][0] = $str; } $output_codes[$outputNum]["img"] = $idoc->getImage($oarray[0]); //var_dump($oarray); //echo "Generated Output Codes Array"; //echo "input code: ". $input_codes['intput 1'][0]; //var_dump($output_codes); // if output[1] or output[2], output[3], output[4] contains `=' sign // parse_str or explode at = to get modifer and value // if modifier = pre or suf, find ID in magic prefix/suffix line. // if output is array we know it contains modifers and values if (is_array($output_codes[$outputNum])) { // 0 will always be item code. // 1,2,3 can be mods, either can have = // if 1,2,3 have = sign, explode and get mod = value $itemcode = $output_codes[0]; $mod = array_filter([$output_codes[$outputNum][1], $output_codes[$outputNum][2], $output_codes[$outputNum][3]]); //var_dump($mod); $e = explode("=", $mod[1]); $output_codes[$outputNum]['code'] = $e[0]; $output_codes[$outputNum]['value'] = $e[1]; // if ($e[0] == 'pre') { // $e[1]++; // // $pre = $mpre[$e[1]]; // // for ($i = 1; $i <= 3; $i++) { // // $mods = array_filter([ // "mod{$i}code" => $pre["mod{$i}code"], // "mod{$i}param" => $pre["mod{$i}param"], // "mod{$i}min" => $pre["mod{$i}min"], // "mod{$i}max" => $pre["mod{$i}max"], // ]); // } // // // var_dump($output['mods']); // foreach ($mods as $k => $v) { // $prop = ($v["mod " . $k + 1]); // $par = ($v["mod{$k}param"]) ?? ""; // $min = ($v["mod{$k}min"]) ?? $max; // $max = ($v["mod{$k}max"]) ?? $min; // // //var_dump($isc[$prop]); // // $pre['mods'][$k]["isc"] = $isc[$prop]; // // // // $params = [ // 'string1' => $pre['mods'][$k]["isc"]['string1'], // 'string2' => $pre['mods'][$k]["isc"]['string2'], // 'descfunc' => $pre['mods'][$k]["isc"]['descfunc'], // 'descval' => $pre['mods'][$k]["isc"]['descval'], // "prop" => $prop, // "par" => $par, // "min" => $min, // "max" => $max, // // "val1" => $funcval['val1'], // // "func1" => $funcval['func1'] // // 'item' => $return // ]; // // //var_dump($idesc->getDesc($params)); // // $output['pre']['mods'][$k]["str"] = $idesc->getDesc($params); // } // } } } $output = array_merge($input_codes, $output_codes); // Set description $output['desc'] = $desc; // process mods for each output $m = null; for ($counter = 1; $counter <= 5; $counter++) { $mods = array_filter([ "mod $counter" => $r["mod $counter"], "mod $counter chance" => $r["mod $counter chance"], "mod $counter param" => $r["mod $counter param"], "mod $counter min" => $r["mod $counter min"], "mod $counter max" => $r["mod $counter max"], "b mod $counter" => $r["b mod $counter"], "b mod $counter chance" => $r["b mod $counter chance"], "b mod $counter param" => $r["b mod $counter param"], "b mod $counter min" => $r["b mod $counter min"], "b mod $counter max" => $r["b mod $counter max"], "c mod $counter" => $r["c mod $counter"], "c mod $counter chance" => $r["c mod $counter chance"], "c mod $counter param" => $r["c mod $counter param"], "c mod $counter min" => $r["c mod $counter min"], "c mod $counter max" => $r["c mod $counter max"], ]); $m[] = array_filter($mods); } $output['mods'] = array_filter($m); //var_dump($output['mods']); $result = []; // var_dump($output['mods']); foreach ($output['mods'] as $k => $v) { $prop = ($v["mod " . $k + 1]); $par = ($v["mod " . $k + 1 . " param"]) ?? ""; $min = ($v["mod " . $k + 1 . " min"]) ?? $max; $max = ($v["mod " . $k + 1 . " max"]) ?? $min; //var_dump($isc[$prop]); $output['mods'][$k]["isc"] = $isc[$prop]; $params = [ 'string1' => $output['mods'][$k]["isc"]['string1'], 'string2' => $output['mods'][$k]["isc"]['string2'], 'descfunc' => $output['mods'][$k]["isc"]['descfunc'], 'descval' => $output['mods'][$k]["isc"]['descval'], "prop" => $prop, "par" => $par, "min" => $min, "max" => $max, // "val1" => $funcval['val1'], // "func1" => $funcval['func1'] // 'item' => $return ]; //var_dump($idesc->getDesc($params)); $output['mods'][$k]["str"] = $idesc->getDesc($params); } //var_dump($output); // At this point, $output contains raw accurte data // TODO: build output correctly // input1-input7,output a,b,c item codes can be found in $strings // However, if the codes are 4 letter codes, they are types // Type code sare not in $strings (tbl files) // Type codes are in ItemTypes in itemtypes.Code // Type code's string name entry is in itemtypes.ItemType table-- // first find in $strings. if not there, look in itemtypes // $htmlRow = "<tr>"; $htmlRow .= "<td class='desc'>" . $output['desc'] . "</td>"; for ($i = 1; $i <= 7; $i++) { $htmlRow .= "<td class='_input$i'>"; // replace _input with input to get grey td bg colors back if (!empty($output["input $i"]["img"])) { $htmlRow .= "<img src='img/items/{$output["input $i"]["img"]}'><br>"; if (str_contains($output["input $i"][0], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["input $i"][0] = preg_replace($p, "", $output["input $i"][0]); } // if the item is in itemtypes grab it, it's 4 letter code fron itemtypes $key1 = array_search($output["input $i"][0], $itemtypesTbl); // if the key's value is in itemtypes if ($itemtypesTbl[$key1] == $output["input $i"][0]) { $ostr = implode("<br>", (array_reverse(explode('\n', $key1)))); } else { $ostr = implode("<br>", (array_reverse(explode('\n', $output["input $i"][0])))); } $htmlRow .= $ostr . "<br>"; if (str_contains($output["input $i"][1], "=")) { $htmlRow .= $output["input $i"][1] . "<br>"; } else { $htmlRow .= $i_params[$output["input $i"][1]] . "<br>"; } } $htmlRow .= "</td>"; } //var_dump($output); $htmlRow .= "<td class='_output1'>"; // change _output to output if (!empty($output["output"]["img"])) { $htmlRow .= "<img src='img/items/{$output["output"]["img"]}'><br>"; if (str_contains($output["output"][0], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output"][0] = preg_replace($p, "", $output["output"][0]); } $htmlRow .= '<span style="color: #AF833B;">' . $output["output"][0] . "</span><br>"; $key1 = array_search($output["input $i"][0], $itemtypesTbl); if (str_contains($output["output"][1], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output"][1] = preg_replace($p, "", $output["output"][1]); } if ($i_params[$output["output"][0]]) { $htmlRow .= '<span style="color: #AF833B;">' . $i_params[$output["output"][0]] . "</span><br>"; } else { $htmlRow .= $i_params[$output["output"][0]] . "<br>"; } if ($i_params[$output["output"][1]]) { $htmlRow .= $i_params[$output["output"][1]] . "<br>"; } else { $htmlRow .= $output["output"][1] . "<br>"; } $htmlRow .= $i_params[$output["output"][2]] . "<br>"; for ($i = 1; $i <= 5; $i++) { if ($output["mods"][0]["mod $i"]) { if (str_contains($output["mods"][0]["str"], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["mods"][0]["str"] = preg_replace($p, "", $output["mods"][0]["str"]); } $htmlRow .= str_replace("\n", "<br>", "<span class='blue'>{$output["mods"][0]["str"]}</span><br><br>"); } if ($output["mods"][0]["mod $i chance"]) { $htmlRow .= "<span style='color: #FFA500'>Chance:{$output["mods"][0]["mod $i chance"]}</span><br>"; } } } $htmlRow .= "</td>"; $htmlRow .= "<td class='_output2'>"; // change _output2 to output if (!empty($output["output b"]["img"])) { $htmlRow .= "<img src='img/items/{$output["output b"]["img"]}'><br>"; if (str_contains($output["output b"][0], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output b"][0] = preg_replace($p, "", $output["output b"][0]); } if (str_contains($output["output b"][1], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output b"][1] = preg_replace($p, "", $output["output b"][1]); } $htmlRow .= $output["output b"][0] . "<br>"; $htmlRow .= $output["output b"][1] . "<br>"; for ($i = 1; $i <= 5; $i++) { if ($output["mods"][1]["mod $i"]) { $htmlRow .= "{$output["mods"][1]["mod $i"]}<br>"; } if ($output["mods"][1]["mod $i chance"]) { $htmlRow .= "Chance:{$output["mods"][1]["mod $i chance"]}<br>"; } if ($output["mods"][1]["mod $i min"]) { $htmlRow .= "Min:{$output["mods"][1]["mod $i min"]}<br>"; } if ($output["mods"][1]["mod $i max"]) { $htmlRow .= "Max:{$output["mods"][1]["mod $i max"]}"; } } } $htmlRow .= "</td>"; $htmlRow .= "<td class='_output3'>"; // change _output3 to normal if (!empty($output["output c"]["img"])) { $htmlRow .= "<img src='img/items/{$output["output c"]["img"]}'><br>"; if (str_contains($output["output c"][0], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output c"][0] = preg_replace($p, "", $output["output c"][0]); } if (str_contains($output["output c"][1], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $output["output c"][1] = preg_replace($p, "", $output["output c"][1]); } $htmlRow .= $output["output c"][0] . "<br>"; $htmlRow .= $output["output c"][1] . "<br>"; for ($i = 1; $i <= 5; $i++) { if ($output["mods"][2]["mod $i"]) { $htmlRow .= "{$output["mods"][2]["mod $i"]}<br>"; } if ($output["mods"][2]["mod $i chance"]) { $htmlRow .= "Chance:{$output["mods"][2]["mod $i chance"]}<br>"; } if ($output["mods"][2]["mod $i min"]) { $htmlRow .= "Min:{$output["mods"][2]["mod $i min"]}<br>"; } if ($output["mods"][2]["mod $i max"]) { $htmlRow .= "Max:{$output["mods"][2]["mod $i max"]}"; } } } $htmlRow .= "</td>"; $htmlRow .= "</tr>"; echo $htmlRow; ob_flush(); $htmlFinal .= $htmlRow; ob_flush(); unset($output); }// end each row loop $tableBottom = '</tbody><table>'; echo $tableBottom; echo $htmlbottom; ob_flush(); $htmlFinal .= $tableBottom . $htmlbottom; // echo $htmlFinal; // save file and redirect to it file_put_contents("$dir/cubemain.html", $htmlFinal); header("Location: docs/{$_SESSION['modname']}/cubemain.html"); } if ($cmd == "getImages") { $sql = "SELECT code,invfile,type,type2 FROM armor UNION ALL SELECT code,invfile,type,type2 FROM misc UNION ALL SELECT code,invfile,type,type2 FROM weapons"; $res = PDO_FetchAll($sql); $isc = null; foreach ($res as $r) { $isc1[$r['code']] = $r; $isc1[$r['code']]['code'] = $r['prop']; $isc2[$r['type']] = $r; $isc2[$r['type']]['type'] = $r['prop']; } $isc = array_merge($isc1, $isc2); unset($isc1); unset($isc2); } // gem doc generator if ($cmd == "genDocGems") { $sql = " SELECT g.*,m.invfile,m.type,m.type2,s.String FROM gems as g LEFT JOIN misc as m ON g.code = m.code LEFT JOIN strings as s ON g.code = s.Key"; $res = array_filter(PDO_FetchAll($sql)); foreach ($res as $r) { for ($i = 1; $i <= 3; $i++) { $params = [ 'string1' => $isc[$r["weaponMod{$i}Code"]]['string1'], 'string2' => $isc[$r["weaponMod{$i}Code"]]['string2'], 'gstring1' => $isc[$r["weaponMod{$i}Code"]]['gstring'], 'gstring2' => $isc[$r["weaponMod{$i}Code"]]['gstring2'], 'descfunc' => $isc[$r["weaponMod{$i}Code"]]['descfunc'], 'descval' => $isc[$r["weaponMod{$i}Code"]]['descval'], 'dgrp' => $isc[$r["weaponMod{$i}Code"]]['dgrp'], 'dgrpfunc' => $isc[$r["weaponMod{$i}Code"]]['dgrpfunc'], 'dgrpval' => $isc[$r["weaponMod{$i}Code"]]['dgrpval'], "prop" => $isc[$r["weaponMod{$i}Code"]]['prop'] ]; // weapons $params["par"] = $r["weaponMod{$i}Param"]; $params["min"] = $r["weaponMod{$i}Min"]; $params["max"] = $r["weaponMod{$i}Max"]; if ($r["weaponMod{$i}Code"]) { $r["weaponMod{$i}Code"] = $idesc->getDesc($params); } $params = [ 'string1' => $isc[$r["helmMod{$i}Code"]]['string1'], 'string2' => $isc[$r["helmMod{$i}Code"]]['string2'], 'gstring1' => $isc[$r["helmMod{$i}Code"]]['gstring'], 'gstring2' => $isc[$r["helmMod{$i}Code"]]['gstring2'], 'descfunc' => $isc[$r["helmMod{$i}Code"]]['descfunc'], 'descval' => $isc[$r["helmMod{$i}Code"]]['descval'], 'dgrp' => $isc[$r["helmMod{$i}Code"]]['dgrp'], 'dgrpfunc' => $isc[$r["helmMod{$i}Code"]]['dgrpfunc'], 'dgrpval' => $isc[$r["helmMod{$i}Code"]]['dgrpval'], "prop" => $isc[$r["helmMod{$i}Code"]]['prop'] ]; // helms $params["par"] = $r["helmMod{$i}Param"]; $params["min"] = $r["helmMod{$i}Min"]; $params["max"] = $r["helmMod{$i}Max"]; if ($r["helmMod{$i}Code"]) { $r["helmMod{$i}Code"] = $idesc->getDesc($params); } $params = [ 'string1' => $isc[$r["helmMod{$i}Code"]]['string1'], 'string2' => $isc[$r["helmMod{$i}Code"]]['string2'], 'gstring1' => $isc[$r["helmMod{$i}Code"]]['gstring'], 'gstring2' => $isc[$r["helmMod{$i}Code"]]['gstring2'], 'descfunc' => $isc[$r["helmMod{$i}Code"]]['descfunc'], 'descval' => $isc[$r["helmMod{$i}Code"]]['descval'], 'dgrp' => $isc[$r["helmMod{$i}Code"]]['dgrp'], 'dgrpfunc' => $isc[$r["helmMod{$i}Code"]]['dgrpfunc'], 'dgrpval' => $isc[$r["helmMod{$i}Code"]]['dgrpval'], "prop" => $isc[$r["helmMod{$i}Code"]]['prop'] ]; //shields $params["par"] = $r["shieldMod{$i}Param"]; $params["min"] = $r["shieldMod{$i}Min"]; $params["max"] = $r["shieldMod{$i}Max"]; if ($r["shieldMod{$i}Code"]) { $r["shieldMod{$i}Code"] = $idesc->getDesc($params); } if (str_contains($r['String'], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $r['String'] = preg_replace($p, "", $r['String']); } } $gems[] = array_filter($r); } $htmlFinal = ''; $htmlFinal .= $htmltop; //echo $htmltop; //ob_flush(); $table = '<table border=1 class="gemtable"> <thead> <tr> <th>Name</th> <th>Code</th> <th>Type</th> <th>Mods</th> <th>Weapons</th> <th>Helms</th> <th>Shields</th> </tr> </thead> <tbody>'; //echo $table; $htmlFinal .= $table; //ob_flush(); // $gems are all the gems, processed, now display them foreach ($gems as $g) { if ($g['name'] == "Expansion") { continue; } $htmlRow = "<tr>"; $htmlRow .= "<td class='name'> <img style='height: 64px;width:64px;' src='img/items/{$g["invfile"]}.png'><br> {$g['String']} </td> "; $htmlRow .= "<td class='code'> {$g['code']} </td> "; $htmlRow .= "<td class='type'> {$g['type']} </td> "; $htmlRow .= "<td class='nummods'> Mods: {$g['nummods']} </td> "; $htmlRow .= "<td class='weapons blue'> <img src='img/weapon.png'><br> {$g['weaponMod1Code']}<br> {$g['weaponMod2Code']}<br> {$g['weaponMod3Code']}<br> </td> "; $htmlRow .= "<td class='helms gold'> <img src='img/helm.png'><br> {$g['helmMod1Code']}<br> {$g['helmMod2Code']}<br> {$g['helmMod3Code']}<br> </td> "; $htmlRow .= "<td class='shields'> <img src='img/shield.png'><br> {$g['shieldMod1Code']}<br> {$g['shieldMod2Code']}<br> {$g['shieldMod3Code']}<br> </td> "; $htmlRow .= "</tr>"; $htmlFinal .= $htmlRow; //echo $htmlRow; // ob_flush(); } $htmlFinal .= $tableBottom . $htmlbottom; //echo $tableBottom . $htmlbottom; //ob_flush(); //ob_start(); file_put_contents("$dir/gems.html", $htmlFinal); header("Location: /docs/{$_SESSION['modname']}/gems.html", TRUE, 301); } // generate runewords if ($cmd == 'genDocRunewords') { $sql = 'SELECT * FROM runes'; $runes = array_filter(PDO_FetchAll($sql)); $sql = 'SELECT code,invfile from misc'; $rune_inv_codes = array_filter(PDO_FetchAssoc($sql)); $sql = 'SELECT * FROM strings'; $strings = array_filter(PDO_FetchAssoc($sql)); $sql = 'SELECT Itemtype,Code,Equiv1 FROM itemtypes'; $itypes = array_flip(array_filter(PDO_FetchAssoc($sql))); $tableTop = <<<EOT <table class="rtable rw"> <thead> <tr> <th>Name</th> <th>Runes</th> <th>Properties</th> </tr> </thead> <tbody> EOT; foreach ($runes as $rune) { // Grab Rune Names $name = $strings[$rune['Name']]; $itype1 = $itypes[$rune['itype1']]; $itype2 = $itypes[$rune['itype2']]; $itype3 = $itypes[$rune['itype3']]; $itype4 = $itypes[$rune['itype4']]; $itype5 = $itypes[$rune['itype5']]; $itype6 = $itypes[$rune['itype6']]; $rr_img[1] = $rune_inv_codes[$rune['Rune1']]; $rr_img[2] = $rune_inv_codes[$rune['Rune2']]; $rr_img[3] = $rune_inv_codes[$rune['Rune3']]; $rr_img[4] = $rune_inv_codes[$rune['Rune4']]; $rr_img[5] = $rune_inv_codes[$rune['Rune5']]; $rr_img[6] = $rune_inv_codes[$rune['Rune6']]; $rr[1] = str_replace('', '', $strings[$rune['Rune1']]); $rr[2] = str_replace('', '', $strings[$rune['Rune2']]); $rr[3] = str_replace('', '', $strings[$rune['Rune3']]); $rr[4] = str_replace('', '', $strings[$rune['Rune4']]); $rr[5] = str_replace('', '', $strings[$rune['Rune5']]); $rr[6] = str_replace('', '', $strings[$rune['Rune6']]); for ($i = 1; $i <= 6; $i++) { if (str_contains($rr[$i], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $rr[$i] = preg_replace($p, "", $rr[$i]); } } $rr = array_filter($rr); $rune_count = count($rr); $rune_count_duplicates = array_count_values($rr); $rcd = null; foreach ($rune_count_duplicates as $k => $v) { // rune * count $rcd[] = "$k <span class='numrunes blue'>x</span> <span style='font-size: 2em;'>$v</span>"; } for ($i = 1; $i <= 7; $i++) { if ($rune["T1Code{$i}"] != '') { $params = [ "string1" => $isc[$rune["T1Code{$i}"]]["string1"], "string2" => $isc[$rune["T1Code{$i}"]]["string2"], "gstring1" => $isc[$rune["T1Code{$i}"]]["gstring"], "gstring2" => $isc[$rune["T1Code{$i}"]]["gstring2"], "descfunc" => $isc[$rune["T1Code{$i}"]]["descfunc"], "descval" => $isc[$rune["T1Code{$i}"]]["descval"], "dgrp" => $isc[$rune["T1Code{$i}"]]["dgrp"], "dgrpfunc" => $isc[$rune["T1Code{$i}"]]["dgrpfunc"], "dgrpval" => $isc[$rune["T1Code{$i}"]]["dgrpval"], "prop" => $isc[$rune["T1Code{$i}"]]["prop"] ]; $params["par"] = $rune["T1Param{$i}"]; $params["min"] = $rune["T1Min{$i}"]; $params["max"] = $rune["T1Max{$i}"]; $props[$i] = $idesc->getDesc($params); } } $props = array_unique($props); $rr_img = array_filter($rr_img); $img_s = ''; foreach ($rr_img as $k) { $img_s .= "<img class='rune-img' src='img/items/{$k}.png'>"; } $tableRowsRunes .= <<<EOT <tr class="rw"> <td> <p class="rw-name gold">$name</p> <p class="rw-type">$itype1<br> $itype2<br> $itype3<br> $itype4<br> $itype5<br> $itype6</p> </td> <td> <p class="rw-rune"> <p>$img_s</p> $rcd[0] <br> $rcd[1] <br> $rcd[2] <br> $rcd[3] <br> $rcd[4] <br> $rcd[5] <br> <!--<p class="rw-count">$ rune_count</p>--> </p></td> <td> <ul class="rprops blue"> <li style="font-size: 140%;margin: 5px;" class="gold">$name</li> <li> $props[1] </li> <li> $props[2] </li> <li> $props[3] </li> <li> $props[4] </li> <li> $props[5] </li> <li> $props[6] </li> <li> $props[7] </li> </ul> </td> </tr> EOT; } echo $htmltop; echo $tableTop; echo $tableRowsRunes; echo "</tbody></table>"; echo $htmlbottom; $htmlFinal = $htmltop . $tableTop . $tableRowsRunes . $tableBottom; file_put_contents("$dir/runewords.html", $htmlFinal); header("Location: docs/{$_SESSION['modname']}/runewords.html"); } // generate item list page if ($cmd == "genDocMisc") { $filter = "smh"; $sql = "SELECT DISTINCT * FROM misc WHERE spawnable='1'"; // LEFT JOIN gems ON misc.code = gems.code //WHERE gems.code IS NULL AND misc.spawnable=1 // ";// AND misc.namestr NOT LIKE '%$filter%' $res = PDO_FetchAll($sql); $res = array_reverse($res); //$sql = "SELECT * FROM armor WHERE spawnable=1"; //$res = array_merge(PDO_FetchAll($sql), $res); //$sql = "SELECT * FROM weapons WHERE spawnable=1"; //$res = array_merge(PDO_FetchAll($sql), $res); // ddump(array_keys($res[0])); $tableTop = <<<EOT <table border=1 class="mtable"> <thead> <tr> <th>Name</th> <th>Lvl</th> <th>Lvl Req</th> <th>Item</th> </tr> </thead> <tbody> EOT; $htmlFinal = null; $htmlFinal = $htmltop . $tableTop; $tr = null; foreach ($res as $r) { $data = null; $stats = null; //ddump($r); // if hammers, then get itemcode's string if ($r['namestr'] == 'smh') { $data['name'] = $strings[$r['namestr']] . "<br>" . $strings[$r['code']]; $p = "/ÿc[\d:;\/.]/i"; $data['name'] = preg_replace($p, "", $data['name']); $data['name'] = array_reverse(explode('\n', $data['name'])); $data['name'] = (implode('\n', $data['name'])); } else { $data['name'] = $strings[$r['namestr']]; if (strpos($data['name'], '\n') !== false) { $lines = explode('\n', $data['name']); $reversedLines = array_reverse($lines); $data['name'] = implode("<br>", $reversedLines); } } if (str_contains($data['name'], "ÿc")) { $p = "/ÿc[\d:;\/.]/i"; $data['name'] = preg_replace($p, "", $data['name']); } $name = array_reverse(explode('}', $data['name'])); $data['name'] = (implode('<br>', $name)); // later display these in a li $img = "img/items/{$r['invfile']}.png"; $data['level'] = "Level: <span class=''>{$r['level']}</span>"; $data['levelreq'] = "Level Required: <span class=''>{$r['levelreq']}</span>"; if ($r['rarity']) { $data['rarity'] = $armorRack = "Can drop from Armor Racks"; } if ($r['speed'] > 0) { $data['speed'] = "Slows your character down"; } if ($r['durability']) { $data['durability'] = "Base durability: <span class=''>{$r['durability']}</span>"; } if ($r['hasinv']) { $sql = "SELECT MaxSock40 FROM itemtypes WHERE `Code`='{$r['type']}'"; $data["maxsock"] = PDO_FetchOne($sql); if ($r['gemapplytype'] == "0") { $data['gemapplytype'] = "Socketing gives <span class='gold'>Weapon</span> stats"; } else if ($r['gemapplytype'] == "1") { $data['gemapplytype'] = "Socketing gives <span class='gold'>Armor/Helm</span> stats"; } else if ($r['gemapplytype'] == "2") { $data['gemapplytype'] = "Socketing gives <span class='gold'>Shield</span> stats"; } $data['hasinv'] = "Sockets <span class='blue' style='' font-size: 1.25em;'>({$data['maxsock']})</span>"; } if ($r['Transmogrify']) { $tmogtype = ($strings[$r['TMogType']]); $data['Transmogrify'] = "Can right click transmogrify into "; $p = "/ÿc[\d:;\/.]/i"; $data['Transmogrify'] = preg_replace($p, "", $data['Transmogrify']); $tmogtype = preg_replace($p, "", $tmogtype); $tmogtype = array_reverse(explode('\n', $tmogtype)); $tmogtype = (implode(' ', $tmogtype)); $tmogtype = str_replace(" Ess", '<br>Ess', $tmogtype); $tmogtype = str_replace(" Cube", '<br>Cube', $tmogtype); $data['tmogtype'] = $tmogtype; $transmogrify = array_reverse(explode('\n', $data['Transmogrify'])); $data['Transmogrify'] = (implode('<br>', $transmogrify)); } if (!empty($r['useable'])) { $data['useable'] = "Can be right clicked"; } if ($r['throwable']) { $data['throwable'] = "Can be thrown"; } if ($r['unique']) { $data['unique'] = "Can only spawn as a unique item."; } if ($r['stackable']) { $data['stackable'] = "Can be stacked"; } if ($r['quest']) { $data['quest'] = "Quest Item"; } if ($r['spelldesc']) { $data['spelldesc'] = $strings[$r['spelldescstr']]; $p = "/ÿc[\d:;\/.]/i"; $data['spelldesc'] = preg_replace($p, "", $data['spelldesc']); $spelldesc = array_reverse(explode('\n', $data['spelldesc'])); $data['spelldesc'] = (implode('<br>', $spelldesc)); } if ($r['nameable']) { $data['nameable'] = "<span class=''>Can be personalized by Anya</span>"; } $statFields = ['stat1', 'stat2', 'stat3']; $calcFields = ['calc1', 'calc2', 'calc3']; foreach ($statFields as $field) { if (isset($r[$field])) { $stats[$field] = "{$r[$field]}"; } } foreach ($calcFields as $field) { if (isset($r[$field])) { $stats[$field] = "{$r[$field]}"; } } $data = array_filter($data); if ($stats) $stat = array_filter($stats); $tr .= <<<EOT <tr> <td>{$data['name']}</td> <td>{$data['level']}</td> <td>{$data['levelreq']}</td> <td style="background: black; font-weight: normal; text-align: center;"> <div style="margin-left: 40px;"> <img style="max-height: 200%;" src="$img" /> <p style="font-size: 1.5em;" class="gold">{$data['name']}</p> </div> <ul style="font-weight: normal; font-family:"> <li class="">Item {$data['level']}</li> <li class="">{$data['levelreq']}</li> <li class="text-success">{$data['rarity']}</li> <li class="blue">{$data['speed']}</li> <li class="blue">{$data['durability']}</li> <li class="">{$data['hasinv']}</li> <li class="blue">{$data['gemapplytype']}</li> <li class="blue">{$data['throwable']}</li> <li class="blue">{$data['useable']}</li> <li class="blue">{$data['unique']}</li> <li class="blue">{$data['stackable']}</li> <li class="text-info">{$data['Transmogrify']}{$data['tmogtype']}</li> <li class="text-secondary">{$data['quest']}</li> <li class="text-info">{$data['nameable']}</li> <li class="blue">{$data['spelldesc']}</li> <li class="blue">{$stats['stat1']} <span class="gold" style="font-size: 1.25em;">{$stats['calc1']}</span></li> <li class="blue">{$stats['stat2']} <span class="gold" style="font-size: 1.25em;">{$stats['calc2']}</span></li> <li class="blue">{$stats['stat3']} <span class="gold" style="font-size: 1.25em;">{$stats['calc3']}</span></li> </ul> </p> </td> </tr> EOT; } $htmlFinal = $htmltop . $tableTop . $tr . $tableBottom . $htmlbottom; file_put_contents("$dir/misc.html", $htmlFinal); header("Location: docs/{$_SESSION['modname']}/misc.html"); } // Armor.txt docs generator if ($cmd == 'genDocArmor') { $tableTop = <<<EOT <style> body { font-family: Tahoma,Arial,Sans-Serif} table { font-family: ;} </style> <table border=1 class="mtable"> <thead> <tr> <th>Name</th> <th>Lvl</th> <th>Required Lvl</th> <th>Required Str</th> <th>Min AC</th> <th>Max AC</th> <th>Block Chance</th> </tr> </thead> <tbody> EOT; $tableBottom = '</tbody> </table>'; $sql = "SELECT * FROM armor WHERE spawnable=1 AND namestr != ''"; $res = PDO_FetchAll($sql); foreach ($res as $r) { $name = (!empty($strings[$r['namestr']])) ? $strings[$r['namestr']] : $r['name']; if ($r['indestructible'] == '1') { $indestructable = "Yes"; } else { $indestructable = "No"; } $imgUnique = (!empty($r['uniqueinvfile'])) ? "<br><img src='img/items/{$r['uniqueinvfile']}.png'>" : ""; $imgSet = (!empty($r['setinvfile'])) ? "<br><img src='img/items/{$r['setinvfile']}.png'>" : ""; if (!empty($r['auto prefix'])) { $sql = "SELECT * FROM automagic WHERE `group` = ?"; $ret = PDO_FetchRow($sql, [$r['auto prefix']]); // ddump($isc[$ret['mod1code']]); for ($i = 1; $i <= 3; $i++) { if ($ret["mod{$i}code"] != '') { // ddump($isc[$ret["mod{$i}code"]]['string1']); $params = [ "string1" => $isc[$ret["mod{$i}code"]]["string1"], "string2" => $isc[$ret["mod{$i}code"]]["string2"], "gstring1" => $isc[$ret["mod{$i}code"]]["gstring"], "gstring2" => $isc[$ret["mod{$i}code"]]["gstring2"], "descfunc" => $isc[$ret["mod{$i}code"]]["descfunc"], "descval" => $isc[$ret["mod{$i}code"]]["descval"], "dgrp" => $isc[$ret["mod{$i}code"]]["dgrp"], "dgrpfunc" => $isc[$ret["mod{$i}code"]]["dgrpfunc"], "dgrpval" => $isc[$ret["mod{$i}code"]]["dgrpval"], "prop" => $isc[$ret["mod{$i}code"]]["prop"] ]; $params["par"] = $ret["mod{$i}param"]; $params["min"] = $ret["mod{$i}min"]; $params["max"] = $ret["mod{$i}max"]; $props[$i] = $idesc->getDesc($params); } } // dump($props); $autoprefix = "Automagic/Auto prefix Mods"; } $strbonus = (!empty($r['StrBonus'])) ? "Strength Bonus: <span class='white'>{$r['StrBonus']}" : ""; $block = (!empty($r['block'])) ? "Block: <span class='white'>{$r['block']}</span>" : ""; $tr .= <<<EOT <tr> <td style="text-align: left;"> <ul> <li class="white h1">$name</li> <li class=""><img src="img/items/{$r['invfile']}.png">$imgC</li> <li class="white">Defense: <span class="blue">[{$r['minac']} - {$r['maxac']}]</span></li> <li class="white">Weight: <span class="blue">{$r['speed']}</span></li> <li class="white">Level: <span class="blue">{$r['level']}</span></li> <li class="white">Required Level: <span class="blue">{$r['levelreq']}</span></li> <li class="white">Required Strength: <span class="blue">{$r['reqstr']}</span></li> <li class="white">Indestructable: <span class="blue">$indestructable</span></li> <li class="white">Durability: <span class="blue">{$r['durability']}</span></li> <li class="gold">Cost: <span class="white">{$r['cost']}</span></li> <li class="white">Normal: <spap class="white">{$strings[$r['normcode']]}</span> </li> <li class="blue">Exceptional:<br> <span class="white">{$strings[$r['ubercode']]}</span> $imgSet </li> <li class="blue">Elite:<br> <span class="white">{$strings[$r['ultracode']]}</span> $imgUnique </li> <li class="blue">Sockets: <span class="white">{$r['gemsockets']}</span></li> <li class="blue" style="margin-top: 30px;">$autoprefix<span class="white">{$props[0]}</span></li> <li class="blue"><span class="white">{$props[1]}</span></li> <li class="blue" style="margin-bottom: 30px;"><span class="white">{$props[2]}</span></li> <li class="blue">$strbonus</li> <li class="blue">$block</li> </ul> </td> <td>Level: <br> {$r['level']}</td> <td>Level Required: <br> {$r['levelreq']}</td> <td>Requird Strength: <br> {$r['reqstr']}</td> <td>Min AC: <br> {$r['minac']}</td> <td>Max AC: <br> {$r['maxac']}</td> <td>Block: <br> {$r['block']}</td> </tr> EOT; } $htmlFinal = $htmltop . $tableTop . $tr . $tableBottom . $htmlbottom; ob_flush(); echo $htmlFinal; file_put_contents("$dir/armor.html", $htmlFinal); header("Location: docs/{$_SESSION['modname']}/armor.html"); } // Generate weapons.txt docs if ($cmd == 'genDocWeapons') { $tableTop = <<<EOT <style> body { font-family: Tahoma,Arial,Sans-Serif} table { font-family: ;} </style> <table border=1 class="mtable"> <thead> <tr> <th>Name</th> <th>Lvl</th> <th>Required Lvl</th> <th>Required Str</th> <th>Min AC</th> <th>Max AC</th> </tr> </thead> <tbody> EOT; $tableBottom = '</tbody> </table>'; $sql = "SELECT * FROM weapons WHERE spawnable=1 AND namestr != ''"; $res = PDO_FetchAll($sql); foreach ($res as $r) { $name = (!empty($strings[$r['namestr']])) ? $strings[$r['namestr']] : $r['name']; if ($r['indestructible'] == '1') { $indestructable = "Yes"; } else { $indestructable = "No"; } $imgUnique = (!empty($r['uniqueinvfile'])) ? "<br><img src='img/items/{$r['uniqueinvfile']}.png'>" : ""; $imgSet = (!empty($r['setinvfile'])) ? "<br><img src='img/items/{$r['setinvfile']}.png'>" : ""; if (!empty($r['auto prefix'])) { $sql = "SELECT * FROM automagic WHERE `group` = ?"; $ret = PDO_FetchRow($sql, [$r['auto prefix']]); // ddump($isc[$ret['mod1code']]); for ($i = 1; $i <= 3; $i++) { if ($ret["mod{$i}code"] != '') { // ddump($isc[$ret["mod{$i}code"]]['string1']); $params = [ "string1" => $isc[$ret["mod{$i}code"]]["string1"], "string2" => $isc[$ret["mod{$i}code"]]["string2"], "gstring1" => $isc[$ret["mod{$i}code"]]["gstring"], "gstring2" => $isc[$ret["mod{$i}code"]]["gstring2"], "descfunc" => $isc[$ret["mod{$i}code"]]["descfunc"], "descval" => $isc[$ret["mod{$i}code"]]["descval"], "dgrp" => $isc[$ret["mod{$i}code"]]["dgrp"], "dgrpfunc" => $isc[$ret["mod{$i}code"]]["dgrpfunc"], "dgrpval" => $isc[$ret["mod{$i}code"]]["dgrpval"], "prop" => $isc[$ret["mod{$i}code"]]["prop"] ]; $params["par"] = $ret["mod{$i}param"]; $params["min"] = $ret["mod{$i}min"]; $params["max"] = $ret["mod{$i}max"]; $props[$i] = $idesc->getDesc($params); } } // dump($props); $autoprefix = "Automagic/Auto prefix Mods"; } $strbonus = (!empty($r['StrBonus'])) ? "Strength Bonus: <span class='white'>{$r['StrBonus']}" : ""; if (empty($r['mindmg']) OR empty($r['maxdmg'])) { $mindmg = $r['2handmindam']; $maxdmg = $r['2handmaxdam']; } else { $mindmg = $r['mindmg']; $maxdmg = $r['maxdmg']; } $tr .= <<<EOT <tr> <td style="text-align: left"> <ul> <li class="white h1">$name</li> <li class=""><img src="img/items/{$r['invfile']}.png"></li> <li class="white">Damage: <span class="blue">[$mindmg - $maxdmg]</span></li> <li class="white">Weight: <span class="blue">{$r['speed']}</span></li> <li class="white">Level: <span class="blue">{$r['level']}</span></li> <li class="white">Required Level: <span class="blue">{$r['levelreq']}</span></li> <li class="white">Required Strength: <span class="blue">{$r['reqstr']}</span></li> <li class="white">Indestructable: <span class="blue">$indestructable</span></li> <li class="white">Durability: <span class="blue">{$r['durability']}</span></li> <li class="gold">Cost: <span class="white">{$r['cost']}</span></li> <li class="blue">Normal: <spap class="white">{$strings[$r['normcode']]}</span> </li> <li class="blue">Exceptional: <span class="white">{$strings[$r['ubercode']]}</span> $imgSet </li> <li class="blue">Elite: <span class="white">{$strings[$r['ultracode']]}</span> $imgUnique </li> <li class="blue">Sockets: <span class="white">{$r['gemsockets']}</span></li> <li class="blue" style="margin-top: 30px;">$autoprefix<span class="white">{$props[0]}</span></li> <li class="blue"><span class="white">{$props[1]}</span></li> <li class="blue" style="margin-bottom: 30px;"><span class="white">{$props[2]}</span></li> <li class="blue">$strbonus</li> <li class="blue">$block</li> </ul> </td> <td>Level: <br> {$r['level']}</td> <td>Level Required: <br> {$r['levelreq']}</td> <td>Requird Strength: <br> {$r['reqstr']}</td> <td>Min Dmg: <br> {$mindmg}</td> <td>Max Dmg: <br> {$maxdmg}</td> </tr> EOT; } $htmlFinal = $htmltop . $tableTop . $tr . $tableBottom . $htmlbottom; ob_flush(); echo $htmlFinal; file_put_contents("$dir/weapons.html", $htmlFinal); header("Location: docs/{$_SESSION['modname']}/weapons.html"); }