{% extends 'wfbo/_layout.html.twig' %} {% block wfbo_title %}Advanced Settings{% endblock %} {% block wfbo_content %} {% for flash in app.flashes('success') %} {% endfor %} {{ form_start(advancedSettingsForm, {attr: {'data-testid': 'advanced-settings-form', 'novalidate': 'novalidate', 'data-turbo': 'false'}}) }} {# ── Negative Revenue Guard section ── #}

Negative Revenue Guard

When enabled, a single player's win is blocked if paying it out would make that game's revenue negative for today (checked separately for Video Karera and Pataasan).

{{ form_widget(advancedSettingsForm.negativeRevenueGuardEnabled) }} {{ form_label(advancedSettingsForm.negativeRevenueGuardEnabled, null, {label_attr: {class: 'form-check-label'}}) }} {{ form_errors(advancedSettingsForm.negativeRevenueGuardEnabled) }}
{# ── Auto HWR (Revenue Quota) section ── #}

Auto HWR (Revenue Quota)

Automatically adjusts the general House Win Rate every 5 minutes to track toward a daily revenue target. The HWR moves gradually — never jumps — and respects min/max bounds. When ahead of quota, the HWR is lowered to reward players and prevent churn.

{{ form_widget(advancedSettingsForm.autoHwrEnabled) }} {{ form_label(advancedSettingsForm.autoHwrEnabled, null, {label_attr: {class: 'form-check-label'}}) }} {{ form_errors(advancedSettingsForm.autoHwrEnabled) }}
{{ form_label(advancedSettingsForm.autoHwrDailyQuota, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.autoHwrDailyQuota) }} {{ form_errors(advancedSettingsForm.autoHwrDailyQuota) }}

Target daily revenue in your platform currency (e.g. 3000.00).

{{ form_label(advancedSettingsForm.autoHwrMinRate, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.autoHwrMinRate) }} {{ form_errors(advancedSettingsForm.autoHwrMinRate) }}
{{ form_label(advancedSettingsForm.autoHwrMaxRate, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.autoHwrMaxRate) }} {{ form_errors(advancedSettingsForm.autoHwrMaxRate) }}
{{ form_label(advancedSettingsForm.autoHwrAdjustmentStep, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.autoHwrAdjustmentStep) }} {{ form_errors(advancedSettingsForm.autoHwrAdjustmentStep) }}

Max % points changed per tick.

{{ form_label(advancedSettingsForm.autoHwrChurnFloor, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.autoHwrChurnFloor) }} {{ form_errors(advancedSettingsForm.autoHwrChurnFloor) }}

Min HWR for players on long losing streaks.

{% if autoHwrStatus is defined and autoHwrStatus is not null %}
{# ── Status Badge ── #}
Today's Revenue Status {% if autoHwrStatus.status == 'ahead' %} Ahead {% elseif autoHwrStatus.status == 'behind' %} Behind {% else %} On Track {% endif %}
{# ── Progress Bar: Revenue vs Time ── #}
Revenue: ₱{{ autoHwrStatus.revenue|number_format(2) }} Expected: ₱{{ autoHwrStatus.expectedRevenue|number_format(2) }} Quota: ₱{{ autoHwrStatus.quota|number_format(2) }}
{# Time progress (gray reference bar) #}
{# Revenue progress (colored bar) #} {% set barColor = autoHwrStatus.status == 'ahead' ? '#22c55e' : (autoHwrStatus.status == 'behind' ? '#ef4444' : '#eab308') %}
{# Center label #}
{{ autoHwrStatus.progress }}% of quota
0% Day progress: {{ autoHwrStatus.timeProgress }}% 100%
{# ── Stats Grid ── #}
General HWR
{{ autoHwrStatus.currentRate }}%
Revenue
₱{{ autoHwrStatus.revenue|number_format(0) }}
Daily Quota
₱{{ autoHwrStatus.quota|number_format(0) }}
Auto HWR
{{ autoHwrStatus.enabled ? 'ON' : 'OFF' }}
{% endif %}
{# ── Google Analytics section ── #}

Google Analytics

Google Analytics 4 measurement ID (e.g. G-XXXXXXXXXX). The tracking script is only loaded on the public-facing pages when an ID is provided. Leave blank to disable.

{{ form_label(advancedSettingsForm.googleAnalyticsId, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.googleAnalyticsId) }} {{ form_errors(advancedSettingsForm.googleAnalyticsId) }}
{# ── Max Winning Dividend section ── #}

Max Winning Dividend

The maximum dividend a single winning pair can pay before the result is overridden. Pairs with dividends above this cap are treated as zero-exposure candidates (skipped unless every other pair also exceeds the cap).

{{ form_label(advancedSettingsForm.maxWinningDividend, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.maxWinningDividend) }} {{ form_errors(advancedSettingsForm.maxWinningDividend) }}

Enter a value in decimal (e.g. 20.00).

{# ── Dummy Betting sections ── #}

Dummy Betting — Video Karera

Fake bettors shown alongside real players in Video Karera to make the game look more active. The number of dummy players per race is picked randomly between the minimum and maximum below.

{{ form_widget(advancedSettingsForm.vkDummyBettingEnabled) }} {{ form_label(advancedSettingsForm.vkDummyBettingEnabled, null, {label_attr: {class: 'form-check-label'}}) }} {{ form_errors(advancedSettingsForm.vkDummyBettingEnabled) }}
{{ form_label(advancedSettingsForm.vkDummyMinPlayers, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.vkDummyMinPlayers) }} {{ form_errors(advancedSettingsForm.vkDummyMinPlayers) }}
{{ form_label(advancedSettingsForm.vkDummyMaxPlayers, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.vkDummyMaxPlayers) }} {{ form_errors(advancedSettingsForm.vkDummyMaxPlayers) }}

Dummy Betting — Pataasan

Fake bettors shown alongside real players in Pataasan to make the game look more active. The number of dummy players per round is picked randomly between the minimum and maximum below.

{{ form_widget(advancedSettingsForm.hlDummyBettingEnabled) }} {{ form_label(advancedSettingsForm.hlDummyBettingEnabled, null, {label_attr: {class: 'form-check-label'}}) }} {{ form_errors(advancedSettingsForm.hlDummyBettingEnabled) }}
{{ form_label(advancedSettingsForm.hlDummyMinPlayers, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.hlDummyMinPlayers) }} {{ form_errors(advancedSettingsForm.hlDummyMinPlayers) }}
{{ form_label(advancedSettingsForm.hlDummyMaxPlayers, null, {label_attr: {class: 'form-label--sm'}}) }} {{ form_widget(advancedSettingsForm.hlDummyMaxPlayers) }} {{ form_errors(advancedSettingsForm.hlDummyMaxPlayers) }}
{{ form_end(advancedSettingsForm) }} {# ── HWR Stats & Analysis ── #}

HWR Stats & Analysis

Win/loss data to help decide whether to adjust the House Win Rate.

{# ── HWR Config ── #}
Current HWR: General {{ hwrConfig.general }}% {% if hwrConfig.vk is not null %}| VK {{ hwrConfig.vk }}%{% else %}| VK (uses general){% endif %} {% if hwrConfig.hl is not null %}| HL {{ hwrConfig.hl }}%{% else %}| HL (uses general){% endif %} | {{ hwrConfig.userOverrides }} user(s) with override
{# ── Stats Table ── #} {% set g = stats.vk %} {% set g = stats.hl %} {% set g = stats.combined %}
Game Bets Wins Losses HWR% Bet Amt Payout Revenue
Video Karera {{ g.total|number_format }} {{ g.wins|number_format }} {{ g.losses|number_format }} {{ g.rate }}% ₱{{ g.betAmount|number_format(2) }} ₱{{ g.winAmount|number_format(2) }} ₱{{ g.revenue|number_format(2) }}
High Low {{ g.total|number_format }} {{ g.wins|number_format }} {{ g.losses|number_format }} {{ g.rate }}% ₱{{ g.betAmount|number_format(2) }} ₱{{ g.winAmount|number_format(2) }} ₱{{ g.revenue|number_format(2) }}
Combined {{ g.total|number_format }} {{ g.wins|number_format }} {{ g.losses|number_format }} {{ g.rate }}% ₱{{ g.betAmount|number_format(2) }} ₱{{ g.winAmount|number_format(2) }} ₱{{ g.revenue|number_format(2) }}
{# ── Copyable Prompt ── #}

Copy the text below and paste it to an AI assistant for HWR recommendations:

{% endblock %}