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

Жесткий скриптинг Раздел для обсуждения готовых и тестируемых скриптов
Внимание! В разделе введена жесткая модерация, темы и сообщения публикуются только после проверки модераторами

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 16.03.2008, 01:27   #1
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию SKYbot-dll бот

Недавно решил попробовать написать бота для l2phx и чтоб все вычисления проходили в dll'ке
что дало бы огромный полюс в скорости выполнения скриптов а так же расширения возможностей простого бота
например если я когда нидь уберу все ошибки из этого кода я возможно попытаюсь внедрить в него алгоритм ASTAR который занимается тем что строит пути т.е. можно будет указать боту идти в гиран из орена пешком и он сам построит путь а если встретит препятствия то внесёт их в базу данных и обойдёт

вот можете посмотреть что получилось не судите строго

возможности:
умеет качаться в ограниченном круге,
круг можно ограничить по Z оси чтоб не мочил тех мобов что под землёй,
имеет мини карту с возможностью масштабирования,
если уперается в дерево или камень то пытается её обойти,
если вы юзнёте в процессе кача бутылку хп то он запоминает её ид и юзает её когда хп ниже 70%,
садится когда хп 55% и встаёт при 100%,
все эти значения принятые по умолчанию можно изменить в main.dpr или привязать эти переменные к каким то событиям в форме.

ВНИМАНИЕ!!!
ДЛЯ ВКЛЮЧЕНИЯ БОТА НАДО УСТАНОВИТЬ ГАЛОЧКУ НА ЗАГРУЗОЧНОМ СКРИПТЕ КОТОРЫЙ ЕСТЬ В АРХИВЕ И ЖЕЛАТЕЛЬНО ЭТО ВСЕ ДЕЛАТЬ В ОКНЕ ВЫБОРА ЧАРА А ЗАТЕМ НАЖАТЬ КНОПКУ ЧТОБ ВОЙТИ В МИР ТОГДА ВСЕ ДАННЫЕ БУДУТ ГРУЗИТЬСЯ НАИБОЛЕЕ ПРАВИЛЬНО, ХОТЯ МОЖНО И ПРОСТО В ИГРЕ ЮЗНУТЬ КАКУЮ ТО ВЕЩЬ ТИПА ЛЕЧИЛКИ И БОТ ТОЖЕ ВКЛЮЧИТСЯ НО ТОГДА БОТ БУДЕТ ДОЛЬШЕ ГРУЗИТСЯ И МОЖЕТ ПРИВЯЗАТСЯ К КАКОМО ТО ЧАРУ ИЛИ НПЦ

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

все расчёты ведутся в файле SKYbot.pas и при желании SKYbotFORM1.pas можно легко выключить и скомпилить длл без создания формы или прилепить свою форму.

однако иногда случаются кое какие ошибки которые я пока не могу профиксить...
в общем смотрите сами:
SKYbot_Source.rar
SKYbot.rar

если найдёте ошибки то пожалуйста укажите когда она возникает и что случается
а если укажите ошибки в самом файле исходника то буду просто бесконечно благодарен
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...

Последний раз редактировалось NLObP, 26.06.2008 в 17:49. Причина: исправил ссылки
skymanrus вне форума   Ответить с цитированием
За это сообщение skymanrus нажился 21 спасибками от:
Старый 19.03.2008, 14:36   #21
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию

хмм, привязать его к 1 персонажу возможно? чтоб все окна дургие не двигались, а двигалось только одно.
ну и что бы получше крошил всех мобов в радиусе своем, а то залетных не убивает, а стоит терпит как терминатор удары от них :x
DashKAaa вне форума   Ответить с цитированием
Старый 19.03.2008, 20:42   #22
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию

Цитата:
хмм, привязать его к 1 персонажу возможно?
конечно!
на самом деле эта длл тока вычисляет пакеты и передаёт все свои вычисления в пакет хак а вычисления строит на основе поступившей инфы которую шлёт тот же пакет хак тоесть можно написать такой загрузочный скрипт
delphi Код:
program SKYbot; var lib:Integer;name:string;t:TTimer;function p(n:integer;):string;var a:array[1..18]of char;i,r:Integer;begin a[1]:='1';a[2]:='2';a[3]:='3';a[4]:='4';a[5]:='5';a[6]:='6';a[7]:='7';a[8]:='8';a[9]:='9';a[10]:='0';a[11]:='A';a[12]:='B';a[13]:='C';a[14]:='D';a[15]:='E';a[16]:='F';a[17]:=' ';Result:='';for i:=1 to 500 do begin r:=CallFunction(lib,'getr',2,[n,i]);if(r=-1)then break;Result:=Result+a[r];end;end; procedure Init;begin t:=TTimer.Create(nil);t.OnTimer:=@OnT;t.enabled:=true;t.interval:=1000;     //укажите точный путь к файлу SKYbot.dll lib:=loadLibrary('C:\l2phx320\1\SKYbot_Source\1\main.dll'); name:='НИК ЧАРА!'; end;procedure OnT;var t:string;begin     //вызов функции из SKYbot.dll t:=p(1);if(t<>'')then begin buf:=Hstr(t);SendToServerEx(name);end; end;procedure Free;begin t.Free;FreeLibrary(lib);end; //-----------MAIN------------ begin if FromServer and  (ConnectName=name) then case pck[1]of #$03:CallFunction(lib,'CharInfo',4,[ReadD(18),ReadD(2),ReadD(6),ReadD(10)]); #$04:CallFunction(lib,'UserInfo',6,[ReadD(18),ReadD(2),ReadD(6),ReadD(10),126,ReadS(22)]); #$01:CallFunction(lib,'MoveToLocation',4,[ReadD(2),ReadD(6),ReadD(10),ReadD(14)]); #$16:CallFunction(lib,'NpcInfo',6,[ReadD(2),ReadD(10),ReadC(121),ReadD(14),ReadD(18),ReadD(22)]); #$12:CallFunction(lib,'killmob',1,[ReadD(2)]); #$06:CallFunction(lib,'killmob',1,[ReadD(2)]); #$05:CallFunction(lib,'Attack',5,[ReadD(2),ReadD(6),ReadD(15),ReadD(19),ReadD(23)]); #$0D:CallFunction(lib,'GetItem',1,[ReadD(6)]); #$0C:CallFunction(lib,'DropItem',5,[ReadD(10),ReadD(6),ReadD(14),ReadD(18),ReadD(22)]); #$0E:if(pck[10]=#$09)then CallFunction(lib,'StatusUpdate',3,[ReadD(2),ReadD(14),ReadD(22)]); #$27:CallFunction(lib,'InventoryUpdate',2,[ReadD(12),ReadD(8)]); end;end.

Добавлено спустя 2 минуты 25 секунд:
Re:
Цитата:
Сообщение от DashKAaa
ну и что бы получше крошил всех мобов в радиусе своем, а то залетных не убивает, а стоит терпит как терминатор удары от них :x
это недоработки в программе в новой версии я всё это исправлю
есть ещё вариант что это исправит кто то другой исходники то есть
щас я как раз составляю примерный список того тчо надо изменить и что надо добавить
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus вне форума   Ответить с цитированием
За это сообщение skymanrus нажился спасибкой от:
Старый 19.03.2008, 21:29   #23
Новичок
 
Регистрация: 07.11.2007
Сообщений: 14
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
PunkRediska
По умолчанию Re:

Цитата:
Сообщение от skymanrus
и потом пишем саму процедуру после директивы implementation
в которой надо как то пометить моба на которого ты юзаеш сей скилл
например самый простой вариант который мне сейчас пришёл на ум это создание ещё одного массива где будут хранится данные показывающие использовался ли на данном мобе какой то скилл
типа массива MobsSKILL: array[1..150] of integer;
и теперь если в дллку в процедуру MagicSkillLaunched придет 2 значения в первом будет ид нашего чара а во втором будет ид моба то можно записать это в массив MobsSKILL и теперь SKYbot знает что на каком то мобе был использовать какой скилл
дальше надо обязательно найти процедуру procedure killmob(id:integer);
и поставить там строку обнуляющую MobsSKILL в случае смерти моба
теперь когда все данные у нас есть можно свободно составить в процедуре atackMOB соответствующие условие для вызова скилла спойла
например такое

Код:
if MobsSKILL[ataM]=0 then getrstr:='2F FE 00 00 00 00 00 00 00 00';
в переменной ataM записан номер моба в "базе данных" (на самом деле это всего лиш несколько массивов) которого сейчас атакует бот тоесть на человеческом языке строка
Код:
if MobsSKILL[ataM]=0 then getrstr:='2F FE 00 00 00 00 00 00 00 00';
будет звучать так:
М-м... всё ето канечно оч интересно,и как нестранно панятно:),но всёже хочет задать допалнительный вапрос:"можно ли привязать юзанье скила к % саатношению хп?" насколько я панемаю для етого надо написать в самой функци procedure MagicSkillLaunched(idskill,idtarget:integer); stdcall;
что типа if curHP/maxHp/100<60 then getstr:='2F 10 00 00 00 00 00 00 00 00'; так?

Добавлено спустя 4 минуты 30 секунд:
Ешё вапросик,в файле SKYbotFORM1 описуються вкладки и мапа?

Добавлено спустя 11 секунд:
Ешё вапросик,в файле SKYbotFORM1 описуються вкладки и мапа?
__________________
http://www.magnum-shoes.ru/
PunkRediska вне форума   Ответить с цитированием
Старый 19.03.2008, 23:48   #24
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию Re:

Цитата:
Сообщение от skymanrus
Цитата:
хмм, привязать его к 1 персонажу возможно?
конечно!
на самом деле эта длл тока вычисляет пакеты и передаёт все свои вычисления в пакет хак а вычисления строит на основе поступившей инфы которую шлёт тот же пакет хак тоесть можно написать такой загрузочный скрипт
Код:
program SKYbot;
var lib:Integer;name:string;t:TTimer;function p(n:integer;):string;var a:array[1..18]of char;i,r:Integer;begin a[1]:='1';a[2]:='2';a[3]:='3';a[4]:='4';a[5]:='5';a[6]:='6';a[7]:='7';a[8]:='8';a[9]:='9';a[10]:='0';a[11]:='A';a[12]:='B';a[13]:='C';a[14]:='D';a[15]:='E';a[16]:='F';a[17]:=' ';Result:='';for i:=1 to 500 do begin r:=CallFunction(lib,'getr',2,[n,i]);if(r=-1)then break;Result:=Result+a[r];end;end;
procedure Init;begin
t:=TTimer.Create(nil);t.OnTimer:=@OnT;t.enabled:=true;t.interval:=1000;
    //укажите точный путь к файлу SKYbot.dll
lib:=loadLibrary('C:\l2phx320\1\SKYbot_Source\1\main.dll');
name:='НИК ЧАРА!';
end;procedure OnT;var t:string;begin
    //вызов функции из SKYbot.dll
t:=p(1);if(t<>'')then begin buf:=Hstr(t);SendToServerEx(name);end;
end;procedure Free;begin t.Free;FreeLibrary(lib);end;
//-----------MAIN------------
begin if FromServer and  (ConnectName=name) then case pck[1]of
#$03:CallFunction(lib,'CharInfo',4,[ReadD(18),ReadD(2),ReadD(6),ReadD(10)]);
#$04:CallFunction(lib,'UserInfo',6,[ReadD(18),ReadD(2),ReadD(6),ReadD(10),126,ReadS(22)]);
#$01:CallFunction(lib,'MoveToLocation',4,[ReadD(2),ReadD(6),ReadD(10),ReadD(14)]);
#$16:CallFunction(lib,'NpcInfo',6,[ReadD(2),ReadD(10),ReadC(121),ReadD(14),ReadD(18),ReadD(22)]);
#$12:CallFunction(lib,'killmob',1,[ReadD(2)]);
#$06:CallFunction(lib,'killmob',1,[ReadD(2)]);
#$05:CallFunction(lib,'Attack',5,[ReadD(2),ReadD(6),ReadD(15),ReadD(19),ReadD(23)]);
#$0D:CallFunction(lib,'GetItem',1,[ReadD(6)]);
#$0C:CallFunction(lib,'DropItem',5,[ReadD(10),ReadD(6),ReadD(14),ReadD(18),ReadD(22)]);
#$0E:if(pck[10]=#$09)then CallFunction(lib,'StatusUpdate',3,[ReadD(2),ReadD(14),ReadD(22)]);
#$27:CallFunction(lib,'InventoryUpdate',2,[ReadD(12),ReadD(8)]);
end;end.
Добавлено спустя 2 минуты 25 секунд:
Re:
Цитата:
Сообщение от DashKAaa
ну и что бы получше крошил всех мобов в радиусе своем, а то залетных не убивает, а стоит терпит как терминатор удары от них :x
это недоработки в программе в новой версии я всё это исправлю
есть ещё вариант что это исправит кто то другой :) исходники то есть :D
щас я как раз составляю примерный список того тчо надо изменить и что надо добавить
Будем ждать новую версию с удовольствием затестю ее в деле)
ну а косяки я отписывал какие встречал за 48 часов нон стоп кача в теме да будет БОТ на 19 страничке

Добавлено спустя 38 минут 44 секунды:
прописав ник вссе равно вторые окна долбят тоже мобов....
DashKAaa вне форума   Ответить с цитированием
Старый 07.04.2008, 18:50   #25
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: SKYbot-dll бот

Skymanrus!
Первый вопрос. Новая версия скоро будет? :)
Второй. Расскажи для чего арк тангенсы нужны? Может подскажешь, что почитать на эту тему?
Код:
function ArcTan2(y : Extended; x : Extended) : Extended;
begin
  if (x=0) then x:=0.01;
  Result:=1;
  Try
    begin
      if (((x>=0) and (y>0)) or ((x>=0) and (y<=0))) then Result:=ArcTan(y/x)*180/pi;
      if ((x<0) and (y>=0)) then Result:=(ArcTan(y/x)*180/pi)+180;
      if ((x<0) and (y<0)) then Result:=(ArcTan(y/x)*180/pi)-180;
    end;
    except on E:Exception do
    begin
      ShowMessage('код 4: y:'+floattostr(y)+' x:'+floattostr(x)+' Result:'+floattostr(Result)+' !'+E.ClassName+' ошибка: '+E.Message);
    end;
  end;
end;
и
Код:
//--------эта процедура вычисляет мои реальные координаты-----------//
procedure MYposPROC;
var
  i:integer;
begin
  if(on1=true)then
  begin
    try
    begin
      HPtime:=HPtime+1;
      if(myXreal=0) then
      begin
        myXreal:=myXpot;
        myYreal:=myYpot;
      end;
      //изменение текущих координат чара
      if ((myXreal<>0) and (myYreal<>0) and (ras(myXreal, myYreal, myXpot, myYpot)>=33)) then
      begin
        myXreal:=round(myXreal+((MYspeed/2)*cos(pi+(pi/180*ArcTan2(myYreal-myYpot,myXreal-myXpot)))));
        myYreal:=round(myYreal+((MYspeed/2)*sin(pi+(pi/180*ArcTan2(myYreal-myYpot,myXreal-myXpot)))));
      end;
      //обновляем растояния от меня до мобов
      for i:=0 to length(MobsRAS)-1 do
      begin
        if(MobsRAS[i]<>0) then MobsRAS[i]:=ras(myXreal,myYreal,MobsX[i],MobsY[i]);
        //включаем режим бота если onSKYbot=true
        if(onSKYbot=true)then
        begin
          if(myXradiy=0) then
          begin
            myXradiy:=myXreal;
            myYradiy:=myYreal;
            yaSIT:=false;
          end;
        end
        else
        begin
          myXradiy:=0;
          myYradiy:=0;
        end;

      end;
      except on E:Exception do ShowMessage('код 54: onSKYbot:'+Booltostr(onSKYbot)+' myXreal:'+inttostr(myXreal));
    end;
  end;
end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


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

Цитата:
Сообщение от 4uTep
я наверно первый нуб который даже не представляет как его запускать....
Помогите запустить)) :D
Складываешь SKYbot.dll и SKYbot_script_for_l2phx.txt в папку Scripts.
На странице скрипты выбираешь SKYbot_script_for_l2phx.txt ставя на нем галочку.
Остальное в первом сообщении есть.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 11.04.2008, 09:18   #27
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

Цитата:
Сообщение от NLObP
Второй. Расскажи для чего арк тангенсы нужны? Может подскажешь, что почитать на эту тему?
типа что б не бегать задом на перёд, но могу и ошибаться

Добавлено спустя 1 минуту 4 секунды:
зы так же можно разобраться как убегать от моба. т.е. куда
Grinch вне форума   Ответить с цитированием
Старый 14.04.2008, 12:41   #28
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию

Цитата:
Расскажи для чего арк тангенсы нужны? Может подскажешь, что почитать на эту тему?
они нужны для расчёта промежуточных кординат между 2 точками (точкой начала движения и точкой конца движения)
если не использовать промежуточные координаты мы увидим что наш чар не плавно перемещается по карте а прыгает из точки в точку в результате если например предпологаемый бот будет на довольно большом растоянии и бот прыгнет туда и в то время этого моба замочит кто то другой то бот остановится в неизвесной точке и дальше пойдут ошибки в вычислениях вот чтоб этой лажи не было и нужен арктангенс2 который по 2 проэкциям координат может определить угол направления и таким образом мы можем высчитать все промежуточные координаты

принцып работы функции arcTan2 взят из ActionScript там эта функция встроенная.

Цитата:
Первый вопрос. Новая версия скоро будет?
щас времени свободного маловаты но думаю что скоро напишу...
как я уже писал до этого я решил писать новую версию на ассемблере и уже написал там функцию расчёта расстояний а так же форму сделал для вывода инфы осталось только самая малость :)
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus вне форума   Ответить с цитированием
За это сообщение skymanrus нажился спасибкой от:
Старый 15.04.2008, 15:19   #29
Пользователь
 
Аватар для Emocean
 
Регистрация: 04.02.2008
Сообщений: 63
Сказал Спасибо: 44
Имеет 25 спасибок в 15 сообщенях
Emocean
По умолчанию

Привет.
Я правильно понимаю, что для передачи пакета из длл в скрипт используется функция getr?
Просто передать строку из длл в скрипт невозможно?
В этом и заключается несовершенство работы пакетхака с длл'ками?
Emocean вне форума   Ответить с цитированием
Старый 15.04.2008, 16:15   #30
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию

Emocean ты всё правильно понял
skymanrus вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Жесткий скриптинг


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

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

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


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

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

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