yoroshigod 2 Postado Março 11, 2018 Share Postado Março 11, 2018 (editado) Estou na busca de uma função onde realiza-se um check no tile superior do jogador, se tiver algo ele não é capaz de usar a magia. Essa função abaixo, quase cumpre esse propósito, mas perto de paredes, escadas, colunas a magia consegue ser realizada. Citar (055-function.lua) function isWalkable(pos, creature, proj, pz) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 1}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end Edit@ Consegui fazer a magia não funcionar dentro de edifícios (casas e construções), porém agora quando o jogador está olhando para uma parede, coluna, escada, ele ainda consegue usar a magia, mesmo dentro do edifício. SCRIPT DA MAGIA Citar local tempo = 1.0 local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 5747) local function hasTile(pos) pos.stackpos = 0 return getTileThingByPos(pos).itemid >= 1 end local function checkPos(pos) return hasTile(pos) and not getTileInfo(pos).house and getTopCreature(pos) and isWalkable(pos, false, false, true, true, false) end local exhaustion = {} function onCastSpell(cid, var) if getTileInfo(getThingPos(cid)).house or getTileInfo(getThingPos(cid)).protection then return doPlayerSendCancel(cid, "You can't jump inside of pz or house!") end local guid = getPlayerGUID(cid) if exhaustion[guid] and exhaustion[guid] - os.clock() > 0 then return not doPlayerSendCancel(cid, "You are still exhausted from this spell.") end exhaustion[guid] = os.clock() + tempo cpos = getThingPos(cid) pos = getPositionByDirection(getThingPos(cid), getCreatureLookDir(cid), 1) if pos.z > 7 then start = 8 fim = 10 else start = 0 fim = 7 end for z=start,fim do local mpos = {x=pos.x,y=pos.y,z=z} if checkPos(mpos) then if queryTileAddThing(cid, mpos) then if z >= pos.z then doDecayItem(doCreateItem(5747, 1, getThingPos(cid))) doTeleportThing(cid, mpos) doSendAnimatedText(getCreaturePosition(cid), "Jump", 66) doSendMagicEffect(mpos, 34) return false else for nz=z,pos.z-1 do if checkPos({x=cpos.x, y=cpos.y, z=nz}) == 0 and getThingfromPos({x=cpos.x, y=cpos.y, z=nz, stackpos=0}).itemid ~= 459 and nz ~= cpos.z then return doPlayerSendCancel(cid, table.concat({cpos.x, cpos.y}, "Sorry, not possible")) end end if isWalkable(pos, mpos) then return not doPlayerSendCancel(cid, "You need to be in front a wall or above a roof!") end doDecayItem(doCreateItem(5747, 1, getThingPos(cid))) doTeleportThing(cid, mpos) doSendAnimatedText(getCreaturePosition(cid), "Jump", 66) doSendMagicEffect(mpos, 34) return false end else return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHROOM) end return doPlayerSendCancel(cid, "aewi") end end doPlayerSendCancel(cid, "You can not jump at this location.") return false end Editado Março 13, 2018 por yoroshigod Link para o comentário Compartilhar em outros sites More sharing options...
Qwizer 203 Postado Março 11, 2018 Share Postado Março 11, 2018 ele verifica qualquer coisa ou algum objeto em especifico? Link para o comentário Compartilhar em outros sites More sharing options...
yoroshigod 2 Postado Março 11, 2018 Autor Share Postado Março 11, 2018 7 minutos atrás, Qwizer disse: ele verifica qualquer coisa ou algum objeto em especifico? Qualquer coisa, a intenção é que só dê pra usar a magia ao ar livre. Link para o comentário Compartilhar em outros sites More sharing options...
Qwizer 203 Postado Março 12, 2018 Share Postado Março 12, 2018 4 horas atrás, yoroshigod disse: Qualquer coisa, a intenção é que só dê pra usar a magia ao ar livre. blz, vou editar aqui. Link para o comentário Compartilhar em outros sites More sharing options...
yoroshigod 2 Postado Março 14, 2018 Autor Share Postado Março 14, 2018 RESOLVIDO por contra própria, pode fechar o tópico. Link para o comentário Compartilhar em outros sites More sharing options...
Stigal 584 Postado Abril 19, 2018 Share Postado Abril 19, 2018 A questão neste tópico de suporte foi encerrada por falta de resposta. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados