WIP: removing User::class public array $items for Stat()::class.

This commit is contained in:
2024-01-08 03:33:20 +02:00
parent 4a7535d67d
commit bd8761f240
22 changed files with 812 additions and 971 deletions
+26 -71
View File
@@ -195,7 +195,7 @@ class Stats
}
[$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms] = $this->addWearedItemsBonuses($u['id'], $st, $s_v, $baseStats);
[$hnd1, $hnd2, $sht1, $dom, $coms] = $this->addWearedItemsBonuses($u['id'], $st, $s_v, $baseStats);
$this->addMedalsBonuses($u['id'], $st);
@@ -408,21 +408,9 @@ class Stats
$st['zonb']++;
}
if ($st['zona'] < 1) {
$st['zona'] = 1;
}
if ($st['zona'] > 5) {
$st['zona'] = 5;
}
if ($st['zonb'] < 1) {
$st['zonb'] = 1;
}
if ($st['zonb'] > 3) {
$st['zonb'] = 3;
}
$st['zona'] = Comparsion::minimax($st['zona'], 1, 5);
$st['zonb'] = Comparsion::minimax($st['zonb'], 1, 3);
$st['ozash'] = $oza;
$st['ozmsh'] = $ozm;
$st['weapon1'] = $hnd1;
$st['weapon2'] = $hnd2;
$st['sheld1'] = $sht1;
@@ -500,6 +488,15 @@ class Stats
$st[$key] += $value;
}
/**
* Добавляет бонусы к статам игрока.
* Генерирует переменную User:class->stats['items'], где лежат одетые предметы.
* @param int $uid
* @param array $st
* @param array $s_v
* @param array $baseStats
* @return array
*/
private function addWearedItemsBonuses(int $uid, array &$st, array &$s_v, array $baseStats): array
{
//Характеристики от предметов //ТУТ tr_lvl
@@ -518,33 +515,20 @@ class Stats
$coms = []; // комплекты
$dom = [];
$oza = [
1 => [0, 0],
2 => [0, 0],
3 => [0, 0],
4 => [0, 0],
]; //особенности защиты
$ozm = [
1 => [0, 0],
2 => [0, 0],
3 => [0, 0],
4 => [0, 0],
]; //особенности магии
$ozaozmtypes = [
1 => [1, 9,],//Слабая
2 => [20, 39,],//Нормальная
3 => [40, 69,],//Хорошая
4 => [10, 19,],//Посредственная
5 => [70, 89,],//Великолепная
];
$wi = new WearedItem(); // на замену User:class->stats['items']
$st['items_o'] = $wi;
foreach ($wearedItems as $wearedItem) {
// Генерируем всратую пепяку User:class->stats['wpXid'] > 0, которая показывает, что определённый слот
// чем-то занят. Странное решение.
$this->addKeyIfNotExist('wp' . $wearedItem['inOdet'] . 'id', $h, $st);
$st['items'][$h] = $wearedItem;
$h++;
$wi->add(new Item($wearedItem));
// Если в левой руке (3) предметы определённого типа, то рука занята оружием.
if ($wearedItem['inOdet'] == 3 &&
(($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
$wearedItem['type'] == 26 ||
@@ -552,6 +536,8 @@ class Stats
$wearedItem['type'] == 28)) {
$hnd1 = 1;
}
// Если в правой руке (14) предметы определённого типа, то рука занята оружием или щитом.
if ($wearedItem['inOdet'] == 14 &&
(($wearedItem['type'] >= 18 && $wearedItem['type'] <= 24) ||
$wearedItem['type'] == 26 ||
@@ -562,44 +548,13 @@ class Stats
$sht1 = 1;
}
$data = Conversion::dataStringToArray($wearedItem['data']);
// Если в любом слоте что-то есть, повышается User:class->stats['reting'] за каждый слот
// Используется каким-то непонятным образом в хаотах.
if ($wearedItem['inOdet'] <= 18 && $wearedItem['inOdet'] > 0) {
$this->addKeyIfNotExist('reting', 1, $st);
}
# Пришлось зацикливать, уж больно однотипное.
# oza[X][0,1] = add_ozaX[0,1] + add_oza[0,1]
# ozm[X][0,1] = add_ozmX[0,1] + add_ozm[0,1]
for ($i = 1; $i <= 4; $i++) {
if (!isset($data["add_oza$i"])) {
continue;
}
if (isset($data['add_oza']) && in_array($data['add_oza'], range(1, 5))) {
$oza[$i][0] += $ozaozmtypes[$data['add_oza']][0];
$oza[$i][1] += $ozaozmtypes[$data['add_oza']][1];
}
if (isset($data['add_ozm']) && in_array($data['add_ozm'], range(1, 5))) {
$ozm[$i][0] += $ozaozmtypes[$data['add_ozm']][0];
$ozm[$i][1] += $ozaozmtypes[$data['add_ozm']][1];
} else {
$ozm[$i][0] += $ozaozmtypes[1][0];
$ozm[$i][1] += $ozaozmtypes[1][1];
}
if (in_array($data["add_oza$i"], range(1, 5))) {
$oza[$i][0] += $ozaozmtypes[$data["add_oza$i"]][0];
$oza[$i][1] += $ozaozmtypes[$data["add_oza$i"]][1];
}
if (isset($data["add_ozm$i"]) && in_array($data["add_ozm$i"], range(1, 5))) {
$ozm[$i][0] += $ozaozmtypes[$data["add_ozm$i"]][0];
$ozm[$i][1] += $ozaozmtypes[$data["add_ozm$i"]][1];
} else {
$ozm[$i][0] += $ozaozmtypes[1][0];
$ozm[$i][1] += $ozaozmtypes[1][1];
}
}
$data = Conversion::dataStringToArray($wearedItem['data']);
if (isset($data['art'])) {
$this->addKeyIfNotExist('art', $data['art'], $st);
}
@@ -696,7 +651,7 @@ class Stats
}
}
}
return [$hnd1, $hnd2, $sht1, $oza, $ozm, $dom, $coms];
return [$hnd1, $hnd2, $sht1, $dom, $coms];
}
private function addMedalsBonuses(int $uid, array &$st): void