Ir para conteúdo
Entre para seguir isso  
LoManoMano

Recompensa por level

Recommended Posts

LoManoMano    7
LoManoMano

Nome do Script: Recompensa por level

Nome do Autor: Deragon (LoManoMano) (existe um parecido feito por Skyforever)

Servidor Testado e/ou Versão do Tibia: Nenhum (O moderador deverá testá-lo ou reprovar e ficar com menos conteúdo ainda) - Sem erros aparentes no debugger

Descrição e/ou Informações Adicionais: Aparentemente alguém já criou um parecido (Skyforever), e, apesar de eu nunca tê-lo visto antes de ter criado este, os créditos podem ficar pra quem quiser. (o código de Skyforever poderá ser visto abaixo)

 

Código feito por Deragon:

function onAdvance(cid, oldLevel, newLevel)

local conf ={
[50] = {idpremio = {2160}, qtpremio = {5}, storage = 15000, frase = "Prize for reaching level 50, enjoy."},
[100] = {idpremio = {2160}, qtpremio = {10}, storage = 15001, frase = "Prize for reaching level 100, enjoy."},
[150] = {idpremio = {2160}, qtpremio = {15}, storage = 15002, frase = "Prize for reaching level 150, enjoy."},
[200] = {idpremio = {2160}, qtpremio = {20}, storage = 15003, frase = "Prize for reaching level 200, enjoy."},
--[level] = {idpremio = {premio1, premio2}, qtpremio = {quantidade do premio1, quantidade do premio2}, storage = numero diferente dos anteriores, frase = "Frase ao alcançar o level"},
}
   if conf[newLevel] then
       if getPlayerStorageValue(cid, conf[d].storage) < 0 then
           for c = 1, #conf[d].idpremio do
               doPlayerAddItem(cid, conf[d].idpremio[c], conf[d].qtpremio[c])
            end
        setPlayerStorageValue(cid, conf[d].storage, 1)
        doPlayerSendTextMessage(cid, MESSAGE_COLOR_ORANGE, conf[d].frase)
        end
   end

end

 

Código feito por Skyforever:

 

function onAdvance(cid, oldLevel, newLevel)

 

local t = {

[50] = {itemid = 0, quant = 0 ,stor = 35322}, -- level, itemid,quant,storage!

[100]= {itemid = 0, quant = 0 ,stor = 35333},

[150] = {itemid = 0, quant = 0 ,stor = 35344}

}

 

if getPlayerStorageValue(cid, t[getPlayerLevel(cid)]) == -1 then

doPlayerAddItem(cid,t[getPlayerLevel(cid)].itemid,t[getPlayerLevel(cid)].quant)

doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Você recebeu "..t.quant.."" .. getItemNameById(t[getPlayerVocation(cid)].itemid) .. " Por chegar ao level "..getPlayerLevel(cid).."")

setPlayerStorageValue(cid,t[getPlayerLevel(cid)].stor,1)

return true

end

end

 

 

O registro da função ficará por conta do usuário.

Editado por LoManoMano

Compartilhar este post


Link para o post
Majesty    1755
Majesty

Obrigado por contribuir, Aprovado.

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

Interessante, porém tem um erro lógico,

A sintaxe correta desse callback é onAdvance(cid, skill, oldLevel, newLevel), ou seja, esse callback é chamado para todos os avanços de skill(level, ml, first, axe e etc), e creio que a intenção do script seria apenas premiar o avanço de level, logo necessitaria um if para skill

if skill == SKILL__LEVEL then
   --escopo
end

 

tem umas coisas erradas ai cara

substitui isso:

for d = 1, 1500 do
   if newLevel == conf[d] then

por isso:

if conf[newLevel] then

e usa uma storage apenas, para não gastar tanto espaço na database

Editado por dalvorsn

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

Interessante, porém tem um erro lógico,

A sintaxe correta desse callback é onAdvance(cid, skill, oldLevel, newLevel), ou seja, esse callback é chamado para todos os avanços de skill(level, ml, first, axe e etc), e creio que a intenção do script seria apenas premiar o avanço de level, logo necessitaria um if para skill

if skill == SKILL__LEVEL then
   --escopo
end

 

tem umas coisas erradas ai cara

substitui isso:

for d = 1, 1500 do
   if newLevel == conf[d] then

por isso:

if conf[newLevel] then

e usa uma storage apenas, para não gastar tanto espaço na database

Editado por dalvorsn

Compartilhar este post


Link para o post
Conde2    0
Conde2

@Majesty

 

O código não funciona, você deveria testa-lo antes de aprovar, vários erros observados, abaixo alguns:

 

 

Comparando tabela com número:

 

     if newLevel == conf[d] then

Editado por Conde2

Compartilhar este post


Link para o post
Conde2    0
Conde2

@Majesty

 

O código não funciona, você deveria testa-lo antes de aprovar, vários erros observados, abaixo alguns:

 

 

Comparando tabela com número:

 

     if newLevel == conf[d] then

Editado por Conde2

Compartilhar este post


Link para o post
mastercraft    1
mastercraft

Sem falar que se o player upar 2 leveis de uma vez e pular o level 50 por exemplo, ele não ganha o prêmio já que precisa estar exatamente no level 50 (o onAdvance não executa 2x em caso de upar mais de um level por vez), e não precisa fazer um loop com 1500 repetições...

Compartilhar este post


Link para o post
mastercraft    1
mastercraft

Sem falar que se o player upar 2 leveis de uma vez e pular o level 50 por exemplo, ele não ganha o prêmio já que precisa estar exatamente no level 50 (o onAdvance não executa 2x em caso de upar mais de um level por vez), e não precisa fazer um loop com 1500 repetições...

Compartilhar este post


Link para o post
LoManoMano    7
LoManoMano
Interessante, porém tem um erro lógico,

A sintaxe correta desse callback é onAdvance(cid, skill, oldLevel, newLevel), ou seja, esse callback é chamado para todos os avanços de skill(level, ml, first, axe e etc), e creio que a intenção do script seria apenas premiar o avanço de level, logo necessitaria um if para skill

if skill == SKILL__LEVEL then
   --escopo
end

 

tem umas coisas erradas ai cara

substitui isso:

for d = 1, 1500 do
   if newLevel == conf[d] then

por isso:

if conf[newLevel] then

e usa uma storage apenas, para não gastar tanto espaço na database

 

vish, nem me toquei da generalidade da funçao

e interessante essa forma de substituiçao dos loops, alterei ;)

 

 

@Majesty

 

O código não funciona, você deveria testa-lo antes de aprovar, vários erros observados, abaixo alguns:

 

 

Comparando tabela com número:

 

     if newLevel == conf[d] then

 

a culpa não é do majesty

o debugger nao apontou erros e eu postei, simples assim

se quiser reclamar, reclame comigo

 

Sem falar que se o player upar 2 leveis de uma vez e pular o level 50 por exemplo, ele não ganha o prêmio já que precisa estar exatamente no level 50 (o onAdvance não executa 2x em caso de upar mais de um level por vez), e não precisa fazer um loop com 1500 repetições...

 

acho que só da pra upar do 50 pro 52 de uma só vez em servidor com exp alta pra cacete né

e dessa forma, não vai adiantar colocar nada em leveis baixos, até porque level alto vai ser mais comum

Compartilhar este post


Link para o post
LoManoMano    7
LoManoMano
Interessante, porém tem um erro lógico,

A sintaxe correta desse callback é onAdvance(cid, skill, oldLevel, newLevel), ou seja, esse callback é chamado para todos os avanços de skill(level, ml, first, axe e etc), e creio que a intenção do script seria apenas premiar o avanço de level, logo necessitaria um if para skill

if skill == SKILL__LEVEL then
   --escopo
end

 

tem umas coisas erradas ai cara

substitui isso:

for d = 1, 1500 do
   if newLevel == conf[d] then

por isso:

if conf[newLevel] then

e usa uma storage apenas, para não gastar tanto espaço na database

 

vish, nem me toquei da generalidade da funçao

e interessante essa forma de substituiçao dos loops, alterei ;)

 

 

@Majesty

 

O código não funciona, você deveria testa-lo antes de aprovar, vários erros observados, abaixo alguns:

 

 

Comparando tabela com número:

 

     if newLevel == conf[d] then

 

a culpa não é do majesty

o debugger nao apontou erros e eu postei, simples assim

se quiser reclamar, reclame comigo

 

Sem falar que se o player upar 2 leveis de uma vez e pular o level 50 por exemplo, ele não ganha o prêmio já que precisa estar exatamente no level 50 (o onAdvance não executa 2x em caso de upar mais de um level por vez), e não precisa fazer um loop com 1500 repetições...

 

acho que só da pra upar do 50 pro 52 de uma só vez em servidor com exp alta pra cacete né

e dessa forma, não vai adiantar colocar nada em leveis baixos, até porque level alto vai ser mais comum

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

refiz o código para ti

function onAdvance(cid, skill, oldLevel, newLevel)
   --## conf ##
   local storage = 15000
   local phrase = "Prize for reaching level %d, enjoy."
   local awards = {
       [50] = { itemid = {2160}, amount = {5} },
       [100] = { itemid = {2160}, amount = {10} }
   }
   --## endconf ##

   if skill == SKILL__LEVEL then
       for lvl = oldLevel, newLevel do
           if awards[lvl] and getPlayerStorageValue(cid, storage) < lvl then
               for award = 1, #awards[lvl].itemid do
                   doPlayerAddItem(cid, awards[lvl].itemid[award], awards[lvl].amount[award])
               end
               doPlayerSendTextMessage(cid, MESSAGE_COLOR_ORANGE, string.format(phrase, lvl))
           end
       end
       setPlayerStorageValue(cid, storage, newLevel)
   end

   return true
end

Editado por dalvorsn

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

refiz o código para ti

function onAdvance(cid, skill, oldLevel, newLevel)
   --## conf ##
   local storage = 15000
   local phrase = "Prize for reaching level %d, enjoy."
   local awards = {
       [50] = { itemid = {2160}, amount = {5} },
       [100] = { itemid = {2160}, amount = {10} }
   }
   --## endconf ##

   if skill == SKILL__LEVEL then
       for lvl = oldLevel, newLevel do
           if awards[lvl] and getPlayerStorageValue(cid, storage) < lvl then
               for award = 1, #awards[lvl].itemid do
                   doPlayerAddItem(cid, awards[lvl].itemid[award], awards[lvl].amount[award])
               end
               doPlayerSendTextMessage(cid, MESSAGE_COLOR_ORANGE, string.format(phrase, lvl))
           end
       end
       setPlayerStorageValue(cid, storage, newLevel)
   end

   return true
end

Editado por dalvorsn

Compartilhar este post


Link para o post
rogeriok    0
rogeriok

E como seria esse Código se tivesse uma condição da Vocação do player?

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×