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

На страйке?))) юзай более простую версию скрипта)))
PHP код:
program zatochka_IL;


const
  
Name='TomaT'//Вписать сюда имя чара
  
ScrollID=6577;     //957 ScrollID скролла заточки
  
ItemID=6594;    //129 ItemIDID затачиваемого предмета
  
MaxEnchLvl=30;//уровень заточки который требуется достич
  
max=80;     //количество слотов в инвентаре чара, максимально - 250

var
  
ItemBase:  array[1..2,1..maxof integer;    //ItemID ObjID, lvl
  
ScrollBase:  array[1..maxof integer;    //Scroll
  
addboolean//прошла заточка?
  
timerTTimer;
  
CurEnchLvlColvoItemColvoScrlCurItemCurScrlinteger;
  
SocialID:integer// вспомогательная

procedure Init//Вызывается при включении скрипта
var
  
i:integer;
begin
  
//Enchant:=false;
  
CurEnchLvl:=0;
  
timer:=TTimer.Create(nil);
  
timer.OnTimer:=@OnTimerHP;
  
timer.enabled:=false;
  
timer.interval:=500//время задержки
  
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
  
isswwjObjIDItmIDlvlListCountinteger;
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;
        
ItemIDbegin
            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
  
iiijsswwObjIDItmIDLvlListCountUpdTypeinteger;
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]:=ObjIDItemBase[2,ii]:=lvlend;
          
end;
          
ScrollIDbegin
            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]:=0ItemBase[2,ii]:=0end;
              
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
        
end;
        
ScrollIDbegin
          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 GetNextItemIDinteger;
//Выдает ObjID предмета, если не найден в базе, выдает -1,
//достигли макс уровня заточки -2, подбираем минимальный текущий уровень заточки -3
var
  
iinteger;
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]<=CurEnchLvlthen begin
      Result
:=ItemBase[1,i];
      exit;
    
end;
  
end;
  
inc(CurEnchLvl);
  
Result:=-3;
end;

//******************************************************************************
function GetNextScrollinteger;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1
var
  
iinteger;
begin
  Result
:=-1;
  for 
i:=1 to max do begin
    
//находим первый подходящий предмет
    
if (ScrollBase[i]<>0then begin
      Result
:=ScrollBase[i];
      exit;
    
end;
  
end;
end;

//******************************************************************************
procedure UseItem(ObjectIDinteger);
begin
  buf
:=#$14;
  
WriteD(ObjectID);
  
WriteD(0);
  
SendToServerEx(Name);
end;

//******************************************************************************
procedure RequestEnchantItem(ObjectIDinteger);
begin
  buf
:=#$58;
  
WriteD(ObjectID);
  
SendToServerEx(Name);
end;

//******************************************************************************
procedure OnTimerHP(SenderTObject);
var
  
Itemscrl:integer;
begin
 
if ColvoScrl=0 then begin
////добавил часть для автоматической докупки скролов
////НЕ ЗАБЫВАЙ МЕНЯ ПАКЕТ ПОКУПКИ СКРОЛОВ ПРИ ИХ СМЕНЕ!!! УГРОБИШ ЧАРА! 
     
timer.enabled:=false;
      
Say('Покупаю скролы');
      
delay(500);
      
///buf:=HStr('A7 CD A4 08 00 A0 86 01 00 01 00 00 00 00 00 00 00 00 00 00 00');
      ///SendToServer;
     /// buf:=HStr('A7 B1 02 00 00 A0 86 01 00 0A 00 00 00 00 00 00 00 00 00 00 00');
      
SendToServer;
      
delay(500);
      
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
      
-1begin
          Say
('Нет такого предмета! Прервано!');
          
timer.enabled:=false;
          exit;
      
end;
      -
2begin
          Say
('Достигли максимальный уровень заточки! Прервано!');
          
timer.enabled:=false;
          exit;
      
end;
      -
3begin
          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 для начала затачивания
      
6begin
        CurEnchLvl
:=0;
        
Say('Команда Старт!!!');
        
timer.enabled:=true;
        exit;
      
end;
      
//социальное действие No для окончания
      
5begin
        Say
('Команда Стоп!!!');
        
timer.enabled:=false;
        exit;
      
end;
    
end;
  
end;

  
//****************************************************************************
  
if FromServer then
  
case pck[1of
    
//Пакет ItemList
    #$1B: CreateItemBase; //создание базы предметов
    //если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
    #$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
  
end;

end
Это тоже ..._by_NLObP
На страйке есть баг на адену) в ГМ ШОПЕ так что юзай))

Добавлено через 16 часов 48 минут
скажи свой ник на сервере
__________________
помог?СКАЖИ СПАСИБО!)

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

Последний раз редактировалось 8tomat8, 13.03.2009 в 16:36. Причина: Добавлено сообщение
8tomat8 вне форума   Ответить с цитированием
За это сообщение 8tomat8 нажился спасибкой от: