def TalkAscii(text, type=0, hue=0x34, font=1): p = PacketWriter(0x03) p.byte(type) p.ushort(hue) p.ushort(font) p.cstring(text) return p.finish()
def VendorSellReply(vendor_serial, item_serial, amount=1): p = PacketWriter(0x9f) p.uint(vendor_serial) p.ushort(1) p.uint(item_serial) p.ushort(amount) return p.finish()
def to_data(self): packet = PacketWriter(0x8C, self.packet_length) packet.ipv4(self.relay.ip) packet.ushort(self.relay.port) packet.uint(self.relay.auth_id) return packet.finish()
def VendorBuyReply(vendor_serial, item_serial, amount=1): p = PacketWriter(0x3b) p.uint(vendor_serial) p.byte(2) # flags p.byte(0) # layer p.uint(item_serial) p.ushort(amount) return p.finish()
def Drop(serial, x, y, z, dest_serial): p = PacketWriter(0x08) p.uint(serial) p.ushort(x) p.ushort(y) p.sbyte(z) p.uint(dest_serial) return p.finish()
def PlayCharacter(slot): p = PacketWriter(0x5d) p.uint(0) p.fixstring("", 30) p.ushort(0) p.uint(0) p.fixstring("", 24) p.uint(slot) p.uint(0xdeadbeef) return p.finish()
def TargetResponse(type, target_id, flags, serial, x, y, z, graphic): p = PacketWriter(0x6c) p.byte(type) p.uint(target_id) p.byte(flags) p.uint(serial) p.ushort(x) p.ushort(y) p.sshort(z) p.ushort(graphic) return p.finish()
def __init__(self, data: bytes, transport: asyncio.WriteTransport, packet_length: int): self.data: bytes = data[:] self.p: uo.packets.UOPacket = uo.packets.UOPacket(self.data, packet_length) self.packet_length = packet_length self.razor_features = uo.packets.RazorFeatures(self.p.from_buffer()) if self.razor_features.features == 0xFE: packet = PacketWriter(0xF0, packet_length) packet.ushort(0x0004) packet.byte(0xFF) transport.write(packet.finish())
def TalkUnicode(text, keyword, type=0xc0, hue=0x34, font=1): p = PacketWriter(0xad) p.byte(type) p.ushort(hue) p.ushort(font) p.fixstring('Eng', 4) p.byte(0x00) p.byte(0x10) p.byte(keyword) p.cstring(text) return p.finish()
def to_data(self): packet = PacketWriter(0xA8, self.packet_length) packet.byte(self.server_list.sys_info_flag) packet.ushort(self.server_list.count) for server in self.server_list.servers: packet.ushort(server.index) packet.fixstring(server.name, 32) packet.byte(server.percent_full) packet.byte(server.timezone) packet.ipv4(server.ip, True) return packet.finish()
def MenuResponse(serial, index): p = PacketWriter(0x7d) p.uint(serial) p.ushort(0) # menu id p.ushort(index) p.ushort(0) # item id p.ushort(0) # hue return p.finish()
def CreateCharacter(name): p = PacketWriter(0x00) p.uint(0xedededed) p.uint(0xffffffff) p.byte(0x00) p.fixstring(name, 30) p.ushort(0x0000) p.uint(0x0000003f) # flags p.uint(0x00000001) p.uint(0x0000000f) p.byte(0x00) # profession p.byte(0x00) p.byte(0x00) p.byte(0x00) p.uint(0x00000000) p.uint(0x00000000) p.byte(0x02) # male? p.byte(0x3c) # str p.byte(0x0a) # dex p.byte(0x0a) # int p.byte(0x19) # is1 p.byte(0x27) # vs1 p.byte(0x2c) # is2 p.byte(0x0b) # vs2 p.byte(0x0b) # is3 p.byte(0x32) # vs3 p.ushort(0x03ea) # hue p.ushort(0x2047) # hair p.ushort(0x044e) # hair hue p.ushort(0x204b) # facial hair p.ushort(0x044e) # facial hair hue p.byte(0x00) p.byte(0x00) # city p.uint(0x00000000) # char slot p.uint(0xdeadbeef) # client ip p.ushort(0x00e0) # shirt hue p.ushort(0x01a1) # pants hue return p.finish()
def StatLock(stat, lock): p = PacketWriter(0xbf) p.ushort(0x001a) p.byte(stat) p.byte(lock) return p.finish()
def PlayServer(index): p = PacketWriter(0xa0) p.ushort(index) return p.finish()
def LiftRequest(serial, amount=0xffff): p = PacketWriter(0x07) p.uint(serial) p.ushort(amount) return p.finish()
def SkillLock(skill, lock): p = PacketWriter(0x3a) p.ushort(skill) p.byte(lock) return p.finish()