Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Указание цели через таргет

Only working scripts
Post Reply
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Указание цели через таргет

Post by nepopus »

Немного подумав, пришла в голову интересная мысль. Надеюсь знающие люди оценят : )
Внизу более новая версия! Старую оставил для ознакомления с направлением движения мысли : )

Code: Select all

program taketarget;

var
  t1, t2: cardinal;

procedure taketarget;

  var
    cTime: tdatetime;

  begin
    // Отменяем старый таргет.
    if targetpresent then
      canceltarget
    else
      cancelwaittarget;

    // Выходим из батл стойки.
    if warmode then
      setwarmode(false);

    // Используем скилл для получения таргета.
    uosay('Укажите бегемота.');
    useskill('Remove Trap');
    
    // Ждем появления таргета.
    if NOT waitfortarget(15000) then begin
      addtosystemjournal('Превышен лимит ожидания появления цели. Повторите попытку.');
      exit;
    end;

    // Ждем указания цели.
    cTime := now;
    while targetpresent do begin
      wait(300);
      if cTime+(1.0/(24*60*4)) <= now then begin
        canceltarget;
        addtosystemjournal('Превышен лимит ожидания указания цели. Повторите попытку.');
        exit;
      end;
    end;

    // Присваиваем переменной ID цели.
    t1 := lasttarget;

    // Используем скилл для получения таргета.
    uosay('Укажите ягненка.');
    useskill('Remove Trap');
    
    // Ждем появления таргета.
    if NOT waitfortarget(15000) then begin
      addtosystemjournal('Превышен лимит ожидания появления цели. Повторите попытку.');
      exit;
    end;

    // Ждем указания цели.
    cTime := now;
    while targetpresent do begin
      wait(300);
      if cTime+(1.0/(24*60*4)) <= now then begin
        canceltarget;
        addtosystemjournal('Превышен лимит ожидания указания цели. Повторите попытку.');
        exit;
      end;
    end;

    // Присваиваем переменной ID цели.
    t2 := lasttarget;
  end;

begin
  taketarget;

  // Крутим и вертим цель как хотим.
  clickonobject(t1);
  checklag(15000);
  wait(100);
  addtosystemjournal(getname(t1));

  clickonobject(t2);
  checklag(15000);
  wait(100);
  addtosystemjournal(getname(t2));
end.
Как это обычно бывает, сразу придумал новую версию:

Code: Select all

program taketarget;

var
  t1, t2: cardinal;

function taketarget(s: string; var t: cardinal): boolean;

  var
    cTime: tdatetime;

  begin
    // Отменяем старый таргет.
    if targetpresent then
      canceltarget
    else
      cancelwaittarget;

    // Выходим из батл стойки.
    if warmode then
      setwarmode(false);

    // Используем скилл для получения таргета.
    clientprint(s);
    useskill('Remove Trap');
    
    // Ждем появления таргета.
    if NOT waitfortarget(15000) then begin
      clientprint('Превышен лимит ожидания появления таргета. Повторите попытку.');
      addtosystemjournal('Превышен лимит ожидания появления таргета. Повторите попытку.');
      exit;
    end;

    // Ждем указания цели.
    cTime := now;
    while targetpresent do begin
      wait(300);
      if cTime+(1.0/(24*60*4)) <= now then begin
        canceltarget;
        clientprint('Превышен лимит ожидания цели. Повторите попытку.');
        addtosystemjournal('Превышен лимит ожидания цели. Повторите попытку.');
        exit;
      end;
    end;

    // Отмена таргета?
    if lasttarget = 0 then begin
      uosay('Таргет отменен.');
      addtosystemjournal('Таргет отменен.');
      exit;
    end;

    // Присваиваем переменной ID цели.
    t := lasttarget;
    result := true;
  end;

begin
  if NOT taketarget('Укажите слона.', t1) then
    exit;

  if NOT taketarget('Укажите слониху слону.', t2) then
    exit;

  // Крутим и вертим цель как хотим.
  clientprint('Цель 1 - $' + inttohex(t1, 8));
  addtosystemjournal('Цель 1 - $' + inttohex(t1, 8));
  clientprint('Цель 2 - $' + inttohex(t2, 8));
  addtosystemjournal('Цель 2 - $' + inttohex(t2, 8));
end.
Обновление: uosay заменил на clientprint.
<( o_O<) <( O_O )> (>O_o )>
alpi
Novice
Novice
Posts: 51
Joined: 02.07.2009 17:37
Contact:

Re: Указание цели через таргет

Post by alpi »

для чего это используется, если не секрет? :)
just student
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: Указание цели через таргет

Post by nepopus »

alpi wrote:для чего это используется, если не секрет? :)
С помощью этого можно сделать перетаскивалку по указанию цели в игре. Как на инжекте ;)
<( o_O<) <( O_O )> (>O_o )>
alpi
Novice
Novice
Posts: 51
Joined: 02.07.2009 17:37
Contact:

Re: Указание цели через таргет

Post by alpi »

понял) спасибо за идею, действительно очень полезно, можно приспособить в те места, где константы излишни :)
just student
admir
Novice
Novice
Posts: 97
Joined: 28.10.2008 20:44

Re: Указание цели через таргет

Post by admir »

На ночь не вдупляю идею?
Xor
Neophyte
Neophyte
Posts: 21
Joined: 03.09.2012 7:07

Re: Указание цели через таргет

Post by Xor »

Допустим, каждый раз при запуске скрипта нам нужно скидывать мусор в новый сундук.
Если рядом есть такие же сундуки, то каждый раз придется указывать какую-нибудь

Code: Select all

const
    myChestID = $ADADADAD;
А если скрипт будет предлагать тыкнуть в некий сундук, и запоминать его ID, то работы будет вроде как поменьше. Недостатком конечно же является необходимость стартовать клиент при каждом запуске скрипта. Но других применений можно придумать массу.

Тут вопрос только в том, откуда взялось "lasttarget"
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: Указание цели через таргет

Post by nepopus »

Xor wrote:Допустим, каждый раз при запуске скрипта нам нужно скидывать мусор в новый сундук.
Если рядом есть такие же сундуки, то каждый раз придется указывать какую-нибудь

Code: Select all

const
    myChestID = $ADADADAD;
А если скрипт будет предлагать тыкнуть в некий сундук, и запоминать его ID, то работы будет вроде как поменьше. Недостатком конечно же является необходимость стартовать клиент при каждом запуске скрипта. Но других применений можно придумать массу.

Тут вопрос только в том, откуда взялось "lasttarget"
предопределенная переменная, хранящая последнюю цель :)
<( o_O<) <( O_O )> (>O_o )>
Xor
Neophyte
Neophyte
Posts: 21
Joined: 03.09.2012 7:07

Re: Указание цели через таргет

Post by Xor »

Круто, чо )

надо бы ее добавить сюда: http://stealth.od.ua/wiki/doku.php?id=functions
и еще не ясно, как эту переменную считывать питоном
admir
Novice
Novice
Posts: 97
Joined: 28.10.2008 20:44

Re: Указание цели через таргет

Post by admir »

Аналог Адд обжект инжекту?)
Не ново, но молодец что сам придумал.

Может кто-то реализует мои идеи.. когда-то давным давно...

1) фильтровать замах свой. Явно есть пакет на анимацию при замахе, возможно что-то еще.
2) фильтровать замах противника. тут все сложнее. С одной конкретно целью в принципе тоже по анимации .
3) фильтровать замахи\атаки противников. Во-первых отслеживать Атакинг ю. Во-вторых среди толпы отслеживать в совокупе поворот чара к тебе, анимацию на предмет каста\выстрела с лука\замаха (не забывать учитывать дистанцию, смотреть что в руке :) ).
4) Не столь важная но иногда полезная фильтрация выпитых бутылок. Тайминги напитков объединяются в подгруппы. Мана-инвиз, хил-стамина и т.д.
Фильтрация на звук(анимацию), учет бутылок, действие от бутылки.
5) Запоминание 2х последних противников и переключение ласт таргета между ними на хоткее. Реализовано на инжекте но на стелсе было бы быстрее.
Альфа, турнир 2х2.
6) Легкий тимплей: по запросу через гильд чат партнер передавал свой ласттаргет и он присваивался тебе на ласт таргет (все с 1 нажатия кнопки).
Влетаешь в портал где дерется твой согильдиец и слету фс, фс, пока на тебя нацелятся, твой партнер фс инвиз и -1.
7) Отслеживать хп нескольких персонажей, всех персонажей. Стягивание статус бара с определенных чаров, всех чаров.
---
А вообще все эти фишечки предполагалось оформлять в отдельном графическом окошке.
Post Reply