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,
Warum ich das ganze jetzt einfach mache, Weil ich es leid habe das hier X Leute mich die selben 100 Fragen stellen und ich denen einzeln alles erklären muss, jetzt kann ich die Nasen einfach hierdrauf verweisen. Ist für mich angenehmer, und für andere bestimmt auch. Wer übrigens Rechtschreibfehler findet darf sie gern behalten.
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
Clientfiles
(Der Client halt, Dll"s, Pack Ordner mitsamt epk / eix / gepackten, entpackten pack Archiven)
Beispiel für Clientfiles:
Please login to see this link.
ClientSrc
(Der Binary Source mitsamt visual studio .sln zu deiner Metin2Distribute / Metin2Release / Metin2Debug.exe)
Beispiel für ClientSrc:
Please login to see this link.
Please login to see this link.
Serverfiles
(share, maps, Channel1, Channel2, Kern X, Quests, drops, Datenbank, libs....)
Beispiel für Serverfiles:
Please login to see this link.
Please login to see this link.
ServerSrc
(gamesource, common, datenbanksource welche mit gmake / cmake / ggf ähnliches compiled werden)
Beispiel für ServerSource:
Please login to see this link.
Please login to see this link.
Einen passenden Entpacker / Packer für die Clientpackarchive (Eternexus, Packmaker, Etermanager, EterPackConsoleLz4 o.ä.
Please login to see this link.
Please login to see this link.
Ein Programm zum aufbauen einer sftp / ssh verbindung (WinScp, Mobaxterm)
Please login to see this link.
Ein Programm zum nutzen der ssh console (Putty, Mobaxterm, VNC)
Please login to see this link.
Please login to see this link.
Einen Client zum Verbinden zur Datenbank (Navicat, HeidiSql, Database.net)
Please login to see this link.
Ein Programm um Textdateien mit richtiger Codierung öffnen zu können (Notepad++, Sublime Editor, VS Code)
Please login to see this link.
Ein Programm um den Clientsource zu bearbeiten (Visual Studio Community mit dem Toolset Welches die Files halt benötigen)
Please login to see this link.
Ein Programm zum bearbeiten von .tga .dds Dateien (Paint.net , Photoshop, Gimp)
Please login to see this link.
Ein Programm zum bearbeiten von Maps / Effekten / Skills / Flyeffekten , Collisions (World Editor)
Please login to see this link.
Ein Programm um .gr2 Dateien anzuschauen zu können (Granny Viewer)
Please login to see this link.
Ein Programm um Gr2 Modelle und Animationen erstellen zu können (3dsmax)
Please login to see this link.
Begriff / Fremdwort / Kürzel | Erklä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. |
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,
Please login to see this link.
*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 (23.11.22) ist FreeBSD 12.0+ RELEASE amd64 liegt noch im Supporteten Bereich.
habt ihr euch nun für Files entschieden die Ihr installieren wollt, liegt es jetzt an euch Wie ihr diese betreiben wollt, benutzen wollt.
Es gibt die möglichkeit Durch beispielsweise Virtual Box (oder anderer Virtualisierungssoftware) das Betriebssystem Lokal zu hosten und dann mit dem Clienten lokal auf diesen zu connecten.
dazu benötigen wir die passende Software, in Unserem Falle Virtual Box
Please login to see this link.
Nun Erstellen wir eine Maschine, dazu klicken wir auf Neu,
Please login to see this link.
Please login to see this link.
Wir wählen hier einen passenden namen, Den Systemtypen, und die 64-Bit Version aus, Solltet ihr ledeglich nur 32bit Auswählen können, müsst ihr dies in eurem Bios des Mainboards erst aktivieren, Je nach Mainboard Prozessor kann die Einstellung sonstwie versteckt sein oder garnicht vorhanden sein.
Virtualisierung / Enable Virtualisation / vt-d / Hyper-V , Sucht nach sowas.
Please login to see this link.
Ich empfehle Immer 4Gb Ram, im Idle braucht bsd zwar wenig Ram allerdings fahrt Ihr später einen Channel hoch belegt ihr so im schnitt 2.3 Gb ram, Je mehr Channel desto Mehr Ram benötigt Ihr automatisch.
Please login to see this link.
Please login to see this link.
Nun wollen wir der Maschine eine Virtuelle Platte erstellen,
"Wenn die Files die Ihr benutzen wollt eine Virtual Disk Image (VDI) bereits besitzt nehmt einfach die >Vorhandene Festplatte verwenden<"
Hierzu einfach auf Erzeugen klicken.
Please login to see this link.
Da Ich das nie anders gemacht habe wählt hier einfach VDI aus
Please login to see this link.
Hier einfach auf Weiter, Achtet später nur darauf, das ihr nicht einfach Random zu Häufig Dateien in die VDI reinzieht, die Ihr eh nicht benötigt. Die VDI kann nämlich nur Größer werden vom Speicherplatz, nicht kleiner.
Please login to see this link.
Wir wollen mindestens 10Gb auf der VDI haben, mehr wird man im normalfall nie brauchen.
Please login to see this link.
Nun haben wir unsere Maschine erzeugtPlease login to see this link.
jetzt Benötigen wir noch das Betriebssystem an sich "Außer im falle einer Fertigen VDI"
Please login to see this link.
Ich habe mich hier für die Please login to see this link. entschieden
Nun habt ihr diese Runtergeladen geht ihr auf Ändern, dann auf System
Please login to see this link.
Stellt unter Prozessoren die Anzahl der Verfügbaren Threads für euer System ein, Da ich 20 Threads habe geb ich dem System 4 Threads was vollkommen ausreicht
Please login to see this link.
Nun geben wir dem System noch Netzwerkanbindung
Netzwerkbrücke, Euern Ethernetcontroller angeben, das wars.
Mit OK alles bestätigen
mittels Doppelklick auf die Maschine startet ihr Diese, dann wählt ihr eure FreeBSD.iso aus
Please login to see this link.
Nun klicken wir auf Starten
Please login to see this link.
nach etwa 15 Sekunden solltet ihr hier sein, achtet darauf falls Ihr eure Maus gefangen habt, drückt einfach die rechte STRG taste.
Wählt Install und Bestätigt das ganze mit Enter
Please login to see this link.
Hier wählt ihr euer Tastaturlayout aus, in meinem falle wähle ich die Deutsche aus
Einmal German raussuchen und Enter drücken
Please login to see this link.
danach hier Enter drücken
Please login to see this link.
Please login to see this link.
dann wählen wir einen Nutzernamen aus wie unsere Maschine heißen soll, in meinem falle habe ich sie "home" genannt
Please login to see this link.
Hier drücken wir knallhart einfach Enter und lesen uns am besten auch garnichts dazu weiter durch
Please login to see this link.
hier gehts um die Festplattenformatierung, wir bleiben einfach mal bei dem Automatischem UFS also drücken wir einfach Enter
Please login to see this link.
Da wir die gesamte Festplatte nutzen wollen klicken wir auch hier bei <Entire Disk> Enter
Please login to see this link.
Wir bleiben hier ebenfalls bei MBR drücken wieder Enter
Please login to see this link.
nun kommen wir zum Festplattenfenster, da wir vorher eine Platte erzeugt haben mit 16 GB Größe nehme ich die hier einfach komplett,
Unter finish einfach Enter drücken
Please login to see this link.
hier nochmals Enter drücken damit bestätigen wir das die Platte vorher formatiert wird
Please login to see this link.
Die installation wird nun durchgeführt.
Ihr landet am Ende automatisch zu dem Fenster wo ihr ein Passwort eintippen sollt, Ihr wählt bitte eins was ihr euch leicht merken könnt,
Auch wenn ihr das Passwort eintippt und ihr seht nix, wird das Passwort eingetippt.
Bestätigt dieses mit Enter dann gelangt ihr zum Networking
Please login to see this link.
Natürlich wollen wir Ipv4 Nutzen
Please login to see this link.
und aufjedenfall nutzen wir das DHCP Interface dazu
Please login to see this link.
Please login to see this link.In Unserem Falle benötigen wir danach kein IPv6 Interface daher klicke ich hier auf Nein
Please login to see this link.
Please login to see this link.
Hier einfach Enter drücken
Please login to see this link.
Hier suchen wir unsere Zeitzone aus,
Hier noch das Datum Setzen
Please login to see this link.
Hier die Zeit, Achtet darauf das die wirklich stimmt, BSD mag nämlich nichtso gerne Zeitabweichungen und kann oftmals Errormeldungen beim Hochfahren anzeigen
Please login to see this link.
Nun kommen wir in dieses Menü, Hier einfach Enter drücken
Please login to see this link.
Please login to see this link.Hier ebenfalls
Please login to see this link.
Da wir keine Weiteren User in einer Lokalen Maschine hinzufügen möchten selektieren wir hier Nein und drücken Enter
Please login to see this link.
Nun bestätigen wir noch all unsere Einstellungen mit Enter
Please login to see this link.
Hier fragt er uns noch ob wir sonst noch etwas vor dem Systemreboot vornehmen wollen, Da selektieren wir natürlich No
Please login to see this link.
Anschließend möchte er einen Reboot durchführen
Please login to see this link.
natürlich bestätigen wir das ganze und das system startet neu
Nun rebootet das system einmal
Nach dem Reboot sollte man das Medium also unsere FreeBSD Iso noch entfernen, dazu klickt man mittels rechtsklick unten rechts auf die CD und wählt Medium entfernen
Please login to see this link.
Please login to see this link.
Danach startet ihr einfach eure Maschine einmal blank neu
Please login to see this link.
nun bootet eure Maschine in das Frisch aufgesetzte FreeBSD
Please login to see this link.
als Nutzernamen wählt ihr Immer Root, dann das Passwort was ihr euch vorher gesetzt habt.Please login to see this link.
Nun installieren wir einige Packages
Please login to see this link.
bei egal welchem pkg install befehl werdet ihr Vorher gefragt ob ihr das package manageent tool überhaupt erst installieren wollt, dort einfach y eintippen und mit Enter bestätigen
Folgende Packages benötigt ihr
Please login to see this link.sowie Ihr alles durchinstalliert habt müsst ihr noch der BSD Maschine den access nach Aussen erlauben was dhcp und ssh betrifft, dazu
dazu tippen wir folgendes ein:
Please login to see this link.
Please login to see this link.
nun öffnet sich die datei sshd_config mit dem ee Editor, viele nutzen Nano, ich nutz ee weil ich den einfacher finde.
Wir gehen nun mit den Pfeiltasten runter bis wir
#PermitRootLogin no
finden, dieses kommentieren wir aus und setzen das 'no' auf 'yes'
Please login to see this link.
Please login to see this link.
das selbe tun wir bei PasswordAuthentication
Please login to see this link.
Please login to see this link.und ebenfalls bei UsePAM
Please login to see this link.
nun drücken wir ESC
es erscheint
Please login to see this link.
hier einmal ENTER drückenPlease login to see this link.Please login to see this link.
und kurz danach save changes selektieren und Enter drücken
danach tippt ihr den Befehl ein:
Please login to see this link.
nun müsste sshd bereits funktionieren, jetzt tragen wir noch vorsorglich ein das wir sql-server nutzen dazu:
Please login to see this link.
wir bearbeiten die datei rc.conf
Please login to see this link.
und wir tragen ganz unten dann mysql_enable="YES" einPlease login to see this link.
natürlich speichern wir das ganze dann noch zum schluss.
so nun möchten wir eine sftp verbindung zu dem Server aufbauen dazu gehen wir nun erstmal ins BSDmenu
bsdconfig
Please login to see this link.
um das aufzurufen gebt ihr einfach bsdconfig in die zeile ein und drück Enter
wir wollen ins Networking Management, dazu selektieren wir es und drücken Enter
nun wählen wir unsere Netzwerkschnittstelle aus:
Please login to see this link.
hier sehen wir die lokale ip sowie den Status von DHCP, wenn dort disabled steht einfach einmal DHCP selektieren und Enter drücken
Please login to see this link.
das sollte dann so aussehen, haben wir das gemacht können wir uns nun mittels sftp auf den Server verbinden
Please login to see this link.
ab hier bitte das Nächste Tutorial 2. Befolgen, da ab hier sich beide Varianten quasi nicht voneinander unterscheiden.
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 2022 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 hoste meine Server immer bei Fastpipe.io da der anbieter seid Jahren ein einfaches Bezahlsystem hatte und bisher mir nie was passiert ist obwohl ich bestimmt 40 instanzen bei denen hatte.
Dennoch würde ich euch Definequality Empfehlen
Wichtig ist, Ihr solltet maximal 20€ für eure testinstanz Monatlich einplanen, Mehr würde ich nie im leben für ausgeben.
Mind brauchen tut ihr 10GB Festplatte+ (SSD wünschenswert)
4 GB Ram
Ein Prozessor mit mind 2 Kernen / Threads
Eine Gute anbindung
Eine IP mind.
unlimited Traffic
habt ihr einen gefunden vergewissert euch das dieser Entweder die möglichkeit bietet, eigene .Iso dateien hochzuladen und einzubinden / zu mounten oder diese die passende FreeBSD Version zur verfügung stellen können.
Habt ihr euch für einen Server entschieden solltet ihr den ganzen kram natürlich bestellen / bezahlen alles halt was ihr sonst auch immer bei einer bestellung macht.
Sowie ihr das System vollständig bei dem Anbieter eurer Wahl installiert habt bekommt ihr eine E-Mail zugesandt (oftmals im Spamordner) mit euren zugriffsdaten, Username und Passwort,
jenachdem Ob ihr ein Vorgefertigtes System vom Anbieter nutzt oder eine Eigene Iso benutzt ist das anmelden nun etwas unterschiedlich,
Nutzt ihr ein vorgefertigtes System vom Anbieter sollte man im normalfall direkt mit Winscp / einem SFTP Client eurer wahl euch auf die ip mit den Zugriffsdaten connecten können. Sollte dies nicht klappen kann es sein das ihr Mittels VNC / VPN erst direkt auf die Instanz verbinden müsst um dort dann erst noch DHCP sowie sshd zu aktualisieren
Um das zu tun müsst ihr euch irgendwie auf den Server verbinden, "Bei meinem anbieter meiner wahl ists über TightVNC
dort angekommen tut ihr folgendes:
Please login to see this link.
Please login to see this link.
nun öffnet sich die datei sshd_config mit dem ee Editor, viele nutzen Nano, ich nutz ee weil ich den einfacher finde.
Wir gehen nun mit den Pfeiltasten runter bis wir
#PermitRootLogin no
finden, dieses kommentieren wir aus und setzen das 'no' auf 'yes'
Please login to see this link.
Please login to see this link.
das selbe tun wir bei PasswordAuthentication
Please login to see this link.
Please login to see this link.und ebenfalls bei UsePAM
Please login to see this link.
nun drücken wir ESC
es erscheint
Please login to see this link.
hier einmal ENTER drückenPlease login to see this link.Please login to see this link.
und kurz danach save changes selektieren und Enter drücken
danach tippt ihr den Befehl ein:
Please login to see this link.
nun solltet ihr auf euern Server mittels sftp-Client draufkommen können
Please login to see this link.
Ab hier gehts im Tutorial 2. WeiterPlease login to see this link.
Nun da wir jetzt Erfolgreich eine SFTP Verbindung zum BSD System hergestellt haben sorgen wir nun dafür das der Server dementsprechend auch von einem Clienten erkannt werden kann.
Wir melden uns in WinSCP an und haben das Fenster vor uns
Please login to see this link.
zunächst gehen wir bitte unter Einstellungen in Einstellungen und stellen dort ein paar Sachen Ein. Wahnsinn
unter Anwendungen setzen wir das Häkchen bei Sitzungspasswort merken und an PuTTY weiterleiten (SSH)
Please login to see this link.
Dann gehen wir noch in Editoren
Please login to see this link.
und setzen da unseren Editor der Wahl rein.
So nun befassen wir uns generell mit den Files selbst.
Die Serverfiles die ich hier benutze sind die Fliege V3 Stand 9.1. 2022 Dezember die ich damals direkt von Fliege bekommen habe.
Please login to see this link.
in meinem Fall hab ich hier eine home.tar.gz (tar.gz ist das pack archiv was in bsd genutzt wird)
Unter winscp öffnen wir Putty
Please login to see this link.
Please login to see this link.
die home.tar.gz in /usr/ reinziehen danach mittels PuTTY das .tar.gz archiv entpacken
cd /usr/ && tar -xf home.tar.gz
cd = Change Directory
tar -xf = tar ist der entpacker / packer, -xf ist der befehl zum entpacken.
Falls ihr jemals was packen wollt könnt ihr 'tar -cvjf ordnername' benutzen
&& = damit kann man mehrere commands aneinander reihen
nach dem entpacken der serverfiles kann man mittels Strg + R den Ordner aktualisieren, dann erscheint ein Home ordner,
gehen wir in den pfad /usr/home/source/server/ finden wir dort die ordner
common, db, game, libgame, libpoly, libsql, libthecore
Zunächst kümmern wir uns mal das die Source komplett kompiliert wird,
Wir wollen erreichen das wir am ende unsere libs kompiliert haben als auch eine game datei und eine db datei besitzen beide dateien würde ich mal als Herzdateien im Server bezeichnen.
Libs müssen nur nur einmalig compilen da das quasi die werkzeuge sind, die die source benötigt um zu arbeiten, die müssen wir anfangs einmalig zurechtlegen ausser wir updaten diese, kommt aber quasi nie.
Please login to see this link.
Fangen wir an mit libpoly
cd /usr/home/source/server/libpoly/src && gmake -j4
gmake ist der gnu compiler den wir vorher installiert haben
-j4 sagt aus wie viele threads / dateien wir gleichzeitig compilen wollen, man könnte theoretisch auch -j100 nehmen allerdings sind alle dateien voneinander abhängig und wenn nix optimiert worden ist gelingt das meistens eh nie daher -j4
das selbe machen wir nun mit allen anderen libs und zum schluss mit der game als auch mit der db
Please login to see this link.
cd /usr/home/source/server/libpoly/src && gmake -j4
cd /usr/home/source/server/libsql/src && gmake -j4
cd /usr/home/source/server/libthecore/src && gmake -j4
cd /usr/home/source/server/libgame/src && gmake -j4
zum schluss noch cd /usr/home/source/server/game/src && gmake -j4
und cd /usr/home/source/server/db/src && gmake -j4
Please login to see this link.
Please login to see this link.
sollte ein Fehler währenddessen auftauchen wird er euch den Fehler zeigen und diesen beschreiben weswegen er nicht compilen kann.
Haben wir nun die game und die db compiled sollten wir nun zwei Dateien in den jeweiligen Ordnern habenPlease login to see this link.
Please login to see this link.
Please login to see this link.
Diese dateien müssen je nach Serverfiles an die Richtige stelle gebracht werden, Unter Fliege V2 beispielsweise liegt die game in /usr/home/game/share/
und die DB beispielsweise in /usr/home/game/Datenbank/
Nun benötigen wir noch die Datenbank an sich, Die Datenbank ist in M2Servern standartlich vorgesehen für einen Sql Server, Da wir zuvor Mysql installiert haben "pkg install mysql56-server" müssen wir diesen nur noch einrichten, Natürlich solltet ihr wenn möglich die neueste sql version nutzen oder ihr könnt auch mariadb oder andere datenbanktypen nutzen, das liegt an euch, ihr müsst allerdings dann auch eine menge anpassen daher nutze ich hier als beispiel erstmal mysql56-server
wir gehen mittels sftp in das verzeichnis /var/db/ und stellen fest das dort ein mysql ordner exestiert. gehen wir in diesen rein befinden sich sogut wie keine ordner, d.h. die Datenbank ist noch komplett leer
Please login to see this link.
zunächst starten wir mal unseren mysql-server dazu
Ganz wichtige Info: Nimmt niemals sql 57, Warum? Weils aids ist danke
service mysql-server start
um zu prüfen ob dieser an ist nutzen wir
service mysql-server status
Steht dort dann "mysql is running as pid XXXXX" läuft dieser, nun müssen wir uns erstmal access geben darauf, Please login to see this link.
dazu erstmal:
service mysql-server stop
mysqld_safe --skip-grant-tables --skip-networking &
nun öffnen wir nochmals putty
mysql -u root
use mysql;
update user set password=PASSWORD('admin') where User='root';
flush privileges;
quit
Please login to see this link.
ihr solltet natürlich was stärkeres als das passwort admin wählen in meinem fall reicht das aber aus da ich das ganze lokal betreibe
Ihr solltet euch nun connecten können,
Please login to see this link.
Kriegt ihr einen Fehler wie: "Host 'Euer-PCNAME.Router' is not allowed to connect to this MySQL server" dann solltet ihr den nutzer umbenennen das er von ausserhalb auch erreichbar ist, in sql RENAME USER 'root'@'*' TO 'root'@'%';
Please login to see this link.
Please login to see this link.
Das kommt mal vor wenn man Mysql komplett clean installiert, Da der Server davon ausgeht das man die Datenbank nur innerhalb des systems nutzen möchte, da wir aber auch von unserem Windows auch drankommen wollen müssen wirs freischalten, anstatt des % zeichens kann man auch die ip des eigenen PC"s setzen, sofern diese sich nicht verändert könnten dann nur wir darauf zugreifen.
So da wir nun unsere Datenbank clean aufgesetzt haben müssen wir uns nur noch um die Tabellen selbst kümmern, in der V3 finden wir unter dem Verzeichnis Source folgendes:
Please login to see this link.
Wir loggen uns auf die Datenbank ein erstellen dann wie folgt die passenden Datenbanken:
Please login to see this link.
Please login to see this link.
account
log
player
common
nun öffnen wir einmal die datenbank selbst, doppelklick auf account, danach ziehen wir unsere .sql datei auf die datenbank drauf, dann sollte dieses Fenster erscheinen:
Please login to see this link.
wir starten den Prozess, am ende refreshen wir das ganze (F5) und alle Tabellen sollten dort erscheinen.
nun haben wir die Datenbank eingerichtet, es fehlt nur noch die Lib an die richtige stelle zu packen, dann sind wir mit dem Einrichten des Servers an sich fertig.
Please login to see this link.in SFTP unter /usr/lib32/ finden wir einen ordner voll mit libs, das sind quasi die dll"s von FreeBSD selbst.
wir nehmen nun die fehlende libstdc++.so.6 die wir in unseren Files unter Source/Server/files for Server/libs finden und ziehen die in /usr/lib32 rein.
nun starten wir mittels Shell datei den Server,
Wir loggen uns in SFTP ein und öffnen eine neue Putty Sitzung:
cd /usr/home/game && sh index.sh
Please login to see this link.
ich mache das immer so das ich erst die logs lösche, dann die quests reloade, danach den server erst starte
Please login to see this link.
Bleibt es bei diesem Fenster habt ihr erfolgreich den Server gestartet,
Sollte ein Fehler vorher auftauchen habt ihr einer der Punkte zuvor nicht befolgt oder die Files sind einfach nicht die richtigen.
So, nun bearbeiten wir noch unser einloggpasswort
wir loggen uns in mysql ein gehen unter Account auf die Table Account,
Please login to see this link.
da ich das Passwort des Accounts nicht kenne ändern wir es einfach auf ein beliebiges ab, dazu gehen wir einfach auf die Seite : Please login to see this link.
Und ändern in der spalte password das Passwort ab, achtet darauf das ihr das Sternchen mitnehmt. Der hash Algorithmus der hier genutzt wird ist MD5.
Theoretisch kann man sich nun einloggen aber wir befassen uns zunächst noch mit der ClientSrc
Dazu benutzen wir Visual Studio 2022 mit dem vstoolset für 2019, und C++ parts vorinstalliert.
wir gehen nun in unsere clientsrc und öffnen die Client.sln
Please login to see this link.
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
Please login to see this link.
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
gehen wir nun im Client in den Pack Ordner
Please login to see this link.
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.
(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
Please login to see this link.
voila
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.
Please login to see this link.
data, log und share sowie game sind jeweils verknüpfungen
CONFIG ist die wohl wichtigste datei
- 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
die pid zeigt einfach nur welche Prozessid der Core derzeit im moment im System hat (in meinem Fall in FreeBSD)
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.
Der Datenbankordner beinhaltet folgende Dateien
Please login to see this link.
- 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
die variante txt findet ihr hier:
Please login to see this link.
Please login to see this link.
öffnen wir den ordner share sieht dieser hier so aus:
Please login to see this link.
Please login to see this link.die Blend.txt ist meines Wissens nach für solch Taue zuständig:
Please login to see this link.
Please login to see this link.oder für Items die Variation haben sollen,
BlueDragon.lua ist anscheinend eine Extra datei für den Beran Setaou run
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
- 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;
- }
Ein überbleibsel von alten drop tables soweit ich das noch von früher weiß
da hab man nen namen in ' ' geschrieben dahinter ne prozentzahl vonwegen wie oft der gedroppt hat
war für uppitems gedacht
Please login to see this link.
Please login to see this link.ich war mal so frei und hab mal alles koreanische übersetzen lassen zumindest das was ging
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 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
}
dofile(get_locale_base_path() .. "/country/cz/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/de/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/en/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/es/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/fr/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/hu/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/it/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/pl/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/pt/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/ro/locale_quest.txt")
dofile(get_locale_base_path() .. "/country/tr/locale_quest.txt")
sowie ich die datei verstehe switcht die datei den quest text pfad je nach client spracheinstellung
"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...
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.
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
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)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
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);
die datei gehört zu dem Please login to see this link. Shop ex system womit man Aus npc shops items mit Items kaufen kann
Die Stärke von Skill level, falls ihr jemals Höhere Skills einbauen wollt sowas wie Please login to see this link. achtet darauf das diese natürlich dann auch weiter fortgeführt werden
die Datei erstellt quasi Items welche als Truhe dienen, dabei ist zu beachten das man nur ein Item beim öffnen der truhe bekommt
vorne ist die Reihenfolgen zahl, danach kommt die vnum, danach die anzahl, danach die Chance das item zu bekommen
Ein überbleibsel eines angefangenem Multi language systems
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.
Egal welchen Clienten ihr nun habt, Mehrmals steht ihr im Pack Ordner des Clienten und sucht beispielsweise das Loginbild oder ihr sucht eine Gewisse Textur im Client und wisst nicht wonach ihr suchen müsst, Ich versuche das ganze anhand einer Tabelle möglichst simpel zu erklären, je nach client ist das natürlich unterschiedlich aber i.d.r. sind fast alle Clienten so aufgebaut.
name epk eix packarchiv | Pfad beispiele | inhalt |
costume | pack / costume / ymir work / pc pack / costume / ymir work / pc2 pack / costume / ymir work / pc3 pack / costume / ymir work / item | hier sind beispielsweise Kostüme wie Fußballtrikots zu finden d.h. Texturen der jeweiligen Rassen als auch Waffenkostüme, (.GR2 & DDS) |
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 / environment pack / etc / ymir work / special pack / etc / ymir work / ui | 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 / effect pack / locale_de / locale / de pack / locale_de / locale / de / icon pack / locale_de / locale / de / ui | 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. |
monster / monster2 | pack / monster / ymir work / monster pack / monster / ymir work / monster | hier befinden sich alle wichtigen Clientdateien bezüglich aller monster die es im Spiel gibt, heißt Modelle, Animationslisten (motlist), Effektabhängigkeiten, Texturen |
npc / npc_mount / npc_pet / npc2 | pack / npc / ymir work / npc pack / npc / ymir work / npc2 pack / npc / ymir work / npc_mount pack / npc / ymir work / 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 / pcX / ymir work / pc / pack / pcX / ymir work / pc2 / pack / pcX / ymir work / p3 / | 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 pack / season / season2 | 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 |
Habt ihr euch nun etwas eingefunden und möchtet euch nun heranwagen ein System einzubauen dann befolgt ein paar dinge
ich nehme als Beispiel das Please login to see this link. System,
laden wir uns das Archiv runter und öffnen dieses finden wir 3 Ordner
Please login to see this link.
Das Prinzip dieser HowTo"s ist eigentlich überall das gleiche, zumindest hat man quasi einen Standart dazu,
In einem Ordner ist der Source Part, in einem der Serverfile und in einem der Clientfile part, oftmals werden auch nur die Dateinamen beschrieben, in egal welchem fall wird das i.d.r. So beschrieben das man eigentlich immer weiß in welcher Datei man nachschauen muss.
Please login to see this link.
hier als beispiel heißt die Datei Service.h , diese befindet sich im ServerSource
dort wird beschrieben das wir #endif suchen sollen und davor eine neue Zeile erstellen sollen und dann den code einfügen sollen also #define __SKILLS_LEVEL_OVER_P__
in der Regel laufen alle Tutorials meist exakt so ab, natürlich gibts Starke abweichungen aber eigentlich ists immer nach dem Selben Schema
Wichtig sind so Grundlegende Sachen Beim Programmieren, ich bin kein Developer etc aber das muss man auch so wissen:
Wenn eine Klammer aufgeht muss diese auch irgendwann wieder zu gehen, am besten in den selben ebenen, egal ob geschweifte Klammer oder Eckige oder Normale, Was offen ist muss auch wieder zu gehen.
In Python ist die Schreibweise besonders wichtig achtet dort bitte darauf das ihr immer die Tabulatoren euch anzeigen lasst:
Please login to see this link.
Denn Python zwingt euch quasi dazu Schön zu schreiben, Es werden Codeparts einfach übersprungen oder falsch angewendet wenn diese falsch eingerückt worden sind, also immer darauf achten wie dieser Code angeordnet ist.
Habt ihr nun ein Tutorial befolgt und seid dabei auf einen Fehler gestoßen?
Das Erste was ihr macht ist wortwörtlich den Fehler bei Google eintippen, in 90% der Fällen werdet ihr eigentlich fündig, wenn nicht schreibt ihr einfach noch metin2 in die suche mit rein dann in der Regel schon.
ggf hilft das nutzen der Suchfunktion evt auch schon weiter, oder Leute hatten unter dem System einen Ähnlichen oder Gleichen Fehler zuvor also ein Weiterer blick unter dem System schadet nicht. Habt ihr dennoch keine Antwort gefunden bitte ich darum immer, einen Thread zu erstellen denn, die Shoutbox ist keine Support-Area, Höchstens zur Ersten Kontaktaufnahme.
Ihr schreibt ins Thema, Um Welches System es sich handelt, was ihr bisher gemacht habt und wie ihr vorgegangen seid.
Dann solltet ihr sämtliche Logs.txt / Syserr.txt inhalte / Syserrmeldungen / Fehlerinformationen u.ä. mit angeben und den Fehlerhaften Code mit beilegen. Habt ihr diese Punkte berücksichtigt sollte in der Regel alles gut Gehen und euch wird geholfen. Viele Leute würden gerne helfen allerdings ist es für uns Meist Schwierig wenn man erst einem alles aus der Nase ziehen muss.
Please login to see this link.
Achtung Bei Maps: Maximale Maps pro CONFIG (Core / Channel wie auch immer) MAP_ALLOW ist begrenzt auf 32 Maps für einen Core, mehr packt das System nativ nicht,
der Src Part dazu wenn man es erweitern möchte
Danke an @₵asper fürs rausfinden
Beim Item Einfügen muss man hierbei leider unterscheiden zwischen SQL und TXT, wie man diese genau unter SQL Einfügt werde ich bestimmt irgendwann mal hier eintragen allerdings liegt mein Fokus eher auf TXT, Ihr dürft natürlich das benutzen was euch angenehmer ist, im Grunde genommen sind alle Schritte die selben lediglich bei der Item Proto gibt es definitiv Unterschiede.
Wenn mir wer seine "aktuelle Methode" von SQL kurz zeigt bring ich die hier mit rein, Ich kenne nur Steinzeitmethoden ausm 1900 Jahrhundert
Please login to see this link.
Möchten wir nun ein Item hinzufügen, Dabei ist es egal um welche Art Item es sich hier handelt in Erster Linie benötigen wir zunächst einen Eintrag in der Item_Proto.txt
diese finden wir im Server unter /usr/home/game/Datenbank/ oder /usr/home/game/db/
Please login to see this link.
im Client finden wir diese als Endungslose datei unter "Client / pack / locale_de / locale / de bzw Die der Euren Sprache
Please login to see this link.
Wir öffnen die Item_Proto.txt und importieren diese in OpenOffice Calc oder Excel dies machen wir indem wir die Item_proto.txt erstmal mit einem Texteditor der Wahl öffnen und darauf hin mittels Strg + A und Strg + C alles markieren und alles kopieren, dann klicken wir die Erste Zelle in OpenOffice Calc an und drücken Strg + V
daraufhin erscheint dieses Fenster:
Please login to see this link.
hier einfach Enter drücken
ihr habt nun die Item_Proto in einem Tabellenprogramm geöffnet und könnt diese nun bearbeiten
Please login to see this link.
Wir schauen uns nun um und entscheiden uns für einen Freien Platz in der VNUM Liste
ich hab dann gesehen das beispielsweise zwischen 13209 und 14000 rund 791 vnums platz sind, das sollte auf jedenfall für einige Items ausreichen
Ich wähle also Beispielsweise die VNUM 13300, Zum Test wähle ich als Item ein Armband d.h. ich brauch natürlich auch die anderen Uppstufen
13300 | Armband+0 |
13301 | Armband+1 |
13302 | Armband+2 |
[...] | |
13309 | Armband+9 |
Haben wir nun unsere VNUMS gefunden suchen wir am einfachsten ein Bereits vorhandenes Item und kopieren dieses und ändern es daraufhin nur ab, Eine Genaue Beschreibung aller Boniwerte sowie Flags und Antiflags findet ihr Please login to see this link.
Ich habe hierzu den kompletten Block der Items
14000
...
14009
als komplette Spalten markiert und diese kopiert
nun Scrolle ich hoch zu der Stelle wo ich sie einfügen will und markiere wieder dort die Zeilen wo ich die drinne haben will,
dann klicke ich nun Rechtsklick auf die Spalte mit den Zeilennummern und drücke Zeilen Einfügen
Please login to see this link.
ihr werdet nun Leere Zeilen bekommen die zwischen den andren geschoben worden ist
nun drückt ihr Strg + V und fügt die Kopierten Zeilen ein
Please login to see this link.
nun klickt ihr die Erste Vnum an bearbeitet diese zu eurer Wunschvnum in meinem Falle 13300 und zieht diese an der von mir Rot Markierten Stelle bis zu der +9er vnum, somit werden alle Werte automatisch ausgefüllt, in meinem falle ist es eine Zahlenfolge, d.h. 0-9.
Nun beschäftigen wir uns noch ein bisschen mit den Flags / Antiflags sowie Bonianpassungen.
Die Zweite Spalte in der Item_Proto.txt ist absolut egal, da kann drinne stehen was auch immer Euer Herz begehrt, Meistens schreibe ich wenn möglich einfach da ein X hin damit die Spalte schön kurz bleibt, der Item name selbst wird nämlich in der Datei Item_names.txt angegeben,
Als Type wähle ich bei mir den Typ: ITEM_ARMOR da dies ein Ausrüstungsgegenstand ist und sowas als ARMOR deklariert wird
der SubType bei mir ist ARMOR_WRIST da es sich bei mir um ein Armband handelt
die Size bleibt bei mir auf 1 da wir nur Ein Feld im Inventar einnehmen wollen
AntiFlags lasse ich bei NONE da ich möchte das dieses Item alle Charakterklassen tragen können
Bei Flags steht bei mir ebenfalls nichts da ich das Item weder Stacken möchte noch was anderes mit gemacht wird
Bei Wearflags steht natürlich WEAR_WRIST da dieses als Armband getragen wird
Bei ImmuneFlags steht NONE da ich keine Immun Flags auf dem Item haben möchte
Bei Gold wähle ich nun einen Preis aus den mir das Item bringen würde wenn ich es verkaufe ich hab hier 500 eingetragen
Bei ShopBuyPrice habe ich 1000 gewählt, das führt dazu das ich das Item bei einem NPC für 1000 Yang kaufen müsste
Bei Refined vnum Trage ich die Nächste VNUM ein, RefinedVnum bedeuted, Wenn ich dieses Item Upgrade zu Was kann ich dieses Upgraden bzw was kommt raus wenn ich dieses upgraden möchte. in meinem Falle trage ich natürlich dann Die vnum 13301 ein in die Spalte des Items 13300 da ich es ja zum Item +1 Upgraden möchte.
Bei RefineSet trage ich erstmal 1 ein, Die RefineSet legt fest mit welchem Upgradeverfahren man das Item upgraded, Die Details hierzu findet man in der MySQL Datenbank unter Player/refine_proto
Please login to see this link.
AlterToMagicItemPercent lasse ich einfach bei 15 das führt dazu das es zu 15% die Chance hat, Das Item mit einem Zufälligen Bonus zu droppen
LimitType0 / LimitValue0 / LimitType1 / LimitValue1 sind limitierungen beispiel durch Zeit oder Levelanforderungen
da ich das Item erst ab level 30 Nutzen möchte setze ich bei LimitType0 LEVEL und bei LimitValue0 30
bei LimitType1 setze ich LIMIT_NONE und als Value 0
ApplyType0 ApplyValue0 ApplyType1 ApplyValue1 ApplyType2 ApplyValue2 ApplyType3 ApplyValue3
ApplyType X steht für den Bonustypen und ApplyValue X für die Höhe diesen.
Als Beispiel hier: APPLY_NONE = Kein Bonus, APPLY_ATT_SPEED = füge Angriffsgeschwindigkeit hinzu
Please login to see this link.
somit habe ich im Ersten Bonus Angriffsgeschwindigkeit von 22 hinzugefügt als Basiswert, diesen kann man nicht switchen.
Value0 - Value5 sind relativ Spezielle Werte
Value0 hat bei Waffen as i know Nix zu bedeutung
Value1 bei Waffen = Magischer Angriffswert Minimum
Value2 bei Waffen = Magischer Angriffswert Maximum
Value3 bei Waffen = Minimaler Angriffsschaden
Value4 bei Waffen = Maximaler Angriffsschaden
Value5 bei Waffen = Addiert einen Angriffsschaden auf den maximalem Waffenschaden obendrauf (ist eig für gedacht wenn man uppt wie viel Damage die Waffe obendrauf bekommt)
Value0 hat bei Rüstungen keine WIrkung
Value1 ist bei Rüstungen der Basis Verteidigungswert
Value2 hat bei Rüstungen keine Wirkung
Value3 ist die Modellbezeichnung aus der jeweiligen msm welche sich im root pack archiv befindet: assassin_m.msm, assassin_w,msm , shaman_m.msm, shaman_w.msm, sura_m.msm, sura_w.msm, warrior_m.msm, warrior_w.msm, wolfman_m.msm
Value4 hat bei Rüstungen keine Wirkung
Value5 ist bei Rüstungen der Wert der als Verteidigungswert auf den Basiswert draufgerechnet wird (ist eig für gedacht wenn man uppt wie viel DEF man bei der Rüstung nachm Uppen dazubekommt)
Bei Haaren hat der Value3 übrigens auch die selbe bedeutung wie bei einer Rüstung
Specular ist die Sichtbarkeit des "Reflektieren / Beleuchten der Waffe / Der Rüstung / Des Objektes" , 0 ist garnicht 100 ist maximum
GainSocketPercent / Sockets / whatever sagt eigentlich eher aus wie viele Sockel die Rüstung oder die Waffe hat
AddonType kann nur den Wert 0 oder -1 haben, dies hat zufolge dass das Item die möglichkeit hat Fertigkeitsschaden und Durchschnittlichen Schaden zu bekommen, also DSS und FKS somit fallen beim Switchen die letzten zwei Bonis automatisch weg.
dies bearbeitet kopiert ihr nun den inhalt in die item_proto.txt speichert dieses, passt die item_names.txt an und führt im selbigen ordner eurer protos die dump_proto.txt aus, diese befindet sich bei Fliege V3 unter Source/bin/release/dump_proto.exe und lässt sich mit der clientsrc einzelnd compilen
Öffnen wir in unserer MySQL Datenbank die Tabelle Player/refine_proto finden wir das hier vor
Please login to see this link.
Dies ist die Upptabelle für die Uppverfahren
ID = Generelle Zuweisungsnummer für die Item_Proto für die Spalte refineset für das jeweilige Uppverfahren
vnum0, vnum1, vnum2, vnum3, vnum4 = Die Jeweilige ItemID Welche man zum Uppen benötigt an Material
cound0, count1, count2, count3, count4 = die jeweilige Anzahl der Items Welche man zum Uppen benötigt
cost, Die Kosten in Yang welche man zum Upgrade jeweils benötigt
src_vnum und result_vnum regelt man in der regel beides in der Item_Proto, beschreibt eigentlich nur aus welchem Item (src_vnum) welches Item wird (result_vnum) wird aber wie erwähnt bereits in der Item_Proto definiert daher kann man das auch leer lassen
prob = ist die Erfolgschance in % beim Upgraden / uppen
Sollten Fragen auftauchen Frag Sonstwen aber nicht mich ich hab keine Ahnung von allem ich bin nur Deko