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

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 31.05.2010, 14:23   #1
Новичок
 
Регистрация: 31.05.2010
Сообщений: 11
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tenary пока неопределено
По умолчанию Помогите разобраться со скриптом кристаллизации

Разрабатываю скрипт кристаллизации... и столкнулся с рядом проблем :

PHP код:
const
  
ItemID 12098// ItemID шмотки  
      
MyName='Gaubica';            //<-- пишем ник своего чара
    
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('Gaubica');
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]:=ReadH(j);  //ItemType1            
      
BaseItems[i,2]:=ReadD(j);  //ObjectID 
      
BaseItems[i,3]:=ReadD(j);  //ItemID           
      
BaseItems[i,4]:=ReadD(j);  //LocationSlot   
      
BaseItems[i,5]:=ReadQ(j);  //Amount:               
      
BaseItems[i,6]:=ReadH(j);  //ItemType2         
      
BaseItems[i,7]:=ReadH(j);  //CustomType1  
      
BaseItems[i,8]:=ReadH(j);  //isEquipped:          
      
BaseItems[i,9]:=ReadD(j);  //BodyPart         
      
BaseItems[i,10]:=ReadH(j); //EnchantLevel     
      
BaseItems[i,11]:=ReadH(j); //CustType2  
      
BaseItems[i,12]:=ReadD(j); //AugmentationID    
      
BaseItems[i,13]:=ReadD(j); //mana    
      
BaseItems[i,14]:=ReadH(j); //attackelement    
      
BaseItems[i,15]:=ReadH(j); //attackelementpower 
      
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                   

  
end
       
end

Последний раз редактировалось tenary, 31.05.2010 в 22:46. Причина: переписал скрипт на исправленный
tenary вне форума   Ответить с цитированием
Старый 31.05.2010, 14:24   #2
Новичок
 
Регистрация: 31.05.2010
Сообщений: 11
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tenary пока неопределено
По умолчанию

PHP код:
procedure InventoryUpdate//пакет 21, Создает базу ObjectID по ItemID
var
  
iiijkListCountUpdType Int64;
  
ItemType1ObjectIDItemIDLocationSlotCountItemType2CustomType1,
  
isEquippedBodyPartEnchantLevelCustType2AugmentationID,mana,attackelement,
  
attackelementpower,firedef,waterdef,winddef,earthdef,holydef,unholydef,remtime :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 
      
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     
    
case UpdType of
//      1: 0;         //добавлен новый предмет, игнорим
      
2//изменен предмет в инвентаре
         
for ii:=1 to InventorySize do
         
begin
          
if (BaseItems[ii,2]=ObjectIDthen
           begin
            BaseItems
[ii,1]:=ItemType1;
            
BaseItems[ii,2]:=ObjectID;
            
BaseItems[ii,3]:=ItemID;
            
BaseItems[ii,4]:=LocationSlot;
            
BaseItems[ii,5]:=Count;
            
BaseItems[ii,6]:=ItemType2;
            
BaseItems[ii,7]:=CustomType1;
            
BaseItems[ii,8]:=isEquipped;
            
BaseItems[ii,9]:=BodyPart;
            
BaseItems[ii,10]:=EnchantLevel;
            
BaseItems[ii,11]:=CustType2;
            
BaseItems[ii,12]:=AugmentationID;
            
BaseItems[ii,13]:=mana;
            
BaseItems[ii,14]:=attackelement;
            
BaseItems[ii,15]:=attackelementpower;
            
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;                 
            Break;
           
end;
         
end;
            
      
3begin         //удален
         
for ii:=1 to InventorySize do
          if (
BaseItems[ii,2]=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,3]=inItemIDthen begin 
   Result
:=BaseItems[i,2]; 
   exit;
  
end else
 
Result:=-1;  
end;

procedure RequestCrystallizeItem(ObjectIDintegerCount:Int64 1);  
begin     
  buf
:=#$AF;            
  
WriteD(ObjectID);     
  
WriteQ(1);
  
SendToServerEx('Gaubica');  
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
вопрос в 6 посте

Последний раз редактировалось tenary, 31.05.2010 в 22:55.
tenary вне форума   Ответить с цитированием
Старый 31.05.2010, 15:03   #3
Местный
 
Аватар для Xen
 
Регистрация: 02.05.2010
Сообщений: 168
Сказал Спасибо: 9
Имеет 33 спасибок в 18 сообщенях
Xen пока неопределено
По умолчанию

тут
__________________
Free инет хранилище 2.3 Гб сейчас и до 8 гб с прямыми ссылками рефферал
Xen вне форума   Ответить с цитированием
Старый 31.05.2010, 16:34   #4
Новичок
 
Регистрация: 31.05.2010
Сообщений: 11
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tenary пока неопределено
По умолчанию

Прочитал про эти функции.. но все равно не понимаю этот кусок алгоритма...
И все же что может означать спам пакетов с сервера в чат : "ERR : NO TRADE!" ?
tenary вне форума   Ответить с цитированием
Старый 31.05.2010, 17:15   #5
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

скорее всего у тебя неверное считывание количества итемов, в одном месте у тебя стоит
BaseItems[i,5]:=ReadD(j); //Amount:
j:=j+4; ------------ считывается qword\можно кстати заменить сразу на =ReadQ(j);

а в блоке апдейта уже просто
Count:=ReadD(j);
определи как верно для твоего сервера будет и переделай
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?

Последний раз редактировалось Breadfan, 31.05.2010 в 17:18.
Breadfan вне форума   Ответить с цитированием
Старый 31.05.2010, 22:31   #6
Новичок
 
Регистрация: 31.05.2010
Сообщений: 11
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tenary пока неопределено
По умолчанию

Наконецто разобрался... рад безумно правильно считываю список, выбираю нужный ObjectId по ItemID, но теперь новая проблемма..

когда выполняю эту процедуру:
procedure RequestCrystallizeItem(ObjectID: integer; Count:Int64 = 1);
begin
buf:=#$2F;
WriteD(ObjectID);
WriteQ(Count);
SendToServerEx('Gaubica');

он отправляет пакет:
Tип: 0x2F (RequestCrystallizeItem)
Pазмер: 13+2
Время прихода: 21:04:44:468
0002 d ObjectID: 1081447975 (0x40759627)
0006 q Count: 1
но через некоторое время приходит системное сообшение : У Вас нет прав, чтобы сделать это.

Подскажите пожалуйста в чем проблема?

Добавлено через 3 часа 22 минуты
Посмотрел вручную пакет для кристализации.. и был неприятно удивлен.. в первый раз это было 0xC6 после двух успешных кристаллизаций вылетел из игры... захожу.. смотрю снова он уже стал 0x3A снова получил вылет из игры.. в третий раз уже 0xAF ... поясните пожалуйста нубу как преодолеть данную проблемму?

Вручную кристаллизую шмотку.. смотрю пакет.. далее вставляю в скрипт и запускаю... первая кристаллизация проходит успешно.. но последующее не воспринимаются. при повторном запуске вылетаю из игры...


Например вручную отправляю на сервер 99 49 F4 59 40 01 00 00 00 00 00 00 00 через некоторое время отправляется само по себе несколько пакетов на сервер B1 хх хх хх хх хх 00 00 00 00 14 00 00.

Последний раз редактировалось tenary, 31.05.2010 в 22:59. Причина: Добавлено сообщение
tenary вне форума   Ответить с цитированием
Старый 06.06.2010, 00:31   #7
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

tenary, введена доп.шифрация, нужно писать свою newxor.dll, ну это так ... предположение ... остальные пакеты ИДшники не меняют через некоторое кол-во одинаковых пакетов?
QaK вне форума   Ответить с цитированием
Старый 07.06.2010, 23:17   #8
Новичок
 
Регистрация: 31.05.2010
Сообщений: 11
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
tenary пока неопределено
По умолчанию

нет, не меняются, про newxor.dll тоже думал уже.. читаю тему про дешифрации трафика)
tenary вне форума   Ответить с цитированием
Старый 13.06.2010, 19:54   #9
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

tenary, попробуй поставить галку "обход смены ХОР ключа"
QaK вне форума   Ответить с цитированием
Старый 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 вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



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

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


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

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

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