O seu script está no caminho certo, mas alguns ajustes são necessários para alcançar o comportamento desejado. Vou ajudá-lo a modificar o código para atingir o objetivo:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function attackCreature(cid, target, var) if not isCreature(cid) or not isCreature(target) then return false end local playerPos = getCreaturePosition(cid) local targetPos = getCreaturePosition(target) if doCombat(cid, combat, var) == LUA_NO_ERROR then doTeleportThing(cid, targetPos) doSendMagicEffect(targetPos, 61) end return true end function onCastSpell(cid, var) local playerPos = getCreaturePosition(cid) local creatures = getSpectators(playerPos, 3, 3, false) if not creatures or #creatures == 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Nenhum alvo válido encontrado.") return false end for _, target in ipairs(creatures) do if isCreature(target) and (isPlayer(target) or isMonster(target)) then addEvent(attackCreature, 100, cid, target, var) end end addEvent(doTeleportThing, 100 * #creatures, cid, playerPos) return true end
Renomeei a função attack para attackCreature para refletir melhor sua função.
Removi a variável validTargets, pois agora estamos atacando um alvo por vez e não armazenando múltiplos alvos.
Adicionei um evento para teleportar o jogador de volta para a posição inicial após atacar todos os alvos.
Corrigi o loop for em onCastSpell para chamar attackCreature para cada alvo, em vez de chamar attack diretamente.
Adicionei uma verificação para garantir que apenas alvos válidos (jogadores ou monstros) sejam atacados.
Adicionei uma verificação para garantir que pelo menos um alvo válido seja encontrado antes de prosseguir com a magia.


info
Grupo: Campones
Registrado: 06/12/07
Posts: 2
Reputação: 0
Char no Tibia: Nerds Killador
Olá, tudo bem?
Estou tentando fazer uma magia em que quando o player solta ela, ele é teleportado para a posição de cada monstro ao seu redor, da 1 hit em cada um por vez, após terminar isso, volta para a posição inicial de quando soltou a magia.
Olha:
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function attack(cid, pos, toPos, fromPos, var) if #validTargets > 0 then if doCombat(cid, combat, var) == LUA_NO_ERROR then doTeleportThing(cid,validTargets[1]) doSendMagicEffect(getPlayerPosition(cid), 61) table.remove(validTargets, validTargets[1]) addEvent(attack, 200, cid) end else doTeleportThing(cid, playerfirstpos[1]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Nenhum alvo valido encontrado.") for k in pairs(playerfirstpos) do playerfirstpos[k] = nil end end return true end playerfirstpos = {} validTargets = {} function onCastSpell(cid, var) local pos = getCreaturePosition(cid) local creatures = getSpectators(pos, 3, 3, false) if table.insert(playerfirstpos, pos) then if creatures then for _, target in ipairs(creatures) do if isCreature(target) and (isPlayer(target) or isMonster(target)) then table.insert(validTargets, target) end end addEvent(attack, 1, cid) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Nenhum alvo valido encontrado.") end end return true endMas não consegui... alguém pode me ajudar?