Перейти к содержанию
Форум шарда Middle-Earth
nepret

Include

Рекомендуемые сообщения

Буду выкладывать сюда свои инклюды которые делались под наш шард.

 

Что такое Include зачем оно нам надо...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

include Hungy(Plase : cardinal) : Boolean;

Plase - Указать где искать еду

ID контейнера (требуется открыть хотя бы 1 раз)Ground (ищет на земле в радиусе 2 тайлов, редактируется параметром FindDistance)Backpack сумка персонажа (требуется открыть хотя бы 1 раз)

В самом инклюде, указать тип еды которую будет есть. (По умолчанию фиш стейки)

пример использования:

Hungry(ground);

 

UP 19.09.2012 Добавил поддержку фраз на энглише (.lang для смены языка в клиенте)

 

const
Food = $097B;        // Тип еды, которую будем кушать в процессе.
                                // $097B - жаренная рыба
                                // $09F2 - жаренное мясо
                                // $171F - бананы

var
HungryJournalTime : TDateTime;

function Hungry(Plase : cardinal) : Boolean;
var
VarFood : string;
begin
    if not Connected then exit;
    if dead then exit;
    if Food = $097B then VarFood := 'жареной рыбы';
    if Food = $09F2 then VarFood := 'жареного мяса';
    if Food = $171F then VarFood := 'бананов';
    if not (Food = $097B) or (Food = $09F2) or (Food = $171F) then VarFood := 'еды';
    FindTypeEx(Food, $FFFF, Plase, True);
    if FindCount < 1 then
        begin
            AddToSystemJournal('>>> Нет '+ VarFood +'!');
            result := false;
            exit;
        end;
    result := true;
  if HungryJournalTime = 0 then
        begin
            HungryJournalTime := Now;
            repeat
                FindTypeEx(Food, $FFFF, Plase, False);
                if FindCount > 0 then
                    begin
                        UseObject(finditem);
                        wait(1000);
                    end;
            until InJournalBetweenTimes('Я объелс|You are full', HungryJournalTime, Now) <> -1;
        end
    else
        begin
            if Now < HungryJournalTime + (1.0/1440) then exit;
        end;
    if (InJournalBetweenTimes('голодны|Вы почти умираете от голода|Ваш желудок болит|Вы чувствуете слабость|You are absolutely stuffed|You are stuffed|hungry at all|You are a little hungry|You are somewhat hungry|You are REALLY hungry|Your stomash hurts|Your stomash hurts and you feel dizzy|You are starving|You are almost dying of hunger|You are DYING of hunger', HungryJournalTime, Now) <> -1) and (LineName = 'System') and (LineTextColor = 443) then
        begin
            FindTypeEx(Food, $FFFF, Plase, False);
            if FindCount > 0 then  UseObject(finditem);
        end;
    HungryJournalTime := Now;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

include Debug

Инклюд предназначен для циклов типа repeat-until\while.

Я в своих скриптах частенько выважу циклы на различные проверки, на появление таргета, на появлении определённой фразы при крафте или прокачке скиллов.

И бывает так что они где-то зацикливаются без возможности выйти из цикла... Как правила циклов много и чтобы определить в каком именно косяк, я ставил AddToSystemJournal(название_цикла).

Но эта порнуха заспамлевает весь системный журнал постоянным флудом циклов.

Я прикинул х$@ к носу и решил что это как то не айс, надо найти другой способ.

Потратил час своего времени и на свет появилось то что лежит ниже.

Суть проста, вставляем сколько ждать до реагирования на зацикливание и сколько стоит задержка в цикле.

После прохода контрольной точки времени, скрипт выдаёт в системный чат то, что вы напишете...

Пример есть ниже.

Хочу заметить, что проверки на сейв тут нет, по этому запускать инклюд стоит только вместе с checksave;

 

include Debug(OperationTimeSec : integer; DelayInCycleMs : integer) : Boolean;

OperationTimeSec - Сколько должно пройти времени чтобы дебагер среагировал

Указывать в секундах

DelayInCycleMs - Указать задержку которая стоит в цикле

Указывать в миллисекундах

Перед или после цикла обязательно объявить переменную "td := 0;" !

В скрипте, в константах прописать переменную "DebugMode = 0\1;" 0-Отключить 1-Включить!

пример использования:

 repeat
   Debug(10, 0);
until t > 10;
td := 0;

в скриптах:

Program test;

const
DebugMode = 1;
var
t : integer;  
{$Include 'all.inc'}

begin
  t := 0;
  td := 0;
  repeat
    if Debug(10, 0) then AddToSystemJournal('прошло 10 секунд 1-го цикла');
    wait(1);
    t := t + 1;
  until t >= 10001;
  t := 0;
  td := 0;
  repeat
    if Debug(10, 100) then AddToSystemJournal('прошло 10 секунд 2-го цикла');
    wait(100);
    t := t + 1;
  until t >= 101;
end.

 

 

debug.inc

var
CheckDebug, td : integer;

function Debug(OperationTimeSec : integer; DelayInCycleMs : integer) : Boolean;
begin
  if DebugMode = 1 then
    begin
      if td = 0 then CheckDebug := 1;
      if CheckDebug = 1 then
        begin
            if DelayInCycleMs = 0 then
            begin
              AddToSystemJournal('>>> Debug <<< Минимально-допустимая задержка в цикле := 1ms. Debug инклюд завершился с ошибкой!');
                CheckDebug := 0;
                td := 1;
              exit;
            end;
          OperationTimeSec := OperationTimeSec * 1000;
          td := td + DelayInCycleMs;
          if td >= OperationTimeSec then
            begin
              result := true;
              CheckDebug := 0;
            end;
        end;  
    end;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой CheckSave.inc

procedure CheckSave; 
var Time : TDateTime; 
begin 
Time:= Now - (0.5 / 1440); 
if InJournalBetweenTimes('Saving World State',Time,Now) >= 0 then
repeat
wait(1000);
if not Connected then exit;
until InJournalBetweenTimes('Saving World State complete',Time,Now) >= 0;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перезаливаем инклюд Hungry

Добавил выход из блока при отсутствии коннекта (при дисконекте).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

procedure OpenBackpack;
begin
  if (LastContainer <> Backpack) and (dead = false) then
    begin
      repeat
        if not Connected then exit;
        Checksave;
        UseObject(Backpack);
        wait(1000);
      until LastContainer = Backpack;
    end;
end;

 

procedure WaitConnection(WaitTime : Integer);
begin
    if Connected then Exit;
        while not Connected do Wait(1000);
        {WaitTime - Waiting After Connected}
        wait(WaitTime);
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Checktarget.inc

function CheckTarget(SecTime : integer) : Boolean;
var
t : integer;
begin
  SecTime := SecTime * 10;
  td := 0;
  t := 0;
  repeat
    if not Connected then exit;
    checksave;
    if Debug(SecTime/10,100) then AddToSystemJournal('>>> Debug <<< Блок инклюда CheckTarget ');
    wait(100);
    t := t + 1;
  until TargetPresent or (t >= SecTime);
  if t >= SecTime then result := false;
  if not Connected then exit;
  if TargetPresent then result := true;
end;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
include Hungy(Plase : cardinal) : Boolean;

Plase - Указать где искать еду

ID контейнера (требуется открыть хотя бы 1 раз)Ground (ищет на земле в радиусе 2 тайлов, редактируется параметром FindDistance)Backpack сумка персонажа (требуется открыть хотя бы 1 раз)

В самом инклюде, указать тип еды которую будет есть. (По умолчанию фиш стейки)

пример использования:

Hungry(ground);

 

UP 19.09.2012 Добавил поддержку фраз на энглише (.lang для смены языка в клиенте)

 

const
Food = $097B;        // Тип еды, которую будем кушать в процессе.
                                // $097B - жаренная рыба
                                // $09F2 - жаренное мясо
                                // $171F - бананы

var
HungryJournalTime : TDateTime;

function Hungry(Plase : cardinal) : Boolean;
var
VarFood : string;
begin
    if not Connected then exit;
    if dead then exit;
    if Food = $097B then VarFood := 'жареной рыбы';
    if Food = $09F2 then VarFood := 'жареного мяса';
    if Food = $171F then VarFood := 'бананов';
    if not (Food = $097B) or (Food = $09F2) or (Food = $171F) then VarFood := 'еды';
    FindTypeEx(Food, $FFFF, Plase, True);
    if FindCount < 1 then
        begin
            AddToSystemJournal('>>> Нет '+ VarFood +'!');
            result := false;
            exit;
        end;
    result := true;
  if HungryJournalTime = 0 then
        begin
            HungryJournalTime := Now;
            repeat
                FindTypeEx(Food, $FFFF, Plase, False);
                if FindCount > 0 then
                    begin
                        UseObject(finditem);
                        wait(1000);
                    end;
            until InJournalBetweenTimes('Я объелс|You are full', HungryJournalTime, Now) <> -1;
        end
    else
        begin
            if Now < HungryJournalTime + (1.0/1440) then exit;
        end;
    if (InJournalBetweenTimes('голодны|Вы почти умираете от голода|Ваш желудок болит|Вы чувствуете слабость|You are absolutely stuffed|You are stuffed|hungry at all|You are a little hungry|You are somewhat hungry|You are REALLY hungry|Your stomash hurts|Your stomash hurts and you feel dizzy|You are starving|You are almost dying of hunger|You are DYING of hunger', HungryJournalTime, Now) <> -1) and (LineName = 'System') and (LineTextColor = 443) then
        begin
            FindTypeEx(Food, $FFFF, Plase, False);
            if FindCount > 0 then  UseObject(finditem);
        end;
    HungryJournalTime := Now;
end;

 

 

Что делать с поддержкой фраз на инглише и командой .lang? У меня версия игры с сайта мидлы, но рыбные стейки называются Fish Steaks, а не жаренная рыба. Может у меня из-за этого не запускается скрипт с ошибкой:

 

22:44:09:664 [black Pearl Hunter]: Compiling

22:44:09:689 [black Pearl Hunter]: Compiler: [Error] (C:\Games\Ultima Online\Stealth\Scripts\Black Pearl.sc at 10:307): 'BEGIN' expected

22:44:09:694 [black Pearl Hunter]: Compiling failed

22:44:09:698 [black Pearl Hunter]: Script Black Pearl.sc stopped successfuly

 

И еще не понятно:

function Hungry(Plase : cardinal) : Boolean;

эту строчку надо заменить на

function Hungry(Backpack);

 

и больше ничего не надо менять в коде?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Black Pearl.sc покажи чтоль...

 

Брал его из этой темы http://middle-earth.ru/forum/index.php?sho...amp;#entry83265

Там же мое последнее сообщение с вопросом по нему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Брал его из этой темы http://middle-earth.ru/forum/index.php?sho...amp;#entry83265

Там же мое последнее сообщение с вопросом по нему

 

Это

 

{$Include 'CheckSave.inc'};

{$Include 'Hungry.inc'};

{$Include 'waitconnection.inc'};

 

поменяй на это

 

{$Include 'CheckSave.inc'}

{$Include 'Hungry.inc'}

{$Include 'waitconnection.inc'}

 

Этого

 

И еще не понятно:

function Hungry(Plase : cardinal) : Boolean;

эту строчку надо заменить на

function Hungry(Backpack);

 

делать не нужно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спасибо! Попробую теперь)

 

Читайте комментарии в скрипте, там всё описано, что и как надо менять и за что отвечает та или иная настройка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

×
×
  • Создать...