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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 08.02.2008, 20:39   #1
Новичок
 
Регистрация: 08.11.2007
Сообщений: 2
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Lafine
По умолчанию Крипт манора в Gardens of EVA tyrantom 47лвла

Вообщем выкладываю свой первый скрипт. Прошу не кидать в меня помидорами. Гуру прошу отписать замечания :)
Код:
//Скрипт для манора в Садах Евы турантом 47 лвла. Включаем скрипт и потом социальное YES для начала работы
// убиваем пару Стакато и дальше он сам сражается. 
const
   MOB=1000794; // имя моба  Blade Stakato 41x2
   Seed=5221; //Chilly Cobol
   Harvester=5125; //Harvester
   MaxMobCount=2;
   SpiritofOgre='2F 6D 00 00 00 00 00 00 00 00';
   HealingPotion=1061;

var
   MobID: array [1..MaxMobCount] of integer;
   i,count:integer;
   CurHP,MaxHP:integer;
   MobName, MobX, MobY, MobZ:integer;
   MobInWarID, MobInWarName: integer;  // ИД моба и Имя моба(номер моба)
   SocialID:integer;    // ИД соц действия
   status : boolean;     // Начинать работать или нет
   SeedID:Integer;
   HarvesterID: integer;
   HealingPotionID:integer;


procedure Init; //Вызывается при включении скрипта
begin
   MobID[1]:=0;
   MobID[2]:=0;
   MobInWarID:=0;

end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin

end;

procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin

end;

procedure SendMsg(Msg:string);
  begin
    buf:=#$4A;
    WriteD(0);
    WriteD(1);
    WriteS('ПОМОШНИК ПВП');
    WriteS(Msg);
    SendToClient;
end;

function ItemSearch(ItemName:integer):Cardinal;
var i,y:integer;
    TempName:Cardinal;
begin
   result:=0;
   i:=1;
   while i<Length(pck)-4 do begin
      y:=i;
      TempName:=ReadD(y);
      Inc(i);
      if TempName=ItemName then begin
            result:=ReadD(y-8);
      end;
   end;
end;

procedure Target(ObjectID: Integer);
  begin
    buf:=#$04;
    WriteD(ObjectID);
    WriteD(0);
    WriteD(0);
    WriteD(0);
    WriteC(1);
    SendToServer;
end;

procedure UseItem(ItemID:integer);
begin
  buf:=#$14;
  WriteD(ItemID);
  WriteD(0);
  SendToServer;
end;

procedure Attack(TargetID,TargetX,TargetY,TargetZ:integer);
begin
   buf:=#$04;
   WriteD(TargetID);
   WriteD(TargetX);
   WriteD(TargetY);
   WriteD(TargetZ);
   WriteD(0);
   SendToServer;
end;


//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
   if FromClient and (pck[1]=#$1B) then
    begin
      SocialID:=ReadD(2);
      case SocialID of
        //социальное действие Yes для начала манора
        6:begin
          Status:=true;
          buf:=#$0f;
          SendToServer;
        end;
        //социальное действие No для окончания
        5:begin
          Status:=false;
        end;
      end;
    end;
//пакет просмотра инвентаря. Находим ИД семян, харвестера и бутылок для дальнейшего использования.
    if FromServer and (pck[1] = #$1B) then begin
      SeedID:=ItemSearch(Seed);
      HarvesterID:=ItemSearch(Harvester);
      HealingPotionID:=ItemSearch(HealingPotion);
    end;

//Пакет InventoryUpdate - не вписывал пока. Как только разберусь с самим пакетом, так сразу и сделаю
    if FromServer and (pck[1] = #$27) then begin
//       temp:=ItemSearch(GreaterCPP);
//       if temp <> 0 then GreaterCPID:=temp;
//       temp:= ItemSearch(GreaterHP);
//       if temp <> 0 then GreaterHPID:=temp;
//       temp:= ItemSearch(QuickHP);
 //      if temp <> 0 then QuickHPID:= temp;
//       ShowHTML(IntToStr(GreaterCPID)+' '+IntToStr(GreaterHPID)+' '
//       +IntToStr(QuickHPID))
    end;

//Если приходит пакет NPCInfo от сервера, то проверяем чтобы это был нужный нам моб и находился в нужной области 
//координат, то запоминаем ИД моба в  массив.
    if FromServer and (pck[1]=#$16) then begin
//Думаю тут надо пояснить что и как. Параметр -7750 и -8184 это координаты по оси Z. 
//Сделано это для того чтобы персонаж не отвлекался на других мобов в округи, а занимался только этими двумя :)
       if (ReadD(6)=MOB) and (ReadD(22)<-7750) and (ReadD(22)>-8184) then begin
          count:=0;
          for i:=1 to MaxMobCount do begin
             if (MobID[i]=ReadD(2)) then count:=i;
          end;
          if (count = 0) then begin
             for i:=1 to MaxMobCount do begin
                if (MobID[i]=0) then begin
                   MobID[i]:=ReadD(2);
                   break;
                end;
             end;
          end;
//         MobID:=ReadD(2);
//         MobName:=ReadD(6);
//         MobX:=ReadD(14);
//         MobY:=ReadD(18);
//          MobZ:=ReadD(22);
//          Sendmsg(IntToStr(MobID[1]));
//          Sendmsg(IntToStr(MobID[2]));
//          SendMsg(IntToStr(MobInWarID));
//          Attack(MobID,MobX,MobY,MobZ);
      end;
    end;
//Если приходит пакет удаления объекта и ИД объекта равен мобу в массиве, то удаляем ИД с массива
   if FromServer and (pck[1]=#$12) then begin
       for i:=1 to MaxMobCount do begin
          if (MobID[i]=ReadD(2)) then MobID[i]:=0;
       end;
    end;

//Тут я под пакет MoveToLocation спрятал выборку следующего моба для атаки. Спрятал в этот пакет, потому что 
//двигаются часто кто нить рядом, а ставить при обработке при любом пакете - слишком нагружать скрипт
   if FromServer and (pck[1]=#$01) then begin
      For i:=1 to MaxMobCount do begin
         if MobID[i]<>0 then begin
            MobInWarID:=MobID[i];
            Attack(MobInWarID,0,0,0);
         end;
      end;
   end;
// ПРиходит побтверждение что цель выбрана и атакуем цель

    if FromServer and (pck[1]=#$A6) then begin
       if (ReadD(2)=MobInWarID) then Attack(MobInWarID,0,0,0);
    end;
//Пока у моба не 0 ХП забрасываем семечку. Если данные о своих ХП то смотрим и выпиваем бутылку 
    if FromServer and (pck[1]=#$0E) then begin
       if (ReadD(2)=MobInWarID) then begin
          if (ReadD(14)<>0) and (SeedID<>0) then UseItem(SeedID);
       end;
       if (pck[6]=#$04) then begin
          CurHP:=ReadD(14);
          MaxHP:=ReadD(22);
          if (CurHP<2000) then UseItem(HealingPotionID);
       end;
    end;
    if FromServer and (pck[1]=#$16) then begin
       if (ReadD(2)=MobInWarID) and (HarvesterID<>0) then UseItem(HarvesterID);
    end;

//Тут проверяем закончилось ли действие Баффа и если закончилось то еще раз используем
    if FromServer and (pck[1]=#$7F) then begin
       buf:=Hstr(SpiritofOgre);
       SendToServer;
       Attack(MobInWarID,0,0,0);
    end;




 //   SendMsg(IntToStr(MobID));
//    SendMsg(IntToStr(MobName));

end.
Lafine вне форума   Ответить с цитированием
Старый 08.02.2008, 20:39   #2
Новичок
 
Регистрация: 08.11.2007
Сообщений: 2
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Lafine
По умолчанию Крипт манора в Gardens of EVA tyrantom 47лвла

Вообщем выкладываю свой первый скрипт. Прошу не кидать в меня помидорами. Гуру прошу отписать замечания :)
Код:
//Скрипт для манора в Садах Евы турантом 47 лвла. Включаем скрипт и потом социальное YES для начала работы
// убиваем пару Стакато и дальше он сам сражается. 
const
   MOB=1000794; // имя моба  Blade Stakato 41x2
   Seed=5221; //Chilly Cobol
   Harvester=5125; //Harvester
   MaxMobCount=2;
   SpiritofOgre='2F 6D 00 00 00 00 00 00 00 00';
   HealingPotion=1061;

var
   MobID: array [1..MaxMobCount] of integer;
   i,count:integer;
   CurHP,MaxHP:integer;
   MobName, MobX, MobY, MobZ:integer;
   MobInWarID, MobInWarName: integer;  // ИД моба и Имя моба(номер моба)
   SocialID:integer;    // ИД соц действия
   status : boolean;     // Начинать работать или нет
   SeedID:Integer;
   HarvesterID: integer;
   HealingPotionID:integer;


procedure Init; //Вызывается при включении скрипта
begin
   MobID[1]:=0;
   MobID[2]:=0;
   MobInWarID:=0;

end;

procedure Free; //Вызывается при выключении скрипта
begin

end;

procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin

end;

procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin

end;

procedure SendMsg(Msg:string);
  begin
    buf:=#$4A;
    WriteD(0);
    WriteD(1);
    WriteS('ПОМОШНИК ПВП');
    WriteS(Msg);
    SendToClient;
end;

function ItemSearch(ItemName:integer):Cardinal;
var i,y:integer;
    TempName:Cardinal;
begin
   result:=0;
   i:=1;
   while i<Length(pck)-4 do begin
      y:=i;
      TempName:=ReadD(y);
      Inc(i);
      if TempName=ItemName then begin
            result:=ReadD(y-8);
      end;
   end;
end;

procedure Target(ObjectID: Integer);
  begin
    buf:=#$04;
    WriteD(ObjectID);
    WriteD(0);
    WriteD(0);
    WriteD(0);
    WriteC(1);
    SendToServer;
end;

procedure UseItem(ItemID:integer);
begin
  buf:=#$14;
  WriteD(ItemID);
  WriteD(0);
  SendToServer;
end;

procedure Attack(TargetID,TargetX,TargetY,TargetZ:integer);
begin
   buf:=#$04;
   WriteD(TargetID);
   WriteD(TargetX);
   WriteD(TargetY);
   WriteD(TargetZ);
   WriteD(0);
   SendToServer;
end;


//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
   if FromClient and (pck[1]=#$1B) then
    begin
      SocialID:=ReadD(2);
      case SocialID of
        //социальное действие Yes для начала манора
        6:begin
          Status:=true;
          buf:=#$0f;
          SendToServer;
        end;
        //социальное действие No для окончания
        5:begin
          Status:=false;
        end;
      end;
    end;
//пакет просмотра инвентаря. Находим ИД семян, харвестера и бутылок для дальнейшего использования.
    if FromServer and (pck[1] = #$1B) then begin
      SeedID:=ItemSearch(Seed);
      HarvesterID:=ItemSearch(Harvester);
      HealingPotionID:=ItemSearch(HealingPotion);
    end;

//Пакет InventoryUpdate - не вписывал пока. Как только разберусь с самим пакетом, так сразу и сделаю
    if FromServer and (pck[1] = #$27) then begin
//       temp:=ItemSearch(GreaterCPP);
//       if temp <> 0 then GreaterCPID:=temp;
//       temp:= ItemSearch(GreaterHP);
//       if temp <> 0 then GreaterHPID:=temp;
//       temp:= ItemSearch(QuickHP);
 //      if temp <> 0 then QuickHPID:= temp;
//       ShowHTML(IntToStr(GreaterCPID)+' '+IntToStr(GreaterHPID)+' '
//       +IntToStr(QuickHPID))
    end;

//Если приходит пакет NPCInfo от сервера, то проверяем чтобы это был нужный нам моб и находился в нужной области 
//координат, то запоминаем ИД моба в  массив.
    if FromServer and (pck[1]=#$16) then begin
//Думаю тут надо пояснить что и как. Параметр -7750 и -8184 это координаты по оси Z. 
//Сделано это для того чтобы персонаж не отвлекался на других мобов в округи, а занимался только этими двумя :)
       if (ReadD(6)=MOB) and (ReadD(22)<-7750) and (ReadD(22)>-8184) then begin
          count:=0;
          for i:=1 to MaxMobCount do begin
             if (MobID[i]=ReadD(2)) then count:=i;
          end;
          if (count = 0) then begin
             for i:=1 to MaxMobCount do begin
                if (MobID[i]=0) then begin
                   MobID[i]:=ReadD(2);
                   break;
                end;
             end;
          end;
//         MobID:=ReadD(2);
//         MobName:=ReadD(6);
//         MobX:=ReadD(14);
//         MobY:=ReadD(18);
//          MobZ:=ReadD(22);
//          Sendmsg(IntToStr(MobID[1]));
//          Sendmsg(IntToStr(MobID[2]));
//          SendMsg(IntToStr(MobInWarID));
//          Attack(MobID,MobX,MobY,MobZ);
      end;
    end;
//Если приходит пакет удаления объекта и ИД объекта равен мобу в массиве, то удаляем ИД с массива
   if FromServer and (pck[1]=#$12) then begin
       for i:=1 to MaxMobCount do begin
          if (MobID[i]=ReadD(2)) then MobID[i]:=0;
       end;
    end;

//Тут я под пакет MoveToLocation спрятал выборку следующего моба для атаки. Спрятал в этот пакет, потому что 
//двигаются часто кто нить рядом, а ставить при обработке при любом пакете - слишком нагружать скрипт
   if FromServer and (pck[1]=#$01) then begin
      For i:=1 to MaxMobCount do begin
         if MobID[i]<>0 then begin
            MobInWarID:=MobID[i];
            Attack(MobInWarID,0,0,0);
         end;
      end;
   end;
// ПРиходит побтверждение что цель выбрана и атакуем цель

    if FromServer and (pck[1]=#$A6) then begin
       if (ReadD(2)=MobInWarID) then Attack(MobInWarID,0,0,0);
    end;
//Пока у моба не 0 ХП забрасываем семечку. Если данные о своих ХП то смотрим и выпиваем бутылку 
    if FromServer and (pck[1]=#$0E) then begin
       if (ReadD(2)=MobInWarID) then begin
          if (ReadD(14)<>0) and (SeedID<>0) then UseItem(SeedID);
       end;
       if (pck[6]=#$04) then begin
          CurHP:=ReadD(14);
          MaxHP:=ReadD(22);
          if (CurHP<2000) then UseItem(HealingPotionID);
       end;
    end;
    if FromServer and (pck[1]=#$16) then begin
       if (ReadD(2)=MobInWarID) and (HarvesterID<>0) then UseItem(HarvesterID);
    end;

//Тут проверяем закончилось ли действие Баффа и если закончилось то еще раз используем
    if FromServer and (pck[1]=#$7F) then begin
       buf:=Hstr(SpiritofOgre);
       SendToServer;
       Attack(MobInWarID,0,0,0);
    end;




 //   SendMsg(IntToStr(MobID));
//    SendMsg(IntToStr(MobName));

end.
Lafine вне форума   Ответить с цитированием
Старый 09.02.2008, 23:22   #3
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Прокоментируй нормально скрипт, а то влом искать смотреть какие пакеты ты обрабатываешь, и какие действия совершаешь. Весьма страная процедура по поиску ОбджектИД вещей - но, тем не менее - рабочая. Пока все, а вообще для этого существует топик "Да будет бот".
QaK вне форума   Ответить с цитированием
Старый 09.02.2008, 23:22   #4
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Прокоментируй нормально скрипт, а то влом искать смотреть какие пакеты ты обрабатываешь, и какие действия совершаешь. Весьма страная процедура по поиску ОбджектИД вещей - но, тем не менее - рабочая. Пока все, а вообще для этого существует топик "Да будет бот".
QaK вне форума   Ответить с цитированием
Старый 11.02.2008, 15:01   #5
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию

Цитата:
Сообщение от lQaKl
а вообще для этого существует топик "Да будет бот".
Тема "Да будет бот" превратилась в огромную кучу скриптов и офтопа... Надо сделать отдельную тему со скриптами и кратким описанием и тему с обсуждением ( желательно с ответвлениями для каждого скрипта) на данный момент тема Да будет БОТ не читабельная... (сори за офтоп)
ChiterEPT вне форума   Ответить с цитированием
Старый 11.02.2008, 15:01   #6
Пользователь
 
Регистрация: 10.12.2007
Сообщений: 52
Сказал Спасибо: 22
Имеет 16 спасибок в 9 сообщенях
ChiterEPT
По умолчанию

Цитата:
Сообщение от lQaKl
а вообще для этого существует топик "Да будет бот".
Тема "Да будет бот" превратилась в огромную кучу скриптов и офтопа... Надо сделать отдельную тему со скриптами и кратким описанием и тему с обсуждением ( желательно с ответвлениями для каждого скрипта) на данный момент тема Да будет БОТ не читабельная... (сори за офтоп)
ChiterEPT вне форума   Ответить с цитированием
Старый 11.02.2008, 15:44   #7
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Привет АрхиНуб, =) Возможно ты и прав (про то, что надо отдельно тему с разветвлениями) но в "Да будет бот" - намана читабельно, просто там никто давно не модерил ... вот и нкаопилось ...
QaK вне форума   Ответить с цитированием
Старый 11.02.2008, 15:44   #8
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Привет АрхиНуб, =) Возможно ты и прав (про то, что надо отдельно тему с разветвлениями) но в "Да будет бот" - намана читабельно, просто там никто давно не модерил ... вот и нкаопилось ...
QaK вне форума   Ответить с цитированием
Старый 12.02.2008, 00:32   #9
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

я ворону давно говорил что темку надо разнести на несколько а лучше даже подраздел сделать с готовыми скриптами чтоб первый пост в каждой теме был скриптом и описанием а дальше шло его обсуждение, но ворон яросно защищает текущий вид...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 12.02.2008, 00:32   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

я ворону давно говорил что темку надо разнести на несколько а лучше даже подраздел сделать с готовыми скриптами чтоб первый пост в каждой теме был скриптом и описанием а дальше шло его обсуждение, но ворон яросно защищает текущий вид...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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