Yoko

All sides of Injection
It is currently 2024-04-26 19:29:53

All times are UTC+02:00




Post new topic  Reply to topic  [ 30 posts ]  Go to page 1 2 Next
Author Message
PostPosted: 2006-04-15 22:16:25 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Нужен скрипт, который будет одевать любое имеющееся оружие в паке и любой имеющийся щит в паке.


Top
   
 Post subject:
PostPosted: 2006-04-15 23:36:43 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.


Top
   
 Post subject:
PostPosted: 2006-04-16 09:22:13 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Edred wrote:
И как ты себе представляешь искусственный интеллект, который отличает оружие от еды, например? Так что все равно придется массив всех возможных видов оружия и щитов делать... А дальше легкий перебор вариантов.

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


Top
   
 Post subject:
PostPosted: 2006-04-16 10:49:42 
Offline

Joined: 2006-03-29 14:24:09
Posts: 17
А что ты будешь делать если у тебя в паке лук и меч?


Top
   
 Post subject:
PostPosted: 2006-04-16 11:12:23 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Сваял на коленке, тести сам. Функцию взял из своих стандартных, сверху приклепал поиск оружия и щитов в паке. Если нету либо оружия, либо щита, скрипт скажет тебе '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


Top
   
 Post subject:
PostPosted: 2006-04-16 22:47:20 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
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


Top
   
 Post subject:
PostPosted: 2006-04-16 23:29:06 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Code:
if flagfork == 1 and flagshield == 1 then 
      ; все хорошо, прекрасная маркиза
      getweapon( tempfork. tempshield )
   else


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

Code:
getweapon( tempfork, tempshield ) 


Top
   
 Post subject:
PostPosted: 2006-04-17 19:36:19 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Угу, я уже пытался исправлять эту строчку. Но теперь он пишет, что ему не нравится 16 строка. Что это может быть?


Top
   
 Post subject:
PostPosted: 2006-04-17 21:33:25 
Offline

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


Top
   
 Post subject:
PostPosted: 2006-04-17 21:35:03 
Offline

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

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


Top
   
 Post subject:
PostPosted: 2006-04-17 21:39:11 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Вот, пишет "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


Top
   
 Post subject:
PostPosted: 2006-04-17 21:43:22 
Offline

Joined: 2006-03-26 14:17:10
Posts: 21
А не проще в хоткейсах забиндить usetype 'тип оржия'; usetype 'тип щита', м?


Top
   
 Post subject:
PostPosted: 2006-04-17 21:51:34 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
OxoT_nik wrote:
А не проще в хоткейсах забиндить usetype 'тип оржия'; usetype 'тип щита', м?

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


Top
   
 Post subject:
PostPosted: 2006-04-17 21:52:19 
Offline

Joined: 2006-03-26 14:17:10
Posts: 21
Тогда просто заранее забинди в хоткейс тот тип оружия и щита, который тебе понадобится в бою.


Top
   
 Post subject:
PostPosted: 2006-04-17 21:55:02 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
OxoT_nik wrote:
Тогда забинди 2 хоткейса. Логично?

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


Top
   
 Post subject:
PostPosted: 2006-04-17 21:55:24 
Offline

Joined: 2006-03-26 14:17:10
Posts: 21
А если нужно будет например сначала викингом с щитом, а потом алебой добить, то просто забинди 2 хота и вперед в бой. ;)


Top
   
 Post subject:
PostPosted: 2006-04-17 23:05:36 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
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


Top
   
 Post subject:
PostPosted: 2006-04-18 07:05:55 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Вот строки из журнала:
Script Started
No! 0x1442
Yes! 0x1B77 0x402D0E65
Yes! 0x13B9 0x404C3151
invalid graphic: 0x404C3151


Top
   
 Post subject:
PostPosted: 2006-04-18 08:24:33 
Offline
Expert!

Joined: 2004-04-03 17:36:29
Posts: 2544
Location: Saint-Petersburg
Ясен пень. Пробуй:

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


Top
   
 Post subject:
PostPosted: 2006-04-18 12:53:24 
Offline

Joined: 2006-02-10 13:26:37
Posts: 173
Есть. Если обе руки пустые, то он берет оружие и щит. Но если одна из рук уже занята, то не берет, а пишет "nema!".


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 30 posts ]  Go to page 1 2 Next

All times are UTC+02:00


Who is online

Users browsing this forum: Bing [Bot], Google [Bot] and 27 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited