Yoko

All sides of Injection
It is currently 2026-01-17 12:30:52

All times are UTC+02:00




Post new topic  Reply to topic  [ 11 posts ] 
Author Message
PostPosted: 2004-09-24 13:46:56 
Offline

Joined: 2004-06-28 16:28:29
Posts: 38
Code:
sub MakeFull() 
   VAR CCurIng='0x0000', TCurIng=0
   VAR jser, WCurIng=0, Kolvo = 200      ; На фулл с запасом
   VAR Sunduk = '0x4024386F'            ; Cундук с инготами
   VAR Meshok = '0x0E76'               ; Тип мешка для фулов
   VAR CIngots = '0x0000'               ; Цвет инготов
   VAR CurMesh, BagForFull='0x4014B1CF'   ; Сериал мешка и сумки для них
   
   UO.Print("Script started")
   DIM TIngots[4], Part[7], CIng[14], WIng[14]
   
   TIngots[0]='0x1BEF'            ; Типы инготов
   TIngots[1]='0x1BE3'
   TIngots[2]='0x1BF5'
   TIngots[3]='0x1BE9'
   
   Part[0]='Platemail (25'         ; Названия частей фулла
   Part[1]='Platemail Legs'
   Part[2]='Heater Shield'
   Part[3]='Platemail Arms'
   Part[4]='Plate Helm'
   Part[5]='Platemail Gauntlets'
   Part[6]='Platemail Gorget'
   
   CIng[0]='0x0750'            ; Цвета инготов
   CIng[1]='0x0590'
   CIng[2]='0x060A'
   CIng[3]='0x0488'
   CIng[4]='0x096B'
   CIng[5]='0x0014'
   CIng[6]='0x0193'
   CIng[7]='0x04C2'
   CIng[8]='0x07D5'
   CIng[9]='0x00CE'
   CIng[10]='0x052D'
   CIng[11]='0x0455'
   CIng[12]='0x0028'
   CIng[13]='0x08AF'
   
   WIng[0]='Rusty'               ; Названия инготов
   WIng[1]='Old Copper'
   WIng[2]='Dull Copper'
   WIng[3]='Bronze'
   WIng[4]='Shadow'
   WIng[5]='Rose'
   WIng[6]='Agapite'
   WIng[7]='Blood Rock'
   WIng[8]='Verite'
   WIng[9]='Valorite'
   WIng[10]='Mytheril'
   WIng[11]='Black Rock'
   WIng[12]='Obsidian'
   WIng[13]='Plutonium'
   
   UO.IgnoreReset()
   UO.DeleteJournal()
   UO.UseObject(Sunduk)
   For Var k=0 to 3                  ; Узнаем тип
      UO.FindType(TIngots[k],-1,Sunduk)   ; Ищем любые инготы в сундуке
      If UO.FindCount() > 0 Then
         If UO.GetColor('finditem') == '0x0000' AND k == 0 Then
            UO.MSG("I make a iron full!")
            MakeIron(TIngots[k],'0x0000',Kolvo,Sunduk,Meshok,BagForFull)
            Return
         Else
            If UO.GetQuantity('finditem') < Kolvo Then   ; Для фула мало инготов
               UO.MSG("I need "+STR(Kolvo)+" or more ingots")
               UO.MoveItem('finditem','0',BagForFull)
               Wait(500)
               Return
            Else
               If TCurIng == 0 Then
                  TCurIng=TIngots[k]
               EndIf
               If UO.GetColor('finditem') == CIng[2] Then
                  UO.MSG("Dull Copper? I not make this full.")
                  UO.MoveItem('finditem',-1,BagForFull)
                  Wait(500)
                  Return
               EndIf
               If UO.GetColor('finditem') == CIng[3] Then
                  UO.MSG("Bronze? I not make this full.")
                  UO.MoveItem('finditem',-1,BagForFull)
                  Wait(500)
                  Return
               EndIf
               UO.Print("Avaible is "+STR(UO.GetQuantity('finditem'))+" ingots.")
               UO.Print("Ingots type is "+TIngots[k])
            EndIf
         EndIf
      Else
         If k == 3 AND TCurIng == 0 Then
            UO.Print("No avaible ingots. Script terminated.")
            Return
         EndIf
      EndIf
      Wait(1000)
   Next
   UO.FindType(TCurIng,-1,Sunduk)
   For Var n=0 to 13                  ; Узнаем цвет
      If CIng[n] == UO.GetColor('finditem') Then
         WCurIng = WIng[n]
         CCurIng = CIng[n]
      EndIf
   Next
   If CCurIng == '0x0000' Then
      If TCurIng == TIngots[1] Then
         WCurIng = 'Copper'
      Else
         If TCurIng == TIngots[2] Then
            WCurIng = 'Silver'
         Else
            If TCurIng == TIngots[3] Then
               WCurIng = 'Golden'
            EndIf
         EndIf
      EndIf
   EndIf
   UO.MSG("Found "+(WCurIng)+" ingots.")
   UO.FindType(Meshok,-1,Sunduk)      ; Ищем мешки для фуллов
   If UO.FindCount() == 0 Then
      UO.MSG("No bag - NO FULL !!!")
      Return
   Else
      CurMesh=UO.GetSerial('finditem')
   EndIf
   UO.FindType(TCurIng,CCurIng,Sunduk)
   UO.MoveItem('finditem',STR(Kolvo),'backpack ')   ; Забираем скока поднимем
   Wait(500)
   UO.Grab('1',CurMesh)            ; Берем мешок в пэк
   Wait(500)
   CheckLag()
   UO.SetCatchBag(CurMesh)         ; Всё что сделаем в мешок
   Var i=0
   Repeat
      UO.MSG("Try make the "+WCurIng+" "+Part[i])
      UO.AutoMenu('Blacksmithing','Colored')
      UO.AutoMenu('Colored',WCurIng+' Armor')
      UO.AutoMenu(WCurIng+' Armor',WCurIng+' Plate Armor')
      UO.AutoMenu(WCurIng+' Plate Armor',Part[i])
      Repeat
         jser=0
         UO.FindType(TCurIng,CCurIng,-1)
         IF UO.FindCount() > 0 Then
            UO.DeleteJournal()
            UO.UseObject('finditem')
         Else
            UO.Print("Ingots not found")
            UO.UnSetCatchBag()
            Repeat
               UO.FindType(TCurIng,CCurIng,-1)
               If UO.FindCount() > 0 Then
                  UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
                  Wait(500)
               EndIf
            Until UO.Count(TCurIng,CCurIng) == 0       ; Все инготы в пэке
            UO.DropHere(CurMesh)
            Wait(500)
            Return
         EndIf
         While NOT UO.InJournal("put") AND NOT UO.InJournal("failed")
            Wait(100)
         WEnd
         If UO.InJournal("put") Then
            jser=1
         EndIf
      Until jser == 1
      i=i+1
      UO.CancelMenu()
   Until i > 6
   UO.UnSetCatchBag()
   Repeat
      UO.FindType(TCurIng,CCurIng,-1)
      If UO.FindCount() > 0 Then
         UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
         Wait(500)
      EndIf
   Until UO.Count(TCurIng,CCurIng) == 0       ; Все инготы в пэке
   UO.MSG("FULL")
   UO.MoveItem(CurMesh,'-1',BagForFull)
   Wait(500)
end sub

sub MakeIron(TCurIng,CCurIng,Kolvo,Sunduk,Meshok,BagForFull)
   Var jser, CurMesh = 0
   
   DIM Part[6]
   
   Part[0]='platemail (25'         ; Названия частей фулла
   Part[1]='platemail legs'
   Part[2]='platemail arms'
   Part[3]='plate helm'
   Part[4]='platemail gloves'
   Part[5]='platemail gorget'
   
   UO.FindType(Meshok,-1,Sunduk)
   If UO.FindCount() == 0 Then
      UO.MSG("No bag - NO FULL !!!")
      Return
   Else
      CurMesh=UO.GetSerial('finditem')
   EndIf
   
   UO.FindType(TCurIng,CCurIng,Sunduk)
   If UO.GetQuantity('finditem') < Kolvo Then
      UO.MSG("I need "+STR(Kolvo)+" or more ingots")
      UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
      Wait(500)
      Return
   Else
      UO.MoveItem('finditem',STR(Kolvo),'backpack ')   ; Забираем скока поднимем
      Wait(500)
      UO.Grab('1',CurMesh)            ; Берем мешок в пэк
      Wait(500)
   EndIf
   CheckLag()
   UO.SetCatchBag(CurMesh)         ; Всё что сделаем в мешок
   Var i=0
   Repeat
      UO.MSG("Try make the Iron "+Part[i])
      UO.AutoMenu('Blacksmithing','Armor')
      UO.AutoMenu('Armor','Plate Mail')
      UO.AutoMenu('Plate Mail',Part[i])
      Repeat
         jser=0
         UO.FindType(TCurIng,CCurIng,-1)
         If UO.FindCount() > 0 Then
            UO.DeleteJournal()
            UO.UseObject('finditem')
         Else
            UO.Print("Ingots not found")
            UO.UnSetCatchBag()
            Repeat
               UO.FindType(TCurIng,CCurIng,-1)
               If UO.FindCount() > 0 Then
                  UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
                  Wait(500)
               EndIf
            Until UO.Count(TCurIng,CCurIng) == 0       ; Все инготы в пэке
            UO.DropHere(CurMesh)
            Wait(500)
            Return
         EndIf
         While NOT UO.InJournal("put") AND NOT UO.InJournal("failed")
            Wait(100)
         WEnd
         If UO.InJournal("put") Then
            jser=1
         EndIf
      Until jser == 1
      i=i+1
      UO.CancelMenu()
   Until i > 5
   UO.MSG("Try make the Iron heater shield")
   UO.AutoMenu('Blacksmithing','Shields')
   UO.AutoMenu('Shields','heater shield')
   UO.DeleteJournal()
   Repeat
      jser=0
      UO.FindType(TCurIng,CCurIng,-1)
      IF UO.FindCount() > 0 Then
         UO.UseObject('finditem')
      Else
         UO.Print("Ingots not found")
         UO.UnSetCatchBag()
         Repeat
            UO.FindType(TCurIng,CCurIng,-1)
            If UO.FindCount() > 0 Then
               UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
               Wait(500)
            EndIf
         Until UO.Count(TCurIng,CCurIng) == 0       ; Все инготы в пэке
         UO.DropHere(CurMesh)
         Wait(500)
         Return
      EndIf
      While NOT UO.InJournal("put") AND NOT UO.InJournal("failed")
         Wait(100)
      WEnd
      If UO.InJournal("put") Then
         jser=1
      EndIf
   Until jser == 1
   UO.CancelMenu()
   UO.UnSetCatchBag()
   Repeat
      UO.FindType(TCurIng,CCurIng,-1)
      If UO.FindCount() > 0 Then
         UO.MoveItem('finditem','-1',BagForFull)   ; Обратно в сундук
         Wait(500)
      EndIf
   Until UO.Count(TCurIng,CCurIng) == 0       ; Все инготы в пэке
   UO.MSG("FULL")
   UO.MoveItem(CurMesh,'-1',BagForFull)
   Wait(500)
end sub


Не делает Bronze и Dull Copper потому, что кривые менюшки. Т.е.
1) Blacksmithing -> Colored Armor & Weapons
2) Colored Armor & Weapons -> Bronze Plate Armor
3) Bronze Armor & Weapons -> Bronze Armor & Weapons
4) Bronze Armor & Weapons -> Bronze Plate Helm (для примера)
и как обойти п.п. 3 и 4 не представляю

PS: исправлены мелкие ошибки

_________________
принцип ясен?


Last edited by Bambr on 2004-09-24 17:14:48, edited 2 times in total.

Top
   
 Post subject:
PostPosted: 2004-09-24 14:40:40 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Круто... не пробывал, но впечатляет...
есть одно преложение...
дело в том что бывает толпа физлов подряд на одном айтоме, надо сменить айтем и вероятность успеха заметно увеличивается...
у тебя пытается делать айтем до посинения... может имеет после физла переходить к следующему айтему?
в моём представлении надо будет добавить доп массив с изначальным значением 0 (к примеру) и при успешной ковке записывать туда 1 и зациклить выполнение цикла ковки фула, до тех пор пока все значения в доп массиве не будут равны 1.


Top
   
 Post subject:
PostPosted: 2004-09-24 14:59:02 
Offline

Joined: 2004-06-28 16:28:29
Posts: 38
Sfagnum wrote:
Круто... не пробывал, но впечатляет...
есть одно преложение...
дело в том что бывает толпа физлов подряд на одном айтоме, надо сменить айтем и вероятность успеха заметно увеличивается...
у тебя пытается делать айтем до посинения... может имеет после физла переходить к следующему айтему?
в моём представлении надо будет добавить доп массив с изначальным значением 0 (к примеру) и при успешной ковке записывать туда 1 и зациклить выполнение цикла ковки фула, до тех пор пока все значения в доп массиве не будут равны 1.


Мысля интересная.
Но здесь вылетает вопрос рандома на шарде: что будет, если рандом сбрасывается при смене действия перса?
Дай формулу рандома и я с радостью изменю значение Kolvo на идеальное. :D

_________________
принцип ясен?


Top
   
 Post subject:
PostPosted: 2004-09-24 15:07:02 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Bambr wrote:
Мысля интересная.
Но здесь вылетает вопрос рандома на шарде: что будет, если рандом сбрасывается при смене действия перса?
- на это ответить ничего не скажу, просто сделал вывод из практики, а может оно и к лучшему если сбрасывает рандом?
Bambr wrote:
Дай формулу рандома и я с радостью изменю значение Kolvo на идеальное. :D
знал бы прикуп жил бы в Сочи(с) :)


Top
   
 Post subject:
PostPosted: 2004-09-24 17:18:27 
Offline

Joined: 2004-06-28 16:28:29
Posts: 38
Исправлен баг с журналом.

заменено
Code:
Repeat
.....
   jser=UO.JournalSerial(UO.InJournal("put"))
Until NOT UO.Journal(ser)=="put"


на

Code:
Repeat
   jser=0
.....
   If UO.InJournal("put") Then
      jser=1
   EndIf
Until jser == 1


Видел у кого-то подобную обработку, но воспроизвести не смог :cry:

_________________
принцип ясен?


Top
   
 Post subject:
PostPosted: 2004-09-27 08:01:29 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Bambr wrote:
Code:
Repeat
   jser=0
.....
   If UO.InJournal("put") Then
      jser=1
   EndIf
Until jser == 1


Видел у кого-то подобную обработку, но воспроизвести не смог :cry:
а что не так:
Code:
Repeat
.....
Until UO.InJournal("put")


Top
   
 Post subject:
PostPosted: 2004-09-27 08:40:53 
Offline

Joined: 2004-06-28 16:28:29
Posts: 38
Sfagnum wrote:
Bambr wrote:
Code:
Repeat
   jser=0
.....
   If UO.InJournal("put") Then
      jser=1
   EndIf
Until jser == 1


Видел у кого-то подобную обработку, но воспроизвести не смог :cry:
а что не так:
Code:
Repeat
.....
Until UO.InJournal("put")


проблема в другом: перед Until есть ещё проверка журнала
Code:
While NOT UO.InJournal("put") AND NOT UO.InJournal("failed") 
Wait(100)
WEnd

а т.к. UO.InJournal() работает с последней строкой, и в теле цикла могут быть ещё строки. мне надо, работать не с последней строкой, а с фиксированной, даже если она сдвинулась... бывают варианты, когда между while и until в журнал пишутся ещё строки и скрипт сбивается. так вот у кого-то была проверка с запоминанием номера строки журнала в переменную jser и дальнейшая обработка этой строки .... эээх ... реснуть бы тот кусочек :roll:

_________________
принцип ясен?


Top
   
 Post subject:
PostPosted: 2004-09-27 08:46:02 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
по поводу проблемы с менюшкой на бронзу и дулл купер...
можно сделать следущим образом:
Code:
UO.MSG("Try make the "+WCurIng+" "+Part[i]) 
UO.AutoMenu('Blacksmithing','Colored')
if CCurIng = CIng[2] or CCurIng = CIng[3] then      
   UO.AutoMenu('Colored',WCurIng+' Plate Armor')
   UO.AutoMenu(WCurIng+' Armor & Weapons',WCurIng+' Armor & Weapons')
   UO.AutoMenu(WCurIng+' Armor & Weapons',Part[i])
else
   UO.AutoMenu('Colored',WCurIng+' Armor')
   UO.AutoMenu(WCurIng+' Armor',WCurIng+' Plate Armor')
   UO.AutoMenu(WCurIng+' Plate Armor',Part[i])
end if
минимум доп кода... а охватывается всё...
ЗЫ менюшку не тестил - проверь...


Top
   
 Post subject:
PostPosted: 2004-09-27 08:49:17 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Bambr wrote:
проблема в другом: перед Until есть ещё проверка журнала
Code:
While NOT UO.InJournal("put") AND NOT UO.InJournal("failed") 
Wait(100)
WEnd

а т.к. UO.InJournal() работает с последней строкой,
здесь ты заблуждаешься... с последней строкой работает UO.Journal(0), а UO.InJournal() проверяет наличие слова/выражения во всех актуальных строках журнала...[/quote]


Top
   
 Post subject:
PostPosted: 2004-09-27 08:57:58 
Offline

Joined: 2004-06-28 16:28:29
Posts: 38
Sfagnum wrote:
по поводу проблемы с менюшкой на бронзу и дулл купер...
можно сделать следущим образом:
Code:
UO.MSG("Try make the "+WCurIng+" "+Part[i]) 
UO.AutoMenu('Blacksmithing','Colored')
if CCurIng = CIng[2] or CCurIng = CIng[3] then      
   UO.AutoMenu('Colored',WCurIng+' Plate Armor')
   UO.AutoMenu(WCurIng+' Armor & Weapons',WCurIng+' Armor & Weapons')
   UO.AutoMenu(WCurIng+' Armor & Weapons',Part[i])
else
   UO.AutoMenu('Colored',WCurIng+' Armor')
   UO.AutoMenu(WCurIng+' Armor',WCurIng+' Plate Armor')
   UO.AutoMenu(WCurIng+' Plate Armor',Part[i])
end if
минимум доп кода... а охватывается всё...
ЗЫ менюшку не тестил - проверь...


Пробовал. Не работает. Пытался даже пошагово. Но скрипт циклит, т.к. названия у предпоследнего и последнего меню идентичны.

_________________
принцип ясен?


Top
   
 Post subject:
PostPosted: 2004-09-27 09:38:14 
Offline
Expert!
User avatar

Joined: 2004-07-04 00:14:58
Posts: 1284
Bambr wrote:
Пробовал. Не работает. Пытался даже пошагово. Но скрипт циклит, т.к. названия у предпоследнего и последнего меню идентичны.
хреново...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 11 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited