如果你喜欢这个插件,可以用以下方式支持我,感谢!
If you like this plugin, you can support me in the following ways. Thank you!
HanHitMarkerS2 是一个基于 SwiftlyS2 的 CS2 击中反馈插件。
v3.0 新增支持 DispatchParticleEffect 将击中特效粒子直接发送至玩家屏幕准心
它为攻击者提供三类仅自己可见的反馈:
- 击中特效
- 伤害数字
- 屏幕击中粒子
其中击中特效和伤害数字都支持 WorldText 或粒子两种显示方式,屏幕击中粒子支持爆头与身体分别配置不同粒子。
- 三个功能全部为攻击者单独显示,不会广播给其他玩家。
HitMarkType与DamageNumberType现在使用更直观的字符串模式:worldtextparticles
HitMarkType或DamageNumberType留空、填写错误时会自动回退为worldtext。- 屏幕击中粒子支持爆头与身体分别配置:
ScreenHitEffectHeadParticleScreenHitEffectBodyParticle
- 每个功能都支持独立配置:
- 全局开关
- 队伍限制
- 玩家默认开关
- 切换命令
- 命令权限
- 功能权限
- 命令提示文本可在翻译文件中更改。
- 主配置与 WorldText 配置都支持热重载。
默认提供三个原始命令:
| 功能 | 默认命令 | 说明 |
|---|---|---|
| 击中特效 | sw_hitmarker |
切换自己的击中特效 (开关) |
| 伤害数字 | sw_damage |
切换自己的伤害数字 (开关) |
| 屏幕击中粒子 | sw_screenhitmarker |
切换自己的屏幕击中粒子 (开关) |
说明:
- 每个命令都可以独立设置权限。
每个功能现在有两种权限字段:
XXXCommandPermission- 控制“谁可以执行切换命令”
XXXFeaturePermission- 控制“谁可以真正使用这个功能”
以击中特效为例:
HitMarkerCommandPermissionHitMarkerFeaturePermission
同理:
DamageNumberCommandPermissionDamageNumberFeaturePermissionScreenHitEffectCommandPermissionScreenHitEffectFeaturePermission
行为规则:
- 命令权限不满足:玩家不能通过命令切换该功能。
- 功能权限不满足:玩家即使默认开启,也不会实际看到该功能效果。
- 权限字段留空:表示所有玩家都可用。
这套设计适合下面这类场景:
- 所有人都能用
sw_hitmarker - 只有管理员能用
sw_damage - 屏幕击中粒子只开放给 VIP 或特定权限玩家
本插件主要有两份配置文件:
- 主配置:
configs/plugins/HanHitMarkerS2/HanHitMarkerCFG.jsonc- 根节点:
HanHitMarkerS2CFG
- WorldText 配置:
configs/plugins/HanHitMarkerS2/HanHitMarkerWorldTextCFG.jsonc- 根节点:
HanHitMarkerWorldTextS2CFG
翻译文件:
src/resources/translations/zh-CN.jsoncsrc/resources/translations/en.jsonc
| 字段 | 类型 | 说明 |
|---|---|---|
EnabledHitMark |
bool | 全局开启或关闭击中特效 |
HitMarkType |
string | 显示方式:worldtext 或 particles |
HitMarkOnlyTeam |
string | 仅允许指定队伍使用:any、t、ct |
HitMarkHeadParticles |
string | 爆头击中特效粒子路径 |
HitMarkBodyParticles |
string | 身体击中特效粒子路径 |
HitMarkHeadSound |
string | 爆头音效,留空则不播放 |
HitMarkBodySound |
string | 身体音效,留空则不播放 |
HitMarkerFeaturePermission |
string | 使用击中特效所需权限 |
PlayerDefaultHitMarkerEnabled |
bool | 玩家首次建立运行时状态时,击中特效默认是否开启 |
HitMarkerToggleCommand |
string | 切换击中特效的命令名 |
HitMarkerCommandPermission |
string | 使用切换命令所需权限 |
| 字段 | 类型 | 说明 |
|---|---|---|
EnabledDamageNumber |
bool | 全局开启或关闭伤害数字 |
DamageNumberType |
string | 显示方式:worldtext 或 particles |
DamageNumberOnlyTeam |
string | 仅允许指定队伍使用:any、t、ct |
DamageNumberParticles0 - DamageNumberParticles9 |
string | 粒子数字模式下 0-9 每个数字对应的粒子路径 |
DamageNumberSound |
string | 伤害数字音效,留空则不播放 |
DamageNumberFeaturePermission |
string | 使用伤害数字所需权限 |
PlayerDefaultDamageNumberEnabled |
bool | 玩家首次建立运行时状态时,伤害数字默认是否开启 |
DamageNumberToggleCommand |
string | 切换伤害数字的命令名 |
DamageNumberCommandPermission |
string | 使用切换命令所需权限 |
| 字段 | 类型 | 说明 |
|---|---|---|
EnabledScreenHitEffect |
bool | 全局开启或关闭屏幕击中粒子 |
ScreenHitEffectOnlyTeam |
string | 仅允许指定队伍使用:any、t、ct |
ScreenHitEffectHeadParticle |
string | 爆头时播放的屏幕粒子 |
ScreenHitEffectBodyParticle |
string | 身体命中时播放的屏幕粒子 |
ScreenHitEffectFeaturePermission |
string | 使用屏幕击中粒子所需权限 |
PlayerDefaultScreenHitEffectEnabled |
bool | 玩家首次建立运行时状态时,屏幕击中粒子默认是否开启 |
ScreenHitEffectToggleCommand |
string | 切换屏幕击中粒子的命令名 |
ScreenHitEffectCommandPermission |
string | 使用切换命令所需权限 |
| 字段 | 类型 | 说明 |
|---|---|---|
PrecacheSoundEvent |
string | 预缓存 sound event 文件,多个值用 , 分隔 |
补充说明:
HitMarkType与DamageNumberType- 推荐填写
worldtext或particles - 为兼容旧配置,历史值
1仍会被视为particles - 其他无效值都会按
worldtext处理
- 推荐填写
PlayerDefault...Enabled- 只在玩家第一次建立本局运行时状态时生效
- 它不是全局总开关
| 字段 | 类型 | 说明 |
|---|---|---|
WTHitMarkSignHead |
string | 爆头标记字符,默认 ◎ |
WTHitMarkSignBody |
string | 身体命中标记字符,默认 X |
WTHitMarkSizeHead |
float | 爆头标记大小 |
WTHitMarkSizeBody |
float | 身体标记大小 |
WTHitMarkFontColor |
string | 文字颜色,格式:R, G, B, A |
WTHitMarkDrawBackground |
bool | 是否绘制黑色背景框 |
WTHitMarkFontName |
string | 字体名称 |
| 字段 | 类型 | 说明 |
|---|---|---|
WTHitNumberPosType |
int | 数字漂浮方式:0 固定向上,1 随机弹跳 |
WTHitNumberSizeHead |
float | 爆头伤害数字大小 |
WTHitNumberSizeBody |
float | 身体伤害数字大小 |
WTHitNumberFontColor |
string | 文字颜色,格式:R, G, B, A |
WTHitNumberDrawBackground |
bool | 是否绘制黑色背景框 |
WTHitNumberFontName |
string | 字体名称 |
{
"HanHitMarkerWorldTextS2CFG": {
"WTHitMarkSignHead": "◎",
"WTHitMarkSignBody": "X",
"WTHitMarkSizeHead": 25,
"WTHitMarkSizeBody": 20,
"WTHitMarkFontColor": "255, 0, 0, 255",
"WTHitMarkDrawBackground": false,
"WTHitMarkFontName": "Arial Bold",
"WTHitNumberPosType": 0,
"WTHitNumberSizeHead": 25,
"WTHitNumberSizeBody": 20,
"WTHitNumberFontColor": "255, 0, 0, 255",
"WTHitNumberDrawBackground": false,
"WTHitNumberFontName": "Arial Bold"
}
}src/resources/translations/zh-CN.jsoncsrc/resources/translations/en.jsonc
你可以在这里修改:
- 命令只能由玩家使用的提示
- 功能开启/关闭提示
- 全局关闭提示
- 权限不足提示
- 功能名称文本
如果你使用:
HitMarkType = "particles"DamageNumberType = "particles"- 或者配置了屏幕击中粒子
那么你需要保证服务器已安装对应粒子资源。
如果只使用 worldtext,则不需要额外 Workshop 粒子资源。
创意工坊资源 ID(示例):
3626771819
如果你的服务器使用 MultiAddonManager,可以把 Workshop 资源交给它下载与分发,然后再用 Source2Viewer 查看粒子路径。
- 三个默认命令是否都能正常注册。
HitMarkType与DamageNumberType是否按预期切换为worldtext或particles。- 爆头与身体命中时是否正确区分粒子和音效。
HitMarkerCommandPermission与HitMarkerFeaturePermission是否符合预期。- 伤害数字 0-9 粒子资源是否完整。
ScreenHitEffectHeadParticle与ScreenHitEffectBodyParticle是否按命中部位区分生效。- 修改配置后热重载是否符合预期。
中文版
English

{ "HanHitMarkerS2CFG": { "EnabledHitMark": true, "HitMarkType": "worldtext", "HitMarkOnlyTeam": "any", "HitMarkHeadParticles": "particles/exg/exg_hitmarker2.vpcf", "HitMarkBodyParticles": "particles/exg/exg_hitmarker.vpcf", "HitMarkHeadSound": "Breakable.Flesh", "HitMarkBodySound": "Flesh_Bloody.ImpactHard", "HitMarkerFeaturePermission": "", "EnabledDamageNumber": true, "DamageNumberType": "worldtext", "DamageNumberOnlyTeam": "any", "DamageNumberParticles0": "particles/exg/hitmarker/0.vpcf", "DamageNumberParticles1": "particles/exg/hitmarker/01.vpcf", "DamageNumberParticles2": "particles/exg/hitmarker/02.vpcf", "DamageNumberParticles3": "particles/exg/hitmarker/03.vpcf", "DamageNumberParticles4": "particles/exg/hitmarker/04.vpcf", "DamageNumberParticles5": "particles/exg/hitmarker/05.vpcf", "DamageNumberParticles6": "particles/exg/hitmarker/06.vpcf", "DamageNumberParticles7": "particles/exg/hitmarker/07.vpcf", "DamageNumberParticles8": "particles/exg/hitmarker/08.vpcf", "DamageNumberParticles9": "particles/exg/hitmarker/09.vpcf", "DamageNumberSound": "ceiling_tile.BulletImpact", "DamageNumberFeaturePermission": "", "EnabledScreenHitEffect": true, "ScreenHitEffectOnlyTeam": "any", "ScreenHitEffectHeadParticle": "particles/cgmentos/hitmarker/overlay_hitmarker_head.vpcf", "ScreenHitEffectBodyParticle": "particles/cgmentos/hitmarker/overlay_hitmarker_body.vpcf", "ScreenHitEffectFeaturePermission": "", "PlayerDefaultHitMarkerEnabled": true, "PlayerDefaultDamageNumberEnabled": true, "PlayerDefaultScreenHitEffectEnabled": true, "HitMarkerToggleCommand": "sw_hitmarker", "DamageNumberToggleCommand": "sw_damage", "ScreenHitEffectToggleCommand": "sw_screenhitmarker", "HitMarkerCommandPermission": "", "DamageNumberCommandPermission": "", "ScreenHitEffectCommandPermission": "", "PrecacheSoundEvent": "soundevents/game_sounds_physics.vsndevts" } }