Jump to content

Recommended Posts

Posted

Hello, 

 

Im making a custom script for my self, plan is for a fairly large one, including login check, buff, path to farm zone from multiple cities etc...

The only thing im truly having problems with is the spawn locations in the towns.

Goddard was very easy to find as most of the examples use it, however i noticed that not all spawn point are there and for some of the spawn point the char is just getting stuck when trying to get up on the stairs.

 

So does any one know where i can get the right and full spawn list ? (preferably for all the big cites, goddard, aden, rune)

 

Thanks!

Posted

Come on, no a single answer ? 

there must be a place with the spawn point right ? 

I mean i can spend hours and just recall to the city over and over and making it, but it seems such a pain the ass.

Posted
if user.inrange(123, 123, 123, 500) then
begin
engine.moveto(123, 123, 123);
end;

u dont need have each exact spawn location, u can cover town with inrange check. 500 is radius around XYZ, gl!

Posted
On 2/14/2021 at 8:04 PM, adr.bot said:

if user.inrange(123, 123, 123, 500) then
begin
engine.moveto(123, 123, 123);
end;

u dont need have each exact spawn location, u can cover town with inrange check. 500 is radius around XYZ, gl!

Thanks for reply.
This is actually what I was trying to do, but many times my char is just getting stuck in strange corners.
On another note, another question none related.

I found a script you posted back in the day wit auto re-login (below).

For the most part it works, but the server I'm playing in has auto daily restarted but like 60 sec or so.
when it happen the l2 window get disconnected popup and the script is just not doing any thing.

I was trying to find a way for it to click enter when its detected, but nothing I did work.
Could you help with that , or perhaps there is a different approach ?

Also if im adding a back to spot and rebuff to this below, how do i make sure it works, the original one you posted didnt work like half of the time and i have no clue why.

uses SysUtils;

function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar;  nShowCmd: integer): integer; stdcall;
  external 'Shell32.dll';
 
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall;
  external 'user32.dll';

function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall;
external 'user32.dll';
 
procedure disconnectMonitor;
const
  login = 'qq';
  password = 'aa';
  gamePath = 'C:\Users\Pc\Desktop\server\Lineage II\system\l2.exe';
begin
  while engine.Delay(3000) do begin  
    if (Engine.Status = lsOffline) or (Engine.Status = lsOff) then begin
      print('dc');
      Engine.FaceControl(0, false);
      Delay(1000);
      Engine.GameClose;
      Delay(1000);
      ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
      Delay(15000);
      enterText(login);
      Engine.UseKey('Tab');
      Delay(300);
      enterText(password);
      Delay(300);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(10000);
      ShowWindow(engine.gamewindow, 6);
    end;
  end;
end;
 
procedure enterText(const text: string);
var
  i: cardinal;
  upperCase: boolean;
begin
  for i:= 1 to length(text) do begin
    if isDigit(text[i]) then
      Engine.UseKey(text[i])
    else begin
      upperCase:= text[i] = UpCase(text[i]);
      if upperCase then begin
          keybd_event(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
          Engine.UseKey(text[i]);
          delay(10);
          keybd_event(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
      end else
        Engine.UseKey(text[i]);
    end;
    Delay(50);
  end;
end;
 
function isDigit(ch: char): boolean;
const
  digits = '013456789';
var
  i: cardinal;
begin
  result:= false;
  for i:= 0 to length(digits) do
    if digits[i] = ch then begin
      result:= true;
      exit;
    end;
end;


                        
begin

  Script.NewThread(@disconnectMonitor);

end. 
Posted
2 hours ago, chundrik said:

Thanks for reply.
This is actually what I was trying to do, but many times my char is just getting stuck in strange corners.
On another note, another question none related.

I found a script you posted back in the day wit auto re-login (below).

For the most part it works, but the server I'm playing in has auto daily restarted but like 60 sec or so.
when it happen the l2 window get disconnected popup and the script is just not doing any thing.

I was trying to find a way for it to click enter when its detected, but nothing I did work.
Could you help with that , or perhaps there is a different approach ?

Also if im adding a back to spot and rebuff to this below, how do i make sure it works, the original one you posted didnt work like half of the time and i have no clue why.


uses SysUtils;

function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar;  nShowCmd: integer): integer; stdcall;
  external 'Shell32.dll';
 
function keybd_event(bVk, bScan: byte; dwFlags, dwExtraInfo: integer): integer; stdcall;
  external 'user32.dll';

function ShowWindow(hwnd:cardinal; action:integer):boolean; stdcall;
external 'user32.dll';
 
procedure disconnectMonitor;
const
  login = 'qq';
  password = 'aa';
  gamePath = 'C:\Users\Pc\Desktop\server\Lineage II\system\l2.exe';
begin
  while engine.Delay(3000) do begin  
    if (Engine.Status = lsOffline) or (Engine.Status = lsOff) then begin
      print('dc');
      Engine.FaceControl(0, false);
      Delay(1000);
      Engine.GameClose;
      Delay(1000);
      ShellExecuteW(0, 'open', PChar(gamePath), nil, nil, 0);
      Delay(15000);
      enterText(login);
      Engine.UseKey('Tab');
      Delay(300);
      enterText(password);
      Delay(300);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(2000);
      Engine.UseKey('Enter');
      Delay(10000);
      ShowWindow(engine.gamewindow, 6);
    end;
  end;
end;
 
procedure enterText(const text: string);
var
  i: cardinal;
  upperCase: boolean;
begin
  for i:= 1 to length(text) do begin
    if isDigit(text[i]) then
      Engine.UseKey(text[i])
    else begin
      upperCase:= text[i] = UpCase(text[i]);
      if upperCase then begin
          keybd_event(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
          Engine.UseKey(text[i]);
          delay(10);
          keybd_event(20, 0, 1, 0);
          keybd_event(20, 0, 2, 0);
      end else
        Engine.UseKey(text[i]);
    end;
    Delay(50);
  end;
end;
 
function isDigit(ch: char): boolean;
const
  digits = '013456789';
var
  i: cardinal;
begin
  result:= false;
  for i:= 0 to length(digits) do
    if digits[i] = ch then begin
      result:= true;
      exit;
    end;
end;


                        
begin

  Script.NewThread(@disconnectMonitor);

end. 

https://adrenalinebot.com/en/api/adrenaline/Classes/TL2Control#AuthLogin for enter login/passw

if server have protection most likely winapi keyclicks doesnt work,  then you can try use "Engine.UseKey" https://adrenalinebot.com/en/api/adrenaline/Classes/TL2Control#UseKey

for disconnect, well if u get disconnect while u trying log in, then at very end of login , u can do check for if u are online, if not close client, and login again.

if u get disconnect while playing, and bot not shows that u are diconnected, u can try do thread procedure, which would check if u moved/get some specific items in last 60sec or so, if not do any of those, most likely u diconnected and u can close client for login again.

 

however i dont have any examples of that, but u can try adapt this code https://adrenalinebot.com/en/api/example/checking-if-our-character-is-stuck-in-the-thread for client close if u not moved.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...