def wcs_teleport_command(command_info, player:convert_userid_to_player, x:float, y:float, z:float): if player is None: return location = Vector(x, y, z) origin = player.origin angles = QAngle(*player.get_property_vector('m_angAbsRotation')) forward = Vector() right = Vector() up = Vector() angles.get_angle_vectors(forward, right, up) forward.normalize() forward *= 10 playerinfo = player.playerinfo mins, maxs = playerinfo.mins, playerinfo.maxs players = TraceFilterSimple(PlayerIter()) for _ in range(100): ray = Ray(location, location, mins, maxs) trace = GameTrace() engine_trace.trace_ray(ray, ContentMasks.PLAYER_SOLID, players, trace) if not trace.did_hit(): player.teleport(origin=location) break location -= forward if location.get_distance(origin) <= 10.0: break
def _wcs_teleport(command): userid = int(command[1]) x = float(command[2]) y = float(command[3]) z = float(command[4]) target_location = Vector( x, y, z, ) player = Player.from_userid(userid) origin = player.origin angles = QAngle(*player.get_property_vector('m_angAbsRotation')) forward = Vector() right = Vector() up = Vector() angles.get_angle_vectors(forward, right, up) forward.normalize() forward *= 10.0 loop_limit = 100 can_teleport = 1 while is_player_stuck(player.index, target_location): target_location -= forward loop_limit -= 1 if target_location.get_distance(origin) <= 10.0 or loop_limit < 1: can_teleport = 0 break if can_teleport == 1: player.teleport(target_location, None, None)