Аукцион

Реализация простая как двери. Есть ID предмета, есть таймер, есть стартовая цена. Игроки могут повышать ставки нажимая на кнопку. Каждая новая ставка увеличивает цену на 10% от прошлой ставки. Все цифры настраиваются в конфиге.

Я это писал потому что мне было интересно реализовать полную модульность - когда вся логика в отдельной папке и модифицировать файлы игры надо по самому минимуму, не влезая в логику игры вообще. Захотел - подключил, захотел - отключил, захотел - вырезал и ушёл продавать на других площадках (совесть имейте, хоть на бутылочку винишка скиньте, если уже продаёте).

MiniAuction.7z (5,5 КБ)

Использование

  • Залить файлы.

  • Прописать базу и настройки в config.php.

  • Запустить install.php.

  • Настроить cron.

  • Подключить объект User к api.php

  • Подключить к проекту:

    // Прописываем путь куда залили папку.
    require_once __DIR__ . '/MiniAuction/init.php';
    
    // Запуск аукциона
    $controller = new AuctionController();
    $result = $controller->startAuction($itemId, $startPrice);
    $auctionId = $result['auction_id'];
    
    // Показ интерфейса
    include miniAuctionPath('views/auction.php');
    
    // Выдача наград
    AuctionEventManager::on('auction.ended', function ($data) {
      $winnerId = $data['winner_id'];
      $itemId = $data['item_id'];
      $price = $data['price'];
    
      // Списать деньги, добавить предмет и т.д.
    });
    

Нюансы

Вообще есть три колхоза:

  • Операции в случае победы. Списание денег, выдача предметов итд итп - это надо прописать.
  • auction.php это чисто базовый html, нужно сделать красиво под себя.
  • В api.php есть строчка $user = getCurrentUser(); и это полная хуета заглушка. Туда надо передать объект $user из вашего проекта и убедиться, что он умеет отдавать $user->id и $user->money. Тут просто красивее не придумалось, так как надо взаимодействовать с игроком проверяя го баланс, когда он повышает ставку. Придумаю что-то красивее - обновлю.