def jump_grav_start(self, new_grav): self._jump_grav_start = new_grav # Reset grav every time player lands if new_grav == 0.00: writable_address = multi_level_pointers.entity_base.address writable_address += client_offsets.jump_grav_start data = c_float(JUMP_GRAV)
def teleport_to(destination): _validate_position(destination) # Write new position to memory base_address = multi_level_pointers.entity_base.address for dimension in ['x', 'y', 'z']: address = base_address + entity_base_offsets[dimension] data = c_float(getattr(destination, dimension)) write_address(address, data)
def _write_jump_dir(self, new_dir, jump_num): # Reset grav every time player lands jump_num = str(jump_num) player_jumping = self._jump_grav_start != 0 already_updated_jump_pull = self._has_updated_jump_pull[jump_num] if player_jumping and not already_updated_jump_pull: new_dir *= JUMP_DIR_PULL writable_address = multi_level_pointers.entity_base.address writable_address += client_offsets['jump_dir_' + jump_num] data = c_float(new_dir) write_address(writable_address, data) self._has_updated_jump_pull[jump_num] = True elif not player_jumping: print 'reset' self._has_updated_jump_pull[jump_num] = False return new_dir
def _rotate(position, destination, threshold=0.04): logger.debug('rotating') radian_diff = -math.atan2(destination.y - position.y, destination.x - position.x) next_heading = MovementEngine.radians_to_heading(radian_diff) next_heading = round(next_heading, 2) logger.debug('converted %f (%d degrees) to %f', radian_diff, math.degrees(radian_diff), next_heading) logger.debug('next heading: %f', next_heading) # Avoid needless rotate if abs(next_heading - position.heading) <= threshold: return # Write new heading to memory heading_address = multi_level_pointers.entity_base.address heading_address += entity_base_offsets.heading data = c_float(next_heading) write_address(heading_address, data) KeyboardInput.key_press('a', delay=50)
def player_speed(self, new_speed): if new_speed != self._player_speed: writable_address = single_level_pointers.player_speed.address data = c_float(self.player_speed) write_address(writable_address, data)
entity=Munch(base=None), player=Munch( base=multi_level_pointers.entity_base, parameters=multi_level_pointers.player_parameters, skills=multi_level_pointers.player_skills, target_address=single_level_pointers.player_target)) OFFSETS = Munch(client=Munch(hacks=client_offsets), entity=Munch(base=entity_base_offsets), player=Munch(base=entity_base_offsets, parameters=player_parameter_offsets, skills=player_skill_offsets)) client_entries = [ ('last_cmd', CMD_BUFFER), ('hacks player_speed', c_float()), ('hacks jump_grav_start', c_float()), ('hacks jump_dir_1', c_float()), ('hacks jump_dir_2', c_float()), ] entity_entries = [ # Parameters ('parameters current_hp', c_uint()), ('parameters current_mp', c_uint()), ('parameters max_hp', c_uint()), ('parameters max_mp', c_uint()), # Entity Base ('level', c_ubyte()), ('name', NAME_BUFFER),