Page 1 of 1

Bowcraft

Posted: 2004-06-29 17:22:16
by Edred
Вот свеженький скриптец. Для соседнего топика пока не очень годится, так как процедура смены даггера (или другого инструмента) при поломке не оттестирована (на нашем шарде инструмент ломается крайне редко). Кто качает - потестите плиз. Постарался сделать скрипт максимально шардонезависимым :)

ЗЫ: Измените в переменной Kolvo количество логов на нужное вам для разового крафта шафтов. У нас, к сожалению, нужно 10 логов (и никакими багами не воспользоваться - скилл переписан)

Code: Select all

#####################################################################
; Bowcraft. v.1.02b (c) Edred
;
; Чар берет из сундука логи, крафтит из них шафты
; и складывает эти шафты в этот же сундук.
; Если логи закончились - выход.
; Если даггер (или что вы там используете) сломался -
; скрипт найдет аналогичный по типу в бэкпаке и возьмет
; в руки.
;
sub bowcraft()
   VAR Sunduk = '0x4042B1A1'       ; Сериал сундука
   VAR Logi = '0x1BDD'          ; Тип логов
   VAR Shafts = '0x1BD4'          ; Тип шафтов
   VAR Kolvo = 10               ; Брать логов для одного крафта
   VAR k = 0, j, dagger
   dagger = UO.ObjAtLayer( 'Rhand' )
   UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
   While TRUE
      UO.FindType( Logi, -1, Sunduk )   ; Ищем логи в сундуке
      If UO.FindCount() == 0 Then
         UO.Print("Logs not found, script terminated")
         return
      else
         j = UO.GetQuantity( 'finditem' )
         If j > Kolvo Then
            UO.Print( 'I can use ' + str( j ) + ' logs' )
         else
            UO.Print( "I can't use " + str( j ) + " logs" )
            return
         Endif
      Endif
      UO.Grab( Str( Kolvo ), 'finditem' )
      ; Чтобы не сблочило УНСП
      wait(500)
      ; А это - динамическая пауза на мув
      while UO.Count( Logi ) < Kolvo
         wait(100)
      wend
      ; проверка на то, что в руках по-прежнему даггер
      If CheckInstr() == 0 Then
         UO.Print("You don't have daggers!" )
         return
      Endif
      UO.DeleteJournal()
      UO.CancelMenu()
      UO.WaitMenu ('What do you want to carve', 'shaft' )
      UO.WaitTargetType( Logi )
      UO.UseObject( dagger )
      k = 0
      while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
         k = k + 1
         wait(300)
      wend
      If UO.Count( Shafts ) > 0 then
         UO.FindType( Shafts, -1, -1 )
         UO.MoveItem( 'finditem', 0, Sunduk )
         wait(500)
         while UO.Count( Shafts ) > 0
            wait(100)
         wend
         UO.Print( 'Shafts moved' )
      Endif
   Wend
end sub

sub CheckInstr()
   ; проверим, есть ли в правой руке инструмент того же
   ; типа, что и в глобальной переменной instrtype
   ; если нет - найдем в бэкпаке такой инструмент и
   ; возьмем в правую руку.
   VAR typ = UO.GetGlobal( 'instrtype' )
   VAR cur = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
   If typ == cur Then
      return 1
   Endif
   UO.FindType( typ )
   If UO.FindCount() == 0 Then
      return 0
   Endif
   UO.Equip( 'RHand' , 'finditem' )
   wait(1000)
   return 1
endsub

Posted: 2004-06-29 21:12:27
by Mguai
вроде как Bowcraft качается на луках
а притом в сундук токо мона положить 255 итемс а куда далше если очень много логов и на ноч ставить ?

Posted: 2004-06-29 22:19:40
by Ex-Brodyaga
ХАХАХА, логи и шафты кладутся в одну кучу и считаются одним итемом, хоть ты 50к логов клади

Posted: 2004-06-30 08:13:59
by Mguai
Ex-Brodyaga wrote:ХАХАХА, логи и шафты кладутся в одну кучу и считаются одним итемом, хоть ты 50к логов клади


ну логов то скоко хочеш вот токо не растёт на шав. на луках круче

Posted: 2004-06-30 09:19:29
by Edred
Mguai wrote:вроде как Bowcraft качается на луках


И это зависит от шарда... :)

а притом в сундук токо мона положить 255 итемс а куда далше если очень много логов и на ноч ставить ?


и логи и шафты суммируются в одни кучки. Потому сколько угодно. Хотя, хз, может на других шардах и не суммируются.

Posted: 2004-08-13 03:30:05
by Darth
Хороший скрипт... А его можно переделать так, что об не в сундуке логи брал (и не в сундук шафты клал), а все делал прямо в бэкпаке?.. На нашем шарде ограничений веса бэкпака нету, поэтому тема с сундуком не нужна... и замена поломавшегося инструмента тоже не нужна.. Я бы сам переделал, да я в оэтом ничего не соображаю... ?

Posted: 2004-08-13 12:21:02
by Edred
Darth wrote:Хороший скрипт... А его можно переделать так, что об не в сундуке логи брал (и не в сундук шафты клал), а все делал прямо в бэкпаке?.. На нашем шарде ограничений веса бэкпака нету, поэтому тема с сундуком не нужна... и замена поломавшегося инструмента тоже не нужна.. Я бы сам переделал, да я в оэтом ничего не соображаю... ?


Переделать можно что угодно. Вопрос только целесообразности. Я пишу скрипты только для себя. Попробуй договориться с кем-то чтобы он тебе за что-то переделал... :)

Posted: 2004-08-16 13:27:29
by -Time-
Edred
Пробывал твой скрипт на RUO шарде

Работает без перебоев, покрайне мере у меня.
С поломкой пердмета я не столкнулся (одним же ножиком уже до 77 докачал)

Вот только один минус, но думаю ето не твой скрипт

Если ложишь все логи в кучу к примеру 20к логов он неможет 1 лог взять с кучи

приходиться кучками по 1200 разлаживать ))

но и там тупик, если в какой либо кучке будет 1 лог скрипт останавливаеться ((((

Posted: 2004-08-16 14:06:05
by Edred
-Time- wrote:Edred
Пробывал твой скрипт на RUO шарде

Работает без перебоев, покрайне мере у меня.
С поломкой пердмета я не столкнулся (одним же ножиком уже до 77 докачал)

Вот только один минус, но думаю ето не твой скрипт

Если ложишь все логи в кучу к примеру 20к логов он неможет 1 лог взять с кучи

приходиться кучками по 1200 разлаживать ))

но и там тупик, если в какой либо кучке будет 1 лог скрипт останавливаеться ((((


Это стандартный глюк сферы. Вполне может присутствовать и на других эмулях. Не позволяет брать 1 штучку чего-либо из кучки, которую не может приподнять. Лечится заменой команды взять 1 шт. на команды взять 3 шт и положить 2 обратно. Мой скрипт на боукрафт в таком изменении для меня не нуждался, так как у меня надо было брать по 10 шт сразу.

Вот усовершенствованная версия с проверкой: если кол-во логов для крафта = 1, то тащить 3, а потом два класть обратно. Тестируйте (я не тестировал):

Code: Select all

#####################################################################
; Bowcraft. v.1.03b (c) Edred
;
; Чар берет из сундука логи, крафтит из них шафты
; и складывает эти шафты в этот же сундук.
; Если логи закончились - выход.
; Если даггер (или что вы там используете) сломался -
; скрипт найдет аналогичный по типу в бэкпаке и возьмет
; в руки.
;
; 1.03b: Проверка, если Kolvo = 1, то берем три и кладем обратно два
;        лога.
;
sub bowcraft()
   VAR Sunduk = '0x4042B1A1'       ; Сериал сундука
   VAR Logi = '0x1BDD'          ; Тип логов
   VAR Shafts = '0x1BD4'          ; Тип шафтов
   VAR Kolvo = 10               ; Брать логов для одного крафта
   VAR k = 0, j, dagger
   dagger = UO.ObjAtLayer( 'Rhand' )
   UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
   While TRUE
      UO.FindType( Logi, -1, Sunduk )   ; Ищем логи в сундуке
      If UO.FindCount() == 0 Then
         UO.Print("Logs not found, script terminated")
         return
      else
         j = UO.GetQuantity( 'finditem' )
         If j > Kolvo Then
            UO.Print( 'I can use ' + str( j ) + ' logs' )
         else
            UO.Print( "I can't use " + str( j ) + " logs" )
            return
         Endif
      Endif
      If Kolvo == 1 Then
         ; v. 1.03
         UO.Grab( '3', 'finditem' )
         wait(500)
         UO.FindType( Logi )
         UO.MoveItem( 'finditem', '2', Sunduk )
         wait(500)
      Else
         UO.Grab( Str( Kolvo ), 'finditem' )
         wait(500)
      Endif
      ; А это - динамическая пауза на мув
      while UO.Count( Logi ) < Kolvo
         wait(100)
      wend
      ; проверка на то, что в руках по-прежнему даггер
      If CheckInstr() == 0 Then
         UO.Print("You don't have daggers!" )
         return
      Endif
      UO.DeleteJournal()
      UO.CancelMenu()
      UO.WaitMenu ('What do you want to carve', 'shaft' )
      UO.WaitTargetType( Logi )
      UO.UseObject( dagger )
      k = 0
      while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
         k = k + 1
         wait(300)
      wend
      If UO.Count( Shafts ) > 0 then
         UO.FindType( Shafts, -1, -1 )
         UO.MoveItem( 'finditem', 0, Sunduk )
         wait(500)
         while UO.Count( Shafts ) > 0
            wait(100)
         wend
         UO.Print( 'Shafts moved' )
      Endif
   Wend
end sub

Re: Bowcraft

Posted: 2004-10-21 02:49:15
by Bio
Edred wrote:Вот свеженький скриптец. Для соседнего топика пока не очень годится, так как процедура смены даггера (или другого инструмента) при поломке не оттестирована (на нашем шарде инструмент ломается крайне редко). Кто качает - потестите плиз. Постарался сделать скрипт максимально шардонезависимым :)

ЗЫ: Измените в переменной Kolvo количество логов на нужное вам для разового крафта шафтов. У нас, к сожалению, нужно 10 логов (и никакими багами не воспользоваться - скилл переписан)

Code: Select all

#####################################################################
; Bowcraft. v.1.02b (c) Edred
;
; Чар берет из сундука логи, крафтит из них шафты
; и складывает эти шафты в этот же сундук.
; Если логи закончились - выход.
; Если даггер (или что вы там используете) сломался -
; скрипт найдет аналогичный по типу в бэкпаке и возьмет
; в руки.
;
sub bowcraft()
   VAR Sunduk = '0x4042B1A1'       ; Сериал сундука
   VAR Logi = '0x1BDD'          ; Тип логов
   VAR Shafts = '0x1BD4'          ; Тип шафтов
   VAR Kolvo = 10               ; Брать логов для одного крафта
   VAR k = 0, j, dagger
   dagger = UO.ObjAtLayer( 'Rhand' )
   UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
   While TRUE
      UO.FindType( Logi, -1, Sunduk )   ; Ищем логи в сундуке
      If UO.FindCount() == 0 Then
         UO.Print("Logs not found, script terminated")
         return
      else
         j = UO.GetQuantity( 'finditem' )
         If j > Kolvo Then
            UO.Print( 'I can use ' + str( j ) + ' logs' )
         else
            UO.Print( "I can't use " + str( j ) + " logs" )
            return
         Endif
      Endif
      UO.Grab( Str( Kolvo ), 'finditem' )
      ; Чтобы не сблочило УНСП
      wait(500)
      ; А это - динамическая пауза на мув
      while UO.Count( Logi ) < Kolvo
         wait(100)
      wend
      ; проверка на то, что в руках по-прежнему даггер
      If CheckInstr() == 0 Then
         UO.Print("You don't have daggers!" )
         return
      Endif
      UO.DeleteJournal()
      UO.CancelMenu()
      UO.WaitMenu ('What do you want to carve', 'shaft' )
      UO.WaitTargetType( Logi )
      UO.UseObject( dagger )
      k = 0
      while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
         k = k + 1
         wait(300)
      wend
      If UO.Count( Shafts ) > 0 then
         UO.FindType( Shafts, -1, -1 )
         UO.MoveItem( 'finditem', 0, Sunduk )
         wait(500)
         while UO.Count( Shafts ) > 0
            wait(100)
         wend
         UO.Print( 'Shafts moved' )
      Endif
   Wend
end sub

sub CheckInstr()
   ; проверим, есть ли в правой руке инструмент того же
   ; типа, что и в глобальной переменной instrtype
   ; если нет - найдем в бэкпаке такой инструмент и
   ; возьмем в правую руку.
   VAR typ = UO.GetGlobal( 'instrtype' )
   VAR cur = UO.GetGraphic( UO.ObjAtLayer( 'Rhand' ) )
   If typ == cur Then
      return 1
   Endif
   UO.FindType( typ )
   If UO.FindCount() == 0 Then
      return 0
   Endif
   UO.Equip( 'RHand' , 'finditem' )
   wait(1000)
   return 1
endsub





UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) ) -пишет что тип ошибка в етой строчке,подскажите что зделать!

Re: Bowcraft

Posted: 2004-10-21 12:07:03
by Edred
Bio wrote:UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) ) -пишет что тип ошибка в етой строчке,подскажите что зделать!


Запускать скрипт надо имея в руке даггер. Или другой инструмент, который у тебя используется для боукрафта.