Скрипт на одевание любого оружия с пака
Posted: 2006-04-15 22:16:25
Нужен скрипт, который будет одевать любое имеющееся оружие в паке и любой имеющийся щит в паке.
Edred wrote:И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.
Code: Select all
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
Code: Select all
sub ArmUp()
DIM fork[2], shield[2]
fork[0] = '0x1442'
fork[1] = '0x13B9'
shield[0] = '0x1B77'
shield[1] = '0x1B76'
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
Code: Select all
if flagfork == 1 and flagshield == 1 then
; все хорошо, прекрасная маркиза
getweapon( tempfork. tempshield )
else
Code: Select all
getweapon( tempfork, tempshield )
ты изменил размер массивов, соответственно измени и эту строчку1a2a3a4a5a6a wrote:Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?
Code: Select all
for i = 0 to 29
yean wrote:ты изменил размер массивов, соответственно измени и эту строчку1a2a3a4a5a6a wrote:Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?Code: Select all
for i = 0 to 29
Code: Select all
sub ArmUp()
DIM fork[2], shield[2]
fork[0] = '0x1442'
fork[1] = '0x13B9'
shield[0] = '0x1B77'
shield[1] = '0x1B76'
VAR i, tempfork, tempshield, flagfork = 0, flagshield = 0
; далее поиск циклом
for i = 0 to 1
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
OxoT_nik wrote:А не проще в хоткейсах забиндить usetype 'тип оржия'; usetype 'тип щита', м?
OxoT_nik wrote:Тогда забинди 2 хоткейса. Логично?
1a2a3a4a5a6a wrote:Вот, пишет "nema!", хотя все должно быть верно. И щит и оружие данного типа в паке находятся.
Code: Select all
sub ArmUp()
DIM fork[2], shield[2]
fork[0] = '0x1442'
fork[1] = '0x13B9'
shield[0] = '0x1B77'
shield[1] = '0x1B76'
VAR i, tempfork, tempshield, flagfork = 0, flagshield = 0
UO.Print( 'Script started' )
; далее поиск циклом
for i = 0 to 1
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' )
uo.print( 'Yes! ' + fork[i] + ' ' + tempfork )
else
uo.print( 'No! ' + fork[i] )
endif
endif
if flagshield == 0 then
uo.findtype( shield[i] )
if uo.findcount() then
flagshield = 1
tempshield = uo.getserial( 'finditem' )
uo.print( 'Yes! ' + shield[i] + ' ' + tempshield )
else
uo.print( 'No! ' + shield[i] )
endif
endif
next
if flagfork == 1 and flagshield == 1 then
; все хорошо, прекрасная маркиза
getweapon( tempfork, tempshield )
else
; чего-то нету
uo.print( 'nema!' )
endif
UO.Print( 'Script finished' )
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
Code: Select all
sub ArmUp()
DIM fork[2], shield[2]
fork[0] = '0x1442'
fork[1] = '0x13B9'
shield[0] = '0x1B77'
shield[1] = '0x1B76'
VAR i, tempfork, tempshield, flagfork = 0, flagshield = 0
UO.Print( 'Script started' )
; далее поиск циклом
for i = 0 to 1
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 = fork[i]
uo.print( 'Yes! ' + fork[i] )
else
uo.print( 'No! ' + fork[i] )
endif
endif
if flagshield == 0 then
uo.findtype( shield[i] )
if uo.findcount() then
flagshield = 1
tempshield = shield[i]
uo.print( 'Yes! ' + shield[i] )
else
uo.print( 'No! ' + shield[i] )
endif
endif
next
if flagfork == 1 and flagshield == 1 then
; все хорошо, прекрасная маркиза
getweapon( tempfork, tempshield )
else
; чего-то нету
uo.print( 'nema!' )
endif
UO.Print( 'Script finished' )
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