插件开发

l4d2_pwa_native_attrs:按玩家枪械属性(私有)

给单个玩家单独设置枪械原生属性(伤害、射速、弹容……),带完整审计工具。

l4d2_pwa_native_attrs(Per-player Weapon Native Attrs,简称 PWA)是私有武器属性体系的核心:直接改写 WeaponInfo 原生属性,实现按玩家的枪械属性定制(伤害、射速、弹容、后座等),用于赞助者福利"定制轮廓/皮肤属性"。

它做什么

  • 按玩家 profile 应用枪械属性,切枪/换人自动切换与恢复,全局基线可一键还原(sm_pwa_restore)。
  • profile 来源:数据库协调器(l4d2_player_attr_db,网页后台可编辑)或旧 cfg。
  • 审计工具链:sm_pwa_tx_audit、sm_pwa_native_audit、sm_pwa_live_fire_audit、sm_pwa_matrix_audit 等一系列命令用于验证属性切换的正确性与隔离性(详见命令表)。

私有清单插件,需 l4d2_private_license 授权。日常管理建议走网页后台的"玩家武器属性"面板,而不是手敲命令。

文件位置

项目路径
插件文件plugins/optional/AnneHappy/l4d2_pwa_native_attrs.smx
源码addons/sourcemod/scripting/optional/AnneHappy/l4d2_pwa_native_attrs.sp
更新源清单private/Anne_Updater_Private.txt(私有,需服务器授权)

命令一览

命令类型权限说明
sm_pwa_set <target> <weapon\@active> <attr> <value> [attr value]...`管理员ADMFLAG_ROOT
sm_pwa_clear <target>管理员ADMFLAG_ROOT清除目标当前 PWA profile。
sm_pwa_list管理员ADMFLAG_ROOT列出当前在线玩家的 PWA profile。
sm_pwa_reload_config管理员ADMFLAG_ROOT重新读取旧 cfg profile。DB 协调器启用时通常会关闭旧 cfg 自动应用。
sm_pwa_apply_config <target> <weapon\@active>`管理员ADMFLAG_ROOT
sm_pwa_config_status管理员ADMFLAG_ROOT查看旧 cfg profile 缓存状态。
sm_pwa_restore管理员ADMFLAG_ROOT将被 PWA 碰过的全局 WeaponInfo 属性恢复到缓存基线。
sm_pwa_tx_audit <target_a> <target_b> <weapon\@active>`管理员ADMFLAG_ROOT
sm_pwa_return_audit <target> <weapon\@active>`管理员ADMFLAG_ROOT
sm_pwa_native_audit <target_a> <target_b> <weapon\@active> [safe\all]`管理员
sm_pwa_live_fire_audit <target_a> <target_b> <weapon\@active>`管理员ADMFLAG_ROOT
sm_pwa_live_fire_cancel管理员ADMFLAG_ROOT取消 live fire 审计并恢复 profile/武器。
sm_pwa_live_return_audit <target_a> <target_b> <weapon\@active> [seconds]`管理员ADMFLAG_ROOT
sm_pwa_live_return_cancel管理员ADMFLAG_ROOT取消 live return 审计。
sm_pwa_matrix_audit <target_a> <target_b> <weapon\@active> [safe\all\live\
sm_pwa_bot_matrix_audit <bot_a> <bot_b> <weapon> [safe\all]`管理员ADMFLAG_ROOT
sm_pwa_bot_live_smoke <bot_a> <bot_b> <weapon> [live\full]`管理员ADMFLAG_ROOT
sm_pwa_preflight <target_a> <target_b> <weapon\@active>`管理员ADMFLAG_ROOT
sm_pwa_preflight_matrix <target_a> <target_b> <weapon\@active> [safe\all\live\

聊天中输入 !命令名(去掉 sm_ 前缀)等价于控制台命令。