Documentação › Lua

Map e Creature

Map lê o mapa que o cliente conhece (pisos, itens, criaturas) e age sobre ele: mover itens, usar, olhar, andar até um ponto. Creature é um objeto que representa uma criatura pelo id.

Um piso que o bot não conhece devolve nil. Map.getTiles e Map.getAllPositionsWithTopItemId olham só a área visível do cliente no seu andar: 8 pisos para oeste, 9 para leste, 6 para norte e 7 para sul.

Map: criaturas#

Map.getCreatureIds(mesmoAndar, sóPlayers)#

Map.getCreatureIds(mesmoAndar, sóPlayers) → lista ou nil

Ids das criaturas visíveis.

ParâmetroTipoDescrição
mesmoAndarbooleano, opcionaltrue (padrão) só o seu andar; false todos os andares
sóPlayersbooleano, opcionaltrue só players; false (padrão) players, monstros, NPCs e summons

Retorna nil quando não há nenhuma.

lua
for _, id in ipairs(Map.getCreatureIds(true, false) or {}) do
  local c = Creature.new(id)
  if c:getType() == Enums.CreatureTypes.CREATURETYPE_MONSTER then print(c:getName()) end
end

Map.getPlayerOnScreen(nomeOuId)#

Map.getPlayerOnScreen(nomeOuId) → Creature ou nil

Procura um player visível pelo nome (sem diferenciar maiúsculas) ou pelo id.

lua
local amigo = Map.getPlayerOnScreen("Nome do Amigo")
if amigo then print(amigo:getHealthPercent()) end

Map: pisos#

Map.getThings(x, y, z)#

Map.getThings(x, y, z) → lista ou nil

O que está num piso, de baixo para cima (até 10). Item: {id, count, isCreature = false, stackPos}. Criatura: {id, isCreature = true, creatureId, stackPos}.

lua
local p = Player.getPosition()
for _, t in ipairs(Map.getThings(p.x, p.y, p.z) or {}) do print(t.id, t.isCreature) end

Map.getThingsCount(x, y, z)#

Map.getThingsCount(x, y, z) → número ou nil

Quantas coisas há no piso.

lua
print(Map.getThingsCount(32000, 32000, 7))

Map.getTopItemId(x, y, z)#

Map.getTopItemId(x, y, z) → número ou nil

Id do item do topo do piso.

lua
print(Map.getTopItemId(32000, 32000, 7))

Map.getTopCreatureId(x, y, z)#

Map.getTopCreatureId(x, y, z) → número ou nil

Id da primeira criatura no piso.

lua
local id = Map.getTopCreatureId(32000, 32000, 7)
if id then print(Creature.new(id):getName()) end

Map.getTiles()#

Map.getTiles() → lista

Todos os pisos conhecidos do seu andar na área visível, como {x, y, z, things} (things no formato de getThings).

lua
print(#Map.getTiles() .. " pisos visíveis")

Map.getAllPositionsWithTopItemId(itemId)#

Map.getAllPositionsWithTopItemId(itemId) → lista ou nil

Posições do seu andar, na área visível, onde o item do topo é itemId.

lua
-- troque 1948 pelo id do item que você procura
for _, pos in ipairs(Map.getAllPositionsWithTopItemId(1948) or {}) do print(pos.x, pos.y) end

Map.isTileWalkable(x, y, z, opções)#

Map.isTileWalkable(x, y, z, opções) → booleano

Se dá para pisar no piso. false para piso desconhecido, sem chão ou bloqueado.

OpçãoPadrãoDescrição
ignoreBlockPathtrueIgnora pisos que o bot evitaria (campo, buraco)
ignoreMagicFieldtrueIgnora campos mágicos
ignoreFloorChangetrueAceito, mas o bot não diferencia troca de andar
ignoreMonstersfalseMonstros não bloqueiam
ignoreNpcsfalseNPCs não bloqueiam

Pisos que o bot evitaria só passam quando ignoreBlockPath e ignoreMagicField são true. Você mesmo nunca bloqueia.

lua
local p = Player.getPosition()
print(Map.isTileWalkable(p.x + 1, p.y, p.z, { ignoreMonsters = true }))

Map.canWalk(x, y, z, ignoreBlockPath, ignoreMagicField, ignoreMonsters, ignoreNpcs)#

Map.canWalk(x, y, z, ...) → booleano

O mesmo que isTileWalkable, com as opções como parâmetros na ordem acima. Padrões: true, true, false, false.

lua
print(Map.canWalk(32000, 32000, 7))

Map.getCameraPosition()#

Map.getCameraPosition() → {x, y, z}

Centro do mapa do cliente, que é a sua posição.

lua
print(Map.getCameraPosition().z)

Map: ações#

Map.goTo(x, y, z)#

Map.goTo(x, y, z) → booleano

Calcula o caminho até a posição e começa a andar. Retorna false sem caminho.

lua
if not Map.goTo(32369, 32241, 7) then print("sem caminho") end

Map.lookAt(x, y, z)#

Map.lookAt(x, y, z) → true ou nil

Dá look no item do topo do piso. A resposta chega no evento TEXT_MESSAGE.

lua
Map.lookAt(32000, 32000, 7)

Map.browseField(x, y, z)#

Map.browseField(x, y, z)

Abre o browse field do piso.

lua
local p = Player.getPosition()
Map.browseField(p.x, p.y, p.z)

Map.moveItemToGround(x, y, z, quantidade, paraX, paraY, paraZ)#

→ true ou nil

Move o item do topo de um piso para outro. quantidade opcional (padrão: o stack todo).

lua
local p = Player.getPosition()
Map.moveItemToGround(p.x + 1, p.y, p.z, nil, p.x, p.y, p.z)

Map.moveItemToInventory(x, y, z, quantidade, slot)#

→ true ou nil

Move o item do topo do piso para um slot de equipamento.

lua
Map.moveItemToInventory(32000, 32000, 7, nil, Enums.InventorySlot.CONST_SLOT_AMMO)

Map.moveItemToContainer(x, y, z, quantidade, container, slot)#

→ true ou nil

Move o item do topo do piso para um container aberto.

lua
Map.moveItemToContainer(32000, 32000, 7, nil, 0, 0)

Map.moveCreatureToGround(x, y, z, paraX, paraY, paraZ)#

→ true ou nil

Empurra a criatura do piso para outro piso.

lua
local p = Player.getPosition()
Map.moveCreatureToGround(p.x + 1, p.y, p.z, p.x + 2, p.y, p.z)

Map.useItemWithInventory(x, y, z, slot)#

→ true ou nil

Usa o item do topo do piso no item de um slot de equipamento.

lua
Map.useItemWithInventory(32000, 32000, 7, Enums.InventorySlot.CONST_SLOT_LEFT)

Map.useItemWithContainer(x, y, z, container, slot)#

→ true ou nil

Usa o item do topo do piso num item de container.

lua
Map.useItemWithContainer(32000, 32000, 7, 0, 0)

Map.collectRewardChest(x, y, z)#

→ true ou nil

Coleta o reward chest do piso.

lua
Map.collectRewardChest(32000, 32000, 7)

Creature#

Creature.new(id) (ou Creature(id)) cria o objeto; os métodos usam :. Todos devolvem nil se o bot não conhece a criatura (saiu da tela há muito tempo ou o id está errado).

lua
local alvo = Creature.new(Player.getTargetId())
print(alvo:getName(), alvo:getHealthPercent(), alvo:getDistance())

creature:getId()#

→ número

O id usado para criar o objeto.

lua
print(Creature.new(Player.getTargetId()):getId())

creature:getName()#

→ texto ou nil

Nome da criatura.

lua
print(Creature.new(Player.getTargetId()):getName())

creature:getType()#

→ número ou nil

Tipo, como em Enums.CreatureTypes: 0 player, 1 monstro, 2 NPC, 3 seu summon, 4 summon de outro.

lua
if Creature.new(id):getType() == Enums.CreatureTypes.CREATURETYPE_PLAYER then print("player") end

creature:getHealthPercent()#

→ número ou nil

Vida em porcentagem.

lua
print(Creature.new(Player.getTargetId()):getHealthPercent() .. "%")

creature:getPosition()#

→ {x, y, z} ou nil

Posição da criatura. Para você mesmo, é sempre a posição certa, mesmo depois de teleporte.

lua
local pos = Creature.new(id):getPosition()
if pos then print(pos.x, pos.y, pos.z) end

creature:getDistance()#

→ número ou nil (extra)

Distância até você em pisos (a maior entre a diferença em x e em y).

lua
if Creature.new(id):getDistance() <= 1 then print("colado") end

creature:isOnScreen()#

→ booleano (extra)

true se a criatura está viva, no seu andar e a até 7 pisos de você.

lua
if Creature.new(Player.getTargetId()):isOnScreen() then print("alvo na tela") end

creature:getSpeed(), creature:getDirection() e creature:getVocation()#

→ número ou nil

Velocidade; direção para onde olha (0 norte, 1 leste, 2 sul, 3 oeste); vocação (como o servidor manda).

lua
print(Creature.new(id):getDirection())

creature:getSkull(), creature:getGuildEmblem() e creature:getPartyIcon()#

→ número ou nil

Skull (Enums.Skulls), emblema de guild (Enums.GuildEmblem) e ícone de party (Enums.PartyIcons).

lua
if Creature.new(id):getSkull() == Enums.Skulls.SKULL_WHITE then print("PK") end

creature:getOutfit()#

→ tabela ou nil

Outfit e montaria: type, typeEx (item, quando a criatura aparece como item), head, body, legs, feet, addons, mountId, mountHead, mountBody, mountLegs, mountFeet.

lua
print(Creature.new(Player.getId()):getOutfit().type)

creature:getIcon() e creature:getIcons()#

→ 0 / → lista vazia

Existem para scripts do ZeroBot, mas hoje sempre devolvem 0 e uma lista vazia.

lua
print(Creature.new(id):getIcon())