blacksmithing небольшая проблема

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Lifetour
Posts: 30
Joined: 2008-06-04 03:27:01
Location: Bradford(UK)/Riga(LV)

blacksmithing небольшая проблема

Post by Lifetour »

играю на ДРВ

Code: Select all

#blacksmith. Крафтит ножи и плавит
sub Bs()


Var box=0x403803F8
var forge=0x401C4019
Var ingt,colort,i=0,flag=0,flag1=0
Var PRD='0x0F51'
VAR ms0 = "You put the" 
VAR ms1 = "You have failed" 
VAR ms2 = "World data saved" 
Dim Ing[18]
Dim IngColor[18]

Ing[0]='0x1BEF'  #Iron
Ing[1]='0x1BEF'  #Rusty
Ing[2]='0x1BEF'  #Old Copper
Ing[3]='0x1BEF'  #Dull Copper
Ing[4]='0x1BE3'  #Copper
Ing[5]='0x1BEF'  #Bronze
Ing[6]='0x1BF5'  #Silver
Ing[7]='0x1BE9'  #Gold
Ing[8]='0x1BEF'  #Shadow
Ing[9]='0x1BEF'  #Rose
Ing[10]='0x1BEF' #Agapite
Ing[11]='0x1BEF' #BloodRock
Ing[12]='0x1BEF' #Verite
Ing[13]='0x1BEF' #Valorite
Ing[14]='0x1BEF' #Mytheril
Ing[15]='0x1BEF' #BlackRock
Ing[16]='0x1BEF' #Obsidian
Ing[17]='0x1BEF' #Plutonium

IngColor[0]='0x0000'  #Iron
IngColor[1]='0x0750'  #Rusty
IngColor[2]='0x0590'  #Old Copper
IngColor[3]='0x060A'  #Dull Copper
IngColor[4]='0x0000'  #Copper
IngColor[5]='0x0488'  #Bronze
IngColor[6]='0x0000'  #Silver
IngColor[7]='0x0000'  #Gold
IngColor[8]='0x096B'  #Shadow
IngColor[9]='0x0014'  #Rose
IngColor[10]='0x0193' #Agapite
IngColor[11]='0x04C2' #BloodRock
IngColor[12]='0x07D5' #Verite
IngColor[13]='0x00CE' #Valorite
IngColor[14]='0x052D' #Mytheril
IngColor[15]='0x0455' #BlackRock
IngColor[16]='0x0028' #Obsidian
IngColor[17]='0x08AF' #Plutonium

uo.cancelmenu() 
uo.automenu('Blacksmithing','Weapons')
uo.automenu('Weapons','Swords & Blades')
uo.automenu('Swords & Blades','dagger (3 iron ingot)')
uo.automenu('dagger')
wait(300)
repeat
for i=0 to 17
UO.FindType(Ing[i],IngColor[i],2)
if UO.GetQuantity('finditem') > 8 then
flag1=1
ingt=Ing[i]
endif
next

if flag1==0 then
i=0
repeat
UO.FindType(Ing[i],IngColor[i],box)
if UO.GetQuantity('finditem') > 8 then 
flag=1
UO.Grab('300','finditem')
wait(500)
ingt=Ing[i]
endif
i=i+1
until flag==1
else

          UO.DeleteJournal()
          While NOT UO.Hidden() 
          UO.UseSkill('Hiding')
          Wait(3000)
          Wend
          Checklag()
          UO.UseType(ingt)
          repeat
          wait(100)
          until (UO.InJournal(ms0) or UO.InJournal(ms1) or UO.InJournal(ms2) or UO.inJournal("You smelt") or UO.inJournal("You can't"))
          if (UO.InJournal(ms0)) then
          repeat
          UO.FindType(PRD,-1,2)
          UO.WaitTargetObject('finditem')
          UO.UseObject(forge)
          wait(1000)
          until UO.FindCount('finditem') < 8
          endIf
endif
flag=0
flag1=0
until ((uo.skillval("Blacksmithy",1) > 999) or (UO.Dead()))

end sub

Sub Checklag() 
uo.deletejournal() 
uo.click('backpack') 
Repeat 
wait(100) 
Until UO.InJournal("backpack") 
end sub

sub Reconnector() 
var ReconnectTime, RFlag 
ReconnectTime = '0' 
RFlag = 1 
Repeat 
While (UO.ObjAtLayer('Bpack') == '') 
if RFlag Then 
ReconnectTime = MakeTime() 
RFlag = 0 
endif 
Wait(20000) # WorldSave Protection 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.LDblClick(357,164) 
UO.LClick(616,459) 
Wait(3000) 
WEnd 
Wait(3000) 
if (RFlag == 0) and (ReconnectTime <> '0') Then 
;UO.Exec('terminate Bs') 
;UO.Exec('exec Bs') 
UO.TextOpen() 
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) 
RFlag = 1 
ReconnectTime = '0' 
endif 
Until false 
end sub 

sub MakeTime() 
VAR D, T, Ret, i 
Ret = STR(UO.Time()) 
T = "" 
For i = 0 To Len(Ret) 
T = Ret[Len(Ret)-i] + T 
If (I == 2) OR (I == 4) Then 
T = ":" + T 
EndIf 
Next 
Ret = STR(UO.Date()) 
D = "" 
For i = 0 To Len(Ret) 
D = Ret[Len(Ret)-i] + D 
If (I == 2) OR (I == 4) Then 
D = "." + D 
EndIf 
Next 
Ret = T + " @ " + D 
RETURN Ret 
end sub 
Имеется вот этот прекрасный скрипт на бс.
В хайде кует и плавит даггеры из различных металлов, добирает из сундука.

но проблема в том, что когда остаётся ровно 8 ингов - выдаёт ошибку,
Line 71: Runetime error


помогите плз
:roll:
Lifetour
Posts: 30
Joined: 2008-06-04 03:27:01
Location: Bradford(UK)/Riga(LV)

Post by Lifetour »

HELP
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Code: Select all

if i > 17 then
   UO.Print("Странно, но ингов в нужном количестве наверно больше нет.")
   UO.Print("Вышли за границы массива.")
   UO.Print("Поэтому дальше будет парс эррор,")
   UO.Print("так как не выполнится условие: until flag==1")
   #return
endif
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

Code: Select all

			repeat 
				UO.FindType(Ing[i],IngColor[i],box) 
					if UO.GetQuantity('finditem') > 8 then 
						flag=1 
						UO.Grab('300','finditem') 
						wait(500) 
						ingt=Ing[i] 
					endif 
				i=i+1 
			until flag==1 
проблема в этом цикле. Здесь скрипт ищет руду в сундуке, если он находит стопку руды с количеством ингов > 8, то устанавливает флаг в 1 и цикл завершается....А если он не найдёт такой стопки? Флаг не устанавливается в 1 и пустой цикл крутится вечно, ну или вылетает ошибка.
Lifetour
Posts: 30
Joined: 2008-06-04 03:27:01
Location: Bradford(UK)/Riga(LV)

Post by Lifetour »

и как мне это всё исправить?

и ещё после вордсейфа он пару минут всё слишком быстро делает, и тем самым слишком много fail.

мож checklag куда ещё засунуть?
п.с. world save protection (который в reconnector) врубаю.
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

Во первых, как тебе подсказал товарищ выше, воткни в этот цикл проверку и чеклаг

Code: Select all

repeat 
  UO.FindType(Ing[i],IngColor[i],box) 
    if UO.GetQuantity('finditem') > 8 then 
      flag=1 
      UO.Grab('300','finditem')
      checklag() 
      wait(1000) 
      ingt=Ing[i] 
    endif 
  i=i+1
  if i>17 then
    uo.print('КУКАРЕКУ!!!! ИНГОТЫ ЗАКОНЧИЛИСЬ!!!')
    return
  endif
until flag==1 
В этом куске

Code: Select all

          UO.DeleteJournal() 
          While NOT UO.Hidden() 
          UO.UseSkill('Hiding') 
          Wait(3000) 
          Wend 
          Checklag() 
          UO.UseType(ingt) 
чеклаг оттуда убери и засунь его под UO.UseSkill('Hiding'). Плавилку ваще переделай, она отстойная, вместо

Code: Select all

          if (UO.InJournal(ms0)) then 
          repeat 
          UO.FindType(PRD,-1,2) 
          UO.WaitTargetObject('finditem') 
          UO.UseObject(forge) 
          wait(1000) 
          until UO.FindCount('finditem') < 8 
          endIf 
воткни лучше

Code: Select all

	while uo.count(PRD)
		uo.deletejournal()
		uo.waittargettype(PRD)
		uo.useobject(forge)
	repeat	
     wait(300)
	  until uo.injournal('You put|It is consumed')
   wend
Вот, вроде всё.
Lifetour
Posts: 30
Joined: 2008-06-04 03:27:01
Location: Bradford(UK)/Riga(LV)

Post by Lifetour »

Code: Select all

   
while uo.count(PRD)
      uo.deletejournal()
      uo.waittargettype(PRD)
      uo.useobject(forge)
   repeat   
     wait(300)
     until uo.injournal('You put|It is consumed')
   wend
теперь когда заменил в плавилке на это - даёт Line 105: parse error



п.с.

плавилку оставил прежнюю, а все остальное поменял...
теперь такие траблы:

1) плавит даггер обратно не всегда, т.е. по тихоньку часть накапливается в бэкпэке
2) недобирает инги, когда кончаются вообще
3) unhandled exception in parser иногда выскакивает
(эт походу, когда в паке накапливается 8 даггеров не расплавленных.... так как target cancelled пишется часто, когда он пытается переплавить даггер)
Millerbeer
Posts: 247
Joined: 2008-09-12 05:07:34

Post by Millerbeer »

Криво поменял, наверное. Надо было не в плавилке поменять, а полностью плавилку заменить на ту что я тебе дал. Т.е. тот кусок в твоём скрипте полностью убираешь, а мою плавилку втыкаешь.
GAUHAR
Posts: 137
Joined: 2006-11-06 21:45:23

Post by GAUHAR »

Загляни сюда:
https://yoko.uokit.com/viewtopic.php?t=2902
можно найти много интереснго.
Lifetour
Posts: 30
Joined: 2008-06-04 03:27:01
Location: Bradford(UK)/Riga(LV)

Post by Lifetour »

спасибо!!!! нужный скрипт дали! :roll:
Post Reply