• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

fix the script and tell me what went wrong :/

RigBy

Member
Joined
Jun 9, 2015
Messages
44
Solutions
1
Reaction score
6
I was creating a script that he dash causing damage. but somehow it only works the first dash... I don't know if I can be very tired but I can't solve it, could someone solve it for me and say what am I wrong?


Lua:
local katanaa = Action()

local config = {
    time = 1,
    storage = 2000000000,
}

function walk(player, steps)
    print(steps)
    if steps == 0 then return false end
    local creature = Creature(player)
    if not creature then return false end
    
    local playerPos = player:getPosition()
    local direction = player:getDirection()
    local newPos = playerPos:getNextPosition(direction)
    if newPos:isWalkable() then
        player:move(player:getDirection())
        doAreaCombatHealth(creature, COMBAT_PHYSICALDAMAGE, newPos, 0, -1000, -2000, 4)
    end
    addEvent(walk, 100, player, steps - 1)
end
    
function katanaa.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if  player:getStorageValue(config.storage) - os.time() > 0 then
        return player:sendCancelMessage("você só pode usar o item depois de "..(player:getStorageValue(config.storage) - os.time()).." segundos.")
    end
    local slotItem = player:getSlotItem(CONST_SLOT_LEFT)
    if slotItem and item == slotItem then
        player:setStorageValue(config.storage, os.time() + config.time)
        walk(player, 10)
    else
        player:sendCancelMessage("Item precisa está equipado para usar.")
    end


end

function Position:isWalkable()
    local tile = Tile(self)
    if not tile then
        return false
    end

    local ground = tile:getGround()
    if not ground or ground:hasProperty(CONST_PROP_BLOCKSOLID) then
        return false
    end

    local items = tile:getItems()
    for i = 1, tile:getItemCount() do
        local item = items[i]
        local itemType = item:getType()
        if itemType:getType() ~= ITEM_TYPE_MAGICFIELD and not itemType:isMovable() and item:hasProperty(CONST_PROP_BLOCKSOLID) then
            return false
        end
    end
    return true
end

function Position:getNextPosition(direction, steps)
    local copy = Position(self.x, self.y, self.z)
    local offset = Position.directionOffset[direction]
    if offset then
        steps = steps or 1
        copy.x = copy.x + offset.x * steps
        copy.y = copy.y + offset.y * steps
    end
    return copy
end



katanaa:id(2412)
katanaa:register()
Post automatically merged:

solved, if anyone wants the script there.

Lua:
local katanaa = Action()

local config = {
    time = 1,
    storage = 2000000000,
}

function walk(cid, steps)
    print(steps)
    local player = Player(cid)
    if not player then return false end
    if steps == 0 then return false end
    local playerPos = player:getPosition()
    local direction = player:getDirection()
    local newPos = playerPos:getNextPosition(direction)
    if newPos:isWalkable() then
        player:move(player:getDirection())
        doAreaCombatHealth(cid, COMBAT_PHYSICALDAMAGE, newPos, 0, -1000, -2000, 4)
    end
    addEvent(walk, 50, cid, steps - 1)
end
    
function katanaa.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if  player:getStorageValue(config.storage) - os.time() > 0 then
        return player:sendCancelMessage("você só pode usar o item depois de "..(player:getStorageValue(config.storage) - os.time()).." segundos.")
    end
    local slotItem = player:getSlotItem(CONST_SLOT_LEFT)
    if slotItem and item == slotItem then
        player:setStorageValue(config.storage, os.time() + config.time)
        walk(player:getId(), 3)
    else
        player:sendCancelMessage("Item precisa está equipado para usar.")
    end


end

function Position:isWalkable()
    local tile = Tile(self)
    if not tile then
        return false
    end

    local ground = tile:getGround()
    if not ground or ground:hasProperty(CONST_PROP_BLOCKSOLID) then
        return false
    end

    local items = tile:getItems()
    for i = 1, tile:getItemCount() do
        local item = items[i]
        local itemType = item:getType()
        if itemType:getType() ~= ITEM_TYPE_MAGICFIELD and not itemType:isMovable() and item:hasProperty(CONST_PROP_BLOCKSOLID) then
            return false
        end
    end
    return true
end

function Position:getNextPosition(direction, steps)
    local copy = Position(self.x, self.y, self.z)
    local offset = Position.directionOffset[direction]
    if offset then
        steps = steps or 1
        copy.x = copy.x + offset.x * steps
        copy.y = copy.y + offset.y * steps
    end
    return copy
end



katanaa:id(2412)
katanaa:register()
 
Last edited:
Back
Top