Показать сообщение отдельно
Старый 21.03.2012, 11:40   #1
Местный
 
Аватар для Noise
 
Регистрация: 12.08.2010
Сообщений: 148
Сказал Спасибо: 24
Имеет 15 спасибок в 12 сообщенях
Noise пока неопределено
По умолчанию Вот решил поделиться бафером

Не нашел удобного для себя скрипта, решил наваять его сам.
Кое что, конечно подсмотрел у других :)
Сильно не пинайте это мой первый скрипт для l2phx:

Значит что оно делает:
- Саппорт принимает пати от основы (автоматом).
- Бегает за основой
- Бафает
- При необходимости лечит (можно отключить)


Для удобства управления добавил команды:
* Все команды начинаются с точки.
.on - собственно включает бафера.
.off - собственно выключает бафера.
.go - Саппорт просто прицепится за основой (удобно для транспортировки на место кача)
.sit или .stand - Саппорт садится на жопу.
Все команды пишутся осн. персонажем в общий чат (на сервер они не проходят).

// Тестировал скрипт в связке с локомотивом Alexus для нормальной работы пришлось переименовать свои таймеры... так что не удивляйтесь такому названию :)
delphi Код:
// PP Support by Noise; const   zero = '00 00 00 00 00 00 00 ';                      aheal  = '2F F3 03 ' + zero;     // Heal   bheal  = '2F F7 03 ' + zero;     // Battle Heal                            Main    = 'Main';   Support = 'Support';     Healing = true;       //  true - ПП будет лечить основу, false - соответсвтенно выключает.    HPLevel  = 60;        //  Кол-во процентов для того что бы ПП использовал  Heal   HPLevelB = 40;        //  Кол-во процентов для того что бы ПП использовал Battle Heal          Greater_Shield = true;   Greater_Might  = false;     var   nTimer1, nTimer2, nTimer3: TTimer;   tmp: String;   MainID, MainX, MainY, MainZ, SupportID, SupportX, SupportY, SupportZ, CountBuff, range,   MainMaxHP, MainCurHP, MainMaxMP, MainCurMP, int_tmp, HPlevelProcent, HPlevelProcentB: Integer;   BuFFArray: array [1..50] of String;   SelfBuff: Boolean; function say(text: string): Boolean; begin   buf:=#$4A;   WriteD(0);   WriteD(10);   WriteS('');   WriteS(text);   SendToClient;        end; function SupportMove: Boolean; begin  TargetLeader;  TargetLeader;          end; function TargetLeader: Boolean; begin   buf:=#$04;   WriteD(MainID);   WriteD(MainX);   WriteD(MainY);   WriteD(MainZ);   WriteD(0);      SendToServerEX(Support);            end; function TargetSelf: Boolean; begin   buf:=#$04;   WriteD(SupportID);   WriteD(SupportX);   WriteD(SupportY);   WriteD(SupportZ);   WriteD(0);      SendToServerEX(Support);            end; procedure OnTimer1n(Sender: TObject);      begin   Buff; end; procedure OnTimer2n(Sender: TObject);    var   Count: Integer;   rx, ry, range: integer; begin   CheckRange;   if range > 480 then SupportMove   else   begin     Count := Count + 1;        buf:=hstr(BuFFArray[Count]);        SendToServerEx(Support);      end;   if Count = CountBuff  then   begin     ntimer2.enabled := false;     SelfBuff := false;     Count := nil;      SupportMove;    endend; procedure OnTimer3n(Sender: TObject);    var   Count: Integer; begin   Count := Count + 1;    buf:=hstr(BuFFArray[Count + 20]);      SendToServerEx(Support);   if Count = 5 then   begin     ntimer3.enabled := false;        SelfBuff := true;     Count := nil;        Buff;   endend; procedure MainStatusUpdate;       // обновление данных о себе  var   i:integer;  begin   for i:=0 to ReadD(6)-1 do    case pck[i*8+10] of     #$09: MainCurHP:=ReadD(i*8+14);     #$0A: MainMaxHP:=ReadD(i*8+14);     #$0B: MainCurMP:=ReadD(i*8+14);     #$0C: MainMaxMP:=ReadD(i*8+14);    end;        if Healing then   begin    if MainMaxHP > 0 then HPlevelProcent := Round((MainMaxHP/100)*HPLevel);    if MainMaxHP > 0 then HPlevelProcentB := Round((MainMaxHP/100)*HPLevelB);    if HPlevelProcent >  MainCurHP then             if HPlevelProcentB > MainCurHP then BattleHeal else Heal;   End;  end;   procedure Heal; begin   TargetLeader;   buf := hstr(aheal);        SendToServerEx(Support);    SupportMove; end;   procedure BattleHeal; begin   TargetLeader;   buf := hstr(bheal);        SendToServerEx(Support);   SupportMove; end;   procedure SupportInfo;            // обновление данных о саппорте  begin        if (SupportID = 0 ) then    begin     SupportID := ReadD(18);      say('Саппорт готов к работе!');   end;    SupportX  := ReadD(2);   SupportY  := ReadD(6);   SupportZ  := ReadD(10);     end; procedure MainInfo;            // обновление данных о себе var   i:word; begin        if (MainID = 0 ) then    begin     MainID := ReadD(18);      say('Главный персонаж готов к работе!');   end;   MainX  := ReadD(2);   MainY  := ReadD(6);   MainZ  := ReadD(10);   i:=22;   ReadS(i);   i:=i+48 ;          MainMaxHP := ReadD(i);   MainCurHP := ReadD(i); end; procedure Buff; var   i: Integer; begin        if SelfBuff then   begin     TargetLeader;     ntimer2.enabled := true;   end   else   begin      TargetSelf;     ntimer3.enabled := true;        end; end; procedure Init; begin   buf:= #$0F;                    SendToServerEx(Main);   SendToServerEx(Support);              BuFFArray[1]  := '2F 2C 04 ' + zero;      // Might   BuFFArray[2]  := '2F 0C 04 ' + zero;      // Magic Barrier   BuFFArray[3]  := '2F 0B 04 ' + zero;      // Mental Shield   BuFFArray[4]  := '2F 10 04 ' + zero;      // Shield   BuFFArray[5]  := '2F D8 04 ' + zero;      // Guidance   BuFFArray[6]  := '2F 35 04 ' + zero;      // Focus   BuFFArray[7]  := '2F DA 04 ' + zero;      // Death Whisper   BuFFArray[8]  := '2F 3E 04 ' + zero;      // Haste   BuFFArray[9]  := '2F B4 04 ' + zero;      // Wind Walk      BuFFArray[10] := '2F 15 04 ' + zero;      // Blessed Body   BuFFArray[11] := '2F 18 04 ' + zero;      // Blessed Soul   BuFFArray[12] := '2F 14 04 ' + zero;      // Regeneration   BuFFArray[13] := '2F DB 04 ' + zero;      // Blessed Shield     if Greater_Shield then BuFFArray[14] := '2F 6D 05 ' + zero; // Greater Shield        if Greater_Might  then BuFFArray[14] := '2F 6C 05 ' + zero; // Greater Might      if Greater_Shield or Greater_Might then CountBuff := 14 else CountBuff := 13;   BuFFArray[21] := '2F 15 04 ' + zero;   BuFFArray[22] := '2F 18 04 ' + zero;   BuFFArray[23] := '2F 3D 04 ' + zero;   BuFFArray[24] := '2F 26 04 ' + zero;   BuFFArray[25] := '2F B4 04 ' + zero;   ntimer1:=TTimer.Create(nil);   ntimer1.OnTimer:=@OnTimer1n;   ntimer1.enabled:=False;   ntimer1.interval:=1080000;   ntimer2:=TTimer.Create(nil);   ntimer2.OnTimer:=@OnTimer2n;   ntimer2.enabled:=False;   ntimer2.interval:=2100;            ntimer3:=TTimer.Create(nil);   ntimer3.OnTimer:=@OnTimer3n;   ntimer3.enabled:=False;   ntimer3.interval:=2500;          end; procedure Free; begin   ntimer1.Free;   ntimer2.Free;   ntimer3.Free; end; procedure UpdateMainInfo; begin   MainX  := ReadD(18);   MainY  := ReadD(22);   MainZ  := ReadD(26);    end; procedure UpdateSupportInfo; begin   SupportX  := ReadD(18);   SupportY  := ReadD(22);   SupportZ  := ReadD(26);    end; procedure CheckRange; var   rx, ry: Integer; begin   rx := MainX - SupportX;   ry := MainY - SupportY;   range := round(sqrt(rx * rx + ry * ry)); end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin   if (ConnectName = Support) and (pck[1]=#$39) then   begin          tmp := ReadS(2);          if (tmp = Main)  then      begin       buf := HStr('2A 01 00 00 00');          SendToServerEx(Support);       SupportMove;          end;                      end;                    if (ConnectName = Support) and (pck[1]=#$04) then  SupportInfo;              if (ConnectName = Main) and (pck[1]=#$04) then  MainInfo;          if (ConnectName = Main) and (pck[1]=#$0E) and (MainID=ReadD(2)) then  MainStatusUpdate;        if (pck[1]=#$01) and (MainID=ReadD(2)) then  UpdateMainInfo;    if (pck[1]=#$01) and (SupportID=ReadD(2)) then  UpdateSupportInfo;            if (ConnectName = Main) and (pck[1]=#$38) and FromClient then   Begin      if (ReadS(2) = '.on') then     begin          pck := '';       Buff;       ntimer1.enabled := true;          end;        if (ReadS(2) = '.off') then     begin          pck := '';       Buff;       ntimer1.enabled := false;       ntimer2.enabled := false;        ntimer3.enabled := false;          end;        if (ReadS(2) = '.go') then     begin          pck := '';       SupportMove;     end;          if (ReadS(2) = '.sit') or (ReadS(2) = '.stand') then     begin          pck := '';       buf := HStr('45 00 00 00 00 00 00 00 00 00 ');          SendToServerEx(Support);            end;        End;            end.

Да чуть не забыл, скрипт для Intelude.
__________________
Если студенту отрезать хвост, то к следующей сессии у него вырастет новый.

Последний раз редактировалось Noise, 21.03.2012 в 12:03. Причина: Добавлено сообщение
Noise вне форума   Ответить с цитированием
За это сообщение Noise нажился 4 спасибками от: