THIS PAGE IS OUTDATED AND DOES NOT REFLECT THE CURRENT STATE OF FREESO OR PROJECT DOLLHOUSE IN ANY WAY - IT WILL BE UPDATED IN DUE COURSE.
Due to Project Dollhouse's rapid development, this article is subject to change and may not always be up to date.
This page presents a dissection of the current Project Dollhouse protocol.
If you're having trouble, check out the Project Dollhouse forum for more help.
Field names have not yet been added (this is intentional) and will be added in due course.
Packet format[edit]
Each individual packet may have a different packet format to the last. Therefore, the only similarity is the "0x-" which the packet will always begin with. Packets may be compressed or uncompressed; if the latter is the case, the packet header will be "3" but if the former is true then the packet header will be "5". There can be no mixture of uncompressed and compressed data in the packet. Some of the packets may also use additional functions specified in the GonzoNet files (specifically PacketStream.cs, PacketHandlers.cs, PacketHandler.cs).
Packets[edit]
Here you will find all of the current packets for Project Dollhouse.
Login Packets[edit]
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x00
|
LOGIN_REQUEST
|
Server / Client
|
Version1
|
Byte
|
Encrypted.
|
Version2
|
Byte
|
Version3
|
Byte
|
Version4
|
Byte
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x01
|
LOGIN_NOTIFY
|
Server / Client
|
??
|
??
|
None.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x02
|
LOGIN_FAILURE
|
Client
|
Error Type
|
Byte
|
Only used by the client. Unknown byte is 0x01 is bad accountname, 0x02 if bad password, 0x03 if bad challenge response
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x03
|
CHALLENGE_RESPONSE
|
Server
|
Length
|
Byte
|
Client sent a response to the challenge. Possible that not all fields are listed, use with caution.
|
AccountName
|
String
|
PasswordHash
|
String Array
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Notes
|
0x04
|
LOGIN_SUCCESS
|
Server
|
Sent by the server to tell the client that logging in was a success.
|
Invalid version error[edit]
Sent when the client has a different version to the login server.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Notes
|
0x05
|
INVALID_VERSION
|
Client / Server
|
Sent by the server and client to notify the client of an invalid version.
|
City server packets[edit]
This could be "CityInfoRequest" as specified here.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x07
|
CITY_LIST
|
Client / Server
|
Unknown
|
Byte
|
Like the character list, but sends city list with it somewhat. Unknown Byte is always 0x00 (dummy).
|
This is sent when a new city server came online.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x08
|
NEW_CITY_SERVER
|
Client / Server
|
Name
|
String
|
None.
|
Description
|
String
|
IP
|
String
|
Port
|
Int32
|
Status
|
Byte
|
Thumbnail
|
UInt64
|
UUID
|
String
|
Map
|
UInt64
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x09
|
CITY_SERVER_OFFLINE
|
Client / Server
|
??
|
??
|
None.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x67
|
CHARACTER_CREATE_CITY
|
Client / Server
|
??
|
??
|
None.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x68
|
CHARACTER_CREATE_CITY_FAILED
|
Client / Server
|
??
|
??
|
None.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x63
|
LOGIN_REQUEST_CITY
|
City Server
|
PublicKey
|
Byte
|
LOGIN_NOTIFY_CITY must be sent IMMEDIATELY after recieving.
|
NOnce
|
Byte
|
Sent when entering the city was a success.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x64
|
LOGIN_SUCCESS_CITY
|
Client
|
Unknown
|
Byte
|
Encrypted. Unknown Byte is always 0x01.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x65
|
LOGIN_NOTIFY_CITY
|
Client / Server
|
ServerPublicKey
|
Byte
|
Does not have to have the fields. Encrypted.
|
EncryptedData
|
Byte
|
Sent when entering the city failed.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x66
|
LOGIN_FAILURE_CITY
|
Client / Server
|
Header
|
Unknown
|
Uses WriteHeader function. Packet header is either 3 or 5. Unknown Byte is always 0x01.
|
Packet Header
|
UInt16
|
Unknown
|
Byte
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x69
|
REQUEST_CITY_TOKEN
|
Client / Server
|
??
|
??
|
None.
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x70
|
CITY_TOKEN
|
Client / Server
|
Status
|
Byte
|
All of "LotTileEntries" used in the same array.
|
NumHouses
|
UInt16
|
LotTileEntry
|
Int32
|
LotTileEntry
|
String
|
LotTileEntry
|
UInt16
|
LotTileEntry
|
UInt16
|
LotTileEntry
|
Byte
|
LotTileEntry
|
Int32
|
Character packets[edit]
This could be CharacterInfoRequest as specified here.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x06
|
CHARACTER_LIST
|
Client / Server
|
??
|
??
|
Sends character list with it somewhat. Could be "CharacterInfoRequest"
|
Sent when a character is created with information about the character.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x010
|
CHARACTER_CREATE
|
Client / Server
|
AccountStrLength
|
Byte
|
None.
|
Token
|
String
|
Timestamp
|
String
|
Name
|
String
|
Sex
|
String
|
Description
|
String
|
HeadOutfitID
|
UInt64
|
BodyOutfitID
|
UInt64
|
Appearance
|
Byte
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x011
|
CHARACTER_CREATION_STATUS
|
Client / Server
|
??
|
??
|
None.
|
Presumably sent by the client when a character is retired.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x012
|
RETIRE_CHARACTER
|
Client / Server
|
GUID
|
String
|
None.
|
This is the start of many packets which does not follow the same "0x0--" pattern as before.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x13
|
RETIRE_CHARACTER_STATUS
|
Client / Server
|
??
|
??
|
No idea why it doesn't follow the same 0x0-- pattern as before.
|
Session packets[edit]
Sent when a player joined a session (game) in progress.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x71
|
PLAYER_JOINED_SESSION
|
Client / Server
|
Avatar
|
String
|
None.
|
Name
|
String
|
Sex
|
String
|
Description
|
String
|
HeadOutfitID
|
UInt64
|
BodyOutfitID
|
UInt64
|
Appearance
|
Int32
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x72
|
PLAYER_LEFT_SESSION
|
Client / Server
|
??
|
??
|
None.
|
Message / letter packets[edit]
This is sent by the client to the server and then turned into PLAYER_RECV_LETTER to be sent to the user with the GUID specified,
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x73
|
PLAYER_SENT_LETTER
|
Client / Server
|
GUID
|
String
|
None.
|
Subject
|
String
|
Message
|
String
|
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Notes
|
0x74
|
PLAYER_RECV_LETTER
|
Client / Server
|
None. Likely has no fields.
|
This packet will be sent by the client and then sent to all connected clients.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x75
|
PLAYER_BROADCAST_LETTER
|
Client / Server
|
Subject
|
String
|
Possibly sent by an admin.
|
Message
|
String
|
The server will return this packet if the player is already online.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x76
|
PLAYER_ALREADY_ONLINE
|
Client
|
Dummy
|
Byte
|
Sent by the login server. Dummy is always 0x00.
|
Time packet[edit]
The time packet sends the client the time when it has been changed.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x77
|
TIME_OF_DAY
|
Client / Server
|
Time
|
Int32
|
Sent by the server and client with time.
|
Time
|
Int32
|
Time
|
Int32
|
Could define if AM or PM, unsure.
|
Lot packets[edit]
Sent by the client to buy a lot.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x78
|
LOT_PURCHASE_REQUEST
|
Client / Server
|
X
|
UInt16
|
|
Y
|
UInt16
|
Sent when a lot purchase was successful.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Notes
|
0x79
|
LOT_PURCHASE_SUCCESSFUL
|
Client / Server
|
None. Likely no fields.
|
Sent when a lot is already occupied.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x78
|
LOT_PURCHASE_OCCUPIED
|
Client / Server
|
Is Buildable
|
Byte
|
"Is Buildable" is always 0x00 because the lot is occupied.
|
Sent when a lot can't be built on.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x81
|
LOT_UNBUILDABLE
|
Client / Server
|
Is Buildable
|
Byte
|
"Is Buildable" is always 0x00 because the lot is not buildable...
|
Sent with the cost, position, lot ID, and lot name.
Packet ID
|
Packet Name
|
Bound To / Sent To
|
Field Name
|
Field Type
|
Notes
|
0x82
|
LOT_COST
|
Client / Server
|
X
|
UInt16
|
Sent by the server and client, presumably with the lot cost in Simoleons. Encrypted. When lot is occupied, locked, or spotlight, returns 0 as lot cost.
|
Y
|
UInt16
|
LotID
|
Int32
|
LotName
|
String
|
Flags
|
Byte
|
Lot cost
|
Int32
|
Where do the packets go to?[edit]
Login Server[edit]
LoginPacketHandlers.cs[edit]
Recieves:
Packet Name
|
LOGIN_REQUEST
|
CHALLENGE_RESPONSE
|
CHARACTER_LIST
|
CITY_LIST
|
CHARACTER_CREATE
|
REQUEST_CITY_TOKEN
|
RETIRE_CHARACTER
|
Sends:
Packet Name
|
INVALID_VERSION
|
LOGIN_NOTIFY
|
LOGIN_FAILURE
|
LOGIN_SUCCESS
|
CHARACTER_LIST
|
0x05 (INVALID_VERSION)
|
CITY_LIST
|
CHARACTER_CREATION_STATUS
|
0x01 (LOGIN_NOTIFY)
|
0x02 (LOGIN_FAILURE)
|
RETIRE_CHARACTER_STATUS
|
CityServerPacketHandlers.cs[edit]
Receives:
Packet Name
|
CityServerLoggedIn (NEW_CITY_SERVER)?
|
PlayerOnline (PLAYER_JOINED_SESSION)?
|
Sends:
Packet Name
|
NEW_CITY_SERVER
|
REQUEST_CITY_TOKEN
|
PLAYER_ALREADY_ONLINE
|
City Server[edit]
LoginPacketHandlers.cs[edit]
Receives:
Packet Name
|
REQUEST_CITY_TOKEN or CITY_TOKEN (unknown, possibly not implemented yet)
|
RETIRE_CHARACTER
|
Sends:
Packet Name
|
0x67 (CHARACTER_CREATE_CITY)
|
CITY_TOKEN
|
ClientPacketHandlers.cs[edit]
Receives:
Packet Name
|
InitialClientConnect (Unknown packet)
|
CHALLENGE_RESPONSE
|
CHARACTER_CREATE
|
CITY_TOKEN
|
PLAYER_SENT_LETTER
|
PLAYER_BROADCAST_LETTER
|
LOT_COST
|
LOT_PURCHASE_REQUEST
|
Sends:
Packet Name
|
LOGIN_NOTIFY_CITY
|
LOGIN_SUCCESS_CITY
|
LOGIN_FAILURE_CITY
|
CHARACTER_CREATE_CITY
|
CHARACTER_CREATE_CITY_FAILED
|
CITY_TOKEN
|
LOT_PURCHASE_OCCUPIED
|
LOT_UNBUILDABLE
|