Forum > MMO Zone > MMO and MMORPG Developments > Habbo Hotel > Habbo Development >
Thread: [GUIDE/CODING] The need to know functions of Habbo emulators
Page 1 of 2 1 2 Last
Nillus 07:41 AM 07-10-08
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 Habbo Hotel section rules and also the forum rules
    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 '[email protected]' (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 '[email protected]' 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;
Originally Posted by :
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:
Originally Posted by :
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: Nillus_Packet_Scout2.rar (16.1 KB)
Report Post
Parker 08:00 AM 07-10-08
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


Report Post
TheAJ 08:35 AM 07-10-08
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

Report Post
Hammad 08:19 PM 31-10-08
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:
Originally Posted by :
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 )


Report Post
Cecer 05:02 PM 01-11-08
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)


Report Post
Alphabeat 07:26 PM 02-11-08
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?
[email protected] = Users Stance (on load of a room)
@v = User's Room Info. (model, Owner etc)
AE = (?) (e.g AEmodel_h [email protected]@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
---------------------------------------------------------------------------------
@[email protected] ; You're Name Cipher,

@D ; Figure Cipher

@[email protected]@F ; Mission Cipher

@G ; Email Cipher

@H ; DOB Cipher

@[email protected]@[email protected] ; 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

[email protected] ; This Packet Is Sent to The Server When You Search Some One's Name
On the Console, Example : [email protected][^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
[email protected](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
[email protected][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 http://xtro.uk.tt

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 http://xtro.uk.tt
@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/


Parker 10:06 AM 08-11-08
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": "[email protected]"
"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": "[email protected]"
"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": "[email protected]"
"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": "[email protected]"
"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"


Report Post
Moogly 09:34 AM 09-11-08
Originally Posted 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 '[email protected]' (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 '[email protected]' 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.

Report Post
Nillus 01:06 PM 09-11-08
Originally Posted by Moogly:
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
[email protected]@E (request move to tile 4,5), = 6 characters, Base64(6) = @F, total: @F[email protected]@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

Report Post
Moogly 09:49 AM 19-12-08
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.

Originally Posted by :
Originally Posted by :
  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 Getting to know the VB6 IDE tutorial
  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 Simple Hello World VB6 tutorial
  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 Object Types and Naming Scheme VB tutorial
  4. Variables are used in any real development. Make sure you visit the Quick Variable tutorial to see how variables work in Visual Basic 6
  5. (Optional) More In Depth Understanding variables and types in VB6
  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: Understanding the if conditional statement
  7. Once you grasp the basics check out this next beginner VB6 tutorial that goes more in depth into conditional statements: Understanding if statements and conditionals in VB6
  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! Understanding For, Do, and while Loops
  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.Functions and Subroutines in VB6 tutorial
  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. Basic Graphical User Interfaces in VB6 - Tutorial
Thats where you learn the basics in the above quote, also I would like to add this great link :
http://www.vb6.us/tutorials/using-va...c-vb6-tutorial

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.


Report Post
s00p 06:41 AM 19-03-09
Originally Posted by Moogly:
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!

Originally Posted by Moogly:
... 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.
Originally Posted by Moogly:
... 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.

Originally Posted by Moogly:
... 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.

Originally Posted by Moogly:
... 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#!

Originally Posted by Moogly:
... 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.

Originally Posted by Moogly:
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.

Originally Posted by Moogly:
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.

Originally Posted by Moogly:
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?

Originally Posted by Moogly:
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 Ruby 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.

Report Post
Jordan 11:22 PM 28-04-09
Java habbo encoding class's
Originally Posted by :
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;
        }    
    }



Report Post
Fox3090 07:39 PM 11-05-09
[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.

Report Post
Fox3090 01:15 PM 08-06-09
[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:

Originally Posted by :
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:

http://script-o-matic.net/habbo_beta/


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:

http://script-o-matic.net/?p=148

For whoever wants to see it 'for themselves'.

Edit:

I mirrored the files:

http://www.hybridcore.net/habbo/

I will also re-upload into rapidshare etc.. later.

Report Post
AWA 07:40 PM 19-01-10
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)
}


Report Post
Page 1 of 2 1 2 Last
Up