• 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!

Lua Help to add Effect on Script

myalitth

New Member
Joined
Jan 13, 2013
Messages
69
Reaction score
3
Someone knows how to add sendMagicEffect(CONST_ME_SMOKE) on bridge when player pulls the lever?

Lua:
local config = {
    bridgePositions = {
        {position = Position(32099, 32205, 8), groundId = 352, itemId = 4634},
        {position = Position(32100, 32205, 8), groundId = 4611},
        {position = Position(32101, 32205, 8), groundId = 352, itemId = 4636}
    },
    leverPositions = {
        Position(32098, 32204, 8),
        Position(32104, 32204, 8)
    },
    relocatePosition = Position(32102, 32205, 8),
    relocateMonsterPosition = Position(32103, 32205, 8),
    bridgeId = 5770
}

function moveToPosition(self, toPosition, pushMove, monsterPosition)
    if self:getPosition() == toPosition then
        return false
    end

    if not Tile(toPosition) then
        return false
    end

    for i = self:getThingCount() - 1, 0, -1 do
        local thing = self:getThing(i)
        if thing then
            if thing:isItem() then
                if thing:getId() ~= config.bridgeId then
                    thing:moveTo(toPosition)
                end
            elseif thing:isCreature() then
                if monsterPosition and thing:isMonster() then
                    thing:teleportTo(monsterPosition, pushMove)
                else
                    thing:teleportTo(toPosition, pushMove)
                end
            end
        end
    end
    return true
end

local sewerLever = Action()

function sewerLever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local leverLeft, lever = item.itemid == 2772
    for i = 1, #config.leverPositions do
        lever = Tile(config.leverPositions[i]):getItemById(leverLeft and 2772 or 2773)
        if lever then
            lever:transform(leverLeft and 2773 or 2772)
        end
    end

    local tile, tmpItem, bridge
    if leverLeft then
        for i = 1, #config.bridgePositions do
            bridge = config.bridgePositions[i]
            tile = Tile(bridge.position)

            tmpItem = tile:getGround()
            if tmpItem then
                tmpItem:transform(config.bridgeId)
            end

            if bridge.itemId then
                tmpItem = tile:getItemById(bridge.itemId)
                if tmpItem then
                    tmpItem:remove()
                end
            end
        end
    else
        for i = 1, #config.bridgePositions do
            bridge = config.bridgePositions[i]
            tile = Tile(bridge.position)

            moveToPosition(tile, config.relocatePosition, true, config.relocateMonsterPosition)
            tile:getGround():transform(bridge.groundId)
            Game.createItem(bridge.itemId, 1, bridge.position)
        end

    end
    return true
end

sewerLever:aid(50239)
sewerLever:register()
 
Position(1000,1000,7):sendMagicEffect(CONST_ME_SMOKE)


It need Position as the main param so you can also do for player effect player:getPosition():sendMagicEffect(CONST_ME_SMOKE)
 
Lua:
local config = {
    bridgePositions = {
        {position = Position(32099, 32205, 8), groundId = 352, itemId = 4634},
        {position = Position(32100, 32205, 8), groundId = 4611},
        {position = Position(32101, 32205, 8), groundId = 352, itemId = 4636}
    },
    leverPositions = {
        Position(32098, 32204, 8),
        Position(32104, 32204, 8)
    },
    relocatePosition = Position(32102, 32205, 8),
    relocateMonsterPosition = Position(32103, 32205, 8),
    bridgeId = 5770
}

function moveToPosition(self, toPosition, pushMove, monsterPosition)
    if self:getPosition() == toPosition then
        return false
    end

    if not Tile(toPosition) then
        return false
    end

    for i = self:getThingCount() - 1, 0, -1 do
        local thing = self:getThing(i)
        if thing then
            if thing:isItem() then
                if thing:getId() ~= config.bridgeId then
                    thing:moveTo(toPosition)
                end
            elseif thing:isCreature() then
                if monsterPosition and thing:isMonster() then
                    thing:teleportTo(monsterPosition, pushMove)
                else
                    thing:teleportTo(toPosition, pushMove)
                end
            end
        end
    end
    return true
end

local sewerLever = Action()

function sewerLever.onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local leverLeft, lever = item.itemid == 2772
    for i = 1, #config.leverPositions do
        lever = Tile(config.leverPositions[i]):getItemById(leverLeft and 2772 or 2773)
        if lever then
            lever:transform(leverLeft and 2773 or 2772)
        end
    end

    local tile, tmpItem, bridge
    if leverLeft then
        for i = 1, #config.bridgePositions do
            bridge = config.bridgePositions[i]
            tile = Tile(bridge.position)

            moveToPosition(tile, config.relocatePosition, true, config.relocateMonsterPosition)
            tile:getGround():transform(bridge.groundId)
            Game.createItem(bridge.itemId, 1, bridge.position)

          
            tile:getPosition():sendMagicEffect(CONST_ME_SMOKE)
        end
    else
        for i = 1, #config.bridgePositions do
            bridge = config.bridgePositions[i]
            tile = Tile(bridge.position)

            moveToPosition(tile, config.relocatePosition, true, config.relocateMonsterPosition)
            tile:getGround():transform(bridge.groundId)
            Game.createItem(bridge.itemId, 1, bridge.position)
        end
    end
    return true
end

sewerLever:aid(50239)
sewerLever:register()

must work!
 
Back
Top