genshin_auto_fish icon indicating copy to clipboard operation
genshin_auto_fish copied to clipboard

可以把【甩钩、收杆人为操作】,【自动拉条】分离吗

Open Sunyl0 opened this issue 3 years ago • 6 comments

甩钩乱甩,瞄准半天,收杆过早; 而和鱼拔河的时候,拉条效果很好; 希望能把抛竿和拉条功能分离, 可以人为的抛竿、收杆,提高效率

Sunyl0 avatar Sep 24 '21 07:09 Sunyl0

甩钩、收杆有些智障, 改一下 fish.py 中的代码就可以了

def start_fishing(predictor, agent, bite_timeout=20):
    ff = FishFind(predictor)
    env = Fishing(delay=0.1, max_step=10000, show_det=True)

    # winsound.Beep(500, 500)
    # keyboard.wait('r')

    while True:
        winsound.Beep(500, 500)
        keyboard.wait('r')
        # ff.do_fish()
        # winsound.Beep(700, 500)
        # times = 0
        # while True:
        #     if env.is_bite():
        #         break
        #     time.sleep(0.5)
        #     times += 1
        #     if times > bite_timeout:
        #         env.drag()
        #         time.sleep(3)
        #         ff.do_fish(fish_init=False)
        #         times = 0
        # winsound.Beep(900, 500)
        # env.drag()
        # time.sleep(1)

        state = env.reset()
        for i in range(env.max_step):
            state = torch.FloatTensor(state).unsqueeze(0)
            action = agent(state)
            action = torch.argmax(action, dim=1).numpy()
            state, reward, done = env.step(action)
            if done:
                break
        time.sleep(3)

mwmi avatar Sep 25 '21 01:09 mwmi

同请求, 而且改了貌似没什么用

Vurks avatar Oct 01 '21 10:10 Vurks

甩钩、收杆有些智障, 改一下 fish.py 中的代码就可以了

def start_fishing(predictor, agent, bite_timeout=20):
    ff = FishFind(predictor)
    env = Fishing(delay=0.1, max_step=10000, show_det=True)

    # winsound.Beep(500, 500)
    # keyboard.wait('r')

    while True:
        winsound.Beep(500, 500)
        keyboard.wait('r')
        # ff.do_fish()
        # winsound.Beep(700, 500)
        # times = 0
        # while True:
        #     if env.is_bite():
        #         break
        #     time.sleep(0.5)
        #     times += 1
        #     if times > bite_timeout:
        #         env.drag()
        #         time.sleep(3)
        #         ff.do_fish(fish_init=False)
        #         times = 0
        # winsound.Beep(900, 500)
        # env.drag()
        # time.sleep(1)

        state = env.reset()
        for i in range(env.max_step):
            state = torch.FloatTensor(state).unsqueeze(0)
            action = agent(state)
            action = torch.argmax(action, dim=1).numpy()
            state, reward, done = env.step(action)
            if done:
                break
        time.sleep(3)

确实是,这样子效率还是可以的,不错

手动抛竿,然后拉杆,出现拉力条,正常拉一下,按一下r就自动了

qilishidai avatar Oct 02 '21 05:10 qilishidai

要正常拉力,在中间

qilishidai avatar Oct 02 '21 05:10 qilishidai

@qilishidai 优化了一下您的修改,注释原有的def start_fishing函数,复制以下代码替换就ok了 1、现在只需要抛竿后,按r就行了,不需要等待鱼上钩,剩下的步骤可以自动进行。钓上后等待系统蜂鸣器响后再次抛竿按r,重复下去即可实现半自动钓鱼。 2、一般来说,上钩后200个step内一定能钓上,所以直接设置max_step=200 3、由于是手动抛竿,所以就不用考虑抛竿位置不对,鱼长时间不上钩的问题,所以调整bite_timeout=300 4、如果遇到IndexError: list index out of range的bug,可以参考https://github.com/7eu7d7/genshin_auto_fish/pull/145/commits/3e24afadd7dd60be19f58399eb027a47644fcd41 进行修复

def start_fishing(predictor, agent, bite_timeout=300):
    ff = FishFind(predictor)
    env = Fishing(delay=0.1, max_step=200, show_det=False)

    # winsound.Beep(500, 500)
    # keyboard.wait('r')

    while True:
        print("start fishing")
        winsound.Beep(500, 500)
        keyboard.wait('r')
        times=0
        while True:
            if env.is_bite():
                break
            time.sleep(0.5)
            times+=1
            if times>bite_timeout:
                env.drag()
                time.sleep(3)
                do_fish(fish_init=False)
                times=0
        winsound.Beep(900, 500)
        env.drag()
        time.sleep(1)
        state = env.reset()
        for i in range(env.max_step):
            state = torch.FloatTensor(state).unsqueeze(0)
            action = agent(state)
            action = torch.argmax(action, dim=1).numpy()
            state, reward, done = env.step(action)
            print("epoch:", i)
            if done:
                break
        time.sleep(0.5)
        print("finished")
'''

Lycan1003 avatar Oct 27 '21 06:10 Lycan1003

感觉不自动开始拉条有点不智能。 而且判断是否咬钩还是挺准确的 不过我找了半天也没有吧判断咬钩的函数分离出来.......

sandboxdream avatar Jan 18 '22 06:01 sandboxdream