Bowcraft/Fletching, "yet another bowcraft script"

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Poncha
Posts: 8
Joined: 2005-01-17 05:18:19

Bowcraft/Fletching, "yet another bowcraft script"

Post 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
Poncha
Posts: 8
Joined: 2005-01-17 05:18:19

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

Post by Poncha »

а вопрос у меня такой...
как бы мне попросить у юзера инпут текстовый? (я хочу чтобы максимум продукции можно было задать с клавиатуры - тогда введу дополнительную опцию в конфиг - запрашивать ли юзера или юзать дефолт...
Post Reply