Ativa o menu
Toggle preferences menu
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.
Revisão de 19h43min de 25 de fevereiro de 2025 por Matthews (discussão | contribs) (Criou página com '<pre> # Name: Lumberjack Near Me (Extended) # Description: Chops trees in successive 10x10 areas until stopped. # Author: Revisado por ChatGPT e otimizado por Bard from ClassicAssist.UO.Data import Statics from ClassicAssist.UO import UOMath from Assistant import Engine from System import Convert import clr clr.AddReference('System.Core') # Configurações do Usuário //////////////////////////////////////////////////////////////////// packAnimals = [0x208c1, 0x208c2,...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
# Name: Lumberjack Near Me (Extended)
# Description: Chops trees in successive 10x10 areas until stopped.
# Author: Revisado por ChatGPT e otimizado por Bard
from ClassicAssist.UO.Data import Statics
from ClassicAssist.UO import UOMath
from Assistant import Engine
from System import Convert
import clr

clr.AddReference('System.Core')

# Configurações do Usuário ////////////////////////////////////////////////////////////////////

packAnimals = [0x208c1, 0x208c2, 0x208c0]  # IDs dos animais de carga

logs = [0xce0, 0xcda, 0xce3, 0xcdd, 0xcd8, 0xcd6, 0xcd0, 0xcd3, 0xce6, 0xccd, 0xcdc, 0xc9e, 0xcda, 0xce3]  # IDs de madeiras no servidor

dropLogs = False  # Para descartar a madeira no chão, altere para True

moveLogsToPackAnimal = True  # Mover madeiras para animais de carga

# Variáveis Internas /////////////////////////////////////////////////////////////////////////

packCount = 0  # Não alterar

maxPackCnt = len(packAnimals)  # Não alterar

# Funções Principais ////////////////////////////////////////////////////////////////////////

def GetNearestTree():

    """Busca árvores em uma área 10x10 ao redor do jogador."""

    trees = []

    for x in range(Engine.Player.X - 10, Engine.Player.X + 10):

        for y in range(Engine.Player.Y - 10, Engine.Player.Y + 10):

            statics = Statics.GetStatics(Convert.ChangeType(Engine.Player.Map, int), x, y)

            if statics:

                for s in statics:

                    if s.Name.Contains("tree"):

                        trees.append({'X': s.X, 'Y': s.Y})

    return trees

def moveToPackAnimal():

    """Move a madeira do jogador para o animal de carga."""

    global packCount

    pack = packAnimals[packCount]

    for log in logs:

        while FindType(log, -1, 'backpack'):

            MoveItem("found", pack)

            Pause(1000)

    packCount += 1

    if packCount >= maxPackCnt:

        packCount = 0

def CutLogs():

    """Transforma madeira bruta em tábuas."""

    while FindType(0x1bdd, -1, "backpack"):

        UseLayer("TwoHanded")

        WaitForTarget(5000)

        Target("found")

        Pause(1000)

def moveToTree(tree):

    """Move-se até uma árvore."""

    i = 0

    while X("self") != tree['X'] or Y("self") != tree['Y']:

        if i >= 3:

            HeadMsg("Pathfinding falhou. Ignorando árvore.", "self")

            return False

        HeadMsg("Pathfinding", "self")

        Pathfind(tree['X'], tree['Y'], 0)

        Pause(2000)

        i += 1

    return True

def lumberjack():

    """Corta madeira até que o local esteja sem recursos."""

    # Corta a árvore uma vez
    UseLayer("TwoHanded")
    WaitForTarget(1000)
    TargetTileOffsetResource(-1, 0, 0)
    Pause(1100)

    # Aguarda a mensagem de que não há mais madeira no local
    while not InJournal("Não tem mais madeira neste local"): 
        Pause(1000)  # Aguarda um segundo antes de verificar o journal novamente
    ClearJournal()  # Limpa o journal


    if dropLogs:

        for log in logs:

            while FindType(log, -1, 'backpack'):

                MoveItemOffset("found", 0, 1, 0, -1)

                Pause(1000)

    if moveLogsToPackAnimal:

        moveToPackAnimal()

# Execução Principal ////////////////////////////////////////////////////////////////////////

while True:  # Loop infinito para processar múltiplos tiles 10x10

    Trees = GetNearestTree()

    if len(Trees) > 0:

        TotalTrees = len(Trees)

        SysMessage(str(TotalTrees) + " árvores encontradas na fila")

        for tree in Trees:

            tree['X'] += 1  # Previne que o personagem fique preso

            if moveToTree(tree):

                lumberjack()

                TotalTrees -= 1

                SysMessage(str(TotalTrees) + " árvores restantes!")

                Msg("all follow me")  # Comando para chamar animais de carga

                CutLogs()

    else:

        SysMessage("Sem árvores na área atual. Movendo para uma nova área...")

        # Move o jogador para um novo tile 10x10 (ajustar deslocamento conforme necessário)

        newX = Engine.Player.X + 20

        newY = Engine.Player.Y

        Pathfind(newX, newY, 0)

        Pause(3000)