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

nepret

nepret
  • Публикаций

    274
  • Зарегистрирован

  • Посещение

Весь контент nepret

  1. в первые слышу о таком... дай скрин чтоли
  2. зачем убирать то? в игнор их! в игнор!
  3. [strings to continue] You cannot You are The patient What you Who would What you Previous There is no guardzone here Targetting You begin [strings to end] There is That is too far away Cancelled. для мининга
  4. nepret

    [Stealth] Ogorod

    Version + отредактировал 1 пост
  5. кстати... срипт будет складывать предметы, только в контейнер который находится в бекпаке uo.exec("moveitem '^0x1b76' '1' '^0x0e75'")
  6. сделай лучше через Var
  7. nepret

    [Stealth] Ogorod

    UP 12.10.2012 Исправил некоторые баги с посадкой семян Добавил авто-хил бинтами // Create by nepret //////////////////////////////////////////////////////////////////////////////////// // // Ogorod v 1.2 // // Скрипт на вскопку огорода и посадку семян. // //////////////////////////////////////////////////////////////////////////////////// // // !!! АХТУНГ !!! // // Скрипт не предназначен для вскопки территории домов типа Tower и Villa. // Это связано с тем, что обработка земли код крышей (tower) или 2 этажом (villa), // не возможна из-за бага... // //////////////////////////////////////////////////////////////////////////////////// // // Два режима работы: // 1-й режим: Запись, сортировка, сохранение координат огорода // в файл вида "xxxx_yyyy.loc". // Файлы записываються в корневую папку Stealth. // Пример: D:\Ultima Online\Stealth // 1*Прилетаем на огород // 2*Ставим переменную SaveCoorMod = 1 // 3*Запускаем скрипт // 4*Вызываем таргет(юзаем нож, скилл и др... главное, добиваемся появления таргета) // 5*Бегаем по всем местам где можно выращивать реагенты(желательно 2-3 раза) // 6*Как только пробежали по всем тайлам на огороде, сбрасываем таргет // (Можно нажать Esc или кинуть таргет на что либо, главное чтобы он пропал) // 7*Ждём завершение скрипта // // 2-й режим: Определение места положения, загрузка нужного файла с координатами, // копка тайлов, засеивание тайлов. // 1*Проверяем наличие в бекпке // ** Лопаты // ** Семена реагентов // ** Еда (Язык интерфейса должен быть русским .lang) // ** Так же надо помнить о возможном выкапывании элементалей и слизняков // *** Вар включается автоматически // 2*Прилетаем на огород // 3*Запускаем скрипт // //////////////////////////////////////////////////////////////////////////////////// Program ogorod; type TileRecord = Record x,y : integer; end; type RdyTileRecord = Record x,y : integer; end; const //////////////////////////////////////////////////////////////////////////////////// // DistanceCheckLoction = 50; // Дистанция проверки локации. // ////////////////////////////// // Food = $097B; // Тип еды, которую будем кушать в процессе. // $097B - жаренная рыба // $09F2 - жаренное мясо // $171F - бананы // ////////////////////////////// // SaveCoorMod = 0; // Вариант работы скрипта: 1-Запись координат 0-Копка // ////////////////////////////// // DebugMode = 0; // Не трогать! // //////////////////////////////////////////////////////////////////////////////////// var es, ens, ulf, eie, ins, ol, wcif, fs, fh : String; FileNameLoc : String; HungryJournalTime, WaitMsgInJournalToEP : TDateTime; CheckDebug, td : integer; Tiles : array [1..5000] of array [1..2] of Integer; Tile : array [0..5000] of TileRecord; RdyTile : array [0..5000] of RdyTileRecord; Count, locx, locy : integer; htime : TDateTime; procedure RunInfoMSG; begin es := #13#10+'--------------------- Error! -------------------------'; ins := #13#10+'----------------------- Info -------------------------'; ens := #13#10+'------------------------------------------------------'; ulf := #13#10+'>>> Нет файла с разметкой координат под эту локацию...'; eie := #13#10+'>>> Скрипт завершился с ошибкой!'; ol := #13#10+'Локация определенна.'; wcif := #13#10+'Работаем по координатам из фала: '; fs := #13#10+'Нету семян.'; fh := #13#10+'Нету лопаты.'; end; ////////////////////////////////////////////////////////////////////////////////////////////////////// procedure WaitConnection(WaitTime : Integer); begin if Connected then Exit; while not Connected do Wait(1000); wait(WaitTime); end; 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; function Hungry(Plase : cardinal) : Boolean; var VarFood : string; begin 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; 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; 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; ////////////////////////////////////////////////////////////////////////////////////////////////////// function LoadTilesFromFile (FileName : String) : Boolean; var MyStringList : TStringList; i : integer; S : String; X,Y : Integer; begin Result := true; try MyStringList := TStringList.Create; MyStringList.LoadFromFile(FileName); Count := MyStringList.Count; if MyStringList.Count = 0 then Result := false else for i := 0 to MyStringList.Count - 1 do begin S := MyStringList.Strings[i]; X := StrToInt(Copy(S,1,4)); Y := StrToInt(Copy(S,5,5)); Tiles[i+1][1] := X; Tiles[i+1][2] := Y; end; finally MyStringList.Free; end; end; procedure CheckWarMode; begin if not IsWarMode(self) then SetWarMode(true); end; function CheckItems : Boolean; begin repeat FindTypeEx($0F7F, $0000, Backpack, False); if FindCount > 0 then ignore(finditem); until FindCount < 1; FindTypeEx($0F7F, $FFFF, Backpack, False); if FindCount < 1 then begin result := false; AddToSystemJournal(+es+fs+ens); exit; end; FindTypeEx($0F39, $FFFF, Backpack, False); if FindCount < 1 then begin result := false; AddToSystemJournal(+es+fh+ens); exit; end; result := true; end; procedure Heal; var t : integer; begin if not Connected then exit; while true do begin if HP >= Str then exit; if not Connected then exit; FindTypeEx($0E21, $FFFF, backpack, False); if FindCount < 1 then exit; if FindCount > 0 then begin if targetpresent then canceltarget; htime := Now; if not Connected then exit; UseObject(finditem); t := 0; td := 0; repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок Heal > 1 цикл(400)'); wait(100); if not Connected then exit; CheckSave; t := t + 1; until TargetPresent or (t >= 50); if not Connected then exit; WaitTargetObject(self); end; td := 0; t := 0; repeat if Debug(30,100) then AddToSystemJournal('>>> Debug <<< Блок Heal > 2 цикл(414)'); wait(100); if not Connected then exit; CheckSave; t := t + 1; until (InJournalBetweenTimes('You were|You have healed|The patient|You must', htime, Now) <> -1) or (t >= 300) or dead; htime := Now; Hungry(ground); end; end; procedure EarthProcessing; var i, t : integer; begin LoadTilesFromFile(FileNameLoc); for i := 1 to Count do begin Heal; Hungry(backpack); if newMoveXY(Tiles[i][1], Tiles[i][2], True, 0, True) then begin CheckWarMode; if not CheckItems then exit; repeat if TargetPresent then CancelTarget; UseType($0F39, $FFFF); CheckTarget(5); TargetToXYZ(Tiles[i][1], Tiles[i][2], GetZ(self)); WaitMsgInJournalToEP := Now; CheckSave; UseType($0F39, $FFFF); if (CheckTarget(1) = false) or ((InJournalBetweenTimes('Вы вскопали землю|Вы заново обработали землю|Здесь уже вскопано|There is nothing to dig here', WaitMsgInJournalToEP, Now) <> -1)) then break; if not newMoveXY(Tiles[i][1]+1, Tiles[i][2]+1, True, 0, True) then break; until false; t := 0; repeat wait(100); CheckSave; t := t + 1; until (InJournalBetweenTimes('Вы вскопали землю|Вы заново обработали землю|Здесь уже вскопано|There is nothing to dig here', WaitMsgInJournalToEP, Now) <> -1) and (LineName = 'System') or (t >= 100); if (GetX(self) <> Tiles[i][1]) or (GetY(self) <> Tiles[i][2]) then newMoveXY(Tiles[i][1], Tiles[i][2], True, 0, True); if TargetPresent then CancelTarget; UseType($0F7F, $FFFF); FindTypeEx($0ABD, $FFFF, Backpack, False); if FindCount > 0 then MoveItem(finditem, 0, ground, 0,0,0); end; end; end; function CheckLoction : Boolean; var x, y : integer; begin x := GetX(self); for x := x - DistanceCheckLoction to GetX(self) + DistanceCheckLoction do begin y := GetY(self); for y := y - DistanceCheckLoction to GetY(self) + DistanceCheckLoction do begin if FileExists(IntToStr(x)+'_'+IntToStr(y)+'.loc') then begin result := true; FileNameLoc := IntToStr(x)+'_'+IntToStr(y)+'.loc'; AddToSystemJournal(+ins+ol+wcif+FileNameLoc+ens); exit; end; end; end; AddToSystemJournal(+es+ulf+eie+ens); result := false; end; procedure WriteToFile(filepath: string; data: string); var mode: Word; begin if FileExists(filepath) then mode := fmOpenReadWrite else mode := fmCreate; with TFileStream.Create(filepath,mode) do try Seek(0,soFromEnd); WriteBuffer(data,Length(data)); finally Free; end; end; procedure GetCoorTile; var i, x, y : integer; begin ClientPrintEx(self, 5, 1, 'Координаты локации сохранены.'); ClientPrintEx(self, 5, 1, 'Для начала записи координат, вызовите таргет.'); AddToSystemJournal(#13#10+'Координаты локации сохранены.'); AddToSystemJournal(#13#10+'Для начала записи координат, вызовите таргет.'); i := 0; CancelTarget; repeat wait(1000); until TargetPresent; ClientPrintEx(self, 5, 1, 'Начало разметки огорода.'); AddToSystemJournal(#13#10+'Начало разметки огорода.'); repeat if ((x <> GetX(self)) or (y <> GetY(self))) and (GetZ(self) <= 3) then begin if i > 5000 then break; Tile[i].x := GetX(self); Tile[i].y := GetY(self); x := GetX(self); y := GetY(self); i := i + 1; wait(100); end; until not TargetPresent; Count := i - 1; ClientPrintEx(self, 5, 1, 'Конец разметки огорода.'); AddToSystemJournal(#13#10+'Конец разметки огорода.'); end; procedure CheckDubleCoor; var xi, yi, ii, i : integer; begin ClientPrintEx(self, 5, 1, 'Обрабатываю данные...'); AddToSystemJournal(#13#10+'Обрабатываю данные...'); repeat xi := Tile[ii].x; yi := Tile[ii].y; for i := 0 to Count do begin if ii <> i then begin if (xi = Tile[i].x) and (yi = Tile[i].y) then begin Tile[i].x := 0; Tile[i].y := 0; end; end; end; ii := ii + 1; if ii >= Count then break; until false; ii := 0; for i := 0 to Count do begin if (Tile[i].x > 0) and (Tile[i].y > 0) then begin RdyTile[ii].x := Tile[i].x; RdyTile[ii].y := Tile[i].y; ii := ii + 1; end; end; Count := ii - 1; for i := 0 to Count do begin WriteToFile(IntToStr(locx)+'_'+IntToStr(locy)+'.loc', IntToStr(RdyTile[i].x)+' '+IntToStr(RdyTile[i].y)+#13#10); end; ClientPrintEx(self, 5, 1, 'Обработка данных закончена.'); AddToSystemJournal(#13#10+'Обработка данных закончена.'); end; begin if SaveCoorMod = 1 then begin CancelTarget; locx := GetX(self); locy := GetY(self); GetCoorTile; CheckDubleCoor; ClientPrintEx(self, 5, 1, 'Скрипт завершил работу.'); AddToSystemJournal(#13#10+'Скрипт завершил работу.'); CancelTarget; exit; end; RunInfoMSG; if not CheckItems then exit; if not CheckLoction then exit; EarthProcessing; end.
  8. nepret

    [Stealth] Sparring

    UP Version 1.1 // Create by nepret /////////////////////////////////////////////////////////////////////////////////////////////////// // // [Stealth] Sparring v1.1 // ///////////////////////////////////////// MIDDLE-EARTH.RU ///////////////////////////////////////// // // Скрипт для прокачки боевых скиллов. // // Функционал: // 1 скрипт на оба чара (Атакующего и Куклу). // Мытьё бинтов и сладирование в точку где лежат остальные. // Жрём и используем бинты с пола (как истенные свинтусы :)). // Авто-хил. Как только достигнут предел порога хитпоинтов, // аттакующий отключает WarMod и начинает лечить куклу, + авто подхил куклы (двойнох хиллинг). // Автореконект при дисконекте. После реконекта, хилл куклы (если живая). // Автозамена сломаного оружия. // Дистанция при которой будет работать скрипт: 3 тайла. // // Для работы скрипта необходимо: // Оптимальное значение авто-реконнектора: от 2 до 5 секунд. // На полу: // *Бинты // *Еда // *Бочка с водой /////////////////////////////////////////////////////////////////////////////////////////////////// Program Sparring; const /////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// Настройка переменных //////////////////////////////////////// // VarHeal = 0; // 0-Счёт по кол-ву хп; 1-По Процентному соотношению // //////////////// // MinHP = 40; // Если "VarHeal = 0", то ставим количество хп при котором надо лечиться. // Eсли "VarHeal = 1", то ставим количество процентов при котором начинаем лечиться. // //////////////// // // Тип еды, которую будем кушать в процессе. Food = $097B; // $097B - жаренная рыба // $09F2 - жаренное мясо // $171F - бананы // //////////////// // Если не знаете как этом пользоваться, // оставте 0. DebugMode = 1;// Выдавать информацию в системный журнал. // Включать при отслеживании ошибок в скрипте. // ////////////////////////////////////// Конец настроек ///////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// var CharX, CharY, IDDoll, Role, CheckVarHeal, Error, RLayer, LLayer, BX, BY, BZ, CheckDebug, td, t : integer; NameRWeapon, NameLWeapon : String; htime, ftime, HungryJournalTime : TDateTime; /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////// Начало //////////////////////////////////////////////// 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; 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; procedure WaitConnection(WaitTime : Integer); begin if Connected then Exit; while not Connected do Wait(1000); {WaitTime - Waiting After Connected} wait(WaitTime); end; 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; function Hungry(Plase : cardinal) : Boolean; var VarFood : string; begin 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; //////////////////////////////////////////// конец //////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// procedure CheckBB; begin if not Connected then exit; FindTypeEx($0E7B, $FFFF, Ground, False); if FindCount < 1 then begin AddToSystemJournal('>>> На полу нет бочки с водой! Мне негде мыть бинты.'); exit; end; FindTypeEx($0E20, $FFFF, Backpack, False); if FindFullQuantity < 1000 then exit; if FindFullQuantity >= 1000 then begin t := 0 td := 0 repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок CheckBB > 1 цикл(185)'); FindTypeEx($0E20, $FFFF, Backpack, False); if FindCount > 0 then begin if not Connected then exit; UseObject(finditem); CheckTarget(5); FindTypeEx($0E7B, $FFFF, Ground, False); WaitTargetObject(finditem); wait(1000); end; wait(100); t := t + 1; until (FindCount < 1) or (t >= 50); t := 0 td := 0 repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок CheckBB > 2 цикл(202)'); if not Connected then exit; FindTypeEx($0E21, $FFFF, Backpack, False); if FindCount > 0 then begin MoveItem(finditem, 0, Ground, BX,BY,BZ); wait(1000); end; t := t + 1; wait(100); until (FindCount < 1) or (t >= 50); end; end; function CheckDead : Boolean; begin if not Connected then exit; if Role = 1 then begin if GetHP(IDDoll) < 1 then begin Error := 1; result := true; SetGlobal('stealth',IntToStr(self),'0') AddToSystemJournal('>>> Кукла мертва! Скрипт завершает работу!'); end; end; if Role = 0 then begin if Dead then begin Error := 1; result := true; SetGlobal('stealth',IntToStr(self),'0') AddToSystemJournal('>>> Я мёртв! Скрипт завершает работу!'); end; end; end; procedure CheckArm; var t : integer; begin if not Connected then exit; if CheckDead then exit; if RLayer <> 0 then begin if ObjAtLayer(RhandLayer) = 0 then begin FindTypeEx(RLayer, $FFFF, Backpack, False); if FindCount > 0 then begin Equip(RhandLayer,finditem); td := 0; t := 0; repeat if not Connected then exit; if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок CheckArm > 1 цикл(259)'); wait(100); CheckSave; if CheckDead then exit; t := t + 1 until (ObjAtLayer(RhandLayer) > 0) or (t >= 50) or dead; end else begin Error := 1; AddToSystemJournal('>>> В бекпаке больше нет '+ NameRWeapon +'! Скрипт дальше работать НЕ БУДЕТ!'); exit; end; end; end; if LLayer <> 0 then begin if ObjAtLayer(LhandLayer) = 0 then begin FindTypeEx(LLayer, $FFFF, Backpack, False); if FindCount > 0 then begin Equip(LhandLayer,finditem); t := 0; td := 0; repeat if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок CheckArm > 2 цикл(285)'); wait(100); CheckSave; if CheckDead then exit; t := t + 1 until (ObjAtLayer(LhandLayer) > 0) or (t >= 50) or dead; end else begin Error := 1; AddToSystemJournal('>>> В бекпаке больше нет '+ NameLWeapon +'! Скрипт дальше работать НЕ БУДЕТ!'); exit; end; end; end; end; procedure SaveArm; begin if not Connected then exit; if (ObjAtLayer(RhandLayer) <> 0) or (ObjAtLayer(LhandLayer) <> 0) then begin AddToSystemJournal('Будем качаться с оружием в руках.'); if ObjAtLayer(RhandLayer) <> 0 then begin RLayer := GetType(ObjAtLayer(RhandLayer)); ClickOnObject(ObjAtLayer(RhandLayer)); CheckSave; wait(2000); NameRWeapon := GetName(ObjAtLayer(RhandLayer)); FindTypeEx(RLayer, $FFFF, Backpack, False); if FindCount >= 0 then AddToSystemJournal('В бекпаке найдено: '+ IntToStr(FindCount) + ' "'+ NameRWeapon + '".'); end; if ObjAtLayer(LhandLayer) <> 0 then begin LLayer := GetType(ObjAtLayer(LhandLayer)); ClickOnObject(ObjAtLayer(LhandLayer)); CheckSave; wait(2000); NameLWeapon := GetName(ObjAtLayer(LhandLayer)); FindTypeEx(LLayer, $FFFF, Backpack, False); if FindCount >= 0 then AddToSystemJournal('В бекпаке найдено: '+ IntToStr(FindCount) + ' "'+ NameLWeapon + '".'); end; end else begin AddToSystemJournal('Будем качаться без оружия в руках.'); end; end; procedure CheckRes; begin if not Connected then exit; FindTypeEx($0E21, $FFFF, Ground, False); if FindCount < 1 then begin Error := 1; AddToSystemJournal('>>> На полу нет бинтов! Скрипт дальше работать НЕ БУДЕТ!'); end; BX := GetX(finditem); BY := GetY(finditem); BZ := GetZ(finditem); if not Connected then exit; FindTypeEx(Food, $FFFF, Ground, False); if FindCount < 1 then begin Error := 1; AddToSystemJournal('>>> На полу нет еды! Скрипт дальше работать НЕ БУДЕТ!'); end; if CheckDead then Error := 1; if Error = 1 then begin if not Connected then exit; if WarMode then SetWarMode(False); SetGlobal('stealth',IntToStr(IDDoll),'0'); exit; end; Hungry(Ground); end; function CheckRoleHeal : Boolean; begin if not Connected then exit; if Role = 1 then begin if GetGlobal('stealth',IntToStr(IDDoll)) = IntToStr(0) then result := true; exit; end; if Role = 0 then begin if HP < MaxHP then result := true; exit; end; result := false; end; procedure Heal; var t : integer; begin if not Connected then exit; while CheckRoleHeal = true do begin if CheckDead then exit; if not Connected then exit; FindTypeEx($0E21, $FFFF, Ground, False); if FindCount > 0 then begin if targetpresent then canceltarget; htime := Now; if not Connected then exit; UseObject(finditem); t := 0; td := 0; repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок Heal > 1 цикл(400)'); wait(100); if not Connected then exit; CheckSave; if CheckDead then exit; t := t + 1; until TargetPresent or (t >= 50); if not Connected then exit; if Role = 1 then WaitTargetObject(IDDoll); if Role = 0 then WaittargetSelf; end; td := 0; t := 0; repeat if Debug(30,100) then AddToSystemJournal('>>> Debug <<< Блок Heal > 2 цикл(414)'); wait(100); if not Connected then exit; CheckSave; t := t + 1; until (InJournalBetweenTimes('You were|You have healed|The patient|You must', htime, Now) <> -1) or (t >= 300) or dead; htime := Now; end; CheckBB; end; procedure CheckRole; var i : integer; TypeDoll : array [0..1] of cardinal; begin if not Connected then exit; if PredictedDirection = 0 then begin CharX := GetX(self); CharY := GetY(self) - 1; end; if PredictedDirection = 4 then begin CharX := GetX(self); CharY := GetY(self) + 1; end; if PredictedDirection = 2 then begin CharX := GetX(self) + 1; CharY := GetY(self); end; if PredictedDirection = 6 then begin CharX := GetX(self) - 1; CharY := GetY(self); end; if PredictedDirection = 1 then begin CharX := GetX(self) + 1; CharY := GetY(self) - 1; end; if PredictedDirection = 5 then begin CharX := GetX(self) - 1; CharY := GetY(self) + 1; end; if PredictedDirection = 3 then begin CharX := GetX(self) + 1; CharY := GetY(self) + 1; end; if PredictedDirection = 7 then begin CharX := GetX(self) - 1; CharY := GetY(self) - 1; end; if WarMode then SetWarMode(False); TypeDoll[0] := $0190; TypeDoll[1] := $0191; Ignore(self); for i := 0 to 1 do begin td := 0; repeat if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок CheckRole > 1 цикл(479)'); wait(100); CheckSave; if not Connected then exit; FindTypeEx(TypeDoll[i], $FFFF, Ground, False) if FindCount > 0 then begin if (GetX(finditem) = CharX) and (GetY(finditem) = CharY) and (GetHP(finditem) > 0) then begin IDDoll := finditem; SetGlobal('stealth',IntToStr(IDDoll),'0'); Role := 1; SaveArm; AddToSystemJournal('Выбрана роль атакующего...'); exit; end else begin Ignore(finditem); end; end; until FindCount < 1; end; SetGlobal('stealth',IntToStr(self),'0'); Role := 0; AddToSystemJournal('Выбрана роль куклы...'); Heal; end; procedure PlayRole; begin if Role = 1 then begin if CheckDead then exit; CheckRes; CheckArm; if Error = 1 then exit; if GetGlobal('stealth',IntToStr(IDDoll)) = IntToStr(1) then begin if not Connected then exit; if (WarTargetID <> IDDoll) then attack(IDDoll); end else begin td := 0; t := 0; repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок PlayRole > 1 цикл(526)'); CheckSave; if not Connected then exit; wait(100); t := t + 1; if WarMode then SetWarMode(False); until (WarMode = false) or (t >= 100); Heal; end; end; if Role = 0 then begin if CheckDead then exit; CheckRes; if Error = 1 then exit; if not Connected then exit; if HP <= CheckVarHeal then begin repeat SetGlobal('stealth',IntToStr(self),'0'); CheckSave; Heal; CheckRes; if (Error = 1) or CheckDead then exit; if not Connected then exit; until HP = MaxHP; end; SetGlobal('stealth',IntToStr(self),'1'); end; end; begin Error := 0; htime := Now; ftime := Now; SetARStatus(true); SetPauseScriptOnDisconnectStatus(false); if not Connected then WaitConnection(10000); if VarHeal = 1 then begin CheckVarHeal := GetMaxHP(Self)*MinHP/100; end else begin CheckVarHeal := MinHP; end; CheckRole; UOSay('Op'); repeat if not Connected then begin AddToSystemJournal('>>> Error Connected! Связь с сервером потерена.'); if GetARStatus then AddToSystemJournal('>>> Пробую востановить соединение с сервером...'); if Role = 1 then SetGlobal('stealth',IntToStr(IDDoll),'0'); if Role = 0 then SetGlobal('stealth',IntToStr(self),'0'); WaitConnection(100); UOSay('Op'); if Connected then AddToSystemJournal('>>> Соединение с сервером востановленно!'); if Role = 1 then begin td := 0; t := 0; repeat if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Главный блок > 1 цикл(587)'); CheckSave; WaitConnection(100); wait(100); t := t + 1; if WarMode then SetWarMode(False); until (WarMode = false) or (t >= 100); end; Heal; wait(10000); end; if Error = 1 then begin SetARStatus(false); Disconnect; exit; end; PlayRole; wait(100); until false; end.
  9. nepret

    Include

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

    [Stealth] AutoBaffAndRes

    Внимание! Дабы предостеречь от печальных событий рекомендуем двери в дом, в котором будет стоять кастер перекрывать СУНДУКАМИ или другой мебелью, через которую нельзя пройти ГОСТОМ!... (добавленно MeSSiR) Кастер рессает всех, кто находится рядом с ним на расстоянии 2 клеток... проверок на то что персонаж не "заслонный казачок" в скрипте нет! ИМЕЙТЕ ВВЕДУ! // Create by nepret /////////////////////////////////////////////////////////////////// // // [Stealth] AutoBaffAndRes v1.4 // ///////////////////////// MIDDLE-EARTH.RU ///////////////////////// // // Скрипт Автоматического Бафа, ребафа и резуректа игроков. (Для дома) // // Функционал: // Каст на игрока Bless + Protection // Перекастовка Bless // Воскрешение игрока Resurrection // (настройка любого количества фраз на полный баф и ребаф блесса) // // *Настройка +Есть -Нет // Оповещение о том что заканчивается реагенты\еда. Вывод информации о том что кончается и сколько реагентов осталось.(+) // Проверка маны перед каждым бафом. На каждый каст, своя проверка на мин-е кол-во маны для этого каста. (-) // Проверка на наличие реагентов для каста. Если искомых не найдено, выводит сообщения каких именно реагентов нет. (-) // *** Настройка сумки с реагентами. (+) // *** Ожидание появления реагентов в сумке\на полу(берёт с пола, перекладывает в сумку).(-) // Дистанция при которой бафер будет реагировать на команды: 4 тайла. (+) // // Для работы скрипта необходимо: // // Настроеть под себя переменные ниже. // Делать то, что просит бафер(скрипт). // // Спасибо за помощь в отладке скрипта: MeSSiR'y и Kallish'у. /////////////////////////////////////////////////////////////////// Program AutoBaffAndRes; const /////////////////////////////////////////////////////////////////// ////////////////////// Настройка переменных /////////////////////// // WorkDistance = 4; // Дистанция при которой реагировать на команды. // на команды. ///////////////////////// // // Фразы при котором давать полный обкаст. FullCastPh = 'баф'; // Указать одну или несколько фраз, // несколько фраз указывать через разделитель "|". // ///////////////////////// // // Фразы при котором давать дополнительный блесс. ReCastBless = 'блес'; // Указать одну или несколько фраз, // несколько фраз указывать через разделитель "|". // ///////////////////////// // // При каком минимальном колличестве реагентов, RegsCountInfo = 30; // предупреждать в чат о том что он заканчивается? // 0-Не предупреждать. // ///////////////////////// // // Если реагенты хранятся в контейнере(на чаре), // то укажите его ID. Если в бекпаке, то 0. // Указывать только так: ResCount = $7E895CA7; // Бекпак -> Сумка с реагентами // Вариант : // Бекпак -> Сумка -> Сумка с реагентами // не прокатит... // /////////////////////////////////////////////////////////////////// // Если не знаете как этим пользоваться, // оставте 0. DebugMode = 0; // Выдавать информацию в системный журнал. // Включать при отслеживании ошибок в скрипте. // ///////////////////////// Конец настроек ////////////////////////// /////////////////////////////////////////////////////////////////// var fbjtime, rbjtime : TDateTime; t, ResCountVar, ID : integer; regs : array [0..5] of cardinal; regsname : array [0..5] of String; {$Include 'all.inc'} procedure CheckResInfo; var i, r, rc, h : integer; Info, CountInfo, CountInfoFood : string; begin if not Connected then exit; if RegsCountInfo < 1 then exit; if not Connected then exit; for i := 0 to 5 do begin if not Connected then exit; if i = 5 then h := Backpack; if i < 5 then h := ResCountVar; FindTypeEx(regs[i], $FFFF, h, false); if FindFullQuantity > RegsCountInfo then rc := rc + 1; end; if rc >= 6 then exit; rc := 0; if not Connected then exit; for i := 0 to 5 do begin if i = 5 then h := Backpack; if i < 5 then h := ResCountVar; FindTypeEx(regs[i], $FFFF, h, false); if (FindFullQuantity <= RegsCountInfo) and (FindFullQuantity > 0) then begin if not Connected then exit; if i < 5 then begin CountInfo := CountInfo+' | '++IntToStr(FindFullQuantity); info := Info+' | '++ regsname[i]; r := 1; end else begin CountInfoFood := 'Еда: '+IntToStr(FindFullQuantity); end; rc := 1; end; end; checksave; if rc = 1 then begin UOSay('Заканчивается: '+CountInfoFood); if r = 1 then begin UOSay(info+' | '); UOSay(CountInfo+' | '); end; if not Connected then exit; end; end; procedure CheckRes; var t, ts, c, i, y, rc, orc : integer; info, ci : string; begin if not Connected then exit; for i := 0 to 4 do begin if not Connected then exit; FindTypeEx(regs[i], $FFFF, ResCountVar, false); if FindFullQuantity > 0 then rc := rc + 1; end; if rc >= 5 then exit; y := 0; repeat rc := 0; for i := 0 to 4 do begin if not Connected then exit; FindTypeEx(regs[i], $FFFF, ResCountVar, false); if FindFullQuantity > 0 then rc := rc + 1; if FindFullQuantity < 1 then begin FindTypeEx(regs[i], $FFFF, Ground, false); if FindCount > 0 then begin if not Connected then exit; MoveItem(finditem, 0, ResCountVar, 0,0,0); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок CheckRes > 1 цикл (105)'); wait(100); t := t + 1; FindTypeEx(regs[i], $FFFF, ResCountVar, false); until (FindFullQuantity > 0) or (t >= 20); UOSay('Взял "'+ regsname[i] +'"!'); if not t <= 50 then rc := rc + 1; if orc = 1 then orc := 0; end else begin if y = 0 then c := c + 1; info := info+' '++ regsname[i]; end; end; end; if rc >= 5 then UOSay('Работаем..'); if rc >= 5 then exit; if ts = 0 then begin if c = 1 then ci := 'кончился'; if c > 1 then ci := 'кончились'; UOSay('У меня '+ ci +':'); UOSay(info); UOSay('Кинь мне под ноги, или закинь в ручную.'); wait(3000); end; if ts >= 166 then ts := 83; if (ts = 83) or (orc = 0) then begin if orc = 0 then orc := 1; checksave; hungry(backpack); UOSay(info); end; info := ''; checksave; wait(100); ts := ts + 1; if not Connected then exit; until false; end; function CheckMP(MinMP : Integer) : Boolean; begin if not Connected then exit; if Mana < MinMP then begin if not Connected then exit; result := true; UOSay('Маны малавато... надо бы по медитировать ()'); td := 0; repeat if not Connected then exit; checksave; if Debug(60,2000) then AddToSystemJournal('>>> Debug <<< Блок CheckMP > 1 цикл (160)'); UseSkill('Meditation'); wait(2000); UOSay('Mana '+ IntToStr(Mana) +'/'+ IntToStr(MaxMana)); until Mana = MaxMana; UOSay('Ну вот, другое дело :)'); end; if not Connected then exit; end; function CheckTarget(SecTime : integer) : Boolean; begin SecTime := SecTime * 10; td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(SecTime/10,100) then AddToSystemJournal('>>> Debug <<< Блок CheckTarget > 1 цикл (178)'); 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; procedure Resurrect; var i : integer; PlayerGhost : array [0..1] of cardinal; begin PlayerGhost[0] := $0192; PlayerGhost[1] := $0193; for i := 0 to 1 do begin if not Connected then exit; CheckRes; FindTypeEx(PlayerGhost[i], $FFFF, Ground, False); if FindCount > 0 then begin repeat if not Connected then exit; if CheckMP(50) then begin if not Connected then exit; FindTypeEx(PlayerGhost[i], $FFFF, Ground, False); if FindCount < 1 then exit; end; if not Connected then exit; CancelTarget; Cast('Resurrection'); if not CheckTarget(6) then begin if DebugMode = 1 then AddToSystemJournal('>>> Debug <<< Блок Resurrect > 1 цикл ожидания таргета (214)'); exit; end; TargetToObject(finditem); UOSay('Mana '+ IntToStr(Mana) +'/'+ IntToStr(MaxMana)); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок Resurrect > 2 цикл (224)'); wait(100); t := t + 1; until (GetHP(finditem) > 0) or (t >= 50); if GetHP(finditem) = 0 then UOSay('Ты кнопку жать будеш или как?! Если нет, то отойди!'); FindTypeEx(PlayerGhost[i], $FFFF, Ground, False); if not Connected then exit; until (GetHP(finditem) > 0) or (FindCount < 1); end; end; if not Connected then exit; end; procedure Recast; begin if InJournalBetweenTimes(ReCastBless, rbjtime, Now) <> -1 then begin if not Connected then exit; ID := LineID; CheckRes; if ID <= 0 then exit; if LineName = 'System' then exit; if GetZ(self) <> GetZ(ID) then exit; if (GetX(ID) < GetX(self) - WorkDistance) or (GetX(ID) > GetX(self) + WorkDistance) or (GetY(ID) < GetY(self) - WorkDistance) or (GetY(ID) > GetY(self) + WorkDistance) then begin td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок Recast > 1 цикл (254)'); wait(100); t := t + 1; until (GetX(ID) >= GetX(self) - WorkDistance) and (GetX(ID) <= GetX(self) + WorkDistance) and (GetY(ID) >= GetY(self) - WorkDistance) and (GetY(ID) <= GetY(self) + WorkDistance) or (t >= 20); if t >= 20 then exit; if not Connected then exit; end; if CheckMP(9) then begin if (GetZ(self) <> GetZ(ID)) or (GetX(ID) < GetX(self) - WorkDistance) or (GetX(ID) > GetX(self) + WorkDistance) or (GetY(ID) < GetY(self) - WorkDistance) or (GetY(ID) > GetY(self) + WorkDistance) then begin UOSay(' '); UOSay('ммм...'); UOSay('Я тебя потерял...'); rbjtime := Now; exit; end; end; if not Connected then exit; CancelTarget; Cast('Bless'); if not CheckTarget(6) then begin if DebugMode = 1 then AddToSystemJournal('>>> Debug <<< Блок Recast > 1 цикл ожидания таргета (277)'); exit; end; UOSay('Mana '+ IntToStr(Mana) +'/'+ IntToStr(MaxMana)); TargetToObject(ID); CheckRes; rbjtime := Now; CheckResInfo; end; if not Connected then exit; end; procedure FullBaff; begin if not Connected then exit; if InJournalBetweenTimes(FullCastPh, fbjtime, Now) <> -1 then begin if not Connected then exit; ID := LineID; CheckRes; if ID <= 0 then exit; if LineName = 'System' then exit; if GetZ(self) <> GetZ(ID) then exit; if (GetX(ID) < GetX(self) - WorkDistance) or (GetX(ID) > GetX(self) + WorkDistance) or (GetY(ID) < GetY(self) - WorkDistance) or (GetY(ID) > GetY(self) + WorkDistance) then begin td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок FullBaff > 1 цикл (307)'); wait(100); t := t + 1; until (GetX(ID) >= GetX(self) - WorkDistance) and (GetX(ID) <= GetX(self) + WorkDistance) and (GetY(ID) >= GetY(self) - WorkDistance) and (GetY(ID) <= GetY(self) + WorkDistance) or (t >= 20); if t >= 20 then exit; end; if not Connected then exit; if CheckMP(15) then begin if (GetZ(self) <> GetZ(ID)) or (GetX(ID) < GetX(self) - WorkDistance) or (GetX(ID) > GetX(self) + WorkDistance) or (GetY(ID) < GetY(self) - WorkDistance) or (GetY(ID) > GetY(self) + WorkDistance) then begin UOSay(' '); UOSay('ммм...'); UOSay('Я тебя потерял...'); fbjtime := Now; exit; end; end; if not Connected then exit; CancelTarget; Cast('Protection'); if not CheckTarget(6) then begin if DebugMode = 1 then AddToSystemJournal('>>> Debug <<< Блок FullBaff > 1 цикл ожидания таргета (330)'); exit; end; TargetToObject(ID); if not Connected then exit; CancelTarget; Cast('Bless'); if not CheckTarget(6) then begin if DebugMode = 1 then AddToSystemJournal('>>> Debug <<< Блок FullBaff > 2 цикл ожидания таргета (339)'); exit; end; UOSay('Mana '+ IntToStr(Mana) +'/'+ IntToStr(MaxMana)); TargetToObject(ID); CheckRes; fbjtime := Now; CheckResInfo; end; if not Connected then exit; end; procedure CheckSettingGag; begin if not Connected then WaitConnection(5); if ResCount > 0 then begin ResCountVar := ResCount; UseObject(Backpack); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(6,100) then AddToSystemJournal('>>> Debug <<< Блок CheckSettingGag > 1 цикл (363)'); wait(100); t := t + 1; until (LastContainer = Backpack) or (t >= 50); UseObject(ResCountVar); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(6,100) then AddToSystemJournal('>>> Debug <<< Блок CheckSettingGag > 2 цикл (373)'); wait(100); t := t + 1; until (LastContainer = ResCountVar) or (t >= 50); end else begin ResCountVar := Backpack; UseObject(ResCountVar); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(6,100) then AddToSystemJournal('>>> Debug <<< Блок CheckSettingGag > 3 цикл (387)'); wait(100); t := t + 1; until (LastContainer = ResCountVar) or (t >= 50); end; end; begin regs[0] := $0F85; regs[1] := $0F84; regs[2] := $0F8C; regs[3] := $0F86; regs[4] := $0F7B; regs[5] := Food; regsname[0] := 'GI'; regsname[1] := 'GA'; regsname[2] := 'SA'; regsname[3] := 'MR'; regsname[4] := 'BM'; regsname[5] := 'Провиант'; if not GetARStatus then SetARStatus(true); fbjtime := Now; rbjtime := Now; CheckSettingGag; repeat if not Connected then begin fbjtime := Now; rbjtime := Now; WaitConnection(5); CheckSettingGag; end; hungry(backpack); CheckRes; FullBaff; Recast; Resurrect; wait(100); until false; end.
  11. nepret

    Tailoring [Injection]

    Тайлор под стелс // Create by nepret // За основу брался скрипт MeSSiR'а на Inject'е из этого поста: // http://middle-earth.ru/forum/index.php?showtopic=6502&view=findpost&p=79565 ///////////////////////// MIDDLE-EARTH.RU ///////////////////////// // Скрипт для прокачки скилла Tailoring. // Работает по принципу изготовления необходимой вещи // (в зависимости от уровня скилла) и разрезания ее обратно // в ткань. // Для работы скрипта необходимо: // - Include Hungry, CheckSave, WaitConnection (http://middle-earth.ru/forum/index.php?showtopic=6676) // - Побольше ткани на пол возле себя // - Ножницы в сумку (желательно много, т.к. часто ломаются) // - Иголки (Sewing Kit) в сумке ( 1 шт. вполне хватит) // Не забудьте, что после скилла в 100 необходимо использовать // Lesser Power, Power, Greater Power и Ultimate скроллы. // Желательно для скрипта: // - Еда /////////////////////////////////////////////////////////////////// Program Tailoring; const ////////////////////// Настройка переменных /////////////////////// // stop = 120; // Стоп-отметка уровня скилла, когда нужно // будет остановить прокачку для того, чтоб // применить Power скроллы. Если не нужна, // то поставить значение 120. // /////////////////////////////////////////////////////////////////// // DebugMode = 0; // Выдавать информацию в системный журнал // Включать при отслеживании ошибок в скрипте. // ///////////////////////// Конец настроек ////////////////////////// /////////////////////////////////////////////////////////////////// var t : integer; {$Include 'all.inc'} function CheckSkill : Boolean; begin if not Connected then exit; if GetSkillValue('Tailoring') >= stop then begin AddToSystemJournal('Стоп-отметка! Скилл прокачался до: '+FloatToStrF(GetSkillValue('Tailoring'), ffgeneral, 4, 2)); ClientPrintEx(self, 190, 200, 'Стоп-отметка! Скилл прокачался до: '+FloatToStrF(GetSkillValue('Tailoring'), ffgeneral, 4, 2)); result := true; exit; end; result := false; end; procedure CheckRes; var CheckItemRes : array [0..2] of cardinal; CheckItemResInfo : array [0..2] of string; i : integer; begin CheckItemRes[0] := $0F9D; CheckItemRes[1] := $0F9E; CheckItemResInfo[0] := 'В сумке нет "Катушки с нитками"(Sewing Kit)'; CheckItemResInfo[1] := 'В сумке нет "Ножиниц"(Scissors)'; if not Connected then exit; for i := 0 to 1 do begin FindTypeEx(CheckItemRes[i], $FFFF, Backpack, True); if FindCount < 1 then begin AddToSystemJournal('>>> '+CheckItemResInfo[i]); ClientPrintEx(self, 190, 200, CheckItemResInfo[i]); td := 0; repeat if not Connected then exit; checksave; if Debug(10,1000) then AddToSystemJournal('>>> Debug <<< Блок CheckRes > 1 цикл (76)'); wait(1000); FindTypeEx(CheckItemRes[i], $FFFF, Backpack, True); until FindCount > 0; AddToSystemJournal('Продолжаем работу'); ClientPrintEx(self, 190, 200, 'Продолжаем работу'); end; end; FindTypeEx($1766, $FFFF, Ground, False); if FindFullQuantity < 20 then begin AddToSystemJournal('>>> На полу нет "Ткани"(Сut Сloths)'); ClientPrintEx(self, 190, 200, 'На полу нет "Ткани"(Сut Сloths)'); td := 0; repeat if not Connected then exit; checksave; if Debug(10,1000) then AddToSystemJournal('>>> Debug <<< Блок CheckRes > 3 цикл (93)'); wait(1000); FindTypeEx($1766, $FFFF, Ground, False); until FindFullQuantity > 100; AddToSystemJournal('Продолжаем работу'); ClientPrintEx(self, 190, 200, 'Продолжаем работу'); end; end; procedure GetCloths; var CountCloths : integer; begin FindTypeEx($1766, $FFFF, Backpack, False); if FindQuantity < 20 then begin if not Connected then exit; CountCloths := 20 - FindQuantity; FindTypeEx($1766, $FFFF, Ground, False); MoveItem(finditem, CountCloths, Backpack,0,0,0); end; td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(5,100) then AddToSystemJournal('>>> Debug <<< Блок GetCloths > 1 цикл (119)'); wait(100); t := t + 1; FindTypeEx($1766, $FFFF, Backpack, False); until (FindQuantity >= 20) or (t >= 100); end; 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 > 1 цикл (136)'); 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; procedure DestroyItem; var CraftedItem : array [0..2] of cardinal; si, i : integer; begin CraftedItem[0] := $1EFD; CraftedItem[1] := $1F03; CraftedItem[2] := $0ABD; for i := 0 to 2 do begin repeat if not Connected then exit; FindTypeEx(CraftedItem[i], $FFFF, Backpack, False); if FindCount > 0 then begin si := FindCount; repeat if not Connected then exit; CheckRes; CancelTarget; UseType($0F9E, $FFFF); CheckTarget(5); until TargetPresent; FindTypeEx(CraftedItem[i], $FFFF, Backpack, False); WaitTargetObject(finditem); td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок DestroyItem > 1 цикл (175)'); wait(100); FindTypeEx(CraftedItem[i], $FFFF, Backpack, False); until (FindCount < si) or (t >= 50); end; if not Connected then exit; FindTypeEx(CraftedItem[i], $FFFF, Backpack, False); until FindCount = 0; end; end; procedure Tailor; var cjtime : TDateTime; begin DestroyItem; GetCloths; repeat if not Connected then exit; CheckRes; CancelTarget; UseType($0F9D, $FFFF); CheckTarget(5); until TargetPresent; FindTypeEx($1766, $FFFF, Backpack, False); WaitTargetObject(finditem); cjtime := Now; td := 0; repeat if not Connected then exit; checksave; if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок Tailor > 2 цикл (206)'); wait(100); until MenuPresent; if GetSkillValue('Tailoring') <= 60 then begin WaitMenu('Choose a category.','shirts'); WaitMenu('What','Fancy Shirt'); end; if GetSkillValue('Tailoring') <= 90 then begin WaitMenu('Choose','shirts'); WaitMenu('What','Robe'); end; if GetSkillValue('Tailoring') < 120 then begin WaitMenu('Choose','carpets'); WaitMenu('Select','carpet1'); WaitMenu('Select','carpet'); end; td := 0; t := 0; repeat if not Connected then exit; checksave; if Debug(10,100) then AddToSystemJournal('>>> Debug <<< Блок Tailor > 3 цикл (230)'); wait(100); t := t + 1; until (InJournalBetweenTimes('You create|You failed|You make|destroy', cjtime, Now) <> -1) or (t >= 50); if not Connected then exit; end; begin FindDistance := 1; repeat if not Connected then WaitConnection(5); if CheckSkill then exit; hungry(backpack); CheckRes; Tailor; until false; end.
  12. nepret

    Include

    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;
  13. nepret

    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;
  14. nepret

    Include

    Буду выкладывать сюда свои инклюды которые делались под наш шард. Что такое Include зачем оно нам надо...
  15. не особо понравилась ходилка... бывает что чар застревал в 3 деревьях
  16. nepret

    Программа Stealth

    http://stealth.od.ua функции := http://stealth.od.ua/Doc:RU/Api (с примерами) "все" функции := http://stealth.od.ua/wiki/doku.php?id=functions (c примерами) ОБСАЛЮТНО все функции := http://stealth.od.ua/forum/viewtopic.php?t=1220 (без примеров (их очень мало)) зы: пост выше писался про мой скрипт который я доделать не могу (влом =) )
  17. nepret

    Программа Stealth

    скорей всего ид не высветиться и он будет кастовать в молоко так же в молоко у меня он проверяет 3 переменный: x, y, z z должна быть такая же как и у кастера х и у должны быть не дальше 5 тайлов от кастера если к примеру ты скажешь в системный чат (баф, каст и тд) мой скрипт проигнорирует это +ненадо никаких контейнеров... реги под ноги кастеру (будет ждать пока ему не дадут нужный рег) информативность... есть функция оповещения при заканчивающемся реагенте(настраеваеться)
  18. nepret

    Программа Stealth

    ресать надо для нескольких причин... самая важная это когда в доме начинается замес потом на случай "несчастного случая" ну и если убили при телепорте домой если я доделаю хунгри иклюд, то выкину свой скрипт
  19. ты про эту? http://forum.yoko.com.ua/viewtopic.php?t=6742
  20. nepret

    Программа Stealth

    а у меня длиннее получился
  21. nepret

    Программа Stealth

    ну а чего вы хотели при 100 STR'е и всего 30% от оставшегося хп для команды stop->wait me full HP это кстати первый раз за более 2 суток тестирования!
  22. ты моих минеров в миноке глумил, а я тебе после этого ещё и помогать должен? :angry:
×
×
  • Создать...