L4D2 插件|Witch Killer Shield — Witch 击杀者特感一次免疫护盾
插件版本:
2.1.0|作者:36 度白凉开|语言:SourcePawn (Sem‑1 分号强制模式)|依赖:SourceMod、SDKHooks、SDKTools
简介
一款求生之路 2 服务器增强插件,当幸存者成功击杀 Witch 女巫后,击杀者获得一次性特感免疫护盾。护盾不仅免疫特感造成的伤害,还能打断 Hunter 扑击、Smoker 舌头、Jockey 骑乘、Charger 冲撞抱摔等特感控制效果,提供绿色发光视觉提示,适合娱乐服、对抗服、RPG 服务器使用,鼓励玩家主动击杀女巫而不是绕开女巫GitHub。
✨核心功能
- 护盾获取条件
- 触发游戏事件
witch_killed,获取击杀 Witch 的幸存者,自动授予护盾 - 同一个玩家已有护盾时,不会重复叠加,聊天提示已持有护盾
- 获得护盾玩家全身绿色高亮发光,全图可见,直观识别护盾状态
- 护盾生效场景(一次性消耗)
护盾只抵挡特感 (Smoker/Hunter/Boomer/Jockey/Charger/Spitter) 的攻击与控制,普通僵尸、Tank、Witch 伤害不被护盾拦截。
- 🩸伤害免疫:特感攻击到来,直接置零本次伤害,抵消血量扣减
- 🧟控制解除:
- Hunter 扑击 (lunge_pounce)
- Smoker 舌头拖拽 (tongue_grab)
- Jockey 骑乘 (jockey_ride)
- Charger 抱人 (charger_carry_start)
- Charger 捶打 (charger_pummel_start)
触发控制瞬间立刻消耗护盾,通过定时器清除实体控制属性,挣脱特感控制状态。
- 护盾自动清除规则
- 新回合
round_start:全服所有人护盾全部清空 - 玩家死亡
player_death:死亡立刻移除护盾 - 玩家掉线断开连接:自动清理
- 切换地图
OnMapStart:重置全部玩家护盾状态 - 倒地 / 倒地状态的幸存者无法获得护盾,仅存活站立幸存者可以持有护盾。
- 聊天反馈提示
- 获取护盾:
[Witch] 你击杀了 Witch,获得一次特感免疫护盾! - 重复获取:
[Witch] 你已经拥有护盾,本次不会重复叠加。 - 护盾消耗:
[Witch] 护盾抵挡了这次特感攻击!护盾已消失。
📦环境依赖
- SourceMod 版本:推荐 1.11
- 必须模块:
SDKHooks、SDKTools - 游戏:Left4Dead2 求生之路 2 服务端
📝安装部署教程
- 将
.smx放到服务器路径:left4dead2/addons/sourcemod/plugins/4.(可选)如果你不想开机自动加载,在plugins/disabled外放置。 - 服务器控制台执行:
sm plugins load witch_killer_shield
或者重启服务器完成加载。
查看是否加载成功:
sm plugins list,列表出现本插件代表正常运行。
🧠插件实现原理简析
事件钩子列表
插件一共 Hook 这些游戏内置事件监听游戏行为:
表格
| 游戏事件 | 作用 |
|---|---|
witch_killed |
女巫死亡,分配护盾给击杀者 |
player_death |
玩家死亡清除护盾 |
round_start |
回合重置清空全部护盾 |
tongue_grab |
Smoker 舌头控制触发护盾消耗 |
lunge_pounce |
Hunter 扑击触发护盾 |
jockey_ride |
Jockey 骑乘触发护盾 |
charger_carry_start |
Charger 抱人触发护盾 |
charger_pummel_start |
Charger 捶打触发护盾 |
关键钩子 SDKHook_OnTakeDamage
使用 SDKHook 劫持玩家受伤害回调: 判断攻击者 / 造成伤害实体是否为特感,如果玩家持有护盾,直接设置damage=0.0,返回Plugin_Changed拦截本次伤害,然后消耗护盾。
⚠️注意:Tank、Witch 不属于这里判定的普通特感,不会被护盾保护。
控制解除实现逻辑
当特感控制事件触发,标记消耗护盾,延迟 0 秒定时器执行ClearControlProps(),批量置空这些 SendProp/DataProp 句柄:
m_pounceAttackerHunter 扑击攻击者m_jockeyAttackerJockey 骑乘攻击者m_carryAttackerCharger 抱人攻击者m_tongueOwnerSmoker 舌头拥有者
同时 Prop_Send、Prop_Data 两套属性同时清理,避免只清一套导致人物仍然被卡住控制状态。
发光效果实现
利用 L4D2 原生 Glow 发光属性:
m_iGlowType =3开启持续发光m_glowColorOverride =0x00FF00绿色 RGB (0,255,0)m_nGlowRange =99999超大发光距离,远处也可见- 护盾消失时设置 GlowType=0 关闭发光。
工具函数说明
IsValidSurvivor():校验目标为存活、未倒地、幸存者队伍玩家。倒地玩家不会分配护盾。IsSpecialInfected():校验实体是否为可控特感玩家(team3,m_zombieClass1‑6、8)。GiveShield()授予护盾;ConsumeShield()消耗护盾;RemoveShield()强制清除护盾;SetShieldGlow()开关玩家发光;SetEntityHandleProp()封装安全设置 EntPropEnt,先判断属性是否存在再赋值,防止报错。
⚠️已知限制与注意事项
- 护盾只针对特感,Witch、Tank 伤害不会被抵挡。击杀 Witch 拿到的护盾不能防女巫自己的挠伤。
- 护盾为一次性,伤害、控制任意一个触发,护盾立刻消失。
举例:Hunter 扑过来,护盾吃掉扑击控制,同时护盾消失,后续其他特感攻击不再保护。
- AI 特感 & 玩家操控特感均可触发护盾,PVE/PVP 对抗模式都生效。
- 如果服务器有其他修改玩家 Glow 发光的插件,会出现视觉冲突,发光会被其他插件覆盖。
- 地图切换、回合重置会强制抹除全部护盾,不会跨回合继承护盾。
- 倒地(incapacitated)玩家不能获得护盾,必须站立存活状态。
- 事件
witch_killed是 Post 模式,女巫死亡之后才执行护盾发放。













暂无评论内容