code: def _hash(self, string, hash_type):
          
          hash_types = {
              'TABLE_OFFSET': 0,
              'HASH_A': 1,
              'HASH_B': 2,
              'TABLE': 3
          }
          seed1 = 0x7FED7FED
          seed2 = 0xEEEEEEEE
  
          for ch in string.upper():
              if not isinstance(ch, int): ch = ord(ch)
              value = self.encryption_table[(hash_types[hash_type] << 8) + ch]
              seed1 = (value ^ (seed1 + seed2)) & 0xFFFFFFFF
              seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3 & 0xFFFFFFFF
  
          return seed1
docs: Hash a string using MPQ's hash function.