<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          游戲輔助開發(fā)框架

          聯(lián)合創(chuàng)作 · 2023-09-30 10:52

          本項(xiàng)目是win32下大型客戶端游戲的游戲輔助開發(fā)框架,由于它集成并包含了游戲輔助開發(fā)的各方面功能,稱本項(xiàng)目為win32輔助開發(fā)的組件也可。 內(nèi)含具體項(xiàng)目有fifa online3、疾風(fēng)之刃、怪物獵人online、流放之路等,也有輔助帳號(hào)驗(yàn)證服務(wù)器,帳號(hào)查尋與管理工具,特征碼識(shí)別,資源文件系統(tǒng)等。 本人現(xiàn)已轉(zhuǎn)型,特發(fā)布此項(xiàng)目,旨在分享一份只供參考的多年工作經(jīng)驗(yàn)與心血,若本項(xiàng)目中有些您認(rèn)為閃亮的設(shè)計(jì)、思路或技巧,并對(duì)您有幫助的話,則樂哉幸甚!

          以下是文件目錄與概要功能組件簡(jiǎn)要說明:

          proj根目錄下目錄說明:

          cpp:C++工程所在地,包括引用的一些C++開源庫(kù)。
          lua:通用的腳本功能,控制臺(tái)界面通用的lua相關(guān)實(shí)現(xiàn)等。
          OD:計(jì)劃存放關(guān)于OD逆向分析的一些東西。
          python:包括用python寫的自動(dòng)更新ida數(shù)據(jù)庫(kù)信息的插件,其中python/ForFrame/PreBuild.py是用來幫助編譯器生成assf資源文件的(assf是本項(xiàng)目所依賴的資源文件系統(tǒng),類似安卓下的資源打包,也像windows下的rc資源文件)。

          lua目錄下目錄與功能說明:

          common目錄提供了lua通用基礎(chǔ)功能。
          wgframe是控制臺(tái)界面通用的實(shí)現(xiàn)。
          wgscript提供輔助腳本通用的基礎(chǔ)功能。

          python目錄下目錄與功能說明:

          _idaex和AUT是關(guān)于IDA自動(dòng)更新數(shù)據(jù)庫(kù)信息的插件,ida分析某個(gè)可執(zhí)行文件的過程中,若是該可執(zhí)行文件更新了新版本,
          那么載入這個(gè)新的可執(zhí)行文件,ida建立的是個(gè)全新的數(shù)據(jù)庫(kù),舊的分析記錄全都不可用了。
          本插件就是解決這個(gè)問題的。本插件支持多種特征碼定位方式,以便把舊的數(shù)據(jù)庫(kù)信息更新到新的ida數(shù)據(jù)庫(kù)中。

          ForFrame是用于生成assf格式的文件,assf是本項(xiàng)目自定義的資源文件系統(tǒng)的格式,類似于windows下的rc資源文件。
          本項(xiàng)目生成的大多數(shù)可執(zhí)行都依賴于assf資源文件系統(tǒng)。

          cpp目錄下目錄與功能說明:

          apps:包括輔助帳號(hào)驗(yàn)證服務(wù)器(CheckServer),輔助帳號(hào)管理器(CSViewer),資源文件系統(tǒng)瀏覽器(AssetExplore),特征碼提取器(ExtractFeatureCode)。
          tools:包括注入dll(HijackDll),通用輔助登陸驗(yàn)證(LoginHlp),錄制地圖坐標(biāo)工具(RecordMap)等。
          libs:框架和具體項(xiàng)目依賴的外部開源庫(kù),包括boost、lua、luabind、luacom、pluto、wxLua、Eigen、openssl、poco、wxWidgets、zlib等。
          subs:具體的輔助項(xiàng)目均放在此目錄下,包括fifa online3、疾風(fēng)之刃、怪物獵人online、流放之路等。
          Frame:框架所在,包括資源文件系統(tǒng)(AssetSys),小的外部開源庫(kù)集合(ExternLib),非??量叹幊汰h(huán)境下的框架代碼集合(PublicX),
          一般苛刻編程環(huán)境下的框架代碼集合(PubMix),普通編程環(huán)境下的框架代碼集合(PubMix)。
          其中苛刻編程環(huán)境意思是只能引用少部分系統(tǒng)功能(dll),不能在該庫(kù)中加入更多的外部引用動(dòng)態(tài)庫(kù)。
          比如非??量叹幊汰h(huán)境,要求dll在初始化時(shí)只能引用這些系統(tǒng)dll:kernel32.dll、user32.dll等。

          以上5個(gè)目錄可以理解為工程項(xiàng)目的5種分類,其中apps、tools、subs依賴于Frame,而Frame又依賴于libs。

          libsetup.props和setup.props是vs的項(xiàng)目屬性頁(yè)配置,libs中的工程大多數(shù)都繼承自libsetup.props通用屬性配置,
          apps、tools、subs、Frame中的工程則繼承自setup.props通用屬性配置。
          Frame目錄下目錄與功能說明:

          AssetSys:資源文件系統(tǒng),項(xiàng)目中主要依賴于該文件系統(tǒng),可解耦于文件具體的位置所在,索引方式等。即相同的文件使用方式,
          具體到具體文件,則該文件可以是系統(tǒng)文件系統(tǒng)的目錄A下,也可以在目錄B下,還可以是內(nèi)存中的某處。
          發(fā)布版本的時(shí)候,文件系統(tǒng)的打包與加解密,對(duì)應(yīng)用層來說都是透明的。
          其中apps/AssetExplore是該資源文件系統(tǒng)的可視化編輯工具。

          Public、PubMix、PublicX都是框架各方面功能的集合,區(qū)分之原因可參見cpp目錄下的ReadMe.txt,此處只介紹框架所支持的需要注意的機(jī)制。

          BufCall:是個(gè)自動(dòng)序列化的機(jī)制,類似boost.serialization。主要應(yīng)用于網(wǎng)絡(luò)通信的自動(dòng)序列化與解析。
          其實(shí)現(xiàn)多借鑒于luabind,以tcp網(wǎng)絡(luò)通信為例,每次發(fā)包相當(dāng)于通過網(wǎng)絡(luò)異步或同步調(diào)用對(duì)方一個(gè)函數(shù),那么對(duì)于發(fā)包方來說,
          只需要告訴要調(diào)用的函數(shù)名以及參數(shù)信息,對(duì)于收包方來說,只需要提供相應(yīng)函數(shù)名的函數(shù)。其中發(fā)包方的參數(shù)序列化都是自動(dòng)的,
          收包方的函數(shù)參數(shù)的解析也是自動(dòng)的,當(dāng)遠(yuǎn)程收到該包,則自動(dòng)解析出函數(shù)參數(shù),并調(diào)用之。
          從這個(gè)意義來講,比較像RPC,所以才將之命名為BufCall。

          FuncObj:tcp-ip通信機(jī)制,底層用的是boost.asio庫(kù),設(shè)計(jì)與實(shí)現(xiàn)并不復(fù)雜,設(shè)計(jì)之初更多地想要模仿com通信技術(shù),
          后來覺得并無必要,然后把它實(shí)現(xiàn)簡(jiǎn)化了,直至現(xiàn)在的版本。加上BufCall機(jī)制的協(xié)作,對(duì)于應(yīng)用層來說,基本上可以無視FuncObj了。

          Hooker:抽象并封裝了hook的底層實(shí)現(xiàn)細(xì)節(jié),讓hook函數(shù)避免去維護(hù)堆棧細(xì)節(jié),做到在hook函數(shù)內(nèi)像普通函數(shù)一樣自由地寫代碼。

          異常:所有框架異常都繼承自CmnExceptionBase,可自動(dòng)處理lua、luabind、c++之間的異常傳遞,對(duì)應(yīng)用層來說是透明的,
          CmnExceptionBase異常與DummySleep函數(shù)的協(xié)調(diào)運(yùn)作,奠定了此框架下游戲輔助開發(fā)的方式與基調(diào),在自身定位方面意義非常。
          同時(shí)也讓單線程下具有異步的效果,但又無多線程和協(xié)程的復(fù)雜性和不穩(wěn)定性。它們是項(xiàng)目中很多其他機(jī)制的基石,比如Action、腳本事件、Timer等。

          Database:數(shù)據(jù)庫(kù)支持,使得數(shù)據(jù)庫(kù)方面的操作具有sql語句方式的簡(jiǎn)潔效果。

          LogOut:日志系統(tǒng),對(duì)boost.log進(jìn)行封裝,使之更方便、簡(jiǎn)潔,對(duì)本項(xiàng)目進(jìn)行適配。支持輸出日志到文件和DbgView。

          IoTimer:計(jì)時(shí)器,支持以毫秒為單位的計(jì)時(shí)器。

          Iterator:迭代器模式的模板實(shí)現(xiàn),支持到lua的for迭代。

          lua:通過diy lua和luabind,支持中文腳本,c++調(diào)試模式下的lua堆棧變量的輸出等。

          Cmn_AppBase類族:類似CWinApp,抽象可執(zhí)行模塊,一個(gè)Cmn_AppBase既可以是基于MFC的CWinApp,又可以是基于wxWidgets的app,還可以是dll。
          其中Cmn_AppBaseFactory類族是典型的工廠模式,以便達(dá)到為app配置各種組件的目的,組件包括通信、腳本方面、輔助游戲邏輯等實(shí)現(xiàn)細(xì)節(jié),
          一般而言,使用框架默認(rèn)的組件即可。

          RStd:全稱為Release of Std,即標(biāo)準(zhǔn)庫(kù)的release版。標(biāo)準(zhǔn)庫(kù)中debug版和release版中的數(shù)據(jù)結(jié)構(gòu)很多都是不一樣的,
          主要應(yīng)用于數(shù)據(jù)分析,因?yàn)橛螒蛑械臄?shù)據(jù)結(jié)構(gòu)很多都是應(yīng)用的標(biāo)準(zhǔn)庫(kù)中的,但都是release版的,RStd可以讓人避免去實(shí)現(xiàn)這樣的算法細(xì)節(jié)。

          WgFacility:提供了輔助游戲邏輯方面比較常用的功能,包括優(yōu)化過后的A星算法,過濾器(filter,比如物品過濾、技能過濾、游戲?qū)ο筮^濾等),
          地圖坐標(biāo)錄制相關(guān)(CmnMapPath),任務(wù)處理(CmnQuestHandler),場(chǎng)景處理(CmnSceneHandler),最短路徑(ShortestPaths)等。

          GGameObjBase、GGameObjMgrBase:輔助對(duì)象到游戲?qū)ο蟮膶?duì)應(yīng)對(duì)象,比如游戲里的角色對(duì)象,那么輔助里就有一個(gè)Player類表示角色,
          輔助里的Player對(duì)象稱之為代理對(duì)象。代理對(duì)象數(shù)據(jù)的更新為主動(dòng)觸發(fā)型,即根據(jù)需要去更新對(duì)象數(shù)據(jù)。
          游戲邏輯中到處可見各種對(duì)象,所以GGameObjBase、GGameObjMgrBase雖然看起來僅僅只定義了這么個(gè)抽象,但這個(gè)抽象挺重要。

          Action:CA_IAction類族,與異常等的協(xié)作,讓游戲邏輯中角色同時(shí)做多件事情成為了比較容易的工作。


          以上是框架方面部分功能或機(jī)制的簡(jiǎn)要介紹,細(xì)覽代碼,發(fā)現(xiàn)好多東西未能在此盡述,想寫上來吧,
          發(fā)現(xiàn)只可意會(huì),難以言傳,不寫吧,難不成這幾年為之努力的框架就那么點(diǎn)東西嗎?真若如此,自己都覺得對(duì)不起自己。
          思量再三,還是不寫了吧,究其原因,概因自己目前水平所限,僅此而已。

          瀏覽 22
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本中文乱伦字幕 | av片电影在线播放 | 人妻无码久久精品人妻成人 | 免费在线性爱视频 | 天堂网2024 |