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

Exp/Kill/Drop Tracker Module [OTCV8] [TFS 1.4.2]

This is my player.lua. I've did some prints and the item is not sent. No errors in console :/

Lua:
function Player.updateKillTracker(self, monster, corpse)
    local monsterType = monster:getType()
    if not monsterType then
        return false
    end

    local monsterOutfit = monsterType:getOutfit()

    local networkMessage = NetworkMessage()
    networkMessage:addByte(0xD1)
    networkMessage:addString(monster:getName())
    networkMessage:addU16(monsterOutfit.lookType or 19)
    networkMessage:addByte(monsterOutfit.lookHead)
    networkMessage:addByte(monsterOutfit.lookBody)
    networkMessage:addByte(monsterOutfit.lookLegs)
    networkMessage:addByte(monsterOutfit.lookFeet)
    networkMessage:addByte(monsterOutfit.lookAddons)
    networkMessage:addByte(corpse:getSize())

    print("Contents of corpse:")
    for i = corpse:getSize() - 1, 0, -1 do
        local item = corpse:getItem(i)
        networkMessage:addItem(item)
        print("Item " .. i .. ": " .. item:getName())
    end

    if self:getParty() then
        networkMessage:sendToPlayer(self:getParty():getLeader())
        local membersList = self:getParty():getMembers()
        for i = 1, #membersList do
            local player = membersList[i]
            if player then
                networkMessage:sendToPlayer(player)
            end
        end
        networkMessage:delete()
        return true
    end

    networkMessage:sendToPlayer(self)
    networkMessage:delete()
    return true
end
 
This is my player.lua. I've did some prints and the item is not sent. No errors in console :/

Lua:
function Player.updateKillTracker(self, monster, corpse)
    local monsterType = monster:getType()
    if not monsterType then
        return false
    end

    local monsterOutfit = monsterType:getOutfit()

    local networkMessage = NetworkMessage()
    networkMessage:addByte(0xD1)
    networkMessage:addString(monster:getName())
    networkMessage:addU16(monsterOutfit.lookType or 19)
    networkMessage:addByte(monsterOutfit.lookHead)
    networkMessage:addByte(monsterOutfit.lookBody)
    networkMessage:addByte(monsterOutfit.lookLegs)
    networkMessage:addByte(monsterOutfit.lookFeet)
    networkMessage:addByte(monsterOutfit.lookAddons)
    networkMessage:addByte(corpse:getSize())

    print("Contents of corpse:")
    for i = corpse:getSize() - 1, 0, -1 do
        local item = corpse:getItem(i)
        networkMessage:addItem(item)
        print("Item " .. i .. ": " .. item:getName())
    end

    if self:getParty() then
        networkMessage:sendToPlayer(self:getParty():getLeader())
        local membersList = self:getParty():getMembers()
        for i = 1, #membersList do
            local player = membersList[i]
            if player then
                networkMessage:sendToPlayer(player)
            end
        end
        networkMessage:delete()
        return true
    end

    networkMessage:sendToPlayer(self)
    networkMessage:delete()
    return true
end
Corpze size is probably equal to 0, so it wont add any items. Make sure the update player tracker is called after all items is added and not prior to.
 
Corpze size is probably equal to 0, so it wont add any items. Make sure the update player tracker is called after all items is added and not prior to.
Mine is all working, except the drop, it doesn't count the items collected, see my function as it is


Lua:
function Player.updateKillTracker(self, monster, corpse)
 local monsterType = monster:getType()
    if not monsterType then
        return false
    end

    local monsterOutfit = monsterType:getOutfit()

    local networkMessage = NetworkMessage()
    networkMessage:addByte(0xD1)
    networkMessage:addString(monster:getName())
    networkMessage:addU16(monsterOutfit.lookType or 19)
    networkMessage:addByte(monsterOutfit.lookHead)
    networkMessage:addByte(monsterOutfit.lookBody)
    networkMessage:addByte(monsterOutfit.lookLegs)
    networkMessage:addByte(monsterOutfit.lookFeet)
    networkMessage:addByte(monsterOutfit.lookAddons)
    networkMessage:addByte(corpse:getSize())

    for i = corpse:getSize() - 1, 0, -1 do
        local item = corpse:getItem(i)
        networkMessage:addItem(item)
        networkMessage:addString(item:getName())
    end

    if self:getParty() then
        networkMessage:sendToPlayer(self:getParty():getLeader())
        local membersList = self:getParty():getMembers()
        for i = 1, #membersList do
            local player = membersList[i]
            if player then
                networkMessage:sendToPlayer(player)
            end
        end
        networkMessage:delete()
        return true 
    end

    networkMessage:sendToPlayer(self)
    networkMessage:delete()
    return true
end

1715557348368.png
 
Last edited:
Mine is all working, except the drop, it doesn't count the items collected, see my function as it is


Lua:
function Player.updateKillTracker(self, monster, corpse)
 local monsterType = monster:getType()
    if not monsterType then
        return false
    end

    local monsterOutfit = monsterType:getOutfit()

    local networkMessage = NetworkMessage()
    networkMessage:addByte(0xD1)
    networkMessage:addString(monster:getName())
    networkMessage:addU16(monsterOutfit.lookType or 19)
    networkMessage:addByte(monsterOutfit.lookHead)
    networkMessage:addByte(monsterOutfit.lookBody)
    networkMessage:addByte(monsterOutfit.lookLegs)
    networkMessage:addByte(monsterOutfit.lookFeet)
    networkMessage:addByte(monsterOutfit.lookAddons)
    networkMessage:addByte(corpse:getSize())

    for i = corpse:getSize() - 1, 0, -1 do
        local item = corpse:getItem(i)
        networkMessage:addItem(item)
        networkMessage:addString(item:getName())
    end

    if self:getParty() then
        networkMessage:sendToPlayer(self:getParty():getLeader())
        local membersList = self:getParty():getMembers()
        for i = 1, #membersList do
            local player = membersList[i]
            if player then
                networkMessage:sendToPlayer(player)
            end
        end
        networkMessage:delete()
        return true
    end

    networkMessage:sendToPlayer(self)
    networkMessage:delete()
    return true
end

View attachment 84609

You have to investigate the corpse size. If its 0 you wont get any loot drops.
This can be due to player:updateKillTracker is called before any loot is added to the corpse. Try add the method in the onDrop that are actually setting the loot.(Scripts/eventcallback/monster/default_monsterOnDrop…)
 
Exactly as @Klank said, you have to call function updateKillTracker after the loot is added, otherwise you will get corpse size equal 0. Everything works perfectly. Great module.
 
Back
Top