PDA

Просмотр полной версии : Автозакупка из ГМ шопа(Помогите создать)


Djekc
27.11.2009, 14:57
Доброго времени суток!

Помогите если не затруднит.Как реализовать скрипт на авто закупку из ГМ шопа?На сервере проблем с деньгами нет 21кол=2.1ккк.
Итак:Есть ГМ шоп в пункте обменник нужно поменять 20 кол на адену,потом из пункта шоп выбрать к примеру свитки->заточки и купить 100 блес Ы випон.Пробывал ловить по 1му пакету и отправлять на сервер смог получить только нажатие кнопочки купить,пробывал словить ряд пакетов(очищаю лог пакетов произвожу обмен коинов на адену и покупку скролов,копирую все полученные пакеты и отправляю серверу),результат нулевой.
Играю на сервере l2rx.com хроники камаэль-Хелбаунд.

TAMBIK
27.11.2009, 19:09
поменять 21 кол на адену
0x23 (RequestBypassToServer)
23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 39 00 30 00 30 00 31 00 00 00

0xB0 (MultiSellChoose
B0 39 4A 00 00 01 00 00 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
купить 100 блес Ы випон.
0x23 (RequestBypassToServer)
23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 39 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 34 00 30 00 30 00 31 00 00 00

0xB0 (MultiSellChoose)
B0 B1 36 00 00 25 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

вот пакеты какие ты должен выловит и потом отправить

нпс должен быть в таргете

Djekc
28.11.2009, 01:22
Мучался весь вечер и всю ноч,я только начал писать по этому прошу прощения за неграмотность...
begin
if FromClient and (ConnectName='xxx')
and (pck=HStr('1b 04 00 00 00')) then begin //Если l2ph получил этот пакет от ххх то --->
buf:=HStr('B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
');//<---отправить это
SendToServerEx('xxx');//<--- от имени
pck:='';
end;
end.
Я так понимаю что при нажатии соц Виктори должно обменяться 20 колов на Адену?Но почему то л2пнх не ловит нажатие соц действия=\
P.S:Нпц был в таргете,версия л2пнх 3.5.28.151
P.P.S:При отправки пакета MultiSellChoose
B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

20 колов меняеться на 2ккк адены.НПЦ выбран в таргет.Еси не выбрать НПЦ и отправить пакет кикает с серва(эт я наверно зря дописал,но мало ли,может это важно)

TAMBIK
28.11.2009, 02:09
and (pck=HStr('1b 04 00 00 00'))
1b это для интерлюда
а для камель надо 34 пакет соцдействия
04 само действие
если не в таргенте то кому предназначен пакет ??
поэтому и кикает

Djekc
28.11.2009, 03:57
Спасибо исправил,заработало на половину...
Обмен коинов
begin
if FromClient and (ConnectName='Djekc')
and (pck=HStr('34 02 00 00 00 ')) then begin
buf:=HStr('B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx('DJekc');
pck:='';
end;
end.
Покупка 100 блесов
begin
if FromClient and (ConnectName='Djekc')
and (pck=HStr('34 03 00 00 00 ')) then begin
buf:=HStr('B0 B1 36 00 00 25 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx('DJekc');
pck:='';
end;
end.
Просидел пол ночи так и не дошло как обьеденить всё это в 1 скрипт,еще проблема в том что пакет мультиСеллЧёйс посылаеться,кот выбран в таргет,но ничего не происходит пока сам не зайдёш в ГМ шоп и не поменяеш коины/купиш блесы,потом начинает по соц действию покупать тока что нить одно(то чно было куплено последним).
Пробовал обьеденить скрипт в один что бы просто клацать на 2 соц действия...Не вышло,скрипт запускаеться,но походу не совсем работает
begin
if FromClient and (ConnectName='Djekc')
and (pck=HStr('34 02 00 00 00 ')) then begin
buf:=HStr('B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx('DJekc');
pck:='';
end;
if FromClient and (ConnectName='Djekc')
and (pck=HStr('34 03 00 00 00 ')) then begin
buf:=HStr('B0 B1 36 00 00 25 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx('DJekc');
pck:='';
end;
end.
Короче литр кофе,мигрень и практически ни какой результат,делаю вывод что скриптописатель из меня никакй,если у кого есть рабочий скрипт на автозакупку или комуто не сложно написать поделитесь.Чесно,приложил все усилия но ничего не вышло,вообще задумка была такая:
Подходиш к НПЦ меняеш n колов на адену(ловим пакет мультиСелЧёйс),потом покупаеш необходимый предмет или n-кол-во предметов(ловим второй пакет МультиСелЧёйс),указываеш сколько раз повторить и жмёш к примеру соц действие ДА тем самым запуская цикл на указанное количество раз.
P.S:Честно я старался!Но толи мозги у мя не те,то ли поздно и голова в поряде болит,обидно,а ведь это довольно простой скрипт=\

Djekc
28.11.2009, 10:46
Ловлю пакет колы-адена, ловлю пакет адена-точки, ставлю в посылку и то время которое нужно.
И как?Всё чётко срабатывает?Просто у меня чз отправку вроде тож всё работает но иногда при посылки МультиСелЧёйс тупо нет реакции пока не купиш то что посылаеш руками...Та же беда со скриптом

Добавлено через 31 минуту
Проснулся с утра ис новыми силами поштудировал не много инет на предмет оператора if then else и смог таки более мение ровно слепить 2 скрипта в 1
//автоматизация закупки
const
//================================================== ========================================
myname='xxx'; //<<== пишем свой НИК
//================================================== ========================================
begin
//начало условия
if FromClient and (ConnectName='myname')
and (pck=HStr('34 02 00 00 00 ')) //Соц.действие hello
then
begin
//=================================Обмен коинов============================================ ==
buf:=HStr(''); //пакет RequestBypassToServer обмена колов
SendToServerEx('myname');
pck:='';
//между этими 2мя пакетами хотел бы поставитбь задержку в 100 мс,но не знаю как...
buf:=HStr('');//пакет MultiSellChoose обмена колов
SendToServerEx('myname');
pck:='';
end
//================================================== =========================================
else
//=============================Покупка необходимого====================================== ======
if FromClient and (ConnectName='myname')
and (pck=HStr('34 03 00 00 00 '))//Соц.действие victory
then
begin
buf:=HStr(''); //пакет RequestBypassToServer покупаемой вещи
SendToServerEx('myname');
pck:='';
//между этими 2мя пакетами хотел бы поставитбь задержку в 100 мс,но не знаю как...
buf:=HStr('');////пакет MultiSellChoose покупаемой вещи
SendToServerEx('myname');
pck:='';
end;
//================================================== ==========================================
//конец условия
end.
Сей час нет возможности зайти в игру,но надеюсь будет работать.
P.S:Просьба к TAMBIK если не тяжело подскажи чз какие функции(или где можно об этом доступно почитать)можно сделать так что бы не приходилось ловит каждый раз по новой пакеты мультиселчёйс если захочиться сменить покупку блесов на чё нить еще или поменять колво обмениваемых коинов/покупаемых точек.

TAMBIK
28.11.2009, 12:06
// ================================================== ===============
const
Name='ххххх';

var
Timer01: TTimer;
x :integer;

procedure OnTimer01(Sender:TObject);// процедурa таймера
begin
case x of
1: begin
buf:=hstr('пакет №1');
SendToServerEx(Name);
inc(x);
end;
2: begin
buf:=hstr('пакет №2');
SendToServerEx(Name);
inc(x);
end;
3: begin
buf:=hstr('пакет №3');
SendToServerEx(Name);
inc(x);
end;
4:begin
buf:=hstr('пакет №4');
SendToServerEx(Name);
Timer01.enabled:=false; // отключили таймер
x:=0;
end;
end;
end;
procedure Init;
begin
x:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=2000; //<<== время интервал 1000 = 1 секунда
end;

procedure Free;
begin
Timer01.free;
end;
//-------------------------
begin
// при приходе пакета № 34 от клиента и если выполнена соцдействие victory = 3
if FromClient and (pck[1]=#$34) and (ReadD(2) = 3) then begin //
x:=1; // указатель какое действие в процедуре таймера начать выполнять
Timer01.enabled:=true; // включить таймер
pck:='';
exit;
end;
end.

Добавлено через 2 минуты
можно сделать так что бы не приходилось ловит каждый раз по новой пакеты
посмотри тему автозаточка просто от MKS
там как запомнить пакет

Djekc
28.11.2009, 12:22
Спасибо за помощь,вроде разобрался что и к чему,есть догадка что все 4 пакета будут посылаться друг за другом без задержки,но думаю я это смогу исправить,тему от MKS гляну,может выйдет вставить считывание пакетов.

TAMBIK
28.11.2009, 16:00
Djekc,
есть догадка что все 4 пакета будут посылаться друг за другом без задержки,
Timer01.interval:=2000; //<<== время интервал 1000 = 1 секунда

интервал между пакетами
2000; //<<== время интервал

Djekc
29.11.2009, 04:07
Странно,вроде всё должно работать Но при попытке начать скрипт,тобиш по нажатию соц.Виктори как раз чз 2 секунды кикает)))
case x of
1: begin
//пакет на обмен коинов RequestBypassToServer
buf:=hstr('23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 39 00 30 00 30 00 31 00 00 00 ');
SendToServerEx(Name);
inc(x);
end;
2: begin
//пакет на обмен коинов MultiSellChoose
buf:=hstr('B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx(Name);
inc(x);
end;
3: begin
//пакет на покупку точек RequestBypassToServer (Какойто он сомтительно длинный=\ )
P.S:Понял ошибку 15 минут спустя,словил не тот пакет нужен был ('23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 39 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 34 00 30 00 30 00 31 00 00 00')
/================================================== =
buf:=hstr('D0 24 00 1C 00 00 00 D9 46 11 40 00 00 00 00 D7 46 11 40 01 00 00 00 D6 46 11 40 02 00 00 00 D5 46 11 40 03 00 00 00 D4 46 11 40 04 00 00 00 D3 46 11 40 05 00 00 00 D2 46 11 40 06 00 00 00 D1 46 11 40 07 00 00 00 D0 46 11 40 08 00 00 00 CF 46 11 40 09 00 00 00 CE 46 11 40 0A 00 00 00 CD 46 11 40 0B 00 00 00 C6 46 11 40 0C 00 00 00 BE 46 11 40 0D 00 00 00 BD 46 11 40 0E 00 00 00 BB 46 11 40 0F 00 00 00 BA 46 11 40 10 00 00 00 B9 46 11 40 11 00 00 00 B8 46 11 40 12 00 00 00 B5 46 11 40 13 00 00 00 B4 46 11 40 14 00 00 00 B2 46 11 40 15 00 00 00 B1 46 11 40 16 00 00 00 B0 46 11 40 17 00 00 00 AF 46 11 40 18 00 00 00 AE 46 11 40 19 00 00 00 AD 46 11 40 1A 00 00 00 AC 46 11 40 1B 00 00 00 ');
SendToServerEx(Name);
inc(x);
end;
4:begin
//пакет на покупку точек MultiSellChoose
buf:=hstr('B0 B1 36 00 00 25 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx(Name);
Timer01.enabled:=false; // отключили таймер
x:=0;
end;
end;
В общем ковыряюсь,щас буду пробовать выкинуть 2 действия отправки и отправлять только пакет MultiSellChoose.

Добавлено через 7 минут
Короче попробовал вот так изменить
case x of
1: begin
buf:=hstr('B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx(Name);
inc(x);
end;
2: begin
buf:=hstr('B0 B1 36 00 00 25 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');
SendToServerEx(Name);
Timer01.enabled:=false; // отключили таймер
x:=0;
end;
end;
Всё таже беда,даже если слать пакеты с задержкой 1.2.3.4.5 секунд ни чего не покупает,отслеживаю чз лог пакеты посылаються.Если самому обменять кионы-->-Адена и купить Точки,то ответ от сервера приходит только на 2ой пакет тобиш на покупку точек ну и сообвецвенно на оборот еси купить точки потом коины,то приходит ответ ток на пакет коинов...Ломаю голову,думаю как это можно исправить=\

После исправления пакета,по новой пробывал отправлять скрипотом 4 пакета,ничё не пойму,продолжает кикать с серва=(((
Есть догатка что кикает из за пакета RequestBypassToServer...

Моя догадка подтвердилась...
23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 39 00 30 00 30 00 31 00 00 00
После этого пакета кикает с сервера,хотя по идее не должно,кот выбран был в таргет,пробовал с открытым окном ГМ шопа и с закрытым результат 1 и тот же...
Ложусь наверно спать,утро вечера мудренее

Fer123
29.11.2009, 12:36
Я не знаюточно как правильно там на грации
procedure MultisellBypass(cmd : string);
begin
buf:=#$23;
WriteS('menu_select?ask=-11&reply='+cmd);
SendToServerEx(Name);
end;

"ask=-11" - постоянное значение
"reply= listID из пакета
B0=MultiSellChoose:d(ListID)d(EntryID)d(Amount)h(E nchantment)
Получается покупка состоит из
MultisellBypass('19001'); //Тут тоже самое что и в B0 d(ListID)
buf:=#$B0;
WriteD(19001);
WriteD(37); //entryid - тоесть ид самого предмета в списке
WriteD(1); //количество
и там дальше нули

TAMBIK
29.11.2009, 12:42
Djekc,
у мне в скрипте автозаточка для интерлюда покупка скрол

Djekc
04.12.2009, 12:16
В общем я еще немного попытался и понимаю что сам не разберусь,хоть убей не пойму почему кикает с сервера после пакета RequestBypassToServer.Ведь именно этот пакет отправляет клиент серверу когда я выбираю нужный пункт из меню ГМ шопа.Если тыпаться слать по очереди пакеты MultiSellChoose на адену и на точки ничёго не происходит пока не поменяеш 20 кол на адену и не купиш 100 блесов,как купиш серв начинает воспринимать этот пакет,но...Только на последнюю операцию,в моём случае обмен колов,т.к. я покупаю 100 блесов потом меняю коинывот так вот.
Ребят если вас не затруднит зайдите на сервер l2rx.com,может вы увидете то чего я не замечаю...Ведь у меня в этом не так уж и много опыта...Я создал там Акаунт и персонажа IQwertyI на нём,закинул коитнов и оставил у котов в гиране/
Сайт сервера: http://www.l2rx.com
Клиент для игры: Kamael:Hellbound
Игровой сервер: Relax Box
Ссылка на патч для игры на сервере:ftp://share.l2rx.com/kamael/system_kamael.rar
Акк: Djekc2
Пасс: 12341234

Fer123
04.12.2009, 17:11
Я бы помог тебе но у меня нет клиента хб.
P.S. зря ты пароль в открытую выложил, заберет кто нибудь коины, кто играет на твоем сервере.

Djekc
05.12.2009, 11:22
Других вариантов нет,или так или никак,я достаточно долго ломал голову в чем проблема,TAMBIK поправлял мои художества и лепил до кучи что бы хоть на чт то было похоже,по идее скрипт должен работать,но...Этот долбаный пакет RequestBypassToServer(Это выбор в ГМ шопе),из за него кикает с серва,а без него я так понимаю заставить работать скрипт адекватно не выйдет похоже...В общем,может кто и подскажет что нить,в теме есть и сами наработки скрипта и серверс с акком...

alexteam
05.12.2009, 11:39
при использовании RequestBypassToServer нужно стоять возле нпц в радиусе 150 от него и нпц должен быть взят в таргет (во всяком случае по сурсам l2j)

Djekc
05.12.2009, 20:15
при использовании RequestBypassToServer нужно стоять возле нпц в радиусе 150 от него и нпц должен быть взят в таргет (во всяком случае по сурсам l2j)
Это была одна из первых моих ошибок,я в курсе что нужно стоять рядом с ППЦ и НПЦ должен быть в таргете,ведь именно ему мы отправляем пакет,если таргета нет или таргет не тот нас кикнет с сервера,но всё равно спасибо за подсказку

alexteam
05.12.2009, 20:58
Значит чегото не учитываешь. скорей всего формат отсылаемого пакета неверен.

TAMBIK
05.12.2009, 22:04
Action не хватает

Djekc
06.12.2009, 14:20
TAMBIK если не сложно,обясни что за "action" не хватает и как его добавить.

TAMBIK
06.12.2009, 19:23
Djekc,
пакета
1F=Action:d(ObjectID)d(OrigX)d(OrigY)d(OrigZ)c(Act ionID)
первым должен идти перед двумя другими

а зачем те нужен скрипт такой ?

Djekc
07.12.2009, 02:02
Всё дело в том что стоимость 1го Гигант кодекса 200 Col'ов или 22к ноблес билетов(раньше было 5.5к фикс видимо).Так вот,за 21 Col можно купить 28к ноблес билетов.Тобиш на 200 Col'ов 10 книг,экономия однако=)
Но вся проблема в том что покупка этих самых билетов оч проблематична.
Открываем ГМ шоп у кота->Нажимаем кнопку обменник->Выбираем Кол/Адена->Выбрать кол на адену->Ввести необходимое количество(Максимум 21 КоЛ=2.1ккк)->Нажать принять->Нажать подтвердить->Нажать в меню шопа обратно->Нажать на кнопку Шоп->Нажать на кнопку Аксесуары->Нажать на Остальные->Выбрать ноблес билеты->Ввести количество(28к=21КоЛ)->Нажать принять->Нажать подтвердить...
Короче вот такая вот процедура с клацаньем и вводом цыфер,все это как то тупо и геморно,с покупкой точек или еше чего та же трабла...
Если бы всё было попроще я бы не стал заморачиваться на щет создания скрипта

Fer123
07.12.2009, 10:07
Выложи свои пакеты RequestBypassToSerever и MultisellChoose в зашифрованом и расшифрованом пакетхаком виде.

Djekc
13.12.2009, 20:26
RequestBypassToSerever
Расшифрованный:
Тип: 0x23 (RequestBypassToServer)
Размер: 65+2
Время прихода: 18:19:54:761
0002 s Command: menu_select?ask=-11&reply=19001
Зашифрованный:
23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 39 00 30 00 30 00 31 00 00 00

================================================== =====
MultisellChoose
Расшифрованный:
Тип: 0xB0 (MultiSellChoose)
Размер: 55+2
Время прихода: 18:23:42:779
0002 d ListID: 19001 (0x00004A39)
0006 d EntryID: 3 (0x00000003)
0010 d Amount: 20 (0x00000014)
0014 h Enchantment: 0 (0x0000)
Зашифрованный:
B0 39 4A 00 00 03 00 00 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

P.S:Извеняюсь что так затянул с ответом,оч много дел навалилось...

Fer123
13.12.2009, 21:19
По твоим данным вот написал скрипт. Должен работать, я не проверял.
Впиши свой ник, поставь время задержки какое надо, по нпц торгашу 2 раза клацни.

//автоматизация закупки
const
//================================================== ========================================
myname='xxx'; //<<== пишем свой НИК
//================================================== ========================================
var Timer : ttimer;
step:integer; actionpck:string;
//===================
procedure init;
begin
timer := ttimer.create(nil);
timer.interval := 1000; //vremya zaderzhki
timer.enabled := false;
step:=0;
end;
//=====================
procedure free;
begin
timer.free;
end;
//=====================
procedure MultisellBypass(cmd1,cmd2 : string);
begin
buf:=#$23;
WriteS('menu_select?ask='+cmd1+'&reply='+cmd2);
SendToServerEx(myname);
end;
//======================
Procedure BuyCOL(Sender:tobject);
begin
inc(step);
case step of
1: begin
buf:=actionpck;
SendToServerEx(myname);
end;
2: begin
buf:=#$22;
WriteS('zzz_relax_cat1_960.htm');
SendToServerEx(myname);
end;
3:MultisellBypass('-11','19001'); //list id magazina col'ov
4: begin
buf:=#$B0;
WriteD(19001);
WriteD(3);//entryid
WriteD(20); //Amount
buf:=buf+HStr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(myname);
timer.enabled:=false;
end;
end;
end;
//======================
Procedure BuyWhatever(Sender:tobject);
begin
inc(step);
case step of
1: begin
buf:=actionpck;
SendToServerEx(myname);
end;
2: begin
buf:=#$22;
WriteS('zzz_relax_cat1_905.htm');
SendToServerEx(myname);
end;
3:MultisellBypass('-9','14001'); //list id vtoroi pokypki
4: begin
buf:=#$B0;
WriteD(14001); //list id
WriteD(37);//entryid
WriteD(100); //kolichestvo
buf:=buf+HStr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(myname);
timer.enabled:=false;
end;
end;
end;
//******************
begin
//Hello
if FromClient and (ConnectName=myname) and (pck=HStr('34 02 00 00 00')) then
begin
step:=0;
timer.ontimer := @BuyCOL;
timer.enabled := true;
pck:='';
end;
//Victory
if FromClient and (ConnectName=myname) and (pck=HStr('34 03 00 00 00')) then
begin
step:=0;
timer.ontimer := @BuyWhatever;
timer.enabled := true;
pck:='';
end;
if FromClient and (ConnectName=myname) and (pck[1]=#$1F) then Actionpck:=pck;
end.

Если не поможет то тогда надо еще вставить двойной Action по нпц.

Djekc
14.12.2009, 02:03
Потестил скрипт,всё таже беда,после RequestBypassToSerever кикает с сервера,кот был в таргете шоп открыт...

NLObP
14.12.2009, 11:45
0002 d ListID: 19001 (0x00004A39)

Может быть он разный должен быть?

Fer123
14.12.2009, 12:22
Может быть он разный должен быть?
Судя по 3 пакетам которые вылаживал джекс он одинаковый
Потестил скрипт,всё таже беда,после RequestBypassToSerever кикает с сервера,кот был в таргете шоп открыт...
Когда именно выкидывает после покупки колов или заточек?
Открываем ГМ шоп у кота->Нажимаем кнопку обменник->Выбираем Кол/Адена->Выбрать кол на адену->Ввести необходимое количество(Максимум 21 КоЛ=2.1ккк)->Нажать принять->Нажать подтвердить->Нажать в меню шопа обратно->Нажать на кнопку Шоп->Нажать на кнопку Аксесуары->Нажать на Остальные->Выбрать ноблес билеты->Ввести количество(28к=21КоЛ)->Нажать принять->Нажать подтвердить...
Я вот думаю мб тут какая то защита, что надо делать все по порядку как ты написал.

P.S Я добавил в скрипт два Action, попробуй и отпишись. Теперь надо выделять кота после того как ты включаешь скрипт чтоб запомнить OID кота.

TAMBIK
14.12.2009, 15:52
одного хватит и кот в таргете должен находиться

Fer123
14.12.2009, 17:36
Точно! Исправил.

TAMBIK
14.12.2009, 18:10
Fer123,
тогда сделай так
один раз произвел обмен птом закупку все запомнить
и таймером отсылать все пакеты
у те получится !!!!!

Fer123
14.12.2009, 18:26
TAMBIK, пусть сначала попробует это, потом что нибудь придумаем.

Djekc
14.12.2009, 22:32
Всё равно продолжает рвать соединение как только уходит к серву пакет RequestBypassToSerever.Решил что может помоч делу лог пакетов когда меняеш колы на адену и покупаеш без включенного скрипта и сделал второй лог пакетов при включенном скрипте.Записывал лог в элвин виледж что бы меньше всякого мусора в логе было
Опишу ряд действий для двух файлов логов
Закупка скрипт выкл:
-=Исходная,стою у кота,кот не в таргете,очищаю окно лога пакетов перехожу в окно игры=-
Выб.Кота в таргет->Еще раз нажимаю на коте что бы открыть шош->Выб. Вкладку обменник->Выб.КоЛ/Адена->Выб.Коины на Адену->Ввожу число 20->Нажимаю принять->Нажимаю подтвердить->Нажимаю вернуться(Возвращает в основное меню Шопа или на 1ну вкладку назат)->Выб.Шоп->Выб.Свитки->Выб.Заточки->Выб.EAS(точки)->Ввожу 800->Нажимаю принять->Нажимаю подтвердить.

Закупка скрипт ВКЛ:
Исходная,стою у кота,кот в таргете,ни каких окон не открыто.Скрипт включен.
Выб.Кота в таргет->Еще раз нажимаю на коте что бы открыть шош->Выб. Вкладку "обменник"->Выб."КоЛ/Адена"->Выб."Коины на Адену"->Ввожу число 20->Нажимаю "принять"->Нажимаю "подтвердить"->Нажимаю "вернуться"(Возвращает в основное меню Шопа или на 1ну вкладку назат)->Выб."Шоп"->Выб."Свитки"->Выб."Заточки"->Выб."EAS"(точки)->Ввожу 800->Нажимаю "принять"->Нажимаю "подтвердить".(Я так понял это нужно было сделать что бы скрипт запомнил что куда и как).Закрываю все окна и теперь нажимаю соц действи виктори,по идее должно закупиться опред. количество предметов ноо,как только пакет RequestBypassToSerever появляеться в логе L2ph сервер кикает(Поставил не закрывать диалог в л2пх что бы сохранить лог от начала и до разрыва)...

SELLER
14.12.2009, 22:41
Djekc
Забей на попытки создать скрипт на автозакупку с помощью l2phx
У меня все давно реализовано еще полгода назад и работает ;-) без использования l2phx
Реализация буквально занимает 5 мин... и все что надо покупает ... хоть заточки хоть билеты на книжки

Просто поднапрягись ;-)
Привет от DEDUIIIKO ;-)

alexteam
14.12.2009, 22:55
Единственное отличие которое есть - временные штампы точнее интервал между сультиселлчозами.

TAMBIK
15.12.2009, 00:39
ПОПРАВИЛ

открыть ШОП
22 7A 00 7A 00 7A 00 5F 00 72 00 65 00 6C 00 61 00 78 00 5F 00 63 00 61 00 74 00 31 00 5F 00 39 00 30 00 30 00 2E 00 68 00 74 00 6D 00 00 00
-----------------------------------------------------
выбор свитки
22 7A 00 7A 00 7A 00 5F 00 72 00 65 00 6C 00 61 00 78 00 5F 00 63 00 61 00 74 00 31 00 5F 00 39 00 30 00 35 00 2E 00 68 00 74 00 6D 00 00 00
-----------------------------------------------------
купил ......
------------------------------------------------------
вернуться
22 7A 00 7A 00 7A 00 5F 00 72 00 65 00 6C 00 61 00 78 00 5F 00 63 00 61 00 74 00 31 00 5F 00 30 00 30 00 31 00 2E 00 68 00 74 00 6D 00 00 00
=============================================
открыть обменик
22 7A 00 7A 00 7A 00 5F 00 72 00 65 00 6C 00 61 00 78 00 5F 00 63 00 61 00 74 00 31 00 5F 00 39 00 36 00 30 00 2E 00 68 00 74 00 6D 00 00 00
-------------------------------------------------------
обменял...
------------------------------------------------------
вернуться
22 7A 00 7A 00 7A 00 5F 00 72 00 65 00 6C 00 61 00 78 00 5F 00 63 00 61 00 74 00 31 00 5F 00 30 00 30 00 31 00 2E 00 68 00 74 00 6D 00 00 00
вернуться
0002 s Command: zzz_relax_cat1_001.htm

Fer123
15.12.2009, 12:12
Я так понял это нужно было сделать что бы скрипт запомнил что куда и как
Нужно только включить скрипт потом выделить кота, чтоб скрипт запомнил его ид.
P.S. Я добавил в скрипт пакет 0x22 RequestLinkHtml, как в твоем логе. Попробуй, если не будет работать увеличь timer.interval, мб в этом дело.

Djekc
15.12.2009, 22:50
Fer123, скрипт вроде заработал таймер выставил 500,но заработал на половину.Работает только обмен коинов)При нажатии на виктори кикает чз указанное в таймере время,еси 500 то чз 0.5 сек если 5000 то чз 5 сек)))

KMAX
30.12.2009, 13:34
У меня почти также обмен колов на адены работает а при покупке точек просто открываеться окно ГМ шопа и все ничего дальше не происходит! Но у меня не вылетает как у Djekc!

TAMBIK
31.12.2009, 02:10
//автоматизация закупки
const
//================================================== ========================================
myname='TAMBIK'; //<<== пишем свой НИК
//================================================== ========================================
// должно быть открыто окно у кота
// меняет кол а птом покупает свитки
var
timer:TTimer;
x,:integer;
//===================
procedure init;
begin
timer:=TTimer.Create(nil);timer.OnTimer:=@OnTimer;
timer.enabled:=false;timer.interval:=1000;//интервал
x:=0;
SendMsg2(' **** ПРИВЕТ ***** ');
SendMsg2(' * пуск -- Hello * ');
SendMsg2(' * стоп -- Victory * ');
end;
procedure SendMsg2(msg:string);
begin
buf:=#$4A;WriteD(0);WriteD(10);WriteS('');WriteS(m sg);
SendToClientEx(myname);
end;
//=====================
procedure free;
begin
timer.free;
end;
//=====================
procedure MultisellBypass(cmd1,cmd2 : string);
begin
buf:=#$23;
WriteS('menu_select?ask='+cmd1+'&reply='+cmd2);
SendToServerEx(myname);
end;
//======================
procedure OnTimer(Sender:TObject);
begin
case x of
1:begin // начать обмен COL
buf:=#$22;
WriteS('zzz_relax_cat1_960.htm');
SendToServerEx(myname);
SendMsg2(' начать обмен COL ');
inc(x);
end;
2:begin
MultisellBypass('-11','19001'); //list id magazina col'ov
inc(x);
end;
3:begin
buf:=#$B0;
WriteD(19001);
WriteD(3);//entryid
WriteD(20); // << === количество COL
buf:=buf+HStr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(myname);
inc(x);
end;
4:begin
buf:=#$22;
WriteS('zzz_relax_cat1_001.htm');
SendToServerEx(myname);// закончили обмен COL
SendMsg2(' закончили обмен COL ');
inc(x);
end;
5:begin // начать покупку свитков
buf:=#$22;
WriteS('zzz_relax_cat1_900.htm');
SendToServerEx(myname);
SendMsg2(' начать покупку свитков ');
inc(x);
end;
6:begin
buf:=#$22;
WriteS('zzz_relax_cat1_905.htm');
SendToServerEx(myname);
inc(x);
end;
7:begin
MultisellBypass('-9','14001'); //list id vtoroi pokypki
inc(x);
end;
8:begin
buf:=#$B0;
WriteD(14001); //list id
WriteD(37);//entryid 37
WriteD(100); // << === количество свитков
buf:=buf+HStr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(myname);
inc(x);
end;
9:begin
buf:=#$22;
WriteS('zzz_relax_cat1_001.htm');
SendToServerEx(myname);// закончили покупку свитков
SendMsg2(' закончили покупку свитков ');
x:=0; // если поставить 1
timer.enabled:=false;// и эту строку убрать то - начнет сначало по новой
end;
end;
end;
//******************
begin
if FromClient and (ConnectName=myname) and (pck[1]=#$34) then begin
CASE ReadD(2) OF
2:begin //Hello
x:=1; //
timer.enabled:=true;
SendMsg2(' П У С К ');
pck:='';exit;
end;
3:begin //Victory
x:=0;
timer.enabled:=false;
SendMsg2(' С Т О П ');
pck:='';exit;
end;end;end;
end.

lxlgurulxl
14.01.2010, 07:16
уже сам всё исправил =)

vianox
14.01.2010, 20:23
Переделал скрипт TMBIKa под закупку NGP. Перед использованием удалить всю адену.

5:begin // начать покупку свитков
buf:=#$22;
WriteS('zzz_relax_cat1_900.htm');
SendToServerEx(myname);
SendMsg2(' начать покупку свитков ');
inc(x);
end;
6:begin
buf:=#$22;
WriteS('zzz_relax_cat1_907.htm'); //Аксессуары
SendToServerEx(myname);
inc(x);
end;
7:begin
MultisellBypass('-9','15006'); //list id vtoroi pokypki
inc(x);
end;
8:begin
buf:=#$B0;
WriteD(15006); //list id
WriteD(11);//entryid 11
WriteD(28000); // << === количество свитков
buf:=buf+HStr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(myname);
inc(x);
end;
9:begin
buf:=#$22;
WriteS('zzz_relax_cat1_001.htm');
SendToServerEx(myname);// закончили покупку свитков
SendMsg2(' закончили покупку свитков ');
x:=1; // если поставить 1
//timer.enabled:=false;// и эту строку убрать то - начнет сначало по новой
end;
end;
end;
//******************
begin
if FromClient and (ConnectName=myname) and (pck[1]=#$34) then begin
CASE ReadD(2) OF
2:begin //Hello
x:=1; //
timer.enabled:=true;
SendMsg2(' П У С К ');
pck:='';exit;
end;
3:begin //Victory
x:=0;
timer.enabled:=false;
SendMsg2(' С Т О П ');
pck:='';exit;
end;end;end;
end.

Likoms
25.03.2010, 20:27
не знаю создать ли новую тему или лучше в этой, сервер другой, задача другая, но название темы подходит)) напишу здесь же чтобы не плодить.

нужен такой код: если у персонажа в инвентаре нету или меньше чем N определенного итема(бутылки маны/хилок), то купить этот итем. И чтобы количество этого итема проверялось время от времени.(нужно отправить бота в полностью автономное плавание)
На сервере гм-шоп в комьюнити, пакеты мультиселл проходят без всяких заморочек в любом месте без таргета.
помогите плз, я все еще только начинаю разбираться в скриптах:D