PDA

Просмотр полной версии : Можно пара вишней?


klemberg
04.09.2009, 15:18
Актуально для 3.5.15.126

1. При подключении клиента ПХ начинает сразу перехватывать и отображать в окне лога пробегающие пакеты.
Непонятен смысл сего действа - с текущими пакетами работаем по-моему реже, чем со скриптами...

2. Обилие дополнительных окон (посылка пакетов, преобразоваия, скрипты). ИМХО, в ветке 3.4. была более удобная реализация с вкладками.
В окнах реально путаюсь :(

Воть.
Заранее спасибо за внимание.

Underwhy
04.09.2009, 15:25
Непонятен смысл сего действа - с текущими пакетами работаем по-моему реже, чем со скриптами...
Не ври, я вообще скрипты не юзаю х_х

2. Обилие дополнительных окон (посылка пакетов, преобразоваия, скрипты). ИМХО, в ветке 3.4. была более удобная реализация с вкладками.
В окнах реально путаюсь
Килмиплс? в 3.4.15.126 очень хорошее "Обилие дополнительных окон", всё сделано так как нужно, ничего лишнего. Если тебе не нравится, юзай прошлые версии. Всё тоже самое, решает тока inject.dll - зайдёт или нет.

alexteam
04.09.2009, 15:59
klemberg,
никто не мешает использовать 83 и ниже, либо переделать под себя (сурсы на свн)
модульность к примеру мне удобна как пользователю, и как разработчику (гораздо сложнее ориентироваться в одномодульном приложении с одним окошком с 10к строками кода в юните и кучей интерфейсных элементов на дфме)

и вообще, дабы не путаться в окнах - реализовано сворачивание онных ОТДЕЛЬНО друг от друга, запоминание их позиций и горячие клавиши для их скрытия\показа.

Добавлено через 5 минут
/me представило фотошоп в концепции "все на виду"

klemberg
04.09.2009, 19:35
м.б. я не прав - действительно больше похоже на мое индивидуальное "хочу".

До последнего момента использовал и продолжаю использовать версию 3.4.1.83, но есть один момент, из за которого скачал 3.5.15.126:

в 83 скрипт (вырезан кусок):

const
CHAR_NAME='enchanter';

var
OFFSET: integer;

procedure Init; //Âûçûâàåòñÿ ïðè âêëþ÷åíèè ñêðèïòà
begin
NoFreeOnClientDisconnect;
end;


//================================================== ============================
// Îñíîâíàÿ ÷àñòü ñêðèïòà
//================================================== ============================
begin
// íå îáðàáàòûâàåì ïóñòûå ïàêåòû
if pck='' then exit;

// åñëè ïàêåò äëÿ ÷àðà CHAR_NAME
if (ConnectName=CHAR_NAME) then begin

// åñëè ïàêåò îò ñåðâåðà
if (FromServer) then begin

// Tèï: 0x4A (Say2)
if (pck[1]=#$4A) then begin

// ÏÌ
if (ReadD(6) = 2) then begin

buf:=#$1B;
WriteD(12);
SendToServerEx(CHAR_NAME);
end;
end;
end;


// åñëè ïàêåò îò êëèåíòà
if (FromClient) then begin

if (pck[1]=#$6F) then begin
pck:='';

buf:=#$7E;
SendToClientEx(CHAR_NAME);
end;
end;
end;

end.

вызывает множественные ошибки "... 10038: Сделана попытка выполнить операцию на объекте, не являющемся сокетом..."
(ошибку переписал по памяти, т.к. сейчас нет возможности скопипастить)

рано или поздно (от 1 часа до 10+ часов) ПХ зависает.
ошибку понять/побороть собственной головой не смог, а 126 этой мелкой неприятности лишен.

припрусь домой, попробую заменить инжекты.

ЗЫ: Всё тоже самоередактор FS в 126 рулит.

alexteam
04.09.2009, 19:52
это не редактор, и тем более не фс.
это SendToClientEx/SendToServerEx в связке с сокетным движком такое выдают потому что писавший скрипт не учел что SendToClientEx/SendToServerEx вызывать при отваливании от сервера/клиента нельзя ибо это приведет к попытке выполнить send() и, как следствие - данной ошибке.

в 100+ этот момент предусмотрен. еще в сокетном движке.
учти это в скрипте - и юзай на здоровье 83й.

TAMBIK
04.09.2009, 19:58
SendToClientEx(CHAR_NAME);

из учебника
3. Правила именования
3.1. Выбор имён
2. Допустимыми языками для именования являются русский и английский. Русские имена пишутся транслитом. Допустимо использовать одни имена на английском, другие — на русском языке, но запрещено смешивать русский и английский в одном имени. То есть допустимо как имя ChildWindow, так и имя DocherneeOkno, но имя ChildOkno недопустимо.

klemberg
04.09.2009, 19:59
это не редактор, и тем более не фс.я имел ввиду, что в 126 не все то же самое, что и в 83.
в 126 более удобный и навороченный редактор скриптов.

не учел что SendToClientEx/SendToServerEx вызывать при отваливании от сервера/клиента нельзя
учти это в скрипте - и юзай на здоровье 83й.
т.е. возможно использование только SendToClient/SendToServer?
а как же... :(

/me подвисает в конце недели. поехал домой, дома попробую дабы не грузить вас.

alexteam
04.09.2009, 19:59
к стати. и вылазит это явно не в этом куске кода.

klemberg
04.09.2009, 20:02
из учебникаиз учебника по практически любому языку: Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Напомню, что буквой считается также символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.

естессно, нельзя использовать зарезервированные слова.

alexteam
04.09.2009, 20:02
SendToClient/SendToClientEx нельзя если соответствующий клиент дисконнектнут от пх.
SendToServer/SendToServerEx нельзя если пх отключен от сервера игры.
если кончено тела этих функций не предусматривают предварительную проверку на "был ли дисконектнут соответствующий сокет ранее".

klemberg
04.09.2009, 20:03
к стати. и вылазит это явно не в этом куске кода.другие скрипты не запущены.
два окна: одно на ПХ и на этом скрипте; второе мимо ПХ чтобы наблюдать за первым и кидать ПМ.

alexteam
04.09.2009, 20:04
TAMBIK, к чему ты это ? Character_name ~~ Char_name

klemberg
04.09.2009, 20:04
SendToClient/SendToClientEx нельзя если соответствующий клиент дисконнектнут от пх.
SendToServer/SendToServerEx нельзя если пх отключен от сервера игры.логично. спасибо. отпишусь.

alexteam
04.09.2009, 20:08
я про то что


if (FromServer) then
if (pck[1]=#$4A) then
if (ReadD(6) = 2) then
begin
//тут вылетать не может, ибо мы только что получили пакет от сервера, т.е. сокет еще существует.
buf:=#$1B;
WriteD(12);
SendToServerEx(CHAR_NAME);
end;

if (FromClient) then
if (pck[1]=#$6F) then
begin
//аналогично предыдущему но наоборот.
pck:='';
buf:=#$7E;
SendToClientEx(CHAR_NAME);
end;

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

klemberg
04.09.2009, 21:41
Приперся домой. Сижу-тестю. Вот скрипт от начала и до конца:
const
CHAR_NAME = 'Bzdoo';

//================================================== ============================
// Îñíîâíàÿ ÷àñòü ñêðèïòà
//================================================== ============================
begin
// íå îáðàáàòûâàåì ïóñòûå ïàêåòû
if pck='' then exit;


// åñëè ïàêåò îò ñåðâåðà
if (ConnectName=CHAR_NAME) then begin

// åñëè ïàêåò äëÿ ÷àðà CHAR_NAME
if (FromClient) then begin
if (pck[1]=#$6F) then begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;

buf:=#$7E;
SendToClientEx(CHAR_NAME);
end;
end;
end;
end.

Вот лог ПХ в ответ на скрипт:

04.09.2009 19:40:53 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:53 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:53 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:53 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:53 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом
04.09.2009 19:40:54 На сокете: 276 ошибка: 10038 Сделана попытка выполнить операцию на объекте, не являющемся сокетом


вот скрин ПХ (другие скрипты не запущены):

http://s39.radikal.ru/i083/0909/c5/f5157edba338t.jpg (http://radikal.ru/F/s39.radikal.ru/i083/0909/c5/f5157edba338.gif.html)

Underwhy
04.09.2009, 21:41
задам вопрос ))..

Вопрос не по теме:
о-о обьясните мне смысл названия темы "Можно пара вишней?"

klemberg
04.09.2009, 21:54
"Можно пара вишней?"Можно пару пожеланий. (англ. "wishes", пожелания)

по первому пункту: не начинать сразу отлавливать пакеты.
по второму: вкладки.

Underwhy
04.09.2009, 22:01
Можно пару пожеланий. (англ. "wishes", пожелания)
Уайшес? о.о Как это связано с Вишнями?
Ладно, не буду флудить чтобы не схватить бан >_<

По теме:
Какую функцию выполняет скрипт?

klemberg
04.09.2009, 22:06
семпл? уверенно демонстрирует ошибку.

непосредственно скрипт в нескольких варианциях: трейдер, крафтер, ТХ на саммоне ключей, СВС/БД......................

Underwhy
04.09.2009, 22:10
семпл? уверенно демонстрирует ошибку.
Уайшес / Вайшес. Но уж не как не Виснес xD

непосредственно скрипт в нескольких варианциях: трейдер, крафтер, ТХ на саммоне ключей, СВС/БД......................
х_х почему бы просто не заюзать l2 walker?

klemberg
04.09.2009, 22:12
почему бы просто не юзать клиент, сидя перед монитором?

Underwhy
04.09.2009, 22:13
почему бы просто не юзать клиент, сидя перед монитором?
+100500, Терпение и труд все перетрут!
[Волкер действительно неплохой выход >_>.. как мне кажется.]

alexteam
04.09.2009, 22:42
если я правильно понял задумку скрипта - то.. по идее вот так.

const
CHAR_NAME = 'Bzdoo';
var
logoutok : boolean;

procedure init;
begin
logoutok := false;
end;

begin
if pck='' then exit;
if (ConnectName=CHAR_NAME) then begin

if (FromClient) then begin
if (pck[1]=#$6F) then
begin
//Не забыл ли ты обнулить пакет ?
//pck := 0 или реквайст должен пройти на сервер ?
NoFreeOnClientDisconnect; //разрешить отключение клиента онли. при отключении сервера тунель будет разрушаться, что и должно происходить.
logoutok := true; //флаг
buf:=#$7E; //шлем логауток на клиент
SendToClientEx(CHAR_NAME);
end;
end;
end;

if (ConnectName=CHAR_NAME) and FromServer and logoutok then pck := ''; //!!!! не пропускать пакеты на клиент через ПХ!! если он уже отключен.


end.

Добавлено через 1 минуту
в любом случае, попробуй привыкнуть к 100+. :P

klemberg
04.09.2009, 22:48
alexteam, большое спасибо.
Тему можно закрыть ибо не актуальна, а лучше удалить ибо автор лапух и ему стыдно.


ЗЫ: 38 билд рулит :)

alexteam
04.09.2009, 22:55
эм... а в чем причина то ?.. в обнулении pck ?

зы. 38 где ты его отрыл.. 0_о

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

klemberg
04.09.2009, 23:52
эм... а в чем причина то ?
if (ConnectName=CHAR_NAME) and FromServer and logoutok then pck := ''; //!!!! не пропускать пакеты на клиент через ПХ!! если он уже отключен.
зы. 38 где ты его отрыл.. 0_о
блин, 83-й :)
3.4.1.83

klemberg
22.12.2009, 01:59
Ух ты! Это ж моя тема! :)

Ребят, если обнуляете пакет, то после команды
pck := '';пишите exit; - это вам съэкономит немного времени и нервов при отладке (постояно на этом попадаюсь)

alexteam
22.12.2009, 12:30
нахуйа ?...
юзать кейс не проще ? не ?

xkor
22.12.2009, 13:36
alexteam, тсс!, не пали секретное оружие)
ЗЫ а вообще case эт конечно хорошо и здорово, но вот только условие не всегда одно и целочисленное)