Vorwort:
Kurz und knapp, Anstatt Ewigkeiten nach allem zu googlen und alles sich zurecht zu suchen fass ich einfach das Basicly meiste einfach in einem Sammelthread zusammen, Generell hab ich das auch schon vor 3 Jahren in einem Anderem Board gemacht allerdings finde ich die Administration grauenhaft und diese kümmern sich eh nicht um sowas wie "Ränge" oder "Regeln", und abgesehen davon brauchen die dort auch Äonen um zu Antworten.
Bevor ich an sowas wie Aufbau eines Servers denke wäre es erstmal sehr wichtig zu wissen für euch:
Das hosten sowie betreiben eines M2 Servers ist Illegal und kann immer mit Rechtlichen Konsequenzen Enden sofern man sich nicht richtig absichert, Wie man Sich richtig absichert gegenüber sowas dazu gibt es gefühlt 80 Milliarden Themen aber das soll hier weder Diskussionsanreiz noch sonst was sein.
Ein Server besteht aus 4 Wichtigen Parts und na menge anderen Sachen
Was benötigen wir alles:
Clientfiles
(Der Client halt, Dll"s, Pack Ordner mitsamt epk / eix / gepackten, entpackten pack Archiven)
Beispiel für Clientfiles:
ClientSrc
(Der Binary Source mitsamt visual studio .sln zu deiner Metin2Distribute / Metin2Release / Metin2Debug.exe)
Beispiel für ClientSrc:
Serverfiles
(share, maps, Channel1, Channel2, Kern X, Quests, drops, Datenbank, libs....)
Beispiel für Serverfiles:
ServerSrc
(gamesource, common, datenbanksource welche mit gmake / cmake / ggf ähnliches compiled werden)
Beispiel für ServerSource:
(Der Client halt, Dll"s, Pack Ordner mitsamt epk / eix / gepackten, entpackten pack Archiven)
Beispiel für Clientfiles:
ClientSrc
(Der Binary Source mitsamt visual studio .sln zu deiner Metin2Distribute / Metin2Release / Metin2Debug.exe)
Beispiel für ClientSrc:
Serverfiles
(share, maps, Channel1, Channel2, Kern X, Quests, drops, Datenbank, libs....)
Beispiel für Serverfiles:
ServerSrc
(gamesource, common, datenbanksource welche mit gmake / cmake / ggf ähnliches compiled werden)
Beispiel für ServerSource:
Tool die man zum Bearbeiten ansonsten so oder so braucht:
Einen passenden Entpacker / Packer für die Clientpackarchive (Eternexus, Packmaker, Etermanager, EterPackConsoleLz4, PackMakerLite "im falle Martysama" o.ä.
Ein Programm zum aufbauen einer sftp / ssh verbindung (WinScp, Mobaxterm)(bitte nicht Filezilla niemand mag das und ist auch vollkommen unnötig)
Ein Programm zum nutzen der ssh console (Putty, Mobaxterm, VNC)
Einen Client zum Verbinden zur Datenbank (Navicat, HeidiSql, Database.net)
Ein Programm um Textdateien mit richtiger Codierung öffnen zu können (Notepad++, Sublime Editor, VS Code)
Ein Programm um den Clientsource zu bearbeiten (Visual Studio Community mit dem Toolset Welches die Files halt benötigen)
Ein Programm zum aufbauen einer sftp / ssh verbindung (WinScp, Mobaxterm)(bitte nicht Filezilla niemand mag das und ist auch vollkommen unnötig)
Ein Programm zum nutzen der ssh console (Putty, Mobaxterm, VNC)
Einen Client zum Verbinden zur Datenbank (Navicat, HeidiSql, Database.net)
Ein Programm um Textdateien mit richtiger Codierung öffnen zu können (Notepad++, Sublime Editor, VS Code)
Ein Programm um den Clientsource zu bearbeiten (Visual Studio Community mit dem Toolset Welches die Files halt benötigen)
Optionale Tools die man ggf ebenfalls braucht / Programme
Ein Programm zum bearbeiten von .tga .dds Dateien (Paint.net , Photoshop, Gimp)
Ein Programm zum bearbeiten von Maps / Effekten / Skills / Flyeffekten , Collisions (World Editor)
Ein Programm um .gr2 Dateien anzuschauen zu können (Granny Viewer)
Ein Programm um Gr2 Modelle und Animationen erstellen zu können (3dsmax)
Kürzel / Fremdwörter / Begrifferklärung
ServerSrc / ServerSource
ServerSource oder auch Serverquellcode bezeichnet man das Archiv welches die Systeme des Servers beinhaltet um beide Herzdateien des Servers zu bauen. Findet man im Server beispielsweise unter /usr/home/Source/Server/....
Clientsrc / ClientSource / Binary Source
Clientsource oder auch Clientquellcode bezeichnet man das Archiv welches die Systeme für den Clienten des Projektes beinhaltet, um die Metin2Distribute / Metin2Release zu erzeugen. Das ist meistens eine .sln datei mit c++ Elementen, das Archiv welches durch Visual Studio oder einem Compiler der Wahl öffnen lässt
C++
C++ ist die Programmiersprache auf die Metin2 zum Sehr großem Teil basiert, Ich würde schätzen knapp über 90% besteht aus C++.
Bei den Dateien an sich ist zu beachten beispiel in der Serversrc, das meistens zu einer .cpp datei auch die Header .h datei dazugehört, "oftmals" werden wichtige Elemente nur in die Header datei geschrieben während in der .cpp der Auszuführende Code ist
.Py / Python
Ebenfalls eine Programmiersprache die in Metin2 zum Sehr großem Teil für Grafische Interfaces als auch andere Grafische Elemente genutzt wird.
Lua / Quest
Wenn ihr beispielsweise euch Teleportieren wollt, oder Beim Biologen einen Auftrag annimmt oder mal wieder das Lager öffnen wollt, wird eine Quest ausgeführt, Diese Quests befinden sich zu 99% im Server unter /usr/home/game/share/quest/ und sind in der Sprache Lua geschrieben auch wenn sie die endung .quest haben. damit solche aber erst aktiviert werden müssen diese in der quest_list als aktiv eingetragen werden.
GUI UI Interface
Das GUI / bzw UI oder Interface sind grafische Darstellungen der Benutzeroberfläche, Beispielsweise die Fenster Inventar oder Gildenmember sind beides GUI / UI Fenster
gmake
gmake ist ein c++ basierter gnu compiler welcher unter FreeBSD zum Compilen der game und DB Source genutzt wird (zu finden in der ServerSource)
granny / .gr2
granny oder auch omi genannt ist die Grafikengine die Metin2 nutzt, die Modelldateien welche auch animationen beinhalten können werden abgekürzt mit .gr2
debug / debuggen
Wortwörtlich bezeichnet Debuggen jedoch das Entfernen von Fehlern (Bugs) aus Ihrem Code.
1. Aussuchen der Files / Wahl des Betriebssystem
Als Anfänger empfehle ich immer Files wo so wenig wie möglich eingebaut ist,
Jenachdem wie man arbeiten will hat man mehrere Möglichkeiten, Im Grunde genommen unterscheiden diese sich kaum allerdings sind einige davon einfach mit Mehraufwand verbunden weswegen ich nur die Einfachen Wege hier beschreiben werde,
Die Wahl der Files würde ich nicht auf "Welche Systeme sind Verbaut, Wie sieht das Interface aus" oder "Welche Maps, Monster beinhaltet die Files" achten sondern Eher nach dem Kenntnisstand / Nachdem was ihr euch zutraut beurteilen.
Auch die Wahl des Betriebssystems sorgt quasi schon im Vorraus das ihr eingegrenzt werden "Ohne extra jetzt zu updaten etc" ob ihr das ganze später auf nem Rootserver haben wollt oder Erstmal nur Lokal alleine herumprobieren wollt.
Habt ihr euch für Files entschieden solltet ihr euch nun um das Betriebssystem kümmern welches die Files nutzen werden.
95% aller Files laufen unter FreeBSD,
*FreeBSD ist ein Unix Kernel basiertes System welches beispielsweise damals bei der PS3 genutzt worden ist, Viele Anbieter bieten dieses System immer in den Neuesten Versionen an, Erkundigt euch vorher unter welchem FreeBSD diese laufen*
Bei BSD ist sehr stark darauf zu achten ob bei den Files eine Version vorgegeben ist und ob diese noch unterstützt wird bzw ob nicht diese schon das EoL "End of Life" erreicht hat, Falls ja kann man ohne großartigen aufwand nicht wirklich sowas wie Programme / Treiber / Packages installieren, was das aufsetzen von Files deutlich erschweren wird.
Serverfiles laufen generell unter 64Bit, Ergo amd64
Es gibt noch alte Serverfiles wo die Source unter 32Bit compiliert wird also unter (i386) aber heutzutage eher weniger zu finden.
Wählt ihr ein Neueres Betriebssystem als die vorgegebenen kann es unter umständen sein, das die mit beigelegten Libraries teils nicht mit dem Betriebssystem kompatibel sind, Spätestens beim versuch des Hochfahrens werdet ihr merken falls dort was falsch ist.
Aktueller stand (25.05.25) ist FreeBSD 13.4+ RELEASE amd64 liegt noch im Supporteten Bereich.
Bitte Prüft das vorher nach ob diese Versionen noch gehen

Seid bitte nicht so Bescheuert wie einige Nutzer die sich als "Dev" ausgeben und dann versuchen BSD 12.3 Systeme auf 13.0 zu installieren hatte ich zu hauf einfach nicht machen danke
habt ihr euch nun für Files entschieden die Ihr installieren wollt, liegt es jetzt an euch Wie ihr diese betreiben wollt, benutzen wollt.
Jenachdem wie man arbeiten will hat man mehrere Möglichkeiten, Im Grunde genommen unterscheiden diese sich kaum allerdings sind einige davon einfach mit Mehraufwand verbunden weswegen ich nur die Einfachen Wege hier beschreiben werde,
Die Wahl der Files würde ich nicht auf "Welche Systeme sind Verbaut, Wie sieht das Interface aus" oder "Welche Maps, Monster beinhaltet die Files" achten sondern Eher nach dem Kenntnisstand / Nachdem was ihr euch zutraut beurteilen.
Auch die Wahl des Betriebssystems sorgt quasi schon im Vorraus das ihr eingegrenzt werden "Ohne extra jetzt zu updaten etc" ob ihr das ganze später auf nem Rootserver haben wollt oder Erstmal nur Lokal alleine herumprobieren wollt.
Habt ihr euch für Files entschieden solltet ihr euch nun um das Betriebssystem kümmern welches die Files nutzen werden.
95% aller Files laufen unter FreeBSD,
*FreeBSD ist ein Unix Kernel basiertes System welches beispielsweise damals bei der PS3 genutzt worden ist, Viele Anbieter bieten dieses System immer in den Neuesten Versionen an, Erkundigt euch vorher unter welchem FreeBSD diese laufen*
Bei BSD ist sehr stark darauf zu achten ob bei den Files eine Version vorgegeben ist und ob diese noch unterstützt wird bzw ob nicht diese schon das EoL "End of Life" erreicht hat, Falls ja kann man ohne großartigen aufwand nicht wirklich sowas wie Programme / Treiber / Packages installieren, was das aufsetzen von Files deutlich erschweren wird.
Serverfiles laufen generell unter 64Bit, Ergo amd64
Es gibt noch alte Serverfiles wo die Source unter 32Bit compiliert wird also unter (i386) aber heutzutage eher weniger zu finden.
Wählt ihr ein Neueres Betriebssystem als die vorgegebenen kann es unter umständen sein, das die mit beigelegten Libraries teils nicht mit dem Betriebssystem kompatibel sind, Spätestens beim versuch des Hochfahrens werdet ihr merken falls dort was falsch ist.
Aktueller stand (25.05.25) ist FreeBSD 13.4+ RELEASE amd64 liegt noch im Supporteten Bereich.
Bitte Prüft das vorher nach ob diese Versionen noch gehen

Seid bitte nicht so Bescheuert wie einige Nutzer die sich als "Dev" ausgeben und dann versuchen BSD 12.3 Systeme auf 13.0 zu installieren hatte ich zu hauf einfach nicht machen danke
habt ihr euch nun für Files entschieden die Ihr installieren wollt, liegt es jetzt an euch Wie ihr diese betreiben wollt, benutzen wollt.
Wollt ihr Alleine bzw lokal auf eurem PC arbeiten können befolgt das
Wir öffnen Virtual box und klicken dort oben auf Neu
dann hab ich diese Iso gewählt:

Mind Ram 4GB (Dev Server 4Threads wär gut)
Jetzt Virtuelle Festplatte erstellen: so minimum 20GB reicht eig
dann Fertig stellen und auf Ändern gehen
Netzwerk / Netzwerkbrücke auf den angeschlossenen Ethernet adapter einstellen, Bedenkt bitte Wlan = Ultra langsam zum local connecten etc.
danach Doppelklicken die VDI und starten den laden
mit STRG kann man die Maus wieder rausbekommen
irgendwann landet ihr da
Dort einfach Enter auf Install
dann wählt ihr euer Keyboardlayout aus
in meinem falle German,
Einmal Enter dann Pfeiltaste hoch auf Continue with DE keyboard layout
dann nen nutzernamen für den user root festlegen ich nehm da immer Home
Dann kommt ihr zu diesem Menü, Bitte installiert sämtliche libs mit ihr könnt dort dass mit leerzeichen quasi adden / ankreuzen danach Enter um fortzufahren
dann kommt ne meldung oder so einfach enter drücken,
dann muss das netzwerk eingerichtet werden
Would you like to configure IPv4 for this Interface?
YES
Would you like to use DHCP to confugre this interface?
YES
IPv6 brauchen wir nicht wenn wir darüber nur m2 betreiben wollen bzw ne db dazu, nicht nötig
dann erkennt der euer netzwerk
da einfach Enter
dann kommt die Festplatten-Partitionen einrichtung
da wollen wir ZFS wählen das quasi der Standart
Enter
Enter
Enter
[IMG=expandable: 1]
[/IMG]
dann die Virtuelle festplatte auswählen mit Leertaste auch Ankreuzen
Last Chance Blablabla unintressant ja klar wollt ihr das YES und Enter
Dann zeigt er euch die Möglichen BSD Bibliotheken die in der Nähe sind wählt den aus der für euch am besten erreichbar ist ansonsten einfach den ftp.freebsd.org man kanns später auch noch umändern i.d.r. benötigt ihr das aber nicht
irgendwann landet ihr da:
dort sagt er euch das ihr ein passwort eintippen müsst bedenkt folgendes wenn ihr was eintippt das passwort was ihr setzt ist unsichtbar d.h. ihr tippt was ein ohne es zu sehen. setzt erstmal blind ein passwort, Lokal ists eh egal in meinem falle nehm ich einfach dev als passwort
dann Zeitzone setzen und Uhrzeit
in meinem falle Europe
German
most of Germany
"Does CEST look hablabla" YES
dann kommt ihr auf die uhrzeit da bitte auch pfeiltaste lins paar mal und die zwei stunden zurückstellen, kann manchmal zu asyncfehlern im bsdsystem führen undso also deshalb gleich richtig machen
hier einfach ENTER
Da auch
Would you like to add User? Da wir Lokal arbeiten Nö
dann zuletzt kommt ihr in so n hauptmenü kurz als überblick, da wir allerdings fertig sind können wir auf Exit gehen
danach auf NO
danach kommt ein Fenster mit Reboot,
STRG drücken
dann müsst ihr von dem fenster unten am rand ist ein CD symbol rechtsklick drücken und die Iso auswerfen
wenn ihr schnell seit genau da wo ihr dieses virtualbox gedöns seht ansonsten danach
solltet ihr zu spät sein einfach die maschine nachdem ihr die iso ausgeworfen habt zurücksetzen / neustarten
Wenn ihr alles richtig gemacht habt könnt ihr euch einloggen mit dem nutzer root und dem pw dev bzw dem was ihr euch gesetzt habt
Herzlichen Glühstrumpf ihr habt BSD installiert
dann hab ich diese Iso gewählt:

Mind Ram 4GB (Dev Server 4Threads wär gut)
Jetzt Virtuelle Festplatte erstellen: so minimum 20GB reicht eig
dann Fertig stellen und auf Ändern gehen
Netzwerk / Netzwerkbrücke auf den angeschlossenen Ethernet adapter einstellen, Bedenkt bitte Wlan = Ultra langsam zum local connecten etc.
danach Doppelklicken die VDI und starten den laden
mit STRG kann man die Maus wieder rausbekommen
irgendwann landet ihr da
Dort einfach Enter auf Install
dann wählt ihr euer Keyboardlayout aus
in meinem falle German,
Einmal Enter dann Pfeiltaste hoch auf Continue with DE keyboard layout
dann nen nutzernamen für den user root festlegen ich nehm da immer Home
Dann kommt ihr zu diesem Menü, Bitte installiert sämtliche libs mit ihr könnt dort dass mit leerzeichen quasi adden / ankreuzen danach Enter um fortzufahren
dann kommt ne meldung oder so einfach enter drücken,
dann muss das netzwerk eingerichtet werden
Would you like to configure IPv4 for this Interface?
YES
Would you like to use DHCP to confugre this interface?
YES
IPv6 brauchen wir nicht wenn wir darüber nur m2 betreiben wollen bzw ne db dazu, nicht nötig
dann erkennt der euer netzwerk
da einfach Enter
dann kommt die Festplatten-Partitionen einrichtung
da wollen wir ZFS wählen das quasi der Standart
Enter
Enter
Enter
[IMG=expandable: 1]
[/IMG]dann die Virtuelle festplatte auswählen mit Leertaste auch Ankreuzen
Last Chance Blablabla unintressant ja klar wollt ihr das YES und Enter
Dann zeigt er euch die Möglichen BSD Bibliotheken die in der Nähe sind wählt den aus der für euch am besten erreichbar ist ansonsten einfach den ftp.freebsd.org man kanns später auch noch umändern i.d.r. benötigt ihr das aber nicht
irgendwann landet ihr da:
dort sagt er euch das ihr ein passwort eintippen müsst bedenkt folgendes wenn ihr was eintippt das passwort was ihr setzt ist unsichtbar d.h. ihr tippt was ein ohne es zu sehen. setzt erstmal blind ein passwort, Lokal ists eh egal in meinem falle nehm ich einfach dev als passwort
dann Zeitzone setzen und Uhrzeit
in meinem falle Europe
German
most of Germany
"Does CEST look hablabla" YES
dann kommt ihr auf die uhrzeit da bitte auch pfeiltaste lins paar mal und die zwei stunden zurückstellen, kann manchmal zu asyncfehlern im bsdsystem führen undso also deshalb gleich richtig machen
hier einfach ENTER
Da auch
Would you like to add User? Da wir Lokal arbeiten Nö
dann zuletzt kommt ihr in so n hauptmenü kurz als überblick, da wir allerdings fertig sind können wir auf Exit gehen
danach auf NO
danach kommt ein Fenster mit Reboot,
STRG drücken
dann müsst ihr von dem fenster unten am rand ist ein CD symbol rechtsklick drücken und die Iso auswerfen
wenn ihr schnell seit genau da wo ihr dieses virtualbox gedöns seht ansonsten danach
solltet ihr zu spät sein einfach die maschine nachdem ihr die iso ausgeworfen habt zurücksetzen / neustarten
Wenn ihr alles richtig gemacht habt könnt ihr euch einloggen mit dem nutzer root und dem pw dev bzw dem was ihr euch gesetzt habt
Herzlichen Glühstrumpf ihr habt BSD installiert
Wenn ihr nen VPS / Root Server nutzen wollt
Wenn ihr das ganze mit anderen Leuten zusammen auf einen Server machen wollt Müsst ihr euch im klaren seid, das Ihr euch dafür einen Rootserver holen solltet. Damals war noch sowas wie Hamachi Tunneling software ein Thema allerdings leben wir im Jahr 2025 wir wollen es uns so einfach wie möglich machen nicht so krampfhaft schlimm wie es nur geht.
Es gibt einen Haufen an Rootserveranbietern, Welcher jetzt der richtige ist liegt ganz an der Erfahrung der Nutzer selbst, Wenn ihr euch nicht sicher seid Welchen ihr für eine Testserverinstanz nehmen könnt, Fragt einfach die Leute hier im Forum die etwas länger dabei sind, und gelegentlich hier aktiv sind.
Ich hatte damals meine Server alle bei Fastpipe.io allerdings sind die inzwischen tot deswegen host ich alles daheim da ich das eh nur für privatzwecke mache,
Fragt bitte bei den Nutzern generell nach wo die Hosten das ändert sich alle paar Monate sowieso, Hetzner sehr zu empfehlen ansonsten Wüsst ich auch auf anhieb nicht wo da ich sowas wie erwähnt selbst meist hoste.
Ihr wollt haben 4gb ram 2-4 Kerne
SSD 20gb+
Mehr braucht ihr ned
Ich hatte 2016-17 nen server mit 200-1000 spieler und hatte nen durchschnittlichen ram verbrauch auf 6 Channel von 11GB ram
Solltet ihr einen anbieter haben Bedenkt das ihr nach dem Installieren eine Direkte verbindung haben wollt zu dem Server heißt VNC oder Ähnliches, Bei hetzner hat man beispielsweise n Extra Browserfenster wo man das direkt verwalten kann.
sowie ihr im FreeBSD seid müsst ihr noch folgende sachen einstellen
nun öffnet sich ein interner Editor von BSD selbst dort angekommen wollt ihr mit Pfeiltasten zu folgende Zeilen navigieren
#PermitRootLogin no
finden, dieses kommentieren wir aus und setzen das 'no' auf 'yes'
das selbe tun wir bei PasswordAuthentication
und ebenfalls bei UsePAM
nun drückt ihr ESC
es erscheint
Enter leave editor
Saven all Enter
Danach tippen wir ein
service sshd restart
nun solltet ihr auf euern Server mittels sftp-Client draufkommen können
Weiter zu Schritt 2
Nun da wir jetzt erfolgreich das Betriebssystem eingerichtet haben müssen wir uns mittels sftp drauf verbinden
Bei root anbietern findet ihr die IP adresse meist in einem Panel / Dashboard oder in der Mail wo ihr euer passwort und den nutzer zur verfügung bekommt
Bei lokalen maschinen kann man einfach ifconfig eintippen
in meinem falle steht dann da 192.168.0.79
dann kommt n Fingerprint abfrage gedöns einfach auf Ja oder Ok oder was auch immer.
ihr geht auf die zwei punkte da und seid dann somit im hauptverzeichnis
Ihr drückt STRG + ALT + P
geht auf anwendungen
Putty.exe sollte bitte hinterlegt sein, falls nicht putty runterladen und in den pfad: C:\Program Files (x86)\putty legen
Sitzungspasswort merken (weil wir sind faul)
dann könnt ihr noch den Editor wechseln dazu einfach:
drückt hier drauf um eine neue PuTTY Sitzung zu öffnen
Lokal dauert das connecten immer ein bisschen.
nun tippen wir folgendes ein
freebsd-update fetch [ENTER]
Dann kommt ihr irgendwann ein punkt wo ihr mit pfeiltasten navigieren könnt bzw da steht so ein END und am ende ein :
einfach paar mal q drücken bzw strg q bzw : q dann sollte das weg sein
freebsd-update install [ENTER]
der ballert dann mashallah sein Vater Updates durch je nach Power des betriebssystems kann das etwas dauern
nun tippen wir ein
pkg install gmake
hier fragt er uns ob er das programm pkg installieren darf wir schreiben y zum bestätigen und drücken Enter
"pkg = package = programm, das quasi der paketmanager unter bsd"
daraufhin fragt er uns ob wir gmake installieren wollen da auch wieder y und Enter
pkg install python
y
ENTER
"optional mach ich aber immer"
pkg install htop
y
ENTER
nun kommt ein part den hasse ich wie die Pest:
damals gab es Mysql56 Server funktionieren größtenteils auch noch unter der version Mysql56 Ich empfehle das absolut nicht,
Leider sind fast alle Serverfiles noch auf sql56 aufgebaut.
Ich zeige euch definitiv nicht wie man 2025 sql 56 nutzen tut ich selbst nutze lokal mariadb10.+
heutzutage nutzt man sql80
Ich werd das hier aufsetzen in dem Tutorial die files sind aber absolut nicht darauf angepasst dementsprechend muss man das bei allen queries halt machen, Wie das geht, Im Serversource nach denen Suchen und anpassen.
pkg install mysql80-server
y
danach ee /etc/rc.conf
dort unten mysql_enable="YES"
danach ESC drücken leave, save all
nun müssen wir den sql server starten
service mysql-server start
danach kurz warten
mysql -u root
nun müssen wir nen sql user anlegen
Bedenkt das es Sehr davon abhängt welche sql version ihr installiert in meinem falle wars sql 80
use mysql; [ENTER]
CREATE USER 'root'@'%' IDENTIFIED BY 'DeinKrassesPasswort';
FLUSH PRIVILEGES;
Quit;
wichtig ist dem user root@% das gibt dann quasi den Root user nach außen frei.
nun beim connecten müssen wir ssh auswählen
Anscheinend ist das so ab sql 80
ab hier habt ihr nun sql zugriff, nun könnt ihr dann dementsprechend die tabellen einfügen von euren serverfiles
da gibts halt einige strukturen hier als beispielsweise
die von Marty
hier n beispiel von Fliege
Demensprechend habt ihr entweder .sql dateien die ihr dann dort einfügen müsst oder ganze mysql.tar.gz die ihr dann mittels in bsd tar -xf archivname.tar.gz entpacken müsst
bedenkt bitte das wenn ihr passwörter einstellen wollt die in der account/account table zu finden sind meistens in md5 sind
damit könnt ihr passende Passwörter generieren dann, der erstellt euch das passende Hash dazu

Gamesrc
Jenach Files habt ihr ein Serverarchiv / oder mehrere welche in dem Home verzeichnis gelegt werden können
bei Fliege V2 ists in /usr/ dort die home.tar.gz legen und entpacken mit tar -xf home.tar.gz
bei Fliege V3 ists im hauptverzeichnis die home.tar.gz hinlegen und dann einfach tar -xf home.tar.gz machen
bei Marty hab ichs aufgegeben der macht sein ganz eigenes ding
Da ich die Nase ja nie erreiche kann ich euch nur sagen das er die verzeichnisse im home verzeichnis hat
Was auch immer ihr wählt, Ihr solltet dann ein Homeverzeichnis vor euch finden mit den Serverfiles sowie die Sourcefiles
wir wollen zunächst in die source files und diese alle durchcompilen
Bei Fliege V2 & 3 Bsd
gehen wir dazu in /usr/home/source/server/ und compilen alle libs zunächst durch
cd /usr/home/source/server/libpoly/src && gmake -j4
cd /usr/home/source/server/libthecore/src && gmake -j4
cd /usr/home/source/server/libsql/src && gmake -j4
cd /usr/home/source/server/libgame/src && gmake -j4
danach game und db
cd /usr/home/source/server/game/src && gmake -j4
cd /usr/home/source/server/db/src && gmake -j4
sollten dort Fehler auftauchen müsst ihr diese beheben / debuggen
sollten diese durchlaufen habt ihr sowas hier
Je nach files muss man diese Erstellten dateien namens game und db an die passenden stellen verschieben oder die verknüpfungen in den Channeln passend erstellen.
nun müssen wir nur noch den Server starten und darauf achten das in den Configs der Channel auch die Datenbankzugriffe richtig stehen
Jenachdem Wie ihr das eingestellt habt müsst ihr das halt einstellen, In jedem Channel gibts mehrere cores
Ein Core beinhaltet immer eine spezifische anzahl an Maps das dafür sorgt, sollte euer Server mal Wegen einer Map crashen, crasht nicht der komplette server sondern nur ein Core.
die Configs die ihr anpassen müsst sind DB , Auth , Ch1 Core 1-X , CH99
sollte dies alles geschehen sein habt ihr im hauptverzeichnis entweder eine start.py oder eine index.sh oder ein panel.sh
wenn sh müsst ihr ins verzeichnis und dann sh dateiname.sh in bsd eintippen
wenn .py dann python dateiname.py und danach starten.
voila
Bei root anbietern findet ihr die IP adresse meist in einem Panel / Dashboard oder in der Mail wo ihr euer passwort und den nutzer zur verfügung bekommt
Bei lokalen maschinen kann man einfach ifconfig eintippen
in meinem falle steht dann da 192.168.0.79
dann kommt n Fingerprint abfrage gedöns einfach auf Ja oder Ok oder was auch immer.
ihr geht auf die zwei punkte da und seid dann somit im hauptverzeichnis
Ihr drückt STRG + ALT + P
geht auf anwendungen
Putty.exe sollte bitte hinterlegt sein, falls nicht putty runterladen und in den pfad: C:\Program Files (x86)\putty legen
Sitzungspasswort merken (weil wir sind faul)
dann könnt ihr noch den Editor wechseln dazu einfach:
drückt hier drauf um eine neue PuTTY Sitzung zu öffnen
Lokal dauert das connecten immer ein bisschen.
nun tippen wir folgendes ein
freebsd-update fetch [ENTER]
Dann kommt ihr irgendwann ein punkt wo ihr mit pfeiltasten navigieren könnt bzw da steht so ein END und am ende ein :
einfach paar mal q drücken bzw strg q bzw : q dann sollte das weg sein
freebsd-update install [ENTER]
der ballert dann mashallah sein Vater Updates durch je nach Power des betriebssystems kann das etwas dauern
nun tippen wir ein
pkg install gmake
hier fragt er uns ob er das programm pkg installieren darf wir schreiben y zum bestätigen und drücken Enter
"pkg = package = programm, das quasi der paketmanager unter bsd"
daraufhin fragt er uns ob wir gmake installieren wollen da auch wieder y und Enter
pkg install python
y
ENTER
"optional mach ich aber immer"
pkg install htop
y
ENTER
nun kommt ein part den hasse ich wie die Pest:
damals gab es Mysql56 Server funktionieren größtenteils auch noch unter der version Mysql56 Ich empfehle das absolut nicht,
Leider sind fast alle Serverfiles noch auf sql56 aufgebaut.
Ich zeige euch definitiv nicht wie man 2025 sql 56 nutzen tut ich selbst nutze lokal mariadb10.+
heutzutage nutzt man sql80
Ich werd das hier aufsetzen in dem Tutorial die files sind aber absolut nicht darauf angepasst dementsprechend muss man das bei allen queries halt machen, Wie das geht, Im Serversource nach denen Suchen und anpassen.
pkg install mysql80-server
y
danach ee /etc/rc.conf
dort unten mysql_enable="YES"
danach ESC drücken leave, save all
nun müssen wir den sql server starten
service mysql-server start
danach kurz warten
mysql -u root
nun müssen wir nen sql user anlegen
Bedenkt das es Sehr davon abhängt welche sql version ihr installiert in meinem falle wars sql 80
use mysql; [ENTER]
CREATE USER 'root'@'%' IDENTIFIED BY 'DeinKrassesPasswort';
FLUSH PRIVILEGES;
Quit;
wichtig ist dem user root@% das gibt dann quasi den Root user nach außen frei.
nun beim connecten müssen wir ssh auswählen
Anscheinend ist das so ab sql 80
ab hier habt ihr nun sql zugriff, nun könnt ihr dann dementsprechend die tabellen einfügen von euren serverfiles
da gibts halt einige strukturen hier als beispielsweise
die von Marty
hier n beispiel von Fliege
Demensprechend habt ihr entweder .sql dateien die ihr dann dort einfügen müsst oder ganze mysql.tar.gz die ihr dann mittels in bsd tar -xf archivname.tar.gz entpacken müsst
bedenkt bitte das wenn ihr passwörter einstellen wollt die in der account/account table zu finden sind meistens in md5 sind
damit könnt ihr passende Passwörter generieren dann, der erstellt euch das passende Hash dazu

Gamesrc
Jenach Files habt ihr ein Serverarchiv / oder mehrere welche in dem Home verzeichnis gelegt werden können
bei Fliege V2 ists in /usr/ dort die home.tar.gz legen und entpacken mit tar -xf home.tar.gz
bei Fliege V3 ists im hauptverzeichnis die home.tar.gz hinlegen und dann einfach tar -xf home.tar.gz machen
bei Marty hab ichs aufgegeben der macht sein ganz eigenes ding
Da ich die Nase ja nie erreiche kann ich euch nur sagen das er die verzeichnisse im home verzeichnis hat
Was auch immer ihr wählt, Ihr solltet dann ein Homeverzeichnis vor euch finden mit den Serverfiles sowie die Sourcefiles
wir wollen zunächst in die source files und diese alle durchcompilen
Bei Fliege V2 & 3 Bsd
gehen wir dazu in /usr/home/source/server/ und compilen alle libs zunächst durch
cd /usr/home/source/server/libpoly/src && gmake -j4
cd /usr/home/source/server/libthecore/src && gmake -j4
cd /usr/home/source/server/libsql/src && gmake -j4
cd /usr/home/source/server/libgame/src && gmake -j4
danach game und db
cd /usr/home/source/server/game/src && gmake -j4
cd /usr/home/source/server/db/src && gmake -j4
sollten dort Fehler auftauchen müsst ihr diese beheben / debuggen
sollten diese durchlaufen habt ihr sowas hier
Je nach files muss man diese Erstellten dateien namens game und db an die passenden stellen verschieben oder die verknüpfungen in den Channeln passend erstellen.
nun müssen wir nur noch den Server starten und darauf achten das in den Configs der Channel auch die Datenbankzugriffe richtig stehen
Jenachdem Wie ihr das eingestellt habt müsst ihr das halt einstellen, In jedem Channel gibts mehrere cores
Ein Core beinhaltet immer eine spezifische anzahl an Maps das dafür sorgt, sollte euer Server mal Wegen einer Map crashen, crasht nicht der komplette server sondern nur ein Core.
die Configs die ihr anpassen müsst sind DB , Auth , Ch1 Core 1-X , CH99
sollte dies alles geschehen sein habt ihr im hauptverzeichnis entweder eine start.py oder eine index.sh oder ein panel.sh
wenn sh müsst ihr ins verzeichnis und dann sh dateiname.sh in bsd eintippen
wenn .py dann python dateiname.py und danach starten.
voila
3. Clientsrc compilen
Wir gehen nun in unseren Clientsrc
Dazu benutzen wir Visual Studio 2022+ mit dem vstoolset für 2019, und C++ parts vorinstalliert.
Toolset V143 geht für die meisten alles davor ist Old 142 war so stand 2019+-
wir gehen nun in unsere clientsrc und öffnen die Client.sln
Dort wo Debug steht stellen wir auf Release
Dort wo x64 steht stellen wir auf x86
Danach markieren wir einfach alles auf der rechten Seite im explorer
und drücken strg + shift + b
nun haben wir im pfad ...\Source\Client\bin\Release die Dump_proto.exe und im Client - Ordner eine neue Metin2Release.exe
somit haben wir erfolgreich unseren Clientsrc compiled
4. Pack Dateien bearbeiten, Einloggen
gehen wir nun im Client in den Pack Ordner
hier finden wir eine EterPackConsoleLz4.exe eine Index datei, ne menge .epk und gleichviele .eix
Sogut wie alle Clients sind im selbem Schema aufgebaut, es gibt immer eine Schlüssel-Datei und eine Datei die alles beinhaltet, ergo beide Dateien aggieren miteinander,
wir benötigen die root.eix und ziehen die auf die EterPackConsoleLz4.exe danach erscheint ein Fenster wo man erkennt das er die datei entpackt.
(solltet ihr keine haben kann es das es PackMakerLite irgendwo gibt das man installieren kann, Somit kann man dann via rechtsklick auf die schlüsseldatei (eix) klicken und die dann entpacken)
(Theoretisch kann man alle .eix dateien markieren und sie gleichzeitig auf die .exe ziehen)
Sobald er durch ist sollte der entpackte ordner im Selben verzeichnis erscheinen
in diesem finden wir die Serverinfo.py
Dort passen wir nun unsere ip an die uns der Root / Die VM vorgibt.
also unter SERVER1_CHANNEL_DICT
MARKADDR_DICT
die korrekte ip eintragen, abspeichern und anschließend den ordner namens root auf die EterPackConsoleLz4.exe ziehen.
nun können wir unseren clienten also die Metin2Release.exe starten und uns einloggen
hier finden wir eine EterPackConsoleLz4.exe eine Index datei, ne menge .epk und gleichviele .eix
Sogut wie alle Clients sind im selbem Schema aufgebaut, es gibt immer eine Schlüssel-Datei und eine Datei die alles beinhaltet, ergo beide Dateien aggieren miteinander,
wir benötigen die root.eix und ziehen die auf die EterPackConsoleLz4.exe danach erscheint ein Fenster wo man erkennt das er die datei entpackt.
(solltet ihr keine haben kann es das es PackMakerLite irgendwo gibt das man installieren kann, Somit kann man dann via rechtsklick auf die schlüsseldatei (eix) klicken und die dann entpacken)
(Theoretisch kann man alle .eix dateien markieren und sie gleichzeitig auf die .exe ziehen)
Sobald er durch ist sollte der entpackte ordner im Selben verzeichnis erscheinen
in diesem finden wir die Serverinfo.py
Dort passen wir nun unsere ip an die uns der Root / Die VM vorgibt.
also unter SERVER1_CHANNEL_DICT
MARKADDR_DICT
die korrekte ip eintragen, abspeichern und anschließend den ordner namens root auf die EterPackConsoleLz4.exe ziehen.
nun können wir unseren clienten also die Metin2Release.exe starten und uns einloggen
Dateierklärungen im Server
Channel 1 / 99 / Loginserver
Gehen wir beispielsweise in den Channel 1 sehen wir 3 Ordner vor namens Core1-3.
Channel generell sollten eigentlich immer wenn möglich in einzelne Cores unterteilt werden dies macht man damit falls beispielsweise irgendwelche Fehler auftreten sollten, nicht der komplette Channel sondern nur der Core maximal davon betroffen ist, ggf schmiert nur dieser einzelnd ab, Auch hats noch ein paar andere punkte aber generell macht man das so.
Ausserdem erleichtert das die Fehlersuche um nicht immer zig milliarden Errormeldungen durchzusuchen oder generell Logs.
data, log und share sowie game sind jeweils verknüpfungen
CONFIG ist die wohl wichtigste datei
HTML Code:
HOSTNAME: channel1_core1 #Name des Cores CHANNEL: 1 #Name des Channels PORT: 13001 #tcp einlogg port P2P_PORT: 14001 #interner serverport DB_PORT: 15000 #port für den core zu Datenbank DB_ADDR: localhost #Datenbank ip adresse, hier kann theoretisch auch eine ip stehen MAP_ALLOW: 1 21 41 3 23 43 4 6 24 26 44 46 151 152 153 #Hier stehen alle erlaubten Map index Zahlen, welche maps er laden soll PASSES_PER_SEC: 25 #Zyklus des Servers, Ändert ihr die Zahl ändern sich auch die Ablaufzeiten von Skills oder Beispielsweise von Items / Mounts o.ä. SAVE_EVENT_SECOND_CYCLE: 180 #Wie oft soll der Core die Spieler in die DB reinschreiben pro Zyklus PING_EVENT_SECOND_CYCLE: 180 #Wie oft soll der Core die Spieler anpingen und auf Timeout`s / Kicks checken SQL_PLAYER: localhost root admin player SQL_COMMON: localhost root admin common SQL_LOG: localhost root admin log #Die 3 SQL Tabellenzugriffe für den Core, localhost = ip, root = user, admin = passwort, player/common/log = tabellen NO_PK: 1 #Aktiviert den PvP Schutz auf dem aktuellem Core VIEW_RANGE: 8000 #Reichweite der Sichtbarkeit von Monstern / Entities / NPC"s, sollte auf 8000 bleiben MAX_LEVEL: 200 # Maximales Level auf dem Core MARK_SERVER: 1 #Gildenlogos werden angezeigt = 1 , Gildenlogos werden nicht sichtbar = 0 TEST_SERVER: 0 #Gibt allen Spielern automatisch vollen GM zugriff auf dem jeweiligem Core und erlaubt die Einsicht aller aggierenden Logs Live ingame
PTS ist der aktuelle Heartbeat des Core`s
In Syserr stehen alle Fehler die im Core auftauchen, Ergo falls der Server irgendwelche Fehler hat, stehen diese hier drin.
Die Syslog beinhaltet generell Alles der aktuellen Stunde des Cores als Logfile, Alles was der Core machen muss wird in diese Datei niedergeschrieben , wenn Fehler auftauchen die in der Syserr nicht auftauchen stehen die oftmals auch in der Log drin.
Datenbank
Der Datenbankordner beinhaltet folgende Dateien
conf.txt
item_names.txt
item_proto.txt
mob_names.txt
mob_proto.txt
steht NO_TXT auf 0 werden diese 4 dateien für Item und mob proto genutzt anstatt sql / player / mob_proto und item_proto
TXT Flags / AntiFlags etc
Proto Flags
ApplyBonusListe
PS: Bei Stäben nimmt man den Bonus BELL also glocke
share ordner
conf.txt
HTML Code:
WELCOME_MSG = "DB Server has been started" // Wilkommensnachricht im Server / in Putty SQL_PLAYER = "localhost player root xxx 0" SQL_ACCOUNT = "localhost account root xxx 0" SQL_COMMON = "localhost common root xxx 0" SQL_XXX = SQL TABELLE, localhost ist die ip, player/account/common die SQL tabelle, root der user, xxx das passwort, 0 halt 0) TABLE_POSTFIX = "" NO_TXT = 1 ist No TXT auf 1 wird die Item und Mob_proto variante SQL genutzt ist No TXT auf 0 wird die Item und Mob_proto variante txt genutzt BIND_PORT = 15000 Der datenbank port DB_SLEEP_MSEC = 10 wie viele milisekunden die db zum ausruhen nach aktionen zeit hat CLIENT_HEART_FPS = 10 Zyklus vom Db Cache Server HASH_PLAYER_LIFE_SEC = 600 BACKUP_LIMIT_SEC = 3600 PLAYER_ID_START = 100 Erste zu benutzende Player Id PLAYER_DELETE_LEVEL_LIMIT = 99 maximallevel bevor man spieler nichtmehr löschen kann PLAYER_DELETE_CHECK_SIMPLE = 1 ITEM_ID_RANGE = 2000000000 2100000000 Setzt fest welche Range die Items Ids von den Playern haben MIN_LENGTH_OF_SOCIAL_ID = 6 mind länge des löschcodes
item_names.txt
item_proto.txt
mob_names.txt
mob_proto.txt
steht NO_TXT auf 0 werden diese 4 dateien für Item und mob proto genutzt anstatt sql / player / mob_proto und item_proto
TXT Flags / AntiFlags etc
| Wert | Beschreibung | Wertmöglichkeiten | Spalte |
|---|---|---|---|
| ITEM번호 | VNUM bzw Nummer des Items | 1-150000 | A |
| ITEM_NAME | Irrelevant am besten so lassen wie es ist | Àå°Ë | B |
| ITEM_TYPE | legt fest ob das eine Waffe eine Rüstung oder ein Quest-Item oder oder .... | ITEM_USE , ITEM_WEAPON , ITEM_ARMOR ,ITEM_BELT , ITEM_COSTUME , ITEM_MATERIAL , ITEM_GIFTBOX | C |
| SUB_TYPE | Genauere Definierung des ItemTypes | COSTUME_BODY , USE_SPECIAL , USE_TUNING , METIN_NORMAL,USE_INVISIBILITY , FISH_ALIVE , FISH_DEAD , RESOURCE_FISHBONE, USE_ABILITY_UP , USE_POTION , ARMOR_BODY , ARMOR_EAR , ARMOR_NECK, ARMOR_SHIELD , ARMOR_HEAD,ARMOR_WRIST , ARMOR_FOOTS , WEAPON_BOW,WEAPON_DAGGER , WEAPON_TWO_HANDED , WEAPON_SWORD | D |
| SIZE | Anzahl an Itemslots welche das Item belegt | 1-3 | E |
| ANTI_FLAG | Hier werden die Anti Flags gesetzt was der Charakter mit dem Item NICHT darf | ANTI_MUDANG (Anti Schamane) , ANTI_MUSA (Anti Krieger) , ANTI_ASSASSIN (Anti Ninja) , ANTI_SURA (Anti Sura), ANTI_DROP , ANTI_SELL , ANTI_GIVE , ANTI_MYSHOP , ANTI_WOLFMAN, ANTI_STACK | F |
| Flag | Hier werden die Flags gesetzt was mit dem Item alles gemacht werden darf | ITEM_TUNABLE , ITEM_STACKABLE , LOG , CONFIRM_WHEN_USE | G |
| ITEM_WEAR | Der platz wo es getragen werden soll NONE falls es nicht getragen werden soll | WEAR_SHIELD , WEAR_WEAPON , WEAR_BODY , WEAR_EAR ,WEAR_NECK , WEAR_UNIQUE , WEAR_WRIST , WEAR_HEAD , WEAR_FOOTS | H |
| IMMUNE | ein überbleibsel von MobProto Flags am besten leer lassen | NONE | I |
| ìƒì íŒë§¤ê°€ | Verkaufswert bei Händlern | 100-14999999 | J |
| ìƒì ì—서 ì‚´ 때 | Kaufwert bei Händlern | 100-14999999 | K |
| REFINE | Das Item was aus dem Uppvorgang als Ergebnis rauskommt | 1 - 900000 | L |
| REFINESET | Den Uppvorgang den er für das Item benutzt (definiert unter mysql / player / refine_proto ) | 1-900000 | M |
| MAGIC_PCT | Ob das Item einen Bonus beim Droppen hat oder nicht | 0 = 0% bonus , 100 = 100% einen random Bonus | N |
| LIMIT_TYPE0 | Erster Limit type für Beispielsweise Levelbegrenzungen oder Zeitablaufend | LIMIT_NONE , LEVEL , REAL_TIME | O |
| LIMIT_VALUE0 | Den Wert zum LIMIT_TYPE0 | 0-900000 | P |
| LIMIT_TYPE01 | Zweiter Limit type für Beispielsweise Levelbegrenzungen oder Zeitablaufend | LIMIT_NONE , LEVEL , REAL_TIME | Q |
| LIMIT_VALUE1 | Den Wert zum LIMIT_TYPE1 | 0-900000 | R |
| ADDON_TYPE0 | StandartBonus des Items NR1 | Apply Bonus liste seht ihr die möglichkeiten; APPLY_NONE falls keiner vorhanden sein soll | S |
| ADDON_VALUE0 | Der Wert von ADDON_TYPE0 | 0-32000 | T |
| ADDON_TYPE01 | StandartBonus des Items NR2 | Apply Bonus liste seht ihr die möglichkeiten; APPLY_NONE falls keiner vorhanden sein soll | U |
| ADDON_VALUE1 | Der Wert von ADDON_TYPE01 | 0-32000 | V |
| ADDON_TYPE02 | StandartBonus des Items NR3 | Apply Bonus liste seht ihr die möglichkeiten; APPLY_NONE falls keiner vorhanden sein soll | W |
| ADDON_VALUE2 | Der Wert von ADDON_TYPE02 | 0-32000 | X |
| VALUE0 | Wird beispielsweise für Potions genutzt oder Gürtel | 0-32000 | Y |
| VALUE1 | Angriffswert magisch Min "glaub ich?" | 0-32000 | Z |
| VALUE2 | Angriffswert magisch Max "glaub ich?" | 0-32000 | AA |
| VALUE3 | Bei Rüstungen, Der wert für die MSM, Bei Waffen Angriffswert min "glaub ich?" | 0-32000 | AB |
| VALUE4 | Bei Waffen Angriffswert max "glaub ich?" | 0-32000 | AC |
| VALUE5 | Angriffswert der flat oben drauf kommt, Bzw defensivwert bei rüstungen | 0-32000 | AD |
| Specular | Glanzwert der Rüstung oder Waffe / Modelwert Shapeindexwert für Effekte | 0-99999 | AE |
| SOCKET | wie viele Geissteinplätze er haben soll | 0-3 | AF |
| ATTU_ADDON | -1 wenn DSS oder FKS drauf switchbar sein soll | 0 oder -1 | AG |
Proto Flags
| Value | Erklärung |
|---|---|
| ITEM_WEAPON | Sagt aus dass das Item eine Waffe ist |
| WEAPON_SWORD | Sagt aus dass das Item ein Schwert ist |
| WEAPON_DAGGER | Sagt aus dass das Item Dolche sind |
| WEAPON_BOW | Sagt aus dass das Item ein Bogen ist |
| WEAPON_TWO_HANDED | Sagt aus dass das Item eine Zweihandwaffe ist |
| ITEM_TUNABLE | Dieses Item kannst du mithilfe von Gegenstand Verzaubern/Verstärken bearbeiten |
| ANTI_MUDANG | Dieses Item soll nicht von Schamanen getragen werden |
| WEAR_WEAPON | Dieses Item soll im Waffenslot getragen werden |
| LIMIT_NONE | Dieses Item hat keine Limitierung |
| ANTI_ASSASSIN | Dieses Item kann nicht von einem Ninja getragen werden |
| ANTI_MUSA | Dieses Item kann nicht von einem Krieger getragen werden |
| ANTI_SELL | Dieses Item kann nicht verkauft werden |
| ANTI_SURA | Dieses Item kann nicht von einem Sura getragen werden |
| ITEM_STACKABLE | Dieses Item soll sich Stacken können |
| ITEM_QUEST | Dieses Item spricht auf Quests aus dem Questordner an |
| ANTI_DROP | Dieses Item kannst du nicht fallenlassen |
| ANTI_GIVE | Dieses Item kannst du nicht Handeln |
| ANTI_MYSHOP | Dieses Item kannst du nicht in einen Privatshop tun |
| ANTI_WOLFMAN | Dieses Item kann der Lykaner nicht tragen |
| WEAPON_BELL | Sagt aus dass das Item eine Glocke ist |
| WEAPON_FAN | Sagt aus dass das Item ein Fächer ist |
| WEAPON_MOUNT_SPEAR | Sagt aus dass das Item ein Besonderer Speer ist, (gibt ein Item mit dem Attribut das ist die Lanze) |
| ITEM_ARMOR | Sagt aus dass das Item eine Rüstungteil ist |
| ARMOR_BODY | Sagt aus dass das Item ein Brustschutz ist, bzw ein Panzer, eine Kleidung oder ein Anzug |
| WEAR_BODY | Dieses Item wird im Rüstungsslot getragen |
| ARMOR_HEAD | Dieses Item ist ein Helm |
| WEAR_HEAD | Dieses Item wird im Helmslot getragen |
| ARMOR_WRIST | Dieses Item ist ein Armband |
| WEAR_WRIST | Dieses Item wird im Armbandslot getragen |
| ARMOR_EAR | Dieses Item sind Ohrringe |
| WEAR_EAR | Dieses Item wird im Ohrringslot getragen |
| ARMOR_SHIELD | Dieses Item ist ein Schild |
| WEAR_UNIQUE | Dieses Item wird im Schildslot getragen |
| ARMOR_NECK | Dieses Item ist eine Halskette |
| WEAR_NECK | Dieses Item wird im Halskettenslot getragen |
| ARMOR_FOOTS | Dieses Item sind Schuhe |
| WEAR_FOOTS | Dieses Item wird im Schuhslot getragen |
| ITEM_BELT | Dieses Item ist ein Gürtel |
| ITEM_USE | Dieses Item kann man Benutzen und verschwindet danach |
| USE_PUT_INTO_BELT_SOCKET | Dieses Item benutzt man um Sockel in den Gürtel einzufügen |
| USE_TALISMAN | Dieses Item benutzt man als Talisman |
| USE_DETACHMENT | Dieses Item benutzt man um Geiststeine aus einem Item zu entfernen |
| USE_POTION | Dieses Item ist ein Trank |
| ITEM_SLOW_QUERY | Dieses Item wird in die Serverquery geloggt allerdings erst nach einiger Zeit |
| USE_ABILITY_UP | Dieses Item erhöht temporär oder Permanent die Angegebenen Stats |
| ITEM_CAMPFIRE | Dieses Item wird benutzt zum rufen einer Feuerstelle |
| USE_SPECIAL | Dieses Item wird durch Source oder sonstige aufforderungen eingestellt / Quests |
| ITEM_RESOURCE | Dieses Item ist ein Erzeugnis aus einem Anderem Item |
| RESOURCE_FISHBONE | Dieses Item kommt raus wenn man Fische tötet |
| USE_BAIT | Dieses Item kann man als Fischköder benutzen |
| ITEM_FISH | Dieses Item ist ein Fisch |
| FISH_ALIVE | Dieses Item ist ein Lebendiger Fisch |
| FISH_DEAD | Dieses Item ist ein Toter Fisch |
| USE_POTION_NODELAY | Dieses Item wirkt instant in kraft und kann pausenlos genutzt werden |
| USE_CLEAR | Dieses Item entfernt alle Temporären Boni“s |
| USE_INVISIBILITY | Dieses Item erzeugt den Unsichtbarkeits effekt für ein paar sekunden |
| SPECIAL_MAP | Dieses Item bekommt man nur auf bestimmten maps |
| ITEM_SPECIAL | Dieses Item wird durch die Source definiert für Map X oder System X |
| RESOURCE_WATERSTONEPIECE | Dieses Item ist ein Splitterstück eines Geiststeins |
| RESOURCE_WATERSTONE | Dieses Item ist ein Stein. Wortwörtlich. |
| ITEM_RESOURCE | Dieses Item ist ein Uppitem |
| RESOURCE_WHITE_PEARL | Dieses Item kann man aus Muscheln bekommen und gehört der Kategorie Weißer Perle |
| RESOURCE_BLUE_PEARL | Dieses Item kann man aus Muscheln bekommen und gehört der Kategorie Blauer Perle |
| RESOURCE_BLOOD_PEARL | Dieses Item kann man aus Muscheln bekommen und gehört der Kategorie Roter Perle |
| ITEM_METIN | Dieses Item ist ein Geiststein |
| METIN_NORMAL | Dieses Item ist ein Normaler Geiststein ohne besonderheiten |
| ITEM_PICK | Dieses Item ist eine Spitzhacke |
| MATERIAL_LEATHER | Dieses Item … eig. Gehört das zu Ledermaterialien aber es wird irgendwie für alle Questitems genutzt. |
| ITEM_GIFTBOX | Dieses Item ist eine Truhe |
| USE_AFFECT | Dieses Item setzt einen Effekt frei |
| LOG | Dieses Item wird geloggt und lässt sich in den Datenbanken auslesen |
| USE_CLEAN_SOCKET | Dieses Item entfernt Steinsplitter |
| USE_CHANGE_ATTRIBUTE | Dieses Item ändert attribute / Bonis |
| USE_ADD_ATTRIBUTE | Dieses Item fügt Bonis hinzu |
| WEAR_SHIELD | Dieses Item wird in den Zwei Special Slots getragen / Neben den Schuhen |
| ITEM_COSTUME | Dieses Item ist ein Kostüm |
| COSTUME_BODY | Dieses Item wird im Kostümslot für anzüge getragen |
| ANTI_FEMALE | Dieses Item kann nicht von Frauen getragen werden |
| ANTI_MALE | Dieses Item kann nicht von Männern getragen werden |
| COSTUME_HAIR | Dieses Item wird im Kopfschmuck / Haarslot getragen |
| REAL_TIME | Dieses Item läuft nach genereller Zeit ab (nicht nach eigener Onlinezeit sondern grundsätzlicher Zeit) |
| ITEM_LOTTERY | Dieses Item wird zur Lotterrie genutzt |
| ITEM_TREASURE_BOX | Dieses Item ist eine Schatzkiste |
| ITEM_SKILLBOOK | Dieses Item erhöht eine Fertigkeit |
| ITEM_POLYMORPH | Dieses Item nutzt man zur verwandlung |
| USE_PUT_INTO_ACCESSORY_SOCKET | Dieses Item nutzt man um es in eine Fassung einzufügen |
| USE_ADD_ACCESSORY_SOCKET | Dieses Item fügt eine Fassung ein |
| ITEM_BLEND | Dieses Item ist ein Tau |
| ITEM_SKILLFORGET | Dieses Item nutzt man um Skills oder Stats zu vergessen oder negative Punkte zu geben |
ApplyBonusListe
| TXT Wert | Bonusname | Beispielwert |
|---|---|---|
| APPLY_NONE | Kein Bonus | Kein Wert |
| APPLY_ATT_SPEED | Angriffsgeschwindigkeit | 1 - X |
| APPLY_MOV_SPEED | Bewegungsgeschwindigkeit | 1-255 |
| APPLY_CAST_SPEED | Zaubergeschwindigkeit | 1-32000 |
| APPLY_MAX_HP | Max TP | 1-32000 |
| APPLY_MAX_STAMINA | Max Ausdauer | 1-32000 |
| APPLY_MAX_SP | Max MP | 1-32000 |
| APPLY_HP_REGEN | TP-Regeneration | 1-1000 |
| APPLY_SP_REGEN | MP-Regeneration | 1-1000 |
| APPLY_KILL_SP_RECOVER | Chance MP Wiederherzustellen | 1-1000 |
| APPLY_KILL_HP_RECOVER | Chance TP Wiederherzustellen | 1-1000 |
| APPLY_STEAL_HP | Chance auf TP Raub | 1-1000 |
| APPLY_STEAL_SP | Chance auf MP Raub 1-1000 | |
| APPLY_POISON_PCT | Vergiftungschance | 1-100 |
| APPLY_MANA_BURN_PCT | Verbrennungschance | 1-100 |
| APPLY_STUN_PCT | Ohnmachtchance | 1-100 |
| APPLY_SLOW_PCT | Verlangsamungschance | 1-100 |
| APPLY_CRITICAL_PCT | Kritische Treffer Chance | 1-100 |
| APPLY_CURSE_PCT | Chance jmd zu Verfluchen (Zauber Aufheben) | 1-100 |
| APPLY_BLOCK | Chance auf Abblocken | 1-100 |
| APPLY_DODGE | Chance auf Ausweichen | 1-100 |
| APPLY_PENETRATE_PCT | Chance auf durchbohrender Treffer | 1-100 |
| APPLY_REFLECT | Chance auf Reflektieren | 1-100 |
| APPLY_RESIST_MAGIC | Magiewiderstand | 1-100 |
| APPLY_NORMAL_HIT_DEFEND_BONUS | Dursch. Schadenswiderstand | 1-100 |
| APPLY_SKILL_DEFEND_BONUS | Fertigkeitwiderstand | 1-100 |
| APPLY_MALL_DEFBONUS | Nahkampfttrefferwiderstand | 1-32000 |
| APPLY_MELEE_MAGIC_ATTBONUS_PER | Magietrefferwiderstand in % | 1-100 |
| APPLY_POISON_REDUCE | Giftwiederstand | 1-100 |
| APPLY_RESIST_FIRE | Feuerresistenz | 1-100 |
| APPLY_RESIST_ELEC | Blitzresistenz | 1-100 |
| APPLY_RESIST_WIND | Windwiderstand | 1-100 |
| APPLY_RESIST_BOW | Pfeilwiderstand | 1-100 |
| APPLY_RESIST_DAGGER | Dolchverteidigung | 1-100 |
| APPLY_RESIST_SWORD | Schwertverteidigung | 1-100 |
| APPLY_RESIST_TWO_HANDED | Zweihandverteidigung | 1-100 |
| APPLY_RESIST_BELL | Glockenverteidigung | 1-100 |
| APPLY_RESIST_FAN | Fächerverteidigung | 1-100 |
| APPLY_RESIST_WARRIOR | Abwehr gegen Krieger | 1-100 |
| APPLY_RESIST_ASSASSIN | Abwehr gegen Ninja | 1-100 |
| APPLY_RESIST_SURA | Abwehr gegen Sura | 1-100 |
| APPLY_RESIST_SHAMAN | Abwehr gegen Schamanen | 1-100 |
| APPLY_IMMUNE_STUN | Abwehr gegen Ohnmacht | 1 |
| APPLY_IMMUNE_SLOW | Abwehr gegen Verlangsamen | 1 |
| APPLY_CON | Vitalität | 1-32000 |
| APPLY_INT | Intelligenz | 1-32000 |
| APPLY_STR | Stärke | 1-32000 |
| APPLY_DEX | Beweglichkeit | 1-32000 |
| APPLY_ATTBONUS_HUMAN | Stark gegen Halbmenschen 1-32000 | |
| APPLY_ATTBONUS_ANIMAL | Stark gegen Tiere | 1-32000 |
| APPLY_ATTBONUS_ORC | Stark gegen Orks | 1-32000 |
| APPLY_ATTBONUS_MILGYO | Stark gegen Esoterische | 1-32000 |
| APPLY_ATTBONUS_UNDEAD | Stark gegen Untote | 1-32000 |
| APPLY_ATTBONUS_DEVIL | Stark gegen Teufel | 1-32000 |
| APPLY_ATTBONUS_WARRIOR | Stark gegen Krieger | 1-32000 |
| APPLY_ATTBONUS_SURA | Stark gegen Sura | 1-32000 |
| APPLY_ATTBONUS_SHAMAN | Stark gegen Schamanen | 1-32000 |
| APPLY_ATTBONUS_ASSASSIN | Stark gegen Ninja | 1-32000 |
| APPLY_ATTBONUS_MONSTER | Stark gegen Monster | 1-32000 |
| APPLY_ATT_GRADE_BONUS | Angriffswert | 1-32000 |
| APPLY_EXP_DOUBLE_BONUS | Chance auf Doppelte EXP | 1-100 |
| APPLY_GOLD_DOUBLE_BONUS | Chance auf Yangbonus | 1-100 |
| APPLY_ITEM_DROP_BONUS | Chance mehr Gegenstände zu Droppen | 1-32000 |
| APPLY_SKILL_DAMAGE_BONUS | Fertigkeitsschaden (FKS) | -32000-32000 |
| APPLY_NORMAL_HIT_DAMAGE_BONUS | Durchschnittlicher Schaden (DSS) | -32000-32000 |
| APPLY_RESIST_CLAW | Krallenwiderstand | 1-32000 |
| APPLY_ATTBONUS_WOLFMAN | Stark gegen Wolfman | 1-32000 |
share ordner
öffnen wir den ordner share sieht dieser hier so aus:
blend.txt
BlueDragon.lua ist eine Extra datei für die BeranSetaou quest
commond_drop_item.txt
cube.txt
dragon_soul_txt:
Auch wenns sehr viel ist ist sie Sehr selbsterklärend
drop_item_group.txt
etc_drop_item.txt
Ich meine die Table war für alternativ dropps beispielsweise upp items wie muschel, Hab sie noch nie genutzt, Wird noch nachgeholt wenn ichs schaffe
fishing:
forkedmapindex.txt
Das ist ne Datei um Startpunkte / Warpunkte nach Reiche auf speziellen maps festzulegen, aber eig kann man das beispielsweise mit der town.txt lösen
group.txt
Group Gruppenname hier kann egal was stehen
{
Leader Wildhund 101
Wer der Gruppenleader ist
Wie dieser heißt, ist eigentlich egal was da steht
Welche VNUM das Leadermonster hat
Vnum 101
Welche Nummer die Gruppe hat
1 µé°³ 101
2 µé°³ 101
Reihenfolgen index zahl, die muss immer fortlaufend sein
Beschreibung / Name des Monsters, ist eigentlich egal was da steht
VNUM des Monsters
}
group_group.txt
basicly ist das hier das gleiche wie in der group.txt aber hier kann man die gruppen in der mob_proto zum spawnen von Monstern nutzen
dabei ist zu beachten das die letzte zahl die anzahl der monster ist ansonsten ist alles gleich
locale_quest.lua
dient dazu um bei Multilanguagesystemen je nach clientsprache einen anderen questfolder zu nehmen
locale_string
mob_drop_item.txt
Monkey_dungeon.lua
hier stehen alle portale der affendungeon drin
add_goto_npc_for_monkey_dungeon ( Mapindexzahl, x start y start, x ziel ,y ziel) alles lokale kordinaten
ori_to_new_table
Die Datei hat was mit den Accountgebundenen items fürn IS zutun, also es gibt die gleichen Items mehrmals, warum auch immer aber die gibts, wenn man welche davon spawnt hat man wieder andere vnums, man kann sich das hier nochmal genauer ansehen :
Da es eine table ist:
input_db.cpp
Dort wird der Inhalt der .txt in szItemVnumMaskTableFileName geladen und dann durch ReadItemVnumMaskTable() gelesen und in die Map m_map_new_to_ori eingetragen
(danke an Steap fürs rausfinden)
oxquiz.lua
hier stehen alle oxfragen drinne,
add_ox_quiz(1,"fragetext",false = falsch X true = richtig O)
achtet darauf das die letzte zeile nicht leer ist sonst startet der server ggf nicht
settings.lua
Shop_table_ex.txt
gehört zu dem Shop ex renewal system womit man aus NPC"s mit Items bezahlen kann anstatt mit Yang
Skill_power.txt
Die stärke von Skills wortwörtlich....
translate.lua
Die quest für Manche Multilanguage Systeme
blend.txt
die Blend.txt ist meines Wissens nach für solch Taue zuständig:
oder für Items die Variation haben sollen,
oder für Items die Variation haben sollen,
HTML Code:
section
item_vnum 50825
//die Item Vnum
apply_type ATT_BONUS
//Der Bonus der gegeben werden soll
apply_value 120 120 120 120 120
//Die höhe vom Bonus + mögliche Varianten
apply_duration 600 600 600 600 600
//Die länge des Bonus + mögliche Varianten
end
BlueDragon.lua ist eine Extra datei für die BeranSetaou quest
commond_drop_item.txt
HTML Code:
15 90 10 299 1 15 = mind level 90 = maximal level 10 = dropchance in % 299 = vnum 1 = anzahl
cube.txt
HTML Code:
#nase section npc 20018 item 50723 1 reward 50803 100 percent 100 end #Craftingtextname section = des bleibt immer gleich npc 20018 = npc vnum item 50723 = item vnum gefordert 1 = anzahl reward 50803 = ergebnis 100 = anzahl vom ergebnis percent 100 =erfolgsrate end
dragon_soul_txt:
Auch wenns sehr viel ist ist sie Sehr selbsterklärend
drop_item_group.txt
Ich hab die table noch nie genutzt und ich glaub die wird bei jedem leer sein
ich hab das dazu in der svsource gefunden vll hilft das jemanden
ich hab das dazu in der svsource gefunden vll hilft das jemanden
HTML Code:
bool ITEM_MANAGER::ReadDropItemGroup(const char * c_pszFileName)
{
CTextFileLoader loader;
if (!loader.Load(c_pszFileName))
return false;
std::string stName;
for (DWORD i = 0; i < loader.GetChildNodeCount(); ++i)
{
loader.SetChildNode(i);
loader.GetCurrentNodeName(&stName);
int iVnum;
int iMobVnum;
if (!loader.GetTokenInteger("vnum", &iVnum))
{
sys_err("ReadDropItemGroup : Syntax error %s : no vnum, node %s", c_pszFileName, stName.c_str());
loader.SetParentNode();
return false;
}
if (!loader.GetTokenInteger("mob", &iMobVnum))
{
sys_err("ReadDropItemGroup : Syntax error %s : no mob vnum, node %s", c_pszFileName, stName.c_str());
loader.SetParentNode();
return false;
}
TTokenVector * pTok;
auto it = m_map_pkDropItemGroup.find(iMobVnum);
CDropItemGroup* pkGroup;
if (it == m_map_pkDropItemGroup.end())
pkGroup = M2_NEW CDropItemGroup(iVnum, iMobVnum, stName);
else
pkGroup = it->second;
for (int k = 1; k < 256; ++k)
{
char buf[4];
snprintf(buf, sizeof(buf), "%d", k);
if (loader.GetTokenVector(buf, &pTok))
{
std::string& name = pTok->at(0);
DWORD dwVnum = 0;
if (!GetVnumByOriginalName(name.c_str(), dwVnum))
{
str_to_number(dwVnum, name.c_str());
if (!ITEM_MANAGER::instance().GetTable(dwVnum))
{
sys_err("ReadDropItemGroup : there is no item %s : node %s", name.c_str(), stName.c_str());
if (it == m_map_pkDropItemGroup.end())
M2_DELETE(pkGroup);
return false;
}
}
float fPercent = atof(pTok->at(1).c_str());
DWORD dwPct = (DWORD)(10000.0f * fPercent);
int iCount = 1;
if (pTok->size() > 2)
str_to_number(iCount, pTok->at(2).c_str());
if (iCount < 1)
{
sys_err("ReadDropItemGroup : there is no count for item %s : node %s", name.c_str(), stName.c_str());
if (it == m_map_pkDropItemGroup.end())
M2_DELETE(pkGroup);
return false;
}
sys_log(0," %s %d %d", name.c_str(), dwPct, iCount);
pkGroup->AddItem(dwVnum, dwPct, iCount);
continue;
}
break;
}
if (it == m_map_pkDropItemGroup.end())
m_map_pkDropItemGroup.insert(std::map<DWORD, CDropItemGroup*>::value_type(iMobVnum, pkGroup));
loader.SetParentNode();
}
return true;
}
etc_drop_item.txt
Ich meine die Table war für alternativ dropps beispielsweise upp items wie muschel, Hab sie noch nie genutzt, Wird noch nachgeholt wenn ichs schaffe
fishing:
habs damals mal übersetzt
forkedmapindex.txt
Das ist ne Datei um Startpunkte / Warpunkte nach Reiche auf speziellen maps festzulegen, aber eig kann man das beispielsweise mit der town.txt lösen
group.txt
HTML Code:
Group L01_µé°³(PAWN)-µé°³(PAWN)
{
Leader Wildhund 101
Vnum 101
1 µé°³ 101
2 µé°³ 101
}
{
Leader Wildhund 101
Wer der Gruppenleader ist
Wie dieser heißt, ist eigentlich egal was da steht
Welche VNUM das Leadermonster hat
Vnum 101
Welche Nummer die Gruppe hat
1 µé°³ 101
2 µé°³ 101
Reihenfolgen index zahl, die muss immer fortlaufend sein
Beschreibung / Name des Monsters, ist eigentlich egal was da steht
VNUM des Monsters
}
group_group.txt
basicly ist das hier das gleiche wie in der group.txt aber hier kann man die gruppen in der mob_proto zum spawnen von Monstern nutzen
dabei ist zu beachten das die letzte zahl die anzahl der monster ist ansonsten ist alles gleich
locale_quest.lua
dient dazu um bei Multilanguagesystemen je nach clientsprache einen anderen questfolder zu nehmen
locale_string
"You won %s Items.";
"Du erhältst %s, %d Stück.";
Die Datei dient quasi für den Clienten dazu wenn er den Textstring als Code in seinen Dateien findet in dem Falle you won X items, dann ersetzt er den text durch den dadrunter also "Du erhälst X , X stück"
%s vnum / zielname, %d level, anzahl, statzstahl, bonuszahl...
"Du erhältst %s, %d Stück.";
Die Datei dient quasi für den Clienten dazu wenn er den Textstring als Code in seinen Dateien findet in dem Falle you won X items, dann ersetzt er den text durch den dadrunter also "Du erhälst X , X stück"
%s vnum / zielname, %d level, anzahl, statzstahl, bonuszahl...
mob_drop_item.txt
Die Datei stell die generellen Drops für Monster / Metins u.ä. ein
Group Gruppenname
Mob 101 (mobvnum)
Droptype "Drop" = 15+- Level vom Monster kann man das Item droppen darunter bzw darüber wirds halt seltener
Droptype limit heißt ab dem levellimit bis egal wie hoch kann man das item immer droppen
vorne steht die reihenfolgenzahl also wie zuvor in andren Dateien immer schön als reihenfolge lassen
danach kommt die Item-VNUM
danach kommt die anzahl
danach die Dropchance diese muss man soweit ich weiß immer ca x 2 nehmen sonst ist die tatsächliche chance einfach zu niedrig
es gibt noch den Droptype kill, aber ich glaub inzwischen nutzt den niemand mehr.
HTML Code:
Group Wildhund
{
Mob 101
Type drop
1 27987 1 100
2 27992 1 100
3 [...]
}
Group Wildhund
{
Mob 101
Type limit
level_limit 5
1 27987 1 100
2 27992 1 100
3 [...]
}
Group Gruppenname
Mob 101 (mobvnum)
Droptype "Drop" = 15+- Level vom Monster kann man das Item droppen darunter bzw darüber wirds halt seltener
Droptype limit heißt ab dem levellimit bis egal wie hoch kann man das item immer droppen
vorne steht die reihenfolgenzahl also wie zuvor in andren Dateien immer schön als reihenfolge lassen
danach kommt die Item-VNUM
danach kommt die anzahl
danach die Dropchance diese muss man soweit ich weiß immer ca x 2 nehmen sonst ist die tatsächliche chance einfach zu niedrig
es gibt noch den Droptype kill, aber ich glaub inzwischen nutzt den niemand mehr.
Monkey_dungeon.lua
hier stehen alle portale der affendungeon drin
add_goto_npc_for_monkey_dungeon ( Mapindexzahl, x start y start, x ziel ,y ziel) alles lokale kordinaten
ori_to_new_table
Die Datei hat was mit den Accountgebundenen items fürn IS zutun, also es gibt die gleichen Items mehrmals, warum auch immer aber die gibts, wenn man welche davon spawnt hat man wieder andere vnums, man kann sich das hier nochmal genauer ansehen :
Da es eine table ist:
input_db.cpp
Dort wird der Inhalt der .txt in szItemVnumMaskTableFileName geladen und dann durch ReadItemVnumMaskTable() gelesen und in die Map m_map_new_to_ori eingetragen
(danke an Steap fürs rausfinden)
oxquiz.lua
HTML Code:
add_ox_quiz(1,"Verkauft Uriel Tränke und andere Items?",false) add_ox_quiz(1,"Ist der Waffenhändler der Vater von der Gemischtwarenhändlerin?",false)
add_ox_quiz(1,"fragetext",false = falsch X true = richtig O)
achtet darauf das die letzte zeile nicht leer ist sonst startet der server ggf nicht
settings.lua
in der datei stehen einmal die /goto / warp commands drin womit man quasi shortcuts als Befehle reinschreiben kann
add_goto_info("b1", 0, 21, 557, 1579)
add_goto_info("name des shortcuts", 0 = welcher town.txt spawn, 21 = mapindex, 557 = x cordinate, 1579 = y kordinate) lokale globale kordinaten werden hier genutzt
in der selben datei stehen übrigens die info"s zu welche backgroundmusic auf der map genutzt wird:
add_bgm_info( 3, "back_to_back.mp3", 0.5);
add_bgm_info( mapindex, "name der mp3 datei.mp3", 0.5 länge zum rein und rausfaden der musik bevor dieser looped glaube ich);
add_goto_info("b1", 0, 21, 557, 1579)
add_goto_info("name des shortcuts", 0 = welcher town.txt spawn, 21 = mapindex, 557 = x cordinate, 1579 = y kordinate) lokale globale kordinaten werden hier genutzt
in der selben datei stehen übrigens die info"s zu welche backgroundmusic auf der map genutzt wird:
add_bgm_info( 3, "back_to_back.mp3", 0.5);
add_bgm_info( mapindex, "name der mp3 datei.mp3", 0.5 länge zum rein und rausfaden der musik bevor dieser looped glaube ich);
Shop_table_ex.txt
gehört zu dem Shop ex renewal system womit man aus NPC"s mit Items bezahlen kann anstatt mit Yang
Skill_power.txt
Die stärke von Skills wortwörtlich....
translate.lua
Die quest für Manche Multilanguage Systeme
Server aufgesetzt was nun
Es kommt nun darauf an was man nun vorhat mit solch einem Server, Es besteht ja beispielsweise die Möglichkeit nun weitere Systeme einzufügen, oder den Server als Testinstanz für Maps / Effekte zu nutzen oder auch andere dinge, Ich werde hier quasi im Groben erklären wie ich Persönlich weitere Schritte nun planen würde, Was Ihr im Endeffekt vorhabt das ist komplett euch überlassen, dies sollen lediglich Leitfäden sein, Vorschreiben kann ich euch ja nichts.
Orientierung im Pack Ordner
Orientierung im Pack Ordner
| name epk eix packarchiv | Pfad beispiele | inhalt |
|---|---|---|
| costume | pack/costume/ymir work | pc, pc2, item |
| effect | pack/effect/ymir work/effect | Hier sind alle .mse (metin script effect) für beispielsweise damagezahlen oder krit sowie db effekte drin. |
| etc | pack/etc/ymir work/etc/, special | hier befinden sich Wassertexturen, Minimaps, Skyboxxen und beleuchtungen (environments) und einen haufen wichtiger GUI Elemente |
| guild | pack/guild/ymir work/guild | hier befinden sich alle extra Dateien zum Thema Gilde, Modelle, Effekte, Skill clientdateien (msk) (MetinSkillDataScript) |
| icon | pack/icon/icon | hier befinden sich alle erdenklichen Icons vom Spiel, Beispielsweise die Icons der Items |
| item | pack/item/ymir work/item | hier befinden sich die meisten Modelle und Texturen von Waffen sowie einige Vorschaubilder der Haare als auch Modelle zu sowas wie Yang oder Tränke |
| locale / locale_de / locale X | pack/locale_de/locale/de, ... | hier befinden sich alle informativen Dateien die irgendwas mit der Lokal eingestellten Sprache zutun haben, Beispielsweise Die Item_Proto und Mob_Proto als auch die locale_game welches den gesamten im Spiel angezeigten Text beinhaltet. Außerdem befinden sich hier auch die loginhintergrundbilder, ladescreens, Charakterselekt hintergründe, Tastaturen, Mapnamen-Introbilder und weitere UI Elemente |
| map_dungeon / map_empire / map_empire ... | pack/map_xxx/mapordner | hier befinden sich die map ordner welche wichtig für das interne Kordinatensystem des servers, damit der client am Ende weiß auf welcher map er steht und wie diese aussieht. |
| npc / npc_mount / npc_pet / npc2 | pack/npc/ymir work/npc,npc2,npc_mount,npc_pet | hier befinden sich alle wichtigen Clientdateien bezüglich aller NPC"s / Mounts / Pets im Spiel also wortwörtlich alle nicht feindlichen NonPlayerCharacter, heißt Modelle, Animationslisten (motlist), Effektabhängigkeiten, Texturen usw. |
| pc_assassin / pc_common / pc_shaman / pc_sura / pc warrior / pc1 / pc2 / pc3 | pack/pc1,pc2,pc3[...] | Hier befinden sich alle Modelle der Charaktere selbst, sowie deren Texturen als auch die animationen und passende Effekte, sowie etliche andere Dinge die was direkt mit den Charakteren zutun haben, dabei ist zu beachten das Metin2 die folgende Sortierung bei den Ordnern hat: pc = Ninja Weiblich , Schamane Weiblich , Sura Männlich , Krieger Männlich pc2 = Ninja Männlich , Schamane Männlich , Sura Weiblich , Krieger Weiblich pc3 = Wolfman / Lykaner |
| property | pack/property | hier befinden sich alle dateien welche die Zuweisungen der objekte für die Maps beinhaltet, Jedes mapobjekt braucht eine Zuweisungsdatei, diese werden hier gespeichert, ohne die würde das objekt laut dem Clienten nicht existieren. |
| root | pack / root | hier befinden sich viele Zuweisungsdateien als auch viele Scriptdateien, wie beispielsweise die Serverinfo oder sämtliche python Dateien welche alle für das UI des Spiels zuständig sind |
| season | pack/season,season1 | das sind noch überbleibsel früherer Metin updates, hier befinden sich beispielsweise noch alte patches welche ein paar modelle / texturen / npc"s oder monster beinhalten oder ggf noch ein paar Objekte |
| sound | pack/sound/sound | in dem archiv findet man alle Dateien welche Irgendwas mit Sound von NPC"s, Monstern, Mapobjekten, Charakteren oder UI Elementen zutun haben |
| terrain | pack/terrain/ymir work/terrainmaps | in dem archiv befinden sich alle Texturen welche in jeglichen Maps benutzt worden sind, diese sind zu 99% in dem format .dds |
| textureset | pack/textureset/in dem archiv findet man alle Texturlisten der jeweiligen maps, d.h. Eine Map weiß nur durch die textureset der jeweiligen map in welcher reihenfolge welche Textur genutzt wird. | |
| tree | pack/tree/ymir work/tree | hier befinden sich alle objekte / texturen welche Vegetation vorweisen (Bäume, Büsche, Gräser, Blumen) |
| zone | pack/zone/ymir work/zone | hier befinden sich alle modelle und texturen für alle Map Objekte natürlich im .gr2 und im dds format |
PS Ich füg den rest morgen oder so ein






