• 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 my script what is wrong? help

ninolouco

Member
Joined
Mar 11, 2019
Messages
28
Reaction score
8
function onDeath script
Lua:
local deathListEnabled = true
local maxDeathRecords = 15

function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
    local playerId = player:getId()

    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You are dead.")
    if (player:getVocation() ~= 0) and (player:getLevel() < 6) then
     player:setStorageValue(135, 1)

    if not deathListEnabled then
        return
    end

    local byPlayer = 0
    local killerName
    if killer ~= nil then
        if killer:isPlayer() then
            byPlayer = 1
        else
            local master = killer:getMaster()
            if master and master ~= killer and master:isPlayer() then
                killer = master
                byPlayer = 1
            end
        end
        killerName = killer:getName()
    else
        killerName = "field item"
    end

    local byPlayerMostDamage = 0
    local mostDamageKillerName
    if mostDamageKiller ~= nil then
        if mostDamageKiller:isPlayer() then
            byPlayerMostDamage = 1
        else
            local master = mostDamageKiller:getMaster()
            if master and master ~= mostDamageKiller and master:isPlayer() then
                mostDamageKiller = master
                byPlayerMostDamage = 1
            end
        end
        mostDamageName = mostDamageKiller:getName()
    else
        mostDamageName = "field item"
    end

    local playerGuid = player:getGuid()
    db.query("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`) VALUES (" .. playerGuid .. ", " .. os.time() .. ", " .. player:getLevel() .. ", " .. db.escapeString(killerName) .. ", " .. byPlayer .. ", " .. db.escapeString(mostDamageName) .. ", " .. byPlayerMostDamage .. ", " .. (unjustified and 1 or 0) .. ", " .. (mostDamageUnjustified and 1 or 0) .. ")")
    local resultId = db.storeQuery("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. playerGuid)

    local deathRecords = 0
    local tmpResultId = resultId
    while tmpResultId ~= false do
        tmpResultId = result.next(resultId)
        deathRecords = deathRecords + 1
    end

    if resultId ~= false then
        result.free(resultId)
    end

    local limit = deathRecords - maxDeathRecords
    if limit > 0 then
        db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit)
    end

    if byPlayer == 1 then
        local targetGuild = player:getGuild()
        targetGuild = targetGuild and targetGuild:getId() or 0
        if targetGuild ~= 0 then
            local killerGuild = killer:getGuild()
            killerGuild = killerGuild and killerGuild:getId() or 0
            if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer:getId()) then
                local warId = false
                resultId = db.storeQuery("SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = " .. killerGuild .. " AND `guild2` = " .. targetGuild .. ") OR (`guild1` = " .. targetGuild .. " AND `guild2` = " .. killerGuild .. "))")
                if resultId ~= false then
                    warId = result.getDataInt(resultId, "id")
                    result.free(resultId)
                end

                if warId ~= false then
                    db.asyncQuery("INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (" .. db.escapeString(killerName) .. ", " .. db.escapeString(player:getName()) .. ", " .. killerGuild .. ", " .. targetGuild .. ", " .. os.time() .. ", " .. warId .. ")")
                end
            end
        end
    end
end

this script check if the player have diferent vocation of 0 and is level 6 less, then StorageValue(135, 1)


Function onLogin
Lua:
function onLogin(player)
   if player:getStorageValue(135) == 1 then
        -- Items
        if player:getSex() == PLAYERSEX_FEMALE then
            player:addItem(3562, 1, true, -1, CONST_SLOT_ARMOR)
        else
            player:addItem(3561, 1, true, -1, CONST_SLOT_ARMOR)
        end
        player:addItem(2920, 1, true, -1, CONST_SLOT_LEFT)
        player:addItem(3270, 1, true, -1, CONST_SLOT_RIGHT)

        local container = Game.createItem(2853, 1)
        container:addItem(3585, 1)
        
        player:addItemEx(container, true, CONST_SLOT_BACKPACK)
    
        -- Load Default Outfit.
        if player:getSex() == PLAYERSEX_FEMALE then
            player:setOutfit({lookType = 136, lookHead = 78, lookBody = 68, lookLegs = 58, lookFeet = 95})
        else
            player:setOutfit({lookType = 128, lookHead = 78, lookBody = 68, lookLegs = 58, lookFeet = 95})
        end
        
        local town = Town("Rookgaard")
        player:teleportTo(town:getTemplePosition())
        player:setTown(town)
        player:setDirection(DIRECTION_SOUTH)
    end
    return true
end

this script check if player have storage 135,1 then give first items.

my problem is, im testing with a character no vocation id (0) and level 6 less, but the first items script still working normally, how can i fix this? i just want this script working with players that have vocation and level 6 less.
 
I don't understand why you even need the onDeath part of that script, you can send it on the first login without having to die first.
Change this:
Lua:
if player:getStorageValue(135) == 1 then
To:
Lua:
if player:getStorageValue(135) == -1 and player:getVocation():getId() > 0 and player:getLevel() < 6 then
    -- rest of the script
end
Then remove the code you added inside of onDeath.
 
Back
Top