Ir para conteúdo
  • 0

Mensagem ao dropar loot


GuuhMaster

Pergunta

 

Olá, gostaria de um script que funcione desta maneira;

 

 

 

 

 

ao dropar X item de um monstro, ex: Demon, apareceria no default a seguinte mensagem.

 

 

 

 

 

LOOT SYSTEM: O item ..X.. foi dropado do bixo ..X..

 

 

 

 

 

Agradeço desde já.

 

 

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Creio eu que não exista um callback para isso em lua, e registrar uma creaturescript pra cada monstro é inviavel. Minha sugestão é que seja feito nas sources, diretamente na função void MonsterType::dropLoot(Container* corpse). Dai um meio facil de configurar seria criando um novo atributo dentro da tag do loot no xml do monstro identificando que esse item deve ter uma mensagem exclusiva.

 

Ou de maneira alternativa, tu pode fazer um onKill registrado no player, que verifica o corpses a procura do item, e caso encontre manda a mensagem.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal!
Consegui achar um script que eu queria, precisa de algumas modificações..

Citar

local config = {
    itemid = 7764,                         --ID do item.
    drop_message = "Voce dropou %s.",     --Mensagem.
    drop_effect = false                     --Efeito que aparecerá em cima da corpse (apenas para o dono da corpse). OPCIONAL! Se não quiser, coloque false.
}
 
function examine(cid, position, corpse_id)
    if not isPlayer(cid) then return true end
    local corpse = getTileItemById(position, corpse_id).uid
    
    if corpse <= 1 or not isContainer(corpse) then return true end
 
    for slot = 0, getContainerSize(corpse) - 1 do
        local item = getContainerItem(corpse, slot)
        if item.uid <= 1 then return true end
        
        if item.itemid == config.itemid then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.drop_message:format(getItemNameById(item.itemid)))

            if config.drop_effect then
                doSendMagicEffect(position, config.drop_effect, cid)
            end
        end
    end
end
 
function onKill(cid, target)
    if not isMonster(target) then return true end
    
    local corpse_id = getMonsterInfo(getCreatureName(target)).lookCorpse
 
addEvent(examine, 5, cid, getThingPos(target), corpse_id)
    return true
end

Eu gostaria que o script fizesse essa função..

BroadcastMessage;

MENSAGEM LOOT: O Jogador (FULANO) dropou um item (TAL) do bixo (Demon).

Script: @Zipter98

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

  • 1
local config = {    itemid = 7764,                         --ID do item.    drop_effect = false                    --Efeito que aparecerá em cima da corpse (apenas para o dono da corpse). OPCIONAL! Se não quiser, coloque false.} function examine(cid, position, corpse_id, name)    if not isPlayer(cid) then return true end    local corpse = getTileItemById(position, corpse_id).uid        if corpse <= 1 or not isContainer(corpse) then return true end     for slot = 0, getContainerSize(corpse) - 1 do        local item = getContainerItem(corpse, slot)        if item.uid <= 1 then return true end                if item.itemid == config.itemid then            broadcastMessage("MENSAGEM LOOT: O jogador "..getCreatureName(cid).." dropou um "..getItemNameById(item.itemid).." do bixo "..name..".")            if config.drop_effect then                doSendMagicEffect(position, config.drop_effect, cid)            end        end    endend function onKill(cid, target)    if not isMonster(target) then return true end    local monster_name = getCreatureName(target)        local corpse_id = getMonsterInfo(monster_name).lookCorpse     addEvent(examine, 5, cid, getThingPos(target), corpse_id, monster_name)    return trueend

 

Link para o comentário
Compartilhar em outros sites

  • 0

esta script só da pra adicionar um ID?, como adiciono mais IDS? uso (,) ? ou (;)

 

e no caso se eu quisesse por um Efeito no drop-efect.., além de eu colocar true, aonde escolher o efeito que quero? 

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

  • 0
4 hours ago, Magraozinho said:

esta script só da pra adicionar um ID?, como adiciono mais IDS? uso (,) ? ou (;)

 

e no caso se eu quisesse por um Efeito no drop-efect.., além de eu colocar true, aonde escolher o efeito que quero? 

Tu precisa transformar o id em uma tabela, e mudar a verificação de "item.itemid == config.itemid" para isInArray(config.items, item.itemid)

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, dalvorsn disse:

Tu precisa transformar o id em uma tabela, e mudar a verificação de "item.itemid == config.itemid" para isInArray(config.items, item.itemid)

vc pode transformar o script pra mim? 

 

Citar

local config = {

    itemid = 3940,                        --ID do item.

    drop_effect = true                    --Efeito que aparecerá em cima da corpse (apenas para o dono da corpse). OPCIONAL! Se não quiser, coloque false.

}

 

function examine(cid, position, corpse_id, name)

    if not isPlayer(cid) then return true end

    local corpse = getTileItemById(position, corpse_id).uid

    

    if corpse <= 1 or not isContainer(corpse) then return true end

 

    for slot = 0, getContainerSize(corpse) - 1 do

        local item = getContainerItem(corpse, slot)

        if item.uid <= 1 then return true end

        

        if item.itemid == config.itemid then

            doBroadcastMessage("[LOOT MENSAGEM]: O jogador ("..getCreatureName(cid)..") dropou um item exclusivo de um ("..name..").", 19)

            if config.drop_effect then

                doSendMagicEffect(position, config.drop_effect, cid)

            end

        end

    end

end

 

function onKill(cid, target)

    if not isMonster(target) then return true end

    local monster_name = getCreatureName(target)

    

    local corpse_id = getMonsterInfo(monster_name).lookCorpse

 

    addEvent(examine, 5, cid, getThingPos(target), corpse_id, monster_name)

    return true

end

 

 

esta é a script, esta com 1 id apenas.. porém eu quero qe seja com todos esses ids= 5926, 3940, 11119, 10518, 10521.             arruma pra mim pfv?

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

  • 0
7 hours ago, Magraozinho said:

vc pode transformar o script pra mim? 

 

 

 

esta é a script, esta com 1 id apenas.. porém eu quero qe seja com todos esses ids= 5926, 3940, 11119, 10518, 10521.             arruma pra mim pfv?

Exatamente como eu tinha dito:

local config = {    ids = {5926, 3940, 11119, 10518, 10521},                        --ID do item.    drop_effect = true                    --Efeito que aparecerá em cima da corpse (apenas para o dono da corpse). OPCIONAL! Se não quiser, coloque false.} function examine(cid, position, corpse_id, name)    if not isPlayer(cid) then return true end    local corpse = getTileItemById(position, corpse_id).uid        if corpse <= 1 or not isContainer(corpse) then return true end     for slot = 0, getContainerSize(corpse) - 1 do        local item = getContainerItem(corpse, slot)        if item.uid <= 1 then return true end                if isInArray(config.ids, item.itemid) then            doBroadcastMessage("[LOOT MENSAGEM]: O jogador ("..getCreatureName(cid)..") dropou um item exclusivo de um ("..name..").", 19)            if config.drop_effect then                doSendMagicEffect(position, config.drop_effect, cid)            end        end    endend function onKill(cid, target)    if not isMonster(target) then return true end    local monster_name = getCreatureName(target)        local corpse_id = getMonsterInfo(monster_name).lookCorpse     addEvent(examine, 5, cid, getThingPos(target), corpse_id, monster_name)    return trueend 

 

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...