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

Жесткий скриптинг Раздел для обсуждения готовых и тестируемых скриптов
Внимание! В разделе введена жесткая модерация, темы и сообщения публикуются только после проверки модераторами

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 21.04.2009, 21:20   #1
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

Пол года пишу бот, Хочу виложить части когда так сказать на разбор полётов, а также для оптимизации кода. Думаю некоторим будет интересно.

Сразу сори так как програмить учился 10 лет назад в техникуме...
сначала виложу основние юнити:
delphi Код:
unit TItems; interface Uses Contnrs,Dialogs,SysUtils; Type   TItem = class   Public     ID:integer;     OID:integer;     Count:integer;     AugmentationBonus:integer;   end;   TItemList = class(TObjectList)   private     function GetItems(Index: Integer): TItem;     procedure SetItems(Index: Integer; const Value: TItem);     function GetItemsi(Index: Integer): TItem;     procedure SetItemsi(Index: Integer; const Value: TItem);     function GetItemso(Index: Integer): TItem;     procedure SetItemso(Index: Integer; const Value: TItem);   public     procedure AddItem(OID,IID,C,AB:integer);     function IFIID(ID:Integer):Integer;     function IFOID(OID:Integer):Integer;     property Items[Index: Integer]: TItem read GetItems write SetItems; default;     property ItemI[Index: Integer]: TItem read GetItemsi write SetItemsi;     property ItemO[Index: Integer]: TItem read GetItemso write SetItemso;   end;   Var NI:TItem; implementation { TItemList } procedure TItemList.AddItem(OID, IID, C,AB: integer); Var NewItem:TItem; begin Try   if IFOID(OID)=-1 then Begin     NewItem:=TItem.Create;     NewItem.ID:=IID;     NewItem.OID:=OID;     NewItem.Count:=C;     NewItem.AugmentationBonus:=AB;     Add(NewItem);     End;   except on E : Exception do     ShowMessage('ОШИБКА TItemList.AddItem:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TItemList.GetItems(Index: Integer): TItem; begin   Result := TItem.Create; Try   if Index<Count then Result := TItem(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TItemList.GetItems:'+E.ClassName+' ошибка: '+E.Message); End; end; procedure TItemList.SetItems(Index: Integer; const Value: TItem); begin Try   inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TItemList.SetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TItemList.GetItemsi(Index: Integer): TItem; begin   Result := NI; Try   Index:=IFIID(Index);   if Index<>-1 then Result := TItem(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TItemList.GetItemsi:'+E.ClassName+' ошибка: '+E.Message); End; end; function TItemList.GetItemso(Index: Integer): TItem; begin   Result := NI; Try   Index:=IFOID(Index);   if Index<>-1 then Result := TItem(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TItemList.GetItemso:'+E.ClassName+' ошибка: '+E.Message); End; end; function TItemList.IFIID(ID: Integer): Integer; var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].ID=ID then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TItemList.IFIID:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TItemList.IFOID(OID: Integer): Integer; var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].OID=OID then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TItemList.IFOID:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TItemList.SetItemsi(Index: Integer; const Value: TItem); begin Try   Index:=IFIID(Index);   if Index<>-1 then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TItemList.SetItemsi:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TItemList.SetItemso(Index: Integer; const Value: TItem); begin Try   Index:=IFOID(Index);   if Index<>-1 then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TItemList.SetItemsi:'+E.ClassName+' ошибка: '+E.Message);   End; end; Begin   NI:=TItem.Create; end.

delphi Код:
library AUTOMP; {$define RELEASE} // для совместимости с релизом пакетхака, при дебуге можно закоментировать uses   SysUtils,   Windows,   Dialogs,   Classes,   Coding,   IniFiles,   Forms,   AAction in 'AAction.pas',   Unit2 in 'Unit2.pas',   MSBU in 'MSBU.pas',   TItems in 'TItems.pas',   TSkils in 'TSkils.pas',   TNpcs in 'TNpcs.pas',   Other_Func in 'Other_Func.pas',   MsbForm in 'MsbForm.pas' {Form2},   OtherTypes in 'OtherTypes.pas',   TChars in 'TChars.pas',   Augmentation in 'Augmentation.pas'; var                                {version} {revision}   min_ver_a: array[0..3] of Byte = ( 3,4,1,      46   );   min_ver: Integer absolute min_ver_a; // минимальная поддерживаемая версия программы   fcl:boolean = false;   MD:TMyDelay; function GetPluginInfo(const ver: Integer): PChar; stdcall; begin   if ver<min_ver then     Result:='Plugin к программе l2phx'+sLineBreak+             'Для версий 3.4.0+'+sLineBreak+             'У вас старая версия программы! Плагин не сможет корректно с ней работать!'   else     Result:='Plugin к программе l2phx'+sLineBreak+             'Для версий 3.4.0+'+sLineBreak+             'Авто CP HP MP'; end; function SetStruct(const struct: TPluginStruct): Boolean; stdcall; begin   ps:=struct;   Result:=True; end; procedure OnLoad; stdcall; var i:integer; begin Try   User:=TUserList.Create;   for i := 0 to 9 do User.Add(TUser.create);   except on E : Exception do     ShowMessage('ОШИБКА OnLoad:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure OnPacket(const cnt: Cardinal; const fromServer: Boolean; var pck: TPacket); stdcall; Var i:integer; s:string; begin Try     if (pck.size<3) or (fcl) or (user[cnt]=nil)  then exit;   ppck:=@pck;   with user[cnt] do Begin   inc(Bussi);   //----------------------------------------------------------------------------   if (ps.Threads[cnt].Name<>'') and (not user[cnt].Online) then Begin     user[cnt].Init(ps.Threads[cnt].Name);     Form2.Ncr(cnt);     End; //----------------------------------------------------------Пакети от клиента---   if not FromServer then Begin     if (pck.id=$D0) and (ps.ReadHEx(pck,3)=68) then Begin//----------------------------------RequestRefine---       SetAgValue(cnt,ps.ReadHEx(pck,3),ps.ReadDEx(pck,5),ps.ReadDEx(pck,9),ps.ReadDEx(pck,13),ps.ReadDEx(pck,17));       End;     if pck.id=$5F then Begin//-----------------------------------------Enchat---       //encid:=ps.ReadDEx(pck,3);       //pck.size:=2;       End;     if pck.id=$49 then Begin       s:=ps.ReadSEx(pck,3);       if pos(s,'ago,pgo,sbgo,pbgo,abgo,sck,asgo,sl,srk,mtck,mtt,rgo,rstop,rp,gid,np,sbs,ag,ka')<>0 then pck.size:=2; // не пропускаем пакет       if s='ago' then User[cnt].OnAutoAtack:=true;       if s='asgo' then User[cnt].OnAutoAssist:=true;       if s='pgo' then User[cnt].OnAutoPickUp:=true;       if s='sbgo' then User[cnt].OnselfBaf:=true;       if s='pbgo' then User[cnt].OnPartyBaf:=true;       if s='abgo' then User[cnt].OnAutoBaf:=true;       if s='da' then MA.SetAction(0,'0=DLGSEL(talk_select)');       if s='sbs' then User[cnt].OnSBS:=True;       if s='np' then User[cnt].isInMTP:=false;       if s='ag' then Begin         sts(cnt,'D0 44 00'+anti4HEX(IList.Itemi[6369].OID)+anti4HEX(IList.Itemi[8732].OID)+anti4HEX(IList.Itemi[2131].OID)+'19 00 00 00');         End;       if s='mtt' then Begin         User[cnt].OnAutoMTT:=true;         say(cnt,'OnAutoMTT On');         End;       if s='gid' then Begin         say(cnt,'NpcID: '+inttostr(NpcList.Itemi[CurentT.ID].NpcID));         End;       if s='rgo' then User[cnt].RecordTreck:=true;       if s='rp' then Treck.AddPoint(x,y,z);       if s='rstop' then Begin         User[cnt].RecordTreck:=False;         User[cnt].Treck.SaveToFile(GetCurrentDir+'\Treks\'+User[cnt].Name+'.trk');         End;       if s='sck' then Begin         CurentCK.x:=User[cnt].x;         CurentCK.y:=User[cnt].y;         CurentCK.z:=User[cnt].z;         NpcList.SetXYZ(User[cnt].x,User[cnt].y,User[cnt].z,True);         say(cnt,'Центр кача установлен');         End;       if s='mtck' then Begin         with User[cnt].CurentCK do MoveToPoint(cnt,x,y,z);         say(cnt,'Идём к точке кача');         End;       if s='srk' then Begin         if User[cnt].CurentCK.x<>0 then User[cnt].rk:=ras(User[cnt].CurentCK.x,User[cnt].CurentCK.y,User[cnt].x,User[cnt].y);         say(cnt,'Радиус кача - '+inttostr(User[cnt].rk));         End;       if s='sl' then Begin         if CurentT.ID<>0 then Lider.ID:=CurentT.ID;         if Lider.ID<>0 then OnMoveToLiader:=True;         say(cnt,'Лидер выбран');         End;       End;     if(pck.id=$23) and (pos(ps.ReadSEx(pck,3),'sbs,np,mtt,p4,sa,ag,ka')<>0) then Begin       ByPass(cnt,ps.ReadSEx(pck,3));       pck.size:=2; // не пропускаем пакет       End;   //------------------------------------------------------RequestSocialAction---     if(pck.id=$34)then Begin       if ps.ReadDEx(pck,3)=6 then Begin // Yes         pck.size:=2;// не пропускаем пакет         //Form2.Visible:=true;         ShowInfo(cnt);         End;       if ps.ReadDEx(pck,3)=5 then Begin // No         pck.size:=2;// не пропускаем пакет         Form2.Visible:=false;         End;       if ps.ReadDEx(pck,3)=11 then Begin // Aplaus         pck.size:=2;// не пропускаем пакет         End;       End;     //-------------------------------------------------------ValidatePosition---     if pck.id=$59 then         ValidatePosition(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11));     //--------------------------------------------------------------------------     if pck.id=$0f then StopMoveTT(cnt);//--------------MoveBackwardToLocation---     if pck.id=$48 then StopMoveTT(cnt);//----------------RequestTargetCanceld---     //--------------------------------------------------------------------------   End;   //---------------------------------------------------------------------------- //------------------------------------------------------------------------------ //----------------------------------------------------------Пакети от сервера---   if FromServer then  Begin     if (pck.id=$f3) and (ps.ReadDEx(pck,3)=1510) and (ps.ReadSEx(pck,15)='M002') then sts(cnt,'C6E605000001000000'+anti4HEX(User[cnt].ObjectID));     if ((pck.id=$2f) or (pck.id=$27)) and (ObjectID=0) then sts(cnt,'14');     //---------------------------------------------------------------UserInfo---     if pck.id=$32 then Begin       i:=23+(Length(ps.ReadSEx(pck,23))*2)+2;       i:=i+508+(Length(ps.ReadSEx(pck,i+508))*2)+2;       UserInfo(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),ps.ReadDEx(pck,19),ps.ReadDEx(pck,i+53),ps.ReadSEx(pck,23));       RHID:=ps.ReadDEx(pck,(133+(length(ps.ReadSEx(pck,23))*2)));       LHID:=ps.ReadDEx(pck,(137+(length(ps.ReadSEx(pck,23))*2)));       End;     //---------------------------------------------------------------CharInfo---     if pck.id=$31 then Begin       i:=23+(Length(ps.ReadSEx(pck,23))*2)+2;       i:=i+272+(Length(ps.ReadSEx(pck,i+272))*2)+2;       CharInfo(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),ps.ReadDEx(pck,19),ps.ReadDEx(pck,i+41),ps.ReadDEx(pck,i),ps.ReadSEx(pck,23));       //say(cnt,ps.ReadSEx(pck,23)+' - '+inttostr(ps.ReadDEx(pck,i)));  1435       End;     //----------------------------------------------------------------PetInfo---     if (pck.id=$B2) or (pck.id=$B6) then Begin       Pet.stype:=ps.ReadDEx(pck,3);       Pet.ID:=ps.ReadDEx(pck,7);       //if ps.ReadCEx(pck,125)=1 then user[cnt].Pet.isInCombat:=true else user[cnt].Pet.isInCombat:=false;       End;     //--------------------------------------------------------PetStatusUpdate---     if pck.id=$B6 then Begin       Pet.ID:=ps.ReadDEx(pck,7);       i:=23+(Length(ps.ReadSEx(pck,23))*2)+2;       Pet.HP:=ps.ReadDEx(pck,i+8);       Pet.MaxHP:=ps.ReadDEx(pck,i+12);       if (Pet.HP<(Pet.MaxHP-500)) and (Pet.HPC<>0)         and (GetTickCount-Pet.LTU>15000) then Begin           sts(cnt,'94'+anti4HEX(Pet.HPID));           Pet.LTU:=GetTickCount;           End;       //say(cnt,inttostr(user[cnt].Pet.HP)+'\'+inttostr(user[cnt].Pet.MaxHP));     End;     //-----------------------------------------------------PetInventoryUpdate---     if pck.id=$B4 then Begin       for i:=0 to ps.ReadHEx(pck,3)-1 do Begin         if ps.ReadDEx(pck,13+i*58)=1539 then Begin           Pet.HPID:=ps.ReadDEx(pck,9+i*58);           Pet.HPC:=ps.ReadDEx(pck,17+i*58);           End;         if (ps.ReadDEx(pck,13+i*58)=9668) and (ps.ReadDEx(pck,17+i*58)<20) then Begin           say(cnt,inttostr(ps.ReadDEx(pck,17+i*58))+' Мало еди у питомца!!!');           sts(cnt,'56130000000000000000');           End;       End;     End;     //-------------(CID,Invid,id,x,y,z:integer)----------------------DropItem---     if pck.id=$16 then       DropItem(cnt,ps.ReadDEx(pck,11),ps.ReadDEx(pck,7),ps.ReadDEx(pck,15),ps.ReadDEx(pck,19),ps.ReadDEx(pck,23));     //--------------------------------------------------------------------------     //--------------------------------------------------------------------------     if (pck.id=$05) then DropItem(cnt,ps.ReadDEx(pck,7),ps.ReadDEx(pck,3),ps.ReadDEx(pck,11),ps.ReadDEx(pck,15),ps.ReadDEx(pck,19));     //--------------------------------------------------------------------------     //---------------------------------------------------------------ItemList---     if (pck.id=$11) then //IL(CID,OID,IID,C,n:integer);       for i:=0 to ps.ReadHEx(pck,5)-1 do         IL(cnt,ps.ReadDEx(pck,9+i*72),ps.ReadDEx(pck,13+i*72),ps.ReadDEx(pck,21+i*72),ps.ReadDEx(pck,39+i*72),i);     //--------------------------------------------------------------------------     //--------------------------------------------------------InventoryUpdate---     if (pck.id=$21) Then //InventoryUpdate(CID,CH,OID,IID,C:integer);       for i:=0 to ps.ReadHEx(pck,3)-1 do         InventoryUpdate(cnt,ps.ReadHEx(pck,5+(i*74)),ps.ReadDEx(pck,9+(i*74)),ps.ReadDEx(pck,13+(i*74)),ps.ReadDEx(pck,21+(i*74)),ps.ReadDEx(pck,39+(i*74)));     //--------------------------------------------------------------------------     //----------------------------------------------------------SystemMessage---     if pck.id=$62 then Begin       if (ps.ReadDEx(pck,3)=1405) or ((ps.ReadDEx(pck,3)=48) and (ps.ReadDEx(pck,15)=5592)) then IsCPUse:=false; //---------------------------CP restore---       if (ps.ReadDEx(pck,3)=936) and (ps.ReadDEx(pck,15)=5592) then IsCPUse:=True;       if (ps.ReadDEx(pck,3)=44) then Begin  //Крит         //sts(cnt,'5F'+anti4HEX(encid));         End;       if (ps.ReadDEx(pck,3)=46) and (ps.ReadDEx(pck,15)=MCS)  then Begin         CurentT.CurseTime:=GetTickCount;         CurentT.isInCurse:=True;         End;       if (ps.ReadDEx(pck,3)=139) and (ps.ReadDEx(pck,31)= MCS)  then CurentT.isInCurse:=False;       if (ps.ReadDEx(pck,3)=46) and (ps.ReadDEx(pck,15)= 42)  then isInSweep:=False;       if (ps.ReadDEx(pck,3)=612) or (ps.ReadDEx(pck,3)=357) then CurentT.spoiled:=true;       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=20320) then IsMPUse:=false;//20320       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=20370) then IsMPUse:=false;//20370       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=2037) then IsHPUse:=false; //2037       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=2035) then UseITEm(cnt,1375);       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=2032) then IsHPUse:=false; //2032       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=2031) then IsHPUse:=false; //2031       if (ps.ReadDEx(pck,3)=92)and(ps.ReadDEx(pck,15)=4072) then UnHold(cnt); //2031       if (ps.ReadDEx(pck,3)=22)  or (ps.ReadDEx(pck,3)=181) then  Begin //(22) цель слишком далеко (181) цель не видно         INKT:=false;         isInCombat:=false;         //sts(cnt,'84',false);//LeaveWorld         if not MD.Active then sts(cnt,'57');//RequestRestart         MD.SLTU(500);         End;       End;     //--------------------------------------------------------------------------     //-----------------------------------------------------------StatusUpdate---     if pck.id=$18 then        for i:=0 to ps.ReadDEx(pck,7)-1 do         StatsUpdate(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,11+i*8),ps.ReadDEx(pck,15+i*8));     //--------------------------------------------------------------------------     //-----------------------------------------------------------PartySpelled---     if pck.id=$F4 then        for i:=0 to ps.ReadDEx(pck,11)-1 do         PartySpelled(cnt,ps.ReadDEx(pck,7),ps.ReadDEx(pck,15+i*10),ps.ReadDEx(pck,21+i*10));     //--------------------------------------------------------------------------     //----------------------------------------------PartySmallWindowDeleteAll---     if pck.id=$50 then PartyList.Clear;     //-------------------------------------------------PartySmallWindowDelete---     if pck.id=$51 then PartyList.DelChar(ps.ReadDEx(pck,3));     //-------------------------------------------------PartySmallWindowUpdate---     if pck.id=$52 then Begin       i:=Length(ps.ReadSEx(pck,7))*2;       PartySWUpdate(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,9+i),ps.ReadDEx(pck,13+i)         ,ps.ReadDEx(pck,17+i),ps.ReadDEx(pck,21+i),ps.ReadDEx(pck,25+i)         ,ps.ReadDEx(pck,29+i),ps.ReadDEx(pck,33+i),ps.ReadDEx(pck,37+i),ps.ReadSEx(pck,7));     End;     //--------------------------------------------------------------------------     //-------------------------------------------------ExPartyPetWindowUpdate---     if (pck.id=$FE) and (ps.ReadHEx(pck,3)=25) then Begin       i:=Length(ps.ReadSEx(pck,21))*2;       PartySWUpdate(cnt,ps.ReadDEx(pck,5),0,0         ,ps.ReadDEx(pck,23+i),ps.ReadDEx(pck,27+i),ps.ReadDEx(pck,31+i)         ,ps.ReadDEx(pck,35+i),ps.ReadDEx(pck,39+i),0,ps.ReadSEx(pck,21));     End;     //--------------------------------------------------------------------------     //----------------------------------------------------PartyMemberPosition---     if pck.id=$BA then for i:=0 to ps.ReadDEx(pck,3)-1 do       PartyMemberPosition(cnt,ps.ReadDEx(pck,7+i*16),ps.ReadDEx(pck,11+i*16),ps.ReadDEx(pck,15+i*16),ps.ReadDEx(pck,19+i*16));     //--------------------------------------------------------------------------     //---------------------------------------------------------------SkilList---     if (pck.id=$5f) and (User[cnt].Name<>'') then       for i:=0 to ps.ReadDEx(pck,3)-1 do         if ((ps.ReadDEx(pck,7+(i*13)))=0) and (User[cnt].IgnorList.IndexOfName(inttostr(ps.ReadDEx(pck,15+(i*13))))=-1) then           User[cnt].SkilList.ADDSkil(sid.Values[inttostr(ps.ReadDEx(pck,15+(i*13)))],ps.ReadDEx(pck,15+(i*13)));     //--------------------------------------------------------------------------     //----------------------------------------------------------MagicSkillUse---     if pck.id=$48 then MagicSkillUse(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),(ps.ReadDEx(pck,23)));    //ps.ReadDEx(pck,19)     //---------------------------------------------------AbnormalStatusUpdate---     if (pck.id=$85)and (Name<>'') then       for i:=0 to ps.ReadHEx(pck,3)-1 do         ASUpdate(cnt,ps.ReadDEx(pck,5+i*10),ps.ReadDEx(pck,11+i*10));     //--------------------------------------------------------------------------     if pck.id=$49 then Unkast(cnt,ps.ReadDEx(pck,3));//----MagicSkillCanceled---     if pck.id=$54 then Unkast(cnt,ps.ReadDEx(pck,3));//----MagicSkillLaunched---     //--------------------------------------------------------------------------     if pck.id=$B9 then MyT(cnt,ps.ReadDEx(pck,3));//---------MyTargetSelected---     //---------------------------------------------------------TargetSelected---     if pck.id=$23 then TargetSelected(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7));     //--------------------------------------------------------------------------     if pck.id=$24 then UnTarget(cnt,ps.ReadDEx(pck,3));//------Потеря таргета---     //------------------------------------------------Обработка появления Npc---     if (pck.id=$0C) and (ps.ReadCEx(pck,122)=0) then       NpcInfo(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),ps.ReadCEx(pck,122),ps.ReadDEx(pck,15),ps.ReadDEx(pck,19),ps.ReadDEx(pck,23));     //---------------------------------------------------------MoveToLocation---     if pck.id=$2F then       MTL(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),ps.ReadDEx(pck,15));     //-------------------------------------------------------ValidateLocation---     if pck.id=$79 then       MTL(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,11),ps.ReadDEx(pck,15));     //-------------------------------------------------------------MoveToPawn---     if pck.id=$72 then       MTL(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,15),ps.ReadDEx(pck,19),ps.ReadDEx(pck,23),ps.ReadDEx(pck,7),true);     //--------------------------------------------------------------------------     if pck.id=$08 then DelObj(cnt,ps.ReadDEx(pck,3));//-------Удаляем обьєкти---     if pck.id=$00 then Die(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,23));//---Die---     //--------------------------------------------------------------------------     //-----------------------------------------------------------------Attack---     if pck.id=$33 then       Attack(cnt,ps.ReadDEx(pck,3),ps.ReadDEx(pck,7),ps.ReadDEx(pck,16),ps.ReadDEx(pck,20));     //--------------------------------------------------------------------------         //if pck.id=$71 then RR(cnt);//-------------------------------------restart---     if pck.id=$84 then RR(cnt);//--------------------------------------logaut---     //if pck.id=$1f then ActionFailed(cnt);//----------------------ActionFailed---   end;   dec(User[cnt].Bussi);   End;   except on E : Exception do     ShowMessage('ОШИБКА OnPacket:'+inttostr(pck.id)+'--'+inttostr(cnt)+'--'+E.ClassName+' ошибка: '+E.Message);   End;   end; // Необязательно вызываемая функция. (может отсутствовать в плагине) // Вызывается при выгрузке плагине procedure OnFree; stdcall; var i:integer; begin Try   fcl:=true;   //Form2.Free;   //sid.Free;   //itid.Free;   //npid.Free;   for i := 0 to 9 do while User[i].Bussi<>0 do;   //User.Clear;   //User.Destroy;   User.Free;   //   //if User<>nil then   except on E : Exception do     ShowMessage('ОШИБКА OnFree:'+E.ClassName+' ошибка: '+E.Message);   End; end; exports   GetPluginInfo,   OnPacket,   OnLoad,   SetStruct,   OnFree; begin Try Begin   Form2:=TForm2.Create(application);   //Form2.Visible:=false; End;   except on E : Exception do     ShowMessage('код 1:ОШИБКА ИНИЦИАЛИЗАЦИИ ДАННЫХ!!! '+E.ClassName+' ошибка: '+E.Message); End; end.

Последний раз редактировалось QaK, 12.05.2009 в 15:01.
Name4Me вне форума   Ответить с цитированием
За это сообщение Name4Me нажился 4 спасибками от:
Старый 22.04.2009, 00:16   #2
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

delphi Код:
unit Unit2; interface uses SysUtils,Dialogs,Classes,Windows,Variants;   procedure UserInfo(cid,sx,sy,sz,OID,ClID:integer;Nm:string);   procedure CharInfo(cid,x,y,z,OID,ClasID,ClanID:integer;Nm:string);   procedure NpcInfo(CID,OID,NID,isa,inc,X,Y,Z:integer);   procedure ValidatePosition(CID,mx,my,mz:integer);   procedure MTL(CID,OID,sx,sy,sz:integer;TAR:integer=0;f:boolean = false);   procedure AA(CID:integer);   procedure MyT(CID,TID:integer);   procedure TargetSelected(CID,OID,TID:integer);   procedure UnTarget(CID,OID:integer);   procedure ByPass(CID:integer;command:string);   procedure PartySWUpdate(CID,OID,CP,MCP,HP,MHP,MP,MMP,Lvl,CLID:integer;nm:string);   procedure PartyMemberPosition(CID,OID,x,y,z:integer);   procedure PartySpelled(CID,OID,skid,dur:integer);   procedure ASUpdate(cid,skid,Duration:integer);   procedure MagicSkillUse(cid,OID,TID,skid,delay:integer);   procedure StatsUpdate(cid,OID,id,Value:integer);   //procedure RR(CID:integer);   procedure Attack(CID,ATK,TAR,x,y:integer);   procedure DropItem(CID,Invid,id,x,y,z:integer);   procedure IL(CID,OID,IID,C,AB,n:integer);   procedure InventoryUpdate(CID,CH,OID,IID,C,AB:integer);   procedure DelObj(CID,OID:integer);   procedure Die(CID,OID,sw:integer);   procedure Unkast(CID,OID:integer);   procedure RR(CID:integer); implementation uses AAction,msbu,msbform,Other_Func,Augmentation; //---------------------------------------------------------------Инфа о чарах--- procedure UserInfo(cid,sx,sy,sz,OID,ClID:integer;Nm:string); begin Try   //if  User[CID]=nil then User[CID]:=TUser.create(Nm);   with User[CID] do Begin     if (ClassID<>ClID) or (Name<>Nm) then begin       Save;       Form2.DN(CID);       say(ClID,'ClassID '+inttostr(ClID));       ClassID:=ClID;       init(Nm);       Form2.Ncr(CID);       end;     ObjectID:=OID;     x:=sx;     y:=sy;     z:=sz;     Name:=nm;     NpcList.SetXYZ(x,y,z);     End;   //ShowInfo(cid);   except on E : Exception do     ShowMessage('ОШИБКА UserInfo:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //---------------------------------------------------------------Инфа о чарах--- procedure CharInfo(cid,x,y,z,OID,ClasID,ClanID:integer;Nm:string); begin Try   user[CID].CharList.AddChar(x,y,z,OID,ClasID,ClanID,Nm);   //if (ClasID=116) or(ClasID=97) or (ClasID=16)then Say(cid,'!!!');///ShowCharInfo(cid);   except on E : Exception do     ShowMessage('ОШИБКА CharInfo:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //----------------------------------------------------Обработка появления Npc--- procedure NpcInfo(CID,OID,NID,isa,inc,X,Y,Z:integer); var ni:integer; begin   Try   ni:=nid-1000000;   if npid.Values[inttostr(ni)]<>'' then User[cid].NpcList.ADDNpc(OID,ni,isa,X,Y,Z,npid.Values[inttostr(ni)])     else User[cid].NpcList.ADDNpc(OID,ni,isa,X,Y,Z,'NoName');   except on E : Exception do     ShowMessage('ОШИБКА NpcInfo:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-----------------------------------------------------------ValidatePosition--- procedure ValidatePosition(CID,mx,my,mz:integer); begin   Try   with User[CID] do begin     x:=mx;     y:=my;     z:=mz;  //say(CID,'CID'+inttostr(CID)+'/'+inttostr(User[CID].CID));     NpcList.SetXYZ(mx,my,mz);     if isInMTP and (ras(mx,my,MovePoint.x,MovePoint.y)<180) and not OnSBS then Begin       isInMTP:=false;       //MoveTT(CID);       End;     if (RecordTreck) and (Treck.size=0) then Treck.AddPoint(x,y,z);     if (RecordTreck) and (Treck.size>0) and (ras(x,y,Treck.Point[Treck.size].x,Treck.Point[Treck.size].y)>100) then Begin       Treck.AddPoint(x,y,z);       say(cid,'P['+inttostr(Treck.size)+']');       End;     End;   except on E : Exception do     ShowMessage('ОШИБКА MoveToLocation:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //---------------------------------------------------------Обработка движения--- procedure MTL(CID,OID,sx,sy,sz:integer;TAR:integer=0;f:boolean=false); begin   Try   with User[CID] do begin     if (OID=Lider.ID) then Begin       Lider.x:=sx;       Lider.y:=sy;       Lider.z:=sz;       {if f and (OID=Lider.ID) then Begin       Lider.isInCombat:=true;       Lider.DTT:=TAR;       End;}             if (not f) or (f and (not isInCombat and not lider.isInCombat)) then move2(CID);       End;     NpcList.MTL(OID,sx,sy,sz);     PartyList.MTL(OID,sx,sy,sz,x,y);     end;   Form2.StUpdate(CID);   except on E : Exception do     ShowMessage('ОШИБКА MoveToLocation:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------------------AA--- procedure AA(CID:integer); begin   Try   with user[CID] do if hp>0 then begin     AutoBotleUse(CID);     if GetTickCount-CurentT.CurseTime>15000 then CurentT.isInCurse:=false;     if (mhs<>0) and (not INKT) then AutoHeal(CID);     if (not INPU) and (not INKT) and(SwepList.Count<>0) and (User[cid].ClassID=55) then Sweep(CID);     if (OnSelfBaf) and (not INPU) and (not INKT) and (not isInHeal) then SelfBaf(CID);     if (OnPartyBaf) and (not INPU) and (not INKT) and (not isInHeal) and (not isInSBaf) then PartyBaf(CID);     if (OnAutoBaf) and (not User[CID].INKT) then AutoBaf(CID);     if (OnAutoPickUp) and (not isInSweep) and (not INKT)and (not INPU) then PickUp(CID);     if (OnAutoAtack) and (not isInSweep) and (not isInMTP) and (not INKT) and (not INPU) then AAtack(CID);     if (OnAutoAssist) and (not isInSweep) and (not isInMTP) and (not INKT)and (not INPU) and (Lider.isInCombat) then AAssist(CID);     if (OnAutoMTT) and (not isInMTP) then MoveTT(CID);     //if (i=0) and (User[cid].CurentCK.x<>0) then STS(cid,'0f'+anti4HEX(User[cid].CurentCK.x)+anti4HEX(User[cid].CurentCK.y)+anti4HEX(User[cid].CurentCK.z)+'00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00');     Form2.StUpdate(CID);     //isInHeal:=false;     //isInSBaf:=false;     if (not MA.Count>0) and (not MA.isComplete) and (not INKT) then DoAction(CID);     end;     except on E : Exception do     ShowMessage('ОШИБКА AA:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //----------------------------------------------------------Получение таргета--- procedure MyT(CID,TID:integer); begin Try   User[CID].CurentT.id:=TID;   User[CID].CurentT.selected:=true;   except on E : Exception do     ShowMessage('ОШИБКА MyT:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------TargetSelected--- procedure TargetSelected(CID,OID,TID:integer); begin Try   if (User[CID].Online) and (OID=User[CID].Lider.ID) then Begin     User[CID].Lider.DTT:=TID;     End;   except on E : Exception do     ShowMessage('ОШИБКА TargetSelected:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------Потеря таргета--- procedure UnTarget(CID,OID:integer); begin Try   with User[CID] do begin     if OID=ObjectID then Begin       CurentT.id:=0;       CurentT.DTT:=0;       CurentT.MaxHP:=0;       CurentT.HP:=0;       CurentT.x:=0;       CurentT.y:=0;       CurentT.selected:=false;       CurentT.isInCurse:=false;       CurentT.spoiled:=false;       isInCombat:=false;       INPU:=false;       //say(CID,'UnTarget');       End;     if OID=Lider.ID then Begin       Lider.isInCombat:=false;       Lider.DTT:=0;       //say(CID,'UnTarget');       End;   end;   except on E : Exception do     ShowMessage('ОШИБКА UnTarget:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ procedure ByPass(CID:integer;command:string); var i:integer; Begin   if command='sbs' then User[CID].OnSBS:=True;   if command='np' then User[CID].isInMTP:=false;   if command='p4' then User[CID].CurentPN:=4;   if command='ag' then  Augment(CID);   if command='sa' then Begin     for i:= 1 to User[CID].Treck.size do begin       ShowMessage(User[CID].Treck.Point[i].alist);     End;   End;   if command='mtt' then Begin     User[CID].OnAutoMTT:=true;     say(CID,'OnAutoMTT On');     End;   //ShowInfo(CID); End; //------------------------------------------------------------------------------ //-----------------------------------------------------PartySmallWindowUpdate--- procedure PartySWUpdate(CID,OID,CP,MCP,HP,MHP,MP,MMP,Lvl,CLID:integer;nm:string); var i:integer; Begin try   with user[CID].PartyList do begin     i:=IFOID(OID);     if i=-1 then Begin       AddChar(0,0,0,OID,0,0,'');       i:=IFOID(OID);       End;     items[i].CP:=CP;     items[i].MaxCP:=MCP;     items[i].HP:=HP;     items[i].MaxHP:=MHP;     items[i].MP:=MP;     items[i].MaxMP:=MMP;     items[i].Lvl:=Lvl;     items[i].ClassID:=CLID;     items[i].Name:=nm;     items[i].Ch:=false;     Form2.StUpdate(CID);     end;   except on E : Exception do     ShowMessage('ОШИБКА PartySWUpdate:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //--------------------------------------------------------PartyMemberPosition--- procedure PartyMemberPosition(CID,OID,x,y,z:integer); var i:integer; Begin Try   with user[CID].PartyList do begin     i:=IFOID(OID);     if i=-1 then Begin       AddChar(0,0,0,OID,0,0,'');       i:=IFOID(OID);       End;     items[i].x:=x;     items[i].y:=y;     items[i].z:=z;     items[i].dist:=ras(x,y,user[CID].x,user[CID].y);     End;   except on E : Exception do     ShowMessage('ОШИБКА PartyMemberPosition:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //---------------------------------------------------------------PartySpelled--- procedure PartySpelled(CID,OID,skid,dur:integer); var i:integer; Begin Try   with user[CID].PartyList do begin     i:=IFOID(OID);     if i=-1 then Begin       AddChar(0,0,0,OID,0,0,'');       i:=IFOID(OID);       End;     items[i].Baffs.SLTU(skid,dur);     end;   except on E : Exception do     ShowMessage('ОШИБКА PartySpelled:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //-------------------------------------------------------AbnormalStatusUpdate--- procedure ASUpdate(cid,skid,Duration:integer); Begin Try   User[cid].Baffs.SLTU(skid,Duration);   if (skid=4072) and (Duration>0) then User[cid].isInHold:=True;   except on E : Exception do     ShowMessage('ОШИБКА ASUpdate:'+User[cid].Name+'//'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //--------------------------------------------------------------MagicSkillUse--- procedure MagicSkillUse(cid,OID,TID,skid,delay:integer); Begin Try   with User[cid] do Begin     if (OID=ObjectID) and (SkilList.IFIID(skid)<>-1) then       SkilList.Itemi[skid].SetDelay(delay,GetTickCount);     if (skid<>42) and(OID=Lider.ID) and (TID<>Lider.ID) and (TID<>ObjectID) and (PartyList.IFOID(TID)=-1) then Begin       Lider.isInCombat:=true;       Lider.DTT:=TID;       End;     if (OID=ObjectID) and (TID<>ObjectID) and (skid=MAS) then isInCombat:=true;     End;   except on E : Exception do     ShowMessage('ОШИБКА MagicSkillUse:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //----------------------------------------------------------------StatsUpdate--- procedure StatsUpdate(cid,OID,id,Value:integer); begin   Try   with User[cid] do Begin     if OID=ObjectID then case id of       9: HP:=Value;       10: MaxHP:=Value;       33: CP:=Value;       34: MaxCP:=Value;       11: MP:=Value;       12: MaxMP:=Value;       end;     if OID=CurentT.ID then case id of       9: CurentT.HP:=Value;       10: CurentT.MaxHP:=Value;       end;     End;   except on E : Exception do     ShowMessage('ОШИБКА StatsUpdate:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //----------------------------------------------------обработка пакета атаки!--- procedure Attack(CID,ATK,TAR,x,y:integer); begin   Try   with user[CID] do begin     if (ATK=ObjectID) then Begin       CurentT.ID:=TAR;       //INAA:=true;       //isInCombat:=true;       if (not CurentT.spoiled) and (ClassID=55) and (CharList.IFOID(TAR)=-1) then sts(cid,'39FE0000000000000000');       if (not CurentT.spoiled) and (ClassID=117) and (CharList.IFOID(TAR)=-1) then sts(cid,'395C0100000000000000');       if (Pet.ID<>0) and (not Pet.isInCombat) then Begin         Pet.isInCombat:=true;         //sts(cid,'56100000000000000000');         if Pet.stype=1 then  sts(cid,'56160000000000000000');         End;       End;     if (ATK=user[CID].Lider.ID) then Begin       Lider.isInCombat:=true;       Lider.DTT:=TAR;       End;     if (ATList.IndexOf(inttostr(ATK))=-1) and (NpcList.IFOID(ATK)<>-1) and ((TAR=ObjectID) or (PartyList.IFOID(TAR)<>-1) or (ATK=ObjectID) or (PartyList.IFOID(ATK)<>-1) ) then Begin       ATList.Add(inttostr(ATK));       //if (WeaponOID<>0) and (RHID<>WeaponOID) then UseItem(CID,WeaponOID);       //if (MAS.ID<>0) and (MAS.Active) then MAS.Cust(CID);       //if (MDS.ID<>0) and (MDS.Active) then MDS.Cust(CID);       End;     End;   except on E : Exception do     ShowMessage('ОШИБКА Attack:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------------DropItem--- procedure DropItem(CID,Invid,id,x,y,z:integer); begin   Try   if ras(x,y,user[CID].x,user[CID].y)<400 then     user[CID].DropList.Add(inttostr(id));   except on E : Exception do     ShowMessage('ОШИБКА DropItem:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------------ItemList--- procedure IL(CID,OID,IID,C,AB,n:integer); begin Try   if n=0 then user[CID].IList.Clear;   user[CID].IList.AddItem(OID,IID,C,AB); except on E : Exception do     ShowMessage('ОШИБКА IL:'+E.ClassName+' ошибка: '+E.Message); end; end; //------------------------------------------------------------------------------ //------------------------------------------------------------InventoryUpdate--- procedure InventoryUpdate(CID,CH,OID,IID,C,AB:integer); var i:integer; begin Try   with user[CID].IList do begin     i:=IFOID(OID);     if i<>-1 Then case ch of       3: Delete(i);       2: user[CID].IList[i].Count:=C;       End;     if ch=1 Then AddItem(OID,IID,C,AB);     if (IID=3949) and (c<=20) and (c>0) and (IFIID(5264)<>-1) then useitem(cid,5264);//Blessed Spiritshot: C Grade     if (IID=3950) and (c<=20) and (c>0) and (IFIID(5265)<>-1) then useitem(cid,5265);//Blessed Spiritshot: B Grade     if (IID=3951) and (c<=20) and (c>0) and (IFIID(5266)<>-1) then useitem(cid,5266);//Blessed Spiritshot: A Grade     if (IID=3952) and (c<=20) and (c>0) and (IFIID(5267)<>-1) then useitem(cid,5267);//Blessed Spiritshot: S Grade     if (IID=1464) and (c<=20) and (c>0) and (IFIID(5255)<>-1) then useitem(cid,5255);//Soulshot: C-grade     if (IID=1465) and (c<=20) and (c>0) and (IFIID(5253)<>-1) then useitem(cid,5253);//Soulshot: B-grade     if (IID=1466) and (c<=20) and (c>0) and (IFIID(5254)<>-1) then useitem(cid,5254);//Soulshot: A-grade     if (IID=1467) and (c<=20) and (c>0) and (IFIID(5255)<>-1) then useitem(cid,5255);//Soulshot: S-grade     end;   except on E : Exception do     ShowMessage('ОШИБКА InventoryUpdate:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------Die--- procedure Die(CID,OID,sw:integer); begin Try   with User[cid] do Begin     //DinoIsRaedy:=false;     if (sw=1) and ((ClassID=55) or (ClassID=117))then Begin       if ((CurentT.ID<>OID) or INKT or isInHold) and (ATList.IndexOf(inttostr(OID))<>-1) then SwepList.Add(inttostr(OID));       if (CurentT.ID=OID) and not INKT then Begin         INKT:=True;         SkilList.Itemi[42].Cust(Cid);         End;       End;     NpcList.DelNpc(OID);     if ATList.IndexOf(inttostr(OID))<>-1 then       ATList.Delete(ATList.IndexOf(inttostr(OID)));     if (CurentT.ID=OID) and ((sw<>1) or ((ClassID<>55) or (ClassID<>117))) then Begin       CurentT.isInCurse:=False;       CurentT.spoiled:=False;       Pet.isInCombat:=false;       isInCombat:=false;       INPU:=false;       End;     if Lider.DTT=OID then Begin       Lider.DTT:=0;       Lider.isInCombat:=False;       End;     if (OID=ObjectID) and (OnAutoOFF) then Begin       sts(CID,'7D00000000');       sts(CID,'84',false);//LeaveWorld       End;   End;   except on E : Exception do     ShowMessage('ОШИБКА DelObj:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //---------------------------------------------------------------------DelObj--- procedure DelObj(CID,OID:integer); begin Try   with User[CID] do Begin     if DropList.IndexOf(inttostr(OID))<>-1 then Begin       DropList.Delete(DropList.IndexOf(inttostr(OID)));       if CurentPUID=OID then INPU:=false;       End;     CharList.DelChar(OID);     NpcList.DelNpc(OID);     if ATList.IndexOf(inttostr(OID))<>-1 then       ATList.Delete(ATList.IndexOf(inttostr(OID)));     if SwepList.IndexOf(inttostr(OID))<>-1 then       SwepList.Delete(SwepList.IndexOf(inttostr(OID)));     if CurentT.ID=OID then Begin       CurentT.ID:=0;       CurentT.selected:=False;       CurentT.spoiled:=False;       CurentT.isInCurse:=False;       Pet.isInCombat:=false;       isInCombat:=false;       INPU:=false;             End;     End;   except on E : Exception do     ShowMessage('ОШИБКА DelObj:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //---------------------------------------------------------------------Unkast--- procedure Unkast(CID,OID:integer); begin   Try     if User[CID].ObjectID=OID then Begin       User[CID].INKT:=False;       if not User[CID].OnAutoMTT then User[CID].isInMTP:=False;     End;   except on E : Exception do     ShowMessage('ОШИБКА Unkast:'+E.ClassName+' ошибка: '+E.Message);   End; end; //------------------------------------------------------------------------------ procedure RR(CID:integer); Begin   Try   User[CID].Save;   Form2.DN(CID);   User[CID].Online:=false;   except on E:Exception do     ShowMessage('RR'+E.ClassName+' ошибка: '+E.Message);   end; end; end.

Добавлено через 1 минуту
delphi Код:
unit TNpcs; interface Uses Contnrs,Dialogs,SysUtils,math,Other_Func; Type   Position = Record     x,y,z:integer;     End;   TNpc = class   Public     ObjectID:integer;     NpcID,IsAttackable:integer;     NpcName:string;     Dist:integer;     x,y,z:integer;   end;   TNpcList = class(TObjectList)   private     us,ct:Position;     centre:boolean;     function GetItems(Index: Integer): TNpc;     procedure SetItems(Index: Integer; const Value: TNpc);     function GetItemsi(Index: Integer): TNpc;     procedure SetItemsi(Index: Integer; const Value: TNpc);   public     pol:Poligon;     function IFOID(OID:Integer):Integer;     function IFIID(IID:Integer):Integer;     function GetMinDist(minr:integer=9999): integer;     Procedure ADDNpc(OID,NID,isa,sx,sy,sz:Integer;Nm:string);     Procedure DelNpc(OID:Integer);     Procedure SetXYZ(sx,sy,sz:Integer;cn:boolean = false);     Procedure MTL(OID,sx,sy,sz:Integer);     property Items[Index: Integer]: TNpc read GetItems write SetItems; default;     property Itemi[Index: Integer]: TNpc read GetItemsi write SetItemsi;   end;     Function MyNPCSort(el1,el2:TNpc):integer; implementation Function MyNPCSort(el1,el2:TNpc):integer; Begin   Result:=0; Try   if ((el1.IsAttackable=0) and (el2.IsAttackable=0)) or     ((el1.IsAttackable<>0) and (el2.IsAttackable<>0)) then       result:=ComparСeInteger(el1.Dist,el2.Dist);   if ((el1.IsAttackable=0) and (el2.IsAttackable<>0)) then result:=1;   if ((el1.IsAttackable<>0) and (el2.IsAttackable=0)) then result:=-1;   except on E : Exception do     ShowMessage('ОШИБКА MyNPCSort:'+E.ClassName+' ошибка: '+E.Message);   End; End; { TNpcList } procedure TNpcList.ADDNpc(OID, NID,isa, sx, sy, sz: Integer;Nm:string); Var MyNpc:TNpc;   i:integer; Begin Try   i:=IFOID(OID);   if i=-1 then Begin     MyNpc:=TNpc.create;     MyNpc.ObjectID:=OID;     MyNpc.NpcID:=NID;     MyNpc.IsAttackable:=isa;     MyNpc.x:=sx;     MyNpc.y:=sy;     MyNpc.z:=sz;     MyNpc.NpcName:=nm;     MyNpc.Dist:=Ras(sx,sy,us.x,us.y);     Add(MyNpc);     End   else Begin     items[i].x:=sx;     items[i].y:=sy;     items[i].z:=sz;     items[i].Dist:=Ras(sx,sy,us.x,us.y);     End;   except on E : Exception do     ShowMessage('ОШИБКА TTNpcList.ADDNpc:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TNpcList.DelNpc(OID: Integer); var i:integer; begin Try   i:=IFOID(OID);   if i<>-1 then Delete(i);   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.DelNpc:'+E.ClassName+' ошибка: '+E.Message); End; end; function TNpcList.GetItems(Index: Integer): TNpc; begin Result:=nil; Try   if (Index>-1)and(Index<Count) then Result := TNpc(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.GetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TNpcList.GetItemsi(Index: Integer): TNpc; begin   Result := TNpc.Create; Try   Index:=IFOID(Index);   if (Index>-1)and(Index<Count) then Result := TNpc(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.GetItemsi:'+E.ClassName+' ошибка: '+E.Message); End; end; function TNpcList.IFIID(IID: Integer): Integer; Var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].NpcID=IID then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.IFIID:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TNpcList.IFOID(OID: Integer): Integer; Var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].ObjectID=OID then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.IFOID:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TNpcList.MTL(OID, sx, sy, sz: Integer); begin Try   with itemi[OID] do if ObjectID<>0 then begin     x:=sx;     y:=sy;     z:=sz;     Dist:=Ras(sx,sy,us.x,us.y);     end;   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.MTL:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TNpcList.SetItems(Index: Integer; const Value: TNpc); begin Try   if (Index>-1)and(Index<Count) then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.SetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TNpcList.SetItemsi(Index: Integer; const Value: TNpc); begin Try   Index:=IFOID(Index);   if (Index>-1)and(Index<Count) then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.SetItemsi:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TNpcList.SetXYZ(sx, sy, sz: Integer;cn:boolean = false); var i:integer; begin Try   if not cn then Begin     us.x:=sx;     us.y:=sy;     us.z:=sz;     for i := 0 to Count - 1 do items[i].Dist:=Ras(items[i].x,items[i].y,us.x,us.y);     End else Begin     ct.x:=sx;     ct.y:=sy;     ct.z:=sz;     Centre:=true;     End;   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.SetXYZ:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TNpcList.GetMinDist(minr:integer=9999): integer; var i:integer; begin Result:=0; i:=0; Try   sort(@MyNPCSort);   if count>0 Then while (result=0) and (i<Count-1) do with items[i] do begin     if (not centre) and (IsAttackable=1)       and (Dist<minr) and (abs(us.z-z)<=300) then Result:=ObjectID;     if centre and (IsAttackable=1)       and (Ras(x,y,ct.x,ct.y)<minr) and (abs(ct.z-z)<=300)  then Result:=ObjectID;     inc(i);     end;   except on E : Exception do     ShowMessage('ОШИБКА TNpcList.SortByDist:'+E.ClassName+' ошибка: '+E.Message);   End; end; end.

Добавлено через 1 минуту
delphi Код:
unit TSkils; interface Uses Windows,Dialogs,SysUtils,ExtCtrls,Contnrs; Type   TSkil = class(TObject)   private     function Getp: Boolean;     Public       ReuseDelay:DWORD;       ID:integer;       Name: String;       Duration:integer;       LastTimeUsed:DWORD;       Procedure SetDelay(Delay,LTU:integer);       function Cust(CID:integer):Boolean;       property isActive:Boolean read Getp;   end;   TSkilList = class(TObjectList)   private     function GetItems(Index: Integer): TSkil;     procedure SetItems(Index: Integer; const Value: TSkil);     function GetItemsi(Index: Integer): TSkil;     procedure SetItemsi(Index: Integer; const Value: TSkil);   public     function IFIID(ID:Integer):Integer;     function IFName(Nm:String):Integer;     Procedure ADDSkil(SkilName:string;ID:Integer);     property Items[Index: Integer]: TSkil read GetItems write SetItems; default;     property Itemi[Index: Integer]: TSkil read GetItemsi write SetItemsi;   end;   Var NI:TSkil; implementation Uses AAction; { TSkil } //----------------------------------------------------------------------TSkil--- function TSkil.Getp: Boolean; begin   Result:=false;   Try   if (GetTickCount-LastTimeUsed)>=ReuseDelay then  Result:=True;   except on E : Exception do     ShowMessage('ОШИБКА TSkil.Getp:'+E.ClassName+' ошибка: '+E.Message);   End; end; Procedure TSkil.SetDelay(Delay,LTU:integer); Begin Try   LastTimeUsed:=LTU;   ReuseDelay:=Delay;   except on E : Exception do     ShowMessage('ОШИБКА TSkil.SetDelay:'+E.ClassName+' ошибка: '+E.Message);   End; End; function TSkil.Cust(CID:integer):boolean; Begin result:=false; Try   if isActive then Begin     LastTimeUsed:=GetTickCount;     ReuseDelay:=1500;     MagicSU(CID,ID);     Result:=true;     End;   except on E : Exception do     ShowMessage('ОШИБКА TSkil.Cust:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ { TSkilList } //------------------------------------------------------------------TSkilList--- function TSkilList.GetItems(Index: Integer): TSkil; begin Result:=NI; Try   if (Index>-1)and(Index<Count) then Result :=  TSkil(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.GetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TSkilList.GetItemsi(Index: Integer): TSkil; begin Result:=TSkil.Create; Try   Index:=IFIID(Index);   if (Index>-1)and(Index<Count) then Result := TSkil(inherited GetItem(Index));   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.GetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TSkilList.IFIID(ID: Integer): Integer; Var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].ID=ID then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.IFIID:'+E.ClassName+' ошибка: '+E.Message);   End; end; function TSkilList.IFName(Nm: String): Integer; Var i:integer; begin   Result:=-1; Try   i:=0;   while (Result=-1) and (i<Count) do     if items[i].Name=Nm then  Result:=i else inc(i);   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.IFName:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TSkilList.SetItems(Index: Integer; const Value: TSkil); begin Try   if (Index>-1)and(Index<Count) then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.SetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TSkilList.SetItemsi(Index: Integer; const Value: TSkil); begin Try   Index:=IFIID(Index);   if (Index>-1)and(Index<Count) then inherited SetItem(Index, Value);   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.SetItems:'+E.ClassName+' ошибка: '+E.Message);   End; end; Procedure TSkilList.ADDSkil(SkilName:string;ID:Integer); Var MySkil:TSkil; Begin Try   if IFIID(ID)=-1 then Begin      MySkil:=TSkil.create;      MySkil.Name:=SkilName;      MySkil.ID:=ID;      Add(MySkil);     End;   except on E : Exception do     ShowMessage('ОШИБКА TSkilList.ADDSkil:'+E.ClassName+' ошибка: '+E.Message);   End; End; Begin   NI:=TSkil.Create; end.

Добавлено через 45 секунд
delphi Код:
unit AAction; interface uses Coding, SysUtils,Dialogs,Classes,windows,ExtCtrls,unit2,Other_Func,OtherTypes;   function MoveToPoint(CID,mx,my,mz:integer):boolean;   function MoveTT(CID:integer):boolean;   function UseItem(CID,IID:integer):boolean;   function AutoBaf(CID:integer):boolean;   function Sweep(CID:integer):boolean;   procedure PickUp(cid:integer);   procedure ShowInfo(CID:integer);   procedure MagicSU(CID,MagicID:integer);   procedure AAtack(cid:integer);   procedure AAssist(cid:integer);   procedure PartyBaf(CID:integer);   procedure SelfBaf(CID:integer);   procedure AutoHeal(CID:integer);   Procedure AutoBotleUse(CID:integer);   procedure Move2(Cid:integer);   procedure STS(CID:integer;msg:string;F:boolean = true);   procedure Say(CID:integer;msg:string);   procedure DoAction(CID:integer);   Procedure StopMoveTT(CID:integer);   Procedure Fishing(CID:integer);   Procedure UnHold(CID:integer); const   fish=1312;   //ID fishing   pump=1313//ID pumping   reel=1314; //ID reeling   //MP726=726;  //mp маленькая банка iid-726   //HP   //FShotID=6540;   //WeaponID=5643;   //RoodID=6534;   //Green Colored Lure ID:6520      6519-6527   //Purple Colored Lure - High Grade ID:6524   //Yellow Colored Lure - High Grade ID:6527   //Triton Pole ID:6534 Var   ppck: PPacket;   ps: TPluginStruct; implementation uses msbu,MsbForm; Procedure UnHold(CID:integer); Begin   with user[CID] do Begin     isInHold:=false;     IsHPUse:=false;     IsMPUse:=false;     isInCombat:=false;     INPU:=false;     INKT:=false;     End; End; Procedure Fishing(CID:integer); Begin   if user[CID]<>nil then with user[CID] do Begin      if (RoodOID<>0) and (RHID<>RoodOID) then UseItem(CID,RoodOID);             if (CurenLureOID<>0) and (LHID<>CurenLureOID) then UseItem(CID,CurenLureOID);   End; End; Procedure StopMoveTT(CID:integer); Begin   if user[CID]<>nil then with user[CID] do Begin     OnAutoMTT:=False;     isInMTP:=false;   End; End; procedure DoAction(CID:integer); var   al:TStrings;   id,oid:integer;   fl:boolean;   s,buf:string; Begin Try   with user[CID] do if (MA.AList<>'') and (MA.md.Active) then begin     fl:=false;     oid:=0;     al:=TstringList.Create;     al.Text:=MA.AList; //NPCDLG(Jeremy[ID=31521])     if pos('NPCDLG',al[MA.CA])<>0 then Begin       id:=strtoint(copy(al[MA.CA],pos('(',al[MA.CA])+1,pos(')',al[MA.CA])-pos('(',al[MA.CA])-1));       id:=NpcList.IFIID(id);       if id<>-1 then oid:=NpcList[id].ObjectID;       if (oid<>0) and (CurentT.ID<>oid) then Begin         STS(cid,'1f'+anti4HEX(oid)+'00000000000000000000000000');         MA.md.SLTU(1000);         End;       if (oid<>0) and (CurentT.ID=oid) then Begin         STS(cid,'1f'+anti4HEX(oid)+'00000000000000000000000000');         fl:=true;         MA.md.SLTU(1000);         End;       if oid=0 then MA.isComplete:=true;       End;     if pos('DLGSEL',al[MA.CA])<>0 then Begin       s:=copy(al[MA.CA],pos('(',al[MA.CA])+1,pos(')',al[MA.CA])-pos('(',al[MA.CA])-1);       with ps do begin         buf:=HexToString('23');         WriteS(buf,s);         SendPckStr(buf,CID,True);         end;       fl:=true;       MA.md.SLTU(1000);       End;     if pos('UseSkill',al[MA.CA])<>0 then Begin       s:=copy(al[MA.CA],pos('(',al[MA.CA])+1,pos(')',al[MA.CA])-pos('(',al[MA.CA])-1);       if SkilList.Itemi[strtoint(s)].Cust(CID) then Begin         INKT:=True;         fl:=true;         MA.md.SLTU(200);         End;       End;     if pos('USEITEM',al[MA.CA])<>0 then Begin //USEITEM(Greater Haste Potion[ID=1374])       id:=strtoint(copy(al[MA.CA],pos('(',al[MA.CA])+1,pos(')',al[MA.CA])-pos('(',al[MA.CA])-1));       if (id=1374) and (Baffs.Itemi[2034].Duration<=300) then UseItem(CID,id);       if id<>1374 then UseItem(CID,id);       fl:=true;       MA.md.SLTU(200);       End;     if pos('RESTART',al[MA.CA])<>0 then Begin //USEITEM(Greater Haste Potion[ID=1374])       CurentPN:=0;       fl:=true;       End;     if fl then inc(MA.CA);     if MA.CA=MA.Count then MA.isComplete:=true;     al.Free;     End;   except on E : Exception do   ShowMessage('ОШИБКА DoAction:'+E.ClassName+' ошибка: '+E.Message);   end; End; //---------------------------------------------------------------AutoBotleUse--- Procedure AutoBotleUse(CID:integer); Begin Try   with User[CID] do begin     if (HP>0) and (MaxCP>0) and (MaxCP-CP>100) and (not IsCPUse) and (useitem(cid,CPiID)) then IsCPUse:=True;     if (HP>0) and (MaxHP>0) and (HP/MaxHP<0.8) and (not IsHPUse) and (useitem(cid,HPiID)) then IsHPUse:=True;     if (HP>0) and (MaxMP>0) and (MP/MaxMP<0.8) and (not IsMPUse) and (useitem(cid,MPiID)) then IsMPUse:=True;     end; except on E : Exception do   ShowMessage('ОШИБКА AutoBotleUse:'+E.ClassName+' ошибка: '+E.Message);   end; End; //------------------------------------------------------------------------------ //----------------------------------------------------------------MoveToPoint--- function MoveToPoint(CID,mx,my,mz:integer):boolean; Begin Result:=false; Try   with User[CID] do if ras(x,y,mx,my)>20 then begin     isInMTP:=true;     MovePoint.x:=mx;     MovePoint.y:=my;     MovePoint.z:=mz;     STS(cid,'0f'+anti4HEX(mx)+anti4HEX(my)+anti4HEX(mz)+'00000000000000000000000001000000');     Result:=true;     end; except on E : Exception do   ShowMessage('ОШИБКА MoveToPoint:'+E.ClassName+' ошибка: '+E.Message);   end; End; //------------------------------------------------------------------------------ //----------------------------------------------------------------MoveToPoint--- function MoveTT(CID:integer):boolean; Begin Result:=false; Try   with User[CID] do begin     OnAutoOFF:=true;     //say(CID,'Curent point: '+inttostr(CurentPN));     if (Treck.size>0) and (CurentPN<=Treck.size) then Begin       if (Treck.Point[CurentPN].alist<>'') and (ma.PN<>CurentPN) then         ma.SetAction(CurentPN,Treck.Point[CurentPN].alist);       if ((Treck.Point[CurentPN].alist='') or (ma.isComplete)) and (CurentPN<Treck.size) then Begin         inc(CurentPN);         MoveToPoint(CID,Treck.Point[CurentPN].x,Treck.Point[CurentPN].y,Treck.Point[CurentPN].z);         End;       End;   end; except on E : Exception do   ShowMessage('ОШИБКА MoveToPoint:'+E.ClassName+' ошибка: '+E.Message);   end; End; //------------------------------------------------------------------------------ //-----------------------------------------------------------------------Swep--- function Sweep(CID:integer):boolean; Begin Result:=false; Try   with User[CID] do if (SwepList.Count>0) and ((User[cid].ClassID=55) or (ClassID=117)) then begin     if (CurentT.ID<>strtoint(SwepList[0])) and (not CurentT.selected) then Begin       isInSweep:=true;       CurentT.ID:=strtoint(SwepList[0]);       STS(cid,'1f'+anti4HEX(CurentT.ID)+'00000000000000000000000001');       End;     if (CurentT.ID=strtoint(SwepList[0])) and CurentT.selected then Begin       INKT:=True;       SkilList.Itemi[42].Cust(Cid);       SwepList.Delete(0);       End;     Result:=true;     end; except on E : Exception do   ShowMessage('ОШИБКА Swep:'+E.ClassName+' ошибка: '+E.Message);   end; End; //------------------------------------------------------------------------------ //----------------------------------------------------------------Авто PickUp--- procedure PickUp(cid:integer); begin   Try   with User[cid] do if (DropList.Count<>0) then Begin     INPU:=true;     CurentPUID:=strtoint(DropList[DropList.Count-1]);     STS(cid,'1f'+anti4HEX(CurentPUID)+'00000000000000000000000000');     End;   except on E : Exception do   ShowMessage('ОШИБКА PickUp:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------------ShowInfo--- procedure ShowInfo(CID:integer); var   buf: string;   hmlstr:widestring; begin Try   with User[cid] do Begin     hmlstr:='';     hmlstr:='<html><title>'+Name+' ['+inttostr(ClassID)+']['+inttostr(ObjectID)+']'+'</title><body>';     hmlstr:=hmlstr+'<center>';     hmlstr:=hmlstr+'<br><button action="bypass mtt" value="MTT" width=74 height=21 back="L2UI_CH3.Btn1_normalOn" fore="L2UI_CH3.Btn1_normal">';     hmlstr:=hmlstr+'<br><button action="bypass sbs" value="SBS" width=74 height=21 back="L2UI_CH3.Btn1_normalOn" fore="L2UI_CH3.Btn1_normal">';     hmlstr:=hmlstr+'<br><button action="bypass np" value="Next point" width=74 height=21 back="L2UI_CH3.Btn1_normalOn" fore="L2UI_CH3.Btn1_normal">';     hmlstr:=hmlstr+'<br><button action="bypass ag" value="Ag" width=74 height=21 back="L2UI_CH3.Btn1_normalOn" fore="L2UI_CH3.Btn1_normal">';     hmlstr:=hmlstr+'<br><button action="bypass ka" value="Ka" width=74 height=21 back="L2UI_CH3.Btn1_normalOn" fore="L2UI_CH3.Btn1_normal">';     hmlstr:=hmlstr+'</center>';     //hmlstr:=hmlstr+'<buttom value="MTT" action="bypass mtt" width="100" height="22"><br>';     //hmlstr:=hmlstr+'<buttom value="Next point" action="bypass np" width="100" height="22" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"><br>';     hmlstr:=hmlstr+'</body></html>';   End;   if User[cid].ObjectID<>0 then with ps do begin     buf:=HexToString('19');     WriteD(buf,User[cid].ObjectID);     WriteS(buf,hmlstr);     WriteD(buf,0);     SendPckStr(buf,CID,False);   end;   except on E : Exception do     ShowMessage('ОШИБКА ShowInfo:'+E.ClassName+' ошибка: '+E.Message);   End; End; //------------------------------------------------------------------------------ //--------------------------------------------------------------------MagicSU--- procedure MagicSU(CID,MagicID:integer); begin   sts(CID,'39'+anti4HEX(MagicID)+'0000000000'); end; //------------------------------------------------------------------------------ //--------------------------------------------------------------------UseItem--- function UseItem(CID,IID:integer):boolean; begin   Result:=false;   Try   with User[cid].IList.Itemi[IID] do begin     if (OID<>0) and (Count<>0) then Result:=true;     if Result then sts(CID,'19'+anti4HEX(OID)+'00000000');     end;   except on E : Exception do   ShowMessage('ОШИБКА UseItem:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-----------------------------------------------------------------Авто Atack--- procedure AAtack(cid:integer); Var i:integer;   fl:boolean; begin   Try   fl:=false;   with  User[cid] do Begin     if (CurentT.ID=0) and (not CurentT.selected) and (not isInCombat) then Begin       i:=NpcList.GetMinDist(rk);       CurentT.ID:=i;       if i<>0 then STS(cid,'1f'+anti4HEX(i)+'00000000000000000000000001');       End;     if (CurentT.selected) and (not isInCombat) and(status[6]='-') then Begin       isInCombat:=true;       STS(cid,'1f'+anti4HEX(CurentT.ID)+'00000000000000000000000000');       End;     if (CurentT.selected)  and (MAS<>0) then Begin       isInCombat:=true;       if (MCS<>0) and (not CurentT.isInCurse) then Begin         fl:=true;         CurentT.CurseTime:=GetTickCount;         CurentT.isInCurse:=true;         SkilList.Itemi[MCS].Cust(Cid);         End;       if not fl then SkilList.Itemi[MAS].Cust(Cid);       End;   End;   except on E : Exception do   ShowMessage('ОШИБКА AAtack:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //---------------------------------------------------------------Авто AAssist--- procedure AAssist(cid:integer); var fl:boolean; begin   Try   fl:=false;   with  User[cid] do Begin     if (CurentT.ID<>Lider.DTT) and (Lider.DTT<>0) then Begin       CurentT.ID:=Lider.DTT;       STS(cid,'1f'+anti4HEX(CurentT.ID)+'00000000000000000000000001');       isInCombat:=False;       End;     if (CurentT.ID=Lider.DTT) and (Lider.DTT<>0) and (not isInCombat) and(status[6]='-') then Begin       isInCombat:=true;       STS(cid,'1f'+anti4HEX(CurentT.ID)+'00000000000000000000000000');       End;     if (CurentT.ID=Lider.DTT) and (Lider.DTT<>0) and (MAS<>0) then Begin       if (MCS<>0) and (not CurentT.isInCurse) then Begin         isInCombat:=true;         fl:=true;         CurentT.CurseTime:=GetTickCount;         CurentT.isInCurse:=true;         SkilList.Itemi[MCS].Cust(Cid);         End;       if not fl then SkilList.Itemi[MAS].Cust(Cid);       End;     End;   except on E : Exception do   ShowMessage('ОШИБКА AAssist:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //-------------------------------------------------------------------PartyBuf--- procedure PartyBaf(CID:integer); var i,p,bi:integer; fl,pfl:boolean; ms,bt:boolean; begin   Try   fl:=false;   pfl:=false;   ms:=false;   p:=0;   bi:=0;   with User[cid] do Begin     while (p<=PartyList.Count-1) and (not pfl) do Begin       case PartyList[p].ClassID of         10..17,25..30,38..43,49..52,94..98,103..105,110..112,115,116:bt:=true;         else bt:=false;         end;       if bt and (MBList.Count<>0) then begin//--------------------Mistick baf---         i:=0;         while (i<=MBList.Count-1) and (not fl) and (PartyList[p].HP>0) and (PartyList[p].dist<700) do Begin           if not PartyList[p].Baffs.Active[StrToInt(MBList.Names[i])] then fl:=true;           if not fl then inc(i);           End;         if fl then bi:=strtoint(MBList.Names[i]);         if fl then pfl:=true;         End;       if not bt and (FBList.Count<>0) then begin//----------------Fighter baf---         i:=0;         while (i<=FBList.Count-1) and (not fl) and (PartyList[p].HP>0) and (PartyList[p].dist<700) do Begin           if not PartyList[p].Baffs.Active[StrToInt(FBList.Names[i])] then fl:=true;           if not fl then inc(i);           End;         if fl then bi:=strtoint(FBList.Names[i]);         if fl then pfl:=true;         End;       if not pfl then inc(p);       End;       //if (pfl) and (User[cid].PartyList[p].dist>700) then pfl:=false;     if (pfl) and (((CurentT.ID=PartyList[p].ObjectID) and (CurentT .selected)) or (ms)) and (not INKT) then Begin       if SkilList.Itemi[bi].Cust(cid) then INKT:=True;;       End;     if (pfl) and (CurentT.ID<>PartyList[p].ObjectID) and (not ms) then Begin       CurentT.selected:=false;       CurentT.ID:=PartyList[p].ObjectID;       STS(cid,'1f'+anti4HEX(CurentT.ID)+'00000000000000000000000001');       End;     End;   except on E : Exception do   ShowMessage('ОШИБКА PartyBaf:'+Inttostr(CID)+'-'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //--------------------------------------------------------------------SelfBaf--- procedure SelfBaf(CID:integer); var i,bi:integer; fl,ms,bt:boolean; begin   Try   fl:=false;   ms:=false;   bi:=0;   with User[cid] do begin     case ClassID of       10..17,25..30,38..43,49..52,94..98,103..105,110..112,115,116:bt:=true;       else bt:=false;       end;     if bt and (MBList.Count<>0) then begin       i:=0;       while (i<=MBList.Count-1) and (not fl) do Begin         if not Baffs.Active[StrToInt(MBList.Names[i])] then fl:=true;         if not fl then inc(i);         End;       if fl then bi:=strtoint(MBList.Names[i]);       End;     if not bt and (FBList.Count<>0) then begin       i:=0;       while (i<=FBList.Count-1) and (not fl) do Begin         if not Baffs.Active[StrToInt(FBList.Names[i])] then fl:=true;         if not fl then inc(i);         End;       if fl then bi:=strtoint(FBList.Names[i]);       End;     case ClassID of       95:ms:=true;       end;     if (bi<>0) and (CurentT.ID<>ObjectID) and (not ms) then Begin     //User[cid].INKT:=True;       CurentT.selected:=false;       CurentT.ID:=ObjectID;       STS(cid,'1f'+anti4HEX(ObjectID)+'00000000000000000000000001');       End;     if (bi<>0) and (((CurentT.ID=ObjectID) and CurentT.selected) or ms) and       not INKT and SkilList.Itemi[bi].Cust(CID) then INKT:=True;     if bi=0 then isInSBaf:=false else isInSBaf:=true;   end;   except on E : Exception do   ShowMessage('ОШИБКА SelfBaf:'+Inttostr(CID)+'-'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //--------------------------------------------------------------------AutoBaf--- function AutoBaf(CID:integer):boolean; var i,bi:integer; fl:boolean; begin   Result:=false;   Try   fl:=false;   bi:=0;   with User[cid] do Begin     if ABList.Count<>0 then begin       i:=0;       while (i<=ABList.Count-1) and (not fl) do Begin         if not Baffs.Active[StrToInt(ABList.Names[i])] then fl:=true;         if not fl then inc(i);         End;       if fl then bi:=strtoint(ABList.Names[i]);       End;     if (bi<>0)  and (not INKT) then Begin       if SkilList.Itemi[bi].Cust(CID) then INKT:=True;       if INKT then Begin         isInCombat:=false;         End;       Result:=True       End;     End;   except on E : Exception do   ShowMessage('ОШИБКА AutoBaf:'+Inttostr(CID)+'-'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //--------------------------------------------------------------------AutoHeal--- procedure AutoHeal(CID:integer); var i,n:integer; begin   Try   with User[cid] do begin     INPU:=False;     n:=0;     i:=0;     if (MHS<>0) then Begin       if (MaxHP-HP>600) then n:=ObjectID;       while (i<=PartyList.Count-1) and (n>=0) do with PartyList[i] do Begin         if (ObjectID<>0) and (HP<>0) and (dist<630) and (HP/MaxHP<0.75) and (n>0)           and (User[cid].MMH<>0)  and (SkilList[SkilList.IFIID(MMH)].isActive) then n:=-1;         if (ObjectID<>0) and (HP<>0) and (dist<630) and (HP/MaxHP<0.75) and (n=0) then n:=ObjectID;         inc(i);         End;       if (n>0) and (CurentT.ID<>n) then Begin         CurentT.selected:=false;         CurentT.ID:=n;         isInHeal:=True;         STS(cid,'1f'+anti4HEX(n)+'00000000000000000000000001');         End;       if (n>0) and (CurentT.ID=n) and (CurentT.selected) and (not INKT) then         if SkilList[SkilList.IFIID(MHS)].Cust(cid) then INKT:=True;       End;     if (n<0) and (MMH<>0) and (not INKT) then       if SkilList[SkilList.IFIID(MMH)].Cust(cid) then INKT:=True;     if n=0 then isInHeal:=False else isInHeal:=True;     end;   except on E : Exception do   ShowMessage('ОШИБКА AutoHeal:'+Inttostr(CID)+'-'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ procedure Move2(Cid:integer);// -------------------------Следование за лидером--- var d:integer; begin   Try   Randomize;   with User[Cid] do if (Lider.ID<>0) and (OnMoveToLiader) Then  begin     d:=ras(x,y,Lider.x,Lider.y);     if (d>200) and (d<1900) then begin       MoveToPoint(Cid,Lider.x+20+random(50),Lider.y+20+random(50),Lider.z);       INKT:=false;       INPU:=false;       isInHeal:=false;       isInCombat:=false;       Lider.isInCombat:=false;       End;     end;   except on E : Exception do   ShowMessage('ОШИБКА Move2:'+E.ClassName+' ошибка: '+E.Message);   end; end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------STS--- procedure STS(CID:integer;msg:string;F:boolean = true); begin   if (CID<>-1) and (msg<>'') then with ps do SendPckStr(HexToString(msg),CID,f); end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------Say--- procedure Say(CID:integer;msg:string); var   buf: string; begin   with ps do begin     buf:=HexToString('4A00000000');     WriteD(buf,2);     WriteS(buf,'Auto');     WriteS(buf,msg);     SendPckStr(buf,CID,False);     end; end; //------------------------------------------------------------------------------ end.

Последний раз редактировалось QaK, 12.05.2009 в 15:10. Причина: Добавлено сообщение
Name4Me вне форума   Ответить с цитированием
За это сообщение Name4Me нажился 2 спасибками от:
Старый 22.04.2009, 00:24   #3
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

delphi Код:
unit OtherTypes; interface uses Windows,Classes; Type   TBaff = Record     public     SkillID:integer;     LTU:DWORD;     Duration:integer;     End;   TBaffList = Record     private       items:array[0..36] of TBaff;       Count:integer;       function IFID(ID: Integer): Integer;       function GetR(ID: Integer): boolean;       function GetItem(ID: Integer): TBaff;     public       Procedure SLTU(ID:Integer;D:integer = 1000);       Property Active[ID: Integer]:boolean read GetR;       Property Itemi[ID: Integer]:TBaff read GetItem;     End;   TMyDelay = Record     private       Delay:DWord;       LTU:DWord;       function GetR: boolean;     public       Procedure SLTU(D:integer = 1000);       Property Active:boolean read GetR;     End;   TMyMacroAction = Record       md:TMyDelay;       CA:DWord;       Count:DWord;       AList:string;       PN:integer;       isComplete:Boolean;       Procedure SetAction (PointN:integer;ActionList:string);     End; implementation {------------------------------------------------------------------TBaffList---} function TBaffList.GetItem(ID: Integer): TBaff; var i:integer;  b:TBaff; begin   Result:=b;   i:=IFID(ID);   if i<>-1 then Result:=Items[i]; end; function TBaffList.GetR(ID: Integer): boolean; var i:integer; begin   Result:=false;   i:=IFID(ID);   if (i<>-1) and (((items[i].Duration-(GetTickCount-items[i].LTU)/1000)>20)) then Result:=True; end; procedure TBaffList.SLTU(ID:Integer;D: integer); var i:integer; begin   i:=IFID(ID);   if i=-1 then Begin     items[Count].SkillID:=ID;     items[Count].Duration:=D;     items[Count].LTU:=GetTickCount;     inc(Count);     End else Begin       items[i].Duration:=D;       items[i].LTU:=GetTickCount;       End; end; function TBaffList.IFID(ID: Integer): Integer; var i:integer; begin   Result:=-1;   i:=0;   while (Result=-1) and (i<Count) do     if items[i].SkillID=ID then  Result:=i else inc(i); end; {-------------------------------------------------------------------TMyDelay---} function TMyDelay.GetR: boolean; begin   Result := false;   if LTU+Delay<GetTickCount then Result := True; end; procedure TMyDelay.SLTU(D:integer = 1000); begin   Delay:=D;   LTU:=GetTickCount; end; { TMyMacroAction } procedure TMyMacroAction.SetAction(PointN:integer;ActionList:string); var ml:TStrings; begin   ml:=TstringList.Create;   isComplete:=false;   PN:=PointN;   CA:=0;   AList:=ActionList;   ml.Text:=ActionList;   Count:=ml.Count;   ml.Free; end; end.

Добавлено через 1 минуту
delphi Код:
unit MsbForm; interface                           uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,   Dialogs, ExtCtrls, StdCtrls, ComCtrls,    Gauges, ToolWin, Buttons, ImgList,DateUtils, Menus,   msbu, Spin, Tabs, DockTabSet, ButtonGroup; type   TForm2 = class(TForm)     PageControl1: TPageControl;     TabSheet1: TTabSheet;     TBR: TTrackBar;     Shp1: TShape;     Panel1: TPanel;     ProgressBar1: TProgressBar;     TabSheet3: TTabSheet;     Memo1: TMemo;     TabSheet4: TTabSheet;     TabSheet5: TTabSheet;     ImageList1: TImageList;     PageControl2: TPageControl;     TabSheet7: TTabSheet;     Gauge4: TGauge;     Gauge5: TGauge;     Gauge6: TGauge;     Button3: TButton;     CheckBox2: TCheckBox;     CheckBox1: TCheckBox;     Gauge3: TGauge;     Timer1: TTimer;     Panel2: TPanel;     Label1: TLabel;     Label2: TLabel;     Gauge1: TGauge;     Panel3: TPanel;     CheckBox3: TCheckBox;     CheckBox4: TCheckBox;     CheckBox5: TCheckBox;     CheckBox6: TCheckBox;     CheckBox7: TCheckBox;     CheckBox8: TCheckBox;     CheckBox9: TCheckBox;     CheckBox10: TCheckBox;     StatusBar1: TStatusBar;     Label3: TLabel;     RadioGroup1: TRadioGroup;     RadioGroup2: TRadioGroup;     PM: TPopupMenu;     FBUF1: TMenuItem;     MBuf1: TMenuItem;     AllBuF1: TMenuItem;     ADD1: TMenuItem;     Remove1: TMenuItem;     FBuf2: TMenuItem;     MBuf2: TMenuItem;     AllBuf2: TMenuItem;     Ignor1: TMenuItem;     AutoBuff1: TMenuItem;     MAS1: TMenuItem;     MDS1: TMenuItem;     MBS1: TMenuItem;     SetLiader1: TMenuItem;     WarList1: TMenuItem;     FrendList1: TMenuItem;     PB: TPaintBox;     TrackBar3: TTrackBar;     Button2: TButton;     RadioGroup3: TRadioGroup;     MCS1: TMenuItem;     Button1: TButton;     OPD: TOpenDialog;     PageControl3: TPageControl;     TabSheet2: TTabSheet;     ListBox1: TListBox;     TabSheet6: TTabSheet;     TabSheet8: TTabSheet;     TabSheet9: TTabSheet;     SpinEdit1: TSpinEdit;     procedure Ncr(id:integer);     procedure DN(id:integer);     procedure StUpdate(id:integer);     procedure MyRGClick(Sender: TObject);     procedure MyBTClick(Sender: TObject);     procedure MySPClick(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer);     procedure MyTimer(Sender: TObject);     procedure FBUF1Click(Sender: TObject);     procedure PMPopup(Sender: TObject);     procedure CheckBox1Click(Sender: TObject);     procedure TrackBar3Change(Sender: TObject);     procedure MySpinEditChange(Sender: TObject);     procedure MyTreeViewClick(Sender: TObject);     procedure MyTreeViewCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;       State: TCustomDrawState; var DefaultDraw: Boolean);     procedure MyTreeViewEdited(Sender: TObject; Node: TTreeNode; var S: string);     procedure Timer1Timer(Sender: TObject);     procedure Button1Click(Sender: TObject);     procedure Button2Click(Sender: TObject);     procedure Button3Click(Sender: TObject);     procedure SpinEdit1Change(Sender: TObject);     procedure RadioGroup3Click(Sender: TObject); end; var   Form2: TForm2;   mx,my:integer;   lb:bool; implementation uses unit2,AAction,Other_Func,TNpcs; {$R *.dfm} procedure TForm2.MySpinEditChange(Sender: TObject); begin   with Sender as TSpinEdit do User[strtoint(Name[3])].rk:=Value; end; procedure TForm2.FBUF1Click(Sender: TObject); Var Cid:integer; begin   cid:=strtoint((PM.PopupComponent as TComboBox).Name[3]);   with (PM.PopupComponent as TComboBox) do   with User[cid] do   Case TMenuItem(Sender).Tag of     //28: User[id].SList.IgnorList.Add(User[id].SList.SkilList[(PM.PopupComponent as TComboBox).ItemIndex]);     24: with SkilList[SkilList.IFName(SelText)] do       if ABList.IndexOfName(inttostr(id))=-1 then ABList.Add(inttostr(id)+'='+Name);     27: with SkilList[SkilList.IFName(SelText)] do       if ABList.IndexOfName(inttostr(id))<>-1 then ABList.Delete(ABList.IndexOfName(inttostr(id)));     29: MAS:=SkilList[SkilList.IFName(SelText)].ID;     38: MCS:=SkilList[SkilList.IFName(SelText)].ID;     //30: User[id].mds:=strtoint(User[id].SList.SkilList.Names[(PM.PopupComponent as TComboBox).ItemIndex]);     //31: User[id].mbs:=strtoint(User[id].SList.SkilList.Names[(PM.PopupComponent as TComboBox).ItemIndex]);     //33: User[id].LiderInfo.ID:=User[id].CharList.ValueFromIndex[(PM.PopupComponent as TComboBox).ItemIndex];   End; end; procedure TForm2.SpinEdit1Change(Sender: TObject); begin   User[RadioGroup3.ItemIndex].CurentPN:=SpinEdit1.Value; end; procedure TForm2.StUpdate(id:integer); Var i:integer; var CI:TTreeNode; Begin try   if (User[id]<>nil) and(User[id].Online) and visible then with User[id] do   with PageControl2 do     with  TTabSheet(FindComponent('NT'+inttostr(id))) do Begin       Caption:=User[id].Name+'['+inttostr(ClassID)+']';       TLabel(FindComponent('LB'+inttostr(id))).Caption:=inttostr(ObjectID);       TSpinEdit(FindComponent('SE'+inttostr(id))).Value:=rk;       TLabel(FindComponent('LBT'+inttostr(id))).Caption:=inttostr(CurentT.ID)+'-['+inttostr(CurentT.HP)+'/'+inttostr(CurentT.MaxHP)+']';       if CurentT.spoiled then TLabel(FindComponent('LBT'+inttostr(id))).Caption:=TLabel(FindComponent('LBT'+inttostr(id))).Caption+'+';       TGauge(FindComponent('CG')).MaxValue:=MaxCP;       TGauge(FindComponent('CG')).Progress:=CP;       TGauge(FindComponent('HG')).MaxValue:=MaxHP;       TGauge(FindComponent('HG')).Progress:=HP;       TGauge(FindComponent('MG')).MaxValue:=MaxMP;       TGauge(FindComponent('MG')).Progress:=MP;       TGauge(FindComponent('HGT')).MaxValue:=CurentT.MaxHP;       TGauge(FindComponent('HGT')).Progress:=CurentT.HP;       //-------------------------------------------------------------SkilList---       if User[id].SkilList.Count<>0 then with TComboBox(FindComponent('SL'+inttostr(id))) do Begin         if Items.count<>User[id].SkilList.Count then Begin           Clear;           for I := 0 to User[id].SkilList.Count-1 do Items.Add(User[id].SkilList[i].Name);           End;         End;       //------------------------------------------------------------------------       TRadioGroup(FindComponent('RG1'+inttostr(id))).Caption:='HP ['+inttostr(IList.Itemi[HPiID].Count)+']';       if User[id].HPiID = 1060 then TRadioGroup(FindComponent('RG1'+inttostr(id))).ItemIndex:=0;       if User[id].HPiID = 1061 then TRadioGroup(FindComponent('RG1'+inttostr(id))).ItemIndex:=1;       if User[id].HPiID = 1539 then TRadioGroup(FindComponent('RG1'+inttostr(id))).ItemIndex:=2;       TRadioGroup(FindComponent('RG2'+inttostr(id))).Caption:='MP ['+inttostr(IList.Itemi[MPiID].Count)+']';       if User[id].MPiID = 726 then TRadioGroup (FindComponent('RG2'+inttostr(id))).ItemIndex:=0;       if User[id].MPiID = 728 then TRadioGroup (FindComponent('RG2'+inttostr(id))).ItemIndex:=1;       if User[id].isInCombat then TShape(FindComponent('SH'+inttostr(id)+'1')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'1')).Brush.Color:=ClWhite;       if User[id].IsCPUse then TShape(FindComponent('SH'+inttostr(id)+'2')).Brush.Color:=ClYellow         else TShape(FindComponent('SH'+inttostr(id)+'2')).Brush.Color:=ClWhite;       if User[id].IsHPUse then TShape(FindComponent('SH'+inttostr(id)+'3')).Brush.Color:=ClRed         else TShape(FindComponent('SH'+inttostr(id)+'3')).Brush.Color:=ClWhite;       if User[id].IsMPUse then TShape(FindComponent('SH'+inttostr(id)+'4')).Brush.Color:=ClBlue         else TShape(FindComponent('SH'+inttostr(id)+'4')).Brush.Color:=ClWhite;       if User[id].CurentT.isInCurse then TShape(FindComponent('SH'+inttostr(id)+'5')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'5')).Brush.Color:=ClWhite;       if User[id].isInMTP then TShape(FindComponent('SH'+inttostr(id)+'6')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'6')).Brush.Color:=ClWhite;       if isInHold then TShape(FindComponent('SH'+inttostr(id)+'7')).Brush.Color:=ClBlue         else TShape(FindComponent('SH'+inttostr(id)+'7')).Brush.Color:=ClWhite;       if User[id].isInHeal then TShape(FindComponent('SH'+inttostr(id)+'8')).Brush.Color:=ClRed         else TShape(FindComponent('SH'+inttostr(id)+'8')).Brush.Color:=ClWhite;       if User[id].isInSBaf then TShape(FindComponent('SH'+inttostr(id)+'9')).Brush.Color:=ClBlue         else TShape(FindComponent('SH'+inttostr(id)+'9')).Brush.Color:=ClWhite;       if User[id].isInSweep then TShape(FindComponent('SH'+inttostr(id)+'10')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'10')).Brush.Color:=ClWhite;       if User[id].OnAutoBaf then TShape(FindComponent('SH'+inttostr(id)+'11')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'11')).Brush.Color:=ClWhite;       if User[id].OnPartyBaf then TShape(FindComponent('SH'+inttostr(id)+'12')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'12')).Brush.Color:=ClWhite;       if User[id].OnSelfBaf then TShape(FindComponent('SH'+inttostr(id)+'13')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'13')).Brush.Color:=ClWhite;       if User[id].OnAutoAtack then TShape(FindComponent('SH'+inttostr(id)+'14')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'14')).Brush.Color:=ClWhite;       if User[id].OnAutoPickUp then TShape(FindComponent('SH'+inttostr(id)+'15')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'15')).Brush.Color:=ClWhite;       if User[id].OnAutoAssist then TShape(FindComponent('SH'+inttostr(id)+'16')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'16')).Brush.Color:=ClWhite;       if User[id].OnMoveToLiader then TShape(FindComponent('SH'+inttostr(id)+'17')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'17')).Brush.Color:=ClWhite;       if User[id].OnAutoMTT then TShape(FindComponent('SH'+inttostr(id)+'23')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'23')).Brush.Color:=ClWhite;       if status[6]='+' then TShape(FindComponent('SH'+inttostr(id)+'24')).Brush.Color:=clFuchsia         else TShape(FindComponent('SH'+inttostr(id)+'24')).Brush.Color:=ClWhite;       if User[id].INPU then TShape(FindComponent('SH'+inttostr(id)+'19')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'19')).Brush.Color:=ClWhite;       if User[id].INKT then TShape(FindComponent('SH'+inttostr(id)+'21')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'21')).Brush.Color:=ClWhite;       if User[id].OnAutoOFF then TShape(FindComponent('SH'+inttostr(id)+'22')).Brush.Color:=Clgreen         else TShape(FindComponent('SH'+inttostr(id)+'22')).Brush.Color:=ClWhite;            {       with TTreeView(FindComponent('TV'+inttostr(id))).Items do Begin         CI:=GetFirstNode;         while CI<>nil do Begin           if (CI.Text='[UserInfo]') then Begin               if Lider.isInCombat then CI.Item[0].Text:='Lider ID: '+inttostr(Lider.ID)+' ! ['+inttostr(Lider.DTT)+']'                 else CI.Item[0].Text:='Lider ID: '+inttostr(Lider.ID)+' ['+inttostr(Lider.DTT)+']';               CI.Item[1].Text:='MAS ['+inttostr(Mas)+']';               CI.Item[2].Text:='MCS ['+inttostr(Mcs)+']';               End;           if (CI.Text='[Party list]') and (PartyList.Count>0) and (PartyList.Count<>CI.Count) then             for I := 0 to NpcList.Count - 1 do Begin               if CI.Count<PartyList.Count then AddChild(CI,PartyList[i].Name);               CI.Item[i].Text:=PartyList[i].Name+' --> '+inttostr(PartyList[i].Dist);               CI.Item[i].SelectedIndex:=PartyList[i].ObjectID;               if CI.Count>PartyList.Count then Delete(CI.Item[PartyList.Count]);               End;           if (CI.Text='[NPC list]') and (NpcList.Count>0) then Begin             NpcList.Sort(@MyNPCSort);             for I := 0 to NpcList.Count - 1 do Begin               if CI.Count<NpcList.Count then AddChild(CI,'');               CI.Item[i].Text:=NpcList[i].NpcName+' ['+inttostr(NpcList[i].NpcID)+'] --> '+inttostr(NpcList[i].Dist);               CI.Item[i].SelectedIndex:=NpcList[i].ObjectID;               CI.Item[i].StateIndex:=NpcList[i].NpcID;               if CI.Count>NpcList.Count then Delete(CI.Item[NpcList.Count]);               End;             End;           //---------------------------------------------------------CharList---           if (CI.Text='[Char list]') and (CharList.Count>0) and (CharList.Count<>CI.Count) then             for I := 0 to CharList.Count - 1 do Begin               if CI.Count<CharList.Count then AddChild(CI,CharList[i].Name);               CI.Item[i].Text:=CharList[i].Name;               CI.Item[i].SelectedIndex:=CharList[i].ObjectID;               CI.Item[i].StateIndex:=CharList[i].ClassID;               if CI.Count>CharList.Count then Delete(CI.Item[CharList.Count]);               End;            if (CI.Text='[ATList]') and (ATList.Count>0) then             for I := 0 to ATList.Count - 1 do Begin               if CI.Count<ATList.Count then AddChild(CI,ATList[i]);               CI.Item[i].Text:=ATList[i];               CI.Item[i].SelectedIndex:=StrToInt(ATList[i]);               if CI.Count>ATList.Count then Delete(CI.Item[ATList.Count]);               End;            if (CI.Text='[ItemList]') and (IList.Count>0) then             for I := 0 to IList.Count - 1 do Begin               if CI.Count<IList.Count then AddChild(CI,'');               if itid.Values[inttostr(IList[i].ID)]<>'' then                 CI.Item[i].Text:=itid.Values[inttostr(IList[i].ID)]+' ['+inttostr(IList[i].Count)+']'                 else CI.Item[i].Text:='['+inttostr(IList[i].ID)+']'+' ['+inttostr(IList[i].Count)+']';               //CI.Item[i].SelectedIndex:=StrToInt(IList[i]);               if CI.Count>IList.Count then Delete(CI.Item[IList.Count]);               End;           CI:=CI.GetNext;           End;         End;       //------------------------------------------------------------------------       }           End;   except on E : Exception do     ShowMessage('ОШИБКА StUpdate:'+E.ClassName+' ошибка: '+E.Message);   end; End; procedure TForm2.Timer1Timer(Sender: TObject); Var CID,i:integer;   mt:real; begin Try   CID:=RadioGroup3.ItemIndex;   with PB.Canvas do with User[CID] do Begin     Brush.Color := ClWhite;     FillRect(ClipRect);       if Treck.size>1 then for i:= 1 to Treck.size do begin       Pen.Color:=ClBlue;       //map.LoadFromFile(GetCurrentDir+'\Treks\Atrei1.trk');       Pen.Color:=ClRed;       Pen.Width:=1;       with  User[CID].Treck do Begin         mt:=(350/mult);         Font.Size:=4;         TextOut(round((maxx-Point[i].x)*mt)+15,10+round((maxy-Point[i].y)*mt),Point[i].Name);         if i>1 then Begin           MoveTo(round((maxx-Point[i-1].x)*mt)+15,10+round((maxy-Point[i-1].y)*mt));           LineTo(round((maxx-Point[i].x)*mt)+15,10+round((maxy-Point[i].y)*mt));           End;         //Pen.Color:=cllime;         //PB.Canvas.Brush.Style:=bsSolid;         Brush.Color:=cllime;         Ellipse(round((maxx-x)*mt)+11,6+round((maxy-y)*mt),round((maxx-x)*mt)+19,14+round((maxy-y)*mt));         FloodFill(round((maxx-x)*mt)+15,10+round((maxy-y)*mt),cllime,fsBorder);         Brush.Color := ClWhite;         End;       End;       Pen.Color:=ClGreen;       Font.Size:=5;       TextOut(5,2,'Curent poin: '+inttostr(CurentPN));       TextOut(5,15,'Treck Size: '+inttostr(Treck.size));   End;   except on E : Exception do     ShowMessage('ОШИБКА Timer1Timer:'+E.ClassName+' ошибка: '+E.Message);   End; end; procedure TForm2.TrackBar3Change(Sender: TObject); begin   Form2.AlphaBlendValue:=TrackBar3.Position; end; procedure TForm2.MyTreeViewEdited(Sender: TObject; Node: TTreeNode;   var S: string); begin   {if Node.StateIndex>0 then Begin     if npid.IndexOfName(inttostr(Node.StateIndex))=-1 then npid.Add(inttostr(Node.StateIndex)+'='+s);     npid.SaveToFile('npcsid.ini');     End; Caption:=s;} end; procedure TForm2.MyTreeViewCustomDrawItem(Sender: TCustomTreeView;   Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);  Var MC:TColor; Begin   with Sender as TTreeView do     if (Node.HasAsParent(Node)) and (Node.Parent.Text='[Char list]') then Begin       mc:=Canvas.Pen.Color;       case Node.StateIndex of         16: Canvas.Pen.Color := clSkyBlue;         97: Canvas.Pen.Color := clSkyBlue;         116: Canvas.Pen.Color := clFuchsia;         else Canvas.Pen.Color := mc;         End;       End; End; procedure TForm2.MyTreeViewClick(Sender: TObject); Var CID:integer; begin   with Sender as TTreeView do Begin     cid:=strtoint(name[3]);     if Selected.SelectedIndex>0 then STS(cid,'1f'+anti4HEX(Selected.SelectedIndex)+'00000000000000000000000001'); //Select     //Caption:=Selected.Text+inttostr(Selected.Index);     End; end; procedure TForm2.Ncr; Var   i:integer;   sCID:string;   mp,p:TComponent; begin   sCID:=inttostr(id);   with TTabSheet.Create(PageControl2) do begin     Name:='NT'+sCID;     Caption:=User[id].Name;     PageControl:=PageControl2;     end;   mp:=PageControl2.FindComponent('NT'+sCID);   with TPageControl.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='PGC'+sCID;     Width:=380;     Height:=454;     top:=215;     Left:=3;     end;   //End;   p:=mp.FindComponent('PGC'+sCID);   with TTabSheet.Create(p) do begin     Name:='PG1';     Caption:='NPC List';     PageControl:=p as TPageControl;     end;   with TButton.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='MB'+sCID;     caption:='On';     Width:=30;     Height:=17;     top:=3;     Left:=3;     OnClick:=MyBTClick;   end;   with TSpinEdit.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='SE'+sCID;     Width:=60;     Height:=22;     top:=165;     Left:=3;     OnChange:=MySpinEditChange;     ShowHint:=true;     Hint:='Radius Kacha';     end;   with TComboBox.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='SL'+sCID;     top:=190;     PopupMenu:=PM;     Text:='';     Width:=158;     Left:=3;   end;   for i:=1 to 24 do with TShape.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='SH'+sCID+inttostr(i);     Width:=10;     Height:=10;     ShowHint:=true;     OnMouseDown:=MySPClick;     Tag:=i;     case i of       1:Hint:='IsInCombat';       2:Hint:='IsCPUse';       3:Hint:='IsHPUse';       4:Hint:='IsMPUse';       5:Hint:='TargetIsInCurse';       6:Hint:='MoveToPoint';       7:Hint:='isInHold';       8:Hint:='isInHeal';       9:Hint:='isInSBaf';       10:Hint:='isInSweep';       11:Hint:='OnAutoBaf';       12:Hint:='OnPartyBaf';       13:Hint:='OnSelfBaf';       14:Hint:='OnAutoAtack';       15:Hint:='OnAutoPickUp';       16:Hint:='OnAutoAssist';       17:Hint:='OnMoveToLiader';       18:Hint:='INA';       19:Hint:='INPU';       20:Hint:='INAA';       21:Hint:='INKT';       22:Hint:='OnAutoOFF';       23:Hint:='';       24:Hint:='Mistik';       end;     case i of       1..40: Begin         Top:=3;         Left:=40+i*13;         End;       end;   end;   with TLabel.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='LB'+sCID;     top:=25;     Left:=3;   end;   with TLabel.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='LBT'+sCID;     top:=63;     Left:=3;   end;   for i:=1 to 4 do   with TGauge.Create(mp) do begin     Parent:=mp as TTabSheet;     Case i of       1: begin           Name:='CG';           ForeColor:=ClYellow;           Top:=40;         end;       2: begin           Name:='HG';           ForeColor:=ClRed;           Top:=47;         end;       3: begin           Name:='MG';           ForeColor:=ClBlue;           Top:=54;         end;       4: begin           Name:='HGT';           ForeColor:=ClRed;           Top:=78;         end     end;     ShowText:=False;     Width:=158;     Height:=6;     Left:=3;   end;   for i:=1 to 2 do   with TRadioGroup.Create(mp) do begin     Parent:=mp as TTabSheet;     Name:='RG'+inttostr(i)+sCID;     Width:=80;     Height:=60;     Left:=3+85*(i-1);     Top:=95;     tag:=i;     case i of       1:Begin         Caption:='HP';         items.Add('LHP'); items.Add('HP'); items.Add('GHP');       End;       2:Begin         Caption:='MP';         items.Add('MP'); items.Add('GMP');       End;     End;     OnClick:=MyRGClick;   end;   with TTimer.Create(mp) do begin     Name:='MT'+sCID;     interval:=100;     ontimer:=MyTimer;     Enabled:=True;   end; End; procedure TForm2.PMPopup(Sender: TObject); var i:integer; begin if pos('UL',TPopupMenu(Sender).PopupComponent.name)<>0 then   for i := 0 to TPopupMenu(Sender).Items.Count - 1 do case TPopupMenu(Sender).Items[i].Tag of     33..35: TPopupMenu(Sender).Items[i].Visible:=true;     end   else for i := 0 to TPopupMenu(Sender).Items.Count - 1 do case TPopupMenu(Sender).Items[i].Tag of     33..35: TPopupMenu(Sender).Items[i].Visible:=false;   end; if pos('SL',TPopupMenu(Sender).PopupComponent.name)<>0 then   for i := 0 to TPopupMenu(Sender).Items.Count - 1 do case TPopupMenu(Sender).Items[i].Tag of     21..31,38: TPopupMenu(Sender).Items[i].Visible:=true;     end   else for i := 0 to TPopupMenu(Sender).Items.Count - 1 do case TPopupMenu(Sender).Items[i].Tag of     21..31,38: TPopupMenu(Sender).Items[i].Visible:=false;   end; //ShowMessage(TPopupMenu(Sender).PopupComponent.ClassName); end; procedure TForm2.RadioGroup3Click(Sender: TObject); begin   //RadioGroup3.Items.Objects[0]. :=false; end; procedure TForm2.Button1Click(Sender: TObject); Var s:string; begin   s:=InputBox('Save Treck','Name',User[RadioGroup3.ItemIndex].Name);   if s<>'' then with User[RadioGroup3.ItemIndex] do     Treck.SaveToFile(GetCurrentDir+'\Treks\'+s+'.trk'); end; procedure TForm2.Button2Click(Sender: TObject); begin   OPD.InitialDir:=GetCurrentDir+'\Treks\';   OPD.Execute;   if OPD.FileName<>'' then User[RadioGroup3.ItemIndex].Treck.LoadFromFile(OPD.FileName); end; procedure TForm2.Button3Click(Sender: TObject); begin user[0].Init('MrXtreme'); Form2.Ncr(0); end; procedure TForm2.CheckBox1Click(Sender: TObject); begin   if CheckBox1.Checked then Form2.FormStyle:=fsStayOnTop     else Form2.FormStyle:=fsNormal; end; procedure TForm2.DN; begin   (PageControl2.FindComponent('NT'+inttostr(id)) as TTabSheet).Destroy; End; procedure TForm2.MyRGClick(Sender: TObject); begin   with sender as TRadioGroup do with User[strtoint(name[4])] do     case tag of       1: case ItemIndex of         0: HPiID:=1060;         1: HPiID:=1061;         2: HPiID:=1539;         end;       2: case ItemIndex of         0: MPiID:=726;         1: MPiID:=728;         end;       end; end; procedure TForm2.MyBTClick(Sender: TObject); Var id:string; begin   with sender as TButton do Begin     id:=name[3];     if Caption='On' then Begin       Caption:='Off';       with PageControl2 do         with  TTabSheet(FindComponent('NT'+id)) do TTimer(FindComponent('MT'+id)).Enabled:=True;     End     Else Begin       Caption:='On';       with PageControl2 do         with  TTabSheet(FindComponent('NT'+id)) do TTimer(FindComponent('MT'+id)).Enabled:=False;     End;   End; end; procedure TForm2.MySPClick(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer); begin   with sender as TShape do     with User[strtoint(name[3])] do       Case Tag of         1: IsInCombat:= not IsInCombat;         2: IsCPUse:= not IsCPUse;         3: IsHPUse:= not IsHPUse;         4: IsMPUse:= not IsMPUse;         5: CurentT.IsInCurse:= not CurentT.IsInCurse;         6: isInMTP:= not isInMTP;         7: isInHold:= not isInHold;         8: isInHeal:= not isInHeal;         9: isInSBaf:= not isInSBaf;         10: isInSweep:= not isInSweep;         11: OnAutoBaf:= not OnAutoBaf;         12: OnPartyBaf:= not OnPartyBaf;         13: OnSelfBaf:= not OnSelfBaf;         14: OnAutoAtack:= not OnAutoAtack;         15: OnAutoPickUp:= not OnAutoPickUp;         16: OnAutoAssist:= not OnAutoAssist;         17: OnMoveToLiader:= not OnMoveToLiader;         18: ;         19: INPU:= not INPU;         20: ;         21: INKT:= not INKT;         22: OnAutoOFF:= not OnAutoOFF;         23: ;         24: ;         //11: if Pen.Color=clLime then OnAutoBaf:=True else OnAutoBaf:=False;         //12: if Pen.Color=clLime then OnPartyBaf:=True else OnPartyBaf:=False;         //13: if Pen.Color=clLime then OnSelfBaf:=True else OnSelfBaf:=False;         //14: if Pen.Color=clLime then OnAutoAtack:=True else OnAutoAtack:=False;         //15: if Pen.Color=clLime then OnAutoPickUp:=True else OnAutoPickUp:=False;         //16: if Pen.Color=clLime then OnAutoAssist:=True else OnAutoAssist:=False;         //17: if Pen.Color=clLime then OnMoveToLiader:=True else OnMoveToLiader:=False;         //24: if Pen.Color=clLime then status[6]:='+' else status[6]:='-';         End; end; procedure TForm2.MyTimer(Sender: TObject); var Cid:integer; begin Cid:=0; try   with sender as TTimer do Cid:=strtoint(name[3]);   With User[CID] Do Begin     if not isInHold then AA(CID);     if isInHold then with Baffs.Itemi[4072] do if Duration<(GetTickCount-LTU)/1000 then UnHold(cid);     End;   except on E : Exception do     ShowMessage('ОШИБКА MyTimer:'+inttostr(Cid)+' '+E.ClassName+' ошибка: '+E.Message);   End; end; end.

Последний раз редактировалось Name4Me, 15.05.2009 в 11:55. Причина: Добавлено сообщение
Name4Me вне форума   Ответить с цитированием
За это сообщение Name4Me нажился 2 спасибками от:
Старый 22.04.2009, 00:30   #4
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

Вроде всё если что виложу чего не виложил...
Буду оч благодарен если кто напишет свои предложения....
Бот пока сирой но достаточно работоспосбний, писался под хелбаунд

Поддерживаеться:
-авто мп,хп,( сп вроде как иногда глючит);
-Авто асист, следование за лидером, авто атака с ограничением дистанции и возможностью вибора радиуса и центра кача (для файтера и мага);
-авто баф, есть возможность бафать по 2 вариантам, авто хил;
-споил, свип;
-Подерживаеться возможность асиста петом;
-Поддерживаеться работа движения по маршруту с виполнением действий в определёних точках
Name4Me вне форума   Ответить с цитированием
За это сообщение Name4Me нажился 5 спасибками от:
Старый 11.05.2009, 08:57   #5
Новичок
 
Аватар для Johnson
 
Регистрация: 27.10.2007
Адрес: Пермь
Сообщений: 19
Сказал Спасибо: 28
Имеет 1 спасибку в 1 сообщении
Johnson пока неопределено
По умолчанию

Выложите пожалста откомпилированый плагин. Просто дельфи нету под рукой щас
__________________
Если Вы недовольны моими действиями - то Вам сюда!
Johnson вне форума   Ответить с цитированием
Старый 12.05.2009, 15:02   #6
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Name4Me, Для оформления кода юзай теги [ HIGHLIGHT = "delphi" ]тут код [ /HIGHLIGHT ] без пробелов в тегах
Также, неплохо было бы убарть ненужный код в каментах и прокоментировать рабочий код.

Последний раз редактировалось QaK, 12.05.2009 в 15:12.
QaK вне форума   Ответить с цитированием
Старый 14.05.2009, 19:01   #7
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

Рабочий плагин под камель
http://www.rapidshare.ru/1038288
Name4Me вне форума   Ответить с цитированием
За это сообщение Name4Me нажился 2 спасибками от:
Старый 14.05.2009, 22:18   #8
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

При запуске требует libmySQL.dll, где брать?
//alexteam: в гугл! -)))

Нашел. Это от MySQL.

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



Последний раз редактировалось NLObP, 14.05.2009 в 22:41.
NLObP вне форума   Ответить с цитированием
Старый 15.05.2009, 01:54   #9
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

В раней версии велась запись в базу даних... MySQL, запись отрубил а ссилка осталась ща найду где отрублю

Последний раз редактировалось Name4Me, 15.05.2009 в 11:53.
Name4Me вне форума   Ответить с цитированием
Старый 15.05.2009, 02:05   #10
Пользователь
 
Аватар для Name4Me
 
Регистрация: 17.06.2008
Сообщений: 44
Сказал Спасибо: 7
Имеет 19 спасибок в 9 сообщенях
Name4Me пока неопределено
По умолчанию

По ходу должна работать без библиотеки, только что специально просмотрел код ссилки, на дллку нет.
Хотя мож что и пропустил, дело в том что сначала планировалось писать стати чаров в базу даних потом по ходу заменил на ини файл.
Name4Me вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Жесткий скриптинг


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

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

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


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

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

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