Ejemplo n.º 1
0
    def check_flying(self):
        entity = self.connection.entity
        flags = entity.flags
        # in the air when, not gliding, not "on ground", not swimming, not
        # climbing
        if not (flags & GLIDER_FLAG or is_bit_set(entity.physics_flags, 0)
                or is_bit_set(entity.physics_flags, 1)
                or is_bit_set(entity.physics_flags, 2) or entity.hp <= 0):
            self.air_time += self.time_since_update

            if self.air_time > self.max_air_time:
                self.remove_cheater('flying hack')
                return False
        else:
            self.air_time = 0
Ejemplo n.º 2
0
    def check_flying(self):
        entity = self.connection.entity
        flags = entity.flags
        # in the air when, not gliding, not "on ground", not swimming, not
        # climbing
        if not (flags & GLIDER_FLAG
                or is_bit_set(entity.physics_flags, 0)
                or is_bit_set(entity.physics_flags, 1)
                or is_bit_set(entity.physics_flags, 2)
                or entity.hp <= 0):
            self.air_time += self.time_since_update

            if self.air_time > self.max_air_time:
                self.remove_cheater('flying hack')
                return False
        else:
            self.air_time = 0
Ejemplo n.º 3
0
    def has_illegal_flags(self):
        entity_data = self.connection.entity_data
        # This is when holding control, doesnt need to be on a wall
        FLAGS_1_CLIMBING = 0
        FLAGS_1_ATTACKING = 2
        FLAGS_1_GLIDER_ACTIVE = 4

        FLAGS_2_LANTERN_ON = 1
        FLAGS_2_RANGER_STEALTH = 2

        flags_1 = entity_data.flags_1
        flags_2 = entity_data.flags_2

        if (is_bit_set(flags_2, FLAGS_2_RANGER_STEALTH) and
                entity_data.class_type != RANGER_CLASS):
            self.log("none ranger class using ranger stealth. class={classid}"
                     .format(classid=entity_data.class_type),
                     LOG_LEVEL_VERBOSE)
            return True

        # Glider resetting attack animations bug
        # Rapidly switching between will be seen as bug abusing.
        if is_bit_set(flags_1, FLAGS_1_ATTACKING):
            self.last_attacking = time.time()
            self.attack_count += 1

        if is_bit_set(flags_1, FLAGS_1_GLIDER_ACTIVE):
            self.last_glider_active = time.time()
            self.glider_count += 1

        # Reset if either attacking or gliding has not happend for a time
        if (time.time() - self.last_glider_active > 0.75 or
                time.time() - self.last_attacking > 0.75):
            self.glider_count = 0
            self.attack_count = 0

        if (self.glider_count > self.glider_abuse_count and
                self.attack_count > self.glider_abuse_count):
            self.log("glider reset attack animation bug abuse."
                     .format(classid=entity_data.class_type),
                     LOG_LEVEL_VERBOSE)
            return True

        return False
Ejemplo n.º 4
0
    def check_flying(self):
        entity_data = self.connection.entity_data
        flags_1 = entity_data.flags_1
        # in the air when, not gliding, not "on ground", not swimming, not
        # climbing
        if not (
            is_bit_set(flags_1, FLAGS_1_GLIDER_ACTIVE)
            or is_bit_set(entity_data.physics_flags, 0)
            or is_bit_set(entity_data.physics_flags, 2)
            or is_bit_set(entity_data.physics_flags, 3)
            or entity_data.hp <= 0
        ):
            self.air_time += self.time_since_update

            if self.air_time > self.max_air_time:
                self.remove_cheater("flying hack")
                return False
        else:
            self.air_time = 0
Ejemplo n.º 5
0
    def on_entity_update(self, event):
        entity = self.connection.entity
        if self.last_entity_update is None:
            self.last_entity_update = self.loop.time()
            if not self.connection.has_joined:
                self.remove_cheater('full entity update not sent')
                return False

        self.time_since_update = self.loop.time() - self.last_entity_update
        self.last_entity_update = self.loop.time()

        self.last_mana = self.mana
        self.last_health = self.health

        self.mana = entity.mp
        self.health = entity.hp

        if is_bit_set(event.mask, 7):
            if self.check_hostile_type() is False:
                return False

        if is_bit_set(event.mask, 27):
            if self.check_max_health() is False:
                return False

        if self.loop.time() - self.last_hit_check > 1.0:
            self.last_hit_check = self.loop.time()
            if self.check_last_hit() is False:
                return False

#        if self.check_speed() is False:
#            return False

        if self.check_flying() is False:
            return False

        if not self.is_dead and self.health <= 0:
            self.is_dead = True
            self.on_death()

        if self.health > 0 and self.is_dead:
            self.is_dead = False
Ejemplo n.º 6
0
    def has_illegal_flags(self):
        entity_data = self.connection.entity_data
        # This is when holding control, doesnt need to be on a wall

        flags_1 = entity_data.flags_1
        flags_2 = entity_data.flags_2

        if (is_bit_set(flags_2, FLAGS_2_RANGER_STEALTH)
                and entity_data.class_type != RANGER_CLASS):
            self.log(
                "none ranger class using ranger stealth. class={classid}".
                format(classid=entity_data.class_type), LOG_LEVEL_VERBOSE)
            return True

        # Glider resetting attack animations bug
        # Rapidly switching between will be seen as bug abusing.
        if is_bit_set(flags_1, FLAGS_1_ATTACKING):
            self.last_attacking = reactor.seconds()
            self.attack_count += 1

        if is_bit_set(flags_1, FLAGS_1_GLIDER_ACTIVE):
            self.last_glider_active = reactor.seconds()
            self.glider_count += 1

        # Reset if either attacking or gliding has not happend for a time
        if (reactor.seconds() - self.last_glider_active > 0.75
                or reactor.seconds() - self.last_attacking > 0.75):
            self.glider_count = 0
            self.attack_count = 0

        if (self.glider_count > self.glider_abuse_count
                and self.attack_count > self.glider_abuse_count):
            self.log(
                "glider reset attack animation bug abuse.".format(
                    classid=entity_data.class_type), LOG_LEVEL_VERBOSE)
            return True

        return False
Ejemplo n.º 7
0
    def on_entity_update(self, event):
        entity_data = self.connection.entity_data
        self.time_since_update = reactor.seconds() - self.last_entity_update
        self.last_entity_update = reactor.seconds()

        self.last_mana = self.mana
        self.last_health = self.health

        self.mana = entity_data.mp
        self.health = entity_data.hp

        if is_bit_set(event.mask, 7):
            if self.check_hostile_type() is False:
                return False

        if is_bit_set(event.mask, 27):
            if self.check_max_health() is False:
                return False

        if reactor.seconds() - self.last_hit_check > 1.0:
            self.last_hit_check = reactor.seconds()
            if self.check_last_hit() is False:
                return False


#        if self.check_speed() is False:
#            return False

        if self.check_flying() is False:
            return False

        if not self.is_dead and self.health <= 0:
            self.is_dead = True
            self.on_death()

        if self.health > 0 and self.is_dead:
            self.is_dead = False
Ejemplo n.º 8
0
    def on_entity_update(self, event):
        entity_data = self.connection.entity_data
        self.time_since_update = reactor.seconds() - self.last_entity_update
        self.last_entity_update = reactor.seconds()

        self.last_mana = self.mana
        self.last_health = self.health

        self.mana = entity_data.mp
        self.health = entity_data.hp
        
        if is_bit_set(event.mask, 7):
            if self.check_hostile_type() is False:
                return False

        if is_bit_set(event.mask, 27):
            if self.check_max_health() is False:
                return False

        if reactor.seconds() - self.last_hit_check > 1.0:
            self.last_hit_check = reactor.seconds()
            if self.check_last_hit() is False:
                return False

#        if self.check_speed() is False:
#            return False

        if self.check_flying() is False:
            return False

        if not self.is_dead and self.health <= 0:
            self.is_dead = True
            self.on_death()

        if self.health > 0 and self.is_dead:
            self.is_dead = False
Ejemplo n.º 9
0
def is_multiplier_set(mask):
    return is_bit_set(mask, MULTIPLIER_BIT)
Ejemplo n.º 10
0
def is_charged_mp_set(mask):
    return is_bit_set(mask, CHARGED_MP_BIT)
Ejemplo n.º 11
0
def get_masked_size(mask):
    size = 0
    if is_bit_set(mask, 0):
        size += 24
    if is_bit_set(mask, 1):
        size += 12
    if is_bit_set(mask, 2):
        size += 12
    if is_bit_set(mask, 3):
        size += 12
    if is_bit_set(mask, 4):
        size += 12
    if is_bit_set(mask, 5):
        size += 4
    if is_bit_set(mask, 6):
        size += 4
    if is_bit_set(mask, 7):
        size += 1
    if is_bit_set(mask, 8):
        size += 4
    if is_bit_set(mask, 9):
        size += 1
    if is_bit_set(mask, 10):
        size += 4
    if is_bit_set(mask, 11):
        size += 4
    if is_bit_set(mask, 12):
        size += 4
    if is_bit_set(mask, 13):
        size += 172
    if is_bit_set(mask, 14):
        size += 2
    if is_bit_set(mask, 15):
        size += 4
    if is_bit_set(mask, 16):
        size += 4
    if is_bit_set(mask, 17):
        size += 4
    if is_bit_set(mask, 18):
        size += 4
    if is_bit_set(mask, 19):
        size += 4
    if is_bit_set(mask, 20):
        size += 4
    if is_bit_set(mask, 21):
        size += 1
    if is_bit_set(mask, 22):
        size += 1
    if is_bit_set(mask, 23):
        size += 4
    if is_bit_set(mask, 24):
        size += 12
    if is_bit_set(mask, 25):
        size += 12
    if is_bit_set(mask, 26):
        size += 12
    if is_bit_set(mask, 27):
        size += 4
    if is_bit_set(mask, 28):
        size += 4
    if is_bit_set(mask, 29):
        size += 4
    if is_bit_set(mask, 30):
        size += 20
    if is_bit_set(mask, 31):
        size += 1
    if is_bit_set(mask, 32):
        size += 1
    if is_bit_set(mask, 33):
        size += 4
    if is_bit_set(mask, 34):
        size += 4
    if is_bit_set(mask, 35):
        size += 8
    if is_bit_set(mask, 36):
        size += 8
    if is_bit_set(mask, 37):
        size += 1
    if is_bit_set(mask, 38):
        size += 4
    if is_bit_set(mask, 39):
        size += 12
    if is_bit_set(mask, 40):
        size += 24
    if is_bit_set(mask, 41):
        size += 12
    if is_bit_set(mask, 42):
        size += 1
    if is_bit_set(mask, 43):
        size += 280
    if is_bit_set(mask, 44):
        size += 3640
    if is_bit_set(mask, 45):
        size += 16
    if is_bit_set(mask, 46):
        size += 44
    if is_bit_set(mask, 47):
        size += 4
Ejemplo n.º 12
0
def get_masked_size(mask):
    size = 0
    if is_pos_set(mask):
        size += 24
    if is_orient_set(mask):
        size += 12
    if is_vel_set(mask):
        size += 12
    if is_accel_set(mask):
        size += 12
    if is_extra_vel_set(mask):
        size += 12
    if is_look_pitch_set(mask):
        size += 4
    if is_bit_set(mask, 6):
        size += 4
    if is_bit_set(mask, 7):
        size += 1
    if is_bit_set(mask, 8):
        size += 4
    if is_mode_set(mask):
        size += 1
    if is_bit_set(mask, 10):
        size += 4
    if is_bit_set(mask, 11):
        size += 4
    if is_bit_set(mask, 12):
        size += 4
    if is_appearance_set(mask):
        size += 172
    if is_flags_set(mask):
        size += 2
    if is_bit_set(mask, 15):
        size += 4
    if is_bit_set(mask, 16):
        size += 4
    if is_bit_set(mask, 17):
        size += 4
    if is_bit_set(mask, 18):
        size += 4
    if is_bit_set(mask, 19):
        size += 4
    if is_bit_set(mask, 20):
        size += 4
    if is_class_set(mask):
        size += 1
    if is_bit_set(mask, 22):
        size += 1
    if is_charged_mp_set(mask):
        size += 4
    if is_bit_set(mask, 24):
        size += 12
    if is_bit_set(mask, 25):
        size += 12
    if is_bit_set(mask, 26):
        size += 12
    if is_bit_set(mask, 27):
        size += 4
    if is_bit_set(mask, 28):
        size += 4
    if is_bit_set(mask, 29):
        size += 4
    if is_multiplier_set(mask):
        size += 20
    if is_bit_set(mask, 31):
        size += 1
    if is_bit_set(mask, 32):
        size += 1
    if is_level_set(mask):
        size += 4
    if is_bit_set(mask, 34):
        size += 4
    if is_bit_set(mask, 35):
        size += 8
    if is_bit_set(mask, 36):
        size += 8
    if is_bit_set(mask, 37):
        size += 1
    if is_bit_set(mask, 38):
        size += 4
    if is_bit_set(mask, 39):
        size += 12
    if is_bit_set(mask, 40):
        size += 24
    if is_bit_set(mask, 41):
        size += 12
    if is_bit_set(mask, 42):
        size += 1
    if is_consumable_set(mask):
        size += 280
    if is_equipment_set(mask):
        size += 3640
    if is_name_set(mask):
        size += 16
    if is_skill_set(mask):
        size += 44
    if is_bit_set(mask, 47):
        size += 4
    return size
Ejemplo n.º 13
0
def is_skill_set(mask):
    return is_bit_set(mask, SKILL_BIT)
Ejemplo n.º 14
0
def is_equipment_set(mask):
    return is_bit_set(mask, EQUIPMENT_BIT)
Ejemplo n.º 15
0
def is_extra_vel_set(mask):
    return is_bit_set(mask, EXTRA_VEL_BIT)
Ejemplo n.º 16
0
def is_accel_set(mask):
    return is_bit_set(mask, ACCEL_BIT)
Ejemplo n.º 17
0
def is_vel_set(mask):
    return is_bit_set(mask, VEL_BIT)
Ejemplo n.º 18
0
def is_orient_set(mask):
    return is_bit_set(mask, ORIENT_BIT)
Ejemplo n.º 19
0
def is_pos_set(mask):
    return is_bit_set(mask, POS_BIT)
Ejemplo n.º 20
0
def is_level_set(mask):
    return is_bit_set(mask, LEVEL_BIT)
Ejemplo n.º 21
0
def is_consumable_set(mask):
    return is_bit_set(mask, CONSUMABLE_BIT)
Ejemplo n.º 22
0
def is_look_pitch_set(mask):
    return is_bit_set(mask, LOOK_PITCH_BIT)
Ejemplo n.º 23
0
def is_name_set(mask):
    return is_bit_set(mask, NAME_BIT)
Ejemplo n.º 24
0
def is_mode_set(mask):
    return is_bit_set(mask, MODE_BIT)
Ejemplo n.º 25
0
def read_masked_data(entity, reader):
    mask = reader.read_uint64()
    if is_pos_set(mask):
        entity.pos = reader.read_qvec3()
    if is_orient_set(mask):
        entity.body_roll = reader.read_float()
        entity.body_pitch = reader.read_float()
        entity.body_yaw = reader.read_float()
    if is_vel_set(mask):
        entity.velocity = reader.read_vec3()
    if is_accel_set(mask):
        entity.accel = reader.read_vec3()
    if is_extra_vel_set(mask):
        entity.extra_vel = reader.read_vec3()
    if is_look_pitch_set(mask):
        entity.look_pitch = reader.read_float()
    if is_bit_set(mask, 6):
        entity.physics_flags = reader.read_uint32()
    if is_bit_set(mask, 7):
        entity.hostile_type = reader.read_uint8()
    if is_bit_set(mask, 8):
        entity.entity_type = reader.read_uint32()
    if is_mode_set(mask):
        entity.current_mode = reader.read_uint8()
    if is_bit_set(mask, 10):
        entity.last_shoot_time = reader.read_uint32()
    if is_bit_set(mask, 11):
        entity.hit_counter = reader.read_uint32()
    if is_bit_set(mask, 12):
        entity.last_hit_time = reader.read_uint32()
    if is_appearance_set(mask):
        entity.appearance.read(reader)
    if is_flags_set(mask):
        entity.flags_1 = reader.read_uint8()
        entity.flags_2 = reader.read_uint8()
    if is_bit_set(mask, 15):
        entity.roll_time = reader.read_uint32()
    if is_bit_set(mask, 16):
        entity.stun_time = reader.read_int32()
    if is_bit_set(mask, 17):
        entity.slowed_time = reader.read_uint32()
    if is_bit_set(mask, 18):
        entity.make_blue_time = reader.read_uint32()
    if is_bit_set(mask, 19):
        entity.speed_up_time = reader.read_uint32()
    if is_bit_set(mask, 20):
        entity.show_patch_time = reader.read_float()
    if is_class_set(mask):
        entity.class_type = reader.read_uint8()
    if is_bit_set(mask, 22):
        entity.specialization = reader.read_uint8()
    if is_charged_mp_set(mask):
        entity.charged_mp = reader.read_float()
    if is_bit_set(mask, 24):
        entity.not_used_1 = reader.read_uint32()
        entity.not_used_2 = reader.read_uint32()
        entity.not_used_3 = reader.read_uint32()
    if is_bit_set(mask, 25):
        entity.not_used_4 = reader.read_uint32()
        entity.not_used_5 = reader.read_uint32()
        entity.not_used_6 = reader.read_uint32()
    if is_bit_set(mask, 26):
        entity.ray_hit = reader.read_vec3()
    if is_bit_set(mask, 27):
        entity.hp = reader.read_float()
    if is_bit_set(mask, 28):
        entity.mp = reader.read_float()
    if is_bit_set(mask, 29):
        entity.block_power = reader.read_float()
    if is_multiplier_set(mask):
        entity.max_hp_multiplier = reader.read_float()
        entity.shoot_speed = reader.read_float()
        entity.damage_multiplier = reader.read_float()
        entity.armor_multiplier = reader.read_float()
        entity.resi_multiplier = reader.read_float()
    if is_bit_set(mask, 31):
        entity.not_used7 = reader.read_uint8()
    if is_bit_set(mask, 32):
        entity.not_used8 = reader.read_uint8()
    if is_level_set(mask):
        entity.level = reader.read_uint32()
    if is_bit_set(mask, 34):
        entity.current_xp = reader.read_uint32()
    if is_bit_set(mask, 35):
        entity.parent_owner = reader.read_uint64()
    if is_bit_set(mask, 36):
        entity.unknown_or_not_used1 = reader.read_uint32()
        entity.unknown_or_not_used2 = reader.read_uint32()
    if is_bit_set(mask, 37):
        entity.unknown_or_not_used3 = reader.read_uint8()
    if is_bit_set(mask, 38):
        entity.unknown_or_not_used4 = reader.read_uint32()
    if is_bit_set(mask, 39):
        entity.unknown_or_not_used5 = reader.read_uint32()
        entity.not_used11 = reader.read_uint32()
        entity.not_used12 = reader.read_uint32()
    if is_bit_set(mask, 40):
        entity.spawn_pos = reader.read_qvec3()
    if is_bit_set(mask, 41):
        entity.not_used20 = reader.read_uint32()
        entity.not_used21 = reader.read_uint32()
        entity.not_used22 = reader.read_uint32()
    if is_bit_set(mask, 42):
        entity.not_used19 = reader.read_uint8()
    if is_consumable_set(mask):
        entity.consumable.read(reader)
    if is_equipment_set(mask):
        for item in entity.equipment:
            item.read(reader)
    if is_name_set(mask):
        entity.name = reader.read_ascii(16)
    if is_skill_set(mask):
        entity.skills = []
        for _ in xrange(11):
            entity.skills.append(reader.read_uint32())
    if is_bit_set(mask, 47):
        entity.mana_cubes = reader.read_uint32()

    return mask
Ejemplo n.º 26
0
def read_masked_data(entity, reader):
    mask = reader.read_uint64()
    if is_bit_set(mask, 0):
        entity.x = reader.read_int64()
        entity.y = reader.read_int64()
        entity.z = reader.read_int64()
    if is_bit_set(mask, 1):
        entity.body_roll = reader.read_float()
        entity.body_pitch = reader.read_float()
        entity.body_yaw = reader.read_float()
    if is_bit_set(mask, 2):
        entity.velocity = reader.read_vec3()
    if is_bit_set(mask, 3):
        entity.accel = reader.read_vec3()
    if is_bit_set(mask, 4):
        entity.extra_vel = reader.read_vec3()
    if is_bit_set(mask, 5):
        entity.look_pitch = reader.read_float()
    if is_bit_set(mask, 6):
        entity.physics_flags = reader.read_uint32()
    if is_bit_set(mask, 7):
        entity.speed_flags = reader.read_uint8()
    if is_bit_set(mask, 8):
        entity.entity_type = reader.read_uint32()
    if is_bit_set(mask, 9):
        entity.current_mode = reader.read_uint8()
    if is_bit_set(mask, 10):
        entity.last_shoot_time = reader.read_uint32()
    if is_bit_set(mask, 11):
        entity.hit_counter = reader.read_uint32()
    if is_bit_set(mask, 12):
        entity.last_hit_time = reader.read_uint32()
    if is_bit_set(mask, 13):
        entity.appearance.read(reader)
    if is_bit_set(mask, 14):
        entity.flags_1 = reader.read_uint8()
        entity.flags_2 = reader.read_uint8()
    if is_bit_set(mask, 15):
        entity.roll_time = reader.read_uint32()
    if is_bit_set(mask, 16):
        entity.stun_time = reader.read_int32()
    if is_bit_set(mask, 17):
        entity.slowed_time = reader.read_uint32()
    if is_bit_set(mask, 18):
        entity.make_blue_time = reader.read_uint32()
    if is_bit_set(mask, 19):
        entity.speed_up_time = reader.read_uint32()
    if is_bit_set(mask, 20):
        entity.show_patch_time = reader.read_float()
    if is_bit_set(mask, 21):
        entity.class_type = reader.read_uint8()
    if is_bit_set(mask, 22):
        entity.specialization = reader.read_uint8()
    if is_bit_set(mask, 23):
        entity.charged_mp = reader.read_float()
    if is_bit_set(mask, 24):
        entity.not_used_1 = reader.read_uint32()
        entity.not_used_2 = reader.read_uint32()
        entity.not_used_3 = reader.read_uint32()
    if is_bit_set(mask, 25):
        entity.not_used_4 = reader.read_uint32()
        entity.not_used_5 = reader.read_uint32()
        entity.not_used_6 = reader.read_uint32()
    if is_bit_set(mask, 26):
        entity.ray_hit = reader.read_vec3()
    if is_bit_set(mask, 27):
        entity.hp = reader.read_float()
    if is_bit_set(mask, 28):
        entity.mp = reader.read_float()
    if is_bit_set(mask, 29):
        entity.block_power = reader.read_float()
    if is_bit_set(mask, 30):
        entity.max_hp_multiplier = reader.read_float()
        entity.shoot_speed = reader.read_float()
        entity.damage_multiplier = reader.read_float()
        entity.armor_multiplier = reader.read_float()
        entity.resi_multiplier = reader.read_float()
    if is_bit_set(mask, 31):
        entity.not_used7 = reader.read_uint8()
    if is_bit_set(mask, 32):
        entity.not_used8 = reader.read_uint8()
    if is_bit_set(mask, 33):
        entity.character_level = reader.read_uint32()
    if is_bit_set(mask, 34):
        entity.current_xp = reader.read_uint32()
    if is_bit_set(mask, 35):
        entity.not_used9 = reader.read_uint32()
        entity.not_used10 = reader.read_uint32()
    if is_bit_set(mask, 36):
        entity.unknown_or_not_used1 = reader.read_uint32()
        entity.unknown_or_not_used2 = reader.read_uint32()
    if is_bit_set(mask, 37):
        entity.unknown_or_not_used3 = reader.read_uint8()
    if is_bit_set(mask, 38):
        entity.unknown_or_not_used4 = reader.read_uint32()
    if is_bit_set(mask, 39):
        entity.unknown_or_not_used5 = reader.read_uint32()
        entity.not_used11 = reader.read_uint32()
        entity.not_used12 = reader.read_uint32()
    if is_bit_set(mask, 40):
        entity.not_used13 = reader.read_uint32()
        entity.not_used14 = reader.read_uint32()
        entity.not_used15 = reader.read_uint32()
        entity.not_used16 = reader.read_uint32()
        entity.not_used17 = reader.read_uint32()
        entity.not_used18 = reader.read_uint32()
    if is_bit_set(mask, 41):
        entity.not_used20 = reader.read_uint32()
        entity.not_used21 = reader.read_uint32()
        entity.not_used22 = reader.read_uint32()
    if is_bit_set(mask, 42):
        entity.not_used19 = reader.read_uint8()
    if is_bit_set(mask, 43):
        entity.item_data.read(reader)
    if is_bit_set(mask, 44):
        for item in entity.equipment:
            item.read(reader)
    if is_bit_set(mask, 45):
        entity.name = reader.read_string(16)
    if is_bit_set(mask, 46):
        entity.skills = []
        for _ in xrange(11):
            entity.skills.append(reader.read_uint32())
    if is_bit_set(mask, 47):
        entity.ice_block_four = reader.read_uint32()
Ejemplo n.º 27
0
def write_masked_data(entity, writer, mask=None):
    if mask is None:
        mask = 0x0000FFFFFFFFFFFF

    writer.write_uint64(mask)
    if is_pos_set(mask):
        writer.write_qvec3(entity.pos)
    if is_orient_set(mask):
        writer.write_float(entity.body_roll)
        writer.write_float(entity.body_pitch)
        writer.write_float(entity.body_yaw)
    if is_vel_set(mask):
        writer.write_vec3(entity.velocity)
    if is_accel_set(mask):
        writer.write_vec3(entity.accel)
    if is_extra_vel_set(mask):
        writer.write_vec3(entity.extra_vel)
    if is_look_pitch_set(mask):
        writer.write_float(entity.look_pitch)
    if is_bit_set(mask, 6):
        writer.write_uint32(entity.physics_flags)
    if is_bit_set(mask, 7):
        writer.write_uint8(entity.hostile_type)
    if is_bit_set(mask, 8):
        writer.write_uint32(entity.entity_type)
    if is_mode_set(mask):
        writer.write_uint8(entity.current_mode)
    if is_bit_set(mask, 10):
        writer.write_uint32(entity.last_shoot_time)
    if is_bit_set(mask, 11):
        writer.write_uint32(entity.hit_counter)
    if is_bit_set(mask, 12):
        writer.write_uint32(entity.last_hit_time)
    if is_appearance_set(mask):
        entity.appearance.write(writer)
    if is_flags_set(mask):
        writer.write_uint8(entity.flags_1)
        writer.write_uint8(entity.flags_2)
    if is_bit_set(mask, 15):
        writer.write_uint32(entity.roll_time)
    if is_bit_set(mask, 16):
        writer.write_int32(entity.stun_time)
    if is_bit_set(mask, 17):
        writer.write_uint32(entity.slowed_time)
    if is_bit_set(mask, 18):
        writer.write_uint32(entity.make_blue_time)
    if is_bit_set(mask, 19):
        writer.write_uint32(entity.speed_up_time)
    if is_bit_set(mask, 20):
        writer.write_float(entity.show_patch_time)
    if is_class_set(mask):
        writer.write_uint8(entity.class_type)
    if is_bit_set(mask, 22):
        writer.write_uint8(entity.specialization)
    if is_charged_mp_set(mask):
        writer.write_float(entity.charged_mp)
    if is_bit_set(mask, 24):
        writer.write_uint32(entity.not_used_1)
        writer.write_uint32(entity.not_used_2)
        writer.write_uint32(entity.not_used_3)
    if is_bit_set(mask, 25):
        writer.write_uint32(entity.not_used_4)
        writer.write_uint32(entity.not_used_5)
        writer.write_uint32(entity.not_used_6)
    if is_bit_set(mask, 26):
        writer.write_vec3(entity.ray_hit)
    if is_bit_set(mask, 27):
        writer.write_float(entity.hp)
    if is_bit_set(mask, 28):
        writer.write_float(entity.mp)
    if is_bit_set(mask, 29):
        writer.write_float(entity.block_power)
    if is_multiplier_set(mask):
        writer.write_float(entity.max_hp_multiplier)
        writer.write_float(entity.shoot_speed)
        writer.write_float(entity.damage_multiplier)
        writer.write_float(entity.armor_multiplier)
        writer.write_float(entity.resi_multiplier)
    if is_bit_set(mask, 31):
        writer.write_uint8(entity.not_used7)
    if is_bit_set(mask, 32):
        writer.write_uint8(entity.not_used8)
    if is_level_set(mask):
        writer.write_uint32(entity.level)
    if is_bit_set(mask, 34):
        writer.write_uint32(entity.current_xp)
    if is_bit_set(mask, 35):
        writer.write_uint64(entity.parent_owner)
    if is_bit_set(mask, 36):
        writer.write_uint32(entity.unknown_or_not_used1)
        writer.write_uint32(entity.unknown_or_not_used2)
    if is_bit_set(mask, 37):
        writer.write_uint8(entity.unknown_or_not_used3)
    if is_bit_set(mask, 38):
        writer.write_uint32(entity.unknown_or_not_used4)
    if is_bit_set(mask, 39):
        writer.write_uint32(entity.unknown_or_not_used5)
        writer.write_uint32(entity.not_used11)
        writer.write_uint32(entity.not_used12)
    if is_bit_set(mask, 40):
        writer.write_qvec3(entity.spawn_pos)
    if is_bit_set(mask, 41):
        writer.write_uint32(entity.not_used20)
        writer.write_uint32(entity.not_used21)
        writer.write_uint32(entity.not_used22)
    if is_bit_set(mask, 42):
        writer.write_uint8(entity.not_used19)
    if is_consumable_set(mask):
        entity.consumable.write(writer)
    if is_equipment_set(mask):
        for item in entity.equipment:
            item.write(writer)
    if is_name_set(mask):
        writer.write_ascii(entity.name, 16)
    if is_skill_set(mask):
        for item in entity.skills:
            writer.write_uint32(item)
    if is_bit_set(mask, 47):
        writer.write_uint32(entity.mana_cubes)
Ejemplo n.º 28
0
def is_flags_set(mask):
    return is_bit_set(mask, FLAGS_BIT)
Ejemplo n.º 29
0
def is_appearance_set(mask):
    return is_bit_set(mask, APPEARANCE_BIT)
Ejemplo n.º 30
0
def is_class_set(mask):
    return is_bit_set(mask, CLASS_BIT)