nepret 0 Жалоба Опубликовано 25 апреля, 2021 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты