修改器使用教學、腳本注入、數值調整
快速閱讀精華
- 這是一款 C語言編寫的 CS2 壓槍腳本,基於 Windows API 開發,無需外部圖形庫 🎯
- 支援 AK-47 與 M4A1-S 兩種武器,內建固定彈道數據與物理動態補償雙模式 💪
- 操作超簡單:選擇武器後自動運作,F9 切換物理模式、F10 暫停壓槍,滑鼠側鍵快速切換武器 🔑
- 重要提醒:物理動態壓槍功能尚未完成,建議使用固定彈道模式;使用任何第三方工具請自行承擔風險 ⚠️
什麼是 CS2 壓槍腳本?
玩 FPS 射擊遊戲最頭痛的就是後座力控制,尤其是《絕對武力2》(Counter-Strike 2)這種競技導向的遊戲,槍口上揚常常讓準心飄到不知道去哪裡。這款由 Lendan 開發的壓槍腳本,用純 C 語言配合 Windows API 撰寫,完全避開了 ImGui 等容易被偵測的外部圖形庫,透過直接控制滑鼠輸入來抵消武器後座力。
與一般外掛不同,這個工具的設計理念是「輕量、透明、可學習」——原始碼完全公開,玩家可以研究壓槍算法的實作邏輯,甚至自行調整參數來符合個人習慣。
核心功能特色
雙模式壓槍系統
- 固定彈道模式:預設模式,使用內建的 AK-47 與 M4A1-S 彈道數據表,每發子彈的偏移量都經過精算,穩定可靠
- 物理動態模式:根據剩餘彈量動態調整補償強度(模擬真實物理),但 此功能尚未完成,建議暫時不要使用
完整參數自訂
| 參數名稱 | 調整範圍 | 功能說明 | | 全局強度(Power) | 0.1 ~ 2.0 | 整體壓槍補償的強度倍率 | | 垂直靈敏度 | 0.1 ~ 3.0 | 上下方向補償的靈敏度 | | 水平靈敏度 | 0.1 ~ 3.0 | 左右方向補償的靈敏度 | | 物理係數 | 0.001 ~ 0.1 | 物理動態模式的衰減參數 |
快捷操作設計
- 滑鼠側鍵前(XBUTTON1):快速切換至 AK-47
- 滑鼠側鍵後(XBUTTON2):快速切換至 M4A1-S
- F9:開關物理動態壓槍
- F10:暫停/恢復壓槓功能
- 切換至 UI 介面:自動暫停壓槍(安全機制)
技術架構整理
這個專案的程式碼結構相當清晰,適合想學習 Windows 程式設計與遊戲輔助開發的玩家參考:
- 配置管理系統:使用 `std::recursive_mutex` 實現執行緒安全的配置存取,避免多執行緒競態條件
- 武器參數結構:`WeaponParams` 命名空間統一定義 AK-47 與 M4A1-S 的彈匣容量、射擊間隔、基礎偏移量
- 彈道數據表:`ak_fixed` 與 `m4_fixed` 兩個 `std::vector<Node>` 陣列,記錄每發子彈的 X/Y 偏移與時間間隔
- 人性化移動演算法:`move_human()` 函數將單次大幅移動拆分為 8 個小步驟,並加入隨機抖動(jitter),模擬真人操作軌跡
- 物理補償公式:`physics_compensation()` 根據剩餘彈量計算動態補償因子,公式為 `factor = 1.0 + k * (總彈量/剩餘彈量 - 1.0)`
關鍵程式碼片段:壓槍執行緒
RecoilThread 主迴圈邏輯
底下是壓槍功能的核心執行緒,負責監控滑鼠左鍵並執行補償移動:
void RecoilThread() {
while (running_press) {
// 執行緒安全地讀取配置
Weapon curWpn = NONE;
bool isPaused = true, usePhys = false;
float pwr = 1.0f, hs = 1.0f, vs = 1.0f, k = 0.025f;
{
std::lock_guard<std::recursive_mutex> lock(cfg_mutex);
curWpn = active_wpn;
isPaused = (cfg.pause <= 0.5f);
usePhys = cfg.use_physics;
pwr = cfg.power;
hs = cfg.horizontal_sensitivity;
vs = cfg.vertical_sensitivity;
k = cfg.physics_k;
}
// 主要壓槍邏輯
if (!isPaused && curWpn != NONE) {
if (GetAsyncKeyState(VK_LBUTTON) & 0x8000) {
if (usePhys) {
// 物理動態模式(未完成)
int mag = (curWpn == AK) ? WeaponParams::AK_MAG : WeaponParams::M4_MAG;
float bdy = (curWpn == AK) ? WeaponParams::AK_BASE_DY : WeaponParams::M4_BASE_DY;
int cyc = (curWpn == AK) ? WeaponParams::AK_CYCLE_MS : WeaponParams::M4_CYCLE_MS;
for (int s = 0; s < mag; ++s) {
if (!(GetAsyncKeyState(VK_LBUTTON) & 0x8000)) break;
float dy = physics_compensation(s, mag, bdy, k);
move_human(0.0f, dy, cyc, pwr, hs, vs);
}
}
else {
// 固定彈道模式(推薦使用)
const auto& data = (curWpn == AK) ? ak_fixed : m4_fixed;
for (const auto& n : data) {
if (!(GetAsyncKeyState(VK_LBUTTON) & 0x8000)) break;
move_human(n.x, n.y, n.ms, pwr, hs, vs);
}
}
// 等待放開左鍵
while (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
std::tdis_tdread::sleep_for(std::chrono::milliseconds(2));
}
}
std::tdis_tdread::sleep_for(std::chrono::milliseconds(1));
}
}
這段程式碼展示了幾個重要設計:
- 使用 `std::lock_guard` 配合 `recursive_mutex` 確保配置讀取的原子性
- 透過 `GetAsyncKeyState(VK_LBUTTON)` 即時檢測滑鼠狀態
- 雙模式分支:物理模式使用動態計算,固定模式直接查表
- 每發子彈間的時間控制透過 `std::tdis_tdread::sleep_for` 實現
自訂 UI 元件實作
專案沒有依賴外部 GUI 框架,而是直接用 Windows API 實作了兩個自訂控制項:
- SliderEx 滑桿類別:支援即時拖曳調整,數值範圍可設,回呼函數即時更新配置
- CheckBoxEx 核取方塊:自繪樣式,支援狀態切換回呼
這種設計雖然增加了程式碼量,但完全避免了 ImGui 等函式庫可能帶來的 VAC 偵測風險。
編譯與使用方式
環境需求
- Windows 10/11 作業系統
- Visual Studio 2019 或更新版本(需支援 C++11)
- Windows SDK
編譯步驟
- 建立新的 Windows 桌面應用程式專案
- 將原始碼貼入主要 .cpp 檔案
- 確定專案設定為「多執行緒 DLL」執行階段
- 編譯為 Release x64 版本
執行方式
- 執行程式後會顯示深色主題的設定視窗
- 點選「AK」或「M4」選擇武器(「無」為關閉)
- 調整靈敏度參數以配合個人滑鼠 DPI
- 進入遊戲,按住滑鼠左鍵射擊即可自動壓槍
- 需要暫停時按 F10 或點選「暫停壓槍」
👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app
檔案下載點
執行檔與原始碼
底下提供編譯完成的執行檔與完整原始碼,供學習與研究使用:
所有站內附件皆會附上安全掃描報告 請會員查看純淨度百分比後判斷使用
相關檔案須知: 取得檔案前,請先詳細閱讀文章內容 避免不必要錯誤與誤會發生。 也可多參考文章討論樓層內容 了解附件檔案相關討論資訊。
檔案資訊
- 檔案名稱:recoil control CS2 MorenLendan
- 檔案大小:71.5 KB
- 格式:Windows 執行檔(.exe)
- 原始碼:完整 C++ 原始碼已於上方提供
常見問題Q&A
Q:這個工具會被 VAC 偵測到嗎?
A:開發者刻意避免使用 ImGui 等常見外部函式庫,並採用 Windows 原生 API 實作,理論上降低了被特徵碼偵測的風險。但任何第三方工具都無法保證 100% 安全,使用請自行承擔帳號風險。
Q:為什麼物理動態壓槍不能用?
A:根據原作者說明,物理動態功能「not yet complete」(尚未完成),建議使用固定彈道模式即可。固定模式已經過充分測試,穩定性較高。
Q:如何調整參數才能壓好 AK-47?
A:建議從預設值(Power 1.0、垂直/水平靈敏度 1.0)開始,進入遊戲的練習場對著牆壁掃射觀察彈孔分佈。如果彈孔持續上飄,就提高垂直靈敏度;如果左右飄散,就調整水平靈敏度。每次只調整一個參數,逐步微調。
Q:這個工具可以用在其他武器嗎?
A:目前版本只內建 AK-47 與 M4A1-S 的彈道數據。若要支援其他武器,需要自行修改原始碼中的 `ak_fixed` 或 `m4_fixed` 陣列,加入新武器的彈道偏移數據。
Q:為什麼有時候壓槍會突然停止?
A:這是設計上的安全機制——當你切換回工具的 UI 視窗時,壓槍會自動暫停,防止在非遊戲視窗中意外觸發。回到遊戲後按 F10 或取消「暫停壓槍」即可恢復。
Q:原始碼中的「水平已反轉」是什麼意思?
A:在 `ak_fixed` 陣列的註解中提到「水平已反轉」,這表示 AK-47 的彈道數據經過修正,X 軸(水平)偏移量的正負號與原始數據相反,以符合實際遊戲中的後座力方向。
|