Page 1 of 1

Bowcraft/Fletching, "yet another bowcraft script"

Posted: 2005-04-03 14:05:03
by Poncha

Code: Select all

# Bowcraft script by Poncha, v. 1.0
# @author Poncha
# @shard middle-earth.ru
# @file bowcraft.sc
# @version 1.0
#
sub bowcraft()
   # 0 means no limit
   # íîëü - áåç îãðàíè÷åíèé
   var maxProducts = 0

   # resources and products types / òèïû ðåñóðñîâ è ïðîäóêöèè
   var shaftType = '0x1bd4' # shaft type  / òèï øàôòîâ
   var featherType = '0x1bd1' # feather type / òèï ïåðüåâ
   var productType = '0x0f3f' # arrow type / òèï ïðîäóêòà

   # product name / èìÿ ïðîäóêòà
   # used in gump and reporting / èñïîëüçóåòñÿ â ãàìïå è îò÷åòå
   var productName = 'Arrow'

   var attemptsTotal = 0 # attempts counter
   var attemptsSuccessfull = 0 # success counter

   # skillname to use with SkillVal to detect skill growth
   # èìÿ ñêèëëà äëÿ îïðåäåëåíèÿ ïðèðîñòà...
   var bowcraftSkillName = 'Bowcraft'

   # runtime flag, used to stop gracefully
   # ãëîáàëüíûé ôëàã, èñïîëüçóåòñÿ äëÿ êîððåêòíîé îñòàíîâêè
   var bowcraftRuntime = "1"


   UO.SetGlobal("bowcraft", bowcraftRuntime)

   UO.CancelMenu()
   UO.CancelTarget()

   UO.AddObject("shaftsContainer")
   while UO.Targeting()
      wait(100)
   wend
   UO.FindType(shaftType, -1, "shaftsContainer")
   if UO.FindCount() == 0 then
      UO.Print("There are no shafts in container you specified")
      return
   endif
   var shafts = UO.GetSerial('finditem')

   UO.AddObject("feathersContainer")   
   while UO.Targeting()
      wait(100)
   wend
   UO.FindType(featherType, -1, "feathersContainer")
   if UO.FindCount() == 0 then
      UO.Print("There are no feathers in container you specified")
      return
   endif
   var feathers = UO.GetSerial('finditem')

   UO.AddObject("productsCatchbag")
   while UO.Targeting()
      wait(100)
   wend

   var bowcraftSkillStart = UO.SkillVal(bowcraftSkillName)

   while not UO.Dead() and bowcraftRuntime == "1" and (maxProducts == 0 or attemptsSuccessfull < maxProducts) and UO.GetQuantity(shafts) and UO.GetQuantity(feathers)
      UO.DeleteJournal()

      attemptsTotal = attemptsTotal + 1

      UO.MoveItem(shafts, 1)
      repeat
         wait(100)
         UO.FindType(shaftType)
      until UO.FindCount() > 0
      UO.WaitMenu('create', productName)
      UO.WaitTargetObject(feathers)
      UO.UseObject(UO.GetSerial('finditem'))

      while not UO.InJournal('create') and not UO.InJournal('put') and not UO.InJournal('destroy')
         wait(100)
      wend
      if UO.InJournal('put') then
         attemptsSuccessfull = attemptsSuccessfull + 1
         UO.FindType(productType)
         UO.MoveItem(UO.GetSerial('finditem'), 1, "productsCatchbag")
      endif
      
      UO.FindType(shaftType, -1, "shaftsContainer")
      if UO.FindCount() then
         shafts = UO.GetSerial('finditem')
      endif
      
      bowcraftRuntime = UO.GetGlobal("bowcraft")
      if UO.InJournal("!stop bowcraft") then
         bowcraftRuntime = "0"
         UO.SetGlobal("bowcraft", bowcraftRuntime)
      end if
   wend

   var bowcraftSkillEnd = UO.SkillVal(bowcraftSkillName)
   var bowcraftSkillDiff = (bowcraftSkillEnd - bowcraftSkillStart)/10

   if not bowcraftRuntime then
      UO.Print("Terminated on user request.")
   endif
   UO.Print(bowcraftSkillName + ' Stats:')
   UO.Print('Resources used: ' + str(attemptsTotal) + ' shafts and feathers')
   UO.Print('Products created (' + productName + '): ' + str(attemptsSuccessfull))
   UO.Print(bowcraftSkillName + ' skill growth: ' + str(bowcraftSkillDiff, 1))

   UO.CancelMenu()
   UO.CancelTarget()

end sub

sub stop_bowcraft()
   UO.SetGlobal("bowcraft", "0")
end sub


Overview / Описание:

The script makes arrows/bolts (configurable) from shafts and feathers, upon startup it asks to set container of shatfs, feathers and container to put arrows in. The script terminates if there are no shafts or feathers left, maximum limit of produced arrows/bolts reached or upon user request (see 'Runtime'). At the end of execution (unless was terminated by ,terminate) reports stats - amount of resources used, count of products made and skill growth.

Скрипт делает стрелы/болты из шафтов и перьев. При запуске требует указать контейнеры шафтов и перьев, а также контейнер куда складывать готовую продукцию. Завершается при нехватке шафтов или перьев, а также если был достигнут максимум продукции (опционально заданный в конфигурации) либо по запросу пользователя (см. "Команды"). После завершения работы (если не был убит командой terminate) выдает результаты - количество израсходованных ресурсов, произведенной продукции, и прирост скилла.


Configuration / Конфигурация:

Set maxProducts to the number of arrows/bolts you wish to produce (or 0 for no limit)
Установите значение maxProducts - количество страл/болтов которое вы хотите произвести.

If you wish to produce bolts and not arrows (default), change productType to match bolts type, and productName to name matching bolts in gump (i.e. "Bolt")
Если вы хотите, чтобы скрипт производил болты вместо стрел, замените тип продукции в productType и смените productName на соответственное название болтов в гампе.

Runtime / Команды :

Starting Up / Запуск:

Code: Select all

,exec bowcraft

Shutting Down / Завершение работы:

Code: Select all

,exec stop_bowcraft

or / или

Code: Select all

!stop bowcraft

и в связи с этим вот вопрос...

Posted: 2005-04-03 14:06:41
by Poncha
а вопрос у меня такой...
как бы мне попросить у юзера инпут текстовый? (я хочу чтобы максимум продукции можно было задать с клавиатуры - тогда введу дополнительную опцию в конфиг - запрашивать ли юзера или юзать дефолт...