ItemRoulette

ItemRoulette

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,781
Реакции
569
Insallah добавил(а) новый ресурс:

ItemRoulette - Генерация списка случайного дропа по заданным параметрам.

PHP:
<?php
declare(strict_types=1);

class ItemRoulette
{
    private array $items;
    private function countDecimals($num): int
    {
        if ((int)$num == $num || !is_numeric($num)) {
            return 0;
        }
        list(, $a) = explode('.', strval($num));
        return strlen($a);
    }

    private function roll(): ?string
    {
        $sumOfPercents = 0;
        $multiplier = 1;
        foreach ($this->items as $itemsPercent) {
            $sumOfPercents +=...

Узнать больше об этом ресурсе...
 
  • Like
Реакции: NorD

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,781
Реакции
569
Insallah обновил(а) ресурс ItemRoulette новой записью:

v.1.1

  • Добавил комментарии ко всем функциям;
  • Функция getMany(), больше не отдаёт больше предметов чем требуется;
  • Добавлена возможно получать на выход строчное значение одного предмета, на случай когда нужно только одно значение, а не массив;
  • Функция roll() больше не возвращает неиспользуемый null;

Узнать больше об этом обновлении...
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,781
Реакции
569

RoBoT

Некто
🏆
📜
Сообщения
22
Реакции
7
1. Если добавил `declare(strict_types=1);` то лучше декларировать все в том числе и `: void`. Иначе какой с нее смысл?
2. В методе `roll` первый `foreach` вполне неплохо заменяется array_sum()
3. `loot` - зачем она возвращает либо массив, либо строку? С точки зрения логики она должна вернуть лут, но 1 или 10 это уже настройка. Следственно, метод должен всегда возвращать массив с 1 или n элементами. Таким образом это поможет избежать не нужных проверок на is_string, is_array результата, а самое главное результат будет всегда совместим. А вот метод `getOne` можно сделать публичным декларированным к `?string`, так как результат в целом не обязателен.
4. `private array $items` - лучше установить к дефолтному значению "пустой массив". Чтобы избежать не нужных ошибок и нотисов, так как присвоение массива происходит не в конструкторе объекта, а через сеттер.
5. В методе `roll` добавить проверку на заполненность массива $items, иначе строку мы не получим. Ну и декларировать его к `?string`, чтобы в случае отсутсвия результата вернуть четко `null`


Это так, предложения )
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,781
Реакции
569
Справедливо. Я не делал эти проверки, потому что "ну не будет же разработчик подавать "ничего" чтобы получить что-то".
Наверное стоит учесть.
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,781
Реакции
569
Insallah обновил(а) ресурс ItemRoulette новой записью:

1.3

Рефакторинг с учётом комментария от @RoBoT:
  • array_sum() вместо foreach(). Действительно, чего это я?
  • Теперь loot() возвращает только массив. Вариант со строкой выглядел как частный костыль. В связи с чем удалены более не используемые getOne() и getMany().
  • Отказ от метода setItems() в пользу публичного...

Узнать больше об этом обновлении...
 
Внимание! Эта тема устарела на 188 дней.
Тут обсуждать нечего, лучше создай новую тему. Конечно, если очень-очень нужно (например хочешь ответить на древний вопрос), то отвечай. Но помни: некропост — зло, а модератор не дремлет!
Сверху