Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 16.02.2011, 17:01   #1
Новичок
 
Регистрация: 16.02.2011
Сообщений: 15
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
TEHb пока неопределено
По умолчанию Скрипт для AION 2.0.0.3 помогите немного

delphi Код:
var Timer01,Timer02: TTimer; Mission1,start:Boolean; i,j,a,k:integer; missionArr,ProdArr:array[0..20] of string; procedure Init; //первый таймер активирует второй begin     Timer01:=TTimer.Create(nil); //выделяем памать и т.п.     Timer01.OnTimer:=@OnTimer01; //привязываем процедуру к событию     Timer01.enabled:=false; //начальное положение включен(true)/выключен(false)     Timer01.interval:=5000; //29000 интервал(в милисекундах) как часто таймер срабатывает     Timer02:=TTimer.Create(nil); //выделяем памать и т.п.     Timer02.OnTimer:=@OnTimer01; //привязываем процедуру к событию     Timer02.enabled:=false; //начальное положение включен(true)/выключен(false)     Timer02.interval:=3000; //29000 интервал(в милисекундах) как часто таймер срабатывает     Mission1:=False;     i:=0;     j:=1;     a:=0;     k:=0;     ProdArr[0]:='E3 57 80 80 8B D1 F0 08 7B 2C 3D 09 54 01 00 00 05 00 6A 86 DD 0A 2A 00 00 00 00 00 00 00 49 87 DD 0A 2A 00 00 00 00 00 00 00 D3 D6 18 0A 3F 01 00 00 00 00 00 00 DC D6 18 0A 5E 00 00 00 00 00 00 00 D9 D6 18 0A 6A 02 00 00 00 00 00 00';     start:=false;     Timer01.enabled:=true; end; procedure OnTimer01(Sender: TObject); begin Start:=true; Timer01.enabled:=False; end; procedure OnTimer02(Sender: TObject); begin     buf:='C9 57 66 00 ';     SendToServer;     buf:='B5 57 72 52 01 00 00 00 ';     SendToServer;     buf:='E3 57 80 80 8B D1 F0 08 7B 2C 3D 09 54 01 00 00 05 00 6A 86 DD 0A 18 00 00 00 00 00 00 00 49 87 DD 0A 18 00 00 00 00 00 00 00 D3 D6 18 0A 99 01 00 00 00 00 00 00 DC D6 18 0A 78 00 00 00 00 00 00 00 D9 D6 18 0A 18 03 00 00 00 00 00 00';     SendToServer;     Timer02.Enabled:=false; end; Procedure TakeMission; begin MissionArr[0]:='9C 57 5B 60 00 00 00 34 00 01 00 0A 00 00 00 00 00 00 00'; MissionArr[1]:='9C 57 5B 60 00 00 00 19 00 01 00 1C 00 A2 13 00 00 00 00'; MissionArr[2]:='9C 57 5B 60 00 00 00 EA 03 01 00 04 00 A2 13 00 00 00 00'; For i:=0 to 2 do    begin         buf:=HStr(MissionArr[i]);         SendToServer;   end;     Mission1:=True; end; Procedure BuyItems; begin     buf:=HStr('9C 57 5B 61 00 00 00 02 00 01 00 0A 00 00 00 00 00 00 00');     SendToServer;     buf:=HStr('A1 57 5E 61 00 00 00 0D 00 04 00 D9 D6 18 0A 60 00 00 00 00 00 00 00 DC D6 18 0A 10 00 00 00 00 00 00 00 D3 D6 18 0A 30 00 00 00 00 00 00 00 D6 D6 18 0A 66 00 00 00 00 00 00 00');     SendToServer; End; Procedure EndMission; Begin    //пока  в разработке ибо не требуется сдача end; procedure Free; //Вызывается при выключении скрипта begin   Timer01.free;   Timer02.free;   start:=false; end; begin   //IF FromServer and (pck[1]=#$1A) then  a:=1;   //if FromServer and (pck[1]=#$16) and (a=1) or start then   if FromServer and (pck[1]=#$17) then  //Жду личного сообщения пакет типа 17 DD PP XX ZZ и т.д...   begin     if mission1=true then     begin         Timer02.enabled:=true;         j:=j+1;         if j=16 then         begin           mission1:=false;           j:=1;          end;     end     a:=0;     start:=false;     if (mission1=false)  then     begin         //EndMission;         i:=0;         j:=1;         a:=0;         TakeMission;         BuyItems;         start:=true;     end;   end   else a:=0end.



Вот собственно такой скрипт.
Цель скрипта брать ЗАКАЗ покупать необходимое для изготовления и изготавливать, а затем сдавать.

В алгоритме скрипта думаю Вам копаться не стоит у меня в следующем проблема:
1. Скрипт сейчас должен запускаться от личного сообщения
"if FromServer and (pck[1]=#$17) then ..." но не запускается не пойму почему пакет 17 приходит

2. Цель чтобы скрипт работал циклически там
"//IF FromServer and (pck[1]=#$1A) then a:=1;
//if FromServer and (pck[1]=#$16) and (a=1) or start then ..." заготовка под цикл как ни странно работает суть ее в том что надо поймать два пакет разного типа идущие друг за другом (эти пакеты означают что производство завершено)

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

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

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

Последний раз редактировалось NLObP, 17.02.2011 в 22:23.
TEHb вне форума   Ответить с цитированием
Старый 16.02.2011, 21:43   #2
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Я в аион не играю, но попробую помочь.

1. Похоже что при запуске скрипта mission1=false и поэтому не запускается таймер.

2. Зачем ловить 2 пакета, нельзя обойтись одним?

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

4. Задержки рекомендуется делать только через таймер.

5. По идее вам поможет команда ReadS / WriteS
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
Старый 17.02.2011, 22:13   #3
Новичок
 
Регистрация: 16.02.2011
Сообщений: 15
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
TEHb пока неопределено
По умолчанию

Цитата:
Сообщение от J-Fobos Посмотреть сообщение
Я в аион не играю, но попробую помочь.

1. Похоже что при запуске скрипта mission1=false и поэтому не запускается таймер.

2. Зачем ловить 2 пакета, нельзя обойтись одним?

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

4. Задержки рекомендуется делать только через таймер.

5. По идее вам поможет команда ReadS / WriteS
Спасибо за внимание я много постов прочитал видел что ты реально помогаешь, я сам не дуб знаю делфи на уровне выше среднего, но вот с сетевыми приложениями а особенно с пакетами не работал до этого.

1. С таймером я разобрался там неверно функция посмотри я евент случайно скопировал от первого таймера.
2. 2 пакета обязон или придется из первого пакета читать 4 байта которые при каждом подключении разные, но постоянны для текущего подключения (пакеты у меня всегда приходят одинаково друг за другом поэтому я заморочился с ловлей двух пакетов)

5. С командами прочитать строку и записать строку не разобрался ибо не могу вывести в лог собственно результат
не смог создать и подключить файл например функции АssignFile не работают и вообще не смог создать переменную типа file или TextFile видимо тут они не работают идея была писать лог на жесткий диск а потом его почитать

Добавлено через 11 минут
и Вот проблема пункта 3
delphi Код:
procedure OnTimer02(Sender: TObject); begin buf:='C9 57 66 00 '; SendToServer; buf:='B5 57 72 52 01 00 00 00 '; SendToServer; buf:='E3 57 80 80 8B D1 F0 08 7B 2C 3D 09 54 01 00 00 05 00 6A 86 DD 0A 18 00 00 00 00 00 00 00 49 87 DD 0A 18 00 00 00 00 00 00 00 D3 D6 18 0A 99 01 00 00 00 00 00 00 DC D6 18 0A 78 00 00 00 00 00 00 00 D9 D6 18 0A 18 03 00 00 00 00 00 00'; SendToServer; Timer02.Enabled:=false; end;

Вот 3 пакета при которых происходит отсоединения от сервера
С9 - Выполнить действие объект
В5 - сам объект (цель)
Е3 - действие с объектом в частности пакет производства какой-то там байды содержит id всех итемов покупаемых в магазе для производства и квестовых
Если послать пакеты просто дург за другом через обычную посылку все пашет норм а в скрипте ну никак не получается сразу дисконнект

ЗЫ: Обнаружил что при разных соединениях иногда пакет Е3 меняется с течением времени а иногда нет не понятно от чего это зависит т.е. в пакете меняется только число в 4 байта остальные неизменны ну может и больше 4 байт долго не наблюдал. Предположил что это время сервера или коиента, но не смог найти статью как вычислить время в пакете а она мне точно попадалась.

Последний раз редактировалось TEHb, 18.02.2011 в 09:49. Причина: Добавлено сообщение
TEHb вне форума   Ответить с цитированием
Старый 17.02.2011, 22:50   #4
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Что-то очень закрученный скрипт получился. Интуитивно чувствую что можно все организовать проще, одним таймером. Может отбросим его и попробуем написать новый?
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
За это сообщение J-Fobos нажился спасибкой от:
Старый 18.02.2011, 09:48   #5
Новичок
 
Регистрация: 16.02.2011
Сообщений: 15
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
TEHb пока неопределено
По умолчанию

Цитата:
Сообщение от J-Fobos Посмотреть сообщение
Что-то очень закрученный скрипт получился. Интуитивно чувствую что можно все организовать проще, одним таймером. Может отбросим его и попробуем написать новый?
Ты абсолютно прав там вообще все неверно я вчера с работы уставший был не обмозговал все
надеюсь ты там не пытался разобраться ща переделаю пункт 4 остальные вопросы актуальны и теперь постараюсь как можно короче писать думаю многим лень читать большие посты

Последний раз редактировалось TEHb, 18.02.2011 в 09:51.
TEHb вне форума   Ответить с цитированием
Старый 18.02.2011, 09:50   #6
Местный
 
Аватар для Nickers
 
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Nickers пока неопределено
По умолчанию

TEHb, В саму суть еще не вникал, но крайне не советую так делать:
Цитата:
Сообщение от TEHb Посмотреть сообщение
delphi Код:
procedure OnTimer02(Sender: TObject); begin buf:='C9 57 66 00 '; SendToServer; buf:='B5 57 72 52 01 00 00 00 '; SendToServer; buf:='E3 57 80 80 8B D1 F0 08 7B 2C 3D 09 54 01 00 00 05 00 6A 86 DD 0A 18 00 00 00 00 00 00 00 49 87 DD 0A 18 00 00 00 00 00 00 00 D3 D6 18 0A 99 01 00 00 00 00 00 00 DC D6 18 0A 78 00 00 00 00 00 00 00 D9 D6 18 0A 18 03 00 00 00 00 00 00'; SendToServer; Timer02.Enabled:=false; end;
В плане отсылки пакетов... Т.к. там могут быть элементы (В пакетах) подвижные, которые меняются в разных ситуациях... (Нада посмотреть разборку пакетов под Айон) Если есть ОИДы их требуется выводить в Const (Чтоб менять если что) Если есть координаты цели нужны запоминалки разные))

J-Fobos, Да тож хотелось бы сначала начать, а то на глаз тяжко разбираться...

Добавлено через 56 секунд
Прикрепите кто-нить PacketsAion.ini
__________________
Пишу что думаю, но ничего не знаю...
[LameGuard|Скрипты l2phx]

Последний раз редактировалось Nickers, 18.02.2011 в 09:54. Причина: Добавлено сообщение
Nickers вне форума   Ответить с цитированием
За это сообщение Nickers нажился спасибкой от:
Старый 18.02.2011, 10:24   #7
Новичок
 
Регистрация: 16.02.2011
Сообщений: 15
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
TEHb пока неопределено
По умолчанию

Итак насчет таймера и перезапуск его 5 раз для примера
Мой вариант, если кто подскажет проще оч. буду признателен.

CONST N:=5 //Сколько раз посылать
var i:integer;
SendBufArr:Array[0..N] of string; //Массив пакетов для отсылки

Procedure init;
Begin
i:=0; //инициализация нач значения счетчика
SendBuffArr[0]:='C9...';
//не буду вдаваться в подробности заполнения массива пакетами для посылки друг за другом
SendBuffArr[N]:='1А...';
End;
//Создание самого таймера я пропустил, ибо не требуется для примера.
Procedure OnTimer;
Begin
buf:=HStr(SendBuffArr[i]);
SendToServer;
i:=i+1;
if i=5 then Timer01.enabled:=false;
end;

//Ну и тело скрипта
BEGIN
if FromServer and (pck[1]=#$17) then Timer01.enabled:=True;
END.

В общем суть в том чтобы через счетчик не обнуляя его послать пять пакетов. По задумке таймер не выключается и снова сработает через таймер-интервал пока не получиться 5 раз после чего таймер отключиться.

Добавлено через 12 минут
Цитата:
Сообщение от Nickers Посмотреть сообщение
TEHb, В саму суть еще не вникал, но крайне не советую так делать:

В плане отсылки пакетов... Т.к. там могут быть элементы (В пакетах) подвижные, которые меняются в разных ситуациях... (Нада посмотреть разборку пакетов под Айон) Если есть ОИДы их требуется выводить в Const (Чтоб менять если что) Если есть координаты цели нужны запоминалки разные))

J-Fobos, Да тож хотелось бы сначала начать, а то на глаз тяжко разбираться...

Добавлено через 56 секунд
Прикрепите кто-нить PacketsAion.ini
Цитата:
Сообщение от TEHb Посмотреть сообщение
Вот 3 пакета при которых происходит отсоединения от сервера
С9 - Выполнить действие объект
В5 - сам объект (цель)
Е3 - действие с объектом в частности пакет производства какой-то там байды содержит id всех итемов покупаемых в магазе для производства и квестовых
Если послать пакеты просто дург за другом через обычную посылку все пашет норм а в скрипте ну никак не получается сразу дисконнект

ЗЫ: Обнаружил что при разных соединениях иногда пакет Е3 меняется с течением времени а иногда нет не понятно от чего это зависит т.е. в пакете меняется только число в 4 байта остальные неизменны ну может и больше 4 байт долго не наблюдал. Предположил что это время сервера или коиента, но не смог найти статью как вычислить время в пакете а она мне точно попадалась.
Вот вся проблема пакеты E3 какие то странные но при посылке через обычную отсылку работают (мое предположение все дело в задержке
так как после производства 1 вещи чар какое-то время машет руками типа радуется но это всего лишь анимация но кнопка изготовить недоступна в это время, так что возможно меня кикает за спам пакетами или выполнение невозможного действия.

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

Последний раз редактировалось TEHb, 18.02.2011 в 10:26. Причина: Добавлено сообщение
TEHb вне форума   Ответить с цитированием
Старый 18.02.2011, 11:08   #8
Местный
 
Аватар для Nickers
 
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Nickers пока неопределено
По умолчанию

TEHb, Вот так:
delphi Код:
inc(i);   if i=5 then     begin       Timer01.enabled:=false;       i:=0;     end; end;
А лучше весь IF вывести из процедуры в тело скрипта...
(Или никуя не лучше)

Цитата:
Оффтоп
Все верно, так и нада...

Дай ка расшифровку твоего пакета E3 через ПХ...
Хочу глянуть)

Цитата:
Оффтоп
Да, возможно эт такая задержка от спама... И возможно в этом проблема...
__________________
Пишу что думаю, но ничего не знаю...
[LameGuard|Скрипты l2phx]
Nickers вне форума   Ответить с цитированием
Старый 18.02.2011, 12:00   #9
Новичок
 
Регистрация: 16.02.2011
Сообщений: 15
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
TEHb пока неопределено
По умолчанию

Цитата:
Сообщение от Nickers Посмотреть сообщение
TEHb

Дай ка расшифровку твоего пакета E3 через ПХ...
Хочу глянуть)


Да, возможно эт такая задержка от спама... И возможно в этом проблема...
ПХ не расшифровывает там в первом посте пакет Е3 выложен полностью
в ПХ пишется UncnownE3 собственно я в нем разобрался там большая часть пакета это itemsID для производства мне только несколько байт не понятны сейчас выкладывать некогда позже попробую расписать
хотя это уже другая тема скорее всего будет
TEHb вне форума   Ответить с цитированием
Старый 18.02.2011, 12:30   #10
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Nickers Посмотреть сообщение
Прикрепите кто-нить PacketsAion.ini
К сожалению его надо пополнять. Вот что есть на сейчас:
Код:
//для L2PacketHack 3.4.1+
// by (c) xkor
//AION
//
[client]


[server]
43=ObjectUpdate:h(id2)d(ObjectId)h(Level)d(MaxHP)d(CurHP)
//41=KeyInit:h(id2)d(Key)
E7=Drop:h(id2)d(NpcObjectId)b(LootWnd?)
26=NPCInfo:h(id2)n(x)n(y)n(z)d(npcObjID)d(npcID)d(npcID)c(NpcType)ccc(Heading)d(NameId)d(TitleId)dddcc(HP%)dc(lvl)
18=CharInfo:h(id2)n(x)n(y)n(z)d(charObjID)d(raceSex)d(raceSex)-(14)c(Heading)s(Name)-(7)d(Clan Id)-(6)s(Clan name)c(HP%)ccc
2B=Gather:h(id2)n(x)n(y)n(z)d(ObjID)-(4)d(typeID)-(3)d(nameId)
6B=Select?:h(id2)d(ObjID)d(targObjID)
1A=Sbor?:h(id2)d(charObjID)d(gatherObjID)-(2)c(num)
Давайте дополним его.

Добавлено через 1 минуту
Цитата:
Сообщение от TEHb Посмотреть сообщение
в ПХ пишется UncnownE3 собственно я в нем разобрался там большая часть пакета это itemsID для производства мне только несколько байт не понятны сейчас выкладывать некогда позже попробую расписать
Напиши расшифровку и я добавлю его в packetsAion.ini
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни



Последний раз редактировалось NLObP, 18.02.2011 в 12:30. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



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

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


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

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

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