Não testei, mas 1 coisa como essa posição será única (certo?) não precisa checar o id do item da posição (toPosition) onde você usará, correto?
Portanto:
local itemid, toPos = ID_ITEM, {x = POSIÇÃO_X, y = POSIÇÃO_Y, z = POSIÇÃO_Z} -- essa variável "toPos" é a posição de onde o player usará o item e não pra onde será teleportado!!!
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.itemid == itemid and toPosition == toPos then
doPlayerSendTextMessage(cid, 27, "MENSAGEM QUE VAI APARECER PARA O PLAYER AO USAR O ITEM CORRETO NA POSIÇÃO ESCOLHIDA.")
doTeleportThing(cid, {x = POSIÇÃO_X, y = POSIÇÃO_Y, z = POSIÇÃO_Z}) -- agora sim a posição para onde o player será teleportado!
doRemoveItem(item.uid, 1)
else
doPlayerSendCancel(cid, "MENSAGEM CASO O PLAYER NÃO USE O ITEM NA POSIÇÃO ESCOLHIDA.")
end
return true
end
Caso queira outras checagems especificas comentar aqui.
Acredito que irá funcionar, a lógica está correta.