Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Flyff > Flyff Private Server
You last visited: Today at 14:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



SharpFly - C# FlyFF-Emulator

Discussion on SharpFly - C# FlyFF-Emulator within the Flyff Private Server forum part of the Flyff category.

Reply
 
Old   #1
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
SharpFly - C# FlyFF-Emulator


Hallöchen!
Willkommen beim Projekt SharpFly - Ein von Grund auf in C# geschriebener FlyFF v15-Emulator.
Das Projekt ist zwar noch nicht besonders fortgeschritten, aber ich versuche möglichst alle 2-3 Tage, je nachdem wie es die Zeit und Lust zulässt, die neuesten Änderung in das Repository auf GitHub zu pushen.

Das Projekt wird sowohl zu Lernzwecken als auch aus Spaß an der Sache geschrieben, soll also in keinem Fall irgendwelchen andere Files, egal ob Emulator oder Offi-Files, ersetzen.
Ich möchte das Projekt (bzw. den Sourcecode um genauer zu sein) mit anderen Leuten teilen, die sich ebenfalls mit einem Projekt in dieser Richtung beschäftigen wollen. Ich bin bestimmt nicht der Einzige, der schon immer mal einen eigenen MMORPG-Server schreiben wollte.

Dieser Thread soll dazu dienen, alle Interessierten auf dem Laufenden zu halten und auch eine Frage- und Diskussionsplattform bieten. Ich beantworte sehr gerne alle Fragen rund um SharpFly sowie Fragen für Leute, die gerade einen eigenen Emulator o.ä. schreiben und irgendwo festhängen oder einfach mal etwas über ein gewisses Thema (z.B. FlyFF Paketstruktur) Bescheid wissen wollen.
Auch ich selbst werde hier vermutlich die eine oder andere Frage stellen, da ich mich bei weitem noch nicht mit allem beschäftigt habe.

Der aktuelle Stand findet ihr immer in meinen Update-Posts.

Den Sourcecode findet ihr in diesem GitHub-Repository:

Ein großes Danke an Chyukasame für das aktuelle Logo!
Ebenfalls ein großes Danke an die Entwickler der Emulatorprojekte OsaFlyFF, Black-Orion und Meteor, euer Sourcecode hat mir schon einige Stunden Offi-File-Code durchwühlen gespart!



English version


Hiho!
Welcome to SharpFly - A FlyFF v15 emulator entirely written from scratch.
The project itself isn't very advanced yet, but i try to push all new additions every 2-3 days into the GitHub repository.

I created the project for learning purposes and just for fun. It's not made to replace any other emulators or even the official files.
I want to share my project (or to be more precise: the source code) with other people, who also are interested to create a porject like this. I'm sure i'm not the only one, who always wanted to write a own MMORPG server.

I made this thread to show updates to all interested people and to create a small question and discussion platform. I'll answer every question about SharpFly and questions from people, who are also writing a own emulator or something like that, e.g. if you stuck somewhere or just need a hint into the right direction.
I'll also ask the one or the other question, because i also don't know everything.

You can find the current state in my update posts.

You can find the source code in the GitHub repository:

Big thanks to Chyukasame for the current logo!
Also big thanks to all developers of OsaFlyFF, Black-Orion and Meteor, your source code saved me from crawling the official code for hours!
Kaev <3 is offline  
Thanks
8 Users
Old 08/21/2016, 20:49   #2



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,177
Received Thanks: 14,471
Wie viele Server (Acc, db, core, cache,...) sollen es am Ende werden?
Ich für meinen Teil finde sowas gut.

Edit: Client.cs
Code:
/*
                TODO:
                if world down send this.SendLoginFail(LoginError.SERVICE_DOWN);
                if account already logged in send this.SendLoginFail(LoginError.ACCOUNT_CONNECTED);
                */
Ein einfacher Heartbeat könnte den check machen.
Sedrika is offline  
Thanks
1 User
Old 08/21/2016, 20:52   #3
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
Quote:
Originally Posted by Sedrika View Post
Wie viele Server (Acc, db, core, cache,...) sollen es am Ende werden?
Ich für meinen Teil finde sowas gut.
Ich überlege derzeit, den Worldserver in Cluster und Worldserver aufzuteilen - Was dann 3 Server ergeben würde.
Sollte es aus irgendwelchen Gründen zu drastischen Performanceproblemen kommen, würde ich einzelne Bereiche auf eigene Server aufteilen. Mir käme da z.B. ein Instanzserver in den Sinn - Aber ob der den Kohl bei FlyFF wirklich fett macht? Eine Aufteilung der einzelnen Channel könnte vermutlich noch Sinn machen.
Kaev <3 is offline  
Old 08/21/2016, 21:42   #4



 
Sedrika's Avatar
 
elite*gold: 18
The Black Market: 103/0/0
Join Date: Sep 2009
Posts: 20,177
Received Thanks: 14,471
Könntest ja darauf hin arbeiten das multi cluster auf einem root möglich wären.
Clusterverwaltung und da dann nochmal channel Verwaltung.

Mir ginge jetzt so etwas durch den Kopf:
  • Account
  • Datenbank
  • Cluster
    • Channel
    • Cache
    • World
Sedrika is offline  
Thanks
1 User
Old 08/21/2016, 22:16   #5

 
/Aiden\'s Avatar
 
elite*gold: 1825
Join Date: Apr 2014
Posts: 1,059
Received Thanks: 1,334
Finde ich Top. Freue mich regelmäßige Updates zu sehen
/Aiden\ is offline  
Thanks
1 User
Old 08/22/2016, 08:04   #6
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
Quote:
Originally Posted by Sedrika View Post
Könntest ja darauf hin arbeiten das multi cluster auf einem root möglich wären.
Clusterverwaltung und da dann nochmal channel Verwaltung.

Mir ginge jetzt so etwas durch den Kopf:
  • Account
  • Datenbank
  • Cluster
    • Channel
    • Cache
    • World
Ein Datenbankserver wird aus meiner Sicht nicht benötigt. Ich werde alle Daten im Voraus laden und nur Datenbankzugriffe machen, wenn auch neue Daten enthalten sein könnten. Ein gutes Beispiel dafür wären z.B. Accounts. Falls es den aktuellen Accountnamen beim Login noch nicht im Cache gibt, wird per Prepared Statement auf die Datenbank zugegriffen und geschaut, ob es ihn dort gibt. Das wird so gemacht, damit der Server Accounts findet, die während der Laufzeit des Servers erstellt wurden. Sobald gefunden, wird der jeweilige Account dann natürlich ebenfalls in den Cache übernommen.

Jeder Server wird einen eigenen Cache für seine Daten haben, einen extra Cache-Server finde ich etwas unnötig. Kann mir da sogar vorstellen, dass daraus ein Flaschenhals entstehen könnte, da für jede Cache-Angelegenheit dann der Server angefragt und die Anfrage auch wieder beantwortet werden muss.

Woraus genau soll die Trennung aus Channel- und Worldserver bestehen?

Ich würde Cluster- und Worldserver wie folgt trennen:
Jeder Worldserver (sollte ich das vielleicht Channelserver nennen?) ist genau ein einziger Channel, welcher sich sich um alle Channelrelevante Dinge kümmert. Sollte nun etwas Channelübergreifendes passieren (z.B. eine private Nachricht von User A auf Channel 1 nach User B auf Channel 3), wird das Paket an den Clusterserver geleitet, der das Paket dann an den richtigen Worldserver weiterleitet.

Das alles wäre dann natürlich auch mit mehrfachen Clustern auf einem Server möglich.
Kaev <3 is offline  
Old 08/22/2016, 08:18   #7
 
elite*gold: 0
Join Date: Jul 2016
Posts: 36
Received Thanks: 17
Nice project, maybe i can contribute something once i start looking into C#.

Nonetheless good luck with this, all the best
Lodelight is offline  
Old 08/22/2016, 15:06   #8
 
Rhyder`'s Avatar
 
elite*gold: 115
Join Date: Jan 2012
Posts: 1,156
Received Thanks: 894
i like it thanks.
Rhyder` is offline  
Old 08/22/2016, 15:51   #9
 
Konare's Avatar
 
elite*gold: 110
Join Date: Feb 2016
Posts: 291
Received Thanks: 67
Interessant Werde ich weiterhin verfolgen.
Konare is offline  
Old 08/26/2016, 07:28   #10
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
Hatte leider die letzten Tage nicht allzu viel Zeit zum Programmieren, habe mir aber Gedanken um den aktuellen Worldserver gemacht. Leider werde ich in der nächsten Woche auch nicht groß zum Programmieren kommen, da der Release von WoW:Legion ansteht und ich mich schon ewig drauf freue. :3

Mein aktueller Gedankengang:
Ich werde den Worldserver in Clusterserver umbenennen. Dieser Server spiegelt dann das Cluster an sich wieder und verwaltet alle seine Channel.
Neu wird der sogenannte Channelserver sein, der jeweils einen Channel eines Clusters darstellt. Der Channel meldet sich beim Cluster an, welcher wiederum dem Loginserver mitteilen kann, dass er jetzt X Channel besitzt.
Ob das im Endeffekt so bleibt, weiß ich leider noch nicht, da ich mir gut vorstellen kann, dass die Weiterleitung der Pakete zwischen Cluster- und Channelserver irgendwann einen Flaschenhals darstellen wird. Der Client baut afaik nur 2 Verbindungen auf: Zum Loginserver auf Port 23000 und zum Clusterserver auf 28000. Lieber wäre es mir, wenn der Client direkt am Channelserver hängen würde und nur Channelübergreifende Pakete weiterleiten würde, da dort der (höchstens minimale, vermutlich im sehr niedrigen Millisekundenbereich) Delay nicht stören würde, aber ich hab gerade keine Idee, wie ich das umsetzen sollte, ohne den Client zu verändern, was momentan nicht in Frage kommt. :<

English:

I didn't had much time to program in the last days, but i had some thoughts about the current world server. Sadly i won't have much time to program in the next week too, because WoW:Legion will be released and i'm already waiting way too long for it. :3

My current thoughts:
I'll rename the world server to cluster server. This server will represent the cluster and all his channels. I want to add a new server called channel server, which will represent a single channel in the cluster. The channel will register himself at his cluster and the cluster will tell the login server, that he now has X channels.
I'm not sure if it will stay like that, because i could imagine that the packet forwarding between cluster and channel server could be a bottleneck in the future. The client creates afaik only 2 connections: One to the login server on port 23000 and one to the cluster server on port 28000. I would prefer to have the client directly on the channel server and only forward interchannel packets, because the (really minimalistic, maybe a few milliseconds) delay would not mind, but right now i have no idea to accomplish that without editing the client which is not acceptable right now.
Kaev <3 is offline  
Old 08/26/2016, 09:41   #11
 
Mognakor's Avatar
 
elite*gold: 0
Join Date: Mar 2008
Posts: 598
Received Thanks: 465
Zusätzliche Ports öffnen und dem Client beim Einloggen mitteilen welchen Port sein Channel nutzt?
Mognakor is offline  
Old 08/26/2016, 11:51   #12
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
Quote:
Originally Posted by Mognakor View Post
Zusätzliche Ports öffnen und dem Client beim Einloggen mitteilen welchen Port sein Channel nutzt?
In welchem Paket wird denn der Port übertragen? Hab jetzt spontan keins finden können.
Im SendServerList-Packet wird nur die IP des Clusters übertragen und auch beim WorldServerTransfer-Paket wird kein Port übergeben.. :s

EDIT: Ich sehe zwar, dass der Worldserver von OsaFlyFF Clients auf Port 15400 annimmt, aber ich weiß nicht, wo genau dieser Port festgelegt wird.
Kaev <3 is offline  
Old 08/26/2016, 17:31   #13
 
Mognakor's Avatar
 
elite*gold: 0
Join Date: Mar 2008
Posts: 598
Received Thanks: 465
Quote:
Originally Posted by Kaev <3 View Post
In welchem Paket wird denn der Port übertragen? Hab jetzt spontan keins finden können.
Im SendServerList-Packet wird nur die IP des Clusters übertragen und auch beim WorldServerTransfer-Paket wird kein Port übergeben.. :s

EDIT: Ich sehe zwar, dass der Worldserver von OsaFlyFF Clients auf Port 15400 annimmt, aber ich weiß nicht, wo genau dieser Port festgelegt wird.
Entweder es ist in einen der Server config files oder direkt in den Ressource-Files die in die Binary compiliert werden.

Da du den Loginserver ja schon gecoded hast solltest du auch mal über etwas gestolpert sein das sich auf einen Port einklinkt. Der Rest ist try-and-error.

P.S.:

Build>Source>Neuz>WinMain.rc

Code:
...

STRINGTABLE DISCARDABLE 
BEGIN
...
    IDS_CACHE_PORT          "5400"
...
END

...
Mognakor is offline  
Old 08/26/2016, 19:00   #14
 
Kaev <3's Avatar
 
elite*gold: 110
Join Date: Mar 2008
Posts: 856
Received Thanks: 389
Quote:
Originally Posted by Mognakor View Post
Entweder es ist in einen der Server config files oder direkt in den Ressource-Files die in die Binary compiliert werden.

Da du den Loginserver ja schon gecoded hast solltest du auch mal über etwas gestolpert sein das sich auf einen Port einklinkt. Der Rest ist try-and-error.

P.S.:

Build>Source>Neuz>WinMain.rc

Code:
...

STRINGTABLE DISCARDABLE 
BEGIN
...
    IDS_CACHE_PORT          "5400"
...
END

...
Ja, der Client klingt sich auf Port 23000 für den eigentlichen Login und auf Port 28000 nach der Clusterliste auf dem Weg zur Charakterliste ein. Diese Ports sind im Client hardkodiert. Und so wie ich das sehe, ist der Port zum Cacheserver ebenfalls hardkodiert, was mir zeigt, dass ich eben nicht vom Server aus einen Port senden kann, auf den der Client dann verbindet.
Wie geschrieben, soll man den Client nicht zwangsweise verändern müssen, damit man meine Files benutzen kann, was zur Folge hat, dass ich den Client nicht an den jeweiligen Channelserver verbinden lassen kann. Gilt natürlich nur, falls ich gerade nichts übersehe.. Aber bei der Hitze sei mir das hoffentlich verziehen.
Kaev <3 is offline  
Old 08/27/2016, 11:57   #15
 
Mognakor's Avatar
 
elite*gold: 0
Join Date: Mar 2008
Posts: 598
Received Thanks: 465
Quote:
Originally Posted by Kaev <3 View Post
Wie geschrieben, soll man den Client nicht zwangsweise verändern müssen, damit man meine Files benutzen kann, was zur Folge hat, dass ich den Client nicht an den jeweiligen Channelserver verbinden lassen kann.
Hab ich wohl überlesen.

Sofern deine Server-Files tatsächlich Vorzüge bieten, sollte ein bisschen Copy&Paste Code für den Client kein großes Problem sein.
Mognakor is offline  
Reply


Similar Threads Similar Threads
[SUCHE] Flyff C# Emulator Source Code von osaflyff oder ähnliches
10/05/2013 - Flyff Private Server - 0 Replies
Hay leute ich bin auf der Suche nach einem Sourcecode von einem der C# Emulator Projekte wie osaflyff oder ähnliches. Dient nur für lernzwecke und so also keine Sorge :P Also wäre nice wenns mir jemand hochladen könnte so long des
Flyff emulator
01/20/2009 - Private Server - 9 Replies
hi hab ma nachm emu geguckt vielleicht hilft euch diese seite weiter FlyFF Emu: News
Flyff Emulator
08/21/2008 - Flyff Private Server - 8 Replies
Hallo Liebe leute Ich habe eine frage an euch und zwar ob einer weis wie man sich ein Flyff Emulator basstelt oder ein tut dafür gibs. Mfg Mietze



All times are GMT +2. The time now is 14:43.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.