• 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 antiTrash - antiTheft system

darkmu

Well-Known Member
Joined
Aug 26, 2007
Messages
274
Solutions
1
Reaction score
50
Location
Paraná,Brazil
I tried it the first time and it worked, however, when I deactivate and activate it again, I simply try to make a query in the table player_storage does not return anything else.

1611098292444.png

MY EVENTS player.lua
Lua:
    local tilePosition = Tile(toPosition)   
    if tilePosition then
        local housePosition = tilePosition:getHouse()
        if housePosition then
            local OwnerHouse = housePosition:getOwnerGuid()
            local StorageValuePosition = getPlayerHouseTrash(OwnerHouse)   
            if StorageValuePosition > 0 then
                if housePosition then   
                    if (housePosition ~= self:getHouse() and not string.find(housePosition:getAccessList(SUBOWNER_LIST):lower(), "%f[%a]" .. self:getName():lower() .. "%f[%A]")) then
                        self:sendTextMessage(MESSAGE_STATUS_SMALL, "You cannot throw items into players houses, which you are not invited to.")
                        return false
                    end
                end
            end
        end
    end
    
    
    
    local tileFromPosition = Tile(fromPosition)
    if tileFromPosition then
        local houseFromPosition = tileFromPosition:getHouse()       
        if houseFromPosition then
            local OwnerHouse = houseFromPosition:getOwnerGuid()
            local StorageValueFromPosition = getPlayerHouseTheft(OwnerHouse)
            print(StorageValueFromPosition)
            if StorageValueFromPosition > 0 then
                if houseFromPosition then
                    if (houseFromPosition ~= self:getHouse() and not string.find(houseFromPosition:getAccessList(SUBOWNER_LIST):lower(), "%f[%a]" .. self:getName():lower() .. "%f[%A]")) then
                        self:sendTextMessage(MESSAGE_STATUS_SMALL, "You cannot move items from house, which you are only guest to.")
                        return false
                    end
                end
            end
        end
    end

MY FUNCTION global.lua
Lua:
function getPlayerHouseTrash(id)
    local resultQuery = db.storeQuery("SELECT `value` FROM `player_storage` WHERE `player_id` = " .. db.escapeString(id) .. " AND `key` = 15766 ")
    if resultQuery ~= false then
        local ret = result.getDataInt(resultQuery, "value")
        result.free(resultQuery)
        return ret
    end
    return -1
end

function getPlayerHouseTheft(id)
    local resultQuery = db.storeQuery("SELECT `value` FROM `player_storage` WHERE `player_id` = " .. db.escapeString(id) .. " AND `key` = 15767 ")
    if resultQuery ~= false then
        local ret = result.getDataInt(resultQuery, "value")
        result.free(resultQuery)
        return ret
    end
    return -1
end

MY TALKACTION
Lua:
function onSay(player, words, param)
   openModalList(player)
end

Features = {
    features = {
            [1] = {                           
                storages = { [1] = {storage = 15766, StorageAtivo = 1, StorageDesativado = -1}    },
                text = "Proibir Player Roubar Item",
            },
            [2] = {               
                storages = { [1] = {storage = 15767, StorageAtivo = 1, StorageDesativado = -1}    },           
                text = "Proibir Player de Jogar Item",
            },
            [3] = {               
                storages = { [1] = {storage = 15768, StorageAtivo = 1, StorageDesativado = -1}    },           
                text = "Bless Automatico ao morrer",
            },
    }   
}

function Player:getProgress(achievement)   
    local completed = true   
    for i = 1, #achievement.storages do
        local info = achievement.storages[i]
        
        local strvalue = self:getStorageValue(info.storage)
                
        if strvalue <= info.StorageDesativado then
            completed = false
        end
        
    end
    return completed
end

function Player:AtivaDesativaFeatures(featureId, enable)
    local achievement = Features.features[featureId]
    
    for i = 1, #achievement.storages do
        local info = achievement.storages[i]
        
        if self:getStorageValue(info.storage) > 0 then
            self:setStorageValue(info.storage, info.StorageDesativado)
            self:sendTextMessage(MESSAGE_INFO_DESCR, "Voce desativou " .. achievement.text .. ".")
        else
            self:setStorageValue(info.storage, info.StorageAtivo)
            self:sendTextMessage(MESSAGE_INFO_DESCR, "Voce ativou " .. achievement.text .. ".")
        end           
    end   
end


function ListaModalidades(window, player)   
    for i = 1, #Features.features do
        local achievement = Features.features[i]
        local enable = player:getProgress(achievement)
        local name = ("%s - %s"):format(achievement.text, (enable == true and "Ativo" or "Desativado"))       
        local choice = window:addChoice(name)
        choice.featureId = i
        
    end
    
    buttonText = "OK"
        window:addButton(buttonText,
            function(button, choice)               
                if player and choice then
                    player:AtivaDesativaFeatures(choice.featureId, enable)
                end
            end
        )
        
    window:setDefaultEnterButton(buttonText)
end

function openModalList(playerId)
    local player = Player(playerId)
    if not player then
        return false
    end

    local window = ModalWindow {
        title = "Features Disponiveis para VIP",
        message = 'TESTE!',
    }   

    ListaModalidades(window, player)
    
    
    window:addButton("Sair")
    window:setDefaultEscapeButton("Sair")
    window:sendToPlayer(player)
    
end
 
Back
Top