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.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
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.