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

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

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

Цитата:
Сообщение от NLObP
Цитата:
Сообщение от user123
Даже если заменить как ты говоришь пишет что нет скролов _interluda.net вот тут например проверь там пвп и бабло достаеться быстро :) есть энчат и кристал заточки
Ок. Попробую.
Попробовал. Как я и говорил - все работат.
Для работы скрипта необходимо его инициализировать - это значит получить пакет ItemList(1B). Обычно это делается открытием инвентаря. На сервере interluda.net потребовалось, что нибудь купить/продать.
Дополнительно надо не забыть поправить константы:
const
Name='имя';
Scroll=955; // 955 - ItemID Scroll: Enchant Weapon (Grade D)
Weapon=129; // 129 - ItemID Sword of Revolution
MaxEnchLvl=21; //max уровень заточки
max=100; //max количество предметов в базе - это сколько места в инвентаре

Исправить как часто точить:
timer.interval:=5000; //время задержки

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

Прямо сейчас заточил до 21 два меча Sword of Revolution.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 29.10.2007, 12:24   #52
Гость
 
Сообщений: n/a
По умолчанию

ItemList(1B) - вот в этом и вопрос почему при открытии инвентаря не срабатывала инициилизация, возможно ли что админы начнут делать защиту исходя из того что большинство для инициилизации скриптов требуют определенного действия?
  Ответить с цитированием
Старый 29.10.2007, 13:00   #53
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

угу если ты решил посмотреть скока у тебя заточек осталось или чё поднял, сразу автобан :) => много КоЛ на разбан => админы заработают денег :twisted:

Добавлено спустя 1 минуту 43 секунды:
Re: Re:
Цитата:
Сообщение от NLObP
Цитата:
Сообщение от NLObP
Цитата:
Сообщение от user123
Даже если заменить как ты говоришь пишет что нет скролов _interluda.net вот тут например проверь там пвп и бабло достаеться быстро :) есть энчат и кристал заточки
Ок. Попробую.
Попробовал. Как я и говорил - все работат.
Для работы скрипта необходимо его инициализировать - это значит получить пакет ItemList(1B). Обычно это делается открытием инвентаря. На сервере interluda.net потребовалось, что нибудь купить/продать.
Дополнительно надо не забыть поправить константы:
const
Name='имя';
Scroll=955; // 955 - ItemID Scroll: Enchant Weapon (Grade D)
Weapon=129; // 129 - ItemID Sword of Revolution
MaxEnchLvl=21; //max уровень заточки
max=100; //max количество предметов в базе - это сколько места в инвентаре

Исправить как часто точить:
timer.interval:=5000; //время задержки

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

Прямо сейчас заточил до 21 два меча Sword of Revolution.
скока сломал ? считал
или при авто заточке главное ритм поймать :)
Grinch вне форума   Ответить с цитированием
Старый 29.10.2007, 14:20   #54
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от user123
ItemList(1B) - вот в этом и вопрос почему при открытии инвентаря не срабатывала инициилизация, возможно ли что админы начнут делать защиту исходя из того что большинство для инициилизации скриптов требуют определенного действия?
Вряд ли можно, что нибудь тут админам сделать, ведь эти пакеты нужны для нормальной работы клиента. Например при открытии инвентаря приходит пакет ItemListPacket(1B), хочет админ или нет. Просто в нашем случае скрипт включается после того как он пришел и повторное окрытие уже ни чего не дает, потому что клиент уже получал этот пакет, возможно при входе перса. Все зависит от сервера, в нем может быть оптимизация посылки пакетов для уменьшения трафика. Тут надо ориентироваться на определенный сервер - ява он или офф.

Цитата:
Сообщение от Grinch
угу если ты решил посмотреть скока у тебя заточек осталось или чё поднял, сразу автобан :) => много КоЛ на разбан => админы заработают денег
Для определения количества предметов выполняются стандартные команды клиента: открыть инвентарь, поднять/бросить на землю предмет, купить в магазине и ничем повредить не могут. Нам нужны только для того, чтобы сервер прислал пакет ItemListPacket(1B) или InventoryUpdate(27), надо только определить какое из этих действий нам подходит. А вот если с помощью пакетхака начнешь использовать теже заточки, которых в инвентаре уже нет, вот тогда и запалял тебя. Поэтому нам и надо отслеживать и не пускать на сервер все пакеты, которые обычно клиент не может послать.

Добавлено спустя 11 минут 48 секунд:
Цитата:
Сообщение от Grinch
скока сломал ? считал
или при авто заточке главное ритм поймать :)
На том серваке до 25 можно смело точить. Так что ничего не сломал. Мой скрипт только на облегчение жизни, но никакие ритмы он поймать не может, это надо отдельно обдумывать и писать другой скрипт. Здесь только на удачу, покупаешь побольше мечей, еще больше заточек и ждешь. Повторяешь снова если не доточилось до нужного уровня. Один меч в любом случае остается. :D
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 31.10.2007, 13:49   #55
Гость
 
Сообщений: n/a
По умолчанию

Прочитал всю темку. Сам пока не пробовал ничего т.к. на работе сижу, но сразу возникла идея.
Вообщем почему бы не сделать что то типа своего языка макросов?
Например самое банальное что пришло в голову:
у бота есть надор пакетов, хотяб таких вот
b1='2F 10 04 00 00 00 00 00 00 00'; // Shield
b2='2F 0B 04 00 00 00 00 00 00 00'; // Mental Shield
b3='2F 23 04 00 00 00 00 00 00 00'; // Empower
b4='2F B4 04 00 00 00 00 00 00 00'; // Wind Walk
b5='2F 36 04 00 00 00 00 00 00 00'; // Concentration

Идея в том, чтоб бот получив команду типа "1,3,5", бафнул бы Shield, Empower, Concentration
Ну это самое простое, а вообще можно это все расширить, причем не вводом кучи команд, а просто добавлением еще одного пакета, например
b6='** ** ** ** ** ** ** ** ** **'; // что нибудь

Тогда возникает несколько вопросов...
1. Почему я ни у кого не видел массива команд? Я просто паскаль не знаю особо, так самые азы токо...
Но почему там бы не сделать что то типа такого
Код:
string[] command =
{
     "2F 10 04 00 00 00 00 00 00 00",	 // Shield
     "2F 23 04 00 00 00 00 00 00 00"	 // Empower
     // и т.д.
};
а потом просто посылать команды в чат, и обрабатывать их
Код:
// str - команда полученная например в приват
while(str!="") // пока строка не пустая...
{
     int l = str.IndexOf(','); // позиция первой ','
     if(l==-1) l = str.Length; // если нету ','
     buf = command[int.Parse(str.Substring(0, l))]; // получение команды по ее номеру                
     SendToServerEx(<че тут писать то хоть?>);
     // и че то типа задержки тут надо наверное...
     str.Remove(0, l); // удаление выполненной команды из строки
}
2. Любую команду можно записать аналогично вот этому b1='2F 10 04 00 00 00 00 00 00 00'?
или это токо скилы так?
3. Можно ли как то запускать готовые макросы(игровые)?
Например сделать макрос типа "delay n"/"target ***"/"assist" и тому подобные, и использовать такой макрос забив его в массив команд, так же как и скилы?
Хотя я почти уверен что нельзя... Это же клиент вроде как макрос выполняет а не сервер, так?
Можно ли как то из скрипта использовать встроенные переменные типа %self, %target, %partyN?

Короче пока сам толком не понял чего хочу, но если все это довести до ума, то такой скрипт можно будет подогнать почти под любые нужды, просто добавив команды и в самом клиенте сдалать макросы типа "имя_бафера 1,2,7,10,15 - где цифры это собственно и есть сами команды
  Ответить с цитированием
Старый 02.11.2007, 20:55   #56
Новичок
 
Регистрация: 05.10.2007
Адрес: Украина
Сообщений: 19
Сказал Спасибо: 0
Имеет 23 спасибок в 13 сообщенях
DeVolf пока неопределено
По умолчанию

друзья нужна помощ!
нужно написать скрипт купли-продажи
вот как изменить усе айтем чтоб в пакет дописывалис обджек иди (98штук) я не знаю(
а вопше пакет выглядит так
Код:
1E 00 00 00 00 62 00 00 00 BA 3A 01 10 8B 10 00 00 01 00 00 00 BB 3A 01 10 8B 10 00 00 01 00 00 00 BC 3A 01 10 8B 10 00 00 01 00 00 00 BD 3A 01 10 8B 10 00 00 01 00 00 00 BE 3A 01 10 8B 10 00 00 01 00 00 00 BF 3A 01 10 8B 10 00 00 01 00 00 00 C0 3A 01 10 8B 10 00 00 01 00 00 00 C1 3A 01 10 8B 10 00 00 01 00 00 00 C2 3A 01 10 8B 10 00 00 01 00 00 00 C3 3A 01 10 8B 10 00 00 01 00 00 00 C4 3A 01 10 8B 10 00 00 01 00 00 00 C5 3A 01 10 8B 10 00 00 01 00 00 00 C6 3A 01 10 8B 10 00 00 01 00 00 00 C7 3A 01 10 8B 10 00 00 01 00 00 00 C8 3A 01 10 8B 10 00 00 01 00 00 00 CB 3A 01 10 8B 10 00 00 01 00 00 00 CC 3A 01 10 8B 10 00 00 01 00 00 00 CD 3A 01 10 8B 10 00 00 01 00 00 00 CE 3A 01 10 8B 10 00 00 01 00 00 00 CF 3A 01 10 8B 10 00 00 01 00 00 00 D1 3A 01 10 8B 10 00 00 01 00 00 00 D2 3A 01 10 8B 10 00 00 01 00 00 00 D3 3A 01 10 8B 10 00 00 01 00 00 00 D4 3A 01 10 8B 10 00 00 01 00 00 00 D5 3A 01 10 8B 10 00 00 01 00 00 00 D6 3A 01 10 8B 10 00 00 01 00 00 00 D8 3A 01 10 8B 10 00 00 01 00 00 00 D9 3A 01 10 8B 10 00 00 01 00 00 00 DA 3A 01 10 8B 10 00 00 01 00 00 00 DB 3A 01 10 8B 10 00 00 01 00 00 00 DC 3A 01 10 8B 10 00 00 01 00 00 00 DE 3A 01 10 8B 10 00 00 01 00 00 00 DF 3A 01 10 8B 10 00 00 01 00 00 00 E0 3A 01 10 8B 10 00 00 01 00 00 00 E1 3A 01 10 8B 10 00 00 01 00 00 00 E2 3A 01 10 8B 10 00 00 01 00 00 00 E3 3A 01 10 8B 10 00 00 01 00 00 00 E4 3A 01 10 8B 10 00 00 01 00 00 00 E6 3A 01 10 8B 10 00 00 01 00 00 00 E7 3A 01 10 8B 10 00 00 01 00 00 00 E8 3A 01 10 8B 10 00 00 01 00 00 00 E9 3A 01 10 8B 10 00 00 01 00 00 00 EA 3A 01 10 8B 10 00 00 01 00 00 00 EB 3A 01 10 8B 10 00 00 01 00 00 00 EC 3A 01 10 8B 10 00 00 01 00 00 00 ED 3A 01 10 8B 10 00 00 01 00 00 00 EE 3A 01 10 8B 10 00 00 01 00 00 00 EF 3A 01 10 8B 10 00 00 01 00 00 00 F0 3A 01 10 8B 10 00 00 01 00 00 00 F1 3A 01 10 8B 10 00 00 01 00 00 00 F2 3A 01 10 8B 10 00 00 01 00 00 00 F3 3A 01 10 8B 10 00 00 01 00 00 00 F4 3A 01 10 8B 10 00 00 01 00 00 00 F5 3A 01 10 8B 10 00 00 01 00 00 00 F6 3A 01 10 8B 10 00 00 01 00 00 00 F7 3A 01 10 8B 10 00 00 01 00 00 00 F9 3A 01 10 8B 10 00 00 01 00 00 00 FA 3A 01 10 8B 10 00 00 01 00 00 00 FB 3A 01 10 8B 10 00 00 01 00 00 00 FC 3A 01 10 8B 10 00 00 01 00 00 00 FD 3A 01 10 8B 10 00 00 01 00 00 00 FE 3A 01 10 8B 10 00 00 01 00 00 00 FF 3A 01 10 8B 10 00 00 01 00 00 00 00 3B 01 10 8B 10 00 00 01 00 00 00 01 3B 01 10 8B 10 00 00 01 00 00 00 02 3B 01 10 8B 10 00 00 01 00 00 00 03 3B 01 10 8B 10 00 00 01 00 00 00 04 3B 01 10 8B 10 00 00 01 00 00 00 05 3B 01 10 8B 10 00 00 01 00 00 00 06 3B 01 10 8B 10 00 00 01 00 00 00 08 3B 01 10 8B 10 00 00 01 00 00 00 09 3B 01 10 8B 10 00 00 01 00 00 00 0A 3B 01 10 8B 10 00 00 01 00 00 00 0D 3B 01 10 8B 10 00 00 01 00 00 00 0E 3B 01 10 8B 10 00 00 01 00 00 00 0F 3B 01 10 8B 10 00 00 01 00 00 00 10 3B 01 10 8B 10 00 00 01 00 00 00 11 3B 01 10 8B 10 00 00 01 00 00 00 12 3B 01 10 8B 10 00 00 01 00 00 00 13 3B 01 10 8B 10 00 00 01 00 00 00 14 3B 01 10 8B 10 00 00 01 00 00 00 15 3B 01 10 8B 10 00 00 01 00 00 00 16 3B 01 10 8B 10 00 00 01 00 00 00 17 3B 01 10 8B 10 00 00 01 00 00 00 18 3B 01 10 8B 10 00 00 01 00 00 00 19 3B 01 10 8B 10 00 00 01 00 00 00 1A 3B 01 10 8B 10 00 00 01 00 00 00 1B 3B 01 10 8B 10 00 00 01 00 00 00 1C 3B 01 10 8B 10 00 00 01 00 00 00 1D 3B 01 10 8B 10 00 00 01 00 00 00 1E 3B 01 10 8B 10 00 00 01 00 00 00 1F 3B 01 10 8B 10 00 00 01 00 00 00 20 3B 01 10 8B 10 00 00 01 00 00 00 23 3B 01 10 8B 10 00 00 01 00 00 00 24 3B 01 10 8B 10 00 00 01 00 00 00 25 3B 01 10 8B 10 00 00 01 00 00 00 26 3B 01 10 8B 10 00 00 01 00 00 00 27 3B 01 10 8B 10 00 00 01 00 00 00
прошу помощи ибо я еше не все знаю.... :D
DeVolf вне форума   Ответить с цитированием
Старый 03.11.2007, 18:35   #57
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: ДА БУДЕТ БОТ!

В дополнение к скрипту "кач дракона" выкладываю "ботика".
Возможности скрипта: Сам атакует, сам подбирает дроп относительно выбранного нами центра.
Внесены изменения для отличия игроков от мобов, работает в случае если игрок прибежал из-за границы видимости. Если он рядом то бот принимает его за цель. Атаковать не будет, так как не зажат контрол.
Все сообщения по SAY можно закомментить, они только для отладки скрипта. Скрипт в процессе разработки.

Изменяем константы: Name, Pet, Radius, DeltaZ, по желанию max. Для инициализации скрипта надо получить пакет UserInfo(04). Как пример: открыть инвентарь, напасть на моба. Включить работу скрипта соц.действие Yes. Остановить No.

Спасибо Ворону за его "Локомотив"!

Код:
//БОТ with 'Hachling of Star' by NLObP

//******************************************************************************
Const
  Name='NLObP';      //имя чара
  Pet='';           //имя Пета
  max=50;          //max количество контролируемых мобов
  Radius=1500;    //радиус участка для поиска мобов
  DeltaZ=250;    //глубина/высота до мобов
//******************************************************************************
VAR
  NameChar: string;
  CentrKachX,CentrKachY,RadiusKachX,RadiusKachY, CharID, PetID, Attacker, ObjectID: integer;
  CentrKachXex,CentrKachYex,RadiusKachXex,RadiusKachYex: extended;
  tempX,tempY, tempLenght: extended;
  tempZ: integer;
  ColvoMobs, ColvoMobs2: integer;
  CurHP, MaxHP, CurMP, MaxMP, time1 :integer;
  BotCoordX,BotCoordY,BotCoordZ: integer; //координаты бота
  BotCoordXext,BotCoordYext,BotCoordZext:extended;
  MinPutID: integer; //указывает индекс моба в базе путь до которого самый короткий
  MinPutLenght: extended; //квадрат расстояния до ближайшего моба
  timer1: TTimer; //основной таймер
  timer2: TTimer; //вспомогательный
  i, itm, SocialID:integer; // вспомогательная
  AddMob, UnderAttack, scrready: boolean;
  NeedBackup:boolean;

  ItemBase:      array[1..4,1..max] of integer; // описатель предметов
  CharBase:      array[1..4,1..max] of integer; // описатель игроков (которых не атакуем)
  MobBase:      array[1..4,1..max] of integer; // описатель мобов вокруг
  MobBaseExt:   array[1..4,1..max] of extended; // описатель мобов вокруг вспомогательная
{
  1 - ID
  2 - X
  3 - Y
  4 - Z
  5 - Attakable         //агрессивные?
}

//******************************************************************************
procedure Init; //Вызывается при включении скрипта
begin
  UnderAttack:=false;

  itm:=0;
  NeedBackup:=false;

  scrready:=false;

  colvomobs:=0;
  colvomobs2:=0;

  timer1:=TTimer.Create(nil);
  timer1.OnTimer:=@OnTimer1; //
  timer1.enabled:=False; //
  timer1.interval:=2000;

  timer2:=TTimer.Create(nil);
  timer2.OnTimer:=@OnTimer2;
  timer2.enabled:=false; //
  timer2.interval:=15000;
end;
//******************************************************************************
procedure Free; //Вызывается при выключении скрипта
begin
  timer1.Free;
  timer2.Free;
end;

//******************************************************************************
//для отладки скрипта
procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(Name);
  WriteS(msg);
  SendToClientEx(Name);
end;

//*******************************************************************
function Wait(var tick:integer; Timewait: Integer): Boolean;
// сквозная проверка без остановки скрипта (c)dmitry501
// modifed by Sh00rGo
var
  t: integer;
begin
  result:=false;
  t:=Round(Time*86400);
  if t>(tick+Timewait/1000) then begin
    if tick>0 then result:=true;
    tick:=t;
  end;
end;

//******************************************************************************
procedure OnTimer2(Sender: TObject);
begin
  //say('Вышло время');
  UnderAttack:=false;     //отцепимся от атакуемого
  if itm>0 then needbackup:=true;
end;

//******************************************************************************
procedure ReqGetItem;
begin
  if itm=0 then begin
    timer1.enabled:=true; //включаем отсчет времени
    needbackup:=false;
    exit;
  end;
  timer1.enabled:=false; //выключаем отсчет времени
  //перебираем базу
  for i:=1 to max do begin
    //если нашли, то обнуляем
    if (ItemBase[1,i]<>0) then begin  //ObjectID
      say('ReqGetItem');
      //даем команду подобрать вещь
      buf:=#$04;
      WriteD(ItemBase[1,i]);
      WriteD(ItemBase[2,i]);
      WriteD(ItemBase[3,i]);
      WriteD(ItemBase[4,i]);
      WriteH(00);
      SendToServerEx(Name);
    end;
  end;
end;

//******************************************************************************
procedure OnTimer1(Sender: TObject);
begin
  if UnderAttack then begin
    TargetAttacker(Attacker);
    exit;
  end;
  //say('Вычисляем ближайшего');
  MinPutID:=0;
  MinPutLenght:=99999999;
  ///ищем самого близково к нам моба
  for i:=1 to max do begin
    if (MobBaseExt[1,i]<>0) then begin
      tempX:=MobBaseExt[2,i];
      tempY:=MobBaseExt[3,i];
      //теорема Пифагора c^2=a^2+b^2
      tempLenght:=int(sqrt((BotCoordXext-tempx)*(BotCoordXext-tempx)+(BotCoordYext-tempy)*(BotCoordYext-tempy)));
      if (tempLenght<MinPutLenght) and (PetID<>MobBase[1,i]) and (CharID<>MobBase[1,i]) then begin
        MinPutLenght:=tempLenght;
        MinPutID:=i;
        //say('MinPutID='+inttostr(MinPutID)+' MinPutLenght='+Floattostr(MinPutLenght));
      end;
    end;
  end;
  say('MinPutID='+inttostr(MinPutID)+' MinPutLenght='+Floattostr(MinPutLenght));
  if (minputid<>0) then begin
      Attacker:=MobBase[1,MinPutID];
      TargetAttacker(Attacker);
      say('Attack!');
      UnderAttack:=true;     //зацепимся за атакуемого
  end;
end;
//******************************************************************************
procedure TargetAtt;
begin
    buf:=#$04;
    WriteD(Attacker);
    WriteD(BotCoordX);
    WriteD(BotCoordY);
    WriteD(BotCoordZ);
    WriteC(00);
    SendToServerEx(Name);
end;
//******************************************************************************
procedure TargetAttacker(Attacker: Integer);
begin
  TargetAtt;
  TargetAtt;
end;

//******************************************************************************
//          вызывается при приходе каждого пакета если скрипт включен
//******************************************************************************
begin
  //****************************************************************************
  if pck='' then exit;
  //****************************************************************************
  //NPCInfo, запоминаем мобов
  if FromServer and (ConnectName=Name) and (pck[1]=#$16) then begin
    AddMob:=true;
    //проверка, входит моб в радиус действия?
    tempX:=ReadD(14); //x
    tempY:=ReadD(18); //y
    tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-tempY));
    //say('tempX='+Floattostr(tempX)+' tempY='+Floattostr(int(tempY)));
    //say('Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
    tempZ:=BotCoordZ-ReadD(22);
    if tempz<0 then tempZ:=tempz*(-1);
    //say('TempZ='+inttostr(tempz));
    //say('BotCoordZ='+inttostr(BotCoordZ));
    //say('MobCoordZ='+inttostr(readd(22)));
    if tempZ<=DeltaZ then begin
      if (tempLenght<Radius) then begin
        for i:=1 to max do begin
          //если нашли Моба в базе, то коректируем его координаты на новые
          if (MobBase[1,i]=ReadD(2)) and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin
            MobBase[2,i]:=ReadD(14); //x
            MobBase[3,i]:=ReadD(18); //y
            MobBase[4,i]:=ReadD(22); //z
            //Ext массив
            MobBaseExt[2,i]:=ReadD(14); //x
            MobBaseExt[3,i]:=ReadD(18); //y
            MobBaseExt[4,i]:=ReadD(22); //z
            AddMob:=false;
            //say('Корректируем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
            //say('Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
            //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
          end;
        end;
        //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового моба
        for i:=1 to max do begin
          if (MobBase[1,i]=0) and AddMob and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin
            //запоминаем моба в свободную ячейку
            MobBase[1,i]:=ReadD(2); //ObjectID
            MobBase[2,i]:=ReadD(14); //x
            MobBase[3,i]:=ReadD(18); //y
            MobBase[4,i]:=ReadD(22); //z
            //Ext массив
            MobBaseExt[1,i]:=ReadD(2); //ObjectID
            MobBaseExt[2,i]:=ReadD(14); //x
            MobBaseExt[3,i]:=ReadD(18); //y
            MobBaseExt[4,i]:=ReadD(22); //z
            inc(colvomobs);
            say('Запоминаем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
            //say('Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
            //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
            break;
          end;
        end;
      end;
    end;
  end;

  //****************************************************************************
  //CharInfo, запоминаем мобов
  if FromServer and (ConnectName=Name) and (pck[1]=#$03) then begin
    AddMob:=true;
    for i:=1 to max do begin
      //если нашли Моба в базе, то коректируем его координаты на новые
      if (CharBase[1,i]=ReadD(18)) then begin
        CharBase[2,i]:=ReadD(2); //x
        CharBase[3,i]:=ReadD(6); //y
        CharBase[4,i]:=ReadD(10); //z
        AddMob:=false;
        //say('Корректируем координаты Игрока');
      end;
    end;
    //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового моба
    for i:=1 to max do begin
      if (CharBase[1,i]=0) and AddMob then begin
        //запоминаем моба в свободную ячейку
        CharBase[1,i]:=ReadD(18); //ObjectID
        CharBase[2,i]:=ReadD(2); //x
        CharBase[3,i]:=ReadD(6); //y
        CharBase[4,i]:=ReadD(10); //z
        NameChar:=ReadS(22);
        say('Приближается Игрок '+NameChar+'!!!');
        break;
      end;
    end;
  end;

  //****************************************************************************
  //MoveToLocation, коректируем координаты мобов в базе
  if FromServer and (ConnectName=Name) and (pck[1]=#$01) then begin
    //say('MoveToLocation');
    AddMob:=true;
    //проверка, входит моб в радиус действия?
    tempX:=ReadD(6); //x
    tempY:=ReadD(10); //y
    tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-tempY));
    //say('CentrKachXex='+Floattostr(CentrKachXex)+' CentrKachYex='+Floattostr(CentrKachYex));
    //say('tempX='+Floattostr(tempX)+' tempY='+Floattostr(tempY));
    //say('Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(tempLenght));
    tempZ:=BotCoordZ-ReadD(14);
    if tempz<0 then tempZ:=tempz*(-1);
    //say('TempZ='+inttostr(tempz));
    //say('BotCoordZ='+inttostr(BotCoordZ));
    //say('MobCoordZ='+inttostr(readd(14)));
    if tempZ<=DeltaZ then begin
      if (int(tempLenght)<Radius) then begin
        //say('Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
        //перебираем базу и ищем там моба который бежит
        for i:=1 to max do begin
          //если нашли Моба в базе, то коректируем его координаты на новые
          if (MobBase[1,i]=ReadD(2)) and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) and (CharBase[1,i]<>ReadD(2)) then begin  //ObjectID
            MobBase[2,i]:=ReadD(6); //x
            MobBase[3,i]:=ReadD(10); //y
            MobBase[4,i]:=ReadD(14); //z
            //Ext массив
            MobBaseExt[2,i]:=ReadD(6); //x
            MobBaseExt[3,i]:=ReadD(10); //y
            MobBaseExt[4,i]:=ReadD(14); //z
            //say('Корректируем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
            //say('>Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
            //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
            AddMob:=false;
          end;
        end;
        //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового моба
        for i:=1 to max do begin
          if (MobBase[1,i]=0) and AddMob and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin
            //запоминаем моба в свободную ячейку
            MobBase[1,i]:=ReadD(2); //ObjectID
            MobBase[2,i]:=ReadD(6); //x
            MobBase[3,i]:=ReadD(10); //y
            MobBase[4,i]:=ReadD(14); //z
            //Ext массив
            MobBaseExt[1,i]:=ReadD(2); //ObjectID
            MobBaseExt[2,i]:=ReadD(6); //x
            MobBaseExt[3,i]:=ReadD(10); //y
            MobBaseExt[4,i]:=ReadD(14); //z
            inc(colvomobs);
            //colvomobs:=colvomobs+1;
            say('Запоминаем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
            //say('>Radius='+Floattostr(Radius)+' tempLenght='+Floattostr(int(tempLenght)));
            //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
            break;
          end;
        end;
      end;
    end;
  end;

  //****************************************************************************
  //MagicSkillUse 48, Attack 05
  if FromServer and (ConnectName=Name) and ((pck[1]=#$48) or (pck[1]=#$05)) then begin
    if UnderAttack then exit; //сначало убъем одного
    Attacker:=ReadD(2);
    ObjectID:=ReadD(6);
    if (Attacker<>ObjectID) and (CharID=ObjectID) then begin
      UnderAttack:=true;     //нас атакуют
      needbackup:=false;
      Say('Нас атакуют!');
      TargetAttacker(Attacker);
    end;
  end;

  //****************************************************************************
  //если принят пакет Die
  if FromServer and (ConnectName=Name) and (pck[1]=#$06) then begin
    //ищем моба в базе
    if (Attacker=ReadD(2)) then begin
      UnderAttack:=false; //убили атакующего моба
      //say('UnderAttack=false');
      timer2.enabled:=true; //включаем отсчет времени
    end;
    for i:=1 to max do begin
      //очишаем запись связанную с етим мобом
      if (MobBase[1,i]=ReadD(2)) then begin
        dec(colvomobs);
        //say('Удаляем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));
        //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
        MobBase[1,i]:=0; //ObjectID
        MobBase[2,i]:=0; //x
        MobBase[3,i]:=0; //y
        MobBase[4,i]:=0; //z
        //Ext массив
        MobBaseExt[1,i]:=0;
        MobBaseExt[2,i]:=0;
        MobBaseExt[3,i]:=0;
        MobBaseExt[4,i]:=0;
        break;
      end;
    end;
  end;

  //****************************************************************************
  //если принят пакет DeleteObject
  if FromServer and (ConnectName=Name) and (pck[1]=#$12) then begin
    //ищем моба в базе
    //say('DeleteObject');
    if (Attacker=ReadD(2)) then begin
      UnderAttack:=false; //убили атакующего моба
      //say('UnderAttack=false');
      timer2.enabled:=true; //включаем отсчет времени
    end;
    for i:=1 to max do begin
      //очишаем запись связанную с етим мобом
      if (MobBase[1,i]=ReadD(2)) then begin
        //say('Удаляем координаты Моба');
        dec(colvomobs);
        //say('Удаляем координаты Моба'+' colvomobs='+inttostr(colvomobs));
        //say('ID='+inttostr(MobBase[1,i])+' X='+inttostr(MobBase[2,i])+' Y='+inttostr(MobBase[3,i])+' Z='+inttostr(MobBase[4,i]));
        MobBase[1,i]:=0; //ObjectID
        MobBase[2,i]:=0; //x
        MobBase[3,i]:=0; //y
        MobBase[4,i]:=0; //z
        //Ext массив
        MobBaseExt[1,i]:=0;
        MobBaseExt[2,i]:=0;
        MobBaseExt[3,i]:=0;
        MobBaseExt[4,i]:=0;
        break;
      end;
    end;
    for i:=1 to max do begin
      //если нашли в базе, то удаляем
      if (CharBase[1,i]=ReadD(2)) then begin
        CharBase[2,i]:=0; //x
        CharBase[3,i]:=0; //y
        CharBase[4,i]:=0; //z
        //say('Удаляем координаты Игрока');
      end;
    end;
  end;

  //****************************************************************************
  //ValidatePosition если принят пакет от клиента с моими кординатами то
  if FromClient and (ConnectName=Name) and (pck[1]=#$48) then begin
    //запоминаем мои координаты
    BotCoordX:=ReadD(2);
    BotCoordY:=ReadD(6);
    BotCoordZ:=ReadD(10);
    //ext
    BotCoordXext:=ReadD(2);
    BotCoordYext:=ReadD(6);
    BotCoordZext:=ReadD(10);
    //say('Запоминаем координаты Бота');
    //say('Бот X='+inttostr(BotCoordX)+' Y='+inttostr(BotCoordY)+' Z='+inttostr(BotCoordZ));
    //say('Бот Xext='+floattostr(BotCoordXext)+' Yext='+floattostr(BotCoordYext)+' Zext='+floattostr(BotCoordZext));
  end;

  //****************************************************************************
  //если от сервака принят пакет с ИД и Координатами членов пати то
  if FromServer and (ConnectName=Name) and (pck[1]=#$a7) then begin
      //запоминаем ИД командира
      CharID:=ReadD(6);
      if scrready then exit
      else begin
        Say('Скрипт готов к работе. Запомнил ИД лидера');
        scrready:=true;
      end;
  end;

  //****************************************************************************
  //если от сервака принят пакет с UserInfo
  if FromServer and (ConnectName=Name) and (pck[1]=#$04) then begin
      //Запоминаем собственный ИД
      CharID:=ReadD(18);
      if scrready then exit
      else begin
        Say('Скрипт готов к работе. Запомнил ИД лидера');
        scrready:=true;
      end;
  end;

  //****************************************************************************
  //если от сервака принят пакет с PetInfo
  if FromServer and (PetID=0) and (ConnectName=Name) and (pck[1]=#$b1) then PetID:=ReadD(6);

  //****************************************************************************
  //DropItem - выпала вещь
  if FromServer and (ConnectName=Name) and (pck[1]=#$0C) then begin
    //чужие вещи не берем
    if (Attacker=ReadD(2)) then begin
      timer1.enabled:=false; //выключаем бота
      AddMob:=true;
      //перебираем базу
      for i:=1 to max do begin
        //если нашли, то корректируем его координаты на новые
        if (ItemBase[1,i]=ReadD(6)) then begin  //ObjectID
          ItemBase[2,i]:=ReadD(14); //x
          ItemBase[3,i]:=ReadD(18); //y
          ItemBase[4,i]:=ReadD(22); //z
          AddMob:=false;
          inc(itm);
          NeedBackup:=true;
          say('Корректируем данные по предмету');
        end;
      end;
      //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем
      for i:=1 to max do begin
        if (ItemBase[1,i]=0) then begin
          //запоминаем в свободную ячейку
          ItemBase[1,i]:=ReadD(6); //ObjectID
          ItemBase[2,i]:=ReadD(14); //x
          ItemBase[3,i]:=ReadD(18); //y
          ItemBase[4,i]:=ReadD(22); //z
          inc(itm);
          NeedBackup:=true;
          say('Добавили данные по предмету');
          break;
        end;
      end;
    end;
    say('ColvoItm='+inttostr(itm));
  end;

  //****************************************************************************
  //Пока отключил. Бежит сломя голову за тридевять земель, не обращая внимания что лежит рядом.
  //To Do: Сделать проверку на расстояние.
  //SpawnItem - выляется вещь
  {if FromServer and (ConnectName=Name) and (pck[1]=#$0B) then begin
    timer1.enabled:=false; //выключаем бота
    AddMob:=true;
    //перебираем базу
    for i:=1 to max do begin
        //если нашли, то корректируем его координаты на новые
      if (ItemBase[1,i]=ReadD(2)) then begin  //ObjectID
        ItemBase[2,i]:=ReadD(10); //x
        ItemBase[3,i]:=ReadD(14); //y
        ItemBase[4,i]:=ReadD(18); //z
        AddMob:=false;
        inc(itm);
        NeedBackup:=true;
        say('Корректируем данные по предмету');
      end;
      //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем
      for i:=1 to max do begin
        if (ItemBase[1,i]=0) and AddMob then begin
          //запоминаем в свободную ячейку
          ItemBase[1,i]:=ReadD(2); //ObjectID
          ItemBase[2,i]:=ReadD(10); //x
          ItemBase[3,i]:=ReadD(14); //y
          ItemBase[4,i]:=ReadD(18); //z
          inc(itm);
          NeedBackup:=true;
          say('Добавили данные по предмету');
          break;
        end;
      end;
    end;
    say('ColvoItm='+inttostr(itm));
  end;}

  //****************************************************************************
  if Wait(time1,2000) and NeedBackup and (underAttack=false) then ReqGetItem;

  //****************************************************************************
  //определяем реальность поднятия вещи
  //GetItem
  if FromServer and (ConnectName=Name) and (pck[1]=#$0D) then begin
    //перебираем базу
    for i:=1 to max do begin
      //если нашли, то обнуляем
      if (ItemBase[1,i]=ReadD(6)) then begin  //ObjectID
        ItemBase[1,i]:=0; //x
        ItemBase[2,i]:=0; //x
        ItemBase[3,i]:=0; //y
        ItemBase[4,i]:=0; //z
        dec(itm);
        //say('Удаляем данные по предмету');
      end;
    end;
    if itm=0 then begin
    needbackup:=false;
    timer1.enabled:=true;
    end;
    say('ColvoItm='+inttostr(itm));
  end;

  //****************************************************************************
  if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
    SocialID:=ReadD(2);
    case SocialID of
      //социальное действие Yes для начала
      6: begin
        //if CharID=0 then exit;
        CentrKachX:=BotCoordX;
        CentrKachY:=BotCoordY;
        CentrKachXex:=BotCoordXext;
        CentrKachYex:=BotCoordYext;
        //say('Получили координаты центра');
        say('X='+inttostr(BotCoordX)+' Y='+inttostr(BotCoordY));
        timer1.enabled:=true;
        Say('Команда Старт!!!');
        exit;
      end;
      //социальное действие No для окончания
      5: begin
        //if CharID=0 then exit;
        timer1.enabled:=false;
        Say('Команда Стоп!!!');
        exit;
      end;
    end;
  end;
end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


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

фак... ппц ... респект!!!! слов нет :) ждём продолжения

Добавлено спустя 7 минут 55 секунд:
Re:
Цитата:
Сообщение от DeVolf
друзья нужна помощ!
нужно написать скрипт купли-продажи
вот как изменить усе айтем чтоб в пакет дописывалис обджек иди (98штук) я не знаю(
а вопше пакет выглядит так
Код:
1E 00 00 00 00 62 00 00 00 BA 3A 01 10 8B 10 00 00 01 00 00 00 BB 3A 01 10 8B 10 00 00 01 00 00 00 BC 3A 01 10 8B 10 00 00 01 00 00 00 BD 3A 01 10 8B 10 00 00 01 00 00 00 BE 3A 01 10 8B 10 00 00 01 00 00 00 BF 3A 01 10 8B 10 00 00 01 00 00 00 C0 3A 01 10 8B 10 00 00 01 00 00 00 C1 3A 01 10 8B 10 00 00 01 00 00 00 C2 3A 01 10 8B 10 00 00 01 00 00 00 C3 3A 01 10 8B 10 00 00 01 00 00 00 C4 3A 01 10 8B 10 00 00 01 00 00 00 C5 3A 01 10 8B 10 00 00 01 00 00 00 C6 3A 01 10 8B 10 00 00 01 00 00 00 C7 3A 01 10 8B 10 00 00 01 00 00 00 C8 3A 01 10 8B 10 00 00 01 00 00 00 CB 3A 01 10 8B 10 00 00 01 00 00 00 CC 3A 01 10 8B 10 00 00 01 00 00 00 CD 3A 01 10 8B 10 00 00 01 00 00 00 CE 3A 01 10 8B 10 00 00 01 00 00 00 CF 3A 01 10 8B 10 00 00 01 00 00 00 D1 3A 01 10 8B 10 00 00 01 00 00 00 D2 3A 01 10 8B 10 00 00 01 00 00 00 D3 3A 01 10 8B 10 00 00 01 00 00 00 D4 3A 01 10 8B 10 00 00 01 00 00 00 D5 3A 01 10 8B 10 00 00 01 00 00 00 D6 3A 01 10 8B 10 00 00 01 00 00 00 D8 3A 01 10 8B 10 00 00 01 00 00 00 D9 3A 01 10 8B 10 00 00 01 00 00 00 DA 3A 01 10 8B 10 00 00 01 00 00 00 DB 3A 01 10 8B 10 00 00 01 00 00 00 DC 3A 01 10 8B 10 00 00 01 00 00 00 DE 3A 01 10 8B 10 00 00 01 00 00 00 DF 3A 01 10 8B 10 00 00 01 00 00 00 E0 3A 01 10 8B 10 00 00 01 00 00 00 E1 3A 01 10 8B 10 00 00 01 00 00 00 E2 3A 01 10 8B 10 00 00 01 00 00 00 E3 3A 01 10 8B 10 00 00 01 00 00 00 E4 3A 01 10 8B 10 00 00 01 00 00 00 E6 3A 01 10 8B 10 00 00 01 00 00 00 E7 3A 01 10 8B 10 00 00 01 00 00 00 E8 3A 01 10 8B 10 00 00 01 00 00 00 E9 3A 01 10 8B 10 00 00 01 00 00 00 EA 3A 01 10 8B 10 00 00 01 00 00 00 EB 3A 01 10 8B 10 00 00 01 00 00 00 EC 3A 01 10 8B 10 00 00 01 00 00 00 ED 3A 01 10 8B 10 00 00 01 00 00 00 EE 3A 01 10 8B 10 00 00 01 00 00 00 EF 3A 01 10 8B 10 00 00 01 00 00 00 F0 3A 01 10 8B 10 00 00 01 00 00 00 F1 3A 01 10 8B 10 00 00 01 00 00 00 F2 3A 01 10 8B 10 00 00 01 00 00 00 F3 3A 01 10 8B 10 00 00 01 00 00 00 F4 3A 01 10 8B 10 00 00 01 00 00 00 F5 3A 01 10 8B 10 00 00 01 00 00 00 F6 3A 01 10 8B 10 00 00 01 00 00 00 F7 3A 01 10 8B 10 00 00 01 00 00 00 F9 3A 01 10 8B 10 00 00 01 00 00 00 FA 3A 01 10 8B 10 00 00 01 00 00 00 FB 3A 01 10 8B 10 00 00 01 00 00 00 FC 3A 01 10 8B 10 00 00 01 00 00 00 FD 3A 01 10 8B 10 00 00 01 00 00 00 FE 3A 01 10 8B 10 00 00 01 00 00 00 FF 3A 01 10 8B 10 00 00 01 00 00 00 00 3B 01 10 8B 10 00 00 01 00 00 00 01 3B 01 10 8B 10 00 00 01 00 00 00 02 3B 01 10 8B 10 00 00 01 00 00 00 03 3B 01 10 8B 10 00 00 01 00 00 00 04 3B 01 10 8B 10 00 00 01 00 00 00 05 3B 01 10 8B 10 00 00 01 00 00 00 06 3B 01 10 8B 10 00 00 01 00 00 00 08 3B 01 10 8B 10 00 00 01 00 00 00 09 3B 01 10 8B 10 00 00 01 00 00 00 0A 3B 01 10 8B 10 00 00 01 00 00 00 0D 3B 01 10 8B 10 00 00 01 00 00 00 0E 3B 01 10 8B 10 00 00 01 00 00 00 0F 3B 01 10 8B 10 00 00 01 00 00 00 10 3B 01 10 8B 10 00 00 01 00 00 00 11 3B 01 10 8B 10 00 00 01 00 00 00 12 3B 01 10 8B 10 00 00 01 00 00 00 13 3B 01 10 8B 10 00 00 01 00 00 00 14 3B 01 10 8B 10 00 00 01 00 00 00 15 3B 01 10 8B 10 00 00 01 00 00 00 16 3B 01 10 8B 10 00 00 01 00 00 00 17 3B 01 10 8B 10 00 00 01 00 00 00 18 3B 01 10 8B 10 00 00 01 00 00 00 19 3B 01 10 8B 10 00 00 01 00 00 00 1A 3B 01 10 8B 10 00 00 01 00 00 00 1B 3B 01 10 8B 10 00 00 01 00 00 00 1C 3B 01 10 8B 10 00 00 01 00 00 00 1D 3B 01 10 8B 10 00 00 01 00 00 00 1E 3B 01 10 8B 10 00 00 01 00 00 00 1F 3B 01 10 8B 10 00 00 01 00 00 00 20 3B 01 10 8B 10 00 00 01 00 00 00 23 3B 01 10 8B 10 00 00 01 00 00 00 24 3B 01 10 8B 10 00 00 01 00 00 00 25 3B 01 10 8B 10 00 00 01 00 00 00 26 3B 01 10 8B 10 00 00 01 00 00 00 27 3B 01 10 8B 10 00 00 01 00 00 00
прошу помощи ибо я еше не все знаю.... :D
народ один я это вижу или пакеты у него в пасете по диоганали совподают :) не ет прикол такой наверное
Grinch вне форума   Ответить с цитированием
Старый 04.11.2007, 15:32   #59
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от DeVolf
да что та есть похожие) но увы ...)
так что мне некто не может помоч?
В чем помоч-то?

Добавлено спустя 59 минут 57 секунд:
Re: ДА БУДЕТ БОТ!
Немного подправил скрипт Бота.
Внес изменения в кач дракона, чтобы он мог атаковать и без маны.
Код:
//автоматический кач 'Hatchling of the Stars' by NLObP

//******************************************************************************
// Для работы скрипта:
// 1 - Саммоним дракона
// 2 - кладем ему еду
//******************************************************************************
// На автомате, при нападении хозяина на моба дракон автоматически ассистит
// при необходимости лечит себя, после боя следует за хозяином.
//******************************************************************************

//******************************************************************************
//                   константы и переменные скрипта
//******************************************************************************
const
    Owner='NLObP';     //ник перса хозяина
    Pet='';                  //имя Пета
var
    OwnerID, PetID, TargetID : Integer; //ИД хозяина, пета, ИД таргета
    CoordX, CoordY, CoordZ : String;   //координаты пета
    Cmd :String;                      //команда пету
    CurHP, MaxHP, CurMP, MaxMP, i : Integer;
    tick: Integer;
    timerA: TTimer;
    timerB: TTimer;
    timerHP: TTimer;
    MagicAtck:boolean;

//******************************************************************************
//                          Подпрограммы
//******************************************************************************
//(c)dmitry501
//если ставить sleep() то скрипт останавливается на время, но и пакеты тоже
//не принимаются и не отправляются, так вот эта функция позваляет избежать этого
function Pause(Timewait: Integer):Boolean;
// сквозная проверка без остановки скрипта
var
    t : integer;
begin
    result:=false;
    t:= Round(Time*86400);
    if t>(tick+Timewait) then
      begin
        tick:=t;
        result:=true;
      end;
end;

//все сообщения ботов в приватном чате патилидера
//видны только нам
procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(ConnectName);
  WriteS(msg);
  SendToClientEx(Owner);
end;

procedure OnTimerA(Sender: TObject);
begin
    //пакет RequestActionUse;
    buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
    SendToServerEX(Owner);
    //Say('магическая атака пета');
end;

procedure OnTimerB(Sender: TObject);
begin
    //пакет RequestActionUse;
    buf:=hstr('45 10 00 00 00 00 00 00 00 00'); //атака пета
    SendToServerEX(Owner);
end;

procedure OnTimerHP(Sender: TObject);
begin
    buf:=hstr('45 EE 03 00 00 00 00 00 00 00'); //пет лечиться
    SendToServerEX(Owner);
end;

//******************************************************************************
//                 Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
    MagicAtck:=true; //магическая атака
    OwnerID:=0;
    PetID:=0;
    timerA:=TTimer.Create(nil);
    timerA.OnTimer:=@OnTimerA;
    timerA.enabled:=false;
    timerA.interval:=5000; //время отката магии пета
    timerB:=TTimer.Create(nil);
    timerB.OnTimer:=@OnTimerB;
    timerB.enabled:=false;
    timerB.interval:=5000; //время отката
    timerHP:=TTimer.Create(nil);
    timerHP.OnTimer:=@OnTimerHP;
    timerHP.enabled:=false;
    timerHP.interval:=2000; //время отката лечения пета
end;

//******************************************************************************
//                 Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
     timerA.Free;
     timerB.Free;
     timerHP.Free;
end;

//******************************************************************************
//       Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
  //не обрабатываем пустые пакеты
  if pck='' then exit;

  //если от сервака принят пакет с UserInfo
  if FromServer and (OwnerID=0) and (ConnectName=Owner) and (pck[1]=#$04) then begin
      //Запоминаем собственный ИД
      OwnerID:=ReadD(18);
      Say('Скрипт готов к работе!');
  end;

  //пакет Attack
  //атаковать, если хозяин напал на цель
  if FromServer and (ConnectName=Owner) and (pck[1]=#$05) and (OwnerID=ReadD(2)) then begin
      if (TargetID<>0) and (OwnerID<>TargetID) then begin
        if magicatck then begin
          buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
          SendToServerEX(Owner);
          Say('Атакую магией!');
          TimerA.enabled:=true;
          TimerB.enabled:=false;
          //Say('Включили таймер');
        end
        else begin
          Say('Атакую цель!');
          TimerB.enabled:=true;
          TimerA.enabled:=false;
        end;
      end;
  end;

  //пакет MagicSkillUse
  //атаковать, если хозяин напал на цель магией
  if FromServer and (ConnectName=Owner) and (pck[1]=#$48) and (OwnerID=ReadD(2)) then begin
      if (TargetID<>0) and (OwnerID<>TargetID) then begin
        if magicatck then begin
          buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магическая атака пета
          SendToServerEX(Owner);
          Say('Атакую магией!');
          TimerA.enabled:=true;
          TimerB.enabled:=false;
          //Say('Включили таймер');
        end
        else begin
          Say('Атакую цель!');
          TimerB.enabled:=true;
          TimerA.enabled:=false;
        end;
      end;
  end;

  //пакет TargetSelect
  //если принят пакет со сменой таргета
  if FromServer and (ConnectName=Owner) and (pck[1]=#$a6) then begin
      //запоминаем ИД таргета для ассиста
      TargetID:=ReadD(2);
      //Say('Это ИД таргета.');
  end;

  //пакет TargetUnselected
  //командир отменил цель
  if FromServer and (ConnectName=Owner) and (pck[1]=#$2a) and (OwnerID=ReadD(2)) then begin
      TargetID:=0;
      buf:=hstr('45 11 00 00 00 00 00 00 00 00'); //stop current action
      SendToServerEX(Owner);
      //Say('Стоп!');
      TimerA.enabled:=false;
      TimerB.enabled:=false;
      //Say('Выключили таймер');
  end;

  //если от сервака принят пакет с PetInfo
  if FromServer and (PetID=0) and (ConnectName=Owner) and (pck[1]=#$b1) then begin
      //Запоминаем ИД пета
      PetID:=ReadD(6);
     //смещение переменное, зависит от имени Пета(LenName*2+2) и имени Чара(LenName*2+2)
     //126 байт до имени Пета(LenName*2+2) и имени Чара(LenName*2+2) после 20 байт (+1 начало CurHP)
     i:=126+(Length(Pet)*2+2)+(Length(Owner)*2+2)+20+1;
     CurHP:=ReadD(i);
     MaxHP:=ReadD(i);
     CurMP:=ReadD(i);
     MaxMP:=ReadD(i);
     if (CurHP<MaxHP)
       then TimerHP.enabled:=true
       else TimerHP.enabled:=false;
     if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магическая атака
  end;

  //пакет PetStatusUpdate
  //проверяем на жизнь пета
  if FromServer and (ConnectName=Owner) and (pck[1]=#$b5) and (PetID=ReadD(6)) then begin
     //смещение переменное, зависит от имени Пета(LenName*2+2)
     //21 байт до имени Пета(LenName*2+2) после 8 байт (+1 начало CurHP)
     i:=21+(Length(Pet)*2+2)+8+1;
     CurHP:=ReadD(i);
     MaxHP:=ReadD(i);
     CurMP:=ReadD(i);
     MaxMP:=ReadD(i);
     //Say('Считываем параметры пета');
     if (CurHP<MaxHP)
        then TimerHP.enabled:=true
        else TimerHP.enabled:=false;
     if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магическая атака
   end;
end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 04.11.2007, 19:43   #60
Новичок
 
Регистрация: 05.10.2007
Адрес: Украина
Сообщений: 19
Сказал Спасибо: 0
Имеет 23 спасибок в 13 сообщенях
DeVolf пока неопределено
По умолчанию Re: Re:

Цитата:
Сообщение от NLObP
Цитата:
Сообщение от DeVolf
да что та есть похожие) но увы ...)
так что мне некто не может помоч?
В чем помоч-то?
2ой пост на етой странице
DeVolf вне форума   Ответить с цитированием
Ответ

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


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

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

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


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

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

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