Page 1 of 1

Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 16:06
by kopiluvak
Список выполняемых функций в стелсе
Список выполняемых функций в стелсе
Снимок экрана 2019-04-23 в 15.11.19.png (11.71 KiB) Viewed 40443 times
^^ Как сделать это с помощью скрипта? ^^

Чтобы при запуске одного скрипта открывался/загружался другой и выполнялся?

Как все знают в инжекте это реализуемо так:

Code: Select all

 if not uo.funRunning('test2') then
      uo.exec('test2')
      uo.colorPrint(0x0446, 'Test2 запущен!')
end if
if uo.funRunning('test3') then
      uo.exec('terminate test3')
      uo.colorPrint(0x0446, 'Test3 остановлен!')
end if

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 16:09
by drabadan
А в чем необходимость, почему такая задача стоит?

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 16:17
by kopiluvak
drabadan wrote:А в чем необходимость, почему такая задача стоит?
Процедурный подход такой какой сейчас есть в Stealth подходит для простых задач. А мне нужны параллельно выполняющиеся процессы для более сложных задач. Сейчас это можно сделать "расплодив" кучу скриптов в разных файлах, поочерёдно загрузить и запустить их. Это работает все ок, но мягко говоря не очень удобно. А так был бы один скрипт autoload.sc, где прописаны файлы, которые нужно запустить и было бы гуд!
P.S. ответил на вопрос, постарался раскрыть тему. Очень актуально! Услышал бы разработчик :wink:

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 16:28
by drabadan
"Процедурный подход такой какой сейчас есть в Stealth подходит для простых задач. А мне нужны параллельно выполняющиеся процессы для более сложных задач." - тут можно долго спорить. Есть например масса ивентов, которые позволяют решать задачи любой сложности.

Может есть конкретный пример по которому можно понять, что без 2х скриптов паралельно совсем никак?

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 18:13
by DDoS
Никак

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 20:14
by kopiluvak
drabadan wrote:"Процедурный подход такой какой сейчас есть в Stealth подходит для простых задач. А мне нужны параллельно выполняющиеся процессы для более сложных задач." - тут можно долго спорить. Есть например масса ивентов, которые позволяют решать задачи любой сложности.

Может есть конкретный пример по которому можно понять, что без 2х скриптов паралельно совсем никак?
Код ниже не рабочий – это просто набросок, пример того, что такое плохо.

Code: Select all

Program myProgram;

  var
    idLastMob, idLastCorpse : Cardinal;
    
    
  function findMob() : Cardinal;
  var
    mob : Cardinal;
    
  begin
    mob := $0D00F000;
    Result := mob;
  end; 
  
  function attackMob(idMob : Cardinal) : Boolean;
  var
  
  begin  
    if (WarTargetID <> idMob) then
        attack(idMob);
    
    while not isDead(idMob) and not dead do
    begin
        wait(100);
    end;
    
    // если сам умер, то атака оказалась безуспешна
    if dead then
    begin
        Result := false;
    end
    else
    begin
        Result := true;
    end;
  end; 
  
  function findCorpse() : Cardinal;
  var
    corpse : Cardinal;
    
  begin
    corpse := $0D00FC00;
    Result := corpse;
  end;  
  
  function lootCorpse(idCorpse : Cardinal) : Boolean;
  begin
    // здесь код. Ищем нужные айтемы и перекладываем их себе
  end; 
  
  function checkPK() : Boolean;
  begin
    // проверка не напал ли ПК
  end;

  begin
    while true do
    begin               
    
        idLastMob := findMob();
        if idLastMob > 0 then
        begin
            addToSystemJournal('Моб найден, атакуем его');
            attackMob(idLastMob);   
            
            idLastCorpse := findCorpse();
            if idLastCorpse > 0 then
            begin
                addToSystemJournal('Труп найден, лутаем его');
                lootCorpse(idLastCorpse);  
                checkPK(); // получается, что чтобы проверить не атакует ли кто
                           // нужно дождаться пока выполнение кода дойдет до
                           // этого момента. Либо тыкать эту проверку во все 
                           // места кода. В этом случае чар сдохнет уже, а код
                           // будет пытаться выполниться. Или превратить код в 
                           // кашу и сломать голову, предусматривая куда еще 
                           // нужно поставить проверку на ПК          
            end;
        end; 
        wait(500);
    end;
  end.
А при параллельном выполнении задач нам не нужно дожидаться выполнения всей простыни кода. Скрипты при параллельном выполнении держат связь между собой через

Code: Select all

getGlobal('char', name : string) : string
setGlobal('char', name : string, value : string)

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 20:22
by drabadan
http://stealth.od.ua/Doc:RU/Manual/Reference/Events

evDrawObject : [ID] - отрисовка чара (не обязательно нашего!)
просто подпишись на событие, в коллбеке обнови флаг основного лупа и вуаля. Ничего никуда не нужно тыкать.

"пример того, что такое плохо" - что ето значит, не только лишь все из нас тут топ1 мира программисты, мало кто, на самом деле. Любая реализация любой задачи имеет место на существование, если код удовлятворяет и отвечает на поставленную задачу - этот код нормальный.

Re: Экзекуция (execution) скрипта из скрипта

Posted: 23.04.2019 23:22
by kopiluvak
drabadan wrote:"пример того, что такое плохо" - что ето значит, не только лишь все из нас тут топ1 мира программисты, мало кто, на самом деле.
Нет, это не про того товарища о котором вы предположили. Это всего лишь цитата В. В. Маяковского.
drabadan wrote:http://stealth.od.ua/Doc:RU/Manual/Reference/Events

evDrawObject : [ID] - отрисовка чара (не обязательно нашего!)
просто подпишись на событие, в коллбеке обнови флаг основного лупа и вуаля. Ничего никуда не нужно тыкать.
Я видел это в гайде и как-то сразу не воспринял всерьез. Но если вы утверждаете, что в это стоит вникнуть я сейчас постараюсь понять, как это работает. Там не совсем хорошо описано, но как говорится методом тыка потестирую. Благодарю!

Если по первоначальной теме, то судя по немногословному ответу DDos вопрос снят

Re: Экзекуция (execution) скрипта из скрипта

Posted: 24.04.2019 8:45
by Vizit0r
Ивенты перекрывают большую часть потребностей в этом плане.
Только прочитай в разделе faq инфу по ивентам

И да, я вполне осознанно не даю доступ юзерам к управлению скриптами, чтобы народ не плодил кучи скриптов с вызовами одного из другого.

Re: Экзекуция (execution) скрипта из скрипта

Posted: 24.04.2019 15:56
by GeeZeR
Да пусть плодят, тебе что жалко? )) есть же у нас goto...

Re: Экзекуция (execution) скрипта из скрипта

Posted: 25.04.2019 8:17
by Vizit0r
Я заранее перекрываю просто вагон потенциальных багов, утечек и всего такого.

А goto вполне себе нормальная вещь, если использовать с умом.