Thanatos

Пользователь
  • Публикаций

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

  • Посещение

  • Победитель дней

    1

Thanatos стал победителем дня 30 апреля

Thanatos имел наиболее популярный контент!

Репутация

2 Neutral

Информация о Thanatos

  • День рождения
  1. [Python] Простая скупка

    Некропостинг - мое любимое, да Проблема в том, что стелс не получает обьект банковского сундука.. Можно пофиксить его заменив bankObject = ObjAtLayer(BankLayer()) На ИД банка, получить собсна можно через стелс\инжу\етц
  2. [Python] Простая скупка

    Хоть кто-то юзал? Имеет смысл дорабатывать?
  3. Raw_Move(2, True); Raw_Move(2, True); Raw_Move(2, True); А вот эта штука отлично меняется на NewMoveXY и координаты из GetX(trapID), GetY и тд, будет крайне универсально Даже не лень стало глянуть в API - NewMoveXY(GetX(Trap), GetY(Trap), True, 1, False) Эта команда заставит чара встать четко в координату трапа, что выкинет чара из лодки, юзалось прям со времен DW =)
  4. P.s. при открытии секьюр контейнеры имеют ID на 1 больше, чем собсна ID сундука, по этому по 2 ID на каждый сундук, узнать точный ID можно функцией LastContainer(), т.е. в чистый скрипт запхать что то типа Print(str(LastContainer())), открыть сундук и врубить скрипт и конвертнуть его из Decimal в Hex (https://www.binaryhexconverter.com/decimal-to-hex-converter)
  5. [Python] Простая скупка

    Т.к. планы крайне поменялись и нет возможности залипать в УО, решил выложить пару скриптиков, не пропадать же добру Stealth - 8.7.8, Python - 3.6-32 Простая скупка, скупает массив айтемов, относит в банк,оттуда же берет голду, жует жареную рыбу. Из настроек - точка возле банка, откуда по команде bank собсна открывается банк, что скупать, и массив из ID и координат возле вендора (примерно в той комнатушке, где вендор стоит, дальше скриптик сам подойдет к вендору) from datetime import timedelta,datetime, datetime as dt vendors = { 0x001A398F : {'x' : 1466, 'y' : 1672}, 0x001A39C3 : {'x' : 1472, 'y' : 1720}, 0x001A3974 : {'x' : 1470, 'y' : 1577}, 0x001A39DB : {'x' : 1561, 'y' : 1737}, 0x001A39DC : {'x' : 1568, 'y' : 1737}, } bankPoint = {'x' : 1422, 'y' : 1692} buyTypes = [0x0F3F,0x0E21] bankObject = ObjAtLayer(BankLayer()) gold = 0x0EED def Hungry(levelRequired): FindType(0x097B,Backpack()) if FindQuantity() < 1: AddToSystemJournal('No food left') now = dt.now() level = 1 levels = [ '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...', 'Are you still alive?' ] UOSay('.hungry') Wait(500); for (key, value) in enumerate(levels): if InJournalBetweenTimes(value, now, dt.now()) >=0: level = key if(levelRequired < level): for i in range(levelRequired,level): FindType(0x097B,Backpack()) if FindQuantity() > 1: UseType(0x097B,-1) Wait(500) FindType(0x097B,Backpack()) AddToSystemJournal('[Hungry] Food left -> '+str(FindQuantity())) def getFromContainer(type,count,container,name=''): if FindType(type,container): Grab(FindItem(),count) FindType(type,container) AddToSystemJournal('There is '+str(FindFullQuantity())+' '+name+' left') def dropToContainer(type,count,container): if FindType(type,Backpack()): backpackItem = FindItem() if FindType(type,container): MoveItem(backpackItem,count,FindItem(),0,0,0) else: MoveItem(backpackItem,count,container,0,0,0) ### INIT for type in buyTypes: AutoBuy(type,0x0000,-1) Wait(100) SetMoveOpenDoor(True) SetARStatus(True) ### while not Dead() and Connected(): for (vendor,coords) in vendors.items(): NewMoveXY(coords['x'],coords['y'],True,1,True) NewMoveXY(GetX(vendor),GetY(vendor),True,1,True) UOSay('buy') Wait(1000) NewMoveXY(bankPoint['x'],bankPoint['y'],True,1,True) Hungry(1) UOSay('bank') Wait(500) for item in buyTypes: dropToContainer(item,-1,bankObject) Wait(100) FindType(gold,Backpack()) if FindQuantity()<2000: getFromContainer(gold,2000,bankObject,'Gold') Wait(100) Wait(10*1000*60)
  6. Т.к. планы крайне поменялись и нет возможности залипать в УО, решил выложить пару скриптиков, не пропадать же добру Stealth - 8.7.8, Python - 3.6-32 Скрипт жует VIP еду, ездит на VIP остарде, перед каждой копкой юзает армс лор на даггере в сумке, плавит руду в слитки, выкидывает карты в мусорку, разгружается в сунудк с статистикой, сколько всего в сундуке и сколько накопал за заход, из настроек - лимит веса для разгрузки,радиус поиска тайлов, ID сундуков, плавилки, мусорки, координаты возле мусорки и плавилки (Да, мне было лень юзать GetX(Object) ) from datetime import timedelta,datetime, datetime as dt oreColors = { 0x045E : 'Dust', 0x0000 : 'Iron', 0x0602 : 'Copper', 0x0231 : 'Steel', 0x03EA : 'Orpy', 0x0460 : 'Anra', 0x04C7 : 'Plut', 0x0585 : 'Valurit', 0x046E : 'Dornit', 0x0451 : 'Mirrock', 0x006F : 'Lavarock', 0x09F9 : 'Icerock', 0x095C : 'Skyrock', 0x046B : 'Cinblush', 0x0386 : 'Shadow', 0x0457 : 'Inver', 0x017F : 'Shoulden', 0x00D3 : 'Wagor', 0x094A : 'Azurite', 0x0852 : 'Silder', 0x0482 : 'Newnort', 0x003D : 'Doom', 0x04B9 : 'Raygat', 0x0279 : 'Ghoulish', 0x094E : 'Bluesteel', 0x08D8 : 'Lanfren', 0x0943 : 'Darkruby', 0x0946 : 'Anorus', 0x0949 : 'Crystallit', 0x049C : 'Froststeel', 0x0953 : 'Howarp', 0x0999 : 'Onyx', 0x094F : 'Quellit', 0x0833 : 'Mifrill', 0x0514 : 'Xiom', 0x09E7 : 'Cosmo' } ### Standart Types pickaxe = 0x0e85 ore = 0x19b9 ingot = 0x1BF2 diamond = 0x0F30 amber = 0x0F25 sapphire = 0x0F0F ### # Weight to unload weightRequired = 250 tileSearchRadius = 45 resourceChest = 0x43298BA6 resourceChestOpened = 0x43298BA7 toolChest = 0x43298D76 toolChestOpened = 0x43298D77 map = 0x14ED bad_points = [] badMessages = [ 'System: There is no more ore here to mine.', 'System: You cannot mine so close to yourself.', 'System: Try mining elsewhere.', 'System: You have no line of sight to that location', 'Ornn: That is too far away.' ] waypoints = { '0' : {'x' : 1272, 'y' : 1291}, # Near chest '1' : {'x' : 1272, 'y' : 1296}, '2' : {'x' : 1260, 'y' : 1275}, '3' : {'x' : 1264, 'y' : 1255}, #near Mine '4' : {'x' : 1258, 'y' : 1240}, # In mine } forgeLocation = {'x' : 1260, 'y' : 1256} trashLocation = {'x' : 1259, 'y' : 1257} forgeID = 0x4009D054 trashID = 0x4009D063 def HungryVIP(levelRequired): now = dt.now() level = 1 levels = [ '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...', 'Are you still alive?' ] UOSay('.hungry') Wait(500) for (key, value) in enumerate(levels): if InJournalBetweenTimes(value, now, dt.now()) >=0 : level = key if levelRequired < level: UOSay('.charstatus') Wait(200) NumGumpButton(GetGumpsCount()-1,3) Wait(200) AddToSystemJournal('VIP Food used') def checkTool(): FindType(pickaxe,Backpack()) if FindCount() < 3: now = dt.now() UseObject(toolChest) WaitJournalLine(now,'You open the secure container',4000) FindType(pickaxe, toolChestOpened) if FindCount() < 1: print('[CheckTool] No picks left, exiting') SetARStatus(False) Disconnect() else: for i in range(0,2): FindType(pickaxe, toolChestOpened) MoveItem(FindItem(),1,Backpack(),0,0,0) FindType(pickaxe, toolChestOpened) print('[CheckTool] There is '+str(FindCount())+' pickaxes left') def Unload(): now = dt.now() UseObject(resourceChest) WaitJournalLine(now,'You open the secure container',4000) AddToSystemJournal('=========================================') for (color,name) in oreColors.items(): if FindTypeEx(ingot,color,Backpack(),True): foundIngot = FindItem() if FindTypeEx(ingot,color,resourceChestOpened,False): MoveItem(foundIngot,-1,FindItem(),0,0,0) Wait(200) else: MoveItem(foundIngot,-1,resourceChestOpened,0,0,0) Wait(200) if FindTypeEx(ingot,color,resourceChestOpened,True): AddToSystemJournal('There is '+str(FindQuantity())+' '+name+' ore in chest') AddToSystemJournal('=========================================') #### @TODO Rework, put it to array and foreach =\ if FindType(diamond,Backpack()) > 0: backpackItem = FindItem() FindType(diamond, resourceChestOpened) MoveItem(backpackItem,-1,FindItem(),0,0,0) Wait(200) if FindType(sapphire,Backpack()) > 0: backpackItem = FindItem() FindType(sapphire, resourceChestOpened) MoveItem(backpackItem,-1,FindItem(),0,0,0) Wait(200) if FindType(amber,Backpack()) > 0: backpackItem = FindItem() FindType(amber, resourceChestOpened) MoveItem(backpackItem,-1,FindItem(),0,0,0) Wait(200) #### @TODO Rework, put it to array and foreach =\ checkTool() def ToHouse(): for key in sorted(waypoints,reverse = True): AddToSystemJournal('Point '+ key) NewMoveXY(waypoints[key]['x'],waypoints[key]['y'],True,1,False) def ToMine(): for key in sorted(waypoints): AddToSystemJournal('Point '+ key) NewMoveXY(waypoints[key]['x'],waypoints[key]['y'],True,1,False) def Smelt(): IgnoreReset() for (color,name) in oreColors.items(): if FindTypeEx(ore,color,Backpack(),True): now = dt.now() WaitTargetObject(forgeID) UseObject(FindItem()) WaitJournalLine(now,'You create|You destroy',6000) if FindType(map,Backpack()) > 0 : NewMoveXY(trashLocation['x'],trashLocation['y'],True,0,False) for i in range(0,FindCount()): MoveItem(FindType(map,Backpack()),-1,trashID,0,0,0) Wait(200) def CheckWeight(): if Weight() >= weightRequired: NewMoveXY(forgeLocation['x'],forgeLocation['y'],True,1,False) Smelt() Wait(100) ToHouse() Wait(100) Unload() Wait(100) ToMine() Wait(100) def FindTiles(center_x, center_y, radius): min_x, min_y = center_x-radius, center_y-radius max_x, max_y = center_x+radius, center_y+radius tiles_coords = [] for tile in range(1339,1359): tiles_coords += GetStaticTilesArray(min_x,min_y,max_x,max_y,WorldNum(),tile) print('[FindTiles] Found '+str(len(tiles_coords))+' tiles') return tiles_coords def Mine(): for t,x,y,z in FindTiles(GetX(Self()),GetY(Self()),tileSearchRadius): if ([x,y] not in bad_points) and newMoveXY(x,y,True,1,False): while True: HungryVIP(1) now = dt.now() ### CancelWaitTarget() CancelTarget() UseSkill('Arms Lore') WaitJournalLine(now,'Select an object',500) WaitTargetType(0x0F51) WaitJournalLine(now,'What you selected|This item|This Dagger',500) ### now = dt.now() CancelWaitTarget() CancelTarget() UseType(pickaxe,-1) Wait(500); WaitJournalLine(now,'Select a place',4000) Wait(500); ### if InJournalBetweenTimes('I am already doing something else', now, dt.now()) >=0: AddToSystemJournal('Seems like we stuck, relogging') Disconnect() ### WaitTargetTile(t,x,y,GetZ(Self())) WaitJournalLine(now,'Try mining elsewhere|breaks|too far away|There is no more|You have no line|You cannot see that|You cannot mine here.|You cannot mine so close',100000) if LastJournalMessage() in badMessages: break; CheckWeight() if InJournalBetweenTimes('You cannot see that|That is too far away|You cannot mine here.', now, dt.now()) >=0: if [x,y] not in bad_points: bad_points.append([x,y]) SetARStatus(True) while Connected() and not Dead(): Mine()
  7. Т.к. планы крайне поменялись и нет возможности залипать в УО, решил выложить пару скриптиков, не пропадать же добру Stealth - 8.7.8, Python - 3.6-32 Скрипт жует VIP еду, ездит на VIP остарде, перед каждой рубкой юзает армс лор на даггере в сумке, разгружается в сунудк с статистикой, сколько всего в сундуке и сколько нарубил за заход, из настроек - лимит веса для разгрузки,радиус поиска деревьев, ID сундуков, отдельно для ресов и отдельно для топоров, и координаты - waypoints = { '0' : {'x' : 1272, 'y' : 1291}, Возле сундука - откуда разгружатся '1' : {'x' : 1244, 'y' : 1316}, Поляна в лесу, где рубить } from datetime import timedelta,datetime, datetime as dt logColors = { 0x0000 : 'Log', 0x046C : 'Alder', 0x0654 : 'Maple', 0x0415 : 'Oak', 0x0203 : 'Cedar', 0x0030 : 'Linden', 0x048A : 'Poplar', 0x0455 : 'Mahogany', 0x0482 : 'Sycamore', 0x0094 : 'Karund', 0x01B0 : 'Leshram', 0x01A2 : 'Turmalit', 0x0498 : 'Folorit', 0x0026 : 'Emerint', 0x0499 : 'Viburnum', 0x00CB : 'Legrand', 0x00C8 : 'Juniper', 0x094A : 'Solmur', 0x092B : 'Kleor', 0x08FD : 'Panacee', 0x0931 : 'Lorgadum', 0x093F : 'Vialonit', 0x0542 : 'Larch', 0x0074 : 'Stardust', 0x0487 : 'Oleander', 0x006F : 'Pironil', 0x066D : 'Nanays', 0x0492 : 'Sloe', 0x09EF : 'Mistyc', 0x049F : 'Laurel', 0x0488 : 'Sunreed', 0x0119 : 'Elvin', 0x0505 : 'Crowntree', 0x0504 : 'Kimya', 0x0507 : 'Draorun', 0x000B : 'Elkris', 0x0501 : 'Xiom', 0x049F : 'Cosmo' } ### Standart Types axe = 0x0F43 log = 0x1BDD ### # Weight to unload weightRequired = 250 tileSearchRadius = 10 sulfur = 0x0F8C deadwood = 0x0F90 resourceChest = 0x432A5A30 resourceChestOpened = 0x432A5A31 toolChest = 0x43298D76 toolChestOpened = 0x43298D77 bad_points = [] badMessages = [ 'System: There is no more logs here to chop.', 'System: You cannot mine so close to yourself.', 'System: You can\'t chop anything there.', 'System: You have no line of sight to that location', 'Thanatos: That is too far away.' ] waypoints = { '0' : {'x' : 1272, 'y' : 1291}, # Near chest '1' : {'x' : 1244, 'y' : 1316}, } def speechHandler(Text,SenderName,SenderID): AddToSystemJournal('test = '+Text+' name = '+SenderName+' id = '+str(SenderID)) if SenderName == 'a snake': while not IsDead(SenderID): Attack(SenderID) Wait(1000) AddToSystemJournal('Attacking +'+SenderName) def HungryVIP(levelRequired): now = dt.now() level = 1 levels = [ '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...', 'Are you still alive?' ] UOSay('.hungry') Wait(500) for (key, value) in enumerate(levels): if InJournalBetweenTimes(value, now, dt.now()) >=0 : level = key if levelRequired < level: UOSay('.charstatus') Wait(200) NumGumpButton(GetGumpsCount()-1,3) Wait(200) UOSay('.charstatus') Wait(200) NumGumpButton(GetGumpsCount()-1,2) Wait(200) AddToSystemJournal('VIP Food used') def checkTool(): FindType(axe,Backpack()) if FindCount() < 3: now = dt.now() UseObject(toolChest) WaitJournalLine(now,'You open the secure container',4000) FindType(axe, toolChestOpened) if FindCount() < 1: print('[CheckTool] No axes left, exiting') SetARStatus(False) Disconnect() else: for i in range(0,2): FindType(axe, toolChestOpened) MoveItem(FindItem(),1,Backpack(),0,0,0) FindType(axe, toolChestOpened) print('[CheckTool] There is '+str(FindCount())+' axes left') def Unload(): now = dt.now() UseObject(resourceChest) WaitJournalLine(now,'You open the secure container',4000) AddToSystemJournal('=========================================') for (color,name) in logColors.items(): foundQty = 0 if FindTypeEx(log,color,Backpack(),True): foundLog = FindItem() foundQty = FindQuantity() if FindTypeEx(log,color,resourceChestOpened,False): MoveItem(foundLog,-1,FindItem(),0,0,0) Wait(200) else: MoveItem(foundLog,-1,resourceChestOpened,0,0,0) Wait(200) if FindTypeEx(log,color,resourceChestOpened,True): AddToSystemJournal('There is '+str(FindQuantity())+' (+'+str(foundQty)+') '+name+' logs in chest') AddToSystemJournal('=========================================') if FindType(sulfur,Backpack()) > 0: backpackItem = FindItem() FindType(sulfur, resourceChestOpened) MoveItem(backpackItem,-1,FindItem(),0,0,0) Wait(200) if FindType(deadwood,Backpack()) > 0: backpackItem = FindItem() FindType(deadwood, resourceChestOpened) MoveItem(backpackItem,-1,FindItem(),0,0,0) Wait(200) checkTool() def ToHouse(): for key in sorted(waypoints,reverse = True): AddToSystemJournal('Point '+ key) NewMoveXY(waypoints[key]['x'],waypoints[key]['y'],True,1,False) def ToMine(): for key in sorted(waypoints): AddToSystemJournal('Point '+ key) NewMoveXY(waypoints[key]['x'],waypoints[key]['y'],True,1,False) def CheckWeight(): if Weight() >= weightRequired: Wait(100) ToHouse() Wait(100) Unload() Wait(100) ToMine() Wait(100) def FindTiles(center_x, center_y, radius): min_x, min_y = center_x-radius, center_y-radius max_x, max_y = center_x+radius, center_y+radius tiles_coords = [] for tile in range(3230,3499): tiles_coords += GetStaticTilesArray(min_x,min_y,max_x,max_y,WorldNum(),tile) print('[FindTiles] Found '+str(len(tiles_coords))+' tiles') return tiles_coords def Lumber(): for t,x,y,z in FindTiles(GetX(Self()),GetY(Self()),tileSearchRadius): if ([x,y] not in bad_points) and newMoveXY(x,y,True,1,False): while True: HungryVIP(1) now = dt.now() ### CancelWaitTarget() CancelTarget() if FindType(axe,Backpack()): UseSkill('Arms Lore') WaitJournalLine(now,'Select an object',500) WaitTargetType(axe) WaitJournalLine(now,'What you selected|This',500) now = dt.now() CancelWaitTarget() CancelTarget() UseType(axe,-1) Wait(500); WaitJournalLine(now,'Select a tree',4000) Wait(500); ### if InJournalBetweenTimes('I am already doing something else', now, dt.now()) >=0: AddToSystemJournal('Seems like we stuck, relogging') Disconnect() ### WaitTargetTile(t,x,y,GetZ(Self())) WaitJournalLine(now,'You can\'t chop|breaks|too far away|There is no more|You have no line|You cannot see that|You cannot mine here.|You cannot mine so close',100000) if LastJournalMessage() in badMessages: break; CheckWeight() if InJournalBetweenTimes('You cannot see that|That is too far away|You can\'t chop', now, dt.now()) >=0: if [x,y] not in bad_points: bad_points.append([x,y]) #SetEventProc('evspeech', speechHandler) SetARStatus(True) NewMoveXY(waypoints['1']['x'],waypoints['1']['y'],True,1,False) while Connected() and not Dead(): Lumber()
  8. Цвета руд\слитков

    Тут тоже - http://ultima.net.ua/ore.html
  9. gohome

    А можно тоже самое еще и Cooking-у добавить?
  10. Номер гампа для стелса берется по принципу Номер гампа - берем тип того, что нужно сделать (В этом примере - кирка), т.е. 0x0E85, конвертим Hex в Decimal - например тут https://www.binaryhexconverter.com/hex-to-decimal-converter, получаем 3717 - это и будет номер гампа, все отлично работает.
  11. gohome

    За кол-во айтемов просто респектище, теперь по 40 кирок за раз крайне легко закидывается на ночь
  12. Цвета бревен

    Список цветов всех бревен сервера с названиями, пригодится для апгрейда\написания скриптов Спасибо Администрации сервера за помощь с получением списка 0x0000 : 'Log', 0x046C : 'Alder', 0x0654 : 'Maple', 0x0415 : 'Oak', 0x0203 : 'Cedar', 0x0030 : 'Linden', 0x048A : 'Poplar', 0x0455 : 'Mahogany', 0x0482 : 'Sycamore', 0x0094 : 'Karund', 0x01B0 : 'Leshram', 0x01A2 : 'Turmalit', 0x0498 : 'Folorit', 0x0026 : 'Emerint', 0x0499 : 'Viburnum', 0x00CB : 'Legrand', 0x00C8 : 'Juniper', 0x094A : 'Solmur', 0x092B : 'Kleor', 0x08FD : 'Panacee', 0x0931 : 'Lorgadum', 0x093F : 'Vialonit', 0x0542 : 'Larch', 0x0074 : 'Stardust', 0x0487 : 'Oleander', 0x006F : 'Pironil', 0x066D : 'Nanays', 0x0492 : 'Sloe', 0x09EF : 'Mistyc', 0x049F : 'Laurel', 0x0488 : 'Sunreed', 0x0119 : 'Elvin', 0x0505 : 'Crowntree', 0x0504 : 'Kimya', 0x0507 : 'Draorun', 0x000B : 'Elkris', 0x0501 : 'Xiom', 0x049F : 'Cosmo'
  13. Скилы

    Я даже заинтересовался, но все как всегда.. Банальный скрипт - UseType(0x1EBC,-1) WaitTargetType(0x1BF2) WaitGump(3717) Номер гампа - берем тип того, что нужно сделать (В этом примере - кирка), т.е. 0x0E85, конвертим Hex в Decimal - например тут https://www.binaryhexconverter.com/hex-to-decimal-converter, получаем 3717 - это и будет номер гампа, все отлично работает. Для PS меняем 0x на $, насколько я помню
  14. Скилы

    Гамп работает, нужно просто подобрать нужный ID кнопки, если не кидается таргет на слитки - ну тут явно проблема в логике скрипта
  15. Скилы

    В Стелсе тоже есть ,infogump