Już postaram się wytłumaczyć.
"Programik" wygląda tak:
Jest pisany teraz na szybko. Posiadam też bardziej rozbudowany z wieloma funkcjami i on z kolei wygląda tak:
Rozumiem jednak że ze zdjęć nie da się nick wysnioskować ze skryptu, jednak idzie zauważyć że staram się zrobić coś takiego jak wysyłanie własnych pakietów. Np. tak jak ten z notatnika. Działało by to w ten sposób że jest Sobie folder w folderze z botem o nazwie "Scripts", a w nim były by skrypty, a konkretnie pakiety. Rozbudowałbym to rzecz jasna bez żadnego problemu już kiedy te pakiety mają zostać wysłane (np. gdzie pasek zdrowia spadnie poniżej 50 % to wtedy użyje czaru uleczającego). W każdym razie musi mi współgrać jakoś ten notatnik, a raczej pakiety z notatnika wraz z programem, którego "tworzę".
Funkcja SendPacket działa tylko i wyłącznie dzięki dllce (packet.dll), który był udostępniony przez administratora servera.
Jak już pisałem całego skryptu do programu tu nie będę wrzucać bo troszkę tego jest, ale wrzucę do tego "programiku" który ma właśnie mieć takową funkcję wysyłania pakietów z notatnika np. klikając na button.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit3: TEdit;
ListBox1: TListBox;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
result: string;
implementation
procedure SendPacket(ProcessID: Cardinal; Packet: Pointer; Encrypt: Boolean; SafeArray: Boolean); stdcall; external 'packet.dll';
//wysylanie tekstu dziala.
procedure say(text:string);
var
PacketBuffer: array [0..200] of byte;
ProcessID: Cardinal;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcessID); //pobranie id procesu Tibii
PacketBuffer[0] := Byte(Length(text) + 4); //tu okreslana jest dlugosc pakietu bez 0 i 1
PacketBuffer[1] := $00;
PacketBuffer[2] := $96;
PacketBuffer[3] := $01;
PacketBuffer[4] := Byte(Length(text));
PacketBuffer[5] := $00;
CopyMemory(@PacketBuffer[6], @text[1], Length(text));
SendPacket(ProcessID, @PacketBuffer, TRUE, FALSE); // tu program wysyla pakiet do programu z proces id = ProcessID
end;
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
type
TPacketBuffer = array [0 .. 199] of Byte;
procedure LoadPacketFromFile(const AFileName: String; out APacket: TPacketBuffer);
var
LInputFile: TextFile;
LLine: String;
LByteVal: Byte;
LByteIdx: Integer;
begin
AssignFile(LInputFile, AFileName);
Reset(LInputFile);
try
LByteIdx := 0;
while not EoF(LInputFile) do
begin
ReadLn(LInputFile, LLine);
LByteVal := StrToInt(LLine);
APacket[LByteIdx] := LByteVal;
Inc(LByteIdx);
end;
finally
CloseFile(LInputFile);
end;
end;
var
LPacket: TPacketBuffer;
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
//sendp niedaradypokico xd
procedure sendp(text:string);
var
PacketBuffer: array [0..199] of byte;
ProcessID: Cardinal;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcessID);
SendPacket(ProcessID, @PacketBuffer, TRUE, FALSE);
end;
//leczmane //dziala
procedure leczmane();
var
PacketBuffer: array [0..200] of byte;
ProcessID: Cardinal;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcessID);
PacketBuffer[0] := $0A;
PacketBuffer[1] := $00;
PacketBuffer[2] := $82;
PacketBuffer[3] := $FF;
PacketBuffer[4] := $FF;
PacketBuffer[5] := $41;
PacketBuffer[6] := $00;
PacketBuffer[7] := $00;
PacketBuffer[8] := $D5;
PacketBuffer[9] := $07;
PacketBuffer[10] := $00;
PacketBuffer[11] := $01;
SendPacket(ProcessID, @PacketBuffer, TRUE, FALSE);
end;
{$R *.dfm}
// Funkcje czytaj¹ce
function ReadMemInteger(Address: Cardinal): Cardinal; //Read adress:value
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcId);
tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
CloseHandle(tProc);
Result:=value;
end;
//funkcje czytajace koniec
procedure TForm1.Button1Click(Sender: TObject);
begin
say(edit1.Text);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Listbox1.Items.SaveToFile(ExtractFilePath(ParamStr(0))+'Scripts\'+Edit3.Text);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Listbox1.Items.LoadFromFile('Scripts\'+Edit3.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
LoadPacketFromFile('Scripts\'+edit3.text, LPacket);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
leczmane;
end;
end.
Próbowałem zrobić to co pisałeś wcześniej w tym moim głównym programie, a tutaj po prostu wstawiłem kod jak to wygląda mniej wiecej.