| name | honor-system |
| description | 电竞经理游戏的荣誉记录系统。管理战队和选手的冠军、MVP等荣誉记录、荣誉殿堂数据聚合。当需要修改荣誉类型、MVP计算逻辑、荣誉展示时使用此技能。 |
荣誉记录系统 (Honor System)
Overview
荣誉记录系统负责记录和管理所有赛事中产生的荣誉,包括战队冠亚季殿军、选手冠军成员、赛事MVP、决赛MVP等。系统提供荣誉殿堂数据聚合和统计功能。
核心组件
HonorEngine
文件: src-tauri/src/engines/honor.rs
荣誉引擎,统一管理所有荣誉的创建、计算和聚合。
pub struct HonorEngine;
核心方法:
荣誉创建
create_team_champion(...) - 记录战队冠军
create_team_runner_up(...) - 记录战队亚军
create_team_third(...) - 记录战队季军
create_team_fourth(...) - 记录战队殿军
create_player_champion(...) - 记录选手冠军(冠军队成员)
create_tournament_mvp(...) - 记录赛事MVP
create_finals_mvp(...) - 记录决赛MVP
create_regular_season_mvp(...) - 记录常规赛MVP
create_playoffs_fmvp(...) - 记录季后赛FMVP
MVP计算
calculate_tournament_mvp(performances) - 计算赛事MVP(累计影响力最高)
calculate_finals_mvp(performances) - 计算决赛MVP(胜方影响力最高)
数据聚合
process_tournament_honors(...) - 处理赛事结束时的所有荣誉
build_honor_hall(all_honors) - 构建荣誉殿堂数据
count_team_champions(honors, team_id) - 统计战队冠军数
count_player_champions(honors, player_id) - 统计选手冠军数
count_player_mvps(honors, player_id) - 统计选手MVP数
数据结构
HonorType (荣誉类型)
文件: src-tauri/src/models/honor.rs
pub enum HonorType {
TeamChampion,
TeamRunnerUp,
TeamThird,
TeamFourth,
PlayerChampion,
PlayerRunnerUp,
PlayerThird,
PlayerFourth,
TournamentMvp,
FinalsMvp,
RegularSeasonMvp,
PlayoffsFmvp,
}
Honor (荣誉记录)
pub struct Honor {
pub id: u64,
pub save_id: String,
pub honor_type: HonorType,
pub season_id: u64,
pub tournament_id: Option<u64>,
pub tournament_name: String,
pub tournament_type: String,
pub team_id: Option<u64>,
pub team_name: Option<String>,
pub player_id: Option<u64>,
pub player_name: Option<String>,
pub position: Option<String>,
pub stats: Option<HonorStats>,
pub created_at: String,
}
HonorStats (荣誉统计)
pub struct HonorStats {
pub total_impact: f64,
pub mvp_count: u32,
pub games_played: u32,
pub wins: u32,
pub avg_performance: f64,
}
TournamentHonors (赛事荣誉集合)
pub struct TournamentHonors {
pub team_champion: Option<Honor>,
pub team_runner_up: Option<Honor>,
pub team_third: Option<Honor>,
pub team_fourth: Option<Honor>,
pub player_champions: Vec<Honor>,
pub tournament_mvp: Option<Honor>,
pub finals_mvp: Option<Honor>,
}
HonorHallData (荣誉殿堂)
pub struct HonorHallData {
pub champions: Vec<Honor>,
pub champions_by_type: HashMap<String, Vec<Honor>>,
pub mvps: Vec<Honor>,
}
Tauri 命令接口
文件: src-tauri/src/commands/honor_commands.rs
| 命令 | 功能 | 返回类型 |
|---|
get_honor_hall | 获取荣誉殿堂数据 | HonorHallData |
get_team_honors | 获取战队所有荣誉 | Vec<Honor> |
get_player_honors | 获取选手所有荣誉 | Vec<Honor> |
get_season_honors | 获取赛季所有荣誉 | Vec<Honor> |
get_tournament_honors | 获取赛事所有荣誉 | Vec<Honor> |
get_team_champion_count | 获取战队冠军数 | u32 |
get_player_champion_count | 获取选手冠军数 | u32 |
get_player_mvp_count | 获取选手MVP数 | u32 |
get_team_honor_stats | 获取战队荣誉统计 | TeamHonorStats |
get_player_honor_stats | 获取选手荣誉统计 | PlayerHonorStats |
get_champions_by_type | 按赛事类型获取冠军 | Vec<Honor> |
get_all_champions | 获取所有冠军记录 | Vec<Honor> |
get_all_mvps | 获取所有MVP记录 | Vec<Honor> |
前端 API
文件: src/api/tauri.ts
export async function getHonorHall(): Promise<HonorHallData>
export async function getTeamHonors(teamId: number): Promise<Honor[]>
export async function getPlayerHonors(playerId: number): Promise<Honor[]>
export async function getTeamChampionCount(teamId: number): Promise<number>
export async function getPlayerMvpCount(playerId: number): Promise<number>
MVP 计算规则
赛事MVP (TournamentMvp)
- 统计整个赛事中所有选手的表现
- 选取累计影响力最高的选手
- 不限制胜负方
pub fn calculate_tournament_mvp(
&self,
player_performances: &[(player_id, name, team_id, team_name, position, impact, is_winner, is_mvp)]
) -> Option<PlayerTournamentStats>
决赛MVP (FinalsMvp)
- 只统计决赛场次
- 只考虑胜方队伍的选手
- 选取胜方累计影响力最高的选手
pub fn calculate_finals_mvp(
&self,
finals_performances: &[(player_id, name, team_id, team_name, position, impact, is_winner)]
) -> Option<(player_id, name, team_id, team_name, position, HonorStats)>
系统集成
与时间推进系统
- 赛事完成时调用
process_tournament_honors 生成所有荣誉
- 赛季结算时汇总年度荣誉
与数据中心系统
- MVP计算依赖
PlayerTournamentStats 数据
total_impact、avg_performance 等统计来自数据中心
与选手系统
- 荣誉影响选手声望和市场价值
- 冠军数/MVP数是选手履历的重要组成
与财政系统
使用示例
处理赛事结束荣誉
let engine = HonorEngine::new();
let honors = engine.process_tournament_honors(
&save_id,
season_id,
tournament_id,
"S1 世界赛",
"WorldChampionship",
(t1_id, "T1"),
(gen_id, "GEN"),
Some((jdg_id, "JDG")),
Some((blg_id, "BLG")),
&champion_players,
Some(&mvp_stats),
Some(finals_mvp_info),
);
HonorRepository::save_batch(&pool, &honors.to_vec()).await?;
查询荣誉殿堂
const hall = await getHonorHall()
const worldsChampions = hall.champions_by_type['WorldChampionship']
worldsChampions.forEach(h => {
console.log(`S${h.season_id} 世界冠军: ${h.team_name}`)
})
console.log(`MVP总数: ${hall.mvps.length}`)
统计选手荣誉
const championCount = await getPlayerChampionCount(playerId)
const mvpCount = await getPlayerMvpCount(playerId)
console.log(`冠军: ${championCount}x | MVP: ${mvpCount}x`)
注意事项
- 荣誉去重: 同一赛事不应重复记录相同荣誉,需检查是否已存在
- 选手冠军: 只记录比赛时的首发/出场选手,替补不自动获得
- 决赛MVP: 必须来自胜方队伍
- 荣誉持久化: 赛事结束后立即保存,避免数据丢失
- 荣誉殿堂缓存: 可考虑缓存
HonorHallData 提升查询性能