<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[decodesoft.pl - Wszystkie działy]]></title>
		<link>https://decodesoft.pl/forum/</link>
		<description><![CDATA[decodesoft.pl - https://decodesoft.pl/forum]]></description>
		<pubDate>Tue, 28 Jul 2026 07:30:26 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[client download]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=81</link>
			<pubDate>Mon, 13 Oct 2025 20:11:07 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=81</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size">GreenVale - MMO Game</span></span><br />
<img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" loading="lazy"  alt="[Obrazek: license-GPL--3.0-blue.svg]" class="mycode_img" /><img src="https://img.shields.io/badge/Kotlin-1.9+-purple.svg" loading="lazy"  alt="[Obrazek: Kotlin-1.9+-purple.svg]" class="mycode_img" /><img src="https://img.shields.io/badge/LibGDX-Game-orange.svg" loading="lazy"  alt="[Obrazek: LibGDX-Game-orange.svg]" class="mycode_img" /><br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Wieloosobowa gra RPG napisana w Kotlinie</span></span><br />
<span style="font-size: small;" class="mycode_size">LibGDX + Ktor WebSocket</span><br />
<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">✨ Zaimplementowane Funkcjonalności</span></span><br />
<br />
<span style="color: #00cc00;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: 1pt;" class="mycode_size">?</span><span style="font-size: large;" class="mycode_size"> Podstawowa Rozgrywka</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">System klas postaci:</span> Łucznik, Mag, Wojownik<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System poziomów i XP</span> z wizualnym paskiem segmentowym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pathfinding</span> z wizualizacją ścieżki<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Płynna kamera</span> śledząca gracza z interpolacją<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System respawnu</span> po śmierci postaci<br />
</li>
</ul>
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">⚔️ System Walki</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Combat w czasie rzeczywistym</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Różne zasięgi ataku dla każdej klasy:</span><br />
  • Łucznik: 295px (dystans)<br />
  • Mag: 245px (średni zasięg)<br />
  • Wojownik: 40px (walka wręcz)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System cooldownów</span> z wizualizacją paska<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Damage numbers</span> z animacją unoszenia i zanikania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Animacje ataków</span> (łuk, czary, miecz)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System celowania:</span> Gracze, moby, NPC<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Health bary</span> z podziałem na segmenty dla wszystkich jednostek<br />
</li>
</ul>
<br />
<span style="color: #0088ff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Graczy</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Logowanie i rejestracja</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Multi-character support</span> (wiele slotów postaci)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Synchronizacja pozycji graczy</span> w czasie rzeczywistym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System frakcji:</span> <span style="color: #00ff00;" class="mycode_color">Wataha</span> vs <span style="color: #ff0000;" class="mycode_color">Zakon</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System ras:</span> Człowiek, Elf, Goblin, Nieumarły<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PvP system</span> oparty na frakcjach<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kolorowe oznaczenia:</span> <span style="color: #00ff00;" class="mycode_color">zielony = sojusznik</span>, <span style="color: #ff0000;" class="mycode_color">czerwony = wróg</span><br />
</li>
</ul>
<br />
<span style="color: #8b4513;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Przeciwnicy (AI)</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Różne typy mobów:</span> Owca, Wilk, Niedźwiedź, Pająk<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Zaawansowane AI</span> z stanami: IDLE, PATROL, CHASE, ATTACK<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System agro</span> z inteligentnym śledzeniem gracza<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Animowane skórki</span> z różnymi stanami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drop itemów</span> po śmierci<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Automatyczny respawn</span> z timingiem<br />
</li>
</ul>
<br />
<span style="color: #ffaa00;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System NPC</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Interactive NPCs</span> z różnymi typami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System frakcji</span> dla NPC<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Typy NPC:</span> Kupiec, Quest Giver, Guard<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Gotowy do rozbudowy</span> o dialogi i questy<br />
</li>
</ul>
<br />
<span style="color: #aa00ff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Itemów</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Pełny system ekwipunku:</span><br />
  • Plecak (inventory)<br />
  • Ekwipunek postaci (helmet, chest, legs, boots, gloves, weapon, shield)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drag &amp; drop</span> itemów między slotami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Item tooltips</span> z pełnymi statystykami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Dropped items</span> na mapie z autolootem<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ikony itemów</span> z teksturami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System walut:</span> <span style="color: #ffd700;" class="mycode_color">Złoto</span>, <span style="color: #c0c0c0;" class="mycode_color">Srebro</span>, <span style="color: #cd7f32;" class="mycode_color">Miedź</span><br />
</li>
</ul>
<br />
<span style="color: #00ffff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Komunikacji</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Chat globalny</span> z kolorowym formatowaniem<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Combat log</span> (osobna zakładka)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Przełączanie</span> między Chat/Log<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System wiadomości</span> na środku ekranu z animacją<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pełne wsparcie</span> dla polskich znaków (ą, ć, ę, ł, ń, ó, ś, ź, ż)<br />
</li>
</ul>
<br />
<span style="color: #228b22;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Mapy</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">5 różnych lokacji:</span><br />
  • GreenShire (startowa)<br />
  • Forest (las)<br />
  • Desert (pustynia)<br />
  • Mountains (góry)<br />
  • Swamp (bagno)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kafelkowy system map</span> (tilemap)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Warstwy:</span> podłoże, obiekty, kolizje<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Culling</span> - optymalizacja renderowania<br />
</li>
</ul>
<br />
<span style="color: #ff1493;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Interfejs Użytkownika</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Player unit frame</span> (HP, Mana, Nick, Level)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Target frame</span> (dla graczy, mobów, NPC)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">XP bar</span> z segmentami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Skill cooldown bar</span> z kolorami dla różnych ataków<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Character window</span> (statystyki, ekwipunek postaci)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Inventory panel</span> (40 slotów)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Chat window</span> z przełączaniem Chat/Log<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">FPS counter</span> (przełączalny klawiszem)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Item tooltips</span> z hover effect<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Menu ESC</span> (wyjście, ustawienia)<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Technologie</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Client:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Kotlin</span> - język programowania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">LibGDX</span> - framework do gier 2D/3D<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Coroutines</span> - programowanie asynchroniczne<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">FreeType</span> - renderowanie fontów<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Server:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Ktor</span> - framework webowy<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">WebSocket</span> - komunikacja w czasie rzeczywistym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Coroutines</span> - wielowątkowość<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tools:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Gradle</span> - system budowania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Git</span> - kontrola wersji<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Architektura</span></span><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Client-Server Model:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">WebSocket</span> - komunikacja dwukierunkowa<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Message handlers</span> - modularna obsługa wiadomości<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">State machine</span> - zarządzanie stanami gry (Login, Playing, Dead, Loading)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Entity-Component</span> - organizacja obiektów gry<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Systemy Zaawansowane:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Client-Server architecture</span> z autoryzacją ruchu<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Movement throttling</span> (zapobieganie spamowi)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Distance-based updates</span> (optymalizacja)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Error handling</span> i logging<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Resource management</span> (dispose pattern)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Shader support</span> (GL20)<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instalacja i Uruchomienie</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Wymagania:</span></span><ul class="mycode_list"><li>Java 17 lub nowsza<br />
</li>
<li>Gradle 8.0+<br />
</li>
<li>Min. 2GB RAM<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uruchomienie Serwera:</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd server-mmo<br />
./gradlew run</code></div></div>Serwer uruchomi się na <span style="font-weight: bold;" class="mycode_b">localhost:8081</span><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uruchomienie Klienta:</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd client-mmo<br />
./gradlew run</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Lub uruchom skompilowany JAR:</span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>java -jar greenvale.jar</code></div></div><br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Jak Grać</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Uruchom serwer i klienta</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Zarejestruj konto</span> (login + hasło)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Stwórz postać:</span><br />
  • Wybierz klasę (Łucznik/Mag/Wojownik)<br />
  • Wybierz rasę (Człowiek/Elf/Goblin/Nieumarły)<br />
  • Wybierz frakcję (Wataha/Zakon/Brak)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Rozpocznij grę:</span><br />
  • <span style="font-weight: bold;" class="mycode_b">Prawy przycisk myszy</span> - ruch/atak<br />
  • <span style="font-weight: bold;" class="mycode_b">C</span> - okno postaci<br />
  • <span style="font-weight: bold;" class="mycode_b">I</span> - inwentarz<br />
  • <span style="font-weight: bold;" class="mycode_b">Enter</span> - czat<br />
  • <span style="font-weight: bold;" class="mycode_b">ESC</span> - menu<br />
</li>
</ol>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Roadmap - W planach</span></span><br />
<ul class="mycode_list"><li>☐ System questów<br />
</li>
<li>☐ Crafting<br />
</li>
<li>☐ Trading między graczami<br />
</li>
<li>☐ Guildie<br />
</li>
<li>☐ PvP areny<br />
</li>
<li>☐ Dungeons<br />
</li>
<li>☐ Boss fights<br />
</li>
<li>☐ Pet system<br />
</li>
<li>☐ Mount system<br />
</li>
<li>☐ Achievement system<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Download &amp; GitHub</span></span><br />
<a href="https://github.com/Platefobrain/Simple-MMO-Game-greenvale" target="_blank" rel="noopener" class="mycode_url"><img src="https://img.shields.io/badge/GitHub-Repository-181717?style=for-the-badge&amp;logo=github" loading="lazy"  alt="[Obrazek: GitHub-Repository-181717?style=for-the-b...ogo=github]" class="mycode_img" /></a><br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Projekt dostępny na licencji:</span> <span style="color: #0066cc;" class="mycode_color">GNU General Public License v3.0</span></span><br />
<span style="font-size: x-small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Autor:</span> <a href="https://github.com/Platefobrain" target="_blank" rel="noopener" class="mycode_url">Platefobrain</a></span><br />
<span style="font-size: x-small;" class="mycode_size">⭐ <span style="font-weight: bold;" class="mycode_b">Jeśli podoba Ci się projekt, zostaw gwiazdkę na GitHubie!</span> ⭐</span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size">GreenVale - MMO Game</span></span><br />
<img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" loading="lazy"  alt="[Obrazek: license-GPL--3.0-blue.svg]" class="mycode_img" /><img src="https://img.shields.io/badge/Kotlin-1.9+-purple.svg" loading="lazy"  alt="[Obrazek: Kotlin-1.9+-purple.svg]" class="mycode_img" /><img src="https://img.shields.io/badge/LibGDX-Game-orange.svg" loading="lazy"  alt="[Obrazek: LibGDX-Game-orange.svg]" class="mycode_img" /><br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Wieloosobowa gra RPG napisana w Kotlinie</span></span><br />
<span style="font-size: small;" class="mycode_size">LibGDX + Ktor WebSocket</span><br />
<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">✨ Zaimplementowane Funkcjonalności</span></span><br />
<br />
<span style="color: #00cc00;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: 1pt;" class="mycode_size">?</span><span style="font-size: large;" class="mycode_size"> Podstawowa Rozgrywka</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">System klas postaci:</span> Łucznik, Mag, Wojownik<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System poziomów i XP</span> z wizualnym paskiem segmentowym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pathfinding</span> z wizualizacją ścieżki<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Płynna kamera</span> śledząca gracza z interpolacją<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System respawnu</span> po śmierci postaci<br />
</li>
</ul>
<br />
<span style="color: #ff0000;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">⚔️ System Walki</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Combat w czasie rzeczywistym</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Różne zasięgi ataku dla każdej klasy:</span><br />
  • Łucznik: 295px (dystans)<br />
  • Mag: 245px (średni zasięg)<br />
  • Wojownik: 40px (walka wręcz)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System cooldownów</span> z wizualizacją paska<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Damage numbers</span> z animacją unoszenia i zanikania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Animacje ataków</span> (łuk, czary, miecz)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System celowania:</span> Gracze, moby, NPC<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Health bary</span> z podziałem na segmenty dla wszystkich jednostek<br />
</li>
</ul>
<br />
<span style="color: #0088ff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Graczy</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Logowanie i rejestracja</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Multi-character support</span> (wiele slotów postaci)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Synchronizacja pozycji graczy</span> w czasie rzeczywistym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System frakcji:</span> <span style="color: #00ff00;" class="mycode_color">Wataha</span> vs <span style="color: #ff0000;" class="mycode_color">Zakon</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System ras:</span> Człowiek, Elf, Goblin, Nieumarły<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PvP system</span> oparty na frakcjach<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kolorowe oznaczenia:</span> <span style="color: #00ff00;" class="mycode_color">zielony = sojusznik</span>, <span style="color: #ff0000;" class="mycode_color">czerwony = wróg</span><br />
</li>
</ul>
<br />
<span style="color: #8b4513;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Przeciwnicy (AI)</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Różne typy mobów:</span> Owca, Wilk, Niedźwiedź, Pająk<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Zaawansowane AI</span> z stanami: IDLE, PATROL, CHASE, ATTACK<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System agro</span> z inteligentnym śledzeniem gracza<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Animowane skórki</span> z różnymi stanami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drop itemów</span> po śmierci<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Automatyczny respawn</span> z timingiem<br />
</li>
</ul>
<br />
<span style="color: #ffaa00;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System NPC</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Interactive NPCs</span> z różnymi typami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System frakcji</span> dla NPC<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Typy NPC:</span> Kupiec, Quest Giver, Guard<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Gotowy do rozbudowy</span> o dialogi i questy<br />
</li>
</ul>
<br />
<span style="color: #aa00ff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Itemów</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Pełny system ekwipunku:</span><br />
  • Plecak (inventory)<br />
  • Ekwipunek postaci (helmet, chest, legs, boots, gloves, weapon, shield)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drag &amp; drop</span> itemów między slotami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Item tooltips</span> z pełnymi statystykami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Dropped items</span> na mapie z autolootem<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ikony itemów</span> z teksturami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System walut:</span> <span style="color: #ffd700;" class="mycode_color">Złoto</span>, <span style="color: #c0c0c0;" class="mycode_color">Srebro</span>, <span style="color: #cd7f32;" class="mycode_color">Miedź</span><br />
</li>
</ul>
<br />
<span style="color: #00ffff;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Komunikacji</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Chat globalny</span> z kolorowym formatowaniem<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Combat log</span> (osobna zakładka)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Przełączanie</span> między Chat/Log<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">System wiadomości</span> na środku ekranu z animacją<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pełne wsparcie</span> dla polskich znaków (ą, ć, ę, ł, ń, ó, ś, ź, ż)<br />
</li>
</ul>
<br />
<span style="color: #228b22;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">System Mapy</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">5 różnych lokacji:</span><br />
  • GreenShire (startowa)<br />
  • Forest (las)<br />
  • Desert (pustynia)<br />
  • Mountains (góry)<br />
  • Swamp (bagno)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kafelkowy system map</span> (tilemap)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Warstwy:</span> podłoże, obiekty, kolizje<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Culling</span> - optymalizacja renderowania<br />
</li>
</ul>
<br />
<span style="color: #ff1493;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Interfejs Użytkownika</span></span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Player unit frame</span> (HP, Mana, Nick, Level)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Target frame</span> (dla graczy, mobów, NPC)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">XP bar</span> z segmentami<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Skill cooldown bar</span> z kolorami dla różnych ataków<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Character window</span> (statystyki, ekwipunek postaci)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Inventory panel</span> (40 slotów)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Chat window</span> z przełączaniem Chat/Log<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">FPS counter</span> (przełączalny klawiszem)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Item tooltips</span> z hover effect<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Menu ESC</span> (wyjście, ustawienia)<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Technologie</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Client:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Kotlin</span> - język programowania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">LibGDX</span> - framework do gier 2D/3D<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Coroutines</span> - programowanie asynchroniczne<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">FreeType</span> - renderowanie fontów<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Server:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Ktor</span> - framework webowy<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">WebSocket</span> - komunikacja w czasie rzeczywistym<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Coroutines</span> - wielowątkowość<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Tools:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Gradle</span> - system budowania<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Git</span> - kontrola wersji<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Architektura</span></span><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Client-Server Model:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">WebSocket</span> - komunikacja dwukierunkowa<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Message handlers</span> - modularna obsługa wiadomości<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">State machine</span> - zarządzanie stanami gry (Login, Playing, Dead, Loading)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Entity-Component</span> - organizacja obiektów gry<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Systemy Zaawansowane:</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Client-Server architecture</span> z autoryzacją ruchu<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Movement throttling</span> (zapobieganie spamowi)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Distance-based updates</span> (optymalizacja)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Error handling</span> i logging<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Resource management</span> (dispose pattern)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Shader support</span> (GL20)<br />
</li>
</ul>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instalacja i Uruchomienie</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Wymagania:</span></span><ul class="mycode_list"><li>Java 17 lub nowsza<br />
</li>
<li>Gradle 8.0+<br />
</li>
<li>Min. 2GB RAM<br />
</li>
</ul>
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uruchomienie Serwera:</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd server-mmo<br />
./gradlew run</code></div></div>Serwer uruchomi się na <span style="font-weight: bold;" class="mycode_b">localhost:8081</span><br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uruchomienie Klienta:</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>cd client-mmo<br />
./gradlew run</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Lub uruchom skompilowany JAR:</span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>java -jar greenvale.jar</code></div></div><br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Jak Grać</span></span><br />
<br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Uruchom serwer i klienta</span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Zarejestruj konto</span> (login + hasło)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Stwórz postać:</span><br />
  • Wybierz klasę (Łucznik/Mag/Wojownik)<br />
  • Wybierz rasę (Człowiek/Elf/Goblin/Nieumarły)<br />
  • Wybierz frakcję (Wataha/Zakon/Brak)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Rozpocznij grę:</span><br />
  • <span style="font-weight: bold;" class="mycode_b">Prawy przycisk myszy</span> - ruch/atak<br />
  • <span style="font-weight: bold;" class="mycode_b">C</span> - okno postaci<br />
  • <span style="font-weight: bold;" class="mycode_b">I</span> - inwentarz<br />
  • <span style="font-weight: bold;" class="mycode_b">Enter</span> - czat<br />
  • <span style="font-weight: bold;" class="mycode_b">ESC</span> - menu<br />
</li>
</ol>
<br />
<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Roadmap - W planach</span></span><br />
<ul class="mycode_list"><li>☐ System questów<br />
</li>
<li>☐ Crafting<br />
</li>
<li>☐ Trading między graczami<br />
</li>
<li>☐ Guildie<br />
</li>
<li>☐ PvP areny<br />
</li>
<li>☐ Dungeons<br />
</li>
<li>☐ Boss fights<br />
</li>
<li>☐ Pet system<br />
</li>
<li>☐ Mount system<br />
</li>
<li>☐ Achievement system<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Download &amp; GitHub</span></span><br />
<a href="https://github.com/Platefobrain/Simple-MMO-Game-greenvale" target="_blank" rel="noopener" class="mycode_url"><img src="https://img.shields.io/badge/GitHub-Repository-181717?style=for-the-badge&amp;logo=github" loading="lazy"  alt="[Obrazek: GitHub-Repository-181717?style=for-the-b...ogo=github]" class="mycode_img" /></a><br />
<span style="font-size: small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Projekt dostępny na licencji:</span> <span style="color: #0066cc;" class="mycode_color">GNU General Public License v3.0</span></span><br />
<span style="font-size: x-small;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Autor:</span> <a href="https://github.com/Platefobrain" target="_blank" rel="noopener" class="mycode_url">Platefobrain</a></span><br />
<span style="font-size: x-small;" class="mycode_size">⭐ <span style="font-weight: bold;" class="mycode_b">Jeśli podoba Ci się projekt, zostaw gwiazdkę na GitHubie!</span> ⭐</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ChangeLog GreenVale]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=76</link>
			<pubDate>Mon, 30 Jun 2025 19:19:33 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=76</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Zmiany z dnia 2025/06/30</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Server:</span><br />
<br />
#rev1<br />
<span style="font-weight: bold;" class="mycode_b">Enemy | Author: Platefobrain</span><br />
<br />
-zadawanie obrażeń przez wrogów<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Client:</span><br />
<br />
#rev1<br />
<span style="font-weight: bold;" class="mycode_b">Enemy | Author: Platefobrain</span><br />
<br />
- wyświetlanie obrażeń przez wrogów<br />
- modyfikacja deadscreen - teraz gra aktualizuje sie po smierci gracza "widac jak inni sie bija"<br />
wczesniej był "czarny ekran"]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Zmiany z dnia 2025/06/30</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Server:</span><br />
<br />
#rev1<br />
<span style="font-weight: bold;" class="mycode_b">Enemy | Author: Platefobrain</span><br />
<br />
-zadawanie obrażeń przez wrogów<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Client:</span><br />
<br />
#rev1<br />
<span style="font-weight: bold;" class="mycode_b">Enemy | Author: Platefobrain</span><br />
<br />
- wyświetlanie obrażeń przez wrogów<br />
- modyfikacja deadscreen - teraz gra aktualizuje sie po smierci gracza "widac jak inni sie bija"<br />
wczesniej był "czarny ekran"]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Kotlin MMO Game LibGDX Ktor beta]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=75</link>
			<pubDate>Tue, 06 May 2025 23:34:24 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=75</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: xx-large;" class="mycode_size">Kotlin MMO Game (LibGDX + Ktor)</span></span></div>
<div style="text-align: center;" class="mycode_align"><span style="font-style: italic;" class="mycode_i">A simple 2D multiplayer online RPG built with <a href="https://libgdx.com/" target="_blank" rel="noopener" class="mycode_url">LibGDX</a> and <a href="https://ktor.io/" target="_blank" rel="noopener" class="mycode_url">Ktor</a> using Kotlin.</span></div>
<div style="text-align: center;" class="mycode_align">Gracze mogą się logować, tworzyć postacie, poruszać, rozmawiać i walczyć w czasie rzeczywistym za pomocą komunikacji WebSocket.</div>
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Funkcje</span></span></span><ul class="mycode_list"><li>Logowanie, tworzenie i wybór postaci<br />
</li>
<li>Multiplayer przez WebSocket z backendem w Ktor<br />
</li>
<li>Ruch w czasie rzeczywistym, aktualizacje życia, czat<br />
</li>
<li>System klas i podstawowe umiejętności<br />
</li>
<li>Mechanika śmierci i respawnu<br />
</li>
<li>Interfejs oparty o sceny LibGDX<br />
</li>
</ul>
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Stos technologiczny</span></span></span><br />
<span style="font-weight: bold;" class="mycode_b">Client:</span> Kotlin + LibGDX  <br />
<span style="font-weight: bold;" class="mycode_b">Server:</span> Kotlin + Ktor WebSockets  <br />
<span style="font-weight: bold;" class="mycode_b">Networking:</span> WebSocket  <br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">build.gradle.kts (client)</span></span></span><br />
<br />
<span style="color: #bcbec4;" class="mycode_color"><span style="font-family: 'JetBrains Mono', monospace;" class="mycode_font">plugins <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"jvm"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.10"<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"plugin.serialization"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.20"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">application                            </span></span><span style="color: #7a7e85;" class="mycode_color">// &lt;&lt;&lt; dodajemy plugin application<br />
</span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft"<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span>= <span style="color: #6aab73;" class="mycode_color">"1.0-SNAPSHOT"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">repositories </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    mavenCentral()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">gdxVersion </span>= <span style="color: #6aab73;" class="mycode_color">"1.12.1"<br />
</span><span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">ktorVersion </span>= <span style="color: #6aab73;" class="mycode_color">"2.3.4"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">dependencies </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-cio:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"ch.qos.logback:logback-classic:1.4.12"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-freetype:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-freetype-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Logowanie, Rejestracja<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"at.favre.lib:bcrypt:0.9.0"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-serialization-kotlinx-json:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-content-negotiation:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności LibGDX<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #7a7e85;" class="mycode_color">// Konfiguracja zadań do uruchamiania klienta i serwera<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">register</span></span>&lt;JavaExec&gt;(<span style="color: #6aab73;" class="mycode_color">"runClient"</span>) <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"application"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">mainClass</span></span>.set(<span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.DesktopLauncher"</span>)<br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">classpath </span></span>= <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">sourceSets</span></span>[<span style="color: #6aab73;" class="mycode_color">"main"</span>].<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath<br />
</span><span style="font-style: italic;" class="mycode_i">    standardInput </span></span>= System.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">`in`<br />
</span><span style="font-style: italic;" class="mycode_i">    workingDir </span></span>= file(<span style="color: #6aab73;" class="mycode_color">"assets"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Jeśli masz zasoby aplikacji, stworzy katalog assets jeśli nie istnieje<br />
</span>    doFirst <span style="font-weight: bold;" class="mycode_b">{</span>        file(<span style="color: #6aab73;" class="mycode_color">"assets"</span>).mkdirs()<br />
    <span style="font-weight: bold;" class="mycode_b">}}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">register</span></span>&lt;JavaExec&gt;(<span style="color: #6aab73;" class="mycode_color">"runServer"</span>) <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"application"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">mainClass</span></span>.set(<span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.ServerKt"</span>)<br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">classpath </span></span>= <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">sourceSets</span></span>[<span style="color: #6aab73;" class="mycode_color">"main"</span>].<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath<br />
</span><span style="font-style: italic;" class="mycode_i">    standardInput </span></span>= System.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">`in`<br />
</span></span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">test </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    useJUnitPlatform()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">withType</span></span>&lt;Jar&gt; <span style="font-weight: bold;" class="mycode_b">{</span>    manifest <span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">attributes</span></span>[<span style="color: #6aab73;" class="mycode_color">"Main-Class"</span>] = <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.MMOGame.Launcher"<br />
</span>    <span style="font-weight: bold;" class="mycode_b">}}</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    jvmToolchain(<span style="color: #2aacb8;" class="mycode_color">21</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span></span></span><br />
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">build.gradle.kts (server)</span></span></span><br />
<br />
<span style="color: #bcbec4;" class="mycode_color"><span style="font-family: 'JetBrains Mono', monospace;" class="mycode_font">plugins <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"jvm"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.10"<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"plugin.serialization"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.20"<br />
</span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft"<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span>= <span style="color: #6aab73;" class="mycode_color">"1.0-SNAPSHOT"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">repositories </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    mavenCentral()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">gdxVersion </span>= <span style="color: #6aab73;" class="mycode_color">"1.12.1"<br />
</span><span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">ktorVersion </span>= <span style="color: #6aab73;" class="mycode_color">"2.3.4"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">dependencies </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #7a7e85;" class="mycode_color">// Twoje istniejące zależności<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-cio:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"ch.qos.logback:logback-classic:1.4.12"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności do serwera (jeśli są potrzebne w tym samym projekcie)<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-netty:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Logowanie, Rejestracja<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"at.favre.lib:bcrypt:0.9.0"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-serialization-kotlinx-json:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-content-negotiation:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności LibGDX<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">test </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    useJUnitPlatform()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">withType</span></span>&lt;Jar&gt; <span style="font-weight: bold;" class="mycode_b">{</span>    manifest <span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">attributes</span></span>[<span style="color: #6aab73;" class="mycode_color">"Main-Class"</span>] = <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.Main"<br />
</span>    <span style="font-weight: bold;" class="mycode_b">}</span><br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">duplicatesStrategy </span></span>= DuplicatesStrategy.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">EXCLUDE<br />
</span></span>    from(<span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">configurations</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath</span></span>.get()<br />
            .filter <span style="font-weight: bold;" class="mycode_b">{ it</span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">name</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">endsWith</span></span>(<span style="color: #6aab73;" class="mycode_color">"jar"</span>) <span style="font-weight: bold;" class="mycode_b">}</span>            .<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">map </span></span><span style="font-weight: bold;" class="mycode_b">{ </span>zipTree(<span style="font-weight: bold;" class="mycode_b">it</span>) <span style="font-weight: bold;" class="mycode_b">}    }</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    jvmToolchain(<span style="color: #2aacb8;" class="mycode_color">21</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span></span></span><br />
<br />
<span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Licencja</span></span><br />
<blockquote class="mycode_quote"><cite>Cytat:</cite>Copyright [2025] [Platefobrain]  <br />
Licensed under the Apache License, Version 2.0 (the "License");  <br />
you may not use this file except in compliance with the License.  <br />
You may obtain a copy of the License at:  <br />
<a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener" class="mycode_url">http://www.apache.org/licenses/LICENSE-2.0</a><br />
Unless required by applicable law or agreed to in writing, software  <br />
distributed under the License is distributed on an "AS IS" BASIS,  <br />
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  <br />
See the License for the specific language governing permissions and  <br />
limitations under the License.</blockquote>
<br />
<blockquote class="mycode_quote"><cite>Cytat:</cite>Licencja: Wszelkie prawa zastrzeżone.  <br />
Możesz używać, modyfikować, kopiować i dystrybuować ten projekt do własnych celów,  <br />
ale nie możesz używać go do celów komercyjnych, chyba że uzyskasz zgodę od autora.  <br />
Projekt jest dostarczany "tak jak jest", bez żadnych gwarancji.  <br />
Używasz go na własne ryzyko.  <br />
Autor: Copyright [2025] [Platefobrain]</blockquote>
<br />
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Download</span></span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://decodesoft.pl/download/server-mmo.zip</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://decodesoft.pl/download/client-mmo.zip</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://github.com/Platefobrain/Simple-MMO-Game-greenvale</code></div></div><br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screeny</span></span></span><br />
<br />
<img src="https://github.com/Platefobrain/Simple-MMO-Game-greenvale/blob/main/character_select.png?raw=true" loading="lazy"  width="500" height="300" alt="[Obrazek: character_select.png?raw=true]" class="mycode_img" /><br />
<br />
<img src="https://raw.githubusercontent.com/Platefobrain/Simple-MMO-Game-greenvale/refs/heads/main/game.png" loading="lazy"  width="500" height="300" alt="[Obrazek: game.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: xx-large;" class="mycode_size">Kotlin MMO Game (LibGDX + Ktor)</span></span></div>
<div style="text-align: center;" class="mycode_align"><span style="font-style: italic;" class="mycode_i">A simple 2D multiplayer online RPG built with <a href="https://libgdx.com/" target="_blank" rel="noopener" class="mycode_url">LibGDX</a> and <a href="https://ktor.io/" target="_blank" rel="noopener" class="mycode_url">Ktor</a> using Kotlin.</span></div>
<div style="text-align: center;" class="mycode_align">Gracze mogą się logować, tworzyć postacie, poruszać, rozmawiać i walczyć w czasie rzeczywistym za pomocą komunikacji WebSocket.</div>
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Funkcje</span></span></span><ul class="mycode_list"><li>Logowanie, tworzenie i wybór postaci<br />
</li>
<li>Multiplayer przez WebSocket z backendem w Ktor<br />
</li>
<li>Ruch w czasie rzeczywistym, aktualizacje życia, czat<br />
</li>
<li>System klas i podstawowe umiejętności<br />
</li>
<li>Mechanika śmierci i respawnu<br />
</li>
<li>Interfejs oparty o sceny LibGDX<br />
</li>
</ul>
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Stos technologiczny</span></span></span><br />
<span style="font-weight: bold;" class="mycode_b">Client:</span> Kotlin + LibGDX  <br />
<span style="font-weight: bold;" class="mycode_b">Server:</span> Kotlin + Ktor WebSockets  <br />
<span style="font-weight: bold;" class="mycode_b">Networking:</span> WebSocket  <br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">build.gradle.kts (client)</span></span></span><br />
<br />
<span style="color: #bcbec4;" class="mycode_color"><span style="font-family: 'JetBrains Mono', monospace;" class="mycode_font">plugins <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"jvm"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.10"<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"plugin.serialization"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.20"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">application                            </span></span><span style="color: #7a7e85;" class="mycode_color">// &lt;&lt;&lt; dodajemy plugin application<br />
</span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft"<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span>= <span style="color: #6aab73;" class="mycode_color">"1.0-SNAPSHOT"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">repositories </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    mavenCentral()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">gdxVersion </span>= <span style="color: #6aab73;" class="mycode_color">"1.12.1"<br />
</span><span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">ktorVersion </span>= <span style="color: #6aab73;" class="mycode_color">"2.3.4"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">dependencies </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-cio:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"ch.qos.logback:logback-classic:1.4.12"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-freetype:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-freetype-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Logowanie, Rejestracja<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"at.favre.lib:bcrypt:0.9.0"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-serialization-kotlinx-json:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-content-negotiation:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności LibGDX<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #7a7e85;" class="mycode_color">// Konfiguracja zadań do uruchamiania klienta i serwera<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">register</span></span>&lt;JavaExec&gt;(<span style="color: #6aab73;" class="mycode_color">"runClient"</span>) <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"application"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">mainClass</span></span>.set(<span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.DesktopLauncher"</span>)<br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">classpath </span></span>= <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">sourceSets</span></span>[<span style="color: #6aab73;" class="mycode_color">"main"</span>].<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath<br />
</span><span style="font-style: italic;" class="mycode_i">    standardInput </span></span>= System.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">`in`<br />
</span><span style="font-style: italic;" class="mycode_i">    workingDir </span></span>= file(<span style="color: #6aab73;" class="mycode_color">"assets"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Jeśli masz zasoby aplikacji, stworzy katalog assets jeśli nie istnieje<br />
</span>    doFirst <span style="font-weight: bold;" class="mycode_b">{</span>        file(<span style="color: #6aab73;" class="mycode_color">"assets"</span>).mkdirs()<br />
    <span style="font-weight: bold;" class="mycode_b">}}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">register</span></span>&lt;JavaExec&gt;(<span style="color: #6aab73;" class="mycode_color">"runServer"</span>) <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"application"<br />
</span>    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">mainClass</span></span>.set(<span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.ServerKt"</span>)<br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">classpath </span></span>= <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">sourceSets</span></span>[<span style="color: #6aab73;" class="mycode_color">"main"</span>].<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath<br />
</span><span style="font-style: italic;" class="mycode_i">    standardInput </span></span>= System.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">`in`<br />
</span></span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">test </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    useJUnitPlatform()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">withType</span></span>&lt;Jar&gt; <span style="font-weight: bold;" class="mycode_b">{</span>    manifest <span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">attributes</span></span>[<span style="color: #6aab73;" class="mycode_color">"Main-Class"</span>] = <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.MMOGame.Launcher"<br />
</span>    <span style="font-weight: bold;" class="mycode_b">}}</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    jvmToolchain(<span style="color: #2aacb8;" class="mycode_color">21</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span></span></span><br />
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">build.gradle.kts (server)</span></span></span><br />
<br />
<span style="color: #bcbec4;" class="mycode_color"><span style="font-family: 'JetBrains Mono', monospace;" class="mycode_font">plugins <span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"jvm"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.10"<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin</span></span>(<span style="color: #6aab73;" class="mycode_color">"plugin.serialization"</span>) <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span><span style="color: #6aab73;" class="mycode_color">"2.1.20"<br />
</span><span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">group </span></span>= <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft"<br />
</span><span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">version </span></span>= <span style="color: #6aab73;" class="mycode_color">"1.0-SNAPSHOT"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">repositories </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    mavenCentral()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">gdxVersion </span>= <span style="color: #6aab73;" class="mycode_color">"1.12.1"<br />
</span><span style="color: #cf8e6d;" class="mycode_color">val </span><span style="color: #c77dbb;" class="mycode_color">ktorVersion </span>= <span style="color: #6aab73;" class="mycode_color">"2.3.4"<br />
</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">dependencies </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    <span style="color: #7a7e85;" class="mycode_color">// Twoje istniejące zależności<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-client-cio:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"ch.qos.logback:logback-classic:1.4.12"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności do serwera (jeśli są potrzebne w tym samym projekcie)<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-core:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-netty:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-websockets:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Logowanie, Rejestracja<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"at.favre.lib:bcrypt:0.9.0"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-serialization-kotlinx-json:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"io.ktor:ktor-server-content-negotiation:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">ktorVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #7a7e85;" class="mycode_color">// Zależności LibGDX<br />
</span>    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-backend-lwjgl3:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">"</span>)<br />
    <span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">implementation</span></span>(<span style="color: #6aab73;" class="mycode_color">"com.badlogicgames.gdx:gdx-platform:</span><span style="color: #cf8e6d;" class="mycode_color">&#36;</span><span style="color: #c77dbb;" class="mycode_color">gdxVersion</span><span style="color: #6aab73;" class="mycode_color">:natives-desktop"</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">test </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    useJUnitPlatform()<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">tasks</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">withType</span></span>&lt;Jar&gt; <span style="font-weight: bold;" class="mycode_b">{</span>    manifest <span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">attributes</span></span>[<span style="color: #6aab73;" class="mycode_color">"Main-Class"</span>] = <span style="color: #6aab73;" class="mycode_color">"pl.decodesoft.Main"<br />
</span>    <span style="font-weight: bold;" class="mycode_b">}</span><br />
    <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">duplicatesStrategy </span></span>= DuplicatesStrategy.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">EXCLUDE<br />
</span></span>    from(<span style="font-weight: bold;" class="mycode_b">{</span>        <span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">configurations</span></span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">runtimeClasspath</span></span>.get()<br />
            .filter <span style="font-weight: bold;" class="mycode_b">{ it</span>.<span style="color: #c77dbb;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">name</span></span>.<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">endsWith</span></span>(<span style="color: #6aab73;" class="mycode_color">"jar"</span>) <span style="font-weight: bold;" class="mycode_b">}</span>            .<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">map </span></span><span style="font-weight: bold;" class="mycode_b">{ </span>zipTree(<span style="font-weight: bold;" class="mycode_b">it</span>) <span style="font-weight: bold;" class="mycode_b">}    }</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span><br />
<span style="color: #57aaf7;" class="mycode_color"><span style="font-style: italic;" class="mycode_i">kotlin </span></span><span style="font-weight: bold;" class="mycode_b">{</span>    jvmToolchain(<span style="color: #2aacb8;" class="mycode_color">21</span>)<br />
<span style="font-weight: bold;" class="mycode_b">}</span></span></span><br />
<br />
<span style="font-size: 18pt;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Licencja</span></span><br />
<blockquote class="mycode_quote"><cite>Cytat:</cite>Copyright [2025] [Platefobrain]  <br />
Licensed under the Apache License, Version 2.0 (the "License");  <br />
you may not use this file except in compliance with the License.  <br />
You may obtain a copy of the License at:  <br />
<a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank" rel="noopener" class="mycode_url">http://www.apache.org/licenses/LICENSE-2.0</a><br />
Unless required by applicable law or agreed to in writing, software  <br />
distributed under the License is distributed on an "AS IS" BASIS,  <br />
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  <br />
See the License for the specific language governing permissions and  <br />
limitations under the License.</blockquote>
<br />
<blockquote class="mycode_quote"><cite>Cytat:</cite>Licencja: Wszelkie prawa zastrzeżone.  <br />
Możesz używać, modyfikować, kopiować i dystrybuować ten projekt do własnych celów,  <br />
ale nie możesz używać go do celów komercyjnych, chyba że uzyskasz zgodę od autora.  <br />
Projekt jest dostarczany "tak jak jest", bez żadnych gwarancji.  <br />
Używasz go na własne ryzyko.  <br />
Autor: Copyright [2025] [Platefobrain]</blockquote>
<br />
<br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Download</span></span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://decodesoft.pl/download/server-mmo.zip</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://decodesoft.pl/download/client-mmo.zip</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>https://github.com/Platefobrain/Simple-MMO-Game-greenvale</code></div></div><br />
<br />
<span style="color: #444444;" class="mycode_color"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screeny</span></span></span><br />
<br />
<img src="https://github.com/Platefobrain/Simple-MMO-Game-greenvale/blob/main/character_select.png?raw=true" loading="lazy"  width="500" height="300" alt="[Obrazek: character_select.png?raw=true]" class="mycode_img" /><br />
<br />
<img src="https://raw.githubusercontent.com/Platefobrain/Simple-MMO-Game-greenvale/refs/heads/main/game.png" loading="lazy"  width="500" height="300" alt="[Obrazek: game.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[plugin HelathBar1.2]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=73</link>
			<pubDate>Sun, 23 Feb 2025 18:03:42 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=73</guid>
			<description><![CDATA[Plugin do purpur 1.21.4, pokazuje healthbary i ilosc aktualnego zycia<br />
<br />
<img src="https://zapodaj.net/images/834786fd1b680.png" loading="lazy"  width="1024" height="500" alt="[Obrazek: 834786fd1b680.png]" class="mycode_img" /><br />
<br />
<a href="https://www.mediafire.com/file/ygd6l59huwprhpb/HealthBar-1.2.jar/file" target="_blank" rel="noopener" class="mycode_url">https://www.mediafire.com/file/ygd6l59hu...2.jar/file</a>]]></description>
			<content:encoded><![CDATA[Plugin do purpur 1.21.4, pokazuje healthbary i ilosc aktualnego zycia<br />
<br />
<img src="https://zapodaj.net/images/834786fd1b680.png" loading="lazy"  width="1024" height="500" alt="[Obrazek: 834786fd1b680.png]" class="mycode_img" /><br />
<br />
<a href="https://www.mediafire.com/file/ygd6l59huwprhpb/HealthBar-1.2.jar/file" target="_blank" rel="noopener" class="mycode_url">https://www.mediafire.com/file/ygd6l59hu...2.jar/file</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[MMOServer Original Theme (prod.44Carlo)]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=72</link>
			<pubDate>Thu, 20 Feb 2025 17:49:24 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=5">Animalized</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=72</guid>
			<description><![CDATA[Fajna muzyka i tyle w temacie, mam akumlator na kablu i niewiem czy juz w nich wjezdzac czy za chwile.]]></description>
			<content:encoded><![CDATA[Fajna muzyka i tyle w temacie, mam akumlator na kablu i niewiem czy juz w nich wjezdzac czy za chwile.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zgłaszanie błędów z działaniem strony]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=65</link>
			<pubDate>Sun, 26 Jan 2025 00:36:54 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=65</guid>
			<description><![CDATA[Jeśli napotkałeś jakikolwiek błąd, problem z działaniem strony lub masz sugestie dotyczące usprawnień, zgłoś je tutaj! Dzięki Twoim zgłoszeniom możemy szybko poprawić funkcjonowanie naszej strony i forum.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jak zgłaszać problemy?</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Opisz problem jak najdokładniej</span> – podaj, co się dzieje, gdzie (np. link do strony/problemowej sekcji) i w jakich okolicznościach występuje problem.<br />
<span style="font-weight: bold;" class="mycode_b">2. Dodaj zrzut ekranu (jeśli to możliwe)</span> – ułatwi to zrozumienie problemu.<br />
<span style="font-weight: bold;" class="mycode_b">3. Podaj przeglądarkę i urządzenie</span> – np. Chrome na PC, Firefox na telefonie itp.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Przykład zgłoszenia:</span><br />
<ul class="mycode_list"><li>Problem: Link w menu „Kontakt” nie działa.<br />
</li>
</ul>
<ul class="mycode_list"><li>Miejsce: Strona główna &gt; menu górne.<br />
</li>
</ul>
<ul class="mycode_list"><li>Urządzenie: Windows 10, Chrome.<br />
</li>
</ul>
<ul class="mycode_list"><li>Opis: Po kliknięciu na link nic się nie dzieje, nie przekierowuje na stronę kontaktową.<br />
</li>
</ul>
<br />
Twoje zgłoszenia pomagają nam usprawniać stronę i forum. Z góry dziękujemy za każdą informację!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zespół decodesoft</span>]]></description>
			<content:encoded><![CDATA[Jeśli napotkałeś jakikolwiek błąd, problem z działaniem strony lub masz sugestie dotyczące usprawnień, zgłoś je tutaj! Dzięki Twoim zgłoszeniom możemy szybko poprawić funkcjonowanie naszej strony i forum.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Jak zgłaszać problemy?</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Opisz problem jak najdokładniej</span> – podaj, co się dzieje, gdzie (np. link do strony/problemowej sekcji) i w jakich okolicznościach występuje problem.<br />
<span style="font-weight: bold;" class="mycode_b">2. Dodaj zrzut ekranu (jeśli to możliwe)</span> – ułatwi to zrozumienie problemu.<br />
<span style="font-weight: bold;" class="mycode_b">3. Podaj przeglądarkę i urządzenie</span> – np. Chrome na PC, Firefox na telefonie itp.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Przykład zgłoszenia:</span><br />
<ul class="mycode_list"><li>Problem: Link w menu „Kontakt” nie działa.<br />
</li>
</ul>
<ul class="mycode_list"><li>Miejsce: Strona główna &gt; menu górne.<br />
</li>
</ul>
<ul class="mycode_list"><li>Urządzenie: Windows 10, Chrome.<br />
</li>
</ul>
<ul class="mycode_list"><li>Opis: Po kliknięciu na link nic się nie dzieje, nie przekierowuje na stronę kontaktową.<br />
</li>
</ul>
<br />
Twoje zgłoszenia pomagają nam usprawniać stronę i forum. Z góry dziękujemy za każdą informację!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zespół decodesoft</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Zmiany na forum]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=61</link>
			<pubDate>Fri, 17 Jan 2025 23:39:34 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=61</guid>
			<description><![CDATA[W tym temacie będą regularnie publikowane informacje o wszystkich wprowadzonych zmianach na forum. Znajdziesz tu aktualizacje dotyczące nowych funkcji, poprawek błędów, modyfikacji wyglądu oraz innych istotnych aktualizacji. Zachęcamy do śledzenia, aby być na bieżąco z najnowszymi zmianami!]]></description>
			<content:encoded><![CDATA[W tym temacie będą regularnie publikowane informacje o wszystkich wprowadzonych zmianach na forum. Znajdziesz tu aktualizacje dotyczące nowych funkcji, poprawek błędów, modyfikacji wyglądu oraz innych istotnych aktualizacji. Zachęcamy do śledzenia, aby być na bieżąco z najnowszymi zmianami!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Liczymy do 1000]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=51</link>
			<pubDate>Wed, 15 Jan 2025 20:19:16 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=3">Test</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=51</guid>
			<description><![CDATA[Każdy wie co tu robić. zaczynam:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1..</span>]]></description>
			<content:encoded><![CDATA[Każdy wie co tu robić. zaczynam:<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1..</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Regulamin Forum]]></title>
			<link>https://decodesoft.pl/forum/showthread.php?tid=42</link>
			<pubDate>Wed, 11 Dec 2024 19:33:06 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://decodesoft.pl/forum/member.php?action=profile&uid=1">platefobrain</a>]]></dc:creator>
			<guid isPermaLink="false">https://decodesoft.pl/forum/showthread.php?tid=42</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="color: #0074d9;" class="mycode_color"><span style="font-size: large;" class="mycode_size">Postanowienia Ogólne</span></span></span><br />
Forum decodesoft.pl służy do wymiany wiedzy i doświadczeń z zakresu webmasteringu, programowania, gier, muzyki i szeroko pojętej technologii.<br />
Administratorzy zastrzegają sobie prawo do wprowadzania zmian w regulaminie.<br />
<br />
<span style="color: #0074d9;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Zasady Publikowania Treści</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Zasady Ogólne</span><br />
<ul class="mycode_list"><li>Publikowane treści muszą być zgodne z obowiązującym prawem oraz regulaminem forum i strony.<br />
</li>
<li>Zabrania się publikowania treści obraźliwych, wulgarnych, pornograficznych, naruszających prywatność innych osób, promujących nienawiść, przemoc, lub dyskryminację.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">2. Prawa Autorskie</span><br />
<ul class="mycode_list"><li>Użytkownik zobowiązany jest do publikowania wyłącznie treści, do których posiada pełne prawa autorskie lub odpowiednie licencje.<br />
</li>
<li>Kopiowanie i publikowanie cudzych materiałów bez zgody autora jest zabronione. <br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">3. Jakość i Tematyka Treści</span><br />
<ul class="mycode_list"><li>Publikowane treści powinny być wartościowe, merytoryczne i związane z tematyką strony/forum.<br />
</li>
<li>Zabrania się publikowania spamu, reklam, linków do stron niezwiązanych z tematyką bez zgody administracji.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">4. Kultura Dyskusji</span><br />
<ul class="mycode_list"><li>Użytkownicy są zobowiązani do kulturalnego wyrażania swoich opinii i szanowania innych uczestników dyskusji.<br />
</li>
<li>Każda forma trolowania, prowokacji lub agresji wobec innych użytkowników będzie karana.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">5. Moderacja i Sankcje</span><br />
<ul class="mycode_list"><li>Administracja i moderatorzy mają prawo do edycji, usunięcia lub zablokowania treści niezgodnych z regulaminem.<br />
</li>
<li>Użytkownicy, którzy wielokrotnie łamią regulamin, mogą zostać czasowo lub trwale zablokowani.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">6. Odpowiedzialność</span><br />
<ul class="mycode_list"><li>Każdy użytkownik ponosi pełną odpowiedzialność za publikowane przez siebie treści.<br />
</li>
<li>Administracja nie ponosi odpowiedzialności za treści publikowane przez użytkowników, jednak zastrzega sobie prawo do ich usuwania w przypadku naruszenia regulaminu.<br />
</li>
</ul>
<br />
<span style="font-style: italic;" class="mycode_i">Ten regulamin ma na celu zapewnienie wysokiej jakości dyskusji i ochronę użytkowników. Prosimy o przestrzeganie powyższych zasad.</span>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b"><span style="color: #0074d9;" class="mycode_color"><span style="font-size: large;" class="mycode_size">Postanowienia Ogólne</span></span></span><br />
Forum decodesoft.pl służy do wymiany wiedzy i doświadczeń z zakresu webmasteringu, programowania, gier, muzyki i szeroko pojętej technologii.<br />
Administratorzy zastrzegają sobie prawo do wprowadzania zmian w regulaminie.<br />
<br />
<span style="color: #0074d9;" class="mycode_color"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Zasady Publikowania Treści</span></span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Zasady Ogólne</span><br />
<ul class="mycode_list"><li>Publikowane treści muszą być zgodne z obowiązującym prawem oraz regulaminem forum i strony.<br />
</li>
<li>Zabrania się publikowania treści obraźliwych, wulgarnych, pornograficznych, naruszających prywatność innych osób, promujących nienawiść, przemoc, lub dyskryminację.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">2. Prawa Autorskie</span><br />
<ul class="mycode_list"><li>Użytkownik zobowiązany jest do publikowania wyłącznie treści, do których posiada pełne prawa autorskie lub odpowiednie licencje.<br />
</li>
<li>Kopiowanie i publikowanie cudzych materiałów bez zgody autora jest zabronione. <br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">3. Jakość i Tematyka Treści</span><br />
<ul class="mycode_list"><li>Publikowane treści powinny być wartościowe, merytoryczne i związane z tematyką strony/forum.<br />
</li>
<li>Zabrania się publikowania spamu, reklam, linków do stron niezwiązanych z tematyką bez zgody administracji.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">4. Kultura Dyskusji</span><br />
<ul class="mycode_list"><li>Użytkownicy są zobowiązani do kulturalnego wyrażania swoich opinii i szanowania innych uczestników dyskusji.<br />
</li>
<li>Każda forma trolowania, prowokacji lub agresji wobec innych użytkowników będzie karana.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">5. Moderacja i Sankcje</span><br />
<ul class="mycode_list"><li>Administracja i moderatorzy mają prawo do edycji, usunięcia lub zablokowania treści niezgodnych z regulaminem.<br />
</li>
<li>Użytkownicy, którzy wielokrotnie łamią regulamin, mogą zostać czasowo lub trwale zablokowani.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">6. Odpowiedzialność</span><br />
<ul class="mycode_list"><li>Każdy użytkownik ponosi pełną odpowiedzialność za publikowane przez siebie treści.<br />
</li>
<li>Administracja nie ponosi odpowiedzialności za treści publikowane przez użytkowników, jednak zastrzega sobie prawo do ich usuwania w przypadku naruszenia regulaminu.<br />
</li>
</ul>
<br />
<span style="font-style: italic;" class="mycode_i">Ten regulamin ma na celu zapewnienie wysokiej jakości dyskusji i ochronę użytkowników. Prosimy o przestrzeganie powyższych zasad.</span>]]></content:encoded>
		</item>
	</channel>
</rss>