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

Поиск сообщества

Показаны результаты для тегов 'python'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Административный
    • Важная информация + новости
    • Middle-Earth Development
    • Предложения и пожелания
  • Игровой
    • Основной форум
    • FAQ
    • Болталка
    • Рынок
    • Турнирный раздел
    • РПГ и квесты
  • Скрипты для вспомогательных програм
    • Общий
    • Injection
    • Stealth
    • Orion
  • Проблемы и наказания
    • Технические вопросы
    • Баны, jail и наказания
    • Жалобы на стафф

Поиск результатов в...

Поиск результатов, которые содержат...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


Интересы

Найдено: 6 результатов

  1. stealth version 9.6.1 (<- делался на версии) Копирования рунбуки и ... не только... Как запустить: читать тут Что делает: Летает по рунам из первой рунбуки, маркает на точках прилёта руны, переименовывает их и запихивает во вторую. Если чара убили или упал сервак, после повторного запуска продолжит с руны на которой остановился. (смотрит по числу рун, а не по названию, мешать их не советую) Может летать как по регам так и по скролам, есть в настройках. По завершению, можно отправить домой. с.м. настройки. Инструкция по применению: Руны в пак. Заправить рунбуку скролами и бекпак регами. (для рекола и для Марка) Подправить настройки под себя. Запустить скрипт. "и ... не только... " будет ниже. from datetime import datetime from py_stealth import * class Runebook: def __init__(self, runebook_id: int): self._runebook_id = runebook_id self.info_runebook = {} def __call__(self, *args, **kwargs): pass @staticmethod def _check_connected() -> bool: if Connected(): return True print("Ошибка: нет соединения с сервером.") return False def _open_backpack(self, pack=None) -> bool: if pack is None: pack = Backpack() if self._check_connected(): for i in range(5): UseObject(pack) if LastContainer() == pack: return True Wait(1000) print("Ошибка: не смог открыть бэкпак.") return False def _check_runebook(self, runebook_id: int) -> bool: if self._open_backpack(): if GetParent(runebook_id) == Backpack(): return True print(f"Ошибка: рунбука {hex(runebook_id)} не в бэкпаке.") return False def _open_runebook(self, runebook_id: int) -> bool: if self._check_runebook(runebook_id=runebook_id): while GetGumpsCount(): CloseSimpleGump(GetGumpsCount() - 1) temp = GetGumpsCount() for i in range(10): UseObject(runebook_id) if temp < GetGumpsCount(): return True Wait(500) print("Ошибка: не смог открыть рунбуку.") return False def _check_reagents(self, pack=None, gate=False) -> bool: ''' :param pack: если реги в бекпаке, то вызываем пустым, если в мешке, шкатулке, передаём id контейнера ''' if pack is not None: self._open_backpack(pack=pack) if not gate: if any(i < 1 for i in [BPCount(), MRCount(), BMCount()]): print(f'Недостаточно реагентов (BP:{BPCount()}, MR:{MRCount()}, BM:{BMCount()})') return False else: if any(i < 1 for i in [BPCount(), MRCount(), SACount()]): print(f'Недостаточно реагентов (BP:{BPCount()}, MR:{MRCount()}, SA:{SACount()})') return False return True @staticmethod def _check_mana(gate=False) -> bool: if not gate: if Mana() < 11: print(f"Мало маны! <11 ({Mana()}/{MaxMana()})") return False else: if Mana() < 40: print(f"Мало маны! <40 ({Mana()}/{MaxMana()})") return False return True def _find_rune(self, rune, runebook_id=None) -> dict | bool: ''' :param runebook_id: если вызывается пустым, присваивается id рунбуки из конструктора, или указать id интересующей рунбуки. :param rune: принимает номер руны(НЕ индекс) в рунбуке с 1 по 16 :return: возвращает словарь с номерами гампов {"name": "sortir","set_def": 501, "scroll": 601,"drop": 81,"reagent": 2,"gate": 3} ''' if runebook_id is None: runebook_id = self._runebook_id if _pull := self.get_info_runebook(runebook_id=runebook_id): if isinstance(rune, int): if _pull['info']['count_rune'] >= rune - 1: return _pull['gumps'][rune - 1] else: for i in _pull['gumps']: if i["name"] in rune: return i print(f"Ошибка: руна не найдена") return False def get_info_runebook(self, runebook_id=None) -> dict | bool: ''' :param runebook_id: если вызывается пустым, присваивается id рунбуки из конструктора, или указать id интересующей рунбуки. :return: возвращает словарь с общей информацие о рунбуке и гампами. { "gumps": [{"name": "sortir","set_def": 501, "scroll": 601,"drop": 81,"reagent": 2,"gate": 3}, [...], ...n], "info": {'name': Basyan, 'charge': 2, 'charge_max': 10, 'count_rune': 7} } ''' if runebook_id is None: runebook_id = self._runebook_id if self._open_runebook(runebook_id=runebook_id): info_gumps = GetGumpInfo(GetGumpsCount() - 1) count_rune = int((info_gumps['GumpButtons'][len(info_gumps['GumpButtons']) - 2]['ReturnValue']) / 2) temp_pull_gump = {'gumps': []} for n, i, r in zip(range(7, count_rune + 7), range(1, count_rune + 1), range(2, 99, 2)): temp_pull_gump['gumps'].append({ "name": info_gumps['Text'][n][0], "set_def": 500 + i, "scroll": 600 + i, "drop": 80 + i, "reagent": r, "gate": r + 1 }) temp_pull_gump.update({"info": {'name': GetTooltip(runebook_id), 'charge': int(info_gumps['Text'][3][0]), 'charge_max': int(info_gumps['Text'][4][0]), 'count_rune': int(count_rune)}}) if runebook_id == self._runebook_id: self.info_runebook = temp_pull_gump return temp_pull_gump return False def recall(self, rune, pack=None, reagents=False) -> bool: ''' :param pack: если реги в бекпаке, то вызываем пустым, если в мешке, шкатулке, передаём id контейнера :param rune: номер руны в рунбуке (с 1 до 16), 0 - последняя руна или имя руны "sortir" (чувствителен к регистру) :param reagents: устой и false рекол по скроллам, если true, рекол по регам :return: boolean ''' if _rune := self._find_rune(rune=rune): if not reagents: if self.info_runebook['info']['charge'] <= 0: print(f"АХТУНГ: заправь рунбуку. charge " f"{self.info_runebook['info']['charge']}/{self.info_runebook['info']['charge_max']}") return False NumGumpButton(GetGumpsCount() - 1, _rune["scroll"]) return True else: if self._check_reagents(pack=pack) and self._check_mana(): NumGumpButton(GetGumpsCount() - 1, _rune["reagent"]) return True return False def gate(self, rune, pack=None) -> bool: ''' :param pack: если реги в бекпаке, то вызываем пустым, если в мешке, шкатулке, передаём id контейнера :param rune: номер руны в рунбуке (с 1 до 16), 0 - последняя руна или имя руны "sortir" (чувствителен к регистру) :return: boolean ''' if _rune := self._find_rune(rune=rune): if self._check_reagents(gate=True, pack=pack) and self._check_mana(gate=True): NumGumpButton(GetGumpsCount() - 1, _rune["gate"]) return True return False def recharge(self, scrolls=None) -> bool: ''' :param scrolls: если пустой, то вызовет таргет речерджа или указать ID стопки с рекалами :return: boolean ''' if _rune := self.get_info_runebook(): if self.info_runebook['info']['charge'] < self.info_runebook['info']['charge_max']: if TargetPresent(): CancelTarget() NumGumpButton(GetGumpsCount() - 1, 800) for i in range(5): if TargetPresent(): if isinstance(scrolls, int): WaitTargetObject(scrolls) break Wait(500) return True return False def set_def_rune(self, rune) -> bool: ''' :param rune: номер руны в рунбуке (с 1 до 16), 0 - последняя руна или имя руны "sortir" (чувствителен к регистру) :return: boolean ''' if _rune := self._find_rune(rune=rune): NumGumpButton(GetGumpsCount() - 1, _rune["set_def"]) return True return False def drop_rune(self, rune, runebook_id=None) -> int | bool: ''' :param runebook_id: если вызывается пустым, присваивается id рунбуки из конструктора, или указать id интересующей рунбуки. :param rune: номер руны в рунбуке (с 1 до 16), 0 - последняя руна или имя руны "sortir" (чувствителен к регистру) :return: boolean ''' if _rune := self._find_rune(rune=rune, runebook_id=runebook_id): while f := FindTypeEx(0x1F14, 0xFFFF, Backpack(), False): Ignore(f) NumGumpButton(GetGumpsCount() - 1, _rune["drop"]) drop_rune = FindTypeEx(0x1F14, 0xFFFF, Backpack(), False) IgnoreReset() return drop_rune return False def add_rune(self, rune_id: int, runebook_id=None): ''' :param rune_id: id пустой руны :param runebook_id: если вызывается пустым, присваивается id рунбуки из конструктора, или указать id интересующей рунбуки. :return: ''' if self.get_info_runebook(runebook_id=runebook_id): if TargetPresent(): CancelTarget() NumGumpButton(GetGumpsCount() - 1, 1) for i in range(5): if TargetPresent(): WaitTargetObject(rune_id) break Wait(500) return True return False def meditation(): if Mana() < 20: while Mana() < MaxMana(): ct = datetime.now() if TargetPresent(): CancelTarget() UseSkill('Meditation') if WaitJournalLine(ct, "You begin to meditate|" "Вы уже медитируете|" "You are already meditating|" "You must wait to perform another action", 10000): while InJournalBetweenTimes("You are unable to concentrate|" "You stop meditating|" "I am already performing|", ct, datetime.now()) == -1: Wait(1000) def cast_mark(): if Connected() and not Dead(): if TargetPresent(): CancelTarget() if Mana() >= 20: meditation() Cast('Mark') for i in range(8): if TargetPresent(): return True Wait(1000) return False def check_blank_rune(count): if Connected() and not Dead(): FindType(0x1F14, Backpack()) if FindCount() >= count: return True print(f"В паке рун меньше чем нужно скопировать. Докинь ещё {count - FindCount()}") return False def main(): if Connected() and not Dead(): _runebook = Runebook(runebook_id=ID_RUNEBOOK) pull_rune = _runebook.get_info_runebook() pull_copy_rune = _runebook.get_info_runebook(ID_CLEAR_RUNEBOOK) if check_blank_rune(pull_rune['info']['count_rune'] - pull_copy_rune['info']['count_rune']): for i in range(pull_copy_rune['info']['count_rune'], pull_rune['info']['count_rune']): if not Connected() or Dead(): return if not _runebook.recall(rune=i, reagents=REAGENTS): return Wait(8000) if cast_mark(): FindType(0x1F14, Backpack()) WaitTargetObject(FindItem()) Wait(1000) UseObject(FindItem()) UOSay(pull_rune['gumps'][i]['name']) _runebook.add_rune(rune_id=FindItem(), runebook_id=ID_CLEAR_RUNEBOOK) else: return if RETURN: _runebook.recall(rune=RETURN, reagents=REAGENTS) print('Скопировано.') if __name__ == '__main__': # settings ID_RUNEBOOK = 0x13D07FEC # id рунбуки которую хотим скопировать ID_CLEAR_RUNEBOOK = 0x13D07FDD # id пустой рунбуки REAGENTS = False # если телепорт по скроллам в рунбуке, то оставляйте False, если телепорт по регам, то True RETURN = "place1" # если надо вернуться домой, то укажите имя руны, или её номер (без ковычек) в рунбуке. Если нет, то False (RETURN = False) main() CopyRuneBook.py
  2. stealth version 8.12.7 Копка песка и глины Как запустить: читать тут Что делает: копает песок копает глину\торф жрёт фиш стейки (можно поменять) реконектит Инструкция по применению: одеваем чара и даём в лапы ствол, так как есть шанс выкопать элементаля или слизня отводим на место копки кидаем в пак лопату (Shovel) кидаем в пак еду FOOD = 0x097B # Type еды, сейчас фишстейки запускаем скрипт from datetime import datetime, timedelta from time import sleep from py_stealth import * ############################## info ################################ # # Скрипт для копки песка или глины\торфа # Устанавливаем радиус поиска тайлов - RADIUS # Ставим чара на место добычи # * еду в пак - FOOD # * в бекпак кидаем лопату - Shovel # Одеваем чара и даём в руки какой нибудь ствол, # так как есть шанс выкопать элементаля или слизняка # ################################################################### ############################ settings ############################## # RADIUS = 4 # FOOD = 0x097B # тип еды, сейчас фишь-стейки \ type food, now fish steaks # ################################################################### def msg(args): print(args) ClientPrintEx(0, 60, 2, args) def CheckConnect(waitTimeReconnected=5): """ waitTimeReconnected: wait reconnected time, int >= 1 """ if int(waitTimeReconnected) <= 0: waitTimeReconnected = 5 waitTimeReconnected *= 1000 if GetARStatus(): SetARStatus(False) if Connected() and not Hidden() and not CheckLag(): Disconnect() Wait(5000) if not Connected(): print('# Not connected to server!') print('# Reconnected...') while not Connected(): Connect() Wait(3000) if Connected() and Hidden(): UOSay(" ") if Connected() and not CheckLag(5000): Disconnect() Wait(waitTimeReconnected) Wait(5000) print('# Server connection restored.') def WaitTarget(sec=5): for i in range(sec): if not Connected() or Dead() or TargetPresent(): break Wait(1000) if not Connected() or Dead() or not TargetPresent(): return False return True def evSpeech(_text, _senderName, _senderID): # Check Save World if _senderID == 16843009 and _text == 'Saving World State': eventTime = datetime.now() msg(f"{_senderName}: {_text}") for i in range(15): if InJournalBetweenTimes('Saving World State complete.', eventTime, datetime.now()) != 1: break sleep(1) class Hungry: def __init__(self, food=0x097B, timer=10): """ Ищем еду в бекпаке, если не нашли, ищем в банке, потом на полу (при поиске в банке, бонк должен быть предварительно открыт) food: сейчас фишстейки или указать тип еды timer: через сколько докармливать чара """ self._food = food self._nextTime = datetime.now() self._timer = timer def __call__(self): if datetime.now() >= self._nextTime: place = [Backpack(), ObjAtLayer(BankLayer()), Ground()] ct = datetime.now() f = False while InJournalBetweenTimes("Я объелся|You are full", ct, datetime.now()) == -1: if Connected() and not Dead(): for i in place: if f := FindType(self._food, i): if TargetPresent(): CancelTarget() ct = datetime.now() UseObject(f) Wait(300) break if not f: msg("Attention!: Food not found!") break else: return self._nextTime = datetime.now() + timedelta(minutes=self._timer) class Processed: def __init__(self, _range=4): self._range = _range self._sand = [22, 23, 24, 25, 26, 27, 28, 35, 39, 52, 53, 54, 56, 57, 58, 59, 60, 61, 88, 92, 95, 96, 100] self._peat = [15810, 15811, 15825, 15832, 15835, 15836, 15837, 15838, 15839, 15840, 15841, 15842, 15843, 15844, 15845, 15846, 15848, 15849, 15850, 15851, 15852, 15853, 15854, 15855, 15856] self._arrWorkTile = [] # dict {'x': x, 'y': y, 'z': z} self._shovel = None self._lastIndex = None def __call__(self): CheckConnect() if not Hidden() and not CheckLag(): Disconnect() Wait(5000) if Connected(): if Dead(): msg('Character is dead!') return False if LastContainer() != Backpack(): for i in range(5): UseObject(Backpack()) if LastContainer() == Backpack(): break Wait(1000) if LastContainer() != Backpack(): msg("I can't open my backpack") return False if not self.__CheckShovel(): msg('Not found tool (SHovel)!') return False if not len(self._arrWorkTile): if not self.__GetTile(): print(f'Not found tiles!') return False msg(f'Found {len(self._arrWorkTile)} tiles.') if not WarMode(): SetWarMode(True) return True def __CheckShovel(self): if f := FindType(0x0F39, Backpack()): self._shovel = f return True return False def __GetTile(self): _allTypeTile = self._sand + self._peat for x in range(GetX(Self()) - self._range, GetX(Self()) + self._range + 1): for y in range(GetY(Self()) - self._range, GetY(Self()) + self._range + 1): if cell := GetCell(x, y, WorldNum()): try: if _allTypeTile.index(cell['Tile']): cell['x'] = x cell['y'] = y self._arrWorkTile.append({'x': cell['x'], 'y': cell['y'], 'z': cell['Z'], 't': cell['Tile']}) pass except ValueError: pass if len(self._arrWorkTile): return True return False def Mining(self): if Connected() and not Dead(): ct = datetime.now() if not TargetPresent(): UseObject(self._shovel) if WaitTarget(): if self._lastIndex is None: self._lastIndex = 0 _i = self._lastIndex x, y, z = self._arrWorkTile[_i]['x'], self._arrWorkTile[_i]['y'], self._arrWorkTile[_i]['z'] if not newMoveXY(x, y, False, 2, True): self._arrWorkTile.pop(_i) return TargetToXYZ(x, y, z) for i in range(15): Wait(2000) UseObject(self._shovel) if not Connected() or Dead() or TargetPresent(): break if InJournalBetweenTimes('There is nothing to dig here|' 'You fail to|' 'There is no brimstone', ct, datetime.now()) != -1: if FoundedParamID() == 0: msg(f'DELETE type "{self._arrWorkTile[_i]["t"]} in script! 118 or 120 line!"') if self._lastIndex >= len(self._arrWorkTile) - 1: self._lastIndex = 0 else: self._lastIndex += 1 if __name__ == '__main__': SetMoveCheckStamina(0) SetMoveThroughNPC(0) SetEventProc('evSpeech', evSpeech) _p = Processed(RADIUS) _hungry = Hungry(FOOD) while _p(): _p.Mining() _hungry() msg("End script") Disconnect() Mining_SAND_or_PEAT.py
  3. nepret

    [Stealth] Meditation(свежий)

    stealth version 8.12.7 Прокачка Meditation с dragon шмотками. Новый! Как запустить: читать тут Что делает: снимает-одевает dragon шмот (кнут в том числе) медитирует жрёт фиш стейки (можно поменять) реконектит Инструкция по применению: кидаем в пак еду FOOD = 0x097B # Type еды, сейчас фишстейки одеваем в dragon вещи + кнут(если есть) запускаем скрипт from py_stealth import * from datetime import datetime, timedelta """ Устанавливаем настройки ниже, одеваем чара в драгон, запускаем скрипт """ SKILL = 100 # Предел прокачки скила FOOD = 0x097B # Type еды, сейчас фишстейки DELAY = 150 # Задерка после снятия\одевания вещи (в мс) # include start def msg(Message): print(Message) ClientPrintEx(0, 60, 2, Message) def CheckConnect(WaitTime=15000): if Connected() and Hidden(): for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break if Connected() and not Hidden() and not CheckLag(WaitTime): Disconnect() Wait(5000) if not Connected(): print('CheckConnect.py : Not connected to server!') print('CheckConnect.py : Reconnected...') while not Connected(): Connect() for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break CheckLag(5000) if Connected() and not Hidden() and not CheckLag(8000): Disconnect() print('CheckConnect.py : Server connection restored.') return False return True def CheckSave(): Time = datetime.now() - timedelta(0, 30) if InJournalBetweenTimes('Saving World State', Time, datetime.now()) >= 0: Wait(30000) def OpenPack(Container=None): """ :param Container: if "None": Backpack self, or set ID Container :return: if open True, else not False """ if Container is None: Container = Backpack() while LastContainer() != Container: if not Connected() or Dead(): msg("#ERROR: {OpenPack} not connected or you dead") return False CheckSave() UseObject(Container) for i in range(5): if LastContainer() == Container: break Wait(1000) return True class Hungry: def __init__(self, food=0x097B, place=None, timer=10): """ food: сейчас фишстейки или указать тип еды place: место поиска еды timer: через сколько докармливать чара """ if place is None: self._place = Backpack() else: self._place = place self._food = food self._nextTime = datetime.now() self._timer = timer def Hungry(self): if datetime.now() >= self._nextTime: OpenPack() while f := FindType(self._food, self._place): CheckConnect() CheckSave() td = datetime.now() UseObject(f) if WaitJournalLineSystem(td, "Я объелся|You are full, and can't eat nothing more.", 750): self._nextTime = datetime.now() + timedelta(minutes=self._timer) break else: msg("Warning: Food not found!") # include finish class Layer: def __init__(self): self._layer = [1, 5, 23, 4, 19, 10, 6, 7, 13, 3] self.__CheckEquip() @property def Equip(self): return len(self._layer) def __CheckEquip(self): CheckConnect() for i in self._layer.copy(): if f := ObjAtLayer(i): if "Dragon" not in GetTooltip(f): self._layer.remove(i) else: self._layer.remove(i) if len(self._layer): SetDress() else: msg("На чаре нет одежды...") def CheckSkill(): CheckConnect() if GetSkillValue("Meditation") >= SKILL: msg(f"Стоп-отметка! Скилл 'Meditation' прокачен до: {SKILL}") return True return False def Meditation(): while Mana() < MaxMana(): CheckConnect() CheckSave() ct = datetime.now() UseSkill("Meditation") if WaitJournalLineSystem(ct, "You begin to meditate|Вы уже медитируете|You are already meditating", 5000): WaitJournalLineSystem(ct, "You are unable to concentrate.|You stop meditating", 30000) def Main(): while not Dead() and not CheckSkill(): h.Hungry() Meditation() if not Undress(): Disconnect() CheckConnect() CheckSave() EquipDressSet() if __name__ == '__main__': SetARStatus(False) SetPauseScriptOnDisconnectStatus(False) SetDressSpeed(DELAY) SKILL_VALUE = 100 h = Hungry(food=FOOD) l = Layer() if l.Equip: Main() msg("End script.") Disconnect() Meditation.py
  4. stealth version 8.11.4 Фишинг с берега. Новый! Как запустить: читать тут Что делает: ловит рыбу удочкой ничего не скидываем (карты, соски, обувь остаётся в паке) жрёт авто реконект (советую не включать встроенный столсовский реконектор, так как он имеет неприятную особенность зависать при длительных падениях сервака, да и на скрипты это влияет так себе...) Инструкция по применению: кидаем чару в пак удочки и еду(если надо, меняем на свой тип) FOOD = 0x097B # Type еды, сейчас фишстейки ставим возле берега запускаем скрипт следим за появлением капчи и появлением красно\серых упырей from datetime import datetime, timedelta from py_stealth import * """ в бекпак еду, удочки встаём возле берега и запускаем скрипт """ POLE = 0x0DBF RANGE = 6 FOOD = 0x097B # Type еды, сейчас фишстейки def msg(Message): print(Message) ClientPrintEx(0, 60, 2, Message) def DCC(message, TimeWait=15000): if Dead() or not Connected() or not CheckLag(TimeWait): print(f"{message}: You dead, or something else!") return False return True def CheckConnect(WaitTime=15000): if Connected() and Hidden(): for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break if Connected() and not Hidden() and not CheckLag(WaitTime): Disconnect() Wait(5000) if not Connected(): print('CheckConnect.py : Not connected to server!') print('CheckConnect.py : Reconnected...') while not Connected(): Connect() for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break CheckLag(5000) if Connected() and not Hidden() and not CheckLag(8000): Disconnect() print('CheckConnect.py : Server connection restored.') return False return True def CheckSave(): Time = datetime.now() - timedelta(0, 30) if InJournalBetweenTimes('Saving World State', Time, datetime.now()) >= 0: Wait(30000) def OpenPack(Container=Backpack()): while LastContainer() != Container: if DCC(OpenPack): break CheckSave() UseObject(Container) end = 0 while end >= 5: if LastContainer() == Backpack(): break Wait(1000) end += 1 def Hungry(food=0x097B, place=Backpack()): # food default "fish steaks", search in you backpack while True: if Dead() or not Connected() or not CheckLag(): print("Hungry: You dead, or not connected or hard lags!") return False if f := FindType(food, place): ct = datetime.now() UseObject(f) Wait(1000) if WaitJournalLine(ct, 'Я объелся', 700): return True else: print("Hungry: not found food!") return False def CheckPole(): if not CheckConnect() or Dead(): return False CheckSave() if LastContainer() != Backpack(): OpenPack() if GetType(ObjAtLayer(RhandLayer())): Disarm() if GetType(ObjAtLayer(LhandLayer())) == POLE: return ObjAtLayer(LhandLayer()) if FindType(POLE, Backpack()): return FindItem() else: print('ERROR: у меня нет инструмента') return False def CheckTile(x, y): tile = [0, 6038, 6039, 6040, 6041, 6042, 6043, 13422, 13423, 13424, 13425, 13426, 13427, 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442, 13443, 13444, 13456, 13457, 13458, 13459, 13460, 13461, 13462, 13463, 13464, 13465, 13466, 13467, 13468, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477, 13478, 13479, 13480, 13481, 13482, 13493, 13494, 13495, 13496, 13497, 13498, 13499, 13500, 13501, 13502, 13503, 13504, 13505, 13506, 13507, 13508, 13509, 13510, 13511, 13512, 13513, 13514, 13515, 13516, 13517, 13518, 13519, 13520, 13521, 13522, 13523, 13524, 168, 169, 170, 310, 16368, 16369, 16370, 168, 169, 170, 171, 310, 311] r = ReadStaticsXY(x, y, WorldNum()) for i in tile: if len(r) <= 0: return False if r[len(r) - 1].get('Tile') == i: return r[len(r)-1] return False def CheckCaptcha(pole): while IsGump(): g = GetGumpInfo(GetGumpsCount() - 1) if g.get('Text')[0][0].find("капча"): msg(">>>>>>>> Нужно ввести капчу!\n" "если клиент был закрыт и при заходе клиентом капчи нет, просто юзани удочку...") while IsGump(): Wait(1000) msg(">>>>>>>> отлично продолжаем...") if not TargetPresent(): UseObject(pole) Wait(1000) def Fishing(x, y, z, tile): while True: CheckConnect() if Dead(): msg('Чар мёртв') return False if pole := CheckPole(): Hungry() if TargetPresent(): CancelTarget() ct = datetime.now() while not TargetPresent(): CheckSave() CheckLag() UseObject(pole) CheckCaptcha(pole) WaitForTarget(2500) if WaitForTarget(2500): WaitTargetTile(tile, x, y, z) if WaitJournalLineSystem(ct, "Fishing шанс на успех|There doesn't", 15000): if InJournalBetweenTimes("There doesn't", ct, datetime.now()) != -1: return True else: return False def main(): while True: CheckConnect() if Dead(): msg('Чар мёртв') return ct = 0 for x in range(GetX(Self())-RANGE, GetX(Self())+RANGE): for y in range(GetY(Self())-RANGE, GetY(Self())+RANGE): if CheckTile(x, y): ct += 1 if ct <= 0: msg(f'ERROR: Не вижи тайлов для ловли в радиусе: {RANGE}') return for x in range(GetX(Self())-RANGE, GetX(Self())+RANGE): for y in range(GetY(Self())-RANGE, GetY(Self())+RANGE): if coord := CheckTile(x, y): if not Fishing(coord.get('X'), coord.get('Y'), coord.get('Z'), coord.get('Tile')): return False if __name__ == '__main__': main() if Connected(): Disconnect() msg('END SCRIPT!')
  5. stealth version 8.11.4 Фишинг с лодки. Новый! Как запустить: читать тут Чем богат?: ловит рыбу удочкой скидывает на пол всю пойманную обувь жрёт авто реконект (советую не включать встроенный столсовский реконектор, так как он имеет неприятную особенность зависать при длительных падениях сервака, да и на скрипты это влияет так себе...) бегает к трешбочке что бы утилизировать по всем канонам гринписа: сос бутылки, карты, старые сети... моё время после похода к бочке, понуро плетётся к трюму за новой удочкой ну и самостоятельно (как взрослый мальчик) возвращается на своё место и продолжает рыбачить Инструкция по применению: отплываем на лодке от берега на 1-2 экрана (30-40 тайлов) забиваем трюм лодки удочками ставим треш бочку на лодке в рыбаков суём жареные фишстейки(если что то другое, указываем в скрипте) FOOD = 0x097B # Type еды, сейчас фишстейки запускаем скрипт ??? profit АХТУНГ! При появлении капчи действие скрипта я не проверял, но запилил реакцию, так что при нахождении бага, пишите да поможет вам бог. from datetime import datetime, timedelta from py_stealth import * FOOD = 0x097B # Type еды, сейчас фишстейки def msg(Message): print(Message) ClientPrintEx(0, 60, 2, Message) def DCC(message, TimeWait=15000): if Dead() or not Connected() or not CheckLag(TimeWait): print(f"{message}: You dead, or something else!") return False return True def CheckConnect(WaitTime=15000): if Connected() and Hidden(): for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break if Connected() and not Hidden() and not CheckLag(WaitTime): Disconnect() Wait(5000) if not Connected(): print('CheckConnect.py : Not connected to server!') print('CheckConnect.py : Reconnected...') while not Connected(): Connect() for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break CheckLag(5000) if Connected() and not Hidden() and not CheckLag(8000): Disconnect() print('CheckConnect.py : Server connection restored.') return False return True def CheckSave(): Time = datetime.now() - timedelta(0, 30) if InJournalBetweenTimes('Saving World State', Time, datetime.now()) >= 0: Wait(30000) def OpenPack(Container=Backpack()): while LastContainer() != Container: if DCC(OpenPack): break CheckSave() UseObject(Container) end = 0 while end >= 5: if LastContainer() == Backpack(): break Wait(1000) end += 1 def Hungry(): # food default "fish steaks", search in you backpack while True: if Dead() or not Connected() or not CheckLag(15000): print("Hungry: You dead, or not connected or hard lags!") return False OpenPack() FindType(FOOD, Backpack()) if FindCount() <= 0: print("Hungry: not food!") return ct = datetime.now() if TargetPresent(): CancelTarget() UseObject(FindItem()) if not WaitJournalLine(ct, 'Я объелся', 5000): Wait(100) else: return True def DropTrash(board): # Drop boots boot = [0x170A, 0x170B, 0x170C, 0x170D, 0x170E, 0x170F, 0x1710, 0x1711] for i in boot: CheckConnect() while f := FindType(i, Backpack()): if not CheckLag(): break DropHere(f) # Drop trash trash = [0x0DC8, # сети 0x14ED, # карты 0x099F] # бутылки while trashBarrel := FindType(0x0E77, Ground()): x, y = GetX(trashBarrel), GetY(trashBarrel) if board[0]['XMin'] <= x <= board[0]['XMax'] and board[0]['YMin'] <= y <= board[0]['YMax']: if newMoveXY(x, y, False, 1, True): break else: Ignore(trashBarrel) if trashBarrel <= 0: msg("ERROR: не вижу или не могу добраться до Trash barrel!") return False for i in trash: CheckConnect() while f := FindType(i, Backpack()): if not CheckLag(): break MoveItem(f, 1, trashBarrel, 0, 0, 0) def GetPole(): CheckConnect() CheckSave() board = GetMultis() fX, fY = GetX(Self()), GetY(Self()) DropTrash(board) while hold := FindType(0x3E65, Ground()): x, y = GetX(hold), GetY(hold) if board[0]['XMin'] <= x <= board[0]['XMax'] and board[0]['YMin'] <= y <= board[0]['YMax']: if not newMoveXY(x, y, False, 1, True): msg(f"ERROR: не могу добраться до трюма x:{x}, y{y}") return False else: break if LastContainer() != hold: UseObject(hold) for i in range(5): Wait(1000) if LastContainer() == hold: break if i >= 5 and LastContainer() != hold: msg(f"ERROR: не могу открыть трюм x:{GetX(hold)}, y:{GetY(hold)}") return False if FindType(0x0DBF, hold): MoveItem(FindItem(), 1, Backpack(), 0, 0, 0) newMoveXY(fX, fY, False, 0, True) return FindItem() else: print('ERROR: в трюме нет удочек, мне нечем ловить!') return False def CheckPole(): if not CheckConnect() or Dead(): return False CheckSave() if LastContainer() != Backpack(): OpenPack() if GetType(ObjAtLayer(RhandLayer())): Disarm() if GetType(ObjAtLayer(LhandLayer())) == 0x0DBF: return ObjAtLayer(LhandLayer()) if FindType(0x0DBF, Backpack()): return FindItem() if pole := GetPole(): return pole return False def CheckCaptcha(pole): while IsGump(): g = GetGumpInfo(GetGumpsCount() - 1) if g.get('Text')[0][0].find("капча"): msg(">>>>>>>> Нужно ввести капчу!\n" "если клиент был закрыт и при заходе клиентом капчи нет, просто юзани удочку...") while IsGump(): Wait(1000) msg(">>>>>>>> отлично продолжаем...") if not TargetPresent(): UseObject(pole) Wait(1000) def Fishing(x, y, z): while True: CheckConnect() if Dead(): msg('Чар мёртв') return False if pole := CheckPole(): Hungry() if TargetPresent(): CancelTarget() while not TargetPresent(): CheckSave() CheckLag() while IsGump(): CloseSimpleGump(GetGumpsCount()-1) UseObject(pole) CheckCaptcha(pole) WaitForTarget(2500) ct = datetime.now() if WaitForTarget(2500): WaitTargetXYZ(x, y, z) if WaitJournalLine(ct, "Fishing шанс на успех|There doesn't", 60000): if InJournalBetweenTimes("There doesn't", ct, datetime.now()) != -1: return True else: return False def GetTiles(): typeTile = [168, 169, 170, 171, 310, 311] array = [] board = GetMultis() for x in range(GetX(Self()) - 6, GetX(Self()) + 6): for y in range(GetY(Self()) - 6, GetY(Self()) + 6): if (x > board[0]['XMax'] or x < board[0]['XMin']) and (y > board[0]['YMax'] or y < board[0]['YMin']): tile = GetCell(x, y, WorldNum()) for t in typeTile: if tile['Tile'] == t: array.append({'X': x, 'Y': y, 'Z': tile['Z']}) break return array if len(array) else False def main(): while True: CheckConnect() if Dead(): msg('Чар мёртв') return arrayTile = GetTiles() if not len(arrayTile): msg(f'ERROR: Не вижи тайлов для ловли в радиусе: 6 тайлов') return for tile in arrayTile: if not Fishing(tile['X'], tile['Y'], tile['Z']): return False if __name__ == '__main__': SetFindDistance(10) SetFindVertical(10) SetMoveOpenDoor(True) SetMoveCheckStamina(0) SetMoveThroughNPC(0) main() if Connected(): Disconnect() msg('END SCRIPT!') SetARStatus(False) Disconnect()
  6. stealts v. 8.11.4 Как запустить: читать тут Собственно сабж Чар берёт из банка нужное кол-во логов для 1 крафта - крафтит вещь, если не получилось, добирает логов, если получилось скидывает удочку\ки в банк сам жрёт, сам реконектится Никаких счётчиков на кол-во скрафченных вещей нет! Будет пилить эти палки пока есть из чего! Оставить чара в Ньюби Городе, в пак ему кинуть щипцы тинкертулса, в банк закинуть жареной рыбки если хотите что бы чар с начало кидал удочки в контейнер в банке, указать ID контейнера в: CONTAINER = 0x69F8D06A # указать ID контейнера в банке иначе будет кидать в банк После того как контейнер заполнится, будет складывать всё в банк под завязку, ну или пока не кончатся логи. Логи должны быть ПРОСТЫЕ! from py_stealth import * from datetime import datetime as dt from datetime import timedelta CONTAINER = 0x69F8D06A # указать ID контейнера в банке иначе будет кидать в банк def CheckSave(): Time = dt.now() - timedelta(0, 30) if InJournalBetweenTimes('Saving World State', Time, dt.now()) >= 0: Wait(30000) return False return True def Hungry(food=0x097B, place=Backpack()): # food default "fish steaks", search in you backpack while True: if Dead() or not Connected() or not CheckLag(15000): print("Hungry: You dead, or not connected or hard lags!") return False FindType(food, place) if FindCount() <= 0: print("Hungry: not food!") return ct = dt.now() UseObject(FindItem()) Wait(1000) if InJournalBetweenTimes('Я объелся', ct, dt.now()) != -1: return True def OpenPack(Container=Backpack()): while LastContainer() != Container: if Dead() or not Connected() or not CheckLag(): print("OpenPack: You dead, or something else!") break CheckSave() UseObject(Container) end = 0 while end >= 5: if LastContainer() == Backpack(): break Wait(1000) end += 1 def msg(Message): print(Message) ClientPrintEx(0, 60, 2, Message) def CheckConnect(WaitTime=15000): for i in range(0, 10): if Hidden(): UOSay(' ') Wait(500) else: break if Connected() and not CheckLag(WaitTime): Disconnect() Wait(5000) if not Connected(): print('CheckConnect.py : Not connected to server!') print('CheckConnect.py : Reconnected...') while not Connected(): Connect() CheckLag(5000) if Connected() and not CheckLag(8000): Disconnect() print('CheckConnect.py : Server connection restored.') return False return True def GetTool(): if f := FindType(0x1EBC, Backpack()): return f else: msg("ERROR: в бекпаке нет tinker's tools") return False def GetWood(): FindTypeEx(0x1BDD, 0xffff, Backpack(), False) if FindQuantity() >= 5: return True count = abs(5 - FindQuantity()) if count == 0: return True FindTypeEx(0x1BDD, 0xffff, ObjAtLayer(BankLayer()), False) if FindQuantity() >= count: MoveItem(FindItem(), count, Backpack(), 0, 0, 0) return True return False def CraftPole(tool): AutoMenu("Select", "Tools") AutoMenu("Select", "Pole") cTime = dt.now() if TargetPresent(): CancelTarget() UseObject(tool) if WaitForTarget(5000): if f := FindType(0x1BDD, Backpack()): WaitTargetObject(f) msg1 = "You don't have enough material to make this!" msg2 = "You destroy some material." msg3 = "You create" if WaitJournalLine(cTime, f"{msg1}|{msg2}|{msg3}", 15000): if InJournalBetweenTimes(msg3, cTime, dt.now()) != -1: return True Wait(100) return False def MovePoleInBank(): if GetType(CONTAINER) > 0: cont = CONTAINER else: cont = ObjAtLayer(BankLayer()) while f := FindType(0x0DBF, Backpack()): bTime = dt.now() MoveItem(f, 1, cont, 0, 0, 0) Wait(100) if InJournalBetweenTimes("full", bTime, dt.now()) != -1: if cont == ObjAtLayer(BankLayer()): msg("Все контейнеры заполнены!") return False cont = ObjAtLayer(BankLayer()) return True def main(): while True: if not CheckConnect(): OpenPack() if Dead(): msg('ERROR: Я мёртв') return False if Dist(GetX(Self()), GetY(Self()), 3031, 3370) < 1: if not newMoveXY(3031, 3370, 0, 1, True): msg('ERROR: не могу дойти до банка') return False t = 0 while LastContainer() != ObjAtLayer(BankLayer()): if t > 4: msg('ERROR: Не могу открыть банк') return False t += 1 UOSay('bank') Wait(5000) Hungry(place=ObjAtLayer(BankLayer())) tool = GetTool() if not GetWood(): return False if CraftPole(tool): if not MovePoleInBank(): return False if __name__ == '__main__': main() SetARStatus(False) Disconnect() msg('END SCRIPT')
×
×
  • Создать...