Jump to content
Форум шарда Middle-Earth
nepret

Include

Recommended Posts

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;

Share this post


Link to post
Share on other sites

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;

Share this post


Link to post
Share on other sites

Мой 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;

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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;

Share this post


Link to post
Share on other sites
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;

Share this post


Link to post
Share on other sites
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);

 

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

Share this post


Link to post
Share on other sites
Брал его из этой темы 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);

 

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

Share this post


Link to post
Share on other sites
Спасибо! Попробую теперь)

 

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

Share this post


Link to post
Share on other sites

Join the conversation

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

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.

Loading...

×
×
  • Create New...