├── .github ├── ISSUE_TEMPLATE │ ├── bug-report-en.yaml │ ├── bug-report.yaml │ ├── config.yml │ ├── new-feature-en.yaml │ └── new-feature.yaml └── workflows │ ├── mirrorchyan_release_note.yml │ ├── mirrorchyan_uploading.yml │ └── pack.yml ├── .gitignore ├── LICENSE ├── README.md ├── README_CHT.md ├── README_ENG.md ├── abyss.py ├── abyss └── info_example.yml ├── actions ├── bless.csv ├── character.csv ├── character.json ├── default.json └── event.csv ├── align_angle.py ├── diver.py ├── gui.py ├── imgs ├── U.jpg ├── abyss │ ├── 1_star.jpg │ ├── 2_stars.jpg │ ├── 3_stars.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── begin.jpg │ ├── fail.jpg │ ├── in.jpg │ ├── mask_z.jpg │ ├── team.jpg │ └── z.jpg ├── arrow.jpg ├── arrow_1.jpg ├── auto.jpg ├── auto_2.jpg ├── base.ttf ├── battle_mask.jpg ├── begin.jpg ├── bonus_c.jpg ├── c.jpg ├── choose_bless.jpg ├── confirm.jpg ├── conti.jpg ├── divergent │ ├── arrow.jpg │ ├── event_mask.jpg │ ├── event_mask_clean.jpg │ ├── exit.jpg │ ├── sile.jpg │ ├── start.jpg │ └── z.jpg ├── drop.jpg ├── drop_bless.jpg ├── e.jpg ├── enhance.jpg ├── enhance_fail.jpg ├── event.jpg ├── f.jpg ├── f_bg.jpg ├── fail.jpg ├── fate.jpg ├── fate_2.jpg ├── fate_3.jpg ├── floor │ ├── ff1.jpg │ ├── ff10.jpg │ ├── ff11.jpg │ ├── ff12.jpg │ ├── ff13.jpg │ ├── ff2.jpg │ ├── ff3.jpg │ ├── ff4.jpg │ ├── ff5.jpg │ ├── ff6.jpg │ ├── ff7.jpg │ ├── ff8.jpg │ └── ff9.jpg ├── huangquan.jpg ├── icon.ico ├── icon.jpg ├── icon.png ├── icon_m.png ├── iconl.png ├── image_quality.jpg ├── init.jpg ├── lack.jpg ├── loc_arrow.jpg ├── maps │ ├── 3446 │ │ ├── init.jpg │ │ ├── map_4080_4034_.jpg │ │ └── target.jpg │ ├── 5699 │ │ ├── init.jpg │ │ ├── map_4036_3912_.jpg │ │ └── target.jpg │ ├── 11115 │ │ ├── init.jpg │ │ ├── map_4013_4071_.jpg │ │ └── target.jpg │ ├── 11646 │ │ ├── init.jpg │ │ ├── map_3945_4037_.jpg │ │ └── target.jpg │ ├── 13198 │ │ ├── init.jpg │ │ ├── map_4080_4007_.jpg │ │ └── target.jpg │ ├── 16392 │ │ ├── init.jpg │ │ ├── map_4068_3898_.jpg │ │ └── target.jpg │ ├── 17191 │ │ ├── init.jpg │ │ ├── map_4039_4026_.jpg │ │ └── target.jpg │ ├── 18768 │ │ ├── init.jpg │ │ ├── map_4036_4076_.jpg │ │ └── target.jpg │ ├── 18769 │ │ ├── init.jpg │ │ ├── map_4036_4076_.jpg │ │ └── target.jpg │ ├── 19787 │ │ ├── init.jpg │ │ ├── map_4044_4065_.jpg │ │ └── target.jpg │ ├── 19914 │ │ ├── init.jpg │ │ ├── map_3913_4049_.jpg │ │ └── target.jpg │ ├── 20029 │ │ ├── init.jpg │ │ ├── map_3983_4080_.jpg │ │ └── target.jpg │ ├── 22212 │ │ ├── init.jpg │ │ ├── map_3924_3914_.jpg │ │ └── target.jpg │ ├── 23480 │ │ ├── init.jpg │ │ ├── map_3966_3986_.jpg │ │ └── target.jpg │ ├── 23481 │ │ ├── init.jpg │ │ ├── map_3966_3986_.jpg │ │ └── target.jpg │ ├── 30180 │ │ ├── init.jpg │ │ ├── map_4050_4034_.jpg │ │ └── target.jpg │ ├── 30797 │ │ ├── init.jpg │ │ ├── map_4079_4073_.jpg │ │ └── target.jpg │ ├── 36639 │ │ ├── init.jpg │ │ ├── map_3994_4061_.jpg │ │ └── target.jpg │ ├── 37007 │ │ ├── init.jpg │ │ ├── map_4085_4051_.jpg │ │ └── target.jpg │ ├── 38866 │ │ ├── init.jpg │ │ ├── map_4014_3931_.jpg │ │ └── target.jpg │ ├── 42250 │ │ ├── init.jpg │ │ ├── map_4082_3965_.jpg │ │ └── target.jpg │ ├── 43642 │ │ ├── init.jpg │ │ ├── map_4082_4034_.jpg │ │ └── target.jpg │ ├── 45516 │ │ ├── init.jpg │ │ ├── map_4065_4037_.jpg │ │ └── target.jpg │ ├── 49992 │ │ ├── init.jpg │ │ ├── map_3987_3931_.jpg │ │ └── target.jpg │ ├── 51202 │ │ ├── init.jpg │ │ ├── map_3954_4018_.jpg │ │ └── target.jpg │ ├── 53073 │ │ ├── init.jpg │ │ ├── map_4076_4066_.jpg │ │ └── target.jpg │ ├── 57859 │ │ ├── init.jpg │ │ ├── map_4039_3936_.jpg │ │ └── target.jpg │ ├── 58891 │ │ ├── init.jpg │ │ ├── map_4071_3936_.jpg │ │ └── target.jpg │ ├── 60170 │ │ ├── init.jpg │ │ ├── map_3918_4058_.jpg │ │ └── target.jpg │ ├── 63533 │ │ ├── init.jpg │ │ ├── map_4094_3999_.jpg │ │ └── target.jpg │ ├── 65515 │ │ ├── init.jpg │ │ ├── map_3936_4053_.jpg │ │ └── target.jpg │ ├── 65576 │ │ ├── init.jpg │ │ ├── map_4059_3973_.jpg │ │ └── target.jpg │ ├── 67422 │ │ ├── init.jpg │ │ ├── map_4077_4070_.jpg │ │ └── target.jpg │ ├── 67423 │ │ ├── init.jpg │ │ ├── map_4077_4070_.jpg │ │ └── target.jpg │ ├── 67673 │ │ ├── init.jpg │ │ ├── map_4052_4020_.jpg │ │ └── target.jpg │ ├── 70941 │ │ ├── init.jpg │ │ ├── map_3982_3947_.jpg │ │ └── target.jpg │ ├── 71729 │ │ ├── init.jpg │ │ ├── map_4024_3869_.jpg │ │ └── target.jpg │ ├── 73927 │ │ ├── init.jpg │ │ ├── map_3960_3860_.jpg │ │ └── target.jpg │ ├── 74959 │ │ ├── init.jpg │ │ ├── map_4017_3987_.jpg │ │ └── target.jpg │ ├── 78029 │ │ ├── init.jpg │ │ ├── map_3955_3910_.jpg │ │ └── target.jpg │ ├── 78566 │ │ ├── init.jpg │ │ ├── map_4043_4071_.jpg │ │ └── target.jpg │ ├── 78620 │ │ ├── init.jpg │ │ ├── map_4036_4062_.jpg │ │ └── target.jpg │ ├── 81866 │ │ ├── init.jpg │ │ ├── map_4070_3919_.jpg │ │ └── target.jpg │ ├── 84378 │ │ ├── init.jpg │ │ ├── map_4085_4051_.jpg │ │ └── target.jpg │ ├── 85880 │ │ ├── init.jpg │ │ ├── map_4019_3966_.jpg │ │ └── target.jpg │ ├── 89200 │ │ ├── init.jpg │ │ ├── map_3936_4066_.jpg │ │ └── target.jpg │ ├── 90013 │ │ ├── init.jpg │ │ ├── map_4039_3915_.jpg │ │ └── target.jpg │ ├── 90178 │ │ ├── init.jpg │ │ ├── map_4079_3867_.jpg │ │ └── target.jpg │ ├── 91571 │ │ ├── init.jpg │ │ ├── map_4074_3980_.jpg │ │ └── target.jpg │ ├── 91683 │ │ ├── init.jpg │ │ ├── map_4070_4071_.jpg │ │ └── target.jpg │ ├── 94807 │ │ ├── init.jpg │ │ ├── map_4090_4066_.jpg │ │ └── target.jpg │ ├── 96641 │ │ ├── init.jpg │ │ ├── map_4042_4026_.jpg │ │ └── target.jpg │ ├── 96642 │ │ ├── init.jpg │ │ ├── map_4042_4026_.jpg │ │ └── target.jpg │ └── 98940 │ │ ├── init.jpg │ │ ├── map_4047_4070_.jpg │ │ └── target.jpg ├── mask.jpg ├── mask_arrow.jpg ├── mask_arrow1.jpg ├── mask_auto.jpg ├── mask_bless.jpg ├── mask_close.jpg ├── mask_close1.jpg ├── mask_echo.jpg ├── mask_end.jpg ├── mask_enhance.jpg ├── mask_event.jpg ├── mask_f.jpg ├── mask_f1.jpg ├── mask_fate.jpg ├── mask_snack.jpg ├── mask_strange.jpg ├── mask_z.jpg ├── mini1.jpg ├── mini2.jpg ├── mini3.jpg ├── mini4.jpg ├── money.jpg ├── new.jpg ├── peila.jpg ├── quit.jpg ├── region.jpg ├── reset.jpg ├── ruan.jpg ├── run.jpg ├── setting.jpg ├── snack.jpg ├── star.jpg ├── start.jpg ├── strange.jpg ├── team.jpg ├── team4.jpg ├── text ├── use_atk.jpg ├── use_def.jpg ├── use_package.jpg ├── use_replace.jpg ├── use_star.jpg ├── yes.jpg ├── yes1.jpg ├── z.jpg └── z1.jpg ├── info_example.yml ├── info_example_old.yml ├── install_requirements.bat ├── notif.py ├── requirements.txt ├── simul.py ├── start.mp3 └── utils ├── diver ├── args.py ├── config.py ├── keyops.py ├── ocr.py └── utils.py ├── gui ├── __init__.py ├── abyss.py ├── choose.py ├── common.py ├── config_diver.py └── config_simul.py ├── log.py ├── models ├── ppocr_keys_v1.txt ├── v3_det.onnx └── v4_rec.onnx ├── onnxocr ├── cls_postprocess.py ├── db_postprocess.py ├── imaug.py ├── logger.py ├── onnx_paddleocr.py ├── operators.py ├── predict_base.py ├── predict_det.py ├── predict_rec.py ├── predict_system.py ├── rec_postprocess.py └── utils.py ├── screenshot.py └── simul ├── cleaner.py ├── config.py ├── find_duplicate_map.py ├── keyops.py ├── map_log.py ├── ocr.py ├── update_map.py └── utils.py /.github/ISSUE_TEMPLATE/bug-report-en.yaml: -------------------------------------------------------------------------------- 1 | name: Report bugs 2 | description: Report Auto Simulated Universe's bug 3 | title: '[Bug]: ' 4 | labels: [ "bug" ] 5 | 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | ## Thank you for your willingness to fill out an error return! 11 | ## Below are some notes, please be sure to read them to make it easier for us to deal with them! 12 | 13 | ### ❗ | Make sure that no ISSUE with the same problem has been raised. 14 | ### 🌎 | Please fill in the environmental information accurately. 15 | ### 🌎 | If you don't know how to phrase a question effectively and accurately, we recommend that you read The Wisdom of Asking Questions first! 16 | 17 | --- 18 | - type: checkboxes 19 | id: terms 20 | attributes: 21 | label: Please make sure you have read the notes above and check the confirmation box below. 22 | options: 23 | - label: "I've tested this using an environment that is clean and free of other non-essential plugins and the problem persists." 24 | required: true 25 | - label: "I have looked in [Issue Tracker](https://github.com/CHNZYX/Auto_Simulated_Universe/issues) for the issue I want to raise and did not find an ISSUE for the same issue." 26 | required: true 27 | - label: I am aware and agree that if this Issue is about something other than the program itself, my Issue may be automatically closed or/and locked unconditionally. 28 | required: true 29 | - label: I am aware and agree that if I do not follow the instructions provided in the template, my Issue may be deleted unconditionally. 30 | required: true 31 | 32 | - type: markdown 33 | attributes: 34 | value: | 35 | ## Environmental information 36 | 37 | - type: input 38 | id: env-Auto-Simulated-Universe-ver 39 | attributes: 40 | label: Auto Simulated Universe version (or Commit Id) 41 | validations: 42 | required: true 43 | 44 | - type: textarea 45 | id: reproduce-steps 46 | attributes: 47 | label: Steps to Reproduce 48 | description: | 49 | What do we need to do to make the bug appear? 50 | Simple and clear reproduction steps can help us pinpoint the problem more quickly. 51 | validations: 52 | required: true 53 | 54 | - type: textarea 55 | id: expected 56 | attributes: 57 | label: What is the desired outcome? 58 | validations: 59 | required: true 60 | 61 | - type: textarea 62 | id: actual 63 | attributes: 64 | label: What are the actual results? 65 | validations: 66 | required: true 67 | 68 | - type: textarea 69 | id: logging 70 | attributes: 71 | label: logs 72 | 73 | - type: textarea 74 | id: extra-desc 75 | attributes: 76 | label: Supplementary note (optional) 77 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yaml: -------------------------------------------------------------------------------- 1 | name: 回报错误 2 | description: 在使用 Auto Simulated Universe 过程中遇到了错误 3 | title: '[Bug]: ' 4 | labels: [ "bug" ] 5 | 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | ## 感谢您愿意填写错误回报! 11 | ## 以下是一些注意事项,请务必阅读让我们能够更容易处理 12 | 13 | ### ❗ | 确定没有相同问题的ISSUE已被提出。 14 | ### 🌎| 请准确填写环境信息。 15 | ### 如果您不知道如何有效、精准地表述,我们建议您先阅读《提问的智慧》 16 | 17 | --- 18 | - type: checkboxes 19 | id: terms 20 | attributes: 21 | label: 请确保您已阅读以上注意事项,并勾选下方的确认框。 22 | options: 23 | - label: "我已经使用一个干净且无其它非必要的插件的环境测试过,问题依旧存在。" 24 | required: true 25 | - label: "我已经在 [Issue Tracker](https://github.com/CHNZYX/Auto_Simulated_Universe/issues) 中找过我要提出的问题,没有找到相同问题的ISSUE。" 26 | required: true 27 | - label: 我已知晓并同意,若这个 Issue 是关于其他非程序本身问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。 28 | required: true 29 | - label: 我已知晓并同意,如果我不按照模板提供的指示进行填写,则我的 Issue 可能会被无条件删除。 30 | required: true 31 | 32 | - type: markdown 33 | attributes: 34 | value: | 35 | ## 环境信息 36 | 37 | - type: input 38 | id: env-Auto-Simulated-Universe-ver 39 | attributes: 40 | label: Auto Simulated Universe 版本 (或 Commit Id) 41 | validations: 42 | required: true 43 | 44 | - type: textarea 45 | id: reproduce-steps 46 | attributes: 47 | label: 重现步骤 48 | description: | 49 | 我们需要执行哪些操作才能让 Bug 出现? 50 | 简洁清晰的重现步骤能够帮助我们更迅速地定位问题所在。 51 | validations: 52 | required: true 53 | 54 | - type: textarea 55 | id: expected 56 | attributes: 57 | label: 期望的结果是什么? 58 | validations: 59 | required: true 60 | 61 | - type: textarea 62 | id: actual 63 | attributes: 64 | label: 实际的结果是什么? 65 | validations: 66 | required: true 67 | 68 | - type: textarea 69 | id: logging 70 | attributes: 71 | label: 日志记录 72 | 73 | - type: textarea 74 | id: extra-desc 75 | attributes: 76 | label: 补充说明(可选) 77 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Community 4 | url: https://github.com/CHNZYX/Auto_Simulated_Universe/discussions 5 | about: QQ群 831830526 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new-feature-en.yaml: -------------------------------------------------------------------------------- 1 | name: New feature 2 | description: Proposing new features 3 | title: '[Feat]: ' 4 | labels: [ "enhancement" ] 5 | 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | ## Thank you for your willingness to suggest Auto Simulated Universe! 11 | ## Below are some notes, please be sure to read them to make it easier for us to deal with them! 12 | 13 | ### ❗ | Make sure no Feature with the same problem has been proposed or implemented. 14 | ### 📝 | Make sure that there is no existing PR and code that has an implementation/similarity of the Feature. 15 | ### 📝 | If you don't know how to phrase this effectively and precisely, we suggest you first read The Wisdom of Asking Questions 16 | 17 | --- 18 | - type: checkboxes 19 | id: terms 20 | attributes: 21 | label: Please make sure you have read the notes above and check the confirmation box below. 22 | options: 23 | - label: "I'm sure this is a feature that has never been proposed or implemented." 24 | required: true 25 | - label: "I have looked in [Issue Tracker](https://github.com/CHNZYX/Auto_Simulated_Universe/issues) and [Pull Request](https://github.com/CHNZYX/Auto_Simulated_Universe/pulls) for the feature I'm proposing, and did not find an ISSUE or PR for the same feature." 26 | required: true 27 | - label: I am aware and agree that this is for suggesting new features only. If this Issue is about another off-topic issue, my Issue may be automatically closed or/and locked unconditionally. 28 | required: true 29 | - label: I am aware and agree that if I do not follow the instructions provided in the template, my Issue may be deleted unconditionally. 30 | required: true 31 | 32 | - type: textarea 33 | id: feature-to-add 34 | attributes: 35 | label: Functional content to be added 36 | description: | 37 | Please be specific about the functionality you would like to add, including the simulations implemented (if any) 38 | Is there a similar feature already implemented? If so please affirmatively suggest what is different from the feature/what part of the feature you would like to improve/add. 39 | validations: 40 | required: true 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new-feature.yaml: -------------------------------------------------------------------------------- 1 | name: 新功能提议 2 | description: 提出新功能 3 | title: '[Feat]: ' 4 | labels: [ "enhancement" ] 5 | 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | ## 感谢您愿意为 Auto Simulated Universe 提出建议! 11 | ## 以下是一些注意事项,请务必阅读让我们能够更容易处理 12 | 13 | ### ❗ | 确定没有相同问题的 Feature 已被提出或实现。 14 | ### 📝 | 确定现有的PR和代码并没有该功能的实现/相似的功能。 15 | ### 如果您不知道如何有效、精准地表述,我们建议您先阅读《提问的智慧》 16 | 17 | --- 18 | - type: checkboxes 19 | id: terms 20 | attributes: 21 | label: 请确保您已阅读以上注意事项,并勾选下方的确认框。 22 | options: 23 | - label: "我确定这是一个从未被提出和实现过的功能。" 24 | required: true 25 | - label: "我已经在 [Issue Tracker](https://github.com/CHNZYX/Auto_Simulated_Universe/issues) 以及 [Pull Request](https://github.com/CHNZYX/Auto_Simulated_Universe/pulls) 中找过我要提出的功能,没有找到相同功能的ISSUE和PR。" 26 | required: true 27 | - label: 我已知晓并同意,此处仅用于建议新功能。若这个 Issue 是关于其他非主题的问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。 28 | required: true 29 | - label: 我已知晓并同意,如果我不按照模板提供的指示进行填写,则我的 Issue 可能会被无条件删除。 30 | required: true 31 | 32 | - type: textarea 33 | id: feature-to-add 34 | attributes: 35 | label: 需要添加的功能内容 36 | description: | 37 | 请具体提出想添加的功能,包括实现的模拟(如有) 38 | 是否有类似的功能已经实现?如有请肯定地提出与该功能不同的地方/想改进/添加该功能的哪一部分。 39 | validations: 40 | required: true 41 | -------------------------------------------------------------------------------- /.github/workflows/mirrorchyan_release_note.yml: -------------------------------------------------------------------------------- 1 | name: mirrorchyan_release_note 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [edited] 7 | 8 | jobs: 9 | mirrorchyan_release_note: 10 | runs-on: macos-latest 11 | 12 | steps: 13 | - uses: MirrorChyan/release-note-action@v1 14 | with: 15 | mirrorchyan_rid: ASU 16 | 17 | upload_token: ${{ secrets.MirrorChyanUploadToken }} 18 | github_token: ${{ secrets.GITHUB_TOKEN }} 19 | 20 | - uses: MirrorChyan/release-note-action@v1 21 | with: 22 | mirrorchyan_rid: ASU_cpu 23 | 24 | upload_token: ${{ secrets.MirrorChyanUploadToken }} 25 | github_token: ${{ secrets.GITHUB_TOKEN }} 26 | -------------------------------------------------------------------------------- /.github/workflows/mirrorchyan_uploading.yml: -------------------------------------------------------------------------------- 1 | name: mirrorchyan_uploading 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | 8 | mirrorchyan: 9 | runs-on: macos-latest 10 | steps: 11 | 12 | - id: latest-release 13 | uses: pozetroninc/github-action-get-latest-release@master 14 | with: 15 | owner: CHNZYX 16 | repo: Auto_Simulated_Universe 17 | token: ${{ secrets.GITHUB_TOKEN }} 18 | 19 | - uses: MirrorChyan/uploading-action@v1 20 | with: 21 | filetype: latest-release 22 | # non-cpu version 23 | filename: "AutoSimulatedUniverse_${{ steps.latest-release.outputs.release }}.zip" 24 | mirrorchyan_rid: ASU 25 | 26 | github_token: ${{ secrets.GITHUB_TOKEN }} 27 | owner: CHNZYX 28 | repo: Auto_Simulated_Universe 29 | upload_token: ${{ secrets.MirrorChyanUploadToken }} 30 | 31 | - uses: MirrorChyan/uploading-action@v1 32 | with: 33 | filetype: latest-release 34 | filename: "AutoSimulatedUniverse_*_cpu.zip" 35 | mirrorchyan_rid: ASU_cpu 36 | 37 | github_token: ${{ secrets.GITHUB_TOKEN }} 38 | owner: CHNZYX 39 | repo: Auto_Simulated_Universe 40 | upload_token: ${{ secrets.MirrorChyanUploadToken }} 41 | -------------------------------------------------------------------------------- /.github/workflows/pack.yml: -------------------------------------------------------------------------------- 1 | name: Pack Flet Application 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - '**.py' 9 | tags: 10 | - "v*" 11 | pull_request: 12 | branches: 13 | - main 14 | workflow_dispatch: ~ 15 | 16 | permissions: 17 | contents: write 18 | 19 | jobs: 20 | build: 21 | runs-on: windows-latest 22 | 23 | steps: 24 | - name: Checkout repository 25 | uses: actions/checkout@v3 26 | 27 | - name: Set up Python 28 | uses: actions/setup-python@v4 29 | with: 30 | python-version: '3.12' 31 | cache: "pip" 32 | 33 | - name: Install dependencies 34 | run: | 35 | python -m pip install --upgrade pip 36 | pip install -r requirements.txt 37 | pip install numpy==1.26.4 38 | 39 | - name: Pack Flet Application 40 | run: flet pack gui.py --icon imgs/icon_m.png --uac-admin --add-data "utils/models;utils/models" -D -y 41 | 42 | - name: Pyinstaller Application 43 | run: | 44 | pyinstaller --uac-admin -F --i imgs/icon.png -w notif.py 45 | 46 | - name: Move assets to dist directory 47 | run: | 48 | xcopy imgs dist\gui\imgs /I /E 49 | xcopy actions dist\gui\actions /I /E 50 | xcopy info_example.yml dist\gui 51 | xcopy info_example_old.yml dist\gui 52 | xcopy README.md dist\gui 53 | xcopy dist\notif.exe dist\gui 54 | ren dist\gui AutoSimulatedUniverse 55 | 56 | - name: Create zip archive 57 | if: startsWith(github.ref, 'refs/tags/') 58 | run: | 59 | $files = Get-ChildItem -Path dist\AutoSimulatedUniverse 60 | Compress-Archive -Path $files.FullName -DestinationPath "AutoSimulatedUniverse_${{ github.ref_name }}.zip" -Force 61 | 62 | - name: Install dependencies for cpu mode 63 | run: | 64 | pip uninstall onnxruntime-directml -y 65 | pip install onnxruntime 66 | 67 | - name: Pack Flet Application 68 | run: flet pack gui.py --icon imgs/icon_m.png --uac-admin --add-data "utils/models;utils/models" -D -y 69 | 70 | - name: Pyinstaller Application 71 | run: | 72 | pyinstaller --uac-admin -F --i imgs/icon.png -w notif.py 73 | 74 | - name: Move assets to dist directory 75 | run: | 76 | xcopy imgs dist\gui\imgs /I /E 77 | xcopy actions dist\gui\actions /I /E 78 | xcopy info_example.yml dist\gui 79 | xcopy info_example_old.yml dist\gui 80 | xcopy README.md dist\gui 81 | xcopy dist\notif.exe dist\gui 82 | ren dist\gui AutoSimulatedUniverse_cpu 83 | 84 | - name: Create zip archive 85 | if: startsWith(github.ref, 'refs/tags/') 86 | run: | 87 | $files = Get-ChildItem -Path dist\AutoSimulatedUniverse_cpu 88 | Compress-Archive -Path $files.FullName -DestinationPath "AutoSimulatedUniverse_${{ github.ref_name }}_cpu.zip" -Force 89 | 90 | - name: Create release 91 | if: startsWith(github.ref, 'refs/tags/') 92 | uses: softprops/action-gh-release@v1 93 | with: 94 | name: ${{ github.ref_name }} 95 | files: | 96 | AutoSimulatedUniverse_${{ github.ref_name }}.zip 97 | AutoSimulatedUniverse_${{ github.ref_name }}_cpu.zip 98 | prerelease: true 99 | 100 | - name: Trigger MirrorChyanUploading 101 | if: startsWith(github.ref, 'refs/tags/') 102 | shell: bash 103 | run: | 104 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_uploading 105 | gh workflow run --repo $GITHUB_REPOSITORY mirrorchyan_release_note 106 | env: 107 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 108 | 109 | - name: Upload artifact 110 | uses: actions/upload-artifact@v4 111 | with: 112 | name: AutoSimulatedUniverse 113 | path: AutoSimulatedUniverse 114 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | .venv/ 3 | venv/ 4 | .idea/ 5 | .vscode/ 6 | build/ 7 | dist/ 8 | img/ 9 | test.* 10 | *.spec 11 | imgs/bigmap.jpg 12 | imgs/bwmap.jpg 13 | imgs/maxloc.jpg 14 | imgs/screen.jpg 15 | imgs/sbl.jpg 16 | imgs/tbw.jpg 17 | imgs/tmp.jpg 18 | imgs/tmp_0.jpg 19 | imgs/tmp1.jpg 20 | imgs/tmp2.jpg 21 | imgs/tmp3.jpg 22 | imgs/tmp4.jpg 23 | imgs/tmp5.jpg 24 | imgs/tmp6.jpg 25 | imgs/collect 26 | logs/ 27 | my_map 28 | .notif 29 | check0.txt 30 | check5.txt 31 | *.zip 32 | ocr/ 33 | info.yml 34 | info_old.yml 35 | version.txt 36 | *.exe 37 | test.py 38 | mylib.py 39 | mylib.bat 40 | tmp.py 41 | targ 42 | tmp 43 | big.jpg 44 | bw.jpg 45 | tp.jpg 46 | tp 47 | utils/mylib/ 48 | update.py 49 | update.bat -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [简体中文](README.md) | [繁体中文](README_CHT.md) | [English](README_ENG.md) 2 | 3 | # Auto_Simulated_Universe 4 | 星穹铁道-模拟宇宙全自动化 5 | 6 | 快速上手,请访问:[项目文档](https://github.com/Night-stars-1/Auto_Simulated_Universe_Docs/blob/docs/docs/guide/index.md) 7 | 8 | 遇到问题,请在提问前查看:[Q&A](https://github.com/Night-stars-1/Auto_Simulated_Universe_Docs/blob/docs/docs/guide/qa.md) 9 | 10 | 运行自动化时不能用电脑做其他事?试试多用户后台运行![后台运行](https://github.com/Night-stars-1/Auto_Simulated_Universe_Docs/blob/docs/docs/guide/bs.md) 11 | 12 | 此页面主要介绍差分宇宙自动化,如需详细的普通模拟宇宙自动化介绍请移步[普通宇宙](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/old/README.md) 13 | 14 | ---------------------------------------------------------------------------------------------- 15 | 16 | ## 免责声明 17 | 本软件是一个外部工具旨在自动化崩坏星轨的游戏玩法。它被设计成仅通过现有用户界面与游戏交互,并遵守相关法律法规。该软件包旨在提供简化和用户通过功能与游戏交互,并且它不打算以任何方式破坏游戏平衡或提供任何不公平的优势。该软件包不会以任何方式修改任何游戏文件或游戏代码。 18 | 19 | This software is open source, free of charge and for learning and exchange purposes only. The developer team has the final right to interpret this project. All problems arising from the use of this software are not related to this project and the developer team. If you encounter a merchant using this software to practice on your behalf and charging for it, it may be the cost of equipment and time, etc. The problems and consequences arising from this software have nothing to do with it. 20 | 21 | 本软件开源、免费,仅供学习交流使用。开发者团队拥有本项目的最终解释权。使用本软件产生的所有问题与本项目与开发者团队无关。若您遇到商家使用本软件进行代练并收费,可能是设备与时间等费用,产生的问题及后果与本软件无关。 22 | 23 | 24 | 请注意,根据MiHoYo的 [崩坏:星穹铁道的公平游戏宣言]([https://hsr.hoyoverse.com/en-us/news/111244](https://sr.mihoyo.com/news/111246?nav=news&type=notice)): 25 | 26 | "严禁使用外挂、加速器、脚本或其他破坏游戏公平性的第三方工具。" 27 | "一经发现,米哈游(下亦称“我们”)将视违规严重程度及违规次数,采取扣除违规收益、冻结游戏账号、永久封禁游戏账号等措施。" 28 | 29 | ## 安装GUI [![](https://img.shields.io/github/downloads/CHNZYX/Auto_Simulated_Universe/total?color=66ccff)](https://github.com/CHNZYX/Auto_Simulated_Universe/releases) 30 | 31 | \[新增\]: v7.2后支持云·星穹铁道。云崩铁要用网页应用打开,直接在网页打开会无法识别。需要关闭网速和延迟显示;同时需要设置为全屏幕,并且物理屏幕分辨率为x\*1080(x>=1920)。若无法达到要求,建议在多用户下开启。 32 | 33 | ## 命令行用法 34 | 35 | 只支持x\*1080(x>=1920,窗口化或全屏幕),关闭hdr,文本语言选择简体中文,游戏界面不能有任何遮挡。代码版[下载链接](https://github.com/CHNZYX/Auto_Simulated_Universe/archive/refs/heads/main.zip) 36 | 37 | 如果没怎么接触过python,建议直接在[release](https://github.com/CHNZYX/Auto_Simulated_Universe/releases/latest)中下载gui版本,并直接阅读GUI使用方法 38 | 39 | **第一次运行** 40 | 41 | 建议使用anaconda,创建虚拟环境并安装依赖库(conda需要在cmd下运行,powershell可能无法切换虚拟环境) 42 | 43 | ```plaintext 44 | conda create -n asu python=3.12 -y 45 | conda activate asu 46 | pip install -r requirements.txt 47 | ``` 48 | 49 | 或者直接安装(不建议):双击`install_requirements.bat`安装依赖库 50 | 51 | 重命名info_example.yml为info.yml 52 | 53 | **运行自动化** 54 | 55 | 命令行运行 56 | 57 | 差分宇宙 58 | ```plaintext 59 | python diver.py 60 | ``` 61 | 62 | 或普通模拟宇宙 63 | ```plaintext 64 | python simul.py 65 | ``` 66 | 67 | 详细参数: 68 | ```plaintext 69 | python diver.py <--debug> <--speed> <--cpu> --nums= 70 | ``` 71 | --speed:开启速通模式 72 | 73 | --debug:开启调试模式 74 | 75 | --cpu:图像识别强制使用cpu 76 | 77 | nums:指定通关次数,必须为正整数 78 | 79 | ```plaintext 80 | python simul.py --bonus= --debug= --speed= --find= --nums= 81 | ``` 82 | bonus in [0,1]:是否开启沉浸奖励 83 | 84 | speed in [0,1]:开启速通模式 85 | 86 | consumable in [0,1]:精英和首领战之前是否使用最左上角的消耗品 87 | 88 | debug in [0,1,2]:开启调试模式 89 | 90 | find in [0,1]:0为录图,1为跑图 91 | 92 | nums:指定通关次数,必须为正整数 93 | 94 | ---------------------------------------------------------------------------------------------- 95 | 96 | `info.yml`内容如下 97 | ```yaml 98 | config: 99 | # 难度,1-5,(5代表最高难度,如果世界没有难度5则会选择难度4) 100 | difficulty: 5 101 | # 队伍类型 目前只支持:追击/dot/终结技/击破/盾反 102 | team: 终结技 103 | # 速通模式 104 | speed_mode: 0 105 | # 图像识别强制使用cpu 106 | cpu_mode: 0 107 | # 首领房间需要开秘技的角色,按顺序开 108 | skill: 109 | - 黄泉 110 | # 自动存档数量,0-4,0代表不存档,1-4代表自动存档到前1-4个存档位 111 | save: 4 112 | timezone: Default 113 | max_run: 34 114 | ``` 115 | 116 | 必须携带至少一名远程平a角色,最好放在1号位 117 | 118 | 注意!!!!! 开始运行/开始校准之后就不要移动游戏窗口了!要移动请先停止自动化! 119 | 120 | **校准** 121 | 122 | 如果出现视角转动过大/过小而导致迷路的问题,可能是校准值出问题了,可以尝试手动校准: 123 | 124 | 进入游戏,将人物传送到黑塔的办公室,然后命令行运行 `python align_angle.py`,等待视角转换/原地转圈结束 125 | 126 | 改变鼠标dpi可能会影响校准值,此时需要重新校准。 127 | 128 | ## GUI使用方法 129 | 130 | **第一次运行** 131 | 132 | 在游戏中设置“自动沿用战斗设置” 133 | 134 | **运行自动化** 135 | 136 | 点击运行 137 | 138 | 注意!!!!! 开始运行/开始校准之后就不要移动游戏窗口了!要移动请先停止自动化! 139 | 140 | **TIPS:** 141 | 142 | 尽量使用远程角色作为一号位,队伍中必须至少有一名远程角色。 143 | 144 | F8/‘停止’按钮停止运行。 145 | 146 | 显隐表示显示/隐藏命令行窗口,默认隐藏 147 | 148 | 调试模式:如果不希望迷路后退出结算,请开启调试模式 149 | 150 | 速通模式:开启表示追求最高效率通关,低配队伍慎用 151 | 152 | 推荐最低画质配置: 153 | 154 | ![画质](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/image_quality.jpg) 155 | 156 | **校准** 157 | 158 | 如果出现视角转动过大/过小而导致迷路的问题,可能是校准值出问题了,可以尝试手动校准: 159 | 160 | 进入游戏,将人物传送到黑塔的办公室,然后点击校准,等待视角转换/原地转圈结束 161 | 162 | 改变鼠标dpi可能会影响校准值,此时需要重新校准。 163 | 164 | ## 更新 165 | 166 | ~~双击update.exe~~ 167 | 168 | ## 通知插件使用方法(notif.exe) 169 | 170 | 如果你没有用本地多用户,那么直接双击`notif.exe`即可开启windows通知,每刷完一次都会通知哦 171 | 172 | 如果你用了本地多用户,那么请在子用户运行gui,在主用户运行notif,这样就能在主用户收到通知了 173 | 174 | 计数会在每周自动重置,如果想手动改变计数,请打开`logs/notif.txt`,修改第一行的信息 175 | 176 | 通知插件会在右下角显示托盘图标 177 | 178 | ---------------------------------------------------------------------------------------------- 179 | 180 | ~~欢迎加入,欢迎反馈bug,QQ群:831830526~~ 181 | 182 | ~~群没了,可以加736265667~~ 183 | 184 | 二群545443061 185 | 186 | ---------------------------------------------------------------------------------------------- 187 | 188 | 如果喜欢本项目,可以打赏送作者一杯咖啡喵! 189 | 190 | ![打赏](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/money.jpg) 191 | 192 | ---------------------------------------------------------------------------------------------- 193 | ## 贡献者 194 | 195 | 感谢以下贡献者对本项目做出的贡献 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | ![Alt](https://repobeats.axiom.co/api/embed/a24da575ebc375e58ec8d8a0d7fff6d26306d2fc.svg "Repobeats analytics image") 204 | 205 | ## Star History 206 | 207 | [![Star History Chart](https://api.star-history.com/svg?repos=CHNZYX/Auto_Simulated_Universe&type=Date)](https://star-history.com/#CHNZYX/Auto_Simulated_Universe&Date) 208 | -------------------------------------------------------------------------------- /README_CHT.md: -------------------------------------------------------------------------------- 1 | [簡體中文](README.md) | [繁體中文](README_CHT.md) | [English](README_ENG.md) 2 | 3 | # Auto_Simulated_Universe 4 | 星穹鐵道-模擬宇宙全自動化 5 | 6 | 有一定的斷點回復功能,你可以切出去做其他事,切回來會繼續自動化。 7 | 8 | 目前支持模擬宇宙所有世界 9 | 10 | ---------------------------------------------------------------------------------------------- 11 | 12 | ## 免責聲明 13 | 本軟件是一個外部工具旨在自動化崩壞星軌的遊戲玩法。它被設計成僅通過現有用戶界面與遊戲交互,並遵守相關法律法規。該軟件包旨在提供簡化和用戶通過功能與遊戲交互,並且它不打算以任何方式破壞遊戲平衡或提供任何不公平的優勢。該軟件包不會以任何方式修改任何遊戲文件或遊戲代碼。 14 | 15 | This software is open source, free of charge and for learning and exchange purposes only. The developer team has the final right to interpret this project. All problems arising from the use of this software are not related to this project and the developer team. If you encounter a merchant using this software to practice on your behalf and charging for it, it may be the cost of equipment and time, etc. The problems and consequences arising from this software have nothing to do with it. 16 | 17 | 本軟件開源、免費,僅供學習交流使用。開發者團隊擁有本項目的最終解釋權。使用本軟件產生的所有問題與本項目與開發者團隊無關。若您遇到商家使用本軟件進行代練並收費,可能是設備與時間等費用,產生的問題及後果與本軟件無關。 18 | 19 | 20 | 請註意,根據MiHoYo的 [崩壞:星穹鐵道的公平遊戲宣言]([https://hsr.hoyoverse.com/en-us/news/111244](https://sr.mihoyo.com/news/111246?nav=news&type=notice)): 21 | 22 | "嚴禁使用外掛、加速器、腳本或其他破壞遊戲公平性的第三方工具。" 23 | "一經發現,米哈遊(下亦稱「我們」)將視違規嚴重程度及違規次數,采取扣除違規收益、凍結遊戲賬號、永久封禁遊戲賬號等措施。" 24 | 25 | ### 用法 26 | 27 | 只支持1920\*1080(窗口化或全屏幕),關閉hdr,文本語言選擇簡體中文。 28 | 29 | 默認世界:比如說如果你當前模擬宇宙默認世界4,但是想自動化世界6,那麽請先進入一次世界6來改變默認世界 30 | 31 | 如果沒怎麽接觸過python,建議直接在[release](https://github.com/CHNZYX/Auto_Simulated_Universe/releases/latest)中下載gui版本,並直接閱讀GUI使用方法 32 | 33 | **第一次運行** 34 | 35 | 雙擊`install_requirements.bat`安裝依賴庫 36 | 37 | 重命名info_example.yml為info.yml 38 | 39 | **運行自動化** 40 | 41 | 雙擊`run.bat` 或者 命令行運行 42 | ```plaintext 43 | python states.py 44 | ``` 45 | 46 | 詳細參數: 47 | ```plaintext 48 | python states.py --bonus= --debug= --speed= --find= 49 | ``` 50 | bonus in [0,1]:是否開啟沈浸獎勵 51 | 52 | speed in [0,1]:開啟速通模式 53 | 54 | consumable in [0,1]:菁英和首領戰之前是否使用最左上角的消耗品 55 | 56 | debug in [0,1,2]:開啟調試模式 57 | 58 | find in [0,1]:0為錄圖,1為跑圖 59 | 60 | ---------------------------------------------------------------------------------------------- 61 | 62 | `info.yml`內容如下 63 | ```yaml 64 | config: 65 | order_text: [1, 2, 3, 4] //模擬宇宙開局選的角色,建議改成自己的配隊,1表示第一個角色。最好在一號位選遠程角色(艾絲妲、三月七)方便開怪。 66 | angle: 1.0 //校準數據請勿更改 67 | difficulty: 4 //宇宙的難度,如果你要打難度1就改成1保存 68 | fate: 巡獵 //命途選擇,默認巡獵,可以直接修改為其它命途。 69 | map_sha: '' //地圖數據的版本,不建議更改 70 | show_map_mode: 0 71 | debug_mode: 0 72 | speed_mode: 0 73 | use_consumable: 0 74 | slow_mode: 0 75 | force_update: 0 76 | timezone: Default 77 | prior: 78 | 優先級信息,按需調整 79 | ``` 80 | 81 | 默認是哪個宇宙就會進哪個!如果你默認不是第6世界,記得先手動切到第6世界! 82 | 83 | 盡量使用遠程成女角色作為一號位,近戰成女也能適配,其它體型(成男等)會出現穩定性問題。 84 | 85 | 註意!!!!! 開始運行/開始校準之後就不要移動遊戲窗口了!要移動請先停止自動化! 86 | 87 | **校準** 88 | 89 | 如果出現視角轉動過大/過小而導致迷路的問題,可能是校準值出問題了,可以嘗試手動校準: 90 | 91 | 進入遊戲,將人物傳送到黑塔的辦公室,然後雙擊 `align.bat`,等待視角轉換/原地轉圈結束 92 | 93 | 如果`align.bat`閃退,可以嘗試命令行 94 | ```plaintext 95 | python align_angle.py 96 | ``` 97 | 98 | 改變鼠標dpi可能會影響校準值,此時需要重新校準。 99 | 100 | **更新文件** 101 | 102 | 雙擊`update.bat` 103 | 104 | 105 | ### GUI使用方法 106 | 107 | **第一次運行** 108 | 109 | 在設置中選擇自己想要的難度和命途,配隊請在遊戲中預先選擇默認配隊 110 | 111 | 最好在一號位選遠程角色(艾絲妲、三月七等)方便開怪。 112 | 113 | **運行自動化** 114 | 115 | 點擊運行 116 | 117 | 註意!!!!! 開始運行/開始校準之後就不要移動遊戲窗口了!要移動請先停止自動化! 118 | 119 | **TIPS:** 120 | 121 | 盡量使用遠程成女角色作為一號位,近戰成女也能適配,其它體型(成男等)會出現穩定性問題。 122 | 123 | F8/『停止』按鈕停止運行。 124 | 125 | 顯隱表示顯示/隱藏命令行窗口,默認隱藏 126 | 127 | 調試模式:如果不希望迷路後退出結算,請開啟調試模式 128 | 129 | 如果不希望打完34次後自動停止,也請開啟調試模式 130 | 131 | 速通模式:開啟表示只打每層最後一個怪 132 | 133 | 推薦最低畫質配置: 134 | 135 | ![畫質](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/image_quality.jpg) 136 | 137 | **校準** 138 | 139 | 如果出現視角轉動過大/過小而導致迷路的問題,可能是校準值出問題了,可以嘗試手動校準: 140 | 141 | 進入遊戲,將人物傳送到黑塔的辦公室,然後點擊校準,等待視角轉換/原地轉圈結束 142 | 143 | 改變鼠標dpi可能會影響校準值,此時需要重新校準。 144 | 145 | ### 更新 146 | 147 | 雙擊update.exe 148 | 149 | ### 自動深淵 150 | 151 | 自動深淵可以使用固定配隊自動刷忘卻之庭,這項功能的目的是節省手動刷前幾層的時間。 152 | 153 | 代碼版啟動方法為`python abyss.py`,gui版啟動方法為主界面中的「深淵」按鈕。 154 | 155 | 代碼版第一次運行需要修改abyss文件夾下的info_example.yml為info.yml,並且修改info.yml為自己的兩隊配隊,gui版可以在深淵界面中輸入自己的配隊。 156 | 157 | 每隊的配隊信息為四個數字 158 | 159 | ![配隊編號](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/team.jpg) 160 | 161 | 比如說這張圖中,你想選擇娜塔莎,景元,希兒,彥卿,那麽請在配隊中輸入:`6 4 3 2` 162 | 163 | ### 通知插件使用方法(notif.exe) 164 | 165 | 如果你沒有用本地多用戶,那麽直接雙擊`notif.exe`即可開啟windows通知,每刷完一次都會通知哦 166 | 167 | 如果你用了本地多用戶,那麽請在子用戶運行gui,在主用戶運行notif,這樣就能在主用戶收到通知了 168 | 169 | 計數會在每周自動重置,如果想手動改變計數,請打開`logs/notif.txt`,修改第一行的信息 170 | 171 | 通知插件會在右下角顯示托盤圖標 172 | 173 | ---------------------------------------------------------------------------------------------- 174 | 175 | ### 部分邏輯 176 | 177 | 選擇祝福的邏輯基於ocr+自定義優先級 178 | 179 | 尋路模塊基於小地圖 180 | 181 | 小地圖中只會識別白色邊緣線和黃色交互點。 182 | 183 | ---------------------------------------------------------------------------------------------- 184 | 185 | 支持錄製地圖,具體方法為 186 | 187 | 運行 `python states.py --debug=2 --find=1` 188 | 189 | 如果遇到新圖會角色停住,這時候結束自動化並且遊戲中暫離模擬宇宙 190 | 191 | 然後運行 `python states.py --debug=2 --find=0` 192 | 193 | 運行後會自動進入地圖,期間請不要移動鼠標也不要動鍵盤 194 | 195 | 幾秒後角色會後退,然後前進。在角色前進時,你可以移動鼠標改變視角,也可以按鍵盤wasd。 196 | 197 | 在地圖中繞一圈,感覺差不多就`F8/ctrl+c`結束進程能得到地圖數據了。保存在`imgs/maps/my_xxxxx`目錄下(可以按修改時間排序) 198 | 199 | 有怪的圖最好用希兒戰技,被鎖定會影響小地圖識別。 200 | 201 | `imgs/maps/my_xxxxx`目錄下會存在`target.jpg`,你可以用windows自帶的畫圖打開它,然後在上面標記點(可以參考其它地圖文件中的`target.jpg`) 202 | 203 | 靛藍色:路徑點 黃色:終點 綠色:交互點(問號點) 紅色:怪點 204 | 205 | 錄製結束後可以暫離並重新運行自動化測試地圖,如果通過測試,你就成功錄製到了新圖! 206 | 207 | ---------------------------------------------------------------------------------------------- 208 | 209 | 歡迎加入,歡迎反饋bug,QQ群:831830526 210 | 211 | ---------------------------------------------------------------------------------------------- 212 | 213 | ![打賞](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/money.jpg) 214 | -------------------------------------------------------------------------------- /README_ENG.md: -------------------------------------------------------------------------------- 1 | [简体中文](README.md) | [繁体中文](README_CHT.md) | [English](README_ENG.md) 2 | 3 | 4 | # Auto_Simulated_Universe 5 | Star Rail - Auto Simulated Universe 6 | 7 | This project incorporates a pause-resume feature. You can switch to other tasks and return later to continue the automation process. 8 | 9 | Currently supports automation of all worlds within the simulated universe. 10 | 11 | ---------------------------------------------------------------------------------------------- 12 | 13 | ## Disclaimer 14 | This software is an external tool intended to automate gameplay in the game "Honkai Star Rail." It is designed to interact with the game solely through existing user interfaces and in compliance with relevant laws and regulations. This software package aims to provide simplification and user interaction with the game's features and does not intend to disrupt game balance or provide any unfair advantages. The package will not modify any game files or game code in any way. 15 | 16 | This software is open-source and free of charge, intended for educational and collaborative purposes only. The development team holds the final interpretation rights for this project. Any issues arising from the use of this software are unrelated to this project and the development team. If you come across merchants using this software for power-leveling and charging for it, the costs might involve equipment and time, and any issues or consequences arising from this software are unrelated to it. 17 | 18 | Please note that according to MiHoYo's [Fair Play Declaration for Honkai Star Rail](https://hsr.hoyoverse.com/en-us/news/111244): 19 | 20 | "The use of plug-ins, accelerators, scripts, or other third-party tools that disrupt the fairness of the game is strictly prohibited." 21 | "Once discovered, miHoYo (hereinafter referred to as 'we') will take measures such as deducting illegal gains, freezing game accounts, and permanently banning game accounts based on the severity and frequency of violations." 22 | 23 | ### Usage 24 | 25 | Only supports 1920x1080 resolution (windowed or fullscreen), turn off hdr, and text language selection is simplified Chinese. 26 | 27 | Default World: For instance, if your current default world in the simulated universe is World 4 but you want to automate World 6, please enter World 6 once to change the default world. 28 | 29 | If you're not familiar with Python, it's recommended to directly download the GUI version from the [release](https://github.com/CHNZYX/Auto_Simulated_Universe/releases/latest) and follow the GUI usage instructions. 30 | 31 | **First-time Setup** 32 | 33 | Double-click `install_requirements.bat` to install the required libraries. 34 | 35 | Rename `info_example.yml` to `info.yml`. 36 | 37 | **Running Automation** 38 | 39 | Double-click `run.bat` or run in the command line: 40 | ```plaintext 41 | python states.py 42 | ``` 43 | 44 | Detailed parameters: 45 | ```plaintext 46 | python states.py --bonus= --debug= --speed= --find= 47 | ``` 48 | bonus in [0,1]: Whether to enable immersion bonus. 49 | 50 | speed in [0,1]: Enable speedrun mode. 51 | 52 | consumable in [0,1]:Enable using the most top-left consumable before elite & boss battle 53 | 54 | debug in [0,1,2]: Enable debug mode. 55 | 56 | find in [0,1]: 0 for recording, 1 for speedrunning. 57 | 58 | The content of `info.yml` is as follows: 59 | ```yaml 60 | config: 61 | order_text: [1, 2, 3, 4] # Character selection order at the start of the simulation. Change this according to your team composition. 1 represents the first character. It's advisable to put ranged characters (like Asta or March 7th) in position 1 for better monster clearing. 62 | angle: 1.0 # Calibration data, do not modify. 63 | difficulty: 4 # Universe difficulty, change to 1 if you want to play on difficulty 1. 64 | fate: 巡猎 # Fate selection, default is 巡猎, you can directly modify it to other fates. 65 | map_sha: '' # Map data version, not recommended to change. 66 | show_map_mode: 0 67 | debug_mode: 0 68 | speed_mode: 0 69 | use_consumable: 0 70 | slow_mode: 0 71 | force_update: 0 72 | timezone: Default 73 | prior: 74 | # Priority information, adjust as needed. 75 | ``` 76 | 77 | The simulation will enter the world that corresponds to the default setting. If your default world is not World 6, remember to manually switch to World 6 first! 78 | 79 | Prefer using ranged female characters in the first slot whenever possible. Melee females can also be viable, while other body types (e.g., male characters) may result in stability issues. 80 | 81 | Important!!! Once you start running/calibrating, do not move the game window! If you need to move it, please stop the automation first! 82 | 83 | **Calibration** 84 | 85 | If you're experiencing issues like excessive/inadequate camera rotation leading to getting lost, it might be due to calibration. You can manually calibrate as follows: 86 | 87 | Enter the game and teleport your character to Herta's office. Then, double-click `align.bat` and wait for the camera to rotate/character to spin in place. 88 | 89 | If `align.bat` crashes, you can try using the command line: 90 | ```plaintext 91 | python align_angle.py 92 | ``` 93 | 94 | Changing your mouse DPI might affect calibration values, in which case, you'll need to recalibrate. 95 | 96 | **Updating Files** 97 | 98 | Double-click `update.bat`. 99 | 100 | ### GUI Usage Instructions 101 | 102 | **First-time Setup** 103 | 104 | In the settings, select your desired difficulty and fate. Please pre-select your default team composition in the game. 105 | 106 | It's advisable to put a ranged character (like Asta or March 7th) in the first position for better monster clearing. 107 | 108 | **Running Automation** 109 | 110 | Click the "运行" button. 111 | 112 | Important!!! Once you start running/calibrating, do not move the game window! If you need to move it, please stop the automation first! 113 | 114 | **TIPS:** 115 | 116 | Press F8 or the "停止" button to halt the process. 117 | 118 | Prefer using ranged female characters in the first slot whenever possible. Melee females can also be viable, while other body types (e.g., male characters) may result in stability issues. 119 | 120 | "显隐" checkbox toggles the visibility of the command-line window. It's hidden by default. 121 | 122 | 调试模式: If you don't want to exit the settlement after getting lost, please enable debug mode. 123 | 124 | If you don't want it to automatically stop after completing 34 rounds, also enable debug mode. 125 | 126 | 速通模式: Enabling this means you'll only fight the final enemy on each level. 127 | 128 | Recommended minimal graphics settings: 129 | 130 | ![Graphics Settings](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/image_quality.jpg) 131 | 132 | **Calibration** 133 | 134 | If you're experiencing issues like excessive/inadequate camera rotation leading to getting lost, it might be due to calibration. You can manually calibrate as follows: 135 | 136 | Enter the game and teleport your character to Herta's office. Then, click the "Calibrate" button, and wait for the camera to rotate/character to spin in place. 137 | 138 | Changing your mouse DPI might affect calibration values, in which case, you'll need to recalibrate. 139 | 140 | ### Update 141 | 142 | Double-click `update.exe`. 143 | 144 | ### Automatic Abyss 145 | 146 | Automatic Abyss allows you to use a fixed team to automatically clear the Oblivion Domains, saving time on manual clearing of the initial levels. 147 | 148 | To run the script version, use `python abyss.py`. For the GUI version, click the "Abyss" button on the main interface. 149 | 150 | For the script version's first run, modify the `info_example.yml` file in the "abyss" folder to `info.yml`, and edit `info.yml` with your two-team composition. In the GUI version, you can input your team composition in the Abyss interface. 151 | 152 | Each team's composition is represented by four numbers. 153 | 154 | ![Team Composition Numbers](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/team.jpg) 155 | 156 | For instance, in the image above, if you want to choose Natasha, Jing Yuan, Seele, and Yan Qing, input: `6 4 3 2`. 157 | 158 | ### Notification Plugin Instructions (notif.exe) 159 | 160 | If you're not using a local multi-user setup, simply double-click 161 | 162 | `notif.exe` to enable Windows notifications. You'll receive notifications after each completion. 163 | 164 | If you're using a local multi-user setup, run the GUI version in the sub-user account and `notif.exe` in the main user account. This way, notifications will be sent to the main user. 165 | 166 | The counter resets automatically weekly. If you wish to manually modify the count, open `logs/notif.txt` and edit the first line. 167 | 168 | The notification plugin displays a tray icon in the bottom-right corner. 169 | 170 | ---------------------------------------------------------------------------------------------- 171 | 172 | ### Logic Overview 173 | 174 | Blessing selection logic is based on OCR and custom priority settings. 175 | 176 | Pathfinding module uses a mini-map. 177 | 178 | The mini-map only recognizes white edge lines and yellow interaction points. 179 | 180 | ---------------------------------------------------------------------------------------------- 181 | 182 | Support for recording maps is available: 183 | 184 | Run `python states.py --debug=2 --find=1`. 185 | 186 | If a new map is encountered and your character stops, end the automation and put the game in pause mode in the Simulated Universe. 187 | 188 | Then, run `python states.py --debug=2 --find=0`. 189 | 190 | The script will automatically enter the map. During this process, do not move the mouse or press any keys. 191 | 192 | After a few seconds, the character will move backward and then forward. During the forward movement, you can move the mouse to change the camera angle or use WASD on the keyboard. 193 | 194 | Move around the map, and when you feel it's sufficient, press F8 or Ctrl+C to terminate the process. This will capture the map data. It will be saved in the `imgs/maps/my_xxxxx` directory (sorted by modification time). 195 | 196 | For maps with monsters, it's advisable to use Seele's ultimate ability. Being locked onto a target can affect the mini-map recognition. 197 | 198 | A `target.jpg` file will be present in the `imgs/maps/my_xxxxx` directory. You can use the built-in Paint application on Windows to open it and mark points (you can refer to the `target.jpg` file in other map folders). 199 | 200 | Indigo: Path point, Yellow: Destination, Green: Interaction point (question mark), Red: Enemy point 201 | 202 | After recording, you can exit the game and re-run the automation to test the map. If the test is successful, you've successfully recorded a new map! 203 | 204 | ---------------------------------------------------------------------------------------------- 205 | 206 | Feel free to join and provide feedback. QQ Group: 831830526 207 | 208 | ---------------------------------------------------------------------------------------------- 209 | 210 | If you like this project, you can buy the author a cup of coffee! 211 | 212 | ![Donate](https://github.com/CHNZYX/Auto_Simulated_Universe/blob/main/imgs/money.jpg) 213 | -------------------------------------------------------------------------------- /abyss.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | import cv2 as cv 3 | import numpy as np 4 | import time 5 | import win32gui 6 | import random 7 | import sys 8 | from utils.log import log 9 | from utils.simul.utils import UniverseUtils, set_forground 10 | import utils.simul.keyops as keyops 11 | import os 12 | import yaml 13 | import pyuac 14 | 15 | 16 | class Abyss(UniverseUtils): 17 | def __init__(self): 18 | super().__init__() 19 | self.abspath = os.path.dirname(__file__) # 获取项目根目录../Auto_Simulated_Universe 20 | if getattr(sys, 'frozen', False): 21 | self.abspath = '.' 22 | self.threshold = 0.97 23 | self.floor = 0 24 | self._stop = 0 25 | with open(os.path.join(self.abspath, "abyss/info.yml"), "r", encoding="utf-8", errors="ignore") as f: 26 | config = yaml.safe_load(f)["order_text"] 27 | self.team = [config[:4], config[4:]] 28 | 29 | def start_abyss(self): 30 | self.fail_drag = 0 31 | self.end_battle_time = 0 32 | while self._stop == 0: 33 | hwnd = win32gui.GetForegroundWindow() # 根据当前活动窗口获取句柄 34 | Text = win32gui.GetWindowText(hwnd) 35 | warn_game = False 36 | cnt = 0 37 | while Text != "崩坏:星穹铁道" and not self._stop: 38 | self.lst_changed = time.time() 39 | if not warn_game: 40 | warn_game = True 41 | log.warning("等待游戏窗口") 42 | time.sleep(0.5) 43 | cnt += 1 44 | if cnt == 1200: 45 | set_forground() 46 | hwnd = win32gui.GetForegroundWindow() # 根据当前活动窗口获取句柄 47 | Text = win32gui.GetWindowText(hwnd) 48 | self.route() 49 | time.sleep(0.2) 50 | if self.fail_drag > 4: 51 | self.press('esc') 52 | break 53 | 54 | def wait(self,peila=False): 55 | tm = time.time() 56 | ee = -2 57 | while self._stop == 0: 58 | self.get_screen() 59 | hwnd = win32gui.GetForegroundWindow() # 根据当前活动窗口获取句柄 60 | Text = win32gui.GetWindowText(hwnd) 61 | if self.check("auto_2", 0.0583, 0.0769) or Text != "崩坏:星穹铁道": 62 | tm = time.time() 63 | if self.check("c", 0.9464, 0.1287, threshold=0.985): 64 | if peila: 65 | tm = time.time() 66 | if self.check("peila", 0.6953,0.1880, mask="battle_mask"): 67 | if ee == 3: 68 | ee = 0 69 | else: 70 | self.press(' ') 71 | time.sleep(0.2) 72 | ee += 1 73 | self.press('v') 74 | else: 75 | self.press('v') 76 | else: 77 | self.press('v') 78 | if peila and self.check_auto(): 79 | self.press('v') 80 | tm = time.time() 81 | if time.time() - tm > 14 or self.check("abyss/in", 0.9130, 0.6074): 82 | if self.click_text(['返回忘却之庭']): 83 | time.sleep(1.5) 84 | self.end_battle_time = time.time() 85 | break 86 | time.sleep(0.1) 87 | 88 | def ready(self): 89 | img = self.get_screen() 90 | peila = self.ts.find_text(img, ['佩拉']) is not None 91 | for i in range(4): 92 | self.press(str(i + 1), 0.2) 93 | time.sleep(0.4) 94 | self.press("e") 95 | time.sleep(1.5) 96 | self.get_screen() 97 | if not ( 98 | self.check("z", 0.5010, 0.9426, mask="abyss/mask_z", threshold=0.95) 99 | or self.check( 100 | "abyss/z", 0.5010, 0.9426, mask="abyss/mask_z", threshold=0.95 101 | ) 102 | ): 103 | break 104 | time.sleep(1) 105 | pyautogui.click() 106 | time.sleep(3.5) 107 | return peila 108 | 109 | def route(self): 110 | img = self.get_screen() 111 | # self.click_target('imgs/abyss/fail.jpg',0.9,True) 112 | if self.check("abyss/fail", 0.5995, 0.1343): 113 | self.click((0.5995, 0.1343)) 114 | elif self.ts.find_text(img, ['角色编队']) is not None: 115 | if self.check("abyss/begin", 0.1062, 0.0815): 116 | self.click((0.1062, 0.0806)) 117 | return 118 | if random.randint(0, 1): 119 | self.team = self.team[::-1] 120 | for i, j in enumerate([(0.4026, 0.3259), (0.4010, 0.2343)]): 121 | self.click(j) 122 | time.sleep(0.2) 123 | for k in self.team[i]: 124 | t = k - 1 125 | if t >= 0: 126 | self.click( 127 | (0.9427 - 0.0661 * (t % 4), 0.8102 - 0.1435 * (t // 4)) 128 | ) 129 | time.sleep(0.2) 130 | self.click((0.1062, 0.0806)) 131 | time.sleep(1) 132 | elif self.ts.find_text(img[:600,:600], ['取得胜利时']) is not None: 133 | time.sleep(2) 134 | if time.time() - self.end_battle_time > 10: 135 | self.click((0.5, 0.14)) 136 | time.sleep(2) 137 | self.press("w", 3.5) 138 | t = self.move_to_interac(1, 1) 139 | if abs(t) > 30: 140 | self.press("w", 1) 141 | peila = self.ready() 142 | self.wait(peila=peila) 143 | if abs(t) > 30: 144 | time.sleep(1) 145 | self.press("w") 146 | time.sleep(0.3) 147 | self.move_to_interac(1, 1) 148 | self.press("w", 1.7) 149 | peila = self.ready() 150 | self.wait(peila=peila) 151 | elif self.check("abyss/6", 0.5661, 0.5713): 152 | self.click((0.5, 0.2)) 153 | elif self.check("abyss/5", 0.1125, 0.9389): 154 | self.click((0.9, 0.9)) 155 | time.sleep(0.3) 156 | self.get_screen() 157 | gray = [156, 122, 126] 158 | gray2 = [118, 107, 111] 159 | bw_map = np.zeros(self.screen.shape[:2], dtype=np.uint8) 160 | bw_map[np.sum((self.screen - gray) ** 2, axis=-1) <= 800] = 255 161 | bw_map[np.sum((self.screen - gray2) ** 2, axis=-1) <= 800] = 255 162 | # cv.imwrite('tp.jpg',bw_map) 163 | res = (-1, -1) 164 | for i in ["3_stars", "2_stars", "1_star"]: 165 | target = cv.imread(self.format_path("abyss/" + i), cv.IMREAD_GRAYSCALE) 166 | result = cv.matchTemplate(bw_map, target, cv.TM_CCORR_NORMED) 167 | min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result) 168 | if max_val > 0.88: 169 | res = max_loc 170 | break 171 | if res != (-1, -1): 172 | self.click((1 - res[0] / self.xx + 0.06, 1 - res[1] / self.yy + 0.02)) 173 | else: 174 | self.drag((0.5, 0.5), (0.8 - 0.6 * random.randint(0, 1), 0.5)) 175 | self.fail_drag += 1 176 | else: 177 | print('未知界面') 178 | self.click((0.5, 0.14)) 179 | time.sleep(1) 180 | 181 | 182 | if __name__ == "__main__": 183 | if not pyuac.isUserAdmin(): 184 | pyuac.runAsAdmin() 185 | else: 186 | abyss = Abyss() 187 | abyss.start_abyss() 188 | -------------------------------------------------------------------------------- /abyss/info_example.yml: -------------------------------------------------------------------------------- 1 | order_text: 2 | - 1 3 | - 3 4 | - 7 5 | - 8 6 | - 2 7 | - 5 8 | - 6 9 | - 14 -------------------------------------------------------------------------------- /actions/bless.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/actions/bless.csv -------------------------------------------------------------------------------- /actions/character.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/actions/character.csv -------------------------------------------------------------------------------- /actions/character.json: -------------------------------------------------------------------------------- 1 | { 2 | "37": "三月七", 3 | "3月7": "三月七", 4 | "BTO": "波提欧", 5 | "Bto": "波提欧", 6 | "bto": "波提欧", 7 | "type-c": "符玄", 8 | "typec": "符玄", 9 | "三七": "三月七", 10 | "三月": "三月七", 11 | "下雪大衣": "雪衣", 12 | "丹恒饮月": "丹恒饮月", 13 | "真理": "真理医生", 14 | "医生": "真理医生", 15 | "义父": "真理医生", 16 | "云天明": "希儿", 17 | "亲妈": "卡芙卡", 18 | "佩拉姐姐": "佩拉", 19 | "佩菈": "佩拉", 20 | "冷面": "丹恒", 21 | "冷面小青龙": "丹恒", 22 | "刃刃": "刃", 23 | "加拉赫": "加拉赫", 24 | "单恒": "丹恒", 25 | "单桓": "丹恒", 26 | "卡卡瓦夏": "砂金", 27 | "卡夫卡": "卡芙卡", 28 | "可拉拉": "克拉拉", 29 | "史瓦罗": "克拉拉", 30 | "叶琳娜": "托帕账账", 31 | "嚯嚯": "藿藿", 32 | "大枕头": "素裳", 33 | "大鸭鸭": "布洛妮娅", 34 | "天鹅": "黑天鹅", 35 | "奶粉": "桂乃芬", 36 | "宇宙级富婆": "艾丝妲", 37 | "寄子": "姬子", 38 | "寒冷乌鸦": "寒鸦", 39 | "小女友": "流萤", 40 | "小怂包": "藿藿", 41 | "小板鸭": "银狼", 42 | "小桂子": "桂乃芬", 43 | "小青龙": "丹恒", 44 | "小鸭鸭": "银狼", 45 | "小龙人": "白露", 46 | "小龙女": "白露", 47 | "尾巴": "藿藿", 48 | "尾巴小跟班": "藿藿", 49 | "布洛妮亚": "布洛妮娅", 50 | "布洛尼亚": "布洛妮娅", 51 | "布洛尼娅": "布洛妮娅", 52 | "希尔": "希儿", 53 | "希璐瓦": "希露瓦", 54 | "希瓦露": "希露瓦", 55 | "帐帐": "托帕账账", 56 | "幻胧": "停云", 57 | "应星": "刃", 58 | "延卿": "彦卿", 59 | "彦清": "彦卿", 60 | "彦青": "彦卿", 61 | "御空": "驭空", 62 | "总监": "托帕账账", 63 | "慈玉": "翡翠", 64 | "憨色鸭": "银狼", 65 | "憨鸭": "银狼", 66 | "手搓黑洞": "瓦尔特杨", 67 | "托帕": "托帕账账", 68 | "拉吊": "真理医生", 69 | "拉帝奥": "真理医生", 70 | "摸鱼": "青雀", 71 | "教授": "真理医生", 72 | "景元元": "景元", 73 | "景原": "景元", 74 | "景源": "景元", 75 | "朊梅": "阮梅", 76 | "机子": "姬子", 77 | "李大枕头": "素裳", 78 | "李素裳": "素裳", 79 | "杨叔": "瓦尔特杨", 80 | "杰哥": "杰帕德", 81 | "板鸭": "布洛妮娅", 82 | "格妮薇儿": "桂乃芬", 83 | "格尼薇儿": "桂乃芬", 84 | "桂奶粉": "桂乃芬", 85 | "桂师傅": "桂乃芬", 86 | "桑伯": "桑博", 87 | "桑柏": "桑博", 88 | "沙金": "砂金", 89 | "漆黑的虎克": "虎克", 90 | "漆黑的虎克大人": "虎克", 91 | "玲宝": "玲可", 92 | "瓦尔特杨": "瓦尔特杨", 93 | "甘蔗鸭": "布洛妮娅", 94 | "白鹭": "白露", 95 | "白鹿": "白露", 96 | "相遇之缘": "三月七", 97 | "神君发射器": "景元", 98 | "符卿": "符玄", 99 | "第一律者": "瓦尔特杨", 100 | "米哈伊尔": "米沙", 101 | "米莎": "米沙", 102 | "纯美骑士": "银枝", 103 | "纳塔沙": "娜塔莎", 104 | "纳塔莎": "娜塔莎", 105 | "网红": "桂乃芬", 106 | "罗杀": "罗刹", 107 | "罗沙": "罗刹", 108 | "老杨": "瓦尔特杨", 109 | "老桑博": "桑博", 110 | "胀胀": "托帕账账", 111 | "胡可": "虎克", 112 | "花火": "花火", 113 | "萨姆": "流萤", 114 | "萨缪尔": "流萤", 115 | "藿去病": "藿藿", 116 | "藿香": "藿藿", 117 | "虎克大人": "虎克", 118 | "蝴蝶": "希儿", 119 | "账账": "托帕账账", 120 | "赌圣": "青雀", 121 | "赌神": "青雀", 122 | "转圈圈": "黑塔", 123 | "软妹": "阮梅", 124 | "软媒": "阮梅", 125 | "软梅": "阮梅", 126 | "闫卿": "彦卿", 127 | "阮梅": "阮梅", 128 | "阿兰": "阿兰", 129 | "霍去病": "藿藿", 130 | "霍霍": "藿藿", 131 | "青鹊": "青雀", 132 | "饮月": "丹恒饮月", 133 | "饮月君": "丹恒饮月", 134 | "骇兔": "银狼", 135 | "骇客": "银狼", 136 | "鸟妹": "知更鸟", 137 | "鸭鸭": "布洛妮娅", 138 | "黄泉": "黄泉", 139 | "黑客": "银狼", 140 | "鼹鼠党": "虎克", 141 | "鼹鼠党老大": "虎克", 142 | "龙尊": "丹恒饮月", 143 | "点刀哥": "刃", 144 | "五三哥": "刃", 145 | "勺子杀人魔": "刃", 146 | "阿刃": "刃", 147 | "妈": "卡芙卡", 148 | "坏女人": "卡芙卡", 149 | "主教": "罗刹", 150 | "奥托": "罗刹", 151 | "老马": "彦卿", 152 | "小马": "彦卿", 153 | "姬子老师": "姬子", 154 | "姬子阿姐": "姬子", 155 | "小杰杰": "杰帕德", 156 | "电焊工": "希儿", 157 | "存狐": "停云", 158 | "牢狐": "停云", 159 | "青总": "青雀", 160 | "热心市民李女士": "素裳", 161 | "娜塔": "娜塔莎", 162 | "寒腿叔叔": "桑博", 163 | "深蓝帅哥": "桑博", 164 | "孩子王": "虎克", 165 | "小三月": "三月七", 166 | "冷面小粉龙": "三月七", 167 | "富婆": "艾丝妲", 168 | "站长": "艾丝妲", 169 | "汤达人": "克拉拉", 170 | "机甲拳皇": "卢卡", 171 | "买榜姐": "托帕账账", 172 | "逮虾户": "驭空", 173 | "本姑娘": "罗刹", 174 | "捍武帝": "银枝", 175 | "虚无令使": "黄泉", 176 | "花导": "花火", 177 | "13岁大叔": "加拉赫", 178 | "鸡翅膀女孩": "知更鸟", 179 | "小孔雀": "砂金", 180 | "花火大人": "花火" 181 | } -------------------------------------------------------------------------------- /actions/event.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/actions/event.csv -------------------------------------------------------------------------------- /align_angle.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | import numpy as np 4 | import pywintypes 5 | import win32api 6 | import win32con 7 | import win32gui 8 | import pyuac 9 | from utils.log import log 10 | 11 | 12 | def get_angle(su, safe): 13 | import cv2 14 | su.press("w") 15 | time.sleep(0.5) 16 | su.get_screen() 17 | shape = (int(su.scx * 190), int(su.scx * 190)) 18 | local_screen = su.get_local(0.9333, 0.8657, shape) # 裁剪后得到的小地图 19 | return su.get_now_direc(local_screen) 20 | 21 | 22 | # 不同电脑鼠标移动速度、放缩比、分辨率等不同,因此需要校准 23 | # 基本逻辑:每次转60度,然后计算实际转了几度,计算出误差比 24 | def main(cnt=10, safe=0, ang=[1,1,3], su=None): 25 | if su is None or 'Diver' in su.__class__.__name__: 26 | from utils.diver.config import config 27 | else: 28 | from utils.simul.config import config 29 | if float(config.angle)>2 and len(ang)<3 and su is not None: 30 | su.multi = config.multi 31 | return 32 | log.info("开始校准") 33 | if su is None: 34 | from utils.simul.utils import UniverseUtils 35 | su = UniverseUtils() 36 | su.multi = 1 37 | init_ang = get_angle(su, safe) 38 | lst_ang = init_ang 39 | for i in ang: 40 | if lst_ang != init_ang and i==1: 41 | continue 42 | ang_list = [] 43 | for j in range(i): 44 | su.mouse_move(60, fine=3 // i) 45 | time.sleep(0.2) 46 | now_ang = get_angle(su, safe) 47 | sub = lst_ang - now_ang 48 | while sub < 0: 49 | sub += 360 50 | ang_list.append(sub) 51 | lst_ang = now_ang 52 | ang_list = np.array(ang_list) 53 | # 十/3次转身的角度 54 | print(ang_list) 55 | ax = 0 56 | ay = 0 57 | for j in ang_list: 58 | if abs(j - np.median(ang_list)) <= 3: 59 | ax += 60 60 | ay += j 61 | su.multi *= ax / ay 62 | su.multi += 1e-9 63 | try: 64 | if not abs(su.multi) <= 2: 65 | su.multi = 1 66 | except: 67 | su.multi = 1 68 | config.angle = str(su.multi+len(ang)-1) 69 | config.save() 70 | if su is None: 71 | from utils.simul.config import config 72 | config.angle = str(su.multi+len(ang)-1) 73 | config.save() 74 | log.info("校准完成") 75 | return 1 76 | 77 | 78 | if __name__ == "__main__": 79 | if not pyuac.isUserAdmin(): 80 | pyuac.runAsAdmin() 81 | else: 82 | main() 83 | -------------------------------------------------------------------------------- /gui.py: -------------------------------------------------------------------------------- 1 | import atexit 2 | import flet as ft 3 | import pyuac 4 | import threading 5 | import os, time 6 | import sys 7 | import psutil 8 | import shutil 9 | 10 | from utils.gui.choose import choose_view 11 | from utils.gui.config_simul import config_view as config_view_simul 12 | from utils.gui.config_diver import config_view as config_view_diver 13 | from utils.gui.abyss import abyss_view 14 | from utils.gui.common import Page, init_page 15 | 16 | 17 | def main(page: Page): 18 | def on_route_change(e: Page): 19 | page.views.clear() 20 | choose_view(page) 21 | if e.route == "/config_simul": 22 | config_view_simul(page) 23 | if e.route == "/config_diver": 24 | config_view_diver(page) 25 | if e.route == '/abyss': 26 | abyss_view(page) 27 | page.update() 28 | 29 | def view_pop(): 30 | page.views.pop() 31 | top_view = page.views[-1] 32 | page.go(top_view.route) 33 | 34 | 35 | init_page(page) 36 | page.theme = ft.Theme( 37 | color_scheme_seed=ft.colors.PINK, 38 | ) 39 | page.title = "AutoSimulatedUniverse" 40 | page.vertical_alignment = "center" 41 | page.horizontal_alignment = "center" 42 | page.on_route_change = on_route_change 43 | page.on_view_pop = view_pop 44 | page.window_min_width = 800 45 | page.window_width = 800 46 | page.window_height = 670 47 | page.window_min_height = 650 48 | page.go(page.route) 49 | 50 | def cleanup(): 51 | os._exit(0) 52 | 53 | def clean_temp_files(): 54 | try: 55 | path = sys._MEIPASS 56 | except: 57 | return 58 | now_dir = path 59 | parent_dir = os.path.dirname(now_dir) 60 | for file in os.listdir(parent_dir): 61 | file_path = os.path.join(parent_dir, file) 62 | if os.path.basename(now_dir) != file and os.path.isdir(file_path) and file.startswith('_MEI'): 63 | files_list = os.listdir(file_path) 64 | if 'utils' not in files_list or 'flet' not in files_list or 'win32' not in files_list: 65 | continue 66 | utils_path = os.path.join(file_path, 'utils') 67 | utils_list = os.listdir(utils_path) 68 | if 'models' not in utils_list: 69 | continue 70 | models_path = os.path.join(utils_path, 'models') 71 | models_list = os.listdir(models_path) 72 | if 'ppocr_keys_v1.txt' not in models_list or 'v3_det.onnx' not in models_list or 'v4_rec.onnx' not in models_list: 73 | continue 74 | try: 75 | shutil.rmtree(file_path, ignore_errors=True) 76 | except: 77 | pass 78 | 79 | if __name__ == "__main__": 80 | atexit.register(cleanup) 81 | if not pyuac.isUserAdmin(): 82 | pyuac.runAsAdmin() 83 | else: 84 | threading.Thread(target=clean_temp_files).start() 85 | ft.app(target=main) 86 | cleanup() -------------------------------------------------------------------------------- /imgs/U.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/U.jpg -------------------------------------------------------------------------------- /imgs/abyss/1_star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/1_star.jpg -------------------------------------------------------------------------------- /imgs/abyss/2_stars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/2_stars.jpg -------------------------------------------------------------------------------- /imgs/abyss/3_stars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/3_stars.jpg -------------------------------------------------------------------------------- /imgs/abyss/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/5.jpg -------------------------------------------------------------------------------- /imgs/abyss/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/6.jpg -------------------------------------------------------------------------------- /imgs/abyss/begin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/begin.jpg -------------------------------------------------------------------------------- /imgs/abyss/fail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/fail.jpg -------------------------------------------------------------------------------- /imgs/abyss/in.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/in.jpg -------------------------------------------------------------------------------- /imgs/abyss/mask_z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/mask_z.jpg -------------------------------------------------------------------------------- /imgs/abyss/team.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/team.jpg -------------------------------------------------------------------------------- /imgs/abyss/z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/abyss/z.jpg -------------------------------------------------------------------------------- /imgs/arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/arrow.jpg -------------------------------------------------------------------------------- /imgs/arrow_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/arrow_1.jpg -------------------------------------------------------------------------------- /imgs/auto.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/auto.jpg -------------------------------------------------------------------------------- /imgs/auto_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/auto_2.jpg -------------------------------------------------------------------------------- /imgs/base.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/base.ttf -------------------------------------------------------------------------------- /imgs/battle_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/battle_mask.jpg -------------------------------------------------------------------------------- /imgs/begin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/begin.jpg -------------------------------------------------------------------------------- /imgs/bonus_c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/bonus_c.jpg -------------------------------------------------------------------------------- /imgs/c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/c.jpg -------------------------------------------------------------------------------- /imgs/choose_bless.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/choose_bless.jpg -------------------------------------------------------------------------------- /imgs/confirm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/confirm.jpg -------------------------------------------------------------------------------- /imgs/conti.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/conti.jpg -------------------------------------------------------------------------------- /imgs/divergent/arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/arrow.jpg -------------------------------------------------------------------------------- /imgs/divergent/event_mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/event_mask.jpg -------------------------------------------------------------------------------- /imgs/divergent/event_mask_clean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/event_mask_clean.jpg -------------------------------------------------------------------------------- /imgs/divergent/exit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/exit.jpg -------------------------------------------------------------------------------- /imgs/divergent/sile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/sile.jpg -------------------------------------------------------------------------------- /imgs/divergent/start.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/start.jpg -------------------------------------------------------------------------------- /imgs/divergent/z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/divergent/z.jpg -------------------------------------------------------------------------------- /imgs/drop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/drop.jpg -------------------------------------------------------------------------------- /imgs/drop_bless.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/drop_bless.jpg -------------------------------------------------------------------------------- /imgs/e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/e.jpg -------------------------------------------------------------------------------- /imgs/enhance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/enhance.jpg -------------------------------------------------------------------------------- /imgs/enhance_fail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/enhance_fail.jpg -------------------------------------------------------------------------------- /imgs/event.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/event.jpg -------------------------------------------------------------------------------- /imgs/f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/f.jpg -------------------------------------------------------------------------------- /imgs/f_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/f_bg.jpg -------------------------------------------------------------------------------- /imgs/fail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/fail.jpg -------------------------------------------------------------------------------- /imgs/fate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/fate.jpg -------------------------------------------------------------------------------- /imgs/fate_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/fate_2.jpg -------------------------------------------------------------------------------- /imgs/fate_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/fate_3.jpg -------------------------------------------------------------------------------- /imgs/floor/ff1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff1.jpg -------------------------------------------------------------------------------- /imgs/floor/ff10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff10.jpg -------------------------------------------------------------------------------- /imgs/floor/ff11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff11.jpg -------------------------------------------------------------------------------- /imgs/floor/ff12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff12.jpg -------------------------------------------------------------------------------- /imgs/floor/ff13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff13.jpg -------------------------------------------------------------------------------- /imgs/floor/ff2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff2.jpg -------------------------------------------------------------------------------- /imgs/floor/ff3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff3.jpg -------------------------------------------------------------------------------- /imgs/floor/ff4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff4.jpg -------------------------------------------------------------------------------- /imgs/floor/ff5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff5.jpg -------------------------------------------------------------------------------- /imgs/floor/ff6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff6.jpg -------------------------------------------------------------------------------- /imgs/floor/ff7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff7.jpg -------------------------------------------------------------------------------- /imgs/floor/ff8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff8.jpg -------------------------------------------------------------------------------- /imgs/floor/ff9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/floor/ff9.jpg -------------------------------------------------------------------------------- /imgs/huangquan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/huangquan.jpg -------------------------------------------------------------------------------- /imgs/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/icon.ico -------------------------------------------------------------------------------- /imgs/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/icon.jpg -------------------------------------------------------------------------------- /imgs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/icon.png -------------------------------------------------------------------------------- /imgs/icon_m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/icon_m.png -------------------------------------------------------------------------------- /imgs/iconl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/iconl.png -------------------------------------------------------------------------------- /imgs/image_quality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/image_quality.jpg -------------------------------------------------------------------------------- /imgs/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/init.jpg -------------------------------------------------------------------------------- /imgs/lack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/lack.jpg -------------------------------------------------------------------------------- /imgs/loc_arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/loc_arrow.jpg -------------------------------------------------------------------------------- /imgs/maps/11115/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11115/init.jpg -------------------------------------------------------------------------------- /imgs/maps/11115/map_4013_4071_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11115/map_4013_4071_.jpg -------------------------------------------------------------------------------- /imgs/maps/11115/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11115/target.jpg -------------------------------------------------------------------------------- /imgs/maps/11646/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11646/init.jpg -------------------------------------------------------------------------------- /imgs/maps/11646/map_3945_4037_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11646/map_3945_4037_.jpg -------------------------------------------------------------------------------- /imgs/maps/11646/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/11646/target.jpg -------------------------------------------------------------------------------- /imgs/maps/13198/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/13198/init.jpg -------------------------------------------------------------------------------- /imgs/maps/13198/map_4080_4007_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/13198/map_4080_4007_.jpg -------------------------------------------------------------------------------- /imgs/maps/13198/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/13198/target.jpg -------------------------------------------------------------------------------- /imgs/maps/16392/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/16392/init.jpg -------------------------------------------------------------------------------- /imgs/maps/16392/map_4068_3898_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/16392/map_4068_3898_.jpg -------------------------------------------------------------------------------- /imgs/maps/16392/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/16392/target.jpg -------------------------------------------------------------------------------- /imgs/maps/17191/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/17191/init.jpg -------------------------------------------------------------------------------- /imgs/maps/17191/map_4039_4026_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/17191/map_4039_4026_.jpg -------------------------------------------------------------------------------- /imgs/maps/17191/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/17191/target.jpg -------------------------------------------------------------------------------- /imgs/maps/18768/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18768/init.jpg -------------------------------------------------------------------------------- /imgs/maps/18768/map_4036_4076_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18768/map_4036_4076_.jpg -------------------------------------------------------------------------------- /imgs/maps/18768/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18768/target.jpg -------------------------------------------------------------------------------- /imgs/maps/18769/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18769/init.jpg -------------------------------------------------------------------------------- /imgs/maps/18769/map_4036_4076_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18769/map_4036_4076_.jpg -------------------------------------------------------------------------------- /imgs/maps/18769/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/18769/target.jpg -------------------------------------------------------------------------------- /imgs/maps/19787/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19787/init.jpg -------------------------------------------------------------------------------- /imgs/maps/19787/map_4044_4065_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19787/map_4044_4065_.jpg -------------------------------------------------------------------------------- /imgs/maps/19787/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19787/target.jpg -------------------------------------------------------------------------------- /imgs/maps/19914/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19914/init.jpg -------------------------------------------------------------------------------- /imgs/maps/19914/map_3913_4049_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19914/map_3913_4049_.jpg -------------------------------------------------------------------------------- /imgs/maps/19914/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/19914/target.jpg -------------------------------------------------------------------------------- /imgs/maps/20029/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/20029/init.jpg -------------------------------------------------------------------------------- /imgs/maps/20029/map_3983_4080_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/20029/map_3983_4080_.jpg -------------------------------------------------------------------------------- /imgs/maps/20029/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/20029/target.jpg -------------------------------------------------------------------------------- /imgs/maps/22212/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/22212/init.jpg -------------------------------------------------------------------------------- /imgs/maps/22212/map_3924_3914_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/22212/map_3924_3914_.jpg -------------------------------------------------------------------------------- /imgs/maps/22212/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/22212/target.jpg -------------------------------------------------------------------------------- /imgs/maps/23480/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23480/init.jpg -------------------------------------------------------------------------------- /imgs/maps/23480/map_3966_3986_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23480/map_3966_3986_.jpg -------------------------------------------------------------------------------- /imgs/maps/23480/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23480/target.jpg -------------------------------------------------------------------------------- /imgs/maps/23481/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23481/init.jpg -------------------------------------------------------------------------------- /imgs/maps/23481/map_3966_3986_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23481/map_3966_3986_.jpg -------------------------------------------------------------------------------- /imgs/maps/23481/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/23481/target.jpg -------------------------------------------------------------------------------- /imgs/maps/30180/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30180/init.jpg -------------------------------------------------------------------------------- /imgs/maps/30180/map_4050_4034_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30180/map_4050_4034_.jpg -------------------------------------------------------------------------------- /imgs/maps/30180/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30180/target.jpg -------------------------------------------------------------------------------- /imgs/maps/30797/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30797/init.jpg -------------------------------------------------------------------------------- /imgs/maps/30797/map_4079_4073_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30797/map_4079_4073_.jpg -------------------------------------------------------------------------------- /imgs/maps/30797/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/30797/target.jpg -------------------------------------------------------------------------------- /imgs/maps/3446/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/3446/init.jpg -------------------------------------------------------------------------------- /imgs/maps/3446/map_4080_4034_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/3446/map_4080_4034_.jpg -------------------------------------------------------------------------------- /imgs/maps/3446/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/3446/target.jpg -------------------------------------------------------------------------------- /imgs/maps/36639/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/36639/init.jpg -------------------------------------------------------------------------------- /imgs/maps/36639/map_3994_4061_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/36639/map_3994_4061_.jpg -------------------------------------------------------------------------------- /imgs/maps/36639/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/36639/target.jpg -------------------------------------------------------------------------------- /imgs/maps/37007/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/37007/init.jpg -------------------------------------------------------------------------------- /imgs/maps/37007/map_4085_4051_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/37007/map_4085_4051_.jpg -------------------------------------------------------------------------------- /imgs/maps/37007/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/37007/target.jpg -------------------------------------------------------------------------------- /imgs/maps/38866/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/38866/init.jpg -------------------------------------------------------------------------------- /imgs/maps/38866/map_4014_3931_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/38866/map_4014_3931_.jpg -------------------------------------------------------------------------------- /imgs/maps/38866/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/38866/target.jpg -------------------------------------------------------------------------------- /imgs/maps/42250/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/42250/init.jpg -------------------------------------------------------------------------------- /imgs/maps/42250/map_4082_3965_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/42250/map_4082_3965_.jpg -------------------------------------------------------------------------------- /imgs/maps/42250/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/42250/target.jpg -------------------------------------------------------------------------------- /imgs/maps/43642/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/43642/init.jpg -------------------------------------------------------------------------------- /imgs/maps/43642/map_4082_4034_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/43642/map_4082_4034_.jpg -------------------------------------------------------------------------------- /imgs/maps/43642/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/43642/target.jpg -------------------------------------------------------------------------------- /imgs/maps/45516/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/45516/init.jpg -------------------------------------------------------------------------------- /imgs/maps/45516/map_4065_4037_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/45516/map_4065_4037_.jpg -------------------------------------------------------------------------------- /imgs/maps/45516/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/45516/target.jpg -------------------------------------------------------------------------------- /imgs/maps/49992/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/49992/init.jpg -------------------------------------------------------------------------------- /imgs/maps/49992/map_3987_3931_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/49992/map_3987_3931_.jpg -------------------------------------------------------------------------------- /imgs/maps/49992/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/49992/target.jpg -------------------------------------------------------------------------------- /imgs/maps/51202/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/51202/init.jpg -------------------------------------------------------------------------------- /imgs/maps/51202/map_3954_4018_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/51202/map_3954_4018_.jpg -------------------------------------------------------------------------------- /imgs/maps/51202/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/51202/target.jpg -------------------------------------------------------------------------------- /imgs/maps/53073/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/53073/init.jpg -------------------------------------------------------------------------------- /imgs/maps/53073/map_4076_4066_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/53073/map_4076_4066_.jpg -------------------------------------------------------------------------------- /imgs/maps/53073/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/53073/target.jpg -------------------------------------------------------------------------------- /imgs/maps/5699/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/5699/init.jpg -------------------------------------------------------------------------------- /imgs/maps/5699/map_4036_3912_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/5699/map_4036_3912_.jpg -------------------------------------------------------------------------------- /imgs/maps/5699/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/5699/target.jpg -------------------------------------------------------------------------------- /imgs/maps/57859/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/57859/init.jpg -------------------------------------------------------------------------------- /imgs/maps/57859/map_4039_3936_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/57859/map_4039_3936_.jpg -------------------------------------------------------------------------------- /imgs/maps/57859/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/57859/target.jpg -------------------------------------------------------------------------------- /imgs/maps/58891/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/58891/init.jpg -------------------------------------------------------------------------------- /imgs/maps/58891/map_4071_3936_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/58891/map_4071_3936_.jpg -------------------------------------------------------------------------------- /imgs/maps/58891/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/58891/target.jpg -------------------------------------------------------------------------------- /imgs/maps/60170/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/60170/init.jpg -------------------------------------------------------------------------------- /imgs/maps/60170/map_3918_4058_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/60170/map_3918_4058_.jpg -------------------------------------------------------------------------------- /imgs/maps/60170/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/60170/target.jpg -------------------------------------------------------------------------------- /imgs/maps/63533/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/63533/init.jpg -------------------------------------------------------------------------------- /imgs/maps/63533/map_4094_3999_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/63533/map_4094_3999_.jpg -------------------------------------------------------------------------------- /imgs/maps/63533/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/63533/target.jpg -------------------------------------------------------------------------------- /imgs/maps/65515/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65515/init.jpg -------------------------------------------------------------------------------- /imgs/maps/65515/map_3936_4053_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65515/map_3936_4053_.jpg -------------------------------------------------------------------------------- /imgs/maps/65515/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65515/target.jpg -------------------------------------------------------------------------------- /imgs/maps/65576/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65576/init.jpg -------------------------------------------------------------------------------- /imgs/maps/65576/map_4059_3973_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65576/map_4059_3973_.jpg -------------------------------------------------------------------------------- /imgs/maps/65576/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/65576/target.jpg -------------------------------------------------------------------------------- /imgs/maps/67422/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67422/init.jpg -------------------------------------------------------------------------------- /imgs/maps/67422/map_4077_4070_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67422/map_4077_4070_.jpg -------------------------------------------------------------------------------- /imgs/maps/67422/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67422/target.jpg -------------------------------------------------------------------------------- /imgs/maps/67423/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67423/init.jpg -------------------------------------------------------------------------------- /imgs/maps/67423/map_4077_4070_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67423/map_4077_4070_.jpg -------------------------------------------------------------------------------- /imgs/maps/67423/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67423/target.jpg -------------------------------------------------------------------------------- /imgs/maps/67673/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67673/init.jpg -------------------------------------------------------------------------------- /imgs/maps/67673/map_4052_4020_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67673/map_4052_4020_.jpg -------------------------------------------------------------------------------- /imgs/maps/67673/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/67673/target.jpg -------------------------------------------------------------------------------- /imgs/maps/70941/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/70941/init.jpg -------------------------------------------------------------------------------- /imgs/maps/70941/map_3982_3947_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/70941/map_3982_3947_.jpg -------------------------------------------------------------------------------- /imgs/maps/70941/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/70941/target.jpg -------------------------------------------------------------------------------- /imgs/maps/71729/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/71729/init.jpg -------------------------------------------------------------------------------- /imgs/maps/71729/map_4024_3869_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/71729/map_4024_3869_.jpg -------------------------------------------------------------------------------- /imgs/maps/71729/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/71729/target.jpg -------------------------------------------------------------------------------- /imgs/maps/73927/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/73927/init.jpg -------------------------------------------------------------------------------- /imgs/maps/73927/map_3960_3860_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/73927/map_3960_3860_.jpg -------------------------------------------------------------------------------- /imgs/maps/73927/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/73927/target.jpg -------------------------------------------------------------------------------- /imgs/maps/74959/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/74959/init.jpg -------------------------------------------------------------------------------- /imgs/maps/74959/map_4017_3987_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/74959/map_4017_3987_.jpg -------------------------------------------------------------------------------- /imgs/maps/74959/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/74959/target.jpg -------------------------------------------------------------------------------- /imgs/maps/78029/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78029/init.jpg -------------------------------------------------------------------------------- /imgs/maps/78029/map_3955_3910_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78029/map_3955_3910_.jpg -------------------------------------------------------------------------------- /imgs/maps/78029/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78029/target.jpg -------------------------------------------------------------------------------- /imgs/maps/78566/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78566/init.jpg -------------------------------------------------------------------------------- /imgs/maps/78566/map_4043_4071_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78566/map_4043_4071_.jpg -------------------------------------------------------------------------------- /imgs/maps/78566/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78566/target.jpg -------------------------------------------------------------------------------- /imgs/maps/78620/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78620/init.jpg -------------------------------------------------------------------------------- /imgs/maps/78620/map_4036_4062_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78620/map_4036_4062_.jpg -------------------------------------------------------------------------------- /imgs/maps/78620/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/78620/target.jpg -------------------------------------------------------------------------------- /imgs/maps/81866/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/81866/init.jpg -------------------------------------------------------------------------------- /imgs/maps/81866/map_4070_3919_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/81866/map_4070_3919_.jpg -------------------------------------------------------------------------------- /imgs/maps/81866/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/81866/target.jpg -------------------------------------------------------------------------------- /imgs/maps/84378/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/84378/init.jpg -------------------------------------------------------------------------------- /imgs/maps/84378/map_4085_4051_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/84378/map_4085_4051_.jpg -------------------------------------------------------------------------------- /imgs/maps/84378/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/84378/target.jpg -------------------------------------------------------------------------------- /imgs/maps/85880/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/85880/init.jpg -------------------------------------------------------------------------------- /imgs/maps/85880/map_4019_3966_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/85880/map_4019_3966_.jpg -------------------------------------------------------------------------------- /imgs/maps/85880/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/85880/target.jpg -------------------------------------------------------------------------------- /imgs/maps/89200/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/89200/init.jpg -------------------------------------------------------------------------------- /imgs/maps/89200/map_3936_4066_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/89200/map_3936_4066_.jpg -------------------------------------------------------------------------------- /imgs/maps/89200/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/89200/target.jpg -------------------------------------------------------------------------------- /imgs/maps/90013/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90013/init.jpg -------------------------------------------------------------------------------- /imgs/maps/90013/map_4039_3915_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90013/map_4039_3915_.jpg -------------------------------------------------------------------------------- /imgs/maps/90013/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90013/target.jpg -------------------------------------------------------------------------------- /imgs/maps/90178/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90178/init.jpg -------------------------------------------------------------------------------- /imgs/maps/90178/map_4079_3867_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90178/map_4079_3867_.jpg -------------------------------------------------------------------------------- /imgs/maps/90178/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/90178/target.jpg -------------------------------------------------------------------------------- /imgs/maps/91571/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91571/init.jpg -------------------------------------------------------------------------------- /imgs/maps/91571/map_4074_3980_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91571/map_4074_3980_.jpg -------------------------------------------------------------------------------- /imgs/maps/91571/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91571/target.jpg -------------------------------------------------------------------------------- /imgs/maps/91683/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91683/init.jpg -------------------------------------------------------------------------------- /imgs/maps/91683/map_4070_4071_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91683/map_4070_4071_.jpg -------------------------------------------------------------------------------- /imgs/maps/91683/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/91683/target.jpg -------------------------------------------------------------------------------- /imgs/maps/94807/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/94807/init.jpg -------------------------------------------------------------------------------- /imgs/maps/94807/map_4090_4066_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/94807/map_4090_4066_.jpg -------------------------------------------------------------------------------- /imgs/maps/94807/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/94807/target.jpg -------------------------------------------------------------------------------- /imgs/maps/96641/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96641/init.jpg -------------------------------------------------------------------------------- /imgs/maps/96641/map_4042_4026_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96641/map_4042_4026_.jpg -------------------------------------------------------------------------------- /imgs/maps/96641/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96641/target.jpg -------------------------------------------------------------------------------- /imgs/maps/96642/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96642/init.jpg -------------------------------------------------------------------------------- /imgs/maps/96642/map_4042_4026_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96642/map_4042_4026_.jpg -------------------------------------------------------------------------------- /imgs/maps/96642/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/96642/target.jpg -------------------------------------------------------------------------------- /imgs/maps/98940/init.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/98940/init.jpg -------------------------------------------------------------------------------- /imgs/maps/98940/map_4047_4070_.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/98940/map_4047_4070_.jpg -------------------------------------------------------------------------------- /imgs/maps/98940/target.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/maps/98940/target.jpg -------------------------------------------------------------------------------- /imgs/mask.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask.jpg -------------------------------------------------------------------------------- /imgs/mask_arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_arrow.jpg -------------------------------------------------------------------------------- /imgs/mask_arrow1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_arrow1.jpg -------------------------------------------------------------------------------- /imgs/mask_auto.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_auto.jpg -------------------------------------------------------------------------------- /imgs/mask_bless.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_bless.jpg -------------------------------------------------------------------------------- /imgs/mask_close.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_close.jpg -------------------------------------------------------------------------------- /imgs/mask_close1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_close1.jpg -------------------------------------------------------------------------------- /imgs/mask_echo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_echo.jpg -------------------------------------------------------------------------------- /imgs/mask_end.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_end.jpg -------------------------------------------------------------------------------- /imgs/mask_enhance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_enhance.jpg -------------------------------------------------------------------------------- /imgs/mask_event.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_event.jpg -------------------------------------------------------------------------------- /imgs/mask_f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_f.jpg -------------------------------------------------------------------------------- /imgs/mask_f1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_f1.jpg -------------------------------------------------------------------------------- /imgs/mask_fate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_fate.jpg -------------------------------------------------------------------------------- /imgs/mask_snack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_snack.jpg -------------------------------------------------------------------------------- /imgs/mask_strange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_strange.jpg -------------------------------------------------------------------------------- /imgs/mask_z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mask_z.jpg -------------------------------------------------------------------------------- /imgs/mini1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mini1.jpg -------------------------------------------------------------------------------- /imgs/mini2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mini2.jpg -------------------------------------------------------------------------------- /imgs/mini3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mini3.jpg -------------------------------------------------------------------------------- /imgs/mini4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/mini4.jpg -------------------------------------------------------------------------------- /imgs/money.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/money.jpg -------------------------------------------------------------------------------- /imgs/new.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/new.jpg -------------------------------------------------------------------------------- /imgs/peila.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/peila.jpg -------------------------------------------------------------------------------- /imgs/quit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/quit.jpg -------------------------------------------------------------------------------- /imgs/region.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/region.jpg -------------------------------------------------------------------------------- /imgs/reset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/reset.jpg -------------------------------------------------------------------------------- /imgs/ruan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/ruan.jpg -------------------------------------------------------------------------------- /imgs/run.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/run.jpg -------------------------------------------------------------------------------- /imgs/setting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/setting.jpg -------------------------------------------------------------------------------- /imgs/snack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/snack.jpg -------------------------------------------------------------------------------- /imgs/star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/star.jpg -------------------------------------------------------------------------------- /imgs/start.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/start.jpg -------------------------------------------------------------------------------- /imgs/strange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/strange.jpg -------------------------------------------------------------------------------- /imgs/team.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/team.jpg -------------------------------------------------------------------------------- /imgs/team4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/team4.jpg -------------------------------------------------------------------------------- /imgs/text: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/text -------------------------------------------------------------------------------- /imgs/use_atk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/use_atk.jpg -------------------------------------------------------------------------------- /imgs/use_def.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/use_def.jpg -------------------------------------------------------------------------------- /imgs/use_package.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/use_package.jpg -------------------------------------------------------------------------------- /imgs/use_replace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/use_replace.jpg -------------------------------------------------------------------------------- /imgs/use_star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/use_star.jpg -------------------------------------------------------------------------------- /imgs/yes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/yes.jpg -------------------------------------------------------------------------------- /imgs/yes1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/yes1.jpg -------------------------------------------------------------------------------- /imgs/z.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/z.jpg -------------------------------------------------------------------------------- /imgs/z1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/imgs/z1.jpg -------------------------------------------------------------------------------- /info_example.yml: -------------------------------------------------------------------------------- 1 | # info_example.yml是info.yml的样例文件 2 | # 该文件仅供参考,不会被自动化程序识别 3 | # 自动化程序只会识别info.yml 4 | # 所以修改info_example.yml没有意义! 5 | config: 6 | # 校准值 7 | angle: 1.0 8 | # 难度,1-5,(5代表最高难度,如果世界没有难度5则会选择难度4) 9 | difficulty: 5 10 | # 队伍类型 目前只支持:追击/dot/终结技/击破/盾反 11 | team: 终结技 12 | # 速通模式 13 | speed_mode: 0 14 | # 周期演算 15 | weekly_mode: 0 16 | # 图像识别强制使用cpu 17 | cpu_mode: 0 18 | # 首领房间需要开秘技的角色,按顺序开 19 | # 目前支持(不要打错字!必须一模一样): 20 | # 流萤,黄泉,波提欧,真理医生,丹恒饮月,瓦尔特杨,克拉拉,银枝,刃,希儿,景元,镜流,卡芙卡,托帕账账,黑天鹅,翡翠,云璃,砂金,椒丘,彦卿,姬子 21 | # 杰帕德,藿藿,白露,阿兰,素裳,加拉赫,知更鸟,阮梅,布洛妮娅,花火,符玄,银狼,罗刹,寒鸦,卢卡,桂乃芬,虎克,艾丝妲,米沙,佩拉,黑塔 22 | # 三月七,停云,桑博,雪衣,青雀,玲可,驭空,娜塔莎,希露瓦 23 | skill: 24 | - 符玄 25 | - 阮梅 26 | - 黄泉 27 | # 自动存档数量,0-4,0代表不存档,1-4代表自动存档到前1-4个存档位 28 | save: 0 29 | timezone: Default 30 | max_run: 34 31 | # 图像识别精度,默认1440,越高越精确,但是也越慢(最高1920) 32 | # 只推荐低性能运行环境调小数值,建议不能低于960 33 | accuracy: 1440 34 | # 传送门优先级,1-3,3代表优先级最高,1代表优先级最低 35 | # 如需自定义请将enable_portal_prior设为1 36 | # 只能修改数字,不要修改名称 37 | enable_portal_prior: 0 38 | portal_prior: 39 | 商店: 1 40 | 财富: 1 41 | 战斗: 2 42 | 遭遇: 2 43 | 奖励: 3 44 | 事件: 3 45 | 46 | key_mapping: 47 | # 交互键,只能是单个字母 48 | - f 49 | # 地图 50 | - m 51 | # 奔跑 52 | - shift 53 | # 自动战斗 54 | - v 55 | # 秘技 56 | - e 57 | # 移动 58 | - w 59 | - a 60 | - s 61 | - d 62 | # 切换角色 63 | - '1' 64 | - '2' 65 | - '3' 66 | - '4' -------------------------------------------------------------------------------- /info_example_old.yml: -------------------------------------------------------------------------------- 1 | #info_example.yml是info.yml的样例文件 2 | #该文件仅供参考,不会被自动化程序识别 3 | #自动化程序只会识别info.yml 4 | #所以修改info_example.yml没有意义! 5 | config: 6 | #配队编号,基本已经弃用,无视即可 7 | order_text: 8 | - 1 9 | - 2 10 | - 3 11 | - 4 12 | #校准值 13 | angle: 1.0 14 | #难度,1-5,(5代表最高难度,如果世界没有难度5则会选择难度4) 15 | difficulty: 5 16 | #主命途 17 | fate: 巡猎 18 | #副命途 19 | secondary_fate: 20 | - 毁灭 21 | - 巡猎 22 | - 丰饶 23 | #这些无视即可 24 | map_sha: '' 25 | show_map_mode: 0 26 | debug_mode: 0 27 | speed_mode: 0 28 | slow_mode: 0 29 | #是否自动领取沉浸奖励 30 | bonus: 0 31 | #是否使用长按进入疾跑状态,0代表不启用,1代表启用 32 | long_press_sprint: 0 33 | #0代表不使用消耗品,1代表最终boss使用消耗品,2代表最后两个boss使用消耗品,3代表所有boss都使用消耗品 34 | #自动使用第一个已星标的攻击/防御消耗品,必须收藏消耗品(星星标记) 35 | #如果不希望使用防御消耗品,可以取消所有防御消耗品的星标 36 | use_consumable: 0 37 | force_update: 0 38 | timezone: Default 39 | max_run: 34 40 | #奇物,事件和祝福的优先级。祝福优先级只对主命途生效 41 | #不要擅自更改每一部分之间的顺序 42 | #比如说调换命途顺序,删除某个命途都是不行的 43 | prior: 44 | 奇物: 45 | - 福灵胶 46 | - 博士之袍 47 | - 陨石球 48 | - 降维骰子 49 | - 信仰债券 50 | - 时空棱镜 51 | - 朋克洛德 52 | - 香涎干酪 53 | - 龋齿星系 54 | 事件: 55 | - 购买一个 56 | - 丢下雕像 57 | - 和序列扑满玩 58 | - 信仰星神 59 | - 克里珀的恩赐 60 | - 哈克的藏品 61 | - 动作片 62 | - 感恩克里珀星神 63 | - 换取1个星祝福 64 | - 星神的记载 65 | - 翻开牌 66 | - 摧毁黑匣 67 | - 1个1-星祝福 68 | - 1个1星祝福 69 | - 选择里奥 70 | 存护: 71 | - 零维强化 72 | - 均晶转变 73 | - 共晶反应 74 | - 宏观偏析 75 | - 超静定场 76 | - 谐振传递 77 | - 四棱锥体 78 | - 聚塑 79 | - 哨戒 80 | - 亚共晶体 81 | - 切变结构 82 | - 弥合 83 | - 迸裂晶格 84 | 记忆: 85 | - 体验的富翁 86 | - 全面记忆 87 | - 第二次初恋 88 | - 浮黎 89 | - 缄默 90 | - 纯真 91 | - 难言的羞耻 92 | - 怅然若失 93 | - 麻木不仁 94 | - 不寒而栗 95 | - 特立独行 96 | - 头晕目眩 97 | - 多愁善感 98 | - 沦浃肌髓 99 | 虚无: 100 | - 局外人 101 | - 苦难与阳光 102 | - 怀疑的四重根 103 | - 为何一切尚未消失 104 | - 感官追奉者的葬礼 105 | - 被装在套子里的人 106 | - 旷野的呼告 107 | - 存在的黄昏 108 | - 火堆外的夜 109 | - 知觉迷墙 110 | - 虚妄贡品 111 | - 日出之前 112 | - 无根据颂歌 113 | - 自欺咖啡馆 114 | - 他人即地狱 115 | - 开端与终结 116 | 丰饶: 117 | - 诸行无常 118 | - 诸法无我 119 | - 一法界心 120 | - 施诸愿印 121 | - 延彼遐龄 122 | - 厌离邪秽苦 123 | - 天人不动众 124 | - 宝光烛日月 125 | - 明澈琉璃身 126 | - 法雨 127 | - 胜军 128 | - 灭罪累生善 129 | 巡猎: 130 | - 柘弓危矢 131 | - 射不主皮 132 | - 帝星君临 133 | - 白矢决射御 134 | - 云镝逐步离 135 | - 彤弓素矰 136 | - 背孤击虚 137 | 毁灭: 138 | - 激变变星 139 | - 极端氦闪 140 | - 事件视界 141 | - 寰宇热寂特征数 142 | - 反物质非逆方程 143 | - 戒律性闪变 144 | - 危害性余光 145 | - 毁灭性吸积 146 | - 原生黑洞 147 | - 轨道红移 148 | - 预兆性景深 149 | - 递增性末日 150 | - 灾难性共振 151 | - 破坏性耀发 152 | - 偏振受体 153 | - 永坍缩体 154 | - 不稳定带 155 | - 哨戒卫星 156 | - 回光效应 157 | 欢愉: 158 | - 末日狂欢 159 | - 开盖有奖 160 | - 茫茫白夜 161 | - 众生安眠 162 | - 阴风阵阵 163 | - 被涂污的信天翁 164 | - 十二猴子与怒汉 165 | - 操行满分 166 | - 基本有害 167 | - 灰暗的火 168 | - 第二十一条军规 169 | - 流吧你的眼泪 170 | 繁育: 171 | - 刺吸口器 172 | - 结晶鳌刺 173 | - 酚类物质 174 | - 子囊释放 175 | - 菌种脓疤 176 | - 镰刀肢足 177 | - 腐殖疮 178 | - 裂解酶 179 | - 代谢腔 180 | - 裸脑质 181 | - 代谢腔 182 | - 催化剂 183 | - 节间膜 184 | - 孢夹 185 | - 骨刃 186 | - 鳞翅 187 | - 脊刺 188 | - 槽针 189 | - 液囊 190 | 智识: 191 | - 34型灰质 192 | - 2型杏仁核 193 | - 18型枕叶 194 | - 前庭系统 195 | - 递质合成 196 | - 外显记忆 197 | - 触觉通路 198 | - 阈下知觉 199 | - 纹状皮层 200 | - 跳跃传导 201 | - 齿轮啮合的王座 202 | - 导线弯绕的指环 203 | - 能量变距的权杖 204 | - 偏时引燃的炬火 205 | - 延迟衍射的烛光 206 | - 金属斑驳的华盖 207 | - 管道交错的桂冠 208 | - 线圈编制的罗琦 209 | #键盘映射,每行只能修改,绝对不能删除/增加行 210 | key_mapping: 211 | #交互键,只能是单个字母 212 | - f 213 | #地图 214 | - m 215 | #奔跑 216 | - shift 217 | #自动战斗 218 | - v 219 | #秘技 220 | - e 221 | #移动 222 | - w 223 | - a 224 | - s 225 | - d 226 | #切换角色 227 | - '1' 228 | - '2' 229 | - '3' 230 | - '4' -------------------------------------------------------------------------------- /install_requirements.bat: -------------------------------------------------------------------------------- 1 | %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit 2 | cd/d "%~dp0" 3 | pip install -r requirements.txt -i https://pypi.doubanio.com/simple/ 4 | pause 5 | -------------------------------------------------------------------------------- /notif.py: -------------------------------------------------------------------------------- 1 | import os 2 | import ctypes 3 | import time 4 | from PIL import Image 5 | from pystray import Icon, MenuItem as item 6 | import threading 7 | import sys 8 | import os 9 | from winotify import Notification 10 | import psutil 11 | 12 | def notif(title,msg): 13 | Notification(app_id="椰羊自动化",title=title,msg=msg,icon=os.getcwd() + "\\imgs\\icon.png").show() 14 | 15 | def exit_program(icon, item): 16 | icon.stop() 17 | os._exit(0) 18 | 19 | def maopao(icon=None, item=None): 20 | file_name = 'logs/notif.txt' 21 | cnt='0' 22 | tm=None 23 | if os.path.exists(file_name): 24 | with open(file_name, 'r', encoding="utf-8",errors='ignore') as file: 25 | s=file.readlines() 26 | cnt=s[0].strip('\n') 27 | try: 28 | tm=s[3].strip('\n') 29 | except: 30 | pass 31 | if tm is None: 32 | tm = str(time.time()) 33 | os.makedirs('logs',exist_ok=1) 34 | with open(file_name, 'w', encoding="utf-8") as file: 35 | file.write(f"{cnt}\n喵\n计数:{cnt}\n{tm}") 36 | 37 | 38 | def clear(icon=None, item=None): 39 | file_name = 'logs/notif.txt' 40 | tm = time.time() 41 | if os.path.exists(file_name): 42 | with open(file_name, 'w', encoding="utf-8",errors='ignore') as file: 43 | file.write('0\n清零\n计数:0\n{tm}') 44 | 45 | def notify(): 46 | file_name = 'logs/notif.txt' 47 | if not os.path.exists(file_name): 48 | with open(file_name, 'w', encoding="utf-8") as file: 49 | file.write("0") 50 | last = os.path.getmtime(file_name) 51 | while 1: 52 | time.sleep(0.5) 53 | if last != os.path.getmtime(file_name): 54 | with open(file_name,'r', encoding="utf-8",errors='ignore') as fh: 55 | s=fh.readlines() 56 | if len(s)>=3: 57 | notif(s[1].strip('\n'),s[2].strip('\n')) 58 | last = os.path.getmtime(file_name) 59 | 60 | def main(): 61 | # 检测程序是否已经在运行 62 | mutex = ctypes.windll.kernel32.CreateMutexW(None, False, "YEYANG_MyProgramMutex") 63 | if ctypes.windll.kernel32.GetLastError() == 183: 64 | ctypes.windll.user32.MessageBoxW(0, "程序已在运行!", "提示", 0x40) 65 | return 66 | 67 | # 创建系统托盘图标 68 | image = Image.open("imgs/icon.png") 69 | icon = Icon("椰羊自动化", image, "椰羊自动化") 70 | menu = ( 71 | item('冒泡', maopao), 72 | item('清零', clear), 73 | item('退出', exit_program), 74 | ) 75 | icon.menu = menu 76 | maopao() 77 | 78 | ''' 79 | try: 80 | mynd = list_handles(f=lambda n:"notif" in n[-9:])[0] 81 | win32gui.ShowWindow(mynd, 0) 82 | except: 83 | pass 84 | ''' 85 | 86 | t_notify = threading.Thread(target=notify) 87 | t_notify.start() 88 | # 显示系统托盘图标 89 | icon.run() 90 | 91 | 92 | if __name__ == '__main__': 93 | main() -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | opencv_python 2 | PyAutoGUI 3 | pywin32 4 | flet==0.23.2 5 | flet_core==0.23.2 6 | pyinstaller 7 | pyuac 8 | pillow 9 | keyboard 10 | requests 11 | onnxruntime-directml 12 | shapely 13 | pyclipper 14 | pyscreeze==0.1.28 15 | tzdata 16 | tzlocal 17 | pytz 18 | pyyaml 19 | winotify 20 | pystray 21 | psutil 22 | mss 23 | numpy==1.26.4 -------------------------------------------------------------------------------- /start.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/start.mp3 -------------------------------------------------------------------------------- /utils/diver/args.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | from utils.diver.config import config 4 | def str2bool(v): 5 | return v.lower() in ("true", "t", "1") 6 | parser = argparse.ArgumentParser() 7 | parser.add_argument('--debug', help='Debug mode', default=False, action='store_true') 8 | parser.add_argument('--nums', type=int, help='Num of excution', default=config.max_run) 9 | parser.add_argument('--speed', help='Speed mode', default=False, action='store_true') 10 | parser.add_argument('--cpu', help='Cpu mode', default=False, action='store_true') 11 | args = parser.parse_args() -------------------------------------------------------------------------------- /utils/diver/config.py: -------------------------------------------------------------------------------- 1 | import os 2 | from typing import List, Dict, Union 3 | import yaml 4 | import sys 5 | import json 6 | 7 | class Config: 8 | def __init__(self): 9 | self.abspath = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) # 获取项目根目录../Auto_Simulated_Universe 10 | if getattr(sys, 'frozen', False): 11 | self.abspath = '.' 12 | self.angle = "1.0" 13 | self.difficult = "5" 14 | self.allow_difficult = [1, 2, 3, 4, 5] 15 | self.text = "info.yml" 16 | self.skill_char = ['符玄', '阮梅', '黄泉'] 17 | 18 | # 推测定义的是远程角色 19 | self.long_range_list = ['丹恒饮月','克拉拉','青雀','波提欧','托帕账账','彦卿','符玄','砂金','三月七','娜塔莎','阮梅','知更鸟','布洛妮娅','艾丝妲','驭空','黑天鹅','瓦尔特杨','佩拉','大黑塔','忘归人','星期日','灵砂','缇宝'] 20 | 21 | self.all_list = ['流萤','黄泉','波提欧','真理医生','丹恒饮月','瓦尔特杨','克拉拉','银枝','刃','希儿','景元','镜流','卡芙卡','托帕账账','黑天鹅','翡翠','云璃','砂金','椒丘','彦卿','姬子','杰帕德','藿藿','白露','阿兰','素裳','加拉赫','知更鸟','阮梅','布洛妮娅','花火','符玄','银狼','罗刹','寒鸦','卢卡','桂乃芬','虎克','艾丝妲','米沙','佩拉','黑塔','三月七','停云','桑博','雪衣','青雀','玲可','驭空','娜塔莎','希露瓦','大黑塔','忘归人','星期日','灵砂','缇宝'] 22 | self.angles = [912,891,870,848,828,805,784,765,745,724,704,685,667,648,629,612,594,574,557,538,523,505,489,472,456,438,422,408,391,374,358,342,327,313,297,280,265,251,235,222,205,192,160,146,134,118,101,87,73,59,44,28,12,0,-14,-31,-45,-56,-76,-89,-99,-117,-131,-145,-152,-173,-196,-206,-221,-235,-255,-268,-284,-297,-311,-329,-339,-354,-375,-391,-407,-422,-440,-457,-473,-486,-506,-523,-540,-555,-576,-592,-613,-630,-649,-668,-687,-707,-725,-744,-765,-786,-807,-827,-849,-872,-893,-907,-918] 23 | self.angles = self.angles[::-1] 24 | self.long_press_sprint = 0 25 | self.debug_mode = 0 26 | self.speed_mode = 0 27 | self.weekly_mode = 0 28 | self.cpu_mode = 0 29 | self.save_cnt = 4 30 | self.accuracy = 1440 31 | self.enable_portal_prior = 0 32 | self.portal_prior = {'奖励':3, '事件':3, '战斗':2, '遭遇':2, '商店':1, '财富':1} 33 | self.team = '终结技' 34 | self.timezones = ['America', 'Asia', 'Europe', 'Default'] 35 | self.timezone = 'Default' 36 | self.origin_key = ['f','m','shift','v','e','w','a','s','d','1','2','3','4'] 37 | self.mapping = self.origin_key 38 | self.max_run = 34 39 | self.match = json.load(open('actions/character.json', 'r', encoding='utf-8')) 40 | self.read() 41 | 42 | @property 43 | def multi(self) -> float: 44 | x = float(self.angle) 45 | if x > 5: 46 | self.angle = '1.0' 47 | return 1.0 48 | elif x > 2: 49 | return x - 2 50 | else: 51 | return x 52 | 53 | @property 54 | def diffi(self) -> int: 55 | return int(self.difficult) if int(self.difficult) in self.allow_difficult else 5 56 | 57 | def clean_text(self, text, char=1): 58 | symbols = r"[!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~—“”‘’«»„…·¿¡£¥€©®™°±÷×¶§‰],。!?;:()【】「」《》、¥" 59 | if char: 60 | symbols += r"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 61 | translator = str.maketrans('', '', symbols) 62 | return text.translate(translator) 63 | 64 | def update_skill(self, skill: List[str]): 65 | self.skill_char = [] 66 | for i in skill: 67 | i = self.clean_text(i, 0) 68 | 69 | # 匹配character.json中的数据,这里面是为了对策ocr无法准确识别导致的错别字么,但是还有很多别名? 70 | if i in self.match: 71 | i = self.match[i] 72 | 73 | # 匹配全部角色,是不是考虑配置为外部json更合适? 74 | if i in self.all_list: 75 | self.skill_char.append(i) 76 | 77 | elif i in ['1', '2', '3', '4']: 78 | self.skill_char.append(i) 79 | 80 | # 未导入log类,暂时用print应付调试 81 | print(f"秘技列表:{self.skill_char}") 82 | 83 | 84 | def read(self): 85 | if os.path.exists(os.path.join(self.abspath, self.text)): 86 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 87 | config: Dict[str, Union[int, float, str, List[int]]] = yaml.safe_load(f)['config'] 88 | try: 89 | self.angle = str(config['angle']) 90 | self.difficult = config['difficulty'] 91 | self.team = config['team'] 92 | self.speed_mode = config['speed_mode'] 93 | self.weekly_mode = config['weekly_mode'] 94 | self.cpu_mode = config['cpu_mode'] 95 | self.update_skill(config['skill']) 96 | self.timezone = config['timezone'] 97 | self.max_run = config['max_run'] 98 | self.save_cnt = config['save'] 99 | self.accuracy = config['accuracy'] 100 | self.enable_portal_prior = config['enable_portal_prior'] 101 | self.portal_prior = config['portal_prior'] 102 | except: 103 | pass 104 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 105 | try: 106 | self.mapping = yaml.safe_load(f)['key_mapping'] 107 | except: 108 | pass 109 | else: 110 | self.save() 111 | 112 | def save(self): 113 | with open(os.path.join(self.abspath, self.text), "w", encoding="utf-8") as f: 114 | yaml.safe_dump({ 115 | "config": { 116 | "angle": float(self.angle), 117 | "difficulty": self.diffi, 118 | "team": self.team, 119 | "speed_mode": self.speed_mode, 120 | "weekly_mode": self.weekly_mode, 121 | "cpu_mode": self.cpu_mode, 122 | "skill": self.skill_char, 123 | "save": self.save_cnt, 124 | "timezone": self.timezone, 125 | "max_run": self.max_run, 126 | "accuracy": self.accuracy, 127 | "enable_portal_prior": self.enable_portal_prior, 128 | "portal_prior": self.portal_prior 129 | }, 130 | "key_mapping": self.mapping 131 | }, f, allow_unicode=True, sort_keys=False) 132 | 133 | 134 | config = Config() 135 | -------------------------------------------------------------------------------- /utils/diver/keyops.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | from utils.diver.config import config 3 | import time 4 | import threading 5 | 6 | def get_mapping(x): 7 | if x in config.origin_key: 8 | x = config.mapping[config.origin_key.index(x)] 9 | return x 10 | 11 | def keyDown(x): 12 | pyautogui.keyDown(get_mapping(x)) 13 | def keyUp(x): 14 | if config.long_press_sprint and x=='w': 15 | pyautogui.keyUp(get_mapping('shift')) 16 | pyautogui.keyUp(get_mapping(x)) 17 | 18 | class KeyController: 19 | def __init__(self, father): 20 | self.events = [] 21 | self.fff = 0 22 | self.father = father 23 | threading.Thread(target=self.loop).start() 24 | 25 | def loop(self): 26 | while not self.father._stop: 27 | if self.fff: 28 | keyDown('f') 29 | time.sleep(0.02) 30 | keyUp('f') 31 | else: 32 | time.sleep(0.1) 33 | for event in self.events: 34 | if event['type']=='down': 35 | keyDown(event['key']) 36 | elif event['type']=='up': 37 | keyUp(event['key']) -------------------------------------------------------------------------------- /utils/diver/ocr.py: -------------------------------------------------------------------------------- 1 | from utils.onnxocr.onnx_paddleocr import ONNXPaddleOcr 2 | from utils.diver.args import args 3 | import numpy as np 4 | import cv2 as cv 5 | from utils.log import log 6 | from functools import cmp_to_key 7 | import time 8 | 9 | # mode: bless1 bless2 strange 10 | 11 | class My_TS: 12 | def __init__(self,lang='ch',father=None): 13 | self.lang=lang 14 | self.ts = ONNXPaddleOcr(use_angle_cls=False, cpu=args.cpu) 15 | self.res=[] 16 | self.forward_img = None 17 | self.father = father 18 | 19 | def ocr_one_row(self, img, box=None): 20 | if box is None: 21 | return self.ts.text_recognizer([img])[0][0] 22 | else: 23 | return self.ts.text_recognizer([img[box[2]:box[3],box[0]:box[1]]])[0][0] 24 | 25 | def is_edit_distance_at_most_one(self, str1, str2, ch): 26 | length = len(str1) 27 | diff_count = sum(1 for i in range(length) if str1[i] != str2[i]) 28 | if diff_count <= 1: 29 | return 1 30 | i = 0 31 | j = 0 32 | diff_count = 0 33 | str2 += ch 34 | while i < length and j < length + 1: 35 | if str1[i] != str2[j]: 36 | diff_count += 1 37 | j += 1 38 | else: 39 | i += 1 40 | j += 1 41 | 42 | return diff_count <= 1 43 | 44 | def sort_text(self, text): 45 | def compare(item1, item2): 46 | x1, _, y1, _ = item1['box'] 47 | x2, _, y2, _ = item2['box'] 48 | if abs(y1 - y2) <= 7: 49 | return x1 - x2 50 | return y1 - y2 51 | text = sorted(text, key=cmp_to_key(compare)) 52 | return text 53 | 54 | def merge(self, text): 55 | if len(text) == 0: 56 | return text 57 | text = self.sort_text(text) 58 | res = [] 59 | merged = text[0] 60 | for i in range(1, len(text)): 61 | if abs(text[i]['box'][2] - merged['box'][2]) <= 10 and abs(text[i]['box'][3] - merged['box'][3]) <= 10 and abs(text[i]['box'][0] - merged['box'][1]) <= 35: 62 | merged['raw_text'] += text[i]['raw_text'] 63 | merged['box'][1] = text[i]['box'][1] 64 | else: 65 | res.append(merged) 66 | merged = text[i] 67 | res.append(merged) 68 | return res 69 | 70 | def filter_non_white(self, image, mode=0): 71 | if not mode: 72 | return image 73 | hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV) 74 | lower_white = np.array([0, 0, 160]) 75 | upper_white = np.array([180, 40, 255]) 76 | mask = cv.inRange(hsv_image, lower_white, upper_white) 77 | if mode == 1: 78 | filtered_image = cv.bitwise_and(image, image, mask=mask) 79 | return filtered_image 80 | elif mode == 2: 81 | lower_black = np.array([0, 0, 0]) 82 | upper_black = np.array([180, 40, 50]) 83 | mask_black = cv.inRange(hsv_image, lower_black, upper_black) 84 | kernel = np.ones((5, 30), np.uint8) 85 | mask_black = cv.dilate(mask_black, kernel, iterations=1) 86 | filtered_image = cv.bitwise_and(image, image, mask=mask & mask_black) 87 | return filtered_image 88 | 89 | def forward(self, img): 90 | if self.forward_img is not None and self.forward_img.shape == img.shape and np.sum(np.abs(self.forward_img-img))<1e-6: 91 | return 92 | tm = time.time() 93 | self.forward_img = img 94 | self.res = [] 95 | ocr_res = self.ts.ocr(img) 96 | for res in ocr_res: 97 | res = {'raw_text': res[1][0], 'box': np.array(res[0]), 'score': res[1][1]} 98 | res['box'] = [int(np.min(res['box'][:,0])),int(np.max(res['box'][:,0])),int(np.min(res['box'][:,1])),int(np.max(res['box'][:,1]))] 99 | self.res.append(res) 100 | self.res = self.merge(self.res) 101 | # time.sleep(max(0,0.5-(time.time()-tm))) 102 | 103 | def find_with_text(self, text=[]): 104 | ans = [] 105 | for txt in text: 106 | for res in self.res: 107 | if res['raw_text'] in txt or txt in res['raw_text']: 108 | print("识别到文本:",txt,"匹配文本:",self.text) 109 | ans.append({'text':text, **res}) 110 | return sorted(ans, key=lambda x: x['score'], reverse=True) 111 | 112 | def box_contain(self, box_out, box_in, redundancy): 113 | if type(redundancy) in [tuple, list]: 114 | r = redundancy 115 | else: 116 | r = (redundancy, redundancy) 117 | return box_out[0]<=box_in[0]+r[0] and box_out[1]>=box_in[1]-r[0] and box_out[2]<=box_in[2]+r[1] and box_out[3]>=box_in[3]-r[1] 118 | 119 | def find_with_box(self, box=None, redundancy=10, forward=0, mode=0): 120 | if forward and box is not None: 121 | self.forward(self.filter_non_white(self.father.get_screen()[box[2]:box[3],box[0]:box[1]], mode=mode)) 122 | if box[3]==540 or box[3] == 350 and self.father.debug: 123 | tm = str(int(time.time()*100)%1000000) 124 | cv.imwrite('img/'+tm+'.jpg',self.father.screen[box[2]:box[3],box[0]:box[1]]) 125 | cv.imwrite('img/'+tm+'w.jpg',self.filter_non_white(self.father.screen[box[2]:box[3],box[0]:box[1]], mode=mode)) 126 | ans = [] 127 | for res in self.res: 128 | if box is None: 129 | print(res['raw_text'], res['box']) 130 | elif forward == 0: 131 | if self.box_contain(box, res['box'], redundancy=redundancy): 132 | ans.append(res) 133 | else: 134 | res['box'] = [box[0]+res['box'][0], box[0]+res['box'][1], box[2]+res['box'][2], box[2]+res['box'][3]] 135 | ans.append(res) 136 | return self.sort_text(ans) 137 | 138 | class text_keys: 139 | def __init__(self,fate=4): 140 | self.fate=fate 141 | self.interacts = ['造物调试台', '复活装置'] 142 | self.fates = ["存护", "记忆", "虚无", "丰饶", "巡猎", "毁灭", "欢愉", "繁育", "智识"] 143 | self.prior_bless = ['火堆外的夜'] 144 | self.strange = [] 145 | self.blesses = [[] for _ in range(9)] 146 | self.strange = ['福灵胶', '博士之袍', '陨石球', '降维骰子', '信仰债券', '时空棱镜', '朋克洛德', '香涎干酪', 147 | '龋齿星系'] 148 | self.blesses[0] = ['零维强化', '均晶转变', '共晶反应', '宏观偏析', '超静定场', '谐振传递', '四棱锥体', '聚塑', 149 | '哨戒', '亚共晶体', '切变结构', '弥合', '迸裂晶格'] 150 | self.blesses[1] = ['体验的富翁', '全面记忆', '第二次初恋', '浮黎', '缄默', '纯真', '难言的羞耻', '怅然若失', 151 | '麻木不仁', '不寒而栗', '特立独行', '头晕目眩', '多愁善感', '沦浃肌髓'] 152 | self.blesses[2] = ['苦难与阳光', '怀疑的四重根', '局外人', '为何一切尚未消失', '感官追奉者的葬礼', 153 | '被装在套子里的人', '旷野的呼告', '存在的黄昏', '火堆外的夜', '知觉迷墙', '虚妄贡品', 154 | '日出之前', '无根据颂歌', '自欺咖啡馆', '他人即地狱', '开端与终结'] 155 | self.blesses[3] = ['诸行无常', '诸法无我', '一法界心', '施诸愿印', '延彼遐龄', '厌离邪秽苦', '天人不动众', 156 | '宝光烛日月', '明澈琉璃身', '法雨', '胜军', '灭罪累生善'] 157 | self.blesses[4] = ['柘弓危矢', '射不主皮', '帝星君临', '白矢决射御', '云镝逐步离', '彤弓素矰', '背孤击虚'] 158 | self.blesses[5] = ['激变变星', '极端氦闪', '事件视界', '寰宇热寂特征数', '反物质非逆方程', '戒律性闪变', 159 | '危害性余光', '毁灭性吸积', '原生黑洞', '轨道红移', '预兆性景深', '递增性末日', '灾难性共振', 160 | '破坏性耀发', '偏振受体', '永坍缩体', '不稳定带', '哨戒卫星', '回光效应'] 161 | self.blesses[6] = ['末日狂欢', '开盖有奖', '茫茫白夜', '众生安眠', '阴风阵阵', '被涂污的信天翁', 162 | '十二猴子与怒汉', '操行满分', '基本有害', '灰暗的火', '第二十一条军规', '流吧你的眼泪'] 163 | self.blesses[7] = ['刺吸口器', '结晶鳌刺', '酚类物质', '子囊释放', '菌种脓疤', '镰刀肢足', '腐殖疮', '裂解酶', 164 | '代谢腔', '裸脑质', '代谢腔', '催化剂', '节间膜', '孢夹', '骨刃', '鳞翅', '脊刺', '槽针', 165 | '液囊'] 166 | self.blesses[8] = ['34型灰质', '2型杏仁核', '18型枕叶', '前庭系统', '递质合成', '外显记忆', '触觉通路', 167 | '阈下知觉', '纹状皮层', '跳跃传导', '齿轮啮合的王座', '导线弯绕的指环', '能量变距的权杖', 168 | '偏时引燃的炬火', '延迟衍射的烛光', '金属斑驳的华盖', '线圈编制的罗琦', '管道交错的桂冠'] 169 | self.secondary = ['巡猎', '毁灭', '丰饶'] 170 | try: 171 | import yaml 172 | with open('info.yml', "r", encoding="utf-8",errors='ignore') as f: 173 | config = yaml.safe_load(f)['prior'] 174 | with open('info.yml', "r", encoding="utf-8",errors='ignore') as f: 175 | try: 176 | self.secondary = yaml.safe_load(f)['config']['secondary_fate'] 177 | except: 178 | pass 179 | for i,j in enumerate(config): 180 | if i>1: 181 | self.blesses[i-2] = config[j] 182 | elif i==0: 183 | self.strange = config[j] 184 | except: 185 | pass 186 | self.prior_bless += self.blesses[fate] 187 | self.skip = 1 188 | for s in self.prior_bless: 189 | if '回归不等式' in s: 190 | self.skip = 0 191 | self.strange = [self.fates[self.fate]+'火漆'] + self.strange 192 | self.secondary = [self.fates[self.fate]] + self.secondary 193 | -------------------------------------------------------------------------------- /utils/gui/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/utils/gui/__init__.py -------------------------------------------------------------------------------- /utils/gui/abyss.py: -------------------------------------------------------------------------------- 1 | from flet_core import MainAxisAlignment, ControlEvent, CrossAxisAlignment 2 | import flet as ft 3 | 4 | from utils.gui.common import show_snack_bar, Page 5 | import yaml 6 | import traceback 7 | from abyss import Abyss 8 | import os 9 | 10 | def abyss_view(page: Page): 11 | order = ['1 2 3 4','5 6 7 8'] 12 | try: 13 | with open('abyss/info.yml', "r", encoding="utf-8",errors='ignore') as f: 14 | config = yaml.safe_load(f)['order_text'] 15 | config = [str(x) for x in config] 16 | order=[' '.join(config[:4]),' '.join(config[4:])] 17 | except: 18 | os.makedirs('abyss', exist_ok=True) 19 | pass 20 | 21 | def back_choose(_): 22 | try: 23 | page.ab._stop = 1 24 | except: 25 | pass 26 | page.go("/") 27 | page.update() 28 | 29 | def start(_e): 30 | nonlocal order 31 | order = [x.strip().split(' ') for x in order] 32 | for i in range(2): 33 | ls = [] 34 | for j in order[i]: 35 | try: 36 | ls.append(int(j)) 37 | except: 38 | pass 39 | ls += [0,0,0,0] 40 | order[i] = ls[:4] 41 | os.makedirs('abyss', exist_ok=True) 42 | with open('abyss/info.yml', "w", encoding="utf-8") as f: 43 | yaml.safe_dump({ 44 | "order_text": order[0] + order[1] 45 | }, f, allow_unicode=True, sort_keys=False) 46 | try: 47 | page.ab._stop = 1 48 | except: 49 | pass 50 | page.ab = Abyss() 51 | page.ab.start_abyss() 52 | 53 | def stop(_e): 54 | try: 55 | page.ab._stop = 1 56 | except: 57 | pass 58 | 59 | 60 | def order_changed1(e): 61 | nonlocal order 62 | order[0] = e.control.value 63 | 64 | def order_changed2(e): 65 | nonlocal order 66 | order[1] = e.control.value 67 | 68 | 69 | page.views.append( 70 | ft.View( 71 | "/abyss", 72 | [ 73 | ft.Stack( 74 | [ 75 | ft.Container( 76 | content=ft.Row( 77 | [ 78 | ft.Text( 79 | value="自动忘却之庭", 80 | size=30, 81 | ), 82 | ft.Row( 83 | [ 84 | ft.ElevatedButton( 85 | "返回", 86 | icon=ft.icons.ARROW_BACK, 87 | on_click=back_choose, 88 | ) 89 | ], 90 | alignment=MainAxisAlignment.CENTER, 91 | spacing=50, 92 | ), 93 | ], 94 | alignment=MainAxisAlignment.SPACE_BETWEEN, 95 | ), 96 | padding=10, 97 | ), 98 | ] 99 | ), 100 | ft.Divider( 101 | height=1, 102 | ), 103 | ft.Row( 104 | [ 105 | ft.Column( 106 | [ 107 | ft.TextField( 108 | label="配队1", 109 | width=80, 110 | value=order[0], 111 | on_change=order_changed1, 112 | ), 113 | ft.TextField( 114 | label="配队2", 115 | width=80, 116 | value=order[1], 117 | on_change=order_changed2, 118 | ), 119 | ft.ElevatedButton( 120 | "保存并开始", 121 | icon=ft.icons.LOGIN, 122 | on_click=start, 123 | ), 124 | ft.ElevatedButton( 125 | "停止", 126 | icon=ft.icons.STOP, 127 | on_click=stop, 128 | ), 129 | ], 130 | alignment=MainAxisAlignment.SPACE_AROUND, 131 | horizontal_alignment=CrossAxisAlignment.CENTER, 132 | ), 133 | ], 134 | alignment=MainAxisAlignment.CENTER, 135 | vertical_alignment=CrossAxisAlignment.CENTER, 136 | height=350, 137 | ), 138 | ], 139 | padding=20, 140 | spacing=0, 141 | ) 142 | ) 143 | -------------------------------------------------------------------------------- /utils/gui/common.py: -------------------------------------------------------------------------------- 1 | from typing import Optional, Union 2 | 3 | import flet as ft 4 | import win32gui 5 | 6 | from simul import SimulatedUniverse 7 | from diver import DivergentUniverse 8 | from abyss import Abyss 9 | 10 | 11 | class Page(ft.Page): 12 | su: Optional[Union[SimulatedUniverse, DivergentUniverse]] 13 | ab: Optional[Abyss] 14 | first: int 15 | bonus: bool 16 | 17 | 18 | def init_page(page: Page): 19 | page.su = None 20 | page.ab = None 21 | page.first = 1 22 | 23 | 24 | def show_snack_bar(page, text, color, selectable=False): 25 | return page.show_snack_bar( 26 | ft.SnackBar( 27 | open=True, 28 | content=ft.Text(text, selectable=selectable), 29 | bgcolor=color, 30 | ) 31 | ) 32 | 33 | 34 | def cleanup(): 35 | pass 36 | 37 | 38 | def enum_windows_callback(hwnd, hwnds, name): 39 | class_name = win32gui.GetClassName(hwnd) 40 | window_name = win32gui.GetWindowText(hwnd) 41 | try: 42 | if ( 43 | name == window_name 44 | ): 45 | hwnds.append(hwnd) 46 | except: 47 | pass 48 | return True 49 | 50 | 51 | def list_handles(name='AutoSimulatedUniverse'): 52 | hwnds = [] 53 | win32gui.EnumWindows(lambda a,b:enum_windows_callback(a,b,name=name), hwnds) 54 | hwnds.append(0) 55 | return hwnds[0] 56 | -------------------------------------------------------------------------------- /utils/log.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import io 3 | import traceback 4 | from logging import ( 5 | getLogger, 6 | StreamHandler, 7 | FileHandler, 8 | Formatter, 9 | basicConfig, 10 | INFO, 11 | DEBUG, 12 | CRITICAL, 13 | ) 14 | from pathlib import Path 15 | from datetime import datetime 16 | 17 | logs_path = Path("logs") 18 | logs_path.mkdir(exist_ok=True, parents=True) 19 | 20 | current_time_str = datetime.now().strftime("%Y-%m-%d-%H-%M") 21 | 22 | log = getLogger() 23 | log.setLevel(INFO) 24 | 25 | logging_format = "%(levelname)s [%(asctime)s] [%(filename)s:%(lineno)d] %(message)s" 26 | formatter = Formatter(logging_format) 27 | 28 | stream_handler = StreamHandler() 29 | stream_handler.setFormatter(formatter) 30 | 31 | file_handler = FileHandler(filename=logs_path / "log.txt", mode="w", encoding="utf-8") 32 | file_handler.setFormatter(formatter) 33 | 34 | timestamped_file_handler = FileHandler(filename=logs_path / f"log_{current_time_str}.txt", mode="w", encoding="utf-8") 35 | timestamped_file_handler.setFormatter(formatter) 36 | 37 | log.addHandler(stream_handler) 38 | log.addHandler(file_handler) 39 | log.addHandler(timestamped_file_handler) 40 | 41 | flet = getLogger("flet") 42 | flet.setLevel(CRITICAL) 43 | flet_core = getLogger("flet_core") 44 | flet_core.setLevel(CRITICAL) 45 | 46 | basicConfig(level=INFO) 47 | 48 | def set_debug(debug: bool = False): 49 | log.setLevel(DEBUG if debug else INFO) 50 | 51 | set_debug() 52 | 53 | def my_print(*args, **kwargs): 54 | log.info(" ".join(map(str, args))) 55 | if len(kwargs): 56 | print(*args, **kwargs) 57 | 58 | def print_exc(): 59 | with io.StringIO() as buf, open("logs/error_log.txt", "a") as f: 60 | traceback.print_exc(file=buf) 61 | f.write(buf.getvalue()) -------------------------------------------------------------------------------- /utils/models/v3_det.onnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/utils/models/v3_det.onnx -------------------------------------------------------------------------------- /utils/models/v4_rec.onnx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CHNZYX/Auto_Simulated_Universe/196b70017062e3e07ef0dd59bd9a6996b4cc78db/utils/models/v4_rec.onnx -------------------------------------------------------------------------------- /utils/onnxocr/cls_postprocess.py: -------------------------------------------------------------------------------- 1 | 2 | # import paddle 3 | 4 | 5 | class ClsPostProcess(object): 6 | """ Convert between text-label and text-index """ 7 | 8 | def __init__(self, label_list=None, key=None, **kwargs): 9 | super(ClsPostProcess, self).__init__() 10 | self.label_list = label_list 11 | self.key = key 12 | 13 | def __call__(self, preds, label=None, *args, **kwargs): 14 | if self.key is not None: 15 | preds = preds[self.key] 16 | 17 | label_list = self.label_list 18 | if label_list is None: 19 | label_list = {idx: idx for idx in range(preds.shape[-1])} 20 | 21 | # if isinstance(preds, paddle.Tensor): 22 | # preds = preds.numpy() 23 | 24 | pred_idxs = preds.argmax(axis=1) 25 | decode_out = [(label_list[idx], preds[i, idx]) 26 | for i, idx in enumerate(pred_idxs)] 27 | if label is None: 28 | return decode_out 29 | label = [(label_list[idx], 1.0) for idx in label] 30 | return decode_out, label 31 | -------------------------------------------------------------------------------- /utils/onnxocr/imaug.py: -------------------------------------------------------------------------------- 1 | from .operators import * 2 | 3 | def transform(data, ops=None): 4 | """ transform """ 5 | if ops is None: 6 | ops = [] 7 | for op in ops: 8 | data = op(data) 9 | if data is None: 10 | return None 11 | return data 12 | 13 | 14 | def create_operators(op_param_list, global_config=None): 15 | """ 16 | create operators based on the config 17 | 18 | Args: 19 | params(list): a dict list, used to create some operators 20 | """ 21 | assert isinstance(op_param_list, list), ('operator config should be a list') 22 | ops = [] 23 | for operator in op_param_list: 24 | assert isinstance(operator, 25 | dict) and len(operator) == 1, "yaml format error" 26 | op_name = list(operator)[0] 27 | param = {} if operator[op_name] is None else operator[op_name] 28 | if global_config is not None: 29 | param.update(global_config) 30 | op = eval(op_name)(**param) 31 | ops.append(op) 32 | return ops -------------------------------------------------------------------------------- /utils/onnxocr/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | LogName = 'Umi-OCR_log' 4 | LogFileName = 'Umi-OCR_debug.log' 5 | 6 | 7 | class Logger: 8 | 9 | def __init__(self): 10 | self.initLogger() 11 | 12 | def initLogger(self): 13 | '''初始化日志''' 14 | 15 | # 日志 16 | self.logger = logging.getLogger(LogName) 17 | self.logger.setLevel(logging.DEBUG) 18 | 19 | # 控制台 20 | streamHandler = logging.StreamHandler() 21 | streamHandler.setLevel(logging.DEBUG) 22 | formatPrint = logging.Formatter( 23 | '【%(levelname)s】 %(message)s') 24 | streamHandler.setFormatter(formatPrint) 25 | # self.logger.addHandler(streamHandler) 26 | 27 | return 28 | # 日志文件 29 | fileHandler = logging.FileHandler(LogFileName) 30 | fileHandler.setLevel(logging.ERROR) 31 | formatFile = logging.Formatter( 32 | ''' 33 | 【%(levelname)s】 %(asctime)s 34 | %(message)s 35 | 文件:%(module)s | 函数:%(funcName)s | 行号:%(lineno)d 36 | 线程id:%(thread)d | 线程名:%(thread)s''') 37 | fileHandler.setFormatter(formatFile) 38 | self.logger.addHandler(fileHandler) 39 | 40 | 41 | LOG = Logger() 42 | 43 | 44 | def GetLog(): 45 | return LOG.logger 46 | -------------------------------------------------------------------------------- /utils/onnxocr/onnx_paddleocr.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | from .predict_system import TextSystem 4 | from .utils import infer_args as init_args 5 | from .utils import str2bool, draw_ocr 6 | import argparse 7 | import sys 8 | 9 | 10 | class ONNXPaddleOcr(TextSystem): 11 | def __init__(self, **kwargs): 12 | # 默认参数 13 | parser = init_args() 14 | inference_args_dict = {} 15 | for action in parser._actions: 16 | inference_args_dict[action.dest] = action.default 17 | params = argparse.Namespace(**inference_args_dict) 18 | 19 | 20 | # params.rec_image_shape = "3, 32, 320" 21 | params.rec_image_shape = "3, 48, 320" 22 | 23 | # 根据传入的参数覆盖更新默认参数 24 | params.__dict__.update({"cpu": False}) 25 | params.__dict__.update(**kwargs) 26 | 27 | # 初始化模型 28 | super().__init__(params) 29 | 30 | def ocr(self, img): 31 | dt_boxes, rec_res = self.__call__(img) 32 | return [(box.tolist(), res) for box, res in zip(dt_boxes, rec_res)] 33 | 34 | 35 | def sav2Img(org_img, result, name="draw_ocr.jpg"): 36 | # 显示结果 37 | from PIL import Image 38 | result = result[0] 39 | # image = Image.open(img_path).convert('RGB') 40 | # 图像转BGR2RGB 41 | image = org_img[:, :, ::-1] 42 | boxes = [line[0] for line in result] 43 | txts = [line[1][0] for line in result] 44 | scores = [line[1][1] for line in result] 45 | im_show = draw_ocr(image, boxes, txts, scores) 46 | im_show = Image.fromarray(im_show) 47 | im_show.save(name) 48 | 49 | 50 | if __name__ == '__main__': 51 | import cv2 52 | 53 | model = ONNXPaddleOcr(use_angle_cls=True, use_gpu=False) 54 | 55 | 56 | img = cv2.imread('/data2/liujingsong3/fiber_box/test/img/20230531230052008263304.jpg') 57 | s = time.time() 58 | result = model.ocr(img) 59 | e = time.time() 60 | print("total time: {:.3f}".format(e - s)) 61 | print("result:", result) 62 | for box in result[0]: 63 | print(box) 64 | 65 | sav2Img(img, result) -------------------------------------------------------------------------------- /utils/onnxocr/operators.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import cv2 3 | import sys 4 | import math 5 | 6 | 7 | class NormalizeImage(object): 8 | """ normalize image such as substract mean, divide std 9 | """ 10 | 11 | def __init__(self, scale=None, mean=None, std=None, order='chw', **kwargs): 12 | if isinstance(scale, str): 13 | scale = eval(scale) 14 | self.scale = np.float32(scale if scale is not None else 1.0 / 255.0) 15 | mean = mean if mean is not None else [0.485, 0.456, 0.406] 16 | std = std if std is not None else [0.229, 0.224, 0.225] 17 | 18 | shape = (3, 1, 1) if order == 'chw' else (1, 1, 3) 19 | self.mean = np.array(mean).reshape(shape).astype('float32') 20 | self.std = np.array(std).reshape(shape).astype('float32') 21 | 22 | def __call__(self, data): 23 | img = data['image'] 24 | from PIL import Image 25 | if isinstance(img, Image.Image): 26 | img = np.array(img) 27 | assert isinstance(img, 28 | np.ndarray), "invalid input 'img' in NormalizeImage" 29 | data['image'] = ( 30 | img.astype('float32') * self.scale - self.mean) / self.std 31 | return data 32 | 33 | 34 | class DetResizeForTest(object): 35 | def __init__(self, **kwargs): 36 | super(DetResizeForTest, self).__init__() 37 | self.resize_type = 0 38 | self.keep_ratio = False 39 | if 'image_shape' in kwargs: 40 | self.image_shape = kwargs['image_shape'] 41 | self.resize_type = 1 42 | if 'keep_ratio' in kwargs: 43 | self.keep_ratio = kwargs['keep_ratio'] 44 | elif 'limit_side_len' in kwargs: 45 | self.limit_side_len = kwargs['limit_side_len'] 46 | self.limit_type = kwargs.get('limit_type', 'min') 47 | elif 'resize_long' in kwargs: 48 | self.resize_type = 2 49 | self.resize_long = kwargs.get('resize_long', 960) 50 | else: 51 | self.limit_side_len = 736 52 | self.limit_type = 'min' 53 | 54 | def __call__(self, data): 55 | img = data['image'] 56 | src_h, src_w, _ = img.shape 57 | if sum([src_h, src_w]) < 64: 58 | img = self.image_padding(img) 59 | 60 | if self.resize_type == 0: 61 | # img, shape = self.resize_image_type0(img) 62 | img, [ratio_h, ratio_w] = self.resize_image_type0(img) 63 | elif self.resize_type == 2: 64 | img, [ratio_h, ratio_w] = self.resize_image_type2(img) 65 | else: 66 | # img, shape = self.resize_image_type1(img) 67 | img, [ratio_h, ratio_w] = self.resize_image_type1(img) 68 | data['image'] = img 69 | data['shape'] = np.array([src_h, src_w, ratio_h, ratio_w]) 70 | return data 71 | 72 | def image_padding(self, im, value=0): 73 | h, w, c = im.shape 74 | im_pad = np.zeros((max(32, h), max(32, w), c), np.uint8) + value 75 | im_pad[:h, :w, :] = im 76 | return im_pad 77 | 78 | def resize_image_type1(self, img): 79 | resize_h, resize_w = self.image_shape 80 | ori_h, ori_w = img.shape[:2] # (h, w, c) 81 | if self.keep_ratio is True: 82 | resize_w = ori_w * resize_h / ori_h 83 | N = math.ceil(resize_w / 32) 84 | resize_w = N * 32 85 | ratio_h = float(resize_h) / ori_h 86 | ratio_w = float(resize_w) / ori_w 87 | img = cv2.resize(img, (int(resize_w), int(resize_h))) 88 | # return img, np.array([ori_h, ori_w]) 89 | return img, [ratio_h, ratio_w] 90 | 91 | def resize_image_type0(self, img): 92 | """ 93 | resize image to a size multiple of 32 which is required by the network 94 | args: 95 | img(array): array with shape [h, w, c] 96 | return(tuple): 97 | img, (ratio_h, ratio_w) 98 | """ 99 | limit_side_len = self.limit_side_len 100 | h, w, c = img.shape 101 | 102 | # limit the max side 103 | if self.limit_type == 'max': 104 | if max(h, w) > limit_side_len: 105 | if h > w: 106 | ratio = float(limit_side_len) / h 107 | else: 108 | ratio = float(limit_side_len) / w 109 | else: 110 | ratio = 1. 111 | elif self.limit_type == 'min': 112 | if min(h, w) < limit_side_len: 113 | if h < w: 114 | ratio = float(limit_side_len) / h 115 | else: 116 | ratio = float(limit_side_len) / w 117 | else: 118 | ratio = 1. 119 | elif self.limit_type == 'resize_long': 120 | ratio = float(limit_side_len) / max(h, w) 121 | else: 122 | raise Exception('not support limit type, image ') 123 | resize_h = int(h * ratio) 124 | resize_w = int(w * ratio) 125 | 126 | resize_h = max(int(round(resize_h / 32) * 32), 32) 127 | resize_w = max(int(round(resize_w / 32) * 32), 32) 128 | 129 | try: 130 | if int(resize_w) <= 0 or int(resize_h) <= 0: 131 | return None, (None, None) 132 | img = cv2.resize(img, (int(resize_w), int(resize_h))) 133 | except: 134 | print(img.shape, resize_w, resize_h) 135 | sys.exit(0) 136 | ratio_h = resize_h / float(h) 137 | ratio_w = resize_w / float(w) 138 | return img, [ratio_h, ratio_w] 139 | 140 | def resize_image_type2(self, img): 141 | h, w, _ = img.shape 142 | 143 | resize_w = w 144 | resize_h = h 145 | 146 | if resize_h > resize_w: 147 | ratio = float(self.resize_long) / resize_h 148 | else: 149 | ratio = float(self.resize_long) / resize_w 150 | 151 | resize_h = int(resize_h * ratio) 152 | resize_w = int(resize_w * ratio) 153 | 154 | max_stride = 128 155 | resize_h = (resize_h + max_stride - 1) // max_stride * max_stride 156 | resize_w = (resize_w + max_stride - 1) // max_stride * max_stride 157 | img = cv2.resize(img, (int(resize_w), int(resize_h))) 158 | ratio_h = resize_h / float(h) 159 | ratio_w = resize_w / float(w) 160 | 161 | return img, [ratio_h, ratio_w] 162 | 163 | class ToCHWImage(object): 164 | """ convert hwc image to chw image 165 | """ 166 | 167 | def __init__(self, **kwargs): 168 | pass 169 | 170 | def __call__(self, data): 171 | img = data['image'] 172 | from PIL import Image 173 | if isinstance(img, Image.Image): 174 | img = np.array(img) 175 | data['image'] = img.transpose((2, 0, 1)) 176 | return data 177 | 178 | 179 | class KeepKeys(object): 180 | def __init__(self, keep_keys, **kwargs): 181 | self.keep_keys = keep_keys 182 | 183 | def __call__(self, data): 184 | data_list = [] 185 | for key in self.keep_keys: 186 | data_list.append(data[key]) 187 | return data_list -------------------------------------------------------------------------------- /utils/onnxocr/predict_base.py: -------------------------------------------------------------------------------- 1 | import onnxruntime 2 | 3 | class PredictBase(object): 4 | def __init__(self, cpu=False): 5 | self.cpu = cpu 6 | 7 | def get_onnx_session(self, model_dir, use_gpu): 8 | if self.cpu: 9 | providers = ['CPUExecutionProvider'] 10 | else: 11 | providers = onnxruntime.get_available_providers() 12 | sess_options = onnxruntime.SessionOptions() 13 | onnx_session = onnxruntime.InferenceSession(model_dir, providers=providers, sess_options=sess_options) 14 | 15 | return onnx_session 16 | 17 | 18 | def get_output_name(self, onnx_session): 19 | """ 20 | output_name = onnx_session.get_outputs()[0].name 21 | :param onnx_session: 22 | :return: 23 | """ 24 | output_name = [] 25 | for node in onnx_session.get_outputs(): 26 | output_name.append(node.name) 27 | return output_name 28 | 29 | def get_input_name(self, onnx_session): 30 | """ 31 | input_name = onnx_session.get_inputs()[0].name 32 | :param onnx_session: 33 | :return: 34 | """ 35 | input_name = [] 36 | for node in onnx_session.get_inputs(): 37 | input_name.append(node.name) 38 | return input_name 39 | 40 | def get_input_feed(self, input_name, image_numpy): 41 | """ 42 | input_feed={self.input_name: image_numpy} 43 | :param input_name: 44 | :param image_numpy: 45 | :return: 46 | """ 47 | input_feed = {} 48 | for name in input_name: 49 | input_feed[name] = image_numpy 50 | return input_feed -------------------------------------------------------------------------------- /utils/onnxocr/predict_det.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from .imaug import transform, create_operators 3 | from .db_postprocess import DBPostProcess 4 | from .predict_base import PredictBase 5 | 6 | 7 | class TextDetector(PredictBase): 8 | def __init__(self, args, cpu=False): 9 | super(TextDetector, self).__init__(cpu) 10 | self.args = args 11 | self.det_algorithm = args.det_algorithm 12 | pre_process_list = [{ 13 | 'DetResizeForTest': { 14 | 'limit_side_len': args.det_limit_side_len, 15 | 'limit_type': args.det_limit_type, 16 | } 17 | }, { 18 | 'NormalizeImage': { 19 | 'std': [0.229, 0.224, 0.225], 20 | 'mean': [0.485, 0.456, 0.406], 21 | 'scale': '1./255.', 22 | 'order': 'hwc' 23 | } 24 | }, { 25 | 'ToCHWImage': None 26 | }, { 27 | 'KeepKeys': { 28 | 'keep_keys': ['image', 'shape'] 29 | } 30 | }] 31 | postprocess_params = {} 32 | postprocess_params['name'] = 'DBPostProcess' 33 | postprocess_params["thresh"] = args.det_db_thresh 34 | postprocess_params["box_thresh"] = args.det_db_box_thresh 35 | postprocess_params["max_candidates"] = 1000 36 | postprocess_params["unclip_ratio"] = args.det_db_unclip_ratio 37 | postprocess_params["use_dilation"] = args.use_dilation 38 | postprocess_params["score_mode"] = args.det_db_score_mode 39 | postprocess_params["box_type"] = args.det_box_type 40 | 41 | # 实例化预处理操作类 42 | self.preprocess_op = create_operators(pre_process_list) 43 | # self.postprocess_op = build_post_process(postprocess_params) 44 | # 实例化后处理操作类 45 | self.postprocess_op = DBPostProcess(**postprocess_params) 46 | 47 | # 初始化模型 48 | self.det_onnx_session = self.get_onnx_session(args.det_model_dir, args.use_gpu) 49 | self.det_input_name = self.get_input_name(self.det_onnx_session) 50 | self.det_output_name = self.get_output_name(self.det_onnx_session) 51 | 52 | 53 | 54 | 55 | def order_points_clockwise(self, pts): 56 | rect = np.zeros((4, 2), dtype="float32") 57 | s = pts.sum(axis=1) 58 | rect[0] = pts[np.argmin(s)] 59 | rect[2] = pts[np.argmax(s)] 60 | tmp = np.delete(pts, (np.argmin(s), np.argmax(s)), axis=0) 61 | diff = np.diff(np.array(tmp), axis=1) 62 | rect[1] = tmp[np.argmin(diff)] 63 | rect[3] = tmp[np.argmax(diff)] 64 | return rect 65 | 66 | def clip_det_res(self, points, img_height, img_width): 67 | for pno in range(points.shape[0]): 68 | points[pno, 0] = int(min(max(points[pno, 0], 0), img_width - 1)) 69 | points[pno, 1] = int(min(max(points[pno, 1], 0), img_height - 1)) 70 | return points 71 | 72 | def filter_tag_det_res(self, dt_boxes, image_shape): 73 | img_height, img_width = image_shape[0:2] 74 | dt_boxes_new = [] 75 | for box in dt_boxes: 76 | if type(box) is list: 77 | box = np.array(box) 78 | box = self.order_points_clockwise(box) 79 | box = self.clip_det_res(box, img_height, img_width) 80 | rect_width = int(np.linalg.norm(box[0] - box[1])) 81 | rect_height = int(np.linalg.norm(box[0] - box[3])) 82 | if rect_width <= 3 or rect_height <= 3: 83 | continue 84 | dt_boxes_new.append(box) 85 | dt_boxes = np.array(dt_boxes_new) 86 | return dt_boxes 87 | 88 | def filter_tag_det_res_only_clip(self, dt_boxes, image_shape): 89 | img_height, img_width = image_shape[0:2] 90 | dt_boxes_new = [] 91 | for box in dt_boxes: 92 | if type(box) is list: 93 | box = np.array(box) 94 | box = self.clip_det_res(box, img_height, img_width) 95 | dt_boxes_new.append(box) 96 | dt_boxes = np.array(dt_boxes_new) 97 | return dt_boxes 98 | 99 | def __call__(self, img): 100 | ori_im = img.copy() 101 | data = {'image': img} 102 | 103 | data = transform(data, self.preprocess_op) 104 | img, shape_list = data 105 | if img is None: 106 | return None, 0 107 | img = np.expand_dims(img, axis=0) 108 | shape_list = np.expand_dims(shape_list, axis=0) 109 | img = img.copy() 110 | 111 | 112 | input_feed = self.get_input_feed(self.det_input_name, img) 113 | outputs = self.det_onnx_session.run(self.det_output_name, input_feed=input_feed) 114 | 115 | preds = {} 116 | preds['maps'] = outputs[0] 117 | 118 | post_result = self.postprocess_op(preds, shape_list) 119 | dt_boxes = post_result[0]['points'] 120 | 121 | if self.args.det_box_type == 'poly': 122 | dt_boxes = self.filter_tag_det_res_only_clip(dt_boxes, ori_im.shape) 123 | else: 124 | dt_boxes = self.filter_tag_det_res(dt_boxes, ori_im.shape) 125 | 126 | return dt_boxes 127 | 128 | -------------------------------------------------------------------------------- /utils/onnxocr/predict_system.py: -------------------------------------------------------------------------------- 1 | import os 2 | import cv2 3 | import copy 4 | from . import predict_det 5 | from . import predict_rec 6 | from .utils import get_rotate_crop_image, get_minarea_rect_crop 7 | 8 | 9 | class TextSystem(object): 10 | def __init__(self, args): 11 | self.text_detector = predict_det.TextDetector(args, cpu=args.cpu) 12 | self.text_recognizer = predict_rec.TextRecognizer(args, cpu=args.cpu) 13 | self.drop_score = args.drop_score 14 | 15 | self.args = args 16 | self.crop_image_res_index = 0 17 | 18 | 19 | def draw_crop_rec_res(self, output_dir, img_crop_list, rec_res): 20 | os.makedirs(output_dir, exist_ok=True) 21 | bbox_num = len(img_crop_list) 22 | for bno in range(bbox_num): 23 | cv2.imwrite( 24 | os.path.join(output_dir, 25 | f"mg_crop_{bno+self.crop_image_res_index}.jpg"), 26 | img_crop_list[bno]) 27 | 28 | self.crop_image_res_index += bbox_num 29 | 30 | def __call__(self, img): 31 | ori_im = img.copy() 32 | # 文字检测 33 | dt_boxes = self.text_detector(img) 34 | 35 | if dt_boxes is None: 36 | return None, None 37 | 38 | img_crop_list = [] 39 | 40 | dt_boxes = sorted_boxes(dt_boxes) 41 | 42 | # 图片裁剪 43 | for bno in range(len(dt_boxes)): 44 | tmp_box = copy.deepcopy(dt_boxes[bno]) 45 | if self.args.det_box_type == "quad": 46 | img_crop = get_rotate_crop_image(ori_im, tmp_box) 47 | else: 48 | img_crop = get_minarea_rect_crop(ori_im, tmp_box) 49 | img_crop_list.append(img_crop) 50 | # 图像识别 51 | rec_res = self.text_recognizer(img_crop_list) 52 | 53 | filter_boxes, filter_rec_res = [], [] 54 | for box, rec_result in zip(dt_boxes, rec_res): 55 | text, score = rec_result 56 | if score >= self.drop_score: 57 | filter_boxes.append(box) 58 | filter_rec_res.append(rec_result) 59 | 60 | return filter_boxes, filter_rec_res 61 | 62 | 63 | def sorted_boxes(dt_boxes): 64 | """ 65 | Sort text boxes in order from top to bottom, left to right 66 | args: 67 | dt_boxes(array):detected text boxes with shape [4, 2] 68 | return: 69 | sorted boxes(array) with shape [4, 2] 70 | """ 71 | num_boxes = dt_boxes.shape[0] 72 | sorted_boxes = sorted(dt_boxes, key=lambda x: (x[0][1], x[0][0])) 73 | _boxes = list(sorted_boxes) 74 | 75 | for i in range(num_boxes - 1): 76 | for j in range(i, -1, -1): 77 | if abs(_boxes[j + 1][0][1] - _boxes[j][0][1]) < 10 and \ 78 | (_boxes[j + 1][0][0] < _boxes[j][0][0]): 79 | tmp = _boxes[j] 80 | _boxes[j] = _boxes[j + 1] 81 | _boxes[j + 1] = tmp 82 | else: 83 | break 84 | return _boxes 85 | 86 | -------------------------------------------------------------------------------- /utils/screenshot.py: -------------------------------------------------------------------------------- 1 | import ctypes 2 | from ctypes import Structure 3 | from ctypes.wintypes import DWORD,LONG,WORD 4 | from threading import Lock 5 | import numpy as np 6 | from utils.log import log 7 | import time 8 | 9 | class BITMAPINFOHEADER(Structure): 10 | _fields_ = [ 11 | ("biSize", DWORD), 12 | ("biWidth", LONG), 13 | ("biHeight", LONG), 14 | ("biPlanes", WORD), 15 | ("biBitCount", WORD), 16 | ("biCompression", DWORD), 17 | ("biSizeImage", DWORD), 18 | ("biXPelsPerMeter", LONG), 19 | ("biYPelsPerMeter", LONG), 20 | ("biClrUsed", DWORD), 21 | ("biClrImportant", DWORD), 22 | ] 23 | class BITMAPINFO(Structure): 24 | _fields_ = [("bmiHeader", BITMAPINFOHEADER), ("bmiColors", DWORD * 3)] 25 | 26 | lock = Lock() 27 | class Screen(): 28 | def __init__(self,w=1920,h=1080): 29 | self.gdi = ctypes.WinDLL("gdi32") 30 | self.srcdc = ctypes.WinDLL("user32").GetWindowDC(0) 31 | self.memdc = self.gdi.CreateCompatibleDC(self.srcdc) 32 | self.width, self.height = w, h 33 | self.bmi = BITMAPINFO() 34 | self.bmi.bmiHeader.biSize = 40 35 | self.bmi.bmiHeader.biPlanes = 1 36 | self.bmi.bmiHeader.biBitCount = 32 37 | self.bmi.bmiHeader.biCompression = 0 38 | self.bmi.bmiHeader.biClrUsed = 0 39 | self.bmi.bmiHeader.biClrImportant = 0 40 | self.bmi.bmiHeader.biWidth = self.width 41 | self.bmi.bmiHeader.biHeight = -self.height 42 | self.data = ctypes.create_string_buffer(self.width * self.height * 4) 43 | self.bmp = self.gdi.CreateCompatibleBitmap(self.srcdc, self.width, self.height) 44 | self.gdi.SelectObject(self.memdc, self.bmp) 45 | 46 | def grab(self, x, y): 47 | with lock: 48 | for _ in range(10): 49 | self.gdi.BitBlt(self.memdc, 0, 0, self.width, self.height, self.srcdc, x, y, 0x40CC0020) 50 | bits = self.gdi.GetDIBits(self.memdc, self.bmp, 0, self.height, self.data, self.bmi, 0) 51 | if bits != self.height: 52 | log.info('截图失败!') 53 | time.sleep(0.05) 54 | continue 55 | return np.frombuffer(bytearray(self.data), dtype=np.uint8).reshape((self.height,self.width,4))[:,:,:3] 56 | return np.zeros((self.height,self.width,4)) -------------------------------------------------------------------------------- /utils/simul/cleaner.py: -------------------------------------------------------------------------------- 1 | import cv2 as cv 2 | import numpy as np 3 | import time 4 | import random 5 | import sys 6 | import os 7 | from shutil import copy 8 | 9 | 10 | def get_center(img, i, j): 11 | rx, ry, rt = 0, 0, 0 12 | for x in range(-7, 7): 13 | for y in range(-7, 7): 14 | if ( 15 | i + x >= 0 16 | and j + y >= 0 17 | and i + x < img.shape[0] 18 | and j + y < img.shape[1] 19 | ): 20 | s = np.sum(img[i + x, j + y]) 21 | if s > 30 and s < 255 * 3 - 30: 22 | rt += 1 23 | rx += x 24 | ry += y 25 | return (i + rx / rt, j + ry / rt) 26 | 27 | 28 | def get_target(pth): 29 | img = cv.imread(pth) 30 | res = set() 31 | f_set = [ 32 | lambda p: p[2] < 85 and p[1] < 85 and p[0] > 180, # 路径点 蓝 33 | lambda p: p[2] > 180 and p[1] < 70 and p[0] < 70, # 怪 红 34 | lambda p: p[2] < 90 and p[1] > 150 and p[0] < 90, # 交互点 绿 35 | lambda p: p[2] > 180 and p[1] > 180 and p[0] < 70, # 终点 黄 36 | ] 37 | p_cnt = [0,0,0,0] 38 | for i in range(img.shape[0]): 39 | for j in range(img.shape[1]): 40 | for k in range(4): 41 | if f_set[k](img[i, j]): 42 | p = get_center(img, i, j) 43 | res.add((p, k)) 44 | img[max(i - 7, 0) : i + 7, max(j - 7, 0) : j + 7] = [0, 0, 0] 45 | p_cnt[k]+=1 46 | if p_cnt[3]==0: 47 | print(pth,'no end point') 48 | if p_cnt[1]!=0 and p_cnt[2]!=0: 49 | print(pth,'wrong interactive point') 50 | 51 | ''' 52 | big_minimap = [10538,11115,12345,12346,12872,13197,18769,19787,22212,23480,30797,31289,38866,40978,42250,43642,45516,45735,46900,4805,51202,52451,53073,56417,63533,65515,65576,67673,68145,70941,73927,74959,75973,78566,81866,85880,86757,89054,89201,89358,9011,96641,97964,9908,99257,99570] 53 | 54 | for file in os.listdir("imgs/maps"): 55 | if len(file)<=5 and int(file) not in big_minimap: 56 | for map in os.listdir("imgs/maps/" + file): 57 | os.remove("imgs/maps/" + file + "/" + map) 58 | os.removedirs("imgs/maps/"+file) 59 | for file in os.listdir('tmp'): 60 | print(file.split('.')[0],end=',') 61 | exit() 62 | ''' 63 | # 删除地图数据中没用的文件 64 | for file in os.listdir("imgs/maps"): 65 | pth = "imgs/maps/" + file + "/target.jpg" 66 | if os.path.exists(pth): 67 | get_target(pth) 68 | copy(os.getcwd()+'\\'+"imgs/maps/" + file + "/target.jpg",os.getcwd()+'\\'+'targ') 69 | os.rename('targ/target.jpg','targ/'+str(file)+'.jpg') 70 | #image = cv.imread(pth) 71 | # for map in os.listdir("imgs/maps/" + file): 72 | # if map == "bwmap.jpg": 73 | # os.remove("imgs/maps/" + file + "/" + map) 74 | # elif map != "init.jpg" and map != "target.jpg": 75 | # map_img = cv.imread("imgs/maps/" + file + "/" + map) 76 | # if map_img.shape != image.shape: 77 | # os.remove("imgs/maps/" + file + "/" + map) 78 | -------------------------------------------------------------------------------- /utils/simul/config.py: -------------------------------------------------------------------------------- 1 | import os 2 | from typing import List, Dict, Union 3 | import yaml 4 | import sys 5 | 6 | 7 | class Config: 8 | def __init__(self): 9 | self.abspath = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) # 获取项目根目录../Auto_Simulated_Universe 10 | if getattr(sys, 'frozen', False): 11 | self.abspath = '.' 12 | self.order_text = "1 2 3 4" 13 | self.angle = "1.0" 14 | self.difficult = "5" 15 | self.allow_difficult = [1, 2, 3, 4, 5] 16 | self.text = "info_old.yml" 17 | self.fate = "巡猎" 18 | self.map_sha = "" 19 | self.fates = ["存护", "记忆", "虚无", "丰饶", "巡猎", "毁灭", "欢愉", "繁育", "智识"] 20 | self.show_map_mode = 0 21 | self.debug_mode = 0 22 | self.speed_mode = 0 23 | self.long_press_sprint = 0 24 | self.use_consumable = 0 25 | self.slow_mode = 0 26 | self.force_update = 0 27 | self.unlock = 0 28 | self.bonus = 0 29 | self.timezones = ['America', 'Asia', 'Europe', 'Default'] 30 | self.timezone = 'Default' 31 | self.origin_key = ['f','m','shift','v','e','w','a','s','d','1','2','3','4'] 32 | self.mapping = self.origin_key 33 | self.max_run = 34 34 | self.read() 35 | 36 | @property 37 | def multi(self) -> float: 38 | x = float(self.angle) 39 | if x > 5: 40 | self.angle = '1.0' 41 | return 1.0 42 | elif x > 2: 43 | return x - 2 44 | else: 45 | return x 46 | 47 | @property 48 | def order(self) -> List[int]: 49 | return [int(i) for i in self.order_text.strip(" ").split(" ")] 50 | 51 | @property 52 | def diffi(self) -> int: 53 | return int(self.difficult) if int(self.difficult) in self.allow_difficult else 1 54 | 55 | def read(self): 56 | if os.path.exists(os.path.join(self.abspath, self.text)): 57 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 58 | config: Dict[str, Union[int, float, str, List[int]]] = yaml.safe_load(f)['config'] 59 | try: 60 | self.order_text = " ".join(str(x) for x in config['order_text']) 61 | self.angle = str(config['angle']) 62 | self.difficult = config['difficulty'] 63 | self.fate = config['fate'] 64 | self.map_sha = config['map_sha'] 65 | self.show_map_mode = config['show_map_mode'] 66 | self.debug_mode = config['debug_mode'] 67 | self.speed_mode = config['speed_mode'] 68 | self.bonus = config['bonus'] 69 | self.long_press_sprint = config['long_press_sprint'] 70 | self.use_consumable = config['use_consumable'] 71 | self.force_update = config['force_update'] 72 | self.timezone = config['timezone'] 73 | self.slow_mode = config['slow_mode'] 74 | self.max_run = config['max_run'] 75 | except: 76 | pass 77 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 78 | try: 79 | self.mapping = yaml.safe_load(f)['key_mapping'] 80 | except: 81 | pass 82 | else: 83 | self.save() 84 | 85 | def save(self): 86 | try: 87 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 88 | secondary_fate = yaml.safe_load(f)['config']['secondary_fate'] 89 | except: 90 | try: 91 | with open(os.path.join(self.abspath, 'info_example_old.yml'), "r", encoding="utf-8", errors='ignore') as f: 92 | secondary_fate = yaml.safe_load(f)['config']['secondary_fate'] 93 | except: 94 | secondary_fate = ['巡猎','毁灭','丰饶'] 95 | 96 | try: 97 | with open(os.path.join(self.abspath, self.text), "r", encoding="utf-8", errors='ignore') as f: 98 | prior = yaml.safe_load(f)['prior'] 99 | except: 100 | try: 101 | with open(os.path.join(self.abspath, 'info_example_old.yml'), "r", encoding="utf-8", errors='ignore') as f: 102 | prior = yaml.safe_load(f)['prior'] 103 | except: 104 | prior = { 105 | '奇物': 106 | ['福灵胶', '博士之袍', '陨石球', '降维骰子', '信仰债券', '时空棱镜', '朋克洛德', '香涎干酪', 107 | '龋齿星系'], 108 | '事件': 109 | ['购买一个', '丢下雕像', '和序列扑满玩', '信仰星神', '克里珀的恩赐', '哈克的藏品', '动作片', 110 | '感恩克里珀星神', '换取1个星祝福', '星神的记载', '翻开牌', '摧毁黑匣', '1个1星祝福', 111 | '1个1-星祝福', '选择里奥'], 112 | '存护': 113 | ['零维强化', '均晶转变', '共晶反应', '宏观偏析', '超静定场', '谐振传递', '四棱锥体', 114 | '聚塑', '哨戒', '亚共晶体', '切变结构', '弥合', '迸裂晶格'], 115 | '记忆': 116 | ['体验的富翁', '全面记忆', '第二次初恋', '浮黎', '缄默', '纯真', '难言的羞耻', 117 | '怅然若失', '麻木不仁', '不寒而栗', '特立独行', '头晕目眩', '多愁善感', '沦浃肌髓'], 118 | '虚无': 119 | ['局外人', '苦难与阳光', '怀疑的四重根', '为何一切尚未消失', '感官追奉者的葬礼', 120 | '被装在套子里的人', '旷野的呼告', '存在的黄昏', '火堆外的夜', '知觉迷墙', '虚妄贡品', 121 | '日出之前', '无根据颂歌', '自欺咖啡馆', '他人即地狱', '开端与终结'], 122 | '丰饶': 123 | ['诸行无常', '诸法无我', '一法界心', '施诸愿印', '延彼遐龄', '厌离邪秽苦', 124 | '天人不动众', '宝光烛日月', '明澈琉璃身', '法雨', '胜军', '灭罪累生善'], 125 | '巡猎': 126 | ['柘弓危矢', '射不主皮', '帝星君临', '白矢决射御', '云镝逐步离', '彤弓素矰', 127 | '背孤击虚'], 128 | '毁灭': 129 | ['激变变星', '极端氦闪', '事件视界', '寰宇热寂特征数', '反物质非逆方程', '戒律性闪变', 130 | '危害性余光', '毁灭性吸积', '原生黑洞', '轨道红移', '预兆性景深', '递增性末日', 131 | '灾难性共振', '破坏性耀发', '偏振受体', '永坍缩体', '不稳定带', '哨戒卫星', 132 | '回光效应'], 133 | '欢愉': 134 | ['末日狂欢', '开盖有奖', '茫茫白夜', '众生安眠', '阴风阵阵', '被涂污的信天翁', 135 | '十二猴子与怒汉', '操行满分', '基本有害', '灰暗的火', '第二十一条军规', 136 | '流吧你的眼泪'], 137 | '繁育': 138 | ['刺吸口器', '结晶鳌刺', '酚类物质', '子囊释放', '菌种脓疤', '镰刀肢足', '腐殖疮', '裂解酶', 139 | '代谢腔', '裸脑质', '代谢腔', '催化剂', '节间膜', '孢夹', '骨刃', '鳞翅', '脊刺', '槽针', 140 | '液囊'], 141 | '智识': 142 | ['34型灰质', '2型杏仁核', '18型枕叶', '前庭系统', '递质合成', '外显记忆', '触觉通路', 143 | '阈下知觉', '纹状皮层', '跳跃传导', '齿轮啮合的王座', '导线弯绕的指环', '能量变距的权杖', 144 | '偏时引燃的炬火', '延迟衍射的烛光', '金属斑驳的华盖', '管道交错的桂冠', '线圈编制的罗琦'] 145 | } 146 | with open(os.path.join(self.abspath, self.text), "w", encoding="utf-8") as f: 147 | yaml.safe_dump({ 148 | "config": { 149 | "order_text": list(map(lambda x: int(x), self.order_text.split(' '))), 150 | "angle": float(self.angle), 151 | "difficulty": self.diffi, 152 | "fate": self.fate, 153 | "secondary_fate": secondary_fate, 154 | "map_sha": self.map_sha, 155 | "show_map_mode": self.show_map_mode, 156 | "debug_mode": self.debug_mode, 157 | "speed_mode": self.speed_mode, 158 | "bonus": self.bonus, 159 | "long_press_sprint": self.long_press_sprint, 160 | "use_consumable": self.use_consumable, 161 | "slow_mode": self.slow_mode, 162 | "force_update": self.force_update, 163 | "timezone": self.timezone, 164 | "max_run": self.max_run 165 | }, 166 | "prior": prior, 167 | "key_mapping": self.mapping 168 | }, f, allow_unicode=True, sort_keys=False) 169 | 170 | 171 | config = Config() 172 | -------------------------------------------------------------------------------- /utils/simul/find_duplicate_map.py: -------------------------------------------------------------------------------- 1 | import cv2 as cv 2 | import os 3 | 4 | 5 | def extract_features(img): 6 | orb = cv.ORB_create() 7 | # 检测关键点和计算描述符 8 | keypoints, descriptors = orb.detectAndCompute(img, None) 9 | return descriptors 10 | 11 | 12 | # 加载图片集 13 | def load_images(path): 14 | img_set = [] 15 | for file in os.listdir(path): 16 | pth = path + "/" + file + "/init.jpg" 17 | if os.path.exists(pth): 18 | image = cv.imread(pth) 19 | img_set.append((file, extract_features(image))) 20 | return img_set 21 | 22 | 23 | def filter_similar_images(img_set, threshold): 24 | similar_images = [] 25 | for i in range(len(img_set)): 26 | current_img = img_set[i][1] 27 | sim = -1 28 | similar_img_index = -1 29 | for j in range(i + 1, len(img_set)): 30 | matcher = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True) 31 | try: 32 | matches = matcher.match(current_img, img_set[j][1]) 33 | similarity_score = len(matches) / max( 34 | len(current_img), len(img_set[j][1]) 35 | ) 36 | if similarity_score > sim: 37 | sim = similarity_score 38 | similar_img_index = j 39 | except: 40 | pass 41 | if sim >= threshold: 42 | similar_images.append((img_set[i][0], img_set[similar_img_index][0], sim)) 43 | return similar_images 44 | 45 | 46 | path = "../imgs/maps" 47 | print(filter_similar_images(load_images(path), 0.5)) 48 | -------------------------------------------------------------------------------- /utils/simul/keyops.py: -------------------------------------------------------------------------------- 1 | import pyautogui 2 | from utils.simul.config import config 3 | 4 | def get_mapping(x): 5 | if x in config.origin_key: 6 | x = config.mapping[config.origin_key.index(x)] 7 | return x 8 | 9 | def keyDown(x): 10 | pyautogui.keyDown(get_mapping(x)) 11 | def keyUp(x): 12 | if config.long_press_sprint and x=='w': 13 | pyautogui.keyUp(get_mapping('shift')) 14 | pyautogui.keyUp(get_mapping(x)) -------------------------------------------------------------------------------- /utils/simul/map_log.py: -------------------------------------------------------------------------------- 1 | import time 2 | from logging import getLogger, FileHandler, Formatter, INFO 3 | 4 | from utils.log import logs_path 5 | 6 | map_log = getLogger("map_logger") 7 | map_log.setLevel(INFO) 8 | logging_format = "[%(levelname)s] [%(asctime)s] %(message)s" 9 | 10 | # 根据日期生成日志文件名 11 | filename = logs_path / ( 12 | "log_" + time.strftime("%Y-%m-%d-%H-%M", time.localtime()) + ".txt" 13 | ) 14 | file_handler = FileHandler(filename=filename, mode="w", encoding="utf-8") 15 | file_handler.setFormatter(Formatter(logging_format)) 16 | map_log.addHandler(file_handler) 17 | -------------------------------------------------------------------------------- /utils/simul/ocr.py: -------------------------------------------------------------------------------- 1 | from utils.onnxocr.onnx_paddleocr import ONNXPaddleOcr 2 | import numpy as np 3 | import cv2 as cv 4 | from utils.log import log 5 | 6 | # mode: bless1 bless2 strange 7 | 8 | class My_TS: 9 | def __init__(self,lang='ch'): 10 | self.lang=lang 11 | self.ts = ONNXPaddleOcr(use_angle_cls=False) 12 | self.text='' 13 | 14 | def is_edit_distance_at_most_one(self, str1, str2, ch): 15 | length = len(str1) 16 | diff_count = sum(1 for i in range(length) if str1[i] != str2[i]) 17 | if diff_count <= 1: 18 | return 1 19 | i = 0 20 | j = 0 21 | diff_count = 0 22 | str2 += ch 23 | while i < length and j < length + 1: 24 | if str1[i] != str2[j]: 25 | diff_count += 1 26 | j += 1 27 | else: 28 | i += 1 29 | j += 1 30 | 31 | return diff_count <= 1 32 | 33 | def sim(self,text,img=None): 34 | if img is not None: 35 | self.input(img) 36 | self.text = self.text.strip() 37 | if text.strip() in ['胜军','脊刺','佩拉']: 38 | return text.strip() in self.text 39 | length = len(text) 40 | res = 0 41 | stext = self.text+' ' 42 | for i in range(len(stext)-length): 43 | res |= self.is_edit_distance_at_most_one(text,stext[i:i+length],stext[i+length]) 44 | return res 45 | 46 | def ocr_one_row(self, img): 47 | return self.ts.text_recognizer([img])[0][0] 48 | 49 | def input(self,img): 50 | try: 51 | self.text=self.ocr_one_row(img).lower() 52 | except: 53 | self.text='' 54 | 55 | def sim_list(self,text_list,img=None): 56 | if img is not None: 57 | self.input(img) 58 | for t in text_list: 59 | if self.sim(t): 60 | return t 61 | return None 62 | 63 | def split_and_find(self,key_list,img,mode=None,bless_skip=1): 64 | white=[255,255,255] 65 | yellow=[126,162,180] 66 | binary_image = np.zeros_like(img[:, :, 0]) 67 | enhance_image = np.zeros_like(img) 68 | if mode=='strange': 69 | binary_image[np.sum((img - yellow) ** 2, axis=-1) <= 512]=255 70 | enhance_image[np.sum((img - yellow) ** 2, axis=-1) <= 3200]=[255,255,255] 71 | else: 72 | binary_image[np.sum((img - white) ** 2, axis=-1) <= 1600]=255 73 | enhance_image[np.sum((img - white) ** 2, axis=-1) <= 3200]=[255,255,255] 74 | if mode=='bless': 75 | kerneld = np.zeros((7,3),np.uint8) + 1 76 | kernele = np.zeros((1,39),np.uint8) + 1 77 | kernele2 = np.zeros((7,1),np.uint8) + 1 78 | binary_image = cv.dilate(binary_image,kerneld,iterations=2) 79 | binary_image = cv.erode(binary_image,kernele,iterations=5) 80 | binary_image = cv.erode(binary_image,kernele2,iterations=2) 81 | enhance_image = img 82 | else: 83 | kernel = np.zeros((5,9),np.uint8) + 1 84 | for i in range(2): 85 | binary_image = cv.dilate(binary_image,kernel,iterations=3) 86 | binary_image = cv.erode(binary_image,kernel,iterations=2) 87 | contours, _ = cv.findContours(binary_image, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) 88 | prior = len(key_list) 89 | rcx,rcy,find,black=-1,-1,0,0 90 | res='' 91 | text_res='.' 92 | for c,contour in enumerate(contours): 93 | x, y, w, h = cv.boundingRect(contour) 94 | if h==binary_image.shape[0] or w<55: 95 | continue 96 | roi = enhance_image[y:y+h, x:x+w] 97 | cx = x + w // 2 98 | cy = y + h // 2 99 | self.input(roi) 100 | if len(self.text.strip())<=1: 101 | continue 102 | if find == 0: 103 | rcx,rcy,find,text_res = cx,cy,1,self.text+';' 104 | res+='|'+self.text 105 | if (self.sim('回归不等式') and bless_skip) or self.sim_list(['银河大乐透','普通八卦','愚者面具','机械齿轮']) is not None: 106 | black = 1 107 | res+='x' 108 | continue 109 | if find == 1: 110 | rcx,rcy,text_res=cx,cy,self.text+'?' 111 | for i,text in enumerate(key_list): 112 | if i==prior: 113 | break 114 | if self.sim(text): 115 | rcx,rcy,find=cx,cy,2 116 | text_res=text+'!' 117 | prior=i 118 | print('识别结果:',res+'|',' 识别到:',text_res) 119 | if black and find==1: 120 | find=3 121 | return (rcx-img.shape[1]//2,rcy-img.shape[0]//2),find+black 122 | 123 | def find_text(self, img, text, env=None): 124 | self.nothing = 1 125 | results = self.ts.ocr(img) 126 | for txt in text: 127 | for res in results: 128 | res = {'raw_text': res[1][0], 'box': np.array(res[0]), 'score': res[1][1]} 129 | self.text = res['raw_text'] 130 | if len(self.text.strip())>1 and 'UID' not in self.text: 131 | self.nothing = 0 132 | if self.sim(txt): 133 | print("识别到文本:",txt,"匹配文本:",self.text) 134 | return res['box'] 135 | return None 136 | 137 | class text_keys: 138 | def __init__(self,fate=4): 139 | self.fate=fate 140 | self.interacts = ['黑塔', '区域', '事件', '退出', '沉浸', '紧锁', '复活', '下载', '模拟'] 141 | self.fates = ["存护", "记忆", "虚无", "丰饶", "巡猎", "毁灭", "欢愉", "繁育", "智识"] 142 | self.prior_bless = ['火堆外的夜'] 143 | self.strange = [] 144 | self.blesses = [[] for _ in range(9)] 145 | self.strange = ['福灵胶', '博士之袍', '陨石球', '降维骰子', '信仰债券', '时空棱镜', '朋克洛德', '香涎干酪', 146 | '龋齿星系'] 147 | self.blesses[0] = ['零维强化', '均晶转变', '共晶反应', '宏观偏析', '超静定场', '谐振传递', '四棱锥体', '聚塑', 148 | '哨戒', '亚共晶体', '切变结构', '弥合', '迸裂晶格'] 149 | self.blesses[1] = ['体验的富翁', '全面记忆', '第二次初恋', '浮黎', '缄默', '纯真', '难言的羞耻', '怅然若失', 150 | '麻木不仁', '不寒而栗', '特立独行', '头晕目眩', '多愁善感', '沦浃肌髓'] 151 | self.blesses[2] = ['苦难与阳光', '怀疑的四重根', '局外人', '为何一切尚未消失', '感官追奉者的葬礼', 152 | '被装在套子里的人', '旷野的呼告', '存在的黄昏', '火堆外的夜', '知觉迷墙', '虚妄贡品', 153 | '日出之前', '无根据颂歌', '自欺咖啡馆', '他人即地狱', '开端与终结'] 154 | self.blesses[3] = ['诸行无常', '诸法无我', '一法界心', '施诸愿印', '延彼遐龄', '厌离邪秽苦', '天人不动众', 155 | '宝光烛日月', '明澈琉璃身', '法雨', '胜军', '灭罪累生善'] 156 | self.blesses[4] = ['柘弓危矢', '射不主皮', '帝星君临', '白矢决射御', '云镝逐步离', '彤弓素矰', '背孤击虚'] 157 | self.blesses[5] = ['激变变星', '极端氦闪', '事件视界', '寰宇热寂特征数', '反物质非逆方程', '戒律性闪变', 158 | '危害性余光', '毁灭性吸积', '原生黑洞', '轨道红移', '预兆性景深', '递增性末日', '灾难性共振', 159 | '破坏性耀发', '偏振受体', '永坍缩体', '不稳定带', '哨戒卫星', '回光效应'] 160 | self.blesses[6] = ['末日狂欢', '开盖有奖', '茫茫白夜', '众生安眠', '阴风阵阵', '被涂污的信天翁', 161 | '十二猴子与怒汉', '操行满分', '基本有害', '灰暗的火', '第二十一条军规', '流吧你的眼泪'] 162 | self.blesses[7] = ['刺吸口器', '结晶鳌刺', '酚类物质', '子囊释放', '菌种脓疤', '镰刀肢足', '腐殖疮', '裂解酶', 163 | '代谢腔', '裸脑质', '代谢腔', '催化剂', '节间膜', '孢夹', '骨刃', '鳞翅', '脊刺', '槽针', 164 | '液囊'] 165 | self.blesses[8] = ['34型灰质', '2型杏仁核', '18型枕叶', '前庭系统', '递质合成', '外显记忆', '触觉通路', 166 | '阈下知觉', '纹状皮层', '跳跃传导', '齿轮啮合的王座', '导线弯绕的指环', '能量变距的权杖', 167 | '偏时引燃的炬火', '延迟衍射的烛光', '金属斑驳的华盖', '线圈编制的罗琦', '管道交错的桂冠'] 168 | self.secondary = ['巡猎', '毁灭', '丰饶'] 169 | try: 170 | import yaml 171 | with open('info.yml', "r", encoding="utf-8",errors='ignore') as f: 172 | config = yaml.safe_load(f)['prior'] 173 | with open('info.yml', "r", encoding="utf-8",errors='ignore') as f: 174 | try: 175 | self.secondary = yaml.safe_load(f)['config']['secondary_fate'] 176 | except: 177 | pass 178 | for i,j in enumerate(config): 179 | if i>1: 180 | self.blesses[i-2] = config[j] 181 | elif i==0: 182 | self.strange = config[j] 183 | except: 184 | pass 185 | self.prior_bless += self.blesses[fate] 186 | self.skip = 1 187 | for s in self.prior_bless: 188 | if '回归不等式' in s: 189 | self.skip = 0 190 | self.strange = [self.fates[self.fate]+'火漆'] + self.strange 191 | self.secondary = [self.fates[self.fate]] + self.secondary 192 | -------------------------------------------------------------------------------- /utils/simul/update_map.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | import zipfile 4 | from base64 import b64decode 5 | from utils.simul.config import config 6 | import requests 7 | 8 | root_path = os.getcwd() 9 | gat = ( 10 | "Z2l0aHViX3BhdF8xMUJBQkhHNkEwa1JRZEM1dFByczhVXzU0cERCS21URXRGYm" 11 | "FYRElUWE5KVUk4VkUxVTdjb0dHbElMSWdhVnI2Qkc3QzVCN0lCWlhWdDJMOUo2" 12 | ) 13 | 14 | 15 | def download_and_extract_zip(url, root_path): 16 | zip_file_path = os.path.join(root_path, "repository.zip") 17 | response = requests.get(url, stream=True) 18 | response.raise_for_status() 19 | total_size = int(response.headers.get("Content-Length", 0)) 20 | if total_size == 0: 21 | print("下载失败!") 22 | return 0 23 | block_size = 1024 # 每次下载的块大小 24 | progress = 0 25 | with open(zip_file_path, "wb") as file: 26 | for data in response.iter_content(block_size): 27 | progress += len(data) 28 | file.write(data) 29 | 30 | # 计算下载进度并显示进度条 31 | percent = (progress / total_size) * 100 32 | progress_bar = "=" * int(percent // 5) + ">" 33 | print(f"下载进度: {percent:.2f}% [{progress_bar:<20}] ", end="\r") 34 | 35 | print("\n下载完成!") 36 | # 解压ZIP文件 37 | with zipfile.ZipFile(zip_file_path, "r") as zip_ref: 38 | zip_ref.extractall(root_path) 39 | 40 | os.remove(zip_file_path) # 删除ZIP文件 41 | return 1 42 | 43 | 44 | def sync_github_repo(repo_url, root_path): 45 | # 构建API URL 46 | api_url = f"https://api.github.com/repos/{repo_url}/zipball/main" 47 | 48 | # 检查保存路径是否存在,如果不存在则创建 49 | os.makedirs(root_path, exist_ok=True) 50 | 51 | # 下载并解压ZIP文件 52 | return download_and_extract_zip(api_url, root_path) 53 | 54 | 55 | def get_latest_branch_sha(repo_url): 56 | url = f"https://api.github.com/repos/{repo_url}/branches" 57 | headers = { 58 | "Accept": "application/vnd.github.v3+json", 59 | "Authorization": b64decode(gat).decode("utf-8"), 60 | } 61 | try: 62 | response = requests.get(url, headers=headers, timeout=3) 63 | except: 64 | return None 65 | if response.status_code == 200: 66 | branches = response.json() 67 | if branches: 68 | latest_branch = branches[0] 69 | return latest_branch["commit"]["sha"] 70 | else: 71 | return None 72 | 73 | 74 | def copy_folder_contents(source_folder, destination_folder): 75 | # 检查目标文件夹是否存在,如果不存在则创建 76 | if not os.path.exists(destination_folder): 77 | os.makedirs(destination_folder) 78 | 79 | # 遍历源文件夹中的所有文件和子文件夹 80 | for item in os.listdir(source_folder): 81 | source = os.path.join(source_folder, item) 82 | destination = os.path.join(destination_folder, item) 83 | 84 | if os.path.isfile(source): 85 | # 如果源项是文件,则直接复制并覆盖同名文件 86 | shutil.copy2(source, destination) 87 | elif os.path.isdir(source): 88 | # 如果源项是文件夹,则递归地调用复制函数 89 | copy_folder_contents(source, destination) 90 | 91 | 92 | def update_map(force=False): 93 | repo_url = "CHNZYX/maps" 94 | # 获取远端sha 95 | remote_sha = get_latest_branch_sha(repo_url) 96 | if remote_sha is None: 97 | print("远端地图sha获取失败, 请检查网络连接") 98 | return "远端地图sha获取失败, 请检查网络连接", "red" 99 | print("远端地图sha: " + remote_sha) 100 | # 获取本地sha 101 | local_sha = config.map_sha 102 | print("本地地图sha: " + local_sha) 103 | # 判断是否需要更新 104 | if remote_sha == local_sha: 105 | print("map无需更新") 106 | return "地图已是最新版本", "green" 107 | map_path = os.path.join(root_path, "imgs\\maps") 108 | print("Map path: " + map_path) 109 | # 下载map仓库并解压 110 | status = sync_github_repo(repo_url, root_path) 111 | if status == 0: 112 | return "下载失败", "red" 113 | print("下载完成") 114 | # 找出下载的map文件夹 115 | t = os.listdir(root_path) 116 | chn_folders = [item for item in t if item.startswith("CHNZYX")] 117 | downloaded_map_path = os.path.join(os.path.join(root_path, chn_folders[0]), "maps") 118 | print("download_map_path: " + downloaded_map_path) 119 | print("解压中...") 120 | # 删除原有map文件夹,复制新的map文件夹 121 | if force: 122 | shutil.rmtree(map_path) 123 | shutil.copytree(downloaded_map_path, map_path) 124 | else: 125 | copy_folder_contents(downloaded_map_path, map_path) 126 | shutil.rmtree(os.path.dirname(downloaded_map_path)) 127 | # 更新sha 128 | config.map_sha = remote_sha 129 | config.save() 130 | print("更新完成") 131 | return "更新完成", "green" 132 | --------------------------------------------------------------------------------