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

TFS 1.X+ Erro drooploot player hasFlag

amoxicilina

Member
Joined
Jun 25, 2010
Messages
72
Reaction score
10
hello, alright guys. I'm leaving here because I really need the help of the community. I'm having an error with the "hasflag" droploot
don't drop loot. I'm using TFs 1.3, follow .lua that are giving error and image below.
if you need any more files, let me know.


erro drop loot.png
data/creaturescript/droploot.lua

Lua:
dofile('data/modules/scripts/blessings/blessings.lua')
function onDeath(player, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
    if player:hasFlag(PlayerFlag_NotGenerateLoot) then
        return true
    end
    Blessings.DebugPrint("onDeath DROPLOOT EVENT DropLoot")
    return Blessings.PlayerDeath(player, corpse, killer)
end

data/lib/core/player.lua

Lua:
function Player.allowMovement(self, allow)
    return self:setStorageValue(STORAGE.blockMovementStorage, allow and -1 or 1)
end

function Player.checkGnomeRank(self)
    local points = self:getStorageValue(Storage.BigfootBurden.Rank)
    local questProgress = self:getStorageValue(Storage.BigfootBurden.QuestLine)
    if points >= 30 and points < 120 then
        if questProgress <= 25 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 26)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
        end
    elseif points >= 120 and points < 480 then
        if questProgress <= 26 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 27)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
        end
    elseif points >= 480 and points < 1440 then
        if questProgress <= 27 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 28)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
        end
    elseif points >= 1440 then
        if questProgress <= 29 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 30)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
            self:addAchievement('Honorary Gnome')
        end
    end
    return true
end

function Player.addFamePoint(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current + 1)
    self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have received a fame point.")
end

function Player.getFamePoints(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    return math.max(0, points)
end

function Player.removeFamePoints(self, amount)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current - amount)
end

function Player.depositMoney(self, amount)
    if not self:removeMoney(amount) then
        return false
    end

    self:setBankBalance(self:getBankBalance() + amount)
    return true
end

local foodCondition = Condition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)

function Player.feed(self, food)
    local condition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)
    if condition then
        condition:setTicks(condition:getTicks() + (food * 1000))
    else
        local vocation = self:getVocation()
        if not vocation then
            return nil
        end

        foodCondition:setTicks(food * 1000)
        foodCondition:setParameter(CONDITION_PARAM_HEALTHGAIN, vocation:getHealthGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_HEALTHTICKS, vocation:getHealthGainTicks() * 1000)
        foodCondition:setParameter(CONDITION_PARAM_MANAGAIN, vocation:getManaGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_MANATICKS, vocation:getManaGainTicks() * 1000)

        self:addCondition(foodCondition)
    end
    return true
end

function Player.getBlessings(self)
    local blessings = 0
    for i = 1, 5 do
        if self:hasBlessing(i) then
            blessings = blessings + 1
        end
    end
    return blessings
end

function Player.getClosestFreePosition(self, position, extended)
    if self:getAccountType() >= ACCOUNT_TYPE_GOD then
        return position
    end
    return Creature.getClosestFreePosition(self, position, extended)
end

function Player.getCookiesDelivered(self)
    local storage, amount = {
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.SIMONTHEBEGGAR, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.MARKWIN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ARIELLA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HAIRYCLES, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.DJINN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.AVARTAR,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ORCKING, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.LORBAS, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.WYDA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HJAERN
    }, 0
    for i = 1, #storage do
        if self:getStorageValue(storage[i]) == 1 then
            amount = amount + 1
        end
    end
    return amount
end

function Player.getDepotItems(self, depotId)
    return self:getDepotChest(depotId, true):getItemHoldingCount()
end

function Player.hasAllowMovement(self)
    return self:getStorageValue(STORAGE.blockMovementStorage) ~= 1
end

function Player.hasRookgaardShield(self)
    -- Wooden Shield, Studded Shield, Brass Shield, Plate Shield, Copper Shield
    return self:getItemCount(2512) > 0
            or self:getItemCount(2526) > 0
            or self:getItemCount(2511) > 0
            or self:getItemCount(2510) > 0
            or self:getItemCount(2530) > 0
end

function Player.isDruid(self)
    return isInArray({2, 6}, self:getVocation():getId())
end

function Player.isKnight(self)
    return isInArray({4, 8}, self:getVocation():getId())
end

function Player.isPaladin(self)
    return isInArray({3, 7}, self:getVocation():getId())
end

function Player.isMage(self)
    return isInArray({1, 2, 5, 6}, self:getVocation():getId())
end

function Player.isSorcerer(self)
    return isInArray({1, 5}, self:getVocation():getId())
end

function Player.hasFlag(self, flag)
    return self:getGroup():hasFlag(flag)
end

function Player.isPremium(self)
    return self:getPremiumDays() > 0 or configManager.getBoolean(configKeys.FREE_PREMIUM)
end

function Player.isPromoted(self)
    local vocation = self:getVocation()
    local promotedVocation = vocation:getPromotion()
    promotedVocation = promotedVocation and promotedVocation:getId() or 0

    return promotedVocation == 0 and vocation:getId() ~= promotedVocation
end

function Player.isUsingOtClient(self)
    return self:getClient().os >= CLIENTOS_OTCLIENT_LINUX
end

function Player.sendCancelMessage(self, message)
    if type(message) == "number" then
        message = Game.getReturnMessage(message)
    end
    return self:sendTextMessage(MESSAGE_STATUS_SMALL, message)
end

function Player.sendExtendedOpcode(self, opcode, buffer)
    if not self:isUsingOtClient() then
        return false
    end

    local networkMessage = NetworkMessage()
     networkMessage:addByte(0x32)
     networkMessage:addByte(opcode)
     networkMessage:addString(buffer)
    networkMessage:sendToPlayer(self)
     networkMessage:delete()
    return true
end

function Player.transferMoneyTo(self, target, amount)
    local balance = self:getBankBalance()
    if amount > balance then
        return false
    end

    local targetPlayer = Player(target)
    if targetPlayer then
        targetPlayer:setBankBalance(targetPlayer:getBankBalance() + amount)
    else
        if not playerExists(target) then
            return false
        end
        db.query("UPDATE `players` SET `balance` = `balance` + '" .. amount .. "' WHERE `name` = " .. db.escapeString(target))
    end

    self:setBankBalance(self:getBankBalance() - amount)
    return true
end

function Player.withdrawMoney(self, amount)
    local balance = self:getBankBalance()
    if amount > balance or not self:addMoney(amount) then
        return false
    end

    self:setBankBalance(balance - amount)
    return true
end

APPLY_SKILL_MULTIPLIER = true
local addSkillTriesFunc = Player.addSkillTries
function Player.addSkillTries(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addSkillTriesFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

local addManaSpentFunc = Player.addManaSpent
function Player.addManaSpent(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addManaSpentFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

--jlcvp - impact analyser
function Player.sendHealingImpact(self, healAmmount)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(0) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(healAmmount) -- unsigned int
    msg:sendToPlayer(self)
end

function Player.sendDamageImpact(self, damage)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(1) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(damage) -- unsigned int
    msg:sendToPlayer(self)
end

-- Loot Analyser
function Player.sendLootStats(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCF) -- loot analyser bit
    msg:addItem(item, self) -- item userdata
    msg:addString(getItemName(item:getId()))
    msg:sendToPlayer(self)
end

-- Supply Analyser
function Player.sendWaste(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCE) -- waste bit
    msg:addItemId(item) -- itemId
    msg:sendToPlayer(self)
end
 
Solution
hello, alright guys. I'm leaving here because I really need the help of the community. I'm having an error with the "hasflag" droploot
don't drop loot. I'm using TFs 1.3, follow .lua that are giving error and image below.
if you need any more files, let me know.


View attachment 45019
data/creaturescript/droploot.lua

Lua:
dofile('data/modules/scripts/blessings/blessings.lua')
function onDeath(player, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
    if player:hasFlag(PlayerFlag_NotGenerateLoot) then
        return true
    end
    Blessings.DebugPrint("onDeath DROPLOOT EVENT DropLoot")
    return Blessings.PlayerDeath(player, corpse, killer)
end

data/lib/core/player.lua

Lua:
function...
hello, alright guys. I'm leaving here because I really need the help of the community. I'm having an error with the "hasflag" droploot
don't drop loot. I'm using TFs 1.3, follow .lua that are giving error and image below.
if you need any more files, let me know.


View attachment 45019
data/creaturescript/droploot.lua

Lua:
dofile('data/modules/scripts/blessings/blessings.lua')
function onDeath(player, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
    if player:hasFlag(PlayerFlag_NotGenerateLoot) then
        return true
    end
    Blessings.DebugPrint("onDeath DROPLOOT EVENT DropLoot")
    return Blessings.PlayerDeath(player, corpse, killer)
end

data/lib/core/player.lua

Lua:
function Player.allowMovement(self, allow)
    return self:setStorageValue(STORAGE.blockMovementStorage, allow and -1 or 1)
end

function Player.checkGnomeRank(self)
    local points = self:getStorageValue(Storage.BigfootBurden.Rank)
    local questProgress = self:getStorageValue(Storage.BigfootBurden.QuestLine)
    if points >= 30 and points < 120 then
        if questProgress <= 25 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 26)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
        end
    elseif points >= 120 and points < 480 then
        if questProgress <= 26 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 27)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
        end
    elseif points >= 480 and points < 1440 then
        if questProgress <= 27 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 28)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
        end
    elseif points >= 1440 then
        if questProgress <= 29 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 30)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
            self:addAchievement('Honorary Gnome')
        end
    end
    return true
end

function Player.addFamePoint(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current + 1)
    self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have received a fame point.")
end

function Player.getFamePoints(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    return math.max(0, points)
end

function Player.removeFamePoints(self, amount)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current - amount)
end

function Player.depositMoney(self, amount)
    if not self:removeMoney(amount) then
        return false
    end

    self:setBankBalance(self:getBankBalance() + amount)
    return true
end

local foodCondition = Condition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)

function Player.feed(self, food)
    local condition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)
    if condition then
        condition:setTicks(condition:getTicks() + (food * 1000))
    else
        local vocation = self:getVocation()
        if not vocation then
            return nil
        end

        foodCondition:setTicks(food * 1000)
        foodCondition:setParameter(CONDITION_PARAM_HEALTHGAIN, vocation:getHealthGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_HEALTHTICKS, vocation:getHealthGainTicks() * 1000)
        foodCondition:setParameter(CONDITION_PARAM_MANAGAIN, vocation:getManaGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_MANATICKS, vocation:getManaGainTicks() * 1000)

        self:addCondition(foodCondition)
    end
    return true
end

function Player.getBlessings(self)
    local blessings = 0
    for i = 1, 5 do
        if self:hasBlessing(i) then
            blessings = blessings + 1
        end
    end
    return blessings
end

function Player.getClosestFreePosition(self, position, extended)
    if self:getAccountType() >= ACCOUNT_TYPE_GOD then
        return position
    end
    return Creature.getClosestFreePosition(self, position, extended)
end

function Player.getCookiesDelivered(self)
    local storage, amount = {
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.SIMONTHEBEGGAR, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.MARKWIN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ARIELLA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HAIRYCLES, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.DJINN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.AVARTAR,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ORCKING, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.LORBAS, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.WYDA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HJAERN
    }, 0
    for i = 1, #storage do
        if self:getStorageValue(storage[i]) == 1 then
            amount = amount + 1
        end
    end
    return amount
end

function Player.getDepotItems(self, depotId)
    return self:getDepotChest(depotId, true):getItemHoldingCount()
end

function Player.hasAllowMovement(self)
    return self:getStorageValue(STORAGE.blockMovementStorage) ~= 1
end

function Player.hasRookgaardShield(self)
    -- Wooden Shield, Studded Shield, Brass Shield, Plate Shield, Copper Shield
    return self:getItemCount(2512) > 0
            or self:getItemCount(2526) > 0
            or self:getItemCount(2511) > 0
            or self:getItemCount(2510) > 0
            or self:getItemCount(2530) > 0
end

function Player.isDruid(self)
    return isInArray({2, 6}, self:getVocation():getId())
end

function Player.isKnight(self)
    return isInArray({4, 8}, self:getVocation():getId())
end

function Player.isPaladin(self)
    return isInArray({3, 7}, self:getVocation():getId())
end

function Player.isMage(self)
    return isInArray({1, 2, 5, 6}, self:getVocation():getId())
end

function Player.isSorcerer(self)
    return isInArray({1, 5}, self:getVocation():getId())
end

function Player.hasFlag(self, flag)
    return self:getGroup():hasFlag(flag)
end

function Player.isPremium(self)
    return self:getPremiumDays() > 0 or configManager.getBoolean(configKeys.FREE_PREMIUM)
end

function Player.isPromoted(self)
    local vocation = self:getVocation()
    local promotedVocation = vocation:getPromotion()
    promotedVocation = promotedVocation and promotedVocation:getId() or 0

    return promotedVocation == 0 and vocation:getId() ~= promotedVocation
end

function Player.isUsingOtClient(self)
    return self:getClient().os >= CLIENTOS_OTCLIENT_LINUX
end

function Player.sendCancelMessage(self, message)
    if type(message) == "number" then
        message = Game.getReturnMessage(message)
    end
    return self:sendTextMessage(MESSAGE_STATUS_SMALL, message)
end

function Player.sendExtendedOpcode(self, opcode, buffer)
    if not self:isUsingOtClient() then
        return false
    end

    local networkMessage = NetworkMessage()
     networkMessage:addByte(0x32)
     networkMessage:addByte(opcode)
     networkMessage:addString(buffer)
    networkMessage:sendToPlayer(self)
     networkMessage:delete()
    return true
end

function Player.transferMoneyTo(self, target, amount)
    local balance = self:getBankBalance()
    if amount > balance then
        return false
    end

    local targetPlayer = Player(target)
    if targetPlayer then
        targetPlayer:setBankBalance(targetPlayer:getBankBalance() + amount)
    else
        if not playerExists(target) then
            return false
        end
        db.query("UPDATE `players` SET `balance` = `balance` + '" .. amount .. "' WHERE `name` = " .. db.escapeString(target))
    end

    self:setBankBalance(self:getBankBalance() - amount)
    return true
end

function Player.withdrawMoney(self, amount)
    local balance = self:getBankBalance()
    if amount > balance or not self:addMoney(amount) then
        return false
    end

    self:setBankBalance(balance - amount)
    return true
end

APPLY_SKILL_MULTIPLIER = true
local addSkillTriesFunc = Player.addSkillTries
function Player.addSkillTries(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addSkillTriesFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

local addManaSpentFunc = Player.addManaSpent
function Player.addManaSpent(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addManaSpentFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

--jlcvp - impact analyser
function Player.sendHealingImpact(self, healAmmount)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(0) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(healAmmount) -- unsigned int
    msg:sendToPlayer(self)
end

function Player.sendDamageImpact(self, damage)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(1) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(damage) -- unsigned int
    msg:sendToPlayer(self)
end

-- Loot Analyser
function Player.sendLootStats(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCF) -- loot analyser bit
    msg:addItem(item, self) -- item userdata
    msg:addString(getItemName(item:getId()))
    msg:sendToPlayer(self)
end

-- Supply Analyser
function Player.sendWaste(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCE) -- waste bit
    msg:addItemId(item) -- itemId
    msg:sendToPlayer(self)
end
add in lib/core/player.lua
Lua:
-- lib/core/player.lua
function Player.hasFlag(self, flag)
    if not flag or type(flag) ~= 'number' then
        return false
    end

    return self:getGroup():getFlags() & flag ~= 0
end

-- broadcast.lua
if not player:hasFlag(PlayerFlag_CanBroadcast) then
    return true
end
 
Solution
add in lib/core/player.lua
Lua:
-- lib/core/player.lua
function Player.hasFlag(self, flag)
    if not flag or type(flag) ~= 'number' then
        return false
    end

    return self:getGroup():getFlags() & flag ~= 0
end

-- broadcast.lua
if not player:hasFlag(PlayerFlag_CanBroadcast) then
    return true
end

@roriscrave

yesterday when I was given the command to put it on the player.lua it worked perfectly today when I went to run TFS it gave this error and some more below those and I can't log in anymore and yesterday before restarting the computer I was logging in perfectly.

1588344450867.png

error when logging in

1588344655703.png
 
Last edited:
yesterday when I was given the command to put it on the player.lua it worked perfectly today when I went to run TFS it gave this error and some more below those and I can't log in anymore and yesterday before restarting the computer I was logging in perfectly.

View attachment 45030

error when logging in

View attachment 45031
you get error in your file player.lua, edited something more than I posted
 
you get error in your file player.lua, edited something more than I posted

@roriscrave
not just edited what sent me. see if I added it in the right place

where I added it on my player.lua:

Lua:
function Player.allowMovement(self, allow)
    return self:setStorageValue(STORAGE.blockMovementStorage, allow and -1 or 1)
end

function Player.checkGnomeRank(self)
    local points = self:getStorageValue(Storage.BigfootBurden.Rank)
    local questProgress = self:getStorageValue(Storage.BigfootBurden.QuestLine)
    if points >= 30 and points < 120 then
        if questProgress <= 25 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 26)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
        end
    elseif points >= 120 and points < 480 then
        if questProgress <= 26 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 27)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
        end
    elseif points >= 480 and points < 1440 then
        if questProgress <= 27 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 28)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
        end
    elseif points >= 1440 then
        if questProgress <= 29 then
            self:setStorageValue(Storage.BigfootBurden.QuestLine, 30)
            self:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            self:addAchievement('Gnome Little Helper')
            self:addAchievement('Gnome Friend')
            self:addAchievement('Gnomelike')
            self:addAchievement('Honorary Gnome')
        end
    end
    return true
end

function Player.addFamePoint(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current + 1)
    self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have received a fame point.")
end

function Player.getFamePoints(self)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    return math.max(0, points)
end

function Player.removeFamePoints(self, amount)
    local points = self:getStorageValue(SPIKE_FAME_POINTS)
    local current = math.max(0, points)
    self:setStorageValue(SPIKE_FAME_POINTS, current - amount)
end

function Player.depositMoney(self, amount)
    if not self:removeMoney(amount) then
        return false
    end

    self:setBankBalance(self:getBankBalance() + amount)
    return true
end

local foodCondition = Condition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)

function Player.feed(self, food)
    local condition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)
    if condition then
        condition:setTicks(condition:getTicks() + (food * 1000))
    else
        local vocation = self:getVocation()
        if not vocation then
            return nil
        end

        foodCondition:setTicks(food * 1000)
        foodCondition:setParameter(CONDITION_PARAM_HEALTHGAIN, vocation:getHealthGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_HEALTHTICKS, vocation:getHealthGainTicks() * 1000)
        foodCondition:setParameter(CONDITION_PARAM_MANAGAIN, vocation:getManaGainAmount())
        foodCondition:setParameter(CONDITION_PARAM_MANATICKS, vocation:getManaGainTicks() * 1000)

        self:addCondition(foodCondition)
    end
    return true
end

function Player.getBlessings(self)
    local blessings = 0
    for i = 1, 5 do
        if self:hasBlessing(i) then
            blessings = blessings + 1
        end
    end
    return blessings
end

function Player.getClosestFreePosition(self, position, extended)
    if self:getAccountType() >= ACCOUNT_TYPE_GOD then
        return position
    end
    return Creature.getClosestFreePosition(self, position, extended)
end

function Player.getCookiesDelivered(self)
    local storage, amount = {
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.SIMONTHEBEGGAR, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.MARKWIN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ARIELLA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HAIRYCLES, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.DJINN, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.AVARTAR,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.ORCKING, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.LORBAS, STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.WYDA,
        STORAGE.WHATAFOOLISHQUEST.COOKIEDELIVERY.HJAERN
    }, 0
    for i = 1, #storage do
        if self:getStorageValue(storage[i]) == 1 then
            amount = amount + 1
        end
    end
    return amount
end

function Player.getDepotItems(self, depotId)
    return self:getDepotChest(depotId, true):getItemHoldingCount()
end

function Player.hasAllowMovement(self)
    return self:getStorageValue(STORAGE.blockMovementStorage) ~= 1
end

function Player.hasRookgaardShield(self)
    -- Wooden Shield, Studded Shield, Brass Shield, Plate Shield, Copper Shield
    return self:getItemCount(2512) > 0
            or self:getItemCount(2526) > 0
            or self:getItemCount(2511) > 0
            or self:getItemCount(2510) > 0
            or self:getItemCount(2530) > 0
end

function Player.isDruid(self)
    return isInArray({2, 6}, self:getVocation():getId())
end

function Player.isKnight(self)
    return isInArray({4, 8}, self:getVocation():getId())
end

function Player.isPaladin(self)
    return isInArray({3, 7}, self:getVocation():getId())
end

function Player.isMage(self)
    return isInArray({1, 2, 5, 6}, self:getVocation():getId())
end

function Player.isSorcerer(self)
    return isInArray({1, 5}, self:getVocation():getId())
end

function Player.hasFlag(self, flag)
    return self:getGroup():hasFlag(flag)
end
[B]----------------------------------------------- triggered part -----------------------------------------------[/B]

-- lib/core/player.lua
function Player.hasFlag(self, flag)
    if not flag or type(flag) ~= 'number' then
        return false
    end

    return self:getGroup():getFlags() & flag ~= 0
end

-- broadcast.lua
if not player:hasFlag(PlayerFlag_CanBroadcast) then
    return true
end

[B]----------------------------------------------- end of triggered part -----------------------------------------------[/B]

function Player.isPremium(self)
    return self:getPremiumDays() > 0 or configManager.getBoolean(configKeys.FREE_PREMIUM)
end

function Player.isPromoted(self)
    local vocation = self:getVocation()
    local promotedVocation = vocation:getPromotion()
    promotedVocation = promotedVocation and promotedVocation:getId() or 0

    return promotedVocation == 0 and vocation:getId() ~= promotedVocation
end

function Player.isUsingOtClient(self)
    return self:getClient().os >= CLIENTOS_OTCLIENT_LINUX
end

function Player.sendCancelMessage(self, message)
    if type(message) == "number" then
        message = Game.getReturnMessage(message)
    end
    return self:sendTextMessage(MESSAGE_STATUS_SMALL, message)
end

function Player.sendExtendedOpcode(self, opcode, buffer)
    if not self:isUsingOtClient() then
        return false
    end

    local networkMessage = NetworkMessage()
     networkMessage:addByte(0x32)
     networkMessage:addByte(opcode)
     networkMessage:addString(buffer)
    networkMessage:sendToPlayer(self)
     networkMessage:delete()
    return true
end

function Player.transferMoneyTo(self, target, amount)
    local balance = self:getBankBalance()
    if amount > balance then
        return false
    end

    local targetPlayer = Player(target)
    if targetPlayer then
        targetPlayer:setBankBalance(targetPlayer:getBankBalance() + amount)
    else
        if not playerExists(target) then
            return false
        end
        db.query("UPDATE `players` SET `balance` = `balance` + '" .. amount .. "' WHERE `name` = " .. db.escapeString(target))
    end

    self:setBankBalance(self:getBankBalance() - amount)
    return true
end

function Player.withdrawMoney(self, amount)
    local balance = self:getBankBalance()
    if amount > balance or not self:addMoney(amount) then
        return false
    end

    self:setBankBalance(balance - amount)
    return true
end

APPLY_SKILL_MULTIPLIER = true
local addSkillTriesFunc = Player.addSkillTries
function Player.addSkillTries(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addSkillTriesFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

local addManaSpentFunc = Player.addManaSpent
function Player.addManaSpent(...)
    APPLY_SKILL_MULTIPLIER = false
    local ret = addManaSpentFunc(...)
    APPLY_SKILL_MULTIPLIER = true
    return ret
end

--jlcvp - impact analyser
function Player.sendHealingImpact(self, healAmmount)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(0) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(healAmmount) -- unsigned int
    msg:sendToPlayer(self)
end

function Player.sendDamageImpact(self, damage)
    local msg = NetworkMessage()
    msg:addByte(0xCC) -- DEC: 204
    msg:addByte(1) -- 0 = healing / 1 = damage (boolean)
    msg:addU32(damage) -- unsigned int
    msg:sendToPlayer(self)
end

-- Loot Analyser
function Player.sendLootStats(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCF) -- loot analyser bit
    msg:addItem(item, self) -- item userdata
    msg:addString(getItemName(item:getId()))
    msg:sendToPlayer(self)
end

-- Supply Analyser
function Player.sendWaste(self, item)
    local msg = NetworkMessage()
    msg:addByte(0xCE) -- waste bit
    msg:addItemId(item) -- itemId
    msg:sendToPlayer(self)
end
 
Last edited:
[QUOTE = "Sarah Wesker, publicação: 2606840, membro: 221709"]
O operador ' & ' não é compatível com lua5.1
Mudança:
[código = Lua]
return self: getGroup (): getFlags () & flag ~ = 0
[/código]

Para:
[código = Lua]
retornar bit.band (self: getGroup (): getFlags (), flag) ~ = 0
[/código]
[/ CITAR]

Sem título.png
 
Back
Top