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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 02.04.2008, 14:38   #341
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от APXAHGEJI
NLObP, ага правильно, а вот если принять pck[1]=#$0A, а pck[2]=#$10, то pck[1]+pck[2]=#$0A#$10
Строку HEX символов получим '0A10'?
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 02.04.2008, 16:39   #342
Пользователь
 
Аватар для APXAHGEJI
 
Регистрация: 08.03.2008
Сообщений: 77
Сказал Спасибо: 31
Имеет 19 спасибок в 15 сообщенях
APXAHGEJI
По умолчанию

Да. Например проверку что это пакет использование скила, и зажата CTRL можно реализовать так

If ((pck[1]+pck[6])=#$2F#$01) then
иначе это выглядит так
if (pck[1]= #$2F) and (pck[6]=#$01) then
APXAHGEJI вне форума   Ответить с цитированием
Старый 06.04.2008, 19:20   #343
Гость
 
Сообщений: n/a
По умолчанию

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

delphi Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP //Затачиваем поочереди все предметы с Weapon ID пока не переломаем или не заточим //Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" //Необходимо затариться оружием, заточками и валерьянкой //Открываем инвентарь для инициализации скрипта //Социальное действие YES начать //Социальное действие NO остановиться //Enjoy! {Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.} //****************************************************************************** const   Name='NLObP';   Scroll=957; // 957 - ItemID Crystall Scroll Enchant Weapon (Grade D)   Weapon=129; // 129 - ItemID Sword of Revolution D-grade   MaxEnchLvl=20; //max уровень заточки   max=250;    //max количество предметов в базе var //  WpnObjID:  array[1..maxwpn,1..maxwpn] of integer;    //Weapon ObjID   WpnBase:  array[1..2,1..max] of integer;    //Weapon ObjID,lvl   ScrlBase:  array[1..max] of integer;    //Scroll ObjID   add: boolean; //прошла заточка?   timer: TTimer;   CurEnchLvl, ColvoWpn, ColvoScrl, CurWpn, CurScrl: integer; //****************************************************************************** procedure Init; //Вызывается при включении скрипта var   i:integer; begin   //Enchant:=false;   CurEnchLvl:=0;   timer:=TTimer.Create(nil);   timer.OnTimer:=@OnTimerHP;   timer.enabled:=false;   timer.interval:=2500; //время задержки   Say('Для инициализации скрипта, откройте инвентарь'); end; //****************************************************************************** procedure Free; //Вызывается при выключении скрипта begin   WpnBase:=nil;   ScrlBase:=nil;   timer.Free; end; //****************************************************************************** procedure Say(msg:string); begin   buf:=hstr('4A 00 00 00 00');   WriteD(2);   WriteS(Name);   WriteS(msg);   SendToClientEx(Name); end; //****************************************************************************** procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID var   i, ss, ww, j, ObjID, ItemID, lvl, ListCount: integer; begin   ss:=1; //индекс в массиве скроллов   ww:=1; //индекс в массиве предметов   j:=4; //смещение для ListCount   ListCount:=ReadH(j); //количество итемов не должно превышать max!   if ListCount>max then ListCount:=max;   j:=8; //смещение для ObjectID   //Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID   for i:=1 to ListCount do begin      ObjID:=ReadD(j);      //ObjectID      ItemID:=ReadD(j);    //ItemID      j:=j+14;      Lvl:=ReadD(j);    //Level      case ItemID of         scroll: begin             ScrlBase[ss]:=ObjID;             ss:=ss+1;             //Say('ColvoScrl='+IntToStr(ss));         end;         weapon: begin             WpnBase[1,ww]:=ObjID;             WpnBase[2,ww]:=lvl;             ww:=ww+1;             //Say('ColvoWpn='+IntToStr(ww));         end;      end;     j:=j+2; //для С4 //    j:=j+10; //для Интерлюдии   end;   ColvoWpn:=ww-1;   ColvoScrl:=ss-1;   Say('>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID var   i, ii, j, ss, ww, ObjID, ItemID, Lvl, ListCount, UpdType: integer; begin   ListCount:=ReadH(2); //количество итемов   //Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl   j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален //  Say('Апдейт базы!');   for i:=1 to ListCount do begin     UpdType:=ReadH(j);     j:=j+2;     ObjID:=ReadD(j);     ItemID:=ReadD(j);     j:=j+14;     Lvl:=ReadH(j); //    Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));     case UpdType of       1:case ItemID of           weapon: begin             ColvoWpn:=ColvoWpn+1;             //Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));             for ii:=1 to max do               if WpnBase[1,ii]=0 then begin WpnBase[1,ii]:=ObjID; WpnBase[2,ii]:=lvl; end;           end;           scroll: begin             ss:=ss+1;             //Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));             for ii:=1 to max do               if ScrlBase[ii]=0 then ScrlBase[ii]:=ObjID;           end;       end;       2:case ItemID of           weapon:             for ii:=1 to max do               if WpnBase[1,ii]=ObjID then WpnBase[2,ii]:=lvl;           scroll:             //Say('Внимание! Изменения в скролле!?');       end;       //удален       3:case ItemID of           weapon: begin              ColvoWpn:=ColvoWpn-1;              for ii:=1 to max do               if WpnBase[1,ii]=ObjID then begin WpnBase[1,ii]:=0; WpnBase[2,ii]:=0; end;               //Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));           end;           scroll: begin              ColvoScrl:=ColvoScrl-1;              for ii:=1 to max do               if ScrlBase[ii]=ObjID then ScrlBase[ii]:=0;               //Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));           end;       end;     end;     j:=j+2; //для С4 //    j:=j+10; //для Интерлюдии   end;   Say('>>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** function GetNextWeapon: integer; //Выдает ObjID предмета, если  не найден в базе, выдает -1, //достигли макс уровня заточки -2, подбираем мин текущий уровень заточки -3 var   i: integer; begin   Result:=-1;   if CurEnchLvl>=MaxEnchLvl then begin     Result:=-2;     exit;   end;   for i:=1 to max do begin     //находим первый подходящий предмет     if (WpnBase[1,i]<>0) and (WpnBase[2,i]=CurEnchLvl) then begin       Result:=WpnBase[1,i];       exit;     end;   end;   CurEnchLvl:=CurEnchLvl+1;   Result:=-3; end; //****************************************************************************** function GetNextScroll: integer; //Выдает ObjID скролла, если  не найден в базе, выдает -1 var   i: integer; begin   Result:=-1;   for i:=1 to max do begin     //находим первый подходящий предмет     if (ScrlBase[i]<>0) then begin       Result:=ScrlBase[i];       exit;     end;   end; end; //****************************************************************************** procedure UseItem(ObjectID: integer); begin   buf:=#$14;   WriteD(ObjectID);   WriteD(0);   SendToServerEx(Name); end; //****************************************************************************** procedure RequesEnchantItem(ObjectID: integer); begin   buf:=#$58;   WriteD(ObjectID);   SendToServerEx(Name); end; //****************************************************************************** procedure OnTimerHP(Sender: TObject); var   wpn, scrl:integer; begin     if ColvoScrl=0 then begin       Say('Кончились скроллы! Прервано!');       timer.enabled:=false;       exit;     end;     if ColvoWpn=1 then begin       Say('Остался последний предмет! Прервано!');       timer.enabled:=false;       exit;     end;     Scrl:=GetNextScroll;     if scrl=-1 then begin       Say('Нет такой заточки! Прервано!');       timer.enabled:=false;       exit;     end;     Wpn:=GetNextWeapon;     case wpn of     -1: begin           Say('Нет такого предмета! Прервано!');           timer.enabled:=false;           exit;        end;     -2: begin           Say('Достигли максимальный уровень заточки! Прервано!');           timer.enabled:=false;           exit;         end;     -3: begin           //Say('Подбираем текущий уровень заточки!');           timer.enabled:=true;           exit;         end;     end;     //************************************************     UseItem(Scrl);     RequesEnchantItem(Wpn);     //************************************************     Say('Заточили предмет! Weapon='+IntToStr(Wpn)); end; //****************************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** begin   //****************************************************************************   //не обрабатываем пустые пакеты   if pck='' then exit;   //****************************************************************************   //социальное действие yes для начало точки   if FromClient and (ConnectName=Name) and (pck=HStr('1B 06 00 00 00')) then begin     CurEnchLvl:=0;     Say('Команда Старт!!!');     timer.enabled:=true;   end;   //****************************************************************************   //социальное действие no для начало точки   if FromClient and (ConnectName=Name) and (pck=HStr('1B 05 00 00 00')) then begin     Say('Команда Стоп!!!');     timer.enabled:=false;   end;   //****************************************************************************   //ItemList   if FromServer and (ConnectName=Name) and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов //  if (ColvoWpn=0) or (ColvoScrl=0) then exit; //если нет базы итемов, скрипт дальше не пустит   //****************************************************************************   //если удалились предметы, стираем в базе предметов пары ObjectID - ItemID   if FromServer and (ConnectName=Name) and (pck[1]=#$27) then UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета end.

При запуске скрипта вылетает табличка Access violation at address 0052B595 in module "l2phx.exe". Read of address 45453338

Последний раз редактировалось Grinch, 21.05.2008 в 16:20. Причина: [ HIGHLIGHT="delphi" ]код[ /HIGHLIGHT ]
  Ответить с цитированием
Старый 08.04.2008, 02:59   #344
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Rubec
Откуда такая формула и как ее понять?

for i:= 0 to round(length(pck)/36) do
begin
if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
элементарно ватсон-))..
пакет который приходит от сервера с описанием ИНВЕНТОРЯ- цикличен.. его длина зависит напрямую от кол-ва предметов в инвенторе.. в начале пакета 8 байтов отводится под описание ИД ПАКЕТА+КОЛВО ПРЕДМЕТОВ+ЕЩЕ ЧЕТА.. 8 байтов- описание.. после етих 8ми байтов следует цикличное описание каждого итема в инвенторе.. каждый итем описывается 36-ю байтами.. каждый блок описываемый айтем в инвенторе начинается с ОИД предмета.. после чего идет ИТЕМ ИД предмета.. т.е. если в инвенторе всего 1 предмет то длина пакета будет 8+36 бафйтов.. с 8-го байта там будет храниться ОБЖЕКТ ИД итема.. с 12-го будет записан его ИТЕМ ИД.. потом будет указано кол-во в стопке етих предметов.. и там еще чето то.. поетому.. если у нас 2 предмета в инвенторе 1-предмет ЦП банка второй предмет ГХП банка то наш синтаксис сработает так:
Код:
for i:= 0 to round(length(pck)/36) do
       begin
       if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
для первого итема получится:
Код:
for i:= 0 to 2 do
       begin
       if (pck[12]+pck[13] = hstr('25 04')) then OidHPPotion0:=pck[8]+pck[9]+pck[10]+pck[11];
ну а для второго:
Код:
for i:= 0 to 2 do
       begin
       if (pck[12+36]+pck[13+36] = hstr('25 04')) then OidHPPotion0:=pck[8+36]+pck[9+36]+pck[10+36]+pck[11+36];
таким образом мы запоминаем из инвенторя ГХП и ЦП банки так инвентарь имеет не 2 позиции а забит до отказа то применяем то что я дал:
Код:
for i:= 0 to round(length(pck)/36) do
       begin
       if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием
Старый 08.04.2008, 09:02   #345
Пользователь
 
Аватар для APXAHGEJI
 
Регистрация: 08.03.2008
Сообщений: 77
Сказал Спасибо: 31
Имеет 19 спасибок в 15 сообщенях
APXAHGEJI
По умолчанию

Ток вычисления у тебя помоему не правильные,
У тебя самого этот скрипт работатет?
APXAHGEJI вне форума   Ответить с цитированием
Старый 08.04.2008, 10:24   #346
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Гость
Люди помогите плиз, пытался найти этот скрипт переписаный под камаель, не получилось...
При запуске скрипта вылетает табличка Access violation at address 0052B595 in module "l2phx.exe". Read of address 45453338
Ты константы под себя настраивал?
Код:
const
  Name='NLObP'; //                                                   - здесь имя чара для которого запускаем скрипт!!!
  Scroll=957; // 957 - ItemID Crystall Scroll Enchant Weapon (Grade D) - здесь ItemID заточки!!!
  Weapon=129; // 129 - ItemID Sword of Revolution D-grade               - здесь ItemID затачиваемой вещи!!!
  MaxEnchLvl=20; //max уровень заточки                                          - здесь максимальный уровень заточки
  max=250;    //max количество предметов в базе (инвентаре), для гнома до 250, для других - 80
PS: Не надо забывать что скрипт для С4, а в Камаэле, наверняка, пакеты отличаются, не забудь найти отличия и подправить смещения.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 08.04.2008, 23:18   #347
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию Re:

Цитата:
Сообщение от APXAHGEJI
Ток вычисления у тебя помоему не правильные,
У тебя самого этот скрипт работатет?
я невыкладываю то что непротестировано..
я выкладываю то чем сам пользуюсь и то что работает 100%..
кстатти моё- для интерлюда..
возможно твоё для ц4..
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием
Старый 09.04.2008, 12:04   #348
Гость
 
Сообщений: n/a
По умолчанию

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

Server *yss:

Пакет на FO -> GFO
AF A8 02 00 00
Пакет на GFO -> PFO
AF A9 02 00 00
  Ответить с цитированием
Старый 09.04.2008, 12:19   #349
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от Гость
Ксати, неплохо было бы бота для рыбалки приучить к автоматической конверсии бутылочек, при наличии соответствующих рецептов, фиш оил в греатер фиш оил, а греатер фиш оил в премиум фиш оил прямо во время рыбалки, чтобы экономить время.

Server *yss:

Пакет на FO -> GFO
AF A8 02 00 00
Пакет на GFO -> PFO
AF A9 02 00 00
ОК. Попробую сделать.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 19.04.2008, 12:05   #350
Новичок
 
Аватар для Alan
 
Регистрация: 11.10.2007
Адрес: Питер
Сообщений: 13
Сказал Спасибо: 261
Имеет 0 спасибок в 0 сообщенях
Alan
По умолчанию

to Voron вы писали 16.03.2008, 00:48 --->
ДРУЗЬЯ, частично перечитал топ.. и с ужасом обнаружил что нет нормальной реализации глотания банок ХП, ГХП, ГЦП... тот вариант что предложил МКС предполагает предварительную подготовку скрипта.. т.е. после запуска скрипта следуют самому ручками глотнуть банки в нужной последовательности..

так вот скрипт суперский! Пасиба! Есть над чем подумать 8)
вот например, бафать баферы начинют все вместе! Со стороны палево полное. Дальше нету банок мп, я например играю боевым магом, мне сешка нужна как заливка + баф. Сешка-шилка сама себе не регенит манку, те у нее есть скил инвок например, + лопала б банки мп. И вот еще я играю в связке пп+se+бд. ставлю вместо ее - бд, скрипт зависает, тода как сешка в связке с пп бегают намано. Если можно дополнить скрипт, добавить в него бд, был бы полноценный скрипт. А так нареканий нету. Вчера укокошил варовскую патьку один 8))))) Правда был под бд друга 8) Хилит, ману льет как нужно. Хотя нет, не настроить для вара лечилку. те что бы начинали лечить при 95% хп. не понял как, при варе это жизнено важно 8) (буду еще искать)
ОГРОМНОЕ ПАСИБА ЗА ТВОЙ ТРУД! ЗА ТВОЙ СКРИПТ! ОН ЛУЧШИЙ!
Alan вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра

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

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


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

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

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