Ir para conteúdo
  • 0

RESETS ? Ajudinha


raynerjr

Pergunta

Preciso de uma ajuda!

Preciso que o seguinte script de reset abaixo adicione os seguintes comandos após o jogador usar os comando !reset;

 

1º Remova todo HP / MP;

2º Adicione HPMAX / MPMAX 185 HP - 35 MP;

3º Adicione em accounts da database 1 ponto em guild_points;

4º Adicione em players da database 1 ponto em reset;

 

Obs: tudo da database do myphpadmin!

 

Script:

local config = {
    backToLevel = 8,
    redskull = false, -- need to be without redskull to reset?
    battle = true, -- need to be without battle to reset?
    pz = false, -- need to be in protect zone to reset?
    stages = {
        {resets = 4, level = 350, premium = 330},
        {resets = 9, level = 355, premium = 340},
        {resets = 14, level = 360, premium = 355},
        {resets = 19, level = 365, premium = 360},
        {resets = 24, level = 380, premium = 370},
        {resets = 29, level = 390, premium = 380},
        {resets = 34, level = 410, premium = 400},
        {resets = 39, level = 430, premium = 420},
        {resets = 44, level = 450, premium = 440},
        {resets = 49, level = 480, premium = 470},
        {resets = 54, level = 510, premium = 500},
        {resets = 59, level = 550, premium = 540},
        {resets = 64, level = 590, premium = 580},
        {resets = 69, level = 630, premium = 620},
        {resets = 74, level = 680, premium = 670},
        {resets = 79, level = 730, premium = 720},
        {resets = 84, level = 780, premium = 770},
        {resets = 89, level = 860, premium = 840},
        {resets = 94, level = 930, premium = 910},
        {resets = 2^1024, level = 1010, premium = 990}
    }
}

function onSay(cid, words, param)
    local function getPlayerResets(cid)
        local resets = getPlayerStorageValue(cid, 500)
        return resets < 0 and 0 or resets
    end

    local function doPlayerAddResets(cid, count)
        setPlayerStorageValue(cid, 500, getPlayerResets(cid) + count)
    end

    if config.redskull and getCreatureSkullType(cid) == 4 then
        return doPlayerSendCancel(cid, "You need to be without red skull to reset.")
    elseif config.pz and not getTilePzInfo(getCreaturePosition(cid)) then
        return doPlayerSendCancel(cid, "You need to be in protection zone to reset.")
    elseif config.battle and getCreatureCondition(cid, CONDITION_INFIGHT) then
        return doPlayerSendCancel(cid, "You need to be without battle to reset.")
    end

    local resetLevel = 0
    for x, y in ipairs(config.stages) do
        if getPlayerResets(cid) <= y.resets then
            resetLevel = isPremium(cid) and y.premium or y.level
            break
        end
    end

    if getPlayerLevel(cid) < resetLevel then
        return doPlayerSendCancel(cid, "You need level " .. resetLevel .. " or more to reset.")
    end

    doPlayerAddResets(cid, 1)
    local healthMax, manaMax = getCreatureMaxHealth(cid), getCreatureMaxMana(cid)
    doPlayerAddLevel(cid, -(getPlayerLevel(cid) - config.backToLevel))
    setCreatureMaxHealth(cid, healthMax)
    setCreatureMaxMana(cid, manaMax)
    doSendMagicEffect(getCreaturePosition(cid), CONST_ME_FIREWORK_RED)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Now you have " .. getPlayerResets(cid) .. " " .. (getPlayerResets(cid) == 1 and "reset" or "resets") .. ".")
    return true
end

Podem me ajudar ?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

@@raynerjr, tenta assim:

 

local config = {
    backToLevel = 8,
	backToExp = 4200,
	maxHealth = 185,
	maxMana = 35,
    redskull = false, -- need to be without redskull to reset?
    battle = true, -- need to be without battle to reset?
    pz = false, -- need to be in protect zone to reset?
    stages = {
        {resets = 4, level = 350, premium = 330},
        {resets = 9, level = 355, premium = 340},
        {resets = 14, level = 360, premium = 355},
        {resets = 19, level = 365, premium = 360},
        {resets = 24, level = 380, premium = 370},
        {resets = 29, level = 390, premium = 380},
        {resets = 34, level = 410, premium = 400},
        {resets = 39, level = 430, premium = 420},
        {resets = 44, level = 450, premium = 440},
        {resets = 49, level = 480, premium = 470},
        {resets = 54, level = 510, premium = 500},
        {resets = 59, level = 550, premium = 540},
        {resets = 64, level = 590, premium = 580},
        {resets = 69, level = 630, premium = 620},
        {resets = 74, level = 680, premium = 670},
        {resets = 79, level = 730, premium = 720},
        {resets = 84, level = 780, premium = 770},
        {resets = 89, level = 860, premium = 840},
        {resets = 94, level = 930, premium = 910},
        {resets = 2^1024, level = 1010, premium = 990}
    }
}

function onSay(cid, words, param)
    local function getPlayerResets(cid)
        local resets = getPlayerStorageValue(cid, 500)
        return resets < 0 and 0 or resets
    end

    local function doPlayerAddResets(cid, count)
        setPlayerStorageValue(cid, 500, getPlayerResets(cid) + count)
    end

    if config.redskull and getCreatureSkullType(cid) == 4 then
        return doPlayerSendCancel(cid, "You need to be without red skull to reset.")
    elseif config.pz and not getTilePzInfo(getCreaturePosition(cid)) then
        return doPlayerSendCancel(cid, "You need to be in protection zone to reset.")
    elseif config.battle and getCreatureCondition(cid, CONDITION_INFIGHT) then
        return doPlayerSendCancel(cid, "You need to be without battle to reset.")
    end

    local resetLevel = 0
    for x, y in ipairs(config.stages) do
        if getPlayerResets(cid) <= y.resets then
            resetLevel = isPremium(cid) and y.premium or y.level
            break
        end
    end

    if getPlayerLevel(cid) < resetLevel then
        return doPlayerSendCancel(cid, "You need level " .. resetLevel .. " or more to reset.")
    end
	
	local level, experience, healthMax, manaMax = config.backToLevel, config.backToExp, config.maxHealth, config.maxMana
	doRemoveCreature(cid)
    doPlayerAddResets(cid, 1)
	db.query("UPDATE `players` SET `level` = "..level..", `experience` = "..experience..", `health` = "..healthMax..", `healthmax` = "..healthMax..", `mana` = "..manaMax..", `manamax` = "..manaMax..", `guild_points` = `guild_points` + 1, `reset` = `reset` + 1  WHERE `id` = "..getPlayerGUID(cid))
    doSendMagicEffect(getCreaturePosition(cid), CONST_ME_FIREWORK_RED)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Now you have " .. getPlayerResets(cid) .. " " .. (getPlayerResets(cid) == 1 and "reset" or "resets") .. ".")
    return true
end 

 

 

Fiz como você falou, nas tabelas guild_points e reset, se não estiver certo, passa o nome correto das tabelas.

Link para o comentário
Compartilhar em outros sites

  • 0

Olha ele da os seguintes erros!

 

6cc414e407fcb4e5532e916bd15ee38c01f81d4d

 

Olha consegui fazer tudo certinho aqui.

Mais nesse script aqui so não consigo fazer ele adicionar 1 ponto em accounts/guild_points da database;

 

Script:

-- CONFIGS --
prem = false -- Premium Account necessária para resetar? (true / false)
pz = true -- É preciso estar em Protection Zone para resetar? (true / false)
white = false -- Players com White Skull podem resetar? (true / false)
red = false -- Players com Red Skull podem resetar? (true / false)
black = false  -- Players com Black Skull podem resetar? (true / false)
battle = false -- Players com battle podem resetar? (true / false)
teleport = true -- Teleportar o player para o templo após o reset? (true / false)
look = true -- Aparecer resets no look? (true / false)


level = 350 -- Level necessário para resetar
nlevel = 8 -- Level que o player ficará após o reset
nhpx = 185 -- HPMax que o player ficará após o reset
nmpx = 35 -- MPMax que o player ficará após o reset
nhp = 185 -- HP que o player ficará após o reset
nmp = 35 -- MP que o player ficará após o reset
time = 3 -- Tempo para o player deslogar ao resetar (segundos)
limite = 100 -- Limite de resets (Caso não queira limite, coloque false)


system = "storage" -- Modo do sistema (database / storage)
storage = 39650 -- Storage dos resets
group = 5 -- ID do Group que tem permissão para adicionar resets (6 = god, 5 = cm, 4 = gm, 3 = senior tutor, 2 = tutor)
exhastor = 17138
-- CONFIGS --
------------------------------------------------------------------------------------------------------------------------------------
function getPlayerResets(tid)
        if system == "database" then
                local a = db.getResult("SELECT `resets` FROM `players` WHERE `id`= "..pid..";")
                b = a:getDataInt("resets", pid)
                return b
        elseif system == "storage" then
                return getPlayerStorageValue(tid, storage) < 0 and 0 or getPlayerStorageValue(tid, storage)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
end


function doPlayerAddResets(tid, count)
        if system == "database" then
                       db.query("UPDATE `accounts` SET `premdays` = '"..(getPlayerResets(tid)+(count == nil and 1 or count)).."' WHERE `id` = '"..pid.."';")
                       db.query("UPDATE `players` SET `resets` = '"..(getPlayerResets(tid)+(count == nil and 1 or count)).."' WHERE `id` = '"..pid.."';")
                       return 
        elseif system == "storage" then
                return setPlayerStorageValue(tid, storage, getPlayerResets(tid)+(count == nil and 1 or count))
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
end


function doPlayerReset(tid, count, mid)
        if teleport then
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
        local resets = getPlayerResets(tid)
        function setResetsInLook(tid)
                return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..(mid == nil and pid or mid).."';")
        end
        if system == "database" then
                doRemoveCreature(tid)
                doPlayerAddResets(tid, count == nil and 1 or count)
        elseif system == "storage" then
                doPlayerAddResets(tid, count == nil and 1 or count)
                doRemoveCreature(tid)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
                db.query("UPDATE `players` SET `level` = '"..nlevel.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `players` SET `healthmax` = '"..nhpx.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `players` SET `manamax` = '"..nmpx.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `players` SET `health` = '"..nhp.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `players` SET `mana` = '"..nmp.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
        if look then
                setResetsInLook(tid)
        end
end
------------------------------------------------------------------------------------------------------------------------------------
function onSay(cid, words, param)
        pid = getPlayerGUID(cid)


        if words == "!reset" or words == "!resetar" then
                if prem and not isPremium(cid) then
                        doPlayerSendCancel(cid, "Você precisa ser Premium Account para resetar.") return true
                elseif pz and not getTilePzInfo(getCreaturePosition(cid)) then
                        doPlayerSendCancel(cid, "Você precisa estar em Protection Zone para resetar.") return true
                elseif white and getCreatureSkullType(cid) == SKULL_WHITE then
                        doPlayerSendCancel(cid, "Você precisa estar sem White Skull para resetar.") return true
                elseif red and getCreatureSkullType(cid) == SKULL_RED then
                        doPlayerSendCancel(cid, "Você precisa estar sem Red Skull para resetar.") return true
                elseif black and getCreatureSkullType(cid) == SKULL_BLACK then
                        doPlayerSendCancel(cid, "Você precisa estar sem Black Skull para resetar.") return true
                elseif battle and hasCondition(cid, CONDITION_INFIGHT) then
                        doPlayerSendCancel(cid, "Você precisa estar sem battle para resetar.") return true
                elseif getPlayerLevel(cid) < level then
                        doPlayerSendCancel(cid, "Você precisa ter level "..level.." para resetar.") return true
                elseif limite and getPlayerResets(cid) == limite then
                        doPlayerSendCancel(cid, "Você já está no limite de resets ("..limite..").") return true
                elseif exhaustion.check(cid, exhastor) then
                        doPlayerSendCancel(cid, "Espere "..exhaustion.get(cid, exhastor).." segundos para usar o comando novamente.") return true
                end
               
                        addEvent(doPlayerReset, time*1000, cid)
                        doPlayerPopupFYI(cid, "Você resetou com sucesso. Você agora tem "..(getPlayerResets(cid)+1).." resets. Você será deslogad"..(getPlayerSex(cid) >= 1 and "o" or "a").." em "..time.." segundos.")
                        exhaustion.set(cid, exhastor, time)
        elseif words == "/addresets" then
                local t = string.explode(param, ",")
                if getPlayerGroupId(cid) < group then return false
                elseif not t then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique o nome do player e opcionalmente a quantidade de resets.") return true
                elseif not getPlayerByName(t[1]) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player "..t[1].." não encontrado.") return true
                elseif t[3] then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique apenas o nome do player e opcionalmente a quantidade de resets.") return true
                end
               
                        addEvent(doPlayerReset, time*1000, getPlayerByName(t[1]), t[2] == nil and "1" or t[2], getPlayerGUIDByName(t[1]))
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..(t[2] == nil and "1" or t[2]).." resets no player "..getCreatureName(getPlayerByName(t[1]))..". Agora el"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "e" or "a").." possui "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets.")
                        doPlayerPopupFYI(getPlayerByName(t[1]), ""..getCreatureName(cid).." adicionou "..(t[2] == nil and "1" or t[2]).." resets em seu character. Você agora tem "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets. Você será deslogad"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "o" or "a").." em "..time.." segundos.")
        end
return true
end
Obs: Esse acima é outro script!
Editado por raynerjr
Link para o comentário
Compartilhar em outros sites

  • 0

Obs: Esse acima é outro script!

Os erros do primeiro script, não são pela modificação que eu fiz, você não tem as funções que pega os resets e atribui eles.

 

Esse segundo sistema funciona?

 

Você quer que ao resetar ele adiciona 1 ponto na coluna guild_points da tabela players? Somente isso?

Link para o comentário
Compartilhar em outros sites

  • 0

O segundo funciona perfeitamente!

Modifiquei ele todinho já, so não consegui fazer ele adicionar em accounts/guild_points 1 ponto quando reseta!

Quero que adiciona na conta do jogador!

Pois preciso que ele ganha um ponto em guild_points mais em accounts, para usar no shop de guild entendeu ?

Editado por raynerjr
Link para o comentário
Compartilhar em outros sites

  • 0

O segundo funciona perfeitamente!

Modifiquei ele todinho já, so não consegui fazer ele adicionar em accounts/guild_points 1 ponto quando reseta!

Quero que adiciona na conta do jogador!

Pois preciso que ele ganha um ponto em guild_points mais em accounts, para usar no shop de guild entendeu ?

Basta alterar a função doPlayerReset, tente assim:

function doPlayerReset(tid, count, mid)
        if teleport then
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
        local resets = getPlayerResets(tid)
		local account = getPlayerAccount(tid)
        function setResetsInLook(tid)
                return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..(mid == nil and pid or mid).."';")
        end
        if system == "database" then
                doRemoveCreature(tid)
                doPlayerAddResets(tid, count == nil and 1 or count)
        elseif system == "storage" then
                doPlayerAddResets(tid, count == nil and 1 or count)
                doRemoveCreature(tid)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
                db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` = '"..nmpx.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `accounts` SET `guild_points` = (`guild_points` + 1) WHERE `name` = '"..getPlayerAccount(cid).."';")
        if look then
                setResetsInLook(tid)
        end
end
Link para o comentário
Compartilhar em outros sites

  • 0

Não deu certo ainda!

Não sei porque mais ele não aceita o comando de jogar 1 ponto para Accounts, e já em Players ele aceita.

Enfim vamos facilitar as coisas!

 

Adicionei um tag na database dos players com o seguinte nome rpontos;

Função: Quando o player reseta ele vai ganhar 1 ponto em resets e 1 ponto em rpontos cero ?

Agora para facilitar existi um talkaction que faça que o player compre items com o comando e que gaste seus rpontos da database?

 

exemplo: !resetpoint axe = Noble Axe

!resetpoint sword = Spike Sword

 

Mais que gaste seus rpontos !

Link para o comentário
Compartilhar em outros sites

  • 0

Não deu certo ainda!

Não sei porque mais ele não aceita o comando de jogar 1 ponto para Accounts, e já em Players ele aceita.

Atualizei a função, tenta usá-la.

Não tem o porque não aceitar, estamos criando uma query direto no banco.

Link para o comentário
Compartilhar em outros sites

  • 0

Fiz assim:

 

-- CONFIGS --
------------------------------------------------------------------------------------------------------------------------------------
function getPlayerResets(tid)
        if system == "database" then
                local a = db.getResult("SELECT `resets` FROM `players` WHERE `id`= "..pid..";")
                b = a:getDataInt("resets", pid)
                return b
        elseif system == "storage" then
                return getPlayerStorageValue(tid, storage) < 0 and 0 or getPlayerStorageValue(tid, storage)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
end


function doPlayerAddResets(tid, count)
        if system == "database" then
                return db.query("UPDATE `players` SET `resets` = '"..(getPlayerResets(tid)+(count == nil and 1 or count)).."' WHERE `id` = '"..pid.."';")
        elseif system == "storage" then
                return setPlayerStorageValue(tid, storage, getPlayerResets(tid)+(count == nil and 1 or count))
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
end


function doPlayerReset(tid, count, mid)
        if teleport then
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
        local resets = getPlayerResets(tid)
local account = getPlayerAccount(tid)
        function setResetsInLook(tid)
                return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..(mid == nil and pid or 


mid).."';")
        end
        if system == "database" then
                doRemoveCreature(tid)
                doPlayerAddResets(tid, count == nil and 1 or count)
        elseif system == "storage" then
                doPlayerAddResets(tid, count == nil and 1 or count)
                doRemoveCreature(tid)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
                db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` = 


'"..nmpx.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                db.query("UPDATE `accounts` SET `guild_points` = (`guild_points` + 1) WHERE `name` = '"..getPlayerAccount(cid).."';")
        if look then
                setResetsInLook(tid)
        end
------------------------------------------------------------------------------------------------------------------------------------

Agora da um erro que não deixa ele nem resetar ;

 

Erro:

817e37dd07fe787fe481ebceb5585fd50bf9feb5

 

Link para o comentário
Compartilhar em outros sites

  • 0

Opa kkkkk '

Estamos quase lá!

Ele funciona certinho, adiciona 1 ponto em resets

Mais não adiciona em accounts 1 ponto em guild_points

Quando o jogador desloga da o seguinte erro.

 

bf31b5744e7b64201a8a5ce3642cad9b58ab043a

Link para o comentário
Compartilhar em outros sites

  • 0

@@raynerjr vá em data/lib/050-function.lua e adiciona essas funções:

 

function getGuildPoints(cid)
	local res = db.getResult("SELECT `guild_points` FROM accounts WHERE name = '".. ..getPlayerAccount(cid).. .."';")
	if(res:getID() == -1) then
	   return false
	end
	local ret = res:getDataInt("guild_points")
	res:free()
	return tonumber(ret)
end

function setGuildPoints(cid, quant)
	return db.query("UPDATE `accounts` SET `guild_points` = '".. getGuildPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."';")
end

 

 

Agora atualiza sua função:

 

function doPlayerReset(tid, count, mid)
        if teleport then
                doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
        end
        local resets = getPlayerResets(tid)
		local account = getPlayerAccount(tid)
        function setResetsInLook(tid)
                return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..(mid == nil and pid or mid).."';")
        end
        if system == "database" then
                doRemoveCreature(tid)
                doPlayerAddResets(tid, count == nil and 1 or count)
        elseif system == "storage" then
                doPlayerAddResets(tid, count == nil and 1 or count)
                doRemoveCreature(tid)
        else
                return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
        end
                db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` = '"..nmpx.."' WHERE `id` = '"..(mid == nil and pid or mid).."';")
                setGuildPoints(tid, 1)
        if look then
                setResetsInLook(tid)
        end
end

 

Link para o comentário
Compartilhar em outros sites

  • 0

Tá vamos lá tentei e deu erro! Não manjo muito dessas coisas apenas o básico mesmo!
Ali em lib, preciso adicionar essa nova função!
Minha lib esta assim:

 

--- Correct functions by 5mok3 --
function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end
 
return true
end
function doSetItemActionId(lols, actionid)
return doItemSetAttribute(lols, "aid", actionid)
end 
function comparePos(pos1, pos2)
    return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end
function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end
 
if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
 
return true
end
 
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end
 
function doPlayerBuyItem(cid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
end
 
function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
end
 
function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end
 
if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end
 
return true
end
 
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, balance - amount)
return true
end
 
function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
if(not doPlayerRemoveMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
 
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
end
 
function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end
 
return "th"
end
 
function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end
 
function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end
 
function isNumber(str)
return tonumber(str) ~= nil
end
 
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits[i], addon)
end
 
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end
 
function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
end
 
function doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end
 
function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
end
 
function playerExists(name)
return getPlayerGUIDByName(name) ~= nil
end
 
function getTibiaTime()
local minutes, hours = getWorldTime(), 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end
 
return {hours = hours, minutes = minutes}
end
 
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end
 
f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end
 
function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
 
function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED)
setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
return doAddCondition(cid, condition)
end
 
function getPlayerGroupName(cid)
return getGroupInfo(getPlayerGroupId(cid)).name
end
 
function getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end
 
function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
end
 
function doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end
 
function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
end
 
function getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end
 
function getHouseName(houseId)
return getHouseInfo(houseId).name
end
 
function getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end
 
function getHouseRent(houseId)
return getHouseInfo(houseId).rent
end
 
function getHousePrice(houseId)
return getHouseInfo(houseId).price
end
 
function getHouseTown(houseId)
return getHouseInfo(houseId).town
end
 
function getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end
 
function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
end
 
function getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end
 
function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
end
 
function getItemName(uid)
return getItemDescriptions(uid).name
end
 
function getItemPluralName(uid)
return getItemDescriptions(uid).plural
end
 
function getItemArticle(uid)
return getItemDescriptions(uid).article
end
 
function getItemText(uid)
return getItemDescriptions(uid).text
end
 
function getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end
 
function getItemWriter(uid)
return getItemDescriptions(uid).writer
end
 
function getItemDate(uid)
return getItemDescriptions(uid).date
end
 
function getTilePzInfo(pos)
return getTileInfo(pos).protection
end
 
function getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
return 2
end
 
if(tmp.nopvp) then
return 1
end
 
return 0
end
 
function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
end
 
function doSummonCreature(name, pos, displayError)
local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
if(not cid) then
cid = doCreateNpc(name, pos, displayError)
end
 
return cid
end
 
function getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
table.insert(players, getCreatureName(cid))
end
 
return players
end
 
function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end
 
function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end
 
function isPlayerGhost(cid)
if(not isPlayer(cid)) then
return false
end
 
return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
end
 
function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
 
function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
end
 
function doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end
 
function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
end
 
function doPlayerAddLevel(cid, amount, round)
local experience, level = 0, getPlayerLevel(cid)
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end
 
return doPlayerAddExperience(cid, experience)
end
 
function doPlayerAddMagLevel(cid, amount)
for i = 1, amount do
doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
end
return true
end  
 
function doPlayerAddSkill(cid, skill, amount, round)
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end
 
return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / 
 
getConfigInfo('rateSkill'))
end
 
function getPartyLeader(cid)
local party = getPartyMembers(cid)
if(type(party) ~= 'table') then
return 0
end
 
return party[1]
end
 
function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
end
 
function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
 
function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
end
 
function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doPlayerSendTextMessage(pid, class, text)
end
 
print("> Broadcasted message: \"" .. text .. "\".")
return true
end
 
function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end
 
if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doCreatureSay(cid, text, class, ghost, pid)
end
 
print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
 
function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
return input
end
 
if(tmp == 'number') then
return input > 0
end
 
local str = string.lower(tostring(input))
return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
end
 
function doCopyItem(item, attributes)
local attributes = attributes or false
 
local ret = doCreateItemEx(item.itemid, item.type)
if(attributes) then
if(item.actionid > 0) then
doItemSetAttribute(ret, "aid", item.actionid)
end
end
 
if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end
 
return getThing(ret)
end
 
function doRemoveThing(uid)
if(isCreature(uid)) then
return doRemoveCreature(uid)
end
 
return doRemoveItem(uid)
end
 
function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, -min, -max)
end
 
function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
end
 
function doChangeTypeItem(uid, subtype)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local subtype = subtype or 1
return doTransformItem(thing.uid, thing.itemid, subtype)
end
 
function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end
 
return true
end
 
function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
end
 
function getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end
 
function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return {
name = getItemAttribute(uid, "name") or item.name,
plural = getItemAttribute(uid, "pluralname") or item.plural,
article = getItemAttribute(uid, "article") or item.article,
special = getItemAttribute(uid, "description") or "",
text = getItemAttribute(uid, "text") or "",
writer = getItemAttribute(uid, "writer") or "",
date = getItemAttribute(uid, "date") or 0
}
end
 
function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end
 
if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end
 
local weight = item.weight * count
--[[if(precision) then
return weight
end
 
local t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--
 
return weight
end
 
function getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
return getItemInfo(thing.itemid).weaponType
end
 
function getItemRWInfo(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item, flags = getItemInfo(thing.itemid), 0
if(item.readable) then
flags = 1
end
 
if(item.writable) then
flags = flags + 2
end
 
return flags
end
 
function getItemLevelDoor(itemid)
local item = getItemInfo(itemid)
return item and item.levelDoor or false
end
 
function isItemStackable(itemid)
local item = getItemInfo(itemid)
return item and item.stackable or false
end
 
function isItemRune(itemid)
local item = getItemInfo(itemid)
return item and item.clientCharges or false
end
 
function isItemDoor(itemid)
local item = getItemInfo(itemid)
return item and item.type == 5 or false
end
 
function isItemContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 2 or false
end
 
function isItemFluidContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 12 or false
end
 
function isItemMovable(itemid)
local item = getItemInfo(itemid)
return item and item.movable or false
end
 
function isCorpse(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return item and item.corpseType ~= 0 or false
end
 
function getContainerCapById(itemid)
local item = getItemInfo(itemid)
if(not item or item.group ~= 2) then
return false
end
 
return item.maxItems
end
 
function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
end
 
function getMonsterHealingSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.defenses or false
end
 
function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end
 
function getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end
function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers, showSummons)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and 
 
getCreatureMaster(creature.uid) == (creature.uid)))) then
table.insert(creaturesList, creature.uid)
end
end
end
end
 
local creature = getTopCreature(position)
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and getCreatureMaster(creature.uid) == 
 
(creature.uid)))) then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
    return creaturesList
end

 

 

 

tem como adicionar pra min?

Editado por raynerjr
Link para o comentário
Compartilhar em outros sites

  • 0

Tá vamos lá tentei e deu erro! Não manjo muito dessas coisas apenas o básico mesmo!

Ali em lib, preciso adicionar essa nova função!

Minha lib esta assim:

 

 

 

--- Correct functions by 5mok3 --
function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end
 
return true
end
function doSetItemActionId(lols, actionid)
return doItemSetAttribute(lols, "aid", actionid)
end 
function comparePos(pos1, pos2)
    return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end
function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end
 
if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
 
return true
end
 
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end
 
function doPlayerBuyItem(cid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
end
 
function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
end
 
function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end
 
if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end
 
return true
end
 
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, balance - amount)
return true
end
 
function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
if(not doPlayerRemoveMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
 
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
end
 
function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end
 
return "th"
end
 
function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end
 
function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end
 
function isNumber(str)
return tonumber(str) ~= nil
end
 
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits[i], addon)
end
 
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end
 
function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
end
 
function doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end
 
function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
end
 
function playerExists(name)
return getPlayerGUIDByName(name) ~= nil
end
 
function getTibiaTime()
local minutes, hours = getWorldTime(), 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end
 
return {hours = hours, minutes = minutes}
end
 
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end
 
f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end
 
function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
 
function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED)
setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
return doAddCondition(cid, condition)
end
 
function getPlayerGroupName(cid)
return getGroupInfo(getPlayerGroupId(cid)).name
end
 
function getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end
 
function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
end
 
function doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end
 
function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
end
 
function getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end
 
function getHouseName(houseId)
return getHouseInfo(houseId).name
end
 
function getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end
 
function getHouseRent(houseId)
return getHouseInfo(houseId).rent
end
 
function getHousePrice(houseId)
return getHouseInfo(houseId).price
end
 
function getHouseTown(houseId)
return getHouseInfo(houseId).town
end
 
function getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end
 
function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
end
 
function getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end
 
function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
end
 
function getItemName(uid)
return getItemDescriptions(uid).name
end
 
function getItemPluralName(uid)
return getItemDescriptions(uid).plural
end
 
function getItemArticle(uid)
return getItemDescriptions(uid).article
end
 
function getItemText(uid)
return getItemDescriptions(uid).text
end
 
function getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end
 
function getItemWriter(uid)
return getItemDescriptions(uid).writer
end
 
function getItemDate(uid)
return getItemDescriptions(uid).date
end
 
function getTilePzInfo(pos)
return getTileInfo(pos).protection
end
 
function getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
return 2
end
 
if(tmp.nopvp) then
return 1
end
 
return 0
end
 
function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
end
 
function doSummonCreature(name, pos, displayError)
local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
if(not cid) then
cid = doCreateNpc(name, pos, displayError)
end
 
return cid
end
 
function getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
table.insert(players, getCreatureName(cid))
end
 
return players
end
 
function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end
 
function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end
 
function isPlayerGhost(cid)
if(not isPlayer(cid)) then
return false
end
 
return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
end
 
function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
 
function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
end
 
function doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end
 
function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
end
 
function doPlayerAddLevel(cid, amount, round)
local experience, level = 0, getPlayerLevel(cid)
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end
 
return doPlayerAddExperience(cid, experience)
end
 
function doPlayerAddMagLevel(cid, amount)
for i = 1, amount do
doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
end
return true
end  
 
function doPlayerAddSkill(cid, skill, amount, round)
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end
 
return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / 
 
getConfigInfo('rateSkill'))
end
 
function getPartyLeader(cid)
local party = getPartyMembers(cid)
if(type(party) ~= 'table') then
return 0
end
 
return party[1]
end
 
function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
end
 
function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
 
function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
end
 
function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doPlayerSendTextMessage(pid, class, text)
end
 
print("> Broadcasted message: \"" .. text .. "\".")
return true
end
 
function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end
 
if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doCreatureSay(cid, text, class, ghost, pid)
end
 
print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
 
function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
return input
end
 
if(tmp == 'number') then
return input > 0
end
 
local str = string.lower(tostring(input))
return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
end
 
function doCopyItem(item, attributes)
local attributes = attributes or false
 
local ret = doCreateItemEx(item.itemid, item.type)
if(attributes) then
if(item.actionid > 0) then
doItemSetAttribute(ret, "aid", item.actionid)
end
end
 
if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end
 
return getThing(ret)
end
 
function doRemoveThing(uid)
if(isCreature(uid)) then
return doRemoveCreature(uid)
end
 
return doRemoveItem(uid)
end
 
function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, -min, -max)
end
 
function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
end
 
function doChangeTypeItem(uid, subtype)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local subtype = subtype or 1
return doTransformItem(thing.uid, thing.itemid, subtype)
end
 
function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end
 
return true
end
 
function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
end
 
function getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end
 
function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return {
name = getItemAttribute(uid, "name") or item.name,
plural = getItemAttribute(uid, "pluralname") or item.plural,
article = getItemAttribute(uid, "article") or item.article,
special = getItemAttribute(uid, "description") or "",
text = getItemAttribute(uid, "text") or "",
writer = getItemAttribute(uid, "writer") or "",
date = getItemAttribute(uid, "date") or 0
}
end
 
function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end
 
if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end
 
local weight = item.weight * count
--[[if(precision) then
return weight
end
 
local t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--
 
return weight
end
 
function getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
return getItemInfo(thing.itemid).weaponType
end
 
function getItemRWInfo(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item, flags = getItemInfo(thing.itemid), 0
if(item.readable) then
flags = 1
end
 
if(item.writable) then
flags = flags + 2
end
 
return flags
end
 
function getItemLevelDoor(itemid)
local item = getItemInfo(itemid)
return item and item.levelDoor or false
end
 
function isItemStackable(itemid)
local item = getItemInfo(itemid)
return item and item.stackable or false
end
 
function isItemRune(itemid)
local item = getItemInfo(itemid)
return item and item.clientCharges or false
end
 
function isItemDoor(itemid)
local item = getItemInfo(itemid)
return item and item.type == 5 or false
end
 
function isItemContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 2 or false
end
 
function isItemFluidContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 12 or false
end
 
function isItemMovable(itemid)
local item = getItemInfo(itemid)
return item and item.movable or false
end
 
function isCorpse(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return item and item.corpseType ~= 0 or false
end
 
function getContainerCapById(itemid)
local item = getItemInfo(itemid)
if(not item or item.group ~= 2) then
return false
end
 
return item.maxItems
end
 
function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
end
 
function getMonsterHealingSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.defenses or false
end
 
function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end
 
function getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end
function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers, showSummons)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and 
 
getCreatureMaster(creature.uid) == (creature.uid)))) then
table.insert(creaturesList, creature.uid)
end
end
end
end
 
local creature = getTopCreature(position)
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and getCreatureMaster(creature.uid) == 
 
(creature.uid)))) then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
    return creaturesList
end

 

 

tem como adicionar pra min?

 

Pronto:

 

 

--- Correct functions by 5mok3 --
function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end
 
return true
end
function doSetItemActionId(lols, actionid)
return doItemSetAttribute(lols, "aid", actionid)
end 
function comparePos(pos1, pos2)
    return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end
function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end
 
if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
 
return true
end
 
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end
 
function doPlayerBuyItem(cid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
end
 
function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
end
 
function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end
 
if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end
 
return true
end
 
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, balance - amount)
return true
end
 
function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
if(not doPlayerRemoveMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
 
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
end
 
function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end
 
return "th"
end
 
function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end
 
function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end
 
function isNumber(str)
return tonumber(str) ~= nil
end
 
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits[i], addon)
end
 
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end
 
function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
end
 
function doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end
 
function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
end
 
function playerExists(name)
return getPlayerGUIDByName(name) ~= nil
end
 
function getTibiaTime()
local minutes, hours = getWorldTime(), 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end
 
return {hours = hours, minutes = minutes}
end
 
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end
 
f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end
 
function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
 
function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED)
setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
return doAddCondition(cid, condition)
end
 
function getPlayerGroupName(cid)
return getGroupInfo(getPlayerGroupId(cid)).name
end
 
function getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end
 
function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
end
 
function doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end
 
function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
end
 
function getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end
 
function getHouseName(houseId)
return getHouseInfo(houseId).name
end
 
function getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end
 
function getHouseRent(houseId)
return getHouseInfo(houseId).rent
end
 
function getHousePrice(houseId)
return getHouseInfo(houseId).price
end
 
function getHouseTown(houseId)
return getHouseInfo(houseId).town
end
 
function getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end
 
function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
end
 
function getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end
 
function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
end
 
function getItemName(uid)
return getItemDescriptions(uid).name
end
 
function getItemPluralName(uid)
return getItemDescriptions(uid).plural
end
 
function getItemArticle(uid)
return getItemDescriptions(uid).article
end
 
function getItemText(uid)
return getItemDescriptions(uid).text
end
 
function getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end
 
function getItemWriter(uid)
return getItemDescriptions(uid).writer
end
 
function getItemDate(uid)
return getItemDescriptions(uid).date
end
 
function getTilePzInfo(pos)
return getTileInfo(pos).protection
end
 
function getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
return 2
end
 
if(tmp.nopvp) then
return 1
end
 
return 0
end
 
function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
end
 
function doSummonCreature(name, pos, displayError)
local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
if(not cid) then
cid = doCreateNpc(name, pos, displayError)
end
 
return cid
end
 
function getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
table.insert(players, getCreatureName(cid))
end
 
return players
end
 
function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end
 
function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end
 
function isPlayerGhost(cid)
if(not isPlayer(cid)) then
return false
end
 
return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
end
 
function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
 
function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
end
 
function doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end
 
function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
end
 
function doPlayerAddLevel(cid, amount, round)
local experience, level = 0, getPlayerLevel(cid)
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end
 
return doPlayerAddExperience(cid, experience)
end
 
function doPlayerAddMagLevel(cid, amount)
for i = 1, amount do
doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
end
return true
end  
 
function doPlayerAddSkill(cid, skill, amount, round)
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end
 
return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / 
 
getConfigInfo('rateSkill'))
end
 
function getPartyLeader(cid)
local party = getPartyMembers(cid)
if(type(party) ~= 'table') then
return 0
end
 
return party[1]
end
 
function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
end
 
function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
 
function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
end
 
function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doPlayerSendTextMessage(pid, class, text)
end
 
print("> Broadcasted message: \"" .. text .. "\".")
return true
end
 
function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end
 
if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end
 
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doCreatureSay(cid, text, class, ghost, pid)
end
 
print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
 
function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
return input
end
 
if(tmp == 'number') then
return input > 0
end
 
local str = string.lower(tostring(input))
return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
end
 
function doCopyItem(item, attributes)
local attributes = attributes or false
 
local ret = doCreateItemEx(item.itemid, item.type)
if(attributes) then
if(item.actionid > 0) then
doItemSetAttribute(ret, "aid", item.actionid)
end
end
 
if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end
 
return getThing(ret)
end
 
function doRemoveThing(uid)
if(isCreature(uid)) then
return doRemoveCreature(uid)
end
 
return doRemoveItem(uid)
end
 
function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, -min, -max)
end
 
function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
end
 
function doChangeTypeItem(uid, subtype)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local subtype = subtype or 1
return doTransformItem(thing.uid, thing.itemid, subtype)
end
 
function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end
 
return true
end
 
function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
end
 
function getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end
 
function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return {
name = getItemAttribute(uid, "name") or item.name,
plural = getItemAttribute(uid, "pluralname") or item.plural,
article = getItemAttribute(uid, "article") or item.article,
special = getItemAttribute(uid, "description") or "",
text = getItemAttribute(uid, "text") or "",
writer = getItemAttribute(uid, "writer") or "",
date = getItemAttribute(uid, "date") or 0
}
end
 
function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end
 
if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end
 
local weight = item.weight * count
--[[if(precision) then
return weight
end
 
local t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--
 
return weight
end
 
function getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
return getItemInfo(thing.itemid).weaponType
end
 
function getItemRWInfo(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item, flags = getItemInfo(thing.itemid), 0
if(item.readable) then
flags = 1
end
 
if(item.writable) then
flags = flags + 2
end
 
return flags
end
 
function getItemLevelDoor(itemid)
local item = getItemInfo(itemid)
return item and item.levelDoor or false
end
 
function isItemStackable(itemid)
local item = getItemInfo(itemid)
return item and item.stackable or false
end
 
function isItemRune(itemid)
local item = getItemInfo(itemid)
return item and item.clientCharges or false
end
 
function isItemDoor(itemid)
local item = getItemInfo(itemid)
return item and item.type == 5 or false
end
 
function isItemContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 2 or false
end
 
function isItemFluidContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 12 or false
end
 
function isItemMovable(itemid)
local item = getItemInfo(itemid)
return item and item.movable or false
end
 
function isCorpse(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
local item = getItemInfo(thing.itemid)
return item and item.corpseType ~= 0 or false
end
 
function getContainerCapById(itemid)
local item = getItemInfo(itemid)
if(not item or item.group ~= 2) then
return false
end
 
return item.maxItems
end
 
function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
end

function getGuildPoints(cid)
	local res = db.getResult("SELECT `guild_points` FROM accounts WHERE name = '".. getPlayerAccount(cid).. "';")
	if(res:getID() == -1) then
	   return false
	end
	local ret = res:getDataInt("guild_points")
	res:free()
	return tonumber(ret)
end

function setGuildPoints(cid, quant)
	return db.query("UPDATE `accounts` SET `guild_points` = '".. getGuildPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."';")
end
 
function getMonsterHealingSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.defenses or false
end
 
function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end
 
function getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end
function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers, showSummons)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and 
 
getCreatureMaster(creature.uid) == (creature.uid)))) then
table.insert(creaturesList, creature.uid)
end
end
end
end
 
local creature = getTopCreature(position)
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and getCreatureMaster(creature.uid) == 
 
(creature.uid)))) then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
    return creaturesList
end

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...