Показать сообщение отдельно
Старый 30.12.2011, 06:23   #10
Новичок
 
Аватар для Satoshi Hojo
 
Регистрация: 30.12.2011
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Satoshi Hojo пока неопределено
По умолчанию

Помогите модернизировать скрипт для фреи. Я пока плохо разбираюсь, вопщем вот что получилось подскажите где накосячил...
PHP код:
const
  
ItemID 890// ItemID шмотки  
      
MyName='Ответ';            //<-- пишем ник своего чара
    
InventorySize       100;  //<-- количество ячеек в рюкзаке 
    //InventoryOffset     = 22;   //<-- смещение для листа инвентаря, если у вас не определяет инвентарь поменяйте на 26 или какое там на вашем ГФШ    
 
//----------------------------------------------------------------
var
  
ItemBase: array of Int64;
  
Crystalboolean;
    
BaseItems          : array[1..InventorySize,1..22of Int64;
    
x:longint;
//----------------------------------------------------------------
procedure Init//Вызывается при включении скрипта
var
i,kInt64;
begin
   
for i:=1 to InventorySize do for k:=1 to 22 do BaseItems[i,k]:=0;
  
Crystal:=false;
  
SendMsg1('Начало инициализации скрипта, откройте инвентарь');
end;
//-----------------------------------------------------------------
procedure Free//Вызывается при выключении скрипта
begin
  
break;
end;
//------------------------------------------------------------------
procedure SendMsg1(msg:string);
begin 
  buf
:=#$4A;
  
WriteD(0);
  
WriteD(10);
  
WriteS('');
  
WriteS(msg);
  
SendToClientEx('Ответ');
end;


procedure ItemList;
var
  
ijkInt64;
  
ListSizeInt64;
begin     
  j
:=4//пропускаем дo ListSize
  
ListSize:=ReadH(j); 
  
//SendMsg1('--'+inttostr(ListSize));
  
for i:=1 to ListSize do
  if (
i<=ListSizethen 
  begin
      BaseItems
[i,1]:=ReadD(j);  //ObjectID          
      
BaseItems[i,2]:=ReadD(j);  //ItemID    
      
BaseItems[i,3]:=ReadD(j);  //LocationSlot           
      
BaseItems[i,4]:=ReadQ(j);  //Amount:   
      
BaseItems[i,5]:=ReadH(j);  //ItemType2            
      
BaseItems[i,6]:=ReadH(j);  //CustomType1     
      
BaseItems[i,7]:=ReadH(j);  //isEquipped:     
      
BaseItems[i,8]:=ReadD(j);  //BodyPart               
      
BaseItems[i,9]:=ReadH(j); //EnchantLevel     
      
BaseItems[i,10]:=ReadH(j); //CustType2  
      
BaseItems[i,11]:=ReadD(j); //AugmentationID    
      
BaseItems[i,12]:=ReadD(j); //mana    
      
BaseItems[i,13]:=ReadH(j); //attackelement    
      
BaseItems[i,14]:=ReadH(j); //attackelementpower 
      
BaseItems[i,15]:=ReadH(j); //FreyaUnknown1 
      
BaseItems[i,16]:=ReadH(j); //firedefelementpower   
      
BaseItems[i,17]:=ReadH(j); //waterdefelementpower   
      
BaseItems[i,18]:=ReadH(j); //winddefelementpower   
      
BaseItems[i,19]:=ReadH(j); //earthdefelementpower   
      
BaseItems[i,20]:=ReadH(j); //holydefelementpower   
      
BaseItems[i,21]:=ReadH(j); //unholydefelementpower   
      
BaseItems[i,22]:=ReadD(j); //remindingtime                  
      
BaseItems[i,23]:=ReadD(j); //FreyaUnknown2      
      
BaseItems[i,24]:=ReadH(j); //FreyaUnknown3   

  
end
       
end;  
        
procedure InventoryUpdate//пакет 21, Создает базу ObjectID по ItemID
var
  
iiijkListCountUpdType Int64;
  
ItemType1ObjectIDItemIDLocationSlotCountItemType2CustomType1,
  
isEquippedBodyPartEnchantLevelCustType2AugmentationID,mana,attackelement,
  
attackelementpower,fu1,firedef,waterdef,winddef,earthdef,holydef,unholydef,remtime,fu2,fu3 :Int64;
begin
  ListCount
:=ReadH(2); //количество итемов
  
j:=4//смещение для действия с предметом 1-добавлен 2-изменен 3-удален
  
for i:=1 to ListCount do
  
begin
    UpdType       
:=ReadH(j);
    
ItemType1     :=ReadH(j);
    
ObjectID      :=ReadD(j);
    
ItemID        :=ReadD(j);
    
LocationSlot  :=ReadD(j);
    
Count         :=ReadQ(j);
    
ItemType2     :=ReadH(j);
    
CustomType1   :=ReadH(j);
    
isEquipped    :=ReadH(j);
    
BodyPart      :=ReadD(j);
    
EnchantLevel  :=ReadH(j);
    
CustType2     :=ReadH(j);
    
AugmentationID:=ReadD(j);
      
mana:=ReadD(j); //mana    
      
attackelement:=ReadH(j); //attackelement  
      
attackelementpower:=ReadH(j); //attackelementpower   
      
fu1:=ReadH(j); //FreyaUnknown1     
      
firedef:=ReadH(j); //firedefelementpower   
      
waterdef:=ReadH(j); //waterdefelementpower   
      
winddef:=ReadH(j); //winddefelementpower   
      
earthdef:=ReadH(j); //earthdefelementpower   
      
holydef:=ReadH(j); //holydefelementpower   
      
unholydef:=ReadH(j); //unholydefelementpower   
      
remtime:=ReadD(j); //remindingtime     
      
fu2:=ReadD(j); //FreyaUnknown2   
      
fu3:=ReadH(j); //FreyaUnknown3      
    
case UpdType of
//      1: 0;         //добавлен новый предмет, игнорим
      
2//изменен предмет в инвентаре
         
for ii:=1 to InventorySize do
         
begin
          
if (BaseItems[ii,1]=ObjectIDthen
           begin
            BaseItems
[ii,1]:=ObjectID;
            
BaseItems[ii,2]:=ItemID;
            
BaseItems[ii,3]:=LocationSlot;
            
BaseItems[ii,4]:=Count;
            
BaseItems[ii,5]:=ItemType2;
            
BaseItems[ii,6]:=CustomType1;
            
BaseItems[ii,7]:=isEquipped;
            
BaseItems[ii,8]:=BodyPart;
            
BaseItems[ii,9]:=EnchantLevel;
            
BaseItems[ii,10]:=CustType2;
            
BaseItems[ii,11]:=AugmentationID;
            
BaseItems[ii,12]:=mana;
            
BaseItems[ii,13]:=attackelement;
            
BaseItems[ii,14]:=attackelementpower;
            
BaseItems[ii,15]:=fu1;
            
BaseItems[ii,16]:=firedef;
            
BaseItems[ii,17]:=waterdef;
            
BaseItems[ii,18]:=winddef;
            
BaseItems[ii,19]:=earthdef;
            
BaseItems[ii,20]:=holydef;
            
BaseItems[ii,21]:=unholydef;
            
BaseItems[ii,22]:=remtime;   
            
BaseItems[ii,23]:=fu2
            
BaseItems[ii,24]:=fu3;               
            Break;
           
end;
         
end;
            
      
3begin         //удален
         
for ii:=1 to InventorySize do
          if (
BaseItems[ii,1]=ObjectIDthen
          begin
            
for k:=1 to 22 do BaseItems[ii,k]:=0;
            Break;
          
end;
         
end;
    
end;     
  
end;
  {
ReadItems;}
end;

function 
GetObjectId(inItemID :Int64) : Int64;
var
  
Int64;
begin  
 
for i:=1 to 100 do
 if (
BaseItems[i,2]=inItemIDthen begin 
   Result
:=BaseItems[i,1]; 
   exit;
  
end else
 
Result:=-1;  
end;

procedure RequestCrystallizeItem(ObjectIDintegerCount:Int64 1);  
begin     
  buf
:=#$2F;            
  
WriteD(ObjectID);     
  
WriteQ(1);
  
SendToServerEx('Ответ');  
end;
//------------------------------------------------------------
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

  
if FromServer and (pck[1]=#$11) then ItemList; //создание базы предметов
  
if FromServer and (pck[1]=#$21) and (pck[4]=#$62) then begin
    
InventoryUpdate//Обновление базы, если принят пакет на удаление предмета
   
 
if Crystal and (GetObjectId(ItemID)>0then 
     begin
       RequestCrystallizeItem
(GetObjectId(ItemID));
       
Delay(100);
       
InventoryUpdate;
       
Delay(100);
       
end
    
else begin
      Crystal
:=false;
      
SendMsg1('Весь шмот кристаллизован');
      
free;
    
end;
  
end;
  if 
FromServer and (pck[1]=#$27) then 
  
begin
    SendMsg1
('Панеслася!!!');
    if (
GetObjectId(ItemID)>0then begin
      Crystal
:=true;
      
RequestCrystallizeItem(GetObjectId(ItemID));
    
end else SendMsg1('Нужная шмотка не найдена');
   
end;
end

Последний раз редактировалось Satoshi Hojo, 30.12.2011 в 06:38. Причина: оформление
Satoshi Hojo вне форума   Ответить с цитированием