annuncio

Comprimi
Ancora nessun annuncio.

[Razor Enhanced] AutoLumberjack

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • [Razor Enhanced] AutoLumberjack

    Ecco a voi lo script per tagliare legna e scaricarla in banca totalmente AFK.
    Lo script fa queste semplici operazioni:
    - Si recalla in uno spot cerca alberi e taglia
    - Finito lo spot passa a quello successivo
    - A peso raggiunto non fa altro che scaricare in banca in determinate bag da voi scelte e ricomincia da dove aveva lasciato.

    Sicuramente lo script necessità di molte migliorie ma è stato fatto a puro scopo di test interni (per le funzioni di lettura statici e terreno) e come spunto per voi.

    codice:
    # Parametri
    RaggioScansione = 15
    TreeStaticID = [3221, 3222, 3225, 3227, 3228, 3229, 3210, 3238, 3240, 3242, 3243, 3267, 3268, 3272, 3273, 3274, 3275, 3276, 3277, 3280, 3283, 3286, 3288, 3290, 3293, 3296, 3299, 3302, 3320, 3323, 3326, 3329, 3365, 3367, 3381, 3383, 3384, 3394, 3395, 3417, 3440, 3461, 3476, 3478, 3480, 3482, 3484, 3486, 3488, 3490, 3492, 3496]
    SerialAccetta = 0x4035C605
    EquipAccettaDelay = 1000
    TimeoutOnWaitAction = 4000
    ChopDelay = 1000
    RuneBookBanca = 0x400056E4
    RuneBookAlberi = 0x40162DF1
    RecallPause = 3000
    DragDelay = 1200
    LogID = 0x1BDD
    OtherResourceID = [12687, 12697, 12127, 12688, 12689]
    LogBag = 0x40191C19 #0x4002ED85
    OtherResourceBag = 0x40191C19 #0x401CD4DB
    WeightLimit = 500
    BankX = 2051
    BankY = 1343
    
    
    # Variabili Sistema
    from System.Collections.Generic import List
    tileinfo = List[Statics.TileInfo]
    treeposx = []
    treeposy = []
    treeposz = []
    treegfx = []
    treenumber = 0
    blockcount = 0
    lastrune = 5
    onloop = True
    
    def RecallNextSpot( ):
        global lastrune
        Gumps.ResetGump()
        Misc.SendMessage("--> Racall to Spot", 77) 
        Items.UseItem(RuneBookAlberi)
        Gumps.WaitForGump(1431013363, TimeoutOnWaitAction)
        Gumps.SendAction(1431013363, lastrune)
        Misc.Pause(RecallPause)
        lastrune = lastrune + 6
        if lastrune > 95:
            lastrune = 5
            
        EquipAxe()
            
    
    def RecallBack( ):
        while Player.Position.X == BankX and Player.Position.Y == BankY:
            global lastrune
            Gumps.ResetGump()
            Misc.SendMessage("--> Torno a tagliare ", 77) 
            Misc.Pause(RecallPause)
            Items.UseItem(RuneBookAlberi)
            Gumps.WaitForGump(1431013363, TimeoutOnWaitAction)
            Gumps.SendAction(1431013363, (lastrune - 6))
            Misc.Pause(RecallPause)
            if lastrune < 6:
                Misc.SendMessage("--> Inizio Nuovo ciclo", 77) 
                lastrune = 5
            else:
                Misc.NoOperation()
            EquipAxe()
           
    
    def Scarico( ):
        global BankX
        global BankY
        while Player.Weight >= WeightLimit:
            Gumps.ResetGump()
            Items.UseItem(RuneBookBanca)
            Gumps.WaitForGump(1431013363, TimeoutOnWaitAction)
            Gumps.SendAction(1431013363, 5)
            Misc.Pause(RecallPause)
            Player.ChatSay(33, "Bank")
            Misc.Pause(300)
            for item in Player.Backpack.Contains:
                if item.ItemID == LogID:
                    Misc.SendMessage("--> Sposto Log", 77) 
                    Items.Move(item, LogBag, 0)
                    Misc.Pause(DragDelay)
                else:
                    for otherid in OtherResourceID:
                        if item.ItemID == otherid:
                            Misc.SendMessage("--> Sposto Altro", 77) 
                            Items.Move(item, OtherResourceBag, 0)
                            Misc.Pause(DragDelay)
                        else:
                            Misc.NoOperation()
    
    def RangeTree( spotnumber ):
        if (Player.Position.X - 1) == treeposx[spotnumber] and (Player.Position.Y + 1) == treeposy[spotnumber]:
            return True
        elif (Player.Position.X - 1) == treeposx[spotnumber] and (Player.Position.Y - 1) == treeposy[spotnumber]:
            return True
        elif (Player.Position.X + 1) == treeposx[spotnumber] and (Player.Position.Y + 1) == treeposy[spotnumber]:
            return True
        elif (Player.Position.X + 1) == treeposx[spotnumber] and (Player.Position.Y - 1) == treeposy[spotnumber]:
            return True
        elif Player.Position.X == treeposx[spotnumber] and (Player.Position.Y - 1) == treeposy[spotnumber]:
            return True    
        elif Player.Position.X == treeposx[spotnumber] and (Player.Position.Y + 1) == treeposy[spotnumber]:   
            return True     
        elif Player.Position.Y == treeposy[spotnumber] and (Player.Position.X - 1) == treeposx[spotnumber]:
            return True    
        elif Player.Position.Y == treeposy[spotnumber] and (Player.Position.X + 1) == treeposx[spotnumber]:   
            return True    
        else:
            return False
        
    def ScanStatic( ): 
        global treenumber
        Misc.SendMessage("--> Inizio Scansione Tile", 77)
        minx = Player.Position.X - RaggioScansione
        maxx = Player.Position.X + RaggioScansione
        miny = Player.Position.Y - RaggioScansione
        maxy = Player.Position.Y + RaggioScansione
    
        while miny <= maxy:
            while minx <= maxx:
                tileinfo = Statics.GetStaticsTileInfo(minx, miny, Player.Map)
                if tileinfo.Count > 0:
                    for tile in tileinfo:
                        for staticid in TreeStaticID:
                            if staticid == tile.StaticID:
                                Misc.SendMessage('--> Albero X: %i - Y: %i - Z: %i' % (minx, miny, tile.StaticZ), 66)
                                treeposx.Add(minx)
                                treeposy.Add(miny)
                                treeposz.Add(tile.StaticZ)
                                treegfx.Add(tile.StaticID)
                else:
                    Misc.NoOperation()
                minx = minx + 1
            minx = Player.Position.X - RaggioScansione            
            miny = miny + 1
        treenumber = treeposx.Count    
        Misc.SendMessage('--> Totale Alberi: %i' % (treenumber), 77)
        
    def MoveToTree( spotnumber ):
        pathlock = 0
        Misc.SendMessage('--> Moving to TreeSpot: %i' % (spotnumber), 77)
        Player.PathFindTo(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber])
        while not RangeTree(spotnumber):
            CheckEnemy()  
            Misc.Pause(10)
            pathlock = pathlock + 1
            if pathlock > 350:
                Player.PathFindTo(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber])  
                pathlock = 0
            else:
                Misc.NoOperation()
            
        Misc.SendMessage('--> Raggiunto TreeSpot: %i' % (spotnumber), 77)
    
    def EquipAxe( ):
        if not Player.CheckLayer("RightHand"):
            Player.EquipItem(SerialAccetta)
            Misc.Pause(EquipAccettaDelay)      
        else:
            Misc.NoOperation()
        
    def CutTree( spotnumber ):
        global blockcount
        if Target.HasTarget():
            Misc.SendMessage("--> Blocco rilevato target residuo, cancello!", 77)
            Target.Cancel()
            Misc.Pause(500)
        else:
            Misc.NoOperation()    
        
        if (Player.Weight >= WeightLimit):
            Misc.Pause(1500)
            Scarico( )
            RecallBack()
            MoveToTree(spotnumber)
        else:
            Misc.NoOperation()
        CheckEnemy()    
        Journal.Clear()
        accetta = Items.FindBySerial(SerialAccetta)
        Items.UseItem(accetta)
        Target.WaitForTarget(TimeoutOnWaitAction)
        Target.TargetExecute(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber], treegfx[spotnumber])
        Misc.Pause(ChopDelay)
        if Journal.Search("There's not enough"):
            Misc.SendMessage("--> Cambio albero", 77)
        elif Journal.Search("That is too far away"):
            blockcount = blockcount + 1
            Journal.Clear()
            if (blockcount > 15):
                blockcount = 0
                Misc.SendMessage("--> Possibile blocco rilevato cambio albero", 77)
            else:
                CutTree(spotnumber)
        else:
            CutTree(spotnumber)
            
    def CheckEnemy( ):
        if (Player.Hits < Player.HitsMax):
            Misc.SendMessage("--> WARNING: Enemy Around!",33)
            Misc.Beep()
            
            fil = Mobiles.Filter()
            fil.Enabled = True
            fil.RangeMax = 2
            enemyfound = 0
            enemys = Mobiles.ApplyFilter(fil)
            
            for enemy in enemys:
                if enemy.Notoriety == 3:
                    enemyfound = enemy.Serial
                else:
                    Misc.NoOperation()
                    
            if enemyfound != 0:
                enemymobile = Mobiles.FindBySerial(enemyfound)
                Misc.SendMessage("--> WARNING: Enemy Detected!",33) 
                Spells.CastMagery("Poison")
                Target.WaitForTarget(1000)
                Target.TargetExecute(enemymobile)
                Misc.Pause(900)
                while enemymobile:
                    Spells.CastMagery("Harm")
                    Target.WaitForTarget(1000)
                    Target.TargetExecute(enemymobile)
                    Misc.Pause(900)
                    enemymobile = Mobiles.FindBySerial(enemyfound)
                    
            while Player.Hits < Player.HitsMax:
                Spells.CastMagery("Heal")
                Target.WaitForTarget(1000)
                Target.Self()
                Misc.Pause(900)    
    
            EquipAxe()     
            
        else:
            return;
    
    Misc.SendMessage("--> Avvio Tagliaboschi", 77)     
    while onloop:
        RecallNextSpot()
        ScanStatic()
        i = 0
        while i < treenumber:
            MoveToTree(i)
            CutTree(i)
            i = i + 1
        treeposx = []
        treeposy = []
        treeposz = []
        treegfx = []
        treenumber = 0
    Ultima modifica di Alexdan; 25-03-2016, 19:58.

  • #2
    Ciao,

    se per esempio io volessi saltare la parte del recall e avere semplicemente lo script che cerca alberi (dopo averlo manualmente portato nello spot prescelto), taglia e invece di posare in banca posa tutto dentro una sacca contenuta in un pet?
    Quali parti dovrei rimuovere?
    sigpic

    Commenta


    • #3
      Originariamente inviato da Araman Visualizza il messaggio
      Ciao,

      se per esempio io volessi saltare la parte del recall e avere semplicemente lo script che cerca alberi (dopo averlo manualmente portato nello spot prescelto), taglia e invece di posare in banca posa tutto dentro una sacca contenuta in un pet?
      Quali parti dovrei rimuovere?

      Detta cosi' andrebbe rivisto parecchio, appena riesco ti metto le funzioni solo che cercano e tagliano


      Le funzioni che ti servono sono queste: Esattamente ScanStatics che si occupa di compilare la lista degli alberi in zona, MoveToTree che si occupa dello spostamento fra un albero e l'altro della lista precedente, CutTree che si occupa di tagliare e EquipAxe per quippare l'ascia.
      Da queste funzioni puoi iniziare a creare quello che ti serve


      codice:
      def ScanStatic( ): 
          global treenumber
          Misc.SendMessage("--> Inizio Scansione Tile", 77)
          minx = Player.Position.X - RaggioScansione
          maxx = Player.Position.X + RaggioScansione
          miny = Player.Position.Y - RaggioScansione
          maxy = Player.Position.Y + RaggioScansione
      
          while miny <= maxy:
              while minx <= maxx:
                  tileinfo = Statics.GetStaticsTileInfo(minx, miny, Player.Map)
                  if tileinfo.Count > 0:
                      for tile in tileinfo:
                          for staticid in TreeStaticID:
                              if staticid == tile.StaticID:
                                  Misc.SendMessage('--> Albero X: %i - Y: %i - Z: %i' % (minx, miny, tile.StaticZ), 66)
                                  treeposx.Add(minx)
                                  treeposy.Add(miny)
                                  treeposz.Add(tile.StaticZ)
                                  treegfx.Add(tile.StaticID)
                  else:
                      Misc.NoOperation()
                  minx = minx + 1
              minx = Player.Position.X - RaggioScansione            
              miny = miny + 1
          treenumber = treeposx.Count    
          Misc.SendMessage('--> Totale Alberi: %i' % (treenumber), 77)
          
      def MoveToTree( spotnumber ):
          pathlock = 0
          Misc.SendMessage('--> Moving to TreeSpot: %i' % (spotnumber), 77)
          Player.PathFindTo(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber])
          while not RangeTree(spotnumber):
              CheckEnemy()  
              Misc.Pause(10)
              pathlock = pathlock + 1
              if pathlock > 350:
                  Player.PathFindTo(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber])  
                  pathlock = 0
              else:
                  Misc.NoOperation()
              
          Misc.SendMessage('--> Raggiunto TreeSpot: %i' % (spotnumber), 77)
      
      def EquipAxe( ):
          if not Player.CheckLayer("RightHand"):
              Player.EquipItem(SerialAccetta)
              Misc.Pause(EquipAccettaDelay)      
          else:
              Misc.NoOperation()
          
      def CutTree( spotnumber ):
          global blockcount
          if Target.HasTarget():
              Misc.SendMessage("--> Blocco rilevato target residuo, cancello!", 77)
              Target.Cancel()
              Misc.Pause(500)
          else:
              Misc.NoOperation()    
          
          if (Player.Weight >= WeightLimit):
              Misc.Pause(1500)
              Scarico( )
              RecallBack()
              MoveToTree(spotnumber)
          else:
              Misc.NoOperation()
          CheckEnemy()    
          Journal.Clear()
          accetta = Items.FindBySerial(SerialAccetta)
          Items.UseItem(accetta)
          Target.WaitForTarget(TimeoutOnWaitAction)
          Target.TargetExecute(treeposx[spotnumber], treeposy[spotnumber], treeposz[spotnumber], treegfx[spotnumber])
          Misc.Pause(ChopDelay)
          if Journal.Search("There's not enough"):
              Misc.SendMessage("--> Cambio albero", 77)
          elif Journal.Search("That is too far away"):
              blockcount = blockcount + 1
              Journal.Clear()
              if (blockcount > 15):
                  blockcount = 0
                  Misc.SendMessage("--> Possibile blocco rilevato cambio albero", 77)
              else:
                  CutTree(spotnumber)
          else:
              CutTree(spotnumber)
      Ultima modifica di Alexdan; 25-03-2016, 20:00.

      Commenta


      • #4
        Grazie!
        Vedrò cosa riesco a fare =)
        sigpic

        Commenta

        Sto operando...
        X