nepret 0 Report post Posted September 18, 2012 Буду выкладывать сюда свои инклюды которые делались под наш шард. Что такое Include зачем оно нам надо... Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted September 18, 2012 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; Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted September 19, 2012 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; Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted September 21, 2012 Мой 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; Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted October 21, 2012 Перезаливаем инклюд Hungry Добавил выход из блока при отсутствии коннекта (при дисконекте). Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted November 9, 2013 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; Quote Share this post Link to post Share on other sites
Sprite 0 Report post Posted April 10, 2014 а слабо скинуть папку с инклюдами Quote Share this post Link to post Share on other sites
flap 0 Report post Posted May 3, 2014 киньте пожалуйста инклюиды или чектаргет хотя бы Quote Share this post Link to post Share on other sites
_ka 0 Report post Posted May 9, 2014 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; Quote Share this post Link to post Share on other sites
Dvigan 0 Report post Posted July 11, 2014 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); и больше ничего не надо менять в коде? Quote Share this post Link to post Share on other sites
Danke 0 Report post Posted July 11, 2014 Black Pearl.sc покажи чтоль... Quote Share this post Link to post Share on other sites
Dvigan 0 Report post Posted July 13, 2014 Black Pearl.sc покажи чтоль... Брал его из этой темы http://middle-earth.ru/forum/index.php?sho...amp;#entry83265 Там же мое последнее сообщение с вопросом по нему Quote Share this post Link to post Share on other sites
Danke 0 Report post Posted July 13, 2014 Брал его из этой темы 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); делать не нужно Quote Share this post Link to post Share on other sites
Dvigan 0 Report post Posted July 14, 2014 Спасибо! Попробую теперь) Quote Share this post Link to post Share on other sites
nepret 0 Report post Posted July 15, 2014 Спасибо! Попробую теперь) Читайте комментарии в скрипте, там всё описано, что и как надо менять и за что отвечает та или иная настройка. Quote Share this post Link to post Share on other sites