Несколько скриптов для одного окна или один на все сразу.

Раздел посвященный скриптам для бота
Ответить
Аватара пользователя
IvaniuS
Администратор
Сообщения: 1372
Зарегистрирован: Пн янв 12, 2015 10:58 am
Контактная информация:

Ср фев 21, 2018 6:46 pm

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 ... trol#_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 -
  • 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.
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
вопросы по СКРИПТАМ, не программированию - БЕСПЛАТНО!

Аватара пользователя
IvaniuS
Администратор
Сообщения: 1372
Зарегистрирован: Пн янв 12, 2015 10:58 am
Контактная информация:

Ср фев 21, 2018 7:00 pm

будет время переведу, писал сразу на англ.

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

Ответить