d2tools/src/D2ItemData.php

347 lines
8.5 KiB
PHP
Executable File

<?php
class D2ItemData {
public $strings;
public function uniqueItems($index, $doc = FALSE) {
// This is where we get props for each item
$sql = "SELECT * FROM uniqueitems WHERE enabled='1' AND `index`=?";
$res = (PDO_FetchRow($sql, [$index]));
/*
*
*
*
* Grag invfile code all 3 item tables wherever it is
*
*
*
*
*
*
*/
if (empty($res['invfile'])) {
// if no invfile, get from other tables
// try to get from armor, weapons, misc
$sql = "SELECT invfile FROM armor WHERE code=?";
$invfile[] = PDO_FetchRow($sql, [$res['code']]);
$sql = "SELECT invfile FROM weapons WHERE code=?";
$invfile[] = PDO_FetchRow($sql, [$res['code']]);
$sql = "SELECT invfile FROM misc WHERE code=?";
$invfile[] = PDO_FetchRow($sql, [$res['code']]);
$invfile = array_filter($invfile);
foreach ($invfile as $i) {
$x[] = $i;
}
if (!empty($x[0])) {
$x[0] = array_filter($x[0]);
}
$invClean = $x[0];
if (!empty($invClean)) {
$return = array_merge($res, $invClean);
} else {
$return = $res;
}
//$return = array_merge($res, $invClean);
} else {
$return = $res;
}
// var_dump($return);
/*
*
*
*
*
*
*
* for all props for this unique item, get ISC strings
*/
$props = array_filter([
"Prop1" => array_filter(
["prop1" => $return['prop1'], "par1" => $return['par1'], "min1" => $return['min1'], "max1" => $return['max1']]
),
"Prop2" => array_filter(
["prop2" => $return['prop2'], "par1" => $return['par2'], "min1" => $return['min2'], "max1" => $return['max2']]
),
"Prop3" => array_filter(
["prop3" => $return['prop3'], "par1" => $return['par3'], "min1" => $return['min3'], "max1" => $return['max3']]
),
"Prop4" => array_filter(
["prop4" => $return['prop4'], "par1" => $return['par4'], "min1" => $return['min4'], "max1" => $return['max4']]
),
"Prop5" => array_filter(
["prop5" => $return['prop5'], "par1" => $return['par5'], "min1" => $return['min5'], "max1" => $return['max5']]
),
"Prop6" => array_filter(
["prop6" => $return['prop6'], "par1" => $return['par6'], "min1" => $return['min6'], "max1" => $return['max6']]
),
"Prop7" => array_filter(
["prop7" => $return['prop7'], "par1" => $return['par7'], "min1" => $return['min7'], "max1" => $return['max7']]
),
"Prop8" => array_filter(
["prop8" => $return['prop8'], "par1" => $return['par8'], "min1" => $return['min8'], "max1" => $return['max8']]
),
"Prop9" => array_filter(
["prop9" => $return['prop9'], "par1" => $return['par9'], "min1" => $return['min9'], "max1" => $return['max9']]
),
"Prop10" => array_filter(
["prop10" => $return['prop10'], "par1" => $return['par10'], "min1" => $return['min10'], "max1" => $return['max10']]
)
]);
// need par, min, max value for each prop
//
//
// ( Also need func1 and val1 for each prop )
//
// for each prop, get stat
$counter = 1;
foreach ($props as $key => $val) {
// val = Prop1,Prop2 etc.
// for each propr, get all 7 stats in ISC
// for now only get stat1, and for else, use dgrp
$sql = "SELECT stat1 FROM properties WHERE code = ?";
$props[$key]['stat'] = PDO_FetchRow($sql, [$val['prop' . $counter]]);
if (!empty($props[$key]['stat'])) {
$props[$key]['stat'] = array_filter($props[$key]['stat']);
}
$counter++;
}
//ddump($props);
$counter = 1;
//each stat now goes into getIscStrings
foreach ($props as $k => $v) {
//ddump($v);
$props[$k]['desc'] = $this->getIscStrings($v['prop' . $counter]);
$counter++;
}
// SELECT * FROM strings WHERE `Key`='ModStr3a' returns always Amazon Skills
// todo: put values in params, so I can get generated string for that prop
$counter = 1;
foreach ($props as $k => $v) { // for each property Prop1 Prop2
// $sql = "SELECT val$counter,func$counter FROM `properties` WHERE `code`=\"{$return['prop' . $counter]}\"";
// $funcval = PDO_FetchRow($sql);
//
// var_dump($funcval);
$params = [
'string1' => $v['desc']['string1'],
'string2' => $v['desc']['string2'],
'gstring1' => $v['desc']['gstring1'],
'gstring2' => $v['desc']['gstring2'],
'descfunc' => $v['desc']['descfunc'],
'descval' => $v['desc']['descval'],
'dgrp' => $v['desc']['dgrp'],
'dgrpfunc' => $v['desc']['dgrpfunc'],
'dgrpval' => $v['desc']['dgrpval'],
"prop" => $return['prop' . $counter],
"par" => $return['par' . $counter],
"min" => $return['min' . $counter],
"max" => $return['max' . $counter],
// "val1" => $funcval['val1'],
// "func1" => $funcval['func1']
// 'item' => $return
];
/*
* getDesc should process string1, not file guide copy pasta
*
*/
if (!empty($v['desc'])) {
require_once 'D2ItemDesc.php';
$idesc = new D2ItemDesc();
$props[$k]['string'][] = ($idesc->getDesc($params));
}
$counter++;
}
$return['props'] = $props;
$sqlArmor = "SELECT * FROM armor WHERE code=?";
$sqlMisc = "SELECT * FROM misc WHERE code=?";
$sqlWeapons = "SELECT * FROM weapons WHERE code=?";
$baseItemInfo = PDO_FetchRow($sqlArmor, [$res['code']]);
$uTable = "armor";
if (empty($baseItemInfo)) {
$baseItemInfo = PDO_FetchRow($sqlMisc, [$res['code']]);
}
if (empty($baseItemInfo)) {
$baseItemInfo = PDO_FetchRow($sqlWeapons, [$res['code']]);
}
$return['baseItemInfo'] = $baseItemInfo;
if (!empty($baseItemInfo)) {
$return['baseItemInfo'] = array_filter($baseItemInfo);
}
if (!$doc) {
header('Content-Type: application/json');
return json_encode($return, JSON_INVALID_UTF8_IGNORE | JSON_PRETTY_PRINT);
} else {
return $return;
}
}
// function getIscStringsX($iscStat) {
//// $sql = "
////SELECT s1.String as string1, s2.String as string2, descfunc, descval
//// FROM itemstatcost as i
//// LEFT JOIN strings AS `s1` ON `i`.descstrpos = `s1`.`Key`
//// LEFT JOIN strings AS `s2` ON `i`.DescStr2 = `s2`.`Key`
//// WHERE `Stat` = '$iscStat'
////";
//
//
// $sql = "SELECT String as string1
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'";
// $string1 = PDO_FetchOne($sql);
//
// $sql = "SELECT String as string2
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.DescStr2 = `s`.`Key`
// WHERE `Stat` = '$iscStat'";
// $string2 = PDO_FetchOne($sql);
//
// $sql = "SELECT descfunc
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'";
// $descfunc = PDO_FetchOne($sql);
//
// $sql = "SELECT descval
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'";
// $descval = PDO_FetchOne($sql);
//
//
// //ddump();
//
// return ["string1"=>$string1, "string2"=>$string2, "descfunc"=>$descfunc, "descval"=>$descval];
// }
//
// function getIscStringsXXX($iscStat) {
// $sql = "
//SELECT
// (
// SELECT String
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'
// )
//AS string1,
// (
// SELECT String
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.DescStr2 = `s`.`Key`
// WHERE `Stat` = '$iscStat'
// )
//AS string2,
//(
// SELECT descfunc
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'
// )
//AS descfunc,
//(
// SELECT descval
// FROM itemstatcost as i
// LEFT JOIN strings AS `s` ON `i`.descstrpos = `s`.`Key`
// WHERE `Stat` = '$iscStat'
// )
//AS descval
//";
//
//
// return PDO_FetchRow($sql);
// }
public function getIscStrings($iscStat) {
if (empty($this->strings)){
$this->getStrings();
}
return ($this->strings[$iscStat]);
}
public function getStrings() {
$sql = "
SELECT p.`code` as prop,
p.stat1,
i.descstrpos,
i.descstr2,
i.descfunc,
i.descval,
i.dgrp,
i.dgrpfunc,
i.dgrpval,
i.dgrpstrpos,
i.dgrpstrneg,
s1.String as string1,
s2.String as string2,
s3.String as gstring1,
s4.String as gstring2
FROM properties as p
LEFT JOIN itemstatcost as i
ON p.stat1 = i.Stat
LEFT JOIN strings as s1
ON i.descstrpos = s1.Key
LEFT JOIN strings as s2
ON i.descstr2 = s2.Key
LEFT JOIN strings as s3
ON i.dgrpstrpos = s3.Key
LEFT JOIN strings as s4
ON i.dgrpstr2= s4.Key
";
// where p.code = iscstat
$strings = PDO_FetchAll($sql);
//var_dump($strings);
foreach($strings as $k => $v){
$this->strings[$v['prop']] = $v;
}
}
}