Просмотр полной версии : проблемы со скриптами)
пользовалась l2phx.3.4.1.83,юзала скрипт на автоматизацию процесса заточки,успешно юзала к слову :D скачала отсюда еще 1 скрипт тоже на автоматизацию энчанта,он не работал,но суть проблемы что после него и старый почему то работать перестал) скрипт тот же.так же стоит галочка,но ничего не происходит)может кто имеет предположения по какой причине?
const
nik='тут ник';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=8440;
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1134;
end;
procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
вот ссылка на темку с тем скриптом который пыталась ставить 2ым)
http://coderx.ru/showthread.php?t=476
после того как обнаружила проблему скачала отсюда l2phx.3.5.33.164,но проблема осталась) т.е. скрипт вроде включен,но не работает)
п.с.создала темку не в том разделе сначала сорь :Dесли опять не там то я хезе тогда куда ее писать хД
Смущает фраза "скрипт вроде включен" ;) Проверьте внимательно включен или нет))
Добавьте в скрипт процедуру
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(nik);
end;
А потом запихните в оба таймера команды SendMsg2('Событие: таймер 01'); и SendMsg2('Событие: таймер 02');
А также в логические условия if FromClient and (pck[1]=#$19) добавьте SendMsg2('Событие: пакет #$19'); и так дальше, во всех условиях.
Посмотрим что получится.
ох сложновасто хД щас попробую:Р
по вопросу вроде включен-так он действительно включен:D галочка стоит все нормально,он активируется первым соц действием,но теперь почему-то при нажатии этого первого действия оно ток машет руками и ничего не делает:D
а готовый скрипт теперь должен выглядеть примерно так?
const
nik='ник тут:Р';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=5640;
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1320;
end;
procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
SendMsg2('Событие: таймер 01');
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
SendMsg2('Событие: таймер 01');
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(nik);
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
[/QUOTE]
и куда вставлять SendMsg2('Событие: пакет #$19');?:Р
[QUOTE] if FromClient and (pck[1]=#$19) then UseItem:=pck;
SendMsg2('Событие: пакет #$19');
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
вот так?:) и во всех 4 далее?:)
сорь мб чушь написала немного не понимаю :Dдаж почти не немного:D
и посл вопрос:р для условия
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
строка будет уже
SendMsg2('Событие: пакет #$5F'); ?
спс что помогаете :РР
Вот так будет. Сразу объясню зачем: увидим визуально работает ли скрипт и в каком моменте он дает сбой.
const
nik='ник тут:Р';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=5640;
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1320;
end;
procedure OnTimer01(Sender: TObject);
begin
SendMsg2('Событие: таймер 01');
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
SendMsg2('Событие: таймер 02');
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(nik);
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
SendMsg2('Событие: пакет #$87');
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: begin CurrentEnch:=0; SendMsg2('Событие: пакет #$87 fail en4ant');end;
end;
if FromClient and (pck[1]=#$19) then begin UseItem:=pck; SendMsg2('Событие: пакет #$19'); end;
if FromClient and (pck[1]=#$D0) then begin SelectItem:=pck; SendMsg2('Событие: пакет #$D0');end;
if FromClient and (pck[1]=#$5F) then begin EnchantItem:=pck; SendMsg2('Событие: пакет #$5F'); end;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
SendMsg2('Событие: пакет #$56 0С');
end;
end.
сппспсп ща попробую:Р
Добавлено через 13 минут
const
nik='Astery';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=5640;
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1320;
end;
procedure OnTimer01(Sender: TObject);
begin
SendMsg2('Событие: таймер 01');
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
SendMsg2('Событие: таймер 02');
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
procedure SendMsg2(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(nik);
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
SendMsg2('Событие: пакет #$87');
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: begin CurrentEnch:=0; SendMsg2('Событие: пакет #$87 fail en4ant');end;
end;
if FromClient and (pck[1]=#$19) then begin UseItem:=pck; SendMsg2('Событие: пакет #$19'); end;
if FromClient and (pck[1]=#$D0) then begin SelectItem:=pck; SendMsg2('Событие: пакет #$D0');end;
if FromClient and (pck[1]=#$5F) then begin EnchantItem:=pck; SendMsg2('Событие: пакет #$5F'); end;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
SendMsg2('Событие: пакет #$56 0С');
end;
end.
вот) все равно ничего)сохранила в скриптах.обновила список,поставила галочку,жму первое соц действие и опять ничего) чар опять машет руками и усе:D почему не работает ваще не пойму:(
вру хД при соц действии ничего,как только руками делаю энчант в объявлениях пишет: Событие:пакет #$87 :D и больше ничего не происходит)
пс.код подредактировала:Р
Просьба код оформлять в теги [ HIGHLIGHT="delphi" ]тут код[ /HIGHLIGHT ]
Добавлено через 1 минуту
Astery, 56 - это точно пакет от сервера - социальное действие? Хроники какие?
грация финал)
социальное действие приветствие)
Добавлено через 2 минуты
дело в том,что когда скрипт работал,при нажатии приветствия ничего не происходило.Далее первый энчант руками,далее он сам)
теперь при нажатии приветствия чар действительно выполняет приветствие :D отчего это я никак не пойму)
С лога пакетов выложите сюда пакет RequestActionUse с приветствием.
Хотя нет, ненадо... Ща подумаю..
Все таки выкладывайте пакет RequestActionUse :D
15 0C 00 00 00 00 00 00 00 00 этот от клиента
от оно:Р
27 E9 92 0B 10 02 00 00 00 эт от сервера
Добавлено через 1 минуту
:Р
Добавлено через 1 минуту
ток там не так написано хД
Tип: 0x15 (Unknown)
Pазмер: 10+2
Время прихода: 13:50:53:397
вот так как то)(эт от клиента)
27 E9 92 0B 10 02 00 00 00
27 - SocialAction и 02 00 00 00 - id приветствия, здесь все правильно.
15 0C 00 00 00 00 00 00 00 00
15 - нету такого id пакета, и даже если расценивать что id=15 является пакетом SocialAction, то все равно 0C 00 00 00 никак не связать с соц действием приветствие. В общем не понятно что это за пакет.
Ну можно этим не заморачиватся, отказаться от использования соц действий. Включать процесс точения командой с чата например.
Впишите вместо if FromClient and (pck[1]+pck[2]=#$56#$0C) then условие с пакетом Say2 и все.
ps: как видите, проблема возникла отнюдь не из за того что вы попытались использовать другой скрипт.
сорь за глуупый вопрос :Р как звучит условие с Say2?
38 32 00 00 00 00 00 00 00 вот пакет куда его пихать?:D
Добавлено через 1 минуту
ну да)непонятно только отчего он ни с чего перестал реагировать на соц действия:Р
Добавлено через 1 минуту
вот пакет от сервера
4A E9 92 0B 10 00 00 00 00 41 00 73 00 74 00 65 00 72 00 79 00 00 00 32 00 00 00
тот что выше от клиента)
38 32 00 00 00 00 00 00 00 <- это не Say2, получается у вас либо изменили шифрацию на сервере, либо настройки пакетхака неправильно выставлены. Вкладывайте скрины настроек.
http://i067.radikal.ru/1008/be/ab2f4b290703.jpg
вот вроде:Р
Вы же вроде писали что начали использовать 3.5.33.164 :) Я рассчитывал увидеть скрин с этой версии :)
Кхм, 38 32 00 00 00 00 00 00 00 это Say2, но не в грации финал, а в интерлюде. Ниче я не понял, вы же писали что грация финал :)
Меняйте
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
на
if FromClient and (pck=HStr('38 32 00 00 00 00 00 00 00')) then
И при написании команды 2 в общий чат скрипт начнет работать.
вот рас
http://s58.radikal.ru/i162/1008/a0/e738d1ecae04.jpg
вот два:Р
http://i058.radikal.ru/1008/48/256e00f73b64.jpg
вот три:))
http://s16.radikal.ru/i190/1008/3c/4fbbca315bd1.jpg
Добавлено через 2 минуты
да там грация финал,непонятно почему так все)
Добавлено через 9 минут
поменяла)
пишу 2 в чат ,2 не пишется,но скрипт не работает дальше)
Astery, в настройках перехвата не стоит галочка на "использлвать LSP перехват" или "Перехват; Искать клиент"
но пакеты он шлет вроде,ток скрипты не работают) неужели из-за этого?:Р
Подведем итоги :)
1) Работаем только с версией 3.5.33.164
2) Как и сказал NLObP: в настройках перехвата нужна галочка
Идем дальше. Нужен небольшой лог пакетов с процессом точения, несколькими фразами в чат и с использованием соц действий. Интересно взглянуть. Мне кажется что будет достаточно просто id пакетов в скрипте изменить.
ван момент щас притащу :Р
Добавлено через 14 минут
19 1C 98 0E 10 00 00 00 00 беру свиток
D0 4C 00 2B E7 0F 10 наверно выбор вещи хД
5F 2B E7 0F 10 00 00 00 00 это вроде запрос на энчант)
з.ы.эт все от клиента)
49 32 00 00 00 00 00 00 00 эт 2 в общий чат)тож от клиента)
56 0C 00 00 00 00 00 00 00 00 приветствие:Р тож клиент)
надо от сервера пакеты?:))
Breadfan
23.08.2010, 05:05
3 страницы рассуждений "из пустого в порожнее" о(^.^)о Сервер написать надо было сразу, может ктонть глянул да и все, чем выискивать в чем тут дело :rolleyes: А то начнется - "открыли корзинку, достали сумку, закрыли корзинку, открыли сумку..." :D Я, конечно, понимаю что логикой гораздо изящнее проблему решать, но иногда быстрее просто разок ковырнуть отверткой и "...посмотреть чего у нее там внутри..." :)
Что-то здесь не чисто...
Здесь (http://coderx.ru/showpost.php?p=105270&postcount=9) говорится что 15 0C 00 00 00 00 00 00 00 00 приветствие, а здесь (http://coderx.ru/showpost.php?p=105378&postcount=21) уже 56 0C 00 00 00 00 00 00 00 00.
Ну и Say2 здесь (http://coderx.ru/showpost.php?p=105275&postcount=11) один, а тут (http://coderx.ru/showpost.php?p=105378&postcount=21) другой.
l2phx.3.4.1.83 то пакеты с этой версии)
последние я вытащила из l2phx.3.5.33.164
мб из-за этого?)
3.5.33.164 показывает правильные пакеты, а значит скрипт должен хоть как-то, но работать. Проверяйте :)
проверяла)ставлю галочку пишет скрипт откомпилирован и все)
Добавлено через 35 секунд
дальше ни на старую ни на новую версию скрипта никак не реагирует)
Добавлено через 1 минуту
и что самое странное,раньше он даже с другой версии пакетхака работал)выходит с неправильными пакетами:Р чет ваще непонятное все)
Добавлено через 15 минут
ой все сспсппспспспспсппс всем:Ря опять поменяла пакет на 2 в общий чат и запустила в посл версии) все работает)))
Добавлено через 1 минуту
а кстати) я тут пыталась немного его переделать) добавить таймер3 который поставит интервал еще 1 чтобы от конца одного энчанта и до начала второго было 3 секунды) у меня что-то не вышло слегка)щас скажу куда ставила)
Добавлено через 5 минут
const
nik='Astery';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02,Timer03: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=5640;
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1320;
Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000;
end;
procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
Timer03.enabled:=true;
end;
end;
key:=not(key);
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;
begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=HStr('49 32 00 00 00 00 00 00 00')) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
вот) сразу сорь я ток начинаю пытаться разбираться в этом:D
спсппспспс еще раз что помогли:Р
Ну в таком скрипте вообще одним таймером обойтись можно. Слишком уж накручено все. Я если честно не вижу смысла вводить 3-й таймер, надо убрать второй и результат будет что надо :)
всмысле убрать второй?:)
Добавлено через 16 минут
:Р суть в чем,что из-за того что он слишком быстро берет второй свиток,дисконектит с воплями инлегал экшн :D вот я и пыталась установить интервал между концом одной и началом второй:Р
Это все правильно, но проблема решится не добавлением третьего таймера, а убиранием второго. Организуйте все действия в одном таймере (на форуме есть много примеров работы таймера).
щас:Р пспспсп)
Добавлено через 18 минут
вот чето нарисовала :D если не так плис поправьте если несложно:Р
const
nik='Astery';
Enchant=9;
var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: byte;
Timer01: TTimer;
procedure OnTimer01(Sender: TObject);
begin
inc(key);
case key of
1:begin
buf:=UseItem;
SendToServerEx(nik);
end;
2:begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
3:begin
buf:=SelectItem;
SendToServerEx(nik);
Timer01.enabled:=false;
key := 0;
end;
end;
end;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=5640;
key := 0;
end;
procedure Free;
begin
Timer01.free;
CurrentEnch:=0;
end;
begin
if FromServer then //от сервера.
case pck[1] of
#$87:
case ReadD(2) of
0:begin
inc(CurrentEnch);
Timer01.enabled := (CurrentEnch = Enchant); //держим таймер включеным пока не достигнут нужный енчант.
end;
3: CurrentEnch := 0;
end;
end
else //от клиента.
case pck[1] of
#$19: UseItem:=pck;
#$D0: SelectItem:=pck;
#$5F: EnchantItem:=pck;
#$49: //say
case reads(2) of
'2':begin //say '2'
pck := '';
Timer01.enabled:=not Timer01.enabled;
end;
end;
end;
end.
Почти правильно.
Только вместо key: boolean используйте key: integer , ну и соответственно уже управляйте значением key. Не забудьте задать начальное значнеие этой переменной.
А еще для более оптимальной работы внутри таймера изменяйте интервал Timer01.interval:=1000; на нужный вам.
вообще не поняла)))
просто заменить в начале это key: boolean на это key: integer ?:D
я чет не понимать терь ничо хД
alexteam
23.08.2010, 13:57
http://coderx.ru/showpost.php?p=105448&postcount=30
визуально все правильно.
Переменная key нигде не изменяет своего значения, кроме как сброс её в ноль.
вообще что такое переменная key? я чет не совсем поняла)
alexteam
23.08.2010, 14:05
NLObP, ниправда. самая первая инструкция в обработчике таймера.
Astery, счетчик.
Astery, сорри, я стормозил. Она изменяет свое значение в кейсе.
Минут 5 втыкал на последний скрипт, думал крыша едет - час назад вроде как другой был, потом удосужился чуть страничку промотать вниз и увидел "Последний раз редактировалось alexteam" :D
Там еще в таймере добавить Timer01.interval:=****; - чтобы задержки были разными для разных действий.
nevazhno
23.08.2010, 14:21
суть в том что кикает, как при клике 2й раз на скрол, когда 1й еще не доточил...
:РР всёёёё спсппспспсп всем:РРР почти разобралась в этих дебрях хДД
supernewbie
24.08.2010, 00:20
38 32 00 00 00 00 00 00 00 <- это не Say2, получается у вас либо изменили шифрацию на сервере, либо настройки пакетхака неправильно выставлены. Вкладывайте скрины настроек.
ящитаю что надо убрапть галку с Gracia Final (только для л2.ру)
//J-Fobos: я с вами согласен, надо было с самого начала обратить на это внимание. Но смотря на описание темы догадаться об этом было сложно. :)
Breadfan
24.08.2010, 02:40
А где там на скрине установленая галка? Или это - дедукция?
//J-Fobos: Пост №13 http://i067.radikal.ru/1008/be/ab2f4b290703.jpg секономили бы целую страницу если бы описание проблемы было более внятным)))
Ссылка - мертвая....а тот скрин, что в начале прилеплен - без нее вроде был...Или уже следы замели :D
//J-Fobos: это радикал последние 2 дня тормозит, постоянно 403 и 503 выскакивают %)
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot