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

Page 1 of 12 12345678911 ... LastLast
Results 1 to 15 of 166
  1. #1
    Member Aerospark is offline
    MemberRank
    May 2011 Join Date
    Canadia LandLocation
    90Posts

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


    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)
    Code:
      Warp command (test module)

    Useful links
    SVN Trunk - nexusserver - Revision x: /trunk
    Test server (shockwave) - NexusServer v16 test server
    Test server (flash) - NexusCMS v0.2
    Localhost test server (shockwave) - NexusServer v16 test server (localhost) (port 11420)
    Localhost test server (flash) - Localhost loader (port 11420)


    SVN Trunk
    nexusserver - Revision x: /trunk SVN Server should be working again, here is an archive of the latest source just incase: http://filebeam.com/83104a3c106938d7c8ee6c4cd535c56a

    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 by Aerospark; 05-01-12 at 11:41 PM. Reason: SVN should be working again.


  2. #2
    Enthusiast IAmNotAGirl is offline
    MemberRank
    Jun 2011 Join Date
    34Posts

    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.

  3. #3
    凸(ಠ益ಠ)凸 Omnija is offline
    MemberRank
    Jun 2008 Join Date
    QuebecLocation
    2,233Posts

    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 by Omnija; 01-07-11 at 03:27 AM.

  4. #4
    Member Aerospark is offline
    MemberRank
    May 2011 Join Date
    Canadia LandLocation
    90Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Quote Originally Posted by omnija View Post
    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 by Aerospark; 01-07-11 at 04:33 AM.

  5. #5
    凸(ಠ益ಠ)凸 Omnija is offline
    MemberRank
    Jun 2008 Join Date
    QuebecLocation
    2,233Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Quote Originally Posted by Aerospark View Post
    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

  6. #6
    Banned PEjump2 is offline
    BannedRank
    Jan 2010 Join Date
    The NetherlandsLocation
    2,838Posts

    Re: [C++/Qt][v14-v18?] NexusServer

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

  7. #7
    Member Aerospark is offline
    MemberRank
    May 2011 Join Date
    Canadia LandLocation
    90Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Quote Originally Posted by PEjump2 View Post
    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"passwordQSql::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 by Aerospark; 01-07-11 at 08:51 AM.

  8. #8
    Account Upgraded | Title Enabled! AWA is offline
    MemberRank
    Feb 2008 Join Date
    1,320Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Finally a C++ emulator! I've waited a long time for this! EPIC

  9. #9
    Banned PEjump2 is offline
    BannedRank
    Jan 2010 Join Date
    The NetherlandsLocation
    2,838Posts

    Re: [C++/Qt][v14-v18?] NexusServer

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

  10. #10
    Member Aerospark is offline
    MemberRank
    May 2011 Join Date
    Canadia LandLocation
    90Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Quote Originally Posted by PEjump2 View Post
    @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 by Aerospark; 01-07-11 at 08:24 PM.

  11. #11
    Developer Quackster is online now
    DeveloperRank
    Dec 2010 Join Date
    AustraliaLocation
    3,474Posts

    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.

  12. #12
    son, i am dissapoint Near is offline
    MemberRank
    Sep 2009 Join Date
    The NetherlandsLocation
    491Posts

    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.

  13. #13
    Ex-Supervisor Sean is offline
    LegendRank
    Jun 2007 Join Date
    JerseyLocation
    4,097Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    This is so EPIC! Great release dude! You have brought old schools back to life (x

  14. #14
    Ball like Wall oddzag is offline
    [VIP] MemberRank
    Aug 2009 Join Date
    AnusLocation
    432Posts

    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!

  15. #15
    Account Upgraded | Title Enabled! Miggs is offline
    MemberRank
    Oct 2010 Join Date
    711Posts

    Re: [C++/Qt][v14-v18?] NexusServer

    Good luck.



Page 1 of 12 12345678911 ... LastLast

Advertisement