Back to "b" tags

Brewing-Bro by nev0r

1//////////////////////////////
2//
3// Brewing-Bot for UO Outlands
4// - Processes kettles and casks within range
5// - No mandatory setup, an optional setup section can be found below
6// - Make sure to carry all items you want to be added to your kettles and casks in your backpack
7// - WARNING: server system messages are needed to determine necessary actions, make sure they are not filtered for scripts: 
8//      Razor -> Filters -> Text&Messages ->
9//      - Uncheck "Filter repeating system messages"
10//      - "Enable text filter" and "Filter system messages" (list entry sub-menu) can be checked, however "Ignore filtered messages in overhead and scripts" (list entry sub-menu) has to be unchecked
11//
12//////////////////////////////
13
14######## MANUAL SETUP ########
15
16# brewingRange: 1 - 18
17    # Amout of tiles around character that will be searched for brewing equipment. If there are no unprocessed items left within this range the script will terminate.
18    # Note: to actually work the kettle and cask you need to be in a range of 2 tiles, maximal visual range is 18 tiles
19    setvar! brewingRange 2
20
21# brewingSkipOverheadInfo: 0 ... Overhead On, 1 ... Overhead Off
22    # Display status information above kettles and casks
23    setvar! brewingSkipOverheadInfo 0
24
25# brewingDebugMode: 0 ... Off, 1 ... On
26    # Display additional status information in our journal for easier debugging
27    setvar! brewingDebugMode 0
28
29###### END MANUAL SETUP ######
30
31//////////////////////////////
32// 
33// Changelog:
34// - 09-Dec-2024: Added overhead info above unprocessed kettles and casks outside 2 tiles range, and possibility to continue brewing session in case script did not finish
35//
36//////////////////////////////
37
38if timerexists brewingRestartTimer
39    if timer brewingRestartTimer < 10000
40        unsetvar brewingDone
41    endif
42    removetimer brewingRestartTimer    
43endif
44
45if not varexist brewingDone or brewingDone = 1
46    setvar! brewingDone 0
47    @clearignore
48    clearsysmsg
49else
50    settimer brewingRestartTimer 0
51    overhead "|* Resuming brewing *|" cBeer
52    sysmsg "|* Resuming brewing *|" cBeer
53    overhead "|* Replay to start fresh *|" cLightOrange
54    sysmsg "|* Replay within 10s to start fresh *|" cLightOrange
55endif
56
57setvar! brewingMinWaitForServerResponse 200
58setvar! brewingMaxWaitForServerResponse 1000
59setvar! brewingWaitForObjectDelay 600
60if not timerexists brewingObjectDelayTimer
61    settimer brewingObjectDelayTimer brewingWaitForObjectDelay
62endif
63
64setvar! brewingKettleGumpID 2803256377
65setvar! brewingCaskGumpID 2874981722
66
67setvar! cBeer 1720
68setvar! cGreen 68
69setvar! cLightBlue 100
70setvar! cLightOrange 145
71setvar! cRed 33
72setvar! cWhite 1150
73
74removelist brewingEmptyCaskList
75createlist brewingEmptyCaskList
76
77while findtype "brewing kettle|brewing barrel" ground -1 -1 brewingRange
78
79    //World save
80    if insysmsg "world is saving"
81        sysmsg "Waiting for world save ..."
82        settimer globalWorldSaveTimer 0
83        while timer globalWorldSaveTimer < 10000
84            if insysmsg "save complete"
85                sysmsg "The world has been saved!"
86                settimer brewingWaitTimer 0
87                getlabel backpack pingCheck
88                while timer brewingWaitTimer < brewingMinWaitForServerResponse
89                endwhile
90                break
91            endif
92        endwhile
93    endif
94
95    if targetexists
96        target cancel
97    endif
98
99    if brewingDebugMode > 0
100        settimer brewingDebugTimer 0
101    endif
102
103    if not timerexists brewingOverheadTimer
104        overhead "|* Brewing *|" cBeer
105        settimer brewingOverheadTimer 0
106    elseif not findtype "brewing kettle|brewing barrel" ground -1 -1 2 and timer brewingOverheadTimer > 2000
107        overhead "|* Searching equipment *|" cBeer
108        if brewingSkipOverheadInfo = 0
109            createlist brewingUnfinishedEquipmentList
110            while 10 > index and findtype "brewing kettle|brewing barrel" ground -1 -1 brewingRange as localEquipment
111                overhead "Pending" cLightOrange localEquipment
112                overhead "" cLightOrange localEquipment
113                pushlist brewingUnfinishedEquipmentList localEquipment
114                @ignore localEquipment
115            endwhile
116            @unignore brewingUnfinishedEquipmentList
117            removelist brewingUnfinishedEquipmentList
118        endif
119        settimer brewingOverheadTimer 0
120        continue
121    elseif timer brewingOverheadTimer > 2000
122        overhead "|* Brewing *|" cBeer
123        settimer brewingOverheadTimer 0
124    endif
125    
126    //Refill water containers in proximity if we are next to a water tile (currently once per script execution)
127    if findtype "water" ground -1 -1 2
128        while findtype "water" ground -1 -1 2 and findtype 3703|3707|3715|4090|5344|5453 ground -1 -1 2 as localWaterContainer
129            while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
130            endwhile
131            dclick localWaterContainer
132            if brewingDebugMode > 0
133                sysmsg "[Brewing] Trying to refill water containers (Timer: {{brewingDebugTimer}} ms)" cLightBlue 
134            endif
135            settimer brewingObjectDelayTimer 0
136            @ignore localWaterContainer
137        endwhile
138        while findtype "water" ground -1 -1 2 and findtype 3703|3707|3715|4090|5344|5453 backpack as localWaterContainer
139            while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
140            endwhile
141            dclick localWaterContainer
142            if brewingDebugMode > 0
143                sysmsg "[Brewing] Trying to refill water containers (Timer: {{brewingDebugTimer}} ms)" cLightBlue
144            endif
145            settimer brewingObjectDelayTimer 0
146            @ignore localWaterContainer
147        endwhile
148    endif
149
150    //Casks
151    if findtype "brewing barrel" ground -1 -1 2 as localCask and not inlist brewingEmptyCaskList localCask
152
153        getlabel localCask localCaskLabel
154        
155        if "%)" in localCaskLabel 
156            @ignore localCask
157        
158        elseif "(needs mixture)" in localCaskLabel
159            pushlist brewingEmptyCaskList localCask
160        
161        else
162            gumpclose brewingCaskGumpID
163            while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
164            endwhile
165            dclick localCask        
166            settimer brewingObjectDelayTimer 0
167            waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
168
169            if not gumpexists brewingCaskGumpID
170                wait brewingMaxWaitForServerResponse
171                if not gumpexists brewingCaskGumpID
172                    continue
173                endif
174            endif        
175        
176            if gumpexists brewingCaskGumpID and "complete)" in localCaskLabel 
177                if insysmsg "You collect 10 cleansing brew from the brewing cask."
178                endif
179                gumpresponse 13 brewingCaskGumpID
180                settimer brewingWaitTimer 0
181                waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
182                getlabel backpack pingCheck
183                pushlist brewingEmptyCaskList localCask
184                while timer brewingWaitTimer < brewingMinWaitForServerResponse
185                endwhile
186                if brewingDebugMode > 0
187                    if insysmsg "You collect 10 cleansing brew from the brewing cask."
188                        sysmsg "[Brewing] Cleansing brew collected (Cask: {{localCask}}, Timer: {{brewingDebugTimer}} ms)" cLightBlue
189                    else
190                        sysmsg "[Brewing] Cleansing brew pickup failed (Cask: {{localCask}}, Timer: {{brewingDebugTimer}} ms)" cLightBlue
191                    endif
192                endif
193            
194            //Refill cask
195            else
196
197                //Hops
198                if gumpexists brewingCaskGumpID and ingump "Add Hops (0/1)" 2874981722 and not ingump "Add Kettle Mixture (0/1)" 2874981722
199                    if findtype 6818 backpack as localHops
200                        if insysmsg "This cask does not currently require hops." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
201                        endif
202                        while not targetexists
203                            gumpresponse 11 brewingCaskGumpID
204                            waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
205                            if insysmsg "This cask does not currently require hops." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
206                                break
207                            endif
208                        endwhile
209                        if targetexists
210                            target localHops
211                            settimer brewingWaitTimer 0
212                            waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
213                            getlabel backpack pingCheck
214                            while timer brewingWaitTimer < brewingMinWaitForServerResponse
215                            endwhile
216                            if brewingDebugMode > 0
217                                overhead "Hops" cGreen localCask
218                                sysmsg "[Brewing] Adding hops" cLightBlue
219                            endif
220                        endif
221                    else
222                        overhead "|* Not enough hops *|" cRed
223                    endif
224                endif
225
226                //Jar of Honey
227                if gumpexists brewingCaskGumpID and counttype 2540 backpack >= 10 and not ingump "Add Jar of Honey (10/10)" 2874981722 and not ingump "Add Hops (0/1)" 2874981722
228                    while not ingump "Add Jar of Honey (10/10)" 2874981722 and findtype 2540 backpack as localJarOfHoney
229                        if insysmsg "This cask does not currently require jars of honey." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
230                        endif
231                        while not targetexists
232                            gumpresponse 12 brewingCaskGumpID
233                            waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
234                            if insysmsg "This cask does not currently require jars of honey." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
235                                break
236                            endif
237                        endwhile
238                        if targetexists
239                            target localJarOfHoney
240                            settimer brewingWaitTimer 0
241                            waitforgump brewingCaskGumpID brewingMaxWaitForServerResponse
242                            while find localJarOfHoney backpack and timer brewingWaitTimer < brewingMaxWaitForServerResponse
243                            endwhile
244                        else
245                            break
246                        endif
247                    endwhile
248                    if brewingDebugMode > 0 and not ingump "Add Jar of Honey (10/10)" 2874981722
249                        sysmsg "[Brewing] Honey failed" cRed
250                    elseif brewingDebugMode > 0
251                        overhead "Honey" cBeer localCask
252                        sysmsg "[Brewing] Honey added" cLightBlue
253                    endif
254                elseif counttype 2540 backpack < 10
255                    overhead "|* Not enough honey *|" cRed
256                endif
257
258                if brewingDebugMode > 0 and ingump "Add Jar of Honey (10/10)" 2874981722
259                    overhead "Done" cGreen localCask
260                    overhead "" cGreen localCask
261                    sysmsg "[Brewing] Cask done (Serial: {{localCask}}, Timer: {{brewingDebugTimer}})" cLightBlue 
262                elseif brewingDebugMode > 0
263                    overhead "Fail" cRed localCask
264                    overhead "" cRed localCask
265                    sysmsg "[Brewing] Cask refill failed (Serial: {{localCask}}, Timer: {{brewingDebugTimer}})" cLightBlue                 
266                endif
267                @ignore localCask
268
269            endif
270        endif
271
272    //Kettle            
273    elseif findtype "brewing kettle" ground -1 -1 2 as localKettle
274
275        getlabel localKettle localKettleLabel
276        
277        if "%)" in localKettleLabel
278            @ignore localKettle
279        
280        else
281            gumpclose brewingKettleGumpID
282            while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
283            endwhile
284            dclick localKettle
285            settimer brewingObjectDelayTimer 0
286            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
287
288            if not gumpexists brewingKettleGumpID
289                wait brewingMaxWaitForServerResponse
290                if not gumpexists brewingKettleGumpID
291                    continue
292                endif
293            endif    
294
295            //Transfer mixture to cask
296            if gumpexists brewingKettleGumpID and "complete)" in localKettleLabel and list brewingEmptyCaskList > 0
297                if poplist brewingEmptyCaskList front as localEmptyCask
298                    if insysmsg "You transfer the mixture to a brewing cask." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
299                    endif
300                    while not targetexists
301                        gumpresponse 13 brewingKettleGumpID
302                        waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
303                        if insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
304                            break
305                        endif
306                    endwhile
307                    if targetexists
308                        target localEmptyCask
309                        settimer brewingWaitTimer 0
310                        waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
311                        getlabel backpack pingCheck
312                        while timer brewingWaitTimer < brewingMinWaitForServerResponse
313                        endwhile
314                        if insysmsg "You transfer the mixture to a brewing cask."
315                            @unignore localEmptyCask
316                            if brewingDebugMode > 0
317                                overhead "Mixture" cWhite localEmptyCask
318                                sysmsg "[Brewing] Adding mixture (Cask: {{localEmptyCask}}, Timer: {{brewingDebugTimer}} ms)" cLightBlue
319                            endif
320                        else
321                            pushlist brewingEmptyCaskList localEmptyCask front
322                        endif
323                    endif
324                endif
325            endif
326            
327            //Refill kettle
328            if gumpexists brewingKettleGumpID and ingump "(0.0% Complete)" 2803256377
329                
330                //Barley
331                if gumpexists brewingKettleGumpID and ingump "Add Barley (0/1)" 2803256377
332                    if findtype 49557 backpack as localBarley
333                        if insysmsg "This kettle does not currently require barley." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
334                        endif
335                        while not targetexists
336                            gumpresponse 10 brewingKettleGumpID
337                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
338                            if insysmsg "This kettle does not currently require barley." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
339                                break
340                            endif
341                        endwhile
342                        if targetexists
343                            target localBarley
344                            settimer brewingWaitTimer 0
345                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
346                            getlabel backpack pingCheck
347                            while timer brewingWaitTimer < brewingMinWaitForServerResponse
348                            endwhile
349                            if brewingDebugMode > 0
350                                overhead "Barley" cGreen localKettle
351                                sysmsg "[Brewing] Adding barley" cLightBlue
352                            endif
353                        endif
354                    else
355                        overhead "|* Not enough barley *|" cRed
356                    endif
357                endif
358
359                //Water
360                if gumpexists brewingKettleGumpID and ingump "Add Water (0/250)" 2803256377 and not ingump "Add Barley (0/1)" 2803256377
361                    createlist brewingFullWateringCanList
362                    if insysmsg "You do not see any nearby water containers to fill this from."
363                    endif
364                    while findtype 25570|56416|56417 backpack as localWateringCan
365                        getlabel localWateringCan localWateringCanLabel
366                        if "250/250" in localWateringCanLabel
367                            pushlist brewingFullWateringCanList localWateringCan
368                            @ignore localWateringCan
369                        else
370                            while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
371                            endwhile
372                            dclick localWateringCan
373                            settimer brewingWaitTimer 0
374                            settimer brewingObjectDelayTimer 0
375                            getlabel backpack pingCheck
376                            while timer brewingWaitTimer < brewingMinWaitForServerResponse
377                                if insysmsg "You completely fill the watering can."
378                                    break
379                                elseif insysmsg "You do not see any nearby water containers to fill this from."
380                                    @ignore localWateringCan
381                                    break
382                                endif                                    
383                            endwhile
384                        endif
385                    endwhile
386                    @unignore brewingFullWateringCanList
387                    if list brewingFullWateringCanList = 0
388                        overhead "|* No water supply *|" cRed
389                    elseif poplist brewingFullWateringCanList front as localFullWateringCan
390                        if insysmsg "This kettle does not currently require water." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item."
391                        endif
392                        while find localFullWateringCan backpack and not targetexists
393                            gumpresponse 11 brewingKettleGumpID
394                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
395                            if insysmsg "This kettle does not currently require water." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item." 
396                                break
397                            endif
398                        endwhile
399                        if targetexists and find localFullWateringCan backpack
400                            target localFullWateringCan
401                            settimer brewingWaitTimer 0
402                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
403                            getlabel backpack pingCheck
404                            while timer brewingWaitTimer < brewingMinWaitForServerResponse
405                            endwhile                            
406                            if brewingDebugMode > 0
407                                overhead "Water" cLightBlue localKettle
408                                sysmsg "[Brewing] Adding water" cLightBlue
409                            endif
410                        endif
411                    endif
412                    removelist brewingFullWateringCanList
413                endif
414
415                //Garlic
416                if gumpexists brewingKettleGumpID and counttype 3972 self >= 10 and not ingump "Add Garlic (10/10)" 2803256377 and not ingump "Add Water (0/250)" 2803256377
417                    if not findtype 3972 backpack 0 10 and findtype 3972 self 0 10 as localGarlic
418                        while timer brewingObjectDelayTimer < brewingWaitForObjectDelay
419                        endwhile
420                        @drop backpack -1 -1 -1
421                        lift localGarlic 10
422                        settimer brewingObjectDelayTimer 0
423                        @drop backpack -1 -1 -1
424                        settimer brewingWaitTimer 0
425                        while not find localGarlic backpack 0 10 and timer brewingWaitTimer < brewingMaxWaitForServerResponse
426                        endwhile
427                    endif
428                    while not ingump "Add Garlic (10/10)" 2803256377 and findtype 3972 backpack as localGarlic
429                        if insysmsg "This kettle does not currently require garlic." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item." or insysmsg "That item must be in your backpack in order to be used."
430                        endif
431                        while not targetexists
432                            gumpresponse 12 brewingKettleGumpID
433                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
434                            if insysmsg "This kettle does not currently require garlic." or insysmsg "You must wait for this to finish brewing." or insysmsg "You are too far away to use that item." or insysmsg "That item must be in your backpack in order to be used."
435                                break
436                            endif
437                        endwhile
438                        if targetexists
439                            target localGarlic
440                            settimer brewingWaitTimer 0
441                            waitforgump brewingKettleGumpID brewingMaxWaitForServerResponse
442                            while find localGarlic backpack and timer brewingWaitTimer < brewingMaxWaitForServerResponse
443                            endwhile
444                        else
445                            break
446                        endif
447                    endwhile
448                    if brewingDebugMode > 0 and not ingump "Add Garlic (10/10)" 2803256377
449                        sysmsg "[Brewing] Garlic failed" cRed
450                    elseif brewingDebugMode > 0
451                        overhead "Garlic" cWhite localKettle
452                        sysmsg "[Brewing] Garlic added" cLightBlue
453                    endif
454                elseif counttype 3972 self < 10
455                    overhead "|* Not enough garlic *|" cRed
456                endif
457                
458                if brewingDebugMode > 0 and ingump "Add Garlic (10/10)" 2803256377
459                    overhead "Done" cGreen localKettle
460                    overhead "" cGreen localKettle
461                    sysmsg "[Brewing] Kettle done (Serial: {{localKettle}}, Timer: {{brewingDebugTimer}})" cLightBlue 
462                elseif brewingDebugMode > 0
463                    overhead "Fail" cRed localKettle
464                    overhead "" cRed localKettle
465                    sysmsg "[Brewing] Kettle refill failed (Serial: {{localKettle}}, Timer: {{brewingDebugTimer}})" cLightBlue
466                endif
467            endif
468            @ignore localKettle            
469
470        endif
471    endif
472
473    if list brewingEmptyCaskList > 0 and not findtype "brewing kettle" ground -1 -1 brewingRange
474        overhead "|* Not enough mixtures *|" cRed
475        @ignore brewingEmptyCaskList
476    endif
477
478endwhile
479
480gumpclose brewingKettleGumpID
481gumpclose brewingCaskGumpID
482
483removetimer brewingDebugTimer
484removetimer brewingOverheadTimer
485removetimer brewingWaitTimer
486removetimer globalWorldSaveTimer
487
488removelist brewingEmptyCaskList
489
490@clearignore
491setvar! brewingDone 1
492overhead "|* Brewing Done *|" cBeer