縱橫三國外掛程式手記 4 實現篇

2021-05-24 12:42:33 字數 1954 閱讀 9895

那麼介面部分這裡就不多介紹了。用

bcb也就是拖拖控制項的。我們先來看下如何實現和主邏輯模組交換資訊。

1, 首先我們需要乙個結構體來組織需要交換的資訊。

typedef struct _controlsetting controlsetting;

這個結構組織了設定掛機需要的資訊。當然和介面的控制項一一對映。比如

area

就是掛機的範圍,

baseloc

就是掛機的座標,

mlev

是要打的怪物等級。

typedef struct _roleinfo roleinfo;

這個結構是主邏輯模組傳回的當前角色資訊,也就一些值,包括血量,藍,座標啊。

有了結構我們需要找到種方式將它傳到遊戲中執行的邏輯模組。前面也說過幾種方式,我是懶人。。。當然選擇最簡單的

--記憶體檔案對映。

下面是這部分操作介面的標頭檔案(在主程式和主邏輯模組都共用以下的介面和上面的結構):

[processdatamanager.h]

int openchannel(int isopen); //

開啟記憶體檔案對映。

int getdata(void* buf); //

讀取通道中的資料。

int setdata(void *buf,int idx,int len); //

向通道裡放資料。

void closechannel();

我們用通道時會用乙個公共

buf。

#define buf_size 1024

char *pbuf; 這個

buf分兩部分,前

512byte

是供主程式設定來自使用者設定的掛機引數(也就是在介面設定的值)。後

512byte

是給主邏輯模組更新遊戲角色當前資訊用以顯示在主程式介面上給你看。

我們來看下這幾個介面的實現:

上面看的

szname

定義如下,它實際上通道(記憶體檔案對映)名,隨便起就好。但要注意兩點: 1,

通道兩邊要共用這個名,因為它是標識這個通道的。如果不同的話,要麼就和其它通道對接了,要麼就建了個新的。 2,

這個通道名不能和其它重複,要保證唯一性。所以盡量起的看似複雜隨機些。

這樣在主程式裡就可以呼叫以下**來獲得角色資訊並顯示到介面上了:

void controlmanager::updateroleinfo()

當然可以呼叫下面函式來將掛機的引數資訊設定給主邏輯模組:

void controlmanager::updatecontrolsetting()

應該看到這裡使用了一種程式設計手法上的技巧,概念上結構體就記憶體嘛。我們根本無需在設定時給他們一一賦值。拷貝整個記憶體就

ok,但有個需要注意的地方。主程式和主邏輯模組(

sockhookfun.dll

)要共用相同的結構。

其實拷貝結構甚至可以這樣玩:

crtcontrolsetting = *(controlsetting*)buf;

buf就是塊記憶體嘛。

(controlsetting*)

其實是告訴編譯器以什麼樣的組織結構操作這塊記憶體。乙個描述而已。

*(controlsetting*)

也就是以

controlsetting

這種結構取記憶體中的值。和記憶體大小無法。只要大於

controlsetting

這個結構就

ok。這種拷貝結構體的技巧後面會常用。所以這邊解釋下。

再比如crtroleinfo

可以:

crtroleinfo = *(roleinfo*)(buf+512); 或者

:crtroleinfo = *(roleinfo*)(&buf[512]);

這篇先介紹到這裡,後面會介紹技術性比較強的注入和布局主邏輯模組的實現。

nefu 三國之戰

三國之戰 time limit 1000 memory limit 65536 description 在三國某某戰爭中,魏軍要圍攻蜀國.諸葛亮親自指揮戰爭,對抗曹操。現假設諸葛亮有n個大炮,每個大炮都有乙個攻擊值ai ai 0 ai 100 而且他有乙個神奇的技能,就是他能指定任意區間的大炮,使他...

新三國爭霸

descrption input output sample input 3 3 5 10 30 1 2 1 2 3 2 1 3 4 11 3 2 5sample output 180hint 分析 顯然現在問題如何知道 w j 1 i n le 300 範圍比較小,我們可以 n 2 預處理出區間內...

寫個三國殺

自己老早以前就想寫個區域網的三國殺,以前思考過其遊戲邏輯的實現,覺得有點複雜,一直也沒有真正動手,上個週末,真正動手做了起來,2天裡寫了大約2000來行 算是把整個框架有了個大致的實現。下面把整個思路整理一下。既然是輕量級的區域網版本,就沒必要把伺服器和客戶端分開來做,就讓程式自帶服務端和客戶端,類...