29 Commits

Author SHA1 Message Date
341e629aaf Merge pull request 'Merge branch MicroRW' (#1) from MicroRW into master
All checks were successful
SteamWarCI Build successful
Reviewed-on: #1
2025-01-26 10:33:54 +01:00
694ded4c61 Update microwargear.md
All checks were successful
SteamWarCI Build successful
2025-01-26 10:32:11 +01:00
a75b5b7c09 Fix Branch Creation
All checks were successful
SteamWarCI Build successful
2025-01-26 10:24:20 +01:00
9146f65455 Fix Padding
All checks were successful
SteamWarCI Build successful
2025-01-21 14:57:05 +01:00
254807efa6 Rebuild
All checks were successful
SteamWarCI Build successful
2025-01-20 23:06:52 +01:00
36931aabb1 Fixes and Upgrade to Astro 5
Some checks failed
SteamWarCI Build failed
2025-01-20 23:04:34 +01:00
628599f019 Fix Login Page and add Jahresplan
All checks were successful
SteamWarCI Build successful
2025-01-20 19:21:21 +01:00
0a6c61bd88 Fix Upload
All checks were successful
SteamWarCI Build successful
2025-01-20 17:42:08 +01:00
8bbad8b3cc Fix CI
All checks were successful
SteamWarCI Build successful
2025-01-20 15:50:17 +01:00
5af6176889 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:49:59 +01:00
9250dd5088 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:49:36 +01:00
276e19409d Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:48:49 +01:00
11fa9fa126 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:46:46 +01:00
17ec6023a9 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:45:43 +01:00
3c7c899868 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:41:59 +01:00
9cb161e470 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:38:58 +01:00
7fc7c2a6eb Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:37:28 +01:00
2fce94d46b Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:35:21 +01:00
6356c9911a Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:34:38 +01:00
2402896fd5 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:33:12 +01:00
2940304492 Fix CI
Some checks failed
SteamWarCI Build failed
2025-01-20 15:32:20 +01:00
4c0a237b27 Merge remote-tracking branch 'origin/master'
Some checks failed
SteamWarCI Build failed
2025-01-20 15:26:55 +01:00
77b8b41afb Fix CodeMirror 2025-01-20 15:19:18 +01:00
163d049829 astro.config.mjs aktualisiert
Some checks failed
SteamWarCI Build failed
2025-01-20 15:06:44 +01:00
a321b12680 Merge remote-tracking branch 'origin/master'
Some checks failed
SteamWarCI Build failed
2025-01-20 15:05:42 +01:00
feba5a5b4a Fix CodeMirror 2025-01-20 15:05:33 +01:00
faaf5f1852 steamwarci.yml aktualisiert
Some checks failed
SteamWarCI Build failed
2025-01-20 15:03:34 +01:00
18997e1384 tailwind.config.cjs aktualisiert
Some checks failed
SteamWarCI Build failed
2025-01-20 15:02:11 +01:00
fdc7bb93dd Add some stuff 2025-01-19 17:58:26 +01:00
25 changed files with 721 additions and 631 deletions

View File

@ -5,7 +5,6 @@ import configureI18n from "./astro-i18n.adapter";
import sitemap from "@astrojs/sitemap"; import sitemap from "@astrojs/sitemap";
import robotsTxt from "astro-robots-txt"; import robotsTxt from "astro-robots-txt";
import {resolve} from "node:url";
import path from "node:path"; import path from "node:path";
import mdx from "@astrojs/mdx"; import mdx from "@astrojs/mdx";
import pagefind from "astro-pagefind"; import pagefind from "astro-pagefind";

View File

@ -14,11 +14,11 @@
"i18n:sync": "pnpm run i18n:generate:pages && pnpm run i18n:generate:types", "i18n:sync": "pnpm run i18n:generate:pages && pnpm run i18n:generate:types",
"clean:dist": "rm -rf dist", "clean:dist": "rm -rf dist",
"clean:node_modules": "rm -rf node_modules", "clean:node_modules": "rm -rf node_modules",
"ci": "pnpm run clean:dist && pnpm install && pnpm run i18n:sync && pnpm run build" "ci": "pnpm install && pnpm run i18n:sync && pnpm run build"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/svelte": "^6.0.2", "@astrojs/svelte": "^7.0.4",
"@astrojs/tailwind": "^5.1.2", "@astrojs/tailwind": "^5.1.5",
"@astropub/icons": "^0.2.0", "@astropub/icons": "^0.2.0",
"@types/color": "^4.2.0", "@types/color": "^4.2.0",
"@types/node": "^22.9.3", "@types/node": "^22.9.3",
@ -41,11 +41,12 @@
"typescript": "^5.7.2" "typescript": "^5.7.2"
}, },
"dependencies": { "dependencies": {
"@astrojs/mdx": "^3.1.9", "@astrojs/mdx": "^4.0.7",
"@astrojs/sitemap": "^3.2.1", "@astrojs/sitemap": "^3.2.1",
"@codemirror/commands": "^6.8.0",
"@codemirror/lang-json": "^6.0.1", "@codemirror/lang-json": "^6.0.1",
"@ddietr/codemirror-themes": "^1.4.4", "@ddietr/codemirror-themes": "^1.4.4",
"astro": "^4.16.14", "astro": "^5.1.8",
"astro-i18n": "^2.2.4", "astro-i18n": "^2.2.4",
"astro-pagefind": "^1.6.0", "astro-pagefind": "^1.6.0",
"astro-robots-txt": "^1.0.0", "astro-robots-txt": "^1.0.0",

1192
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -75,9 +75,7 @@
<style lang="postcss"> <style lang="postcss">
input { input {
@apply border-2 rounded-md p-2 shadow-2xl w-80 @apply border-2 rounded-md p-2 shadow-2xl w-80 dark:bg-neutral-800 focus:outline-none focus:ring-2 focus:ring-neutral-500 focus:border-transparent text-black;
dark:bg-neutral-800
focus:outline-none focus:ring-2 focus:ring-neutral-500 focus:border-transparent;
} }
label { label {

View File

@ -168,11 +168,11 @@
</div> </div>
<div> <div>
{#if selectedBranch !== "master"} {#if selectedBranch !== "master"}
<Button onclick={createFile} color="alternative" disabled={!selectedPath}>Create File <Button onclick={() => createFile()} color="alternative" disabled={!selectedPath}>Create File
</Button> </Button>
<Button onclick={() => deleteBranch(false)} color="none">Delete Branch</Button> <Button onclick={() => deleteBranch(false)} color="none">Delete Branch</Button>
{:else} {:else}
<Button onclick={createBranch}>Create Branch</Button> <Button onclick={() => createBranch()}>Create Branch</Button>
{/if} {/if}
</div> </div>
</div> </div>

View File

@ -31,7 +31,7 @@
let request = getRequest(); let request = getRequest();
function getRequest() { function getRequest() {
return $statsRepo.getUserStats(user.id) return $statsRepo.getUserStats(user.uuid)
} }
</script> </script>
@ -46,5 +46,4 @@
{#if user.perms.includes("CHECK")} {#if user.perms.includes("CHECK")}
<p>{t("dashboard.stats.checked", {checked: data.acceptedSchematics})}</p> <p>{t("dashboard.stats.checked", {checked: data.acceptedSchematics})}</p>
{/if} {/if}
{:catch error}
{/await} {/await}

View File

@ -50,19 +50,20 @@
// @ts-ignore // @ts-ignore
let b64 = btoa(String.fromCharCode.apply(null, new Uint8Array(content))); let b64 = btoa(String.fromCharCode.apply(null, new Uint8Array(content)));
await $schemRepo.uploadSchematic(name, b64); let response = await $schemRepo.uploadSchematic(name, b64);
open = false; open = false;
uploadFile = null; value = "";
dispatch("reset") dispatch("reset")
} }
let uploadFile: FileList | null = $state(null); let uploadFile: FileList | null = $state(null);
let value = $state("");
</script> </script>
<SWModal title={t("dashboard.schematic.title")} bind:open> <SWModal title={t("dashboard.schematic.title")} bind:open>
<form> <form>
<input type="file" bind:files={uploadFile} /> <input type="file" bind:files={uploadFile} bind:value />
</form> </form>
{#snippet footer()} {#snippet footer()}

View File

@ -56,7 +56,7 @@
</div> </div>
<div> <div>
<h1 class="text-4xl font-bold">{t("dashboard.title", {name: user.name})}</h1> <h1 class="text-4xl font-bold">{t("dashboard.title", {name: user.name})}</h1>
<p>{t("dashboard.rank", {rank: t("home.prefix." + user.prefix)})}</p> <p>{t("dashboard.rank", {rank: t("home.prefix." + (user.prefix || "User"))})}</p>
<Statistics {user} /> <Statistics {user} />
</div> </div>
</div> </div>

View File

@ -22,7 +22,7 @@
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js"; import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
import { OrbitControls } from "three/addons/controls/OrbitControls.js"; import { OrbitControls } from "three/addons/controls/OrbitControls.js";
import {onDestroy, onMount} from "svelte"; import {onDestroy, onMount} from "svelte";
import { CollectionEntry } from "astro:content"; import type { CollectionEntry } from "astro:content";
interface Props { interface Props {
pub: CollectionEntry<"publics">; pub: CollectionEntry<"publics">;

View File

@ -20,6 +20,7 @@
import {fetchWithToken, tokenStore} from "./repo.ts"; import {fetchWithToken, tokenStore} from "./repo.ts";
import {type Schematic, SchematicSchema} from "@type/schem.ts"; import {type Schematic, SchematicSchema} from "@type/schem.ts";
import {derived} from "svelte/store"; import {derived} from "svelte/store";
import {ResponseErrorSchema} from "@type/data.ts";
export class SchematicRepo { export class SchematicRepo {
constructor(private token: string) { constructor(private token: string) {
@ -40,7 +41,7 @@ export class SchematicRepo {
name, name,
content, content,
}), }),
}); }).then(value => value.json()).then(SchematicSchema.or(ResponseErrorSchema).parse);
} }
} }

View File

@ -50,3 +50,10 @@ export const ServerSchema = z.object({
}); });
export type Server = z.infer<typeof ServerSchema>; export type Server = z.infer<typeof ServerSchema>;
export const ResponseErrorSchema = z.object({
error: z.string(),
code: z.string(),
});
export type ResponseError = z.infer<typeof ResponseErrorSchema>;

View File

@ -0,0 +1,22 @@
---
title: Eventplan 2025
key: eventplan-2025
description: Der Eventplan für das Jahr 2025.
created: 2025-01-20
tags:
- event
image: ../../../images/jAHRESPLAN-gro-5.png
---
2025 wird ein Jahr voller spannender Events. Hier findet ihr eine Übersicht über die geplanten Events.
Highlights sind:
- **WargearSeason 2025**
- **SteamWar Arcade**
- **WarGear mit SFA**
- **MiniWarGear Liga**
- **SpaceShip**
aber auch viele mehr.
Es wird auch kleinere Events geben, die nicht angekündigt sind.

View File

@ -2,8 +2,9 @@
"name": "AdvancedScripts", "name": "AdvancedScripts",
"description": "Ein Fabric-Mod, der für den BauServer von SteamWar Hotkeys für das ScriptSystem hinzufügt. Hierzu werden die einzelnen Zeichen an den Server gesendet und vom Server verarbeitet.", "description": "Ein Fabric-Mod, der für den BauServer von SteamWar Hotkeys für das ScriptSystem hinzufügt. Hierzu werden die einzelnen Zeichen an den Server gesendet und vom Server verarbeitet.",
"url": { "url": {
"1.20.1": "https://steamwar.de/AdvancedScriptsV3", "1.21.4": "https://git.steamwar.de/SteamWar/AdvancedScripts/releases/download/2.2.0/AdvancedScripts-2.2.0.jar",
"1.19": "https://steamwar.de/AdvancedScripts" "1.20.6": "https://git.steamwar.de/SteamWar/AdvancedScripts/releases/download/2.1.0/AdvancedScripts-2.1.0.jar",
"1.19.3": "https://git.steamwar.de/SteamWar/AdvancedScripts/releases/download/2.0.0/AdvancedScripts-2.0.0.jar"
}, },
"sourceUrl": "https://steamwar.de/devlabs/SteamWar/AdvancedScripts" "sourceUrl": "https://git.steamwar.de/SteamWar/AdvancedScripts"
} }

View File

@ -1,6 +0,0 @@
{
"name": "FabricModSender",
"description": "Ein Fabric-Mod, der SteamWar beim Serverjoin die von dir installierten Mods sendet und es uns damit ermöglicht, sie auf schädliche Mods zu überprüfen. Eine Installation dieses Mods ermöglicht dir das Joinen von Arenen mit Fabric auf SteamWar.",
"url": "https://steamwar.de/FabricModSender",
"sourceUrl": "https://steamwar.de/devlabs/SteamWar/FabricModSender"
}

View File

@ -2,8 +2,7 @@
"name": "SteamWarTeamserver", "name": "SteamWarTeamserver",
"description": "Dieses Plugin ermöglicht die einfache Einbindung deines Servers in SteamWar. Wie du deinen (Team-)Server über SteamWar erreichbar machen kannst findest du hier.", "description": "Dieses Plugin ermöglicht die einfache Einbindung deines Servers in SteamWar. Wie du deinen (Team-)Server über SteamWar erreichbar machen kannst findest du hier.",
"url": { "url": {
"Info": "/teamserverintegration", "Info": "/teamserverintegration"
"Download": "https://steamwar.de/SteamWarTeamserver"
}, },
"sourceUrl": "https://steamwar.de/devlabs/SteamWar/SteamWarBungeeTeamserver" "sourceUrl": "https://git.steamwar.de/SteamWar/SteamWarBungeeTeamserver"
} }

View File

@ -26,6 +26,7 @@ Schuss zu verhindern.
## Kanonen ## Kanonen
Jedes MicroWargear muss über mindestens eine funktionstüchtige Kanone verfügen.
Eine Kanone ist eine durchgehende Redstonekonstruktion, welche in der Lage ist, Eine Kanone ist eine durchgehende Redstonekonstruktion, welche in der Lage ist,
den Gegner durch gezündetes TNT zu beschädigen. Eine TNT-Kanone ist der einzige Ort in einem Micro an dem Wasser verbaut werden darf, wenn es die Kanone nicht verlässt und /oder im intakten Zustand Wasserschilde bildet. Außerdem darf sich die Kanone nicht gezielt selbst beschädigen. Eine TNT-Kanone darf maximal 8 Projektile pro Schuss abfeuern. den Gegner durch gezündetes TNT zu beschädigen. Eine TNT-Kanone ist der einzige Ort in einem Micro an dem Wasser verbaut werden darf, wenn es die Kanone nicht verlässt und /oder im intakten Zustand Wasserschilde bildet. Außerdem darf sich die Kanone nicht gezielt selbst beschädigen. Eine TNT-Kanone darf maximal 8 Projektile pro Schuss abfeuern.
Zusätzlich ist eine Hauptkanone mit 12 Projektilen erlaubt. Zusätzlich ist eine Hauptkanone mit 12 Projektilen erlaubt.

View File

@ -41,7 +41,9 @@
"Dev": "Developer", "Dev": "Developer",
"Mod": "Moderator", "Mod": "Moderator",
"Sup": "Supporter", "Sup": "Supporter",
"Arch": "Architekt" "Arch": "Architekt",
"User": "Spieler",
"YT": "YouTuber"
} }
}, },
"status": { "status": {
@ -240,5 +242,9 @@
}, },
"ranking": { "ranking": {
"heading": "{# mode #} Rangliste" "heading": "{# mode #} Rangliste"
},
"404": {
"title": "404 - Seite nicht gefunden",
"description": "Seite nicht gefunden"
} }
} }

View File

@ -62,7 +62,9 @@
"Dev": "Developer", "Dev": "Developer",
"Mod": "Moderator", "Mod": "Moderator",
"Sup": "Supporter", "Sup": "Supporter",
"Arch": "Builder" "Arch": "Builder",
"User": "User",
"YT": "YouTuber"
} }
}, },
"footer": { "footer": {
@ -180,5 +182,9 @@
}, },
"stats": { "stats": {
"title": "Fight Statistics" "title": "Fight Statistics"
},
"404": {
"title": "404 - Page not found",
"description": "Page not found"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -3,9 +3,8 @@ import icon from "../images/logo.png";
import {getImage} from "astro:assets"; import {getImage} from "astro:assets";
import {astroI18n} from "astro-i18n"; import {astroI18n} from "astro-i18n";
import {SEO} from "astro-seo"; import {SEO} from "astro-seo";
import {ViewTransitions} from "astro:transitions"; import {ClientRouter} from "astro:transitions";
const {title, description, clientSideRouter = true} = Astro.props.frontmatter || Astro.props; const {title, description, clientSideRouter = true} = Astro.props.frontmatter || Astro.props;
import "../../public/fonts/roboto/roboto.css"; import "../../public/fonts/roboto/roboto.css";
const iconImage = await getImage({src: icon, height: 32, width: 32, format: "png", quality: 100}); const iconImage = await getImage({src: icon, height: 32, width: 32, format: "png", quality: 100});
@ -40,7 +39,7 @@ if (localStorage["theme-mode"] === "light" || (!("theme-mode" in localStorage) &
<slot name="head"/> <slot name="head"/>
{clientSideRouter && <ViewTransitions/>} {clientSideRouter && <ClientRouter/>}
</head> </head>
<body class="dark:bg-zinc-800"> <body class="dark:bg-zinc-800">
<slot/> <slot/>

View File

@ -10,7 +10,7 @@ const {title, description} = Astro.props;
<div class="h-screen w-screen fixed -z-10"> <div class="h-screen w-screen fixed -z-10">
<BackgroundImage /> <BackgroundImage />
</div> </div>
<div class="mx-auto bg-gray-100 p-8 rounded-b-md shadow-md pt-40 sm:pt-28 md:pt-14 relative <div class="mx-auto bg-gray-100 p-8 rounded-b-md shadow-md pt-14 relative
dark:text-white dark:bg-neutral-900" style="width: min(100%, 75em);"> dark:text-white dark:bg-neutral-900" style="width: min(100%, 75em);">
<slot/> <slot/>
</div> </div>

39
src/pages/not-found.astro Normal file
View File

@ -0,0 +1,39 @@
---
import PageLayout from "../layouts/PageLayout.astro";
import {t} from "astro-i18n";
---
<PageLayout title={t("404.title")}>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400">
<!-- 404 Text - heller für besseren Kontrast -->
<text x="400" y="150" font-family="Arial Black" font-size="120" fill="#ffffff" text-anchor="middle">404</text>
<!-- Trauriger Roboter - hellere Farben für besseren Kontrast -->
<!-- Körper -->
<rect x="350" y="200" width="100" height="120" rx="10" fill="#888888"/>
<!-- Kopf -->
<rect x="365" y="160" width="70" height="60" rx="5" fill="#888888"/>
<!-- Augen -->
<circle cx="385" cy="185" r="8" fill="#ff6b6b"/>
<circle cx="415" cy="185" r="8" fill="#ff6b6b"/>
<!-- Antenne -->
<line x1="400" y1="160" x2="400" y2="140" stroke="#888888" stroke-width="4"/>
<circle cx="400" cy="135" r="5" fill="#888888"/>
<!-- Arme -->
<rect x="320" y="220" width="30" height="10" rx="5" fill="#888888"/>
<rect x="450" y="220" width="30" height="10" rx="5" fill="#888888"/>
<!-- Text unter dem Roboter - heller für besseren Kontrast -->
<text x="400" y="360" font-family="Arial" font-size="24" fill="#ffffff" text-anchor="middle">{t("404.description")}</text>
<!-- Dekorative Elemente - heller für besseren Kontrast -->
<circle cx="250" cy="100" r="5" fill="#bbbbbb"/>
<circle cx="550" cy="150" r="5" fill="#bbbbbb"/>
<circle cx="200" cy="300" r="5" fill="#bbbbbb"/>
<circle cx="600" cy="250" r="5" fill="#bbbbbb"/>
</svg>
</PageLayout>

View File

@ -1,7 +1,11 @@
build: build:
- "echo 'PUBLIC_API_SERVER=https://dev.steamwar.de/api' > .env" - "printenv"
- "pnpm run ci" - "echo 'PUBLIC_API_SERVER=https://api.steamwar.de' > .env"
- "pnpm install"
- "./node_modules/.bin/astro-i18n generate:pages --purge"
- "./node_modules/.bin/astro-i18n generate:types"
- "./node_modules/.bin/astro build"
release: release:
- "rm -r /var/www/dev/*" - "rm -r /var/www/html/*"
- "mv dist/* /var/www/dev" - "mv dist/* /var/www/html"

View File

@ -9,7 +9,6 @@ module.exports = {
theme: { theme: {
extend: { extend: {
colors: { colors: {
// flowbite-svelte
primary: { 50: '#FFF5F2', 100: '#FFF1EE', 200: '#FFE4DE', 300: '#FFD5CC', 400: '#FFBCAD', 500: '#FE795D', 600: '#EF562F', 700: '#EB4F27', 800: '#CC4522', 900: '#A5371B'}, primary: { 50: '#FFF5F2', 100: '#FFF1EE', 200: '#FFE4DE', 300: '#FFD5CC', 400: '#FFBCAD', 500: '#FE795D', 600: '#EF562F', 700: '#EB4F27', 800: '#CC4522', 900: '#A5371B'},
} }
}, },