Page 1 of 1

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

Posted: 31.05.2012 12:22
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.

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

Posted: 11.06.2012 16:29
by alpi
для чего это используется, если не секрет? :)

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

Posted: 11.06.2012 17:53
by nepopus
alpi wrote:для чего это используется, если не секрет? :)
С помощью этого можно сделать перетаскивалку по указанию цели в игре. Как на инжекте ;)

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

Posted: 11.06.2012 19:02
by alpi
понял) спасибо за идею, действительно очень полезно, можно приспособить в те места, где константы излишни :)

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

Posted: 16.09.2012 23:51
by admir
На ночь не вдупляю идею?

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

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

Code: Select all

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

Тут вопрос только в том, откуда взялось "lasttarget"

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

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

Code: Select all

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

Тут вопрос только в том, откуда взялось "lasttarget"
предопределенная переменная, хранящая последнюю цель :)

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

Posted: 21.09.2012 12:06
by Xor
Круто, чо )

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

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

Posted: 30.09.2012 23:02
by admir
Аналог Адд обжект инжекту?)
Не ново, но молодец что сам придумал.

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

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