Menu
Forums
All threads
Latest threads
New posts
Trending threads
New posts
Search forums
Trending
What's new
New posts
New profile posts
Latest activity
Members
Current visitors
New profile posts
Search profile posts
Upgrades
Log in
Register
What's new
Search
Search
Search titles only
By:
All threads
Latest threads
New posts
Trending threads
New posts
Search forums
Menu
Log in
Register
Navigation
Install the app
Install
More options
Contact us
Close Menu
Forums
Server Development
Habbo Retros
Habbo Development
prjEuclid [C#, V1, MySQL/ORM]
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
<blockquote data-quote="Quackster" data-source="post: 472518" data-attributes="member: 971"><p><img src="https://i.imgur.com/5eNXuOp.png" alt="" class="fr-fic fr-dii fr-draggable " style="" /></p><p></p><p>Project Euclid is a Habbo Hotel server written in C# NET 5.0 that uses various libraries such as DotNetty and NHibernate to emulate the version 1 of Habbo Hotel when it was first around in 2001, which at the time of writing is 21 years old.</p><p></p><p>I must preface by saying, while yes, I did indeed write <a href="https://devbest.com/threads/roseau-fully-featured-v1-server-java.82746/" target="_blank">Roseau</a>, which was the damn near almost complete version 1 server of Habbo Hotel. I wrote this back in 2017, almost five years ago. There are plenty things wrong with the server, which Euclid will correct and it is better to start again than to try and apply duct tape to that codebase.</p><p></p><p><strong><span style="font-size: 12px">Features</span></strong></p><p></p><ul> <li data-xf-list-type="ul">Fully implemented RC4 encryption (client->server)</li> <li data-xf-list-type="ul">Register</li> <li data-xf-list-type="ul">Login</li> <li data-xf-list-type="ul">Support for multiple public rooms</li> <li data-xf-list-type="ul">Navigator</li> <li data-xf-list-type="ul">Private rooms</li> <li data-xf-list-type="ul">Create rooms (with proper redirect into room, unlike any other V1 server before it)</li> <li data-xf-list-type="ul">Update rooms (with correct room info displayed when editing)</li> <li data-xf-list-type="ul">Walking</li> </ul><p></p><p><strong><span style="font-size: 12px">Frequently Asked Questions</span></strong></p><p></p><p><em>Open source?</em></p><p></p><p>Of course it will be open source, eventually. No one will be interested in this otherwise.</p><p></p><p><em>Why a server for version 1 in 2022?</em></p><p></p><p>We have the Lingo for the version 1 so why not create it to the best of our abilities.</p><p></p><p><em>Why are you using NHibernate?</em></p><p></p><p>Why not? I like it.</p><p></p><p><strong><span style="font-size: 12px">Code Snippets</span></strong></p><p></p><p>Configuration file example (public rooms each require their own port to distinguish which room they connected to)</p><p></p><p>[code]<configuration></p><p> <mysql></p><p> <hostname>localhost</hostname></p><p> <username>root</username></p><p> <password>123</password></p><p> <database>euclid</database></p><p> <port>3306</port></p><p> <min_connections>5</min_connections></p><p> <max_connections>10</max_connections></p><p> </mysql></p><p> <server></p><p> <main></p><p> <ip>127.0.0.1</ip></p><p> <port>37120</port></p><p> </main></p><p> <private></p><p> <ip>127.0.0.1</ip></p><p> <port>25006</port></p><p> </private></p><p> <public></p><p> <room></p><p> <ip>127.0.0.1</ip></p><p> <port>22009</port></p><p> <room_id>1</room_id></p><p> </room></p><p> </public></p><p> </server></p><p></configuration>[/code]</p><p></p><p>BusyFlatResultsComposer</p><p></p><p>[code]</p><p>using Euclid.Game;</p><p>using Euclid.Network.Streams.Util;</p><p>using Euclid.Storage.Database.Data;</p><p>using System.Collections.Generic;</p><p></p><p>namespace Euclid.Messages.Outgoing</p><p>{</p><p> class BUSY_FLAT_RESULTS : IMessageComposer</p><p> {</p><p> private List<Room> rooms;</p><p></p><p> public BUSY_FLAT_RESULTS(List<Room> rooms)</p><p> {</p><p> this.rooms = rooms;</p><p> }</p><p></p><p> public override void Write()</p><p> {</p><p> foreach (var room in rooms)</p><p> {</p><p> Data.Add(new ValueEntry(room.Data.Id, "/"));</p><p> Data.Add(new ValueEntry(room.Data.Name, "/"));</p><p></p><p> if (room.Data.ShowName)</p><p> Data.Add(new ValueEntry(room.Data.OwnerData.Name, "/"));</p><p> else</p><p> Data.Add(new ValueEntry("-", "/"));</p><p></p><p> if (room.Data.AccessType == RoomStatus.OPEN)</p><p> Data.Add(new ValueEntry("open", "/"));</p><p></p><p> if (room.Data.AccessType == RoomStatus.CLOSED)</p><p> Data.Add(new ValueEntry("closed", "/"));</p><p></p><p> if (room.Data.AccessType == RoomStatus.PASSWORD)</p><p> Data.Add(new ValueEntry("password", "/"));</p><p></p><p> Data.Add(new ValueEntry("Floor1", "/"));</p><p> Data.Add(new ValueEntry("", "/"));</p><p> Data.Add(new ValueEntry(room.Address.IpAddress, "/"));</p><p> Data.Add(new ValueEntry(room.Address.IpAddress, "/"));</p><p> Data.Add(new ValueEntry(room.Address.Port, "/"));</p><p> Data.Add(new ValueEntry(room.Data.UsersNow, "/"));</p><p> Data.Add(new ValueEntry("null", "/"));</p><p> Data.Add(new TextEntry(room.Data.Description));</p><p> }</p><p> }</p><p> }</p><p>}</p><p>[/code]</p><p></p><p><strong><span style="font-size: 12px">Images</span></strong></p><p></p><p>Working room creation</p><p></p><p><img src="https://i.imgur.com/44ahyZw.gif" alt="" class="fr-fic fr-dii fr-draggable " style="" /></p><p></p><p>Working pagination on navigator</p><p></p><p><img src="https://i.imgur.com/LLiIHdc.gif" alt="" class="fr-fic fr-dii fr-draggable " style="" /></p></blockquote><p></p>
[QUOTE="Quackster, post: 472518, member: 971"] [IMG]https://i.imgur.com/5eNXuOp.png[/IMG] Project Euclid is a Habbo Hotel server written in C# NET 5.0 that uses various libraries such as DotNetty and NHibernate to emulate the version 1 of Habbo Hotel when it was first around in 2001, which at the time of writing is 21 years old. I must preface by saying, while yes, I did indeed write [URL='https://devbest.com/threads/roseau-fully-featured-v1-server-java.82746/']Roseau[/URL], which was the damn near almost complete version 1 server of Habbo Hotel. I wrote this back in 2017, almost five years ago. There are plenty things wrong with the server, which Euclid will correct and it is better to start again than to try and apply duct tape to that codebase. [B][SIZE=3]Features[/SIZE][/B] [LIST] [*]Fully implemented RC4 encryption (client->server) [*]Register [*]Login [*]Support for multiple public rooms [*]Navigator [*]Private rooms [*]Create rooms (with proper redirect into room, unlike any other V1 server before it) [*]Update rooms (with correct room info displayed when editing) [*]Walking [/LIST] [B][SIZE=3]Frequently Asked Questions[/SIZE][/B] [I]Open source?[/I] Of course it will be open source, eventually. No one will be interested in this otherwise. [I]Why a server for version 1 in 2022?[/I] We have the Lingo for the version 1 so why not create it to the best of our abilities. [I]Why are you using NHibernate?[/I] Why not? I like it. [B][SIZE=3]Code Snippets[/SIZE][/B] Configuration file example (public rooms each require their own port to distinguish which room they connected to) [code]<configuration> <mysql> <hostname>localhost</hostname> <username>root</username> <password>123</password> <database>euclid</database> <port>3306</port> <min_connections>5</min_connections> <max_connections>10</max_connections> </mysql> <server> <main> <ip>127.0.0.1</ip> <port>37120</port> </main> <private> <ip>127.0.0.1</ip> <port>25006</port> </private> <public> <room> <ip>127.0.0.1</ip> <port>22009</port> <room_id>1</room_id> </room> </public> </server> </configuration>[/code] BusyFlatResultsComposer [code] using Euclid.Game; using Euclid.Network.Streams.Util; using Euclid.Storage.Database.Data; using System.Collections.Generic; namespace Euclid.Messages.Outgoing { class BUSY_FLAT_RESULTS : IMessageComposer { private List<Room> rooms; public BUSY_FLAT_RESULTS(List<Room> rooms) { this.rooms = rooms; } public override void Write() { foreach (var room in rooms) { Data.Add(new ValueEntry(room.Data.Id, "/")); Data.Add(new ValueEntry(room.Data.Name, "/")); if (room.Data.ShowName) Data.Add(new ValueEntry(room.Data.OwnerData.Name, "/")); else Data.Add(new ValueEntry("-", "/")); if (room.Data.AccessType == RoomStatus.OPEN) Data.Add(new ValueEntry("open", "/")); if (room.Data.AccessType == RoomStatus.CLOSED) Data.Add(new ValueEntry("closed", "/")); if (room.Data.AccessType == RoomStatus.PASSWORD) Data.Add(new ValueEntry("password", "/")); Data.Add(new ValueEntry("Floor1", "/")); Data.Add(new ValueEntry("", "/")); Data.Add(new ValueEntry(room.Address.IpAddress, "/")); Data.Add(new ValueEntry(room.Address.IpAddress, "/")); Data.Add(new ValueEntry(room.Address.Port, "/")); Data.Add(new ValueEntry(room.Data.UsersNow, "/")); Data.Add(new ValueEntry("null", "/")); Data.Add(new TextEntry(room.Data.Description)); } } } } [/code] [B][SIZE=3]Images[/SIZE][/B] Working room creation [IMG]https://i.imgur.com/44ahyZw.gif[/IMG] Working pagination on navigator [IMG]https://i.imgur.com/LLiIHdc.gif[/IMG] [/QUOTE]
Insert quotes…
Verification
Post reply
Forums
Server Development
Habbo Retros
Habbo Development
prjEuclid [C#, V1, MySQL/ORM]
Top