40servidoresMC 40servidoresMC

Discord oficial de 40servidoresMC. Comunidad, soporte y rango Owner para dueños de servidores.

Unirme
Modo GTA · Versión 1.8 · Acceso SemiPremium

Servidores de Minecraft
GTA 1.8 SemiPremium

Servidores
0
Búsquedas 30d
0
Popularidad
#88
Total del ranking
285
Modo /modo-GTA/version-1-8/acceso-semipremium

GTA 1.8 SemiPremium

Información del modo

Modo de juego que imita al Grand thef Auto.

Ranking de servidores GTA 1.8 SemiPremium

0 resultados en este listado.

Página 1 de 1
Borrar filtros

No hay servidores de GTA 1.8 SemiPremium que coincidan con esos filtros.

(function() { const root = document.querySelector('[data-prelaunch-feedback-root]'); if (!root) return; const toggle = root.querySelector('[data-feedback-toggle]'); const panel = root.querySelector('[data-feedback-panel]'); const close = root.querySelector('[data-feedback-close]'); const backdrop = root.querySelector('[data-feedback-backdrop]'); const form = root.querySelector('[data-feedback-form]'); const submit = root.querySelector('[data-feedback-submit]'); const status = root.querySelector('[data-feedback-status]'); const captchaHost = root.querySelector('[data-feedback-turnstile-host]'); const setOpen = (open) => { root.classList.toggle('is-open', open); panel.hidden = !open; panel.setAttribute('aria-hidden', open ? 'false' : 'true'); backdrop.hidden = !open; toggle?.setAttribute('aria-expanded', open ? 'true' : 'false'); if (open) { setStatus(''); window.setTimeout(() => form?.querySelector('textarea[name="message"]')?.focus(), 40); if (captchaHost) { captchaHost.hidden = false; // Si api.js ya estaba listo y el partial nunca monto el // captcha por estar el contenedor oculto al parsear, lo // montamos ahora que el panel es visible de verdad. const cfContainer = captchaHost.querySelector('.cf-turnstile'); if (cfContainer && cfContainer.dataset.turnstilePending === '1') { delete cfContainer.dataset.turnstilePending; if (window.mountTurnstile && form) { window.mountTurnstile(cfContainer, form); } } } } }; const setStatus = (message, tone = '') => { if (!status) return; status.textContent = message; status.classList.remove('is-error', 'is-success'); if (tone !== '') status.classList.add(tone); }; toggle?.addEventListener('click', () => setOpen(!root.classList.contains('is-open'))); close?.addEventListener('click', () => setOpen(false)); backdrop?.addEventListener('click', () => setOpen(false)); document.addEventListener('keydown', (event) => { if (event.key === 'Escape') setOpen(false); }); form?.addEventListener('submit', async (event) => { event.preventDefault(); if (!form || !submit) return; // El boton de enviar no se bloquea mientras carga el captcha (ver // _turnstile_init.php, $turnstileGateSubmit=false), asi que hay que // comprobar el token aqui explicitamente antes de disparar el // fetch: el guard de _turnstile_init.php (registrado aparte, al // abrir el panel) se encarga de avisar al usuario en ese caso // (reportValidity, flash en el boton, reset del widget) — este // listener simplemente no debe enviar nada si falta el token. const turnstileToken = form.querySelector('input[name="cf-turnstile-response"]'); if (turnstileToken && !turnstileToken.value) { return; } submit.disabled = true; setStatus('Guardando feedback...'); try { const response = await fetch(form.action, { method: 'POST', body: new FormData(form), credentials: 'same-origin', headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }); const payload = await response.json().catch(() => ({})); if (!response.ok || !payload.ok) { throw new Error(payload.message || 'No se pudo guardar el feedback.'); } form.reset(); if (window.turnstile) { try { window.turnstile.reset(); } catch (error) {} } setStatus(payload.message || 'Feedback guardado.', 'is-success'); // Deja ver el mensaje de éxito un instante antes de cerrar, en // vez de desaparecer de golpe. window.setTimeout(() => setOpen(false), 1400); } catch (error) { setStatus(error.message || 'No se pudo guardar el feedback.', 'is-error'); } finally { submit.disabled = false; } }); })();