Initial import of HEROLL source and design documents

This commit is contained in:
toshiocn
2026-10-26 16:05:39 +08:00
commit fdb55672c1
1846 changed files with 290692 additions and 0 deletions
@@ -0,0 +1,22 @@
"event_name","trigger","required_fields","privacy_rule","validation"
"run_start","服务端确认体力扣除并生成 run_id 后","run_id,mode,stage,loop,energy_before,energy_after,seed_version,boosters","不记录广告 ID 或账户明文","run_id 全局唯一;体力流水恰好一条"
"dice_roll_committed","骰子结果写入局内状态时","run_id,turn,dice_a,dice_b,is_double,position_before,position_after,rng_counter","seed 仅记录版本和审计散列,不上传可反推账户的信息","每次移动前恰好一个 committed 事件;与存档可重放一致"
"tile_landed","棋子完成落点处理时","run_id,turn,tile_id,tile_type,reward_ids,combat_id","不记录自由文本","位置与 dice_roll_committed 对得上"
"battle_end","战斗状态进入 PostBattle 时","run_id,battle_id,result,duration_sec,hp_ratio,rewards,revive_count","不上传设备稳定标识","奖励流水总和与 reward_grant 一致"
"run_end","结算或合法退出时","run_id,result,stage,loop,duration_sec,reason,rewards","reason 使用枚举","每个 run_id 最终恰好一个终态"
"economy_flow","任何资源变化时","transaction_id,resource_id,delta,balance_after,source_or_sink,reason,run_id,sku_id","sku_id 可为空;不得含平台回执全文","同 transaction_id 幂等;balance_after 不为非法负数"
"ad_offer","广告入口展示时","placement,run_id,eligible_reason,daily_count","不写广告网络用户标识","非 eligible 状态不得出现 offer"
"ad_start","播放器确认开始时","placement,request_id,network,daily_count","network 为枚举,不记录 ad_unit_id","必须先有同 request_id 的成功加载状态"
"ad_complete","服务端接受完成证明时","placement,request_id,reward_transaction_id,duration_sec","不记录广告收入明细到客户端分析流","一个 request_id 最多发放一次奖励"
"ad_fail","加载或播放失败时","placement,request_id,error_category,retryable","错误详情脱敏","失败不增加已完成次数且不扣奖励资格"
"store_view","商店或礼包页面曝光时","surface,catalog_version,visible_skus,session_impression_count","不记录平台支付账户信息","visible_skus 必须均为当前平台 available"
"purchase_start","玩家在确认页主动提交时","sku_id,localized_price,currency,catalog_version,offer_context","价格来自平台;不上传支付凭证","必须存在先前 purchase_confirm_view"
"platform_purchase_result","平台返回购买状态时","sku_id,transaction_id,status,error_category","回执只发安全校验服务,不进普通分析仓","重复平台回调不重复记 success"
"receipt_verify","服务端校验回执时","sku_id,transaction_id,result,platform,latency_ms","严禁记录原始回执、签名和账户标识","成功后才能产生 entitlement_grant 或 reward_grant"
"entitlement_grant","永久/订阅权益发放时","transaction_id,entitlement_id,start_at,end_at,restore","时间为 UTC","恢复购买不会创建重复权益"
"gacha_pull_start","抽取消耗确认时","pull_id,pool_id,cost_resource,cost,pity_before,probability_version","不上传可预测随机种子","先成功扣费再请求服务端结果,失败可原子回滚"
"gacha_pull_result","服务端结果落库时","pull_id,pool_id,item_id,rarity,is_duplicate,pity_after,conversion","不含 RNG 内部状态","与概率版本、保底规则一致;pull_id 幂等"
"offer_impression","礼包卡片达到可见阈值时","offer_id,trigger,stage,time_since_failure_sec,impression_count","不使用敏感画像字段","post_failure_disabled 时 time_since_failure_sec 小于 1800 的事件数为 0"
"pass_xp_gain","通行证经验变化时","season_id,source,delta,xp_after,free_cap,premium_cap","不记录任务自由文本","经验上限与配置一致;购买高级轨不重置既有经验"
"afk_claim","领取离线收益时","offline_sec,capped_sec,multiplier,rewards,quick,ad_used","不记录前后台应用列表","服务器时间决定 capped_sec;相同领取窗口只发一次"
1 event_name trigger required_fields privacy_rule validation
2 run_start 服务端确认体力扣除并生成 run_id 后 run_id,mode,stage,loop,energy_before,energy_after,seed_version,boosters 不记录广告 ID 或账户明文 run_id 全局唯一;体力流水恰好一条
3 dice_roll_committed 骰子结果写入局内状态时 run_id,turn,dice_a,dice_b,is_double,position_before,position_after,rng_counter seed 仅记录版本和审计散列,不上传可反推账户的信息 每次移动前恰好一个 committed 事件;与存档可重放一致
4 tile_landed 棋子完成落点处理时 run_id,turn,tile_id,tile_type,reward_ids,combat_id 不记录自由文本 位置与 dice_roll_committed 对得上
5 battle_end 战斗状态进入 PostBattle 时 run_id,battle_id,result,duration_sec,hp_ratio,rewards,revive_count 不上传设备稳定标识 奖励流水总和与 reward_grant 一致
6 run_end 结算或合法退出时 run_id,result,stage,loop,duration_sec,reason,rewards reason 使用枚举 每个 run_id 最终恰好一个终态
7 economy_flow 任何资源变化时 transaction_id,resource_id,delta,balance_after,source_or_sink,reason,run_id,sku_id sku_id 可为空;不得含平台回执全文 同 transaction_id 幂等;balance_after 不为非法负数
8 ad_offer 广告入口展示时 placement,run_id,eligible_reason,daily_count 不写广告网络用户标识 非 eligible 状态不得出现 offer
9 ad_start 播放器确认开始时 placement,request_id,network,daily_count network 为枚举,不记录 ad_unit_id 必须先有同 request_id 的成功加载状态
10 ad_complete 服务端接受完成证明时 placement,request_id,reward_transaction_id,duration_sec 不记录广告收入明细到客户端分析流 一个 request_id 最多发放一次奖励
11 ad_fail 加载或播放失败时 placement,request_id,error_category,retryable 错误详情脱敏 失败不增加已完成次数且不扣奖励资格
12 store_view 商店或礼包页面曝光时 surface,catalog_version,visible_skus,session_impression_count 不记录平台支付账户信息 visible_skus 必须均为当前平台 available
13 purchase_start 玩家在确认页主动提交时 sku_id,localized_price,currency,catalog_version,offer_context 价格来自平台;不上传支付凭证 必须存在先前 purchase_confirm_view
14 platform_purchase_result 平台返回购买状态时 sku_id,transaction_id,status,error_category 回执只发安全校验服务,不进普通分析仓 重复平台回调不重复记 success
15 receipt_verify 服务端校验回执时 sku_id,transaction_id,result,platform,latency_ms 严禁记录原始回执、签名和账户标识 成功后才能产生 entitlement_grant 或 reward_grant
16 entitlement_grant 永久/订阅权益发放时 transaction_id,entitlement_id,start_at,end_at,restore 时间为 UTC 恢复购买不会创建重复权益
17 gacha_pull_start 抽取消耗确认时 pull_id,pool_id,cost_resource,cost,pity_before,probability_version 不上传可预测随机种子 先成功扣费再请求服务端结果,失败可原子回滚
18 gacha_pull_result 服务端结果落库时 pull_id,pool_id,item_id,rarity,is_duplicate,pity_after,conversion 不含 RNG 内部状态 与概率版本、保底规则一致;pull_id 幂等
19 offer_impression 礼包卡片达到可见阈值时 offer_id,trigger,stage,time_since_failure_sec,impression_count 不使用敏感画像字段 post_failure_disabled 时 time_since_failure_sec 小于 1800 的事件数为 0
20 pass_xp_gain 通行证经验变化时 season_id,source,delta,xp_after,free_cap,premium_cap 不记录任务自由文本 经验上限与配置一致;购买高级轨不重置既有经验
21 afk_claim 领取离线收益时 offline_sec,capped_sec,multiplier,rewards,quick,ad_used 不记录前后台应用列表 服务器时间决定 capped_sec;相同领取窗口只发一次