예제 #1
0
def matchSettings(stream):
	# Data to return, will be merged later
	data = []

	# Some settings
	struct = [
		["matchID", dataTypes.uInt16],
		["inProgress", dataTypes.byte],
		["unknown", dataTypes.byte],
		["mods", dataTypes.uInt32],
		["matchName", dataTypes.string],
		["matchPassword", dataTypes.string],
		["beatmapName", dataTypes.string],
		["beatmapID", dataTypes.uInt32],
		["beatmapMD5", dataTypes.string]
	]

	# Slot statuses (not used)
	for i in range(0,16):
		struct.append(["slot{}Status".format(str(i)), dataTypes.byte])

	# Slot statuses (not used)
	for i in range(0,16):
		struct.append(["slot{}Team".format(str(i)), dataTypes.byte])

	# Read first part
	data.append(packetHelper.readPacketData(stream, struct))

	# Skip userIDs because f**k
	start = 7+2+1+1+4+4+16+16+len(data[0]["matchName"])+len(data[0]["matchPassword"])+len(data[0]["beatmapMD5"])+len(data[0]["beatmapName"])
	start += 1 if (data[0]["matchName"] == "") else 2
	start += 1 if (data[0]["matchPassword"] == "") else 2
	start += 2	# If beatmap name and MD5 don't change, the client sends \x0b\x00 istead of \x00 only, so always add 2. ...WHY!
	start += 2
	for i in range(0,16):
		s = data[0]["slot{}Status".format(str(i))]
		if s != slotStatuses.free and s != slotStatuses.locked:
			start += 4

	# Other settings
	struct = [
		["hostUserID", dataTypes.sInt32],
		["gameMode", dataTypes.byte],
		["scoringType", dataTypes.byte],
		["teamType", dataTypes.byte],
		["freeMods", dataTypes.byte],
	]

	# Read last part
	data.append(packetHelper.readPacketData(stream[start:], struct, False))

	# Mods if freemod (not used)
	#if data[1]["freeMods"] == 1:

	result = {}
	for i in data:
		result.update(i)
	return result
예제 #2
0
def matchSettings(stream):
    # Data to return, will be merged later
    data = []

    # Some settings
    struct = [["matchID", dataTypes.uInt16], ["inProgress", dataTypes.byte],
              ["unknown", dataTypes.byte], ["mods", dataTypes.uInt32],
              ["matchName", dataTypes.string],
              ["matchPassword", dataTypes.string],
              ["beatmapName",
               dataTypes.string], ["beatmapID", dataTypes.uInt32],
              ["beatmapMD5", dataTypes.string]]

    # Slot statuses (not used)
    for i in range(0, 16):
        struct.append(["slot{}Status".format(str(i)), dataTypes.byte])

    # Slot statuses (not used)
    for i in range(0, 16):
        struct.append(["slot{}Team".format(str(i)), dataTypes.byte])

    # Read first part
    data.append(packetHelper.readPacketData(stream, struct))

    # Skip userIDs because f**k
    start = 7 + 2 + 1 + 1 + 4 + 4 + 16 + 16 + len(data[0]["matchName"]) + len(
        data[0]["matchPassword"]) + len(data[0]["beatmapMD5"]) + len(
            data[0]["beatmapName"])
    start += 1 if (data[0]["matchName"] == "") else 2
    start += 1 if (data[0]["matchPassword"] == "") else 2
    start += 2  # If beatmap name and MD5 don't change, the client sends \x0b\x00 istead of \x00 only, so always add 2. ...WHY!
    start += 2
    for i in range(0, 16):
        s = data[0]["slot{}Status".format(str(i))]
        if s != slotStatuses.free and s != slotStatuses.locked:
            start += 4

    # Other settings
    struct = [
        ["hostUserID", dataTypes.sInt32],
        ["gameMode", dataTypes.byte],
        ["scoringType", dataTypes.byte],
        ["teamType", dataTypes.byte],
        ["freeMods", dataTypes.byte],
    ]

    # Read last part
    data.append(packetHelper.readPacketData(stream[start:], struct, False))

    # Mods if freemod (not used)
    #if data[1]["freeMods"] == 1:

    result = {}
    for i in data:
        result.update(i)
    return result
예제 #3
0
def sendPublicMessage(stream):
	return packetHelper.readPacketData(stream,
	[
		["unknown", 	dataTypes.string],
		["message", 	dataTypes.string],
		["to", 			dataTypes.string]
	])
예제 #4
0
def sendPrivateMessage(stream):
	return packetHelper.readPacketData(stream,
	[
		["unknown", 	dataTypes.string],
		["message", 	dataTypes.string],
		["to", 			dataTypes.string],
		["unknown2",	dataTypes.uInt32]
	])
예제 #5
0
def userActionChange(stream):
	return packetHelper.readPacketData(stream,
	[
		["actionID", 	dataTypes.byte],
		["actionText", 	dataTypes.string],
		["actionMd5", 	dataTypes.string],
		["actionMods",	dataTypes.uInt32],
		["gameMode",	dataTypes.byte]
	])
예제 #6
0
def transferHost(stream):
    return packetHelper.readPacketData(stream, [["slotID", dataTypes.uInt32]])
예제 #7
0
def setAwayMessage(stream):
	return packetHelper.readPacketData(stream,
	[
		["unknown", 	dataTypes.string],
		["awayMessage", dataTypes.string]
	])
예제 #8
0
def matchInvite(stream):
	return packetHelper.readPacketData(stream, [["userID", dataTypes.uInt32]])
예제 #9
0
def transferHost(stream):
	return packetHelper.readPacketData(stream, [["slotID", dataTypes.uInt32]])
예제 #10
0
def lockSlot(stream):
	return packetHelper.readPacketData(stream, [["slotID", dataTypes.uInt32]])
예제 #11
0
def changeMods(stream):
	return packetHelper.readPacketData(stream, [["mods", dataTypes.uInt32]])
예제 #12
0
def sendPublicMessage(stream):
    return packetHelper.readPacketData(
        stream, [["unknown", dataTypes.string], ["message", dataTypes.string],
                 ["to", dataTypes.string]])
예제 #13
0
def startSpectating(stream):
	return packetHelper.readPacketData(stream,[["userID", 	dataTypes.sInt32]])
예제 #14
0
def channelPart(stream):
	return packetHelper.readPacketData(stream,[["channel", 	dataTypes.string]])
예제 #15
0
def startSpectating(stream):
    return packetHelper.readPacketData(stream, [["userID", dataTypes.sInt32]])
예제 #16
0
def addRemoveFriend(stream):
    return packetHelper.readPacketData(stream,
                                       [["friendID", dataTypes.sInt32]])
예제 #17
0
def channelPart(stream):
    return packetHelper.readPacketData(stream, [["channel", dataTypes.string]])
예제 #18
0
def setAwayMessage(stream):
    return packetHelper.readPacketData(
        stream,
        [["unknown", dataTypes.string], ["awayMessage", dataTypes.string]])
예제 #19
0
def sendPrivateMessage(stream):
    return packetHelper.readPacketData(
        stream, [["unknown", dataTypes.string], ["message", dataTypes.string],
                 ["to", dataTypes.string], ["unknown2", dataTypes.uInt32]])
예제 #20
0
def lockSlot(stream):
    return packetHelper.readPacketData(stream, [["slotID", dataTypes.uInt32]])
예제 #21
0
def changeMods(stream):
    return packetHelper.readPacketData(stream, [["mods", dataTypes.uInt32]])
예제 #22
0
def matchInvite(stream):
    return packetHelper.readPacketData(stream, [["userID", dataTypes.uInt32]])
예제 #23
0
def addRemoveFriend(stream):
	return packetHelper.readPacketData(stream, [["friendID", dataTypes.sInt32]])
예제 #24
0
def userActionChange(stream):
    return packetHelper.readPacketData(
        stream,
        [["actionID", dataTypes.byte], ["actionText", dataTypes.string],
         ["actionMd5", dataTypes.string], ["actionMods", dataTypes.uInt32],
         ["gameMode", dataTypes.byte]])
예제 #25
0
def joinMatch(stream):
	return packetHelper.readPacketData(stream, [["matchID", dataTypes.uInt32], ["password", dataTypes.string]])
예제 #26
0
def joinMatch(stream):
    return packetHelper.readPacketData(
        stream,
        [["matchID", dataTypes.uInt32], ["password", dataTypes.string]])