Вернуться   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 спасибками от:
Старый 17.03.2008, 07:13   #11
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

кстате для твоего алгаритма лутьше юзать геодату сервера т.к. по ней бот может очень быстро просчитать путь и после двигаться по ней и не надо будет ничего забивать в базу... имхо моё мнения и понятия не имею с чем едят геодату :)
Grinch вне форума   Ответить с цитированием
Старый 17.03.2008, 14:21   #12
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,284
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: SKYbot-dll бот

Цитата:
Сообщение от skymanrus
имеет мини карту с возможностью масштабирования
Можешь подсказать каой алгоритм применял и может еще какие есть для синхронизации реальных координат и координат карты?
Я когда миникарту делал так и не смог приличного совпадения сделать. А там еще и картинку карты можно вставлять, так вообще пипец как выбирать нужную из кучи картинок.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 17.03.2008, 14:38   #13
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Вопрос ко всем, у меня одного КоллФункшн вылетает с крит эррором (хотя и выполняется) если количество аргументов от 1 и больше,если 0 аргументов - то намана вызывается из дллки.
QaK вне форума   Ответить с цитированием
Старый 17.03.2008, 17:14   #14
Пользователь
 
Регистрация: 17.03.2008
Сообщений: 9
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
ttmii
По умолчанию

Сейчас попытался заюзать его на Шоке Экстриме - нифига ((( 0 эмоций, подозреваю что это всвязи с недавним обновлением ? ((
ttmii вне форума   Ответить с цитированием
Старый 17.03.2008, 18:21   #15
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию Re:

Цитата:
Сообщение от ttmii
Сейчас попытался заюзать его на Шоке Экстриме - нифига ((( 0 эмоций, подозреваю что это всвязи с недавним обновлением ? ((
Все работает отлично, видимо не верно запускаешь кури форум все ответы в поиске найти реально!

спасибо за проделанный труд!
DashKAaa вне форума   Ответить с цитированием
Старый 17.03.2008, 20:48   #16
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию Re: SKYbot-dll бот

Цитата:
Можешь подсказать каой алгоритм применял и может еще какие есть для синхронизации реальных координат и координат карты?
да ниче особенного впринципе - афиновы перобразования на плоскости

Код:
  
cofx:=round((MobsX[i]-(myXreal-(750*zooom)))/(11*zooom)+27); {т.е. берём мою X координату и отнимаем от неё 750 * переменную маштабности (которую изменаеш когда перетаскиваеш тракбар) тем самым мы выделяем число которое будет проэкцией крайней левой стороны предпологаемого квадрата видимости который мы видим на форме, затем от координаты моба отнимаем это число и получаем координату которая которая уже будет в квадрате видимости а дальше её прост немного уменьшаем чтоб она вписалась в форму (11*zooom) и прибавляем 27 чтоб та точка на карте которая обозначала нашего чара была в центре квадрата  }

cofy:=round((MobsY[i]-(myYreal-(750*zooom)))/(11*zooom)+17); // тож самое с Y

Rectangle(cofx, cofy, cofx+6, cofy+6); //рисуем моба на форме
Цитата:
А там еще и картинку карты можно вставлять, так вообще пипец как выбирать нужную из кучи картинок.
я кстати хотел прилепить к нему свои карты так как это вполне реально надо только создать функцию которая в зависимости от текущих координат чара будет грузить нужную картинку эт просто сделать другое дело что самих карт пока нету и переводить их из волкера тож не хочется потому что они не совсем точные а во вторых я решил если и буду карты вставлять то не такие тупые как в волкере, лучше сделать карту где просто отмеченны стены потому что она опять же гораздо удобнее чем тупые карты волкера и эти же карты сможет в последствии использовать внедрённый алгоритм ASTAR в качестве своеобразной геодаты :)

спросите откуда будут браться карты ? :)
их будет рисовать бот атыкаясь на стены и качаясь на локациях !
в посдедствии готовыми картами можно будет обмениваться и в конце концов думаю можно будет составить отличную геодату бота :)
Цитата:
Вопрос ко всем, у меня одного КоллФункшн вылетает с крит эррором (хотя и выполняется)
у меня так же было по началу главное чтоб количество параметров указанных в [] совпадало с их числом которое ставиш до []
то есть
вот простейший вызов
Код:
var lib:Integer;
procedure Init;
begin
lib:=loadLibrary('skeleton.dll');
SHOWMESSAGE(INTTOSTR(CallFunction(lib,'TestHello',0,[0]))); //если ниче не передаём
//1 значение передаём SHOWMESSAGE(INTTOSTR(CallFunction(lib,'TestHello',1,[23]))); 
//2 значение передаём SHOWMESSAGE(INTTOSTR(CallFunction(lib,'TestHello',2,[23,32]))); 
//так же можно и строки передать SHOWMESSAGE(INTTOSTR(CallFunction(lib,'TestHello',2,["dfgsва",32])));
end;

procedure Free;begin FreeLibrary(lib);end;
begin end.
ошибки при вызове CallFunction могут ещё вылетать из-за не правильно составленной dll'ки
CallFunction может возвращать ТОЛЬКО ЧИСЛА!!!

Цитата:
Сейчас попытался заюзать его на Шоке Экстриме
повторюсь: у меня в архиве загрузочный файл dll'ки настроен под интерлюд и тестился только на 1 серваке та что надо перенастраивать этот файлик чтоб в dll правильные значения передавались
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus вне форума   Ответить с цитированием
За это сообщение skymanrus нажился 3 спасибками от:
Старый 17.03.2008, 21:30   #17
Пользователь
 
Регистрация: 17.03.2008
Сообщений: 9
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
ttmii
По умолчанию Re: SKYbot-dll бот

Цитата:
[quote:77666]Сейчас попытался заюзать его на Шоке Экстриме
повторюсь: у меня в архиве загрузочный файл dll'ки настроен под интерлюд и тестился только на 1 серваке та что надо перенастраивать этот файлик чтоб в dll правильные значения передавались[/quote:77666]

К сожалению, мне такое не под силу (( может поможешь ? или подскажи что и чем править ))
пс: я чайник )
ttmii вне форума   Ответить с цитированием
Старый 18.03.2008, 00:37   #18
Заблокирован
 
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
DashKAaa
По умолчанию

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

заметил только проблема с поднятием дропа.. иногда не весь поднимает и сразуже кидается в атаку на другого моба, а дроп лежит на земле
DashKAaa вне форума   Ответить с цитированием
Старый 19.03.2008, 02:19   #19
Новичок
 
Регистрация: 07.11.2007
Сообщений: 14
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
PunkRediska
По умолчанию

skymanrus, падскажи пажалуста дураку,как можно сменить % хп при катроам но садиться на респ и как можно заставить его юзать скилы,в том числе бафы...вопрос заключаеться не столько в алгаритмном испалнении сколько в том как эти функции загнать те в дльку и как заствить пакетхак их патом оттуда юзать?
__________________
http://www.magnum-shoes.ru/
PunkRediska вне форума   Ответить с цитированием
Старый 19.03.2008, 13:42   #20
Пользователь
 
Аватар для skymanrus
 
Регистрация: 28.12.2007
Сообщений: 54
Сказал Спасибо: 0
Имеет 40 спасибок в 10 сообщенях
skymanrus пока неопределено
По умолчанию

Цитата:
skymanrus, падскажи пажалуста дураку
отличный вопросы и совсем не дурацкие ! :)

Цитата:
как можно сменить % хп
в файле main.dpr
проставленны все эти значения в % принятые по умолчанию
Код:
sitHPproc:=55; upHPproc:=100;butHPproc:=70;
можно конечно их там изменить и перекомпилить все но лучше будет сделать так
Код:
procedure TForm1.Edit3Change(Sender: TObject);
begin sitHPproc:=strtoint(Form1.Edit3.text); end;

procedure TForm1.Edit4Change(Sender: TObject);
begin butHPproc:=strtoint(Form1.Edit4.text);end;

procedure TForm1.Edit5Change(Sender: TObject);
begin upHPproc:=strtoint(Form1.Edit5.text);end;

Цитата:
и как можно заставить его юзать скилы
это уже по сложнее
вот попытаюсь это обьяснить на примере скила спойла
вот наши заветные 10 байт обозначающие сей скилл '2F FE 00 00 00 00 00 00 00 00'
теперь чтоб заставить бота использовать этот скилл надо просто вставить его в единственную функцию которая вызывается из dll'ки и передаёт какую то инфу l2phx эта функция в исходнике называется
Код:
procedure atackMOB;
ВНИМАНИЕ ! не путать с процедурой procedure Attack(atk,tar,xpos,ypos,zpos: integer); ! это разные процедуры!

именно из atackMOB посылаются все пакеты (сесть, встать, юзнуть банку ударить моба) которые гененирует SKYbot так что для того чтоб он юзал какие то скилы надо туда пихнуть в конец процедуры перед последними end;end; код использования скилла какого захочеш
например так
Код:
getrstr:='2F FE 00 00 00 00 00 00 00 00';
:) теперь все что будет делать бот это тупо кидать на всех споил и все ! :) ну тоесть испортиться фактически :)
для того чтоб он знал когда надо юзать скил а когда надо и другими вещами заниматься (сесть, встать, юзнуть банку ударить моба) надо добавить условие при котором юзается сей скилл например для спойла
это условие будет на человеском языке звучать так - если моб ещё не заспойлен то надо его заспойлить

а на delphi это будет по сложнее озвучить
надо добавить в SKYbot ещё 1 процедуру сбора информации которая будет говорить SKYbot что каст на моба прошёл

все процедуры сбора информации вы увидите в l2phx в скритпе который грузит dll
Код:
#$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)]);
то есть новая процедура будет такая
Код:
#$76:CallFunction(lib,'MagicSkillLaunched',2,[ReadD(2),ReadD(18)]);
первый аргумент который передаются в dll'ку будут идом того кто юзнул скилл - ReadD(2) а ReadD(18) это ид того на кого юзнули скилл

теперь надо собственно создать процедуру MagicSkillLaunched в dll'ке

первым наперво добавляем её к списку экспортируемых функций в файле main.dpr
Код:
exports MagicSkillLaunched,getr,UserInfo....
затем надо написать саму процедуру в файле SKYbot.pas

для этого перед директивой implementation обьявляем прототип функции типа
Код:
procedure MagicSkillLaunched(idskill,idtarget:integer);       stdcall;
и потом пишем саму процедуру после директивы 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';
будет звучать так:
Код:
моб которого сейчас атакует чар был заспойлен? если 0 то спойлим
мы его заспойлили и тут же пришёл пакет в процедуру MagicSkillLaunched а в ней в MobsSKILL записалось соответствующие значение отличное от нуля и теперь бот не будет больше использовать споил на заспойленного моба когда моб умрет бот сотрёт все данные о нём и запишет туда другого моба если встретит

вот так вот :D все очень просто :ROFL:

я бы сам этим сейчас занялся но не особо сейчас вижу смысла продолжать писать этот алгоритм на delphi так как честно говоря я был немного удивлён когда получил дллку в пол мига где почти ничего не делается :) кроме того время от времени возникают очень странные ошибки т.е. бот качается так себе... и как бы все хорошо но тут оп и та процедура которую он уже выполнил раз 100000 вдруг выдаёт неизвесную ошибку.. это меня добивает чесно говоря, не говоря уже о том что скорость выполнения расчётов оставляет желать лучшего... короче решил я все под ассемблер переписать чем сейчас и занимаюсь в настоящий момент
__________________
На людей сердишся, когда чувсивуешь, что их поступки важны. Ничего подобного я больше не чувствую...
skymanrus вне форума   Ответить с цитированием
За это сообщение skymanrus нажился 6 спасибками от:
Ответ

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


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

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

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


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

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

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