Сообщения без ответов | Активные темы Текущее время: Пн дек 10, 2018 6:33 pm



Ответить на тему  [ Сообщений: 2 ] 
Несколько скриптов для одного окна или один на все сразу. 
Автор Сообщение
Администратор
Аватар пользователя

Зарегистрирован: Пн янв 12, 2015 10:58 am
Сообщений: 1346
 Несколько скриптов для одного окна или один на все сразу.
First of all we need to add new window where we start our script by clicking button with human and plus, near android icon.
Next you need to know is what to replace in your script to have it working for all windows.

Introduction:

In adrenaline api we have a local script variables for one script object, this is the list: http://asiwin.com/api/adrenalin/Objects
Изображение

To use it from ANOTHER script object (window) we have good functions:http://asiwin.com/api/adrenalin/Classes/TL2Control#_Gets
Изображение

These methods from TL2Control object are local Engine variables, but we CANT use engine and need to get it and we can do it by global methods:

GetControl(nickname:string):TL2Control //GetControl('mynickname'); //control from the nick name
GetControlByIndex(index:integer):TL2Control //GetControlByIndex(0); //first control from list


If you read from above and have good understanding of Delphi - you understand my things and know whats the next step.
So what we need -
[list=][*]open it in notepad
[*]put there our script
[*]declare new local variables
[*]use ctrl+h for replace all this global names to our new local variables.[/list]
What i mean, replace ALL NAMES:
Engine with myControlName
User with myControlName.GetUser
Inventory with myControlName.GetInventory
etc list are in api of bot and inntrodution.

For example, we take simple script from this thread https://forum.lineage2bot.com/viewtopic.php?f=9&t=925
code for use in active window:

Код:
uses SysUtils, Classes;

 var
     Item: TL2Item;
     Npc: TL2Npc;
lastRoom: Integer;

function mobsInZone : Boolean;
var i: Integer;
begin
   for i := 0 to NpcList.Count - 1 do begin
      if NpcList.Items(i).InZone and NpcList.Items(i).Attackable then begin
         Result := True;
         exit;
      end;
      delay(100);
   end;
   Result := False;
end;

begin
while true do begin
    if not mobsInZone then begin
        print('going to other room');
        Engine.FaceControl(0, False);
        if (lastRoom = 1) then begin
            // put path here for spot1
            //
            // finish path here for spo1
            Engine.loadzone('123'); //name of the zone1
            lastRoom := 0;
        end else begin
            // put path here for spot2
            //
            // finish path here for spo2
            Engine.loadzone('456'); //name of the zone2
            lastRoom := 1;
        end;
        Delay(1000);
        Engine.FaceControl(0, True);
    end;
Delay(1000);
end;
end.



And if we replace it:
Код:
uses SysUtils, Classes;
var
   //Add new local names
   Control:TL2Control;
   
   //
  Item: TL2Item;
  Npc: TL2Npc;
   lastRoom: Integer;

//good method
function mobsInZone : Boolean;
var
   i: Integer;
   vNPCList:TNpcList;
begin
   vNPCList := Control.GetNPCList;
  for i := 0 to vNPCList.Count - 1 do
   begin
      if vNPCList.Items(i).InZone and vNPCList.Items(i).Attackable then
      begin
        Result := True;
        exit;
      end;
      delay(100);
  end;
  Result := False;
end;
//bad method only replace
{
function mobsInZone : Boolean;
var
   i: Integer;
begin
  for i := 0 to Control.GetNPCList.Count - 1 do
   begin
      if Control.GetNPCList.Items(i).InZone and Control.GetNPCList.Items(i).Attackable then
      begin
        Result := True;
        exit;
      end;
      delay(100);
  end;
  Result := False;
end;
}

begin
   //firstofall get new control
   Control:=GetControl('Ivanius');//any nick name of active windows
   //or use by index //Control:=GetControlByIndex(0);
   while true do
   begin
    if not mobsInZone then begin
        print('going to other room');
        Control.FaceControl(0, False);
        if (lastRoom = 1) then begin
            // put path here for spot1
            //
            // finish path here for spo1
            Control.loadzone('123'); //name of the zone1
            lastRoom := 0;
        end else begin
            // put path here for spot2
            //
            // finish path here for spo2
            Control.loadzone('456'); //name of the zone2
            lastRoom := 1;
        end;
        Delay(1000);
        Control.FaceControl(0, True);
    end;
      Delay(1000);
   end;
end.

_________________

Мой Сайт, Тут есть все скрипты: 1-85, Заточка, Аугмент и много чего другого
skype: live:ivanius51
вопросы по СКРИПТАМ, не программированию - БЕСПЛАТНО!



Ср фев 21, 2018 6:46 pm
Профиль WWW
Администратор
Аватар пользователя

Зарегистрирован: Пн янв 12, 2015 10:58 am
Сообщений: 1346
Сообщение Re: Несколько скриптов для одного окна или один на все сразу
будет время переведу, писал сразу на англ.

_________________

Мой Сайт, Тут есть все скрипты: 1-85, Заточка, Аугмент и много чего другого
skype: live:ivanius51
вопросы по СКРИПТАМ, не программированию - БЕСПЛАТНО!



Ср фев 21, 2018 7:00 pm
Профиль WWW
Показать сообщения за:  Сортировать по:  
Ответить на тему   [ Сообщений: 2 ] 

Кто сейчас на форуме

Сейчас этот форум просматривают: britneyny18 и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Разработано: g-yar.
Русская поддержка phpBB