🧑‍🌾 Действия 🛠️| ⛏️ Добыть ресурсы | DevBlog_6

Логика и механика нахождения лута

Давайте подробно рассмотрим логику и механики в классе GatherTaskHandler, особенно в контексте определения возможности найти лут и изменения параметров персонажа после успешного сбора ресурсов.

1. Формула и механика нахождения лута (ресурсов)

Как определяется возможность найти лут?

Возможность найти лут (ресурсы) зависит от нескольких факторов:

  • Редкость ресурса (rarity): Чем выше редкость ресурса, тем сложнее его найти. В коде редкость используется для расчета базового количества ресурсов, которое может быть найдено.
  • Уровень сложности задачи (difficulty_level): Сложность задачи влияет на количество найденных ресурсов. Чем выше сложность, тем меньше ресурсов можно найти.
  • Характеристики персонажа: Сила, ловкость и интеллект персонажа, а также его уровень влияют на конечное количество найденных ресурсов. Чем выше эти характеристики, тем больше шансов на успешный поиск ресурсов.

Рандом и формула расчета:

Формула расчета количества найденных ресурсов учитывает все вышеупомянутые факторы. Ключевой момент — введение рандомизации через коэффициент, который меняется в диапазоне от 1.0 до 1.5 ($randomMultiplier). Это добавляет элемент случайности к результату поиска.

Количество найденных ресурсов = (Базовое количество * Коэффициент характеристик персонажа * Рандомный коэффициент).

Ниже метод, который отвечает за реализацию

protected function calculateFoundResources($resources, $task, $spentMinutes, $character)
    {
        $activeGatherTask = $this->getActiveGatherTask($character['id']);
        $foundResources = [];
        $interruptedTime = $activeGatherTask['max_duration'] - $spentMinutes;
        $taskInterruptedRatio = $spentMinutes / $activeGatherTask['max_duration'];

        foreach ($resources as $resource) {
            // Предварительные проверки
            if (!isset($resource['rarity']) || !isset($resource['level_required']) || $resource['level_required'] > $character['level']) {
                continue; // Пропускаем ресурс, если нет данных о редкости или уровень персонажа недостаточен
            }

            // Базовое количество ресурса, исходя из редкости ресурса и уровня биома
            $baseAmount = (10 - $resource['rarity']) * (11 - $activeGatherTask['difficulty_level']) * $taskInterruptedRatio;

            // Коэффициент, основанный на характеристиках персонажа
            $characterCoefficient = 1 + 0.1 * ($character['strength'] + $character['agility'] + $character['intellect'] + $character['level']);

            // Рандомный коэффициент для добавления непредсказуемости
            $randomMultiplier = rand(100, 150) / 100;

            // Итоговое количество найденных ресурсов
            $totalAmount = round($baseAmount * $characterCoefficient * $randomMultiplier);

            // Добавляем информацию о найденных ресурсах в массив
            $foundResources[] = [
                'resource_id' => $resource['id'],
                'amount' => max(1, $totalAmount) // Гарантируем, что минимальное количество будет 1
            ];
        }

        return $foundResources;
    }

 

2. Изменение параметров персонажа после сбора лута

После успешного сбора ресурсов, параметры персонажа изменяются следующим образом:

🌟 Улучшение Параметров Персонажа: Подробный Гайд

Приветствуем, путешественники и искатели приключений в мирах Wild World! 🌍 Сегодня мы подробно рассмотрим, как улучшить ключевые параметры вашего героя: 🔹📈 Опыт, ❤️ Здоровье, 💪 Сила, 🤸 Ловкость, и 🧠 Интеллект.

Опыт (📈 Опыт)

Опыт вашего персонажа увеличивается с каждым найденным ресурсом и успешно выполненной задачей. Ваш опыт зависит от редкости найденных ресурсов и сложности задачи.

📝 Формула прироста опыта:

scss
опыт = базовый опыт * сумма (количество ресурсов * редкость ресурса) * коэффициент сложности задачи

🔑 Базовый опыт — это минимальное значение, например, 0.0005. Коэффициент сложности задачи — это дополнительный множитель, который увеличивает опыт в зависимости от сложности задачи.

Здоровье (❤️ Здоровье)

Здоровье — это ваша жизненная сила. Восстановите его, используя найденные ресурсы или отдыхая.

📝 Формула прироста здоровья:

scss
здоровье += сумма (значение здоровья за ресурс * количество таких ресурсов), но не больше максимума

💊 Различные ресурсы могут дать разное количество здоровья, например, еда увеличивает ваше здоровье на фиксированное значение.

Сила, Ловкость, Интеллект (💪 Сила, 🤸 Ловкость, 🧠 Интеллект)

Эти параметры увеличиваются в зависимости от типа и количества найденных ресурсов, а также от сложности задачи.

📝 Формула прироста параметров:

scss
параметр += сумма (базовый прирост параметра * количество ресурсов * редкость ресурса) * коэффициент уровня

💡 Базовый прирост параметра — это значение, определенное для каждого типа ресурса и параметра. Коэффициент уровня — это дополнительный множитель, основанный на вашем текущем уровне.

🎓 Советы для Улучшения

  • Исследуйте и Собирайте: Чем больше ресурсов вы найдете, тем быстрее улучшите свои параметры.
  • Выбирайте Задачи Мудро: Сложные задачи дают больше опыта и улучшений параметров.
  • Учитывайте Тип Ресурсов: Некоторые ресурсы особенно хорошо влияют на определенные параметры.

💬 Делитесь своими стратегиями и успехами в улучшении персонажа! Вместе мы можем открыть все секреты Wild World.

Помните: каждый шаг в Wild World приближает вас к новым вершинам. Вперед к приключениям, и пусть каждый найденный ресурс будет шагом к вашему совершенствованию!

🚀 Используйте каждую возможность для роста: Не упускайте шанс исследовать новые территории и принимать участие в различных задачах. Каждый успешно выполненный квест не только приносит ценные ресурсы, но и делает вашего персонажа сильнее, быстрее и мудрее.

🤝 Объединяйтесь с другими игроками: В Wild World сила в единстве. Совместные походы за ресурсами или выполнение задач в группе могут принести вам не только новых друзей, но и уникальные предметы, ускоряющие развитие персонажа.

🧐 Анализируйте и адаптируйтесь: Внимательно относитесь к выбору ресурсов и задач. Некоторые из них могут оказаться более выгодными для развития конкретных атрибутов вашего персонажа. Экспериментируйте и находите оптимальные стратегии развития.

📚 Изучайте мир Wild World: Чем больше вы узнаете о мире игры, тем легче вам будет найти редкие ресурсы и выполнить самые сложные задачи. Знания — это сила, и в Wild World это правило работает как нигде.

protected function updateCharacterStats($character, $foundResources, $task)
    {
        $enrichedFoundResources = $this->enrichFoundResourcesWithData($foundResources);
        $infoAboutTask = $this->taskModel->where('id', $task['task_id'])->first();

        // Пересмотренные базовые коэффициенты
        $maxHealth = 100;
        $baseExperienceGain = 0.0005; // Существенно снижаем базовый прирост опыта
        $baseHealthGainPerFood = 0.2; // Уменьшаем прирост здоровья за единицу еды
        $baseAttributeGainPerResource = 0.001; // Уменьшаем прирост атрибутов за каждый ресурс

        // Инициализация переменных прироста
        $experienceGain = 0;
        $healthGain = 0;
        $strengthGain = 0;
        $agilityGain = 0;
        $intellectGain = 0;

        foreach ($enrichedFoundResources as $resource) {
            $rarityFactor = (10 - $resource['rarity']) / 10; // Инвертируем редкость, чтобы редкие ресурсы давали больше опыта
            $taskDifficultyFactor = 1 + ($infoAboutTask['difficulty_level'] / 100); // Снижаем влияние сложности задачи

            // Расчет прироста опыта с учетом редкости и сложности задачи
            $experienceGain += ($baseExperienceGain * $rarityFactor * $taskDifficultyFactor) * $resource['amount'];

            // Расчет прироста здоровья (пример для 'food')
            if ($resource['type'] === 'food') {
                $healthGain += $baseHealthGainPerFood * $resource['amount'];
            }

            // Расчет прироста атрибутов с учетом редкости ресурса
            $attributeGain = $baseAttributeGainPerResource * $rarityFactor * $resource['amount'];
            $strengthGain += $attributeGain;
            $agilityGain += $attributeGain;
            $intellectGain += $attributeGain;
        }

        // Применение ограничений на максимальные значения
        $newHealth = min($character['health'] + $healthGain, $maxHealth);

        // Обновление данных персонажа с нормализацией прироста
        $updatedCharacterData = [
            'experience' => $character['experience'] + $experienceGain,
            'health' => $newHealth,
            'strength' => $character['strength'] + $strengthGain,
            'agility' => $character['agility'] + $agilityGain,
            'intellect' => $character['intellect'] + $intellectGain,
        ];

        $this->characterModel->update($character['id'], $updatedCharacterData);
    }

Заключение

Логика и механика нахождения лута и изменения параметров персонажа в игре WILDWORLD являются ключевыми элементами игрового процесса, добавляя глубину и интерес к механикам сбора ресурсов. Они не только влияют на мотивацию игроков к исследованию игрового мира и выполнению задач, но и способствуют развитию их персонажей, делая каждое приключение уникальным и вознаграждающим.

Рандомизированный элемент в поиске ресурсов гарантирует, что результаты сбора будут всегда непредсказуемыми, создавая ощущение риска и возможности. Это заставляет игроков взвешивать решения и стратегически подходить к выбору заданий в зависимости от своих текущих характеристик и нужд.

Изменение параметров персонажа после успешного сбора лута не только отражает его рост и развитие, но и напрямую влияет на игровой процесс. Улучшение характеристик позволяет браться за более сложные задачи и эффективно справляться с вызовами, открывая перед игроками новые горизонты и возможности в игре.

В целом, эти механики способствуют созданию более глубокого и захватывающего игрового опыта, мотивируя игроков продолжать исследовать, экспериментировать и прогрессировать в игре. Они служат важным инструментом для поддержания интереса и вовлеченности игроков, делая каждую игровую сессию уникальной и неповторимой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *