Показать сообщение отдельно
Старый 28.06.2009, 18:39   #23
Местный
 
Аватар для 8tomat8
 
Регистрация: 17.01.2009
Сообщений: 282
Сказал Спасибо: 64
Имеет 81 спасибок в 63 сообщенях
8tomat8 пока неопределено
По умолчанию

moOYkoOn, ну ты "%$#^@!!! и нудный!
delphi Код:
program zatochka_IL; const   Name='AdolfHitler'; //Вписать сюда имя чара   ScrollID=6577;     //957 ScrollID скролла заточки   ItemID=9605;    //129 ItemIDID затачиваемого предмета   MaxEnchLvl=25;//уровень заточки который требуется достич   max=250;     //количество слотов в инвентаре чара, максимально - 250 var   ItemBase:  array[1..2,1..max] of integer;    //ItemID ObjID, lvl   ScrollBase:  array[1..max] of integer;    //Scroll   add: boolean; //прошла заточка?   timer: TTimer;   CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer;   SocialID:integer; // вспомогательная procedure Init; //Вызывается при включении скрипта var   i:integer; begin   //Enchant:=false;   CurEnchLvl:=0;   timer:=TTimer.Create(nil);   timer.OnTimer:=@OnTimerHP;   timer.enabled:=false;   timer.interval:=200; //время задержки   add:=false;   for i:=1 to max do begin     //очищаем масив     //Say('очищаем масив');     ItemBase[1,i]:=0;     ItemBase[2,i]:=0;   end;   //Пакет RequestItemList   buf:=hstr('0F');   SendToServerEx(Name); end; //****************************************************************************** procedure Free; //Вызывается при выключении скрипта begin   ItemBase:=nil;   ScrollBase:=nil;   timer.Free; end; //****************************************************************************** procedure Say(msg:string); begin   buf:=hstr('4A 00 00 00 00');   WriteD(2);   WriteS(Name);   WriteS(msg);   SendToClientEx(Name); end; //****************************************************************************** procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID var   i, ss, ww, j, ObjID, ItmID, lvl, ListCount: integer; begin   ss:=1; //индекс в массиве скроллов   ww:=1; //индекс в массиве предметов   j:=4; //смещение для ListCount   ListCount:=ReadH(j); //количество итемов не должно превышать max!   if ListCount>max then ListCount:=max;   j:=8; //смещение для ObjectID   //Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID   for i:=1 to ListCount do begin      ObjID:=ReadD(j);      //ObjectID      ItmID:=ReadD(j);    //ItemID      j:=j+14;      Lvl:=ReadD(j);    //Level      case ItmID of         ScrollID: begin             ScrollBase[ss]:=ObjID;             inc(ss);            ////// !!!!!!!!!!! Say('ColvoScrl='+IntToStr(ss));    !!!!!!!!!!!!!!!!!!   ////         end;         ItemID: begin             ItemBase[1,ww]:=ObjID;             ItemBase[2,ww]:=lvl;             inc(ww);            ///// !!!!!!!!!!!!!!! Say('ColvoItem='+IntToStr(ww));  !!!!!!!!!!!!!!!! /////         end;      end;     j:=j+10;   end;   ColvoItem:=ww-1;   ColvoScrl:=ss-1;   //Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID var   i, ii, j, ss, ww, ObjID, ItmID, Lvl, ListCount, UpdType: integer; begin   ListCount:=ReadH(2); //количество итемов   //Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl   j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален //  Say('Апдейт базы!');   for i:=1 to ListCount do begin     UpdType:=ReadH(j);     j:=j+2;     ObjID:=ReadD(j);     ItmID:=ReadD(j);     j:=j+14;     Lvl:=ReadH(j);     Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));     case UpdType of       1:case ItmID of           ItemID: begin             ColvoItem:=ColvoItem+1;             Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));             for ii:=1 to max do               if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;           end;           ScrollID: begin             ss:=ss+1;             Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));             for ii:=1 to max do if ScrollBase[ii]=0 then ScrollBase[ii]:=ObjID;           end;       end;       2:case ItmID of         ItemID:           for ii:=1 to max do             if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;         ScrollID:           Say('Внимание! Изменения в скролле!?');       end;       //удален       3:case ItmID of         ItemID: begin           ColvoItem:=ColvoItem-1;           for ii:=1 to max do             if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;               Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));         end;         ScrollID: begin           ColvoScrl:=ColvoScrl-1;           for ii:=1 to max do             if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0;             Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));         end;       end;     end;     j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален   end;   Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end; //****************************************************************************** function GetNextItemID: integer; //Выдает ObjID предмета, если не найден в базе, выдает -1, //достигли макс уровня заточки -2, подбираем минимальный текущий уровень заточки -3 var   i: integer; begin   Result:=-1;   if CurEnchLvl>=MaxEnchLvl then begin     Result:=-2;     exit;   end;   for i:=1 to max do begin     //находим первый подходящий предмет     if (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin       Result:=ItemBase[1,i];       exit;     end;   end;   inc(CurEnchLvl);   Result:=-3; end; //****************************************************************************** function GetNextScroll: integer; //Выдает ObjID скролла, если предмет не найден в базе, выдает -1 var   i: integer; begin   Result:=-1;   for i:=1 to max do begin     //находим первый подходящий предмет     if (ScrollBase[i]<>0) then begin       Result:=ScrollBase[i];       exit;     end;   end; end; //****************************************************************************** procedure UseItem(ObjectID: integer); begin   buf:=#$14;   WriteD(ObjectID);   WriteD(0);   SendToServerEx(Name); end; //****************************************************************************** procedure RequestEnchantItem(ObjectID: integer); begin   buf:=#$58;   WriteD(ObjectID);   SendToServerEx(Name); end; //****************************************************************************** procedure OnTimerHP(Sender: TObject); var   Item, scrl:integer; begin  if ColvoScrl=0 then begin       timer.enabled:=false;       Say('Покупаю скролы');       delay(500);       buf:=#$4B#$00#$00#$00#$00#$00#$15#$AE#$0C;       SendToServerEx(Name);       buf:=#$A7#$B1#$02#$00#$00#$C0#$27#$09#$00#$0A#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00;       SendToServerEx(Name);       delay(700);       timer.enabled:=true;       exit;     end;     ///if ColvoItem=1 then begin      /// Say('Остался последний предмет! Прервано!');      /// timer.enabled:=false;      /// exit;     ///end;     Scrl:=GetNextScroll;     if scrl=-1 then begin       Say('Нет такой заточки! Прервано!');       timer.enabled:=false;       exit;     end;     Item:=GetNextItemID;     case Item of       -1: begin           Say('Нет такого предмета! Прервано!');           timer.enabled:=false;           exit;       end;       -2: begin           Say('Достигли максимальный уровень заточки! Прервано!');           timer.enabled:=false;           exit;       end;       -3: begin           //Say('Подбираем текущий уровень заточки!');           timer.enabled:=true;           exit;       end;     end;     //************************************************     UseItem(Scrl);     RequestEnchantItem(Item);     //************************************************     ///Say('Заточили предмет! ItemID='+IntToStr(Item)); end; //****************************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** begin   //****************************************************************************   //не обрабатываем пустые пакеты   if pck='' then exit;   //****************************************************************************   if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin     SocialID:=ReadD(2);     case SocialID of       //социальное действие Yes для начала затачивания       6: begin         CurEnchLvl:=0;         Say('Команда Старт!!!');         timer.enabled:=true;         exit;       end;       //социальное действие No для окончания       5: begin         Say('Команда Стоп!!!');         timer.enabled:=false;         exit;       end;     end;   end;   //****************************************************************************   if FromServer then   case pck[1] of     //Пакет ItemList     #$1B: CreateItemBase; //создание базы предметов     //если удалили предметы, стираем в базе предметов пары ObjectID - ItemID     #$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета   end; end.
__________________
помог?СКАЖИ СПАСИБО!)

Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
Цитата:
Сообщение от Psih Посмотреть сообщение
Вот еще один вопрос:Вот вчера было све нормально
8tomat8 вне форума   Ответить с цитированием
За это сообщение 8tomat8 нажился 3 спасибками от: