Yoko
http://forum.yoko.com.ua/

Скрипт на одевание любого оружия с пака
http://forum.yoko.com.ua/viewtopic.php?f=20&t=7375
Page 1 of 2

Author:  1a2a3a4a5a6a [ 2006-04-15 22:16:25 ]
Post subject:  Скрипт на одевание любого оружия с пака

Нужен скрипт, который будет одевать любое имеющееся оружие в паке и любой имеющийся щит в паке.

Author:  Edred [ 2006-04-15 23:36:43 ]
Post subject: 

И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.

Author:  1a2a3a4a5a6a [ 2006-04-16 09:22:13 ]
Post subject: 

Edred wrote:
И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.

Вы мне покажите, как будет осуществляться это, а массив я заполню с типами оружия и щитов.

Author:  kotvsapogah [ 2006-04-16 10:49:42 ]
Post subject: 

А что ты будешь делать если у тебя в паке лук и меч?

Author:  Edred [ 2006-04-16 11:12:23 ]
Post subject: 

Сваял на коленке, тести сам. Функцию взял из своих стандартных, сверху приклепал поиск оружия и щитов в паке. Если нету либо оружия, либо щита, скрипт скажет тебе '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

Author:  1a2a3a4a5a6a [ 2006-04-16 22:47:20 ]
Post subject: 

Line 32: Parse Error
Вот код:
Code:
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

Author:  Edred [ 2006-04-16 23:29:06 ]
Post subject: 

Code:
if flagfork == 1 and flagshield == 1 then 
      ; все хорошо, прекрасная маркиза
      getweapon( tempfork. tempshield )
   else


В этом месте параметры в функции точкой разделил, должна быть запятая. Поправь:

Code:
getweapon( tempfork, tempshield ) 

Author:  1a2a3a4a5a6a [ 2006-04-17 19:36:19 ]
Post subject: 

Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?

Author:  yean [ 2006-04-17 21:33:25 ]
Post subject: 

1a2a3a4a5a6a wrote:
Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?
ты изменил размер массивов, соответственно измени и эту строчку
Code:
   for i = 0 to 29 

Author:  1a2a3a4a5a6a [ 2006-04-17 21:35:03 ]
Post subject: 

yean wrote:
1a2a3a4a5a6a wrote:
Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?
ты изменил размер массивов, соответственно измени и эту строчку
Code:
   for i = 0 to 29 

Упс. :oops:
Ща попробую.

Author:  1a2a3a4a5a6a [ 2006-04-17 21:39:11 ]
Post subject: 

Вот, пишет "nema!", хотя все должно быть верно. И щит и оружие данного типа в паке находятся.
Code:
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

Author:  OxoT_nik [ 2006-04-17 21:43:22 ]
Post subject: 

А не проще в хоткейсах забиндить usetype 'тип оржия'; usetype 'тип щита', м?

Author:  1a2a3a4a5a6a [ 2006-04-17 21:51:34 ]
Post subject: 

OxoT_nik wrote:
А не проще в хоткейсах забиндить usetype 'тип оржия'; usetype 'тип щита', м?

А если у тебя в паке лежит меч и щит, а в бою у тебя нету времени определить их тип?

Author:  OxoT_nik [ 2006-04-17 21:52:19 ]
Post subject: 

Тогда просто заранее забинди в хоткейс тот тип оружия и щита, который тебе понадобится в бою.

Author:  1a2a3a4a5a6a [ 2006-04-17 21:55:02 ]
Post subject: 

OxoT_nik wrote:
Тогда забинди 2 хоткейса. Логично?

Не логично будет перебиндить всю клавиатуру на все возможные типы оружия и щитов, когда можно попытаться сделать скрипт и внести туда все эти типы.

Author:  OxoT_nik [ 2006-04-17 21:55:24 ]
Post subject: 

А если нужно будет например сначала викингом с щитом, а потом алебой добить, то просто забинди 2 хота и вперед в бой. ;)

Author:  Edred [ 2006-04-17 23:05:36 ]
Post subject: 

1a2a3a4a5a6a wrote:
Вот, пишет "nema!", хотя все должно быть верно. И щит и оружие данного типа в паке находятся.


Ок, давай проверим. Запусти так и скинь сюда кусок журнала с сообщениями (,showjournal 100):

Code:
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

Author:  1a2a3a4a5a6a [ 2006-04-18 07:05:55 ]
Post subject: 

Вот строки из журнала:
Script Started
No! 0x1442
Yes! 0x1B77 0x402D0E65
Yes! 0x13B9 0x404C3151
invalid graphic: 0x404C3151

Author:  Edred [ 2006-04-18 08:24:33 ]
Post subject: 

Ясен пень. Пробуй:

Code:
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

Author:  1a2a3a4a5a6a [ 2006-04-18 12:53:24 ]
Post subject: 

Есть. Если обе руки пустые, то он берет оружие и щит. Но если одна из рук уже занята, то не берет, а пишет "nema!".

Page 1 of 2 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/