Make Full & Heater (автомат)
А этот скрипт может понравиться тем, кто занимается торговлей.
Лично меня всегда напрягало тыкать мышкой в меню раз за разом для того, чтобы сделать полную броню и щит на продажу (или для собственного ношения).
Поэтому я сделал этот скрипт, который автоматически возьмет слитки металла из сундука, сделает все предметы брони, сложит их в мешок при необходимости и переложит мешок с броней в сундук.
Скрипт может использовать все виды металла, кроме простого железа, и, как всегда, настроен для использования на шарде ДРВ.
Я посчитал излишним делать цикл для производства, например, нескольких фуллов из одного вида металла, однако если это потребуется, необходимые изменения в скрипт внести достаточно легко.
ЗЫ: И еще. Я намеренно не сокращал количество параметров, передающихся при запуске каждой из именных процедур, и не использовал массивы.
Code:
############################################################################################
### ###
### Make Full / Производство брони ###
### Шард Dragon World ###
### v1.20 ###
### ###
### Автор Corwin ###
### ###
############################################################################################
############################################################################################
### Глобальные переменные ###
#############################
## к скрипту Make Full
var BagType='0x0E76' ## - тип мешка для складывания брони
var UseBags=1 ## 1 - использовать раскладывание делаемой брони по мешкам; 0 - не использовать
############################################################################################
### Код скрипта ###
###################
# Формат вызова процедуры производства брони
# Sub MakeFull('название', 'тип слитка', 'цвет', 'меню 1', 'меню 2', 'меню 3', 'меню4', 'меню5')
sub MakeRusty()
MakeFull('Rusty', '0x1BEF', '0x0750', 'Colored Armor & Weapons', 'Rusty Armor', 'Rusty Armor', 'Rusty Plate Armor & Shields', 'Rusty Plate Armor & Shields')
end sub
sub MakeOldCopper()
MakeFull('Old Copper', '0x1BEF', '0x0590', 'Colored Armor & Weapons', 'Old Copper Armor', 'Old Copper Armor', 'Old Copper Plate Armor & Shields', 'Old Copper Plate Armor & Shields')
end sub
sub MakeDullCopper()
MakeFull('Dull Copper', '0x1BEF', '0x060A', 'Colored Armor & Weapons', 'Dull Copper Armor', 'Dull Copper Armor', 'Dull Copper Plate Armor & Shields', 'Dull Copper Plate Armor & Shields')
end sub
sub MakeCopper()
MakeFull('Copper', '0x1BE3', '0x0000', 'Colored Armor & Weapons', 'Copper Armor', 'Copper Armor', 'Copper Plate Armor & Shields', 'Copper Plate Armor & Shields')
end sub
sub MakeBronze()
MakeFull('Bronze', '0x1BEF', '0x0488', 'Colored Armor & Weapons', 'Bronze Armor', 'Bronze Armor', 'Bronze Plate Armor & Shields', 'Bronze Plate Armor & Shields')
end sub
sub MakeSilver()
MakeFull('Silver', '0x1BF5', '0x0000', 'Colored Armor & Weapons', 'Silver Armor', 'Silver Armor', 'Silver Plate Armor & Shields', 'Silver Plate Armor & Shields')
end sub
sub MakeGold()
MakeFull('Gold', '0x1BE9', '0x0000', 'Colored Armor & Weapons', 'Gold Armor', 'Gold Armor', 'Gold Plate Armor & Shields', 'Gold Plate Armor & Shields')
end sub
sub MakeShadow()
MakeFull('Shadow', '0x1BEF', '0x096B', 'Colored Armor & Weapons', 'Shadow Armor', 'Shadow Armor', 'Shadow Plate Armor & Shields', 'Shadow Plate Armor & Shields')
end sub
sub MakeRose()
MakeFull('Rose', '0x1BEF', '0x0014', 'Colored Armor & Weapons', 'Rose Armor', 'Rose Armor', 'Rose Plate Armor & Shields', 'Rose Plate Armor & Shields')
end sub
sub MakeAgapite()
MakeFull('Agapite', '0x1BEF', '0x0193', 'Colored Armor & Weapons', 'Agapite Armor', 'Agapite Armor', 'Agapite Plate Armor & Shields', 'Agapite Plate Armor & Shields')
end sub
sub MakeBloodRock()
MakeFull('Blood Rock', '0x1BEF', '0x04C2', 'Colored Armor & Weapons', 'Blood Rock Armor', 'Blood Rock Armor', 'Blood Rock Plate Armor & Shields', 'Blood Rock Plate Armor & Shields')
end sub
sub MakeVerite()
MakeFull('Verite', '0x1BEF', '0x07D5', 'Colored Armor & Weapons', 'Verite Armor', 'Verite Armor', 'Verite Plate Armor & Shields', 'Verite Plate Armor & Shields')
end sub
sub MakeValorite()
MakeFull('Valorite', '0x1BEF', '0x00CE', 'Colored Armor & Weapons', 'Valorite Armor', 'Valorite Armor', 'Valorite Plate Armor & Shields', 'Valorite Plate Armor & Shields')
end sub
sub MakeMytheril()
MakeFull('Mytheril', '0x1BEF', '0x052D', 'Colored Armor & Weapons', 'Mytheril Armor', 'Mytheril Armor', 'Mytheril Plate Armor & Shields', 'Mytheril Plate Armor & Shields')
end sub
sub MakeBlackRock()
MakeFull('Black Rock', '0x1BEF', '0x0455', 'Colored Armor & Weapons', 'Black Rock Armor', 'Black Rock Armor', 'Black Rock Plate Armor & Shields', 'Black Rock Plate Armor & Shields')
end sub
sub MakeObsidian()
MakeFull('Obsidian', '0x1BEF', '0x0028', 'Colored Armor & Weapons', 'Obsidian Armor', 'Obsidian Armor', 'Obsidian Plate Armor & Shields', 'Obsidian Plate Armor & Shields')
end sub
sub MakePlutonium()
MakeFull('Plutonium', '0x1BEF', '0x08AF', 'Colored Armor & Weapons', 'Plutonium Armor', 'Plutonium Armor', 'Plutonium Plate Armor & Shields', 'Plutonium Plate Armor & Shields')
end sub
sub MakeKrynite()
MakeFull('Krynite', '0x1BEF', '0x010F', 'Krynite Armor', '', '', '', '')
end sub
sub MakeSandRock()
MakeFull('Sand Rock', '0x1BEF', '0x008F', 'Sand Rock Armor', '', '', '', '')
end sub
sub MakeGorgan()
MakeFull('Gorgan', '0x1BEF', '0x09F0', 'Gorgan Armor', '', '', '', '')
end sub
sub MakeBloodCrest()
MakeFull('Blood Crest', '0x1BEF', '0x09EC', 'Blood Crest Armor', '', '', '', '')
end sub
sub MakeCrystaline()
MakeFull('Crystaline', '0x1BEF', '0x09A4', 'Crystaline Armor', '', '', '', '')
end sub
sub MakeAcid()
MakeFull('Acid', '0x1BEF', '0x09B9', 'Acid Armor', '', '', '', '')
end sub
sub MakeVulcan()
MakeFull('Vulcan', '0x1BEF', '0x09DA', 'Vulcan Armor', '', '', '', '')
end sub
sub MakeEldar()
MakeFull('Eldar', '0x1BEF', '0x0BA7', 'Eldar Armor', '', '', '', '')
end sub
sub MakeSteel()
MakeFull('Steel', '0x1BEF', '0x09D3', 'Steel Armor', '', '', '', '')
end sub
sub MakeAqua()
MakeFull('Aqua', '0x1BEF', '0x0060', 'Aqua Armor', '', '', '', '')
end sub
sub MakeElvin()
MakeFull('Elvin', '0x1BEF', '0x09E6', 'Elvin Armor', '', '', '', '')
end sub
sub MakeDragon()
MakeFull('Dragon', '0x1BEF', '0x0085', 'Dragon Armor', '', '', '', '')
end sub
############################################################################################
### Процедуры поддержки ###
###########################
Sub MakeFull(Name, Type, Color, Menu1, Menu2, Menu3, Menu4, Menu5)
var Exit=0, AllExit=0
var CurrentBag
var Menu
UO.UnSetReceivingContainer()
UO.DeleteJournal()
uo.IgnoreReset()
SetObjects()
Open('ChestFrom')
Open('ChestTo')
if UseBags == 1 then
uo.SetReceivingContainer('backpack')
CheckLag()
uo.print('Выбираем пустой мешок')
uo.findtype(BagType,'-1','backpack')
wait(100)
if uo.findcount()<=0 then
while Exit<>1
uo.findtype(BagType,'-1','ChestFrom')
wait(100)
if uo.findcount()>0 then
CurrentBag=uo.GetSerial('finditem')
Open(CurrentBag)
uo.findtype('-1','-1',CurrentBag)
wait(100)
if uo.findcount()>0 then
uo.Ignore(CurrentBag,'on')
else
uo.grab('0',CurrentBag)
wait(1000)
uo.IgnoreReset()
Exit=1
endif
else
uo.print('Пустые мешки закончились, скрипт работу заканчивает')
uo.IgnoreReset()
Exit=1
AllExit=1
endif
wend
else
CurrentBag=uo.getserial('finditem')
endif
wait(1000)
uo.UnSetReceivingContainer('backpack')
Exit=0
else
CurrentBag=uo.getserial('ChestTo')
endif
if AllExit==0 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Plate Helm'), 15, Type, Color)
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Platemail Gorget'), 10, Type, Color)
endif
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Platemail Gauntlets'), 12, Type, Color)
endif
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Platemail Arms'), 18, Type, Color)
endif
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Platemail Legs'), 20, Type, Color)
endif
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, (Name+' Heater Shield'), 18, Type, Color)
endif
if Exit <> 1 then
Exit = MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, "", 25, Type, Color)
endif
CheckLag()
MoveItems('0x1410','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1411','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1412','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1413','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1414','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1415','-1','0',uo.GetSerial('backpack'),CurrentBag)
MoveItems('0x1B76','-1','0',uo.GetSerial('backpack'),CurrentBag)
if (UseBags==1) then
CheckLag()
uo.SetReceivingContainer('ChestTo')
uo.Grab('0',CurrentBag)
wait(1000)
uo.UnSetReceivingContainer('ChestTo')
endif
endif
uo.Print('Скрипт MakeFull остановлен')
end sub # MakeFull
##########
Sub MakeItem(Menu1, Menu2, Menu3, Menu4, Menu5, Menu6, IngotNumber, IngotType, IngotColor)
var k, ReturnCode = 0
UO.CancelMenu()
uo.AutoMenu('Blacksmithing', 'Colored Armor & Weapons')
if Menu3 <> "" then
uo.AutoMenu(Menu1, Menu2)
if Menu5 <> "" then
uo.AutoMenu(Menu3, Menu4)
if Menu6 <> "" then
uo.AutoMenu(Menu5, Menu6)
endif
else
if Menu6 <> "" then
uo.AutoMenu(Menu3, Menu6)
endif
endif
else
if Menu6 <> "" then
uo.AutoMenu(Menu1, Menu6)
endif
endif
repeat
CheckLag()
if uo.Count(IngotType, IngotColor) < IngotNumber then
MoveItems(IngotType, IngotColor, str((IngotNumber-uo.Count(IngotType, IngotColor)),0), 'ChestFrom', uo.GetSerial('backpack'))
endif
if uo.Count(IngotType, IngotColor) < IngotNumber then
uo.Print('Не хватает слитков, скрипт работу заканчивает')
ReturnCode=1
endif
if ReturnCode<>1 then
k=0
uo.DeleteJournal()
CheckLag()
UO.UseType(IngotType)
if Menu6 == "" then
CheckLag()
uo.LClick(265,67)
wait(500)
CheckLag()
uo.LClick(265,67)
wait(500)
CheckLag()
uo.LClick(265,67)
wait(500)
CheckLag()
uo.LDblClick(242,67)
endif
while not UO.InJournal('You put') and not UO.InJournal('have failed') and (k<120)
wait(100)
k=k+1
wend
endif
until UO.InJournal('You put') or (ReturnCode == 0)
return ReturnCode
end sub # MakeItem
##########
Sub SetObjects()
UO.Print('Выберите сундук-источник со слитками и пустыми мешками: ')
UO.Exec('addobject ChestFrom')
While UO.Targeting()
Wait(100)
Wend
UO.Print('Выберите сундук-приемник: ')
UO.Exec('addobject ChestTo')
While UO.Targeting()
Wait(100)
Wend
end sub # SetObjects
##########
Sub CheckLag()
while (uo.ObjAtLayer('Bpack')=='')
wait(1000)
wend
if UO.Waiting() then
UO.CancelTarget()
endif
uo.DeleteJournal()
uo.Click('backpack')
repeat
wait(50)
until uo.InJournal('backpack')
end sub # CheckLag
##########
Sub MoveItems(ItemType,ItemColor,ItemQuantity,FromContainer,ToContainer)
var CurrentQuantity, flag=true
CheckLag()
uo.SetReceivingContainer(ToContainer)
uo.FindType(ItemType,ItemColor,FromContainer)
wait(100)
CurrentQuantity=uo.GetQuantity('finditem') ## кол-во предметов в найденной стопке
while (uo.FindCount()>0) and (flag==true) ## если что-то нашли и еще не все нужное переместили
CheckLag()
if val(ItemQuantity)<=CurrentQuantity then ## если переместить нужно все или меньше, чем в стопке
uo.Grab(ItemQuantity,'finditem') ## перемещаем всю стопку или заданное кол-во
wait(500)
if ItemQuantity=='0' then ## если переместить надо все
CheckLag()
uo.FindType(ItemType,ItemColor,FromContainer) ## ищем следующую стопку
wait(100)
CurrentQuantity=uo.GetQuantity('finditem')
else ## если уже переместили нужное кол-во - выход из процедуры
flag=false
endif
else ## если переместить нужно не все, но больше, чем в найденной стопке
uo.Grab('0','finditem') ## перемещаем всю стопку
wait(500)
ItemQuantity=str((val(ItemQuantity)-CurrentQuantity),0) ## вычисляем, сколько еще нужно
CheckLag()
uo.FindType(ItemType,ItemColor,FromContainer) ## ищем следующую стопку
wait(100)
CurrentQuantity=uo.GetQuantity('finditem')
endif
wend
uo.UnSetReceivingContainer(ToContainer)
end sub # MovingItems
##########
Sub Open(Container)
CheckLag()
uo.UseObject(Container)
wait(3000)
end sub # Open