This commit is contained in:
Hikyu 2026-07-10 09:10:28 +02:00
parent 4a3f0ceda3
commit 9c719b96b3
10 changed files with 103 additions and 61 deletions

View File

@ -1,6 +1,5 @@
# Fdb version 4
["pdflatex"] 1783431678.04028 "/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" "Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1783431679.12842 0
"/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex" 1783431677.99026 22127 9c02fde45b05485b4d6e44f2a7e8ba1e ""
["pdflatex"] 1783666653.26974 "Ringstats_Dokumentation.tex" "Ringstats_Dokumentation.pdf" "Ringstats_Dokumentation" 1783666654.50651 0
"/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc" 1775415801 2971 def0b6c1f0b107b3b936def894055589 ""
"/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc" 1775415801 2900 1537cc8184ad1792082cd229ecc269f4 ""
"/usr/share/texmf-dist/fonts/map/fontname/texfonts.map" 1775415801 3524 cb3e574dea2d1052e39280babc910dc8 ""
@ -169,9 +168,9 @@
"/usr/share/texmf-dist/web2c/texmf.cnf" 1775415801 43569 fd570f2fa160877d211e859f687312ba ""
"/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1780436122 5385779 47c0c393a77fd4a098bacfd57d66b88a ""
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1780436120 3734532 282dcc45f1c728134b92f993ed6db952 ""
"Ringstats_Dokumentation.aux" 1783431679.08329 11920 6f4c4930e4f31ec828a5b3aab7f8ac7d "pdflatex"
"Ringstats_Dokumentation.tex" 1783431677.99026 22127 9c02fde45b05485b4d6e44f2a7e8ba1e ""
"Ringstats_Dokumentation.toc" 1783431679.08529 2164 0e5aae9731a2850f18801d399dcfe537 "pdflatex"
"Ringstats_Dokumentation.aux" 1783666654.44961 11920 6f4c4930e4f31ec828a5b3aab7f8ac7d "pdflatex"
"Ringstats_Dokumentation.tex" 1783666631.03218 22117 56a2f20d88787d04029dcd5bfa3fef5f ""
"Ringstats_Dokumentation.toc" 1783666654.45261 2164 0e5aae9731a2850f18801d399dcfe537 "pdflatex"
"assets/er-modell.png" 1778764597.46144 805989 0b7323ca4b38e6518c24fd9e5684655b ""
(generated)
"Ringstats_Dokumentation.aux"

View File

@ -1,7 +1,7 @@
PWD /home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken
INPUT /usr/share/texmf-dist/web2c/texmf.cnf
INPUT /var/lib/texmf/web2c/pdftex/pdflatex.fmt
INPUT /home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentation.tex
INPUT Ringstats_Dokumentation.tex
OUTPUT Ringstats_Dokumentation.log
INPUT /usr/share/texmf-dist/tex/latex/koma-script/scrartcl.cls
INPUT /usr/share/texmf-dist/tex/latex/koma-script/scrartcl.cls

View File

@ -1,12 +1,9 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.6.2) 7 JUL 2026 15:41
This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026/Arch Linux) (preloaded format=pdflatex 2026.6.2) 10 JUL 2026 08:57
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
**"/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokument
ation.tex"
(/home/hikyu/Documents/Uni/2026 Sommer/Moderne Datenbanken/Ringstats_Dokumentat
ion.tex
**Ringstats_Dokumentation.tex
(./Ringstats_Dokumentation.tex
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
(/usr/share/texmf-dist/tex/latex/koma-script/scrartcl.cls
@ -751,13 +748,13 @@ L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
24519 strings out of 469462
478765 string characters out of 5468615
24518 strings out of 469462
478591 string characters out of 5468615
1015471 words of memory out of 5000000
52785 multiletter control sequences out of 15000+600000
641744 words of font info for 69 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191
108i,8n,108p,11313b,463s stack positions out of 10000i,1000n,20000p,200000b,200000s
108i,8n,108p,11253b,463s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texmf-dist/fonts/type1/public/cm-super/sfbx1095.pfb></usr/share/t
exmf-dist/fonts/type1/public/cm-super/sfbx1200.pfb></usr/share/texmf-dist/fonts
/type1/public/cm-super/sfrm1095.pfb></usr/share/texmf-dist/fonts/type1/public/c

Binary file not shown.

Binary file not shown.

View File

@ -147,7 +147,7 @@ Anhand dieses Systems bilden wir die Schlüssel wie folgt ab:
\hline
\textbf{Datentyp} & \textbf{Key-Struktur} & \textbf{Attribute} \\ \hline
\texttt{HMAP} & {item\_effect:\{id\}} & id, name, value \\
\texttt{HMAP} & {item\_type:\{id\}} & id, item\_id, name \\
\texttt{HMAP} & {item\_type:\{id\}} & id, name \\
\\
\texttt{HMAP} & {weapon:\{id\}} & id, item\_effect\_id, item\_type\_id, weight, damage \\
\texttt{HMAP} & {armor:\{id\}} & id, item\_effect\_id, item\_type\_id, weight, defense \\

View File

@ -52,17 +52,25 @@ let playerStamina = 100;
let playerLevel = 1;
let currentRegionId = 1;
const CHANCE_LEVEL_UP = 0.10;
const CHANCE_FAST_TRAVEL = 0.15;
const CHANCE_GEAR_SWAP = 0.10;
const CHANCE_TARGET_LOCK = 0.30;
log("Entering live sync loop (press Ctrl+C to exit)...", colors.gray);
while (true) {
try {
// Werte aktualisieren
playerHealth = Math.floor(Math.max(10, playerHealth - (Math.random() * 10) + 5));
playerStamina = Math.floor(Math.max(10, playerStamina - (Math.random() * 20) + 10));
if (Math.random() > 0.9) {
if (Math.random() < CHANCE_LEVEL_UP) {
playerLevel += 1;
}
if (Math.random() > 0.85) {
// Event: Schnellreise
if (Math.random() < CHANCE_FAST_TRAVEL) {
currentRegionId = Math.floor(Math.random() * 16) + 1;
const startTravel = performance.now();
@ -85,7 +93,8 @@ while (true) {
console.log();
}
if (Math.random() > 0.90) {
// Event: Gear-Swap
if (Math.random() < CHANCE_GEAR_SWAP) {
const newWeaponId = Math.floor(Math.random() * 10) + 1;
const newArmorId = Math.floor(Math.random() * 10) + 11;
const newTalismanId = Math.floor(Math.random() * 5) + 26;
@ -109,6 +118,7 @@ while (true) {
console.log();
}
// Aktuellen Stand sichern
const startSync = performance.now();
await setVal("player:1", {
id: 1,
@ -124,7 +134,8 @@ while (true) {
log(`[Live Sync] [ID: 1] Jonas - Lvl: ${playerLevel} | HP: ${playerHealth} | Stamina: ${playerStamina}`, colors.green);
log(`[Stats] Query Time: ${syncTime}ms | Reqs in Block: 1 | Total Reqs: ${totalRequests}`, colors.gray);
if (Math.random() > 0.7) {
// Event: Gegner-Lock
if (Math.random() < CHANCE_TARGET_LOCK) {
const startLock = performance.now();
const enemyIds = (await getVal(`region:${currentRegionId}:enemies`)) || [];
totalRequests += 1;
@ -149,5 +160,9 @@ while (true) {
}
}
} catch (error) {
log("Verbindungsabbruch zu ArangoDB!", colors.red);
}
await Bun.sleep(2000);
}

View File

@ -52,17 +52,25 @@ let playerStamina = 100;
let playerLevel = 1;
let currentRegionId = 1;
const CHANCE_LEVEL_UP = 0.10;
const CHANCE_FAST_TRAVEL = 0.15;
const CHANCE_GEAR_SWAP = 0.10;
const CHANCE_TARGET_LOCK = 0.30;
log("Entering live sync loop (press Ctrl+C to exit)...", colors.gray);
while (true) {
try {
// Werte aktualisieren
playerHealth = Math.floor(Math.max(10, playerHealth - (Math.random() * 10) + 5));
playerStamina = Math.floor(Math.max(10, playerStamina - (Math.random() * 20) + 10));
if (Math.random() > 0.9) {
if (Math.random() < CHANCE_LEVEL_UP) {
playerLevel += 1;
}
if (Math.random() > 0.85) {
// Event: Schnellreise
if (Math.random() < CHANCE_FAST_TRAVEL) {
currentRegionId = Math.floor(Math.random() * 16) + 1;
const startTravel = performance.now();
@ -85,7 +93,8 @@ while (true) {
console.log();
}
if (Math.random() > 0.90) {
// Event: Gear-Swap
if (Math.random() < CHANCE_GEAR_SWAP) {
const newWeaponId = Math.floor(Math.random() * 10) + 1;
const newArmorId = Math.floor(Math.random() * 10) + 11;
const newTalismanId = Math.floor(Math.random() * 5) + 26;
@ -109,6 +118,7 @@ while (true) {
console.log();
}
// Aktuellen Stand sichern
const startSync = performance.now();
await setJson("player:1", {
id: 1,
@ -124,7 +134,8 @@ while (true) {
log(`[Live Sync] [ID: 1] Jonas - Lvl: ${playerLevel} | HP: ${playerHealth} | Stamina: ${playerStamina}`, colors.green);
log(`[Stats] Query Time: ${syncTime}ms | Reqs in Block: 1 | Total Reqs: ${totalRequests}`, colors.gray);
if (Math.random() > 0.7) {
// Event: Gegner-Lock
if (Math.random() < CHANCE_TARGET_LOCK) {
const startLock = performance.now();
const enemyIds = (await getJson(`region:${currentRegionId}:enemies`)) || [];
totalRequests += 1;
@ -149,5 +160,9 @@ while (true) {
}
}
} catch (error) {
log("Verbindungsabbruch zu Memcached!", colors.red);
}
await Bun.sleep(2000);
}

View File

@ -43,17 +43,25 @@ let playerStamina = 100;
let playerLevel = 1;
let currentRegionId = 1;
const CHANCE_LEVEL_UP = 0.10;
const CHANCE_FAST_TRAVEL = 0.15;
const CHANCE_GEAR_SWAP = 0.10;
const CHANCE_TARGET_LOCK = 0.30;
log("Entering live sync loop (press Ctrl+C to exit)...", colors.gray);
while (true) {
try {
// 1. Lebens- und Ausdauerwerte simulieren
playerHealth = Math.floor(Math.max(10, playerHealth - (Math.random() * 10) + 5));
playerStamina = Math.floor(Math.max(10, playerStamina - (Math.random() * 20) + 10));
if (Math.random() > 0.9) {
if (Math.random() < CHANCE_LEVEL_UP) {
playerLevel += 1;
}
if (Math.random() > 0.85) {
// 2. Zufälliges Event: Schnellreise in eine andere Region
if (Math.random() < CHANCE_FAST_TRAVEL) {
currentRegionId = Math.floor(Math.random() * 16) + 1;
const startTravel = performance.now();
@ -76,7 +84,8 @@ while (true) {
console.log();
}
if (Math.random() > 0.90) { // 10% chance to swap gear
// 3. Zufälliges Event: Ausrüstung wechseln
if (Math.random() < CHANCE_GEAR_SWAP) {
const newWeaponId = Math.floor(Math.random() * 10) + 1; // 1 to 10
const newArmorId = Math.floor(Math.random() * 10) + 11; // 11 to 20
const newTalismanId = Math.floor(Math.random() * 5) + 26; // 26 to 30
@ -101,6 +110,7 @@ while (true) {
console.log();
}
// 4. Aktuelle Spielerdaten an Redis senden
const startSync = performance.now();
await redis.hset("player:1", {
id: 1,
@ -116,7 +126,8 @@ while (true) {
log(`[Live Sync] [ID: 1] Jonas - Lvl: ${playerLevel} | HP: ${playerHealth} | Stamina: ${playerStamina}`, colors.green);
log(`[Stats] Query Time: ${syncTime}ms | Reqs in Block: 1 | Total Reqs: ${totalRequests}`, colors.gray);
if (Math.random() > 0.7) {
// 5. Zufälliges Event: Gegner anvisieren
if (Math.random() < CHANCE_TARGET_LOCK) {
const startLock = performance.now();
const randomEnemyId = await redis.srandmember(`region:${currentRegionId}:enemies`);
totalRequests += 1;
@ -140,5 +151,10 @@ while (true) {
}
}
} catch (error) {
log("Datenbankfehler! Verbindung zu Redis unterbrochen.", colors.red);
console.error(error);
}
await Bun.sleep(2000);
}

View File

@ -1,5 +1,5 @@
/**
* KI GENERIERT
* Mock-Daten
*/
export const effects = [
@ -16,16 +16,16 @@ export const effects = [
];
export const types = [
{ id: 1, item_id: 101, name: "Dolch" },
{ id: 2, item_id: 102, name: "Gerades Schwert" },
{ id: 3, item_id: 103, name: "Großschwert" },
{ id: 4, item_id: 104, name: "Katana" },
{ id: 5, item_id: 105, name: "Helm" },
{ id: 6, item_id: 106, name: "Brustpanzer" },
{ id: 7, item_id: 107, name: "Stulpen" },
{ id: 8, item_id: 108, name: "Beinschutz" },
{ id: 9, item_id: 109, name: "Mittlerer Schild" },
{ id: 10, item_id: 110, name: "Talisman-Amulett" },
{ id: 1, name: "Dolch" },
{ id: 2, name: "Gerades Schwert" },
{ id: 3, name: "Großschwert" },
{ id: 4, name: "Katana" },
{ id: 5, name: "Helm" },
{ id: 6, name: "Brustpanzer" },
{ id: 7, name: "Stulpen" },
{ id: 8, name: "Beinschutz" },
{ id: 9, name: "Mittlerer Schild" },
{ id: 10, name: "Talisman-Amulett" },
];
export const weapons = [