Показать сообщение отдельно
Старый 03.02.2016, 20:45  
ivanius51
Освоившийся
Аватар для ivanius51
OFFLINE
Регистрация: 03.12.2014
Сообщений: 70
Благодарностей:
103 всего
Мнения: + 78
Репутация: 310

Интересно так :) прошел год как все изменилось то...
Думаю всем будет полезно понять и почитать, здесь будет готовый сборник всех моих полезных примеров или полезных примеров в принципе.
Т.к. на данном форуме нету споилеров, буду делать отдельными сообщениями и давать на них ссылки тут, для того чтобы это хорошо смотрелось!
>>>Скрипты Adrenaline, L2, AA, BDO Наш Сайт<<<
Хотите больше полезных примеров? - ставим ЛАЙК!

Функция Антипаравоз + функция проверки атаки чара мобами.
Код:
function MobsAttacking : Boolean;//Атакуют ли нас мобы?
 var i, n: Integer;
 begin
   n := 0;
    for i := 0 to NpcList.Count - 1 do
      if (NpcList.Items(i).Target = User) and not NpcList.Items(i).Dead then inc(n);
   Result := n > 0;
 end;

function inDanger: boolean;//Есть ли рядом с нами паравоз : работает только на 50%!!!!!
var mobsInTrain,minMobs,i,j: integer;
begin
Result := false;
minMobs := 3;//кол-во мобов
    for i:=0 to charlist.count-1 do begin
        mobsInTrain := 0;
        if (user.distto(charlist.items(i)) < 3000) and charlist.items(i).moved then begin //close, runing
            for j:=0 to npclist.count-1 do begin
                if (npclist.items(j).target = charlist.items(i)) and (charlist.items(i).distto(npclist.items(j)) < 1500) then inc(mobsInTrain);
                if (mobsInTrain >= minMobs) then begin
                    Result := true;
                    exit;
                end;
            end;
        end;
    end;
end;
Функция Проверки на смерть
Код:
function CheckDeath: Boolean;//Проверка на смерть
begin
  Result:=false;
    if User.Dead then //умерли
    begin
        Print('Bot Umer');//печатаем в лог
        Delay(3000);//ждать реса
        if User.Dead then 
        begin
           Result:=true;
          Engine.FaceControl(0,false);//выключаем бота
          Engine.GoHome;//встаем в город
          Delay(10000);//отдыхаем
       end;
    end;
end;
Скрипт или процедура(поток) для принятия\отмены диалогов (ивенты)
Код:
begin
  while delay(500) do 
	begin
		Engine.ConfirmDialog(false);  // отказ  true согласие
		//Также именно ЭТА команда отвечает за принятие\отказ (респа,трейда и т.д. не только ивенты)
    delay(10000);
  end;
end.
#Процедура отправки почты по условию
Код:
procedure SendMail;
begin
	if inventory.User.ByID(57, Item) and (Item.count > 250000) then
	begin
		Engine.SendMail('Ник', 'тема', 'комент',[id,кол-во,id,кол-во,id,кол-во,id,кол-во,id,кол-во,id,кол-во]); 
		delay(1000);
	end; 
end;
#Скрипт. Часто спрашивают, как дать команду боту по чату, вот так:
Код:
uses sysutils,classes;
begin
   while Engine.Status = lsOnline do begin
      if (ChatMessage.ChatType = mtPrivate) and ChatMessage.Unread then //непрочитанное сообщение тип чата mtPrivate=ПМ mtParty  mtAll=белый 
      begin
        if (ChatMessage.Text = 'пати плз') then  Engine.InviteParty(ChatMessage.Sender, ldRandom); //текстом - делаем
        if (ChatMessage.Text = 'бпк') then  engine.useskill(3521); //текстом - делаем
      end;
    delay(2000);
   end;
end.
#Скрипт\Поток АнтиДизарм
Код:
const
  WeaponID:=4233;//ID Itema оружия
var
  item: TL2Item;

begin
while delay(500) do //Два раза в секунду
  if inventory.user.byid(WeaponID, item) and not (Item.Equipped) then begin
    Delay(500);
    Engine.UseItem(WeaponID);
    Delay(800);
  end;
end.
#Процедура\скрипт проверки шагов квеста
Код:
procedure CheckQuestStatus(ID:integer=-1);
Var
i:integer;
stat:string;
begin
  Print('Инфо по квесту '+IntToStr(ID));
  for i:=1 to 32 do
  begin
    if Engine.QuestStatus(ID,i) then stat:='OK' else stat:=' -- ';
    Print('Шаг '+IntToStr(i)+' - '+stat);
  end;
end;

begin
  CheckQuestStatus(10323); // вместо 10323 вписываем ID  квеста
end.
#Для Опытных пользователей. Пример импорта и работы WinAPI функций
Код:
function MessageBoxW(hWnd: integer; Text, Caption: PChar; uType: integer): integer; stdcall; external 'user32.dll';
function ShellExecuteW(hwnd: integer; lpOperation, lpFile, lpParameters, lpDirectory: PChar;  nShowCmd: integer): integer; stdcall; external 'Shell32.dll';
function FindWindowW(lpClassName, lpWindowName: PChar): integer; stdcall; external 'user32.dll';
function SetWindowTextW(hWnd: integer; lpString: PChar): boolean; stdcall; external 'user32.dll';

var 
	H: integer;//Handle 
begin  
  MessageBoxW(0, 'HELLO !', 'Пример WinAPI', 0);
  ShellExecuteW(0, 'open', 'calc', nil, nil, 0);
  Delay(500); // даем время запуститься калькулятору
  H := FindWindowW(nil,'Калькулятор');
  SetWindowTextW(H, 'Shadow - WinAPI]DEMO');  
end.


Хотите больше полезных примеров? - ставим ЛАЙК!

>>>Скрипты Adrenaline, L2, AA, BDO Наш Сайт<<<
П.С. Большинство скриптов авторские и при размещении в других местах ссылка на источник и указание авторства ОБЯЗАТЕЛЬНО!

 
Ответить с цитированием
Сказали спасибо:
Picasso28 (11.12.2017), vs23 (09.10.2016), купэ (18.06.2016)