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

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

Post Reply
kopiluvak
Posts: 4
Joined: 23.04.2019 14:14

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

Post by kopiluvak »

Список выполняемых функций в стелсе
Список выполняемых функций в стелсе
Снимок экрана 2019-04-23 в 15.11.19.png (11.71 KiB) Viewed 26897 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
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post by drabadan »

А в чем необходимость, почему такая задача стоит?
kopiluvak
Posts: 4
Joined: 23.04.2019 14:14

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

Post by kopiluvak »

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

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

Post by drabadan »

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

Может есть конкретный пример по которому можно понять, что без 2х скриптов паралельно совсем никак?
DDoS
Novice
Novice
Posts: 53
Joined: 10.04.2018 21:34

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

Post by DDoS »

Никак
kopiluvak
Posts: 4
Joined: 23.04.2019 14:14

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

Post 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)
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post by drabadan »

http://stealth.od.ua/Doc:RU/Manual/Reference/Events

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

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

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

Post by kopiluvak »

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

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

Если по первоначальной теме, то судя по немногословному ответу DDos вопрос снят
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

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

И да, я вполне осознанно не даю доступ юзерам к управлению скриптами, чтобы народ не плодил кучи скриптов с вызовами одного из другого.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

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

Post by GeeZeR »

Да пусть плодят, тебе что жалко? )) есть же у нас goto...
Stealth 8.10.2 | Клиент: 7.0.13.4
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

Я заранее перекрываю просто вагон потенциальных багов, утечек и всего такого.

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