Miningscript von Bonbori

Aus UO-Sigena Wiki
Wechseln zu: Navigation, Suche

Dieses Script arbeitet vollautomatisch. Es läuft von Punkt zu Punkt auf einer vordefinierten Route, schaufelt Erz und Sand, hackt Kristalle und packt es in beliebig viele Packpferde, die man dabei haben muss. Aus praktischen Gründen machen mehr als 3 Packtiere aber keinen Sinn. Sind alle Wegpunkte abgearbeitet, oder keine Werkzeuge mehr übrig oder alle Packis voll, beendet sich das Script. Alle Packtiere werden automatisch alle 45 Minuten gefüttert.

Die Wegpunkte haben folgendes Format und müssen einmalig an der markierten Stelle im Script eingefügt werden:

; [Wegpunktnummer]: (Beginnend mit 0)
; move [X] [Y] 0 30s
; goto inc
; Beispiel:

0:
move 1000 2000 0 30s
goto inc

Mit dem Wegpunktscript von Bonbori können die Wegpunkte sehr komfortabel erstellt werden.

Script:

tile init noOverrides
set #lpc 100
set %packilist X
set %packicnt 0
set %packiignorelist X
set %succ Ihr_legt_etwas_
set %occu I_am_already_doing_something_else.

set %fail Ihr_konntet_kein_verwertbares_Erz_gewinnen.
set %fai2 Ihr_findet_keinen_verwertbaren_sand.

set %emty Hier_gibt_es_kein_Erz_mehr_abzubauen.
set %emt2 Hier_kann_kein_sand_mehr_abgebaut_werden.

set %tool Euer_Werkzeug_zerbricht
set %mineral JUO
set %packy BO_WN ;Packpferd und -lama
set %food QQD_UWI_TWI_QQE_JQE
set %last_feeding -10000 ; #sCnt

set %range 2
set %loopLimit %range * 2

set %targetkind 3 ; muss ggf. auf 2 geändert werden 

; ========= Benutzereingaben =================== ;
set %werkzeug TWF ; ID des Werkzeugs
set %wegpunkt 0    ; Startwegpunkt
set %maxwegpunkte 95 ; Anzahl der Wegpunkte
set %fressinterval 45 ;Zeit in Minuten, nach der das Packi gefüttert wird
; ============================================== ;
event macro 1 0 all follow me closely
wait 2s
gosub packiSetup

gosub movenext
start:
gosub search
if ( %wegpunkt >= %maxwegpunkte + 1 )
   {
    gosub umpacken
    event sysmessage Alle Wegpunkte leergebuddelt!!!
    halt
   }
gosub movenext
goto start

sub search
    for %i 0 %loopLimit
        {
         for %j 0 %loopLimit
             {
              set %x ( #charposx - %range + %i )
              set %y ( #charposy - %range + %j )
              tile cnt %x %y
              for %curLayer #tilecnt 1
                 {
                   tile get %x %y %curLayer
                   ;event sysmessage #tilename
                   if ( ( #tiletype >= 1339 && #tiletype <= 1358 ) || sand in #tilename )
                     {
                       set %z %curLayer
                       gosub feedAll
                       gosub dig
                     }
                   }
                 }
             }
        }
return

sub dig
    dig_it:
    gosub kristallMining
    set %jrnl #jindex
    if ( #weight >= #maxweight - 15 )
       gosub umpacken
    use:
    finditem TWF C_ , #backpackid
    if ( #findkind <> -1 )
       {
        set #lobjectid #findid

        event macro 17
        set #ltargetx %x
        set #ltargety %y
        set #ltargetz %z
        set #ltargetkind 3
        set #ltargettile #tiletype

        target 2s
        if #targcurs = 0
           {
           wait 10
           goto use
           }
        targ:
        event macro 22
        wait 1
        if #targcurs = 1
           goto targ
        while #true
              {
               if ( #jindex > %jrnl )
                  {
                   set %jrnl %jrnl + 1
                   scanjournal %jrnl
                   if ( %fail in #journal || %fai2 in #journal || %succ in #journal )
                      {
                       gosub checktool
                       goto dig_it
                      }
                   if ( %occu in #journal )
                      wait 100
                   if ( %emty in #journal || %emt2 in #journal )
                      {
                       gosub kristallMining
                       return
                      }
                  }
              }
       }
       else
       {
        gosub umpacken
        event sysmessage Wegpunkt: %wegpunkt
        event sysmessage No shovels!!!
        event sysmessage Kill script...
        halt
       }
return

sub checktool
scanjournal %jrnl
if ( %tool in #journal )
   {
   wait 1s
   goto dig_it
   }
return

sub umpacken
  set #nextcposx 0
  set #nextcposy 0
  tryagain:
  wait 1s
  set %journalIndex #jindex
  gosub checkAllFull
  finditem %packilist G_1
  if #findkind = -1
  {
     event macro 1 0 all come
     goto tryagain
  }
  if #findkind <> -1
  {
     set %packi_id #findid
     set #lobjectid #findid
     event macro 17 0
     wait 1s

     repeat
       finditem DWJ_POF C_ , #backpackid
       set %_contid #contid
       exevent drag #findid #findstack
       wait 10
       exevent dropc %_contid
       

       for %ii %journalIndex #jindex
           {
              set %scan %ii + 1
              scanjournal %scan
              if ( too_heavy_for in #journal || solches_Gewicht_nicht_tragen in #journal )
                 {
                    ignoreitem %packi_id 1
                    if ( %packiignorelist = X )
                    {
                       set %packiignorelist %packi_id
                    }
                    else
                    {
                       set %packiignorelist %packiignorelist , _ , %packi_id
                    }
                    goto tryagain
                 }
           }
     until ( #findcnt <= 0 )
  }
return

sub feedAll
    set %timeSince ( #sCnt - %last_feeding ) / 60
    event sysmessage Letzte Fuetterung vor %timeSince Minuten
    if ( ( %timeSince >= %fressinterval ) || ( #sCnt <= ( %fressinterval * 60 ) ) )
    {
       ignoreitem reset 1
       for %m 1 %packicnt
       {
          finditem %packilist G_1
          if ( #findcnt > 0 )
             {
               set %packy_cont #findid
               finditem %food C
                if #findkind <> -1
                   {
                    exevent drag #findid 1
                    wait 10
                    exevent dropc %packy_cont
                    wait 10
                    ignoreitem %packy_cont 1
                    }
                 else
                     {
                     event sysmessage KEIN FUTTER MEHR:::!!!
                     }
             }
       }
       ignoreitem reset 1
       if ! ( %packiignorelist = X )
          ignoreitem %packiignorelist 1

       set %last_feeding #sCnt
    }
return

sub kristallMining
    finditem %mineral G_1
    if ( #findkind <> -1 )
       {
         set %j #jindex
         set #lobjectid #findid
         event macro 17 0
         while #true
           {
           wait 1
           if ( %j < #jindex )
             {
              set %j %j + 1
              scanjournal %j

              if ( Kristall_in_Euren_Rucksack. in #journal )
                {
                  return
                }

             }
           }
       }
return

sub packiSetup
    finditem %packy G_3
    set %packicnt #findcnt
    
    for %k 1 %packicnt
        {
          finditem %packy G_3
          if #findcnt > 0
             {
                if ( %k = 1 )
                   {
                     set %packilist #findid
                   }
                else
                   {
                     set %packilist %packilist , _ , #findid
                   }
                ignoreitem #findid 1
             }
        }
    ignoreitem reset 1
return

sub checkAllFull
    str Len %packiignorelist
    set %ignoreLen #strRes
    str Len %packilist
    if ( %ignoreLen = #strRes )
    {
       event sysmessage Alle Packis sind voll!!!
       halt
    }
return

sub movenext
goto %wegpunkt

; ==================== ;
; == Wegpunkte hier == ;
; ==================== ;

; ==================== ;
inc:
set %wegpunkt %wegpunkt + 1
return