$description) { $queryChoices[$type] = $description; } $queryLabel = 'LGSL Query Name'; } elseif ($selectedProtocol === 'gameq') { require_once 'protocol/GameQ/Autoloader.php'; $protocols_path = "protocol/GameQ/Protocols/"; $dir = dir($protocols_path); $protocols = array(); while (false !== ($entry = $dir->read())) { if (!is_file($protocols_path . $entry)) { continue; } $class_name = 'GameQ\Protocols\\' . ucfirst(pathinfo($entry, PATHINFO_FILENAME)); $reflection = new ReflectionClass($class_name); if (!$reflection->IsInstantiable()) { continue; } $class = new $class_name; $protocols[$class->name()] = array( 'name' => $class->nameLong(), ); unset($class); } unset($dir); ksort($protocols); foreach ((array)$protocols as $gameq => $info) { $queryChoices[$gameq] = $info['name']; } $queryLabel = 'GameQ Query Name'; } $safeProtocol = htmlspecialchars($selectedProtocol, ENT_QUOTES, 'UTF-8'); echo << .xml-creator-wrapper{max-width:1100px;margin:0 auto;padding:20px;color:#eee;font-family:'Segoe UI',Tahoma,Arial,sans-serif} .xml-creator-title{margin-bottom:4px;font-size:1.8rem;font-weight:600} .xml-creator-lead{color:#bbb;margin-bottom:20px;max-width:900px} .xml-creator-card{background:#111;border:1px solid #222;border-radius:10px;padding:18px;margin-bottom:18px;box-shadow:0 8px 18px rgba(0,0,0,0.25)} .xml-creator-card label{display:block;font-size:0.9rem;color:#aaa;margin-bottom:6px;text-transform:uppercase;letter-spacing:0.08em} .xml-creator-card select,.xml-creator-card button,.xml-creator-card input[type="text"],.xml-creator-card input[type="number"]{width:100%;padding:10px 12px;border:1px solid #2f2f2f;border-radius:6px;background:#0c0c0c;color:#fff;font-size:1rem} .xml-creator-hint{font-size:0.85rem;color:#888;margin-top:6px} .xml-creator-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px} .xml-creator-actions{display:flex;justify-content:flex-end;margin-top:12px} .xml-creator-note{font-size:0.9rem;color:#bbb;margin:12px 0 24px} .xml-creator-protocol-form{margin-bottom:26px} .xml-global-save{background:#1c6dd0;border:1px solid #114b99;color:#fff;padding:10px 28px;border-radius:4px;font-weight:600;text-transform:uppercase;letter-spacing:0.03em;cursor:pointer;transition:background 0.2s ease,transform 0.2s ease;box-shadow:0 2px 6px rgba(0,0,0,0.35)} .xml-global-save:hover{background:#1f7aec;transform:translateY(-1px)} CSS; echo "
"; echo "

XML Config Creator

"; echo "

Use this guided workflow to spin up a brand new XML configuration template. Pick the query layer first, then define the operating system, architecture, and installer defaults before launching the step-by-step wizard.

"; echo "
"; echo ""; echo ""; echo "

Selecting a protocol automatically reloads this page and reveals available query names.

"; echo "
"; echo "
"; if ($selectedProtocol !== '') { echo ""; } echo "
"; if (!empty($queryChoices)) { $label = htmlspecialchars($queryLabel, ENT_QUOTES, 'UTF-8'); echo ""; echo ""; echo "

The query name informs the monitoring layer which protocol preset to use.

"; } else { echo ""; echo "
Select LGSL or GameQ above if this config should publish a query endpoint. You can skip this if the game is not queryable.
"; } echo "
"; echo "
"; echo "
"; echo ""; echo ""; echo "

Defines which agent pool can install the server.

"; echo "
"; echo "
"; echo ""; echo ""; echo "

Pick the CPU target that the XML should advertise.

"; echo "
"; echo "
"; echo ""; echo ""; echo "

Optional helper to bootstrap files directly from Steam.

"; echo "
"; echo "
"; echo "

When you click the button below the panel will send these settings into the XML creation wizard so the initial document already matches your desired platform.

"; echo "
"; echo "
"; echo "
"; }