📋 表概述

log_arena_memberstats 表以成员维度记录每场竞技场战斗中每个玩家的详细表现,包括玩家身份、所属队伍、账号IP、输出治疗和击杀等关键战斗数据。

📊 表结构

字段名数据类型默认值说明
fight_idint UNSIGNED(无)战斗ID,关联 log_arena_fights
member_idtinyint UNSIGNED(无)队员编号(0~5),区分同一场中的不同队员
namechar(20)(无)玩家角色名称
guidint UNSIGNED(无)玩家角色 GUID,关联 characters.guid
teamint UNSIGNED(无)所属队伍 ID
accountint UNSIGNED(无)玩家账号 ID
ipchar(15)(无)玩家 IP 地址
damageint UNSIGNED(无)本场所造成的总伤害值
healint UNSIGNED(无)本场所造成的总治疗值
kblowsint UNSIGNED(无)本场击杀次数(最后一击)

🔍 重要字段详解

member_id — 队员编号

同一场战斗中每个队员的唯一编号,通常 winner 方为 0~N-1,loser 方为 N~2N-1。用于在一场比赛记录中区分不同玩家。

account / ip — 账号与 IP 信息

记录玩家账号 ID 和 IP 地址。这些数据可用于反作弊检测——例如检查有无同一 IP 登录不同队伍进行刷分的异常行为。

damage / heal / kblows — 战斗表现

damage 为总伤害输出,heal 为总治疗输出,kblows 为击杀次数(killing blows)。是评估玩家实战表现的核心指标。

💡 SQL查询示例

查询某玩家最近参与的竞技场战斗数据

SELECT lf.fight_id, lf.time, lam.name, lam.damage, lam.heal, lam.kblows
FROM log_arena_memberstats lam
JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id
WHERE lam.guid = 12345
ORDER BY lf.time DESC
LIMIT 10;

查询某场比赛的所有队员统计数据

SELECT lam.member_id, lam.name, lam.team,
       lam.damage, lam.heal, lam.kblows,
       CASE WHEN lam.team = lf.winner THEN '胜' ELSE '负' END AS 结果
FROM log_arena_memberstats lam
JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id
WHERE lam.fight_id = 1000;

❓ 常见问题

Q: 如何检测竞技场刷分行为?

通过检查 log_arena_memberstats 中同一 IP 地址是否出现在胜负双方队伍中。如果同一 IP 多次出现且多为"送分"模式,就可能是刷分行为:SELECT lf.fight_id, COUNT(DISTINCT lam.team) as teams, COUNT(*) as players FROM log_arena_memberstats lam JOIN log_arena_fights lf ON lam.fight_id = lf.fight_id WHERE lam.ip IN (SELECT ip FROM log_arena_memberstats GROUP BY ip HAVING COUNT(DISTINCT fight_id) > 100) GROUP BY lf.fight_id HAVING COUNT(DISTINCT lam.ip) < LEAST(teams, 4);

Q: 如何查看某个账号所有角色的竞技场表现?

通过 account 字段聚合查询即可:SELECT lam.guid, lam.name, SUM(lam.damage) as total_damage, COUNT(DISTINCT lam.fight_id) as fights FROM log_arena_memberstats lam WHERE lam.account = 100 GROUP BY lam.guid, lam.name;