From a148c2d511d5c0abe357c8ea25b4434600787d21 Mon Sep 17 00:00:00 2001 From: Jacky Yang Date: Tue, 27 Jan 2026 02:20:55 +0800 Subject: [PATCH] 1.3.0: Updated ONLINE. --- 6D_README.md => docs/6D_README.md | 0 FeatureDemoRDD.md => docs/FeatureDemoRDD.md | 0 FeatureRDD.md => docs/FeatureRDD.md | 0 WebRDD.md => docs/WebRDD.md | 0 {database/docs => docs}/original/特征维度prompt.md | 0 {database/docs => docs}/事件结构统一方案.md | 0 requirements.txt | 2 ++ check_l3_final.py => scripts/check_l3_final.py | 0 run_rebuild_fix.py => scripts/run_rebuild_fix.py | 0 web/services/feature_service.py | 13 ++++++++++++- web/templates/players/profile.html | 12 ++++++++++-- wsgi.py | 12 ++++++++++++ 12 files changed, 36 insertions(+), 3 deletions(-) rename 6D_README.md => docs/6D_README.md (100%) rename FeatureDemoRDD.md => docs/FeatureDemoRDD.md (100%) rename FeatureRDD.md => docs/FeatureRDD.md (100%) rename WebRDD.md => docs/WebRDD.md (100%) rename {database/docs => docs}/original/特征维度prompt.md (100%) rename {database/docs => docs}/事件结构统一方案.md (100%) rename check_l3_final.py => scripts/check_l3_final.py (100%) rename run_rebuild_fix.py => scripts/run_rebuild_fix.py (100%) create mode 100644 wsgi.py diff --git a/6D_README.md b/docs/6D_README.md similarity index 100% rename from 6D_README.md rename to docs/6D_README.md diff --git a/FeatureDemoRDD.md b/docs/FeatureDemoRDD.md similarity index 100% rename from FeatureDemoRDD.md rename to docs/FeatureDemoRDD.md diff --git a/FeatureRDD.md b/docs/FeatureRDD.md similarity index 100% rename from FeatureRDD.md rename to docs/FeatureRDD.md diff --git a/WebRDD.md b/docs/WebRDD.md similarity index 100% rename from WebRDD.md rename to docs/WebRDD.md diff --git a/database/docs/original/特征维度prompt.md b/docs/original/特征维度prompt.md similarity index 100% rename from database/docs/original/特征维度prompt.md rename to docs/original/特征维度prompt.md diff --git a/database/docs/事件结构统一方案.md b/docs/事件结构统一方案.md similarity index 100% rename from database/docs/事件结构统一方案.md rename to docs/事件结构统一方案.md diff --git a/requirements.txt b/requirements.txt index 4930105..9cb446d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,5 @@ Flask pandas numpy playwright +gunicorn +gevent diff --git a/check_l3_final.py b/scripts/check_l3_final.py similarity index 100% rename from check_l3_final.py rename to scripts/check_l3_final.py diff --git a/run_rebuild_fix.py b/scripts/run_rebuild_fix.py similarity index 100% rename from run_rebuild_fix.py rename to scripts/run_rebuild_fix.py diff --git a/web/services/feature_service.py b/web/services/feature_service.py index b1cf451..04a765f 100644 --- a/web/services/feature_service.py +++ b/web/services/feature_service.py @@ -295,7 +295,9 @@ class FeatureService: SUM(first_death) as sum_fd, SUM(clutch_1v1) as sum_1v1, SUM(clutch_1v2) as sum_1v2, - SUM(clutch_1v3) + SUM(clutch_1v4) + SUM(clutch_1v5) as sum_1v3p, + SUM(clutch_1v3) as sum_1v3, + SUM(clutch_1v4) as sum_1v4, + SUM(clutch_1v5) as sum_1v5, SUM(kill_2) as sum_2k, SUM(kill_3) as sum_3k, SUM(kill_4) as sum_4k, @@ -340,6 +342,15 @@ class FeatureService: df['basic_avg_kill_3'] = df['sum_3k'] / df['matches_played'] df['basic_avg_kill_4'] = df['sum_4k'] / df['matches_played'] df['basic_avg_kill_5'] = df['sum_5k'] / df['matches_played'] + + # New Metrics + df['basic_multi_kill_rate'] = (df['sum_2k'] + df['sum_3k'] + df['sum_4k'] + df['sum_5k']) / df['rounds_played'].replace(0, 1) + df['basic_total_1v1'] = df['sum_1v1'] + df['basic_total_1v2'] = df['sum_1v2'] + df['basic_total_1v3'] = df['sum_1v3'] + df['basic_total_1v4'] = df['sum_1v4'] + df['basic_total_1v5'] = df['sum_1v5'] + df['basic_avg_assisted_kill'] = df['sum_assist'] / df['matches_played'] df['basic_avg_perfect_kill'] = df['sum_perfect'] / df['matches_played'] df['basic_avg_revenge_kill'] = df['sum_revenge'] / df['matches_played'] diff --git a/web/templates/players/profile.html b/web/templates/players/profile.html index 989f5c9..c021968 100644 --- a/web/templates/players/profile.html +++ b/web/templates/players/profile.html @@ -222,8 +222,16 @@ {{ detail_item('3K Rounds (三杀)', features['basic_avg_kill_3'], 'basic_avg_kill_3') }} {{ detail_item('4K Rounds (四杀)', features['basic_avg_kill_4'], 'basic_avg_kill_4') }} {{ detail_item('5K Rounds (五杀)', features['basic_avg_kill_5'], 'basic_avg_kill_5') }} + {{ detail_item('Multi-Kill % (多杀率)', features['basic_multi_kill_rate'], 'basic_multi_kill_rate', '{:.1%}') }} - + + {{ detail_item('1v1 Wins (1v1胜)', features['basic_total_1v1'], 'basic_total_1v1', '{:.0f}') }} + {{ detail_item('1v2 Wins (1v2胜)', features['basic_total_1v2'], 'basic_total_1v2', '{:.0f}') }} + {{ detail_item('1v3 Wins (1v3胜)', features['basic_total_1v3'], 'basic_total_1v3', '{:.0f}') }} + {{ detail_item('1v4 Wins (1v4胜)', features['basic_total_1v4'], 'basic_total_1v4', '{:.0f}') }} + {{ detail_item('1v5 Wins (1v5胜)', features['basic_total_1v5'], 'basic_total_1v5', '{:.0f}') }} + + {{ detail_item('Perfect Kills (无伤杀)', features['basic_avg_perfect_kill'], 'basic_avg_perfect_kill') }} {{ detail_item('Revenge Kills (复仇杀)', features['basic_avg_revenge_kill'], 'basic_avg_revenge_kill') }} @@ -602,7 +610,7 @@ document.addEventListener('DOMContentLoaded', function() { // Map friendly names to keys const keys = ['score_bat', 'score_hps', 'score_ptl', 'score_tct', 'score_util', 'score_sta']; // Corresponding Labels - const rawLabels = ['Aim (BAT)', 'Clutch (HPS)', 'Pistol (PTL)', 'Defense (SIDE)', 'Util (UTIL)', 'Rating (STA)']; + const rawLabels = ['Aim (BAT)', 'Clutch (HPS)', 'Pistol (PTL)', 'Defense (SIDE)', 'Util (UTIL)', 'Stability (STA)']; const labels = rawLabels.map((l, i) => { const k = keys[i]; diff --git a/wsgi.py b/wsgi.py new file mode 100644 index 0000000..0d0c430 --- /dev/null +++ b/wsgi.py @@ -0,0 +1,12 @@ +import sys +import os + +# Ensure the project root is in sys.path +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from web.app import create_app + +app = create_app() + +if __name__ == "__main__": + app.run()