Scighost / Starward

Game Launcher for miHoYo - 米家游戏启动器
https://starward.scighost.com
MIT License
3.56k stars 164 forks source link

[Bug] 抽卡记录……??? #1168

Open momoblydblk opened 4 days ago

momoblydblk commented 4 days ago

Checklist

Description

图片 啥玩意儿啊???90抽保底哪来的100啊

Reproduction Steps

不知道哪来的问题……

Expected Behavior

No response

Screenshots

No response

Starward Version

0.13.4

Windows Version

19045.5131

Log

[00:48:02.539] [INFO] Starward.Pages.MainPage
Navigate to "GachaLogPage" with param hk4e_cn

[00:48:06.695] [INFO] Starward.Services.Gacha.GenshinGachaService
Last gacha log id of uid <redacted> is 1732089960000005872

[00:48:50.194] [INFO] Starward.Services.Gacha.GenshinGachaService
Last gacha log id of uid <redacted> is 1732605600000274172

Additional Context

No response

AsherWade commented 4 days ago

我也是,搞得我手动去记录里面修改了一遍

Tynthdall commented 3 days ago

image 出现类似的问题,四星保底10抽出现了11; 实际抽卡为 祭礼大剑-芭芭拉-绝弦-芭芭拉,抽卡记录则多了一次这个循环。

Scighost commented 3 days ago

@momoblydblk 原神的抽卡服务似乎出现了问题,你更新全部抽卡记录应该能解决。

@Tynthdall 你遇到的问题像是同一次抽卡对应了两个id,现在游戏内查看的抽卡历史会遇到同样的问题吗?

Tynthdall commented 3 days ago

@momoblydblk 原神的抽卡服务似乎出现了问题,你更新全部抽卡记录应该能解决。

@Tynthdall 你遇到的问题像是同一次抽卡对应了两个id,现在游戏内查看的抽卡历史会遇到同样的问题吗?

游戏内当然是正常的;Snap Hutao获取的抽卡历史也是正常的。 刚想用胡桃工具箱的记录导出json来覆盖修复,不料发现新版UIGF4.0不受支持喵

momoblydblk commented 22 hours ago

@momoblydblk 原神的抽卡服务似乎出现了问题,你更新全部抽卡记录应该能解决。

@Tynthdall 你遇到的问题像是同一次抽卡对应了两个id,现在游戏内查看的抽卡历史会遇到同样的问题吗?

更新全部抽卡记录了,结果现在告诉我5星已垫133抽……

duobuhui commented 19 hours ago

我也遇到了相同的情况, image 通过导出表格来查看, image 本应是同一次抽卡,却有两个id image 游戏内查看是正常的,更新全部抽卡记录并不能解决。

Scighost commented 18 hours ago

针对这个问题,在新版本中添加了删除指定时间段抽卡记录的功能,入口在抽卡设置中。

sgpublic commented 15 hours ago

好像不太对劲?这个删除指定时间段记录

image

duobuhui commented 15 hours ago

好像不太对劲?这个删除指定时间段记录

image

可以大胆把范围调大一点,游戏里能存6个月,6个月之内的都能被获取回来。

sgpublic commented 15 hours ago

可以大胆把范围调大一点

最后是这么解决的,不过这也算是个 BUG 吧(乐

Sieroy commented 15 hours ago

对比发现重复的记录id后10位是相同的,但因为前几位有不同,从而被程序误认为是不同的记录。我敲了个Python程序,可以删除掉更新前的重复记录。有需要的友友们自取。(相信大家会用吧hhh)

import json
import pathlib
import argparse

def main(args):
    print('Loading file.')
    try:
        filename = pathlib.Path(args.input_file).absolute()
        ifile = open(filename, 'r')
        gachalog = json.loads(ifile.read())
        ifile.close()
        gachalist = gachalog['list']
    except FileExistsError:
        print('Error. Wrong file name or no such file exists.')
        raise
    except IOError:
        print('Error opening file.')
        raise
    except json.decoder.JSONDecodeError:
        print('Error parsing JSON.')
        raise
    except:
        print('Error.')
        raise

    print('Processing data.')
    try:
        i = len(gachalist) - 1
        while i > 0:
            j = i - 1
            while j >= 0:
                if all((gachalist[j]['id'][-10:] == gachalist[i]['id'][-10:],
                        gachalist[j]['time'] == gachalist[i]['time'],
                        gachalist[j]['uid'] == gachalist[i]['uid'])):
                    gachalog['list'].pop(j)
                    i -= 1
                j -= 1
            i -= 1
    except KeyError:
        print('Error. File not in UIGF.')
        raise
    except:
        print('Error.')
        raise

    if filename.suffix:
        ofilepath = filename.parent / (filename.name[:-len(filename.suffix)] + '_fixed' + filename.suffix)
    else:
        ofilepath = filename.parent / (filename.name + '_fixed')
    print(f'Writing to {ofilepath}')
    try:
        ofile = open(ofilepath, 'w')
        ofile.write(json.dumps(gachalog))
        ofile.close()
    except IOError:
        print('Error writing to file.')
        raise
    except:
        print('Error.')
        raise
    print('Done.')

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('input_file', type=str, help='Path to json file to be processed.')
    args = parser.parse_args()
    main(args)

注意程序输出会覆盖目录下的同名文件。算法辣鸡O^2,数据量大的话会卡一会儿,如果能确定出错时间区间的话建议使用时间区间删除工具。

lily195 commented 13 hours ago

C。。。。。一年多的记录全报废了,,,,早不说有指定日期删除。。。真的是,,,,

Sieroy commented 13 hours ago

C。。。。。一年多的记录全报废了,,,,早不说有指定日期删除。。。真的是,,,,

@lily195 惨惨。指定日期区间删除是新版更进去的,之前没这个功能。 兄弟如果有备份或者有通过其他第三方渠道收集的抽卡记录的话,或许可以恢复。

Eric-Joker commented 12 hours ago

@lily195 惨惨。指定日期区间删除是新版更进去的,之前没这个功能。 兄弟如果有备份或者有通过其他第三方渠道收集的抽卡记录的话,或许可以恢复。

可惜starward不支持uigf4.0()

lily195 commented 12 hours ago

C。。。。。一年多的记录全报废了,,,,早不说有指定日期删除。。。真的是,,,,

@lily195 惨惨。指定日期区间删除是新版更进去的,之前没这个功能。 兄弟如果有备份或者有通过其他第三方渠道收集的抽卡记录的话,或许可以恢复。

算了吧,不打算用了。我还不如用官方启动器

lily195 commented 12 hours ago

@lily195 惨惨。指定日期区间删除是新版更进去的,之前没这个功能。 兄弟如果有备份或者有通过其他第三方渠道收集的抽卡记录的话,或许可以恢复。

可惜starward不支持uigf4.0()

我只有表格形式的保存记录,问题是软件也不支持这个格式导入。

Sieroy commented 12 hours ago

我只有表格形式的保存记录,问题是软件也不支持这个格式导入。

@lily195 可以恢复的。Starward使用的是UIGF2.3,相比于表格,多出来的item_id等字段可以通过查表一一添加,比如卡池对照表(需要确认集录祈愿的ID)和物品对照表。最后转成Json格式就可以导入了。 有需要恢复的话可以让ChatGPT或者Copilot帮你写个脚本。

lily195 commented 11 hours ago

我只有表格形式的保存记录,问题是软件也不支持这个格式导入。

@lily195 可以恢复的。Starward使用的是UIGF2.3,相比于表格,多出来的item_id等字段可以通过查表一一添加,比如卡池对照表(需要确认集录祈愿的ID)和物品对照表。最后转成Json格式就可以导入了。 有需要恢复的话可以让ChatGPT或者Copilot帮你写个脚本。

我只是个普通用户,不会搞这些,

lily195 commented 11 hours ago

我只有表格形式的保存记录,问题是软件也不支持这个格式导入。

@lily195 可以恢复的。Starward使用的是UIGF2.3,相比于表格,多出来的item_id等字段可以通过查表一一添加,比如卡池对照表(需要确认集录祈愿的ID)和物品对照表。最后转成Json格式就可以导入了。 有需要恢复的话可以让ChatGPT或者Copilot帮你写个脚本。

只能说,即使我有表格记录,我找不到有什么地方可以转成json让软件识别。

Sieroy commented 10 hours ago

只能说,即使我有表格记录,我找不到有什么地方可以转成json让软件识别。

@lily195 上班前大脑复健了一下哈哈。你可以参考ChatGPT的最后一版代码搞一下,实测可用:https://chatgpt.com/share/674c6c81-f2c8-8002-b842-88b0d71eefc8

注意运行前按着第一版代码的提示配置一下环境。导出的Excel文件有格式缺陷,另存个文件修一下。程序最后几行填上你的文件路径。如果开了全局代理,运行前关掉代理。

如果你没接触过Python,也可以上传你的文件试试让GPT运行,不过数据量过大的话会占用你的每日调用配额。