nepret 0 Жалоба Опубликовано 26 сентября, 2012 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. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Pearl 0 Жалоба Опубликовано 11 февраля, 2013 у меня почему-то не работает. просто стоит лечит без перерыва оппонента со 100% хп и все(( (уровень хп при котором нужно лечится ставила естесственно меньше 100% ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты