-
Публикаций
274 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Календарь
Весь контент nepret
-
в первые слышу о таком... дай скрин чтоли
-
зачем убирать то? в игнор их! в игнор!
-
[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. для мининга
-
кстати... срипт будет складывать предметы, только в контейнер который находится в бекпаке uo.exec("moveitem '^0x1b76' '1' '^0x0e75'")
-
сделай лучше через Var
-
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.
-
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.
-
Мой 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;
-
Внимание! Дабы предостеречь от печальных событий рекомендуем двери в дом, в котором будет стоять кастер перекрывать СУНДУКАМИ или другой мебелью, через которую нельзя пройти ГОСТОМ!... (добавленно 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.
-
Тайлор под стелс // 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.
-
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;
-
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 зачем оно нам надо...
-
не особо понравилась ходилка... бывает что чар застревал в 3 деревьях
-
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 (без примеров (их очень мало)) зы: пост выше писался про мой скрипт который я доделать не могу (влом =) )
-
скорей всего ид не высветиться и он будет кастовать в молоко так же в молоко у меня он проверяет 3 переменный: x, y, z z должна быть такая же как и у кастера х и у должны быть не дальше 5 тайлов от кастера если к примеру ты скажешь в системный чат (баф, каст и тд) мой скрипт проигнорирует это +ненадо никаких контейнеров... реги под ноги кастеру (будет ждать пока ему не дадут нужный рег) информативность... есть функция оповещения при заканчивающемся реагенте(настраеваеться)
-
ресать надо для нескольких причин... самая важная это когда в доме начинается замес потом на случай "несчастного случая" ну и если убили при телепорте домой если я доделаю хунгри иклюд, то выкину свой скрипт
-
ты про эту? http://forum.yoko.com.ua/viewtopic.php?t=6742
-
ну а чего вы хотели при 100 STR'е и всего 30% от оставшегося хп для команды stop->wait me full HP это кстати первый раз за более 2 суток тестирования!
-
ты моих минеров в миноке глумил, а я тебе после этого ещё и помогать должен? :angry: