Ir para conteúdo
  • Cadastre-se

(Resolvido)[Pedido] Evolução


Ir para solução Resolvido por Cat,

Posts Recomendados

O comedinhasss disse que ia tentar fazer, se mais alguém quiser ajudar =s estou a uns 2 anos tentando fazer isso...

 

Servidor 8.6

 

Situação do script:

- player loga level 8 sem nenhum item;

- player abre um baú e recebe os determinados itens;

- um dos itens é um amuleto, que vai diretamente para o slot (nao pode cair na backpack e não pode ser retirado do slot necklace)

- ao upar level x esse amuleto que não pode ser removido é trocado por outro amuleto que também não pode ser removido e assim por diante.

 

São ao todo 44 amuletos.

lembrando: nenhum pode ser movido do slot pra backpack ou pro mapa, ficará no slot até o player upar e trocar de amuleto.

 

- os amuletos são colares normais, eles dão bonus ao player.

Link para o post
Compartilhar em outros sites

Estou ajudando o script por skype, mas caso alguém queira ajudar aqui...

Bruno de Carvalho Câmara / Administrador TibiaKing

[email protected]


 

btn_donateCC_LG.gif

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

Link para o post
Compartilhar em outros sites

só fazer um script de movements de-equip que quando o player tirar do lugar, remova o amuleto e crie outro no lugar. Quando cria e não tem nada ele vai direto pro slot se n me engano

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

bom, através do item edito eu coloquei pro item não poder ser movido do slot, e com o script do comedinhasss ele inicia com o primeiro colar

function onLogin(cid)
        local sorcItems = {
                        8820, -- mage hat
                        8819, -- magician's robe
                        2190, -- wand of vortex
                        1988, -- backpack
                        2175 -- spellbook
                }
        local druidItems = {
                        8820, -- mage hat
                        8819, -- magician's robe
                        2182, -- snakebite rod
                        1988, -- backpack
                        2175 -- spellbook
                }
        local pallyItems = {
                        8872, -- belted cape
                        2457, -- steel helmet
                        2525, -- dwarven shield
                        1988, -- backpack
                        2456 -- bow
                }
        local kinaItems = {
                        2457, -- steel helmet
                        2463, -- plate armor
                        2525, -- dwarven shield
                        2428, -- orcish axe
                        1988, -- backpack
                        2417, -- battle hammer
                        3963 -- templar scytheblade
                }
       
        if getPlayerStorageValue(cid, 11551) == -1 then
                if getPlayerVocation(cid) == 1 then
                        -- Sorcerer
                        for i = 1, #sorcItems, 1 do
                                doPlayerAddItem(cid, sorcItems[i], 1, FALSE)
                        end
               
                elseif getPlayerVocation(cid) == 2 then
                        -- Druid
                        for i = 1, #druidItems, 1 do
                                doPlayerAddItem(cid, druidItems[i], 1, FALSE)
                        end
               
                elseif getPlayerVocation(cid) == 3 then
                        -- Paladin
                        for i = 1, #pallyItems, 1 do
                                doPlayerAddItem(cid, pallyItems[i], 1, FALSE)
                        end
                        -- 20 arrows
                        doPlayerAddItem(cid, 2544, 20, FALSE)
                        -- 3 spears
                        doPlayerAddItem(cid, 2389, 3, FALSE)
               
                elseif getPlayerVocation(cid) == 4 then
                        -- Knight
                        for i = 1, #kinaItems, 1 do
                                doPlayerAddItem(cid, kinaItems[i], 1, FALSE)
                        end
                end
               
                -- Common for all
                doPlayerAddItem(cid, 2152, 100, FALSE) -- Platinum Coin
                doPlayerAddItem(cid, 7887, 1, FALSE, 2) -- Level 1
                doPlayerAddItem(cid, 2643, 1, FALSE) -- leather boots
                doPlayerAddItem(cid, 2647, 1, FALSE) -- plate legs
                setPlayerStorageValue(cid, 11551, 0)
        end
        return true
end
Link para o post
Compartilhar em outros sites

não precisava ter usado item editor, a um tempo atrás um cara me pediu um script de Magic Plate Armor que só podia ser equipada se tivesse determinado storage, é só fazer a mesma coisa só que em vez de onEquip será onDe-Equip. Dessa forma você só seria capaz de retirar o amuleto caso tivesse determinado storage, e toda tentativa de fazer isso resultaria num pop-up com uma mensagem falando que não seria possível remover. Não sei se essa maneira é válida mas vale a pena testar porque daí era só colocar um creaturescript onAdvance pra remover o necklace anterior e adicionar o novo que o sistema tava feito. Eu vou tentar fazer isso no meu tempo livre e vou postando aqui o resultado, ok?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

usando o item editor fica melhor que fazer gambiarra no movements que pode dar problemas depois, e para trocar o amulet ao atingir x level pode fazer um creaturescript usando function onAdvance(cid, skill, oldlevel, newlevel) que remove x item do slot e adiciona um novo item coisa fácil.

 

 

mais ou menos assim:

 

 

function onAdvance(cid, skill, oldlevel, newlevel)

          
            if getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == 2173 and skill == SKILL__LEVEL and newlevel >= 50 then
                            doPlayerRemoveItem(cid, ITEM ID, 1)
                            doPlayerAddItem(cid, 7887, 1, FALSE, 2)
                            doPlayerSendTextMessage(cid, 22, "Voce recebou um novo amuleto por atingir o nivel 50")
                          end
            return TRUE
end
Editado por AnaPaula (veja o histórico de edições)

 Whatsapp: +55 (48) 98815-0709 Discord: Qwizer#5713

 

Global 100% 7.40 com Website

TFS 1.2 10.97-11.00 + GlobalFull OtherWorld ...

 

Link para o post
Compartilhar em outros sites

não é gambiarra em movements, é um truque que um monte de gente faz em outros scripts só que nunca pensaram em fazer em movements '-' só uma coisa: nesse creaturescript você não remove o amuleto anterior? qual a diferença entre addItem e addItemEx e porque você utilizou ambos?

edit: testa isso

function onDeEquip(cid, item, position, fromPosition)
if getPlayerStorageValue(cid, storage) <= 0 then
doPlayerPopupFYI(cid, "You can't Unequip this item.")
else
doPlayerPopupFYI(cid, "You're free to use another necklace!")
return true
end
end
Editado por xWhiteWolf (veja o histórico de edições)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

não é gambiarra em movements, é um truque que um monte de gente faz em outros scripts só que nunca pensaram em fazer em movements '-' só uma coisa: nesse creaturescript você não remove o amuleto anterior? qual a diferença entre addItem e addItemEx e porque você utilizou ambos?

edit: testa isso

 

function onDeEquip(cid, item, position, fromPosition)
if getPlayerStorageValue(cid, storage) <= 0 then
doPlayerPopupFYI(cid, "You can't Unequip this item.")
else
doPlayerPopupFYI(cid, "You're free to use another necklace!")
return true
end
end

 

 

e uso esqueci de tirar o Ex e de mudar a função pra remover o item mas já foi corrigido, e dei só um exemplo pra ele que já editor nos items.otb e só fazer o creaturescript onadvanced e pronto ta resolvido.

Editado por AnaPaula (veja o histórico de edições)

 Whatsapp: +55 (48) 98815-0709 Discord: Qwizer#5713

 

Global 100% 7.40 com Website

TFS 1.2 10.97-11.00 + GlobalFull OtherWorld ...

 

Link para o post
Compartilhar em outros sites

entendi mas a minha pergunta é: pra que serve o addItemEx? oque ele faz de diferente?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

entendi mas a minha pergunta é: pra que serve o addItemEx? oque ele faz de diferente?

 

Não cheguei a ver o código fonte dessa função. Mas eu penso nela desse modo:

 

Seria tipo um método para criar o item, virtualmente, e só depois adicionar ele ao jogo em sí. Desse jeito dá pra manipular melhor o item, antes de adicioná-lo ao jogo.

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

então, o player começa com o primeiro amuleto, nenhum deles pode ser removido, pois ja editei no item editor, agora o amuleto te que ser trocado nos seguintes leveis:

 

1; 2; 5; 7; 10; 13; 16; 20; 25; 30; 35; 40; 45; 50; 55; 60; 65; 70; 75; 80; 85; 90; 95; 100; 125; 150; 175; 200; 250; 300; 350; 400; 425; 450; 475; 500; 525; 550; 575; 600; 625; 650; 675; 700

Link para o post
Compartilhar em outros sites

tenho razões pra acreditar que isso vai dar muito errado porque eu sou péssimo em fazer tables mas fica aí uma dica de como eu pensei em fazer o script:
 

function onAdvance(cid, oldLevel, newLevel)


local config = {
   [1] = {id =},
   [2] = {id = },
   [5] = {id = },
   [7] = {id = },
   [10] = {id = },
   [13] = {id = },
   [16] = {id = },
   [20] = {id = },
   [25] = {id = },
   [30] = {id = },
   [35] = {id = },
   [40] = {id = },
   [45] = {id = },
   [50] = {id = },
   [55] = {id = },
   [60] = {id = },
   [65] = {id = },
   [70] = {id = },
   [75] = {id = },
   [80] = {id = },
   [85] = {id = },
   [90] = {id = },
   [95] = {id = },
   [100] = {id = },
   [125] = {id = },
   [150] = {id = },
   [175] = {id = },
   [200] = {id = },
   [250] = {id = },
   [300] = {id = },
   [350] = {id = },
   [400] = {id = },
   [425] = {id = },
   [450] = {id = },
   [475] = {id = },
   [500] = {id = },
   [525] = {id = },
   [550] = {id = },
   [575] = {id = },
   [600] = {id = },
   [625] = {id = },
   [650] = {id = },
   [675] = {id = },
   [700] = {id = }
}


function LevelPlayer(cid)
i = 2
if getPlayerLevel(cid) < config[i] and getPlayerLevel(cid) >= config[i-1] then
level == config[i-1]
else
i = i+1
end
return level
end


if skill == 8 and getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == level.id then
if newLevel >= LevelPlayer(cid) then
    doPlayerRemoveItem(cid, level.id, 1)
    doPlayerAddItem(cid, config[i].id, 1, FALSE, 2)
if newLevel == config[i-1] then
    doPlayerSendTextMessage(cid, 22, "You received "..getItemNameById(level.id).." for reaching "..config[i-1].."")
end
end
end
return true
end

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

vou testar irmao, obrigado pela dedicação

 

os ids ficam assim?    [2] = {id=7888}

 

 

[29/04/2014 04:51:59] [Warning - TalkAction::configureEvent] Duplicate registered talkaction with words: !spells
[29/04/2014 04:51:59] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/medal.lua:13: '=' expected near '=='
[29/04/2014 04:51:59] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/medal.lua)
[29/04/2014 04:51:59] data/creaturescripts/scripts/medal.lua:13: '=' expected near '=='
Link para o post
Compartilhar em outros sites

sim, os Id's ficam exatamente assim. O erro na linha 13 tá pedindo == no lugar de só =, vc editou alguma coisa, porque a linha 13 aqui é essa:

[25] = {id = },

OBS: Não sei se vai funcionar porque eu não manjo dessas tables compostas:

config = {   [5] = {id = 7887},   [10] = {id= 7888}}

nesse caso o config[1].id seria 7887 por ser o primeiro item da table ou o config[5].id que seria o 7887?? Se alguém souber me responder eu posso arrumar o script pra fazer ele funcionar 100%


EDIT: fiz uns testes e arrumei uns bugs que tavam dando, infelizmente o script ainda não tá funcionando mas a lógica continua correta ao meu ver:

function onAdvance(cid, skill, oldlevel, newlevel)


local config = {
[1] = {id = 7887},
[2] = {id = 7888},
[5] = {id = 7889},
[7] = {id = 7890},
[10] = {id = 2129},
[13] = {id = 2130},
[16] = {id = 2131},
[20] = {id = 2132},
[25] = {id = 2133},
[30] = {id = 2134},
[35] = {id = 2135},
[40] = {id = 7898},
[45] = {id = 7899},
[50] = {id = 7900},
[55] = {id = 7901},
[60] = {id = 7902},
[65] = {id = 7903},
[70] = {id = 7904},
[75] = {id = 7905},
[80] = {id = 7906},
[85] = {id = 7907},
[90] = {id = 7908},
[95] = {id = 7909},
[100] = {id = 7910},
[125] = {id = 7911},
[150] = {id = 7912},
[175] = {id = 7913},
[200] = {id = 7914},
[250] = {id = 7915},
[300] = {id = 7916}
}


local function LevelPlayer(cid)
local i = 2
while getPlayerLevel(cid) < config[i] and config[i]~= nil do
if getPlayerLevel(cid) >= config[i-1] then
local level = config[i-1]
else
local i = i+1
end
end
return i
end

local a = LevelPlayer(cid) -1
if skill == 8 and getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == config[a].id then
if newlevel >= config[a] then
doPlayerRemoveItem(cid, config[a].id, 1)
doPlayerAddItem(cid, config[i].id, 1, FALSE, 2)
if newlevel == config[i] then
doPlayerSendTextMessage(cid, 22, "You received "..getItemNameById(level.id).." for reaching "..config[a].."")
end
end
end
return true
end

o erro que tá dando é bem bobo mas eu to tomando um baile aqui desse script
 

[29/04/2014 07:33:18] [Error - CreatureScript Interface] 
[29/04/2014 07:33:18] data/creaturescripts/scripts/hueee.lua:onAdvance
[29/04/2014 07:33:18] Description: 
[29/04/2014 07:33:18] data/creaturescripts/scripts/hueee.lua:40: attempt to compare number with table
[29/04/2014 07:33:18] stack traceback:
[29/04/2014 07:33:18]  data/creaturescripts/scripts/hueee.lua:40: in function 'LevelPlayer'
[29/04/2014 07:33:18]  data/creaturescripts/scripts/hueee.lua:50: in function <data/creaturescripts/scripts/hueee.lua:1>
ele não consegue comparar a table com um valor, por isso eu preciso saber como funciona esse esquema de table dentro de table.. caso contrário eu vou ter que fazer um script gigantesco e vai ficar feio pra caralho
Editado por xWhiteWolf (veja o histórico de edições)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

entendi mas a minha pergunta é: pra que serve o addItemEx? oque ele faz de diferente?

 

e isso que o MaXwEllDeN disse mais não e necessário usar ele.

Editado por AnaPaula (veja o histórico de edições)

 Whatsapp: +55 (48) 98815-0709 Discord: Qwizer#5713

 

Global 100% 7.40 com Website

TFS 1.2 10.97-11.00 + GlobalFull OtherWorld ...

 

Link para o post
Compartilhar em outros sites
local amuletos = {
   [1] = 7887,
   [2] = 7888
   [5] = 7889,
   [7] = 7890,
   [10] = 2129,
   [13] = 2130,
   [16] = 2131,
   [20] = 2132,
   [25] = 2133,
   [30] = 2134,
   [35] = 2135,
   [40] = 7898,
   [45] = 7899,
   [50] = 7900,
   [55] = 7901,
   [60] = 7902,
   [65] = 7903,
   [70] = 7904,
   [75] = 7905,
   [80] = 7906,
   [85] = 7907,
   [90] = 7908,
   [95] = 7909,
   [100] = 7910,
   [125] = 7911,
   [150] = 7912,
   [175] = 7913,
   [200] = 7914,
   [250] = 7915,
   [300] = 7916,
}
 
function onAdvance(cid, skill, oldlevel, newlevel)
 
   if skill == 8 and amuletos[newlevel] then
      doTransformItem(getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).uid, amuletos[newlevel])
      doPlayerSendTextMessage(cid, 22, "You received "..getItemNameById(amuletos[newlevel).." for reaching level".. newlevel..".")
   end
 
   return true
end
 

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

ficou bem melhor assim mesmo, eu não parei pra pensar que o amuleto é irremovível e que era muito mais fácil transformar >.>, só uma pergunta max, 

 if skill == 8 and amuletos[newlevel] then

ele vai substituir meu amuleto antigo pelo amuleto novo sempre que a table amuletos[meu level novo] existir? então nesse caso o valor amuletos[10] seria o valor da table quando meu nivel for 10? Achei que amuletos[10] retornava o décimo valor da minha table que no caso seria [30]= 2134

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

ficou bem melhor assim mesmo, eu não parei pra pensar que o amuleto é irremovível e que era muito mais fácil transformar >.>, só uma pergunta max, 

 if skill == 8 and amuletos[newlevel] then

ele vai substituir meu amuleto antigo pelo amuleto novo sempre que a table amuletos[meu level novo] existir? então nesse caso o valor amuletos[10] seria o valor da table quando meu nivel for 10? Achei que amuletos[10] retornava o décimo valor da minha table que no caso seria [30]= 2134

 

Não não, tipo. A sintaxe para retornar um valor de uma tabela é isso:

 

local tabela = {

   ["Max"] = "Maxwell",

   [512] = "Oi",

   max2 = "Maxwell Dois",

}

 

IdentificadorDaTabela[index]

 

O Index pode ser tanto numérico como uma string.

Note que para ler o valor "Maxwell", eu poderia fazer de duas formas:

 

print(tabela["Max"])
print(tabela.Max)

 

Do mesmo modo que para definir o valor "Maxwell" eu posso colocar o Index de dois modos:

 

local tabela = {
   Max = "Maxwell",
}

 

Que é teoricamente igual a isso:

 

local tabela =  {
   ["Max"] = "Maxwell",
}

 

 

Enfim. Essa é a expressão para retornar o valor de uma tabela:

 

Identificador_da_tabela[Index]

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

valeu mesmo pela explicação cara, ajudou muito!  ^^

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo