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

BUG SEGMENTATION FAULT ( GDB )

José Luminera

New Member
Joined
Mar 15, 2017
Messages
17
Reaction score
0
  • I'm having a segmentation fault problem, I got the "core" error, follow below!
  • (GDB FULL)
  • ="(gdb) bt full #0 0x00007fb2c8125f13 in std::basic_ostream<char, std::char_traits<char> >& std::eek:perator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 No symbol table info available. #1 0x0000000000795de9 in Player::getDescription(int) const () No symbol table info available. #2 0x000000000070a843 in LuaScriptInterface::luaCreatureGetDescription(lua_State*) () No symbol table info available. #3 0x00007fb2c8e94a88 in ?? () from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2 No symbol table info available. #4 0x00007fb2c8ed7f60 in lua_pcall () from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2 No symbol table info available. #5 0x00000000006a15ce in LuaScriptInterface::protectedCall(lua_State*, int, int) () No symbol table info available. #6 0x00000000006a24e1 in LuaScriptInterface::callVoidFunction(int) () No symbol table info available. #7 0x00000000005e4b09 in Events::eventPlayerOnLook(Player*, Position const&, Th"]
  • GDB TYPE
  • ="ing*, unsigned char, int) () No symbol table info available. #8 0x00000000005f9e59 in Game::playerLookAt(unsigned int, Position const&, unsigned char) () No symbol table info available. #9 0x00000000007ebfec in void std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)>::eek:perator()<unsigned int&, Position&, unsigned char&, void>(Game*, unsigned int&, Position&, unsigned char&) const () No symbol table info available. #10 0x00000000007e86f2 in void std::_Bind<std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)> (Game*, unsigned int, Position, unsigned char)>::__call<void, , 0ul, 1ul, 2ul, 3ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul, 2ul, 3ul>) () No symbol table info available. #11 0x00000000007e3b94 in void std::_Bind<std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)> (Game*, unsigned int, Position, unsigned char)>::eek:perator()<, void>() () No symbol table info available. #12 0x00000000007da296 in std::_Function_handler<void (), std::_Bind<std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)> (Game*, unsigned int, Position, unsigned char)> >::_M_invoke(std::_Any_data const&) () No symbol table info available. #13 0x000000000082d6b4 in std::function<void ()>::eek:perator()() const ()"]
  • If anyone can help me, I thank you!
 
post your onLook function.
This?
  • ="void Events::eventPlayerOnLook(Player* player, const Position& position, Thing* thing, uint8_t stackpos, int32_t lookDistance) { // Player:eek:nLook(thing, position, distance) or Player.onLook(self, thing, position, distance) if (info.playerOnLook == -1) { return; } if (!scriptInterface.reserveScriptEnv()) { std::cout << "[Error - Events::eventPlayerOnLook] Call stack overflow" << std::endl; return; }"]
 
You can get it from /data/events/scripts/player.lua
Code:
-- Internal Use
STONE_SKIN_AMULET = 2197
ITEM_STORE_INBOX = 26052
GOLD_POUNCH = 26377

-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true
function Player:onBrowseField(position)
    return true
end
local function getHours(seconds)
    return math.floor((seconds/60)/60)
end

local function getMinutes(seconds)
    return math.floor(seconds/60)
end

local function getTime(seconds)
    local hours, minutes = getHours(seconds), getMinutes(seconds)
    if (minutes > 59) then
        minutes = minutes-hours*60
    end

    if (minutes < 10) then
        minutes = "0" ..minutes
    end

    return hours..":"..minutes.. "h"
end 
function Player:onLook(thing, position, distance)
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        if isInArray({bomber.bombID, bomber.powerUps.flame, bomber.powerUps.bomb, bomber.powerUps.boots}, thing:getId()) then
            self:sendCancelMessage('You cannot look this object.')
            return false
        end
    end
  
    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

    local itemType = thing:getType()
        if (imbuementSlots[thing:getId()] and imbuementSlots[thing:getId()].slots > 0) then
            local imbuingSlots = "Imbuements: ("
            for i = 1, imbuementSlots[thing:getId()].slots do
                local specialAttr = thing:getSpecialAttribute(i)
                local time = 0
                if (thing:getSpecialAttribute(i+3)) then
                    time = getTime(thing:getSpecialAttribute(i+3))
                end
               
                if (specialAttr) then
                    if (i ~= imbuementSlots[thing:getId()].slots) then
                        imbuingSlots = imbuingSlots.. "" ..specialAttr.." - " ..time..", "
                    else
                        imbuingSlots = imbuingSlots.. "" ..specialAttr.." - " ..time..")."
                    end
                else
                    if (i ~= imbuementSlots[thing:getId()].slots) then
                        imbuingSlots = imbuingSlots.. "Empty Slot, "
                    else
                        imbuingSlots = imbuingSlots.. "Empty Slot)."
                    end
                end
            end
            description = string.gsub(description, "It weighs", imbuingSlots.. "\nIt weighs")
        end

    else
        description = description .. thing:getDescription(distance)
    end
  
    -- KD look
     if thing:isCreature() and thing:isPlayer() then
        description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
            description, math.max(0, thing:getStorageValue(167912)), math.max(0, thing:getStorageValue(167913)))
    end
  
    -- MARRY
    if LOOK_MARRIAGE_DESCR and thing:isCreature() then
if thing:isPlayer() then
description = description .. self:getMarriageDescription(thing)
end
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
  
  
    -- KD look
     if creature:isPlayer() and creature:isCreature() then
        description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
            description, math.max(0, creature:getStorageValue(167912)), math.max(0, creature:getStorageValue(167913)))
    end
  
    -- MARRY 
    if LOOK_MARRIAGE_DESCR and creature:isCreature() then
if creature:isPlayer() then
description = description .. self:getMarriageDescription(creature)
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:onMoveCreature(creature, fromPosition, toPosition)
    for _, pos in ipairs(bomber.playerPositions) do
        if creature:getPosition() == pos then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            return false
        end
    end
    return true
end
function Player:onTurn(direction)
    return true
end
function Player:onTradeRequest(target, item)
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        self:sendCancelMessage('You cannot trade items in Bomberman Event.')
        return false
    end
    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: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
    -- exp card
    local BONUS_EXP_STORAGE = 61398
    local BONUS_EXP_MULT = 1.3
    -- exp card

local function useStaminaXp(player)
    local staminaMinutes = player:getExpBoostStamina()
    if staminaMinutes == 0 then
        return
    end

    local playerId = player:getId()
    local currentTime = os.time()
    local timePassed = currentTime - nextUseXpStamina[playerId]
    if timePassed <= 0 then
        return
    end

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


local function useStaminaPrey(player, name)
    for i = 1, 3 do
        if (player:isActiveByName(i-1, name)) then
            local staminaMinutes = player:getPreyStamina(i-1)/60
            if (staminaMinutes > 0) then
                local playerId = player:getId()+i
                local currentTime = os.time()
                if timePassed ~= nil then
                    timePassed = currentTime - nextUseStaminaPrey[playerId].Time
                else
                    timePassed = 1
                end
                if timePassed > 0 then
                    if timePassed > 60 then
                        if staminaMinutes > 2 then
                            staminaMinutes = staminaMinutes - 2
                        else
                            staminaMinutes = 0
                        end

                        nextUseStaminaPrey[playerId].Time = currentTime + 120
                    else
                        staminaMinutes = staminaMinutes - 1
                        nextUseStaminaPrey[playerId].Time = currentTime + 60
                    end
                end

                player:setPreyStamina(i-1, staminaMinutes*60)
                player:sendPreyTimeLeft(i-1, staminaMinutes*60)
            end
        end
    end
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())

local party = self:getParty()
    if (party) then
        if (party:isSharedExperienceActive() and
            party:isSharedExperienceEnabled()) then
            local tableVocs = {}
            local count = 0
            local totalCount = 0
            local leaderId = party:getLeader():getVocation():getId()
            if (leaderId) then
                tableVocs[leaderId] = 1
                count = count + 1
                totalCount = totalCount + 1
            end
            for i, v in pairs(party:getMembers()) do
                local vocId = v:getVocation():getId()
                if (tableVocs[vocId] == nil) then
                    tableVocs[vocId] = 1
                    count = count + 1
                end
                totalCount = totalCount + 1
            end

            if (totalCount <= 10 and
                count >= 4) then
                exp = exp * 2
            end
        end
    end
   
    for i = 1, 3 do
        if (self:isActive(i-1)) then
            local bonusInfo = self:getBonusInfo(i-1)
            if (bonusInfo.Type == 2 and source:getName() == bonusInfo.Name) then
                exp = exp + math.floor(exp * (bonusInfo.Value/100))
                break
            end
        end
    end
    useStaminaPrey(self, source:getName())
   
    -- 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
  
   -- exp card
if self:getStorageValue(BONUS_EXP_STORAGE) - os.time() > 0 then
  exp = exp * BONUS_EXP_MULT
end
    -- exp card
  
    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
local exhaust = {1} -- SSA exhaust
function Player:onMoveItem(item, count, fromPosition, toPosition)
--- LIONS ROCK START
if self:getStorageValue(lionrock.storages.playerCanDoTasks) - os.time() < 0 then
        local p, i = lionrock.positions, lionrock.items
        local checkPr = false
        if item:getId() == lionrock.items.ruby and toPosition.x == p.ruby.x
                and toPosition.y == p.ruby.y  and toPosition.z == p.ruby.z then
            -- Ruby
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the ruby on the small socket. A red flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.ruby ~= true then
                lionrock.taskactive.ruby = true
            end
          
            local tile = Tile(p.ruby)
            if tile:getItemCountById(i.redflame) < 1 then
                Game.createItem(i.redflame, 1, p.ruby)
            end
        end
      
        if item:getId() == lionrock.items.sapphire and toPosition.x == p.sapphire.x
                and toPosition.y == p.sapphire.y  and toPosition.z == p.sapphire.z then
            -- Sapphire
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the sapphire on the small socket. A blue flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.sapphire ~= true then
                lionrock.taskactive.sapphire = true
            end
          
            local tile = Tile(p.sapphire)
            if tile:getItemCountById(i.blueflame) < 1 then
                Game.createItem(i.blueflame, 1, p.sapphire)
            end
        end
      
        if item:getId() == lionrock.items.amethyst and toPosition.x == p.amethyst.x
                and toPosition.y == p.amethyst.y  and toPosition.z == p.amethyst.z then
            -- Amethyst
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the topaz on the small socket. A yellow flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.amethyst ~= true then
                lionrock.taskactive.amethyst = true
            end
          
            local tile = Tile(p.amethyst)
            if tile:getItemCountById(i.yellowflame) < 1 then
                Game.createItem(i.yellowflame, 1, p.amethyst)
            end
        end
      
        if item:getId() == lionrock.items.topaz and toPosition.x == p.topaz.x
                and toPosition.y == p.topaz.y  and toPosition.z == p.topaz.z then
            -- Topaz
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the amethyst on the small socket. A violet flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.topaz ~= true then
                lionrock.taskactive.topaz = true
            end
          
            local tile = Tile(p.topaz)
            if tile:getItemCountById(i.violetflame) < 1 then
                Game.createItem(i.violetflame, 1, p.topaz)
            end
        end
      
        if checkPr == true then
            -- Adding the Fountain which gives present
            if lionrock.taskactive.ruby == true and lionrock.taskactive.sapphire == true
                and lionrock.taskactive.amethyst == true and lionrock.taskactive.topaz == true then
              
                local fountain = Game.createItem(i.rewardfountain, 1, { x=33073, y=32300, z=9})
                fountain:setActionId(41357)
               local stone = Tile({ x=33073, y=32300, z=9}):getItemById(3608)
            if stone ~= nil then
            stone:remove()
            end
                self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Something happens at the centre of the room ...");
            end
          
            -- Removing Item
            item:remove(1)
        end
    end
  
    ---- LIONS ROCK END
  
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        self:sendCancelMessage('You cannot move object in Bomberman Event.')
        return false
    end
  
    if toPosition == bomber.leverPositions[1] or toPosition == bomber.leverPositions[2] then
        self:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM)
        return false
    end
  
  
    if toPosition.x == CONTAINER_POSITION and toPosition.y == CONST_SLOT_NECKLACE and item:getId() == 2197 then
        local pid = self:getId()
        if exhaust[pid] then 
            self:sendCancelMessage(RETURNVALUE_YOUAREEXHAUSTED)   
            return false
        else
            exhaust[pid] = true
            addEvent(function() exhaust[pid] = false end, 2000, pid)
            return true
        end
    end
    if toPosition.x == CONTAINER_POSITION then
        local cid = toPosition.y - 64 -- container id
        local container = self:getContainerById(cid)     
        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 or itemId == 26052 then
            self:sendCancelMessage('Sorry, not possible.')
            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('Sorry, not possible.')
                return false
            end
        end
    end
    -- se o de cima não funfar, testar esse debaixo
    local tile = Tile(toPosition)
    if tile and tile:getItemCount() > 26 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
  
    end
  
    -- MOVER PRO TP
    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
  
    -- MOVER PARCEL 
    if item:getWeight() > 90000 and item:getId() == 2595 then
        self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.')
        return false
    end
    --local tile = Tile(toPosition)
    if tile and tile:getItemById(21584) then
        self:sendCancelMessage('Sorry, not possible.')
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
      
    -- Do not let the player move the boss corpse.
    if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end

New gdb crash
_CZO0H8WSe67pDpgQTFpYg.png

g9s037
 
Last edited by a moderator:
Do you have any edits on your sources? I fear that we can't help you.
The error is called when you are asking for his description, but the lua script doesn't really involve anything to it.

Bssh, don't add another error the the same thread.
 
Remove this:
Code:
-- MARRY
    if LOOK_MARRIAGE_DESCR and creature:isCreature() then
if creature:isPlayer() then
description = description .. self:getMarriageDescription(creature)
end
end
 
Last edited:
Code:
-- Internal Use
STONE_SKIN_AMULET = 2197
ITEM_STORE_INBOX = 26052
GOLD_POUNCH = 26377

-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true
function Player:onBrowseField(position)
    return true
end
local function getHours(seconds)
    return math.floor((seconds/60)/60)
end

local function getMinutes(seconds)
    return math.floor(seconds/60)
end

local function getTime(seconds)
    local hours, minutes = getHours(seconds), getMinutes(seconds)
    if (minutes > 59) then
        minutes = minutes-hours*60
    end

    if (minutes < 10) then
        minutes = "0" ..minutes
    end

    return hours..":"..minutes.. "h"
end
function Player:onLook(thing, position, distance)
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        if isInArray({bomber.bombID, bomber.powerUps.flame, bomber.powerUps.bomb, bomber.powerUps.boots}, thing:getId()) then
            self:sendCancelMessage('You cannot look this object.')
            return false
        end
    end
 
    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

    local itemType = thing:getType()
        if (imbuementSlots[thing:getId()] and imbuementSlots[thing:getId()].slots > 0) then
            local imbuingSlots = "Imbuements: ("
            for i = 1, imbuementSlots[thing:getId()].slots do
                local specialAttr = thing:getSpecialAttribute(i)
                local time = 0
                if (thing:getSpecialAttribute(i+3)) then
                    time = getTime(thing:getSpecialAttribute(i+3))
                end
              
                if (specialAttr) then
                    if (i ~= imbuementSlots[thing:getId()].slots) then
                        imbuingSlots = imbuingSlots.. "" ..specialAttr.." - " ..time..", "
                    else
                        imbuingSlots = imbuingSlots.. "" ..specialAttr.." - " ..time..")."
                    end
                else
                    if (i ~= imbuementSlots[thing:getId()].slots) then
                        imbuingSlots = imbuingSlots.. "Empty Slot, "
                    else
                        imbuingSlots = imbuingSlots.. "Empty Slot)."
                    end
                end
            end
            description = string.gsub(description, "It weighs", imbuingSlots.. "\nIt weighs")
        end

    else
        description = description .. thing:getDescription(distance)
    end
 
    -- KD look
     if thing:isCreature() and thing:isPlayer() then
        description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
            description, math.max(0, thing:getStorageValue(167912)), math.max(0, thing:getStorageValue(167913)))
    end
 
    -- MARRY
    if LOOK_MARRIAGE_DESCR and thing:isCreature() then
if thing:isPlayer() then
description = description .. self:getMarriageDescription(thing)
end
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
 
 
    -- KD look
     if creature:isPlayer() and creature:isCreature() then
        description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
            description, math.max(0, creature:getStorageValue(167912)), math.max(0, creature:getStorageValue(167913)))
    end
 
    -- MARRY
    if LOOK_MARRIAGE_DESCR and creature:isCreature() then
if creature:isPlayer() then
description = description .. self:getMarriageDescription(creature)
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:onMoveCreature(creature, fromPosition, toPosition)
    for _, pos in ipairs(bomber.playerPositions) do
        if creature:getPosition() == pos then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            return false
        end
    end
    return true
end
function Player:onTurn(direction)
    return true
end
function Player:onTradeRequest(target, item)
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        self:sendCancelMessage('You cannot trade items in Bomberman Event.')
        return false
    end
    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: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
    -- exp card
    local BONUS_EXP_STORAGE = 61398
    local BONUS_EXP_MULT = 1.3
    -- exp card

local function useStaminaXp(player)
    local staminaMinutes = player:getExpBoostStamina()
    if staminaMinutes == 0 then
        return
    end

    local playerId = player:getId()
    local currentTime = os.time()
    local timePassed = currentTime - nextUseXpStamina[playerId]
    if timePassed <= 0 then
        return
    end

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


local function useStaminaPrey(player, name)
    for i = 1, 3 do
        if (player:isActiveByName(i-1, name)) then
            local staminaMinutes = player:getPreyStamina(i-1)/60
            if (staminaMinutes > 0) then
                local playerId = player:getId()+i
                local currentTime = os.time()
                if timePassed ~= nil then
                    timePassed = currentTime - nextUseStaminaPrey[playerId].Time
                else
                    timePassed = 1
                end
                if timePassed > 0 then
                    if timePassed > 60 then
                        if staminaMinutes > 2 then
                            staminaMinutes = staminaMinutes - 2
                        else
                            staminaMinutes = 0
                        end

                        nextUseStaminaPrey[playerId].Time = currentTime + 120
                    else
                        staminaMinutes = staminaMinutes - 1
                        nextUseStaminaPrey[playerId].Time = currentTime + 60
                    end
                end

                player:setPreyStamina(i-1, staminaMinutes*60)
                player:sendPreyTimeLeft(i-1, staminaMinutes*60)
            end
        end
    end
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())

local party = self:getParty()
    if (party) then
        if (party:isSharedExperienceActive() and
            party:isSharedExperienceEnabled()) then
            local tableVocs = {}
            local count = 0
            local totalCount = 0
            local leaderId = party:getLeader():getVocation():getId()
            if (leaderId) then
                tableVocs[leaderId] = 1
                count = count + 1
                totalCount = totalCount + 1
            end
            for i, v in pairs(party:getMembers()) do
                local vocId = v:getVocation():getId()
                if (tableVocs[vocId] == nil) then
                    tableVocs[vocId] = 1
                    count = count + 1
                end
                totalCount = totalCount + 1
            end

            if (totalCount <= 10 and
                count >= 4) then
                exp = exp * 2
            end
        end
    end
  
    for i = 1, 3 do
        if (self:isActive(i-1)) then
            local bonusInfo = self:getBonusInfo(i-1)
            if (bonusInfo.Type == 2 and source:getName() == bonusInfo.Name) then
                exp = exp + math.floor(exp * (bonusInfo.Value/100))
                break
            end
        end
    end
    useStaminaPrey(self, source:getName())
  
    -- 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
 
   -- exp card
if self:getStorageValue(BONUS_EXP_STORAGE) - os.time() > 0 then
  exp = exp * BONUS_EXP_MULT
end
    -- exp card
 
    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
local exhaust = {1} -- SSA exhaust
function Player:onMoveItem(item, count, fromPosition, toPosition)
--- LIONS ROCK START
if self:getStorageValue(lionrock.storages.playerCanDoTasks) - os.time() < 0 then
        local p, i = lionrock.positions, lionrock.items
        local checkPr = false
        if item:getId() == lionrock.items.ruby and toPosition.x == p.ruby.x
                and toPosition.y == p.ruby.y  and toPosition.z == p.ruby.z then
            -- Ruby
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the ruby on the small socket. A red flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.ruby ~= true then
                lionrock.taskactive.ruby = true
            end
         
            local tile = Tile(p.ruby)
            if tile:getItemCountById(i.redflame) < 1 then
                Game.createItem(i.redflame, 1, p.ruby)
            end
        end
     
        if item:getId() == lionrock.items.sapphire and toPosition.x == p.sapphire.x
                and toPosition.y == p.sapphire.y  and toPosition.z == p.sapphire.z then
            -- Sapphire
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the sapphire on the small socket. A blue flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.sapphire ~= true then
                lionrock.taskactive.sapphire = true
            end
         
            local tile = Tile(p.sapphire)
            if tile:getItemCountById(i.blueflame) < 1 then
                Game.createItem(i.blueflame, 1, p.sapphire)
            end
        end
     
        if item:getId() == lionrock.items.amethyst and toPosition.x == p.amethyst.x
                and toPosition.y == p.amethyst.y  and toPosition.z == p.amethyst.z then
            -- Amethyst
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the topaz on the small socket. A yellow flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.amethyst ~= true then
                lionrock.taskactive.amethyst = true
            end
         
            local tile = Tile(p.amethyst)
            if tile:getItemCountById(i.yellowflame) < 1 then
                Game.createItem(i.yellowflame, 1, p.amethyst)
            end
        end
     
        if item:getId() == lionrock.items.topaz and toPosition.x == p.topaz.x
                and toPosition.y == p.topaz.y  and toPosition.z == p.topaz.z then
            -- Topaz
            self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the amethyst on the small socket. A violet flame begins to burn.")
            checkPr = true
            if lionrock.taskactive.topaz ~= true then
                lionrock.taskactive.topaz = true
            end
         
            local tile = Tile(p.topaz)
            if tile:getItemCountById(i.violetflame) < 1 then
                Game.createItem(i.violetflame, 1, p.topaz)
            end
        end
     
        if checkPr == true then
            -- Adding the Fountain which gives present
            if lionrock.taskactive.ruby == true and lionrock.taskactive.sapphire == true
                and lionrock.taskactive.amethyst == true and lionrock.taskactive.topaz == true then
             
                local fountain = Game.createItem(i.rewardfountain, 1, { x=33073, y=32300, z=9})
                fountain:setActionId(41357)
               local stone = Tile({ x=33073, y=32300, z=9}):getItemById(3608)
            if stone ~= nil then
            stone:remove()
            end
                self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Something happens at the centre of the room ...");
            end
         
            -- Removing Item
            item:remove(1)
        end
    end
 
    ---- LIONS ROCK END
 
    if isInRange(self:getPosition(), bomber.from, bomber.to) then
        self:sendCancelMessage('You cannot move object in Bomberman Event.')
        return false
    end
 
    if toPosition == bomber.leverPositions[1] or toPosition == bomber.leverPositions[2] then
        self:sendCancelMessage(RETURNVALUE_NOTENOUGHROOM)
        return false
    end
 
 
    if toPosition.x == CONTAINER_POSITION and toPosition.y == CONST_SLOT_NECKLACE and item:getId() == 2197 then
        local pid = self:getId()
        if exhaust[pid] then
            self:sendCancelMessage(RETURNVALUE_YOUAREEXHAUSTED)  
            return false
        else
            exhaust[pid] = true
            addEvent(function() exhaust[pid] = false end, 2000, pid)
            return true
        end
    end
    if toPosition.x == CONTAINER_POSITION then
        local cid = toPosition.y - 64 -- container id
        local container = self:getContainerById(cid)    
        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 or itemId == 26052 then
            self:sendCancelMessage('Sorry, not possible.')
            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('Sorry, not possible.')
                return false
            end
        end
    end
    -- se o de cima não funfar, testar esse debaixo
    local tile = Tile(toPosition)
    if tile and tile:getItemCount() > 26 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
 
    end
 
    -- MOVER PRO TP
    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
 
    -- MOVER PARCEL
    if item:getWeight() > 90000 and item:getId() == 2595 then
        self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.')
        return false
    end
    --local tile = Tile(toPosition)
    if tile and tile:getItemById(21584) then
        self:sendCancelMessage('Sorry, not possible.')
        self:getPosition():sendMagicEffect(CONST_ME_POFF)
        return false
    end
     
    -- Do not let the player move the boss corpse.
    if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end

New gdb crash
_CZO0H8WSe67pDpgQTFpYg.png

g9s037
You have solved ?
 
Back
Top