天龍八部的幾個CALL寫法 Delphi版

2021-09-07 21:04:34 字數 3979 閱讀 6728

//******************************=call部份start***********************************====

procedure callwalk(xy: pcoordinate); stdcall;

varx,y: single;

begin

x := xy^.x;

y := xy^.y;

asmpushad

mov     edx, x

mov     eax, y

mov     ecx, eax

push    ecx

push    edx

mov     ecx, [baseaddr]

mov     ecx, [ecx + $64]

mov     ecx, [ecx + $160]

mov     eax, callwalkaddr

call    eax

popad

end;

end;

procedure walk(x, y: single);

var myzuobiao:tcoordinate;

begin

myzuobiao.x:=x;

myzuobiao.y:=y;

injectfunc(hwulin,@callwalk,@myzuobiao,sizeof(tcoordinate));

end;

//使用技能

function useskill(p: pskillparam):dword; stdcall;

varc1,c2,c3,c4,c5,c6 :dword;

begin

c1 :=p^.c1;

c2 :=p^.c2;

c3 :=p^.c3;

c4 :=p^.c4;

c5 :=p^.c5;

c6 :=p^.c6;

asmpushad

push c6

push c5

push c4

push c3

push c2

push c1

mov ecx,dword ptr ds:[baseaddr]

mov edx,dword ptr ds:[ecx+$64]

mov ecx,dword ptr ds:[edx+$160]

mov eax, calluseskilladdr

call  eax

popad

end;

result:=0;

end;

//打坐 :c1=23 c2=ffffffff c3=ffffffff c4=bf800000 c5=bf800000 c6=bf800000

procedure dazuo;

varusesjineng :tskillparam;

begin

usesjineng.c1 := $23;

usesjineng.c2 := $ffffffff;

usesjineng.c3 := $ffffffff;

usesjineng.c4 := $bf800000;

usesjineng.c5 := $bf800000;

usesjineng.c6 := $bf800000;

injectfunc(hwulin,@useskill,@usesjineng,sizeof(usesjineng));

end;

//返回大理城:c1=16 c2=ffffffff c3=ffffffff c4=bf800000 c5=bf800000 c6=bf800000

procedure gotodali;

varusesjineng :tskillparam;

begin

usesjineng.c1 := $16;

usesjineng.c2 := $ffffffff;

usesjineng.c3 := $ffffffff;

usesjineng.c4 := $bf800000;

usesjineng.c5 := $bf800000;

usesjineng.c6 := $bf800000;

injectfunc(hwulin,@useskill,@usesjineng,sizeof(usesjineng));

end;

//打怪:c1=技能編號 c2=ffffffff c3=怪id c4=bf800000 c5=bf800000 c6=bf800000

procedure attack(jinengid,guaiid: dword);

varusesjineng :tskillparam;

begin

usesjineng.c1 := jinengid;

usesjineng.c2 := $ffffffff;

usesjineng.c3 := guaiid;

usesjineng.c4 := $bf800000;

usesjineng.c5 := $bf800000;

usesjineng.c6 := $bf800000;

injectfunc(hwulin,@useskill,@usesjineng,sizeof(usesjineng));

end;

//撿物品_全撿 用包裹基址

procedure select;stdcall;

begin

asmpushad

mov ecx,wpbaseadr

mov ecx,[ecx]

mov eax,[ecx]

call dword ptr [eax+$d8]

popad

end;

end;

//開啟撿物視窗 可走近撿物

procedure openselect1(bagid:pparam);stdcall;

vareax1:cardinal;

begin

eax1:=bagid^.id;

asmpushad

push eax1

mov eax,dword ptr [opencall_ecx]

mov eax,[eax]

call dword ptr [eax+$7c]

popad

end;

end;

//撿物品視窗是否開啟

function openselecttrue:bool;stdcall;

varbase:cardinal;

begin

base:= mem.readint(openselectbaseadr+$10);

base:= mem.readint(base);

base:= mem.readint(base+$c);

base:= mem.readint(base+$64);

if base=1 then  result:=true  else result:=false;

end;

//******************************=call部份end***********************************====

走路call呼叫方式是這樣的。(0520版)

先 push y

再 push x

傳遞暫存器 ecx=[[[charbaseaddr]+64]+160]

傳遞暫存器 edx=[[[[charbaseaddr]+64]+160]]

呼叫 call 004506f0

使用delphi的在傳遞引數時可能沒什麼問題。

使用vb的就有問題了。因為座標引數是single型別,而clsasm.push引數是long型別。兩者在記憶體中儲存的方式不一樣。所以要使用乙個api。

call copymemory(long型別的x,single型別的x,4)

call copymemory(long型別的y,single型別的y,4)

然後把long型別的座標傳遞給push就可以了。

php mysql天龍八部 php天龍八部

連線mysql資料庫 判斷是否連線成功 選擇資料庫 設定字符集 準備sql語句 向mysql服務傳送sql語句 解析處理結果集 釋放結果集,關閉資料庫連線 連線資料庫 link mysqli connect localhost root var dump link 判斷資料庫是否鏈結 if mysq...

分詞 天龍八部

自定義詞典 段譽 段正明段正淳 段延慶皇妃 刀白鳳秦紅棉 甘寶寶阮星竹 王夫人王語嫣 木婉清鍾靈 高公升泰巴天石 華赫艮范曄 褚萬里古篤誠 傅思歸朱丹臣 南海鱷神 雲中鶴鍾萬仇 崔百泉過彥之 枯榮大師 本因本觀 本相本參 黃眉大師 破疑破嗔 鳩摩智蕭峰 蕭遠山阿朱 阿紫游坦之 馬伕人徐長老 白世鏡項...

天龍八部原始碼描述

天龍八部 武俠世界 的原始碼很可能是天龍八部 流出後改寫的,因為在看了 中可以找到一些證據,整個客戶端分為 乙個是編輯器,乙個是客戶端,採用ogre cegui 自寫的簡單的物理碰撞檢測 fmod 自寫的網路庫。伺服器端 目前沒仔細關注 客戶端總體的描述如下 ui系統 cegui ui基礎系統 ce...