Page 1 of 1

Помощь в написании скрипта на резист!

Posted: 16.06.2014 14:16
by Anonimous
Тема конечно не новая для прокачки резиста, НО!
После прокачки инскрипта очень много скроллов, ну к примеру, стенки огня.

Так вот хотелось бы сделать скрипт чтобы находясь в "X,Y" координатах брал с пола свиток стенки огня.
Кастовал в тайл перед собой и бегая по стенке хелился, если HP меньше "ХХ" убегал в начальную координату отхеливался.
Проверял перед собой тайл на наличие графики стенки огня, в случая отсутствия, кастовал её и снова начинал бегать по стенке хелясь.
Пытался перелопатить скрипт на авто лумбер под это дело, но так как я в скриптовании почти бум-бум, пока не выходит :(
Автопоиск координат со стенкой в них мне не нужен, мне не сложно самому эти координаты прописать под определённую местность.
Не могу победить проверку на наличие кастованной стенки в определённых координатах.
Остальное я всё сделал.
За ранее спасибо!

Re: Помощь в написании скрипта на резист!

Posted: 16.06.2014 14:49
by nah nah
стенка есть объект, искать надо по типу на земле
наверное...

Edit:
не наверное, а точно

в помощь

Code: Select all

FindTypeEx(ObjType : Word; Color : Word; Container : Cardinal; InSub : Boolean) : Cardinal;
GetFindedList : TArray<Cardinal>;
Находим все стенки
Находим два крайних тайла
И ходим по ним ходилкой с коллбэком на каждом шагу

Re: Помощь в написании скрипта на резист!

Posted: 16.06.2014 19:32
by Anonimous
nah nah wrote:стенка есть объект, искать надо по типу на земле
наверное...

Edit:
не наверное, а точно

в помощь

Code: Select all

FindTypeEx(ObjType : Word; Color : Word; Container : Cardinal; InSub : Boolean) : Cardinal;
GetFindedList : TArray<Cardinal>;
Находим все стенки
Находим два крайних тайла
И ходим по ним ходилкой с коллбэком на каждом шагу
Мне всё-таки кажется проще искать по тайлу, потому как тайл стенки отличается от любого другого тайла на том-же месте! И не вижу смысла применять FindTypeEx, т.к. объект не имеет цвета(понимаю что цвет можно и указать нулевой), но не пойму "Container" для чего, "InSub" для меня вообще ново :(
Я же ведь писал что я бум-бум, могу только подправлять, но подправлять что-то для меня понятное, а то что указали Вы, для меня к сожалению не совсем понятно, даже если разглядывать faq и доступные команды и их интерпретацию.
Паскаль я учил в начале 90-х и после практики не было, так же не было пинка чтобы хоть как-то практиковаться для того чтобы дальше развится в этом направлении, но сейчас, помня что такое было когда-то решил себя попрактиковать и углядеть чего могу добиться(не без помощи конечно, на книги просто тупо нету времени), так сказать для развития кругозора, да и просто интересно!

Re: Помощь в написании скрипта на резист!

Posted: 16.06.2014 21:50
by nah nah
Anonimous wrote: Мне всё-таки кажется проще искать по тайлу, потому как тайл стенки отличается от любого другого тайла на том-же месте! И не вижу смысла применять FindTypeEx, т.к. объект не имеет цвета(понимаю что цвет можно и указать нулевой), но не пойму "Container" для чего, "InSub" для меня вообще ново :(
Я же ведь писал что я бум-бум, могу только подправлять, но подправлять что-то для меня понятное, а то что указали Вы, для меня к сожалению не совсем понятно, даже если разглядывать faq и доступные команды и их интерпретацию.
Паскаль я учил в начале 90-х и после практики не было, так же не было пинка чтобы хоть как-то практиковаться для того чтобы дальше развится в этом направлении, но сейчас, помня что такое было когда-то решил себя попрактиковать и углядеть чего могу добиться(не без помощи конечно, на книги просто тупо нету времени), так сказать для развития кругозора, да и просто интересно!
По тайлам инужно искать статику, стенка - объект, и искать её нужно как объект. FindTypeEx не нужен, мой косяк. Container - это где искать, в Вашем случае - Ground, InSub - поиск во вложенных контейнерах.

самое простое

Code: Select all

if FindType(тип_стенки, Ground) <> 0 then
    стенка есть;
else
    стенки нет;
У стенки может быть 2 типа - север-юг, запад-восток

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 5:39
by Anonimous
Я надеюсь направление не будет играть большой роли, а остальное будем пробовать! Проверил в моём случае нужен только один тип, так что дело сдвинулось с места!
В любом случае спасибо!

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 17:05
by Anonimous
Не могу понять почему мне стелс выдаёт такое :( :
19:30:11:134 [ХХХ]: MoveXYZ: Location reached!
19:30:12:252 [ХХХ]: MoveXYZ: Location reached!
19:30:13:361 [ХХХ]: MoveXYZ: Location reached!
19:30:14:431 [ХХХ]: MoveXYZ: Location reached!
19:30:15:549 [ХХХ]: MoveXYZ: Location reached!
19:30:15:818 [ХХХ]: MoveXYZ: Location reached!
19:30:16:890 [ХХХ]: MoveXYZ: Location reached!
19:30:20:075 [ХХХ]: MoveXYZ: Location reached!
19:30:21:076 [ХХХ]: MoveXYZ: Too big distance for pathfinding: 629
Кто поможет?

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 17:41
by nah nah
слишком далеко для поиска пути, есть ограничение на 300 (кажется) тайлов. Если не планировалось пройти 629 тайлов, то кусок кода в студию

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 17:50
by Anonimous

Code: Select all

Begin
  if not connected then connect;
  waitconnection(3000);
  SetArStatus(true);
  InitSystem;
  Home;

  if Dead then
  begin
    SetARStatus(false);
    Disconnect;
    exit;
  end;

  while (not dead) do
  begin
    if (GetX(self) = xTileHome) and (GetY(self) = yTileHome) and not dead then
    repeat
      NewMoveXY(x_Tile, y_Tile,false,0,true);
      UOSay('.bs');
      wait(1000);
      NewMoveXY(x_Tile1,y_Tile1,false,0,true);
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile2,y_Tile2,false,0,true);
      //UOSay('.bs');
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile3,y_Tile3,false,0,true);
      UOSay('.bs')
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile4,y_Tile4,false,0,true);
      //UOSay('.bs')
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile5,y_Tile5,false,0,true);
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile6,y_Tile6,false,0,true);
      UOSay('.bs');
      if HP < 40 then
      Check;
      NewMoveXY(x_Tile7,y_Tile7,false,0,true);
      if HP < 40 then
      Check;
      wait(1000);
      NewMoveXY(x_Tile8,y_Tile8,false,0,true);
      //UOSay('.bs')
      if HP < 40 then
      Check;
      wait(1000);
    until HP < 36;
    Check;
  end;
End.
Я так понимаю собака порылась в этом куске, НО!
вот здесь тоже матерится когда идёт на стартовую точку

Code: Select all

procedure Home;
begin
  if not connected then connect;
  waitconnection(3000);
  checksave;
  if dead then
  begin
    SetARStatus(false);
    Disconnect;
    exit;
  end;
  repeat
    NewMoveXY(xTileHome, yTileHome, false, 0, true);
    wait(200);
  until (GetX(self) = xTileHome) and (GetY(self) = yTileHome)
  if not Dead then
  begin
    Charge;
  end
  else
  begin
    AddToSystemJournal('Персонаж мертв.');
    SetARStatus(False);
    Disconnect;
    Exit;
  end;
  Cast;

end;
Я думаю меньше было бы проблем если через массив координат, но с массивами у меня совсем никак :(

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 18:19
by nah nah
tile7 и tile8 далеко друг от друга?

В массивах с координатами удобно использовать структуры (record в паскале)

Code: Select all

var
    i : integer;
    points : array[0..8] of record
        x, y : integer;
    end;

begin
    points[0].x := 1234;
    points[0].y := 4311;
    points[1].x := 2143;
    points[1].y := 3412;
    //...

    for i := 0 to 8 do begin
        NewMoveXY(points[i].x, points[i].y, false, 0, true);
        Wait(100);
        check_hp;
    end;
end.

Re: Помощь в написании скрипта на резист!

Posted: 17.06.2014 18:30
by Anonimous
nah nah wrote:tile7 и tile8 далеко друг от друга?

В массивах с координатами удобно использовать структуры (record в паскале)

Code: Select all

var
    i : integer;
    points : array[0..8] of record
        x, y : integer;
    end;

begin
    points[0].x := 1234;
    points[0].y := 4311;
    points[1].x := 2143;
    points[1].y := 3412;
    //...

    for i := 0 to 8 do begin
        NewMoveXY(points[i].x, points[i].y, false, 0, true);
        Wait(100);
        check_hp;
    end;
end.
Tile7 и Tile8 соседние тайлы.
Попробую сделать массив.