действительно те длл которые я пытался запустить в пакетхаке прекрасно работают в WP PPC
а я так с ними мучился... :(
но меня все же удивляет и поражает что виндузовые библиотеки User32.dll и GDI32.dll все же пашут в пакет хаке :shock: :shock:
значит если как то все же изловчиться можно подобную библиотеку под пакетхак написать
жалко что исходники этих библиотек недостанеш нигде :(
может у кого то все же есть какие то дллки с исходным кодом которые в пакет хаке пашут?
Пакетхак написан очень не грамотно, в нем есть ошибки, для исправления которых придется переписывать 70% пакетхака. И эти ошибки критичны, поэтому постоянно вылетают ошибки приложения.
Неправильный вызов ф-ций DLL это только цветочки, например класс TTimer всегда используется не корректно, так как он использует очередь сообщений главного окна, а в пакетхаке вообще нету правильной синхронизации основного потока и его очередей с потоками скриптов в случае использования Visual Component Library. Подобных ляпов в программе много, исправлять нет смысла, только если полность писать новый продукт.
кпк, дело в том товарищ, что это не всем дано, можно и свою операционку написать, а вот делом мочь никто че-то не желает. Расскажи хотя б с чего начать писать, как расшифровать траффик и т.д.
Умные советы и я давать могу. :)
кпк, ты их смотрел? Если нет, посмотри, я смотрел, и понял, что мне потребуется много времени чтоб во всем разобраться. Даже первая функция это создание критической секции, ты хоть знаешь че это такое? Она используется для синхронизации потоков, код написанный в критической секции может выполнятся тока одним потоком одновременно, пока какой-то поток не освободит другой этот код использовать не может, поток будет временно приостановлен. Если для тебя это все так легко, то флаг те в руки как говорится. Я лично не берусь писать свою прогу парсинга и расшифровки пакетов. Думаю если попросить дружно xkor обновить свою программу и указать основные направления улучшения, то дело сдвинется с мёртвой точки.
SWS я по своему решил проблему создания немодального окна :D
может это конечно не самый лучший вариант но как говорится - "чем богаты..."
я сделал дллку которая генерирует ини файлик (в делфи на удивление просто с ини файлами обращатся)
а затем я просто написал прогу которая читает этот файл и таким образом я связал экзешник с длл
в общем отпала необходимость создавать форму прямо из длл (хотя хотелось бы)
длл
Код:
library dllll;
uses
SysUtils, IniFiles;
var
MobsX, MobsY, MobsZ, MobsRAS, MobsID: array[1..30] of integer;
MaxID, MyXpos, MyYpos, MyZpos, MyID: integer;
on1: Boolean;
//-------------------------------------------------
function GetMaxX: integer;
var
i, MaxX: Integer;
begin
MaxX:=0;
MaxID:=0;
for i:= 1 to 30 do
begin
if (MobsRAS[i]>=MaxX) then
begin
MaxX:=MobsRAS[i];
MaxID:=i;
end;
end;
result:=MaxX;
end;
//-------------------------------------------------
function Summ: integer;
var
i, Summa: Integer;
begin
Summa:=0;
for i:= 1 to 30 do
begin
if (MobsID[i]>1) then
begin
Summa:=Summa+1;
end;
end;
Summa:=Summa+2;
result:=Summa;
end;
//-------------------------------------------------
function rastoyanie(xpos1, ypos1, xpos2, ypos2:integer): integer;
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//-------------------------------------------------
function FuncTst1(s, i, j: string): integer;
var
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
sIniFile.WriteString(s, i, j);
sIniFile.Free;
result:=1;
end;
//-------------------------------------------------
function FuncTst2(s : string): integer;
var
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
sIniFile.EraseSection(s);
sIniFile.Free;
result:=1;
end;
//-------------------------------------------------
function DelElArr(ele:integer): integer; //??????? ????!
begin
MobsID[ele]:=0;
MobsRAS[ele]:=0;
MobsX[ele]:=0;
MobsY[ele]:=0;
MobsZ[ele]:=0;
//Attacker[ele]:=false;
result:=1;
end;
//-------------------------------------------------
function AddBD(id, posx, posy, posz:integer): integer; stdcall;
var
k: Integer;
povtor: Boolean;
begin
if (on1=true) then begin
if (Summ>=25) or (GetMaxX>2500) then DelElArr(MaxID);
povtor:=false;
for k:= 1 to 30 do
begin
if (MobsID[k]=id) and (MobsX[k]=posx) and (MobsY[k]=posy) then
begin
povtor:=true;
break;
end;
if (MobsID[k]=id) then
begin
MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
MobsX[k]:=posx;
MobsY[k]:=posy;
MobsZ[k]:=posz;
povtor:=true;
break;
end;
end;
if (povtor=false) then begin
for k:= 1 to Length(MobsID) do begin
if (MobsID[k]=0) then begin
MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
MobsID[k]:=id;
MobsX[k]:=posx;
MobsY[k]:=posy;
MobsZ[k]:=posz;
break;
end;
end;
end;
// FuncTst2('bd');
for k:= 1 to 30 do begin
if (MobsID[k]<>0) then FuncTst1('bd', IntToStr(k), IntToStr(k)+'-'+IntToStr(MobsRAS[k])+'-'+IntToStr(MobsID[k])+'-x'+IntToStr(MobsX[k])+'-y'+IntToStr(MobsY[k])+'-z'+IntToStr(MobsZ[k]));
if (MobsID[k]=0) then FuncTst1('bd', IntToStr(k), '-');
end;
end;
result:=1;
end;
//-------------------------------------------------
function funcON(id, posx, posy, posz:integer): integer; stdcall;
begin
if (on1<>true) then begin
MyID:=id;
MyXpos:=posx;
MyYpos:=posy;
MyZpos:=posz;
on1:=true;
end;
result:=2;
end;
//-------------------------------------------------
exports AddBD, funcON;
begin
end.
экзешник читающий ини
Код:
unit rUnit1;
interface
uses
IniFiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
ListBox1.clear;
for i:= 1 to 20 do begin
if ('-1'<>sIniFile.ReadString('bd', inttostr(i), inttostr(-1))) then
ListBox1.Items.Add( sIniFile.ReadString('bd', inttostr(i), inttostr(-1) ));
end;
//ListBox1.Items.Add( sIniFile.ReadString('bd', '1', inttostr(-1) ));
sIniFile.Free;
end;
end.
и ещё ты написал как форму создавать а как просто переменную передать из длл в пакетхак можеш скинуть код ??
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...