Скрипт на одевание любого оружия с пака
Moderators: Murderator+, Murderator
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
Скрипт на одевание любого оружия с пака
Нужен скрипт, который будет одевать любое имеющееся оружие в паке и любой имеющийся щит в паке.
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
Edred wrote:И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.
Вы мне покажите, как будет осуществляться это, а массив я заполню с типами оружия и щитов.
-
- Posts: 17
- Joined: 2006-03-29 14:24:09
Сваял на коленке, тести сам. Функцию взял из своих стандартных, сверху приклепал поиск оружия и щитов в паке. Если нету либо оружия, либо щита, скрипт скажет тебе 'nema!'. По идее, надо если есть только одно и брать это одно, но для этого надо в функцию дописать проверку на пустой параметр и посылать ей этот пустой параметр, а мне лень... Учись сам писать, тогда сделаешь все что хошь.
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
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
Line 32: Parse Error
Вот код:
Вот код:
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 )
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
ты изменил размер массивов, соответственно измени и эту строчку1a2a3a4a5a6a wrote:Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?
Code: Select all
for i = 0 to 29
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
yean wrote:ты изменил размер массивов, соответственно измени и эту строчку1a2a3a4a5a6a wrote:Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?Code: Select all
for i = 0 to 29
Упс.

Ща попробую.
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
Вот, пишет "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
; далее поиск циклом
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
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
1a2a3a4a5a6a wrote:Вот, пишет "nema!", хотя все должно быть верно. И щит и оружие данного типа в паке находятся.
Ок, давай проверим. Запусти так и скинь сюда кусок журнала с сообщениями (,showjournal 100):
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
-
- Posts: 173
- Joined: 2006-02-10 13:26:37
Ясен пень. Пробуй:
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
-
- Posts: 173
- Joined: 2006-02-10 13:26:37