Newbie Spellweaver
- Joined
- May 25, 2011
- Messages
- 77
- Reaction score
- 58
[C++ (Qt)][v9-v18?][Multi-platform] NexusServer (Updated to v1.2.1)
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
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.
New post (currently being written)
SVN Trunk
We're looking for any help we can get on this project so if you feel like contributing, feel free to do so.
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
You must be registered to see links
(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
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.
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.
Pre-release changelog:
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
Download section:
Compiled windows binary with libraries (updated to 1.2.1):
Source archive (updated to 1.2.1):
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.
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
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)
You must be registered to see links
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
You must be registered to see links
. (Client files changed to v16.)Download section:
Compiled windows binary with libraries (updated to 1.2.1):
You must be registered to see links
Source archive (updated to 1.2.1):
You must be registered to see links
(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:
You must be registered to see links
You must be registered to see links
You must be registered to see links
You must be registered to see links
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:
Completed Flash features:
Completed Shockwave features:
Currently under development: Updated often
Official server modules: (May not be functional until v1.3.1)
Useful links
SVN Trunk -
Test server (shockwave) -
Test server (flash) -
Localhost test server (shockwave) -
Localhost test server (flash) -
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 -
You must be registered to see links
Test server (shockwave) -
You must be registered to see links
Test server (flash) -
You must be registered to see links
Localhost test server (shockwave) -
You must be registered to see links
(port 11420)Localhost test server (flash) -
You must be registered to see links
(port 11420)SVN Trunk
You must be registered to see links
SVN Server should be working again, here is an archive of the latest source just incase:
You must be registered to see links
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: