Mais ações
Sem resumo de edição |
Sem resumo de edição |
||
| Linha 2: | Linha 2: | ||
# Shard: Imperial Shard | |||
# Macro: Mineração em Minoc, minera, funde e guarda os minérios no banco. | |||
#### ## ## ##### ###### ##### #### ## ## | |||
## ### ### ## ## ## ## ## ## #### ## | |||
## ####### ## ## ## ## ## ## ## ## ## | |||
## ## # ## ##### #### ##### ## ###### ## | |||
## ## ## ## ## #### ## ## ## ## | |||
## ## ## ## ## ## ## ## ## ## ## | |||
#### ## ## ## ###### ## ## #### ## ## ###### | |||
## #### ###### | |||
#### ## ## ## | |||
## ## ## ## | |||
###### ## ### #### | |||
## ## ## ## ## | |||
## ## ## ## ## | |||
## ## #### ###### | |||
#### ## ## ## ##### #### | |||
## ## ## ## #### ## ## ## ## | |||
## ## ## ## ## ## ## ## ## | |||
#### ###### ###### ##### ## ## | |||
## ## ## ## ## #### ## ## | |||
## ## ## ## ## ## ## ## ## ## | |||
#### ## ## ## ## ## ## #### | |||
# Instruções para uso do macro de mineração: | |||
# 1. Coloque um baú ou mochila no banco e anote o ID dele usando o Classic Assist. | |||
# -> Clique em Object Inspector, selecione a mochila ou bau, anote o seu serial e substitua o código na linha 'storeIngots'. | |||
# -> Coloque 0 se não quiser ir ao banco. | |||
# | |||
# 2. Na primeira execução, escolha a forja quando solicitado. | |||
# | |||
# 3. Deixe a picareta na mochila do personagem. O macro pegará a picareta automaticamente quando necessário. | |||
# | |||
# 4. O macro minerará priorizando os minérios coloridos e levará ao banco de acordo com a configuração. | |||
# | |||
# 5. Altere "maxWeightBeforeSmelt" para definir o peso máximo antes de fundir os minérios. | |||
# | |||
# 6. Altere a linha "if Weight() > (maxWeightBeforeSmelt * 0.8)" para ajustar o percentual de peso que deseja levar ao banco. | |||
import clr | |||
import System | |||
clr.AddReference('System.Core') | |||
clr.ImportExtensions(System.Linq) | |||
from Assistant import Engine | |||
from System import Random | |||
# Configurações para mineração no Imperial Shard | |||
miningToolName = "Picareta" | |||
maxWeightBeforeSmelt = 300 # Peso máximo antes de fundir o minério -> Aqui você coloca o peso máximo do seu personagem para o momento de fundir. | |||
forgeDistance = 2 # Distância máxima para acessar a forja | |||
storeIngots = 0x4003133a # ID do baú de lingotes - > Aqui você altera para a id da bag dentro do seu banco! (coloque 0 se não quiser ir ao banco) | |||
miningTool = 0 | |||
def GetSelfItems(filter=None): | |||
if Engine.Player == None: | |||
return [] | |||
if Engine.Player.Backpack.Container == None: | |||
UseObject('backpack') | |||
WaitForContents('backpack', 5000) | |||
items = Engine.Player.Backpack.Container.SelectEntities(lambda i: filter == None or i.Name.Contains(filter)) | |||
if items == None: | |||
return [] | |||
return items.Select(lambda i: i.Serial) | |||
def GetFirst(l): | |||
for item in l: | |||
return item | |||
return 0 | |||
def GetPickaxe(): | |||
if FindLayer("OneHanded"): | |||
if miningToolName in Name(GetAlias('found')): | |||
return | |||
ClearHands() | |||
Pause(1500) | |||
miningToolList = GetSelfItems(miningToolName) | |||
if miningToolList == []: | |||
SysMessage("SEM PICARETA", 39) | |||
else: | |||
miningTool = GetFirst(miningToolList) | |||
SysMessage("PICARETA: " + hex(miningTool), 64) | |||
EquipItem(miningTool, "OneHanded") | |||
Pause(2000) | |||
def Mine(): | |||
ClearJournal() | |||
while Weight() < maxWeightBeforeSmelt: | |||
for ore in [0x9caa, 0x9cab, 0x9cac]: | |||
if FindType(ore, 20): | |||
if Z('found') != Z() or X('found') < 2555 or X('found') > 2581 or Y('found') > 495 or Y('found') < 474: | |||
IgnoreObject('found') | |||
else: | |||
WalkTo('found', 1) | |||
while Weight() < maxWeightBeforeSmelt and FindObject('found', 2) and not InJournal("Voce precisaria de ", 'system'): | |||
if not UseLayer("OneHanded"): | |||
break | |||
WaitForTarget(5000) | |||
Target('found') | |||
if WaitForJournal("Voce precisaria de ", 5000, 'system'): | |||
IgnoreObject('found') | |||
ClearJournal() | |||
if not UseLayer("OneHanded"): | |||
break | |||
WaitForTarget(5000) | |||
Target('self') | |||
if WaitForJournal("nao tem minerio aqui", 1500, 'system') or WaitForJournal("Você não pode minerar isto.", 2000, 'system'): | |||
WalkRandom() | |||
ClearJournal() | |||
def WalkRandom(): | |||
rand = ['East', 'West', 'North', 'South', 'Northeast', 'Southeast', 'Southwest', 'Northwest'] | |||
rando = Random() | |||
Run(rand[rando.Next(8)]) | |||
Pause(500) | |||
Run(Direction('self')) | |||
Run(Direction('self')) | |||
Run(Direction('self')) | |||
while Y() > 495: | |||
Pause(100) | |||
Run('North') | |||
def WalkTo(alias, distance): | |||
walkfail = 0 | |||
while Distance(alias) > distance: | |||
x = X() | |||
y = Y() | |||
if walkfail < 3: | |||
Run(DirectionTo(alias)) | |||
else: | |||
WalkRandom() | |||
Pause(100) | |||
if x == X() and y == Y(): | |||
walkfail += 1 | |||
else: | |||
walkfail = 0 | |||
def Smelt(): | |||
oreTypes = [0x19b7, 0x19b8, 0x19b9, 0x19ba] | |||
WalkTo('forge', forgeDistance) | |||
ClearIgnoreList() | |||
for ore in oreTypes: | |||
while FindType(ore, -1, 'backpack'): | |||
if Graphic('found') == 0x19b7: | |||
item = Engine.Items.GetItem(GetAlias('found')) | |||
if item.Count <= 1: | |||
IgnoreObject('found') | |||
continue | |||
UseObject('found') | |||
WaitForTarget(5000) | |||
Target('forge') | |||
Pause(1000) | |||
IgnoreObject('found') | |||
def StoreInBank(): | |||
if storeIngots <= 0: | |||
return | |||
gobank = [(2564, 487), (2559, 497), (2559, 502), (2548, 501), (2527, 501), (2527, 516), (2509, 516), (2509, 541)] | |||
for (x, y) in gobank: | |||
Pathfind(x, y, Z()) | |||
while Pathfinding(): | |||
Pause(3000) | |||
if X() == gobank[-1][0] and Y() == gobank[-1][1]: | |||
Msg("banco") | |||
Pause(1000) | |||
else: | |||
return | |||
ClearIgnoreList() | |||
FindObject(storeIngots, -1, 'self') | |||
SetAlias('ore chest', 'found') | |||
while FindType(0x1bf2, -1, 'backpack'): | |||
MoveItem('found', 'ore chest') | |||
Pause(1500) | |||
IgnoreObject('found') | |||
gobank.reverse() | |||
for (x, y) in gobank: | |||
Pathfind(x, y, Z()) | |||
while Pathfinding(): | |||
Pause(100) | |||
if not FindObject('forge'): | |||
PromptAlias('forge') # Solicita ao usuário que defina a forja se ainda não estiver definida | |||
ClearIgnoreList() | |||
GetPickaxe() | |||
while FindLayer("OneHanded"): | |||
WalkRandom() | |||
Mine() | |||
Smelt() | |||
if Weight() > (maxWeightBeforeSmelt * 0.8): | |||
StoreInBank() | |||
GetPickaxe() | |||
Smelt() | |||
if FindType(0x1bf2, -1, 'backpack'): # Armazena os lingotes restantes, se houver | |||
StoreInBank() | |||
</pre> | </pre> | ||
Edição atual tal como às 19h41min de 25 de fevereiro de 2025
# Shard: Imperial Shard
# Macro: Mineração em Minoc, minera, funde e guarda os minérios no banco.
#### ## ## ##### ###### ##### #### ## ##
## ### ### ## ## ## ## ## ## #### ##
## ####### ## ## ## ## ## ## ## ## ##
## ## # ## ##### #### ##### ## ###### ##
## ## ## ## ## #### ## ## ## ##
## ## ## ## ## ## ## ## ## ## ##
#### ## ## ## ###### ## ## #### ## ## ######
## #### ######
#### ## ## ##
## ## ## ##
###### ## ### ####
## ## ## ## ##
## ## ## ## ##
## ## #### ######
#### ## ## ## ##### ####
## ## ## ## #### ## ## ## ##
## ## ## ## ## ## ## ## ##
#### ###### ###### ##### ## ##
## ## ## ## ## #### ## ##
## ## ## ## ## ## ## ## ## ##
#### ## ## ## ## ## ## ####
# Instruções para uso do macro de mineração:
# 1. Coloque um baú ou mochila no banco e anote o ID dele usando o Classic Assist.
# -> Clique em Object Inspector, selecione a mochila ou bau, anote o seu serial e substitua o código na linha 'storeIngots'.
# -> Coloque 0 se não quiser ir ao banco.
#
# 2. Na primeira execução, escolha a forja quando solicitado.
#
# 3. Deixe a picareta na mochila do personagem. O macro pegará a picareta automaticamente quando necessário.
#
# 4. O macro minerará priorizando os minérios coloridos e levará ao banco de acordo com a configuração.
#
# 5. Altere "maxWeightBeforeSmelt" para definir o peso máximo antes de fundir os minérios.
#
# 6. Altere a linha "if Weight() > (maxWeightBeforeSmelt * 0.8)" para ajustar o percentual de peso que deseja levar ao banco.
import clr
import System
clr.AddReference('System.Core')
clr.ImportExtensions(System.Linq)
from Assistant import Engine
from System import Random
# Configurações para mineração no Imperial Shard
miningToolName = "Picareta"
maxWeightBeforeSmelt = 300 # Peso máximo antes de fundir o minério -> Aqui você coloca o peso máximo do seu personagem para o momento de fundir.
forgeDistance = 2 # Distância máxima para acessar a forja
storeIngots = 0x4003133a # ID do baú de lingotes - > Aqui você altera para a id da bag dentro do seu banco! (coloque 0 se não quiser ir ao banco)
miningTool = 0
def GetSelfItems(filter=None):
if Engine.Player == None:
return []
if Engine.Player.Backpack.Container == None:
UseObject('backpack')
WaitForContents('backpack', 5000)
items = Engine.Player.Backpack.Container.SelectEntities(lambda i: filter == None or i.Name.Contains(filter))
if items == None:
return []
return items.Select(lambda i: i.Serial)
def GetFirst(l):
for item in l:
return item
return 0
def GetPickaxe():
if FindLayer("OneHanded"):
if miningToolName in Name(GetAlias('found')):
return
ClearHands()
Pause(1500)
miningToolList = GetSelfItems(miningToolName)
if miningToolList == []:
SysMessage("SEM PICARETA", 39)
else:
miningTool = GetFirst(miningToolList)
SysMessage("PICARETA: " + hex(miningTool), 64)
EquipItem(miningTool, "OneHanded")
Pause(2000)
def Mine():
ClearJournal()
while Weight() < maxWeightBeforeSmelt:
for ore in [0x9caa, 0x9cab, 0x9cac]:
if FindType(ore, 20):
if Z('found') != Z() or X('found') < 2555 or X('found') > 2581 or Y('found') > 495 or Y('found') < 474:
IgnoreObject('found')
else:
WalkTo('found', 1)
while Weight() < maxWeightBeforeSmelt and FindObject('found', 2) and not InJournal("Voce precisaria de ", 'system'):
if not UseLayer("OneHanded"):
break
WaitForTarget(5000)
Target('found')
if WaitForJournal("Voce precisaria de ", 5000, 'system'):
IgnoreObject('found')
ClearJournal()
if not UseLayer("OneHanded"):
break
WaitForTarget(5000)
Target('self')
if WaitForJournal("nao tem minerio aqui", 1500, 'system') or WaitForJournal("Você não pode minerar isto.", 2000, 'system'):
WalkRandom()
ClearJournal()
def WalkRandom():
rand = ['East', 'West', 'North', 'South', 'Northeast', 'Southeast', 'Southwest', 'Northwest']
rando = Random()
Run(rand[rando.Next(8)])
Pause(500)
Run(Direction('self'))
Run(Direction('self'))
Run(Direction('self'))
while Y() > 495:
Pause(100)
Run('North')
def WalkTo(alias, distance):
walkfail = 0
while Distance(alias) > distance:
x = X()
y = Y()
if walkfail < 3:
Run(DirectionTo(alias))
else:
WalkRandom()
Pause(100)
if x == X() and y == Y():
walkfail += 1
else:
walkfail = 0
def Smelt():
oreTypes = [0x19b7, 0x19b8, 0x19b9, 0x19ba]
WalkTo('forge', forgeDistance)
ClearIgnoreList()
for ore in oreTypes:
while FindType(ore, -1, 'backpack'):
if Graphic('found') == 0x19b7:
item = Engine.Items.GetItem(GetAlias('found'))
if item.Count <= 1:
IgnoreObject('found')
continue
UseObject('found')
WaitForTarget(5000)
Target('forge')
Pause(1000)
IgnoreObject('found')
def StoreInBank():
if storeIngots <= 0:
return
gobank = [(2564, 487), (2559, 497), (2559, 502), (2548, 501), (2527, 501), (2527, 516), (2509, 516), (2509, 541)]
for (x, y) in gobank:
Pathfind(x, y, Z())
while Pathfinding():
Pause(3000)
if X() == gobank[-1][0] and Y() == gobank[-1][1]:
Msg("banco")
Pause(1000)
else:
return
ClearIgnoreList()
FindObject(storeIngots, -1, 'self')
SetAlias('ore chest', 'found')
while FindType(0x1bf2, -1, 'backpack'):
MoveItem('found', 'ore chest')
Pause(1500)
IgnoreObject('found')
gobank.reverse()
for (x, y) in gobank:
Pathfind(x, y, Z())
while Pathfinding():
Pause(100)
if not FindObject('forge'):
PromptAlias('forge') # Solicita ao usuário que defina a forja se ainda não estiver definida
ClearIgnoreList()
GetPickaxe()
while FindLayer("OneHanded"):
WalkRandom()
Mine()
Smelt()
if Weight() > (maxWeightBeforeSmelt * 0.8):
StoreInBank()
GetPickaxe()
Smelt()
if FindType(0x1bf2, -1, 'backpack'): # Armazena os lingotes restantes, se houver
StoreInBank()