Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 02.05.2009, 23:22   #1
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

alexteam, ага, не прокатит значит), хотя ошибок по идее тоже не вызовет...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 02.05.2009, 23:26   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

ну, вызывать то оно и не должно. переменная явно не в защищенной памяти так как считаеться во время вызова. но и толку от такого изменения тоже нет. результат не запишеться магическим образом обратно.. а уничтожиться оптимизатором по прыжку в стеке на уровень вверх.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 03.05.2009, 05:08   #3
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

В предыдущих версиях быда опция: "Пропускать логин - программа начинает работать после соединения с Game-Сервером". Кто подскажет для чего это? Из кода ниже тоже непонятно что оно делает .

delphi Код:
//пропускать логин?     //если (пропускать логин и мы не в игре)     if isPassLogin and (not IsGamel) then     begin       //отсылаем данные, сначала длину, а потом сам пакет       send(CSockl,PacketB, 2, 0);       repeat       until send(CSockl, PacketB, recv(SSockl, PacketB, $FFFF, 0), 0)<=0;     end     else     begin//иначе (пропускать логин и мы в игре)       //прием пакетов       repeat         if not GetSocketData(SSockl, Packet.DataB, Packet.Size-2) then break;         if IsGamel            then PacketProcesor(PacketB, CSockl, id, 4)            else PacketProcesor(PacketB, CSockl, id, 2);         if not GetSocketData(SSockl, Packet, 2) then break;         //sendMSG('size: '+IntToStr(Packet.Size));       until False;     end;

Такое ощушение что изначально должна была быть возможность залогиниваться с помошью PH, но это так и не было реализовано.

Добавлено через 1 час 28 минут
И ещё просветите зачем функция:
delphi Код:
function GetSocketData(Socket: TSocket; var Data; const Size: Word): Boolean; var   Position: Word;   Len: Integer;   DataB: array[0..$5000] of Byte absolute Data; begin   Result:=False;   Position:=0;   while Position<Size do begin     Len:=recv(Socket,DataB[Position],1,0);     if Len<=0 then Exit;     Inc(Position, Len);   end;   Result:=True; end;

Я как понял она с помошью "recv" считывает нужное количество байт с сокета по 1 байту. Почему так сделали? Что случится если попытаться сразу считать необходимое кол-во байт одним махом.

зы: прошу прощения за обилие вопросов, приспичило разобраться с программой.

Последний раз редактировалось Yegor, 03.05.2009 в 05:10. Причина: Добавлено сообщение
Yegor вне форума   Ответить с цитированием
Старый 03.05.2009, 11:34   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Yegor, хм, кстати да, надо бы заменить
Len:=recv(Socket,DataB[Position],1,0);
на
Len:=recv(Socket,DataB[Position],Size-Position,0);
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 03.05.2009, 12:38   #5
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

А если так?

Len:=recv(Socket,DataB[0],Size,0);

Хотя зачем то же было сделано по 1 байту. Я так понял эта функция пытаеться считать не больше size байт с сокета но если данных будет меньше то цикл завершиться раньше:

if Len<=0 then Exit;

Последний раз редактировалось Yegor, 03.05.2009 в 12:46.
Yegor вне форума   Ответить с цитированием
Старый 03.05.2009, 12:40   #6
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

лучше уж читать _все_ во временный буфер и потом разбирать на запчасти уже его.
в общем после 83й так и сделано..
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 03.05.2009, 12:49   #7
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Все что считывает эта функция за 1 вызов можно считать одним пакетом или необходимо как то вручную их разделать?
Киньте пожайлуста ссылкой на тему где описана структура пакетов Л2.
Yegor вне форума   Ответить с цитированием
Старый 03.05.2009, 13:10   #8
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

[Size = длина пакета 2 байта][Data = данные пакета длинной size-2]
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 04.05.2009, 00:05   #9
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Все с логикой передачи приема пакетов разобрался. Пробовал считывать с сокета ровно столько сколько на него перешло и передавать сразу на 2ой сокет - не работает. Действительно приходиться читать сначала первые 2 байта (длину пакета) и считывать именно это количество байт.

Попутно вопрос. Почему на некоторых серверах (ГГ там нет), если внедрить inject - то даже после ввода логина и пароля клиент зависает, хотя ПХ пищет что этот коннект проигнорирован? Такое ощущение что клиент уже шлет в никуда и не получает ответ.
Yegor вне форума   Ответить с цитированием
Старый 04.05.2009, 00:48   #10
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

нужно смотреть индивидуально. теории строить не особо хочется.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:09.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!