Сваял на коленке, тести сам. Функцию взял из своих стандартных, сверху приклепал поиск оружия и щитов в паке. Если нету либо оружия, либо щита, скрипт скажет тебе 'nema!'. По идее, надо если есть только одно и брать это одно, но для этого надо в функцию дописать проверку на пустой параметр и посылать ей этот пустой параметр, а мне лень... Учись сам писать, тогда сделаешь все что хошь.
Code:
sub ArmUp()
DIM fork[30], shield[30]
fork[0] = '0x0000'
...
fork[29] = '0x0000'
shield[0] = '0x0000'
...
shield[29] = '0x0000'
VAR i, tempfork, tempshield, flagfork = 0, flagshield = 0
; далее поиск циклом
for i = 0 to 29
if flagfork == 1 and flagshield == 1 then
; чтобы не был пустой цикл
wait(20)
endif
if flagfork == 0 then
uo.findtype( fork[i] )
if uo.findcount() then
flagfork = 1
tempfork = uo.getserial( 'finditem' )
endif
endif
if flagshield == 0 then
uo.findtype( shield[i] )
if uo.findcount() then
flagshield = 1
tempshield = uo.getserial( 'finditem' )
endif
endif
next
if flagfork == 1 and flagshield == 1 then
; все хорошо, прекрасная маркиза
getweapon( tempfork. tempshield )
else
; чего-то нету
uo.print( 'nema!' )
endif
endsub
Sub GetWeapon( Fork, Shield )
; берем в руки оружие и щит. Динамические паузы и оптимитизация.
If UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield Then
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
; уже в руках все
return
Else
; надо взять в руки только оружие, щит не надо
UO.Equipt( 'Rhand', Fork )
repeat
wait(100)
until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork
Endif
Else
If UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork Then
; в руках только оружие, надо еще щит взять
UO.Equipt( 'Lhand', Shield )
repeat
wait(100)
until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield
Else
; в руках нет ни оружия, ни щита
UO.Equipt( 'Rhand', Fork )
repeat
wait(100)
until UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) ) == Fork
UO.Equipt( 'Lhand', Shield )
repeat
wait(100)
until UO.GetGraphic( UO.ObjAtLayer( 'Lhand' ) ) == Shield
Endif
Endif
endsub