diff --git a/zsim/config_example.json b/zsim/config_example.json index df4c39ba..341bbb5b 100644 --- a/zsim/config_example.json +++ b/zsim/config_example.json @@ -51,7 +51,9 @@ "JUDGE_FILE_PATH": "./zsim/data/\u89e6\u53d1\u5224\u65ad.csv", "EFFECT_FILE_PATH": "./zsim/data/buff_effect.csv", "EXIST_FILE_PATH": "./zsim/data/\u6fc0\u6d3b\u5224\u65ad.csv", - "APL_FILE_PATH": "./zsim/data/APLData/\u8587\u8587\u5b89-\u67f3-\u8000\u5609\u97f3.toml" + "APL_FILE_PATH": "./zsim/data/APLData/\u8587\u8587\u5b89-\u67f3-\u8000\u5609\u97f3.toml", + "CHARACTER_IMAGE_PATH": "./zsim/data/character_img", + "STAR_IMAGE_PATH": "./zsim/data/star_img" }, "translate": { "id": "skill_tag", diff --git a/zsim/data/character_img/1k/1011.png b/zsim/data/character_img/1k/1011.png new file mode 100644 index 00000000..3c43ded8 Binary files /dev/null and b/zsim/data/character_img/1k/1011.png differ diff --git a/zsim/data/character_img/1k/1021.png b/zsim/data/character_img/1k/1021.png new file mode 100644 index 00000000..3e913408 Binary files /dev/null and b/zsim/data/character_img/1k/1021.png differ diff --git a/zsim/data/character_img/1k/1031_0.png b/zsim/data/character_img/1k/1031_0.png new file mode 100644 index 00000000..8cbf99f2 Binary files /dev/null and b/zsim/data/character_img/1k/1031_0.png differ diff --git a/zsim/data/character_img/1k/1031_1.png b/zsim/data/character_img/1k/1031_1.png new file mode 100644 index 00000000..e35c3eed Binary files /dev/null and b/zsim/data/character_img/1k/1031_1.png differ diff --git a/zsim/data/character_img/1k/1041.png b/zsim/data/character_img/1k/1041.png new file mode 100644 index 00000000..2c9299b5 Binary files /dev/null and b/zsim/data/character_img/1k/1041.png differ diff --git a/zsim/data/character_img/1k/1061.png b/zsim/data/character_img/1k/1061.png new file mode 100644 index 00000000..82ba8f82 Binary files /dev/null and b/zsim/data/character_img/1k/1061.png differ diff --git a/zsim/data/character_img/1k/1081.png b/zsim/data/character_img/1k/1081.png new file mode 100644 index 00000000..279cb651 Binary files /dev/null and b/zsim/data/character_img/1k/1081.png differ diff --git a/zsim/data/character_img/1k/1091.png b/zsim/data/character_img/1k/1091.png new file mode 100644 index 00000000..899a45be Binary files /dev/null and b/zsim/data/character_img/1k/1091.png differ diff --git a/zsim/data/character_img/1k/1101.png b/zsim/data/character_img/1k/1101.png new file mode 100644 index 00000000..4eeba513 Binary files /dev/null and b/zsim/data/character_img/1k/1101.png differ diff --git a/zsim/data/character_img/1k/1111.png b/zsim/data/character_img/1k/1111.png new file mode 100644 index 00000000..89500646 Binary files /dev/null and b/zsim/data/character_img/1k/1111.png differ diff --git a/zsim/data/character_img/1k/1121.png b/zsim/data/character_img/1k/1121.png new file mode 100644 index 00000000..9d6a81b8 Binary files /dev/null and b/zsim/data/character_img/1k/1121.png differ diff --git a/zsim/data/character_img/1k/1131.png b/zsim/data/character_img/1k/1131.png new file mode 100644 index 00000000..b9f2cd76 Binary files /dev/null and b/zsim/data/character_img/1k/1131.png differ diff --git a/zsim/data/character_img/1k/1141.png b/zsim/data/character_img/1k/1141.png new file mode 100644 index 00000000..ffac5b25 Binary files /dev/null and b/zsim/data/character_img/1k/1141.png differ diff --git a/zsim/data/character_img/1k/1151.png b/zsim/data/character_img/1k/1151.png new file mode 100644 index 00000000..e0e33819 Binary files /dev/null and b/zsim/data/character_img/1k/1151.png differ diff --git a/zsim/data/character_img/1k/1161.png b/zsim/data/character_img/1k/1161.png new file mode 100644 index 00000000..45c3452a Binary files /dev/null and b/zsim/data/character_img/1k/1161.png differ diff --git a/zsim/data/character_img/1k/1171.png b/zsim/data/character_img/1k/1171.png new file mode 100644 index 00000000..ae092355 Binary files /dev/null and b/zsim/data/character_img/1k/1171.png differ diff --git a/zsim/data/character_img/1k/1181.png b/zsim/data/character_img/1k/1181.png new file mode 100644 index 00000000..52703e6d Binary files /dev/null and b/zsim/data/character_img/1k/1181.png differ diff --git a/zsim/data/character_img/1k/1191_0.png b/zsim/data/character_img/1k/1191_0.png new file mode 100644 index 00000000..dabba24b Binary files /dev/null and b/zsim/data/character_img/1k/1191_0.png differ diff --git a/zsim/data/character_img/1k/1191_1.png b/zsim/data/character_img/1k/1191_1.png new file mode 100644 index 00000000..c42c63d8 Binary files /dev/null and b/zsim/data/character_img/1k/1191_1.png differ diff --git a/zsim/data/character_img/1k/1201.png b/zsim/data/character_img/1k/1201.png new file mode 100644 index 00000000..fe66403e Binary files /dev/null and b/zsim/data/character_img/1k/1201.png differ diff --git a/zsim/data/character_img/1k/1211.png b/zsim/data/character_img/1k/1211.png new file mode 100644 index 00000000..18edbaec Binary files /dev/null and b/zsim/data/character_img/1k/1211.png differ diff --git a/zsim/data/character_img/1k/1221.png b/zsim/data/character_img/1k/1221.png new file mode 100644 index 00000000..2b6f6a0d Binary files /dev/null and b/zsim/data/character_img/1k/1221.png differ diff --git a/zsim/data/character_img/1k/1241.png b/zsim/data/character_img/1k/1241.png new file mode 100644 index 00000000..6f40660a Binary files /dev/null and b/zsim/data/character_img/1k/1241.png differ diff --git a/zsim/data/character_img/1k/1261.png b/zsim/data/character_img/1k/1261.png new file mode 100644 index 00000000..50580c89 Binary files /dev/null and b/zsim/data/character_img/1k/1261.png differ diff --git a/zsim/data/character_img/1k/1291.png b/zsim/data/character_img/1k/1291.png new file mode 100644 index 00000000..35e6f4b6 Binary files /dev/null and b/zsim/data/character_img/1k/1291.png differ diff --git a/zsim/data/character_img/1k/1300.png b/zsim/data/character_img/1k/1300.png new file mode 100644 index 00000000..a963faab Binary files /dev/null and b/zsim/data/character_img/1k/1300.png differ diff --git a/zsim/data/character_img/1k/1301.png b/zsim/data/character_img/1k/1301.png new file mode 100644 index 00000000..c67633ac Binary files /dev/null and b/zsim/data/character_img/1k/1301.png differ diff --git a/zsim/data/character_img/1k/1302.png b/zsim/data/character_img/1k/1302.png new file mode 100644 index 00000000..92834836 Binary files /dev/null and b/zsim/data/character_img/1k/1302.png differ diff --git a/zsim/data/character_img/1k/1311_0.png b/zsim/data/character_img/1k/1311_0.png new file mode 100644 index 00000000..97951a0c Binary files /dev/null and b/zsim/data/character_img/1k/1311_0.png differ diff --git a/zsim/data/character_img/1k/1311_1.png b/zsim/data/character_img/1k/1311_1.png new file mode 100644 index 00000000..3383cc11 Binary files /dev/null and b/zsim/data/character_img/1k/1311_1.png differ diff --git a/zsim/data/character_img/1k/1321.png b/zsim/data/character_img/1k/1321.png new file mode 100644 index 00000000..92b26491 Binary files /dev/null and b/zsim/data/character_img/1k/1321.png differ diff --git a/zsim/data/character_img/1k/1331.png b/zsim/data/character_img/1k/1331.png new file mode 100644 index 00000000..fc94d6b8 Binary files /dev/null and b/zsim/data/character_img/1k/1331.png differ diff --git a/zsim/data/character_img/1k/1351.png b/zsim/data/character_img/1k/1351.png new file mode 100644 index 00000000..86cb7faf Binary files /dev/null and b/zsim/data/character_img/1k/1351.png differ diff --git a/zsim/data/character_img/1k/1361.png b/zsim/data/character_img/1k/1361.png new file mode 100644 index 00000000..e143f6b3 Binary files /dev/null and b/zsim/data/character_img/1k/1361.png differ diff --git a/zsim/data/character_img/1k/1371_0.png b/zsim/data/character_img/1k/1371_0.png new file mode 100644 index 00000000..203ddd96 Binary files /dev/null and b/zsim/data/character_img/1k/1371_0.png differ diff --git a/zsim/data/character_img/1k/1371_1.png b/zsim/data/character_img/1k/1371_1.png new file mode 100644 index 00000000..1e540bc9 Binary files /dev/null and b/zsim/data/character_img/1k/1371_1.png differ diff --git a/zsim/data/character_img/1k/1381.png b/zsim/data/character_img/1k/1381.png new file mode 100644 index 00000000..ee5eefae Binary files /dev/null and b/zsim/data/character_img/1k/1381.png differ diff --git a/zsim/data/character_img/1k/1391.png b/zsim/data/character_img/1k/1391.png new file mode 100644 index 00000000..d2faa8f3 Binary files /dev/null and b/zsim/data/character_img/1k/1391.png differ diff --git a/zsim/data/character_img/1k/1411_0.png b/zsim/data/character_img/1k/1411_0.png new file mode 100644 index 00000000..42a28054 Binary files /dev/null and b/zsim/data/character_img/1k/1411_0.png differ diff --git a/zsim/data/character_img/1k/1411_1.png b/zsim/data/character_img/1k/1411_1.png new file mode 100644 index 00000000..a3406c72 Binary files /dev/null and b/zsim/data/character_img/1k/1411_1.png differ diff --git a/zsim/data/character_img/1k/1421.png b/zsim/data/character_img/1k/1421.png new file mode 100644 index 00000000..b722167b Binary files /dev/null and b/zsim/data/character_img/1k/1421.png differ diff --git a/zsim/data/character_img/1k/6121.png b/zsim/data/character_img/1k/6121.png new file mode 100644 index 00000000..81efe535 Binary files /dev/null and b/zsim/data/character_img/1k/6121.png differ diff --git a/zsim/data/character_img/2k/1011.png b/zsim/data/character_img/2k/1011.png new file mode 100644 index 00000000..a38dcbed Binary files /dev/null and b/zsim/data/character_img/2k/1011.png differ diff --git a/zsim/data/character_img/2k/1021.png b/zsim/data/character_img/2k/1021.png new file mode 100644 index 00000000..0ce1e037 Binary files /dev/null and b/zsim/data/character_img/2k/1021.png differ diff --git a/zsim/data/character_img/2k/1031_0.png b/zsim/data/character_img/2k/1031_0.png new file mode 100644 index 00000000..eb39c35c Binary files /dev/null and b/zsim/data/character_img/2k/1031_0.png differ diff --git a/zsim/data/character_img/2k/1031_1.png b/zsim/data/character_img/2k/1031_1.png new file mode 100644 index 00000000..61958ed2 Binary files /dev/null and b/zsim/data/character_img/2k/1031_1.png differ diff --git a/zsim/data/character_img/2k/1041.png b/zsim/data/character_img/2k/1041.png new file mode 100644 index 00000000..d3fcbe0a Binary files /dev/null and b/zsim/data/character_img/2k/1041.png differ diff --git a/zsim/data/character_img/2k/1061.png b/zsim/data/character_img/2k/1061.png new file mode 100644 index 00000000..380cfe28 Binary files /dev/null and b/zsim/data/character_img/2k/1061.png differ diff --git a/zsim/data/character_img/2k/1081.png b/zsim/data/character_img/2k/1081.png new file mode 100644 index 00000000..75ac9dac Binary files /dev/null and b/zsim/data/character_img/2k/1081.png differ diff --git a/zsim/data/character_img/2k/1091.png b/zsim/data/character_img/2k/1091.png new file mode 100644 index 00000000..ebb09b05 Binary files /dev/null and b/zsim/data/character_img/2k/1091.png differ diff --git a/zsim/data/character_img/2k/1101.png b/zsim/data/character_img/2k/1101.png new file mode 100644 index 00000000..9d85ca65 Binary files /dev/null and b/zsim/data/character_img/2k/1101.png differ diff --git a/zsim/data/character_img/2k/1111.png b/zsim/data/character_img/2k/1111.png new file mode 100644 index 00000000..7f31a04b Binary files /dev/null and b/zsim/data/character_img/2k/1111.png differ diff --git a/zsim/data/character_img/2k/1121.png b/zsim/data/character_img/2k/1121.png new file mode 100644 index 00000000..8e2f0b86 Binary files /dev/null and b/zsim/data/character_img/2k/1121.png differ diff --git a/zsim/data/character_img/2k/1131.png b/zsim/data/character_img/2k/1131.png new file mode 100644 index 00000000..3e440e87 Binary files /dev/null and b/zsim/data/character_img/2k/1131.png differ diff --git a/zsim/data/character_img/2k/1141.png b/zsim/data/character_img/2k/1141.png new file mode 100644 index 00000000..a03119ff Binary files /dev/null and b/zsim/data/character_img/2k/1141.png differ diff --git a/zsim/data/character_img/2k/1151.png b/zsim/data/character_img/2k/1151.png new file mode 100644 index 00000000..8416294b Binary files /dev/null and b/zsim/data/character_img/2k/1151.png differ diff --git a/zsim/data/character_img/2k/1161.png b/zsim/data/character_img/2k/1161.png new file mode 100644 index 00000000..7974169e Binary files /dev/null and b/zsim/data/character_img/2k/1161.png differ diff --git a/zsim/data/character_img/2k/1171.png b/zsim/data/character_img/2k/1171.png new file mode 100644 index 00000000..285dd9cc Binary files /dev/null and b/zsim/data/character_img/2k/1171.png differ diff --git a/zsim/data/character_img/2k/1181.png b/zsim/data/character_img/2k/1181.png new file mode 100644 index 00000000..035889ab Binary files /dev/null and b/zsim/data/character_img/2k/1181.png differ diff --git a/zsim/data/character_img/2k/1191_0.png b/zsim/data/character_img/2k/1191_0.png new file mode 100644 index 00000000..38450fc9 Binary files /dev/null and b/zsim/data/character_img/2k/1191_0.png differ diff --git a/zsim/data/character_img/2k/1191_1.png b/zsim/data/character_img/2k/1191_1.png new file mode 100644 index 00000000..1691b2c7 Binary files /dev/null and b/zsim/data/character_img/2k/1191_1.png differ diff --git a/zsim/data/character_img/2k/1201.png b/zsim/data/character_img/2k/1201.png new file mode 100644 index 00000000..34e2cc32 Binary files /dev/null and b/zsim/data/character_img/2k/1201.png differ diff --git a/zsim/data/character_img/2k/1211.png b/zsim/data/character_img/2k/1211.png new file mode 100644 index 00000000..d33d39d4 Binary files /dev/null and b/zsim/data/character_img/2k/1211.png differ diff --git a/zsim/data/character_img/2k/1221.png b/zsim/data/character_img/2k/1221.png new file mode 100644 index 00000000..18138fc9 Binary files /dev/null and b/zsim/data/character_img/2k/1221.png differ diff --git a/zsim/data/character_img/2k/1241.png b/zsim/data/character_img/2k/1241.png new file mode 100644 index 00000000..739e22be Binary files /dev/null and b/zsim/data/character_img/2k/1241.png differ diff --git a/zsim/data/character_img/2k/1261.png b/zsim/data/character_img/2k/1261.png new file mode 100644 index 00000000..a9d8c65a Binary files /dev/null and b/zsim/data/character_img/2k/1261.png differ diff --git a/zsim/data/character_img/2k/1291.png b/zsim/data/character_img/2k/1291.png new file mode 100644 index 00000000..dcaea8c4 Binary files /dev/null and b/zsim/data/character_img/2k/1291.png differ diff --git a/zsim/data/character_img/2k/1300.png b/zsim/data/character_img/2k/1300.png new file mode 100644 index 00000000..80f8ae4d Binary files /dev/null and b/zsim/data/character_img/2k/1300.png differ diff --git a/zsim/data/character_img/2k/1301.png b/zsim/data/character_img/2k/1301.png new file mode 100644 index 00000000..81676206 Binary files /dev/null and b/zsim/data/character_img/2k/1301.png differ diff --git a/zsim/data/character_img/2k/1302.png b/zsim/data/character_img/2k/1302.png new file mode 100644 index 00000000..f84005fd Binary files /dev/null and b/zsim/data/character_img/2k/1302.png differ diff --git a/zsim/data/character_img/2k/1311_0.png b/zsim/data/character_img/2k/1311_0.png new file mode 100644 index 00000000..2f3dfbc3 Binary files /dev/null and b/zsim/data/character_img/2k/1311_0.png differ diff --git a/zsim/data/character_img/2k/1311_1.png b/zsim/data/character_img/2k/1311_1.png new file mode 100644 index 00000000..92ef1d4c Binary files /dev/null and b/zsim/data/character_img/2k/1311_1.png differ diff --git a/zsim/data/character_img/2k/1321.png b/zsim/data/character_img/2k/1321.png new file mode 100644 index 00000000..3cda0419 Binary files /dev/null and b/zsim/data/character_img/2k/1321.png differ diff --git a/zsim/data/character_img/2k/1331.png b/zsim/data/character_img/2k/1331.png new file mode 100644 index 00000000..9a9a3e64 Binary files /dev/null and b/zsim/data/character_img/2k/1331.png differ diff --git a/zsim/data/character_img/2k/1351.png b/zsim/data/character_img/2k/1351.png new file mode 100644 index 00000000..218a7a71 Binary files /dev/null and b/zsim/data/character_img/2k/1351.png differ diff --git a/zsim/data/character_img/2k/1361.png b/zsim/data/character_img/2k/1361.png new file mode 100644 index 00000000..f48bb1cb Binary files /dev/null and b/zsim/data/character_img/2k/1361.png differ diff --git a/zsim/data/character_img/2k/1371_0.png b/zsim/data/character_img/2k/1371_0.png new file mode 100644 index 00000000..d38cd4c1 Binary files /dev/null and b/zsim/data/character_img/2k/1371_0.png differ diff --git a/zsim/data/character_img/2k/1371_1.png b/zsim/data/character_img/2k/1371_1.png new file mode 100644 index 00000000..659ab7d5 Binary files /dev/null and b/zsim/data/character_img/2k/1371_1.png differ diff --git a/zsim/data/character_img/2k/1381.png b/zsim/data/character_img/2k/1381.png new file mode 100644 index 00000000..d8b7b474 Binary files /dev/null and b/zsim/data/character_img/2k/1381.png differ diff --git a/zsim/data/character_img/2k/1391.png b/zsim/data/character_img/2k/1391.png new file mode 100644 index 00000000..a2b3652e Binary files /dev/null and b/zsim/data/character_img/2k/1391.png differ diff --git a/zsim/data/character_img/2k/1411_0.png b/zsim/data/character_img/2k/1411_0.png new file mode 100644 index 00000000..461c8a4e Binary files /dev/null and b/zsim/data/character_img/2k/1411_0.png differ diff --git a/zsim/data/character_img/2k/1411_1.png b/zsim/data/character_img/2k/1411_1.png new file mode 100644 index 00000000..385346c8 Binary files /dev/null and b/zsim/data/character_img/2k/1411_1.png differ diff --git a/zsim/data/character_img/2k/1421.png b/zsim/data/character_img/2k/1421.png new file mode 100644 index 00000000..83804e94 Binary files /dev/null and b/zsim/data/character_img/2k/1421.png differ diff --git a/zsim/data/character_img/2k/6121.png b/zsim/data/character_img/2k/6121.png new file mode 100644 index 00000000..0d7de2a8 Binary files /dev/null and b/zsim/data/character_img/2k/6121.png differ diff --git a/zsim/data/character_img/4k/1011.png b/zsim/data/character_img/4k/1011.png new file mode 100644 index 00000000..6cb766a7 Binary files /dev/null and b/zsim/data/character_img/4k/1011.png differ diff --git a/zsim/data/character_img/4k/1021.png b/zsim/data/character_img/4k/1021.png new file mode 100644 index 00000000..39283c48 Binary files /dev/null and b/zsim/data/character_img/4k/1021.png differ diff --git a/zsim/data/character_img/4k/1031_0.png b/zsim/data/character_img/4k/1031_0.png new file mode 100644 index 00000000..eb83f5e8 Binary files /dev/null and b/zsim/data/character_img/4k/1031_0.png differ diff --git a/zsim/data/character_img/4k/1031_1.png b/zsim/data/character_img/4k/1031_1.png new file mode 100644 index 00000000..247171c1 Binary files /dev/null and b/zsim/data/character_img/4k/1031_1.png differ diff --git a/zsim/data/character_img/4k/1041.png b/zsim/data/character_img/4k/1041.png new file mode 100644 index 00000000..4c457458 Binary files /dev/null and b/zsim/data/character_img/4k/1041.png differ diff --git a/zsim/data/character_img/4k/1061.png b/zsim/data/character_img/4k/1061.png new file mode 100644 index 00000000..40e2e496 Binary files /dev/null and b/zsim/data/character_img/4k/1061.png differ diff --git a/zsim/data/character_img/4k/1081.png b/zsim/data/character_img/4k/1081.png new file mode 100644 index 00000000..cd273601 Binary files /dev/null and b/zsim/data/character_img/4k/1081.png differ diff --git a/zsim/data/character_img/4k/1091.png b/zsim/data/character_img/4k/1091.png new file mode 100644 index 00000000..6f915523 Binary files /dev/null and b/zsim/data/character_img/4k/1091.png differ diff --git a/zsim/data/character_img/4k/1101.png b/zsim/data/character_img/4k/1101.png new file mode 100644 index 00000000..d839f5c2 Binary files /dev/null and b/zsim/data/character_img/4k/1101.png differ diff --git a/zsim/data/character_img/4k/1111.png b/zsim/data/character_img/4k/1111.png new file mode 100644 index 00000000..58bb333b Binary files /dev/null and b/zsim/data/character_img/4k/1111.png differ diff --git a/zsim/data/character_img/4k/1121.png b/zsim/data/character_img/4k/1121.png new file mode 100644 index 00000000..c2ce46b2 Binary files /dev/null and b/zsim/data/character_img/4k/1121.png differ diff --git a/zsim/data/character_img/4k/1131.png b/zsim/data/character_img/4k/1131.png new file mode 100644 index 00000000..f5aa0136 Binary files /dev/null and b/zsim/data/character_img/4k/1131.png differ diff --git a/zsim/data/character_img/4k/1141.png b/zsim/data/character_img/4k/1141.png new file mode 100644 index 00000000..a126daaf Binary files /dev/null and b/zsim/data/character_img/4k/1141.png differ diff --git a/zsim/data/character_img/4k/1151.png b/zsim/data/character_img/4k/1151.png new file mode 100644 index 00000000..ae0ffbef Binary files /dev/null and b/zsim/data/character_img/4k/1151.png differ diff --git a/zsim/data/character_img/4k/1161.png b/zsim/data/character_img/4k/1161.png new file mode 100644 index 00000000..798b4789 Binary files /dev/null and b/zsim/data/character_img/4k/1161.png differ diff --git a/zsim/data/character_img/4k/1171.png b/zsim/data/character_img/4k/1171.png new file mode 100644 index 00000000..1d387242 Binary files /dev/null and b/zsim/data/character_img/4k/1171.png differ diff --git a/zsim/data/character_img/4k/1181.png b/zsim/data/character_img/4k/1181.png new file mode 100644 index 00000000..253511e0 Binary files /dev/null and b/zsim/data/character_img/4k/1181.png differ diff --git a/zsim/data/character_img/4k/1191_0.png b/zsim/data/character_img/4k/1191_0.png new file mode 100644 index 00000000..23556ed3 Binary files /dev/null and b/zsim/data/character_img/4k/1191_0.png differ diff --git a/zsim/data/character_img/4k/1191_1.png b/zsim/data/character_img/4k/1191_1.png new file mode 100644 index 00000000..90f83f3e Binary files /dev/null and b/zsim/data/character_img/4k/1191_1.png differ diff --git a/zsim/data/character_img/4k/1201.png b/zsim/data/character_img/4k/1201.png new file mode 100644 index 00000000..d888577a Binary files /dev/null and b/zsim/data/character_img/4k/1201.png differ diff --git a/zsim/data/character_img/4k/1211.png b/zsim/data/character_img/4k/1211.png new file mode 100644 index 00000000..7723794d Binary files /dev/null and b/zsim/data/character_img/4k/1211.png differ diff --git a/zsim/data/character_img/4k/1221.png b/zsim/data/character_img/4k/1221.png new file mode 100644 index 00000000..b585ee56 Binary files /dev/null and b/zsim/data/character_img/4k/1221.png differ diff --git a/zsim/data/character_img/4k/1241.png b/zsim/data/character_img/4k/1241.png new file mode 100644 index 00000000..f0da0efa Binary files /dev/null and b/zsim/data/character_img/4k/1241.png differ diff --git a/zsim/data/character_img/4k/1261.png b/zsim/data/character_img/4k/1261.png new file mode 100644 index 00000000..60b46ad0 Binary files /dev/null and b/zsim/data/character_img/4k/1261.png differ diff --git a/zsim/data/character_img/4k/1291.png b/zsim/data/character_img/4k/1291.png new file mode 100644 index 00000000..fbc1d38d Binary files /dev/null and b/zsim/data/character_img/4k/1291.png differ diff --git a/zsim/data/character_img/4k/1300.png b/zsim/data/character_img/4k/1300.png new file mode 100644 index 00000000..bd682910 Binary files /dev/null and b/zsim/data/character_img/4k/1300.png differ diff --git a/zsim/data/character_img/4k/1301.png b/zsim/data/character_img/4k/1301.png new file mode 100644 index 00000000..8f19b648 Binary files /dev/null and b/zsim/data/character_img/4k/1301.png differ diff --git a/zsim/data/character_img/4k/1302.png b/zsim/data/character_img/4k/1302.png new file mode 100644 index 00000000..b3121a11 Binary files /dev/null and b/zsim/data/character_img/4k/1302.png differ diff --git a/zsim/data/character_img/4k/1311_0.png b/zsim/data/character_img/4k/1311_0.png new file mode 100644 index 00000000..b649ce93 Binary files /dev/null and b/zsim/data/character_img/4k/1311_0.png differ diff --git a/zsim/data/character_img/4k/1311_1.png b/zsim/data/character_img/4k/1311_1.png new file mode 100644 index 00000000..46a77c32 Binary files /dev/null and b/zsim/data/character_img/4k/1311_1.png differ diff --git a/zsim/data/character_img/4k/1321.png b/zsim/data/character_img/4k/1321.png new file mode 100644 index 00000000..51ae5cbf Binary files /dev/null and b/zsim/data/character_img/4k/1321.png differ diff --git a/zsim/data/character_img/4k/1331.png b/zsim/data/character_img/4k/1331.png new file mode 100644 index 00000000..d817ab95 Binary files /dev/null and b/zsim/data/character_img/4k/1331.png differ diff --git a/zsim/data/character_img/4k/1351.png b/zsim/data/character_img/4k/1351.png new file mode 100644 index 00000000..4cb74bd2 Binary files /dev/null and b/zsim/data/character_img/4k/1351.png differ diff --git a/zsim/data/character_img/4k/1361.png b/zsim/data/character_img/4k/1361.png new file mode 100644 index 00000000..04d7782e Binary files /dev/null and b/zsim/data/character_img/4k/1361.png differ diff --git a/zsim/data/character_img/4k/1371_0.png b/zsim/data/character_img/4k/1371_0.png new file mode 100644 index 00000000..54564d4c Binary files /dev/null and b/zsim/data/character_img/4k/1371_0.png differ diff --git a/zsim/data/character_img/4k/1371_1.png b/zsim/data/character_img/4k/1371_1.png new file mode 100644 index 00000000..e4fec1ff Binary files /dev/null and b/zsim/data/character_img/4k/1371_1.png differ diff --git a/zsim/data/character_img/4k/1381.png b/zsim/data/character_img/4k/1381.png new file mode 100644 index 00000000..80a75ced Binary files /dev/null and b/zsim/data/character_img/4k/1381.png differ diff --git a/zsim/data/character_img/4k/1391.png b/zsim/data/character_img/4k/1391.png new file mode 100644 index 00000000..c45c6638 Binary files /dev/null and b/zsim/data/character_img/4k/1391.png differ diff --git a/zsim/data/character_img/4k/1411_0.png b/zsim/data/character_img/4k/1411_0.png new file mode 100644 index 00000000..97d15d0d Binary files /dev/null and b/zsim/data/character_img/4k/1411_0.png differ diff --git a/zsim/data/character_img/4k/1411_1.png b/zsim/data/character_img/4k/1411_1.png new file mode 100644 index 00000000..bd6f3a4d Binary files /dev/null and b/zsim/data/character_img/4k/1411_1.png differ diff --git a/zsim/data/character_img/4k/1421.png b/zsim/data/character_img/4k/1421.png new file mode 100644 index 00000000..8fe0bdf8 Binary files /dev/null and b/zsim/data/character_img/4k/1421.png differ diff --git a/zsim/data/character_img/4k/6121.png b/zsim/data/character_img/4k/6121.png new file mode 100644 index 00000000..153cb2a8 Binary files /dev/null and b/zsim/data/character_img/4k/6121.png differ diff --git a/zsim/data/cut_char_img.py b/zsim/data/cut_char_img.py new file mode 100644 index 00000000..32cfae30 --- /dev/null +++ b/zsim/data/cut_char_img.py @@ -0,0 +1,30 @@ +import os +import cv2 +import mss +import numpy as np + + +CHARACTER_IMAGE_PATH = "./zsim/data/character_img" + + +with mss.mss() as sct: + # Take a screenshot during fullscreen gaming on a *4K* monitor + # left, top = 1875, 375 + # right, bottom = 1929, 429 + + # Take a screenshot during fullscreen gaming on a *2K* monitor + # left, top = 1250, 249 + # right, bottom = 1286, 285 + + # Take a screenshot during fullscreen gaming on a *1K* monitor + left, top = 937, 187 + right, bottom = 965, 215 + + width = right - left + 1 + height = bottom - top + 1 + + monitor = {"left": left, "top": top, "width": width, "height": height} + img = np.array(sct.grab(monitor))[:, :, :3] + + ch_id = "1041" + cv2.imwrite(os.path.join(CHARACTER_IMAGE_PATH, "1k", ch_id + ".png"), img) diff --git a/zsim/data/star_img/1k/1.png b/zsim/data/star_img/1k/1.png new file mode 100644 index 00000000..6ddf3433 Binary files /dev/null and b/zsim/data/star_img/1k/1.png differ diff --git a/zsim/data/star_img/1k/2.png b/zsim/data/star_img/1k/2.png new file mode 100644 index 00000000..171741d9 Binary files /dev/null and b/zsim/data/star_img/1k/2.png differ diff --git a/zsim/data/star_img/1k/3.png b/zsim/data/star_img/1k/3.png new file mode 100644 index 00000000..4b6226d6 Binary files /dev/null and b/zsim/data/star_img/1k/3.png differ diff --git a/zsim/data/star_img/1k/4.png b/zsim/data/star_img/1k/4.png new file mode 100644 index 00000000..d07efe33 Binary files /dev/null and b/zsim/data/star_img/1k/4.png differ diff --git a/zsim/data/star_img/1k/5.png b/zsim/data/star_img/1k/5.png new file mode 100644 index 00000000..546fdb6a Binary files /dev/null and b/zsim/data/star_img/1k/5.png differ diff --git a/zsim/data/star_img/2k/1.png b/zsim/data/star_img/2k/1.png new file mode 100644 index 00000000..4cd65d98 Binary files /dev/null and b/zsim/data/star_img/2k/1.png differ diff --git a/zsim/data/star_img/2k/2.png b/zsim/data/star_img/2k/2.png new file mode 100644 index 00000000..2f868283 Binary files /dev/null and b/zsim/data/star_img/2k/2.png differ diff --git a/zsim/data/star_img/2k/3.png b/zsim/data/star_img/2k/3.png new file mode 100644 index 00000000..26c1a3b8 Binary files /dev/null and b/zsim/data/star_img/2k/3.png differ diff --git a/zsim/data/star_img/2k/4.png b/zsim/data/star_img/2k/4.png new file mode 100644 index 00000000..f862bbd2 Binary files /dev/null and b/zsim/data/star_img/2k/4.png differ diff --git a/zsim/data/star_img/2k/5.png b/zsim/data/star_img/2k/5.png new file mode 100644 index 00000000..89580824 Binary files /dev/null and b/zsim/data/star_img/2k/5.png differ diff --git a/zsim/data/star_img/4k/1.png b/zsim/data/star_img/4k/1.png new file mode 100644 index 00000000..83179f7d Binary files /dev/null and b/zsim/data/star_img/4k/1.png differ diff --git a/zsim/data/star_img/4k/2.png b/zsim/data/star_img/4k/2.png new file mode 100644 index 00000000..9ab1c2ac Binary files /dev/null and b/zsim/data/star_img/4k/2.png differ diff --git a/zsim/data/star_img/4k/3.png b/zsim/data/star_img/4k/3.png new file mode 100644 index 00000000..cd7ff355 Binary files /dev/null and b/zsim/data/star_img/4k/3.png differ diff --git a/zsim/data/star_img/4k/4.png b/zsim/data/star_img/4k/4.png new file mode 100644 index 00000000..5a39d7fc Binary files /dev/null and b/zsim/data/star_img/4k/4.png differ diff --git a/zsim/data/star_img/4k/5.png b/zsim/data/star_img/4k/5.png new file mode 100644 index 00000000..42268368 Binary files /dev/null and b/zsim/data/star_img/4k/5.png differ diff --git a/zsim/define.py b/zsim/define.py index d11715a5..6fcafdd7 100644 --- a/zsim/define.py +++ b/zsim/define.py @@ -130,6 +130,8 @@ def update_json_config(template: dict, user: dict) -> bool: ENEMY_DATA_PATH: str = _config["database"]["ENEMY_DATA_PATH"] ENEMY_ADJUSTMENT_PATH: str = _config["database"]["ENEMY_ADJUSTMENT_PATH"] DEFAULT_SKILL_PATH: str = _config["database"]["DEFAULT_SKILL_PATH"] +CHARACTER_IMAGE_PATH: str = _config["database"]["CHARACTER_IMAGE_PATH"] +STAR_IMAGE_PATH: str = _config["database"]["STAR_IMAGE_PATH"] CRIT_BALANCING: bool = _config["character"]["crit_balancing"] BACK_ATTACK_RATE: bool = _config["character"]["back_attack_rate"] # FIXME:背击暂时用几率控制。 diff --git a/zsim/page_recognize_equip.py b/zsim/page_recognize_equip.py new file mode 100644 index 00000000..ccce095a --- /dev/null +++ b/zsim/page_recognize_equip.py @@ -0,0 +1,328 @@ +import os +import re +import mss +import difflib +import streamlit as st + +from zsim.define import EQUIP_2PC_DATA_PATH, CHARACTER_IMAGE_PATH, WEAPON_DATA_PATH, STAR_IMAGE_PATH + + +ch2equips = {} + +if "running" not in st.session_state: + st.session_state.running = False + +st.title("装备识别") +st.markdown("
打开角色-装备页面,点击驱动盘或音擎即可识别(装备要带在角色身上)
", unsafe_allow_html=True) + +with mss.mss() as sct: + monitor_infos = [f"{i}: {m['width']}x{m['height']} ({m['left']},{m['top']})" + for i, m in enumerate(sct.monitors[1:], 1)] + monitor_index = st.selectbox( + "请选择要识别的屏幕", + list(range(1, len(sct.monitors))), + format_func=lambda i: monitor_infos[i-1], + key="monitor_select" + ) + +def fuzzy_match(raw_name: str, name_list: list, min_same: int = 2): + if raw_name in name_list: + return raw_name + + candidates = [] + for e in name_list: + if len(e) != len(raw_name): + continue + match_found = any(a == b and a != '%' for a, b in zip(e, raw_name)) + if len(e) == len(raw_name) and len(set(e) & set(raw_name)) >= min_same and match_found: + candidates.append(e) + + best_name = None + best_ratio = None + + for e in candidates: + ratio = difflib.SequenceMatcher(None, e, raw_name).ratio() + if best_name is None or ratio > best_ratio: + best_name = e + best_ratio = ratio + + return best_name + +def initialization(): + with st.spinner("正在初始化,请稍候..."): + import polars as pl + from cnocr import CnOcr + + ocr = CnOcr() + df = pl.read_csv(EQUIP_2PC_DATA_PATH) + equip_list = df.select(colname = df.columns[0]).to_series().to_list()[1:] + df = pl.read_csv(WEAPON_DATA_PATH) + weapon_list = df.select(colname = df.columns[0]).to_series().to_list()[1:] + weapon_list = [w for w in weapon_list if re.fullmatch(r'[\u4e00-\u9fa5]+', str(w))] + + with mss.mss() as sct: + monitor = sct.monitors[monitor_index] + (current_w, current_h) = (monitor['width'], monitor['height']) + if (current_w, current_h) == (3840, 2160): + suffix = "4k" + recog_head_scale = 0.2 + recog_words_scale = 0.3 + elif (current_w, current_h) == (2560, 1440): + suffix = "2k" + recog_head_scale = 1 + recog_words_scale = 0.5 + elif (current_w, current_h) == (1920, 1080): + suffix = "1k" + recog_head_scale = 1 + recog_words_scale = 0.5 + else: + raise ValueError(f"当前分辨率 {current_w}x{current_h} 不支持。仅支持 3840x2160, 2560x1440, 1920x1080。") + + char_img_list = [os.path.join(CHARACTER_IMAGE_PATH, suffix, f) for f in os.listdir(os.path.join(CHARACTER_IMAGE_PATH, suffix)) if f.lower().endswith('.png')] + star_img_list = [os.path.join(STAR_IMAGE_PATH, suffix, f) for f in os.listdir(os.path.join(STAR_IMAGE_PATH, suffix)) if f.lower().endswith('.png')] + equip_name_and_loc_pattern = re.compile(r"^([\u4e00-\u9fa5]+).*?(\d)") + sub_attr_name_and_num_pattern = re.compile(r"^([\u4e00-\u9fa5]+).*?(\d+)?$") + sub_attr_value_pattern = re.compile(r"^([1-9]\d*(?:\.\d)?%?)$") + + sub_attr_dict = { + "攻击力": 19, + "防御力": 15, + "生命值": 112, + "攻击力%": 3, + "防御力%": 4.8, + "生命值%": 3, + "穿透值": 9, + "穿透率%": (6, 1.2), + "暴击率%": 2.4, + "暴击伤害%": 4.8, + "异常精通": 9, + "异常掌控%": (7.5, 1.5), + "冲击力%": (4.5, 0.9), + "能量自动回复%": (15, 3), + "物理伤害加成%": (7.5, 1.5), + "火属性伤害加成%": (7.5, 1.5), + "冰属性伤害加成%": (7.5, 1.5), + "电属性伤害加成%": (7.5, 1.5), + "以太伤害加成%": (7.5, 1.5), + } + + # 存入 session_state + st.session_state.ocr = ocr + st.session_state.monitor = monitor + st.session_state.equip_list = equip_list + st.session_state.recog_head_scale = recog_head_scale + st.session_state.recog_words_scale = recog_words_scale + st.session_state.char_img_list = char_img_list + st.session_state.star_img_list = star_img_list + st.session_state.equip_name_and_loc_pattern = equip_name_and_loc_pattern + st.session_state.sub_attr_name_and_num_pattern = sub_attr_name_and_num_pattern + st.session_state.sub_attr_value_pattern = sub_attr_value_pattern + st.session_state.sub_attr_dict = sub_attr_dict + st.session_state.weapon_list = weapon_list + +def loop_function(): + placeholder = st.empty() + import cv2 + import numpy as np + with mss.mss() as sct: + while st.session_state.running: + try: + original_img = np.array(sct.grab(st.session_state.monitor))[:, :, :3] + h, w = original_img.shape[:2] + y1 = 0 + y2 = h // 3 + x1 = w // 3 + x2 = 2 * w // 3 + img = original_img[y1:y2, x1:x2] + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + img = cv2.resize(img, (0, 0), fx=st.session_state.recog_head_scale, fy=st.session_state.recog_head_scale) + ch2sim = {} + for template_path in st.session_state.char_img_list: + template = cv2.imread(template_path, 0) + template = cv2.resize(template, (0, 0), fx=st.session_state.recog_head_scale, fy=st.session_state.recog_head_scale) + character_id = os.path.splitext(os.path.basename(template_path))[0] + res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED) + score = res.max() + ch2sim[character_id] = score + + ch_id = max(ch2sim, key=ch2sim.get) + max_score = ch2sim[ch_id] + ch_id = ch_id.split('_')[0] + + if max_score >= 0.9: + H, W = original_img.shape[:2] + x1 = int(W * 1200 / 3840) + x2 = int(W * 1960 / 3840) + y1 = int(H * 200 / 2160) + y2 = int(H * 1200 / 2160) + img = original_img[y1:y2, x1:x2] + img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + img = cv2.resize( + img, + (0, 0), + fx=st.session_state.recog_words_scale, + fy=st.session_state.recog_words_scale + ) + result = st.session_state.ocr.ocr(img) + + main_attr = level = equip_name = equip_loc = None + sub_attr = [] + weapon_name = weapon_star = None + + for idx, line in enumerate(result): + text = line['text'].strip() + + match = st.session_state.equip_name_and_loc_pattern.match(text) + if match: + chs = fuzzy_match(match.group(1), st.session_state.equip_list, min_same=2) + digit = int(match.group(2)) + if chs is not None and 1 <= digit <= 6: + equip_name = chs + equip_loc = digit + continue + + try_match = [] + if idx + 1 < len(result): + try_match.append((st.session_state.sub_attr_name_and_num_pattern.match(text), + st.session_state.sub_attr_value_pattern.match(result[idx+1]['text'].strip()))) + if idx + 2 < len(result) and len(result[idx+1]['text'].strip()) == 2: + try_match.append((st.session_state.sub_attr_name_and_num_pattern.match(text+result[idx+1]['text'].strip()), + st.session_state.sub_attr_value_pattern.match(result[idx+2]['text'].strip()))) + + for match1, match2 in try_match: + if not match1 or not match2: + continue + chs = match1.group(1) + digit = int(match1.group(2)) if match1.group(2) is not None else 0 + value = match2.group(1) + + chs = fuzzy_match(chs if value[-1] != "%" else (chs + "%"), st.session_state.sub_attr_dict.keys(), min_same=1) + value = float(value if value[-1] != "%" else value[:-1]) + + if chs is None: + break + + if 0 <= digit <= 5 and value > 0: + if isinstance(st.session_state.sub_attr_dict[chs], (int, float)) and abs(value - st.session_state.sub_attr_dict[chs] * (digit + 1)) < 1e-4: + sub_attr.append((chs, digit + 1, value)) + break + elif digit == 0 and not main_attr: + if (equip_loc, chs) == (1, "生命值"): + level = (value - 550.0) / 110.0 + elif (equip_loc, chs) == (2, "攻击力"): + level_5 = (value - 79.0) // 79.0 + cache = (value - 79.0) % 79.0 + if cache > 0.0: + level_1 = (cache + 1) / 16.0 + level = level_5 * 5 + level_1 + else: + level = level_5 * 5 + elif (equip_loc, chs) == (3, "防御力"): + level_5 = (value - 46.0) // 46.0 + level_1 = ((value - 46.0) % 46.0) / 9.0 + level = level_5 * 5 + level_1 + elif equip_loc in [4, 5, 6] and chs in ["生命值%", "攻击力%", "防御力%"]: + if chs == "防御力%": + level = (value - 12.0) / 2.4 + else: + level = (value - 7.5) / 1.5 + elif isinstance(st.session_state.sub_attr_dict[chs], (tuple)) and equip_loc in [5, 6]: + level = (value - st.session_state.sub_attr_dict[chs][0]) / st.session_state.sub_attr_dict[chs][1] + elif equip_loc == 4: + if chs == "暴击率%": + level = (value - 6.0) / 1.2 + elif chs == "暴击伤害%": + level = (value - 12.0) / 2.4 + elif chs == "异常精通": + level_5 = (value - 23.0) // 23.0 + cache = (value - 23.0) % 23.0 + level_2 = cache // 9.0 + cache = cache % 9.0 + level_1 = cache / 4.0 + level = level_5 * 5 + level_2 * 2 + level_1 + + if level is not None: + main_attr = (chs, value) + + if len(re.findall(r'[\u4e00-\u9fa5]', text)) >= 2: + if weapon_name is None or weapon_star is None: + weapon_name = fuzzy_match(text, st.session_state.weapon_list, min_same=2) + + if weapon_name is not None: + star2sim = {} + for template_path in st.session_state.star_img_list: + template = cv2.imread(template_path, 0) + template = cv2.resize(template, (0, 0), fx=st.session_state.recog_words_scale, fy=st.session_state.recog_words_scale) + star = os.path.splitext(os.path.basename(template_path))[0] + res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED) + score = res.max() + star2sim[star] = score + weapon_star = int(max(star2sim, key=star2sim.get)) + + sub_attr = list(set(sub_attr)) + if ( + equip_name in st.session_state.equip_list + and level is not None + and level.is_integer() + and 0 <= int(level) <= 15 + and ( + len(sub_attr) == 4 + or (len(sub_attr) == 3 and 0 <= int(level) <= 2) + ) + and main_attr + ): + ch2equips[(int(ch_id), int(equip_loc))] = (equip_name, int(level), main_attr, sub_attr) + + if weapon_name is not None and weapon_star is not None: + ch2equips[(int(ch_id), 0)] = (weapon_name, weapon_star) + + except Exception as e: + print("Error occurred: ", e) + + with placeholder.container(): + if ch2equips: + lines = [] + for k, v in ch2equips.items(): + if k[1] == 0: + line = f""" +
+ 角色/位置: {k}  + 武器: {v[0]}  + 星级: {v[1]} +
+ """ + else: + line = f""" +
+ 角色/位置: {k}  + 装备: {v[0]} (Lv.{v[1]})  + 主词条: {v[2][0]}: {v[2][1]}  + 副词条: {','.join([f"{x[0]}({x[1]}):{x[2]}" for x in v[3]])} +
+ """ + lines.append(line) + st.markdown('\n'.join(lines), unsafe_allow_html=True) + else: + st.info("暂无装备识别结果") + +def page_loop_task(): + col_start, col_stop = st.columns(2) + + with col_start: + if st.button("开始"): + st.session_state.running = True + + if not all(x in st.session_state for x in [ + "ocr", "monitor", "equip_list", "recog_head_scale", "recog_words_scale", + "char_img_list", "equip_name_and_loc_pattern", "sub_attr_name_and_num_pattern", + "sub_attr_value_pattern", "sub_attr_dict", "weapon_list" + ]): + initialization() + loop_function() + + with col_stop: + if st.button("停止"): + st.session_state.running = False + st.success("任务已停止") + +page_loop_task() diff --git a/zsim/webui.py b/zsim/webui.py index 90cd4393..1d9c2da7 100644 --- a/zsim/webui.py +++ b/zsim/webui.py @@ -9,6 +9,7 @@ st.Page("page_simulator.py", title="模拟器"), st.Page("page_data_analysis.py", title="数据分析"), st.Page("page_apl_editor.py", title="APL编辑器"), + st.Page("page_recognize_equip.py", title="识别装备"), ], "文档": [ st.Page("lib_webui/doc_pages/page_char_support.py", title="角色支持列表"),