add faq
Some checks failed
delpoy / build-and-deploy (push) Has been cancelled

This commit is contained in:
bytedream 2024-10-30 01:35:11 +01:00
parent 6c7442e33c
commit f930deaba8
9 changed files with 236 additions and 24 deletions

View File

@ -22,6 +22,12 @@
sprite: `${env.PUBLIC_BASE_PATH}/img/menu-rules.png`, sprite: `${env.PUBLIC_BASE_PATH}/img/menu-rules.png`,
href: `${env.PUBLIC_BASE_PATH}/rules`, href: `${env.PUBLIC_BASE_PATH}/rules`,
active: false active: false
},
{
name: 'FAQ',
sprite: `${env.PUBLIC_BASE_PATH}/img/menu-faq.png`,
href: `${env.PUBLIC_BASE_PATH}/faq`,
active: false
} }
]; ];

View File

@ -22,6 +22,9 @@ export const load: PageServerLoad = async ({ parent, cookies }) => {
return { return {
settings: { settings: {
global: {
paypal_link: settings['global.paypal_link'] ?? ''
},
register: { register: {
enabled: settings['register.enabled'] ?? true, enabled: settings['register.enabled'] ?? true,
disabled_title: settings['register.disabled_title'] ?? 'Anmeldung geschlossen', disabled_title: settings['register.disabled_title'] ?? 'Anmeldung geschlossen',

View File

@ -8,6 +8,9 @@
await fetch(`${env.PUBLIC_BASE_PATH}/admin/settings`, { await fetch(`${env.PUBLIC_BASE_PATH}/admin/settings`, {
method: 'POST', method: 'POST',
body: JSON.stringify({ body: JSON.stringify({
global: {
paypal_link: returnIfNoDup(settings.global.paypal_link, data.settings.global.paypal_link)
},
register: { register: {
enabled: returnIfNoDup(settings.register.enabled, data.settings.register.enabled), enabled: returnIfNoDup(settings.register.enabled, data.settings.register.enabled),
disabled_title: returnIfNoDup( disabled_title: returnIfNoDup(
@ -32,6 +35,13 @@
<div class="h-full flex flex-col items-center justify-between"> <div class="h-full flex flex-col items-center justify-between">
<div class="grid grid-cols-3 w-full [&>*]:mx-8"> <div class="grid grid-cols-3 w-full [&>*]:mx-8">
<div>
<div class="divider">Global</div>
<label class="label">
<span class="label-text">PayPal-Spendenlink</span>
<input type="text" class="input input-bordered" bind:value={settings.global.paypal_link} />
</label>
</div>
<div> <div>
<div class="divider">Anmeldung</div> <div class="divider">Anmeldung</div>
<label class="label cursor-pointer"> <label class="label cursor-pointer">

View File

@ -13,16 +13,18 @@ export const POST = (async ({ request, cookies }) => {
const settings: PageData['settings'] = await request.json(); const settings: PageData['settings'] = await request.json();
for (const [key, value] of Object.entries(settings.register)) { for (const [group, entries] of Object.entries(settings)) {
const setting = await Settings.findOne({ where: { key: `register.${key}` } }); for (const [key, value] of Object.entries(entries)) {
if (setting) { const setting = await Settings.findOne({ where: { key: `${group}.${key}` } });
setting.value = JSON.stringify(value); if (setting) {
await setting.save(); setting.value = JSON.stringify(value);
} else { await setting.save();
await Settings.create({ } else {
key: `register.${key}`, await Settings.create({
value: JSON.stringify(value) key: `${group}.${key}`,
}); value: JSON.stringify(value)
});
}
} }
} }

View File

@ -1,3 +1,3 @@
<div class="mx-4 my-6 sm:mx-3 sm:my-12"> <div class="mx-4 my-6 sm:mx-24 sm:my-12">
<slot /> <slot />
</div> </div>

View File

@ -0,0 +1,8 @@
import type { PageServerLoad } from './$types';
import { Settings } from '$lib/server/database';
export const load: PageServerLoad = async () => {
return {
paypal_link: (await Settings.findOne({ where: { key: 'global.paypal_link' } }))?.value ?? ''
};
};

View File

@ -1,16 +1,202 @@
<script lang="ts"> <script lang="ts">
let questions = [ import type { PageData } from './$types';
export let data: PageData;
let faq = [
{ {
title: '', section: 'Anmeldung',
content: '' questions: [
{
title: 'Wann startet CraftAttack 7?',
content: `<p>Der Start von CraftAttack 7 findet gemeinsam am 27.12.2024 um 14:00 Uhr statt. Am besten
bist du schon einige Minuten vorher auf dem Server. Natürlich kannst du aber auch danach
jederzeit dazustoßen.</p>`
},
{
title: 'Wer kann alles mitspielen?',
content: `<p>Jeder, der entweder Minecraft Java oder Bedrock (Handy und Konsole) besitzt und
mindestens 6 Jahre alt ist, kann mitspielen.</p>`
},
{
title: 'Wie kann ich mitspielen?',
content: `<p>Um mitzuspielen, musst du dich einfach hier auf der Website anmelden und der WhatsApp-
Gruppe beitreten.</p>`
},
{
title: 'Auf welcher Version läuft der Server?',
content: `<p>Gespielt wird immer auf der neuesten Version, also laut aktuellem Stand Version 1.21.3.</p>`
},
{
title: 'Kann ich auch als Bedrock-Spieler (Handy oder Konsole) mitspielen?',
content: `<p>Ja, auch als Bedrock-Spieler kannst du mitspielen, sofern du anderen Servern beitreten kannst.</p>`
},
{
title: 'Ich kann mich nicht anmelden, was kann ich tun?',
content: `<p>Wenn du dich nicht anmelden kannst, solltest du Folgendes überprüfen:</p>
<ol class="list-decimal pl-8 py-3">
<li>Ist dein Spielername korrekt geschrieben?</li>
<li>Hast du dich bereits angemeldet? Es ist nur ein Account pro Spieler erlaubt.</li>
<li>Hast du die richtige Spieledition ausgewählt?</li>
</ol>
<p>Falls du dich aus unerklärlichen Gründen trotzdem nicht anmelden kannst, kannst du
dich jederzeit beim Admin-Team melden.</p>`
},
{
title: 'Ich komme nicht auf den Server, was kann ich tun?',
content: `<p>Wenn du dem Server nicht beitreten kannst, überprüfe Folgendes:</p>
<ol class="list-decimal pl-8 py-3">
<li>Hast du die korrekte IP verwendet? Sie lautet craftattack.mhsl.eu.</li>
<li>Hast du Leerzeichen verwendet, insbesondere vor oder hinter der IP, oder dich vertippt?</li>
<li>Kommst du auf andere Server, oder ist es nur ein Problem beim CraftAttack-Server?</li>
<li>Hast du dich korrekt auf der Webseite angemeldet?</li>
</ol>
<p>Falls du trotzdem nicht beitreten kannst, melde dich beim Admin-Team und halte die
Fehlermeldung bereit.</p>`
},
{
title: 'Was ist die Server-IP?',
content: `<p>Die Serveradresse lautet: <span class="underline italic">craftattack.mhsl.eu</span></p>`
},
{
title: 'Ist es kostenlos mitzuspielen?',
content: `<p>Ja, die Teilnahme ist selbstverständlich kostenlos. Wir freuen uns aber, wenn du das Projekt
mit einer Spende nach der Anmeldung unterstützen würdest.<\br>
Hier kannst du für das Projekt spenden: <a class="link" href=${data.paypal_link}>${data.paypal_link}</a></p>`
},
{
title:
'Die Anmeldefrist ist vorbei, aber ich möchte mich trotzdem noch anmelden. Was kann ich tun?',
content: `Generell solltest du dich immer während des Anmeldezeitraums anmelden. Falls die
Anmeldung allerdings bereits geschlossen ist, kannst du einen Admin kontaktieren, der dich
im Fall der Fälle noch nachträglich anmelden kann.`
},
{
title: 'Ist ein 2. Account erlaubt?',
content: `<p>Nein, pro Teilnehmer ist nur ein Account zugelassen.</p>`
}
]
},
{
section: 'Anderes',
questions: [
{
title: 'Wie kann ich einen Admin kontaktieren?',
content: `<p>Einen Admin kannst du im Chat, über WhatsApp, per Teamspeak (<span class="underline italic">mhsl.eu</span>) oder Discord kontaktieren.</p>`
},
{
title: 'Wer ist eigentlich Organisator und warum?',
content: `<p>Wir sind ein kleines Team von Minecraft-Enthusiasten, das bereits im siebten Jahr in Folge
Minecraft CraftAttack organisiert. Jedes Jahr arbeiten wir daran, das Spielerlebnis zu
verbessern und die Teilnehmerzahl zu steigern. Weitere Infos findest du auf der Teamseite.</p>`
},
{
title: 'Wie lange bleibt der Server online?',
content: `<p>Der Server wird traditionell so lange online bleiben, wie noch aktiv darauf gespielt wird.</p>`
},
{
title: 'Warum benötigt ihr meine Daten bei der Anmeldung?',
content: `<p>Deine Daten werden nur intern gespeichert und dienen den Admins rein zur Organisation
des Projekts.</p>`
},
{
title: 'Gibt es einen Teamspeak-Server?',
content: `<p>Ja, den offiziellen Teamspeak-Server erreichst du unter der IP <span class="underline italic">mhsl.eu</span>.</p>`
},
{
title: 'Wozu dient die CraftAttack-WhatsApp-Gruppe?',
content: `<p>In der WhatsApp-Gruppe erhältst du alle wichtigen Infos bezüglich CraftAttack.</p>`
}
]
},
{
section: 'Ingame',
questions: [
{
title: 'Wo kann ich meinen Shop errichten?',
content: `<p>Generell darfst du Shops überall errichten, aber es bietet sich an, alle Shops in einem
Shopping-District nahe des Spawns anzusiedeln.</p>`
},
{
title: 'Sind Farmen erlaubt?',
content: `<p>Ja, Farmen sind generell erlaubt. Allerdings sind lag-erzeugende Maschinen, Farmen (Zero-
Tick-Farmen etc.) oder andere Bauten, die den Spielfluss stören könnten, verboten.</p>`
},
{
title: 'Was und wann sind Events?',
content: `<p>Abends, meist gegen 18 Uhr, finden gelegentlich Events statt, bei denen du Items gewinnen
kannst und in kleinen Minispielen gegen deine Mitspieler antrittst. Die genauen Abläufe
siehst du, wenn du abends auf dem Server bist.</p>`
},
{
title: 'Wo und wie kann ich einen Regelverstoß melden?',
content: `<p>Wenn du einen Regelverstoß melden willst, kannst du ingame den Befehl /report nutzen, um
einen Admin zu kontaktieren.</p>`
},
{
title: 'Was hat es mit dem Blutmond auf sich?',
content: `<p>Alle dreißig ingame-Tage solltest du nachts auf der Hut sein, denn die Monster sind in dieser
Nacht deutlich stärker als üblich, droppen aber auch besseren Loot.</p>`
},
{
title: 'Was hat es mit dem Vogelfrei-Modus auf sich?',
content: `CraftAttack ist grundsätzlich ein friedliches Projekt. Falls du jedoch kein Problem damit hast,
angegriffen zu werden, kannst du dich mit /vogelfrei in den Vogelfrei-Modus setzen.
Dadurch sehen andere Spieler, dass du für einen Kampf offen bist. Der Vogelfrei-Modus kann
allerdings erst nach einigen Stunden wieder beendet werden.`
},
{
title: 'Was hat es mit dem Rang „Langzeitspieler“ auf sich?',
content: `Spieler, die seit über drei Jahren am Projekt teilnehmen, erhalten den Langzeitrang. Dieser
wirkt sich allerdings nicht auf das Spielgeschehen aus.`
},
{
title: 'Was gibt es für neue coole Features?',
content: `<ul class="list-disc pl-8">
<li>Miniböcke, die du selbst gestalten kannst</li>
<li>Neue Event-Spiele</li>
<li>Einige Quality-of-Life-Features, die du mit <code>/settings</code> erreichst</li>
<li>Langzeitrang</li>
</ul>`
},
{
title: 'Wann wird das End geöffnet?',
content: `<p>Das End wird gemeinsam am <span class="underline">03.01.2025</span> um <span class="underline">19:00 Uhr</span> geöffnet, und wir besiegen
gemeinsam den Enderdrachen.</p>`
},
{
title: 'Darf ich andere Spieler töten?',
content: `<p>Andere Spieler zu töten ist generell verboten. Wenn es jedoch nur zum Spaß und mit dem
anderen Spieler abgesprochen ist, haben wir nichts dagegen einzuwenden. Außerdem ist es
erlaubt, vogelfreie Spieler zu töten.</p>`
},
{
title: 'Welche Minecraft-Clients sind erlaubt?',
content: `<p>Jegliche Clientmodifikationen, die deutliche Vorteile gegenüber anderen Spielern bringen,
sind nicht gestattet.</p>`
}
]
} }
]; ];
</script> </script>
{#each questions as question} <h1 class="text-3xl lg:text-5xl mb-16 text-center">FAQ</h1>
<div class="collapse collapse-plus bg-base-200"> <div class="flex flex-row gap-10">
<input type="radio" /> {#each faq as questions}
<div class="collapse-title text-xl font-medium">{question.title}</div> <div>
<div class="collapse-content">{@html question.content}</div> <h2 class="text-4xl text-center mb-3">{questions.section}</h2>
</div> <div>
{/each} {#each questions.questions as question}
<div class="collapse collapse-arrow">
<input type="checkbox" autocomplete="off" />
<div class="collapse-title">{question.title}</div>
<div class="collapse-content">
<div class="ml-2">{@html question.content}</div>
</div>
</div>
<span class="block w-full h-[1px] mx-auto mb-1 bg-gray-600" />
{/each}
</div>
</div>
{/each}
</div>

View File

@ -76,6 +76,3 @@
</div> </div>
{/each} {/each}
</div> </div>
<style>
</style>

BIN
static/img/menu-faq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B