奇跡Mu分析-各種主流BT機能実現
5877 ワード
主流の外挂の机能の実现を一つ一つ与えて、ベースアドレスは提供しません!
一、瞬時移動
この機能には2つのステップが必要です
1、モバイルパッケージの送信
2、ローカル画面同期の修正
二、自動選択/選択フィルタ
サービス側はピックアップ距離の判断がありますが、瞬時シフトに合わせて秒ピックアップが可能です
実現構想.
1.バックパックをブロックし、落下したバッグを手に入れる
2、パッケージのフィルタリングが必要かどうかを解析する
3、瞬移+ピックアップ、2つのバッグを出す.(ここでのトランジションは同期画面を必要とせず、リモートピックアップのように見えます)
選択の実装は次のとおりです.
三、吸怪/聚怪/全屏打怪(普通攻撃)
この機能の実現には2つの方法がある
方法1:
1、リターンバッグ(モンスターが移動したバッグ)を切り取る
2、移動パック内の座標を修正し、すべて固定座標に変更する
3、ローカルは吸怪/聚怪効果のように見え、キャラクターが直接攻撃すればよい
方法2:
1、環境リストを取得する(変なリスト)
2、1サイクルごとにモンスターごとに攻撃パケットを送信する
3、地元では周囲が血を落としているように見えます.つまり、全画面攻撃です.
この機能コードは~
四、マルチ攻撃/スキル交換
この機能の実現効果はAスキルを入れたもので、ダメージ効果はBスキルです.例えば:法師は火竜を放して、効果は地獄の火です!!
機能の考え方:
1、奇跡攻撃は2つのバッグに分けられ、①攻撃バッグ②命中バッグ
2、我々は命中バッグの技能IDを修正すれば実現できる
変更方法:
1、直接コード変更(困難、CRCあり)
2、封包を修正し、発注をブロックし、命中包であれば、直接技能IDを交換すればよい
ここではヒットパッケージの構造を提供します
五、単体スキル群攻効果
この機能は便利です.
単体のスキルをリリースし、周囲の全てのモンスターを攻撃する事ができる.
アイデア:グループ攻撃のパッケージ内のスキルIDを単体スキルIDに変更
群攻包の構造を与える
六、多重攻撃(単体スキル)
スキルを1回リリースし、最大5回の攻撃効果があります.
実装方法は簡単で、スキルパッケージを短間隔で連続的に送信
ここでは単体スキルリリースパッケージ構造を示します
一、瞬時移動
この機能には2つのステップが必要です
1、モバイルパッケージの送信
2、ローカル画面同期の修正
procedure TGameFunMgr.Move(x,y:Integer; Way:Byte = 0);
type
_Buffer = Packed record
_C1:Byte; //C1
Len:Byte;
cmd:byte; //D7
x,y:Byte;
setp:Byte;
end;
var
Buffer:_Buffer;
P:TPoint;
begin
Role.IsSuperMove :=True;
p.X:=x;
p.Y:=y;
Role.RolePos:=P;
Buffer._C1:=$C1;
Buffer.Len:=SizeOf(_Buffer);
Buffer.cmd:=$D7;
Buffer.x:=x;
Buffer.y:=y;
Buffer.setp:=Way;
MyEncode(@Buffer,SizeOf(_Buffer));
pNtGameSend(Buffer,Buffer.Len,0,0);
//
P.X:=x * 100 + 50;
P.Y:=y * 100 + 50;
Role.MapPos:= P;
end;
二、自動選択/選択フィルタ
サービス側はピックアップ距離の判断がありますが、瞬時シフトに合わせて秒ピックアップが可能です
実現構想.
1.バックパックをブロックし、落下したバッグを手に入れる
2、パッケージのフィルタリングが必要かどうかを解析する
3、瞬移+ピックアップ、2つのバッグを出す.(ここでのトランジションは同期画面を必要とせず、リモートピックアップのように見えます)
選択の実装は次のとおりです.
procedure TGameFunMgr.PickUp(ItemIndex: Word);
type
TBuffer = packed Record
_C1:Byte; //C1
BufferCount:Byte; //1
Cmd:Byte; //22
ItemIndex_h:Byte;
ItemIndex_l:Byte;
end;
var
Buffer:TBuffer;
begin
Buffer._C1:=$C1;
Buffer.BufferCount:=SizeOf(TBuffer);
Buffer.Cmd:=$22;
Buffer.ItemIndex_h:=ItemIndex shr 8;
Buffer.ItemIndex_l:=ItemIndex and $FF;
Buffer.ItemIndex_h:=Buffer.Cmd xor $FE xor Buffer.ItemIndex_h;
Buffer.ItemIndex_l:=Buffer.ItemIndex_h xor $18 xor Buffer.ItemIndex_l;
pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;
は、パケットの解析を返します.procedure DropItem(P:Pointer);
type
_Buffer = Packed record
Id_h:Byte;
Id_l:Byte;
x,y:Byte;
ResId:Array [0..2] of Byte;
M_h,M_l:Byte;
OtherValue:array [0..6] of Byte;
end;
var
Count:Byte;
I,Base:Cardinal;
Buffer:^_Buffer;
x,y:Byte;
begin
Count:=pByte(P)^;
if Count > 0 then
begin
Base:=Cardinal(P)+1;
for I:= 0 to Count - 1 do
begin
Buffer:=Pointer(Base + i * SizeOf(_Buffer));
Dbgprint('ID:%X POS:%d,%d Money:%d',[
Buffer.Id_h * $100 + Buffer.Id_l,
Buffer.x,
Buffer.y,
Buffer.M_h * $100 + Buffer.M_l]);
if Buffer.Id_h = $80 then
Buffer.Id_h:=0;
x:=Role.RolePos.x;
y:=Role.RolePos.y;
Game.HideMove(Buffer.x,Buffer.y); //
Game.PickUp(Buffer.Id_h * $100 + Buffer.Id_l);
Game.HideMove(x,y); //
end;
end;
end;
三、吸怪/聚怪/全屏打怪(普通攻撃)
この機能の実現には2つの方法がある
方法1:
1、リターンバッグ(モンスターが移動したバッグ)を切り取る
2、移動パック内の座標を修正し、すべて固定座標に変更する
3、ローカルは吸怪/聚怪効果のように見え、キャラクターが直接攻撃すればよい
方法2:
1、環境リストを取得する(変なリスト)
2、1サイクルごとにモンスターごとに攻撃パケットを送信する
3、地元では周囲が血を落としているように見えます.つまり、全画面攻撃です.
この機能コードは~
四、マルチ攻撃/スキル交換
この機能の実現効果はAスキルを入れたもので、ダメージ効果はBスキルです.例えば:法師は火竜を放して、効果は地獄の火です!!
機能の考え方:
1、奇跡攻撃は2つのバッグに分けられ、①攻撃バッグ②命中バッグ
2、我々は命中バッグの技能IDを修正すれば実現できる
変更方法:
1、直接コード変更(困難、CRCあり)
2、封包を修正し、発注をブロックし、命中包であれば、直接技能IDを交換すればよい
ここではヒットパッケージの構造を提供します
procedure TGameFunMgr.BeKill(SkillId: Byte; Tar: TWorldNode);
type
TBuffer = packed Record
_C1:Byte; //C1
BufferCount:Byte; //1
Cmd:Byte; //1D
skill_h:Byte;
Count:Byte;
skill_l:Byte;
x:Byte;
way_s:Byte;
y:Byte;
tar_h:Byte;
way_e:Byte;
tar_l:Byte;
end;
var
Buffer:TBuffer;
begin
Buffer._C1:=$C1;
Buffer.BufferCount:=SizeOf(TBuffer);
Buffer.Cmd:=$1D;
Buffer.skill_h:= SkillId shr 8;
Buffer.Count:=1;
Buffer.skill_l:=SkillId and $FF;
Buffer.x:=Tar.x;
Buffer.y:=Tar.y;
Buffer.way_s:=35;
Buffer.way_e:=0;
Buffer.tar_h:=Tar.Id shr 8;
Buffer.tar_l:=Tar.Id and $FF;
MyEncode(@Buffer,SizeOf(TBuffer));
pBeSkill(Buffer.skill_h,SizeOf(TBuffer) - 3);
pNtGameSend(Buffer,SizeOf(TBuffer),1,0);
end;
この関数はまだ改造できて、最後のtar_xの3バイト構造は、10個サポートできます.これは、10個のモンスターを同時に攻撃できることを意味します.これがフルスクリーン攻撃です.五、単体スキル群攻効果
この機能は便利です.
単体のスキルをリリースし、周囲の全てのモンスターを攻撃する事ができる.
アイデア:グループ攻撃のパッケージ内のスキルIDを単体スキルIDに変更
群攻包の構造を与える
procedure TGameFunMgr.UseRangeSkill(SkillId: Byte; X, Y: Byte);
type
TBuffer = packed Record
Head:Byte; //c1
BufferCount:Byte; //1
Cmd:Byte; //1E
x:Byte;
skill_h:byte;
y:byte;
skill_l:byte;
Def1:Byte; //??? 0
Def2:Byte; //ff
Def3:Byte; //00
Def4:Byte; //ff
Def5:Byte; //00
Def6:Byte; //00
end;
var
Buffer:TBuffer;
begin
Buffer.Head:=$C1;
Buffer.BufferCount:=SizeOf(TBuffer);
Buffer.Cmd:=$1E;
Buffer.x:=x;
Buffer.y:=y;
Buffer.skill_h:=skillid shr 8;
Buffer.skill_l:=SkillId and $FF;
Buffer.Def1:=$9D;
Buffer.Def2:=$FF;
Buffer.Def3:=0;
Buffer.Def4:=$FF;
Buffer.Def5:=0;
Buffer.Def6:=0;
MyEncode(@Buffer,SizeOf(TBuffer));
//
pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;
六、多重攻撃(単体スキル)
スキルを1回リリースし、最大5回の攻撃効果があります.
実装方法は簡単で、スキルパッケージを短間隔で連続的に送信
ここでは単体スキルリリースパッケージ構造を示します
procedure TGameFunMgr.UseRangeSkill(SkillId: Byte; X, Y: Byte);
type
TBuffer = packed Record
Head:Byte; //c1
BufferCount:Byte; //1
Cmd:Byte; //1E
x:Byte;
skill_h:byte;
y:byte;
skill_l:byte;
Def1:Byte; //??? 0
Def2:Byte; //ff
Def3:Byte; //00
Def4:Byte; //ff
Def5:Byte; //00
Def6:Byte; //00
end;
var
Buffer:TBuffer;
begin
Buffer.Head:=$C1;
Buffer.BufferCount:=SizeOf(TBuffer);
Buffer.Cmd:=$1E;
Buffer.x:=x;
Buffer.y:=y;
Buffer.skill_h:=skillid shr 8;
Buffer.skill_l:=SkillId and $FF;
Buffer.Def1:=$9D;
Buffer.Def2:=$FF;
Buffer.Def3:=0;
Buffer.Def4:=$FF;
Buffer.Def5:=0;
Buffer.Def6:=0;
MyEncode(@Buffer,SizeOf(TBuffer));
//
pNtGameSend(Buffer,Buffer.BufferCount,1,0);
end;