Пример реакции на окружающих персонажей

Готовый поток, который может останавливать выполнение скрипта при обнаружении рядом персонажей. Игнорирует своих ботов и игроков из белого списка.

uses SysUtils, Classes;

const
  WHITE_LIST = 'Nickname1; Nickname2; ';
  clRed = 255;

function IsMyBot(Player: TPlayer): Boolean;
var 
  i: Integer;
  Acc: TAccount;
begin
  Result:= False;
  for i:= 0 to Accounts.Count-1 do begin
    Acc:= Accounts(i);
    if (Acc.User.OID = Player.OID) then begin
      Result:= True;
      Exit;
    end;
  end;
end;

function InWhiteList(Player: TPlayer): Boolean;
var 
  i: Integer;
  SL: TStringList;
begin
  Result:= False;
  SL:= TStringList.Create();
  try
    SL.Text:= StringReplace(WHITE_LIST, ';', #13#10, [rfReplaceAll]);
    for i:= 0 to SL.Count-1 do begin
      if (SL[i] = Player.Name) then begin
        Result:= True;
        Exit;
      end;
    end;
  finally
    SL.Free();
  end;
end;

function FindBadPlayer(): TPlayer;
var 
  i: Integer;
  Player: TPlayer;
begin
  Result:= nil;
  for i:= 0 to Players.Count-1 do begin
    Player:= Players(i);
    if IsMyBot(Player) then Continue;
    if InWhiteList(Player) then Continue;
    
    Result:= Player;
    Account.PrintEx(Format('Enemy detected: %s (dist: %d)', [Player.Name, User.DistTo(Player)]), clRed, 60000);
    Break;
  end;
end;

procedure CheckPlayersAndPauseScriptThread();
var
  i: Integer;
  BadPlayer: TPlayer;
  SoundTimer: Cardinal;
begin
  Print('CheckPlayersAndPauseScriptThread started...');

  while Delay(1000) do begin

    if (Status <> lsOnline) then Continue;
    BadPlayer:= FindBadPlayer(); 
    if Assigned(BadPlayer) then begin
      Account.PrintEx(Format('Enemy detected: %s (dist: %d)', [BadPlayer.Name, User.DistTo(BadPlayer)]), clRed, 60000);
      if TimerEx(SoundTimer, 5*1000) then PlaySound(ExePath + 'Sounds\alarm (fem).wav');
      Script.Suspend();
    end else begin
      Script.Resume();
    end;

  end;
end;

begin
  Script.NewThread(@CheckPlayersAndPauseScriptThread);

  // ..

  Delay(-1);
end.
Структура классов ArcheAngel бота
  • Classes
    • TGameControl
    • TPaxEngine
    • TGameObject
      • TSpawn
        • TLive
          • TPlayer
            • TUser
          • TNpc
            • TMount
          • TDoodad
      • TEffect
        • TBuff
        • TSkill
          • TCast
      • TItem
        • TAucItem
      • TMailItem
    • TGameList
      • TSpawnList
        • TPlayers
        • TNpcs
        • TMobs
        • TDoodads
        • TMounts
      • TInventory
      • TSkills
      • TSlotList
      • TZoneList
      • TBuffs
      • TMail
      • TAuction
    • TChatMessage
    • TAccount
    • TAccounts
    • THistoryMessage
    • TMessages