Exemplo n.º 1
0
 async def run(self):
     req_data = {"characterType": "monster", "requiredName": None}
     req_builder = server.RequestBuilder('GET_NEAREST_CHARACTER', req_data)
     player_status_builder = server.RequestBuilder('PLAYER_STATUS')
     batched_request_builder = server.RequestBuilder.batch(
         player_status_builder, req_builder)
     batched_request_builder.data[1]['data'] = {
         **req_data, 'target': None,
         'getPath': False
     }
     await game.equip_melee_weapon()
     async with server.player_status_stream() as player_stream:
         player_position = (await
                            player_status_builder.request())['position']
         while True:
             player_status, target = await batched_request_builder.request()
             if not target:
                 return
             player_position = player_status['center']
             closest_monster_position = target['center']
             distance_from_monster = game.distance_between_points_diagonal(
                 player_position, closest_monster_position)
             if distance_from_monster > 0:
                 direction_to_face = game.direction_from_positions(
                     player_position, closest_monster_position)
                 await game.face_direction(direction_to_face, player_stream)
             if distance_from_monster < 110:
                 await server.set_mouse_position(
                     closest_monster_position[0],
                     closest_monster_position[1],
                     from_viewport=True)
                 await game.swing_tool()
             await asyncio.sleep(0.1)
Exemplo n.º 2
0
 async def run(self):
     req_data = {"characterType": "npc", "requiredName": self.npc_name}
     req_builder = server.RequestBuilder('GET_NEAREST_CHARACTER', req_data)
     try:
         await game.MoveToCharacter(req_builder, tiles_from_target=2).move()
     except game.NavigationFailed:
         game.show_hud_message(
             f"{self.npc_name} is not in the current location", 2)
     await game.do_action()
Exemplo n.º 3
0
    async def move_directly_to_character(self,
                                         target,
                                         threshold=75,
                                         timeout=4):

        req_data = {
            **self.get_character_builder.data, "target": target,
            "getPath": False
        }
        char_req_builder = server.RequestBuilder(
            self.get_character_builder.request_type, req_data)
        batched_builder = server.RequestBuilder.batch(
            server.RequestBuilder("PLAYER_STATUS"), char_req_builder)
        is_moving = False
        async with async_timeout.timeout(timeout):
            try:
                while True:
                    directions = []
                    player_status, character = await batched_builder.request()
                    assert character["name"] == target["name"]
                    req_data["target"] = character
                    player_pos, character_pos = player_status[
                        "center"], character["center"]
                    if distance_between_points_diagonal(
                            player_pos, character_pos) < threshold:
                        return
                    px, py = player_pos
                    cx, cy = character_pos
                    xdiff = px - cx
                    if abs(xdiff) > 10:
                        direction = constants.WEST if xdiff > 0 else constants.EAST
                        directions.append(direction)
                    ydiff = py - cy
                    if abs(ydiff) > 10:
                        direction = constants.NORTH if ydiff > 0 else constants.SOUTH
                        directions.append(direction)
                    assert directions
                    start_moving(directions)
                    is_moving = True
            finally:
                if is_moving:
                    await ensure_not_moving()
Exemplo n.º 4
0
async def pet_animals():
    req_data = {
        "characterType": "animal",
        "getBy": "unpet",
        "requiredName": None
    }
    req_builder = server.RequestBuilder('GET_NEAREST_CHARACTER', req_data)
    while True:
        try:
            animal = await game.MoveToCharacter(req_builder).move()
        except (game.NavigationFailed, RuntimeError):
            return
        await game.pet_animal_by_name(animal['name'])
        await asyncio.sleep(0.1)
Exemplo n.º 5
0
async def use_tool_on_animals(tool: str, animal_type=None):
    await game.equip_item_by_name(tool)
    consecutive_errors = 0
    consecutive_error_threshold = 10
    req_data = {
        "characterType": "animal",
        "getBy": "readyForHarvest",
        "requiredName": None
    }
    req_builder = server.RequestBuilder('GET_NEAREST_CHARACTER', req_data)
    while True:
        animal = await game.MoveToCharacter(req_builder).move()
        did_use = await game.use_tool_on_animal_by_name(animal['name'])
        if not did_use:
            consecutive_errors += 1
        else:
            consecutive_errors = 0
        if consecutive_errors >= consecutive_error_threshold:
            raise RuntimeError()
        await asyncio.sleep(0.1)
Exemplo n.º 6
0
async def get_player_status():
    req_builder = server.RequestBuilder("PLAYER_STATUS")
    status = await req_builder.request()
    return status