Files
mtgodot-poc/audit/contracts/function-inventory.md
T
shenandshen c93894313a fix: 装备属性面板避让逻辑 + 多项功能更新
- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧
- inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域
- 包含其他累积的功能开发和测试文件
2026-09-21 16:38:59 -07:00

17 KiB

40250 全功能审计合同清单

目的与范围

本文件把 ClientVS22/source 中可达的客户端行为,按“外部可观察功能”而不是按源文件拆成稳定合同。每个合同都必须继续追踪完整调用链:触发条件、前置检查、分支、算法/单位、状态写入顺序、动作或资源事件、协议副作用、失败/中断/清理。

参考范围:

  • ../40250/Server Client TMP4/ClientVS22/source/UserInterface
  • ../40250/Server Client TMP4/ClientVS22/source/GameLib
  • ../40250/Server Client TMP4/ClientVS22/source/EffectLib
  • ../40250/Server Client TMP4/ClientVS22/source/EterLib
  • ../40250/Server Client TMP4/ClientVS22/source/EterGrnLib
  • ../40250/Server Client TMP4/ClientVS22/source/PRTerrainLib
  • ../40250/Server Client TMP4/ClientVS22/source/MilesLib
  • ../40250/Server Client TMP4/ClientVS22/source/EterPack
  • ../40250/Server Client TMP4/ClientVS22/source/EterLocale

当前范围:project/extension/formats/assets/libgr2/oracle/ 中会影响运行时行为的代码、资源读取和测试。第三方库、禁用代码、仅构建工具不作为独立 40250 行为合同;如果当前客户端存在没有 40250 对应物的扩展功能,则登记到 extension.current_only_features,不能静默算作已兼容。

MAPPED 只表示两边入口已经定位,UNMAPPED 表示尚未找到当前实现或参考映射,PARTIAL 表示已经发现差异。任何新合同都必须先进入 audit/manifest.json,再开始实现或验证。

合同总表

ID 功能 参考入口 当前入口 初始状态
lifecycle.bootstrap_phase_host 启动、阶段属主、窗口和应用生命周期 PythonApplication*, UserInterface.cpp, PythonApplicationProcedure.cpp client_main.gd, app_flow.gd, app_lifecycle.gd, intro_*_phase.gd MAPPED
network.login.phase_flow 登录、握手、选人、加载、进入游戏阶段 PythonNetworkStreamPhaseLogin/HandShake/Select/Loading/Game.cpp classic_session.cpp, m2_client.cpp, app_flow.gd, net_play.gd MAPPED
network.character_select.create_delete 角色列表、创建、删除、改名、选人 PythonNetworkStreamPhaseSelect.cpp, PythonNetworkStreamPhaseLoading.cpp, PythonCharacterManager.cpp classic_parser.cpp, classic_session.cpp, char_select_screen.gd, intro_create_phase.gd MAPPED
network.packet_dispatch_protocol 包头、分帧、阶段分派、未知包和发送顺序 Packet.h, PythonNetworkStream.cpp, NetPacketHeaderMap.cpp, EterLib/NetStream.cpp classic_stream.cpp, classic_parser.cpp, wire_classic.h, net_stream.cpp MAPPED
network.security_encoding 握手、序列号、加密、编码和定长字符串 EterBase/cipher.cpp, PythonNetworkStreamPhaseHandShake.cpp, EterLocale/StringCodec.cpp secure_cipher.cpp, classic_cipher.cpp, text_codec.h, net_stream.cpp MAPPED
network.reconnect_warp 断线、换图、跨服重连和旧会话清理 PythonNetworkStreamPhaseGame.cpp, PythonNetworkStreamPhaseLoading.cpp, NetworkActorManager.cpp m2_client.cpp, classic_session.cpp, game_scene.gd, net_play.gd MAPPED
network.error_timeout_server_state 登录错误、超时、频道/服务器状态和恢复 AccountConnector.cpp, ServerStateChecker.cpp, PythonNetworkStreamPhaseLogin.cpp auth_client.h, channel_status.gd, serverinfo.gd, app_flow.gd MAPPED
world.entity_spawn_state_sync Actor 创建、追加信息、VID 重用、状态同步 NetworkActorManager.cpp, PythonNetworkStreamPhaseGameActor.cpp, InstanceBase.cpp entity_store.cpp, net_world.gd, remote_player_view.gd, mob_view.gd MAPPED
world.map_load_transition 地图、区域、地形、加载阶段和场景重建 PythonBackground.cpp, MapManager.cpp, MapOutdoorLoad.cpp, AreaLoaderThread.cpp metin2_world.cpp, game_scene.gd, environment_builder.cpp, atlas_ui.gd MAPPED
world.npc_drop_actor_spawn NPC、怪物、建筑、掉落物和招牌实体 PythonNonPlayer.cpp, PythonNetworkStreamPhaseGameActor.cpp, InstanceBase.cpp entity_store.cpp, net_world.gd, mob_view.gd, ground_items.gd MAPPED
world.reset_cleanup 换图、死亡、退出和 UI/实体/特效清理 PythonApplicationProcedure.cpp, PythonEventManager.cpp, MapManager.cpp, NetworkActorManager.cpp app_flow.gd, game_scene.gd, net_play.gd, entity_store.cpp MAPPED
movement.keyboard.motion WASD、方向键、停止、转向和移动动作 PythonPlayerInputKeyboard.cpp, PythonPlayerInput.cpp, InstanceBaseMovement.cpp player_controller.gd, net_play.gd, net_world.gd MAPPED
movement.click_collision 点地、路径目标、地形/Actor 碰撞和阻挡恢复 PythonPlayerInputMouse.cpp, InstanceBaseMovement.cpp, ActorInstanceCollisionDetection.cpp, MapOutdoor.cpp player_controller.gd, mouse_controller.gd, hit_collision.gd, metin2_world.cpp MAPPED
movement.remote_sync_state 远端移动命令队列、服务器时钟和状态释放 InstanceBaseSync.cpp, InstanceBase.cpp, PythonPlayerEventHandler.cpp entity_store.cpp, net_play.gd, classic_parser.cpp MAPPED
movement.motion_resource_events .msa/.msm 动作、连击窗口、动作事件和速度 InstanceBaseMotion.cpp, ActorInstanceMotion.cpp, ActorInstanceMotionEvent.cpp, RaceMotionData.cpp player_view.gd, remote_player_view.gd, mob_view.gd, msa_motion.gd, formats/msa.cpp, formats/msm.cpp MAPPED
combat.attack_combo_damage 普攻、连击、命中窗口、伤害和受击 PythonPlayer.cpp, InstanceBaseBattle.cpp, ActorInstanceBattle.cpp, ActorInstanceWeaponTrace.cpp net_play.gd, player_controller.gd, hit_collision.gd, damage_effect.gd MAPPED
combat.target_selection_rules 目标选择、可攻击判定、目标框和安全区 PythonPlayerInputMouse.cpp, PythonNetworkStreamPhaseGame.cpp, InstanceBase.cpp mouse_controller.gd, entity_rules.gd, target_board.gd, target_ui.gd, net_play.gd MAPPED
combat.death.exp_drop 死亡、经验、掉落归属和拾取链路 PythonNetworkStreamPhaseGameActor.cpp, InstanceBaseBattle.cpp, InstanceBaseMotion.cpp net_play.gd, net_world.gd, entity_store.cpp, ground_items.gd PARTIAL
combat.flying_projectile 飞行物、目标、地形碰撞、命中和回收 PythonFlyModule.cpp, ActorInstanceFly.cpp, FlyingInstance.cpp, FlyTarget.cpp fly_object.gd, world_shot.gd, skill_fx.gd, net_play.gd MAPPED
combat.affect_status 受击、眩晕、击倒、状态旗标和状态图标 AffectFlagContainer.cpp, PythonNetworkStreamPhaseGameActor.cpp, InstanceBaseEffect.cpp combat_status_effect_system.gd, hit_reaction.gd, entity_store.cpp, char_status_ui.gd MAPPED
skill.cast.effect_timing 技能施法、动作事件、结果和特效时序 PythonSkill.cpp, PythonPlayerSkill.cpp, InstanceBaseEffect.cpp, ActorInstanceMotionEvent.cpp player_skill.gd, net_play.gd, net_world.gd, skill_fx.gd, fx/effect_player.gd PARTIAL
skill.player_ui_cooldown 技能栏、快捷键、等级、冷却和禁止条件 PythonSkill.cpp, PythonPlayerSkill.cpp, PythonPlayer.cpp player_skill.gd, skill_table.gd, ui/skill_ui.gd, ui/quickbar.gd MAPPED
item.inventory_equipment_state 背包、装备栏、物品状态、槽位和穿脱装备 PythonItem.cpp, ItemData.cpp, ItemManager.cpp, PythonNetworkStreamPhaseGameItem.cpp inventory_ui.gd, item_list.gd, equip_model.gd, entity_store.cpp MAPPED
ui.equipment.tooltip 装备查看、属性面板和普通提示框 PythonNetworkStreamPhaseGameItem.cpp, PythonItem.cpp, PythonItemModule.cpp, PythonTextTail.cpp view_equipment_ui.gd, item_tooltip_view.gd, ui_manager.gd, inventory_ui.gd, shop_ui.gd PARTIAL
item.consumable_action 使用、堆叠、拆分、快捷使用和消耗品反馈 PythonNetworkStreamPhaseGameItem.cpp, PythonPlayer.cpp, PythonItem.cpp, Packet.h consumable_system.gd, item_split_system.gd, ui/quickbar.gd, net_play.gd MAPPED
item.drop_pickup 地面掉落、拾取、光标、归属和掉落名条 PythonNetworkStreamPhaseGameItem.cpp, PythonTextTail.cpp, PythonPlayerInputMouse.cpp mob_drop_scatter.gd, ground_items.gd, mouse_controller.gd, net_play.gd MAPPED
item.refine_socket_costume 强化、镶嵌、属性、时装和外观换装 PythonItem.cpp, ItemData.cpp, PythonNetworkStreamPhaseGameItem.cpp item_attr_system.gd, item_enchant_system.gd, jewelry_socket_system.gd, costume_system.gd, wardrobe_transmog_system.gd MAPPED
npc.dialog_shop NPC 交互、普通商店、个人商店和购买流程 PythonNonPlayer.cpp, PythonShop.cpp, PythonNetworkStreamPhaseGame.cpp, Packet.h npc_shop_system.gd, private_shop_system.gd, ui/shop_ui.gd, ui/private_shop_ui.gd MAPPED
social.chat_text_tail 公聊、私聊、聊天气泡、名字尾标和文本布局 PythonChat.cpp, PythonTextTail.cpp, PythonMessenger.cpp chat_tail.gd, text_tail.gd, text_tail_arrange.gd, ui/chat_ui.gd, whisper_chat_system.gd MAPPED
social.party_guild_messenger 组队、公会、好友、Messenger 和徽章 PythonGuild.cpp, PythonMessenger.cpp, PythonCharacterManager.cpp, GuildMarkDownloader.cpp party_management_system.gd, guild_war_system.gd, guild_mark_uploader_system.gd, messenger_system.gd, ui/party_ui.gd, ui/guild_ui.gd, ui/friend_ui.gd MAPPED
social.exchange_safebox 玩家交易、仓库、安全箱和金币确认 PythonExchange.cpp, PythonSafeBox.cpp, PythonNetworkStreamPhaseGameItem.cpp player_trade_exchange_system.gd, safebox_storage_keeper_system.gd, ui/exchange_ui.gd, ui/safebox_ui.gd MAPPED
quest.quest_event_navigation 任务状态、事件、对话、HUD 和导航提示 PythonQuest.cpp, PythonEventManager.cpp, PythonNetworkStreamPhaseGame.cpp quest_log.gd, quest_dialog.gd, quest_curtain.gd, quest_event_system.gd MAPPED
world.dungeon_activity 地下城、地图事件、Boss、结果和排行 MapManager.cpp, GameEventManager.cpp, PythonNetworkStreamPhaseGame.cpp, PythonQuest.cpp dungeon_state.gd, dungeon_result_ui.gd, world_boss_system.gd, dungeon_ranking_system.gd MAPPED
world.fishing_mining 钓鱼、采矿、资源采集和水域条件 PythonPlayerInput.cpp, PythonNetworkStreamPhaseGame.cpp, MapOutdoorWater.cpp, AreaTerrain.cpp fishing_mining_system.gd, fishing_cooking_camp_system.gd, mining_refinery_smelt_system.gd MAPPED
world.mount_pet_polymorph 马匹、宠物、变身和骑乘战斗 PythonPlayer.cpp, InstanceBaseMotion.cpp, ActorInstance.cpp, PythonNetworkStreamPhaseGameActor.cpp horse_system.gd, horse_combat_system.gd, pet_companion_system.gd, polymorph_system.gd, mounted_combat_skill_system.gd MAPPED
render.model_attachment Granny 模型、LOD、骨骼、武器、盾牌和发型挂点 EterGrnLib/ThingInstance.cpp/.h, EterGrnLib/LODController.cpp/.h, EterGrnLib/ModelInstance*.cpp, GameLib/ActorInstanceAttach.cpp, RaceData.cpp/.h, ItemData.cpp metin2_model.h/.cpp, metin2_anim.cpp, gr2_bridge.cpp, player_view.gd, remote_player_view.gd, mob_view.gd, equip_model.gd, race_spec.gd PARTIAL
render.effect_particle_motion MDE/MSE、粒子、动作事件挂点和回收 RaceMotionData.cpp, RaceMotionDataEvent.h, ActorInstanceMotionEvent.cpp, EffectLib/EffectManager.cpp, EffectInstance.cpp, ParticleInstance.cpp, PythonEffectModule.cpp formats/msa.cpp, extension/src/metin2_anim.cpp, fx/effect_player.gd, fx/mde.gd, fx/mse.gd, fx/skill_fx.gd, fx/effect_registry.gd, fx/motion_effect_anchor.gd, fx/target_effect_anchor.gd, game_scene.gd, ui/player_view.gd, ui/remote_player_view.gd, ui/mob_view.gd, net_world.gd PARTIAL
world.terrain_water_collision 高度、属性阻挡、水面、桥梁、拾取射线和地面贴合 MapOutdoor.cpp, AreaTerrain.cpp, MapOutdoorWater.cpp, TerrainDecal.cpp, EterLib/AttributeInstance.cpp metin2_world.cpp, formats/area_data.cpp, formats/attribute_data.cpp, water_builder.cpp, hit_collision.gd MAPPED
world.environment_weather 天空、环境、光照、昼夜、雪和天气 MapOutdoorRender.cpp, MapOutdoorRenderHTP.cpp, MapOutdoorRenderSTP.cpp, SnowEnvironment.cpp, SnowParticle.cpp, EterLib/EnvironmentMap.cpp environment_builder.cpp, formats/environment.cpp, metin2_world.cpp, game_scene.gd, weather_daynight_system.gd, fx/weather.gd PARTIAL
ui.input_camera_mobile 鼠标、相机、光标、IME、触屏和移动端窗口 PythonApplicationCamera.cpp, PythonApplicationCursor.cpp, PythonPlayerInputMouse.cpp, PythonPlayerInputKeyboard.cpp, PythonIME.cpp, EterLib/Input.cpp game_camera.gd, player_controller.gd, mouse_controller.gd, ui/cursor_manager.gd, ui/mobile/*, ui/mobile/mobile_window_host.gd PARTIAL
ui.hud_target_minimap_status 角色状态、血条、目标框、小地图、文本尾标和快捷栏 PythonTextTail.cpp/.h, PythonMiniMap.cpp/.h, PythonPlayer.cpp/.h, PythonApplication.cpp/.h, PythonPlayerEventHandler.cpp, InstanceBase*.cpp, PythonNetworkStreamPhaseGame.cpp, uitaskbar.py, uicharacter.py, uitarget.py hud.gd, net_play.gd, net_world.gd, ui/char_status_ui.gd, ui/target_ui.gd, target_board.gd, ui/minimap.gd, text_tail.gd, text_tail_arrange.gd, chat_tail.gd, ui/ground_items.gd, ui/quickbar.gd PARTIAL
resource.pack_locale_proto EterPack、资源解析、locale、proto、MSA/MSM 和格式转换 EterPack/*.cpp, EterLocale/*.cpp, PythonPackModule.cpp, ItemData.cpp, RaceDataFile.cpp pack_mount.cpp, asset_io.cpp, locale.gd, proto.cpp, formats/*.cpp MAPPED
audio.bgm_ambience_3d BGM、区域环境音、角色音效、3D 监听器和前后台恢复 MilesLib/SoundManager*.cpp, PythonSoundManagerModule.cpp, GameLib/Area.cpp, MapOutdoor.cpp audio.gd, bgm_director.gd, app_lifecycle.gd, formats/area_data.cpp, extension/src/metin2_world.cpp PARTIAL
lifecycle.platform_release Windows/桌面窗口、导出、资源自包含、崩溃和发布门禁 MSApplication.cpp, MSWindow.cpp, PythonApplication.cpp, PythonApplicationProcedure.cpp, CheckLatestFiles.cpp, EterPack/EterPackManager.cpp build.sh, build-macos-client.sh, build-android.sh, export-android.sh, project/export_presets.cfg, project/client_main.gd, project/app_flow.gd, project/app_lifecycle.gd, project/asset_root.gd, project/asset_pack.gd, oracle/* PARTIAL
extension.current_only_features 没有 40250 参考实现的新增玩法和平台扩展 无对应 40250 运行时链路 *_system.gd 中的新版副本、离线集市、邮件等 EXCLUDED

初始审计规则

  1. 先完成 UNMAPPED/MAPPED 合同的静态调用链,再对照现有 docs/CLIENT-GAP.md 的历史结论;历史文档不能直接把合同提升为已验证。
  2. 每个合同都要建立完整分支表,至少覆盖成功、拒绝、空数据、重复触发、异步乱序、断线/切图、死亡/中断和清理路径。
  3. 现有 project/test_*_parity.gd 只能作为候选证据;测试通过不等于 40250 算法、资源来源和时序一致。
  4. extension.current_only_features 只用于记录没有 40250 对应行为的当前端扩展,不能把它们混入 40250 等价率,也不能因为有测试就标记为 40250 兼容。
  5. 本清单建立后,每次审计只允许改变对应合同的状态、矩阵、证据和历史;不得删除未完成合同来提高覆盖率。

活跃源码覆盖门

  • Visual Studio 活跃项目的源码/头文件覆盖由 .agents/skills/metin2-40250-parity-audit/scripts/audit_source_coverage.py 生成,结果保存在 audit/source-coverage.jsonaudit/reports/source-coverage.md
  • 本轮扫描到 524 个活跃源码/头文件:18 个 StdAfx 构建支持,142 个已在合同 manifest 中逐文件列出,364 个进入按行为合同归属的静态复核队列;当前未归属行为文件为 0。
  • EffectLibEterGrnLibMilesLib 已完成本轮活跃符号和生命周期链静态复核,但仍按实现差异保持 PARTIAL;其余 inferred queue 不得因为自动归属而视为已审计。
  • 下次审计必须先运行源码覆盖扫描,再从 inferred_review_queue 取下一组,补充对应合同的参考文件、符号、分支矩阵和测试证据;只有完成语义核对后才能转为 reviewed_static_group