game/_incl_data/class/Insallah/Runes/Runes.php

117 lines
4.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Insallah;
class Runes
{
/** Создаём руну в зависимости от уровня.
* @param $level
*
* @return array
*/
public static function get($level)
{
if (!in_array($level, [8, 9, 10])) {
return [];
}
$power = [8 => 3, 9 => 5, 10 => 7];
$rand9 = array_rand(array_flip(['hpAll', 'm2', 'm5']));
$runes = [
['s1', 'pa2', $rand9, 'antm3'],
['s1', 'pa3', $rand9, 'za'],
['s2', 'pa1', $rand9, 'antm3'],
['s2', 'pa1', $rand9, 'm3'],
['s3', 'pa4', $rand9, 'm3'],
['s5', 'm11', 'mpAll', 'pzm']
];
$vars = [
's1' => ['Сила', mt_rand(1, 3)],
's2' => ['Ловкость', mt_rand(1, 3)],
's3' => ['Интуиция', mt_rand(1, 3)],
's5' => ['Интеллект', mt_rand(1, 3)],
'pa1' => ['Мощности Колющего урона', mt_rand(1, $power[$level])],
'pa2' => ['Мощности Рубящего урона', mt_rand(1, $power[$level])],
'pa3' => ['Мощности Дробящего урона', mt_rand(1, $power[$level])],
'pa4' => ['Мощности Режущего урона', mt_rand(1, $power[$level])],
'm2' => ['???', mt_rand(5, 15)],
'm3' => ['МК', mt_rand(1, 3)],
'antm3' => ['ПМК', mt_rand(1, 3)],
'm5' => ['???', mt_rand(5, 10)],
'm11' => ['Мощности Магии стихии', mt_rand(1, $power[$level])],
'hpAll' => ['HP', mt_rand(5, 15)],
'mpAll' => ['MP', mt_rand(10, 20)],
'pzm' => ['Подавление защиты от магии', 1]
];
$rune = $runes[array_rand($runes)]; // arr (s, pa\m, rand9\mpAll, other)
$runeTxt = [$vars[$rune[0]][0], $vars[$rune[1]][0], $vars[$rune[2]][0], $vars[$rune[3]][0]];
$runeVals = [$vars[$rune[0]][1], $vars[$rune[1]][1], $vars[$rune[2]][1], $vars[$rune[3]][1]];
$resultRune = array_combine($rune, $runeVals);
$resultText = array_combine($runeTxt, $runeVals);
if ($level < 10) { // Отрезаем параметр 4.
array_pop($resultRune);
array_pop($resultText);
}
if ($level < 9) { // Отрезаем параметр 3.
array_pop($resultRune);
array_pop($resultText);
}
//Строчка data в базу
$returnData = '|' . http_build_query($resultRune, '', '|');
$returnData = str_replace('|', '|add_', $returnData);
//Строчка человекопонятных параметров в статус.
$returnText = urldecode(http_build_query($resultText, '', ', '));
$returnText = 'Характеристики Руны: ' . str_replace('=', ': +', $returnText) . '.';
return [$returnData, $returnText];
}
/** Выкусывает руну из предмета.
*
* @param array $itemDataArray
* data предмета
*
* @return array массив, item - предмет, rune - руна из предмета, rune_id - id руны.
* Оба в подготовленном строчном формате для data
*/
public static function removeRuneData($itemDataArray)
{
# Ищем есть ли в предмете руна определённого типа.
$runeid = array_search('rune_id', array_flip($itemDataArray));
if (!in_array($runeid, [6001, 6002, 6003])) {
return [];
}
$bonusArgs = 0;
# В зависимости от типа руны считаем количество элементов-бонусов.
if ($runeid === 6001) {
$bonusArgs = 2;
}
if ($runeid === 6002) {
$bonusArgs = 3;
}
if ($runeid === 6003) {
$bonusArgs = 4;
}
$args = 0; //basic rune values - rune, id, name, lvl
$rune = [];
$item = [];
foreach ($itemDataArray as $key => $value) {
if ($key == 'rune') {
$args = 4 + $bonusArgs;
}
if ($args > 0) {
$rune[$key] = $value;
$args--;
continue;
}
$item[$key] = $value;
}
unset($rune['rune'], $rune['rune_id'], $rune['rune_name'], $rune['rune_lvl']);
return [
'item' => urldecode('|' . http_build_query($item, '', '|')),
'rune' => urldecode('|' . http_build_query($rune, '', '|')),
'rune_id' => (int)$runeid
];
}
}