• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    Removing invisible tile (ID-460) Flying system.

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    pesiarzyk

    pesiarzyk
    Nuevo Miembro
    Nuevo Miembro
    Descripcion escribió:Hey guys, im repaired fly in my distribution but now i have another problem, when i fly, im creating Invisible Tile called Nothing special (ID: 460) Its flyfloor i guess, but this FlyFloor doesnt dissapear, i want to delete this tile when player move to another position.

    Right now Mobs can walk on this Tile xD

    [Tienes que estar registrado y conectado para ver este vínculo]


    flyevent.lua
    Código:
    function onMove(creature, toPosition, fromPosition)
        local player = Player(creature:getId())
        if player:isOnFly() then
            local fromTile = Tile(fromPosition)
            local toTile = Tile(toPosition)
            
            local fromItem = fromTile:getItemById(flyFloor)
            if fromItem then
                fromItem:remove()
            end
            
            local toItem = toTile:getItemById(flyFloor)
            if toItem then
                toItem:remove()
            end
            
            toPosition:createFlyFloor()
        end
        return true
    end

    newfunctions.lua

    Código:
    function Position:createFlyFloor()
     for x=-1,1 do
     for y=-1,1 do
     local pos = {x=self.x+x,y=self.y+y,z=self.z}
     local toTile = Tile(pos)
     if not toTile or not toTile:getItems() or not toTile:getGround() then
     doAreaCombatHealth(0, 0, pos, 0, 0, 0, CONST_ME_POFF)
     Game.createItem(flyFloor, 1, pos)
     end
     end
     end
    end
     
    function Tile:hasValidGround()
     local ground = self:getGround()
     local nilItem = self:getItemById(flyFloor)
     if ground and not nilItem then
     return true
     end
     return false
    end
     
    function Player:activateFly()
     self:setStorageValue(storageFly, 1)
     self:registerEvent("FlyEvent")
     return true
    end
     
    function Player:deactivateFly()
     local can, floor = self:canDeactivateFly()
     local pos = self:getPosition()
     if can then
     local curtile = Tile(pos)
     local nilItem = curtile:getItemById(flyFloor)
     if nilItem then
     nilItem:remove()
     end
     self:unregisterEvent("FlyEvent")
     if pos.z ~= floor then
     pos.z = floor
     self:teleportTo(pos)
     pos:sendMagicEffect(CONST_ME_TELEPORT)
     end
     end
     return can
    end

    function Player:canDeactivateFly()
        local pos = self:getPosition()
    --    for z = pos.z, 15 do
            local tmp = Tile(pos.x, pos.y, pos.z)
            if tmp and tmp:hasValidGround() then
                if self:canFlyDown(pos.z) then
                    return true, pos.z
                else
                    return false
                end
            end
    --    end
     
        return false
    end
     
    function Player:canFlyUp()
     local pos = self:getPosition()
     local tmp = Tile(pos.x, pos.y, pos.z-1)
     if tmp and tmp:hasValidGround() then
     return false
     end
     tmp = Tile(pos.x, pos.y, pos.z-1)

     if tmp and (tmp:getHouse() or tmp:hasFlag(TILESTATE_PROTECTIONZONE) or tmp:hasFlag(TILESTATE_FLOORCHANGE) or tmp:hasFlag(TILESTATE_BLOCKSOLID) ) then
     return false
     end

     if tmp and tmp:getGround() and isInArray(waterIds, tmp:getGround():getId()) then
     return false
     end
     return true
    end
     
    function Player:canFlyDown(floor)
     local pos = self:getPosition()
     local tmp = Tile(pos)
     if floor and floor == pos.z then
     return true
     end
     if tmp:hasValidGround() then
     return false
     end
     tmp = Tile(pos.x, pos.y, floor or pos.z+1)

     if tmp and (tmp:getHouse() or tmp:hasFlag(TILESTATE_PROTECTIONZONE) or tmp:hasFlag(TILESTATE_FLOORCHANGE) or tmp:hasFlag(TILESTATE_BLOCKSOLID) ) then
     return false
     end

     if tmp and tmp:getGround() and isInArray(waterIds, tmp:getGround():getId()) then
     return false
     end
        return true
    end
     
    function Player:flyUp()
     if self:isOnFly() then
     if self:canFlyUp() then
     local pos = self:getPosition()
     local tile = Tile(pos)
     local itemfloor = tile:getItemById(flyFloor)
     if itemfloor then
     itemfloor:remove()
     end
     pos.z = pos.z-1
     pos:createFlyFloor()
     self:teleportTo(pos)
     pos:sendMagicEffect(CONST_ME_TELEPORT)
     return true
     end
     return false
     else
     self:sendCancelMessage("You are not flying.")
     return false
     end
    end
     
    function Player:flyDown()
     if self:isOnFly() then
     if self:canFlyDown() then
     local pos = self:getPosition()
     local tile = Tile(pos)
     local itemfloor = tile:getItemById(flyFloor)
     if itemfloor then
     itemfloor:remove()
     end
     pos.z = pos.z+1
     pos:createFlyFloor()
     self:teleportTo(pos)
     pos:sendMagicEffect(CONST_ME_TELEPORT)
     return true
     end
     return false
     else
     self:sendCancelMessage("You are not flying.")
     return false
     end
    end
    Captura del Error escribió:Imagen del error: Removing invisible tile (ID-460) Flying system. Empty
    El error radica en: Otro Problema

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).