Торговля крафт предметами в игре Wild World: механики, карма и ценообразование

Торговая карма персонажа

Введение в механику и логику торговли

В мире MMORPG Wild World торговля крафтовыми предметами играет ключевую роль. Здесь каждый игрок может продавать свои произведенные товары или приобретать предметы, созданные другими игроками. В данной статье мы подробно рассмотрим механику торговли, введенную систему кармы и ее влияние на ценообразование.

Основные принципы торговли

Торговля крафтовыми предметами в Wild World уникальна тем, что все доступные товары для покупки были предварительно проданы другими игроками. Это создает живую и динамичную экономическую среду, в которой каждый игрок играет свою роль.

Преимущества торговли

  1. Реальные игроки как продавцы и покупатели: Все предметы на рынке – это товары, созданные и проданные другими игроками.
  2. Введение Кармы Торговли: Эта система стимулирует игроков продавать больше и покупать с умом, обеспечивая стабильный товарооборот.

Карма торговли

Начальное значение кармы

Каждый игрок начинает с базовым показателем кармы торговли, равным 100. Этот показатель может изменяться в зависимости от действий игрока на рынке.

Изменение кармы

  • Продажа крафтовых предметов: +0,02 за каждый проданный предмет.
  • Покупка крафтовых предметов: -0,01 за каждый купленный предмет.

Таким образом, игроки, активно продающие свои товары, будут иметь более высокую карму, чем те, кто преимущественно покупает.

Влияние кармы на ценообразование

Карма торговли напрямую влияет на цены покупки и продажи предметов.

Формулы для ценообразования

Цена продажи:

Цена продажи = базовая цена * (1 + (карма - 100) / 200)

Цена покупки:

Цена покупки = базовая цена * (1 + (100 - карма) / 50)

Пример расчета

Карма 110:

  • Цена продажи = базовая цена * 1.05 (немного выше базовой)
  • Цена покупки = базовая цена * 0.8 (немного ниже базовой)

Карма 90:

  • Цена продажи = базовая цена * 0.95 (немного ниже базовой)
  • Цена покупки = базовая цена * 1.2 (значительно выше базовой)

Таблица примеров ценообразования

Карма Цена продажи (Базовая цена 100) Цена покупки (Базовая цена 100)
110 105 80
100 100 100
90 95 120
80 90 140
70 85 160

Реализация «кармы торговли» в коде

Миграция для добавления поля кармы в таблицу characters

<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class AddTradingKarmaToCharacters extends Migration
{
    public function up()
    {
        $this->forge->addColumn('characters', [
            'trading_karma' => [
                'type' => 'FLOAT',
                'default' => 100,
                'null' => false
            ],
        ]);
    }

    public function down()
    {
        $this->forge->dropColumn('characters', 'trading_karma');
    }
}

Обновление модели Characters

<?php

namespace App\Models;

use CodeIgniter\Model;

class CharacterModel extends Model
{
    protected $table = 'characters';
    protected $primaryKey = 'id';
    protected $allowedFields = [
        'telegram_user_id', 'name', 'level', 'experience', 'health',
        'tired', 'strength', 'agility', 'intellect', 'gold', 'cell_number',
        'biome_id', 'trading_karma' // Добавляем новое поле
    ];

    // Методы для работы с кармой торговли
    public function increaseTradingKarma(int $characterId, float $amount): bool
    {
        $character = $this->find($characterId);
        if (!$character) {
            return false;
        }

        $newKarma = $character['trading_karma'] + $amount;
        return $this->update($characterId, ['trading_karma' => $newKarma]);
    }

    public function decreaseTradingKarma(int $characterId, float $amount): bool
    {
        $character = $this->find($characterId);
        if (!$character) {
            return false;
        }

        $newKarma = $character['trading_karma'] - $amount;
        return $this->update($characterId, ['trading_karma' => $newKarma]);
    }
}

Логика изменения кармы в торговых операциях

При продажах

<?php

namespace App\Controllers\Telegram\Commands\Actions\Sell;

use Longman\TelegramBot\Request;
use Longman\TelegramBot\Entities\ServerResponse;
use App\Models\CharacterModel;
use App\Models\SalesModel;
use App\Models\CraftedItemsModel;
use App\Controllers\Telegram\Commands\Actions\BaseAction;

class SellCraftConfirmAction extends BaseAction
{
    protected $characterModel;
    protected $salesModel;
    protected $craftedItemsModel;

    public function handle(): ServerResponse
    {
        // Логика проверки и обновления кармы при продаже
        $chatId = $this->callbackQuery->getMessage()->getChat()->getId();
        [$user, $character] = $this->getUserAndCharacter();

        if (!$character) {
            return Request::sendMessage([
                'chat_id' => $chatId,
                'text' => 'Персонаж не найден.',
            ]);
        }

        // Извлечение данных из колбека
        $callbackData = $this->callbackQuery->getData();
        list($action, $quantity, $craftedItemId) = explode('_', $callbackData);

        // Логика продажи предметов...

        // Увеличение кармы
        $this->characterModel->increaseTradingKarma($character['id'], 0.02 * $quantity);

        // Отправка сообщения игроку
        $text = "Поздравляем с продажей! Ваша карма торговли увеличилась.";
        return Request::sendMessage([
            'chat_id' => $chatId,
            'text' => $text,
            'parse_mode' => 'Markdown',
        ]);
    }
}

При покупках

<?php

namespace App\Controllers\Telegram\Commands\Actions\Buy;

use Longman\TelegramBot\Request;
use Longman\TelegramBot\Entities\ServerResponse;
use App\Models\CharacterModel;
use App\Models\SalesModel;
use App\Models\CraftedItemsModel;
use App\Controllers\Telegram\Commands\Actions\BaseAction;

class BuyCraftConfirmAction extends BaseAction
{
    protected $characterModel;
    protected $salesModel;
    protected $craftedItemsModel;

    public function handle(): ServerResponse
    {
        // Логика проверки и обновления кармы при покупке
        $chatId = $this->callbackQuery->getMessage()->getChat()->getId();
        [$user, $character] = $this->getUserAndCharacter();

        if (!$character) {
            return Request::sendMessage([
                'chat_id' => $chatId,
                'text' => 'Персонаж не найден.',
            ]);
        }

        // Извлечение данных из колбека
        $callbackData = $this->callbackQuery->getData();
        list($action, $quantity, $craftedItemId) = explode('_', $callbackData);

        // Логика покупки предметов...

        // Уменьшение кармы
        $this->characterModel->decreaseTradingKarma($character['id'], 0.01 * $quantity);

        // Отправка сообщения игроку
        $text = "Поздравляем с покупкой! Ваша карма торговли уменьшилась.";
        return Request::sendMessage([
            'chat_id' => $chatId,
            'text' => $text,
            'parse_mode' => 'Markdown',
        ]);
    }
}

Заключение

Система торговли крафтовыми предметами в Wild World – это увлекательная и динамичная часть игры, которая позволяет игрокам взаимодействовать друг с другом, улучшая свои навыки торговли и стратегии. Введение кармы торговли стимулирует игроков продавать больше и покупать осознанно, что обеспечивает стабильный и живой рынок. Применяя предложенные механики и формулы ценообразования, игроки смогут получить максимум выгоды и наслаждения от процесса торговли в Wild World.

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

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