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 forums (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.
Spoiler:
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 :o
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.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.
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...
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) http://filebeam.com/e00a73cb6297e410...1700924624.jpg 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 here. (Client files changed to v16.)
Download section: Compiled windows binary with libraries (updated to 1.2.1): Filebeam - Beam up that File Scottie! Source archive (updated to 1.2.1): Filebeam - Beam up that File Scottie! (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: Linux 64 bit Windows 32 bit Source archive SVN trunk 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)
Spoiler:
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)
We're looking for any help we can get on this project so if you feel like contributing, feel free to do so.
01-07-11
IAmNotAGirl
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.
01-07-11
Omnija
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?
01-07-11
Aerospark
Re: [C++/Qt][v14-v18?] NexusServer
Quote:
Originally Posted by omnija
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.
01-07-11
Omnija
Re: [C++/Qt][v14-v18?] NexusServer
Quote:
Originally Posted by Aerospark
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 :override command , in a way users might enjoy that XD
01-07-11
PEjump2
Re: [C++/Qt][v14-v18?] NexusServer
Hmm.. Looks promising.. just one question.. Why on earth are you using SQLLite!!?
01-07-11
Aerospark
Re: [C++/Qt][v14-v18?] NexusServer
Quote:
Originally Posted by PEjump2
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 Code:
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.
01-07-11
AWA
Re: [C++/Qt][v14-v18?] NexusServer
Finally a C++ emulator! I've waited a long time for this! EPIC
01-07-11
PEjump2
Re: [C++/Qt][v14-v18?] NexusServer
@Aerospark, Please google "C++ MySql" ;)
01-07-11
Aerospark
Re: [C++/Qt][v14-v18?] NexusServer
Quote:
Originally Posted by PEjump2
@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.
01-07-11
Quackster
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 bitch.
01-07-11
Near
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.
02-07-11
Sean
Re: [C++/Qt][v14-v18?] NexusServer
This is so EPIC! Great release dude! You have brought old schools back to life (x
02-07-11
oddzag
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!