class Grenade(Projectile): def __init__(self, name, image, damage, splash_damage): super(Gun, self).__init__(name, image, weight, damage, 5, 10) self.splash_damage = splash_damage def explode(self): pass class FragGrenade(Grenade): ITEM_CODE = 210 def __init__(self): super(Grenade, self).__init__('Frag Grenade', 'frag_grenade.png', 8, 20, 15) def explode(self): # TODO: Blast radius. pass ITEMS = ( Phone, ) ITEM_CODES = {item.ITEM_CODE for item in ITEMS} ITEM_CODES_REVERSE_LOOKUP = reverse_dict(ITEM_CODES)
# OPT: Create bytes in advance for concatenation. CLIENT_CODES_BYTES = {k: bytes((v,)) for k, v in CLIENT_CODES.items()} EQUIP_SLOT_CODES = { CLIENT_CODES['equip_slot_1']: 1, CLIENT_CODES['equip_slot_2']: 2, CLIENT_CODES['equip_slot_3']: 3, CLIENT_CODES['equip_slot_4']: 4, CLIENT_CODES['equip_slot_5']: 5, CLIENT_CODES['equip_slot_6']: 6, CLIENT_CODES['equip_slot_7']: 7, CLIENT_CODES['equip_slot_8']: 8, CLIENT_CODES['equip_slot_9']: 9, } SERVER_CODES_REVERSE_LOOKUP = reverse_dict(SERVER_CODES) CLIENT_CODES_REVERSE_LOOKUP = reverse_dict(CLIENT_CODES) # Validation # Networking VALID_IP_HOSTNAME_CHARS = set(ascii_letters) | set(digits) | {'-', '.'} # ip and hostname regexes sourced from http://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address REGEXS = { 'ip': b"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$", 'hostname': b"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$", }