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

Help with storage look TFS 1.3

Dohko

Active Member
Joined
Mar 7, 2017
Messages
100
Reaction score
29
Good afternoon friends, I need a script and I have no idea how to do it I need that if the player has a certain storage, he receives a title in the look. Example: You see player, he is son ot Atena. "

I need 5 diferent titles,

Son of Atena
Son of Zeus
Son of Poseidon
Son of Hades
Son of Dionisio

up, nobody know how i do this ?

Info of my server :

I use otx 3.9, I believe it is based on tfs 1.3

My look files

Creaturescripts

[XML] creaturescripts.xml - Pastebin.com
--------------------------------

Login.lua
[Lua] Login.lua - Pastebin.com
 
Last edited by a moderator:
Solution
To get this working, add this in the Player:eek:nLook (data/events/scripts/player.lua);
Lua:
    if thing:isCreature() then
        if thing:isPlayer() then
            local storage = thing:getStorageValue(titleStorage)
            if storage >= 1 then
                description = string.format("%s\n%s %s", description, thing:getSex() == PLAYERSEX_FEMALE and "She is " or "He is ", titles[titleStorage])
            end
        end
    end

And at the top of the script add this and remember to change the storage value and titles;
Lua:
local titleStorage = 10000
local titles = {
    [1] = "Son of ..",
    [2] = "Son of ..",
    [3] = "Son of .."
}
Please read the rules; Rules for the Support board

Ex what TFS version are you using?
What is your onLook code atm?

Ex if you are using 1.3;
Lua:
local titleStorage = 10000
local titles = {
    [1] = "Son of ..",
    [2] = "Son of ..",
    [3] = "Son of .."
}

if thing:isPlayer() then
    local storage = thing:getStorageValue(titleStorage)
    if storage >= 1 then
        description = string.format("%s, %s", thing:getSex() == PLAYERSEX_FEMALE and "She is " or "He is ", titles[titleStorage])
    end
end
 
3Rm5h71.jpg
 
Please read the rules; Rules for the Support board

Ex what TFS version are you using?
What is your onLook code atm?

Ex if you are using 1.3;
Lua:
local titleStorage = 10000
local titles = {
    [1] = "Son of ..",
    [2] = "Son of ..",
    [3] = "Son of .."
}

if thing:isPlayer() then
    local storage = thing:getStorageValue(titleStorage)
    if storage >= 1 then
        description = string.format("%s, %s", thing:getSex() == PLAYERSEX_FEMALE and "She is " or "He is ", titles[titleStorage])
    end
end



First of all, thanks for the help, how do I use this code?
My look files

Creaturescripts
[XML] creaturescripts.xml - Pastebin.com

Login.lua
[Lua] Login.lua - Pastebin.com
 
Hey bro, sorry,

I just can not see where I'm from the rules, could it be clearer, so I stay within the rules?

Mainly rule #5
5. Incomplete Problem Description:
- Post as much useful information as possible. If the problem is about something on your server, post the server version and client version. Also always post the errors you get and the scripts with the problems.

Even if you PM me your server it isn't good enough, post it in the thread so others can see it aswell.
 
(I'm creating another topic to add more information of my problem, if possible I would like to delete the other one or merge the two.)

Good afternoon friends, I need a script and I have no idea how to do it I need that if the player has a certain storage, he receives a title in the look. Example: You see player, he is son ot Atena. "

I need 5 diferent titles,

Son of Atena
Son of Zeus
Son of Poseidon
Son of Hades
Son of Dionisio

up, nobody know how i do this ?

Info of my server :

I use otx 3.9, I believe it is based on tfs 1.3

My look files

Creaturescripts

[XML] creaturescripts.xml - Pastebin.com
--------------------------------

Login.lua
[Lua] Login.lua - Pastebin.com
 
Okay to start with, post this file; data/events/scripts/player.lua
The code I posted above has to be implemented into that script.
So try to copy paste it into the Player:eek:nLook function.
 
Okay to start with, post this file; data/events/scripts/player.lua
The code I posted above has to be implemented into that script.
So try to copy paste it into the Player:eek:nLook function.


Here is my player.lua, I did what you asked and the title superimposed a vocation,
guild and something like that.
In this pic you can see

https://image.prntscr.com/image/XmBVhXHAQ7mjAa8NqxIUpA.png




Lua:
local titleStorage = 2160
local titles = {
    [2160] = "de Atena",
    [2161] = "de Zeus",
    [2162] = "de Hades"
}

function getKillsPlayer(cid)
    local Info = db.storeQuery("SELECT `frags` FROM `players` WHERE `id` = " .. cid:getGuid())
    local frags = result.getDataInt(Info, 'frags')
    result.free(Info)
    return frags
end
function getDeathsPlayer(cid)
    local Info = db.storeQuery("SELECT `deaths` FROM `players` WHERE `id` = " .. cid:getGuid())
    local deaths = result.getDataInt(Info, 'deaths')
    result.free(Info)
    return deaths
end
-- No move items with actionID 8000
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true

-- Internal Use
ITEM_STORE_INBOX = 26052

function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = "You see " .. thing:getDescription(distance)
    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format("%s\nItem ID: %d", description, thing:getId())

            local actionId = thing:getActionId()
            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
           
           
            local itemType = thing:getType()
          
            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onEquip).", description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onDeEquip).", description, transformDeEquipId)
            end
            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format("%s\nDecayTo: [%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: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )     
          if thing:isCreature() then
           if thing:isPlayer() then
               description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(thing:getIp()))
            end
         end
    end
   
        if thing:isCreature() then
            if thing:isPlayer() then
                if(getDeathsPlayer(thing)==0)then
                    kdr = getKillsPlayer(thing)
                        else
                if(getDeathsPlayer(thing)~=0) then
                    kdr = getKillsPlayer(thing)/getDeathsPlayer(thing)
                end
                end
            description = string.format("%s\nEsse jogador matou %s e morreu %s vezes. Total KDA: %s", description, getKillsPlayer(thing), getDeathsPlayer(thing), kdr)
            end
        end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
    local tile = Tile(toPosition)
    if tile and tile:getGround() and (tile:getGround().actionid == 6577) then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end
-- function Player:onMove(direction)
--   if self:getStorageValue(MAY_NOT_MOVE) == 1 then
--       return false
--   end
--   return true
--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, fromCylinder, toCylinder)
    -- Store Inbox
    local containerIdFrom = fromPosition.y - 64
    local containerFrom = self:getContainerById(containerIdFrom)
    if (containerFrom) then
        if (containerFrom:getId() == ITEM_STORE_INBOX and toPosition.y >= 1 and toPosition.y <= 11 and toPosition.y ~= 3) then
            self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)
            return false
        end
    end

    local containerTo = self:getContainerById(toPosition.y-64)
    if (containerTo) then
        if (containerTo:getId() == ITEM_STORE_INBOX) then
            self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)
            return false
        end
    end

    -- No move items with actionID 8000
    if item:getActionId() == NOT_MOVEABLE_ACTION then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    -- Check two-handed weapons
    if toPosition.x ~= CONTAINER_POSITION then
        return true
    end

    if item:getTopParent() == self and bit.band(toPosition.y, 0x40) == 0 then   
        local itemType, moveItem = ItemType(item:getId())
        if bit.band(itemType:getSlotPosition(), SLOTP_TWO_HAND) ~= 0 and toPosition.y == CONST_SLOT_LEFT then
            moveItem = self:getSlotItem(CONST_SLOT_RIGHT)   
        elseif itemType:getWeaponType() == WEAPON_SHIELD and toPosition.y == CONST_SLOT_RIGHT then
            moveItem = self:getSlotItem(CONST_SLOT_LEFT)
            if moveItem and bit.band(ItemType(moveItem:getId()):getSlotPosition(), SLOTP_TWO_HAND) == 0 then
                return true
            end
        end

        if moveItem then
            local parent = item:getParent()
            if parent:getSize() == parent:getCapacity() then
                self:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM))
                return false
            else
                return moveItem:moveTo(parent)
            end
        end
    end

    -- Reward System
    if toPosition.x == CONTAINER_POSITION then
        local containerId = toPosition.y - 64
        local container = self:getContainerById(containerId)
        if not container then
            return true
        end

        -- Do not let the player insert items into either the Reward Container or the Reward Chest
        local itemId = container:getId()
        if itemId == ITEM_REWARD_CONTAINER or itemId == ITEM_REWARD_CHEST then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            return false
        end

        -- The player also shouldn't be able to insert items into the boss corpse
        local tile = Tile(container:getPosition())
        for _, item in ipairs(tile:getItems() or { }) do
            if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 and item:getName() == container:getName() then
                self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
                return false
            end
        end
    end

    -- Do not let the player move the boss corpse.
    if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    -- Players cannot throw items on reward chest
    local tile = Tile(toPosition)
    if tile and tile:getItemById(ITEM_REWARD_CHEST) then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end

    -- Players cannot throw items on teleports
    if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
        local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
        if thing then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end

    --[[-- Do not stop trying this test
    -- No move parcel very heavy
    if item:getWeight() > 90000 and item:getId() == ITEM_PARCEL then
        self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.')
        return false
    end

    -- No move if item count > 26 items
    if tile and tile:getItemCount() > 26 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    if tile and tile:getItemById(370) then -- Trapdoor
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end ]]
    return true
end

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

function Player:onReport(message, position, category)
    if self:getAccountType() == ACCOUNT_TYPE_NORMAL then
        return false
    end

    local name = self:getName()
    local file = io.open("data/reports/" .. name .. " report.txt", "a")

    if not file then
        self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "There was an error when processing your report, please contact a gamemaster.")
        return true
    end

    io.output(file)
    io.write("------------------------------\n")
    io.write("Name: " .. name)
    if category == BUG_CATEGORY_MAP then
        io.write(" [Map position: " .. position.x .. ", " .. position.y .. ", " .. position.z .. "]")
    end
    local playerPosition = self:getPosition()
    io.write(" [Player Position: " .. playerPosition.x .. ", " .. playerPosition.y .. ", " .. playerPosition.z .. "]\n")
    io.write("Comment: " .. message .. "\n")
    io.close(file)

    self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Your report has been sent to " .. configManager.getString(configKeys.SERVER_NAME) .. ".")
    return true
end

function Player:onTurn(direction)
    if self:getGroup():getAccess() and self:getDirection() == direction then
        local nextPosition = self:getPosition()
        nextPosition:getNextPosition(direction)

        self:teleportTo(nextPosition, true)
    end

    return true
end

function Player:onTradeRequest(target, item)
    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:getId()
    local currentTime = os.time()
    local timePassed = currentTime - nextUseStaminaTime[playerId]
    if timePassed <= 0 then
        return
    end

    if timePassed > 60 then
        if staminaMinutes > 2 then
            staminaMinutes = staminaMinutes - 2
        else
            staminaMinutes = 0
        end
        nextUseStaminaTime[playerId] = currentTime + 120
    else
        staminaMinutes = staminaMinutes - 1
        nextUseStaminaTime[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 APPLY_SKILL_MULTIPLIER == false then
        return tries
    end

    if skill == SKILL_MAGLEVEL then
        return tries * configManager.getNumber(configKeys.RATE_MAGIC)
    end
    return tries * configManager.getNumber(configKeys.RATE_SKILL)
end
 
Here is my player.lua, I did what you asked and the title superimposed a vocation,
guild and something like that.
In this pic you can see

https://image.prntscr.com/image/XmBVhXHAQ7mjAa8NqxIUpA.png




Lua:
local titleStorage = 2160
local titles = {
    [2160] = "de Atena",
    [2161] = "de Zeus",
    [2162] = "de Hades"
}

function getKillsPlayer(cid)
    local Info = db.storeQuery("SELECT `frags` FROM `players` WHERE `id` = " .. cid:getGuid())
    local frags = result.getDataInt(Info, 'frags')
    result.free(Info)
    return frags
end
function getDeathsPlayer(cid)
    local Info = db.storeQuery("SELECT `deaths` FROM `players` WHERE `id` = " .. cid:getGuid())
    local deaths = result.getDataInt(Info, 'deaths')
    result.free(Info)
    return deaths
end
-- No move items with actionID 8000
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true

-- Internal Use
ITEM_STORE_INBOX = 26052

function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = "You see " .. thing:getDescription(distance)
    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format("%s\nItem ID: %d", description, thing:getId())

            local actionId = thing:getActionId()
            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
          
          
            local itemType = thing:getType()
         
            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onEquip).", description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format("%s\nTransformTo: [%d] (onDeEquip).", description, transformDeEquipId)
            end
            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format("%s\nDecayTo: [%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: [X: %d] [Y: %d] [Z: %d].",
            description, position.x, position.y, position.z
        )    
          if thing:isCreature() then
           if thing:isPlayer() then
               description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(thing:getIp()))
            end
         end
    end
  
        if thing:isCreature() then
            if thing:isPlayer() then
                if(getDeathsPlayer(thing)==0)then
                    kdr = getKillsPlayer(thing)
                        else
                if(getDeathsPlayer(thing)~=0) then
                    kdr = getKillsPlayer(thing)/getDeathsPlayer(thing)
                end
                end
            description = string.format("%s\nEsse jogador matou %s e morreu %s vezes. Total KDA: %s", description, getKillsPlayer(thing), getDeathsPlayer(thing), kdr)
            end
        end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
    local tile = Tile(toPosition)
    if tile and tile:getGround() and (tile:getGround().actionid == 6577) then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end
-- function Player:onMove(direction)
--   if self:getStorageValue(MAY_NOT_MOVE) == 1 then
--       return false
--   end
--   return true
--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, fromCylinder, toCylinder)
    -- Store Inbox
    local containerIdFrom = fromPosition.y - 64
    local containerFrom = self:getContainerById(containerIdFrom)
    if (containerFrom) then
        if (containerFrom:getId() == ITEM_STORE_INBOX and toPosition.y >= 1 and toPosition.y <= 11 and toPosition.y ~= 3) then
            self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)
            return false
        end
    end

    local containerTo = self:getContainerById(toPosition.y-64)
    if (containerTo) then
        if (containerTo:getId() == ITEM_STORE_INBOX) then
            self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)
            return false
        end
    end

    -- No move items with actionID 8000
    if item:getActionId() == NOT_MOVEABLE_ACTION then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    -- Check two-handed weapons
    if toPosition.x ~= CONTAINER_POSITION then
        return true
    end

    if item:getTopParent() == self and bit.band(toPosition.y, 0x40) == 0 then  
        local itemType, moveItem = ItemType(item:getId())
        if bit.band(itemType:getSlotPosition(), SLOTP_TWO_HAND) ~= 0 and toPosition.y == CONST_SLOT_LEFT then
            moveItem = self:getSlotItem(CONST_SLOT_RIGHT)  
        elseif itemType:getWeaponType() == WEAPON_SHIELD and toPosition.y == CONST_SLOT_RIGHT then
            moveItem = self:getSlotItem(CONST_SLOT_LEFT)
            if moveItem and bit.band(ItemType(moveItem:getId()):getSlotPosition(), SLOTP_TWO_HAND) == 0 then
                return true
            end
        end

        if moveItem then
            local parent = item:getParent()
            if parent:getSize() == parent:getCapacity() then
                self:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM))
                return false
            else
                return moveItem:moveTo(parent)
            end
        end
    end

    -- Reward System
    if toPosition.x == CONTAINER_POSITION then
        local containerId = toPosition.y - 64
        local container = self:getContainerById(containerId)
        if not container then
            return true
        end

        -- Do not let the player insert items into either the Reward Container or the Reward Chest
        local itemId = container:getId()
        if itemId == ITEM_REWARD_CONTAINER or itemId == ITEM_REWARD_CHEST then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            return false
        end

        -- The player also shouldn't be able to insert items into the boss corpse
        local tile = Tile(container:getPosition())
        for _, item in ipairs(tile:getItems() or { }) do
            if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 and item:getName() == container:getName() then
                self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
                return false
            end
        end
    end

    -- Do not let the player move the boss corpse.
    if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    -- Players cannot throw items on reward chest
    local tile = Tile(toPosition)
    if tile and tile:getItemById(ITEM_REWARD_CHEST) then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end

    -- Players cannot throw items on teleports
    if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
        local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
        if thing then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end

    --[[-- Do not stop trying this test
    -- No move parcel very heavy
    if item:getWeight() > 90000 and item:getId() == ITEM_PARCEL then
        self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.')
        return false
    end

    -- No move if item count > 26 items
    if tile and tile:getItemCount() > 26 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    if tile and tile:getItemById(370) then -- Trapdoor
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end ]]
    return true
end

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

function Player:onReport(message, position, category)
    if self:getAccountType() == ACCOUNT_TYPE_NORMAL then
        return false
    end

    local name = self:getName()
    local file = io.open("data/reports/" .. name .. " report.txt", "a")

    if not file then
        self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "There was an error when processing your report, please contact a gamemaster.")
        return true
    end

    io.output(file)
    io.write("------------------------------\n")
    io.write("Name: " .. name)
    if category == BUG_CATEGORY_MAP then
        io.write(" [Map position: " .. position.x .. ", " .. position.y .. ", " .. position.z .. "]")
    end
    local playerPosition = self:getPosition()
    io.write(" [Player Position: " .. playerPosition.x .. ", " .. playerPosition.y .. ", " .. playerPosition.z .. "]\n")
    io.write("Comment: " .. message .. "\n")
    io.close(file)

    self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Your report has been sent to " .. configManager.getString(configKeys.SERVER_NAME) .. ".")
    return true
end

function Player:onTurn(direction)
    if self:getGroup():getAccess() and self:getDirection() == direction then
        local nextPosition = self:getPosition()
        nextPosition:getNextPosition(direction)

        self:teleportTo(nextPosition, true)
    end

    return true
end

function Player:onTradeRequest(target, item)
    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:getId()
    local currentTime = os.time()
    local timePassed = currentTime - nextUseStaminaTime[playerId]
    if timePassed <= 0 then
        return
    end

    if timePassed > 60 then
        if staminaMinutes > 2 then
            staminaMinutes = staminaMinutes - 2
        else
            staminaMinutes = 0
        end
        nextUseStaminaTime[playerId] = currentTime + 120
    else
        staminaMinutes = staminaMinutes - 1
        nextUseStaminaTime[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 APPLY_SKILL_MULTIPLIER == false then
        return tries
    end

    if skill == SKILL_MAGLEVEL then
        return tries * configManager.getNumber(configKeys.RATE_MAGIC)
    end
    return tries * configManager.getNumber(configKeys.RATE_SKILL)
end

Well it's not in English so I have no ide what the message before position is, but my guess is that you added the code in the end.
If it isn't the place you want the text = edit the source code and move everything to Lua, (getDescription)

Also (well you should know this but still ... ) remember to change the storage value from 10000.
 
Well it's not in English so I have no ide what the message before position is, but my guess is that you added the code in the end.
If it isn't the place you want the text = edit the source code and move everything to Lua, (getDescription)

Also (well you should know this but still ... ) remember to change the storage value from 10000.

A message is even correct, not for a comma,
but it removed everything else, moved position and did
not dock without removing anything

Well it's not in English so I have no ide what the message before position is, but my guess is that you added the code in the end.
If it isn't the place you want the text = edit the source code and move everything to Lua, (getDescription)

Also (well you should know this but still ... ) remember to change the storage value from 10000.

Is it removing the rest because it conflicts with K / D mark that I'm using?
 
Last edited by a moderator:
A message is even correct, not for a comma,
but it removed everything else, moved position and did
not dock without removing anything

This is your last warning, read the rules or get banned from the support boards, double posting isn't allowed with in 24h.
Not sure what you mean, if it's missing a comma you can add that, if it "moved" positions then either move the code down or up.

You say it removed everything else but then not removing anything else? What was removed, we are not here to play a gussing game, tell us what the problem is and we will help you when we have time.

Is it removing the rest because it conflicts with K / D mark that I'm using?

Well if the code that is sent last (according to the picture the "Total KDA: 0" would be removed, the client has limits to how many character you can send in a message unless you new line it(and it still probbly has limits after that).
 
This is your last warning, read the rules or get banned from the support boards, double posting isn't allowed with in 24h.
Not sure what you mean, if it's missing a comma you can add that, if it "moved" positions then either move the code down or up.

You say it removed everything else but then not removing anything else? What was removed, we are not here to play a gussing game, tell us what the problem is and we will help you when we have time.



Well if the code that is sent last (according to the picture the "Total KDA: 0" would be removed, the client has limits to how many character you can send in a message unless you new line it(and it still probbly has limits after that).

I tried to add the code last, in the middle,
I removed the K / D and nothing worked,
or the son of atena overlap everything, or it does not appear.
 
I tried to add the code last, in the middle,
I removed the K / D and nothing worked,
or the son of atena overlap everything, or it does not appear.

Okay try to just write out anything to see if the script is being updated, if it isn't then make sure your server is reloaded.
If it does print out make sure the storage value is set.
 
Okay try to just write out anything to see if the script is being updated, if it isn't then make sure your server is reloaded.
If it does print out make sure the storage value is set.


Yes, it worked perfectly, but if I put it in the OnLook function it removes from the look the other information, such as vocation and level.
 
Back
Top