• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Help with lua scripts.

Simonalina

Member
Joined
May 10, 2008
Messages
180
Solutions
1
Reaction score
16
Location
Sweden



Thats my problem..

i searched for the stamina.

Code:
Search "usestamina" (9 hits in 5 files)
  C:\Users\Simon\Desktop\theforgottenserver-v1.1-win64\data\creaturescripts\scripts\login.lua (1 hit)
    Line 16:     nextUseStaminaTime[player.uid] = 0
  C:\Users\Simon\Desktop\theforgottenserver-v1.1-win64\data\creaturescripts\scripts\others\logout.lua (2 hits)
    Line 3:     if nextUseStaminaTime[playerId] ~= nil then
    Line 4:         nextUseStaminaTime[playerId] = nil
  C:\Users\Simon\Desktop\theforgottenserver-v1.1-win64\data\creaturescripts\scripts\others\playerdeath.lua (2 hits)
    Line 6:     if nextUseStaminaTime[playerId] ~= nil then
    Line 7:         nextUseStaminaTime[playerId] = nil
  C:\Users\Simon\Desktop\theforgottenserver-v1.1-win64\data\events\scripts\player.lua (2 hits)
    Line 153: local function useStamina(player)
    Line 198:         useStamina(self)
  C:\Users\Simon\Desktop\theforgottenserver-v1.1-win64\data\global.lua (2 hits)
    Line 48: if nextUseStaminaTime == nil then
    Line 49:     nextUseStaminaTime = {}
 
Code:
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = false

function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = 'You see '
    if thing:isItem() then
        if thing.actionid == 5640 then
            description = description .. 'a honeyflower patch.'
        elseif thing.actionid == 5641 then
            description = description .. 'a banana palm.'
        else
            description = description .. thing:getDescription(distance)
        end
    else
        description = description .. thing:getDescription(distance)
    end

    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format('%s\nItem ID: %d', description, thing.itemid)

            local actionId = thing.actionid
            if actionId ~= 0 then
                description = string.format('%s, Action ID: %d', description, actionId)
            end

            local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
            if uniqueId > 0 and uniqueId < 65536 then
                description = string.format('%s, Unique ID: %d', description, uniqueId)
            end

            description = description .. '.'
            local itemType = thing:getType()

            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onEquip)', description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onDeEquip)', description, transformDeEquipId)
            end

            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format('%s\nDecays to: %d', description, decayId)
            end
        elseif thing:isCreature() then
            local str = '%s\nHealth: %d / %d'
            if thing:getMaxMana() > 0 then
                str = string.format('%s, Mana: %d / %d', str, thing:getMana(), thing:getMaxMana())
            end
            description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. '.'
        end

        local position = thing:getPosition()
        description = string.format(
            '%s\nPosition: %d, %d, %d',
            description, position.x, position.y, position.z
        )

        if thing:isCreature() and thing:isPlayer() then
            description = string.format('%s\nIP: %s.', description, Game.convertIpToString(thing:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInBattleList(creature, distance)
    local description = 'You see ' .. creature:getDescription(distance)
    if self:getGroup():getAccess() then
        local str = '%s\nHealth: %d / %d'
        if creature:getMaxMana() > 0 then
            str = string.format('%s, Mana: %d / %d', str, creature:getMana(), creature:getMaxMana())
        end
        description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. '.'

        local position = creature:getPosition()
        description = string.format(
            '%s\nPosition: %d, %d, %d',
            description, position.x, position.y, position.z
        )

        if creature:isPlayer() then
            description = string.format('%s\nIP: %s.', description, Game.convertIpToString(creature:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInTrade(partner, item, distance)
    self:sendTextMessage(MESSAGE_INFO_DESCR, 'You see ' .. item:getDescription(distance))
end

function Player:onLookInShop(itemType, count)
    return true
end

function Player:onMoveItem(item, count, fromPosition, toPosition)
    if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
        local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
        if thing then
            self:sendCancelMessage('Sorry, not possible.')
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end

    if isInArray({1714, 1715, 1716, 1717, 1738, 1740, 1741, 1747, 1748, 1749}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
        self:sendCancelMessage('You cannot move this object.')
        return false
    elseif item.itemid == 7466 then
        self:sendCancelMessage('You cannot move this object.')
        return false
    end

    if fromPosition.x == CONTAINER_POSITION and toPosition.x == CONTAINER_POSITION
            and item.itemid == 8710 and self:getItemCount(8710) == 2 and self:getStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage) ~= 1 then
        self:sendTextMessage(MESSAGE_INFO_DESCR, 'Well done, you have enough cockroach legs! You should head back to Santiago with them. Climb the ladder to the north to exit.')
        self:setStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage, 1)
        self:setStorageValue(Storage.RookgaardTutorialIsland.SantiagoNpcGreetStorage, 6)
    end
    return true
end

function Player:onMoveCreature(creature, fromPosition, toPosition)
    return true
end

function Player:onTurn(direction)
    return true
end

function Player:onTradeRequest(target, item)
    if isInArray({1738, 1740, 1747, 1748, 1749, 8766}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end

function Player:onTradeAccept(target, item, targetItem)
    return true
end

local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
soulCondition:setTicks(4 * 60 * 1000)
soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)

local function useStamina(player)
    local staminaMinutes = player:getStamina()
    if staminaMinutes == 0 then
        return
    end

    local playerId = player.uid
    local currentTime = os.time()
    local staminaTable = Game.getStorageValue("stamina")
    local timePassed = currentTime - staminaTable[playerId]
    if timePassed <= 0 then
        return
    end

    if timePassed > 60 then
        if staminaMinutes > 2 then
            staminaMinutes = staminaMinutes - 2
        else
            staminaMinutes = 0
        end
        staminaTable[playerId] = currentTime + 120
    else
        staminaMinutes = staminaMinutes - 1
        staminaTable[playerId] = currentTime + 60
    end
    player:setStamina(staminaMinutes)
end

function Player:onGainExperience(source, exp, rawExp)
    if not source or source:isPlayer() then
        return exp
    end

    -- Soul regeneration
    local vocation = self:getVocation()
    if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
        soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
        self:addCondition(soulCondition)
    end

    -- Apply experience stage multiplier
    exp = exp * Game.getExperienceStage(self:getLevel())

    -- Stamina modifier
    if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
        useStamina(self)

        local staminaMinutes = self:getStamina()
        if staminaMinutes > 2400 and self:isPremium() then
            exp = exp * 1.5
        elseif staminaMinutes <= 840 then
            exp = exp * 0.5
        end
    end

    return exp
end

function Player:onLoseExperience(exp)
    return exp
end

function Player:onGainSkillTries(skill, tries)
    if skill == SKILL_MAGLEVEL then
        return tries * configManager.getNumber(configKeys.RATE_MAGIC)
    end
    return tries * configManager.getNumber(configKeys.RATE_SKILL)
end
 
Full script:

Code:
function onLogin(player)
    local loginStr = "Welcome to " .. configManager.getString(configKeys.SERVER_NAME) .. "!"
    if player:getLastLoginSaved() <= 0 then
        loginStr = loginStr .. " Please choose your outfit."
        player:sendOutfitWindow()
    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)

    -- Stamina
    nextUseStaminaTime[player.uid] = 0
   
    -- Promotion
    local vocation = player:getVocation()
    local promotion = vocation:getPromotion()
    if player:isPremium() then
        local value = player:getStorageValue(STORAGEVALUE_PROMOTION)
        if not promotion and value ~= 1 then
            player:setStorageValue(STORAGEVALUE_PROMOTION, 1)
        elseif value == 1 then
            player:setVocation(promotion)
        end
    elseif not promotion then
        player:setVocation(vocation:getDemotion())
    end

    -- Events You need to register all your events here, like this old way. is much better. I'll show you.
   
    player:registerEvent("PlayerDeath")
    player:registerEvent("DropLoot")
    player:registerEvent("TutorialCockroach")
    player:registerEvent("ElementalSpheresOverlords")
    player:registerEvent("BigfootBurdenVersperoth")
    player:registerEvent("BigfootBurdenWarzone")
    player:registerEvent("BigfootBurdenWeeper")
    player:registerEvent("BigfootBurdenWiggler")
    player:registerEvent("SvargrondArenaKill")
    player:registerEvent("NewFrontierShardOfCorruption")
    player:registerEvent("NewFrontierTirecz")
    player:registerEvent("ServiceOfYalaharDiseasedTrio")
    player:registerEvent("ServiceOfYalaharAzerus")
    player:registerEvent("ServiceOfYalaharQuaraLeaders")
    player:registerEvent("InquisitionBosses")
    player:registerEvent("InquisitionUngreez")
    player:registerEvent("levelup")
    player:registerEvent("KillingInTheNameOfKills")
    player:registerEvent("MastersVoiceServants")
    player:registerEvent("SecretServiceBlackKnight")
    player:registerEvent("ThievesGuildNomad")
    player:registerEvent("WotELizardMagistratus")
    player:registerEvent("WotELizardNoble")
    player:registerEvent("WotEKeeper")
    player:registerEvent("WotEBosses")
    player:registerEvent("WotEZalamon")
    player:registerEvent("AdvanceSave")
    player:registerEvent("AdvanceRookgaard")
    player:registerEvent("PythiusTheRotten")
    player:registerEvent("DropLoot")
    return true
end
 
I have one more question,
does anyone have a nice script for first items? in creaturescripts.

i have this one on a realmap, and i dont know how to change.

Code:
local firstItems = {2050, 2382}

function onLogin(player)
    if player:getLastLoginSaved() == 0 then
        for i = 1, #firstItems do
            player:addItem(firstItems[i], 1)
        end
        player:addItem(player:getSex() == 0 and 2651 or 2650, 1)
        player:addItem(1987, 1):addItem(2674, 1)
    end
    return true
end
So if someone have a good one please give me :/

My last one is this but i dont know if it work. the server is up now and online so i dont want to make any trouble to take chanses with wrong files haha

this is my old:
Code:
-- Without Rookgaard
local config = {
    [1] = {
        --equipment spellbook, wand of vortex, magician's robe, mage hat, studded legs, leather boots, scarf
        items = {{2175, 1}, {2190, 1}, {7463, 1}, {2480, 1}, {2507, 1}, {2643, 1}, {2661, 1}},
        --container rope, shovel, mana potion
        container = {{2120, 1}, {2554, 1}, {2152, 50}}
    },
    [2] = {
        --equipment spellbook, snakebite rod, magician's robe, mage hat, studded legs, leather boots scarf
        items = {{2175, 1}, {2182, 1}, {7463, 1}, {2480, 1}, {2507, 1}, {2643, 1}, {2661, 1}},
        --container rope, shovel, mana potion
        container = {{2120, 1}, {2554, 1}, {2152, 50}}
    },
    [3] = {
        --equipment dwarven shield, 5 spear, ranger's cloak, ranger legs scarf, legion helmet
        items = {{2525, 1}, {2389, 3}, {7463, 1}, {2507, 1}, {2643, 1}, {2661, 1}, {2480, 1}},
        --container rope, shovel, health potion, bow, 50 arrow
        container = {{2120, 1}, {2554, 1}, {2152, 50}, {2456, 1}, {2544, 50}}
    },
    [4] = {
        --equipment dwarven shield, steel axe, brass armor, brass helmet, brass legs scarf
        items = {{2525, 1}, {8601, 1}, {7463, 1}, {2480, 1}, {2507, 1}, {2643, 1}, {2661, 1}},
        --container jagged sword, daramian mace, rope, shovel, health potion
        container = {{2120, 1}, {2439, 1}, {8602, 1}, {2554, 1}, {2152, 50}}
    }
}

function onLogin(player)
    local targetVocation = config[player:getVocation():getId()]
    if not targetVocation then
        return true
    end

    if player:getLastLoginSaved() ~= 0 then
        return true
    end

    for i = 1, #targetVocation.items do
        player:addItem(targetVocation.items[i][1], targetVocation.items[i][2])
    end

    local backpack = player:addItem(1988)
    if not backpack then
        return true
    end

    for i = 1, #targetVocation.container do
        backpack:addItem(targetVocation.container[i][1], targetVocation.container[i][2])
    end
    return true
end
 
Back
Top