куски с моего. не совсем торгового.. то что предназначено для паблика. на данный момент для цт2.3
скрипт работы с протоколом гс, первые пакеты:
delphi Код:
procedure CallProtocolVersion(Protocolversion:Integer);
begin
buf := '';
WriteMask('bd',[$0E, Protocolversion]);
buf := buf +
HStr('0907545603090B01070254545607000255560051005357040755085401070153005655560106050451030851085156045406550802095156015306550453005656'+
'5301090209015154510955560903040705550406550406090451010808060552060401075403065255065555510102045403555401575155055205540751515507'+
'0253530052055207015400030505080605050603000D08010709035103075309510607540A50560252040555510253000854045256060209000803535601050055'+
'060856040D0607520607040A0601045404000502045400095253050401040505015251520D065108095453000D01020354530105030856540702540B06115D1F60');
SendBuf;
end;
Procedure CallAuthLogin(LoginName:string; SessionKey1_1, SessionKey1_2, SessionKey2_1, SessionKey2_2: Integer);
begin
buf := '';
WriteMask('bsdddd', [$2b, LoginName, SessionKey2_2, SessionKey2_1, SessionKey1_1, SessionKey1_2]);
buf := buf + HStr('010000002A02000000000000');
SendBuf;
end;
кусок кода не совсем из паблика подключающий дллку
delphi Код:
function TUserEngine.LoadLsLib(unload: boolean): boolean;
begin
result := false;
if HLsWorkOut <> 0 then
begin
if assigned(LsWorkout) then
begin
LsWorkout.Destroy;
LsWorkout := nil;
end;
FreeLibrary(HLsWorkOut);
HLsWorkOut := 0;
LsWorkoutCreate := nil;
end;
if (TLsClass(UserClass.CurrentLS).LSlibraryPath = '') or unload then exit;
if FileExists(TLsClass(UserClass.CurrentLS).LslibraryPath) then
HLsWorkOut := LoadLibrary(PChar(TLsClass(UserClass.CurrentLS).LslibraryPath))
else
HLsWorkOut := LoadLibrary(PChar(apppath+'\DATA\WorkOuts\LS\'+TLsClass(UserClass.CurrentLS).LslibraryPath));
if HLsWorkOut > 0 then
begin
try
@LsWorkoutCreate := GetProcAddress(HLsWorkOut,'LSWorkoutCreate');
result := true;
except
end;
if (@LsWorkoutCreate = nil) or not result then
begin
AddLogMain(format(rs_lib_hasNoExport, [TLsClass(UserClass.CurrentLS).LSlibraryPath, 'LSWorkoutCreate']),2)
end
else
begin
AddLogMain(format(rs_lib_load_ok, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),0);
try
LsWorkoutCreate(@LSworkout);
if @LSworkout = nil then else Result := true;
except
result := false;
end;
if not result then AddLogMain(format(rs_lib_object_create_fail, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),2);
end;
end
else
begin
Result := false;
AddLogMain(format(rs_lib_loadfail, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),2);
end;
end;
модуль работы с ЛС в полном виде в аттаче. представляет собой дллку с классом похожим на компоненту (код "сперт" с l2clientemu). uLSAuthSharedData.pas подключаеться и к длл и к приложению ее подгружающую и содержит нужные структуры с коментариями позволяющими понять порядок вызова методов и что означает тот либо иной проперти.