Stealth Client Forum

Альтернативный клиент Ultima Online
Текущее время: 18.12.2018 17:44

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Stealth 6
СообщениеДобавлено: 26.04.2013 15:06 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
для тестов и создания шаблонов скриптов нужны любители любых языков, кроме паскаля и C# (тут уже все написано). В частности, интересны грамотный питонщик, java и т.д.
Писать в личку, а лучше прямо в аську.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 31.05.2013 12:02 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
peis писал(а):
Также интересно будут ли нормально работать старые скрипты в новом стелсе

процентов так на 99. 1% я оставлю на то, что где-то я что-то не вспомню и изменю. Но надеюсь что не будет такого.

Вот с питоном сложнее, но это проблемы тех, кто хочет в нем писать скрипты. Захотят - напишут прослойку, типа той, что мы сделали для дельфей и c#. Пока питонщики молчат.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 08.06.2013 12:34 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
принимаю заявки на переписывание нескольких больших и сложных скриптов в новом формате на Delphi\c#, для демонстрации. Задача - чтобы использовалось как можно больше скриптовых возможностей. туда же прицеплю GUI и всякое такое.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 09.06.2013 10:17 
Не в сети Expert
Expert

Зарегистрирован: 13.12.2012 17:35
Сообщения: 710
Vizit0r писал(а):
принимаю заявки на переписывание нескольких больших и сложных скриптов в новом формате на Delphi\c#, для демонстрации. Задача - чтобы использовалось как можно больше скриптовых возможностей. туда же прицеплю GUI и всякое такое.

Ламбер\майнинг + крафт тулсов. Вроде как и не сложно, но потом можно будет "почерпнуть"!
Код:
Program Mining_Bot_New_2; // -- V nazvanii "2" - eto nomer konfiga dlya bota.

const
RESP_WAITING_TIME_MINS = 5; // -- Prodolzjitelnost' ozjidaniya respa v minutah.
MY_MAX_WEIGHT = 200; // -- Maks ves pri kotorom vugryzka.
AVERAGE_LAG_MS = 1500; // -- Ne Trogat'.
BANK_ID = $400DBA9E; // -- Bank id personaja.
CURRENT_BOT = 2; // -- poryadkoviy nomer bota. 1, 2, 3.
{===========================================================================================================================}
{========CHAT SETUP================}
{MINING PART}
 M_nothing1 = 'is no metal';
 M_nothing2 = 'too far';
 M_nothing3 = 'mining in rock';
 M_nothing4 = 'cannot mine';
 M_nothing5 = 'no line';
 M_nothing6 = 'reach';
 M_fizzles1 = 'loosen some rocks';
 M_needwait = 'not to mine';
 M_success = 'in your pack.';
{LUMBER PART}
 Msg1 = 'переместили';
 Msg2 = 'You put';
 Msg3 = 'hack';
 Msg4 = 'Target cannot be seen';
 Msg5 = 'There are no';
 Msg6 = 'not enough wood here to';
 Msg7 = 'use an axe on';
 Msg8 = 'That is too far away';
{====CHAT SETUP END=================}
 iTTileCount = 39;   
 iRadiusSearch = 30; // Радиус (не диаметр!) поиска деревьев в тайлах, относительно персонажа
 Logs = $1BDD;       // Тип логов
 Raw_Ore_Type = $19B8;
 Ingot_Type = $1BEF;
{END CONSTANTS}
{===========================================================================================================================}
type WayPoints = record
   x, y : Integer;
   end;

type TItemInfo = Record
   TypeOfItem : Cardinal;
   CategoryBtn, ItemBtn : Integer;
   end;
{===========================================================================================================================}   
{VARS}   
var
Hatchet, Pickaxe, Tinker_Tools, Carpentry_Tools : TItemInfo;
WayPoint : array[0..12] of WayPoints;
i, minret, Start_Mine, End_Mine, Bank_Tile_X, Bank_Tile_Y : Integer;
FoundTilesArray : TFoundTilesArray;
TempFoundTilesArray, ChopTilesArray : array of TFoundTile;
TreeTile:array [0..iTTileCount] of word;
ctime : TDateTime;
{END VARS}
{===========================================================================================================================}
{INITIATION SECTION}
procedure InitBotSystem;
   begin
      if (CURRENT_BOT = 1) then
         begin
            Start_Mine := 1;
            End_Mine := 3;
            Bank_Tile_X := 2512;
            Bank_Tile_Y := 548;
         end;
      if (CURRENT_BOT = 2) then
         begin
            Start_Mine := 4;
            End_Mine := 7;
            Bank_Tile_X := 2512;
            Bank_Tile_Y := 553;
         end;
      if (CURRENT_BOT = 3) then
         begin
            Start_Mine := 8;
            End_Mine := 9;
            Bank_Tile_X := 2512;
            Bank_Tile_Y := 559;
         end;
   end;
procedure InitTools;
   begin
      Hatchet.TypeOfItem := $0F43;
      Hatchet.CategoryBtn := 6;
      Hatchet.ItemBtn := 15;
      Pickaxe.TypeOfItem := $0E86;
      Pickaxe.CategoryBtn := 8;
      Pickaxe.ItemBtn := 57;
      Tinker_Tools.TypeOfItem := $1EB8;
      Tinker_Tools.CategoryBtn := 8;
      Tinker_Tools.ItemBtn := 25;
      Carpentry_Tools.TypeOfItem := $1034;
      Carpentry_Tools.CategoryBtn := 8;
      Carpentry_Tools.ItemBtn := 33;
   end;
   
  procedure InitWaypoints;
   begin
      WayPoint[0].x := Bank_Tile_X;
      WayPoint[0].y := Bank_Tile_Y;
   //______Minoc Bank__________//
      WayPoint[1].x := 2466;
      WayPoint[1].y := 556;
   //______Crafting Point______//   
      WayPoint[2].x := 2570;
      WayPoint[2].y := 477;   
      WayPoint[3].x := 2573;
      WayPoint[3].y := 477;
      WayPoint[4].x := 2575;
      WayPoint[4].y := 478;
      WayPoint[5].x := 2577;
      WayPoint[5].y := 480;
      WayPoint[6].x := 2573;
      WayPoint[6].y := 480;
      WayPoint[7].x := 2569;
      WayPoint[7].y := 480;
       WayPoint[8].x := 2565;
      WayPoint[8].y := 485;
      WayPoint[9].x := 2565;
      WayPoint[9].y := 485;
      WayPoint[10].x := 2569;
      WayPoint[10].y := 486;
   //______Mining Points________//
      WayPoint[11].x := 2572;
      WayPoint[11].y := 475;
   //______Smelting Point______//
      WayPoint[12].x := 2435;
      WayPoint[12].y := 477;
   //_______Lumber Point________//
   end;
   

procedure InitTTilesArray;
  begin
   TreeTile[0]:=3274;
   TreeTile[1]:=3275;
   TreeTile[2]:=3277;
   TreeTile[3]:=3280;

   TreeTile[4]:=3283;
   TreeTile[5]:=3286;
   TreeTile[6]:=3288;
   TreeTile[7]:=3290;

   TreeTile[8]:=3293;
   TreeTile[9]:=3296;
   TreeTile[10]:=3299;
   TreeTile[11]:=3302;

   TreeTile[12]:=3320;
   TreeTile[13]:=3323;
   TreeTile[14]:=3326;
   TreeTile[15]:=3329;

   TreeTile[16]:=3393;
   TreeTile[17]:=3394;
   TreeTile[18]:=3395;
   TreeTile[19]:=3396;

   TreeTile[20]:=3415;
   TreeTile[21]:=3416;
   TreeTile[22]:=3417;
   TreeTile[23]:=3418;

   TreeTile[24]:=3419;
   TreeTile[25]:=3438;
   TreeTile[26]:=3439;
   TreeTile[27]:=3440;

   TreeTile[28]:=3441;
   TreeTile[29]:=3442;
   TreeTile[30]:=3460;
   TreeTile[31]:=3461;

   TreeTile[32]:=3462;
   TreeTile[33]:=3476;
   TreeTile[34]:=3478;
   TreeTile[35]:=3480;

   TreeTile[36]:=3482;
   TreeTile[37]:=3484;
   TreeTile[38]:=3492;
   TreeTile[39]:=3496;
   
   SetArrayLength(ChopTilesArray, 1);
  end;
 
  // Поиск деревьев
procedure SearchTree;
  var
  i, j : Integer;
  iFoundTilesArrayCount : word;
  iTempFoundTilesArrayCount : Integer;
 
  begin
    for i:= 0 to iTTileCount do
      begin
        iFoundTilesArrayCount := GetStaticTilesArray((GetX(Self) - iRadiusSearch), (GetY(Self) - iRadiusSearch), (GetX(Self) + iRadiusSearch), (GetY(Self) + iRadiusSearch), 1, TreeTile[i], FoundTilesArray);
        if iFoundTilesArrayCount > 0 then
          begin
            SetArrayLength(TempFoundTilesArray, Length(TempFoundTilesArray) + iFoundTilesArrayCount);
            for j := 0 to iFoundTilesArrayCount - 1 do
              begin           
                TempFoundTilesArray[iTempFoundTilesArrayCount + j] := FoundTilesArray[j];
              end;
            iTempFoundTilesArrayCount := iTempFoundTilesArrayCount + iFoundTilesArrayCount; 
          end;
      end;
    //AddToSystemJournal('Найдено деревьев: ' + IntToStr(iTempFoundTilesArrayCount));     
  end;

// Чистим записи дубликаты (Vizit0r :P)
procedure ClearDuplicate;
  var
  i, j : Integer; 
  begin
    ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[0];
    for i:=1 to Length(TempFoundTilesArray) - 1 do
      begin
        for j:=0 to Length(ChopTilesArray) - 1 do
          if (ChopTilesArray[j] = TempFoundTilesArray[i]) then
            break;
        if j > Length(ChopTilesArray) - 1 then
          begin
            SetArrayLength(ChopTilesArray, Length(ChopTilesArray) + 1);
            ChopTilesArray[Length(ChopTilesArray) - 1] := TempFoundTilesArray[i]; 
          end;
      end;
      //AddToSystemJournal('После отсеивания дубликатов, осталось деревьев:' + IntToStr(Length(ChopTilesArray))); 
  end;

// Возводим в степень 2 (Shinma)
function sqr(a:LongInt):LongInt;
  begin
    result:=a*a;
  end;

// Вычисляем длину вектора (Shinma)
function vector_length(c_2:TFoundTile):LongInt;
  begin
    result:=Round(sqrt(sqr(GetX(self)-c_2.X)+sqr(GetY(self)-c_2.Y)));
  end;

// «Быстрая сортировка» по длине вектора, от центра последней поляны ко всем собранным координатам деревьев   
procedure QuickSort(A: array of TFoundTile; l,r: integer);
  var
  i, j: Integer;
  x, y: TFoundTile; 
  begin
    i := l;
    j := r;
    x := A[((l + r) div 2)];
    repeat
      while vector_length(A[i]) < vector_length(x) do inc(i);
      while vector_length(x) < vector_length(A[j]) do dec(j);
      if not (i>j) then
        begin
          y:= A[i];
          A[i]:= A[j];
          A[j]:= y;
          inc(i);
          dec(j);
        end;
    until i>j;
    if l < j then QuickSort(ChopTilesArray, l,j);
    if i < r then QuickSort(ChopTilesArray, i,r);
  end;

// Находим, исключаем дубликаты, сортируем деревья
procedure MarkTrees;
   begin
       NewMoveXY(WayPoint[12].x, WayPoint[12].y, true, 1, true);
        SearchTree;
        AddToSystemJournal('Trees found: ' + IntToStr(Length(TempFoundTilesArray)));
        ClearDuplicate;
      QuickSort(ChopTilesArray, 0, Length(ChopTilesArray) - 1);
   end;
 
 procedure WaitAverageLag(Lag : Integer);
   begin
      Wait(Lag);
      //UOSay(IntToStr(Lag));
   end;

function ItemMoved(PreviousWeight : Integer): Boolean;
   begin
      Result := False;
      if Weight <> PreviousWeight then Result := True;
   end;
   
procedure CallBank;
   begin
      WaitAverageLag(AVERAGE_LAG_MS);   
      UOSay('BANK');
      WaitAverageLag(AVERAGE_LAG_MS);
   end;
{INITIATION SECTION END}
{===========================================================================================================================}
{GATHERING SECTION}
function ToolCount(Tool, Container : Cardinal) : Integer;
   begin
      FindType(Tool, Container);
      Result := FindCount;
   end;

procedure LoadTools(Tool : Cardinal);
var tmpId : Cardinal;
   begin
      NewMoveXY(WayPoint[0].x, WayPoint[0].y, true, 0, true);
      WaitAverageLag(AVERAGE_LAG_MS);
      CallBank;
      WaitAverageLag(AVERAGE_LAG_MS);      
      tmpId := FindType($0E75, BANK_ID);
      UseObject(tmpId);
      WaitAverageLag(AVERAGE_LAG_MS);
      if FindType(Tool, tmpId) > 0 then
         begin
            While ToolCount(Tool, backpack) < 5 do
               begin
                  MoveItem(FindType(Tool, tmpId), 1, backpack, 0,0,0);
                  Wait(1500);
               end;
         end;
      AddToSystemJournal('Zagruzil Tool');
   end;
   
procedure EquipTool(Tool : Cardinal);
var
xc, yc : Integer;
   begin
      if not ((GetType(ObjAtLayer(RhandLayer)) = Tool) or (GetType(ObjAtLayer(LhandLayer)) = Tool)) then
         begin
            if ToolCount(Tool, backpack) <= 3 then
               begin
                  xc := GetX(self);
                  yc := GetY(self);
                  WaitAverageLag(AVERAGE_LAG_MS);   
                  LoadTools(Tool);
                  WaitAverageLag(AVERAGE_LAG_MS);   
                  NewMoveXY(xc, yc, true, 0, true);
               end;
            UseObject(FindType(Tool, backpack));
            WaitAverageLag(AVERAGE_LAG_MS*2);                        
         end;
   end;
   
// Рубим дерево (Edred)
function LumbCurTree(tile,x,y,z : Integer) : Boolean;
  // рубим указанный тайл. Возвращаем false если перевес или чар мертв.
  var
  q, m1, m2, m3, m4, m5, m6, m7, m8, CountFizzle, NextTree : integer;
 
  begin
    Result := true;
    CountFizzle := 0;
    repeat
      if WarMode = true then SetWarMode(false);
      if TargetPresent then CancelTarget;
      ctime := Now;
      if Dead then begin Result := false; exit; end;
      EquipTool(Hatchet.TypeOfItem);
      //if IsGump then GumpHandling;
      if not TargetPresent then UseObject(ObjAtLayerEx(LhandLayer,self));         
      WaitForTarget(5000);
      //Guards;
      If TargetPresent then TargetToTile(tile, x, y, z);
      q := 0;
      repeat
        wait(100);
        q := q + 1;         
        //CallGuards;
        m1 := InJournalBetweenTimes(Msg1, ctime, Now);
        m2 := InJournalBetweenTimes(Msg2, ctime, Now);
        m3 := InJournalBetweenTimes(Msg3, ctime, Now);
        m4 := InJournalBetweenTimes(Msg4, ctime, Now);
        m5 := InJournalBetweenTimes(Msg5, ctime, Now);
        m6 := InJournalBetweenTimes(Msg6, ctime, Now);
        m7 := InJournalBetweenTimes(Msg7, ctime, Now);
        m8 := InJournalBetweenTimes(Msg8, ctime, Now); 
      until (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or (m6<>-1) or (m7<>-1) or (m8<>-1) or Dead or (q > 50);
      if (m2<>-1) or (m3<>-1) or (m4<>-1) then CountFizzle := CountFizzle + 1;
      if Dead or (Weight > MY_MAX_WEIGHT) then begin Result := false; exit; end;
      if (q > 200) then NextTree := NextTree + 1;
    until (m5<>-1) OR (m6<>-1) OR (m7<>-1) OR (m8<>-1) OR (CountFizzle = 10) OR (NextTree > 3);
    if NextTree >= 3 then NextTree := 0;
  end;
 
 function MiningAround : Integer ;                 
   // копаем вокруг чара
   // параметр - максимальный вес.
   // возвращаем:
   // 1 - вокруг чара все вскопано успешно
   // 2 - превышен максимальный вес
   // 3 - чар под атакой
   // 4 - нет кирки
   var il, k, r, x, y, xnk, ynk : Integer;
   var xn, yn : Word;
   var mn1, mn2, mn3, mn4, mn5, mn6, mf1, mw1, ms1 : Integer;
   var ctime : TDateTime;
   var TileInfo : TStaticCell;
   //var gi : TGumpInfo;
   begin
      Result := 1;
      //addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight));
      for x := -2 to 2 do
      begin
         for y := -2 to 2 do
         begin
            r := 0;
            repeat               
               if TargetPresent then CancelTarget;
               if WarMode = true then SetWarMode(false);
               ctime := Now; 
            EquipTool(Pickaxe.TypeOfItem);
            while IsGump do
            begin
               CloseSimpleGump(GetGumpsCount-1);
               Wait(100);
            end;
               ///////////////////////////
               if not Dead then
                begin
                  xnk := GetX(self) + x;
                  ynk := GetY(self) + y;
                  xn := xnk;
                  yn := ynk;                                   
                  TileInfo := ReadStaticsXY(xn, yn, 0);
                  for il := 0 to TileInfo.StaticCount - 1 do                 
                    begin
                      //AddToSystemJournal(IntToStr(il)); 
                      if (TileInfo.Statics[il].Tile >= 1339) and (TileInfo.Statics[il].Tile <= 1359) then
                        begin
                          WaitTargetTile(TileInfo.Statics[il].Tile,TileInfo.Statics[il].x,TileInfo.Statics[il].y,TileInfo.Statics[il].z);
                          UseObject(ObjAtLayer(RHandLayer));
                        end;
                    end;
                end;
               ///////////////////////////
               k := 0;
               repeat
                  wait(10);
                  k := k + 1;                   
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now);
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now);
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now);
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now);
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now);
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now);
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now);
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now);
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 200);
                  if InJournalBetweenTimes('heavy', ctime, Now) <> -1 then
                    begin
                      Result := 6
                      exit;
                    end;
                  if Weight > MY_MAX_WEIGHT then
                    begin
                      Result := 2;
                      exit;
                    end;
                  if (mf1<>-1) then
                    begin
                      r := r + 1;
                      if r >= 10 then break
                      else continue;
                    end;
               if (mw1<>-1) then wait(2000);
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1);
         end;
      end;
   end;
   
procedure Unload;
var k : Integer;
   begin      
      while FindTypeEx(Raw_Ore_Type, $0000, backpack, false) > 0 do
         begin
            NewMoveXY(WayPoint[1].x, WayPoint[1].y, true, 0, true);
            WaitAverageLag(AVERAGE_LAG_MS);   
            UseObject(FindItem);
            WaitAverageLag(AVERAGE_LAG_MS);   
         end;
      while FindType(Raw_Ore_Type, backpack) > 0 do
         begin
            NewMoveXY(WayPoint[0].x, WayPoint[0].y, true, 0, true);
            CallBank;
            WaitAverageLag(AVERAGE_LAG_MS*2);   
            for k := 0 to 5 do
               begin
                  UseObject(FindType($097B, BANK_ID));
                  WaitAverageLag(AVERAGE_LAG_MS);   
               end;
            MoveItems(backpack, Raw_Ore_Type, $FFFF, BANK_ID, 0,0,0, 1200);
         end;
      while FindType(Ingot_Type, backpack) > 0 do
         begin
            NewMoveXY(WayPoint[0].x, WayPoint[0].y, true, 0, true);
            CallBank;         
            MoveItems(backpack, Ingot_Type, $FFFF, BANK_ID, 0,0,0, 1200);
         end;
      while FindType(Logs, backpack) > 0 do
         begin
            NewMoveXY(WayPoint[0].x, WayPoint[0].y, true, 0, true);
            CallBank;
            MoveItems(backpack, Logs, $FFFF, BANK_ID, 0,0,0, 1200);
         end;      
   end;
   
procedure GetLogs;
   begin
      for i := 0 to Length(ChopTilesArray) - 1 do
         begin       
            NewMoveXY(ChopTilesArray[i].x, ChopTilesArray[i].y, true, 1, true);
            if not LumbCurTree(ChopTilesArray[i].tile, ChopTilesArray[i].x, ChopTilesArray[i].y, ChopTilesArray[i].z)
               or (GetQuantity(FindType(Logs, backpack)) > 80) then
               begin
                  Unload;
                  break;
               end;
         end;
   end;
{GATHERING SECTION END}   
{===========================================================================================================================}
{CRAFTING SECTION}   
procedure CraftTool(Tool : Cardinal; CategoryBtn, ItemBtn : Integer);
var
   gi : TGumpInfo;
      begin
         while IsGump do   CloseSimpleGump(GetGumpsCount-1);
         WaitAverageLag(AVERAGE_LAG_MS);   
         Useobject(FindType(Tool, backpack));
         WaitAverageLag(AVERAGE_LAG_MS*2);   
         GetGumpInfo(GetGumpsCount-1, gi);
         WaitAverageLag(AVERAGE_LAG_MS);   
         NumGumpButton(GetGumpsCount-1, gi.GumpButtons[CategoryBtn].return_value);
         WaitAverageLag(AVERAGE_LAG_MS*2);          
         NumGumpButton(GetGumpsCount-1, gi.GumpButtons[ItemBtn].return_value);
         WaitAverageLag(AVERAGE_LAG_MS*3);   
      end;

procedure LoadCraftResources;
   begin
      while GetQuantity(FindType(Logs, backpack)) < 100 do
         begin
            CallBank;
            if GetQuantity(FindItem) > 100 then break;
            MoveItem(FindType(Logs, BANK_ID), 25, backpack, 0,0,0);
            WaitAverageLag(AVERAGE_LAG_MS);
         end;
      while GetQuantity(FindType(Ingot_Type, backpack)) < 100 do
         begin
            CallBank;
            if GetQuantity(FindItem) > 100 then break;   
            MoveItem(FindType(Ingot_Type, BANK_ID), 25, backpack, 0,0,0);
            WaitAverageLag(AVERAGE_LAG_MS);
         end;
   end;
   
function Count(Tool, Container : Cardinal) : Integer;
var
tmpInt : Integer;
   begin
      FindType(Tool, Container);
      tmpInt := FindCount;
      FindType(Tool, Backpack);
      Result := tmpInt + FindCount;
   end;
   
procedure ToolsCheck;
var
tmpContainer : Cardinal;
PreviousWeight : Integer;
   begin
      NewMoveXY(WayPoint[0].x, WayPoint[0].y, true, 0, true);
      WaitAverageLag(AVERAGE_LAG_MS);
      CallBank;      
      tmpContainer := FindType($0E75, BANK_ID);
      UseObject(tmpContainer);
      WaitAverageLag(AVERAGE_LAG_MS);
      while GetQuantity(FindType(Logs, BANK_ID)) < 500 do GetLogs;         
      //UOSay(IntToStr(Count(Dig_Tool_Type, tmpContainer)));
      while Count(Pickaxe.TypeOfItem, tmpContainer) < 25 do
         begin
            LoadCraftResources;
            if FindType(Tinker_Tools.TypeOfItem, backpack) <= 0 then MoveItem(FindType(Tinker_Tools.TypeOfItem, tmpContainer), 1, backpack, 0,0,0);            
            CraftTool(Tinker_Tools.TypeOfItem, Pickaxe.CategoryBtn, Pickaxe.ItemBtn);
            WaitAverageLag(AVERAGE_LAG_MS*2);
         end;
      while Count(Hatchet.TypeOfItem, tmpContainer) < 15 do
         begin
            LoadCraftResources;
            if FindType(Carpentry_Tools.TypeOfItem, backpack) <= 0 then MoveItem(FindType(Carpentry_Tools.TypeOfItem, tmpContainer), 1, backpack, 0,0,0);
            CraftTool(Carpentry_Tools.TypeOfItem, Hatchet.CategoryBtn, Hatchet.ItemBtn);
            WaitAverageLag(AVERAGE_LAG_MS*2);
         end;
      while Count(Tinker_Tools.TypeOfItem, tmpContainer) < 8 do
         begin
            LoadCraftResources;
            if FindType(Tinker_Tools.TypeOfItem, backpack) <= 0 then MoveItem(FindType(Tinker_Tools.TypeOfItem, tmpContainer), 1, backpack, 0,0,0);
            CraftTool(Tinker_Tools.TypeOfItem, Tinker_Tools.CategoryBtn, Tinker_Tools.ItemBtn);
            WaitAverageLag(AVERAGE_LAG_MS*2);
         end;
      while Count(Carpentry_Tools.TypeOfItem, tmpContainer) < 8 do
         begin
            LoadCraftResources;
            if FindType(Tinker_Tools.TypeOfItem, backpack) <= 0 then MoveItem(FindType(Tinker_Tools.TypeOfItem, tmpContainer), 1, backpack, 0,0,0);
            CraftTool(Tinker_Tools.TypeOfItem, Carpentry_Tools.CategoryBtn, Carpentry_Tools.ItemBtn);
            WaitAverageLag(AVERAGE_LAG_MS*2);
         end;
      Unload;
      while FindType($FFFF, backpack) > 0 do
         begin
            PreviousWeight := Weight;
            MoveItem(FindItem, 0, tmpContainer, 0,0,0);
            WaitAverageLag(AVERAGE_LAG_MS);
            if not ItemMoved(PreviousWeight) then CallBank;
         end;
   end;
{CRAFTING SECTION END}
{===========================================================================================================================}
{WAITING SECTION}   
function getSkill(Skill : Integer) : String;
   begin
      if Skill = 0 then Result := 'Hiding';
      if Skill = 1 then Result := 'Detecting Hidden';
      if Skill = 2 then Result := 'Spirit Speak';
   end;
            
procedure WaitForResp;
var randomSkill : String;
var k, kn : Integer;
   begin
      Unload;
      WaitAverageLag(AVERAGE_LAG_MS);
      randomSkill := getSkill(Random(3));
      k := 0;
      kn := RESP_WAITING_TIME_MINS*10;
      repeat
         UseSkill(randomSkill);
         WaitAverageLag(AVERAGE_LAG_MS*4);
         k := k + 1;
      until (k > kn) or Dead;
   end;
{WAITING SECTION END}
{===========================================================================================================================}
{MAIN LOOP}   
begin
   InitBotSystem;
   InitTools;
   InitTTilesArray;      
   InitWaypoints;
   //CallBank;
   MarkTrees;   
   while not Dead do
      begin         
         for i := Start_Mine to End_Mine do
            begin
               ToolsCheck;
               NewMoveXY(WayPoint[i].x, WayPoint[i].y, true, 0, true);
               repeat
                  minret := MiningAround;
                  if minret = 2 then Unload;                     
               until (minret = 2) or (minret = 1);
            end;
         WaitForResp;
      end;
end.
{MAIN LOOP END}



Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 09.06.2013 10:34 
Не в сети Expert
Expert

Зарегистрирован: 13.12.2012 17:35
Сообщения: 710
Vizit0r писал(а):
принимаю заявки на переписывание нескольких больших и сложных скриптов в новом формате на Delphi\c#, для демонстрации. Задача - чтобы использовалось как можно больше скриптовых возможностей. туда же прицеплю GUI и всякое такое.


Крафт скроллов с GUI.
Код:
Program CraftScrollov;

const
RegChest = $4057AA11;
LoadRegAmount = 750;

type TReagentInfo = Record
   Name : String;
   TypeOfReagent : Cardinal;
   end;
 
type TItemInfo = Record
  Name : String;
  Tool, Container, TypeOfItem : Cardinal;
  CountOfReagent, QuantityOfReg, CraftGump, CategoryBtn, ItemBtn, SmeltBtn : Integer;
  Reg : array[0..9] of TReagentInfo;
  end;
 
var
Item : TItemInfo;
Food : array[0..4] of Cardinal;

CraftForm : TSTForm;
CraftButton : TSTButton;
CraftItemTField : TSTEdit;
CraftItemQuantityTField : TSTEdit;
CraftQuantityLabel : TSTLabel;
CraftItemNameLabel : TSTLabel;
CraftChoicesLabel : TSTLabel;
CraftChoiceDescriptionLabel : TSTLabel;
CounterLabel : TSTLabel;
HowManyLeftToDoLabel : TSTLabel;
RegLabel : array[0..9] of TSTLabel;
RegLabelChest : array[0..9] of TSTLabel;
CurrentSkillLevelLabel : TSTLabel;
StatisticsLabel : TSTLabel;
StatisticsLabelChest : TSTLabel;
UsesLeftLabel : TSTLabel;
TriesMade : TSTLabel;


procedure initFood;
   begin
      Food[0] := $09B7;
      Food[1] := $1608;
      Food[2] := $09D0;
      Food[3] := $160A;
      Food[4] := $097B;   
   end;

procedure GetTItemInfo(Choice : String);
  begin   
   if (Choice = 'recall') then
      begin
        Item.Name := 'Recall cкролл';
        Item.Tool := $0FBF;
      Item.CountOfReagent := 4;
        Item.Container := $0E76;
        Item.TypeOfItem := $1F4C;
        Item.QuantityOfReg := 1;
        Item.CraftGump := 1044009;
        Item.CategoryBtn := 6;
        Item.ItemBtn := 30;       
        Item.Reg[0].TypeOfReagent := BM;
      Item.Reg[0].Name := 'Blood Moss';
      Item.Reg[1].TypeOfReagent := MR;
      Item.Reg[1].Name := 'Mandrake Roots';
      Item.Reg[2].TypeOfReagent := BP;
      Item.Reg[2].Name := 'Black Pearls';
      Item.Reg[3].TypeOfReagent := $0EF3;
      Item.Reg[3].Name := 'Blank scroll';
     end;
   if (Choice = 'gh') then
      begin
        Item.Name := 'GH cкролл';
        Item.Tool := $0FBF;
        Item.Container := $0E76;
        Item.TypeOfItem := $1F49;
        Item.QuantityOfReg := 1;
      Item.CountOfReagent := 5;
        Item.CraftGump := 1044009;
        Item.CategoryBtn := 6;
        Item.ItemBtn := 22;       
        Item.Reg[0].TypeOfReagent := SS;
      Item.Reg[0].Name := 'Spider`s Silk';
      Item.Reg[1].TypeOfReagent := MR;
      Item.Reg[1].Name := 'Mandrake Roots';
      Item.Reg[2].TypeOfReagent := GS;
      Item.Reg[2].Name := 'Ginsening';
      Item.Reg[3].TypeOfReagent := $0EF3;
      Item.Reg[3].Name := 'Blank scroll';
      Item.Reg[4].TypeOfReagent := GA;
      Item.Reg[4].Name := 'Garlic';
      end;
   if (Choice = 'reflect') then
      begin
        Item.Name := 'Reflect cкролл';
        Item.Tool := $0FBF;
      Item.CountOfReagent := 4;
        Item.Container := $0E76;
        Item.TypeOfItem := $1F50;
        Item.QuantityOfReg := 1;
        Item.CraftGump := 1044009;
        Item.CategoryBtn := 7;
        Item.ItemBtn := 20;       
        Item.Reg[0].TypeOfReagent := GA;
      Item.Reg[0].Name := 'Garlic';
      Item.Reg[1].TypeOfReagent := MR;
      Item.Reg[1].Name := 'Mandrake Roots';
      Item.Reg[2].TypeOfReagent := SS;
      Item.Reg[2].Name := 'Spider`s Silk';
      Item.Reg[3].TypeOfReagent := $0EF3;
      Item.Reg[3].Name := 'Blank scroll';
     end;
   if (Choice = 'paralyze') then
      begin
        Item.Name := 'Paralyze cкролл';
        Item.Tool := $0FBF;
      Item.CountOfReagent := 4;
        Item.Container := $0E76;
        Item.TypeOfItem := $1F52;
        Item.QuantityOfReg := 1;
        Item.CraftGump := 1044009;
        Item.CategoryBtn := 7;
        Item.ItemBtn := 24;       
        Item.Reg[0].TypeOfReagent := GA;
      Item.Reg[0].Name := 'Garlic';
      Item.Reg[1].TypeOfReagent := MR;
      Item.Reg[1].Name := 'Mandrake Roots';
      Item.Reg[2].TypeOfReagent := SS;
      Item.Reg[2].Name := 'Spider`s Silk';
      Item.Reg[3].TypeOfReagent := $0EF3;
      Item.Reg[3].Name := 'Blank scroll';
     end;
   if (Choice = 'efield') then
      begin
        Item.Name := 'EF cкролл';
        Item.Tool := $0FBF;
        Item.Container := $0E76;
        Item.TypeOfItem := $1F5E;
        Item.QuantityOfReg := 1;
      Item.CountOfReagent := 5;
        Item.CraftGump := 1044009;
        Item.CategoryBtn := 9;
        Item.ItemBtn := 14;       
        Item.Reg[0].TypeOfReagent := SS;
      Item.Reg[0].Name := 'Spider`s Silk';
      Item.Reg[1].TypeOfReagent := MR;
      Item.Reg[1].Name := 'Mandrake Roots';
      Item.Reg[2].TypeOfReagent := BP;
      Item.Reg[2].Name := 'Black Pearls';
      Item.Reg[3].TypeOfReagent := $0EF3;
      Item.Reg[3].Name := 'Blank scroll';
      Item.Reg[4].TypeOfReagent := SA;
      Item.Reg[4].Name := 'Sulfurous Ash';
      end;
end;
   
procedure GumpCheckAndSolve;
var
gi :TGumpInfo;
  begin   
    if IsGump then
      begin   
        GetGumpInfo(GetGumpsCount-1, gi); 
        if not (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
          begin
            while IsGump do
              begin
                CloseSimpleGump(GetGumpsCount-1);
              end;
            if (FindType(Item.Tool, backpack) > 0) then UseObject(FindItem);
            Wait(1500);     
          end;
      end;
    if not IsGump then
      begin
         if (FindType(Item.Tool, backpack) > 0) then UseObject(FindItem);
         Wait(1000);                 
      end;
  end;
 
procedure CraftOneItem;
var
gi : TGumpInfo;
  begin
    GumpCheckAndSolve;       
    GetGumpInfo(GetGumpsCount-1, gi); 
    if (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
      begin
        NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.CategoryBtn].return_value);
        Wait(1500);       
        NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.ItemBtn].return_value);       
      end;
  end;
 
procedure SmeltItem;
var
gi : TGumpInfo;
  begin
    GumpCheckAndSolve;   
    GetGumpInfo(GetGumpsCount-1, gi); 
    if (gi.XmfHTMLGumpColor[0].Cliloc_id = Item.CraftGump) then
      begin
        NumGumpButton(GetGumpsCount-1, gi.GumpButtons[Item.SmeltBtn].return_value);
        WaitForTarget(5000);
        if TargetPresent then TargetToObject(FindType(Item.TypeOfItem, backpack));
        Wait(1500);               
      end;
  end;
 
procedure LoadUnload;
var
tmpInt : Integer;
   begin
      GetTItemInfo(CraftItemTField.Text);
      UseObject(RegChest);
      Wait(1500);
      for tmpInt := 0 to (Item.CountOfReagent - 1) do
         begin            
            if GetQuantity(FindType(Item.Reg[tmpInt].TypeOfReagent, backpack)) < Item.QuantityOfReg then
               begin
                  MoveItem(FindType(Item.Reg[tmpInt].TypeOfReagent, RegChest), (LoadRegAmount - GetQuantity(FindType(Item.Reg[tmpInt].TypeOfReagent, backpack))), backpack, 0,0,0);
                  Wait(1500);
               end;
         end;
      if FindType(Item.TypeOfItem, backpack) > 0 then
         begin
            MoveItem(FindItem, 0, RegChest, 0,0,0);
            Wait(1500);
         end;
   end;
procedure Obed;
var
im : Integer;
  begin
    for im := 0 to 4 do
      begin
        if (FindType(Food[im], backpack) > 0) then
          begin
            UseObject(FindItem);
            Wait(1500);
         exit;
          end;
      end;
  end;
 
function UsesLeft : Integer;
var
aa : TClilocRec;
  begin   
    aa := GetToolTipRec(FindType(Item.Tool, backpack));
    Result := (StrToInt(aa.Items[1].Params[0]));       
  end;
 
 function Counter : Integer;
   begin
      GetTItemInfo(CraftItemTField.Text);
      Result := GetQuantity(FindType(Item.TypeOfItem, backpack));
   end;

procedure B_Click(Sender : TObject);
var
tmpInt1, tmpInt2, tmpInt3, k, im : Integer;
ctime : TDateTime;
   begin
      GetTItemInfo(CraftItemTField.Text);
      Wait(1000);
      UOSay(Item.Name);
      im := 0;
      While FindType(Item.TypeOfItem, backpack) > 0 do
         begin
            MoveItem(FindItem, 0, RegChest, 0,0,0);
            Wait(1500);
         end;      
      while ((Counter + (GetQuantity(FindType(Item.TypeOfItem, RegChest)))) < StrToInt(CraftItemQuantityTField.Text)) do
         begin                        
            for tmpInt1 := 0 to (Item.CountOfReagent - 1) do
               begin
                  if (GetQuantity(FindType(Item.Reg[tmpInt1].TypeOfReagent, backpack)) <= Item.QuantityOfReg) then LoadUnload;
               end;
            if Mana < 20 then
               begin
                  ctime := Now;
                  while not (InJournalBetweenTimes('You enter', ctime, Now) <> -1) do
                     begin
                        UseSkill('Meditation');
                        Wait(2500);
                     end;
                  repeat
                     Wait(1500);
                  until (Mana > 90);
               end;            
            Obed;
            im := im + 1;
            TriesMade.Caption := 'Tries Made: ' + IntToStr(im);
            CraftOneItem;
            k := 0;
            repeat
               k := k + 1;
               Wait(300);
            until IsGump or Dead or (k > 15);
            HowManyLeftToDoLabel.Caption := 'Left to do: ' + IntToStr(((StrToInt(CraftItemQuantityTField.Text))) - (Counter + (GetQuantity(FindType(Item.TypeOfItem, RegChest)))));
            for tmpInt2 := 0 to (Item.CountOfReagent - 1) do
               begin
                  RegLabel[tmpInt2].Caption := Item.Reg[tmpInt2].Name + ': ' + IntToStr(GetQuantity(FindType(Item.Reg[tmpInt2].TypeOfReagent, backpack)));
               end;
            CurrentSkillLevelLabel.Caption := 'Current Skill Level: ' + FloatToStrF(GetSkillValue('Inscription'),ffFixed,12,1);
            CounterLabel.Caption := 'Total Items: ' + IntToStr(Counter + (GetQuantity(FindType(Item.TypeOfItem, RegChest))));
            for tmpInt3 := 0 to (Item.CountOfReagent - 1) do
               begin
                  RegLabelChest[tmpInt3].Caption := Item.Reg[tmpInt3].Name + ': ' + IntToStr(GetQuantity(FindType(Item.Reg[tmpInt3].TypeOfReagent, RegChest)));
               end;                  
            //UsesLeftLabel.Caption := 'Uses of tool left: ' + IntToStr(UsesLeft);
         end;
      Beep;
      AddToSystemJournal('Done!');
   end;
   
procedure FormClose(Sender: TObject; var Action : TCloseAction);   
    begin
       Action := caFree;
       raiseException(erCustomError, 'for example, script stop after form');
    end;
   
procedure init;
var i, k, im, ik : Integer;
   begin      
      CraftForm := TSTForm.Create;
      CraftForm.OnClose := @FormClose;
      CraftForm.Width := 380;       
      CraftForm.Height := 320;   
      CraftForm.Caption := 'Craft by Drabadanchik';
      CraftForm.Visible := True;
      
      CraftButton := TSTButton.Create(CraftForm);
      CraftButton.OnClick := @B_Click;
      CraftButton.Caption := 'Скрафтить!';
      CraftButton.Top := 55;
      
      CraftItemTField := TSTEdit.Create(CraftForm);
      CraftItemQuantityTField := TSTEdit.Create(CraftForm);
      CraftItemQuantityTField.Top := 30;
      
      CraftItemNameLabel := TSTLabel.Create(CraftForm);
      CraftItemNameLabel.Left := 125;
      CraftItemNameLabel.Caption := '<-- Напиши название итема!';      
      CraftQuantityLabel := TSTLabel.Create(CraftForm);
      CraftQuantityLabel.Left := 125;
      CraftQuantityLabel.Top := 30;
      CraftQuantityLabel.Caption := '<-- Напиши сколько хочешь скрафтить!';
      CraftChoiceDescriptionLabel := TSTLabel.Create(CraftForm);
      CraftChoiceDescriptionLabel.Top := 65;
      CraftChoiceDescriptionLabel.Left := 95;
      CraftChoiceDescriptionLabel.Caption := 'Варианты крафта: reflect, recall, paralyze, efield, gh.';
      CraftChoicesLabel := TSTLabel.Create(CraftForm);
      CraftChoicesLabel.Top := 95;
      CraftChoicesLabel.Left := 55;
      CraftChoicesLabel.Caption := 'CURRENT STATISTICS:';
      CounterLabel := TSTLabel.Create(CraftForm);
      CounterLabel.Top := 115;
      CounterLabel.Left := 10;      
      HowManyLeftToDoLabel := TSTLabel.Create(CraftForm);
      HowManyLeftToDoLabel.Top := 135;
      HowManyLeftToDoLabel.Left := 10;      
      for i := 0 to 9 do
         begin
            k := k + 20;
            RegLabel[i] := TSTLabel.Create(CraftForm);
            RegLabel[i].Top := k + 165;
            RegLabel[i].Left := 10;            
         end;
      CurrentSkillLevelLabel := TSTLabel.Create(CraftForm);
      CurrentSkillLevelLabel.Top := 135;
      CurrentSkillLevelLabel.Left := 145;
      StatisticsLabel := TSTLabel.Create(CraftForm);
      StatisticsLabel.Top := 165;
      StatisticsLabel.Left := 10;
      StatisticsLabel.Caption := 'Reagents in Backpack:';      
      for im := 0 to 9 do
         begin
            ik := ik + 20;
            RegLabelChest[im] := TSTLabel.Create(CraftForm);
            RegLabelChest[im].Top := ik + 165;
            RegLabelChest[im].Left := 145;
         end;
      StatisticsLabelChest := TSTLabel.Create(CraftForm);
      StatisticsLabelChest.Top := 165;
      StatisticsLabelChest.Left := 145;
      StatisticsLabelChest.Caption := 'Reagetns in Chest: ';
      UsesLeftLabel := TSTLabel.Create(CraftForm);
      UsesLeftLabel.Top := 115;
      UsesLeftLabel.Left := 145;
      TriesMade := TSTLabel.Create(CraftForm);
      TriesMade.Top := 115;
      TriesMade.Left := 145;
   end;
   

   
begin
   initFood;
   init;   
   while True do Wait(1000);      
end.
   
      
      
      


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 09.06.2013 12:30 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
слабенький какой-то инскрипт, всего на пару скроллов.
Впрочем, пойдет.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 09.06.2013 14:31 
Не в сети Expert
Expert

Зарегистрирован: 13.12.2012 17:35
Сообщения: 710
Vizit0r писал(а):
слабенький какой-то инскрипт, всего на пару скроллов.
Впрочем, пойдет.

Заготовка же =).


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 24.06.2013 20:44 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
тестеры внешних скриптов и стелса в целом - со вторника можете писать в асю, буду беты давать на тесты.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 11.07.2013 6:09 
Не в сети Neophyte
Neophyte

Зарегистрирован: 11.07.2013 6:04
Сообщения: 13
А где хотя бы пятый взять? Тут уже бета 6го тестируется, а 5ого нет нигде...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 11.07.2013 8:16 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
5й получился несколько неудачный, поэтому перешли на 6й сразу :)

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 11.07.2013 20:48 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
По поводу тестов - к CFA, я уезжаю на пару месяцев. будет интернет, или нет - узнаю по месту.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Stealth 6
СообщениеДобавлено: 10.09.2013 6:14 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3774
ввиду большого количества практически неисправимых багов - скриптовый движок откатывается обратно на PascalScript. Жаль только кучу потраченного времени на Pax.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Тюнинг и аксессуары. Тюнинг внедорожников: магазин 4х4 в Одессе. Интернет магазин "AMAX".
Также, на правах рекламы: школьный сайт: school-work.net и еще один: https://www.youtube.com/channel/UCFSPHKHjP22tEl8Rjcst9Fw.


Рейтинг@Mail.ru
Powered by phpBB® Forum Software © phpBB Group