Code: # Версия YokoInjection: 505.18 VeNdOr # Версия клиента: 2.0.3 # Автор: GAUHAR
######################################################################### # ПЕРЕМЕННЫЕ которые можно настроить под себя или оставить как есть. # #-----------------------------------------------------------------------# VAR iX = UO.GetX()+1 # Если перемещать предметы на землю(пол), VAR iY = UO.GetY()+1 # то это координаты куда именно перемещать VAR iZ = UO.GetZ() # относительно персонажа. VAR QuantityForLargeHeaps = 100 # По сколько предметов перебрасывать # неподъемные кучи. Если перебрасывать в пак персонажа, то лучше # установить меньшее число, так при загрузке в пак стоит контроль # на перевес, и будет взято максимально возможное количество # кратное переменной QuantityForLargeHeaps. Максимальный вес # расчитывается по формуле UO.Str*42/10. #-----------------------------------------------------------------------# #########################################################################
######################################################################### # ЗАГРУЗКА-РАЗГРУЗКА из контейнера в контейнер # # # # ОПИСАНИЕ процедуру PEREBROS_target(): # # Не всегда нужная но достаточно полезная. Предназначена облегчить # # работу крафтера, если у такового возникла необходимость перебросить # # кучу предметов одного типа и цвета из одного контейнера в другой. # # Может брать 1 предмет из неподъемной кучи. # # # # ЧТО И КАК РАБОТАЕТ: # # Если НАДО БРАТЬ (перебрасывать) из бекпака персонажа, то прицелом # # щелкаем по перонажу или его бекпаку. # # Если НАДО БРАТЬ из кучи находящейся на земле(полу), то делаем щелчок # # прицелом по земле(полу) или нажимаем [ESC]. Куча или нестакующиеся # # предметы должны находится в радиусе 2 клеток от персонажа, иначе их # # нельзя достать из-за большого растояния. # # Если НАДО ПОЛОЖИТЬ (перебросить) в бекпак персонажа, то прицелом # # щелкаем по персонажу или его бекпку. # # Если НАДО ПОЛОЖИТЬ (перебросить) на землю(пол), то делаем щелчок # # прицелом по земле(полу) или нажимаем [ESC]. Предметы будут выложены # # на одну клетку юго-восточней персонажа (можно настраить под себя # # изменив переменные: iX, iY, iZ). # # Иначе делай выбор контейнера откуда брать (он будет открыт, если до # # этого был закрыт) и контейнера в который перекладывать. # # Указав ЧТО ПЕРЕКЛАДЫВАТЬ, перекладываються предметы только указанного # # типа и цвета. # # КОЛИЧЕСТВО предметов для переброски вводится в окне клиента. Для этого# # персонаж должен произнести фразу, например: 123 шт # # тогда будет переброшено 123 предмета указанного типа и цвета. # # 0 шт - перебрасываем все предметы указанного типа и цвета, # # ЧИСЛО шт - определенное количество предметов. # # # # ПРИМЕЧАНИЕ: # # 1. Не стоит бросать на пол в одну точку большое количество не # # стакующиеся предметов, иначе вы увидите: # # Too many items here! # # The ground collapses! # # Короче предметы провалятся под пол и их нельзя будет достать. # # 2. Если из неподъемной кучи пытаться перебросить 1 предмет в такую же # # неподъемную кучу, то будет переброшено 2 предмета. # # 3. Если прицел для указания контейнера был сброшен клавишей [ESC], то # # в качестве контейнера будет выбрана земля(пол). # # 4. Если тип предмета будет равен 0x0000 (вы указали на землю(пол) или # # нажали клавишу [ESC]), или равен типу человека, то скрипт прервет # # свою работу. # # 5. Указывая количество, не забудьте про слово ШТ. # #-----------------------------------------------------------------------# sub PEREBROS_target() VAR TypeItem, ColorItem, CHARname, stroka, chislo UO.Click('self') PrintInColor("Выбери ОТКУДА брать.",'0x003F') UO.DeleteJournal() UO.AddObject('CONTAINER_sender') while UO.Targeting() and not UO.InJournal("see the target") wait(300) wend if UO.GetSerial('CONTAINER_sender') == '0x00000000' then UO.AddObject('CONTAINER_sender','0x00000001') else if UO.GetSerial('CONTAINER_sender') == UO.GetSerial('self') then UO.AddObject('CONTAINER_sender','backpack') endif OpenContainer('CONTAINER_sender') endif PrintInColor("Выбери КУДА класть.",'0x003F') UO.AddObject('CONTAINER_recipient') while UO.Targeting() wait(300) wend if UO.GetSerial('CONTAINER_recipient') == '0x00000000' then UO.AddObject('CONTAINER_recipient','0x00000001') else if UO.GetSerial('CONTAINER_recipient') == UO.GetSerial('self') then UO.AddObject('CONTAINER_recipient','backpack') endif endif PrintInColor("Выбери ЧТО перекладывать",'0x003F') UO.AddType('ITEM_for_moving') while UO.Targeting() wait(300) wend if UO.GetGraphic('ITEM_for_moving') == '0x0000' or UO.GetGraphic('ITEM_for_moving') == '0x0190' or UO.GetGraphic('ITEM_for_moving') == '0x0191' then PrintInColor("ПРЕДМЕТ НЕ УКАЗАН.",'0x002b') PrintInColor("SCRIPT TERMINATE!",'0x0026') return endif TypeItem = UO.GetGraphic('lasttarget') ColorItem = UO.GetColor('lasttarget') PrintInColor("Тип предмета: " + TypeItem,'0x0053') PrintInColor("Цвет предмета: " + ColorItem,'0x0053') wait(2000) PrintInColor("СКОЛЬКО ПЕРЕКЛАДЫВАТЬ?",'0x003F') wait(2000) PrintInColor("Введи в консоли число и слово 'шт'.",'0x003F') wait(2000) PrintInColor("0 шт - Переложить все предметы.",'0x003F') wait(2000) PrintInColor("ЧИСЛО шт - Определенное кол-во.",'0x003F') wait(2000) PrintInColor("И ЖМИ [ENTER]",'0x003F') UO.DeleteJournal() while not UO.InJournal("шт|ШТ") wait(200) wend stroka = UO.Journal(UO.InJournal("шт|ШТ") - 1) chislo = val(mid(stroka,len(UO.GetName())+2,len(stroka)-len(UO.GetName())-1)) PEREBROS(chislo,'ITEM_for_moving',ColorItem,'CONTAINER_sender','CONTAINER_recipient') endsub #-----------------------------------------------------------------------# #########################################################################
######################################################################### # ОПИСАНИЕ процедуры PEREBROS: # # Процедура применяется в скриптах, в которых есть необходимость часто # # делать добор каких либо предметов (например: брать слитки металла для # # ковки, или выгрузить сделанного в отдельный контейнер(мешок)). # # Может брать 1 предмет из неподъемной кучи. # #-----------------------------------------------------------------------# SUB PEREBROS(kolvo,typ,tsvet,konteiner_sklad,konteiner_priemnik) # PEREBROSKA_v1(1,'0x0000','0x0000','0x00000000','0x00000000') # PEREBROSKA_v1(Количество,Тип,Цвет,ОткудаБерем,КудаКладем) # Если использовать в своем скрипте, то устанавливайте максимальный # вес загрузки меньше, чем в формуле UO.Str*42/10 # VAR iX = UO.GetX()+1, iY = UO.GetY()+1, iZ = UO.GetZ() VAR k # k - счетчит количества перебросов в бекпак VAR changekolvo # Дублирует переменную kolvo VAR NewWeight = 0, ChangeWeight = 0, InitialWeight = UO.Weight VAR MaxWeight = UO.Str*42/10 # Максимальный вес загрузки. # VAR QuantityForLargeHeaps = 100 # По сколько предметов перебрасываем # неподъемные кучи. VAR TotalQuantityInContainer = 0 # Всего предметов данного типа в контейнере # Бывает так, что в бекпаке вес больше, чем в формуле UO.Str*42/10, и # поэтому не осуществляется переброска из бекпака в выбранный контейнер, # чтобы такого не было максимальный вес переустанавливаем на текущий +1. if konteiner_sklad == UO.GetSerial('backpack') then MaxWeight = UO.Weight + 1 endif UO.Set('grabdelay','200') # Подсчитаем общее кол-во предметов данного типа и цвета в контейнере. UO.FindType(typ,tsvet,konteiner_sklad) while UO.FindCount() <> 0 TotalQuantityInContainer = TotalQuantityInContainer + UO.GetQuantity('finditem') UO.Ignore('finditem') UO.FindType(typ,tsvet,konteiner_sklad) wend UO.Exec('ignorereset') PrintInColor("Найдено: " + str(TotalQuantityInContainer),'0x0053') wait(2000) # Если ничего не найдено выходим из процедуры. if TotalQuantityInContainer == 0 then return else if TotalQuantityInContainer < kolvo or kolvo == 0 then kolvo = TotalQuantityInContainer endif endif # Нашли то, что искали. ДЕЛАЕМ ПЕРЕБРОС. UO.FindType(typ,tsvet,konteiner_sklad) if UO.FindCount() == TotalQuantityInContainer then # Берем не стакующиеся предметы while UO.FindCount() <> 0 and kolvo > 0 and MaxWeight > UO.Weight PrintInColor("Осталось перебросить: " + str(kolvo),'0x0053') CheckLag() if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then UO.MoveItem('finditem','1',konteiner_priemnik) else UO.MoveItem('finditem','1','ground',iX,iY,iZ) endif CheckLag() UO.FindType(typ,tsvet,konteiner_sklad) kolvo = kolvo - 1 wend else # Берем стакующиеся предметы UO.DeleteJournal() changekolvo = kolvo while UO.FindCount() <> 0 and changekolvo > 0 and MaxWeight > UO.Weight PrintInColor("Перебрасываем: " + str(kolvo),'0x0053') CheckLag() if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then UO.MoveItem('finditem',changekolvo,konteiner_priemnik) else UO.MoveItem('finditem',changekolvo,'ground',iX,iY,iZ) endif CheckLag() changekolvo = changekolvo - UO.GetQuantity('finditem') UO.FindType(typ,tsvet,konteiner_sklad) wait(1000) # Если куча очень тяжелая то берем ее частями if UO.InJournal("That is too heavy") then UO.FindType(typ,tsvet,konteiner_sklad) k = 0 while UO.FindCount() <> 0 and kolvo > 0 and MaxWeight > NewWeight # Если из очень тяжелой кучи надо взять один предмет. if kolvo == 1 then PrintInColor("Перебрасываем: " + str(kolvo),'0x0053') if UO.GetSerial(konteiner_sklad) <> '0x00000001' then OpenContainer(konteiner_sklad) # Используется как UO.Resend(), но только для контейнера else UO.Resend() endif CheckLag() if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then UO.MoveItem('finditem',2,konteiner_priemnik) else UO.MoveItem('finditem',2,'ground',iX,iY,iZ) endif CheckLag() UO.FindType(typ,tsvet,konteiner_priemnik) if UO.GetSerial(konteiner_sklad) <> '0x00000001' then UO.MoveItem('finditem',1,konteiner_sklad) else UO.MoveItem('finditem',1,'ground',iX,iY,iZ) endif CheckLag() return endif # Если из очень тяжелой кучи берем всё или часть. CheckLag() if UO.GetSerial(konteiner_priemnik) <> '0x00000001' then UO.MoveItem('finditem',QuantityForLargeHeaps,konteiner_priemnik) else UO.MoveItem('finditem',QuantityForLargeHeaps,'ground',iX,iY,iZ) endif CheckLag() UO.FindType(typ,tsvet,konteiner_sklad) kolvo = kolvo - QuantityForLargeHeaps if kolvo < QuantityForLargeHeaps then QuantityForLargeHeaps = kolvo endif # Высчитываем изменение веса после каждого переброса в # бекпак, для проверки на превышение максимального веса. k = k + 1 ChangeWeight = (UO.Weight - InitialWeight) / k NewWeight = UO.Weight + ChangeWeight PrintInColor("Осталось перебросить: " + str(kolvo),'0x0053') wend endif wend endif endsub #-----------------------------------------------------------------------# # Дополнительные фукции к процедуре PEREBROS # #-----------------------------------------------------------------------# SUB PrintInColor(text,color) # PrintInColor("здесь текст",'цвет') # 0x003F - ярко-зеленый # 0x0026 - красный # 0x0053 - темно-бирюзавый # 0x0035 - желтый # 0x008F - оранжевый # 0x0003 - синий # 0x0440 - по умолчанию UO.ConColor(color) UO.Print(text) UO.ConColor('1088') endsub SUB DelJournal(string1) #(c) Edred VAR nom = UO.InJournal(string1) if nom > 0 Then UO.SetJournalLine(Nom - 1, 'string replaced') DelJournal(string1) endif endsub SUB OpenContainer(cntnr) DelJournal('Contains') DelJournal('items') DelJournal('Bank Box') UO.UseObject(cntnr) UO.Click(cntnr) repeat wait(300) until UO.InJournal('Contains') or UO.InJournal('items') or UO.InJournal('Bank Box') endsub SUB CheckLag() DelJournal("backpack") UO.Click("backpack") repeat wait(300) until UO.InJournal("backpack") endsub #-----------------------------------------------------------------------# #########################################################################
|