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

Solved nextUseStaminaTime a nil value

bradette19

Member
Joined
May 25, 2011
Messages
97
Reaction score
6
Location
Canada
Hi, I just updated my Real map datapack and I have some error when I try to get online. If someone can help me with this ? Ty :)

 
Code:
-- ordered as in creaturescripts.xml
local events = {
    'TutorialCockroach',
    'ElementalSpheresOverlords',
    'BigfootBurdenVersperoth',
    'BigfootBurdenWarzone',
    'BigfootBurdenWeeper',
    'BigfootBurdenWiggler',
    'SvargrondArenaKill',
    'NewFrontierShardOfCorruption',
    'NewFrontierTirecz',
    'ServiceOfYalaharDiseasedTrio',
    'ServiceOfYalaharAzerus',
    'ServiceOfYalaharQuaraLeaders',
    'InquisitionBosses',
    'InquisitionUngreez',
    'KillingInTheNameOfKills',
    'MastersVoiceServants',
    'SecretServiceBlackKnight',
    'ThievesGuildNomad',
    'WotELizardMagistratus',
    'WotELizardNoble',
    'WotEKeeper',
    'WotEBosses',
    'WotEZalamon',
    'PlayerDeath',
    'AdvanceSave',
    'AdvanceRookgaard',
    'PythiusTheRotten',
    'DropLoot',
    'modalAD',
    'modalMD'
}

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 onLogin(player)
    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)
  
    player:loadVipData()
    player:updateVipTime()
    player:setStorageValue(9999, player:getVipDays())

    local playerId = player:getId()

    -- Stamina
    nextUseStaminaTime[playerId] = 0

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

    -- Events
    for i = 1, #events do
        player:registerEvent(events)
    end
    if getPlayerSlotItem(player, CONST_SLOT_NECKLACE).itemid == 2173 and getPlayerLevel(player) >= 1 then
       doPlayerSendTextMessage(player,MESSAGE_STATUS_CONSOLE_ORANGE,'You have Aol in your necklace slot.')
        elseif getPlayerBlessing(player, 1) or getPlayerBlessing(player, 2) or getPlayerBlessing(player, 3) or getPlayerBlessing(player, 4) or getPlayerBlessing(player, 5) then
        doPlayerSendTextMessage(player,MESSAGE_STATUS_CONSOLE_ORANGE,'You are protected by blessed.')
    else
        doPlayerPopupFYI(player, 'Warning! You dont have Amulet of Loss or Blessing! To buy blessing, type !bless (It cost 5cc)')
end

    if player:getStorageValue(Storage.combatProtectionStorage) <= os.time() then
        player:setStorageValue(Storage.combatProtectionStorage, os.time() + 10)
        onMovementRemoveProtection(playerId, player:getPosition(), 10)
    end
    return true
end
 
Code:
function onLogout(player)
    local playerId = player:getId()
    if nextUseStaminaTime[playerId] ~= nil then
        nextUseStaminaTime[playerId] = nil
    end
    return true
end
 
Tiles.lua

Code:
local increasing = {[416] = 417, [426] = 425, [446] = 447, [3216] = 3217, [3202] = 3215, [11062] = 11063}
local decreasing = {[417] = 416, [425] = 426, [447] = 446, [3217] = 3216, [3215] = 3202, [11063] = 11062}

function onStepIn(creature, item, position, fromPosition)
    if not increasing[item.itemid] then
        return false
    end

    local player = creature:getPlayer()
    if not player or player:isInGhostMode() then
        return true
    end

    item:transform(increasing[item.itemid])

    if item.actionid >= 1000 then
        if player:getLevel() < item.actionid - 1000 then
            player:teleportTo(fromPosition, false)
            position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The tile seems to be protected against unwanted intruders.")
        end
        return true
    end

    if position:getTile():hasFlag(TILESTATE_PROTECTIONZONE) then
        local lookPos = player:getPosition()
        lookPos:getNextPosition(player:getDirection())
        local depotItem = lookPos:getTile():getItemByType(ITEM_TYPE_DEPOT)
        if depotItem ~= nil then
            local depotItems = player:getDepotChest(getDepotId(depotItem.uid), true):getItemHoldingCount()
            player:sendTextMessage(MESSAGE_STATUS_DEFAULT, "Your depot contains " .. depotItems .. " item" .. (depotItems > 1 and "s." or "."))
            return true
        end
    end

    if item.actionid ~= 0 and player:getStorageValue(item.actionid) <= 0 then
        player:teleportTo(fromPosition, false)
        position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "The tile seems to be protected against unwanted intruders.")
        return true
    end

    return true
end

function onStepOut(creature, item, position, fromPosition)
    if not decreasing[item.itemid] then
        return false
    end

    if creature:isPlayer() and creature:isInGhostMode() then
        return true
    end

    item:transform(decreasing[item.itemid])
    return true
end
 
Code:
dofile('data/lib/libs.lua')
dofile('data/vip-system.lua')

ropeSpots = {384, 418, 8278, 8592, 13189, 14435, 14436, 15635, 19518}

doors = {
    [1209] = 1211, [1210] = 1211, [1212] = 1214, [1213] = 1214, [1219] = 1220, [1221] = 1222, [1231] = 1233, [1232] = 1233, [1234] = 1236,
    [1235] = 1236, [1237] = 1238, [1239] = 1240, [1249] = 1251, [1250] = 1251, [1252] = 1254, [1253] = 1254, [1539] = 1540, [1541] = 1542,
    [3535] = 3537, [3536] = 3537, [3538] = 3539, [3544] = 3546, [3545] = 3546, [3547] = 3548, [4913] = 4915, [4914] = 4915, [4916] = 4918,
    [4917] = 4918, [5082] = 5083, [5084] = 5085, [5098] = 5100, [5099] = 5100, [5101] = 5102, [5107] = 5109, [5108] = 5109, [5110] = 5111,
    [5116] = 5118, [5117] = 5118, [5119] = 5120, [5125] = 5127, [5126] = 5127, [5128] = 5129, [5134] = 5136, [5135] = 5136, [5137] = 5139,
    [5138] = 5139, [5140] = 5142, [5141] = 5142, [5143] = 5145, [5144] = 5145, [5278] = 5280, [5279] = 5280, [5281] = 5283, [5282] = 5283,
    [5284] = 5285, [5286] = 5287, [5515] = 5516, [5517] = 5518, [5732] = 5734, [5733] = 5734, [5735] = 5737, [5736] = 5737, [6192] = 6194,
    [6193] = 6194, [6195] = 6197, [6196] = 6197, [6198] = 6199, [6200] = 6201, [6249] = 6251, [6250] = 6251, [6252] = 6254, [6253] = 6254,
    [6255] = 6256, [6257] = 6258, [6795] = 6796, [6797] = 6798, [6799] = 6800, [6801] = 6802, [6891] = 6893, [6892] = 6893, [6894] = 6895,
    [6900] = 6902, [6901] = 6902, [6903] = 6904, [7033] = 7035, [7034] = 7035, [7036] = 7037, [7042] = 7044, [7043] = 7044, [7045] = 7046,
    [7054] = 7055, [7056] = 7057, [8541] = 8543, [8542] = 8543, [8544] = 8546, [8545] = 8546, [8547] = 8548, [8549] = 8550, [9165] = 9167,
    [9166] = 9167, [9168] = 9170, [9169] = 9170, [9171] = 9172, [9173] = 9174, [9267] = 9269, [9268] = 9269, [9270] = 9272, [9271] = 9272,
    [9273] = 9274, [9275] = 9276, [10276] = 10277, [10274] = 10275, [10268] = 10270, [10269] = 10270, [10271] = 10273, [10272] = 10273, [10471] = 10472,
    [10480] = 10481, [10477] = 10479, [10478] = 10479, [10468] = 10470, [10469] = 10470, [10775] = 10777, [10776] = 10777, [12092] = 12094, [12093] = 12094,
    [12188] = 12190, [12189] = 12190, [19840] = 19842, [19841] = 19842, [19843] = 19844, [19980] = 19982, [19981] = 19982, [19983] = 19984, [20273] = 20275,
    [20274] = 20275, [20276] = 20277, [17235] = 17236, [18208] = 18209, [13022] = 13023, [10784] = 10786, [10785] = 10786, [12099] = 12101, [12100] = 12101,
    [12197] = 12199, [12198] = 12199, [19849] = 19851, [19850] = 19851, [19852] = 19853, [19989] = 19991, [19990] = 19991, [19992] = 19993, [20282] = 20284,
    [20283] = 20284, [20285] = 20286, [17237] = 17238, [13020] = 13021, [10780] = 10781, [12095] = 12096, [12195] = 12196, [19845] = 19846, [19985] = 19986,
    [20278] = 20279, [10789] = 10790, [12102] = 12103, [12204] = 12205, [19854] = 19855, [19994] = 19995, [20287] = 20288, [10782] = 10783, [12097] = 12098,
    [12193] = 12194, [19847] = 19848, [19987] = 19988, [20280] = 20281, [10791] = 10792, [12104] = 12105, [12202] = 12203, [19856] = 19857, [19996] = 19997,
    [20289] = 20290, [22814] = 22815, [22815] = 22816, [22817] = 22818, [22819] = 22820, [22823] = 22825, [22824] = 22825, [22826] = 22827, [22828] = 22829
}

verticalOpenDoors = {
    1211, 1220, 1224, 1228, 1233, 1238, 1242, 1246, 1251, 1256, 1260, 1540, 3546, 3548, 3550, 3552, 4915, 5083, 5109, 5111, 5113, 5115, 5127, 5129, 5131,
    5133, 5142, 5145, 5283, 5285, 5289, 5293, 5516, 5737, 5749, 6194, 6199, 6203, 6207, 6251, 6256, 6260, 6264, 6798, 6802, 6902, 6904, 6906, 6908, 7044,
    7046, 7048, 7050, 7055, 8543, 8548, 8552, 8556, 9167, 9172, 9269, 9274, 9274, 9269, 9278, 9282, 10270, 10275, 10279, 10283, 10479, 10481, 10485, 10483,
    10786, 12101, 12199, 19851, 19853, 19991, 19993, 20284, 20286, 17238, 13021, 10790, 12103, 12205, 19855, 19995, 20288, 10792, 12105, 12203, 19857, 19997,
    20290, 22825, 22827, 22829, 22831
}

horizontalOpenDoors = {
    1214, 1222, 1226, 1230, 1236, 1240, 1244, 1248, 1254, 1258, 1262, 1542, 3537, 3539, 3541, 3543, 4918, 5085, 5100, 5102, 5104, 5106, 5118,
    5120, 5122, 5124, 5136, 5139, 5280, 5287, 5291, 5295, 5518, 5734, 5746, 6197, 6201, 6205, 6209, 6254, 6258, 6262, 6266, 6796, 6800, 6893,
    6895, 6897, 6899, 7035, 7037, 7039, 7041, 7057, 8546, 8550, 8554, 8558, 9170, 9174, 9272, 9276, 9280, 9284, 10273, 10277, 10281, 10285,
    10470, 10472, 10476, 10474, 10777, 12094, 12190, 19842, 19844, 19982, 19984, 20275, 20277, 17236, 18209, 13023, 10781, 12096, 12196,
    19846, 19986, 20279, 10783, 12098, 12194, 19848, 19988, 20281, 22816, 22818, 22820, 22822
}

openSpecialDoors = {
    1224, 1226, 1228, 1230, 1242, 1244, 1246, 1248, 1256, 1258, 1260, 1262, 3541, 3543, 3550, 3552, 5104, 5106, 5113, 5115, 5122, 5124, 5131, 5133,
    5289, 5291, 5293, 5295, 6203, 6205, 6207, 6209, 6260, 6262, 6264, 6266, 6897, 6899, 6906, 6908, 7039, 7041, 7048, 7050, 8552, 8554, 8556, 8558,
    9176, 9178, 9180, 9182, 9278, 9280, 9282, 9284, 10279, 10281, 10283, 10285, 10474, 10476, 10483, 10485, 10781, 12096, 12196, 19846, 19986, 20279,
    10783, 12098, 12194, 19848, 19988, 20281, 10790, 12103, 12205, 19855, 19995, 20288, 10792, 12105, 12203, 19857, 19997, 20290
}

questDoors = {
    1223, 1225, 1241, 1243, 1255, 1257, 3542, 3551, 5105, 5114, 5123, 5132, 5288, 5290, 5745, 5748, 6202, 6204, 6259, 6261, 6898, 6907, 7040, 7049,
    8551, 8553, 9175,9177, 9277, 9279, 10278, 10280, 10475, 10484, 10782, 12097, 19847, 19987, 20280, 10791, 12104, 12204, 12195, 19856, 19996, 20289,
    22821, 22830
}

levelDoors = {
    1227, 1229, 1245, 1247, 1259, 1261, 3540, 3549, 5103, 5112, 5121, 5130, 5292, 5294, 6206, 6208, 6263, 6265, 6896, 6905, 7038, 7047, 8555, 8557,9179, 9181,
    9281, 9283, 10282, 10284, 10473, 10482, 10780, 10789, 10780, 12095, 12195, 19845, 19985, 20278, 10789, 12102, 12193, 12202, 19854, 19994, 20287
}

keys = {2086, 2087, 2088, 2089, 2090, 2091, 2092, 10032}

function Position.getNextPosition(self, direction, steps)
    steps = steps or 1
    if direction == WEST then
        self.x = self.x - steps
    elseif direction == EAST then
        self.x = self.x + steps
    elseif direction == NORTH then
        self.y = self.y - steps
    elseif direction == SOUTH then
        self.y = self.y + steps
    end
    return self
end

function doCreatureSayWithRadius(cid, text, type, radiusx, radiusy, position)
    if not position then
        position = Creature(cid):getPosition()
    end

    local spectators, spectator = Game.getSpectators(position, false, true, radiusx, radiusx, radiusy, radiusy)
    for i = 1, #spectators do
        spectator = spectators[i]
        spectator:say(text, type, false, spectator, position)
    end
end

function getBlessingsCost(level)
    if level <= 30 then
        return 2000
    elseif level >= 120 then
        return 20000
    else
        return (level - 20) * 200
    end
end

function getPvpBlessingCost(level)
    if level <= 30 then
        return 2000
    elseif level >= 270 then
        return 50000
    else
        return (level - 20) * 200
    end
end

function isInRange(pos, fromPos, toPos)
    return pos.x >= fromPos.x and pos.y >= fromPos.y and pos.z >= fromPos.z and pos.x <= toPos.x and pos.y <= toPos.y and pos.z <= toPos.z
end

function isNumber(str)
    return tonumber(str) ~= nil
end

function getTibianTime()
    local worldTime = getWorldTime()
    local hours = math.floor(worldTime / 60)

    local minutes = worldTime % 60
    if minutes < 10 then
        minutes = '0' .. minutes
    end
    return hours .. ':' .. minutes
end

-- Stamina
if Game.getStorageValue("stamina") == -1 then
    Game.setStorageValue("stamina", {})
end
 
use this in system.lua
Code:
local specialQuests = {
   [2215] = 2215,
   [12513] = Storage.thievesGuild.Reward,
   [26300] = 26300,
   [27300] = 27300,
   [28300] = 28300
}

local questsExperience = {
   [1296] = 80000,
   [2215] = 100000,
   [9170] = 20000,
   [9050] = 20000
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
   local storage = specialQuests[item.actionid]
   if not storage then
     storage = item.uid
     if storage > 65535 then
       return false
     end
   end

   local player = Player(cid)
   if player:getStorageValue(storage) > 0 then
     player:sendTextMessage(MESSAGE_INFO_DESCR, "The " .. ItemType(item.itemid):getName() .. " is empty.")
     return true
   end

   local targetItem = Item(item.uid)
   local items = {}
   local reward = nil

   local size = targetItem:isContainer() and Container(item.uid):getSize() or 0
   if size == 0 then
     reward = targetItem:clone()
   else
     local container = Container(item.uid)
     for i = 0, container:getSize() - 1 do
       table.insert(items, container:getItem(i):clone())
     end
   end

   size = #items
   if size == 1 then
     reward = items[1]:clone()
   end

   local result = ""
   local weight = 0
   if reward then
     local ret = ItemType(reward:getId())
     if ret:isRune() then
       result = ret:getArticle() .. " " ..  ret:getName() .. " (" .. reward:getSubType() .. " charges)"
     elseif ret:isStackable() and reward:getCount() > 1 then
       result = reward:getCount() .. " " .. ret:getPluralName()
     else
       result = ret:getArticle() .. " " .. ret:getName()
     end
     weight = weight + ret:getWeight(reward:getCount())
   else
     if size > 20 then
       reward = Container(item.itemid, {})
     elseif size > 8 then
       reward = Container(1988, {})
     else
       reward = Container(1987, {})
     end

     for i = 1, size do
     local tmp = items[i]
       if reward:addItemEx(tmp) ~= RETURNVALUE_NOERROR then
         print("[Warning] QuestSystem:", "Could not add quest reward to container")
       else
         local ret = ", "
         if i == size then
           ret = " and "
         elseif i == 1 then
           ret = ""
         end
         
         result = result .. ret
         
         local ret = ItemType(tmp:getId())
         if ret:isRune() then
           result = result .. ret:getArticle() .. " " .. ret:getName() .. " (" .. tmp:getSubType() .. " charges)"
         elseif ret:isStackable() and tmp:getCount() > 1 then
           result = result .. tmp:getCount() .. " " .. ret:getPluralName()
         else
           result = result .. ret:getArticle() .. " " .. ret:getName()
         end
         weight = weight + ret:getWeight(tmp:getCount())
       end
     end
     weight = weight + ItemType(reward:getId()):getWeight()
   end
   
   if player:addItemEx(reward) ~= RETURNVALUE_NOERROR then
     if player:getFreeCapacity() < weight then
       player:sendCancelMessage("You have found " .. result .. " weighing " .. string.format("%.2f", weight) .. " oz. You have no capacity.")
     else
       player:sendCancelMessage("You have found " .. result .. ", but you have no room to take it.")
     end
     return true
   end

   if questsExperience[storage] ~= nil then
     player:addExperience(questsExperience[storage], true)
   end

   player:sendTextMessage(MESSAGE_INFO_DESCR, "You have found " .. result .. ".")
   player:setStorageValue(storage, 1)
   return true
end
 
Last edited:
test this in Tiles.lua

Code:
local increasingItemID = {416, 446, 3216, 11062}
local decreasingItemID = {417, 447, 3217, 11063}

function onStepIn(cid, item, position, fromPosition)
    if isInArray(increasingItemID, item.itemid) then
        doTransformItem(item.uid, item.itemid + 1)
        if item.actionid > 1000 then
            getLevelTile(cid, item, position)
        elseif getTilePzInfo(position) then
            getDepotItems(cid, position)
        end
    elseif item.itemid == 426 then
        doTransformItem(item.uid, 425)
        if item.actionid > 1000 then
            getLevelTile(cid, item, position)
        elseif getTilePzInfo(position) then
            getDepotItems(cid, position)
        end
    end
    return true
end

function onStepOut(cid, item, position, fromPosition)
    if isInArray(decreasingItemID, item.itemid) then
        doTransformItem(item.uid, item.itemid - 1)
    elseif item.itemid == 425 then
        doTransformItem(item.uid, item.itemid + 1)
    end
    return true
end

function getLevelTile(cid, item, position)
    local player = Player(cid)
    if player == nil then
        return
    end

    if player:getLevel() < item.actionid - 1000 then
        local playerPosition = player:getPosition()
        doTeleportThing(cid, {x = playerPosition.x, y = playerPosition.y, z = playerPosition.z + 1})
        playerPosition:sendMagicEffect(CONST_ME_MAGIC_BLUE)
    end
end

function getDepotItems(cid, position)
    local player = Player(cid)
    if player == nil then
        return
    end

    local possiblePositions = {
        {x = position.x - 1, y = position.y, z = position.z},
        {x = position.x + 1, y = position.y, z = position.z},
        {x = position.x, y = position.y - 1, z = position.z},
        {x = position.x, y = position.y + 1, z = position.z},
    }

    for i = 1, #possiblePositions do
        local tile = Tile(possiblePositions[i])
        if tile ~= nil then
            local item = tile:getItemByType(ITEM_TYPE_DEPOT)
            if item ~= nil then
                local depotItems = player:getDepotItems(getDepotId(item:getUniqueId()))
                if depotItems == 1 then
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, 'Your depot contains 1 item.')
                else
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, 'Your depot contains '  .. depotItems .. ' items.')
                end
                break
            end
        end
    end
end
 
Back
Top