Вернуться   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 вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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