my_att = len(
                bot_utils.get_proximity_alerts([ship], [support_radius],
                                               my_fighting_ships))
            if enemy_att / my_att * attack_superiority_ratio > my_att / enemy_def:
                # target the nearest docked ship
                closest_docked_ship = bot_utils.get_closest(
                    ship, my_docked_ships)
                if closest_docked_ship:
                    orders[ship] = closest_docked_ship
                else:
                    friendlies = [
                        friendly for friendly in game_map.get_me().all_ships()
                        if friendly is not ship
                    ]
                    if len(friendlies) == 0:
                        orders[ship] = bot_utils.extend_ray(
                            nearest_enemy, ship, 10)
                    else:
                        orders[ship] = bot_utils.get_closest(ship, friendlies)

    # 4 LOGGING
    logging_orders = {}
    for ship, order in orders.items():
        logging_orders[f'S{ship.id}'] = f'S{order.id}' if isinstance(
            order, hlt.entity.Ship) else f'P{order.id}'
    logging.info(f'orders: {logging_orders}')
    packs_logging = {}
    for leader, followers in packs.items():
        packs_logging[f'S{leader.id}'] = [
            f'(S{ship.id})'
            if ship in tethered_followers[leader] else f'S{ship.id}'
            for ship in followers
Exemplo n.º 2
0
                # target the nearest docked ship
                closest_docked_ship = bot_utils.get_closest(
                    ship, my_docked_ships)
                if closest_docked_ship:
                    orders[ship] = closest_docked_ship
                else:
                    orders[ship] = bot_utils.get_closest(
                        ship,
                        game_map.get_me().all_ships())
    for ship in defense_distractors:
        nearby_enemies = bot_utils.get_proximity_alerts([ship],
                                                        [safety_check_radius],
                                                        mobile_enemies)
        if len(nearby_enemies) > 0:
            nearest_enemy = bot_utils.get_closest(ship, nearby_enemies)
            orders[ship] = (bot_utils.extend_ray(nearest_enemy, ship, 10) +
                            bot_utils.extend_ray(ship, center, 3)) / 2

    # 4 LOGGING
    logging_orders = {}
    for ship, order in orders.items():
        logging_orders[f'S{ship.id}'] = f'S{order.id}' if isinstance(
            order, hlt.entity.Ship) else f'P{order.id}'
    logging.info(f'orders: {logging_orders}')
    packs_logging = {}
    for leader, followers in packs.items():
        packs_logging[f'S{leader.id}'] = [
            f'(S{ship.id})'
            if ship in tethered_followers[leader] else f'S{ship.id}'
            for ship in followers
        ]
Exemplo n.º 3
0
        for ship in my_fighting_ships:
            orders[ship] = bot_utils.get_closest(ship, collection_points)

    # distractor overwrite for safety
    for ship in distraction_alloc:
        # nearby_mobile_enemies = bot_utils.get_proximity_alerts([ship], [14], mobile_enemies)
        # get mobile enemies with location prediction
        nearby_mobile_enemies = []
        for enemy in mobile_enemies:
            if ship.calculate_distance_between(
                    location_prediction[enemy]) < 16:
                nearby_mobile_enemies.append(location_prediction[enemy])

        if len(nearby_mobile_enemies) > 0:
            direction = bot_utils.extend_ray(
                hlt.entity.Position(game_map.width / 2, game_map.height / 2),
                ship, 5)
            # for enemy in nearby_mobile_enemies:
            #     direction += bot_utils.extend_ray(enemy, ship, 1)
            # direction /= len(nearby_mobile_enemies)
            target = bot_utils.extend_ray(ship, direction, 20)
            orders[ship] = target

    # mission overwrite for safety
    for ship in my_free_navigation_ships:
        if ship in followers:
            continue
        nearby_mobile_enemies = bot_utils.get_proximity_alerts(
            [ship], [safety_check_radius], mobile_enemies)
        if len(nearby_mobile_enemies) > 0:
            nearest_enemy = bot_utils.get_closest(ship, nearby_mobile_enemies)