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
#-----------------------------------------------------------------------#
#########################################################################