• 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 Player.setLevel()

Lava Titan

Developer
Joined
Jul 25, 2009
Messages
1,571
Solutions
3
Reaction score
98
Location
Portugal
hey there, I'm trying to create this unique function, not sure if it's even possible, I think this is very usefull for server content testing purposes

the current error is that everything Works except the query is not getting executed after player gets kicked

can some1 help fixing this please?

Code:
function Player.setLevel(self, playerId, level) -- player:setLevel(player:getId(), 1)
    local player = Player(playerId)

    local function kickPlayer()
        self:remove()
    return true
    end

    local function levelQuery()
        db.query("UPDATE  `test_db`.`players` SET  `level` =  "..level.." WHERE  `players`.`id` = " .. self:getAccountId())
    return true
    end

    local delayToKick = 3000
    addEvent(kickPlayer, delayToKick)
    addEvent(levelQuery, 3500)
    player:sendTextMessage(MESSAGE_INFO_DESCR, "You will be kicked in "..(delayToKick/1000).." seconds.")
return true
end
 
Last edited:
Code:
local function kickPlayer(cid)
    local player = Player(cid)
    if player then
        player:remove()
    end
end

local function updateLevel(level, accId)
    db.query(("UPDATE `players` SET `level` = %i WHERE `id` = %i;"):format(level, accId))
end

function Player.setLevel(self, level, kickDelay) -- player:setLevel(1 [, 1000])
    local kickDelay = kickDelay or 3000
    addEvent(kickPlayer, kickDelay, self.uid)
    addEvent(updateLevel, kickDelay + 300, level, self:getAccountId())
    self:sendTextMessage(MESSAGE_INFO_DESCR, ("You will be kicked in %.1f seconds."):format(kickDelay / 1000))
end
 
thanks, unfortunaly got same result as mine XD

it sends msg, kicks player but query doesn't get executed correctly

I added these in compat.lua and also added print("1") in query function, it sends print, so the function is being executed, just not the query inside

Code:
function kickPlayer(cid)
    local player = Player(cid)
    if player then
        player:remove()
    end
end

function updateLevel(level, accId)
    db.query(("UPDATE `players` SET `level` = %i WHERE `id` = %i;"):format(level, accId))
    print("1")
end

function Player.setLevel(self, level, kickDelay) -- player:setLevel(1, 3000)
    local kickDelay = kickDelay or 3000
    addEvent(kickPlayer, kickDelay, self.uid)
    addEvent(updateLevel, kickDelay + 300, level, self:getAccountId())
    self:sendTextMessage(MESSAGE_INFO_DESCR, ("You will be kicked in %.1f seconds."):format(kickDelay / 1000))
return true
end
 
Well, you are taking players accountId but comparing it to players `id` in the query. use self:getGUID() or whatever its called or change the `id` to `account_id`.
 
question, this function update the level, and about HP/MANA ?

on login.lua add:
Code:
    local vocationID = player:getVocation():getId()
    if vocationID == 1 then
        player:setMaxHealth((player:getLevel()*5))
        player:setMaxMana((player:getLevel()*30))
        player:addHealth(player:getMaxHealth())
        player:addMana(player:getMaxMana())
    elseif vocationID == 2 then
        player:setMaxHealth((player:getLevel()*10))
        player:setMaxMana((player:getLevel()*15))
        player:addHealth(player:getMaxHealth())
        player:addMana(player:getMaxMana())
    elseif vocationID == 3 then
        player:setMaxHealth((player:getLevel()*15))
        player:setMaxMana((player:getLevel()*5))
        player:addHealth(player:getMaxHealth())
        player:addMana(player:getMaxMana())
    end

I use this on my server for that issue, you gotta edit depending on your server vocations

edit: thanks @EvulMastah worked
 
Back
Top