PDA

Просмотр полной версии : Кружок нубов(Вопрос-Ответ)


Страницы : 1 [2] 3 4 5 6 7 8 9

Glollin
10.01.2009, 13:06
я сделал такой скрипт :) сейчас увидел эту тему :) вот только пару раз покупаю 95 Д шмоток, бю их на кристы всё, опять покупаю, бю... и гдето после 3-7 раза такого повторения отваливаеться коиент :(

ratvier
10.01.2009, 16:21
Скрипт на кристаллизацию есть на форуме, фпоезг

NLObP
11.01.2009, 02:08
и гдето после 3-7 раза такого повторения отваливаеться коиент
Скорее всего это ответ:
Просто он не хочет всё усложнять различными проверками

cepreu
11.01.2009, 22:26
итак начну по -порядку:(сорь если тупые вопросы, потому что в языках не шарю, но нужен хелп)
1)сделать цикл скрипта бесконечным
2) как сделать, чтобы после выхода клиента главным был L2phx
то есть понимаю, что надо послать самому себе пакет на логофф и включить функцию , а как скрипт написать незнаю =(
напишите пример плз,что бы понять как правильно внедрить эту функцию
ув.Xkor упоминал про нее, но не написал формы, как сделать
3) как выглядет скрипт для того, чтобы при приходе пакета начинающегося на, допустим b0, начинал работать скрипт, который мог выделить интересующие меня цифры, для дальнейшей работы с ними
xx xx xx xx xx xx xx xx xx.... допустим эти. плз скажите, как , я думаю это не трудно просто не могу въехать, сорри мне просто лучше на примерах =*(
пока всё, заране спс

QaK
12.01.2009, 06:21
cepreu, кури топ "Да будет бот" - там туева хонна примеров.

PanAm
12.01.2009, 15:09
cepreu,
1. Бесконечные циклы в скриптах не айс. скрипт выполняется на каждый приход/уход пакета - тут нечего зацикливать.
2. Разбирайся ))) мороки много объяснять, главное - L2phx после выхода излинейки L2phx должен будет имитировать клиент, а это довольно сложно сделать.
3. полно примеров, типа
var
i : integer:
begin
if FromServer and (pck[1]=#$B0) then
i := WriteD(2);
end.

QaK
12.01.2009, 15:40
1. Бесконечные циклы в скриптах не айс. скрипт выполняется на каждый приход/уход пакета - тут нечего зацикливать.смотря как реализовать

cepreu
12.01.2009, 19:16
cepreu,

3. полно примеров, типа
var
i : integer:
begin
if FromServer and (pck[1]=#$B0) then
i := WriteD(2);
end.
это осилил ;)
1. Бесконечные циклы в скриптах не айс. скрипт выполняется на каждый приход/уход пакета - тут нечего зацикливать.
просто мне нужен цикл повтора пакетов, не знаю какой даже пример привести. Например, вот писать в титуле O_o затем о_О (тупой пример, но все же)
2. Разбирайся ))) мороки много объяснять, главное - L2phx после выхода излинейки L2phx должен будет имитировать клиент, а это довольно сложно сделать.
разобрался, но не понял тебя =(
вот что пишет xkor :
Пример вызова функций из системных библиотек:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
begin
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('GDI32.dll');
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end.
а вот функции:
Доступные функции:
........
NoFreeOnClientDisconnect - запрещает закрытие соединения при дисконекте клиента (v. 3.1.9+)
NoFreeOnServerDisconnect - запрещает закрытие соединения при дисконекте сервера (v. 3.1.9+)
YesFreeOnClientDisconnect - разрешает закрытие соединения при дисконекте клиента (v. 3.1.9+)
YesFreeOnServerDisconnect - разрешает закрытие соединения при дисконекте сервера (v. 3.1.9+)
(по умолчанию закрытия разрешены)
DisconnectServer - закрывает соединение с сервером (v. 3.2.0+)
DisconnectClient - закрывает соединение с клиентом (v. 3.2.0+)
я правильно понял, так реализовать? заранее спс

Добавлено через 5 минут
сорь, еще )
if FromServer and (pck[1]=#$B0) then
а как написать, если мне надо такое условие, что если нет такого пакета выполнять некий алгоритм?
if FromServer and no (pck[1]=#$B0) then так?)

marslem
12.01.2009, 19:22
с титулом не получится,только если ставить delay большой,т.к кикает с серва при быстрой измене титула или при "бегущей строке"

cepreu
13.01.2009, 17:10
чет все повымирали( немного разобрался, вопрос очень важный!
Есть ли команда что бы из декса в хекс и на оборот.?
2)какую использовать команду, чтобы алгоритм между begin и and выполнялся единожды и больше никогда,?

Grinch
13.01.2009, 17:30
Проверял я эту формулу... не верна она... Либо есть какие-то доп. модификаторы, либо хз...

не надо путать путь и длину пути ) там в горку по ступенькам и т.д. диаганаль длинее катета как пример :) а время чисто теретически это 1,2секунды от клиента идет пакет же типа где он ща находится а сервер если есть отклонение уже коректирует.

PanAm
13.01.2009, 18:03
cepreu, Повтор пакетов лучше оформить через таймер
например
Var
Timer : TTimer;
procedure Init; //Вызывается при включении скрипта
begin
Timer :=TTimer.Create(nil);
Timer.enabled :=false; //таймер выключен
Timer.OnTimer :=@MyAction; //адрес процедуры,
//которая будет выполнятся
Timer.interval :=2000; //интервал в мс
end;

procedure Free; //Вызывается при выключении скрипта
begin
Timer.Free;
end;

procedure MyAction(Sender: TObject);
begin
buf:=hstr('бла бла бла'); // тут вписываешь пакет
SendToServerEx('а тут имя соединения');
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
......
//сочиняешь по какому условия включить таймер
Timer.enabled :=true
//и соответственно выключить
Timer.enabled :=false;
end;
end.

QaK
13.01.2009, 18:25
Есть ли команда что бы из декса в хекс и на оборот.?есть. кури сорцы ПНХ.

VORON
18.01.2009, 00:47
чет все повымирали( немного разобрался, вопрос очень важный!
Есть ли команда что бы из декса в хекс и на оборот.?
2)какую использовать команду, чтобы алгоритм между begin и and выполнялся единожды и больше никогда,?
оба вопросы как раз по теме и ответа ни них нет потомучто они заданы неверно.. ни ДЕКС ни ХЕКС формат - ДЕЛЬФИ-паскаль-ФАСТСКРИТ-ПАКЕТХАК не понимает.. нет у них таких типов данных.. есть БАЙТЫ данных.. ячейки памяти.. которые можно представить ввиде целого 4-х байтного числа, либо 2-х байтового либо сопостовлять каждому байту какойто символ из алфавита (CHAR) в масиве ето STRING.. ну если тебе из СТРИНГА ХЕКС надо сделать СТРИНГ- ДЕКС то такие функции есть но они громоздки и для программирования скриптов 99% не нужны.. нафига тебе в скрипте строка с текстом "8а"? может просто ты незнаеш как с типами данных работать и преобразовывать то ты вопрос подругому както задай что тебе нужно то..
а по второму вопросу: Бегин и ЕНД - их в скрипте куча.. и то что между ними не повторяется никогда само по себе... бегин и енд- ето всё равно что скобки () в синтаксисе языка.. например :
FOR i:=0 to 10 do
begin
//действие
end;
то что между бегин и енд будет выполнено 10 раз.. потомцчто цикл указан.. уфф ну ето основы паскаля, дельфи, фаск-скрипт, пакетхак..
кароч задавай вопрос лучше развернуто..

marslem
27.01.2009, 21:27
о,Ворон,давненько не появлялся...

something
28.01.2009, 22:39
Написал скрипт на заточку, все настроено на очень продолжительную работу,т.е идет закупка точек и смена оружия, но через некоторое время в верии lhx 75 возникает ошибка List index out of bounds (4999), а 82 почти сразу же зависает. хроники - Грация. ItemsID последний. В чем может быть проблема никто не подскажет?

NLObP
29.01.2009, 00:03
List index out of bounds (4999)

Это означает, что выходишь за границу массива. Проверь в циклах параметры.

Weik
29.01.2009, 00:52
Всем добрый день. Прошу отнестись с пониманием и не судить очень строго.
Решил я написать скрипт на кач... и самое первое с чем я столкнулся, к моему сожалению, я незнаю как прописать таргет на моба ибо как оказалось в пакетах ID моба, с одним и тем же именем, разный :confused:
В инете нигде ничего такого я ненашол, я чувствую что чегото недочитал или не понимаю... но всёже прошу помочь.

Зарание благодарен.

QaK
29.01.2009, 06:52
Weik, не путай НПЦ ИД и обджект ид, НПЦ ИД - это идентификатор типа моба, а Обджект ИД - уникальный идентификатор, для каждой вещи/моба/непися/чара в игре он свой.

something
29.01.2009, 08:25
к сожалению такая же ошибка возникает и в простейших скриптах на отсылку пакетов, без циклов и массивов

QaK
29.01.2009, 09:33
к сожалению такая же ошибка возникает и в простейших скриптах на отсылку пакетов, без циклов и массивовконкретный простейший скрипт выложи сюда, и как ты запускаешь скрипты?

something
29.01.2009, 10:30
const
Name='MyName';
var
timer:TTimer;
i,j: integer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=500;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
Say('Начали');
i:=0; j:=0;
end;
procedure Free;
begin
timer.Free;
end;
procedure Say(msg:string);
begin
buf:=#$4A;
WriteD(123);
WriteD(10);
WriteS('хмм');
WriteS(msg);
SendToClientEx(Name);
end;
procedure fireTimer(Sender: TObject);
begin
if odd(i) then
begin
buf:=hstr('пакет1');
SendToServerEx(Name);
end
else
begin
buf:=hstr('пакет2');
SendToServerEx(Name);
end;
inc(i);
inc(j);
if j = 7 then begin
buf:=hstr('пакет3');
SendToServerEx(Name);
j:=0;
end;
Say(IntToStr(i)); //для себя, узнать сколько циклов прошло
end;
begin
if i > 999 then timer.enabled:=false; //ограничение
end.

запускаю ставя галочку напротив скрипта
в скрипте на заточку таймер запускается после отправки команды сесть

QaK
29.01.2009, 11:47
поправил твой скрипт. Вопрос: пакеты 1 и 2 полжны по-очереди выполняться?

Добавлено через 1 минуту
Да, и еще, лучше бы таймер включать не в Init. Например - по социальному действию.

Weik
29.01.2009, 13:23
Weik, не путай НПЦ ИД и обджект ид, НПЦ ИД - это идентификатор типа моба, а Обджект ИД - уникальный идентификатор, для каждой вещи/моба/непися/чара в игре он свой.

Значит я отнёсся к скриптам слишком легкомыслено:)
Осмелюсь канешно спросить каким образом тогда можно прописать в скрипт отаку мобов? (если можно то маленький примерчик)
Если отвлекаю такой мелочью то извените, но хочю научится)

something
29.01.2009, 13:30
поправил твой скрипт. Вопрос: пакеты 1 и 2 полжны по-очереди выполняться?


В других скриптах так и сделал - по соц действиям.
Ошибка связана потому что не тегами выполнены команды?

Пакеты не в обязательном порядке очереди, у меня они сразу оба отправлялись, вместе

Byrger
01.02.2009, 11:54
Как написать правильно условие?

Если переменная m3 НЕ равна строке "kakaxa" то выполнять функцию Time()
Если равна то дальше гонять скрипт..

NLObP
01.02.2009, 12:10
Как написать правильно условие?

Если переменная m3 НЕ равна строке "kakaxa" то выполнять функцию Time()
Если равна то дальше гонять скрипт..

if m3<>'kakaxa' then Time();

LunaticCalm
01.02.2009, 21:23
Подскажите , пожалуйста, решение проблемы :
1. как сделать привязку посылки определенного пакета к номеру соединения (шифрование неизвестно)?
2. как сделать что бы шла поочередная посылка разных пакетов по каждому перехваченному соеднинению с определенным интервалом?
сори , нашел решение

NLObP
01.02.2009, 22:08
Подскажите , пожалуйста, решение проблемы :
1. как сделать привязку посылки определенного пакета к номеру соединения (шифрование неизвестно)?

IMHO, если имя соединения в списке соединений неправильно определяется, то уже не помочь ни чем. Надо разбираться с правильной шифровкой/дешифровкой трафика.

А так есть команды
ConnectNameByID(id:integer):string - возвращает имя соединения по его ID (v. 3.2.0+)
ConnectIDByName(name:string):integer - возвращает ID соединения по его имени (v. 3.2.0+)
SetName(Name:string) - устанавливает имя соединения (v. 3.2.0+)

eiko
08.02.2009, 23:10
Подскажите пожалуйста, можно ли как-то "ускорить" скрипт автозаточки? (в частности для Грации)
т.е., например, отправлять пакет с заточкой можно очень быстро, но смысла в этом особого нету (т.к. остановить в нужный момент никак...), а в скрипте 1 заточка занимает ~1сек... (хотя и этим в общем-то доволен, но хочется просто попробовать и понаблюдать за эффектом... ^_^)
Честно попробовал поковыряться сам - увы, ничего не вышло...

NLObP
09.02.2009, 01:15
Подскажите пожалуйста, можно ли как-то "ускорить" скрипт автозаточки? (в частности для Грации)

Найди в скрипте строку
timer.interval:=500; //время задержки

и замени 500 на нужное тебе время в мс, например 3 сек = 3000 мс.

eiko
09.02.2009, 10:16
NLObP, чёрт... ведь находил я эту строчку и химичил с ней... но похоже всегда вместе с этим на строку выше менял параметр timer.enabled... ^_^
Спасибо за помощь!

5162
19.02.2009, 22:08
Ребят подскажите - можно накатать скрипт типа:
-покупка(определенного Item'a)
-разбиение итема на кри
-продажа кри
-обмен аден на монеты
всё в точно такой же последовательности.
Если не сложно-не затруднить сделайте пожалуйста.
Если достаточно сложно - укажите цену в ПМ.
Заранее всем кто обратил внимание спасибо.

Grinch
19.02.2009, 22:33
5162, то что ты описал клиент может делать? если да то и скрипт может.

Если не сложно-не затруднить сделайте пожалуйста. это не сложно, но не кому не надо кому надо уже написал подобную модификацию. но по понятным причинам не выложит.

Если достаточно сложно - укажите цену в ПМ. я даже не взялся бы. больше времени чем средст и нет изюменки, типа нагнуть всех, так обычный скрипт который просто потребует проработки тонкостей как все ограничители условия инвентарь, нпц, ну и движение

Swist
25.02.2009, 22:41
скажите пожалуйста,я использую скрипт на автоматизированную точку(все ломается) а вот знакомый юзает такой же скрипт и каким то образом он точит за 2мин 1 пушку на макс лвл заточки,может есть какая то хитрость точки ?!?!

Добавлено через 13 минут
скажите пожалуйста,я использую скрипт на автоматизированную точку(все ломается) а вот знакомый юзает такой же скрипт и каким то образом он точит за 2мин 1 пушку на макс лвл заточки,может есть какая то хитрость точки ?!?!
точу л2пнх скрипт бай Нлобп

QaK
26.02.2009, 06:30
может есть какая то хитрость точки ?!?! нету, к сожалению тебе не везет ...

Swist
26.02.2009, 22:17
УВАЖАЕМЫЙ QaK,дело в том что на моем серве шанс заточки с 3 на 4 35% а дальше по 10% и в конце с 7 на 8 5%,так вот я своими глазами наблюдал как знакомый точит на +14 за 2мин у мну же все ломается,он сказал что етому он учился пол года и обяснять мне не будет.п.с. он точил так не одну пхух

QaK
27.02.2009, 08:34
Swist, есть много способов точки, например (как я точил на пвп): берешь пух 10-20, точишь их на +3, потом точишь поочереди на +4, смотришь сколько сломалось, дальше докупаешь пухи, точишь все на +3 далее все на +4, если подряд неудач 5 или больше - след точкой точишь ту пуху, которая удже +4, и т.д.
Есть другой способ: через отмену точек, т.е. активируешь точку, отменяешь, и смотришь, с какого количества отмен точится лучше. Воть. Способов много, позырь в тырнете, если, конечно, твой друг точит не багом =) , хотя баги тож можно найти, старые ...

Swist
02.03.2009, 00:51
Ув Квак,недавно он заявил что купил скрипт за 100уе,на сайте читеров.Бггг:D:D:D:D не наю кому верить=(((

QaK
02.03.2009, 06:25
Swist, тогда 2 варианта: или одна из черепашек п**дит, или вас на серваке имеет место баг =)

Grinch
02.03.2009, 07:21
Swist, кривой у тя сервер начиная с С4-Ила шанс точки пушки от +4 до +15 70% это файт маг 45% на шмот там по экспоненте вниз, причем резко вниз. так что твой друг или много переломал или ты с шансом чета напутал, на шоке 1 чел драконик на +13 1 штуку заточил подряд и дальше не рискнул. а я на +6 все ломал или раньше так что не прёт.

Swist
02.03.2009, 15:24
Swist, тогда 2 варианта: или одна из черепашек п**дит, или вас на серваке имеет место баг =)
Хм,пистеть он не может,а вот тогда если баг то как его пробить!??!?!?!

QaK
02.03.2009, 17:03
вот тогда если баг то как его пробить!??!?!?!хз копай старые темки про баги, тут, на форуме, вроде была темка, или потерли, называлась "паектные баги или когда-то это работало".

Sacred
02.03.2009, 17:54
Доброго времени суток :)

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

Exception class: EConvertError
Exception message: 'range error' is not a valid integer value.
Exception address: 0040D88A
------------------------------------------------------------------------------
Stack list, generated 02.03.2009 18:31:07
(0000C885){l2pbx.exe } [0040D885] SysUtils.ConvertErrorFmt (Line 3246, "sys\sysutils.pas" + 1) + $10
(0000D49C){l2pbx.exe } [0040E49C] SysUtils.StrToInt (Line 5017, "sys\sysutils.pas" + 2) + $1A
(00168D2B){l2pbx.exe } [00569D2B] main.TL2PacketHackMain.RadioButton1Click (Line 2017, "main.pas" + 108) + $12
(00168367){l2pbx.exe } [00569367] main.TL2PacketHackMain.Memo4MouseUp (Line 1894, "main.pas" + 1) + $0
(0006ECB7){l2pbx.exe } [0046FCB7] Controls.TControl.MouseUp (Line 5349, "Controls.pas" + 1) + $23
(0006ECF0){l2pbx.exe } [0046FCF0] Controls.TControl.DoMouseUp (Line 5355, "Controls.pas" + 2) + $1D
(0006ED72){l2pbx.exe } [0046FD72] Controls.TControl.WMLButtonUp (Line 5367, "Controls.pas" + 8) + $6
(0006E3E7){l2pbx.exe } [0046F3E7] Controls.TControl.WndProc (Line 5146, "Controls.pas" + 83) + $6
(00072071){l2pbx.exe } [00473071] Controls.TWinControl.WndProc (Line 7217, "Controls.pas" + 24) + $6
(00071E43){l2pbx.exe } [00472E43] Controls.TWinControl.IsControlMouseMsg (Line 7168, "Controls.pas" + 1) + $9
(0003A330){l2pbx.exe } [0043B330] Graphics.FreeMemoryContexts (Line 5060, "Graphics.pas" + 12) + $5
(00071B08){l2pbx.exe } [00472B08] Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
(000723DF){l2pbx.exe } [004733DF] Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
(0012807A){l2pbx.exe } [0052907A] JvExStdCtrls.TJvExCustomMemo.WndProc + $59E
(00071B08){l2pbx.exe } [00472B08] Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
(0002E91C){l2pbx.exe } [0042F91C] Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
(0002EFBE){l2pbx.exe } [0042FFBE] Contnrs.TComponentList.GetItems (Line 380, "common\Contnrs.pas" + 1) + $4
(0008DB0C){l2pbx.exe } [0048EB0C] Forms.TApplication.ProcessMessage (Line 8105, "Forms.pas" + 23) + $1
(0008DB46){l2pbx.exe } [0048EB46] Forms.TApplication.HandleMessage (Line 8124, "Forms.pas" + 1) + $4
(0008DE3B){l2pbx.exe } [0048EE3B] Forms.TApplication.Run (Line 8223, "Forms.pas" + 20) + $3
(00178BA7){l2pbx.exe } [00579BA7] l2pbx.l2pbx (Line 25, "" + 4) + $7
------------------------------------------------------------------------------
System : Windows XP Professional, Version: 5.1, Build: A28, "Service Pack 2"
ну и т.д.

Версия l2phx - 3.4.1.62
Такая фигня на любых серверах :(

Поюзов словарь я узнал что range error - в дословном переводе значит ошибка диапазона. На этом тупик =\ Подскажите в чём проблема?

NLObP
02.03.2009, 18:29
У меня вылазит ошибка после того, как я копирую и вставляю и вставляю пакет

Лучше всего, пользоваться последней версией программы (http://coderx.ru/showpost.php?p=12525&postcount=1).

Добавлено через 16 минут
Ребят подскажите - можно накатать скрипт типа:
-покупка(определенного Item'a)
-разбиение итема на кри
-продажа кри
-обмен аден на монеты
всё в точно такой же последовательности.


Попробуй вот этот скрипт для пакетхака (http://coderx.ru/showpost.php?p=21495&postcount=1) и скрипт в командах валкера:


label(start)
MSG(покупаем вещь)
BUYITEM(Тут предмет для разбивки[ID=151],1)
delay(500)
MSG(пробуем кристаллизовать)
CRISTALLIZEITEM(Тут предмет для разбивки[ID=151],1)
delay(500)
MSG(продоем вещь)
SELLITEM(Тут ID продаваемых кристаллов[ID=1458],1)
delay(500)
jmp(start)


Этот скрипт будет покупать, бить на кристаллы и продавать кристаллы пока будут деньги, т.е. вечно.

Адены на монеты поменяй руками.

PS: не проверял на работоспособность

ake1a
14.03.2009, 08:27
Доброе утро Товарищи скриптчики))))
помогите плз...использую IG 1.19.... IL платформа обычный серв ява... стоит ГМ шоп в нем есть баг на лаве...вот писал скрипт....
NPCDLG(Ralford[ID=30165])
LABEL(Продать)
DLGSEL(Продать)
ITEMCOUNT(Blessed Spiritshot: S Grade[ID=3952],>,10)
{
SELLITEM(Blessed Spiritshot: S Grade[ID=3952],5000)
JMP(sell)
}
MSG(кончилось всё)
---------------------------
1. Проблема в том что с крипт не хочет продовать в ГМ шоп а продает ток обычным трейдерам... (как сделать чтоб он ГМшопу продавал.... или дайте скриптег сам подбравлю)
2. И как продать 5000сосок допустим 8 раз.... какая команда будет правильнее?
-------------Пасибка с меня----------------
Не смейтесь если что... скрипты изучаю 2 день ))))))

ratvier
14.03.2009, 09:15
ake1a, в гм шопе наверное не ссылки, как у обычных нпц, а кнопки?

ake1a
15.03.2009, 18:43
ake1a, в гм шопе наверное не ссылки, как у обычных нпц, а кнопки?
и как тогда быть? подскаите пожл....

ratvier
15.03.2009, 20:19
и как тогда быть? подскаите пожл....
Бегать к нпц, которому можно продать

ake1a
16.03.2009, 20:27
ratvier
Цитата:
Сообщение от ake1a
и как тогда быть? подскаите пожл....

Бегать к нпц, которому можно продать
Допустим бегать к кому моно продать, тогда как купить заточки у того самого НПСа тобишь ГМшоп... если на обычных НПСов пашут скрипты и покупки и продажи.... То на ГМшоп не робят (((( Помогите ребят...что делать?

NLObP
17.03.2009, 01:41
ratvier

Допустим бегать к кому моно продать, тогда как купить заточки у того самого НПСа тобишь ГМшоп... если на обычных НПСов пашут скрипты и покупки и продажи.... То на ГМшоп не робят (((( Помогите ребят...что делать?

Как здесь (http://coderx.ru/showpost.php?p=23704&postcount=295) пишу пробовал?

ake1a
17.03.2009, 02:58
NLObP Как здесь пишу пробовал? конешн попробывал я етот форум уже раз 800 перерыл....не работает серовно.... он таргет ГМшопа выделяет....Начинает разговор... но продажу не видит и все тут скрипт тормозит =(
____________________________________
//************************************************** **************************
//обмен состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет (c04=Action, c04=Action)
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d (onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//************************************************** **************************
if ReadyToMultiSell and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getmultisell);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (multisell)');
end;
end;
//после выбора пункта - обмен, приходит этот пакет
//sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d (onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
#$D0: begin
msg.Lines.Add('S>Пакет MultiSellList #$D0');
ListID:=ReadD(2); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на обмен
//cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
msg.Lines.Add('C>Пакет RequestMultiSellChoose #$A7(ListId:'+IntToStr(ListId)+' EntryId:'+IntToStr(Trd*2+1)+' Count:'+IntToStr(ItemBase2[3,1])+')');
delay(1000);
//в java -> EntryId * k=100000
RequestMultiSellItem(ListId,Trd*2+1,ItemBase2[3,1]);
ReadyToMultiSell:=false;
end;
end;
end;
end;

...
end.
>>>>>>>>>>>>>>Чучуть тут подразобрался пакеты клинту пробывал отсылались.... на продажу ....выделение НПСа... и т д.... Ток объясните мне пожл что в етом куске и куда именно надо вписывать под мой серв...

P.S. Был полным нубом в етих делах... щас потихоньку начинаю разбираться....
P.P.S. Не смейтесь если что не так произнес ибо спросил или сказал ))))) Всему свое время =)

Sieg
17.03.2009, 17:38
Абсолютно нупский вопрос, ответ на который мне не дает спать:
возможно ли запускать на выполнение альтернативные потоки? И если можно, то как?

ake1a
17.03.2009, 23:07
Sieg
P.S. Был полным нубом в етих делах... щас потихоньку начинаю разбираться....
P.P.S. Не смейтесь если что не так произнес ибо спросил или сказал ))))) Всему свое время =)
попойму тут все ясно написано.... не разбираюсь я етом на проф уровне поетому и прошу помощи тут....
Я уже понял что бот не видит кнопки ГМшопа и не может на них нажать....
Вот дайте мне ктонит ответ как сделать скрипт который будет нажимать на ети кнопки?? или еще что нить подобного рода =(

QaK
18.03.2009, 09:12
ake1a, если что - это ветка не про бота а про ПНХ, чтобы исполнялись скрипты надо кнопки переделать в ссылки, это возможно как минимум 2мя способами: купить у хкора привязку к манагеру, манагер автоматом, вроде преобразовывает, или наваять скрипт для ПНХ, чтоб тож преобразовывал, и гонять ботов через этот скрипт.

Stasrus
19.03.2009, 13:09
Подскажите как можно изменить пакет,
например клиент посылает изменяемый пакет 2E 00 00 00 79 34 15 00 22 05 11 48
нужно допустим заменить неизменные части 79 на 99 и 22 05 11 48 на 11 11 11 11 не трогая при этом остальной изменяемой части и отправить его серверу.

Если пакет неизменный трудностей с переделкой и отправкой нет, но немогу додуматься как переделать изменяемый пакет.

Sieg
19.03.2009, 14:00
if (pck[1]=#$2E) and FromClient then
begin
pck[5]:=#$99
pck[9]=#$11
pck[10]:=#$11
pck[11]:=#$11
pck[12]:=#$11
exit;
end;

Либо так, либо я не понял вопроса...

Stasrus
19.03.2009, 14:36
Спасибо Sieg, очень помог.

NLObP
19.03.2009, 14:50
Подскажите как можно изменить пакет,
например клиент посылает изменяемый пакет 2E 00 00 00 79 34 15 00 22 05 11 48
нужно допустим заменить неизменные части 79 на 99 и 22 05 11 48 на 11 11 11 11 не трогая при этом остальной изменяемой части и отправить его серверу.

Если пакет неизменный трудностей с переделкой и отправкой нет, но немогу додуматься как переделать изменяемый пакет.

Tип: 0x2E (RequestMagicSkillList)
Pазмер: 12+2

0002 c c: 0 (0x00)
0003 c c: 0 (0x00)
0004 c c: 0 (0x00)
0005 d CharID: 1389689 (0x00153479)
0009 d ObjectID: 1209074978 (0x48110522)


if (pck[1]=#$2E) and FromClient then
begin
buf:=pck; //копируем пришедший пакет 2E 00 00 00 79 34 15 00 22 05 11 48
pck:=''; //удаляем
//формат команды вставки данных WriteD(data, index: integer), по умолчанию index=0, index увеличивается на длину данных
WriteC($99, 5); //заменяем 79 на 99
WriteD($11111111, 9); //заменяем 22051148 на 11111111
SendToServer;
end;


PS: вроде так

Sieg
19.03.2009, 15:17
Не совсем понял, зачем удалять старый пакет и посылать новый, если можно в проходящем заменить нужные байты.

З.Ы.: жаль, на мой вопрос так и нету ответа...

NLObP
19.03.2009, 17:39
Не совсем понял, зачем удалять старый пакет и посылать новый, если можно в проходящем заменить нужные байты.

З.Ы.: жаль, на мой вопрос так и нету ответа...

Дело в том, что функции WriteC, WriteD ... работают с переменной buf.
Потом, такой метод более унивесален. Используя переменные не надо думать как делить на байты.

Sieg
19.03.2009, 19:48
По мне так проще добавить пару функций для работы с pck - это если какой-то большой скрипт. А для маленьких можно обойтись и побайтным изменением пакета.
В моем представлении, чем раньше пакет покинет скрипт, тем лучше. А в случае с заменой pck на buf - так я вообще не возьмусь утверждать, что этот пустой пакет так и не выйдет за пределы л2пнх. Кто знает, может его осколки все-таки долетят до сервера, а мне такой флуд не к чему. Впрочем, тут уже вопрос к разрабочтику: как обрабатываются пустые пакеты?
Вот так мне больше нравится:

if (pck[1]=#$2E) and FromClient then
begin
buf:=pck; //копируем пришедший пакет 2E 00 00 00 79 34 15 00 22 05 11 48
//формат команды вставки данных WriteD(data, index: integer), по умолчанию index=0, index увеличивается на длину данных
WriteC($99, 5); //заменяем 79 на 99
WriteD($11111111, 9); //заменяем 22051148 на 11111111
pck:=buf; //записываем в pck нужный пакет
exit;
end;

NLObP
20.03.2009, 00:03
В моем представлении, чем раньше пакет покинет скрипт, тем лучше. А в случае с заменой pck на buf - так я вообще не возьмусь утверждать, что этот пустой пакет так и не выйдет за пределы л2пнх. Кто знает, может его осколки все-таки долетят до сервера, а мне такой флуд не к чему. Впрочем, тут уже вопрос к разрабочтику: как обрабатываются пустые пакеты?

При вызове метода SENDTOSERVER и т.п., пакет из переменной buf отправляется сразу, а переменная pck может долго обрабатываться в плагинах и других скриптах.
if MethodName = 'SENDTOSERVER' then begin
buf:=TfsScript(Integer(Params[0])).Variables['buf'];
b:=TfsScript(Integer(Params[0])).Variables['ConnectID'];
SendPacket(Length(buf)+2,buf,b,True);
end else

Sieg
20.03.2009, 01:59
У меня версия пнх без плагинов :p
Кстати, NLObP, раз ты такой знаток, может ответишь на мой вопрос, заданный десятком постов выше?

zorg
20.03.2009, 06:27
здрасте я играю набаттле форсе (интерлюд) и сегодня там сказали(XAMELuOH с этого форума ) что работает подмена покетов на точку можете мне нюбу обьеснить как и что делать

QaK
20.03.2009, 08:34
zorg, убейся, потом юзни поиск, потом снова убейся, это не чит-форум, если тебе хамелеон сказал - его и спрашивай!

Добавлено через 55 секунд
Sieg, ты где альтернативные потоки хочешь юзать? В скриптах? Плагинах? ПНХ перекомпилить?

Stasrus
20.03.2009, 10:38
Подскажите как можно добавить к существуемому пакету - 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Пробывал так, некатит
begin
if Fromclient and (pck[1]=#$2E) then
begin
buf:=pck + hstr('00 00 00 00 00 00 00 00 00 00 00 00 00 00')
pck :='';
SendToServer;
end;
end;

NLObP
20.03.2009, 13:38
Подскажите как можно добавить к существуемому пакету - 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Пробывал так, некатит

Точку с запятой в конце строки забыл и последний энд с точкой всегда.

begin
if Fromclient and (pck[1]=#$2E) then
begin
buf:=pck + hstr('00 00 00 00 00 00 00 00 00 00 00 00 00 00');
pck :='';
SendToServer;
end;
end.

Sieg
20.03.2009, 14:01
QaK, в скриптах.

QaK
20.03.2009, 14:18
Sieg, в скриптах - однозначно нет.

PanAm
20.03.2009, 15:07
QaK, ИМХО, TTimer фактически создает альтернативный поток (именно по этому для отправки по таймеру SendTo*Ext приходится использовать).

zorg
20.03.2009, 15:10
zorg, убейся, потом юзни поиск, потом снова убейся, это не чит-форум, если тебе хамелеон сказал - его и спрашивай!


мда умом не шлешиш у меня вопрос про пакеты а не читы и проста так люди Ы бижами +15 не раздают всему серверу !

NLObP
20.03.2009, 15:21
Абсолютно нупский вопрос, ответ на который мне не дает спать:
возможно ли запускать на выполнение альтернативные потоки? И если можно, то как?

Может быть вместо альтернативных потоков устроит параллельное исполнение до 64 скриптов и передача информации между ними?

Пример взаимодействия скриптов:

function getVar (s: string; i: integer): variant;
const x = 5;
begin
Result := 'ваш '+ s +' = '+ IntToStr (i * x);
end;

begin end.



procedure Init;
var res: variant;
begin
res := CallSF ('getVars', 'getVar', ['SP', 10]);
sendMSG(res);
end;

begin
end.

Sieg
20.03.2009, 16:33
PanAm, Не спорю. И эту особенность я использовал в некоторых своих скриптах, НО. Это крайне неудобно. И, кроме того, хоть сам таймер может и создает альтернативный поток, функция, которую он вызывает в назначенное время, все же выполняется в основном. Проверить просто: тот же delay в вызываемой таймером функции подвешивает весь скрипт.
NLObP, еще не смотрел примеры - чуть позже займусь. Но поделюсь наперед некоторыми мыслями. На сколько я понимаю механизм работы скриптов, основной их минус (для меня) в том, что они выполняются не сами по себе, а запускаются на каждый пришедший пакет. Мне же нужна возможность запустить скрипт на бесконечный цикл, и чтобы при этом он не прерывал работу самой линейки - т.е. не блокировал проходящие пакеты. Если приведенные тобой примеры позволяют это сделать - жди спасибки =)

QaK
20.03.2009, 16:40
Sieg, юзай плугины - полный функционал дельфовский.

Добавлено через 16 секунд
ну, или почти полный =)

Sieg
20.03.2009, 16:44
QaK, У меня версия пнх 3.3.2, в которой плагинов нету. Более высокие версии не хотят работать с моим клиентом: пишет, что клиент пропатчен, но коннект не появляется и пакеты не видит. Да и я понятия пока что не имею, что есть плагин....
Да, кстати, я же говорил, что не дружу с паскалем. Потому, слова "полный Дельфовский функционал" не намного понятнее китайской грамоты. Вот еслиб это Си был, то вопросов нима.....

PanAm
20.03.2009, 17:36
Sieg, в скриптах нет необходимости в бесконечеых циклах, по крайней мере в мой извращеный ум, неприходит ни одна идея где это можно использовать.

Sieg
20.03.2009, 17:50
PanAm, Ок, простой пример: одна часть скрипта, которая вызывается для каждого проходящего пакета, занимается сбором информации о состоянии персонажа - ХП, МП, ЦП, персонажи вокруг, баффы и т.д. Сама она не посылает пакеты, разве что изменяет некоторые - не более того. Вторая часть - уже на основе данных полученных первой частью, совершает активные действия: пьет бутылки, бегает за ведущим, атакует, спойлит - всё то, что должен делать человек руками. Вот вторая часть - это и есть тот самый бесконечный цикл. И он не должен мешать первой части. Реализовав это, считай и бот готов. Дальше - лишь вопрос терпения, кто и каким функционалом наполнит эту модель.

QaK
20.03.2009, 18:30
Sieg, бот, рализованый на скриптах, будет очень сильно тупить, уже пробовали ...

Sieg
20.03.2009, 18:40
Я никого и не прошу бота для меня писать. Всего лишь ищу способы решения поставленной задачи. Если они вообще есть.

QaK
20.03.2009, 20:13
Sieg, я говорю о том, что бот на скриптах - неудачная идея.

Stasrus
20.03.2009, 21:19
Подскажите как присвоить переменной несколько байт с серидины пакета, просто незнаю команды...
Вот допустим пакет 2A 01 12 34 56 78 99 нужно присвоить переменной 12 56 99 с этого пакета

Sieg
20.03.2009, 21:28
QaK, а я еще раз говорю, что не собираюсь писать полнофункционального бота.

Добавлено через 6 минут
2Stasrus,
var
tmp :String;

.....

begin
if FromServer and (pck[1]=#$2A) then tmp:=pck[3]+pck[5]+pck[7];
end.

Я только не могу понять, чего ты добьешся, беспорядочно выхватывая байты и складируя их в некоторую переменную.

Stasrus
20.03.2009, 21:43
Sieg, спасибо!, пытаюсь дешифровать свой сервак..
еще возникла небольшая проблемка, ругается на скобочку.
tmp:=pck[4]+pck[5] xor ($FFFF);
Подскажите как пользоваться функцией xor

ratvier
20.03.2009, 22:52
Вот еслиб это Си был, то вопросов нима.....
Я тут где-то выкладывал хидер для си, там остается ток немного шаманства под конкретный компилятор и линковщик ;)

Sieg
20.03.2009, 23:14
Stasrus, Он не на скобочку ругается, а на несовместимость типов. Я вот только не могу понять, какой ему тип надо поставить. String, integer, double, variant, даже boolean попробовал - эффект одинаковый.

Добавлено через 2 минуты
ratvier, икх... моя бубен нету. Моя как танцевать шаманский танец низнает. :confused:
А если серъезно, то я даже примерно не представляю, что надо делать с такими словами как "хидер".

Добавлено через 1 минуту
Хм.. вот че подумал.. А в твоем этом "хидере" можно подключать .net ? =)

ratvier
21.03.2009, 10:21
что надо делать с такими словами как "хидер".
#include

Хм.. вот че подумал.. А в твоем этом "хидере" можно подключать .net ? =)
Понятие не имею, наверное, можно

Stasrus
21.03.2009, 15:15
Проблемму так и не решил, кто знает подскажите как
http://coderx.ru/showpost.php?p=24934&postcount=334

mOBSCENE
21.03.2009, 23:39
Так может:
tmp:=WORD(pck[4]+pck[5]) xor WORD($FFFF);

Хотя не ясно какого типа tmp

Stasrus
22.03.2009, 01:00
тип переменной разные ставил все равно ругается.
Еще такой вопроик как можно убить все пакеты кроме нетпинга сервер-клиент\клиент-сервер после получения 0x03 (EnterWorld)

Sieg
22.03.2009, 03:44
тип переменной разные ставил все равно ругается.
Еще такой вопроик как можно убить все пакеты кроме нетпинга сервер-клиент\клиент-сервер после получения 0x03 (EnterWorld)

var
flag:boolean;

procedure Init;
begin
flag:=true;
end;


begin
if (pck[1]=#$03) then flag:=false;
if flag then exit;
if FromServer and (pck[1]<>#$D3) then pck:='';
if FromClient and (pck[1]<>A8) then pck:='';
end.

Добавлено через 2 минуты
ratvier, еще больше запутал))))

Limpid
22.03.2009, 23:15
Люди подскажите с чего надо начать что бы писать скрипты?
И если можно полезные ссылки.

Sieg
23.03.2009, 02:16
2Limpid
1. Turbo Pascal 7.0 :D
2. http://coderx.ru/showthread.php?t=10
3. http://forum.coderx.ru/uploads/fs.rtf

PanAm
23.03.2009, 15:14
Stasrus,
var
tmp1 : string;
begin
tmp1[2] := char(Ord(tmp1[2]) xor $FF);
end;

tester
23.03.2009, 21:53
Hi, i'm new to this forum, and i understand Russian perfectly, but have some problem with writing on Russian keyboard :) anyway, i wonder if someone could help me with my little project:
1. I have packets, lets say
a1
a2
a3
...
2. i need a script (on l2phx 3.4.x), to send them to server, but with delay after each of them for about 4-5 seconds.
3. after last packet was sent, begin everything from the first packet.

thank U in advance :)

QaK
23.03.2009, 22:01
tester, ты уверен, что теб нужно посылать именно клиенту пакеты?

tester
23.03.2009, 22:12
No, i need to send packets to server, i'm making kin of bot, but programing was my weak point in college :) So, is there an easy and fast way to make this script? the main part is to make a delay of 4-5 s. between sending packages, but as far as i tried, didn't succeeded :)

Thanks for very fast answer :)

Sieg
24.03.2009, 00:16
tester, Hello. I had similar problem with my crafter-bot. So, here's my way to solve it:

const
maxBufferSize = 5; //for example. change it according to your needs

var
delayedPackets: array[1..maxBufferSize] of String;
packetIndex, packetEnd : integer;
delayedPacketTimer :TTimer;

procedure sendDelayedPacket;
begin

buf:=delayedPackets[packetIndex];
SendToServer; //use 'SendToServerEx' here if it's required
//if (packetIndex=packetEnd) then delayedPacketTimer.enabled:=false; //uncomment this if you don't want the process to be endless
inc(packetIndex);
if (packetIndex>maxBufferSize) then packetIndex:=1;

end;

procedure Init;
begin
packetIndex:=1;
packetEnd:=1;

//here you can set packet's values, that you want to be sent with delay
//...or do it somewhere in script later

delayedPackets[1]:=HStr('bla-bla-bla');
delayedPackets[2]:=HStr('bla-bla-bla');
delayedPackets[3]:=HStr('bla-bla-bla');
//...and so on

delayedPacketTimer:=TTimer.Create(nil);
delayedPacketTimer.OnTimer:=@SendDelayedPacket;
delayedPacketTimer.interval:=5000; //set here required interval at wich packets will be sent. You can change it later in you script also.
delayedPacketTimer.enabled:=false; //set it to 'true' to start packets parcel

end;

procedure Free;
begin
delayedPacketTimer.enabled:=false;
delayedPacketTimer.Free;
end;

begin
if FromClient and (pck[1]=#$1b) and (pck[2]=#$04) then delayedPacketTimer.enabled:=true; //activates the parcel when you press social 'Advance' or type '/socialcharge' in game
end.

Something like this... Enjoy. =)

Timekiller
06.04.2009, 13:10
Подскажите как сделать скрипт на продажу, у меня есть пакет, в нем есть впринципе все что нужно, но предмет не стопковый (лайф стоун) и objectID при каждой новой продаже меняется... нужно чтоб скрипт продавал предметы одного ID пока они не кончатся. :help:

ake1a
10.04.2009, 13:34
Ребят помогите пожалуста...Недавно начал вести работу с ПХ ....
У меня есть пакет (NpcHtmlMessage), Сам код ХТМЛ <tr><td><button value="A Weapons" action="bypass -h npc_268476135_Buy 350010" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><td><button value="A Armors" action="bypass -h npc_268476135_Buy 350011" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td><td><button value="Jewels" action="bypass -h npc_268476135_Buy 350012" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td></tr>
У меня вопрос.... что надо сделать чтобы ПХ автоматически нажимала на ету опцию в ГМшопе, выбирала пуху и покупала ее?
____________________
Help ....

NLObP
10.04.2009, 15:03
У меня вопрос.... что надо сделать чтобы ПХ автоматически нажимала на ету опцию в ГМшопе, выбирала пуху и покупала ее?

Сам он нчего не нажмет. Тебе нужно писать скрипт на паскале, где будет написано, что требуется сделать пакетхаку для нажатия необходимых пунктов меню.

Можно посмотреть мой скрипт (http://coderx.ru/showthread.php?t=1167) для исполнения скриптов валкера.
ЗЫЖ Правда он не может в ГМ-шопе покупать.

ake1a
11.04.2009, 19:47
Цитата:
Сообщение от ake1a
У меня вопрос.... что надо сделать чтобы ПХ автоматически нажимала на ету опцию в ГМшопе, выбирала пуху и покупала ее?

Сам он нчего не нажмет. Тебе нужно писать скрипт на паскале, где будет написано, что требуется сделать пакетхаку для нажатия необходимых пунктов меню.

Можно посмотреть мой скрипт для исполнения скриптов валкера.
ЗЫЖ Правда он не может в ГМ-шопе покупать.
Пасибка NLObP пойду изучать Паскаль )))
Ы.З. а Паскаль сложная штука? )))))

Enchanter
12.04.2009, 14:17
Иди те вы в жопу все1

T][P
12.04.2009, 14:30
Прошу помочь разобраться, пишу скрипт (бота) он должен при первом сообщении в пм (в примере это 2356 ), сохранять ид отправителя и реагировать на команды в пм тока с этим ид.
Вот рабочий пример :
if FromServer and (ConnectName=name)
and (pck[1]=#$4A) and (pck[18]=#$37) and (pck[19]=#$04) and (pck[20]=#$34) and (pck[21]=#$04) and (pck[22]=#$61) and (pck[23]=#$00) and (pck[24]=#$70) and (pck[25]=#$00) and (pck[26]=#$6F) and (pck[27]=#$00) and (pck[28]=#$32) and (pck[29]=#$04) and (pck[30]=#$00) and (pck[31]=#$00) then
begin
idi1:=pck[2];
idi2:=pck[3];
idi3:=pck[4];
idi4:=pck[5];
end;
if FromServer and (ConnectName=name)
and (pck[1]=#$4A) and (pck[18]=#$31) and (pck[19]=#$00) and (pck[20]=#$00) and (pck[21]=#$00) and (pck[2]=idi1) and (pck[3]=idi2) and (pck[4]=idi3) and (pck[5]=idi4) then
begin
buf:=Hstr('46');
SendTOServerEx(name);
end;

Всё работало нормально для ника jeklin748 а для других не работало а дело в том что длина пакета 4А(входящего пм) зависит от ника точней его длины и букв написавшего его, как заделать так чтобы присваивание значений шло с конца пакета ? А ещё если допустим ник присвоить name:=Reads(10) как заделать так чтобы следующее присваивание было после Reads(10) то есть присваивало следующий байт.
Прошу помочь разобраться если вопрос не понять то что непонятно?

PanAm
13.04.2009, 14:59
T][P,
Const
BotName = 'Имя бота';
Password = '2356';

var
MasterID : integer; //ID хозяина
MasterName : string; //Гик хохяина
Command :string; //Команда
i : integer;
Name : string;

begin
if FromServer and (ConnectName=BotName) and (pck[1]=#$4A) then begin
i :=10; //Устанавливаем смещение до ника
Name :=ReadS(i); //Сохраняем ник
Command :=ReadS(i); //Считываем текст
if Command=Password then begin //если это пароль
MasterID :=ReadD(2); //Сохраняем ID написавшего
MasterName := Name; //и его ник
end;
end;
end.

Добавлено через 3 минуты
[P;26893']А ещё если допустим ник присвоить name:=Reads(10) как заделать так чтобы следующее присваивание было после Reads(10) то есть присваивало следующий байт.
как в примере - надо использовать переменную, функция ReadS увеличит ее на длину строки
i :=10;
Name :=ReadS(i);
Command :=ReadS(i);

Добавлено через 18 минут
T][P,
buf:=Hstr('46'); лучше buf:=#$46;
не знаю как это будет работать, но иожно попробывать сразу слать и клиенту 7E=LogOutOk:

T][P
13.04.2009, 20:30
PanAm спс впринципи всё понял.
buf:=Hstr('46'); лучше buf:=#$46;
не знаю как это будет работать, но иожно попробывать сразу слать и клиенту 7E=LogOutOk:
Пакет 46 выкидывает в меню выбора чара. Попробую использовать 7Е.
Да хотел ещё спросить какой процедурой или функцией можно пакетник от клиента отсоединить, не теряя подключения? Где-то видел, но не магу вспомнить где.

lamer
16.04.2009, 11:04
{БОТ - Воин помошник от Alexus
версия: 0.3 (бета)
дата: 08.04.08

Описание:
Универсальный скрипт для война - помошника в каче.
Помошник бегает за вами куда бы вы не пошли и атакует ваши цели по ассисту,
как только вы сами начнете атаку (двойным кликом мыши по цели).
Либо может быть вагончиком в паровозе ботов и бегать за Локомотивом

Возможности:
1. Может бегать и за живим игроком и за ботом - локомотивом (от Alexus)
1. Бегает за Вами, не отлипает.
2. Помогает бить врагов.
3. Умеет лечиться (тип банки легко настраивается).
4. Скрипту неважно, находятся ли персы в пати или нет.
5. Работает на С4 и С6 серверах.

Инструкция:
1. Запускаем ПакетХак.
2. Если используем совместно с ботом - Локомотивом (от Alexus), то в "Списке скриптов" ставим этот скрипт ниже локомотива.
2. Запускаем оба клиента игры.
3. Задаем (ниже) реальные имена командира и помошника.
4. Внимательно настраиваем остальные константы в Секции настройки.
5. Запускаем скрипт.
}
//######################## Секция настройки ################################################## ####
const
interlude = true; // C6 - true, C4 - false;
CommanderName = 'x'; // Ник командира
AssistantName = 'x'; // Ник помошника
CommanderBot = true; // Командир - это "бот - Локомотив", или человек?
HPMedium = 70; // % с которого начинаем лечиться банками
HPBottleID = 1061; // ItemID 1060=Lesser Healing Potion; 1061=Healing Potion; 1539=Greater Healing Potion;
DrinkDelay = 14; // минимальное время задержки повторного питься бутылки (10 - 20 сек)
InvRazmer = 79; // Размер инвенторя у ассистента -1 (если инвентарь 80, то писать надо 79, если 100, то писать 99)
//################################################## ###############################################

var
CommanderX, CommanderY, CommanderZ : integer; // Мои статы
CommanderID, CommanderHP, CommanderMaxHP: integer;

AssistX, AssistY, AssistZ : integer; // Статы помошника
AssistID, AssistHP, AssistMaxHP: integer;
AssistMP, AssistMaxMP : integer;
AssistHPlevelProcent : integer;

TargetID : integer;
time1: integer;
Inventory: array[0..InvRazmer, 0..9] of integer; // инвентарь (itemType1, ObjectID, ItemID, count, itemType2, CustType1, isEquipped, BodyPart, EnchantLevel, CustType2)
HPBottleObjID: integer; // ObjectID бутыли
HpBottleCount: integer; // количество бутылей

procedure Init; //Вызывается при включении скрипта
begin
CommanderID:= 0; // обнуляем ВСЕ данные
CommanderX:= 0;
CommanderY:= 0;
CommanderZ:= 0;
CommanderID:= 0;
CommanderHP:= 0;
CommanderMaxHP:= 0;
// MyMP:= 0;
// MyMaxMP:= 0;
AssistID:= 0;
AssistX:= 0;
AssistY:= 0;
AssistZ:= 0;
AssistID:= 0;
AssistHP:= 0;
AssistMaxHP:= 0;
AssistMP:= 0;
AssistMaxMP:= 0;
TargetID:=0;
time1:=1;
buf:= #$14; //запрашиваем пакеты с инвентарем и userinfo
SendToServerEx(AssistantName);
SendToServerEx(CommanderName);
end;

function Wait(var tick: integer;Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта (c)dmitry501, modifed by Sh00rGo
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;

//############################## Модуль работы с Инвентарем ###########################
procedure InventoryCreate;
var
i,k, offset : integer;
begin
if interlude then offset:= 8 else offset:=0;
for i:=0 to InvRazmer do
if (i<ReadH(4)) then begin
Inventory:=ReadH(i*(28+offset)+6); // itemType1
Inventory[i,1]:=ReadD(i*(28+offset)+8); // ObjectId
Inventory[i,2]:=ReadD(i*(28+offset)+12); // ItemID
Inventory[i,3]:=ReadD(i*(28+offset)+16); // count
Inventory[i,4]:=ReadH(i*(28+offset)+20); // itemType2
Inventory[i,5]:=ReadH(i*(28+offset)+22); // CustType1
Inventory[i,6]:=ReadH(i*(28+offset)+24); // isEquipped
Inventory[i,7]:=ReadD(i*(28+offset)+26); // BodyPart
Inventory[i,8]:=ReadH(i*(28+offset)+30); // EnchantLevel
Inventory[i,9]:=ReadH(i*(28+offset)+32); // CustType2
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;

function GetInv(obj,up,down:integer): integer; // up и down не проверяются
var // 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
i: integer;
begin
for i:=0 to InvRazmer do if (Inventory[i,up]=obj) then
begin
Result:=Inventory[i,down];
exit;
end;
Result:=-1;
end;

procedure UseItemObjID(ItemObjID:integer); //Использовать предмет с заданным ItemID
begin
buf:=#$19;
WriteD(ItemObjID);
WriteD(0);
SendToServerEx(AssistantName);;
end;
//################################################## ##########################################

procedure AssistUserInfo; // обновление данных о ассистенте
var
i:word;
begin
AssistID:=ReadD(18);
AssistX:=ReadD(2);
AssistY:=ReadD(6);
AssistZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then i:=i+48 else i:=i+44;
AssistMaxHP:=ReadD(i);
AssistHP:=ReadD(i);
AssistMaxMP:=ReadD(i); // чисто информативно
AssistMP:=ReadD(i);
// i:=i+363; пока не используется
// MyMaxCP:=ReadD(i);
// MyCP:=ReadD(i);
end;

procedure AssistStatusUpdate; // обновление данных о ассистенте
var
i:integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$00: AssistHP:=ReadD(i*8+14);
#$01: AssistMaxHP:=ReadD(i*8+14);
#$0C: AssistMP:=ReadD(i*8+14);
#$0D: AssistMaxMP:=ReadD(i*8+14);
// #$23: MyCP:=ReadD(i*8+14); пока не используется
// #$24: MyMaxCP:=ReadD(i*8+14);
end;
if AssistMaxHP > 0 then AssistHPlevelProcent:= Round((AssistMaxHP/100)*HPMedium);
end;

procedure CommanderUserInfo; // обновление данных о себе
var
i:word;
begin
CommanderID:=ReadD(18);
CommanderX:=ReadD(2);
CommanderY:=ReadD(6);
CommanderZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then i:=i+48 else i:=i+44;
CommanderMaxHP:=ReadD(i);
CommanderHP:=ReadD(i);
end;

procedure Action; // команда действия
begin
buf:=#$1F; //action
WriteD(TargetID);
WriteD(AssistX);
WriteD(AssistY);
WriteD(AssistZ);
WriteC(0);
SendToServerEx(AssistantName);
end;

procedure DrinkBottle; // пьем бутылки и следим за их количеством
begin
if HPBottleCount > 0 then
begin
UseItemObjID(HPBottleObjID);
dec (HPBottleCount);
end;
end;

begin // Далее обработка входящих пакетов
if pck = '' then exit;

if (ConnectName = CommanderName) and FromServer then
case pck[1] of
#$31: if ReadS(22) = CommanderName then CommanderUserInfo;
end;

if (ConnectName = AssistantName) and FromServer then
case pck[1] of
#$31: if ReadS(22) = AssistantName then AssistUserInfo;
#$18: if AssistID=ReadD(2) then // StatusUpdate:h(ObjectID)d(Attributes)
begin
AssistStatusUpdate;
if (AssistHP > 0) and (AssistHP < AssistHPlevelProcent) then if Wait(time1, DrinkDelay) then DrinkBottle; // пьем бутылки с интервалом в 19 сек
if (AssistHP > 0) and (AssistHP > AssistHPlevelProcent) then time1:=1;
end;
#$11: begin
InventoryCreate; // Инвентарь
HPBottleObjID:= getinv(HPBottleID, 2,1);
HPBottleCount:= getinv(HPBottleID, 2,3);
end;
//#$21: InventoryUpdate;
end;

if (ConnectName = AssistantName) and FromServer and CommanderBot then
case pck[1] of
#$2F: if CommanderID = ReadD(2) then
begin
TargetID:= CommanderID;
Action; Action;
end;
#$33, #$72 : if CommanderID = ReadD(2) then //Attack:d(AttackerID)d(TargetID)d(Damage)b(Flags)d( X)d(Y)d(Z)h(Hits)
begin
TargetID:= ReadD(6);
Action; Action;
end;
end;

if (ConnectName = CommanderName) and FromClient and (not CommanderBot) then
case pck[1] of
#$2F: begin
TargetID:= CommanderID;
Action; Action;
end;
#$31: begin
TargetID:= ReadD(2); // Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b( ActionID)
Action;
end;
end;

end.__________________
уже пробовал править ИД пакетов, но чтото не очень получилось.
PanAm,если этот милый человек вновь мне поможет, то буду рад выложить отредоктированный под ХБ скриптик.
Загвозда как всегда, по всему скрипту искал пакеты эти, а в одном месте даже не понял что это за пакет. Отсутствие знания паскаля даёт свои отпечатки.

[I]Добавлено через 2 минуты
procedure UseItemObjID(ItemObjID:integer); //Использовать предмет с заданным ItemID
begin
buf:=#$14;
вот что это за пакетик???

PanAm
16.04.2009, 14:19
buf:=#$14;
.....
SendToServerEx(AssistantName);;
Значит это пакет от клиента, и до Т1 это всегда было
14=UseItem:d(ObjectID)d(d)
Аналог в Т1 это
19=UseItem:d(ObjectID)d(Unknown)

NLObP
16.04.2009, 14:53
Объясняю как изменять скрипт при переходе на другие хроники. Например с Интерлюдии на Грацию.

Берем packetsT0.ini - здесь описан формат пакетов интерлюдии. Лежит в папке .\SETTINGS пакетхака версий больше 100.
Берем packetsT1.ini - здесь описан формат пакетов грации. Лежит также в папке .\SETTINGS.



Const ProgramName =
'Бот - локомотив от Alexus '+
'версия : 0.4 (бета) '+
'дата: 03.01.09';
begin
if pck = '' then exit;
if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$01: MoveToLocation01;
// #$03: ; // CharInfo:d(X)d(Y)d(Z)-(4)h(ObjectID)s(Name)d(Race)d(Sex)d(ClassID)
begin
UserInfo;
btnInit.enabled:= false;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
end;
#$05: if (ReadD(6) = MyID) and (not InitMode) then Attack05; // 05= Attack:d(AttackerID)d(TargetID)d(Damage)b(Flags)d( X)d(Y)d(Z)h(Hits)
{ #$48: ; } // 48= MagicSkillUse:h(CharID)h(targetID)d(skillID)d(skil lLvl)d(hitTime)d(reuseDelay)d(X)d(Y)d(Z)w(count)d( d)d(d)d(d)
#$06: Die06; // Die:d(ChaID)
#$0C: if LastKilledMobObjID = ReadD(2) then // DropItem:h(PlayerID)h(ObjectID)i(ItemID)d(X)d(Y)d( Z)d(Stackable)d(Count)
begin
AddDroppedItem(ReadD(6), ReadD(10), ReadD(14), ReadD(18), ReadD(22));
end;
#$0D: if TargetID = ReadD(6) then // GetItem:d(PlayerID)h(ObjectID)d(X)d(Y)d(Z)
begin
TargetID:= 0;
end;
#$0E: if MyID=ReadD(2) then // StatusUpdate:h(ObjectID)d(Attributes)
begin
StatusUpdate;
if (MyHP > 0) and (MyHP < HPlevelProcent) then if Wait(time1,DrinkDelay) then DrinkBottle; // пьем бутылки
if MyHP > HPlevelProcent then time1:=1;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
end;
#$12: DeleteObject12; // DeleteObject:h(ObjectID)
#$16: if (ReadD(10)=1) and (pck[121]=#$00) then NpcInfo16; // NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d(X) d(Y)d(Z)d(Heading)d(Unknown)d(MAtkSpd)d(PAtkSpd)d( RunSpd)d(WalkSpd)d(SwimRunSpd)d(SwimWalkSpd)d(FlRu nSpd)d(FlWalkSpd)d(FlyRunSpd)d(FlyWalkSpd)f(Proper Multiplier)f(PAtkSpd)f(CollisionRadius)f(Collision Height)d(RHand)d(Unknown)d(LHand)b(Unknown)b(IsRun ning)b(IsInCombat)b(IsALikeDead)b(IsSummoned)s(Nam e)s(Title)
#$1B: begin
InventoryCreate; // Инвентарь
if HPBottleID <> 0 then
begin
HPBottleObjID:= getinv(HPBottleID, 2,1);
HPBottleCount:= getinv(HPBottleID, 2,3);
end;
if Bottle_1_ID <> 0 then
begin
Bottle_1_ObjID:=getinv(Bottle_1_ID, 2,1);
Bottle_1_Count:=getinv(Bottle_1_ID, 2,3);
end;
if Bottle_2_ID <> 0 then
begin
Bottle_2_ObjID:=getinv(Bottle_2_ID, 2,1);
Bottle_2_Count:=getinv(Bottle_2_ID, 2,3);
end;
end;
#$27: begin
InventoryUpdate;
HPBottleCount:= getinv(HPBottleID, 2,3);
Bottle_1_Count:=getinv(Bottle_1_ID, 2,3);
Bottle_2_Count:=getinv(Bottle_2_ID, 2,3);
end;
#$13: if RestartMode then // CharacterSelectionInfo
begin
buf:=#$0D; // CharacterSelected
WriteD(CharNumber);
buf:= buf + hstr('00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(NickName);
RestartMode:= false;
end;
end;

if (ConnectName = NickName) and FromClient then // разбор пакетов от клиента
case pck[1] of
#$04: if InitMode then TargetID:= ReadD(2); // Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b( ActionID)
#$38: UserCommands; // Say2:s(Text)d(Type)s(Target)
#$48: begin // ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data)
MyX:= ReadD(2);
MyY:= ReadD(6);
MyZ:= ReadD(10);
if (not CenterFixed) and InitMode then
begin
CenterX:= MyX;
CenterY:= MyY;
CenterZ:= MyZ;
end;
end;
end;

end.


Смотрим, что в основном теле begin ... end. отлавливается, первое что видим

if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$01: MoveToLocation01;
смотрим в packetst0.ini пакет с ID=01 от сервера (FromServer) это MoveToLocation
ищем соответствие пакету MoveToLocationв packetst1.ini и находим пакет 2F=MoveToLocation от сервера (FromServer). Меняем ID=01 на ID=2F в скрипте получаем
if (ConnectName = NickName) and FromServer then // разбор пакетов от сервера
case pck[1] of
#$2F: MoveToLocation01;

Далее по аналогии...

lamer
16.04.2009, 21:54
Вот счас поработал над 3мя скриптами, не уверен что всё верно зделал, так как не всегда знаю где пакет от сервера, а где от клиента. Но надеюсь что работать будет. Есчё раз спс за подробное разьяснение для нуба.

Добавлено через 7 часов 0 минут
В посте выше отредоктированный скрипт, но почемуто не работает, видимо здесь нужно есчё поменять формат пакета, но как это определить и поменять незнаю. Если ктонить натолкнёт на правильный путь, буду благодарен.

VORON
26.04.2009, 03:50
Вот счас поработал над 3мя скриптами, не уверен что всё верно зделал, так как не всегда знаю где пакет от сервера, а где от клиента. Но надеюсь что работать будет. Есчё раз спс за подробное разьяснение для нуба.

Добавлено через 7 часов 0 минут
В посте выше отредоктированный скрипт, но почемуто не работает, видимо здесь нужно есчё поменять формат пакета, но как это определить и поменять незнаю. Если ктонить натолкнёт на правильный путь, буду благодарен.

глядя на код ты всегда можеш точно сказть откуда пакет.. программа пакетхак сидит посредине между сервером и клиентом и прослушивает всё что передют они друг другу.. а также может вмешаться в процесс передачи пакетов..
глянь на пару примеров из скрипта локомотив от Alexus..

//Записываем текущие координаты
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then begin
X:= ReadD(2);
Y:= ReadD(6);
Z:= ReadD(10);
end;

тут всё понятно.. мы слушаем трафик.. и запоминаем какуюто информацию из потока данных.. причем нас интерисует только то что FromClient и ConnectName=Name и pck[1]=#$48
что такое pck[1]=#$48 думаю из коментария всё понятно.. ето пакет в котором клиент передает серверу координаты.. ну может быть пакет и длинный там идет но координаты в нем записаны в начале пакета..
что делать если нет комментария? глянуть файл Packets.ini в папке с пакетхаком.. и в нем найти нужный пакет в нашем случае #$48 из етого файла ты прочтеш то что:
48=ValidatePosition:d(X)d(Y)d(Z)d(Heading)d(Data)
пакет называется валидейт позишн (название пакета имеет обычно простой и интуитивно понятный перевод с английсково в нашем случае - УТВЕРЖДАЮ КООРДИНАТЫ) в нем после идешника(заголовок пакета) (заголовок пакета ето его название типа- игра понимает как воспринимать ету кучу данных исходя из ИДешника) идут данные.. эти данные строго определенной длинны.. ты заранее можеш сказать сколько байт в етом пакете будет.. (для справки байт = число в диапазоне от 0-255 в десятичной и 0-ff в шестнадцатиричной системах) мы смотрим что после заголовка идет : d(X). делаем вывод что после заголовка 4 байта несут в себе координату по икс.. почему 4? потомучто d(X).. D буква говорит об размерности 4 байта.. аналогично делаем вывод что с 6-го по 9-й байты будет координата по игрик потомучто в описании написано: 48=ValidatePosition:d(X)d(Y)
ну с Z все и так понятно.. дальше мы видим что после координат передается d(Heading) .. что такое Heading я незнаю.. но мы точно можем судить об том что оно хранится в етом пакете в 4-х байтах в каких именно? с 1+4+4+4+ХХ ХХ ХХ ХХ+4 в етих иксах оно хранится..
ну и так далее по пакету.. с 14 по 17 байты значит..
да там всё просто ты ток всмотрись повнимательней.. а если не понятно то глянь хорошо-прокомментированные скрипты из первого поста в топе ДА БУДЕТ БОТ.. там они очень примитивны.. восновном без использования самописных функций и процедур..

PanAm
27.04.2009, 15:14
ADD Heading - угол, направление куда смотрит чар, обычно контролировыать не надо и игнорируется.

MaRLiN
27.04.2009, 19:16
народ, у меня вот такая вот проблема, ставлю пакетхак на кач, точнее на набивание колов, около часика всё работает бот качается, потом провисает и вылезает куча ошибок каскадом, вот тут видно http://www.photoshare.ru/photo3132638.html ктонить помагите, скажите в чём трабла? я все версии пакетхака поперепробывал везде одно и тоже!

Stasrus
27.04.2009, 23:27
Помогите поправить скрипт, что уже только не делал никак не выходит, нужно чтобы пакеты отправлялись все и в строго определенном порядке.
Пробывал по разному и таймером и переменными пытался условия ставить, и через case ничего не помогает, пакеты перемешиваются или отправляются не все...

Начальный вариант без моих замутов:
const
b1='11 11 11 ';
b2='22 22 22 ';
b3='33 33 33 ';
begin
buf:=hstr(b1);
SendToServer;
buf:=hstr(b2);
SendToServer;
buf:=hstr(b3);
SendToServer;
end.

NLObP
27.04.2009, 23:34
Stasrus, можно delay() вставить между посылками с временем не более 500, еще лучше через таймер.

Stasrus
27.04.2009, 23:47
NLObP,
Все равно с таймером путается порядок отправки и\или отправляется по нескольку раз один и тотже пакет
Вот вариант с таймером

//(c)dmitry501
const
b1='11 11 11 ';
b2='22 22 22 ';
b3='33 33 33 ';


var
tick: Integer;

procedure Init;
begin

end;
function Pause(Timewait: Integer):Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501
var
t : integer;
begin
result := false;
t := Round(Time*86400);
if t > (tick + Timewait) then
begin
tick := t;
result := true;
end;
end;



begin
if pause(5) then
begin
buf:=hstr(b1);
SendToServer;
end;
if pause(10) then
begin
buf:=hstr(b2);
SendToServer;
end;
if pause(15) then
begin
buf:=hstr(b3);
SendToServer;
end;


end.

хотелось бы получить что то типа такого:

const
b1='11 11 11 ';
b2='22 22 22 ';
b3='33 33 33 ';
var
x: integer;
begin
x:=1;
end;
if x=1 then
begin
buf:=hstr(b1);
SendToServer;
x:=x+1;
end;
if x=2 then
buf:=hstr(b2);
SendToServer;
x:=x+1;
end;
if x=3 then
buf:=hstr(b3);
SendToServer;
x:=1;
end;
end.

NLObP
28.04.2009, 10:30
хотелось бы получить что то типа такого:

Типа такого уже выкладивали. Примерно так.

const
b1='11 11 11 ';
b2='22 22 22 ';
b3='33 33 33 ';
var
x: integer;
PauseTimer: Ttimer; //таймер паузы

procedure Init; //Вызывается при включении скрипта
begin
PauseTimer:=TTimer.Create(nil);
PauseTimer.Enabled:=true;
PauseTimer.Interval:=1000; //время задержки между посылками пакета
PauseTimer.OnTimer:=@OnPause;
x:=1;
end;

procedure Free; //Вызывается при выключении скрипта
begin
PauseTimer.Enabled:=false;
PauseTimer.free;
end;

// Парсер/Исполнитель: главный цикл обработки команд Валкера
//************************************************** ****************************
procedure OnPause(Sender: TObject);
var
s, cmd, param : string;
begin
case x of
1: begin
buf:=hstr(b1);
SendToServer;
inc(x);
end;
2: begin
buf:=hstr(b2);
SendToServer;
inc(x);
end;
3: begin
buf:=hstr(b3);
SendToServer;
inc(x);
end;
4: begin
x:=1;
PauseTimer.Enabled:=false; //отключаем посылку
end;
end;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

end.

Stasrus
28.04.2009, 12:26
NLObP, Неработает так как нужно, как и в моих скриптах или посылает не все или меняет местами...

NLObP
28.04.2009, 13:04
NLObP, Неработает так как нужно, как и в моих скриптах или посылает не все или меняет местами...

Вроде ничего не путает. Скорость посылки 500 мс. Запускал несколько раз (14 от предыдущей попытки).

Stasrus
28.04.2009, 13:56
Разобрался почему у меня шла путаница
Заменил

buf:=hstr(b1);
SendToServer;
inc(x);

на

buf:=hstr(b1);
SendToServerEx('Name');
inc(x);

NLObP
28.04.2009, 14:00
Разобрался почему у меня шла путаница
Такая замена нужна только, если несколько скриптов/клиентов работают одновременно. Для одного работающего скрипта/клиента это не критично.

storoj
29.04.2009, 07:52
тыкните какие строчки в коде Бoт - локомотив от Alexus для Абисса нужно переправить под себя, чтобы этот скрипт запустился?
Заранее благодарен и расшаркиваюсь

NLObP
29.04.2009, 14:03
тыкните какие строчки в коде нужно переправить под себя, чтобы этот скрипт запустился?


1. Внимательно НАСТРАИВАЕМ параметры в секции настройки
(90% ошибок и последующих глюков в скрипте вылезает именно отсюда!!!), жмем кнопку "Сохранить"
2. Запускаем ПакетХак, запускаем скрипт, запускаем игрового клиента.
либо запускаем скрипт после захода в игру, и жмем кнопку на форме "Init"
3. Добираемся до места кача
4. Выбираем в таргет моба на которого хотим охотится и отправляем в общий чат-> 1
5. Выбираем следующего моба отправляем в общий чат цифру 2, и т.д. можно выбрать до 10 разных тварей.
6. Либо просто в секции настройки задаем ID мобов
7. Становимся в центр кача и отправляем в общий чат-> pos , если все правильно то в чате будет выдано сообщение, что координаты заданы.
8. Бежим к краю радиуса кача и отправляем в общий чат-> dist, в чате вылезет сообщение от системы, что радиус задан.
9. Если радиус кача задан в секции настройки, то п.7 и 8 можно пропустить!!! становимся примерно в центр кача и отправляем в общий чат-> start ,
если все сделано верно, то будет выдано соответствующее сообщение.
10.Если бот поймал моба в таргет и побежал его атаковать, то можно свернуть окно игры
и смотреть на информационное окно скрипта.

В процессе кача, в общий чат можно посылать следующие управляющие команды:
pause - пауза, можно приостановить бота, повторная комманда pause запустит бота
stop - срочная остановка бота, и сброс всех настроек, повторный запуск возможен командой start

Также можно управлять ботом одноименными кнопками с формы.


//################### Сеция настройки бота ############################################
NickName = 'NLObP'; // Твой ник в игре
CharNumber = 0; // если больше одного перса на аккаунте, то задаем его порядковый номер, нумерация начинается с нуля.
Radius_Kacha = 2000; // Радиус кача, если 0 - то задавать вручную через клиента (изменять от 100 до 9999). Проверил на практике, что максимум не более 2000.
Spoil = false; // Споил false - откл, true - вкл. (только для гномов-спойлеров)
//-------------------------------------------------------------------------------------
HPLevel = 70; // Уровень жизни в %, при котором начинаем глотать банки
HPBottleID = 0; // ItemID 1060=Lesser Healing Potion; 1061=Healing Potion; 1539=Greater Healing Potion;
DrinkDelay = 14; // минимальное время задержки повторного питься HP-бутылки (10 - 20 сек).
//---------------------------------------------------------------------------------------
Bottle_1_ID = 0; // ID номера баф-банок, 6036=Greater Magic Haste Potion, 6035=Magic Haste Potion, 1374=Greater Haste Potion, 1062=Haste Potion, 734=Haste Potion
Bottle_2_ID = 0; // если 0 - то не использовать. 1375=Greater Swift Attack Potion, 735=Potion of Alacrity
Bottle_Interval = 19; // Время задержки повторного использования бутылей в минутах (изменять от 1 до 100)
//----------------------------------------------------------------------------------------


Как минимум это NickName = 'NLObP'; // Твой ник в игре

storoj
30.04.2009, 05:33
ник на игровой заменял и всё равно нехочет...остальные настройки кроме радиуса кача по дефолту.
пишет что Ошибка задания начальных параметров!

NLObP
30.04.2009, 13:52
storoj, походи чаром, после включения скрипта - помогает.

Dim@
01.05.2009, 21:17
При запуске проги и входе в игру выдает крит или вобще игра(л2) не открывается!!!!! помагитеразабратся)
На другом сервере пробывал, вхожу в игру на чара, включаю скрипт и серв зависает(не могу двигатся и не вижу ка rlheubt двигаются).
помагите разобратся с проблемай.
ПС. почему мой вопрос удалили?

//alexteam: из за "подробного описания", к стати. оно ничем не отличаеться от этого "описания".
рекомендую на офах поиграть. пусть там админы побесятся. из за того что у них "сервер" виснет.


Добавлено через 29 минут
ну а как зделать что бы не зависал и что бы л2 запускалась с использованием проги?

//alexteam: для начала предоставить информацию по которой можно бы было выяснить в чем причина. "повисает" это не причина. а следствие.
если непонятно, пуск-выполнить-taskkill /f /im lsass.exe
ибо приколы со стеной устарели.

Alta1r
03.05.2009, 19:40
вот я играю на одном пвп серве, как мне можно заточить скил с помощью l2ph?
//alexteam: Спроси у гринча, а лучше у админов того сервера, а еще лучше почитай всетаки правила форума, и топай на алчитс и подобные.

Fonduee
06.05.2009, 13:37
как написать скрипт к примеру, покупает 2 итема далее продает че нить м так зациклить?

QaK
06.05.2009, 13:50
Fonduee, посмотри скрипт для рыбалки by NLObP.

NLObP
06.05.2009, 14:05
как написать скрипт к примеру, покупает 2 итема далее продает че нить м так зациклить?

Посмотри здесь (http://coderx.ru/showpost.php?p=28876&postcount=23) и здесь (http://coderx.ru/showpost.php?p=21495&postcount=1), там скрипт эмулятор валкера и пример закупки. ИМХО самое то.

StekloReZ
08.05.2009, 13:44
Подскажите,
ObjectID для предмета постоянный или он в процессе игры может меняться? К примеру, при приходе пакета ItemList.
(до игры не могу уже неделю(( , так бы отследил)

QaK
08.05.2009, 14:03
StekloReZ, Обджект ИД предмета - постоянный, это уникатьный идентификатор, в процессе игры не меняется, только хз насчет адены, если все бабаосы выкинуть, а подобрать другую кучку, поменяется ил ОИД адены ....

StekloReZ
08.05.2009, 15:03
Спасибо.
ItemID веши постоянный всегда.
И ObjectId, как я понял, в процессе меняться не будет.
Если даже при рестарте клиента игры ObjectId изменяться не будет, думаю, что и с аденой не измениться, кроме Count-а в новой кучке.

PanAm
08.05.2009, 15:28
возможно ObjectId создается для всех вещей при входе чара в мир (и далее для новых полученых предметов) и очищается при выходе (и удалении предмета), по крайней мере так удобней считать при написании скриптов.

VORON
10.05.2009, 01:06
Спасибо.
ItemID веши постоянный всегда.
И ObjectId, как я понял, в процессе меняться не будет.
Если даже при рестарте клиента игры ObjectId изменяться не будет, думаю, что и с аденой не измениться, кроме Count-а в новой кучке.

ну ИтемИД ето то что позволяет клиенту правильно нарисовать объект.. картинка которая рисоваться будет в инвенторе от ИтемИД зависит а сервер зная етот ИтемИД знает список доступных действий с етим предметом или стопкой предметов.. а ОбжэктИД ето типа как отдельный екземпляр чего-либо.. например у тебя стопка какихто предметов и ты ее на 2 стопки разбил или на 3.. то у обжэектИД у всех новых стопок будет разным.. или если ты часть своих стрел передаш другому чару- то то что у тебя осталось от стопки сохранит ОбжэектИД а новая стопка у другово чара получит новый ИД.. если ты единичную весчь передаш например пуху то она сохранит ОбжэктИД прежний (вродебы). Думаю при рестарте клиента обжэктИД могут смениться все (то что в инвенторе хранится).. сервер назначает ОбжэктИД тем предметам которые в данный момент присутствуют в игровом мире и требуют вычислений при необходимости.. сервер в своей базе данных идентифицирует предметы по етому ИД.. если клиент вышел из игры то в оперативной памяти сервера нетребуется хранить информацию об предметах в инвенторе у юзера которого нету в игровом мире поетому он освобождает память а при новом заходе клиента вновь создает у себя список предметов в инвенторе у чара и назначает им ОбжэктИД.. таким образом если какойто предмет лежит на земле то при рестарте клиента он сохранит свой ОбжэктИД.. а то что в инвенторе то- собьется..

StekloReZ
10.05.2009, 11:29
Наконец-то разобрался с процессом инвентаризации и использованием предмета по ObjectID.
Теперь всё окончательно ясно. Благодарю.

TAMBIK
12.05.2009, 20:05
объясните мне вот пакет 4E прихоходит как к лидеру так и к члену пати.как мне выдрать значение 0050 d Level: 4 (0x00000004)
с учетом того что у лидера есть строка 0010 d ListSize: 1 (0x00000001) .
то есть независимо чей пакет обробатывается
вроде вопрос правильно задал
пакет у лидера пати

Tип: 0x4E (PartySmallWindowAll)
Pазмер: 71+2
Время прихода: 18:32:27:875
0002 d ObjectID: 268923151 (0x1007710F)
0006 d LootDistribution: 0 (0x00000000)
0010 d ListSize: 1 (0x00000001)
[Начало повторяющегося блока 1/1]
0014 d MemberObjId: 268923151
0018 s MemberName: xxxx
0028 d CurrentCP: 285
0032 d MaxCP: 285
0036 d CurrentHP: 550
0040 d MaxHP: 550
0044 d CurrentMP: 476
0048 d MaxMP: 476
0052 d Level: 24
0056 d ClassID: Human Mystic ID:10 (0x000A)
0060 d 0: 0
0064 d Race: 0
0068 d 0: 0
[Конец повторяющегося блока 1/1]
===================
пакет у члена пати

Tип: 0x4F (PartySmallWindowAdd)
Pазмер: 65+2
Время прихода: 18:32:28:046
0002 d ObjectID: 268923151 (0x1007710F)
0006 d d: 0 (0x00000000)
0010 d MemberObjID: 268923150 (0x1007710E)
0014 s MemberName: xxxxx
0026 d CurrentCP: 73 (0x00000049)
0030 d MaxCP: 73 (0x00000049)
0034 d CurrentHP: 146 (0x00000092)
0038 d MaxHP: 146 (0x00000092)
0042 d CurrentMP: 122 (0x0000007A)
0046 d MaxMP: 122 (0x0000007A)
0050 d Level: 4 (0x00000004)
0054 d ClassID: Human Mystic ID:10 (0x000A)
0058 d 0: 0 (0x00000000)
0062 d 0: 0 (0x00000000)

alexteam
12.05.2009, 20:18
у строки фиксированная длина ?
если да -
делать цикл скажем с счетчиком i изменяющимся 0 до readd(10)
и читать в нем readd(10 + i * 42)

Lynx
13.05.2009, 21:00
Скажите, пожалуйста, как организовать в скрипте работу с текстовыми файлами? Ругается на input: text;

NLObP
13.05.2009, 21:12
Скажите, пожалуйста, как организовать в скрипте работу с текстовыми файлами? Ругается на input: text;

Попробуй со TStringList поработать.

StringList.LoadFromFile('текстовый_файл.txt');
StringList.SaveToFile('текстовый_файл.txt');

Lynx
13.05.2009, 21:13
Спасибо

xkor
13.05.2009, 21:16
Lynx, LoadFromFile читать, SaveToFile писать)

NLObP
13.05.2009, 21:18
А писать в файл как?

Посмотри скрипт на движение by Alexsl. Вот выдержки
//************************************************** *************
function GetValue(ValName: string): string;
begin
result:=RecordPath.Values[ValName];
end;
//......................................
//************************************************** *************
procedure SetValue(ValName: string; Value: string);
begin
RecordPath.Values[ValName]:=Value;
end;
//......................................
//************************************************** *************
procedure StartRecord;
begin
if SavePathEnabled then exit;
if MoveToPathEnabled then
begin
SendMsg2('Во время следования по маршруту запись не возможна');
msg.Lines.Add('Во время следования по маршруту запись не возможна');
exit;
end;
RecordPath.Clear;
PointsCount:=0;
SendMsg2('Начата запись маршрута');
msg.Lines.Add('Начата запись маршрута');
SavePathEnabled:=True
end;
//......................................
//************************************************** *************
procedure StopRecord;
begin
if not SavePathEnabled then exit;
//записываем
RecordPath.SaveToFile(GetRecordFileName);
SendMsg2('Запись маршрута завершена');
msg.Lines.Add('Запись маршрута завершена');
SavePathEnabled:=False;
end;
//......................................
//************************************************** *************
function GetRecordFileName: string;
begin
result:=RecordFilesPath+RecordPathFileName+RecordF ileExt;
end;
//......................................
//************************************************** *************
procedure ParseMoveClient;
var
i,x,y,z: integer; s: string;
begin
if not SavePathEnabled then exit;
i:=2;
x:=readd(i);
y:=readd(i);
z:=readd(i);
inc(PointsCount);
s:='|'+inttostr(x)+'|'+inttostr(y)+'|'+inttostr(z) +'|';
RecordPath.Add(s);
SendMsg2('добавлен чекпоинт № '+inttostr(PointsCount));
msg.Lines.Add('добавлен чекпоинт № '+inttostr(PointsCount));
end;
//......................................

Lynx
14.05.2009, 00:34
Спасибо, посмотрел, нашёл полный. Сам хотел писать почти такой же.(Вот, блин, совпадение :) )

Johnson
14.05.2009, 12:06
Проблема такая: не могу загрузить/записать файл.
делаю следующим образом:

try
ItemsName.LoadFromFile('.\itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;

Файл пробовал кидать и в корень пакетхака, и в папку скриптов.
пробовал SaveToFile, всеравно не пишет.
Подскажите, какая директория является стартовой?
PHX 3.4.1.61

Добавлено через 15 минут
Извиняюсь за своё дурошлёпство... забыл создать СтрингЛист
ItemsName:=TStringList.Create;

Посты можно удалить....

Lynx
14.05.2009, 15:16
Можно как-нибудь отлавливать пакеты, которые отправляет другой скрипт?

QaK
14.05.2009, 15:17
Lynx,можно.
З.Ы. чем отлавливать? для каких целей?

Lynx
14.05.2009, 19:22
Цель:
Сделать так, чтобы этот (http://coderx.ru/showthread.php?t=1650) скрипт ловил пакет 01 на сервер от этого (http://coderx.ru/showthread.php?t=354)
Не изменяя последнего.

TAMBIK
17.05.2009, 20:24
Добрый....... Помогите искал ненашел иль плохо искал или непонял какой кусок скрипта отвечает чтоб бафер сам себя бафал когда закончился баф
надо маленький такой скрипт .как сделать неумею а похожего в скриптах
неувидил. подскажите немного. или ОТПРАВТЕ по адресу где такое
возможно

Lynx
18.05.2009, 00:46
Инфа о бафах не в userinfo, случайно приходит?
Если не ловить пакеты: Допустим баф на хп, или на ноги. Сверяешь своё кол-во хп с нормой, или скорости.

QaK
18.05.2009, 08:38
Lynx, нет, не в юзеринфо, пакет называется AbnormalStatusUpdate.

TAMBIK
19.05.2009, 15:44
Добрый....... Помогите искал ненашел иль плохо искал или непонял какой кусок скрипта отвечает чтоб бафер сам себя бафал когда закончился баф
надо маленький такой скрипт .как сделать неумею а похожего в скриптах
неувидил. подскажите немного. или ОТПРАВТЕ по адресу где такое
возможно
Немного не так вопрос
Я вот нашел куски ток незнаю как все должно работать . связать все чтоб работало.Хочу вставить в скрипт для баферов.
Я вкл скрипт посылаю команду баферу или сам бафером вешаю баф надо чтоб бафер через определенное время пусть 15 мин сам себя бафнул то есть я подхожу и посылаю команду баферу на баф воина чтоб не терять время и бафер после того как бафнет себя наберет ману.
может кто поможет правильно оформить скрипт
из скрипта:
//Bot by Skymanrus
//modified by NLObP специально для Владера, моего сына!

offs1, xm, ym : integer;

heal, kill : string;
MaxHP, MyZpos, cvaZ, CurHP, ID, xpos, ypos, skill, MyID, PercentHP, MEsit: integer;
MEup, but, sud, bst, Radius, cvaX, attackIDMinID, attackk, attackID, cvaY, zpos: integer;
Hpotion, Apotion, MyXpos, MyYpos, rezu, MaxX, MaxID, MinID, MinX: integer;
sit, povtor, tame, gdo, npc : Boolean;

bfi, atck, hpi, i, ii: integer;
timer3: TTimer;


procedure Init; //УПРАВЛЯЮЩИЕ ПЕРЕМЕННЫЕ
var
i: integer;
bfi:=60; //60 сек, чтобы бафы не пропустить
ii:=1;

//баффы
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3; //
timer3.enabled:=true; // таймер по умолчанию выключен
timer3.interval:=60000; // первый баф через 60 сек
//************************************************** *************

procedure OnTimer2(Sender: TObject); //
begin
//контролируем бафы, если время бафов, то пытаемся бафаться каждую секунду
dec(bfi);
if bfi<0 then begin
timer3.interval:=1000; //каждые 1 сек
bfi:=1200; //20 мин
end;
=========================
//************************************************** *************
procedure OnTimer3(Sender: TObject); //баффы
begin
//если никого не бъем, то надо бафаться
if (Summ(Aggro)=0) and (sit=false) then begin
case ii of
1: begin
timer1.enabled:=false; //откл. атаку
msg.Lines.Add('Баффаюсь Attack aura!');
MagicSkillUse(buff2);
inc(ii);
end;
2: begin
msg.Lines.Add('Баффаюсь Deflect arrow!');
MagicSkillUse(buff3);
inc(ii);
end;
3: begin
ii:=1;
timer3.interval:=1150000; //каждые 20 мин
bfi:=1150;
timer1.enabled:=true; //вкл. атаку
end;
end;
end;
end;

нашел
http://coderx.ru/showpost.php?p=7204&postcount=362

pmen
19.05.2009, 23:57
Я только учусь и поэтому не могли бы вы мне обьяснить функцию таймера?
А то я смотрю на примеры.....и не очень то втыкаю потому что они без комментариев! Немогли бы вы меня этому научить функции использования таймера на легких примерах =) Спасиб!

Добавлено через 1 минуту
Только не отправляте в крухок для нубовв))

J-Fobos
20.05.2009, 00:34
Сначало надо обьявить переменную типа TTimer глобально, на весь скрипт:

var
Timer01: TTimer;

Далее в процедуре Init, что вызывается при запуске скрипта, надо (грубо говоря) выделить таймеру память и задать начальные параметры:

procedure Init;
begin
Timer01:=TTimer.Create(nil); //выделяем памать и т.п.
Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию
Timer01.enabled:=true; //начальное положение включен(true)/выключен(false)
Timer01.interval:=500; //интервал(в милисекундах) как часто таймер срабатывает
end;

После этого надо написать процедуру
procedure OnTimer01(Sender: TObject);
begin
//тут набор команд, которые будут
//выполняться каждый раз, когда таймер сработает
end;

Более подробно можно прочесть в книжках по ObjectPascal.

lamer
21.05.2009, 19:42
//************************************************** ****************************
const
Name='хххххххх'; //ник перса
procedure ReqGetItem;
begin
if itm=0 then begin
timer1.enabled:=true; //включаем отсчет времени
needbackup:=false;
exit;
end;
timer1.enabled:=false; //выключаем отсчет времени
//перебираем базу
for i:=1 to max do begin
//если нашли, то обнуляем
if (ItemBase[1,i]<>0) then begin //ObjectID
say('ReqGetItem');
//даем команду подобрать вещь
buf:=#$1F;
WriteD(ItemBase[1,i]);
WriteD(ItemBase[2,i]);
WriteD(ItemBase[3,i]);
WriteD(ItemBase[4,i]);
WriteH(00);
SendToServerEx(Name);
end;
end;
end;
begin
//************************************************** **************************
//DropItem - выпала вещь
if FromServer and (ConnectName=Name) and (pck[1]=#$0D) then begin
//чужие вещи не берем
if (Attacker=ReadD(2)) then begin
timer1.enabled:=false; //выключаем бота
AddMob:=true;
//перебираем базу
for i:=1 to max do begin
//если нашли, то корректируем его координаты на новые
if (ItemBase[1,i]=ReadD(6)) then begin //ObjectID
ItemBase[2,i]:=ReadD(14); //x
ItemBase[3,i]:=ReadD(18); //y
ItemBase[4,i]:=ReadD(22); //z
AddMob:=false;
inc(itm);
NeedBackup:=true;
say('Корректируем данные по предмету');
end;
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем
for i:=1 to max do begin
if (ItemBase[1,i]=0) then begin
//запоминаем в свободную ячейку
ItemBase[1,i]:=ReadD(6); //ObjectID
ItemBase[2,i]:=ReadD(14); //x
ItemBase[3,i]:=ReadD(18); //y
ItemBase[4,i]:=ReadD(22); //z
inc(itm);
NeedBackup:=true;
say('Добавили данные по предмету');
break;
end;
end;
end;
say('ColvoItm='+inttostr(itm));
end;
//************************************************** **************************
//SpawnItem - валяется вещь
if FromServer and (ConnectName=Name) and (pck[1]=#$0C) then begin
timer1.enabled:=false; //выключаем бота
AddMob:=true;
//перебираем базу
for i:=1 to max do begin
//если нашли, то корректируем его координаты на новые
if (ItemBase[1,i]=ReadD(2)) then begin //ObjectID
ItemBase[2,i]:=ReadD(10); //x
ItemBase[3,i]:=ReadD(14); //y
ItemBase[4,i]:=ReadD(18); //z
AddMob:=false;
inc(itm);
NeedBackup:=true;
say('Корректируем данные по предмету');
end;
//иначе, перебираем базу, ищем свободную ячейку в ней и добавляем
for i:=1 to max do begin
if (ItemBase[1,i]=0) and AddMob then begin
//запоминаем в свободную ячейку
ItemBase[1,i]:=ReadD(2); //ObjectID
ItemBase[2,i]:=ReadD(10); //x
ItemBase[3,i]:=ReadD(14); //y
ItemBase[4,i]:=ReadD(18); //z
inc(itm);
NeedBackup:=true;
say('Добавили данные по предмету');
break;
end;
end;
end;
say('ColvoItm='+inttostr(itm));
end;

//************************************************** **************************
if Wait(time1,2000) and NeedBackup and (underAttack=false) then ReqGetItem;

//************************************************** **************************
//определяем реальность поднятия вещи
//GetItem
if FromServer and (ConnectName=Name) and (pck[1]=#$12) then begin
//перебираем базу
for i:=1 to max do begin
//если нашли, то обнуляем
if (ItemBase[1,i]=ReadD(6)) then begin //ObjectID
ItemBase[1,i]:=0; //ObjectID
ItemBase[2,i]:=0; //x
ItemBase[3,i]:=0; //y
ItemBase[4,i]:=0; //z
dec(itm);
//say('Удаляем данные по предмету');
end;
end;
if itm=0 then begin
needbackup:=false;
timer1.enabled:=true;
end;
say('ColvoItm='+inttostr(itm));
end;
end.
Обьясните где ошибка, вроде переделал под ХБ, ну и вставил привязку к персу по нику. Не работает и всё тут.)
Выдаёт ошибку при включении.

Niklan
21.05.2009, 20:50
Помогите не видет ник!
Не стирайте пост. ЕМАЕ В ПОИСКЕ НЕ ВЫДАЕТ РЕЗУЛЬТАТОВ, Сами там попробуйте найти. То менее 3 символов нельзя, а если писать без слов короче 3ех символов "по вашему запросу нечего не найдено"

QaK
21.05.2009, 20:56
Niklan, почитай FAQ (ссылка в моей подписи)
//alexteam: а я думал уже 3/3 -(

Grinch
21.05.2009, 21:09
жесть если не нашёл в подписи квака то посмотри ещё в моей :)
//alexteam: и у обоих одни и теже синтаксические ошибки...
//QaK: ну и что, подумаешь чуток очепятка, слово фак, по крайней мере, грамотно написано =)

Jeneok
23.05.2009, 21:24
Как мне купить привязку то?

QaK
24.05.2009, 10:01
Jeneok, http://coderx.ru/showthread.php?t=16

MrAak
24.05.2009, 15:51
Пожалуйста помогите, попробовал написать просто до ужаса скрипт для рыбалки. Без убивания монстров, просто отправка одного пакета при получении другого. При попытке выполнения что-то булькает и нехочет:confused:

begin
buf:=HStr('12F 20 05 00 67 0B 00 48 00 00');
SendToServer;
if FromServer and (pck=HStr('FE 16 00 18 55 1B 48 57 00 00 00 54 01 00 00 00 00 00 00 00 67 0B')) then begin
buf:=Hstr('2F 21 05 00 67 0B 00 48 00 00');
SendToServer;
end;
if FromServer and (pck=HStr('FE 16 00 18 55 1B 48 6A 00 00 00 56 01 00 00 01 00 00 00 00 67 0B')) then begin
buf:=Hstr('2F 22 05 00 67 0B 00 48 00 00');
SendToServer;
end;
end.


вот пакеты которые я отловил
2F 20 05 00 67 0B 00 48 00 00 //юз фишинг
FE 16 00 18 55 1B 48 6A 00 00 00 56 01 00 00 01 00 00 00 00 67 0B //рыба дергается
FE 16 00 18 55 1B 48 57 00 00 00 54 01 00 00 00 00 00 00 00 67 0B //не дергается
2F 21 05 00 67 0B 00 48 00 00 // скилл не дергается
2F 22 05 00 67 0B 00 48 00 00 //скилл дергается
FE 14 00 18 55 1B 48 49 //конец рыбалки

QaK
24.05.2009, 17:13
MrAak, почитай раздел "жесткий скриптинг". топ про рыбалку. там описан алгориитм и написан скрипт.

MrAak
24.05.2009, 18:05
я попробовал, не серве защита палит. Больно сложный там он...

alexteam
24.05.2009, 18:26
я попробовал, не серве защита палит. Больно сложный там он...
реакция::o

NLObP
24.05.2009, 18:51
MrAak, вот этот кусок тебе нужен
const
//имя чара для которого включаем скрипт
Name='NLObP'; //<------------------------------

fish=1312; //ID fishing
pump=1313; //ID pumping
reel=1314; //ID reeling

var
myoid : integer;

procedure Init;
begin
myoid:=0;
end;

procedure free;
begin
end;
//2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(S hiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
procedure Pumping;
begin
MagicSkillUse(pump);
end;
procedure Reeling;
begin
MagicSkillUse(reel);
end;

//************************************************** *************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** *************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;

//************************************************** **************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//************************************************** *************
#$04: begin //пакет с инфой о моём чаре
MyOID:=ReadD(18);
end;
//************************************************** *************
//ловим рыбу
//FE1300=ExFishingStart:h(charOID)d(fishType)d(X)d(Y )d(Z)b(isNightLure)b(c)
//FE1400=ExFishingEnd:h(charObjtId)b(isWin)
//FE1500=ExFishingStartCombat:h(charOID)d(time)d(HP) b(Fighting)b(LureType)b(isFishDeceptive)
//FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP )b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)
#$FE: begin
if (MyOID<>0) then begin
case pck[2] of
//FE1400=ExFishingEnd:h(charObjtId)b(isWin)
#$14: begin
if MyOID=ReadD(4) then begin
//действия после завершения рыбалки
end;
end;
//FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP )b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)
#$16: begin
if MyOID=ReadD(4) then begin
if (pck[16]+pck[18]=#$00#$00) then pumping;
if (pck[16]+pck[18]=#$01#$00) then reeling;
end;
end;
end;
end;
end;
end;
end;
end.

PS: забрасывать самому
PSS: не тестил

lamer
24.05.2009, 21:01
Народ подскажите что я зделал не так?
//QaK:пукнул 7 раз

MrAak
25.05.2009, 21:55
тупой вопрос

если я запускаю вот такой скрипт:
begin
buf:=HStr('2F 20 05 00 67 0B 00 48 00 00');
SendToServer;
Delay(25000);
end.

ну если он еше верный, другие пакеты проходить будут?

QaK
25.05.2009, 22:01
MrAak, нет, delay тормозит прием/обработку пакетов.

lamer
27.05.2009, 10:21
вот вам и кружок нубов - вопрос ответ.))
//QaK:какой вопрос - такой и ответ

Grinch
27.05.2009, 11:16
Delay(25000);
останавливает прием пакетов и отсылку если поставить подольше то будет дисконект с сервером, вообще пользоваться можно, но чем реже и меньше будут числа типа максимально вообще лучше 500 это полсекунды если ставить больше то уже будут видны рывки перемещения или что то подобное как будто мега лаги. так что ищите тут как сделать таймер сквозной.
такой ответ устраивает? ну это расшифровал совсем для детей из детского сада и младше

lamer
28.05.2009, 08:21
вот вам и кружок нубов - вопрос ответ.))
//QaK:какой вопрос - такой и ответ

QaK - я выложил скриптик, и попрасил лиш подсказать где ошибка в нём, что нет так зделал. А в ответ 0 +твои "романтические" высказывания.)))

QaK
28.05.2009, 08:51
lamer, в твоем посте отсутствует скрипт, или ссылка на него, а перерывать всю тему в поисках твоего скрипта смысла нет.

NLObP
28.05.2009, 09:25
я выложил скриптик, и попрасил лиш подсказать где ошибка в нём, что нет так зделал.

Ты про этот скрипт (http://coderx.ru/showpost.php?p=30501&postcount=405)?

Если да, то не описаны переменные, которые используются в скрипте.

lamer
28.05.2009, 15:08
Спс за ответ, жаль что он мне не о чём не говорит.
Ток не пишите, учи паскаль...:eek:

NLObP
28.05.2009, 16:20
Ток не пишите, учи паскаль...

Зачем тогда нас мучаешь вопросами, если не хочешь учить паскаль?
Прочти про паскаль хотя бы из чего состоит сама программа (пять десять страниц описания паскаля) и все станет понятно.

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

ПолуГость2
28.05.2009, 18:41
MrAak, нет, delay тормозит прием/обработку пакетов.
А пакеты, пришедшие во время задержки, остаются в очереди и обрабатываются потом, или уходят в песок?

alexteam
28.05.2009, 21:53
В очереди.. в tcp стеке..

people
30.05.2009, 00:59
Доброго времени суток все у меня проблема запускаю L2PacketHack потом l2 а при заходе на сервер вылитает ошибина Access violation at 1328781B in module 'l2phx'.Read of address 00000000. Версия L2PacketHack (3.2.0)

Добавлено через 32 секунды
Подскажите что сделать можно

TAMBIK
30.05.2009, 16:22
http://l2phx.pp.ru/
Попробуй поновее

TAMBIK
31.05.2009, 19:23
чет я тупой как после выполнения этого
'рут ': begin// кидаем root по aссисту
assist;
buf:=hstr('39 B1 04 00 00 01 00 00 00 00' );//Сtrl-зажата
SendToServer;
end;
выполнилосьAction;Action;
чтоб бафер шел за командиром

alexteam
31.05.2009, 19:38
засунуть акшин,акшин в таймер, обозвать его както помодному
и после

buf:=hstr('39 B1 04 00 00 01 00 00 00 00' );
SendToServer;
делать
modniytaymer.interval := время на каст и прочее
modniytaymer.enabled := true;
в обработчике таймера первой строчкой
modniytaymer.enabled := false;

Dagon
01.06.2009, 14:22
подскажите пожалуйста, как исправить ItemsID?
сервер перешел на грцию финал и теперь скрипт не видит инвентарь, вернее видит что там что то есть, но не видит что именно
скачивал последнюю версию l2phx, не помогло

QaK
01.06.2009, 14:26
Dagon, нужно или исправить файл ItemIDs*.ini, который лежит в папке ini или, что более вероятно, переписать скрипт под новые хроники, возможно изменилось смещение параметров предметов в инвентаре.

forexlll
01.06.2009, 14:49
Стартует L2phx 3.4.1.60
Успешно загрузили newxor.dll
Успешно загрузили inject.dll
Thread Start: основной поток ServerListen 216/3824
На 56574 зарегистрирован локальный сервер
Надёжно пропатчен новый клиент l2.exe (2716)
Перехвачен коннект на 91.79.33.56:2106
Thread Start: поток сервера Thread.SH 336/364 id:0
Thread Start: поток клиента Thread[id].CH 344/2072 id:0
Disconnect: отвалился сервер Thread[id].SH 336/364 id:0
WSA no error 0/316
WSA no error 0/360
Disconnect: отвалился клиент Thread[id].CH 344/2072 id:0
Thread Exit: поток сервера Thread[id].SH 336/364 id:0
Thread Exit: поток клиента Thread[id].CH 344/2072 id:0


ВЫХОДИТ вот такая хрень.......ещё в логе ошибки вываливаются
пробовал другую версию Phx.....там просто соединение отваливается и всё, что делать...подскажите плиз

[I]Добавлено через 1 минуту
Стартует L2phx 3.4.1.60
Успешно загрузили newxor.dll
Успешно загрузили inject.dll
Thread Start: основной поток ServerListen 216/3824
На 56574 зарегистрирован локальный сервер
Надёжно пропатчен новый клиент l2.exe (2716)
Перехвачен коннект на 91.79.33.56:2106
Thread Start: поток сервера Thread[id].SH 336/364 id:0
Thread Start: поток клиента Thread[id].CH 344/2072 id:0
Disconnect: отвалился сервер Thread[id].SH 336/364 id:0
WSA no error 0/316
WSA no error 0/360
Disconnect: отвалился клиент Thread[id].CH 344/2072 id:0
Thread Exit: поток сервера Thread[id].SH 336/364 id:0
Thread Exit: поток клиента Thread[id].CH 344/2072 id:0


ВЫХОДИТ вот такая хрень.......ещё в логе ошибки вываливаются
пробовал другую версию Phx.....там просто соединение отваливается и всё, что делать...подскажите плиз

залез на сервер.....
http://www.la2flex.ru
//QaK:где-то на форуме недавно писали про флекс, поищи ...

MrAak
01.06.2009, 19:34
могут ли одни и те же пакеты изменяться, сегодня один завтра он выглядит по другому?

Dagon
01.06.2009, 20:11
Dagon, нужно или исправить файл ItemIDs*.ini, который лежит в папке ini или, что более вероятно, переписать скрипт под новые хроники, возможно изменилось смещение параметров предметов в инвентаре.файл надо править все равно, так как появилось много новых предметов.
смещение параметров предметов - это с чем кушать?

QaK
01.06.2009, 21:54
MrAak, частично могут, существует уникальный идентификатор,для каждого моба/чара/нпц/вещи он свой, при релогине он,бы вает. менятся. соответственно меняяется данные. посылаемые клиентом/сервером.

xXxMassarakshxXx
02.06.2009, 18:28
Как узнать ID нпс,немогу некак понять,подскажите плиз

QaK
02.06.2009, 19:02
xXxMassarakshxXx, смотря какой, если NPC ID - пошарь в тырнете под свои хроники, учитывая то, что в пакете NPC Info приходит NPC ID +некоторая константа, для каждого серва своя.

xXxMassarakshxXx
02.06.2009, 19:27
я вот не могу не как отловить пакет NPC Info,нету такого.
при разговоре с нпс вылавливаю ток такие пакеты:
JoinPledge StopRotation CharCreateOk

NLObP
02.06.2009, 20:01
xXxMassarakshxXx, у тебя наверно не правильно пакеты показывает. Такой пакет, как "CharCreateOk" никак не может быть при общении с НПЦ. Проверь соответствие настроек пакетхака типа сервера твоему серверу.

xXxMassarakshxXx
02.06.2009, 23:37
хм чёт не выходит я вижу в пакетах ток който 7 значный ID походу мой ,а ид нпса в притык невижу,разьясните плиз что сделать ,мож чтото напутал( непрально отображало название пакетов изза того что я забыл сменить протокол версию на интерлюд).

Добавлено через 1 час 40 минут
0x1000A6E9 - и что ет такое,нашол дето,оно в каждом пакете от гмшопа повторяется, а что ето............

NLObP
03.06.2009, 01:06
xXxMassarakshxXx, в списке слева выбираешь пакет, справа внизу будет детальная расшифровка пакета. Ищи там нужные данные.

xXxMassarakshxXx
03.06.2009, 01:43
Tип: 0x16 (NpcInfo)
Pазмер: 224+2
Время прихода: 23:38:18:125
0002 d ObjectID: 268478111 (0x1000A69F)
0006 d NpcTypeId: Кот Берил ID:1031774 (0xFBE5E)
0010 d IsAttackable: 0 (0x00000000)
0014 d X: -14050 (0xFFFFC91E)
0018 d Y: 123163 (0x0001E11B)
0022 d Z: -3112 (0xFFFFF3D8)
0026 d Heading: 0 (0x00000000)
0030 d d: 0 (0x00000000)
0034 d Maspd: 333 (0x0000014D)
0038 d Paspd: 278 (0x00000116)
0042 d runSpd: 132 (0x00000084)
0046 d walkSpd: 55 (0x00000037)
0050 d swimRSpd: 132 (0x00000084)
0054 d swimWSpd: 55 (0x00000037)
0058 d flRSpd: 132 (0x00000084)
0062 d flWSpd: 55 (0x00000037)
0066 d FlyRSpd: 132 (0x00000084)
0070 d FlyWSpd: 55 (0x00000037)
0074 f ProperMul: 1,1
0082 f Paspd: 1,00188000000162
0090 f CollisRadius: 8
0098 f CollisHeight: 15
0106 d RHand: 0
0110 d d: 0 (0x00000000)
0114 d LHand: 0
0118 c nameabove: 1 (0x01)
0119 c isRun: 0 (0x00)
0120 c isInFight: 0 (0x00)
0121 c isAlikeDead: 0 (0x00)
0122 c isSummoned: 0 (0x00)
0123 s Name: Beryl the Cat
0151 s Title: Gm Shop
0167 d d: 0 (0x00000000)
0171 d PvpFlag: 0 (0x00000000)
0175 d karma?: 0 (0x00000000)
0179 h abnEffect: 0 (0x0000)
0181 h d: 0 (0x0000)
0183 d d: 0 (0x00000000)
0187 d d: 0 (0x00000000)
0191 d d: 0 (0x00000000)
0195 d d: 0 (0x00000000)
0199 c c: 0 (0x00)
0200 c Team: 0 (0x00)
0201 f collisRadius: 8
0209 f collisHeight: 15
0217 d d: 0 (0x00000000)

я так понимаю что или я туплю,или у меня прога чёт нето выдает?1031774 чтото на ID не похоже
ура разобрался нашол блин)все спс,если б про константу ненаписал то долго бы морочился)

NLObP
03.06.2009, 02:08
я так понимаю что или я туплю,или у меня прога чёт нето выдает?1031774 чтото на ID не похоже

Надо константу отнимать (1000000) и получим 31774=Кот Берил

BbIXyXAJIb
03.06.2009, 08:19
подскажите мне я скачал последнюю версию зделал все как написано в инструкции и зашол на сервак но реакции от проги 0 подскажите что делать это может быть потомучто у меня виста?

Добавлено через 57 секунд
или подскажите сервак где пашет

Добавлено через 5 минут
и надоли убивать гг

Agriganosa
03.06.2009, 08:29
сдраствуйте всем кто поситил етот пост.
сразу же попрашу извенения за транслит.

я лазел на многих форумах и убедился то што прога действително работает как ниодна другая, проста для нее нужа умная голова которая разберается в етом.
я в етих вешях туповат, предупреждаю сразу.
такая проблемка:
Вопрос: Запустил прогу, потом клиент. Написанно Клиент Надежно пропатчен.
После этого начинаю вводить акк и пасс,и на этом все кончается. дальше просто когда нижимаешь "войти в игру" ничего не происходит(в прямом смысле ничего),выключаешь L2phx и в игру удачно заходит. Пробовал убивать GG. ничего не получилось,жду вашей помощи.
Решение: Добавить все порты окромя портов гс по которым соединяеться клиент в список игнорируемых. (проблему которую сдес описали я понел потамушто у меня такая же)
вот толко ето до меня недошло (Добавить все порты окромя портов гс по которым соединяеться клиент в список игнорируемых) <== ето как ?
обясните пожалуста очен хотелосби попробувать вашу прогу в действии )

Aw3some
04.06.2009, 00:14
я делал все как сказано в гайде но в списке соеденений нет моего ника.Что мне делать?

Добавлено через 2 минуты
И спустя некоторое вермя Считываем имя соединения...
Имя соединения:?????u??????{??
Считываем имя соединения...
Имя соединения:??????????
Считываем имя соединения...
Имя соединения:??????

Добавлено через 37 секунд
Что мне делать?

NLObP
04.06.2009, 01:03
Aw3some, скорее всего уже ничего не сделаешь. Попробуй последнюю версию пакетхака с LSP перехватом и проверь тип хроник сервера.

Agriganosa
04.06.2009, 07:48
сдраствуйте ещораз.
Вот проблемка . Я ненашол никаких постов поповоду етого. питался сделат все ни4его неполучается.
Запускаю клиент, устонавливаю опции, запускаю клиент игри Интелюд, ввожу логин и пасс, вилитаю из игри и ловлю критикал (General Protection Fault!)
што делат незнаю пробивал все. Ставил Сокет5 << толку от него нету логинюс в игру захожу но программа ни4его мне недает по поводу сервера.
прошу помоч заранее спасибо.
Сервер (l2mad.ru)

NLObP
04.06.2009, 11:59
Agriganosa, защита сервера от читеров. Здесь (http://coderx.ru/showthread.php?t=423) уже есть ответы.

hash
04.06.2009, 14:24
Переведите плиз в делфи код :)


Если волкер отправляет пакет "444" заблокировать его и отправить к серверу "333".


Вообщем нужно для обхода защиты от бота, а учить языки пока некогда :(

PanAm
04.06.2009, 15:55
hash, например так
begin
if FromClient and (Pck=#$XX#$XX#$XX) then
Pck :=#$YY#$YY#$YY;
end.
замена пакета XX XX XX на YY YY YY

TYRISTAS
04.06.2009, 16:50
Как зделать чтобы если на каче 2 перса но не в пати чтобы 1 из них который просто сапорт для заливки мп собирал дроп а то маг если начинает собирать дроп то кач меденый

Aw3some
04.06.2009, 18:05
Установил последнюю версию. Нашол мой ник но когда я жму отправить покет например на страйдера или на любой эпик нечего непроисходит. Но когда отправляю пакет с хиро свечением меня кикает с серва и пишет чтото про ГМ. Это защита на серве или что? Можно ли чтонибуть сделать?
//nlobp:защита, ничего не сдлелать

hash
05.06.2009, 02:51
hash, например так
begin
if FromClient and (Pck=#$XX#$XX#$XX) then
Pck :=#$YY#$YY#$YY;
end.
замена пакета XX XX XX на YY YY YY
Не понял как это будет выглядеть, мне нужно заменить Версию протокола:
Вот протокол который отсылает бот:
0E 53 03 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 00 00 00 00

А вот, который отправляет клиент:
0E 53 03 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06 DF B8 3B 54
Вот мне нужно, чтоб первый протокол при отправке был заблокирован (тоесть не дошел до сервера потому, что сразу буду кикнут) и место него отправился второй.

QaK
05.06.2009, 08:20
hash, сначала разбериь в основных понятиях и алгоритмах аутентификации.
Тебе же PanAm черным по пикселям написал:
begin
if FromClient and (Pck=Hstr('здесь вставляешь свой пакет, который надо заблокировать, в виде 98 56 АА 5А и так далее')) then
Pck :=Hstr('здесь вставляешь свой пакет, в виде 98 56 АА 5А и так далее');
end.

hash
05.06.2009, 12:06
hash, сначала разбериь в основных понятиях и алгоритмах аутентификации.
Тебе же PanAm черным по пикселям написал:
begin
if FromClient and (Pck=Hstr('здесь вставляешь свой пакет, который надо заблокировать, в виде 98 56 АА 5А и так далее')) then
Pck :=Hstr('здесь вставляешь свой пакет, в виде 98 56 АА 5А и так далее');
end.
Оказалось все не так просто как я думал, сервер каждый раз шлет разные запросы при авторизации на гейм серве, а клиент и бот разные ответы, но названия пакетов теже, что с этим можно сделать? :confused:
И где вообще можно почитать про защиту от ботов на серверах, не подскажешь?

alexteam
05.06.2009, 12:30
begin
if pck = '' then exit;
if FromClient and (Pck[1]=#$0E) then
begin
buf := pck;
pck := '';
writed(746, 2); //вписываем чтото по офсету 2...
sendtoserver;
end;
end.

......

Добавлено через 4 минуты
естественно я его и даже не думал проверять...
но по идее именно то..

PanAm
05.06.2009, 15:22
Оказалось все не так просто как я думал, сервер каждый раз шлет разные запросы при авторизации на гейм серве, а клиент и бот разные ответыпакет 0E не ответ на запрас, если он всегда разный, то тут 2 варианта или 4 последни байта мусор (например сервер проверяет чтоб они небыли 00) или они генерируются на основе данных с логин-сервера, и тогда ПХ не поможет так как неработает с ним.

GERRARD
06.06.2009, 14:46
Нужен скрипт для покупки точек в ГК шопе если можете помогите:)))

Flash
06.06.2009, 18:03
Ребят а какая хлапа(версия) под грацию(первая часть)нужна?
И исчо вот у меня например из l2phx.3.4.1.80 вылетает,т.е йа гружу её и спустя несколько секунд она сворачиваецо в трей(исразу же офаецо)...и так происходит со многими версиями,подскажите из-за чего и как с этим бороцо...:(

QaK
06.06.2009, 18:29
Нужен скрипт для покупки точек в ГК шопе если можете помогите))погугли=)
подскажите из-за чего и как с этим бороцо...читай ФАК, стоит защита, попробую юзать ЛСП перехват.

GERRARD
06.06.2009, 20:27
[QUOTE=QaK;31566]погугли=)

я искал ниче не нашол если можешь дай плз ссылку,там ГМ шоп не просто выбрать точку и ок нажимать,а надо из 1 окна во 2 перетянуть скока надо и ОК нажать,вот с него мне надо точки скупать,если мож дай ссылку на такой скрипт

QaK
08.06.2009, 12:01
GERRARD, если у кого-то есть готовый скрипт, и он согласится его выложить - тогда забирай, если нет - жди, когда появится кто-нить добрый, который этот скрипт напишет, или, как вариант, предложи цену за скрипт.

InnocentManiac
08.06.2009, 22:43
помогите пожалуйста,при отправлении пакета вылетает вот такая штука в чате "You will be kicked for illegal action, GM informed." и вылитает дисконект,версия l2phx.3.5.11.118

8tomat8
08.06.2009, 23:02
InnocentManiac,
"You will be kicked for illegal action, GM informed."
Дословный перевод
"Вы будете выкинуты из игры за не легальное действие, ГМ проинформирован"
Это по тому что то та дырка в которую ты пытаешся потыкать уже заклеена)))
Или же не правельный пакет)

klemberg
09.06.2009, 12:34
Помогите пожалуйста нубу.
Пока что со всем получалось разобраться, но столкнулся с разбором пакета PledgeShowMemberListAll

Помогите распарсить пакет-список и получить данные о сокланах в виде:
ник;класс;лвл

Плиз. Просто не въехал как парсить списки и, думаю, это будет хорошим примером-семплом на будущее.
Если пропустил эту инфу на форуме - ткните носом плиз.

Спасибо.

QaK
09.06.2009, 12:50
klemberg, ты сам пакет выложи хотябы, для начала.

klemberg
09.06.2009, 13:25
пакет:
53 00 00 00 00 E8 3B 2C 10 00 00 00 00 55 00 4D 00 49 00 58 00 00 00 6F 00 6F 00 70 00 73 00 61 00 72 00 69 00 6E 00 00 00 B9 E5 3D 10 06 00 00 00 00 00 00 00 3D 00 00 00 00 00 00 00 24 18 00 00 00 00 00 00 00 00 00 00 E8 3B 2C 10 55 00 4D 00 49 00 58 00 00 00 F4 E1 3D 10 00 00 00 00 15 00 00 00 70 00 65 00 6E 00 64 00 75 00 72 00 6B 00 61 00 00 00 42 00 00 00 37 00 00 00 00 00 00 00 69 85 37 10 00 00 00 00 00 00 00 00 73 00 68 00 61 00 6E 00 64 00 61 00 72 00 69 00 73 00 00 00 4C 00 00 00 76 00 00 00 00 00 00 00 92 F7 02 10 01 00 00 00 00 00 00 00 65 00 76 00 61 00 63 00 75 00 61 00 74 00 6F 00 72 00 00 00 50 00 00 00 74 00 00 00 00 00 00 00 85 54 0D 10 01 00 00 00 00 00 00 00 62 00 61 00 73 00 74 00 61 00 72 00 64 00 6F 00 32 00 00 00 34 00 00 00 6E 00 00 00 00 00 00 00 8E A5 4B 10 00 00 00 00 00 00 00 00 62 00 6F 00 6F 00 6D 00 65 00 72 00 61 00 6E 00 67 00 00 00 4E 00 00 00 5C 00 00 00 00 00 00 00 A7 9B 45 10 00 00 00 00 00 00 00 00 4A 00 49 00 65 00 70 00 6F 00 34 00 6B 00 61 00 00 00 33 00 00 00 0D 00 00 00 00 00 00 00 EE 7D 24 10 00 00 00 00 00 00 00 00 61 00 31 00 74 00 65 00 72 00 00 00 4F 00 00 00 73 00 00 00 00 00 00 00 AE EB 57 10 00 00 00 00 00 00 00 00 46 00 4F 00 52 00 45 00 58 00 00 00 09 00 00 00 35 00 00 00 00 00 00 00 10 62 1E 10 00 00 00 00 00 00 00 00 73 00 6F 00 76 00 69 00 6E 00 69 00 6F 00 6E 00 00 00 34 00 00 00 5E 00 00 00 00 00 00 00 8C 38 2C 10 00 00 00 00 00 00 00 00 6F 00 6F 00 70 00 73 00 61 00 72 00 69 00 6E 00 00 00 4D 00 00 00 76 00 00 00 00 00 00 00 58 F4 50 10 01 00 00 00 00 00 00 00 69 00 6E 00 71 00 75 00 69 00 73 00 69 00 74 00 6F 00 72 00 00 00 4E 00 00 00 5A 00 00 00 00 00 00 00 B3 BE 0D 10 00 00 00 00 00 00 00 00 6C 00 65 00 66 00 74 00 73 00 74 00 72 00 65 00 61 00 6D 00 00 00 4F 00 00 00 70 00 00 00 00 00 00 00 91 9C 21 10 00 00 00 00 00 00 00 00 42 00 7A 00 64 00 6F 00 6F 00 00 00 50 00 00 00 75 00 00 00 00 00 00 00 A8 B0 1B 10 00 00 00 00 00 00 00 00 74 00 65 00 65 00 6E 00 6B 00 61 00 00 00 4C 00 00 00 76 00 00 00 00 00 00 00 E6 6D 1E 10 01 00 00 00 00 00 00 00 54 00 72 00 75 00 65 00 45 00 76 00 69 00 6C 00 00 00 50 00 00 00 74 00 00 00 00 00 00 00 2B EE 49 10 00 00 00 00 00 00 00 00 62 00 61 00 73 00 74 00 61 00 72 00 64 00 6F 00 00 00 34 00 00 00 6E 00 00 00 00 00 00 00 81 57 15 10 00 00 00 00 00 00 00 00 64 00 65 00 6D 00 6F 00 6C 00 69 00 74 00 69 00 6F 00 6E 00 00 00 50 00 00 00 69 00 00 00 00 00 00 00 7A 47 44 10 01 00 00 00 00 00 00 00 6C 00 75 00 74 00 69 00 71 00 75 00 65 00 00 00 50 00 00 00 6B 00 00 00 00 00 00 00 86 8A 1D 10 01 00 00 00 00 00 00 00 61 00 62 00 73 00 6F 00 6C 00 75 00 74 00 65 00 00 00 50 00 00 00 62 00 00 00 00 00 00 00 5F 9A 5A 10 00 00 00 00 00 00 00 00 73 00 79 00 70 00 65 00 72 00 6B 00 72 00 61 00 66 00 74 00 00 00 46 00 00 00 39 00 00 00 00 00 00 00 32 F7 56 10 01 00 00 00 00 00 00 00 61 00 73 00 68 00 61 00 6B 00 69 00 65 00 6C 00 00 00 50 00 00 00 64 00 00 00 00 00 00 00 CB 79 0A 10 01 00 00 00 00 00 00 00

фрагмент его расшифровки ПХ:
[Начало повторяющегося блока 15/21]
0682 s memberName: TrueEvil
0700 d memLvl: 80
0704 d memClassId: 116
0708 d d: 0
0712 d memObjId: 273280555
0716 d isOnLine: 0
0720 d d: 0
[Конец повторяющегося блока 15/21]
[Начало повторяющегося блока 16/21]
0724 s memberName: bastardo
0742 d memLvl: 52
0746 d memClassId: 110
0750 d d: 0
0754 d memObjId: 269834113
0758 d isOnLine: 0
0762 d d: 0
[Конец повторяющегося блока 16/21]

нужны данные memberName, memLvl, memClassId по каждому блоку.
//QaK:Цветами пометил кусок, дальше думай сам.
З.Ы. s - строка,d - четырехбайтное число

Добавлено через 28 минут
- Помогите разобраться, нужны данные А, Б, С
- А, Б, С выделил цветом. разбирайся сам.

Спасибо за помощь в выделении сказанного мной.

NLObP
09.06.2009, 14:28
klemberg, для лучшего отображения расшифровки пакета можно в packetsT0.ini заменить на это
53=PledgeShowMemberListAll:d(mainOrSubpledge)d(cla nID)d(pledgeType)s(clanName)s(LeaderName)d(clanCre stId)d(clanLvl)d(hasCastle)d(hasHideOut)d(Rank)d(r eputation)d(d)d(d)d(AllyID)s(AllyName)d(AllyCrestI d)d(isAtWar)d(memberCount:For.0007)s(memberName)d( memLvl)d(memClassId:Get.ClassID)d(d)d(memObjId)d(i sOnLine)d(d)
54=PledgeShowMemberListUpdate:s(playerName)d(Lvl)d (ClassId:Get.ClassID)d(d)d(objectID)d(isOnLine)d(p ledgeType)d(hasSponsor)
55=PledgeShowMemberListAdd:s(Name)d(Lvl)d(ClassId: Get.ClassID)d(d)d(d)d(isOnLine)d(pledgeType)


[Начало повторяющегося блока 1/21]
0100 s memberName: pendurka
0118 d memLvl: 66
0122 d memClassId: Bounty Hunter ID:55 (0x0037)
0126 d d: 0
0130 d memObjId: 272074089
0134 d isOnLine: 0
0138 d d: 0
[Конец повторяющегося блока 1/21]
[Начало повторяющегося блока 2/21]
0142 s memberName: shandaris
0162 d memLvl: 76
0166 d memClassId: Maestro ID:118 (0x0076)
0170 d d: 0
0174 d memObjId: 268629906
0178 d isOnLine: 1
0182 d d: 0
[Конец повторяющегося блока 2/21]

Вот скрипт (без проверки на работоспособность) по сбору данных MemberList
const
max=50;

var
BaseMemberName: array[1..max] of string;
BaseMemberList: array[1..max, 1..2] of integer;
{
1-memLvl
2-memClassId
}

procedure Init; //Вызывается при включении скрипта
begin
end;

procedure Free; //Вызывается при выключении скрипта
begin
end;

procedure MemberList;
{Создаем базу

Tип: 0x53 (PledgeShowMemberListAll)
Pазмер: 981+2
Время прихода: 13:22:34:140
0002 d mainOrSubpledge: 0 (0x00000000)
0006 d clanID: 271334376 (0x102C3BE8)
0010 d pledgeType: 0 (0x00000000)
0014 s clanName: UMIX
0024 s LeaderName: oopsarin
0042 d clanCrestId: 272491961 (0x103DE5B9)
0046 d clanLvl: 6 (0x00000006)
0050 d hasCastle: 0 (0x00000000)
0054 d hasHideOut: 61 (0x0000003D)
0058 d Rank: 0 (0x00000000)
0062 d reputation: 6180 (0x00001824)
0066 d d: 0 (0x00000000)
0070 d d: 0 (0x00000000)
0074 d AllyID: 271334376 (0x102C3BE8)
0078 s AllyName: UMIX
0088 d AllyCrestId: 272490996 (0x103DE1F4)
0092 d isAtWar: 0 (0x00000000)
0096 d memberCount: 21 (0x00000015)
[Начало повторяющегося блока 1/21]
0100 s memberName: pendurka
0118 d memLvl: 66
0122 d memClassId: Bounty Hunter ID:55 (0x0037)
0126 d d: 0
0130 d memObjId: 272074089
0134 d isOnLine: 0
0138 d d: 0
[Конец повторяющегося блока 1/21]
[Начало повторяющегося блока 2/21]
0142 s memberName: shandaris
0162 d memLvl: 76
0166 d memClassId: Maestro ID:118 (0x0076)
0170 d d: 0
0174 d memObjId: 268629906
0178 d isOnLine: 1
0182 d d: 0
[Конец повторяющегося блока 2/21]
[Начало повторяющегося блока 3/21]
0186 s memberName: evacuator
0206 d memLvl: 80
0210 d memClassId: Doomcryer ID:116 (0x0074)
0214 d d: 0
0218 d memObjId: 269309061
0222 d isOnLine: 1
0226 d d: 0
[Конец повторяющегося блока 3/21]
}
var
i, j, k: integer;
memberCount: integer;
begin
j:=96; //смещение для memberCount
memberCount:=ReadD(j); //количество итемов не должно превышать max!
for i:=1 to max do
begin
if (i<=memberCount) then begin
BaseMemberName[i]:=ReadS(j); //memberName
BaseMemberList[i,1]:=ReadD(j); //memLvl
BaseMemberList[i,2]:=ReadD(j); //memClassId
inc(j,16);
end else begin
for k:=1 to 2 do BaseMemberList[i,k]:=0; // забиваем нулями
BaseMemberName[i]:=''; //стираем
end;
end;
end;

//************************************************** ****************************
{
основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен
}
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;

//************************************************** **************************
if FromServer then
begin
case pck[1] of
//************************************************** **********************
#$53: MemberList; //пакет 0x53 (PledgeShowMemberListAll)
end;
end;
end.

klemberg
09.06.2009, 14:47
NLObP, спасибо, но это уже мелочи :)

Блин, я понял :)

вот то, что мне нужно было:
var
MEMBER_LIST: array of string;

procedure MemberList;
var
i, j: integer;
memberCount: integer;
begin
j:=96; //смещение для memberCount
memberCount:=ReadD(j); //количество итемов не должно превышать max!

SetLength(MEMBER_LIST, memberCount);

for i:=0 to memberCount-1 do
begin
MEMBER_LIST[i]:= ReadS(j) + ';' + IntToStr(ReadD(j)) + ';' + IntToStr(ReadD(j));
inc(j,16);
end;
end;

begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;

//************************************************** **************************
if FromServer then
begin
case pck[1] of
//************************************************** **********************
#$53: MemberList; //пакет 0x53 (PledgeShowMemberListAll)
end;
end;
end.


NLObP, спасибо огромное!!! ;)

OPASEN
13.06.2009, 08:36
Вот поймал пакеты в Гм шопе на покупку и обемена колов
1.04 46 A3 00 10 C5 3D 02 00 E3 64 00 00 22 F8 FF FF 00 -пакет таргет гм Шопа
2. 21 6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00 37 00 37 00 32 00 35 00 34 00 5F 00 6D 00 75 00 6C 00 74 00 69 00 73 00 65 00 6C 00 6C 00 20 00 30 00 33 00 32 00 00 00 -Слово Обеменик нажал
3.Пакет Обемена 10 колов A7 20 00 00 00 40 0D 03 00 0A 00 00 00 00 00 00 00 00 00 00 00
4.04 44 A3 00 10 C5 3D 02 00 E3 64 00 00 22 F8 FF FF 00 -Пакет Таргет Гм шопа
5.48 19 3E 02 00 26 65 00 00 22 F8 FF FF 4C 1B 00 00 00 00 00 00 -Поговрить с гм Шопом
6.пакет я хочу купить точек 21 6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00 37 00 37 00 32 00 35 00 32 00 5F 00 6D 00 75 00 6C 00 74 00 69 00 73 00 65 00 6C 00 6C 00 20 00 30 00 31 00 39 00 00 00
7.A7 13 00 00 00 20 DF 50 00 43 00 00 00 00 00 00 00 00 00 00 00 -купил точки
Вот несколько пакетов с гм шопами Подсажите плз что нужно заменить в скрипте с помошью пакетов чтобы он сам покупал Ы блесс арм точки и менял колы

TakT
14.06.2009, 21:03
Привет. Народ плз помогите с проблемкой. Пытался заменить ID вещи в пакете и отправить его на сервер (следовал строго по гайду) но после нажатия кнопки "Отправить" не происходит ровным с4етом ни4его. =/ Пробовал GG убить, но это ни4его не изменило. Версия проги самая новая. Пробовал на 3-х серверал Интерлюд. На первом просто-напросто при попытке совершить любое действие (вплоть до перемещения перса) появляется раздражающая табли4ка "Disconnect" =/. На 2 и 3 сервах не происходит ни4его. В программе все настроенно как нужно, лог показывает, пакеты тоже. По виду все норм. В общем кто может помо4ь советом о4ень прошу -)
ЗЫ Сори если не там написал или еще 4егото не то, 1 день на форуме -)

Lynx
14.06.2009, 21:09
Дай ссылку на гайд, по которомы ты следовал, не очень понятно, что ты хочешь. В каком пакете изиенял id? Убийство gg не на что не повлияет.

TakT
14.06.2009, 21:14
Гайд от MarShall http://mmoworld.info/f8/gaid-po-l2phx-paketnyi-urovenue-gaid-1107/ . Пакет на покупку оружия (например Elven Long Sword) , потом, я изменил ID оружия (например на Soul Separator Crt. Damage). Итог - Сепаратор должен был купиться за цену Elven Long Sword'а, который существенно дешевле.
З.Ы. Там в гайде все подробно описано.

Lynx
14.06.2009, 22:28
Если вы играете на дырявом сервере, то у вас безусловно получится этот трюк, но скорее всего вас просто выкинет

Не очень понятно, почему другая одна должна купиться по цене другой, мы же изменяем ID.

NLObP
14.06.2009, 23:36
TakT, ты сразу на тот форум иди, там рассматривают такие вопросы, здесь - нет.

TakT
15.06.2009, 10:26
Не очень понятно, почему другая одна должна купиться по цене другой, мы же изменяем ID.
Допустим и так, но тогда оружие должно было бы купиться хотябы по своей цене! А оно не покупается никак =/

NLObP
15.06.2009, 13:29
TakT, сначала приходит SellList в котором расписано, что и по чем можно купить (насчет почем это я погарячился наверное). На основании него надо делать запрос на покупку. Если вставлять не относящиеся к делу значения не факт, что что-то купиться.

PS: закругляемся с читами через пакеты.

Daream
15.06.2009, 16:03
скажите пожалуйста почему при отправки пакета или скрипта перс сразу перестаёт двигатся.Хотя пакеты всеравно приходят с сервака.Можно что нибуть зделать?

QaK
15.06.2009, 16:49
Daream, потому, что гладиолус, а если серьезно - хз, что-то где-то стопорится на отправку пакетов, а на прием исправно работает, написал бы для начала какую версию юзаешь, и вообще, почитай FAQ там пример грамотно заданного вопроса есть ну и может чего для себя найдешь.

Arseny
15.06.2009, 22:49
скажите пожалуйста почему при отправки пакета или скрипта перс сразу перестаёт двигатся.Хотя пакеты всеравно приходят с сервака.Можно что нибуть зделать?

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

gtynfujy924
16.06.2009, 19:49
Подскажите пож. где можна найти скрипт для одновременного спойла и манора, для бота, под Интерлюд. Или даже, как изменить скрипт Locomotiv-04+Spoil&Sweep, где именно вписать сам манор, семя как посеять.. даже что бы было без харвестера...
p.s. Пишу сюда, так как считаю себя большим нубом в скриптинге.. поиск юзал, на манор ничего не нашел.

QaK
16.06.2009, 20:18
gtynfujy924, менять в скрипте надо очень много, потом тестировать, материться и еще все переделывать.Поэтому,твоей настольной книжкой, ближайший месяц, должна стать книжка по основам Паскаля. Про то, где найти скрипт для бота - ошибся веткой и гугль тебе в помошь.

smoker
17.06.2009, 07:58
Приветствую.
Столкнулся с проблемой на EU Off сервере. В общем геймгвард палит этот софт... Пишет мол "Hacking tool detected". Как можно решить проблему не убивая геймгвард?

З. Ы. Версия l2phx 3.4.1.83

Grinch
17.06.2009, 18:19
Как можно решить проблему не убивая геймгвард? воспользоваться более новой прогой это раз. убить ГГ без палива, как это сделать гугл в помощь

smoker
17.06.2009, 19:10
Скачал самый свежий билд софта. Всеравно геймгвард палит. А работать на офе без геймгварда сцыкатно. Говорят это палят и при одном из бан хаммеров отправляют нарушителя в бан...

Ofsety
18.06.2009, 01:06
Я только недавно узнал об вашей проге, штука крутая , только я не в теме, что к чему,
например как я понял я могу сделать так что бы когда я куплю в магазине хомку у меня в инвентаре появилась арка , иои СОМ???
а как так сделать?
можно пошагово, пожалуйста, или ссылочку где это описываеться
//alexteam: в шапке форума инструкции.
//QaK:Поздно пить боржоми, когда печень отвалится,Ofsety, бан неделя.

Smz
18.06.2009, 13:19
Играю на фанаж.ру
вроде бы гг у них нету , идругих подозрительных вещей, но когда я лог ин , написано , клиент обновлен , а в графе соединение - пусто - ника нету
почему?
что я не так сделал?

Lynx
18.06.2009, 22:48
Может забыл включить в настройках перехват?

atlivan
18.06.2009, 23:20
Хочется сдлать так чтоб гном крафтер который продаёт и крафтит соски (на волкере) ещё и бегал когда нужно в ВХ и брал недостающие материалы (или покупал в магазине). Стандартными средствами волкера не получилось такое сделать. Решил при помощи l2ph , но что-то у меня не совсем получилось.
Вот что я сделал:


begin
if FromClient and (ConnectName='xxx') // SetPrivateStoreListSell
and (pck[1]=#$31) then begin
buf:=HStr('56 0A 00 00 00 00 00 00 00 00 '); // RequestActionUse
SendToServerEx('xxx');
pck:='';
end;
end.

т.е. когда гном садится на торговлю, я ему говорю чтоб вставал, и далее работа скрипта волкера:


label(aaa)
CharStatus(STAND,==,1)
{
SET(L2WALKER,DISABLE)
call(zatarka)
}
jmp(aaa)
label(zatarka)
...... // делаем что нам надо
SET(L2WALKER,ENABLE)
delay(1000)
return


всё вроде хорошо, всё отрабатывается чётко, только один момент когда уже действительно надо присесть на торговлю он всё равно не даёт, что посоветуете сделать?
Было бы неплохо сделать проверку конечно по спирит или соул оре, но что-то я даже не представляю себе как, если поможете буду премного благодарен.
В ходе изучения возникло 3 проблемки:
1. Скрипт после выключения всё равно продолжает выполняться в клиенте и блокировать пакеты.
2. Во фрейме "дополнитильно" когда на поле скрипта нажимаешь всегда выдаёт ошибку Access violation ....
3. Когда закрываешь программу всегда она дисконектит клиент.

Надеюсь на вашу помощь, заранее спасибо.

Забыл добавить сервер евро офф, версия программы l2phx.3.5.12.120

NLObP
19.06.2009, 01:41
Smz, если хочешь чтобы тебе могли помочь, то надо сообщение правильно оформить. Создай тему с внятным названием, оформи как в ФАКе написано, плюс выложи скрины настроек и скрины того, что по твоему мнению не получается.

Добавлено через 7 минут
В ходе изучения возникло 3 проблемки:
1. Скрипт после выключения всё равно продолжает выполняться в клиенте и блокировать пакеты.
Сделай включение/выключение скрипта по социальному действию, например.

2. Во фрейме "дополнитильно" когда на поле скрипта нажимаешь всегда выдаёт ошибку Access violation ....

Где ты это нашел? Ты про составление/просмотр пакета? У меня там прекрасно все вставляется и показывается.

3. Когда закрываешь программу всегда она дисконектит клиент.

Так и должно быть, ты же разрываешь связь клиента с сервером через пакетхак.

Stasrus
19.06.2009, 03:20
Как можно выдернуть определенную часть пакета при постоянно изменяющемся пакете?
Например нужно сделать проверку есть ли в пакете xyz часть Z или нет, сам пакет постоянно меняется таким образом xyz, zxy, yzx и.т.д

NLObP
19.06.2009, 19:07
Stasrus, где ты такие пакеты берешь? Дай пример такого пакета.

Stasrus
19.06.2009, 20:51
NLObP,7F

Archibal
19.06.2009, 21:38
Здаствуйте!
Вопрос первый как можно увеличить скорость отсылки пакетов в l2phx.3.5.11.118 а то больше чем 0.1 секунда нельзя а в старых версиях можно было и по 1 милисекунде отправлять.
второй : незнаю с чем это связано но с выходом l2phx.3.5 пинг к серваку показываеться наборот намного выше чем есть а в старых 3.2-3.4 стабильно минимальный , и влияет ли это на что-то? спасибо

alexteam
19.06.2009, 21:45
1. Скриптами.
2. пинг в окошке выбора сервера вообще не показатель.

Archibal
19.06.2009, 21:49
1. Скриптами.

можно по подробнее как-то ? = практическое решение проблемы - а то скрипты я не пишу (

alexteam
19.06.2009, 21:59
написано на коленке.

var
timer:ttimer;

procedure ontimer(sender:tobject);
begin
pck := hstr('packet'); //пакет
sendtoserverex('charname');
end;

procedure init;
begin
timer := ttimer.create(nil);
timer.ontimer := @ontimer;
timer.interval := 10; //интервал (ms)
timer.enabled := true;
end;

procedure free;
begin
timer.free;
end;

begin
end.