Bowcraft

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Bowcraft

Post 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
Mguai
Posts: 83
Joined: 2004-06-18 09:03:31
Contact:

Post by Mguai »

вроде как Bowcraft качается на луках
а притом в сундук токо мона положить 255 итемс а куда далше если очень много логов и на ноч ставить ?
Ex-Brodyaga
Junior Expert
Posts: 150
Joined: 2004-04-12 20:26:41

Post by Ex-Brodyaga »

ХАХАХА, логи и шафты кладутся в одну кучу и считаются одним итемом, хоть ты 50к логов клади
Mguai
Posts: 83
Joined: 2004-06-18 09:03:31
Contact:

Post by Mguai »

Ex-Brodyaga wrote:ХАХАХА, логи и шафты кладутся в одну кучу и считаются одним итемом, хоть ты 50к логов клади


ну логов то скоко хочеш вот токо не растёт на шав. на луках круче
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

Mguai wrote:вроде как Bowcraft качается на луках


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

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


и логи и шафты суммируются в одни кучки. Потому сколько угодно. Хотя, хз, может на других шардах и не суммируются.
Darth
Posts: 4
Joined: 2004-08-13 03:21:48

Post by Darth »

Хороший скрипт... А его можно переделать так, что об не в сундуке логи брал (и не в сундук шафты клал), а все делал прямо в бэкпаке?.. На нашем шарде ограничений веса бэкпака нету, поэтому тема с сундуком не нужна... и замена поломавшегося инструмента тоже не нужна.. Я бы сам переделал, да я в оэтом ничего не соображаю... ?
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post by Edred »

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


Переделать можно что угодно. Вопрос только целесообразности. Я пишу скрипты только для себя. Попробуй договориться с кем-то чтобы он тебе за что-то переделал... :)
-Time-
Posts: 28
Joined: 2004-06-15 00:49:22
Contact:

Post by -Time- »

Edred
Пробывал твой скрипт на RUO шарде

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

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

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

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

но и там тупик, если в какой либо кучке будет 1 лог скрипт останавливаеться ((((
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Post 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
Bio
Posts: 12
Joined: 2004-10-18 22:25:21

Re: Bowcraft

Post 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 ) ) -пишет что тип ошибка в етой строчке,подскажите что зделать!
Edred
Expert!
Posts: 2544
Joined: 2004-04-03 17:36:29
Location: Saint-Petersburg

Re: Bowcraft

Post by Edred »

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


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