Hello & Welcome to our community. Is this your first visit? Register

Page 1 of 2 12 LastLast
Results 1 to 15 of 21
  1. #1
    RMS Kornflake Nillus's Avatar

    Rank
    Gamma
    Join Date
    Feb 2007
    Location
    The Netherlands
    Posts
    2,623

    [GUIDE/CODING] The need to know functions of Habbo emulators

    Guide to Habbo Hotel emulators

    A couple of rules for this thread
    1. If you don't have anything to contribute that goes towards the development of Habbo Hotel emulators, then don't post.
    2. When posting packets try give a decent description and if your explaining what a packet does and showing packetlogs then please replace the chars with a alpha-numeric value such as Chr(1) because it will end up showing on the forum just a square most of the time.
    3. When posting packets and/or logs of them try and include the client version for example if it's V13, V20, V27 and so on, just so in future reference when a member finds packets a V13 packet might be different from a V20 packet.
    4. When posting a decent sized list of packets or just code in general then please [CODE][/CODE] the list.
    5. Obey the normal [Only registered and activated users can see links. ] and also the [Only registered and activated users can see links. ]
      Useless posting will get you an infraction in this thread.
      Thanks Habbo Hotel modding team.

    ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
    Section below has been written by Nillus.
    The habbo protocol consists of messages.
    Client>server messages:
    These messages have a 'header', which is just their ID encoded in Base64, so 'B@' (pet stats btw) isn't just some random thing, no, decode it with a Habbo base64 encoder & you'll see that it's the message 128. Encode it & it will become 'B@' again.
    It's easier to 'recognize' the messages by their recognized header than by their ID. (atleast it is for me)

    Server>client messages
    Here we still have the encoded Base64 IDs, but now about the content of server>client messages;:
    The content which is often a mixture of text and wire encoded ('VL64') values, if there are more strings in a message than they are often 'broken' by a char2, a char13 etc.
    Each message needs to have an end, so the client can, upon receiving it, see 'hey', this is the full message, I can process it now.
    In Habbo this is done by 'char1', it let's the client know that it's the end of the packet and it doesn't have to wait for more data, it can process the message. (That's why you could do the funniest things with it when scripting, if you were able to inject char1 you could put a message in your motto & end it with a char1, so the client will see it as a real packet & process it)

    When the server/client message is received a t the client/server, then it Base64 decodes the first two chars of the message string, so they have the message ID.
    Client/server then processes the correct again for the given message and it's content.
    For the Habbo server, it's unknown how it's done, since we haven't got sourcecode, and so we can only guess. Java does not support switching on string objects (which is rather innefficent since it is, next to stupid, much slower than switching on numbers), so they had to come up with something else.
    I don't think Sulake's server works with a switch statement to select the correct action. (like it has been on all retro servers until Joeh's Thor. Thor works with 'reactor' classes hooked to the connection, each 'reactor' contains 'various' listeners for certain messages, the server searches through all hooked 'reactors' and tries to invoke the correct method, this is pretty efficient, saves alot of data pushing etc & so it's done in Woodpecker too now)

    As for the Habbo client, we kinda how how it processes messages, since we can decompile it and see cast names and the handlers etc.
    I posted this a while back;
    This is from Matt of SOM, it's a list of all the handlers inside the classes of the Habbo client. (V26 I guess?)
    This is what is triggered in the client by server messages.
    To understand it:
    The number before the handler is the message ID, but you guys are more familar with headers, which is the message ID encoded in Base64, so for the first three ones:
    0 = "@@"
    1 = "@A"
    2 = "@B"

    And a final test:
    312: [["One Way Door Manager", #changeStatus]]
    312 in Base64: 'Dx', which is the ofcourse the 'header' of the message of entering a onewaydoor.
    See how it works?

    Code:
    0: [[#login_handler, #handleHello]]
    1: [[#login_handler, #handleSecretKey]]
    2: [[#login_handler, #handleRights]]
    5: [[#login_handler, #handleUserObj]]
    35: [[#login_handler, #handleUserBanned]]
    50: [[#login_handler, #handlePing]]
    52: [[#login_handler, #handleEPSnotify]]
    139: [[#login_handler, #handleSystemBroadcast]]
    141: [[#login_handler, #handleCheckSum]]
    161: [[#login_handler, #handleModAlert]]
    229: [[#login_handler, #handleAvailableBadges]]
    257: [[#login_handler, #handleSessionParameters]]
    277: [[#login_handler, #handleCryptoParameters]]
    278: [[#login_handler, #handleEndCrypto]]
    287: [[#login_handler, #handleHotelLogout]]
    308: [[#login_handler, #handleSoundSetting]]
    354: [[#login_handler, #handleLatencyTest]]
    290: [[#openinghours_handler, #handleAvailabilityStatus]]
    291: [[#openinghours_handler, #handleInfoHotelClosing]]
    292: [[#openinghours_handler, #handleInfoHotelClosed]]
    293: [[#openinghours_handler, #handleAvailabilityTime]]
    294: [[#openinghours_handler, #handleLoginFailedHotelClosed]]
    12: [[#friend_list_handler, #handleFriendListInit]]
    13: [[#friend_list_handler, #handleFriendListUpdate]]
    132: [[#friend_list_handler, #handleFriendRequest]]
    260: [[#friend_list_handler, #handleError]]
    314: [[#friend_list_handler, #handleFriendRequestList]]
    315: [[#friend_list_handler, #handleFriendRequestResult]]
    349: [[#friend_list_handler, #handleFollowFailed]]
    363: [[#friend_list_handler, #handleMailNotification]]
    364: [[#friend_list_handler, #handleMailCountNotification]]
    134: [[#instant_messenger_handler, #handleIMMessage]]
    135: [[#instant_messenger_handler, #handleIMInvitation]]
    261: [[#instant_messenger_handler, #handleIMError]]
    262: [[#instant_messenger_handler, #handleInvitationError]]
    387: [[#ig_handler, #handle_directory_status]]
    388: [[#ig_handler, #handle_ENTER_ARENA_FAILED]]
    389: [[#ig_handler, #handle_GAME_REJOIN]]
    390: [[#ig_handler, #handle_player_exited_game_arena]]
    391: [[#ig_handler, #handle_level_hall_of_fame]]
    392: [[#ig_handler, #handle_start_failed]]
    393: [[#ig_handler, #handle_join_failed]]
    394: [[#ig_handler, #handle_in_arena_queue]]
    395: [[#ig_handler, #handle_stage_still_loading]]
    396: [[#ig_handler, #handle_game_not_found]]
    399: [[#ig_handler, #handle_game_chat]]
    400: [[#ig_handler, #handle_enter_arena]]
    401: [[#ig_handler, #handle_arena_entered]]
    402: [[#ig_handler, #handle_load_stage]]
    403: [[#ig_handler, #handle_stage_starting]]
    404: [[#ig_handler, #handle_stage_running]]
    405: [[#ig_handler, #handle_stage_ending]]
    406: [[#ig_handler, #handle_game_ending]]
    407: [[#ig_handler, #handle_game_created]]
    408: [[#ig_handler, #handle_game_long_data]]
    409: [[#ig_handler, #handle_create_game_info]]
    410: [[#ig_handler, #handle_game_list]]
    413: [[#ig_handler, #handle_user_joined_game]]
    414: [[#ig_handler, #handle_user_left_game]]
    415: [[#ig_handler, #handle_game_observation_started_short]]
    416: [[#ig_handler, #handle_game_cancelled]]
    417: [[#ig_handler, #handle_game_long_data]]
    418: [[#ig_handler, #handle_game_started]]
    355: [[#guide_handler, #handleInvitation]]
    359: [[#guide_handler, #handleInvitationFollowFailed]]
    360: [[#guide_handler, #handleInvitationCancelled]]
    425: [[#guide_handler, #handleInitTutorServiceStatus]]
    426: [[#guide_handler, #handleEnableTutorServiceStatus]]
    163: [[#getServerDate, #handle_date]]
    300: [[#soundmachine_handler, #handle_song_info]]
    301: [[#soundmachine_handler, #handle_machine_sound_packages]]
    302: [[#soundmachine_handler, #handle_user_sound_packages]]
    332: [[#soundmachine_handler, #handle_invalid_song_name]]
    322: [[#soundmachine_handler, #handle_song_list]]
    323: [[#soundmachine_handler, #handle_play_list]]
    324: [[#soundmachine_handler, #handle_song_missing_packages]]
    325: [[#soundmachine_handler, #handle_play_list_invalid]]
    326: [[#soundmachine_handler, #handle_song_list_full]]
    331: [[#soundmachine_handler, #handle_new_song]]
    333: [[#soundmachine_handler, #handle_user_song_disks]]
    334: [[#soundmachine_handler, #handle_jukebox_disks]]
    335: [[#soundmachine_handler, #handle_jukebox_song_added]]
    336: [[#soundmachine_handler, #handle_song_locked]]
    337: [[#soundmachine_handler, #handle_jukebox_playlist_full]]
    338: [[#soundmachine_handler, #handle_invalid_song_length]]
    339: [[#soundmachine_handler, #handle_song_saved]]
    365: [[#roomdimmer_handler, #handleDimmerPresets]]]
    148: [[#hobba_handler, #handle_cryforhelp]]
    149: [[#hobba_handler, #handle_picked_cry]]
    273: [[#hobba_handler, #handle_delete_cry]]
    274: [[#hobba_handler, #handle_cry_reply]]
    299: [[#error_report_handler, #handle_error_report]]
    59: [[#roomkiosk_handler, #handle_flatcreated]]
    33: [[#roomkiosk_handler, #handle_error]
    [#room_handler, #handle_error]
    [#navigator_handler, #handle_error]
    [#login_handler, #handleErr]]
    353: [[#roomkiosk_handler, #handle_webShortcut]]
    319: [[#dialogs_handler, #handle_get_pending_response]]
    320: [[#dialogs_handler, #handle_pending_CFHs_deleted]]
    321: [[#dialogs_handler, #handle_cfh_sending_response]]
    24: [["Chat Manager", #handle_chat]]
    25: [["Chat Manager", #handle_chat]]
    26: [["Chat Manager", #handle_chat]]
    312: [["One Way Door Manager", #changeStatus]]
    -1: [[#room_handler, #handle_disconnect]
    [#login_handler, #handleDisconnect]]
    18: [[#room_handler, #handle_clc]]
    19: [[#room_handler, #handle_opc_ok]]
    28: [[#room_handler, #handle_users]]
    29: [[#room_handler, #handle_logout]]
    30: [[#room_handler, #handle_OBJECTS]]
    31: [[#room_handler, #handle_heightmap]]
    32: [[#room_handler, #handle_activeobjects]]
    34: [[#room_handler, #handle_status]]
    41: [[#room_handler, #handle_flat_letin]]
    45: [[#room_handler, #handle_items]]
    42: [[#room_handler, #handle_room_rights]]
    43: [[#room_handler, #handle_room_rights]]
    46: [[#room_handler, #handle_flatproperty]]
    47: [[#room_handler, #handle_room_rights]]
    48: [[#room_handler, #handle_idata]]
    62: [[#room_handler, #handle_doorflat]]
    63: [[#room_handler, #handle_doordeleted]]
    64: [[#room_handler, #handle_doordeleted]]
    69: [[#room_handler, #handle_room_ready]]
    70: [[#room_handler, #handle_youaremod]]
    71: [[#room_handler, #handle_showprogram]]
    76: [[#room_handler, #handle_no_user_for_gift]]
    83: [[#room_handler, #handle_items]]
    84: [[#room_handler, #handle_removeitem]
    [#buffer_handler, #handle_removeitem]]
    85: [[#room_handler, #handle_updateitem]
    [#buffer_handler, #handle_updateitem]]
    88: [[#room_handler, #handle_stuffdataupdate]
    [#buffer_handler, #handle_stuffdataupdate]]
    89: [[#room_handler, #handle_door_out]]
    90: [[#room_handler, #handle_dice_value]]
    91: [[#room_handler, #handle_doorbell_ringing]]
    92: [[#room_handler, #handle_door_in]]
    93: [[#room_handler, #handle_activeobject_add]]
    94: [[#room_handler, #handle_activeobject_remove]
    [#buffer_handler, #handle_activeobject_remove]]
    95: [[#room_handler, #handle_activeobject_update]
    [#buffer_handler, #handle_activeobject_update]]
    98: [[#room_handler, #handle_stripinfo]]
    99: [[#room_handler, #handle_removestripitem]]
    101: [[#room_handler, #handle_stripupdated]]
    102: [[#room_handler, #handle_youarenotallowed]]
    103: [[#room_handler, #handle_othernotallowed]]
    105: [[#room_handler, #handle_trade_completed]]
    108: [[#room_handler, #handle_trade_items]]
    109: [[#room_handler, #handle_trade_accept]]
    110: [[#room_handler, #handle_trade_close]]
    112: [[#room_handler, #handle_trade_completed]]
    129: [[#room_handler, #handle_presentopen]]
    131: [[#room_handler, #handle_flatnotallowedtoenter]]
    140: [[#room_handler, #handle_stripinfo]]
    208: [[#room_handler, #handle_roomad]]
    210: [[#room_handler, #handle_petstat]]
    219: [[#room_handler, #handle_heightmapupdate]]
    228: [[#room_handler, #handle_userbadge]]
    230: [[#room_handler, #handle_slideobjectbundle]]
    258: [[#room_handler, #handle_interstitialdata]]
    259: [[#room_handler, #handle_roomqueuedata]]
    254: [[#room_handler, #handle_youarespectator]]
    283: [[#room_handler, #handle_removespecs]]
    266: [[#room_handler, #handle_figure_change]]
    298: [[#room_handler, #handle_spectator_amount]]
    309: [[#room_handler, #handle_group_badges]]
    310: [[#room_handler, #handle_group_membership_update]]
    311: [[#room_handler, #handle_group_details]]
    345: [[#room_handler, #handle_room_rating]]
    350: [[#room_handler, #handle_user_tag_list]]
    361: [[#room_handler, #handle_user_typing_status]]
    362: [[#room_handler, #handle_highlight_user]]
    367: [[#room_handler, #handle_roomevent_permission]]
    368: [[#room_handler, #handle_roomevent_types]]
    369: [[#room_handler, #handle_roomevent_list]]
    370: [[#room_handler, #handle_roomevent_info]]
    419: [[#room_handler, #handle_ignore_user_result]]
    420: [[#room_handler, #handle_ignore_list]]
    3: [[#habbo_club_handler, #handle_ok]
    [#login_handler, #handleLoginOK]
    [#friend_list_handler, #handleOk]]
    7: [[#habbo_club_handler, #handle_scr_sinfo]]
    280: [[#habbo_club_handler, #handle_gift]]
    4: [[#photo_handler, #handle_film]]
    16: [[#navigator_handler, #handle_flat_results]]
    54: [[#navigator_handler, #handle_flatinfo]]
    55: [[#navigator_handler, #handle_flat_results]]
    57: [[#navigator_handler, #handle_noflatsforuser]]
    58: [[#navigator_handler, #handle_noflats]]
    61: [[#navigator_handler, #handle_favouriteroomresults]]
    130: [[#navigator_handler, #handle_flatpassword_ok]]
    220: [[#navigator_handler, #handle_navnodeinfo]]
    221: [[#navigator_handler, #handle_userflatcats]]
    222: [[#navigator_handler, #handle_flatcat]]
    223: [[#navigator_handler, #handle_spacenodeusers]]
    224: [[#navigator_handler, #handle_cantconnect]]
    225: [[#navigator_handler, #handle_success]]
    226: [[#navigator_handler, #handle_failure]]
    227: [[#navigator_handler, #handle_parentchain]]
    286: [[#navigator_handler, #handle_roomforward]]
    351: [[#navigator_handler, #handle_recommended_room_list]]
    6: [[#catalogue_handler, #handle_purse]]
    67: [[#catalogue_handler, #handle_purchase_ok]]
    65: [[#catalogue_handler, #handle_purchase_error]]
    68: [[#catalogue_handler, #handle_purchase_nobalance]]
    126: [[#catalogue_handler, #handle_catalogindex]]
    127: [[#catalogue_handler, #handle_catalogpage]]
    296: [[#catalogue_handler, #handle_purchasenotallowed]]
    295: [[#dynamicdownloader_handler, #handle_furni_revisions]]
    297: [[#dynamicdownloader_handler, #handle_alias_list]]
    303: [[#recycler_handler, #handle_recycler_configuration]]
    304: [[#recycler_handler, #handle_recycler_status]]
    305: [[#recycler_handler, #handle_approve_recycling_result]]
    306: [[#recycler_handler, #handle_start_recycling_result]]
    307: [[#recycler_handler, #handle_confirm_recycling_result]]
    316: [[#poll_handler, #handle_poll_offer]]
    317: [[#poll_handler, #handle_poll_contents]]
    318: [[#poll_handler, #handle_poll_error]]
    352: [[#new_user_help_handler, #handleHelpItems]]
    356: [[#new_user_help_handler, #handleTutorsAvailable]]
    357: [[#new_user_help_handler, #handleInvitingCompleted]]
    358: [[#new_user_help_handler, #handleInvitationExists]]
    421: [[#new_user_help_handler, #handleInvitationSent]]
    423: [[#new_user_help_handler, #handleGuideFound]]
    424: [[#new_user_help_handler, #handleInviterLeftRoom]]
    166: [[#statsBrokerJs, #handle_update_stats]]
    The last things are about Guides etc, as you can see.
    Just use my Nillus Packet Scout app & it's Base64 encoder to convert the message ID's to their encoded equivalents.

    - Nillus
    That's inside the Habbo client, you see that each server>client message (for example, 'BK', 139), is for '[[#login_handler, #handleSystemBroadcast]]', which is exactly what it does.
    Then we have '@c', 35, which becomes '[[#login_handler, #handleUserBanned]]', and so on.
    Etc, you know how it works now I guess.

    You just have to understand that;
    - Habbo protocol consists out of messages
    - Message 'header' isn't just random chosen, it's the ID of the message encoded in Base64
    - Messages consist of: encoded ID + content separated by char2 etc/wire encoded values + char1 to finalize the message & tell client message is complete
    - Nothing in the message is static except the encoded ID and the char1 at the end, you can't just raw packetlog anything & paste it in your server

    This is how the 'change console mission' works in Woodpecker;
    PHP Code:
           /// <summary>
            /// "@d" - "MESSENGER_ASSIGNPERSMSG"
            /// </summary>
            
    public void Listener36()
            {
                
    string newMotto Request.getParameter(0);
                
    Session.User.messengerMotto newMotto;
                
    Session.User.updateAppearanceDetails();

                
    Response.Initialize(147); // "BS"
                
    Response.appendClosedValue(newMotto);
                
    sendResponse();
            } 
    See, the current message is stored in 'Request', which is a string object with various cool handy things, I can easily get the first Base64 parameter of it etc.
    The new server>client message is called Response, and by using it's 'Initialize' method, I can assign it a ID.
    Then I can add values to it, here I'm using 'appendClosedValue' to append a value + char2, but it also has 'appendWired(NUMBER)' etc.
    Finally I use 'sendResponse' to convert the current 'response' to a string object, append char1 to close it & then send it to the client.
    Then I can do 'Response.Initialize' again to start a new response, etc.
    It's just more structured than the old servers, thanks to Joeh.

    Hope that helped you out a bit, as a mod you could sticky it since it's some basic knowledge about the Habbo protocol?
    Most people don't know more than 'Send Index, 'BKHAHAHA THIS IS A MESSAGE' & Chr(1)', lmfao.

    - Nillus

    From another thread - thanks to Nillus once again.
    VL64 is most used in server > client packets.
    What's VL64? Well, it's an encoding for numbers, it makes numbers 'understandable' for the Habbo client.
    Example;
    I = 1
    J = 2
    K = 3
    PA = 4

    You can see an ascending of the numbers, see? [1=2-3]
    And you also see something of the alphabet in it. [I-J-K]
    -1 in VL64 is M.

    Okay, that looks pretty easy.
    How does a 'big' number in VL64 looks like?
    We'll encode 8123732.
    Result: "hUuoG"
    Ah yeah! Self explaining!
    Not really lol.
    Well, if you see the code of the encoding (can be found in JASE etc, HabboEncoding class), it's pretty logical.

    But why using such cryptic things just for numbers?
    At packets, Habbo likes to use alot of numbers after each other without delimiters.
    Like if you want to use 10, 39, 843, and 7 after each other in a packet, you can do 10398437, but then it's a whole different number.
    There's where VL64 comes in.
    Let's encode the numbers 10, 39, 843 and 7...
    10: RB
    39: SI
    843: [RC
    7: SA

    "Ehm, yeh, and now? Why?"
    Well, VL64 has a 'magical' part that makes it that good as it is:
    If you decode a whole VL64 string, so like RBSI[RCSA, it'll return as number ONLY the first encoded number in the string!
    So, only the 10 (the first encoded number of that string) will be the result, while you've inputted a whole string with three other VL64 numbers!

    Now it'll get tricky, but I'll show you how to decode a string like that to it's original numbers.
    1) Decode RBSI[RCSA, 10 will be the result
    2) Encode 10 to VL64, so it'll become RB.
    3) RB is 2 characters, R-B
    4) Now we 'cut' the first number (RB = 10) from the string RBSI[RCSA, and we know the lenght of the first part. In a .NET language for example, we can do that by this way;
    STRING OBJECT.Substring(start,length).
    If length isn't supplied than it will trigger an overload (a 'brother' of a void/function) that will simply 'run to the end of the string', so taking everything after 'start'. That's what we want, since we only want to cut off the first part and keep the other part.
    So: STRING OBJECT.Substring(2)
    It'll result in;
    SI[RCSA

    Okay, now I can say, just repeat till you are done! =D
    Keep decoding the whole string to one number, store the number somewhere to work with it or w/e, and encode the number to a VL64 string, get it's length (STRING OBJECT.Length property in .NET), and keep the string after that part by using string manipulators such as .Substring.

    It appears that it's hard to explain lol, code says more than thousand words! ;P
    PHP Code:
    // encodeVL64, returns a string
    // decodeVL64, returns an integer

    string SomeInput "PAJIKPASASF";
    while(
    SomeInput != ""// Keep looping this loop till the string is empty (so, completed with decoding)
    {
    int currentNumber decodeVL64(SomeInput);
    // Do something with current number, write it in database or something, just where you need the number for
    int currentNumberLength encodeVL64(currentNumber).ToString().Length// Encode the number to it's VL64 equivalent to see what it would be if you only encoded that number to VL64, and get it's length
    someInput someInput.Substring(currentNumberLength); // Only keep the part of SomeInput after the string
    // Proceed to next cycle of the loop (so, decode the next number) 
    That's how you can use alot of numbers after each other, while the numbers stay on their own && this is what Habbo wants to keep their packets small.

    I hope you have understood something of it.

    Anyway, that's what the VL64 analyzer in Nillus Packet Scout does, and tbh, it helps me alot at finding packet structures.

    I'll show how it can decode a BattleBall packet for you, which gives you alot more 'understanding' of how it works.
    Full packet + header:
    CtIQAJPCSAIJPCHJHJXKDX]BIIJQAPCRE
    Okay, Ct is the header, but it looks like a load of crap.
    Nope, it are just numbers!
    Let's shove the part after the header ("Ct") in my app and hit the button...
    Result:
    Result of this VL64 scout session was:
    # I = 1
    # QA = 5
    # J = 2
    # PC = 12
    # SA = 7
    # I = 1
    # J = 2
    # PC = 12
    # H = 0
    # J = 2
    # H = 0
    # J = 2
    # XKD = 1068
    # X]B = 628
    # I = 1
    # I = 1
    # J = 2
    # QA = 5
    # PC = 12
    # RE = 22

    Processed input string summary: I-QA-J-PC-SA-I-J-PC-H-J-H-J-XKD-X]B-I-I-J-QA-PC-RE
    Woo, numbers!
    There you can do something with, can't you?

    & That's where it comes handy while coding.
    How it works?
    It just runs that loop till the string is empty, and outputting the result after decoding done.
    A good example of where it's used is BattleBall/SnowStorm and the Recycler/Ecotron, alot of numbers after each other as tidy as possible.

    SCREENSHOT:


    Attachment is fixed version of NPS V2 and without the annoying lolbeeps
    Attached Files Attached Files
    Last edited by Parker; 08-11-08 at 09:50 AM.



  2. # ADS
    HyperFilter
    RaGEZONE Sponsor

    Rank
      Sponsor  
    Join Date
    Sep 2013
    Posts
    9000


     

  3. #2
    pork pork Parker's Avatar

    Rank
    The Omega
    Join Date
    Dec 2007
    Location
    new holland.
    Posts
    6,050

    Habbo coding shiz.

    Open Source Projects

    General overview about this open source post

    If you have any open source projects to contribute then feel free to send any of the mods a PM with the relevant information about the project (see below), please use a reasonable host that is 'trusted' for example if you come back in a month the link will still be there. If your source is on the list and you don't want it to be then send any of the staff of the Habbo Hotel section (green guys) or a senior moderator (the red guys) a PM and we will remove it from the list until you want it released (if ever).

    Emulators that are open source

    Project Duck
    Code:
    Project Name: Project Duck
    Project Creator(s): Nillus
    Programming language: C#.NET
    Client: V9
    Thread (if any): N/A
    Download: http://www.megaupload.com/?d=2O9AG2QE
    Woodpecker I (1)
    Code:
    Project Name: Woodpecker I (1)
    Project Creator(s): Nillus
    Programming language: C#.NET
    Client: V9
    Thread (if any): N/A
    Download: http://www.megaupload.com/?d=HH9PIQZB
    Woodpecker II (2)
    Code:
    Project Name: Woodpecker II (2)
    Project Creator(s): Nillus
    Programming language: C#.NET
    Client: V9
    Thread (if any): N/A
    Download: http://www.megaupload.com/?d=5X8N7TCS
    Holograph Emulator (original)
    Code:
    Project Name: Holograph Emulator
    Project Creator(s): Nillus
    Programming language: C#.NET
    Client: Up to V22
    Thread (if any): http://forum.ragezone.com/f331/dev-open-source-from-scratch-holograph-emulator-dev-342349/
    Download: http://www.assembla.com/flows/flow/holograph *Utilises SVN
    Holograph Emulator (Vista4Life version)
    Code:
    Project Name: Holograph Emulator
    Project Creator(s): Nillus - Vista4Life & DEV team
    Programming language: C#.NET
    Client: V24/35/26 *need to recheck on this since there's 3 different versions in his post
    Thread (if any): http://forum.ragezone.com/f331/dev-open-source-holograph-emulator-and-holoteam-dev-460819/
    Download: http://svn2.assembla.com/svn/holoemu/ *Utilises SVN

    Project Cold Coffee
    Code:
    Project Name: Project Cold Coffee
    Project Creator(s): Jeax
    Programming language: C#.NET
    Client: V15 - V17 *need to recheck this as I was taking a wild guess.
    Thread (if any): http://forum.ragezone.com/f21/dev-jeaxs-server-project-cold-coffee-281067/?highlight=Cold+Coffee
    Download: http://forum.ragezone.com/attachment.php?attachmentid=45372&d=1191428961 *Utilises SVN
    Project Thor
    Code:
    Project Name: Project Thor
    Project Creator(s): Adus/Joeh
    Programming language: C++
    Client: V9.
    Thread (if any): http://forum.ragezone.com/f353/rel-server-project-thor-v9-c-mssql-from-scratch-441113/ 
    Download: http://code.bytenibble.co.uk/ *Utilises SVN
    Miscellaneous sources that aid Habbo Hotel emulators

    N++ (packetlogger)
    Code:
    Project Name: N++
    Project Creator(s): Nillus & NGangsta
    Programming language: VB.NET
    Genre: Packetlogger
    Thread (if any): http://forum.ragezone.com/f353/rel-source-vb-net-packetlogger-n-rel-367855/
    Download: http://www.megaupload.com/?d=SQ64G2HI
    Last edited by Parker; 16-10-09 at 01:25 AM.

  4. #3
    The next don TheAJ's Avatar

    Rank
    Developer
    Join Date
    May 2007
    Location
    Toronto, Canada
    Posts
    6,059

    Re: Habbo Hotel Emulators - how they function.

    I started on a java version of VL64 Encoding :P

    Just to see how well i can do, i think nillus can point most things out

    PHP Code:
    public static int[] clientsocketReq = {
            
    588270945680689250746286527664885460,
            
    6672788490960
        
    };
        
        public static 
    int[] send = {
            
    344640523345395130423648314337496470,
            
    768288941001060
        
    };
        
        public static 
    int[] receive = {
            
    18262230172521291523192716242028000,
            
    00000005.51307.59.52111.52513.529303116.53537,
            
    19.541454322.54824.53025.55355.528.5593060,
            
    306131.56566676835.57035.535353568367374,
            
    37.576767840838442.589901809297100
        
    };
        
        public static 
    int[] misc = {
            
    013457911131517192021232527293132,
            
    333537394041434547495050505153555657,
            
    585960606060606162636465666668707374,
            
    75798080828790020040608090001000110012015,
            
    0130014252191901500001600202020,
            
    0170018000190020000000
        
    }; 
    That's how a client would be handled via java client ( run.cmd ) ( client configs )

    Come to think of it, you'll find those perfect socket connections for basically, well... any habbo version

    PHP Code:
        public void switchclient(64Eint i) {
            switch(
    i) {
                
    /*forall*/
                
    case 0:
                
    /*breaking*/
                
    int[] off = {5133411121920};
                
    /*locating*/
                
    Off(poff);
                break;
                case 
    1:
                
    int[] off2 = {6143411121920};
                
    Off(poff2);
                break;
                case 
    2:
                
    int[] off3 = {7153411121920};
                
    Off(poff3);
                break;
                case 
    3:
                
    int[] off4 = {012,  513614715411121920};
                
    Off(poff4);
                break;
                case 
    4:
                
    int[] off5 = {012513614715311121920};
                
    Off(poff5);
                break;
                case 
    5:
                
    int[] off6 = {0133411121920};
                
    Off(poff6);
                break;
                case 
    6:
                
    int[] off7 = {1143411121920};
                
    Off(poff7);
                break;
                case 
    7:
                
    int[] off8 = {2153411121920};
                
    Off(poff8);
                break;
                case 
    8:
                
    int[] off9 = {9};
                
    Off(poff9);
                break;
                case 
    9:
                
    int[] off10 = {8};
                
    Off(poff10);
                break;
                case 
    11:
                
    int[] off11 = {51361471543121920};
                
    Off(poff11);
                break;
                case 
    12:
                
    int[] off12 = {51361471531141920};
                
    Off(poff12);
                break;
                case 
    13:
                
    int[] off13 = {503411121920};
                
    Off(poff13);
                break;
                case 
    14:
                
    int[] off14 = {613411121920};
                
    Off(poff14);
                break;
                case 
    15:
                
    int[] off15 = {723411121920};
                
    Off(poff15);
                break;
                case 
    16:
                
    int[] off16 = {171821222324};
                
    Off(poff16);
                break;
                case 
    17:
                
    int[] off17 = {161821222324};
                
    Off(poff17);
                break;
                case 
    18:
                
    int[] off18 = {171621222324};
                
    Off(poff18);
                break;
                case 
    19:
                
    int[] off19 = {51361471541112320};
                
    Off(poff19);
                break;
                case 
    20:
                
    int[] off20 = {51361471531112194};
                
    Off(poff20);
                break;
                case 
    21:
                
    int[] off21 = {171816222324};
                
    Off(poff21);
                break;
                case 
    22:
                
    int[] off22 = {171821162324};
                
    Off(poff22);
                break;
                case 
    23:
                
    int[] off23 = {171821221624};
                
    Off(poff23);
                break;
                case 
    24:
                
    int[] off24 = {171821221623};
                
    Off(poff24);
                break;
                case 
    25:
                
    int[] off25 = {01256713141526};
                
    Off(poff25);
                break;
                case 
    26:
                
    int[] off26 = {01256713141525};
                
    Off(poff26);
                break;
            }
        } 
    handling


    PHP Code:
    public class encoding64 {

                         
    int offset * (length x);
                         
    int offset 21 * (length x);
    public 
    void reset64(Player p) {
            for(
    int i 021i++) {
                for (
    int x 1i6i++)
                {
                    
    byte val = (byte)(64 + (value >> offset 0x3f));
                    
    stack += (char)val;
                if(
    p.On[i]) {
                
    p.eOn[i] = false;
                
    p.client.setConfig(pConfig[i], 0);
                }
            }
            
    p.i++ = 0;
            
    p.1 = -1;
            
    p.UpdateReqAll true;
        } 
    The final decoding for client


    Tell me if i did something wrong i kinda rushed
    Last edited by TheAJ; 08-10-08 at 05:31 AM.

  5. #4
    Alpha Member

    Rank
    Alpha Male
    Join Date
    May 2007
    Location
    Great Britain
    Posts
    2,078
    Well, after searching for something else, I stumbled upon a thread of Nillus, that was created from when Madison, Jare, Mickey, Mustek etc. were moderators in this section, and in that thread, I found something that caught my eye:
    STICKY: Packet explanation + list with description of them
    Now, as there are more people getting involved in open-source developments, this would be a fantastic idea, and Konrow also agrees. Feel free to post your Habbo packets, but you must include a description for them, i.e:
    PHP Code:
    @Sends the user to hotel view (clientside
    No packet can be posted more than once, so be careful. ONLY post one packet (e.g BK, and then hit submit) if you think it's of vital importance, such as a Snowstorm packet and such, other than that, more than one packet MUST be posted!

    Code:
    @M - Habbo Console Misson (on loading)
    BK - Normal notice
    @X - Say ( @XSBHammad is epic! )
    @Z - Shout ( @ZSBHammad is epic! )
    @Y - Whisper ( @YSBHammad is epic! )
    C\ - Loads public rooms (e.g C\HKHPublic SpacesY|A[PHIPOHWelcome Lounges - Get a warm welcome!PJPTKSBISafety SpaSGRLKcafe_goldZP{Hhh_room_goldHIZAAIFansite CafeRARLKsunset_cafeXs{Hhh_room_sunsetcafeHIXVAIStar Lounge - The SugababesPUPYKstar_loungeYM|Hhh_room_starloungeHIQUIHorror DromePOPOKtheatredrome_halloween[R{Hhh_room_theater_halloweenHIQKIThe Insiders DenRHRLKtv_studio[Q{Hhh_room_tv_studio_insidersHIS_INHS Advice CentreSBRLKchillZV{Hhh_room_chill_cArmHIQQHOutside Spaces & Swimming PoolsPUY`AKSPHCafes Lounges & LobbiesQEXsAKP\HEntertainmentSER`KYtAHGamesQGPYKPQHClubs Pubs & Habbo ClubSMZHAKS[HRestaurantsPDR[KSwHHallwaysKPrK )
    @v - Sends room info (Room ID, Room Owner, RoomName, Room Description) ( HHj\@KXn03xmodel_sn03x's  roomn03x has entered the buildingIHIQFQF )
    Last edited by Hammad; 14-11-08 at 06:53 PM.
    RIP Akaruz


    Quote Originally Posted by MYCHEMICALSELF View Post


    Wtf he r gay?
    Quote Originally Posted by Ramuthra View Post
    rejoice all ye faithful for god has delivered us a sign using his prophet (mu)hammad

  6. #5
    Legacy Experience Cecer's Avatar

    Rank
    True Member
    Join Date
    Aug 2006
    Location
    England
    Posts
    736

    Re: Habbo Packets + Descriptions

    Dj - Spectators Bar ("Dj" + VL64(NUMBER1) + VL64(NUMBER2) = "Spectators" + NUMBER1 + "/" + NUMBER2

    @c - Send Ban Alert ("@c" + REASON)

    D} - Display Poll (Read below)

    Code:
    "D}" = Header
    "ZCB" = vl64(pollID)
    pollTitle
    chr(2)
    pollThanks
    chr(2)
    "KXNHII" = vl64(count(questions)) + vl64(QuestionID) + vl64(questionNo) + vl64(type)
    question1
    chr(2)
    "KII" = vl64(count(answers)) + vl64(minAns) + vl64(maxAns)
    question1Answer1
    chr(2)
    question1Answer2
    chr(2)
    question1Answer3
    chr(2)
    "YNHJI" = vl64(QuestionID) + vl64(questionNo) + vl64(type)
    question2
    chr(2)
    "KII" = vl64(count(answers)) + vl64(minAns) + vl64(maxAns)
    question2Answer1
    chr(2)
    question2Answer2
    chr(2)
    question2Answer3
    chr(2)
    "ZNHJI" = vl64(QuestionID) + vl64(questionNo) + vl64(type)
    question3
    chr(2)
    "KII" = vl64(count(answers)) + vl64(minAns) + vl64(maxAns)
    question3Answer1
    chr(2)
    question3Answer2
    chr(2)
    question3Answer3
    chr(2)

  7. #6
    People And A Nation. Alphabeat's Avatar

    Rank
    True Member
    Join Date
    May 2008
    Location
    Tilburg, The Netherlands
    Posts
    304

    Re: Habbo Packets + Descriptions

    Code:
    AC = turn 180
    A3 / As = leave room
    A6 / A= / @z = error
    A^ = wave
    A[ = dance?
    AP = hold drink
    A? = transactions
    A' = give rights?
    G_STAT = drink to mouth?
    @` = delete console message
    AB = details disapper
    DB = the habbo advertisement
    @Y = whisper
    @Z = shout
    @X = talk
    @c = ban
    AA / BL = open hand
    A~ = open catalogue
    @P = own rooms
    @S = return to hotel view?
    Bi = update password and email
    @} = add room to favourites
    @m = wall items?
    AX = turn tv off and on
    AJ = Variable/Status of furni
    @d = console mission
    AO = position
    AW = camera
    @E = User Info. (on load)
    @Q = Freinds List & Info?
    A@ = Users Stance (on load of a room)
    @v = User's Room Info. (model, Owner etc)
    AE = (?) (e.g AEmodel_h 15064.@j.@o)
    @_ = Heightmap Co-ordinates
    @\ = User's Connection Info. (to Room) @^ = Furni Syntax List
    @b = User's Placement on Heightmap
    @a = Message
    @A = Habbo Key
    @B = User's Accessories (Bfuse_login.default etc)
    @L = Freinds List & Info (on load)
    @M = Habbo Console Misson (on load)
    @G = If User is HC or Not (on load)
    @w = Search For a Room
    @{ = Edit room Name
    C] = Public Room List
    @X = Talk
    @Z = Whisper
    /carryd 1/ = Tea
    /carryd 2/ = juice
    /carryd 3/ = Carrot
    /carryd 4/ = Ice-Cream
    /carryd 5/ = Milk
    /carryd 6/ = Blackcurrent
    /carryd 7/ = Water
    /carryd 8/ = Regular
    /carryd 9/ = Decaff
    /carryd 10/ = Latte
    /carryd 11/ = Mocha
    /carryd 12/ = Macchiato
    /carryd 13/ = Espresso
    /carryd 14/ = Filter
    /carryd 15/ = Iced
    /carryd 16/ = Cappuccino /carryd 17/ = Java
    /carryd 18/ = Tap
    /carryd 19/ = Habbo Cola
    /carryd 20/ = Camera
    /carryd 21/ = Hamburger
    /carryd 22/ = Lime Habbo Soda
    /carryd 23/ = Beetroot Habbo Soda
    /carryd (>= 24)/ = BLANK</br>
    
    
    Registering Packets
    ---------------------------------------------------------------------------------
    @k@B ; You're Name Cipher,
    
    @D ; Figure Cipher
    
    @E@AM@F ; Mission Cipher
    
    @G ; Email Cipher
    
    @H ; DOB Cipher
    
    @JA@AA@IA@C ; Password Cipher
    ---------------------------------------------------------------------------------
    Log In Packets
    ---------------------------------------------------------------------------------
    @a ; Incorrect Password Packet Sent If You get you're Password Wrong
    
    @c ; Ban Packet Sent If you Try Logging On To Banned Account
    
    @B ; Send's You're Fuse_ Rights When You Log In. Example:
    @Bfuse_room_queue_defaultfuse_buy_creditsfuse_lo gindefaultfuse_trade
    
    @E ; Sent When You Log In It Holds You're Characters Data
    (example, Name, Figure, Sex, Mission, How Many Game Tickets you
    have, Ect ect,)
    
    ---------------------------------------------------------------------------------
    
    ---------------------------------------------------------------------------------
    Console Packets
    ---------------------------------------------------------------------------------
    The Packets Below Are All to do with the Console, All Self Explanatory, I think.
    
    BFIIi}e~ ; This Packet Is sent to the server when you receive A message, It Also
    send the User's Figure (Who Sent you the Message), The Message Itself, And the Time
    And Date The Message Was Sent.
    
    @MH ; This Packet Is sent to the server When You open you're Console
    
    B@MESSENGER ; This Packet Is Sent to The Server When You Search Some One's Name
    On the Console, Example : B@MESSENGERk[^OOMyraxII hate you all, Yes you, And you
    in the back, Oh and you over there, and him. MyraxIIn A
    Guest Room11-07-2006 13:28:282951025504190092801511504
    So Broke Down
    B@MESSENGER(Hex 1)(Console ID)(Username)(Hex 1)(Console Mission)(Hex 1)(Location/Online/Offline)
    (Hex 1)(Time The User Last Logged On)(His/Her Figure)(Hex 1)(Hex 1)
    
    BS(Console Mission) ; Basically This packet Is sent when You change you're console mission
    Again, Broke Down BS(consoleMission)(Hex 1)(Hex 1)
    
    (Sent a Message Data Is Encypted, And I can't Be arsed Decypting As Yet. Sorry)
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Navagator Packets
    ---------------------------------------------------------------------------------
    c\ ; Public Room Packet (Navagator) Sent When You Click the Public Room Button On The
    Navagator, It send's The Public Room's Ect ect.
    (These Are Also Sent When You Log In.. But I thought It Would Fit Here)
    Example :
    C\HKHPublic Rooms[HAZh\IRKIWelcome LoungeQJRLKwelcome_lounge[M{Hhh_room_nlobby
    IIS_INSPCC Zen GardenSBSHKchillZV{Hhh_room_chillIIPaHBattle BallSCX_UKSPHCafes
    SHSMKQuHHabbo ClubRAPYKRPHLobbiesRAPYKP\HEntertainmentSGPwKPQ HDance Clubs & Pubs
    PNXUAKS[HRestaurantsSAPTKQQHOutside SpacesQQ[gAKRGHCunning Fox Gamehall
    RAPrKSFIHabbo KitchenKSHKhotel_kitchenXO{Hhh_room_kitchenIISw HHabbo HallwaysQAPrK
    And I don't See A Need To Break that Down.. Its Self Explanotory.. I should Think :s
    
    @w ; Search packet Sent When Searching A Room, (if A room Is Found) Example
    @w1977459 lol - password x 0 25 null
    Broke Down
    @w(Room Id) (Name Of The Room You Searched)
    - (Say's If the room Is Open/Closed/Passworded) (Hide's The Pass, If there Is One)
    (How Many People In the room) (Out Of How Many Could Be In the Room) (Room Desc)
    
    @z ; Sent If you search For a room, And No room Is found.
    
    @P ; Own room Packet Example :
    @P16541376 PIB Room Myrax open x 0 25 null
    
    Im Not Going to break Down, As Its Basically Same As the Above
    
    @} ; Favourite Room Packets, Load's You're Favourite Room's, When You Click Favourites
    Example :
    @}HHJHHHQBhau[OJedi TempleDiealotopenHRLCome here all who want to be a jedi all
    info is lucastarts aproved info (no dark jedi or sith)
    Basically Same As Above.. Don't Ask About room name, Or I Kill You. (Yes I do Like to Role Play)
    
    @H ; Change Look Screen (update Habbo ID)
    Sent When You Open 'Change My Habbo Look' Or What ever It say's
    It Send's the clothes And the colours you're Habbo Can Pick
    
    @MH ; Wrong Birthday Packet (I think)
    I Think This Packet Is Sent When You Try to change you're Pass/Email, But get
    the Birthday Wrong
    
    ---------------------------------------------------------------------------------
    Room Packet's
    ---------------------------------------------------------------------------------
    These Packets Are Sent When Entering A room/Making A room Ect Ect
    
    @_ ; Send'S the Room's HeightMap, When You enter them Room.
    
    AE ; Also When Entering the room, This packet send's The Room's Model Example
    AEmodel_c
    
    @v ; Send's Room's ID, Room Name, Room Owner, On Room Load Example
    @vIJhpfqOMyraxmodel_cPIB RoomHHHQFQF
    So Broke Down
    @v(RoomID)(RoomOwner)(Hex 1)(Room Model)(Hex1)(Room Name)(Hex 1)(Hex 1)(Room FloorMap)(Hex 1)
    
    @\i(UserID) ; Send's A User ID For you're Habbo On room Load Example
    @\i:3
    n:Myrax
    f:2951025504190092801511504
    l:4 7 0.0
    c:Fuck Habbo >_>
    s:m
    So Broke Down
    @\iId)(Hex 1)nHabboName)(Hex 1)f:You're HabboFigure)(Hex 1)lRoom Entry Point)(Hex 1)
    cYou're Mission)(Hex 1)sSex Either F Or M)(hex 1)
    
    @b(UserID) ; Move's You Habbo, With the ID Send from @\i
    
    AS ; Sent When a Wall Item (Posters/Stikies ect) is put down Example
    AS17385977 poster :w=3,3 l=53,44 l 13
    Broken down
    AS(ID) (Say's its a poster) (which Wall part Is On) (its location)
    (If It left or right) (sprite) (Hex 1)
    
    A] ; Sent If a floor Item Is placed on the floor, An Example of this is
    A]36032589doorSAJIIJ0.0hSPWbFALSE
    Broken down
    A](ID)(Sprite)(location & How much space it takes up &rotation)(height)
    (hex 1)(hex 1)(hex 1)(Unsure)(state Of the Object)(hex 1)(hex 1)
    Oh, And After this packet is sent, An updated Heightmap Is sent. So that you can't
    walk in the spot, Where the object has been placed
    
    Speach Packets
    ---------------------------------------------------------------------------------
    When Talking These Packets Are sent to the server, Along with you're Speach
    ID, And you're Message.
    
    @Y(SpeachID)(message) ; Whisper Packet (When Talking)
    
    @X(SpeachID)(message) ; Speak Packet (When Talking)
    
    @Z(SpeachID)(message) ; Shout Packet (When Talking)
    
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Credit Packets
    ---------------------------------------------------------------------------------
    @F ; Sent When Buying Credit's With A voucher
    Example
    @F35.0
    Broke Down
    @F(How Many Credits)(Hex 1)(Hex 1)
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Habbo Club
    ---------------------------------------------------------------------------------
    @Gclub_habbo ; Sent When You Buy Habbo Club. Along With you're new Fuse Rights, And Looks
    Example :
    @Bfuse_logindefaultfuse_use_club_outfitsfuse_us e_club_badgefuse_use_special_room_layouts
    fuse_room_queue_clubfuse_room_queue_defaultfuse _buy_creditsfuse_use_club_dance
    fuse_extended_buddylistfuse_priority_accessfuse _furni_chooserfuse_trade
    fuse_habbo_chooserCeIHC1HH@H[100,105,110,115,120,125,130,135,140,145,
    150,155,160,165,170,175,176,177,178,180,185,190,19 5,200,205,206,207,210,215,
    220,225,230,235,240,245,250,255,260,265,266,267,27 0,275,280,281,285,290,295,
    300,305,500,505,510,515,520,525,530,535,540,545,55 0,555,565,570,575,580,585,
    590,595,596,600,605,610,615,620,625,626,627,630,63 5,640,645,650,655,660,665,
    667,669,670,675,680,685,690,695,696,700,705,710,71 5,720,725,730,735,740,800,
    801,802,803,804,805,806,807,808,809,810,811,812,81 3,814,815,816,817,818,819,
    820,821,822,823,824,825,826,827,828,829,830,831,83 2,833,834,835,836,837,838,
    839,840,841,842,843,844,845,846,847,848,849,850,85 1,852,853,854,855,856,857,
    858,859,860,861,862,863,864,865,866,867,868,869,87 0,871,872,873]@Gclub_habboSGJHJ
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Hand Packets
    ---------------------------------------------------------------------------------
    (A] ; Packet For adding Furniture To you're Hand (example when you buy somthing)
    (A]35122549throneQBQAIIH0.0HC[!JA
    So, Again, Broke down
    (A](furniture ID)(hex 1)(furniture Sprite)(Hex 1)(Location When The Furni Is Dropped)
    (Height Off which the furni Is dropped)(Hex 1)(Hex 1)(Hex 1)(unsure)(Hex 1)(Hex 1)(unsure)(Hex 1)
    
    BLSI ; This packet is sent when you open you're hand, Or click the >> Or << Icon's on you're hand
    It sends to the server the data of the furniture in you're hand.. An Example Is
    BLSI133158730I13315873poster44/SI
    Broken down..
    BLSI(Hex1 1)(Poster ID)(Hex 1)(Unsure)(Hex 1)(Unsure)(Hex 1)(Poster ID)(Hex 1)
    (Say's If its a wall Item Or a floor Item)(Hex 1)(Sprite)(seperator (Ithink))(Hex 1)(Hex 1)
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Badge Packets
    ---------------------------------------------------------------------------------
    There is only one packet I know for badges, And thats CdH, I'll show you how it works
    When you switch you're badge on the
    CdH Packet is sent, so you can see you're badge. For example If you put you're Bronze
    HC Badge on the packet send would be
    CdHHC1
    Broken down
    CdH(Badge Code)(hex 1)(Hex 1)
    If you wanted to turn it off, The packet sent would be
    CdH
    As there is no badge to show. It turns off, Clever Eh?
    ---------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------
    Trading Packets
    ---------------------------------------------------------------------------------
    Al ; This is the packet sent when you open a trade window, An example of this packet
    in use is
    AlMyrax false
    Enemy, false
    
    Broken Down, This is
    Al(username) (Say's you Haven't accepted) (hex 1)(username Of the Chap you're trading)
    (Say's He Hasn't Accepted) (hex 1)(hex 1)
    Simple Stuff eh?
    
    SI ; When Some one add's somthing to the trade window, Again the Al Packet is sent, And then
    This packet is sent. An Example of this is
    AlMyrax false
    Enemy, false SI173859720I17385972poster32/
    
    Broken Down. (Im not going to break down the Al Packet, As that is done above)
    SI(Hex 1)(Poster ID)(Hex 1)(Unsure)(Hex 1)(Unsure)(Hex 1)(Poster ID)(Hex 1)
    (Say's If its a wall Item Or a floor Item)(Hex 1)(Sprite)(seperator (Ithink))(Hex 1)(Hex 1)
    
    Am ; This packet is sent when one of the p[eople who are trading accepts, An example of this
    is
    AmEnemy,/true
    Broken down
    Am(Username Of Person Who has accepted)(seperator)(say's He has accepted)(Hex 1)
    
    Ao ; Tell's the server to add the trade items to you're Hand Example
    AoBLSI173859720I17385972poster32/
    1
    Its self Explanatory And the BLSI Packet Is explained Higher Up
    
    - from TFH3.com forums user myrax
    
    - from [Only registered and activated users can see links. ]
    
    CT - Gives you the Voucher Alert
    AC - Yay! It's being delivered now Alert
    AD - You don't have enough credits Alert
    BC - No Answer alert from a doorbell request
    CU - Some sort of purse error
    CV - Under 11 years old message
    CZ - Unacceptable email message
    A& - Some trade error
    A[ - Waiting doorbell message
    A' - Another trade error
    C_ - Whos in here Notice
    
    Useful codes -
    
    A` - Clothe Window in Lido
    BT - Mod Tool
    @i - Sends user to hotel view (serverside)
    @R - Sends user to hotel view (clientside)
    DS - Update e-mail window
    C~� - Battle-Ball Screen
    BE - Sends you a Habbo console message
    @L - Deletes everyone from your list
    Bg - Updates Look
    AI - Buy Tickets Window
    @o - Rights Anywhere (clientside)
    DBO - Reloads Room
    @CPO - Updates User Status
    BK[text] - Normal Notice
    DK[text] - Query Notice
    AD[text] - Purchase Notice
    BS[text] - Console Mission
    B![text] - Moderator Says Notice
    @amod_warn/[text] - Mod warn
    
    CeI[badge code] - Client Badge
    AGlamp setlamp 666� - Makes the Club Helsinki floor glow
    BLSI-55112730S5511273camera - Client Camera
    A\[Teleporter ID]/[Username]/door[number] - Nukes Teleporter
    @`PR65md_limukaappiQAQAIIJ0.00,0,0H - Client Habbo Cola Machine
    AS11801781 poster :w=3,7 l=-23,99 l 501 - Client Poster
    
    @Bfuse_see_flat_ids - Displays Room ID's
    @Bfuse_habbo_chooser - Habbo Chooser
    @Bfuse_furni_chooser - Habbo Furni Chooser
    @Bfuse_ignore_room_owner - Ignores Room Owner
    @Bfuse_performance_panel - Habbo Performance
    
    AGbus open - Opens Infobus Doors
    AGbus close - Closes Infobus Doors
    AGcurtains1 open - Opens Lido Curtains
    AGcurtains1 close - Closes Lido Curtains
    
    A{ Skips Lido Que
    Bfhttp://www.habbohotel.co.uk/en.client.Park.0AEpark_b 15190 - Skips Infobus Que
    Bfhttp://www.habbohotel.co.uk/en.client.bb_arena.7AEbb_arena_3 15202 - Skips Battle-Ball Que
    
    - from [Only registered and activated users can see links. ]
    @eH - Error?
    
    
    
    @b0 7,7,0.0,3,3/flatctrl useradmin/wave/
    
    @b0 7,7,0.0,3,6/flatctrl useradmin/wave/
    
    @b0 2,9,0.0,4,4/sit 1.0/wave/
    
    @b0 11,11,0.0,3,3/sit 1.0
    
    @b0 7,7,0.0,3,3/flatctrl useradmin/
    Last edited by Parker; 08-11-08 at 07:19 AM.
    Far away
    The ship is taking me far away
    Far away from the memories
    Of the people who care if I live or die

  8. #7
    pork pork Parker's Avatar

    Rank
    The Omega
    Join Date
    Dec 2007
    Location
    new holland.
    Posts
    6,050

    Re: [GUIDE/CODING] Habbo Hotel Emulators - The need to know functions of Habbo emulat

    Fuse rights around V13 - V15 - credits to http://www.artmoney.nl.tp/
    Code:
    HC
    
    fuse_use_special_room_layouts
    fuse_buy_credits_fuse_login
    fuse_priority_access
    fuse_use_club_outfits _default
    fuse_use_club_badge
    fuse_trade
    fuse_habbo _chooser
    fuse_buy_credits
    fuse_login
    fuse_moderator_access
    fuse_trade
    fuse_habbo_chooser
    
    MOD
    
    fuse_housekeeping_alert
    fuse_login
    housekeeping_ban
    fuse_use_club_outfits
    fuse_moderator_access
    fuse_mutehousekeeping_hobbahousekeeping_superban
    fuse_remove_photoshousekeeping_hobba_hobbatools
    fuse_use_special_room_layouts
    fuse_chat_log
    fuse_room_alerthousekeeping_megaban
    fuse_any_room_controller
    fuse_buy_credits
    fuse_priority_accesshousekeeping_discussion
    fuse_ignore_room_owner
    fuse_enter_full_roomshousekeeping_extra
    fuse_trade
    fuse_search_users
    fuse_pick_up_any_furni
    fuse_banfuse_superbanhousekeeping_hobba_newbietool s
    fuse_room_mutehousekeeping_kick
    fuse_alertdefaultfuse_use_club_badge
    fuse_receive_calls_for_help
    fuse_room_kickfuse_administrator_access
    fuse_furni_chooser
    fuse_remove_stickieshousekeeping_hobba_supertools
    fuse_enter_locked_roomshousekeeping_hobba_moderato rtools
    fuse_habbo_chooser
    
    Admin
    
    fuse_housekeeping_campaign_user_data
    fuse_george_loginhousekeeping_localization_game_co ntenthousekeeping_alerthousekeeping_campaign_manag ementhousekeeping_localization_mischousekeeping_ba nhousekeeping_localization_content
    fuse_mutehousekeeping_hobba
    fuse_remove_photoshousekeeping_statistics
    fuse_any_room_controllerhousekeeping_localizationh ousekeeping_localization_content_editor_managerhou sekeeping_admin_rightshousekeeping_localization_co ntent_editor_admin
    fuse_priority_accesshousekeeping_admin_logs
    fuse_enter_full_roomshousekeeping_admin_system
    fuse_bus_moderator_accesshousekeeping_status
    fuse_superban
    fuse_room_mute
    fuse_catalog_editorhousekeeping_hobba_bustools
    fuse_alertdefault
    fuse_use_club_badge
    fuse_receive_calls_for_helphousekeeping_localizati on_content_editor_use
    fuse_room_kickhousekeeping_admin_clubhousekeeping_ campaign_mgmhousekeeping_localization_filters
    fuse_remove_stickies
    fuse_enter_locked_roomshousekeeping_hobba_moderato rtools
    fuse_kickhousekeeping_admin_paymentshousekeeping_c ampaign_adshousekeeping_george
    fuse_loginhousekeeping_admin_catalog
    fuse_use_club_outfits
    fuse_moderator_accesshousekeeping_superbanhousekee ping_hobba_hobbatools
    fuse_use_special_room_layoutsfuse_chat_log
    fuse_room_alerthousekeeping_megabanhousekeeping_ho bba_admintools
    fuse_buy_creditshousekeeping_discussion
    fuse_ignore_room_ownerhousekeeping_admin_user_data
    fuse_tradefuse_search_usershousekeeping_campaign
    fuse_pick_up_any_furni
    fuse_banhousekeeping_hobba_newbietoolshousekeeping _kickhousekeeping_discussion_admin
    fuse_administrator_accesshousekeeping_admin_credit shousekeeping_admin
    fuse_furni_chooserhousekeeping_hobba_supertools
    fuse_habbo_chooserhousekeeping_intra
    B64 encoded - basically the same as the in the first post except these ones are encoded - credits to Matt of SOM
    Code:
    "PICK_CRYFORHELP": "@p"
    "CALL_FOR_HELP": "AV"
    "CHANGECALLCATEGORY": "CF"
    "MESSAGETOCALLER": "CG"
    "MODERATIONACTION": "CH"
    "FOLLOW_CRYFORHELP": "EC"
    "CREATEFLAT": "@]"
    "GET_PENDING_CALLS_FOR_HELP": "Cm"
    "DELETE_PENDING_CALLS_FOR_HELP": "Cn"
    "CHAT": "@t"
    "SHOUT": "@w"
    "WHISPER": "@x"
    "ENTER_ONEWAY_DOOR": "Ch"
    #room_directory: "@B"
    "GETDOORFLAT": "@\"
    "QUIT": "@u"
    "GOVIADOOR": "@v"
    "TRYFLAT": "@y"
    "GOTOFLAT": "@{"
    "G_HMAP": "@|"
    "G_USRS": "@}"
    "G_OBJS": "@~"
    "G_ITEMS": "@"
    "G_STAT": "A@"
    "GETSTRIP": "AA"
    "FLATPROPBYITEM": "AB"
    "ADDSTRIPITEM": "AC"
    "TRADE_UNACCEPT": "AD"
    "TRADE_ACCEPT": "AE"
    "TRADE_CLOSE": "AF"
    "TRADE_OPEN": "AG"
    "TRADE_ADDITEM": "AH"
    "MOVESTUFF": "AI"
    "SETSTUFFDATA": "AJ"
    "MOVE": "AK"
    "THROW_DICE": "AL"
    "DICE_OFF": "AM"
    "PRESENTOPEN": "AN"
    "LOOKTO": "AO"
    "CARRYDRINK": "AP"
    "INTODOOR": "AQ"
    "DOORGOIN": "AR"
    "G_IDATA": "AS"
    "SETITEMDATA": "AT"
    "REMOVEITEM": "AU"
    "CARRYITEM": "AW"
    "STOP": "AX"
    "USEITEM": "AY"
    "PLACESTUFF": "AZ"
    "DANCE": "A]"
    "WAVE": "A^"
    "KICKUSER": "A_"
    "ASSIGNRIGHTS": "A`"
    "REMOVERIGHTS": "Aa"
    "LETUSERIN": "Ab"
    "REMOVESTUFF": "Ac"
    "GOAWAY": "As"
    "GETROOMAD": "A~"
    "GETPETSTAT": "B@"
    "SETBADGE": "B^"
    "GETINTERST": "Bv"
    "CONVERT_FURNI_TO_CREDITS": "Bw"
    "ROOM_QUEUE_CHANGE": "CS"
    "SETITEMSTATE": "CV"
    "GET_SPECTATOR_AMOUNT": "CX"
    "GET_GROUP_BADGES": "Cf"
    "GET_GROUP_DETAILS": "Cg"
    "SPIN_WHEEL_OF_FORTUNE": "Cw"
    "RATEFLAT": "DE"
    "GET_USER_TAGS": "DG"
    "SET_RANDOM_STATE": "Dz"
    "USER_START_TYPING": "D}"
    "USER_CANCEL_TYPING": "D~"
    "IGNOREUSER": "D"
    "BANUSER": "E@"
    "GET_IGNORE_LIST": "EA"
    "UNIGNORE_USER": "EB"
    "CAN_CREATE_ROOMEVENT": "EY"
    "CREATE_ROOMEVENT": "EZ"
    "QUIT_ROOMEVENT": "E["
    "EDIT_ROOMEVENT": "E\"
    "GET_ROOMEVENT_TYPE_COUNT": "E]"
    "GET_ROOMEVENTS_BY_TYPE": "E^"
    "SCR_GET_USER_INFO": "@Z"
    "SCR_BUY": "B~"
    "SCR_GIFT_APPROVAL": "CR"
    "SBUSYF": "@M"
    "SUSERF": "@P"
    "SRCHF": "@Q"
    "GETFVRF": "@R"
    "ADD_FAVORITE_ROOM": "@S"
    "DEL_FAVORITE_ROOM": "@T"
    "GETFLATINFO": "@U"
    "DELETEFLAT": "@W"
    "UPDATEFLAT": "@X"
    "SETFLATINFO": "@Y"
    "NAVIGATE": "BV"
    "GETUSERFLATCATS": "BW"
    "GETFLATCAT": "BX"
    "SETFLATCAT": "BY"
    "GETSPACENODEUSERS": "BZ"
    "REMOVEALLRIGHTS": "B["
    "GETPARENTCHAIN": "B\"
    "GET_RECOMMENDED_ROOMS": "DH"
    "GPRC": "Ad"
    "GCIX": "Ae"
    "GCAP": "Af"
    "GET_FURNI_REVISIONS": "CU"
    "GET_ALIAS_LIST": "CW"
    "GET_FURNI_RECYCLER_CONFIGURATION": "C^"
    "GET_FURNI_RECYCLER_STATUS": "C_"
    "APPROVE_RECYCLED_FURNI": "C`"
    "START_FURNI_RECYCLING": "Ca"
    "CONFIRM_FURNI_RECYCLING": "Cb"
    "POLL_START": "Cj"
    "POLL_REJECT": "Ck"
    "POLL_ANSWER": "Cl"
    "MSG_REMOVE_ACCOUNT_HELP_TEXT": "Dy"
    "MSG_GET_TUTORS_AVAILABLE": "Ec"
    "MSG_INVITE_TUTORS": "Ed"
    "MSG_CANCEL_TUTOR_INVITATIONS": "Eg"
    "GETAVAILABLESETS": "@I"
    "TRY_LOGIN": "@D"
    "VERSIONCHECK": "@E"
    "UNIQUEID": "@F"
    "GET_INFO": "@G"
    "GET_CREDITS": "@H"
    "GET_PASSWORD": "@o"
    "LANGCHECK": "@z"
    "BTCKS": "Ai"
    "GETAVAILABLEBADGES": "B]"
    "GET_SESSION_PARAMETERS": "Bu"
    "PONG": "CD"
    "GENERATEKEY": "CJ"
    "SSO": "CL"
    "INIT_CRYPTO": "CN"
    "SECRETKEY": "CO"
    "GET_SOUND_SETTING": "Cd"
    "SET_SOUND_SETTING": "Ce"
    "TEST_LATENCY": "D{"
    "REPORT_LATENCY": "D|"
    "GET_AVAILABILITY_TIME": "CT"
    "FRIENDLIST_INIT": "@L"
    "FRIENDLIST_UPDATE": "@O"
    "FRIENDLIST_REMOVEFRIEND": "@h"
    "FRIENDLIST_ACCEPTFRIEND": "@e"
    "FRIENDLIST_DECLINEFRIEND": "@f"
    "FRIENDLIST_FRIENDREQUEST": "@g"
    "FRIENDLIST_GETFRIENDREQUESTS": "Ci"
    "FOLLOW_FRIEND": "DF"
    "MESSENGER_SENDMSG": "@a"
    "FRIEND_INVITE": "@b"
    "IG_CHECK_DIRECTORY_STATUS": "D`"
    "IG_ROOM_GAME_STATUS": "Da"
    "IG_PLAY_AGAIN": "Db"
    "GAME_CHAT": "Dj"
    "IG_CREATE_GAME": "Dl"
    "IG_GET_GAME_LIST": "Dm"
    "IG_GET_CREATE_GAME_INFO": "Dn"
    "IG_CHANGE_PARAMETERS": "Do"
    "IG_LIST_POSSIBLE_INVITEES": "Dp"
    "IG_INVITE_USER": "Dq"
    "IG_KICK_USER": "Dr"
    "IG_START_GAME": "Ds"
    "IG_CANCEL_GAME": "Dt"
    "IG_JOIN_GAME": "Du"
    "IG_LEAVE_GAME": "Dv"
    "IG_START_OBSERVING_GAME": "Dw"
    "IG_STOP_OBSERVING_GAME": "Dx"
    "IG_GET_LEVEL_HALL_OF_FAME": "Dc"
    "IG_ACCEPT_INVITE_REQUEST": "Dd"
    "IG_DECLINE_INVITE_REQUEST": "De"
    "IG_LOAD_STAGE_READY": "Dg"
    "MSG_PLAYER_INPUT": "Dh"
    "IG_EXIT_GAME": "Dk"
    "MSG_ACCEPT_TUTOR_INVITATION": "Ee"
    "MSG_REJECT_TUTOR_INVITATION": "Ef"
    "MSG_INIT_TUTORSERVICE": "Eh"
    "MSG_WAIT_FOR_TUTOR_INVITATIONS": "Ej"
    "MSG_CANCEL_WAIT_FOR_TUTOR_INVITATIONS": "Ek"
    "GDATE": "@q"
    "INSERT_SOUND_PACKAGE": "C["
    "EJECT_SOUND_PACKAGE": "C\"
    "GET_SONG_INFO": "C]"
    "NEW_SONG": "Co"
    "SAVE_SONG_NEW": "Cp"
    "EDIT_SONG": "Cq"
    "SAVE_SONG_EDIT": "Cr"
    "BURN_SONG": "C~"
    "SONG_EDIT_CLOSE": "Cv"
    "UPDATE_PLAY_LIST": "Cs"
    "GET_SONG_LIST": "Ct"
    "GET_PLAY_LIST": "Cu"
    "DELETE_SONG": "Cx"
    "ADD_JUKEBOX_DISC": "C"
    "REMOVE_JUKEBOX_DISC": "D@"
    "JUKEBOX_PLAYLIST_ADD": "DA"
    "GET_JUKEBOX_DISCS": "DB"
    "GET_USER_SONG_DISCS": "DC"
    "RESET_JUKEBOX": "DD"
    "MSG_ROOMDIMMER_GET_PRESETS": "EU"
    "MSG_ROOMDIMMER_SET_PRESET": "EV"
    "MSG_ROOMDIMMER_CHANGE_STATE": "EW"
    "JUMPSTART": "Ag"
    "SIGN": "Ah"
    "JUMPPERF": "Aj"
    "SPLASH_POSITION": "Ak"
    "CLOSE_UIMAKOPPI": "Al"
    "SWIMSUIT": "At"
    Last edited by Parker; 08-11-08 at 12:28 PM.

  9. #8
    #main #som Moogly's Avatar

    Rank
    Alpha Male
    Join Date
    Feb 2008
    Location
    New Zealand
    Posts
    2,102

    Re: [GUIDE/CODING] [OPEN-SOURCE] The need to know functions of Habbo emulators

    Quote Originally Posted by Nillus View Post
    The habbo protocol consists of messages.
    Client>server messages:
    These messages have a 'header', which is just their ID encoded in Base64, so 'B@' (pet stats btw) isn't just some random thing, no, decode it with a Habbo base64 encoder & you'll see that it's the message 128. Encode it & it will become 'B@' again.
    It's easier to 'recognize' the messages by their recognized header than by their ID. (atleast it is for me)

    Server>client messages
    Here we still have the encoded Base64 IDs, but now about the content of server>client messages;:
    The content which is often a mixture of text and wire encoded ('VL64') values, if there are more strings in a message than they are often 'broken' by a char2, a char13 etc.
    Each message needs to have an end, so the client can, upon receiving it, see 'hey', this is the full message, I can process it now.
    In Habbo this is done by 'char1', it let's the client know that it's the end of the packet and it doesn't have to wait for more data, it can process the message. (That's why you could do the funniest things with it when scripting, if you were able to inject char1 you could put a message in your motto & end it with a char1, so the client will see it as a real packet & process it)
    Just thought I would elaborate on Nillus' description of scripting, considering its very small, Jeax taught me how scripting works / scripting apps work, but it took me a while to understand it, considering he explained it in the way he understood it so I figured it out in a way I understood it, but anyways, lets take Nillus example and change it a bit.

    Ok, so say I go on habbo and I decide I want a drink. So I double click a drink machine and eventually I get a drink for example AP12 & Chr(1) is sent to the server. The server things ok 'AP' is a packet and I'm supposed to grab the number after it and then wait for Chr(1) to know the packet has ended.

    So lets say I'm a script kiddy (a wanabe scripter) I'm pressing buttons on one of those 'click here and here' scripting apps eg. HRT32 well kids, heres how those programs work. You inject specific data such as a BK followed by LOL aka will bring up a habbo alert that says LOL so this is how it would work you would send to the server AP <ANYDRINKID> & Chr(1) & BKLOL & Chr(1) you see how that worked, you sent Chr(1) before you sent BKLOL because you wanted to end the drink packet so the server thinks "oh that packet is finished" so then you start an all new packet since the server thinks the packet is finished aka BKLOL and then you finish your packet with Chr(1) and there you have it retro scripting in a nut shell.

    Now that you may / may not understand this (re-read if you don't) take this into consideration. I always <a LOT of the time> ask kids who think they can code or deserve my source code questions about scripting because they have no clue how packets even work yet they wana make a server + they don't even know the basics of coding in _any_ language (ie. what a int is, what a sting is ect...) So my question is, how does scripting via an AP Injection work, and what I mean is not by the Chr Injections into the packet, why when I send it can I do things such as pick up / delete furniture server side? Ask yourself that, and send me a PM if you can figure out why, if you CAN figure out why then good you're using your head and if you CAN'T you need to re-read what I said, and if you really can't figure out then you need to read programming books to increase your IQ level cause its a common sense thing, and if you don't get it I HIGHLY advice agaisn't making a server if you can't figure out such a simple thing. Anyways, I'm out, this is all from me for now. I might write a little e-book on the development of a Habbo Emulator.

  10. #9
    RMS Kornflake Nillus's Avatar

    Rank
    Gamma
    Join Date
    Feb 2007
    Location
    The Netherlands
    Posts
    2,623

    Re: [GUIDE/CODING] [OPEN-SOURCE] The need to know functions of Habbo emulators

    Quote Originally Posted by Moogly View Post
    You inject specific data such as a BK followed by LOL aka will bring up a habbo alert that says LOL so this is how it would work you would send to the server AP <ANYDRINKID> & Chr(1) & BKLOL & Chr(1) you see how that worked, you sent Chr(1) before you sent BKLOL because you wanted to end the drink packet so the server thinks "oh that packet is finished" so then you start an all new packet since the server thinks the packet is finished aka BKLOL and then you finish your packet with Chr(1) and there you have it retro scripting in a nut shell.
    Wrong baby. <3
    First, AP = client>server and BK is server>client, they are not the same so you cannot compare them nigga.
    Char1 is for server>client messages only, client>server messages have Base64 length headers so the server knows when which message in the packet ends:
    AP12 = 4 characters, Base64(4) = @D, total: @DAP12
    AK@D@E (request move to tile 4,5), = 6 characters, Base64(6) = @F, total: @FAK@D@E

    Each packet, yes packet, you guys need to stop thinking that a packet is the same as a message, a packet is just a ... pack of messages, separated in some way tot show the receiver where which message ends, in client>server messages it's done by Base64 lengths, in server>client it's done by char1.
    That's why you can script anything if you are able to inject char1, because then the receiving clients will see it as a new message and process it, clever eh?
    Anyway each client>server packet consists out of them messages with the Base64 header, plus a leading '@', which is a Base64 boolean and it's just there to separate packets from packets. (yeah and packets are already split up in messages)

    Hope that it helps you guys, ohh I'm just such a Mr.KnowItAll sometimes.

    - Nillus



  11. #10
    #main #som Moogly's Avatar

    Rank
    Alpha Male
    Join Date
    Feb 2008
    Location
    New Zealand
    Posts
    2,102

    Re: [GUIDE/CODING] The need to know functions of Habbo emulators [OPEN-SOURCE Project

    Visual Basic 6 : Habbo Programming
    A real 'guide' per say to habbo emulator programming in Microsoft Visual Basic 6!

    Summary :

    To begin, everyone talks bullshit about, "Visual Basic 6 sucks" ect... But you are all idiots, because Visual Basic is the reason we're all on Windows, you see before Visual Basic everyone had to use C to program, and if I'm not mistaken they were all mostly on Unix, but then Visual Basic 6 came and everyone realized how easy it was to make a program in VB6 it was the difference between a few days of coding vs. a few minutes. But enough of my history lesson (stuff I read off wikipedia tbh) anyways, the point I'm going to try and make is that Habbo Emulators, everyone of them that has been coded in VB6 (Visual Basic 6) has been coded completely improperly, this is why they lag, if coded much more properly they would drastically be improved in speed and performance, not even Holo Visual Basic 6 is coded properly, its a DECENT source don't get me wrong, but it still needs work, theres always room for improvement, seeing as VB6 is the beginer friendly and most used language around RZ (lets face it none of these kids are good at C# or PHP except a select few, and they're not even as good as Nillus, and TRUST me by coding standards Nillus is merely at an Intermediate level considering he's still learning a _LOT_) and like Nillus, who's helped me learn a lot, I hope I can help you learn a lot, learning to program is not something that happens overnight so stop being a sissy and saying you're too lazy otherwise you'll never become a programmer. Alright lets begin shall we?

    Why Visual Basic 6?
    Because its easy, simple, and very powerful.

    What the fuck do you mean its powerful all servers lag that are coded in VB6?
    and holo C# is lag free? Point and case, like it was said at the begining of the original Visual Basic 6 Holo and when Jeax started opening our eyes to how crappy our servers were, he always said and so did Nillus, that it doesn't matter what language you code the emulator in, if you code it properly even in VB6 you could easily pull off 300 without lag, people don't seem to believe this because no server has been coded purely decent. They have much to be improved.

    So how do we improve them?
    By actually learning the language you're trying to work on you can actually learn decent programming skills.

    So where do we start?
    This post, I will provide with many links to help get you started. They're all basically at VB6.US a good website, I'm not advertising another forum or anything just an excellent resource for programming, I myself am learning a LOT from this website. I don't know the owner, or owners, and I'm not payed to advertise them or anything, its just a site I found in google, with many good tutorials.

    1. One of the first and best things to do is begin to understand the Visual Basic IDE (Integrated Development Environment). By understanding the IDE you will be able to develop VB programs quickly and effectively. Start by reading the [Only registered and activated users can see links. ]
    2. The classic first program in any language is the Hello World tutorial. As a beginner you should make sure you write this program to get your feet wet. Check out the [Only registered and activated users can see links. ]
    3. Good programmers figure out how to use a consistent naming scheme when they develop applications. The quickest way to graduate out of the beginner VB6 level is to check out the [Only registered and activated users can see links. ]
    4. Variables are used in any real development. Make sure you visit the [Only registered and activated users can see links. ] to see how variables work in Visual Basic 6
    5. [Only registered and activated users can see links. ]
    6. When you need to make comparisons or have your program choose between options you will need to understand Visual Basic's if statements. Luckily there's a beginners tutorial that explains just that: [Only registered and activated users can see links. ]
    7. Once you grasp the basics check out this next beginner VB6 tutorial that goes more in depth into conditional statements: [Only registered and activated users can see links. ]
    8. Need to do something repeatedly? Need to iterate through a list of things? Need to count from 1 to 1 Billion by 3's? You need to understand loops! [Only registered and activated users can see links. ]
    9. Once a beginner understands how to use functions and subroutines he or she is on the road to being a full fledged VB6 guru. A solid grasp on functions and subroutines allows you to reuse code and functionality throughout your program and in future programs.[Only registered and activated users can see links. ]
    10. Last but not least, begin to learn how to use all the great controls Visual Basic offers and create a great User Interface for your clients to use. [Only registered and activated users can see links. ]
    Thats where you learn the basics in the above quote, also I would like to add this great link :
    [Only registered and activated users can see links. ]

    You need to understand variables, I suggest you guys skip the Hello World bit if you've already done it before ( I suspect everyone has...) and go on to step 2, I didn't copy and paste everything just the learners page because if you're too lazy to click for yourself, you wont be getting anywhere as a programmer, and why would I past the tutorials if the links are right here. Anyways, VB6 is a GREAT starter language, Nillus, Parker, ect... they all started off in it. Nillus only chose C# in the end because tbh its a very good language for people who have enough programming experience, but if you can't even have the patience to read something, you'll NEVER learn to code, thats the fact of programming, you can't expect to drive a car on your first try unless you've studied everything about driving a car. Anyways, if anyone needs help with VB6 PM me.

  12. #11
    Newbie

    Rank
    Member
    Join Date
    Mar 2009
    Posts
    2

    Re: [GUIDE/CODING] The need to know functions of Habbo emulators

    Quote Originally Posted by Moogly View Post
    To begin, everyone talks bullshit about, "Visual Basic 6 sucks" ect... But you are all idiots, because Visual Basic is the reason we're all on Windows
    That's funny. I thought we were on Windows because it dominates the market, because it is relatively simple to use and comes readily available on most PCs purchased!

    Quote Originally Posted by Moogly View Post
    ... you see before Visual Basic everyone had to use C to program, and if I'm not mistaken they were all mostly on Unix
    You are mistaken! Windows is NOT written in VB, but... you guessed it? C! Software that has been written properly in C is not only alot easier to port to just about any Operating System, on just about any architecture than Visual BASIC 6 (it's not "Visual Basic", by the way, as BASIC is an acronym) but is also extremely likely to run faster.
    Quote Originally Posted by Moogly View Post
    ... but then Visual Basic 6 came and everyone realized how easy it was to make a program in VB6 it was the difference between a few days of coding vs. a few minutes.
    Ohh yeh, there's always this argument. Mustn't forget this argument. Try coding some AI software in VB, tell me if it's easier than the equivelant solution in LISP. Try writing for me a SOCKS proxy server in VB (which would perform horribly, by the way), and tell me if this is easier than in C or C++ (and also take into consideration the performance gains that can be made in C/C++). Try writing something to solve polynomials... there are languages that are specific to this, also! Here's some code for you, it's in C and it's relevant to the topic:

    Hex.c
    Code:
    // A very efficient hexidecimal/binary conversion template
    // Written by Seb (http://www.geekycode.net/)
    
    #ifndef __HEX_C
    #define __HEX_C
    
    // binary char to hexidecimal string conversion. pass 1 full byte at a time.
    char *colHexDigit[] = {
            "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0A", "0B", "0C", "0D", "0E", "0F",
            "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1A", "1B", "1C", "1D", "1E", "1F",
            "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2A", "2B", "2C", "2D", "2E", "2F",
            "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3A", "3B", "3C", "3D", "3E", "3F",
            "44", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4A", "4B", "4C", "4D", "4E", "4F",
            "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5A", "5B", "5C", "5D", "5E", "5F",
            "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6A", "6B", "6C", "6D", "6E", "6F",
            "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7A", "7B", "7C", "7D", "7E", "7F",
            "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8A", "8B", "8C", "8D", "8E", "8F",
            "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9A", "9B", "9C", "9D", "9E", "9F",
            "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE", "AF",
            "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "BA", "BB", "BC", "BD", "BE", "BF",
            "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CE", "CF",
            "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DA", "DB", "DC", "DD", "DE", "DF",
            "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "EA", "EB", "EC", "ED", "EE", "EF",
            "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF"
    };
    
    // hexidecimal string to binary char conversion. pass 1 full hex byte (2 nibbles) at a time.
    // ~0 indicates invalid hex value. dont forget to call InitHex() before this is used!
    unsigned short colHexValue[65536];
    
    // generate a reverse table for the above...
    // the table will have 0xFFFF where an invalid hex string has been provided.
    void InitHex() {
    	int x;
    	int l, h;
    	unsigned short v;
    
    	for (x = 0; x < 65536; x++) {
    		h = (x & 0xFF);
    		if (h >= '0' && h <= '9') {
    			v = h - '0';
    		}
    		else if (h >= 'A' && h <= 'F') {
    			v = (h - 'A') + 0x0A;
    		}
    		else if (h >= 'a' && h <= 'f') {
    			v = (h - 'a') + 0x0a;
    		}
    		else {
    			colHexValue[x] = 0xFFFF;
    			continue;
    		}
    
    		l = (x & 0xFF00) / 0x0100;
    		if (l >= '0' && l <= '9') {
    			v = (v * 0x10) + (l - '0');
    		}
    		else if (l >= 'A' && l <= 'F') {
    			v = (v * 0x10) + (l - 'A') + 0x0A;
    		}
    		else if (l >= 'a' && l <= 'f') {
    			v = (v * 0x10) + (l - 'a') + 0x0a;
    		}
    		else if (l != '\0') {
    			colHexValue[x] = 0xFFFF;
    			continue;
    		}
    
    		colHexValue[x] = v;
    	}
    }
    
    void TestHex() {
    	char orig = 'A';
    	InitHex();
    
    	printf("%c in hex: %s\r\n", orig, colHexDigit[orig]);
    	printf("%s in dec: %c\r\n", colHexDigit[orig], colHexValue[* (unsigned short *) colHexDigit[orig]]);
    
    	if (colHexValue[* (unsigned short *) colHexDigit[orig]] != orig) {
    		printf("Hex module test FAILED!\r\n");
    	}
    	else {
    		printf("Hex module test passed.\r\n");
    	}
    }
    
    #endif
    ... There. Try porting that test function to your precious VB6. Over 9000 internets for you if you can understand that much. Don't forget everything else. How is it relevant? Well you should know by now that converting bin to hex and hex to bin is part of the cryptographic functionality of Habbo. This solution is FAR faster than that found in Holo C#, to say the least.

    Quote Originally Posted by Moogly View Post
    ... the point I'm going to try and make is that Habbo Emulators, everyone of them that has been coded in VB6 (Visual Basic 6) has been coded completely improperly, this is why they lag, if coded much more properly they would drastically be improved in speed and performance, not even Holo Visual Basic 6 is coded properly, its a DECENT source don't get me wrong, but
    Let me just cut you off here. Are you saying that a server COULD be coded properly in VB6? I have not seen one! VB6 is not suitable for server development, as it takes the RAD development model. Though servers CAN be developed using this approach, a systematic top-down software development cycle is, certainly in my opinion, far more suitable.
    1. Lack of proper support for multiple threads.
    2. Lack of correct typecasting.
    3. Lack of OS support in all cases except for Windows.
    4. Lack of grammatical and linguistical consistensy (with other languages, too, which leads me to my next paragraph ... )

    ... If you're going to learn VB6 as a beginner programmer, don't expect to pick up any other language any time soon, except perhaps Delphi or PHP! Visual BASIC 6 lacks a certain flexible logical and aesthetical form that most other languages are quite happy to embrace. C++, C#, Perl and Java, for example are all extremely flexible, generally consistent languages that perhaps would be more suitable for a server than VB6. PHP is an example of what went wrong between Perl and C+CGI. Due to the developers' tastes influencing the final product, it became so tight and straight-forward that it lost elegance as a result. For this reason I rank VB6 and PHP below almost every other programming language I can think of.

    Quote Originally Posted by Moogly View Post
    ... lets face it none of these kids are good at C# ...
    I would rather employ someone who thinks they may not be such a good coder in C#, who has never touched VB6, than someone who thinks they are a terrific coder in VB6 and may try to migrate those styles across to C#!

    Quote Originally Posted by Moogly View Post
    ... learning to program is not something that happens overnight so stop being a sissy and saying you're too lazy otherwise you'll never become a programmer.
    Right, and wrong. To those who like the idea of controlling something without any outside influences, this is correct... For example, I enjoy coding because it is something I can do that I am completely responsible for. If something goes wrong, it's not because someone put self raising flour in the plain flour tin, or because somebody gave me the wrong grinding disc for an angle grinder, but because I did something wrong. When things go right, I get the satisfaction of being able to say "hey! I made that. All by myself, and it will run on most Unix or Windows machines with little more than a compiler or an interpreter! I'm glad you enjoyed using my software.", something that VB6 coders can't say, and if you don't know why, perhaps one day you'll realise just how fascist VB6/PHP programming is.

    Quote Originally Posted by Moogly View Post
    Why Visual Basic 6?
    Because its easy, simple, and very powerful.
    Not very powerful. I think I demonstrated that earlier. Perhaps the easiest/simplest (they're synonyms, btw) part of it is the IDE, in which case VB6 is no more difficult and certainly less powerful than say, C# and/or C++ (with MFC). Having said that, I wouldn't use C# to develop a server in either. The GC is too constrictive for my liking.

    Quote Originally Posted by Moogly View Post
    What the fuck do you mean its powerful all servers lag that are coded in VB6?
    and holo C# is lag free? Point and case, like it was said at the begining of the original Visual Basic 6 Holo and when Jeax started opening our eyes to how crappy our servers were, he always said and so did Nillus, that it doesn't matter what language you code the emulator in, if you code it properly even in VB6 you could easily pull off 300 without lag, people don't seem to believe this because no server has been coded purely decent. They have much to be improved.
    Use ws2_32.dll instead of winsock, and CreateThread to create multiple threads or a wrapper of C's Select() function (asynchronous socket calls), and loops instead of window proc messages (which are natively used in VB) and if designed correctly, you will get a lag free server in VB6 that is capable of pulling off over 300, depending on the amount of memory you have and of course your CPU. Do you know how to use the functions in ws2_32.dll, and could you develop the correct framework necessary in VB6 to code a multithreaded, asynchronous server that uses single message queues correctly? In C this is alot easier. Do you even know the difference between a string and an integer (from a low-level perspective), or the difference between a static and a dynamic array? As you can sense, I'm a bit skeptical as many beginner programmers start off programming in VB, as I did once upon a time, and start to think of themselves as "elite coders". Grow up, read a few books, learn the concept of "agile programming" and then perhaps get a job as a VB6 programmer, and I might listen to you.

    Quote Originally Posted by Moogly View Post
    So how do we improve them?
    By actually learning the language you're trying to work on you can actually learn decent programming skills.
    Speaking for others is ironic. Care to provide a sample of your own code that we can scrutinize?

    Quote Originally Posted by Moogly View Post
    So where do we start?
    There are actually languages that will embrace your style as an individual, and I would recommend having a brief look at each before deciding, as in the end the language that is suitable for the project is the one that you are most comfortable learning. Most languages have concepts that can be used throughout other languages (even VB6, ugh). I would recommend [Only registered and activated users can see links. ] as a beginners language, as it incorporates so many different styles simultaneously and as a result it is more likely that each individual will find a style they are happy with. ECMAScript (Javascript) is such a gorgeous, malleable little language that I have in the past, embedded it into clients that I have written, simply as a scripting language! Flash uses a form of ECMAScript for it's ActionScript. With standard drafts, it is becoming quite consistent and even getting faster as it matures. C# and VB .NET are both very closely related, and mix that same concept of RAD that VB6 pushed so heavily with the flexibility that it lacked quite well (hey, there are even native threads and asynchronous sockets, portable to many OSes running Mono). I've never really had much to do with Java or Perl, however I'm looking at them both with increasing interest these days. Perhaps Java and Perl are not all that suitable as beginners languages (particularly Perl). Tutorials can be found floating all over the internet for more languages than you can imagine, so whatever you do, don't just follow the last black sheep when they say "VB6 is an excellent beginners programming language!".

    It's over 10 years old now, by the way. I don't see any possibility of such an old compiler competing in terms of speed or size with new compilers that have the benefit of better optimizations.

  13. #12
    Chasing 99 Red Balloons Jordan's Avatar

    Rank
    Alpha Male
    Join Date
    Jan 2008
    Location
    UK
    Posts
    1,782

    Re: [GUIDE/CODING] The need to know functions of Habbo emulators

    Java habbo encoding class's
    Class's taken from Jase / Woodpecker II and ported to Java please leave the @author comments intact if you distribute / use this
    vl64/wire:
    PHP Code:
    package com.encoding;

    /*
     * vl64 encoding for habbo servers in Java
     * 
     * @author Who ever wrote the C# version, Lord Jordan Porting
     */
    public class vl64Habbo {
        public static 
    String Encode(int i)
        {
            
    byte[] wf = new byte[6];
            
    int pos 0;
            
    int startPos pos;
            
    int bytes 1;
            
    int negativeMask >= 4;
            
    Math.abs(i);
            
    wf[pos++] = (byte)(64 + (3));
            for (
    >>= 2!= 0>>= 6)
            {
                
    bytes++;
                
    wf[pos++] = (byte)(64 + (0x3f));
            }

            
    wf[startPos] = (byte)(wf[startPos] | bytes << negativeMask);
            
    String tmp = new String(wf); //encoder.GetString(wf);
            
    return tmp.replace("\0""");
        }
        public static 
    int Decode(String data)
        {
            
    char[] chars;
            
    chars data.toCharArray();
            return 
    Decode(chars);
        }
        public static 
    int Decode(char[] raw)
        {
            try {
            
    int pos 0;
            
    int v 0;
            
    boolean negative = (raw[pos] & 4) == 4;
            
    int totalBytes raw[pos] >> 7;
            
    raw[pos] & 3;
            
    pos++;
            
    int shiftAmount 2;
            for (
    int b 1totalBytesb++)
            {
                
    |= (raw[pos] & 0x3f) << shiftAmount;
                
    shiftAmount b;
                
    pos++;
            }

            if (
    negative == true)
                
    *= -1;
            return 
    v;
            }
            catch (
    Exception e) {
                return 
    0;
            }        
        }    

    base64:
    PHP Code:
    package com.encoding;
    /*
     * base64 encoding for habbo servers in Java
     * 
     * @author Who ever wrote the C# version, Lord Jordan Porting
     */
    public class base64Habbo {
        public static 
    String Encode(int i)
        {
            try
            {
                
    String s "";
                for (
    int x 1<= 2x++)
                    
    += (char)((byte)(64 + (>> * (x) & 0x3f)));
                return 
    s;
            }
            catch (
    Exception e)
            {
                
    System.out.println(e.toString());
                return 
    "";
            }        
        }
        public static 
    int Decode(String s)
        {
            try
            {
                
    char[] val s.toCharArray();
                
    int intTot 0;
                
    int y 0;
                for (
    int x = (val.length 1); >= 0x--)
                {
                    
    int intTmp = (int)(byte)((val[x] - 64));
                    if (
    0)
                        
    intTmp intTmp * (int)(Math.pow(64y));
                    
    intTot += intTmp;
                    
    y++;
                }
                return 
    intTot;
            }    
            catch (
    Exception e)
            {
                
    System.out.println(e.toString());
                return 
    0;
            }    
        }

    Last edited by Jordan; 02-05-09 at 01:31 AM.

  14. #13
    HybridCore

    Rank
    True Member
    Join Date
    Apr 2009
    Posts
    243

    Re: Habbo coding shiz.

    [QUOTE=Parker;4180473]
    Open Source Projects

    Emulators that are open source

    JASE - Jeax's Asynchronous Socket Emulator
    Code:
    Project Name: JASE
    Project Creator(s): Jeax
    Programming language: C#.NET
    Client: V21 - 22
    Thread (if any): N/A (Was locked ages ago)
    Download: http://rapidshare.com/files/231797961/JASE.rar
    I thought I might as well post it since I get asked for the source next-to all the time. Anyways I'm not sure if anything was modified on it (other than what I probably did to it where I commented out crap when I was a total n00b) credit to Jordan for re-uploading it for me, I couldn't be bothered to get it off my External Hard Drive. Enjoy to whomever wishes to use it.
    If you're going to flame me Private Message me I rather not embarrass you and go off topic at the same time.
    lol@
    Quote Originally Posted by Monsta. View Post
    Yeh, I was on my period.

    Sorry about that.

  15. #14
    HybridCore

    Rank
    True Member
    Join Date
    Apr 2009
    Posts
    243

    Habbo Beta Structure Information

    [mod]Thread was moved from the HH general section to this thread due to the section will eventually get cleaned and this thread will eventually go, so now this will always be here (lets just hope that SOM stays up).[/mod]
    Mike (Office.Boy @ Script-O-Matic.NET which is his blog) decided to look more into the new beta client and discovered a few new things that may or may not be helpful to you guys (depends on your talents). This was all achieved without decompiling the original client files (apparently you'd loose some important stuff via doing such a thing.)

    Anyway:

    Getting BETA access allowed me to explore the BETA client purely for reverse engineering possibilities. The results proved more successful than I thought.

    Upon exploring the client (No - I didn't decompile it. Decompiling doesn't give you some of the stuff I've found) I found some core XML files. One of them being the incoming and outgoing message responses (Retro programmers are going to love me for this). I'm pretty sure the ID's to each message still denotes the decoded B64 value. It also lists all classes related to each packet ID - something thats useful when calling these classes from 3rd party applications become apparent. I also found some manifest and layout XML files, which are just there to show you how Habbo handles their interface/draws their interface. It seems they've gone for a full XML solution this time. I also found a configuration manifest - not entirely useful but every little helps.

    Where the files are:

    [Only registered and activated users can see links. ]


    So Hebbo, Jordan etc.. whoever the hell gives three shits about the new habbo check this out, also somewhat helpful for people who know enough about coding and want to take a stab at the new structure.

    Blog Post:

    [Only registered and activated users can see links. ]

    For whoever wants to see it 'for themselves'.

    Edit:

    I mirrored the files:

    [Only registered and activated users can see links. ]

    I will also re-upload into rapidshare etc.. later.
    Last edited by Fox3090; 11-06-09 at 02:10 PM.
    If you're going to flame me Private Message me I rather not embarrass you and go off topic at the same time.
    lol@
    Quote Originally Posted by Monsta. View Post
    Yeh, I was on my period.

    Sorry about that.

  16. #15
    Account Upgraded | Title Enabled! AWA's Avatar

    Rank
    True Member
    Join Date
    Feb 2008
    Location
    Bulgaria
    Posts
    1,255

    Re: [GUIDE/CODING] The need to know functions of Habbo emulators

    Here's guestrooms in the navigator. ("GC", 451)
    Revision: 43
    Code:
    Header (b64)
    QA
    Char(2) ┬Ę
    Count of rooms (vl64)
    foreach room
    {
    Room id (vl64)
    Event or not (true = 1, false = 0) (vl64)
    Room name
    Char(2)
    Owner name
    Char(2)
    Room state (locked = 1, password = 2, open = 0) (vl64)
    Visitors now (vl64)
    Visitors max (vl64)
    Room description
    Char(2)
    H
    Trading allowed(yes=1, no=0)
    Room rating (vl64)
    Category id (vl64)
    Char(2)
    Number of tags (vl64)
    foreach tag
    {
    Tag
    Char(2)
    }
    Icon (vl64)
    }

 

 
Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HyperFilter
Sponsored by HyperFilter , secured by Incapsula , powered by LiteSpeed.
Mods by DBTech. All times are GMT +1. The time now is 07:17 AM.
Powered by vBulletin® Copyright , Jelsoft Enterprises Ltd.