コード例 #1
0
def is_single(data: LogicData) -> bool:
    if data.config.single == Define.FORCE_SINGLE:
        return True
    elif data.config.single == Define.FORCE_MULTI:
        return False
    cnt = 0
    mch_aoe = sector(data.me.pos.x, data.me.pos.y, 12, mch_aoe_angle, data.me.target_radian(data.target))
    for enemy in data.valid_enemies:
        if mch_aoe.intersects(enemy.hitbox):
            cnt += 1
            if cnt > 2: return False
    return True
コード例 #2
0
ファイル: Samurai.py プロジェクト: lclichen/fpt_plugins
def count_enemy(data: LogicData, skill_type: int):
    if data.config.single == Define.FORCE_SINGLE: return 1
    if data.config.single == Define.FORCE_MULTI: return 3
    if skill_type == 1:
        aoe = circle(data.me.pos.x, data.me.pos.y, 5)  # 转圈圈
    elif skill_type == 2:
        aoe = sector(data.me.pos.x, data.me.pos.y, 8, sam_sector_angle,
                     data.me.target_radian(data.target))  # 五剑阵风
    else:
        aoe = rotated_rect(data.me.pos.x, data.me.pos.y, 2, 10,
                           data.me.target_radian(data.target))  # 红莲
    return sum(map(lambda x: aoe.intersects(x.hitbox), data.valid_enemies))
コード例 #3
0
ファイル: AFix.py プロジェクト: lclichen/fpt_plugins
def get_nearest(me_pos, target, mode, dis=3):
    radius = target.HitboxRadius + dis - 0.5
    if mode == SIDE:
        area1 = sector(target.pos.x, target.pos.y, radius, angle,
                       target.pos.r + math.pi / 2)
        area2 = sector(target.pos.x, target.pos.y, radius, angle,
                       target.pos.r - math.pi / 2)
        area = cascaded_union([area1, area2])
    elif mode == FRONT:
        area = sector(target.pos.x, target.pos.y, radius, angle, target.pos.r)
    elif mode == BACK:
        area = sector(target.pos.x, target.pos.y, radius, angle,
                      target.pos.r - math.pi)
    else:
        area = target.hitbox

    area = area.difference(Point(target.pos.x, target.pos.y).buffer(0.5))
    me = Point(me_pos.x, me_pos.y)
    if area.contains(me):
        return None
    p1 = nearest_points(area, me)[0]
    return p1.x, p1.y
コード例 #4
0
def count_enemy(data: LogicData, skill_type: int):
    """
    :param skill_type: 0:冲击疾风震雷    1:六分    2:画圆斩
    """
    if data.config.single == Define.FORCE_SINGLE: return 1
    if data.config.single == Define.FORCE_MULTI: return 3
    if skill_type == 0:
        aoe = circle(data.target.pos.x, data.target.pos.y, 5)  # 冲击疾风震雷
    elif skill_type == 1:
        aoe = circle(data.target.pos.x, data.target.pos.y, 6)  # 六分
    else:
        aoe = sector(data.me.pos.x, data.me.pos.y, 8, rdm_aoe_angle,
                     data.me.target_radian(data.target))  # 画圆斩
    return sum(map(lambda x: aoe.intersects(x.hitbox), data.valid_enemies))
コード例 #5
0
ファイル: Bard.py プロジェクト: lclichen/fpt_plugins
def is_single(data: LogicData, skill_type: int) -> bool:
    if data.config.single == Define.FORCE_SINGLE: return True
    if data.config.single == Define.FORCE_MULTI: return False
    if skill_type == 0:
        aoe = sector(data.me.pos.x, data.me.pos.y, 12, bard_aoe_angle,
                     data.me.target_radian(data.target))  # 连珠箭
    elif skill_type == 1:
        aoe = circle(data.me.pos.x, data.me.pos.y, 5)  # 影噬箭
    elif skill_type == 2:
        aoe = circle(data.me.pos.x, data.me.pos.y, 8)  # 死亡箭雨
    else:
        aoe = circle(data.me.pos.x, data.me.pos.y, 25)  # 死亡箭雨
    cnt = 0
    for enemy in data.valid_enemies:
        if aoe.intersects(enemy.hitbox):
            cnt += 1
            if cnt > 1: return False
    return True