• 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 Top effect error tfs 1.x

danalex07

New Member
Joined
Aug 29, 2010
Messages
14
Reaction score
2
i've got this error..

BD7.png


when trying to execute this script

Code:
query = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1")
    if (query:getID() ~= -1) then
        name = query:getDataString("name")
        if player:getName(player) == name then
            TopEffect(player)
        end
    end

this code is in login.lua
the full login.lua is


Code:
-- ordered as in creaturescripts.xml
local events = {
    ........
}

local function onMovementRemoveProtection(cid, oldPosition, time)
    local player = Player(cid)
    if not player then
        return true
    end

    local playerPosition = player:getPosition()
    if (playerPosition.x ~= oldPosition.x or playerPosition.y ~= oldPosition.y or playerPosition.z ~= oldPosition.z) or player:getTarget() then
        player:setStorageValue(Storage.combatProtectionStorage, 0)
        return true
    end

    addEvent(onMovementRemoveProtection, 1000, cid, oldPosition, time - 1)
end

function TopEffect(player)
    if isPlayer(player) then
        player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
        addEvent(TopEffect, 10*1000, player)
    end
    return true
end

function onLogin(player)
    player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
    local loginStr = 'Welcome to ' .. configManager.getString(configKeys.SERVER_NAME) .. '!'
    if player:getLastLoginSaved() <= 0 then
        loginStr = loginStr .. ' Please choose your outfit.'
        player:sendTutorial(1)
    else
        if loginStr ~= '' then
            player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
        end

        loginStr = string.format('Your last visit was on %s.', os.date('%a %b %d %X %Y', player:getLastLoginSaved()))
    end
    player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)

    local playerId = player.uid

    -- Stamina
    Game.getStorageValue("stamina")[playerId] = 0

    -- Promotion
    local vocation = player:getVocation()
    local promoted = player:isPromoted()
    if player:isPremium() then
        local value = player:getStorageValue(Storage.Promotion)
        if promoted and value ~= 1 then
            player:setStorageValue(Storage.Promotion, 1)
        elseif not promoted and value == 1 then
            player:setVocation(vocation:getPromotion())
        end
    elseif promoted then
        player:setVocation(vocation:getDemotion())
    end

    -- Events
    for i = 1, #events do
        player:registerEvent(events[i])
    end

    if player:getStorageValue(Storage.combatProtectionStorage) <= os.time() then
        player:setStorageValue(Storage.combatProtectionStorage, os.time() + 10)
        onMovementRemoveProtection(playerId, player:getPosition(), 10)
    end
    if player:getLevel() <= 120 then
        for i = 1, 5 do
            player:addBlessing(i)
        end
        player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
        player:say('BLESSED!', TALKTYPE_MONSTER_SAY)
    end
    query = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1")
    if (query:getID() ~= -1) then
        name = query:getDataString("name")
        if player:getName(player) == name then
            TopEffect(player)
        end
    end   
    return true
end


any ideas how can i make the top level effect works?....thx in advance
 
Test this. :p
Code:
db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1")
if (query:getID() ~= -1) then
name = query:getDataString("name")
if player:getName(player) == name then
TopEffect(player)
end
end
 
Code:
query = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1")
if query then
    name = result.getDataString("name") --or it was result.getDataString(query, "name")?
    result.free(query)
    if player:getName(player) == name then
        TopEffect(player)
    end
end

Maybe? I don't know.
 
Code:
function onThink(player, interval)
    local topLevel = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1;")
    if(topLevel ~= false) then
        name = result.getDataString(topLevel, "name")
        result.free(topLevel)
    end

    local top = Player(name)
    if not top then
        return true
    end
   
    if top:getGuid() ~= player:getGuid() then
        return true
    end

    player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
return true
end
 
thx a lot for the help i just edited my code with your replies and end up like this, and it works

Code:
function TopEffect(player)
    if isPlayer(player) then
        player:addItem(5809, 1)
        player:say('TOP!', TALKTYPE_MONSTER_SAY)
        player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
    end
    return true
end

function onLogin(player)
   local queryTop = db.storeQuery("SELECT `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT 1;")
        if queryTop ~= false then
            local plyname = result.getDataString(queryTop, "name")
            result.free(queryTop)
        if player:getName(player) == plyname then
            TopEffect(player)
        end
    end   
end
 
Back
Top