помогите с эвакуационным скриптом плз :)

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

помогите с эвакуационным скриптом плз :)

Post by plotney »

смысл скрипта таков:
если жизни не полные то он проверяет: бинты, еду, топоры, вес, атакуют-ли, переменную hometime, дохлость.
проблема такова:
когда жизни не полные, он начинает считать. бинтов выдает 27, еды 26, топоров 25. на самом деле в паке 300 бинтов, 20 еды, 5 топоров. после первого круга, бинтов уже 24, еды 23, и 22 топора. так делает пока бинтов не становиться меньше 15, реколиться домой, пишет что проблема с бинтами, выходит из уо.

в чем проблема? все никак немогу понять

Code: Select all

hometime=0
sub gohome_reags()
	var exit=0
	while exit==0
		while not uo.life == uo.str
			uo.ignore('finditem')
			uo.findtype('bandages',-1,2)
			if uo.findcount() <15 then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('No bandages')
				exit=1
			else
				uo.print('Bandages:'+str(uo.findcount()))
			endif
			
			uo.ignore('finditem')
			uo.findtype('food',-1,2)
			if uo.findcount() <1 then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('No food')
				exit=1
			else
				uo.print('Food:'+str(uo.findcount()))
			endif
		
			uo.ignore('finditem')
			uo.findtype('hatchet',-1,2)
			if uo.findcount() <1 then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('No tools')
				exit=1
			else
				uo.print('Tools:'+str(uo.findcount()))
			endif
		
			if uo.weight >20000 then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('Overweight')
				exit=1
			endif
		
			if uo.injournal('attacking') then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('Under attack!')
				exit=1
			
			endif
		
			if hometime==1 then
				uo.exec("terminate autoLumber")
				wait(300)
				uo.disarm()
				uo.cast('Recall',runebook)
				wait(5000)
				uo.msg('Enough for today...')
				exit=1
			endif
		
			if uo.dead() then
				uo.moveon()
				uo.showjournal(50)
				exit=2
			endif
			wait(3000)
			wend
	wend
	
	if exit==1 then
		uo.closeuo()
	endif
end sub
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: помогите с эвакуационным скриптом плз :)

Post by Mirage »

Команда uo.msg('Overweight') ПРОИЗНОСИТ это слово. Тоесть все окружающие будут видеть что у тебя перевес.

для стакующихся предметов (еда, отмычки, банки пустые, реги, бинты) используется
Str(UO.GetQuantity('finditem'))

Для не стакующихся (топоры, лопаты, кирки, полные бутылки)
Str( UO.FindCount())

PS Я слышал частая передергивался UO.Print вызывает краши. Не знаю так ли это но я в своих скриптах использую"

Code: Select all

UO.FindType( item, -1, Container)
uo.charprint(printcolour,'Банок в банке: '+Str(UO.GetQuantity('finditem')))

UO.FindType( item , -1, Container)
uo.charprint(printcolour,'Кинжалов в мешке: '+Str( UO.FindCount()))
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

Re: помогите с эвакуационным скриптом плз :)

Post by plotney »

Да, я в курсе, оставил на так для отладки, потом поменяю.

тоесть в иф условие вставлять Str(UO.GetQuantity('finditem')) и Str( UO.FindCount()) соответственно?
plotney
Posts: 5
Joined: 2010-11-15 06:54:09

Re: помогите с эвакуационным скриптом плз :)

Post by plotney »

всеравно правильно считать он не хочет. без понятия что с ним делать (
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: помогите с эвакуационным скриптом плз :)

Post by Mirage »

Ну во-первых ты алгоритм скрипта не правильно строишь.
Если бы твой скрипт работал то получилось так:
У тебя меньше 15 бинтов - чар улетает на базу и выставляет exit=1, ЗАТЕМ проверяет еду. И если ее мало то ОПЯТЬ летит на базу.
ИМХО проще сделать 1 условие при котором чар полетит на базу:

Code: Select all

 if uo.count('bandages')<15 || uo.count('eda')<15 ||uo.count('topor')<1 then
летим на базу
Во вторых при проверке сообщения в журнале ты не используешь стирание журнала => проверка будет срабатывать ВСЕГДА.
В третьих что за uo.ignore('finditem') понатыканный везде? ЧТО именно ты игноришь - ты же даже ничего не находишь перед игнорированием этого чегото.
В четвертых

Code: Select all

   uo.cast('Recall',runebook)
   wait(5000)
А если филзанет? Делай выносную функцию с проверкой на филз и "улетел\не улетел".

Ну и в последних зачем пробовать делать салат не умея пользоваться ножом? Тестирую куски скрипта по отдельности, потом склеивай в 1 скрипт или в выносные процедуры.

К слову

Code: Select all

sub gohome_reags()
var bandages = '0x0E21' 
        uo.findtype(bandages,-1,'my')
         if UO.GetQuantity('finditem') < 15 then
            uo.msg('No bandages')
         else
            uo.print('Bandages:'+Str(UO.GetQuantity('finditem')))
         endif
end sub
прекрасно работает.
Post Reply