Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
10.04.2008, 13:47
#1
Местный
Регистрация: 06.03.2008
Сообщений: 154
Сказал Спасибо: 46
Имеет 130 спасибок в 38 сообщенях
Бoт - локомотив от Alexus
В этой теме обсуждается моя разработка:
скрипт Бот - Локомотив
для L2PacketHack.
Хочу выразить благодарность создателю программы PacketHack и этого форума, xKor'у,
а так же всем авторам скриптов, выложенных на этом форуме.
И отдельное спасибо компании NCSoft за создание Линейки, для которой так интересно писать ботов
История версий:
здесь
0.2 - куча глюков, первая рабочая версия!
0.3 - первая стабильная безглючная версия, с минимальной функциональностью
0.3.1 -
исправления:
- скрипт доработан для новых версий пакетхака
- устранена ошибка, связянная с неправильным распознованием пакета 01 - MoveToLocation
- убрана вся шелуха из кода
0.4 - изменения:
- радиус кача можно задать в секции настройки
- бот теперь сразу видит всю локацию с самого запуска скрипта
- автоопределение размера инвентаря
- ID мобов можно теперь задавать в секции настройки
- ускорен процесс добавление мобов через клиент (теперь их не надо гасить)
- отключена ф-ция автоопределения своего ID и инвентаря, по этому запускать теперь бот надо до запуска клиента
- обновлено окно вывода информации (теперь его нельзя случайно закрыть!)
- на форму добавлены кнопки управления
- добавлен механизм глотания баф-банок
- оптимизирован алгоритм выбора ближайшего моба
0.4.1
- в режиме кача, при отсутствии мобов в радиусе, бот возвращается в центр кача
- скрипт доработан для новых версий пакетхака
- убрана критическая ошибка, часто вылезающая при нажатии кнопки Start
- устранена ошибка, связянная с неправильным распознованием пакета 01 - MoveToLocation
0.5 - модификация под РУ-ОФФ Gracia
- Добавлен СПОИЛ
Версия 0.3 - во вложении
Самая простая, надежная и нетребовательная по ресурсам компьютера. Подходит как шаблон для написания разнообразных скриптов.
скрипт - воин ассистент в каче - во вложении
Все описание внутри скрипта. Скрипт можно размножить под разными именами, и получить себе до 9 помошников!!! Может работать совместно со скриптом Локомотивом версий 0.3 и 0.4.
Версия 0.4 -
перейти к просмотру
Эта версия является логическим продолжением разработки скрипта. У бота появилось очень много интересных возможностей. Но есть один существенный недостаток - скрипт кушает слишком много процессорного времени. Не рекомендую его для серьезного применения на слабых компьютерах.
Версия 0.5 -
перейти к просмотру
Работает только под Gracia. На данный момент продолжаются работы только над этой версиией скрипта. Во всех предыдущих версиях, при нахождении ошибок вводятся соответствующие изменения. Так что кому интересно, рекомендую иногда их просматривать.
Последний раз редактировалось nezabudkin, 01.02.2009 в 02:16 .
Причина: Обновление скриптов
За это сообщение nezabudkin нажился 35 спасибками от:
-=Ma}{imuS=- ,
3646696 ,
8tomat8 ,
alexsl ,
APXAHGEJI ,
Beny@ ,
catchy ,
ChiterEPT ,
DASSHooligan ,
dfackk ,
dyh9l ,
eky6 ,
Fer123 ,
Grinch ,
HooleeCheeter ,
Jack ,
KenZyXa ,
Kostya ,
Limpid ,
Lynx ,
MaRK ,
MHz ,
mks ,
Necrolity ,
Nickers ,
NLObP ,
Pitkin ,
purepassion ,
ramblik ,
SEnsay ,
TAMBIK ,
tiranosaur ,
VismuT ,
vovanchik ,
WOLf!
06.05.2008, 10:51
#2
Новичок
Регистрация: 22.04.2008
Сообщений: 21
Сказал Спасибо: 8
Имеет 26 спасибок в 6 сообщенях
короче я сделал сюда пару строчек чтобы спойлить можно было для этого надо ещё запустить скрипт (был выложен в да будет бот)
delphi Код:
//Автоматизация sweep'а by APXAHGEJI
//Свип производится тока при условии что моб был ,хоть один раз, ударен ВАМИ и
//находится в списке нужных мобов.
//Возможность работы нескольких одновременных скриптов
//Социальное действие YES - запусстить/приостановить запись/АвтоСвип мобов
//Социальное действие NO остановиться - завершить запись мобов и перейтии к АвтоСвип
//После того как скрипт запущен нажимаете Yes и атакуете мобов
//которых собираетесь спойлить. Атакуете до тех пор пока не появилась запись
//что моб записан. Для удобства процесс записи можно приостановить нажатие той же
//клавиши Yes. После того как все нужные мобы записаны жмакаете NO, запись мобов
//завершается, АвтоСвип запускается, можете приступать к спойлу. АвтоСвип можно
//приостановить нажав всю туже клавишу соцдействия Yes, но запись мобов под АвтоСвип
//не остановится, и снова активировав, все нужные мобы просвипятся.
Const
Name='имя перса' ;
Sweep='2F 2A 00 00 00 00 00 00 00 00' ;
Var
TimerSweep,TimerDel: TTimer;
N,M,i,NpcNum: Byte ;
X,Y,Z,CharID: Integer ;
NpcTypeID,TargetID: array of Integer ;
NeedSweep,Dead: array of Boolean ;
Switch,SaveID,HaveNpc: Boolean ;
//******************************************************************************
// Вызывается при включении скрипта
//******************************************************************************
Procedure Init;
begin
N:= 1 ;
M:= 1 ;
Switch:= False ;
SaveID:= True ;
SetLength ( NpcTypeID, N ) ;
SetLength ( TargetID, N ) ;
TimerSweep:=TTimer.Create ( nil ) ;
TimerSweep.OnTimer :=@Sweeper;
TimerSweep.Enabled := False ;
TimerSweep.Interval := 1000 ;
TimerDel:=TTimer.Create ( nil ) ;
TimerDel.OnTimer :=@Del;
TimerDel.Enabled := False ;
TimerDel.Interval := 5000 ;
Say( 'Нажмите Yes, чтобы начать/приостановить' ) ;
Say( 'запись мобов или АвтоСвип.' ) ;
Say( 'Нажмите No, чтобы завершить запись мобов' ) ;
Say( 'и приступить к сполйу.' ) ;
end ;
//******************************************************************************
//******************************************************************************
// Вызывается при выключении скрипта
//******************************************************************************
Procedure Free;
begin
TimerSweep.Free ;
TimerDel.Free ;
end ;
//******************************************************************************
//******************************************************************************
// Посылаем сообщение, которое видно только в окне бота
//******************************************************************************
Procedure Say( msg:string ) ;
begin
buf:=hstr( '4A 00 00 00 00' ) ;
WriteD( 2 ) ;
WriteS( Name) ;
WriteS( msg) ;
SendToClientEx( Name) ;
end ;
//******************************************************************************
//******************************************************************************
// Проверка наличия ИД моба в массиве
//******************************************************************************
Procedure FindMob( ObjectID: Integer ) ;
begin
HaveNpc:= False ;
NpcNum:= M;
For i:=0 to ( M-1 ) do
If ( ObjectID=TargetID[i]) then begin
NpcNum:= i;
HaveNpc:= True ;
break ;
end Else
If ( TargetID[i]= 0 ) and ( NpcNum = M) then NpcNum:= i;
end ;
//******************************************************************************
//******************************************************************************
// Запуск свипа каждые n секунд (n= Timer.Interval)
//******************************************************************************
Procedure Sweeper( Sender: TObject ) ;
begin
For i:=0 to ( M-1 ) do
If NeedSweep[i] and Dead[i] then begin
buf:= #$04 ;
WriteD( TargetID[i]) ;
WriteD( X) ;
WriteD( Y) ;
WriteD( Z) ;
WriteC( 00 ) ;
SendToServerEx( Name) ;
buf:=HStr( Sweep) ;
SendToServerEx( Name) ;
NeedSweep[i]:= False ;
exit ;
end ;
end ;
//******************************************************************************
//******************************************************************************
//Удаление списка при отстуствии записей о мобах
//******************************************************************************
Procedure Del( Sender: TObject ) ;
begin
For i:=0 to ( M-1 ) do
If ( TargetID[i]<>0 ) then exit ;
M:= 0 ;
SetLength ( TargetID, M) ;
SetLength ( NeedSweep, M) ;
SetLength ( Dead, M) ;
TimerDel.Enabled := False ;
TimerSweep.Enabled := False ;
end ;
//******************************************************************************
//******************************************************************************
// Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
Begin
//****************************************************************************
//Не обрабатываем пустые пакеты
If pck='' then exit ;
//****************************************************************************
//****************************************************************************
//Если от сервака принят пакет UserInfo. Запоминаем собственный ИД.
If FromServer and ( ConnectName=Name) and ( pck[1 ]=#$04 ) then CharID:= ReadD( 18 ) ;
//****************************************************************************
//****************************************************************************
//Переключение между записью ИД и АвтоСвипом
If SaveID then begin
//**************************************************************************
//Делаем выборку нужных для свипа видов мобов
//**************************************************************************
if Switch then
if FromServer and ( ConnectName=Name) then
if ( pck[1 ]=#$05 ) and ( ReadD( 2 ) =CharID) then begin
FindMob( ReadD( 6 ) ) ;
If not HaveNpc then begin
TargetID[N-1 ]:= ReadD( 6 ) ;
Inc ( M) ;
SetLength ( TargetID, M ) ;
end ;
end ;
If ( pck[1 ]=#$16 ) then
For i:=0 to ( M-1 ) do
if ( ReadD( 2 ) = TargetID[i]) then begin
For NpcNum:= 0 to ( N-1 ) do
If ( ReadD( 6 ) = NpcTypeID[NpcNum]) then exit ;
NpcTypeID[N-1 ]:= ReadD( 6 ) ;
Say( IntToStr ( N) +' вид мобов записан' ) ;
Inc ( N) ;
SetLength ( NpcTypeID, N ) ;
exit ;
end ;
//**************************************************************************
//Управление записью мобов
//**************************************************************************
If FromClient and ( ConnectName=Name) and ( pck[1 ]=#$1B) then begin
If ( ReadD( 2 ) =6 ) then
if Switch then begin
pck:='' ;
Switch:= False ;
Say( 'Запись мобов приостановлена' ) ;
end
else begin
pck:='' ;
Switch:= True ;
Say( 'Начата запись мобов, атакуйте нужных мобов' ) ;
end ;
If ( ReadD( 2 ) =5 ) then begin
pck:='' ;
Dec ( N) ;
M:= 0 ;
SetLength ( NpcTypeID, N) ;
SetLength ( TargetID, M) ;
SetLength ( NeedSweep, M) ;
SetLength ( Dead, M) ;
SaveID:= False ;
Switch:= True ;
Say( 'Запись мобов завершена, АвтоСвип активирован' ) ;
Say( 'Удачного спойла' ) ;
end ;
end ;
//**************************************************************************
end
//****************************************************************************
//****************************************************************************
//Переходим от записи нужных мобов к АвтоСвипу
Else begin
//****************************************************************************
//**************************************************************************
//Записываем текущие координаты
if FromClient and ( ConnectName=Name) and ( pck[1 ]=#$48 ) then begin
X:= ReadD( 2 ) ;
Y:= ReadD( 6 ) ;
Z:= ReadD( 10 ) ;
end ;
//**************************************************************************
//**************************************************************************
//Анализ мобов :=))
If FromServer and ( ConnectName=Name) then begin
//************************************************************************
//Записываем всех атакованых нами мобов (пакет Attack, причем Attacker=CharID)
If ( ( pck[1 ]= #$05 ) and ( ReadD( 2 ) = CharID) ) then begin
FindMob( ReadD( 6 ) ) ;
If not HaveNpc then
If ( NpcNum <> M) then begin
TargetID[NpcNum]:= ReadD( 6 ) ;
NeedSweep[NpcNum]:= False ;
Dead[NpcNum]:= False
end Else begin
Inc ( M) ;
SetLength ( TargetID, M) ;
SetLength ( NeedSweep, M) ;
SetLength ( Dead, M) ;
TargetID[M-1 ]:= ReadD( 6 ) ;
NeedSweep[M-1 ]:= False ;
Dead[M-1 ]:= False ;
If Switch then TimerSweep.Enabled := True ;
TimerDel.Enabled := True ;
end ;
end ;
//************************************************************************
//Проверяем есть ли в списке мобы
if ( M <> 0 ) then begin
//**********************************************************************
//Проверяем тот ли вид моба атакован (пакет NpcInfo)
If ( pck[1 ]= #$16 ) then begin
FindMob( ReadD( 2 ) ) ;
If HaveNpc and ( not NeedSweep[NpcNum]) then begin
For i:=0 to ( N-1 ) do
If ( ReadD( 6 ) = NpcTypeID[i]) then begin
HaveNpc:= False ;
Break ;
end ;
If not HaveNpc then NeedSweep[NpcNum]:= True ;
end ;
end ;
//**********************************************************************
//Записываем что атакованый моб умер (пакет Die, причем Sweepable=1)
If ( pck[1 ]= #$06 ) and ( pck[22 ]= #$01 ) then begin
FindMob( ReadD( 2 ) ) ;
If HaveNpc then Dead[NpcNum]:= True ;
end ;
//**********************************************************************
//Удаляем записи об атакованом мобе (пакет DeleteObject)
If ( pck[1 ]= #$12 ) then begin
FindMob( ReadD( 2 ) ) ;
If HaveNpc then begin
TargetID[NpcNum]:= 0 ;
NeedSweep[NpcNum]:= False ;
Dead[NpcNum]:= False ;
end ;
end ;
//**********************************************************************
end ;
//************************************************************************
end ;
//**************************************************************************
//**************************************************************************
//Запускаем/приостанавливаем АвтоСвип
//**************************************************************************
If FromClient and ( ConnectName=Name) and ( pck[1 ]=#$1B) and ( ReadD( 2 ) =6 ) then
if Switch then begin
pck:='' ;
TimerSweep.Enabled := False ;
Switch:= False ;
Say( 'АвтоСвип приостановлен' ) ;
end
else begin
pck:='' ;
TimerSweep.Enabled := True ;
Switch:= True ;
Say( 'АвтоСвип запущен' ) ;
end ;
//**************************************************************************
end ;
//****************************************************************************
End .
//******************************************************************************
этот скрипт запускаем настраиваем
а в боте незабудкина процедуру phisicalattack меняем на вот такую
delphi Код:
procedure PhisicalAttack; // команда атаки
var
ppp1: integer ;
begin
buf:=#$04 ; //action
WriteD( TargetID) ;
WriteD( MyX) ;
WriteD( MyY) ;
WriteD( MyZ) ;
WriteC( 0 ) ;
SendToServerEx( NickName) ;
if ppp1 = targetid then begin
ppp1:= targetid
end
else
begin
buf:=HStr( '2F FE 00 00 00 00 00 00 00 00' ) ; //spoil
SendToServerEx( NickName) ;
End ;
ppp1:= targetid
end ;
всё работает кидает спойл на моба 1 раз а другой крипт свипит
Последний раз редактировалось Grinch, 21.05.2008 в 21:33 .
За это сообщение poizon нажился 6 спасибками от:
20.05.2008, 17:15
#3
Новичок
Регистрация: 05.05.2008
Сообщений: 19
Сказал Спасибо: 33
Имеет 10 спасибок в 4 сообщенях
Цитата:
Сообщение от
poizon
всё работает кидает спойл на моба 1 раз а другой крипт свипит
Спасибо тебе, действительно работает, только было бы вообще здорово если бы спойлило как человек. Т.е. если я кого-то спойлю, то сначала пытаюсь его заспойлить и только потом убиваю, в общем если будет возможность то было бы здорово:
1. Чтобы спойл бросался до тех пор пока он не пройдет а не 1 раз.
2. Чтобы свипало 1 раз, а то сейчас он раза по 2 точно пытается, бывает и 2 раза (это палево).
3. Если локомотив оказался в паровозе, то 100% свипается только последний убитый моб, а убитые раньше часто так и лежат синие.
18.03.2010, 04:13
#4
Новичок
Регистрация: 05.11.2009
Сообщений: 16
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
MHz , мож скинуть скрипт на спойл? Заранее благодарна а тоя тут не могу разобрать что скопировать
09.04.2010, 22:45
#5
Новичок
Регистрация: 28.07.2009
Сообщений: 7
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
дайте сылку на скачку а то с тех не качает(
20.05.2008, 17:39
#6
Заблокирован
Регистрация: 10.03.2008
Адрес: Тула
Сообщений: 1,098
Сказал Спасибо: 188
Имеет 108 спасибок в 60 сообщенях
на ассистанта вешаешь спойлера и локомотива пускаешь другого перса, а скриптов нормальных для споила уйма. не каких мозгоипаний не надо
За это сообщение DashKAaa нажился спасибкой от:
21.05.2008, 18:17
#7
Местный
Регистрация: 06.03.2008
Сообщений: 154
Сказал Спасибо: 46
Имеет 130 спасибок в 38 сообщенях
Удалите плизз ВиНиПуХ'а от сюдова нахрен. Пускай где угодно гадости говорит, но тока не в моем топике!
За это сообщение nezabudkin нажился спасибкой от:
21.05.2008, 21:13
#8
Рыцарь
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
Так, Винипуху бан неделя, для начала, остальным - устное предупреждение. Убедительная просьба не сраться в топиках, они не для этого, для этого есть личка.
За это сообщение QaK нажился 2 спасибками от:
21.05.2008, 21:23
#9
Рыцарь
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Цитата:
Сообщение от
QaK
Так, Винипуху бан неделя, для начала, остальным - устное предупреждение. Убедительная просьба не сраться в топиках, они не для этого, для этого есть личка.
От себя считайте форум печатным изданием т.е. правила теже НЕТ мату, имхо админу можно
чисто для связи слов в предложении...
За это сообщение Grinch нажился спасибкой от:
22.05.2008, 01:58
#10
Местный
Регистрация: 31.01.2008
Сообщений: 151
Сказал Спасибо: 25
Имеет 40 спасибок в 35 сообщенях
Цитата:
Сообщение от
Grinch
админу можно
чисто для связи слов в предложении...
и мы, как дети "чистые и не разумные", у админа этому научимся
http://orthodox.etel.ru/2001/10/omate.htm
За это сообщение dfackk нажился 3 спасибками от:
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 21:58 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!