Skip to content

Commit 5a116a0

Browse files
committed
修复命中(含击杀)音效反馈
1 parent 64a9f2b commit 5a116a0

11 files changed

Lines changed: 14571 additions & 5090 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.31)
44
project("MulNX_CS2")
55

66
# 版本定义
7-
add_compile_definitions(MulNXVersion="B0.4.0C0.48.1")
7+
add_compile_definitions(MulNXVersion="B0.4.0C0.48.2")
88

99
# 启用 LTO(仅 Release 配置)
1010
include(CheckIPOSupported)
0 Bytes
Binary file not shown.

bin/MulNX/CS2Injector/UISystem/Config/MulNXUIConfig.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,5 @@ Collapsed=0
4444

4545
[Docking][Data]
4646
DockNode ID=0x00000001 Pos=543,414 Size=801,517 Selected=0xC6EE3AFB
47-
DockSpace ID=0x633F05CB Window=0xFB32D03B Pos=0,0 Size=1898,1144 CentralNode=1 Selected=0x5B020FA6
47+
DockSpace ID=0x633F05CB Window=0xFB32D03B Pos=0,0 Size=1898,1144 CentralNode=1
4848

0 Bytes
Binary file not shown.

bin/MulNX/CS2OBTool/CS2OBTool.dll

1 KB
Binary file not shown.

bin/MulNX/CS2OBTool/UISystem/Config/MulNXUIConfig.ini

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,19 @@ Size=1920,1080
9696
Collapsed=0
9797

9898
[Window][UI个性配置]
99-
Pos=1396,508
99+
Pos=1508,10
100100
Size=471,435
101101
Collapsed=0
102102
DockId=0x0000000D,0
103103

104104
[Window][摄像机系统]
105-
Pos=1396,508
105+
Pos=1508,10
106106
Size=471,435
107107
Collapsed=0
108108
DockId=0x0000000D,2
109109

110110
[Window][游戏设置]
111-
Pos=1396,508
111+
Pos=1508,10
112112
Size=471,435
113113
Collapsed=0
114114
DockId=0x0000000D,3
@@ -120,13 +120,13 @@ Collapsed=0
120120
DockId=0x00000002,3
121121

122122
[Window][MulNX控制]
123-
Pos=1396,508
123+
Pos=1508,10
124124
Size=471,435
125125
Collapsed=0
126126
DockId=0x0000000D,10
127127

128128
[Window][首页]
129-
Pos=1396,508
129+
Pos=1508,10
130130
Size=471,435
131131
Collapsed=0
132132
DockId=0x0000000D,1
@@ -149,19 +149,19 @@ Size=1159,801
149149
Collapsed=0
150150

151151
[Window][2D视觉]
152-
Pos=1396,508
152+
Pos=1508,10
153153
Size=471,435
154154
Collapsed=0
155155
DockId=0x0000000D,4
156156

157157
[Window][3D视觉]
158-
Pos=1396,508
158+
Pos=1508,10
159159
Size=471,435
160160
Collapsed=0
161161
DockId=0x0000000D,5
162162

163163
[Window][镜头参数]
164-
Pos=1396,508
164+
Pos=1508,10
165165
Size=471,435
166166
Collapsed=0
167167
DockId=0x0000000D,9
@@ -173,13 +173,13 @@ Collapsed=0
173173
DockId=0x00000002,4
174174

175175
[Window][视角视图]
176-
Pos=1396,508
176+
Pos=1508,10
177177
Size=471,435
178178
Collapsed=0
179179
DockId=0x0000000D,6
180180

181181
[Window][声音控制]
182-
Pos=1396,508
182+
Pos=1508,10
183183
Size=471,435
184184
Collapsed=0
185185
DockId=0x0000000D,7
@@ -219,18 +219,18 @@ Collapsed=0
219219
DockId=0x00000009,0
220220

221221
[Window][音视频]
222-
Pos=1544,282
222+
Pos=1541,322
223223
Size=406,434
224224
Collapsed=0
225225

226226
[Window][实体列表探测器]
227-
Pos=1396,508
227+
Pos=1508,10
228228
Size=471,435
229229
Collapsed=0
230230
DockId=0x0000000D,11
231231

232232
[Window][高级功能]
233-
Pos=1396,508
233+
Pos=1508,10
234234
Size=471,435
235235
Collapsed=0
236236
DockId=0x0000000D,8
@@ -291,7 +291,7 @@ DockNode ID=0x00000003 Pos=183,736 Size=1378,716 Split=X Selected=0x448D10F
291291
DockNode ID=0x0000000A Pos=820,750 Size=685,394 Split=X
292292
DockNode ID=0x0000000B Parent=0x0000000A SizeRef=1042,407 Selected=0x2D59FDA6
293293
DockNode ID=0x0000000C Parent=0x0000000A SizeRef=606,407 Selected=0x4DB1B67D
294-
DockNode ID=0x0000000D Pos=1396,508 Size=471,435 Selected=0xC12FA4B6
294+
DockNode ID=0x0000000D Pos=1508,10 Size=471,435 Selected=0x8BE9650D
295295
DockSpace ID=0x633F05CB Window=0xFB32D03B Pos=0,0 Size=1920,1080 Split=Y Selected=0xC52A91C6
296296
DockNode ID=0x00000001 Parent=0x633F05CB SizeRef=1920,39 Selected=0x38DB91B6
297297
DockNode ID=0x00000002 Parent=0x633F05CB SizeRef=1920,1039 CentralNode=1

bin/MulNX/Log/Log_CS2Injector.txt

Lines changed: 100 additions & 100 deletions
Large diffs are not rendered by default.

bin/MulNX/Log/Log_CS2OBTool.txt

Lines changed: 14363 additions & 4950 deletions
Large diffs are not rendered by default.

source/MulNXExtensions/CS2/Feature/Sound/HitSoundFix/HitSoundFix.cpp

Lines changed: 90 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,25 @@ bool HitSoundFix::Init() {
1010
});
1111

1212
this->SubscribeSync("Hook/FireEventClientSide/player_hurt", [this](MulNX::Message& msg) {
13-
auto&& [pEvent] = msg.Access<CS2::CGameEvent*>();
14-
this->HandleOnPlayerHurt(pEvent);
13+
auto&& [pEvent] = msg.Access<CS2::CGameEvent*>();
14+
try {
15+
this->HandleOnPlayerHurt(pEvent);
16+
}
17+
catch (MulNX::Exception& e) {
18+
this->LogError(e);
19+
}
20+
});
21+
22+
this->SubscribeSync("Hook/FireEventClientSide/player_death", [this](MulNX::Message& msg) {
23+
auto&& [pEvent] = msg.Access<CS2::CGameEvent*>();
24+
try {
25+
this->HandleOnPlayerDeath(pEvent);
26+
}
27+
catch (MulNX::Exception& e) {
28+
this->LogError(e);
29+
}
1530
});
31+
1632
return true;
1733
}
1834

@@ -21,43 +37,93 @@ void HitSoundFix::HandleOnPlayerHurt(CS2::CGameEvent* event) {
2137
CS2::CKV3MemberName userid{ this->CS2Hashs->userid, -1, nullptr };
2238
CS2::CKV3MemberName hitgroup{ this->CS2Hashs->hitgroup, -1, nullptr };
2339

24-
try {
25-
auto pOBingPawn = this->CS2->client.TryGetObservingPawn();
26-
if (!pOBingPawn)return;
40+
auto pOBingPawn = this->CS2->client.TryGetObservingPawn();
41+
if (!pOBingPawn)return;
2742

28-
auto pAttackerPawn = event->GetPlayerPawn(attacker);
29-
if (pOBingPawn != pAttackerPawn)return;
43+
auto pAttackerPawn = event->GetPlayerPawn(attacker);
44+
if (pOBingPawn != pAttackerPawn)return;
3045

31-
auto pVictimPawn = event->GetPlayerPawn(userid);
32-
auto pCCSPlayer_ItemServices = static_cast<CS2::CCSPlayer_ItemServices*>(MulNX::MRead(pVictimPawn->pItemServices()));
46+
auto pVictimPawn = event->GetPlayerPawn(userid);
47+
auto pCCSPlayer_ItemServices = static_cast<CS2::CCSPlayer_ItemServices*>(MulNX::MRead(pVictimPawn->pItemServices()));
3348

34-
auto hitgroupValue = event->GetInt(hitgroup);
35-
bool hasHelmet = MulNX::MRead(&pCCSPlayer_ItemServices->m_bHasHelmet);
36-
auto armorValue = MulNX::MRead(pVictimPawn->m_ArmorValue());
49+
auto hitgroupValue = event->GetInt(hitgroup);
50+
bool hasHelmet = MulNX::MRead(pVictimPawn->m_bPrevHelmet());
51+
auto armorValue = MulNX::MRead(pVictimPawn->m_ArmorValue());
3752

38-
const char* soundName = nullptr;
53+
auto PraseSoundName = [&]()->const char* {
3954
if (hitgroupValue == 1) { // 头部
40-
soundName = hasHelmet ?
41-
"Player.DamageHeadShotArmor.AttackerFeedback" :
42-
"Player.DamageHeadShot.AttackerFeedback";
55+
if (hasHelmet) {
56+
return "Player.DamageHeadShotArmor.AttackerFeedback";
57+
}
58+
else {
59+
return "Player.DamageHeadShot.AttackerFeedback";
60+
}
4361
}
4462
else { // 身体/其他部位
4563
if (armorValue > 0) {
46-
soundName = "Player.DamageBodyArmor.AttackerFeedback";
64+
return "Player.DamageBodyArmor.AttackerFeedback";
4765
}
4866
else {
49-
soundName = "Player.DamageBody.AttackerFeedback";
67+
return "Player.DamageBody.AttackerFeedback";
5068
}
5169
// 将来可以细化 hitgroup 区分四肢、腹部,或根据伤害类型(刀、燃烧)选择
5270
}
71+
};
5372

54-
if (soundName) {
55-
// 参数顺序:声源 = 受害者,过滤实体 = 观战者(即攻击者)
56-
this->EmitHurtFeedbackSound(pVictimPawn, nullptr, soundName);
57-
}
73+
auto soundName = PraseSoundName();
74+
75+
if (soundName) {
76+
// 参数顺序:声源 = 受害者,过滤实体 = 观战者(即攻击者)
77+
this->EmitHurtFeedbackSound(pVictimPawn, nullptr, soundName);
5878
}
59-
catch(MulNX::Exception& e) {
60-
this->LogError(e);
79+
80+
return;
81+
}
82+
83+
void HitSoundFix::HandleOnPlayerDeath(CS2::CGameEvent* event) {
84+
CS2::CKV3MemberName attacker{ this->CS2Hashs->attacker, -1, nullptr };
85+
CS2::CKV3MemberName userid{ this->CS2Hashs->userid, -1, nullptr };
86+
CS2::CKV3MemberName hitgroup{ this->CS2Hashs->hitgroup, -1, nullptr };
87+
88+
auto pOBingPawn = this->CS2->client.TryGetObservingPawn();
89+
if (!pOBingPawn)return;
90+
91+
auto pAttackerPawn = event->GetPlayerPawn(attacker);
92+
if (pOBingPawn != pAttackerPawn)return;
93+
94+
auto pVictimPawn = event->GetPlayerPawn(userid);
95+
auto pCCSPlayer_ItemServices = static_cast<CS2::CCSPlayer_ItemServices*>(MulNX::MRead(pVictimPawn->pItemServices()));
96+
97+
auto hitgroupValue = event->GetInt(hitgroup);
98+
bool hasHelmet = MulNX::MRead(pVictimPawn->m_bPrevHelmet());
99+
auto armorValue = MulNX::MRead(pVictimPawn->m_ArmorValue());
100+
101+
auto PraseSoundName = [&]()->const char* {
102+
if (hitgroupValue == 1) { // 头部
103+
if (hasHelmet) {
104+
return "Player.DeathHeadShotArmor.AttackerFeedback";
105+
}
106+
else {
107+
return "Player.DeathHeadShot.AttackerFeedback";
108+
}
109+
}
110+
else { // 身体/其他部位
111+
if (armorValue > 0) {
112+
return "Player.DeathBodyArmor.AttackerFeedback";
113+
}
114+
else {
115+
return "Player.DeathBody.AttackerFeedback";
116+
}
117+
// 将来可以细化 hitgroup 区分四肢、腹部,或根据伤害类型(刀、燃烧)选择
118+
}
119+
};
120+
121+
auto soundName = PraseSoundName();
122+
123+
if (soundName) {
124+
// 参数顺序:声源 = 受害者,过滤实体 = 观战者(即攻击者)
125+
this->EmitHurtFeedbackSound(pVictimPawn, nullptr, soundName);
61126
}
127+
62128
return;
63129
}

source/MulNXExtensions/CS2/Feature/Sound/HitSoundFix/HitSoundFix.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ class HitSoundFix final :public CSModuleBase {
66
using EmitHurtFeedbackSound_t = void(*)(CS2::C_CSPlayerPawn* pSourcePawn, CS2::C_CSPlayerPawn* pListenerPawn, const char* soundName);
77
EmitHurtFeedbackSound_t EmitHurtFeedbackSound = nullptr;
88
void HandleOnPlayerHurt(CS2::CGameEvent* event);
9+
void HandleOnPlayerDeath(CS2::CGameEvent* event);
910
bool Init()override;
1011
};

0 commit comments

Comments
 (0)