Initial Release of IGNCore version 2.5
This commit is contained in:
@@ -0,0 +1,456 @@
|
||||
from core.aochat.extended_message import ExtendedMessage
|
||||
from core.aochat.packets import *
|
||||
|
||||
|
||||
class ServerPacket(Packet):
|
||||
def __init__(self, packet_id, types, args):
|
||||
self.id = packet_id
|
||||
self.types = types
|
||||
self.args = args
|
||||
|
||||
def to_bytes(self):
|
||||
return encode_args(self.types, self.args)
|
||||
|
||||
def __str__(self):
|
||||
return "ServerPacket(%d): %s" % (self.id, self.args)
|
||||
|
||||
@classmethod
|
||||
def get_instance(cls, packet_id, data):
|
||||
if packet_id == LoginSeed.id:
|
||||
return LoginSeed.from_bytes(data)
|
||||
elif packet_id == LoginOK.id:
|
||||
return LoginOK.from_bytes(data)
|
||||
elif packet_id == LoginError.id:
|
||||
return LoginError.from_bytes(data)
|
||||
elif packet_id == LoginCharacterList.id:
|
||||
return LoginCharacterList.from_bytes(data)
|
||||
elif packet_id == CharacterUnknown.id:
|
||||
return CharacterUnknown.from_bytes(data)
|
||||
elif packet_id == CharacterName.id:
|
||||
return CharacterName.from_bytes(data)
|
||||
elif packet_id == CharacterLookup.id:
|
||||
return CharacterLookup.from_bytes(data)
|
||||
elif packet_id == PrivateMessage.id:
|
||||
return PrivateMessage.from_bytes(data)
|
||||
elif packet_id == VicinityMessage.id:
|
||||
return VicinityMessage.from_bytes(data)
|
||||
elif packet_id == BroadcastMessage.id:
|
||||
return BroadcastMessage.from_bytes(data)
|
||||
elif packet_id == SimpleSystemMessage.id:
|
||||
return SimpleSystemMessage.from_bytes(data)
|
||||
elif packet_id == SystemMessage.id:
|
||||
return SystemMessage.from_bytes(data)
|
||||
elif packet_id == BuddyAdded.id:
|
||||
return BuddyAdded.from_bytes(data)
|
||||
elif packet_id == BuddyRemoved.id:
|
||||
return BuddyRemoved.from_bytes(data)
|
||||
elif packet_id == PrivateChannelInvited.id:
|
||||
return PrivateChannelInvited.from_bytes(data)
|
||||
elif packet_id == PrivateChannelKicked.id:
|
||||
return PrivateChannelKicked.from_bytes(data)
|
||||
elif packet_id == PrivateChannelLeft.id:
|
||||
return PrivateChannelLeft.from_bytes(data)
|
||||
elif packet_id == PrivateChannelClientJoined.id:
|
||||
return PrivateChannelClientJoined.from_bytes(data)
|
||||
elif packet_id == PrivateChannelClientLeft.id:
|
||||
return PrivateChannelClientLeft.from_bytes(data)
|
||||
elif packet_id == PrivateChannelMessage.id:
|
||||
return PrivateChannelMessage.from_bytes(data)
|
||||
elif packet_id == PrivateChannelInviteRefused.id:
|
||||
return PrivateChannelInviteRefused.from_bytes(data)
|
||||
elif packet_id == PublicChannelJoined.id:
|
||||
return PublicChannelJoined.from_bytes(data)
|
||||
elif packet_id == PublicChannelLeft.id:
|
||||
return PublicChannelLeft.from_bytes(data)
|
||||
elif packet_id == PublicChannelMessage.id:
|
||||
return PublicChannelMessage.from_bytes(data)
|
||||
elif packet_id == Pong.id:
|
||||
return Pong.from_bytes(data)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class LoginSeed(ServerPacket):
|
||||
id = 0
|
||||
types = "S"
|
||||
|
||||
def __init__(self, seed):
|
||||
self.seed = seed
|
||||
super().__init__(self.id, self.types, [self.seed])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class LoginOK(ServerPacket):
|
||||
id = 5
|
||||
types = ""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(self.id, self.types, [])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
return cls()
|
||||
|
||||
|
||||
class LoginError(ServerPacket):
|
||||
id = 6
|
||||
types = "S"
|
||||
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.id, self.types, [self.message])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class LoginCharacterList(ServerPacket):
|
||||
id = 7
|
||||
types = "isii"
|
||||
|
||||
def __init__(self, char_ids, names, levels, online_statuses):
|
||||
self.char_ids = char_ids
|
||||
self.names = names
|
||||
self.levels = levels
|
||||
self.online_statuses = online_statuses
|
||||
super().__init__(self.id, self.types, [self.char_ids, self.names, self.levels, self.online_statuses])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class CharacterUnknown(ServerPacket):
|
||||
id = 10
|
||||
types = "I"
|
||||
|
||||
def __init__(self, char_id):
|
||||
self.char_id = char_id
|
||||
super().__init__(self.id, self.types, [self.char_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class CharacterName(ServerPacket):
|
||||
id = 20
|
||||
types = "IS"
|
||||
|
||||
def __init__(self, char_id, name):
|
||||
self.char_id = char_id
|
||||
self.name = name
|
||||
super().__init__(self.id, self.types, [self.char_id, self.name])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class CharacterLookup(ServerPacket):
|
||||
id = 21
|
||||
types = "IS"
|
||||
|
||||
def __init__(self, char_id, name):
|
||||
self.char_id = char_id
|
||||
self.name = name
|
||||
super().__init__(self.id, self.types, [self.char_id, self.name])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateMessage(ServerPacket):
|
||||
id = 30
|
||||
types = "ISS"
|
||||
|
||||
def __init__(self, char_id, message, blob):
|
||||
self.char_id = char_id
|
||||
self.message = message
|
||||
self.blob = blob
|
||||
super().__init__(self.id, self.types, [self.char_id, self.message, self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class VicinityMessage(ServerPacket):
|
||||
id = 34
|
||||
types = "ISS"
|
||||
|
||||
def __init__(self, char_id, message, blob):
|
||||
self.char_id = char_id
|
||||
self.message = message
|
||||
self.blob = blob
|
||||
super().__init__(self.id, self.types, [self.char_id, self.message, self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class BroadcastMessage(ServerPacket):
|
||||
id = 35
|
||||
types = "SSS"
|
||||
|
||||
def __init__(self, text, message, blob):
|
||||
self.text = text
|
||||
self.message = message
|
||||
self.blob = blob
|
||||
super().__init__(self.id, self.types, [self.text, self.message, self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class SimpleSystemMessage(ServerPacket):
|
||||
id = 36
|
||||
types = "S"
|
||||
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.id, self.types, [self.message])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class SystemMessage(ServerPacket):
|
||||
id = 37
|
||||
types = "IIIB"
|
||||
|
||||
def __init__(self, client_id, window_id, message_id, message_args):
|
||||
self.client_id = client_id
|
||||
self.window_id = window_id
|
||||
self.message_id = message_id
|
||||
self.message_args = message_args
|
||||
# noinspection PyTypeChecker
|
||||
self.extended_message: ExtendedMessage = None
|
||||
super().__init__(self.id, self.types, [self.client_id, self.window_id, self.message_id, self.message_args])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
def __str__(self):
|
||||
return super().__str__() + ", ExtendedMessage: %s" % self.extended_message
|
||||
|
||||
|
||||
class BuddyAdded(ServerPacket):
|
||||
id = 40
|
||||
types = "IIS"
|
||||
|
||||
def __init__(self, char_id, online, status):
|
||||
self.char_id = char_id
|
||||
self.online = online
|
||||
self.status = status
|
||||
super().__init__(self.id, self.types, [self.char_id, self.online, self.status])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class BuddyRemoved(ServerPacket):
|
||||
id = 41
|
||||
types = "I"
|
||||
|
||||
def __init__(self, char_id):
|
||||
self.char_id = char_id
|
||||
super().__init__(self.id, self.types, [self.char_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelInvited(ServerPacket):
|
||||
id = 50
|
||||
types = "I"
|
||||
|
||||
def __init__(self, private_channel_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelKicked(ServerPacket):
|
||||
id = 51
|
||||
types = "I"
|
||||
|
||||
def __init__(self, private_channel_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelLeft(ServerPacket):
|
||||
id = 53
|
||||
types = "I"
|
||||
|
||||
def __init__(self, private_channel_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelClientJoined(ServerPacket):
|
||||
id = 55
|
||||
types = "II"
|
||||
|
||||
def __init__(self, private_channel_id, char_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
self.char_id = char_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id, self.char_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelClientLeft(ServerPacket):
|
||||
id = 56
|
||||
types = "II"
|
||||
|
||||
def __init__(self, private_channel_id, char_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
self.char_id = char_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id, self.char_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelMessage(ServerPacket):
|
||||
id = 57
|
||||
types = "IISS"
|
||||
|
||||
def __init__(self, private_channel_id, char_id, message, blob):
|
||||
self.private_channel_id = private_channel_id
|
||||
self.char_id = char_id
|
||||
self.message = message
|
||||
self.blob = blob
|
||||
super().__init__(self.id, self.types, [self.private_channel_id, self.char_id, self.message, self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PrivateChannelInviteRefused(ServerPacket):
|
||||
id = 58
|
||||
types = "II"
|
||||
|
||||
def __init__(self, private_channel_id, char_id):
|
||||
self.private_channel_id = private_channel_id
|
||||
self.char_id = char_id
|
||||
super().__init__(self.id, self.types, [self.private_channel_id, self.char_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PublicChannelJoined(ServerPacket):
|
||||
id = 60
|
||||
types = "GSIS"
|
||||
|
||||
def __init__(self, channel_id, name, unknown, flags):
|
||||
self.channel_id = channel_id
|
||||
self.name = name
|
||||
self.unknown = unknown
|
||||
self.flags = flags
|
||||
super().__init__(self.id, self.types, [self.channel_id, self.name, self.unknown, self.flags])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PublicChannelLeft(ServerPacket):
|
||||
id = 61
|
||||
types = "G"
|
||||
|
||||
def __init__(self, channel_id):
|
||||
self.channel_id = channel_id
|
||||
super().__init__(self.id, self.types, [self.channel_id])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
|
||||
class PublicChannelMessage(ServerPacket):
|
||||
id = 65
|
||||
types = "GISS"
|
||||
|
||||
def __init__(self, channel_id, char_id, message, blob):
|
||||
self.channel_id = channel_id
|
||||
self.char_id = char_id
|
||||
self.message = message
|
||||
self.blob = blob
|
||||
# noinspection PyTypeChecker
|
||||
self.extended_message: ExtendedMessage = None
|
||||
super().__init__(self.id, self.types, [self.channel_id, self.char_id, self.message, self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
|
||||
def __str__(self):
|
||||
return super().__str__() + ", ExtendedMessage: %s" % self.extended_message
|
||||
|
||||
|
||||
class Pong(ServerPacket):
|
||||
id = 100
|
||||
types = "S"
|
||||
|
||||
def __init__(self, blob):
|
||||
self.blob = blob
|
||||
super().__init__(self.id, self.types, [self.blob])
|
||||
|
||||
@classmethod
|
||||
def from_bytes(cls, data):
|
||||
args = decode_args(cls.types, data)
|
||||
return cls(*args)
|
||||
Reference in New Issue
Block a user