def WarMode(warmode): p = PacketWriter(0x72) p.boolean(warmode) p.byte(0) p.byte(0) p.byte(0) return p.finish()
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 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 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 TalkUnicode(text, keyword=None, type=0, hue=0x34, font=1): assert (type & 0xc0) == 0 if keyword is not None: type |= 0xc0 p = PacketWriter(0xad) p.byte(type) p.ushort(hue) p.ushort(font) p.fixstring('Eng', 4) if keyword is not None: p.byte(0x00) p.byte(0x10 | (keyword >> 8)) p.byte(keyword) p.ucstring(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 SkillLock(skill, lock): p = PacketWriter(0x3a) p.ushort(skill) p.byte(lock) return p.finish()
def MobileQuery(type, serial): p = PacketWriter(0x34) p.uint(0xedededed) p.byte(type) p.uint(serial) return p.finish()
def Resync(): p = PacketWriter(0x22) p.byte(0) p.byte(0) return p.finish()
def CancelSecureTrade(serial): p = PacketWriter(0x6f) p.byte(0x01) p.uint(serial) 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 WalkRequest(direction, seq): p = PacketWriter(0x02) p.byte(direction) p.byte(seq) p.uint(0) return p.finish()
def RazorHandshakeResponse(): p = PacketWriter(0xf0) p.byte(0xff) return p.finish()
def StatLock(stat, lock): p = PacketWriter(0xbf) p.ushort(0x001a) p.byte(stat) p.byte(lock) return p.finish()
def AccountLogin(username, password): p = PacketWriter(0x80) p.fixstring(username, 30) p.fixstring(password, 30) p.byte(0) return p.finish()
def CheckSecureTrade(serial): p = PacketWriter(0x6f) p.byte(0x02) p.uint(serial) p.uint(1) return p.finish()
def EquipRequest(item_serial, layer, target_serial): p = PacketWriter(0x13) p.uint(item_serial) p.byte(layer) p.uint(target_serial) return p.finish()
def TextCommand(type, command): p = PacketWriter(0x12) p.byte(type) p.cstring(command) return p.finish()