Skip to content

ACP Settings Example

If your game needs editable settings in ACP game catalog UI, implement:

  • IYabfsGameAcpConfigurationProvider

Methods:

  • getDefaultCatalogSettings()
  • getAcpCatalogSettingsFormNodes(array $settings)
  • parseAcpCatalogSettingsFormData(array $formData)
  • normalizeCatalogSettings(array $settings)

Minimal example

<?php
final class MyGameProvider extends SingletonFactory implements IYabfsGameProvider, IYabfsGameAcpConfigurationProvider
{
    public function getDefaultCatalogSettings(): array
    {
        return [
            'mode' => 'standard',
            'maxTurns' => 20,
        ];
    }

    public function getAcpCatalogSettingsFormNodes(array $settings): array
    {
        // Return WoltLab form nodes for mode/maxTurns.
        return [];
    }

    public function parseAcpCatalogSettingsFormData(array $formData): array
    {
        $mode = isset($formData['mode']) && is_string($formData['mode']) ? trim($formData['mode']) : 'standard';
        $maxTurns = isset($formData['maxTurns']) ? (int)$formData['maxTurns'] : 20;

        return [
            'mode' => $mode,
            'maxTurns' => $maxTurns,
        ];
    }

    public function normalizeCatalogSettings(array $settings): array
    {
        $mode = isset($settings['mode']) && is_string($settings['mode']) ? trim($settings['mode']) : 'standard';
        if ($mode !== 'standard' && $mode !== 'ranked') {
            $mode = 'standard';
        }

        $maxTurns = isset($settings['maxTurns']) ? (int)$settings['maxTurns'] : 20;
        $maxTurns = max(1, min(200, $maxTurns));

        return [
            'mode' => $mode,
            'maxTurns' => $maxTurns,
        ];
    }
}

Rules

  • always sanitize both parse and normalize paths
  • keep defaults deterministic
  • keep frontend invite options compatible with normalized ACP settings