Ir para conteúdo

[Encerrado] Função de verificar piso acima do jogador


yoroshigod

Posts Recomendados

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 por yoroshigod
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...