Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[C++ (Qt)][v9-v18?][Multi-platform] NexusServer (Updated to v1.2.0)

Status
Not open for further replies.
Newbie Spellweaver
Joined
May 25, 2011
Messages
77
Reaction score
58
[C++ (Qt)][v9-v18?][Multi-platform] NexusServer (Updated to v1.2.1)

Aerospark - [C++ (Qt)][v9-v18?][Multi-platform] NexusServer (Updated to v1.2.0) - RaGEZONE Forums

Current version: v1.3.0 alpha1(coming soon)
Current supported protocols: v9-v18, r63+

UPDATE JAN 1 2012 -- I've started a new thread for the development of the new server here.

UPDATE DEC 29 2011 -- I've started development on the new server, hopefully more details will come out soon.

UPDATE DEC 2011 -- I can't reply to this thread or create a new one because ragezone is disappointing, so I figured I'd stick this here:
Sorry for the lack of updates everyone, I had a lot going on, and I ended up losing interest in this project because things didn't go quite as planned.

I really liked the idea of multiprotocol support, and I wanted to implement it, but the day before I was about to post it here, Habbo posts an update to their protocol, and pretty much invalidates weeks of work, so that was kinda de-motivational for me.

Then after thinking about it for a while, I wasn't even implementing the latest version because I wanted to, I was doing it because there seemed to be a larger demand for the latest client, as opposed to the shockwave variant the server was originally coded for.

This started out as a learning project for me, I did it because Oracle really rubbed me the wrong way when they took over Sun, and because C++ seems to be a much less limiting language in some cases. I also did it because I remember I used to love messing with Habbo back in 04 and 05, and seeing the old client come to life again brought back some fun memories for me.

Then the project started gaining in interest, I wasn't just doing it because I was bored anymore, I was doing it because people wanted me to do it. Which was a really good feeling. I got the idea of optional multiprotocol support, which would be really cool, but because of the shape the server core was in (as I said this was a learning project for me, tbh this was the 2nd C++ program I've made) it took a lot of hacking bits of code together to get it working, and then it never ended up getting released because of the new protocol update.

There is a silver lining to all of this though -- I learned a lot about C++ and the Qt framework, and also (though the knowledge may be useless) a lot about how the Habbo client works.

Recently I started thinking about this again, and though it is a project that I can't really put in my portfolio nor profit from, it is something I'd really like to finish. What I'd like to do is start a new core from scratch set up to handle the implementation of multiprotocol support from the beginning, and only implement the original shockwave protocol. This leaves room for it to be extended in the future easily, and also lets me focus on the shockwave protocol, so I can implement it really well.

The SVN, website, and alpha of the (screenshot, incomplete) are coming up again now. I'd like to start work on NexusServer v2 around the same time.

This isn't set in stone yet, there are still a few variables up in the air, but I'd really like to get this on the road again.



TLDR: Disappointing, but ok. Though this isn't a project I can even put in my portfolio I'd really like to finish it, so I plan on possibly restarting NexusServer in the coming weeks.



This post is heavily outdated, it is currently being re-written,
open the spoiler below to see the outdated post.

I'd prefer this to be in the development section, but I submitted my thread, waited 24 hours, and nothing. Hope I didn't get rejected :eek:

NexusServer is a server core coded from scratch in C++. It is in the very early stages of development, but I think its functional enough to post here.

Code:
Under development:
  Pathfinding - Basic pathfinding is implemented, but collision/furniture detection is not.
  Navigator:
    Implemented:
        -room creation
        -private room navigation
        -local room navigation
        -room modification (name, description, lock, etc)
    Not yet implemented:
        -public rooms
        -room search

  General interface:
    Implemented:
        -non-sso registration
        -non-sso login
        -sso login
        -catalog
        -navigator (see above)
        -chat
        -furniture movement/stacking/rotation
        -hand (incomplete)
        -room heightmaps
        -rooms
        -post-registration player settings (figure/motto/etc)
    Not yet implemented:
        -messenger (Currently being implemented)
        -room search
        -public rooms

Code:
List of currently implemented features:
  -registration
  -login
  -sso login
  -pathfinding (see above)
  -furniture/catalog
  -simple ini-style config files
  -advanced javascript-based server module system (see below)
  -lots more not listed here

Javascript/LUA(maybe) server module information: (Currently undergoing reconstruction, see changelog)
NexusServer supports an advanced javascript-like server module system. I plan on implementing APIs for everything from implementing your own custom commands to implementing NPCs/bots.

Code:
Changelog:
  v1.0.1.7
    -Initial release

  v1.0.1.7 r2
    -implemented more opcodes into the packet handler switch

  v1.0.1.7 r3
    -started fixing the furniture handler, fixed furniture placement

  v1.0.1.8
    -Implemented ConfigEngine for simpler ini-style config files.
    -started implementing ModuleEngine, will take the place of the current javascript config system, the new system will be used to create custom server modules in javascript for commands/bots/etc
    -started cleaning up the code
    -removed some unused variables
    -cleaned up console output a bit

  v1.0.1.8 r2
    -added option to disable database verification into configuration/base_config.ini
    -added option to change server port into configuration/base_config.ini

  v1.0.1.8 r3
    -fixed room ownership, started implementing the rights system.

  v1.0.1.8 r4
    -cleaned up some un-needed output
    -started developing the console/messenger

  v1.0.1.8 r5
    -fixed crash caused by placing furniture.

  v1.0.1.8 r6
    -started implementing wall items
    -added a couple more commands, I've been waiting to finish the ModuleEngine to code them.

  v1.0.1.8 r7
    -implemented console search, but having some issues. Console will be released in v1.0.1.10.

  v1.0.1.8 r8
    -implemented sending friend requests

  v1.0.1.8 r9
    -replaced the crappy trimming method in ConfigEngine with QString.trimmed();

  v1.0.1.8 r10
    -implemented NexusServer::broadcastGlobal(QString packet) // broadcasts packet to all clients, for a specific room use RoomFactory::byId(roomid)->broadPacket(packet)
    -cleaned up the console output some more: http://filebeam.com/680cb682a8c87db75a37294c514b1ccc.jpg

  v1.0.1.9
    -fixed a few bugs
    -this update was mainly made to push out the changes in r6-r10. I was hoping to release console in v1.0.1.9, but it has been taking longer then I expected. Should be able to have it out by v1.0.1.10.

  v1.0.1.9 r2
    -fixed furniture movement, no more room invalidation

  v1.0.1.9 r3
    -added some more headers to opcode.h
    -started implementing player settings

  v1.0.1.9 r4
    -implemented figure/motto changing

  v1.0.1.10
    -implemented room settings
    -implemented figure/motto changing (1.0.1.9 r4)
    -added some more headers to opcode.h (1.0.1.9 r3)
    -fixed furniture movement, no more room invalidation (1.0.1.9 r2)

  v1.0.1.10 r2
    -merged Room and RoomFactory

  v1.0.1.10 r3
    -fixed all the tabs in client.cpp ;)

  v1.0.1.10 r4
    -created table consolemissions (id INTEGER PRIMARY KEY, mission VARCHAR(128), username VARCHAR(64))
    -created table posters (id INTEGER PRIMARY KEY, sprite VARCHAR(64), x INTEGER, y INTEGER, rot INTEGER, cust VARCHAR(64), inhand INTEGER, inroom INTEGER)

  v1.0.1.10 r5
    -implemented MySQL (Still don't have the DLL though. :c)

  v1.0.1.10 r6
    -created table ssotickets (accountid INTEGER PRIMARY KEY, ticket VARCHAR(128))
    -started implementing SSO-login.

  v1.2.0
    -changed the versioning system to a 3-digit system.
    -implemented MySQL (still missing the DLL)
    -created table posters (id INTEGER PRIMARY KEY, sprite VARCHAR(64), x INTEGER, y INTEGER, rot INTEGER, cust VARCHAR(64), inhand INTEGER, inroom INTEGER)
    -created table consolemissions (id INTEGER PRIMARY KEY, mission VARCHAR(128), username VARCHAR(64))
    -created table ssotickets (accountid INTEGER PRIMARY KEY, ticket VARCHAR(128))
    -fixed all the tabs in client.cpp ;)
    -merged Room and RoomFactory
    -implemented SSO-login
    -fixed v1.0.1.10's "Known Issue" with room modification.

  v1.2.1
    -lots of random code cleanup
    -added signal handlers to catch crashes
    -moved furniture handling to memory instead of sql statements
    -fixed stack height of some items
    -fixed stacking
    -fixed sitting
    -partially fixed pathfinding

  v1.2.1 r2
    -renamed :debug command to :debugtile
    -created command :packetlog (enables/disables packet logging for the local client)
    -fixed database driver error printorator
    -added the above commands to the :commands menu

  v1.2.1 r3
    -implemented room search (it's not quite working though)
    -cleaned up the code a bit more
    -added more to opcode.h
    -started implementing multi-protocol support (Flash (r63) support may be coming soon
Pre-release changelog:
Code:
   General server changes:
      -Config changed from ini style to XML.
      -Started implementing multi-protocol support (see below)
      -implemented terminal framework
      -implemented unix-like terminal for windows
      -implemented ncurses backend for terminal framework
      -implemented commands framework for ingame and terminal
      -started implementing commands
      -enhanced ranking system
      -added configuration options to qmake project file
        ~CONFIG += terminal flash shockwave
        ~terminal config option disables/enables the
          terminal framework
        ~flash config option disables/enables 
          compiling the flash protocol
        ~shockwave config option disables/enables
          compiling the shockwave protocol


   Multi-protocol support:
      -Started implementing multi-protocol support.
        Multi-protocol support allows NexusServer to support
        more then one client version on the same room/user
        server. This means that the server can have v9-v18
        (retro) clients and r63 (flash) clients in the same
        room.

       -There is now a protocol group in the config file,
         where you can specify what servers/protocols you
         want enabled and on what ports.


   Currently supported protocols:
       -Shockwave v9-v18 (possibly more)
       -Flash r63 (possibly more)
       -Yes, we are planning on implementing the other 
         shockwave protocols as well (v1, v20-vXX, etc)


   Shockwave protocol updates:
       -Implemented room search, but the client doesn't
         seem to be registering the packet.


   Flash protocol updates:
       -Implemented Cross-Domain policy handling
       -Implemented SSO login
       -Implemented sending user data
       -Implemented Navigator room listing (Me only)
       -Implemented entering rooms
       -Implemented sending room model/heightmap
       -Implemented sending room wallpaper/floor paint
       -Implemented FlashFurnitureProfile
       -Implemented Uberdb-style FlashFurnitureProfileBuilder
       -Implemented habbo furnidata scraper
       -Implemented sending room furniture

   
   General protocol updates:
       -Implemented habbopacket.h for easy packet creation,
         you can now +/+= strings, integers, booleans, doubles,
         etc to a packet and it will automatically format it 
         correctly. .addDatatype methods are also available.
       

   This is an incomplete changelog, there are more changes
   not listed here.

Code:
  Known issues:
      -Random interface messages may appear (Yay! it's being delivered now...), I'm not sure whats causing this...

Code:
  Developer list:
    -Aerospark (Lead developer)
    -Ktae (Lead developer)

Currently, NexusServer only supports SQLite databases, but once I find a working SQL driver, it will support both. NexusServer will automatically build/repair the database structure if it is damaged/does not exist.

Recently I did a "stress test" to see how the server reacted under "load," and it seems to be quite promising, here is a screenshot: (click to enlarge)

It's using less then half the memory mspaint is using to manage 140 users in 1 room.
Each user is currently given ~128kb of memory.


Also, sorry if I'm not allowed to post this here, but the development server may or may not be online . (Client files changed to v16.)

Download section:
Compiled windows binary with libraries (updated to 1.2.1):
Source archive (updated to 1.2.1): (QtCreator project)
Linux compiled binary: (coming soon, you should be able to compile the source for yourself though. (requires qmake))
Mac DMG: (coming soon, you should be able to compile the source for yourself though. (requires qmake))
Pre-release downloads:




If you plan on compiling for *nix, you will need to remove CONFIG += terminal from NexusServer.pro, this will be fixed by the final release.

New post (currently being written)
Supported protocols: Untested versions followed by a question mark, but are assumed to work
Shockwave: v8? v9 v10? v11? v12? v13 v14 v15 v16 v17? v18? v19?
Flash: r63 various revisions, latest build tested: 651


General server features:
Code:
  Mutltiprotocol support (shockwave and flash)
  Hardware-wait based handling, no thread sleeping!
  External JavaScript module system (incomplete)
  Curses implementation and custom terminal on windows


Completed Flash features:
Code:
  SSO Login
  Navigator (partial implementation)
  Room entering
  Room ownership
  Room furniture
  Room furniture movement
  Catalog (partial implementation)
  Buying furniture from the catalog
  Furniture inventory (partial implementation)
  Talking/shouting/whispering
  Walking
  Waving


Completed Shockwave features:
Code:
  SSO Login
  non-SSO Login
  Navigator (partial implementation)
  Figure/motto changer
  Console/messenger (incomplete)
  Room creation
  Room entering
  Room furniture
  Catalog
  Buying stuff from the catalog
  The hand (inventory) (partial implementation)
  Putting furniture down
  Furniture rotation/movement
  Picking furniture up
  Talking/shouting/whispering
  Walking
  Furniture interaction (sitting/turning on/off)


Currently under development: Updated often
Code:
  Multiprotocol integration
  Module system
  Flash figure/motto changer


Official server modules: (May not be functional until v1.3.1)
Code:
  Warp command (test module)


Useful links
SVN Trunk -
Test server (shockwave) -
Test server (flash) -
Localhost test server (shockwave) - (port 11420)
Localhost test server (flash) - (port 11420)

SVN Trunk
SVN Server should be working again, here is an archive of the latest source just incase:

We're looking for any help we can get on this project so if you feel like contributing, feel free to do so.
 
Last edited:
Newbie Spellweaver
Joined
Jun 24, 2011
Messages
27
Reaction score
4
Re: [C++/Qt][v14-v18?] NexusServer

This looks like a real project. Out of everyone here, I give complete "props" to you, second person I know here who knows what a computer is.
 
凸(ಠ益ಠ)凸
Loyal Member
Joined
Jun 16, 2008
Messages
1,665
Reaction score
227
Re: [C++/Qt][v14-v18?] NexusServer

this seems pretty cool, you said this currently only supports sqlite like it's a bad thing, plus for people who know nothing about mysql, it's a great thing to implement. GL on this project and id like to use it for fun in the future.

also what sort of help are you looking for?
 
Last edited:
Newbie Spellweaver
Joined
May 25, 2011
Messages
77
Reaction score
58
Re: [C++/Qt][v14-v18?] NexusServer

this seems pretty cool, you said this currently only supports sqlite like it's a bad thing, plus for people who know nothing about mysql, it's a great thing to implement. GL on this project and id like to use it for fun in the future.

also what sort of help are you looking for?

Thanks :)

I'm looking for help with anything, but specifically right now pathfinding. Currently, if you click on a tile, it will smoothly walk there properly, but ignoring any obstacles in it's path. I should be able to implement this myself, but it's among other important things that aren't #1 on my list right now.

I also can't seem to get the console/messenger working properly, if anybody has an implementation of this let me know.

I'll be implementing sso-login as soon as I implement regular SQL, so I may need help with web development at that point as well.

I plan on keeping the project open-source to the point where anybody can submit code. I also plan on making a Google Code project if it gets to that point.

I think my next move is to fix furniture movement and finish the ModuleEngine.
 
Last edited:
凸(ಠ益ಠ)凸
Loyal Member
Joined
Jun 16, 2008
Messages
1,665
Reaction score
227
Re: [C++/Qt][v14-v18?] NexusServer

Thanks :)

I'm looking for help with anything, but specifically right now pathfinding. Currently, if you click on a tile, it will smoothly walk there properly, but ignoring any obstacles in it's path. I should be able to implement this myself, but it among other important things aren't #1 on my list to implement right now.

I also can't seem to get the console/messenger working properly, if anybody has an implementation of this let me know.

I'll be implementing sso-login as soon as I implement regular SQL, so I may need help with web development at that point as well.

I plan on keeping the project open-source to the point where anybody can submit code. I also plan on making a Google Code project if it gets to that point.

I think my next move is to fix furniture movement and finish the ModuleEngine.

sounds like permanent :eek:verride command , in a way users might enjoy that XD
 
Banned
Banned
Joined
Jan 9, 2010
Messages
1,850
Reaction score
503
Re: [C++/Qt][v14-v18?] NexusServer

Hmm.. Looks promising.. just one question.. Why on earth are you using SQLLite!!?
 
Newbie Spellweaver
Joined
May 25, 2011
Messages
77
Reaction score
58
Re: [C++/Qt][v14-v18?] NexusServer

Hmm.. Looks promising.. just one question.. Why on earth are you using SQLLite!!?

Because it's the only QSql driver installed by default on my system, SQL is incredibly easy to implement. All that needs to be done is find a QSql .dll and put it in /sqldrivers/, then change the value in the config files, the in-code syntax is exactly the same.

Here is the login implementation for example:
PHP:
                QSqlQuery query;
                query.prepare("SELECT id, figure, sex, email, bdate, motto, username FROM accounts WHERE LOWER(username)=:un AND password=:pass");
                query.bindValue(":un", username.toLower(), QSql::Out);
                query.bindValue(":pass", password, QSql::Out); 

                if(!query.exec()){
                    sendPacket("BKError connecting to server");
                    break;
                }

                if(!query.next()){
                    // report bad login due to credientials
                    sendPacket("@alogin incorrect: Wrong username");
                    //socket->close();

                    break;
                }else{
                    int id = query.value(0).toInt();
                    if(isLogged(id)){
                        sendPacket("BKAccount Already Logged In"); // I know this isn't the "right" way, but I prefer it
                                                                   // going to add an option to the config file for this later.
                        break;
                    }

                    . . . (send auth data)
The implementation will remain the same, SQLite is actually useful, it allows the server to be both a "flatfile" (if I understand the term correctly) and a regular database server.
 
Last edited:

AWA

Master Summoner
Loyal Member
Joined
Feb 24, 2008
Messages
595
Reaction score
389
Re: [C++/Qt][v14-v18?] NexusServer

Finally a C++ emulator! I've waited a long time for this! EPIC
 
Banned
Banned
Joined
Jan 9, 2010
Messages
1,850
Reaction score
503
Re: [C++/Qt][v14-v18?] NexusServer

@Aerospark, Please google "C++ MySql" ;)
 
Newbie Spellweaver
Joined
May 25, 2011
Messages
77
Reaction score
58
Re: [C++/Qt][v14-v18?] NexusServer

@Aerospark, Please google "C++ MySql" ;)

Now.. why would I do that?
Using QSql allows the server to support a wide array of databases with no code changes. Here is a list of drivers the server supports (if you can find the DLLs lol):
IBM DB2 (version 7.1 and above), Borland InterBase, MySQL, Oracle Call Interface Driver, Open Database Connectivity (ODBC) - Microsoft SQL Server and other ODBC-compliant databases, PostgreSQL (versions 7.3 and above), SQLite version 2 and 3, and Sybase Adaptive Server.
Some of them may not be applicable to this project, but it's a wide platform.

Hopefully the messenger/console will be finished by the end of the day.
 
Last edited:
Developer
Developer
Joined
Dec 11, 2010
Messages
2,955
Reaction score
2,688
Re: [C++/Qt][v14-v18?] NexusServer

SQLite is much better as it is ready-to-run however with MySQL you have to edit the details which is a witch.
 
Elite Diviner
Joined
Sep 18, 2009
Messages
414
Reaction score
149
Re: [C++/Qt][v14-v18?] NexusServer

I really like the use of C++ instead of C#, that's a nice initiative you got going here! I'm totally supporting this project, keep it up man! I'll keep following your progress.
 
Ball like Wall
Joined
Aug 12, 2009
Messages
301
Reaction score
56
Re: [C++/Qt][v14-v18?] NexusServer

This has some major potential. I'm terrible with C++ or else I'd be your slave to help. Good luck dude!
 
Skilled Illusionist
Joined
Oct 22, 2010
Messages
361
Reaction score
34
Re: [C++/Qt][v14-v18?] NexusServer

Good luck.
 
Rip Akaruz
Loyal Member
Joined
Dec 18, 2007
Messages
934
Reaction score
12
Re: [C++/Qt][v14-v18?] NexusServer

Very nice release! That looks great, keep up the good work!
 
Banned
Banned
Joined
Jan 20, 2011
Messages
531
Reaction score
36
Re: [C++/Qt][v14-v18?] NexusServer

good luck with this project.
 
Banned
Banned
Joined
Jan 9, 2010
Messages
1,850
Reaction score
503
Re: [C++/Qt][v14-v18?] NexusServer

This is so EPIC! Great release dude! You have brought old schools back to life (x
Its a development Sean, learn to read! >_<!
 
The one and only!
Loyal Member
Joined
Nov 24, 2008
Messages
2,529
Reaction score
1,435
Re: [C++/Qt][v14-v18?] NexusServer

This is excellent, hope to see some nice work from you in the future ;)

@PEfag2 - This is a development thread and there is a download link included. So technically it is both a development, and a release.
 
Status
Not open for further replies.
Back
Top