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

Server crash bt log

_M4G0_

Well-Known Member
Joined
Feb 6, 2016
Messages
504
Solutions
16
Reaction score
98
someone can help with this log ?
tfs 1.2 10.99
Code:
#0  0x000077d1f2334f13 in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <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  0x0000000000797235 in Player::getDescription(int) const ()
No symbol table info available.
#2  0x000000000070a019 in LuaScriptInterface::luaCreatureGetDescription(lua_State*) ()
No symbol table info available.
#3  0x000077d1f30a3a88 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2
No symbol table info available.
#4  0x000077d1f30e6f60 in lua_pcall ()
   from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2
No symbol table info available.
#5  0x000000000069b13a in LuaScriptInterface::protectedCall(lua_State*, int, int) ()
No symbol table info available.
#6  0x000000000069c04d in LuaScriptInterface::callVoidFunction(int) ()
No symbol table info available.
#7  0x00000000005df24a in Events::eventPlayerOnLook(Player*, Position const&, Th---Type <return> to continue, or q <return> to quit---
ing*, unsigned char, int) ()
No symbol table info available.
#8  0x00000000005f3d4d in Game::playerLookAt(unsigned int, Position const&, unsigned char) ()
No symbol table info available.
#9  0x00000000007eee4c in void std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)>::operator()<unsigned int&, Position&, unsigned char&, void>(Game*, unsigned int&, Position&, unsigned char&) const ()
No symbol table info available.
#10 0x00000000007eb552 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 0x00000000007e6a32 in void std::_Bind<std::_Mem_fn<void (Game::*)(unsigned int, Position const&, unsigned char)> (Game*, unsigned int, Position, unsigned char)>::operator()<, void>() ()
No symbol table info available.
#12 0x00000000007dd16a 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 0x000000000082c542 in std::function<void ()>::operator()() const ()
---Type <return> to continue, or q <return> to quit---
No symbol table info available.
#14 0x000000000082c42c in Task::operator()() ()
No symbol table info available.
#15 0x000000000082bc38 in Dispatcher::threadMain() ()
No symbol table info available.
#16 0x0000000000786485 in void std::_Mem_fn<void (Dispatcher::*)()>::operator()<, void>(Dispatcher*) const ()
No symbol table info available.
#17 0x0000000000785ded in void std::_Bind_simple<std::_Mem_fn<void (Dispatcher::*)()> (Dispatcher*)>::_M_invoke<0ul>(std::_Index_tuple<0ul>) ()
No symbol table info available.
#18 0x0000000000785663 in std::_Bind_simple<std::_Mem_fn<void (Dispatcher::*)()> (Dispatcher*)>::operator()() ()
No symbol table info available.
#19 0x0000000000784f88 in std::thread::_Impl<std::_Bind_simple<std::_Mem_fn<void (Dispatcher::*)()> (Dispatcher*)> >::_M_run() ()
No symbol table info available.
#20 0x000077d1f2355970 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#21 0x000077d1f25b2064 in start_thread (arg=0x77d1f0b1a700)
    at pthread_create.c:309
        __res = <optimized out>
        pd = 0x77d1f0b1a700
---Type <return> to continue, or q <return> to quit---
(Dispatcher::*)()> (Dispatcher*)> >::_M_run() ()
No symbol table info available.
#20 0x000077d1f2355970 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#21 0x000077d1f25b2064 in start_thread (arg=0x77d1f0b1a700)
    at pthread_create.c:309
        __res = <optimized out>
        pd = 0x77d1f0b1a700
---Type <return> to continue, or q <return> to quit---
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {131743570044672,
                -8761436453146188643, 1, 131743619666016, 137486526278912,
                131743570044672, 7623185232863175837, 7623181576008508573},
              mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0},
            data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#22 0x000077d1f1ac562d in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
No locals.
(gdb)
 
Solution
remove this:
Code:
-- 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

or comment if you dont want to remove.
Then try to get the crash again.
Post your Player::getDescription function from player.cpp to begin with.
C++:
std::string Player::getDescription(int32_t lookDistance) const
{
    std::ostringstream s;

    if (lookDistance == -1) {
        s << "yourself.";

        if (group->access) {
            s << " You are " << group->name << '.';
        } else if (vocation->getId() != VOCATION_NONE) {
            s << " You are " << vocation->getVocDescription() << '.';
        } else {
            s << " You have no vocation.";
        }
    } else {
        s << name;
        if (!group->access) {
            s << " (Level " << level << ')';
        }
        s << '.';

        if (sex == PLAYERSEX_FEMALE) {
            s << " She";
        } else {
            s << " He";
        }

        if (group->access) {
            s << " is " << group->name << '.';
        } else if (vocation->getId() != VOCATION_NONE) {
            s << " is " << vocation->getVocDescription() << '.';
        } else {
            s << " has no vocation.";
        }
    }

    if (party) {
        if (lookDistance == -1) {
            s << " Your party has ";
        } else if (sex == PLAYERSEX_FEMALE) {
            s << " She is in a party with ";
        } else {
            s << " He is in a party with ";
        }

        size_t memberCount = party->getMemberCount() + 1;
        if (memberCount == 1) {
            s << "1 member and ";
        } else {
            s << memberCount << " members and ";
        }

        size_t invitationCount = party->getInvitationCount();
        if (invitationCount == 1) {
            s << "1 pending invitation.";
        } else {
            s << invitationCount << " pending invitations.";
        }
    }

    if (guild && guildRank) {
        if (lookDistance == -1) {
            s << " You are ";
        } else if (sex == PLAYERSEX_FEMALE) {
            s << " She is ";
        } else {
            s << " He is ";
        }

        s << guildRank->name << " of the " << guild->getName();
        if (!guildNick.empty()) {
            s << " (" << guildNick << ')';
        }

        size_t memberCount = guild->getMemberCount();
        if (memberCount == 1) {
            s << ", which has 1 member, " << guild->getMembersOnline().size() << " of them online.";
        } else {
            s << ", which has " << memberCount << " members, " << guild->getMembersOnline().size() << " of them online.";
        }
    }
    return s.str();
}
 
C++:
std::string Player::getDescription(int32_t lookDistance) const
{
    std::ostringstream s;

    if (lookDistance == -1) {
        s << "yourself.";

        if (group->access) {
            s << " You are " << group->name << '.';
        } else if (vocation->getId() != VOCATION_NONE) {
            s << " You are " << vocation->getVocDescription() << '.';
        } else {
            s << " You have no vocation.";
        }
    } else {
        s << name;
        if (!group->access) {
            s << " (Level " << level << ')';
        }
        s << '.';

        if (sex == PLAYERSEX_FEMALE) {
            s << " She";
        } else {
            s << " He";
        }

        if (group->access) {
            s << " is " << group->name << '.';
        } else if (vocation->getId() != VOCATION_NONE) {
            s << " is " << vocation->getVocDescription() << '.';
        } else {
            s << " has no vocation.";
        }
    }

    if (party) {
        if (lookDistance == -1) {
            s << " Your party has ";
        } else if (sex == PLAYERSEX_FEMALE) {
            s << " She is in a party with ";
        } else {
            s << " He is in a party with ";
        }

        size_t memberCount = party->getMemberCount() + 1;
        if (memberCount == 1) {
            s << "1 member and ";
        } else {
            s << memberCount << " members and ";
        }

        size_t invitationCount = party->getInvitationCount();
        if (invitationCount == 1) {
            s << "1 pending invitation.";
        } else {
            s << invitationCount << " pending invitations.";
        }
    }

    if (guild && guildRank) {
        if (lookDistance == -1) {
            s << " You are ";
        } else if (sex == PLAYERSEX_FEMALE) {
            s << " She is ";
        } else {
            s << " He is ";
        }

        s << guildRank->name << " of the " << guild->getName();
        if (!guildNick.empty()) {
            s << " (" << guildNick << ')';
        }

        size_t memberCount = guild->getMemberCount();
        if (memberCount == 1) {
            s << ", which has 1 member, " << guild->getMembersOnline().size() << " of them online.";
        } else {
            s << ", which has " << memberCount << " members, " << guild->getMembersOnline().size() << " of them online.";
        }
    }
    return s.str();
}
Alright, so it's just the original code then. Well:
1. Do you know what is causing the crash (as in, what is done by you that makes it crash? My guess is "look at" action on player, but please confirm).
2. Any lua scripts that handles onLook event? If so, post it/them here.
3. Can you compile in debug configuration and try to reproduce the error?
 
i dont know how it's be done, i know it done by a player
my player.lua
Lua:
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true

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

    -- 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)
    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(RETURNVALUE_NOTPOSSIBLE)
        return false
    end
    return true
end
--
function searchContainer(container, items)
    items = items or {}
    for i = container:getSize()-1, 0, -1 do
        local item = container:getItem(i)
        if item:getType():isContainer() then
            searchContainer(item, items)
        else
            items[#items+1] = item
        end
    end
    return items
end
function Player:onTradeAccept(target, item, targetItem)
    file = io.open('data/logs/trade.log',"a")
    file:write(""..os.date("%d/%m/%y %H:%M")..": "..self:getName().." traded: \n")
    if item:isContainer() then
        local pitems = searchContainer(item)
        for i = 1, #pitems do
            file:write(string.format(' %s (%s)(%s) \n',  pitems[i]:getName(), pitems[i]:getId(), pitems[i]:getCount() > 0 and pitems[i]:getCount()))
        end
    else
        file:write(string.format(' %s (%s)(%s),', item:getName(), item:getId(), item:getCount() > 0 and item:getCount()))
    end
    file:write(" with "..target:getName().." for: \n")
    if targetItem:isContainer() then
        local titems = searchContainer(targetItem)
        for i = 1, #titems do
            file:write(string.format(' %s (%s)(%s) \n', titems[i]:getName(), titems[i]:getId(), titems[i]:getCount() > 0 and titems[i]:getCount()))
        end
    else
        file:write(string.format(' %s (%s)(%s).', targetItem:getName(), targetItem:getId(), targetItem:getCount() > 0 and targetItem:getCount()))
    end
    file:write('\n----------------------------------------\n\n')
    file:close()
    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 vip/double
function Player:onGainExperience(source, exp, rawExp)
    if not source or source:isPlayer() then
        return exp
   end
    if self:getStorageValue(1234) == 1 then
         exp = exp * 3
    end

    if self:isVip() then
         exp = exp * 2.5
       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:isVip() then
            exp = exp * 1.5
        elseif staminaMinutes <= 840 then
            exp = exp * 0.5
        elseif staminaMinutes > 2400 and self:isPremium() then
            exp = exp * 1.3
        elseif staminaMinutes <= 840 and self:isPremium() then
            exp = exp * 0.3   
        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

local exhaust = { } -- SSA exhaust
function Player:onMoveItem(item, count, fromPosition, toPosition)
  if toPosition.x == CONTAINER_POSITION and toPosition.y == CONST_SLOT_BACKPACK then
        local pid = self:getId()
        if pid then  
             pid = true
            self:save()
            self:sendCancelMessage('Save')
            return true
        end
    end

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

        if toPosition.x == CONTAINER_POSITION and toCylinder and toCylinder:getId() == 26052 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
        self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)
        return false
    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(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
 
-- se o de cima não funfar, testar esse debaixo
    local tile = Tile(toPosition)
    if tile and tile:getItemCount() > 10 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(RETURNVALUE_NOTPOSSIBLE)
            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
     if tile and item:getId() == 1775 then
    self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
    return false
    end
     if tile and item:getId() == 2101 then
    self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
    return false
    end   
    --local tile = Tile(toPosition)
        if tile and tile:getItemById(21584) then
            self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
            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(RETURNVALUE_NOTPOSSIBLE)
        return false
    end
   
local amuletId = 2197
local storage = 1000
local delay = 0.5 -- seconds

    if item:getId() == amuletId then
        if toPosition.y == CONST_SLOT_NECKLACE then
            if os.time() > self:getStorageValue(storage) then
                self:setStorageValue(storage, os.time() + delay)
            else
                self:sendCancelMessage("Sorry, not possible.")
                return false
            end
        end
    end
    return true
end
 
remove this:
Code:
-- 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

or comment if you dont want to remove.
Then try to get the crash again.
 
Solution
remove this:
Code:
-- 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

or comment if you dont want to remove.
Then try to get the crash again.
ok
 
Back
Top