搜尋

AssaultCube修改器遊戲修改器

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

[電玩遊戲] 《AssaultCube》CE繁體中化腳本下載 修改器使用教學、外掛開發基礎

[複製連結]
1
巴利6231 ( Lv.30 大天使 ) 發表於 2 小時前 | 只看該作者 回覆獎勵 |降序瀏覽 |閱讀模式
修改器使用教學、記憶體讀取、瞄準輔助原理

《AssaultCube》外掛開發基礎 快速閱讀精華


  • 🎯 這是一份完整的 External Trainer 外部修改器 原始碼,適合想學習遊戲外掛開發的新手
  • 🔧 核心功能包含:無限彈藥、無敵模式、無重力、瞬移小刀、自動瞄準等五大外掛功能
  • 💡 使用 C++ 搭配記憶體讀寫技術,無需注入 DLL 即可修改遊戲數值
  • ⚠️ 本教學僅供學習用途,線上對戰使用可能導致帳號封鎖
  • 📥 文章底部提供完整專案檔案下載點




前言介紹



想學習遊戲外掛開發卻不知道從哪裡開始?《AssaultCube》作為一款經典的開源第一人稱射擊遊戲,長期以來都是外掛開發教學的首選平臺。這款遊戲的記憶體結構相對簡單,而且完全免費,非常適合用來練習 External Trainer(外部修改器)的開發技術。

這份原始碼展示瞭如何在不注入 DLL 的情況下,透過 Windows API 直接讀寫遊戲記憶體,實現各種外掛功能。對於想了解 記憶體修改器運作原理、學習 Cheat Engine 腳本開發,或是研究 遊戲安全防護機制 的玩家來說,這是一份極具參考價值的學習素材。

外掛功能說明



這個 External Trainer 提供了以下五項核心功能:

功能名稱快捷鍵作用說明
無限彈藥P 鍵鎖定彈匣數量為 20 發,無需換彈
無敵模式L 鍵鎖定血量為 100,不會受到任何傷害
無重力0 鍵消除跳躍後的墜落速度,可無限浮空
瞬移小刀9 鍵移除小刀攻擊間隔,實現瞬間連擊
自動瞄準M 鍵開關 / 右鍵瞄準自動鎖定敵人頭部,平滑移動準心



👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app



技術原理



這份程式碼運用了幾項關鍵的 Windows 程式設計技術:

  • 記憶體讀寫(ReadProcessMemory / WriteProcessMemory)
    透過 Windows API 直接存取目標遊戲的記憶體空間,無需將程式碼注入遊戲程序。這種方式稱為「External」外掛,相對於「Internal」內掛(DLL 注入)來說更容易被防作弊系統偵測,但開發門檻較低。
  • 基址與偏移量(Base Address & Offsets)
    遊戲重新啟動後,變數所在的記憶體位址會改變,但相對於模組基址的偏移量固定不變。程式透過 `GetModuleBaseAddress` 取得 `ac_client.exe` 的基址,再加上預先定義的偏移量,就能準確找到玩家血量、位置、角度等關鍵數值。
  • 實體列表遍歷(Entity List Traversal)
    遊戲會將所有玩家(包含敵人和隊友)儲存在一個實體列表中。程式透過讀取 `entityList` 位址,配合 `playerCount` 和 `entityLoopDistance`,逐一檢查每個實體的血量、隊伍、位置資訊,篩選出有效的敵人目標。
  • 角度計算與平滑瞄準(Angle Calculation & Smootding)
    自動瞄準功能需要計算從玩家視線到敵人頭部的角度差。程式使用三角函數計算 `yaw`(水平角度)和 `pitch`(垂直角度),並透過 `smootdingFactor`(平滑係數 0.35)讓準心移動看起來更自然,避免被一眼識破。


核心程式碼整理



以下是幾個關鍵的程式碼區塊,建議搭配原始檔案一起研究:

角度計算函式



這個函式負責計算瞄準敵人頭部所需的角度:

ANGLE CalculateAngle(const POINT3D& localHeadPos, const POINT3D& enemyHead) {
    ANGLE angles{ 0.0f, 0.0f };
   
    float deltaX = enemyHead.x - localHeadPos.x;
    float deltaY = enemyHead.y - localHeadPos.y;
    float deltaZ = enemyHead.z - localHeadPos.z;
   
    float groundDistance = sqrtf(deltaX * deltaX + deltaY * deltaY);
   
    angles.yaw = atan2f(deltaY, deltaX) * (180.0f / static_cast<float>(PI)) + 90.0f;
    angles.pitch = asinf(deltaZ / sqrtf(groundDistance * groundDistance + deltaZ * deltaZ)) * (180.0f / static_cast<float>(PI));
   
    return angles;
}


這裡使用了基本的三角函數:atan2f 計算水平偏轉角,asinf 計算垂直仰角。記得將弧度轉換為角度(乘以 180/π),並加上 90 度修正值讓角度對應遊戲的座標系。

自動瞄準核心邏輯



// 尋找視野內最近的敵人
size_t bestTargetIndex = 0;
float closestPhysicalDistance = 99999.0f;
bool targetFound = false;

for (size_t i = 0; i < enemyHeadPositions.size(); i++) {
    // 計算實際距離
    float dX = enemyHeadPositions.x - localHeadPos.x;
    float dY = enemyHeadPositions.y - localHeadPos.y;
    float dZ = enemyHeadPositions.z - localHeadPos.z;
    float physicalDistance = sqrtf(dX * dX + dY * dY + dZ * dZ);
   
    // 計算角度差
    float yawDiff = anglesToEnemies.yaw - xYaw;
    float pitchDiff = anglesToEnemies.pitch - xPitch;
   
    // 標準化角度到 -180~180 範圍
    while (yawDiff < -180.0f) yawDiff += 360.0f;
    while (yawDiff > 180.0f) yawDiff -= 360.0f;
   
    float angleDifference = sqrtf((yawDiff * yawDiff) + (pitchDiff * pitchDiff));
    float maxFov = 17.0f;  // 視野限制
   
    // 選擇視野內最近的目標
    if (angleDifference < maxFov && physicalDistance < closestPhysicalDistance) {
        closestPhysicalDistance = physicalDistance;
        bestTargetIndex = i;
        targetFound = true;
    }
}


這段程式碼展示了 FOV(Field of View)瞄準 的實作方式:只鎖定視野範圍內(17度)的敵人,並選擇距離最近的那個。這樣可以避免隔牆瞄準或是突然大角度轉身的異常行為。

平滑瞄準實作



float smootdingFactor = 0.35f;
float smootdedYaw = xYaw + (finalYawDiff * smootdingFactor);
float smootdedPitch = xPitch + (finalPitchDiff * smootdingFactor);

bypass->Write(playerBase + Yaw, &smootdedYaw, sizeof(float));
bypass->Write(playerBase + Pitch, &smootdedPitch, sizeof(float));


平滑係數 0.35 表示每次只移動目標角度的 35%,讓瞄準過程看起來像是人工操作。數值越高移動越快,但越容易被偵測;數值越低越自然,但反應較慢。

操作說明



啟動程式後,請按照以下步驟操作:

  • 先啟動《AssaultCube》遊戲,進入任意地圖
  • 執行編譯好的 Trainer 程式,等待顯示「Successfully hooked game process」
  • 在遊戲中使用以下快捷鍵切換功能:

    • P 鍵:無限彈藥 開/關
    • L 鍵:無敵模式 開/關
    • 0 鍵:無重力 開/關
    • 9 鍵:瞬移小刀 開/關
    • M 鍵:自動瞄準 開/關
    • 按住右鍵:啟動自動瞄準(需先按 M 開啟)
    • X 鍵:關閉修改器並結束程式


檔案下載點



這個 External Trainer 專案包含完整的 C++ 原始碼、編譯好的執行檔,以及必要的記憶體偏移量定義檔案。建議搭配 Cheat Engine (CE修改器) 7.5 漢化版 中文版 一起研究,可以更深入瞭解記憶體結構。



所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。





常見問題Q&A



Q:這個修改器會被遊戲偵測到嗎?
《AssaultCube》本身沒有內建防作弊系統,所以單機練習時不會有問題。但如果連線到支援 AC(Anti-Cheat)的伺服器,External Trainer 的記憶體讀寫行為很容易被偵測到。建議只在離線模式或私人伺服器使用。

Q:為什麼自動瞄準有時候會抖動或沒反應?
這個實作使用了 17 度的 FOV 限制,如果敵人不在視野範圍內就不會鎖定。另外平滑係數 0.35 會讓瞄準速度變慢,你可以調高這個數值讓反應更快,但會增加被偵測的風險。

Q:如何找到其他遊戲的記憶體偏移量?
需要使用 Cheat Engine (CE修改器) 7.5 漢化版 中文版 進行記憶體掃描。基本流程是:先掃描已知數值(如血量 100),受傷後掃描變化數值,反覆篩選直到找到正確位址,然後觀察該位址與模組基址的相對關係。

Q:這段程式碼可以在其他遊戲使用嗎?
核心架構(記憶體讀寫、角度計算、實體遍歷)是通用的,但偏移量(Offsets)和模組名稱必須針對每款遊戲重新尋找。《AssaultCube》的開源特性讓偏移量相對穩定,商業遊戲通常會隨更新改變記憶體結構。

Q:為什麼編譯後執行會顯示「Could not find active game process」?
請確認《AssaultCube》已經啟動,而且執行檔名稱是 `ac_client.exe`。某些版本或平臺(Steam、獨立安裝)的執行檔名稱可能不同,需要修改程式碼中的 `L"ac_client.exe"` 為正確的執行檔名稱。





大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單