Jump to content

Projeto Tutores de Scripting


Killua

Recommended Posts

n2c26q.png




Introdução



Neste tópico, eu e os outros responsáveis da área de scripting (@zipter98 e Omega) vamos auxiliar aqueles que querem aprender a scriptear, seja dando dicas, ajudando com códigos e até mesmo dando explicações. A intenção deste projeto é incentivar todos aqueles que têm vontade de aprender a scriptear.




Como vai funcionar?



Diferentemente da Fábrica do Garou, nós não iremos fazer os códigos para vocês. Nós vamos ajudá-los a fazer vocês mesmos. Para ser auxiliado, basta postar aqui o código que está fazendo e dizer onde está sua dificuldade. Se você tem uma idéia de código/sistema para fazer e não sabe nem como começar, você pode postar aqui sua idéia que iremos ajudá-lo a começar e a desenvolver seu código/sistema.




Resumindo



Aqui nós iremos te ajudar a fazer seu código/sistema, vamos te dar dicas e explicações sobre como fazer e até indicar tutoriais para vocês lerem.




Espero realmente que tenham interessados, ficarei feliz em ajudar todos.


Edited by Killua
Link to comment
Share on other sites

Bom estou desenvolvendo um Sistema que quando chegar ao Certo nível de skill ganha-se um item.



local getitem = {
[10] = {item, "Voce ganhou uma espada nivel 2 por seu desempenho."}, --[skill necessaria] = {id do item, mensagem},
[20] = {item, "Legal! Voce ganhou uma espada nivel 3."},
[30] = {item, "Parabens! Voce ganhou uma espada nivel 4."},
[40] = {item, "Woow! Voce ganhou uma espada nivel 5."},
[50] = {item, "Wooooooooooooow!!! Voce ganhou uma espada nivel 6."},
[80] = {item, "Excellent!!! Voce conseguiu a espada suprema nivel 7."},
}
if getitem[getPlayerStorageValue(cid, 12348)] then
local tab = getitem[getPlayerStorageValue(cid, 12348)]
doPlayerAddItem(cid, tab[1], 1)
doSendMagicEffect(getCreaturePosition(cid), 15)
doPlayerSendTextMessage(cid, 27, tab[2])
if doPlayerRemoveItem(cid, 3630, 1)
else
return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes")
else
return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes")
end

(Foi o Zipter que fez a maior parte)


Oque eu quero no script: Gostaria que verifica-sem e reviza-sem pra ver se errei algo na parte do else, e me fala-sem oque eu errei, e também queria trocar o Storage por skill, a quantidade de certa skill.

Link to comment
Share on other sites

Oi amigo, vamos lá:

 

Primeiramente vc deixou de usar uma função "mãe", que no caso acho que a que mais se adequa é function onAdvance(cid, skill, oldLevel, newLevel).

 

A parte de trocar o storage por skill, é só mudar o getPlayerStorageValue(cid, 12348) para getPlayerSkillLevel(cid, skillId). Mas para fazer um script como esse, eu particularmente prefiro usar um loop para facilitar, se vc quiser, eu mostro como ficaria com o loop.

 

A parte do else vc fez errado. Vou te explicar o princípio do if/else usando um exemplo em LUA e um traduzido em português.

É o seguinte, quando vc usa um if, vc está impondo uma condição (se for assim, então faça isso) e o else serve para você dizer oq acontecerá no caso de sua condição não ser cumprida. Por exemplo:

if getPlayerItemCount(cid, 3630) >= 1 then
      doPlayerRemoveItem(cid, 3630, 1)
      doPlayerAddItem(cid, itemid, count)
      doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.")
else
      doPlayerSendCancel(cid, "Voce não possui o item necessário.")
end

Traduzindo esse código para o português, ficaria assim:

se getPlayerItemCount(cid, 3630) >= 1 então
     doPlayerRemoveItem(cid, 3630, 1)
     doPlayerAddItem(cid, itemid, count)
     doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.")
se não
     doPlayerSendCancel(cid, "Voce não possui o item necessário.")
end

Ou seja, se o player não tiver pelo menos um item de id 3630, ele receberá a mensagem "Você não possui o item necessário.".

 

 

 

O seu erro foi deixar o if doPlayerRemoveItem(cid, 3630, 1) then no final, o local correto seria acima de local tab = getitem[getPlayerStorageValue(cid, 12348)].

 

Espero ter ajudado, continue perguntando :)




			
		
Link to comment
Share on other sites

Parabéns cara iniciativa foda de vocês era o que faltava no xtibia.

Eu tenho muita dificuldade com scripting apesar de gostar e não ter muito tempo.

 

Tenho esse script que transforma um ninja normal em um genin.Queria que ele também transformasse em 2 outras vocations, ex:chunin,jounin.

 

 

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local vocation = 2
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'ninja')) or (msgcontains(msg, 'promotion')) then
talkState[talkUser] = 1
selfSay('Are you prepared to become a genin?', cid)
elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if (getPlayerLevel(cid) >= 8) then
if (getPlayerVocation(cid) ~= vocation) then
doPlayerSetVocation(cid, vocation)
doSendMagicEffect(getThingPos(cid), 1)
else
talkState[talkUser] = 0
selfSay('You already became a genin,you can leave...', cid)
end
else
talkState[talkUser] = 0
selfSay('I can not promote you yet. Must be very experienced, with level 8. There are only '..tostring(8 - getPlayerLevel(cid))..' level(s).', cid)
end
return true
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Também queria saber como fazer um NPC de uma maneira simples começado do 0 se puder.

Edited by Madarada
Link to comment
Share on other sites

Bom, primeiramente temos que ler e entender o script.

Oq ele faz?

 

Quando o player usa as palavras "ninja" ou "promotion" e depois "yes" com esse NPC, o script checa o level e a vocação do player. Se o player tiver vocação diferente de 2 e level maior ou igual 8, sua vocação passará a ser 2.

 

Para adicionar mais opções, você deverá dar ao player a possibilidade de usar outras palavras (Exemplo: "ninja", "chunin", "jounin") e fazer o script atuar baseado nessas palavras.

Para fazer isso de forma mais curta e bonita, nós usariamos um loop. Mas vamos fazer o jeito mais simples mesmo, que é assim:

 

Para facilitar, crie uma tabela para encurtar o script, exemplo:

local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"}

Depois, você irá fazer várias checagens com if e elseif, exemplo:

if msgcontains(msg, "chunin") then
      doPlayerSetVocation(cid, x)
elseif msgcontains(msg, "jounin") then
     doPlayerSetVocatio(cid, y)

E ir continuando.Vou deixar aqui o início do código para você

 

 


local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"}
   
if (msgcontains(msg, 'promotion')) then
  talkState[talkUser] = 1
  selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid)
end

if isInArray(tabela, msg) then
    if getPlayerLevel(cid) >= 8 then
        if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then
            doPlayerSetVocation(cid, 1)
            doSendMagicEffect(getThingPos(cid), 1)
        elseif msgcontains(msg, 'jounin') and talkState[talkUser] == 1 then
            doPlayerSetVocation(cid, 2)
            doSendMagicEffect(getThingPos(uid), 1)

 

Para fazer um NPC do 0, digamos que existe um molde:

O início do seu script deve conter isso no início:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
 
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

E isso no final:

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Existem também outros moldes, mas pode usar sempre esse.

 

Depois basta construir um script normalmente usando

if msgcontains(msg, "blablabla")

para checar oq o player fala e

talkState para ajudar na organização (ordem em que as palavras devem ser ditas pelo player).

 

Como usar o talkState?

Basicamente, você pode pensar que ele é uma variável global à qual pode-se atribuir qualquer valor. Vou usar seu NPC como exemplo de uso do talkUser:

if (msgcontains(msg, 'promotion')) then
  talkState[talkUser] = 1
  selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid)
end

Essa parte faz o seguinte: Se o jogador disser "promotion" ao NPC, talkState[talkUser] ganhará valor 1.

if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then

Essa parte vai checar duas coisas: Se a palavra dita foi "chunin" e se o valor de talkState[talkUser] é 1. Se o valor não for 1, não adiantará nada dizer a palavra certa e vice-versa.

 

É basicamente isso, vc pode ir dando os valores para talkState[talkUser] conforme vc quer que seja a ordem das falas.

 

 

 

Espero que tenha dado para entender, ainda não sou muito bom explicando =S




			
		
Link to comment
Share on other sites

Vlw cara por ajudar você explicou direitinho

Vou fazer essas modificações e posteriormente trarei outros scripts e etc.

 

Rep+

Edited by Madarada
Link to comment
Share on other sites

Eae tentei fazer esse 1º script sozinho mais ficou meio bugado

Quando eu falo "yes" ou "no" pra aceitar o pao ele fala as duas frases ao mesmo tempo e o pao nao vem pra min.

 

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then
talkState[talkuser] = 1
selfSay('Voce quer um pao?',cid)
elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1)then
doPlayerAddItem(cid, 3600, 1)
doSendMagicEffect(getThingPos(cid), 1)
else
talkState[talkUser] = 0
selfSay('Pao quentinho entregue',cid)
end
talkState[talkUser] = 0
selfSay('O pao vai esfriar')
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Também fiz esse 2º e tenho uma dúvida:todos os npcs tem que ter uma "greet message"? porque da um erro no client quando eu tento colocar o npc no ot.

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local vocation = 2
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'hi'))then
talkState[talkUser] = 1
selfSay('Do you want a mission?', cid)
if (msgcontains(msg, 'yes'))then
doSendMagicEffect(getThingPos(cid), 1)
else
talkState[talkUser] = 0
selfSay('Voce ainda não pode pegar missões',cid)
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

VLw abraços

Edited by Madarada
Link to comment
Share on other sites

Nossa, adorei a iniciativa. Era isso que estava faltando, um tópico de tutores mesmo, onde pessoas interessadas pelo Scripting pudessem tirar suas dúvidas.

 

Parabéns e se precisarem da minha ajuda em algo, só mandar PM.

Link to comment
Share on other sites

 

 

Eae tentei fazer esse 1º script sozinho mais ficou meio bugado

Quando eu falo "yes" ou "no" pra aceitar o pao ele fala as duas frases ao mesmo tempo e o pao nao vem pra min.

 

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then
talkState[talkuser] = 1
selfSay('Voce quer um pao?',cid)
elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1)then
doPlayerAddItem(cid, 3600, 1)
doSendMagicEffect(getThingPos(cid), 1)
else
talkState[talkUser] = 0
selfSay('Pao quentinho entregue',cid)
end
talkState[talkUser] = 0
selfSay('O pao vai esfriar')
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Também fiz esse 2º e tenho uma dúvida:todos os npcs tem que ter uma "greet message"? porque da um erro no client quando eu tento colocar o npc no ot.

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local vocation = 2
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if (msgcontains(msg, 'hi'))then
talkState[talkUser] = 1
selfSay('Do you want a mission?', cid)
if (msgcontains(msg, 'yes'))then
doSendMagicEffect(getThingPos(cid), 1)
else
talkState[talkUser] = 0
selfSay('Voce ainda não pode pegar missões',cid)
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

VLw abraços

 

 

Desculpe estar demorando, estou bem corrido hoje. Amanhã garanto que vou responder suas dúvidas, abraços.

 

 

Nossa, adorei a iniciativa. Era isso que estava faltando, um tópico de tutores mesmo, onde pessoas interessadas pelo Scripting pudessem tirar suas dúvidas.

 

Parabéns e se precisarem da minha ajuda em algo, só mandar PM.

 

Muito obrigado Garou, sua ajuda vai ser sempre bem-vinda no projeto :)

 

Resposta:


@Madarada seu primeiro erro foi usar talkState[talkuser] ao invés de talkState[talkUser]. A linguagem LUA diferencia letras minúsculas de maiúsculas, por isso é preciso prestar atenção.

Segundo: Este else:


else 
talkState[talkUser] = 0 
selfSay('Pao quentinho entregue',cid) 
end

Está dizendo ao script oq fazer se as condições dessa linha não forem atendidas:


if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then

Ou seja, se o player usar alguma palavra que não seja "pao" ou "bread", ele não receberá nenhum item e receberá uma mensagem dizendo "Pao quentinho entregue". Esta mensagem deveria estar junto com o doPlayerAddItem(cid, 3600, 1) e no else deveria estar algo assim: "Nao entendi.". Mas isso são só detalhes que não influenciam no funcionamento do código, só deixam ruim o entendimento in-game.

 

Terceiro:

Essa parte de baixo

 talkState[talkUser] = 0
 selfSay('O pao vai esfriar')
  return true
  end

É executada toda vez que alguem fala hi para o NPC, pois ela não está sob condição nenhuma. Por isso ele usa 2 mensagens ao mesmo tempo.

 

Outra dica é colocar um talkState[talkUser] = 0 junto com o doPlayerAddItem(cid, 3600, 1) para obrigar o player a falar "pao", "yes" novamente casso queira outro pão.

 

O script corrigido ficaria assim:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
 
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
 
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
if msgcontains(msg, 'bread') or msgcontains(msg, 'pao') then
    talkState[talkUser] = 1
    selfSay('Voce quer um pao?',cid)
elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then
    doPlayerAddItem(cid, 3600, 1) 
    doSendMagicEffect(getThingPos(cid), 1)
    selfSay('Pao quentinho entregue',cid)
    talkState[talkUser] = 0
else
    selfSay('Nao entendi', cid)
    talkState[talkUser] = 0
end
return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Leia ele e compare com seu código para entender seus erros.

 

Sua segunda dúvida:

Não precisa por greet message, pois já existe uma padrão (Welcome, playername! I have been expecting you.). Sempre que vc deixar de colocar uma greet message, essa mensagem vai ser enviada ao dizer Hi para o NPC.

O erro deve ter acontecido devido aos erros nesse segundo script, que são bem parecidos com o do primeiro. Se vc entender a explicação do primeiro, vai conseguir fazer o segundo.

Além disso estão faltando dois ends e um return true no final, oque já é suficiente para aparecerem erros.

 

Abraços, espero que consiga entender.

Edited by Killua
Link to comment
Share on other sites

Quero fazer um script assim O player clica numa alavanca e é teleportado para um local onde começa a surgir monstros e mais monstros, dependendo do tempo que ele aguenta lá ele ganha prêmios por exemplo de 0 a 1 minuto ele ganha 1kk de 1 a 3 minutos 2kk e assim por diante, ele só pode clicar nessa alavanca de 3 em 3 horas se possuir item X e se um player já estiver dentro desse evento outro player não consiga entrar lá (Cê o player aguentar 5 minutos na arena, ele é teleportado para o templo com o prêmio e seu nome anunciado para todo servidor "O player "Ziriguidum" venceu na arena e ganhou "Nome do item".

 

PS: não sei nem como começar =\

Link to comment
Share on other sites

Quero fazer um script assim O player clica numa alavanca e é teleportado para um local onde começa a surgir monstros e mais monstros, dependendo do tempo que ele aguenta lá ele ganha prêmios por exemplo de 0 a 1 minuto ele ganha 1kk de 1 a 3 minutos 2kk e assim por diante, ele só pode clicar nessa alavanca de 3 em 3 horas se possuir item X e se um player já estiver dentro desse evento outro player não consiga entrar lá (Cê o player aguentar 5 minutos na arena, ele é teleportado para o templo com o prêmio e seu nome anunciado para todo servidor "O player "Ziriguidum" venceu na arena e ganhou "Nome do item".

 

PS: não sei nem como começar =\

o tópico é pra ajudar a fazer o script

n fazer pra ti

¬¬

 

de qlqr forma

parabéns :33

Link to comment
Share on other sites

Realmente isso tá parecendo mais um pedido... Amigo, se vc é iniciante e quer aprender a fazer scripts, sugiro que comece com algo mais simples. Esse script será um pouco complexo, mas vou deixar umas dicas de como fazê-lo, mesmo achando que vai ser difícil para você entender, já que é um iniciante.

 

Você poderia criar uma tabela contendo todos os intervalos de tempo (de 1 a 60 segundos) para que os monstros nasçam e outra com os nomes dos monstros, exemplo:

local monstros = {"Demon", "Rat", "Hydra", "Dragon"}
local tempos = {1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, etc} -- até 60000

Onde 1000 equivale a 1 segundo.

 

Daí vc iria criar vários addEvent (com intervalo de 60 segundos) dentro de um loop que usaria a tabela, mais ou menos assim:


for i = 1, (#tempos) do
 addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos)
 addEvent(function()
    addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos)
 end, 60000)
 addEvent(function()
    addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos)
 end, 120000)

Mas dessa maneira não seria checado o tempo que o player permaneceu lá, já que o addEvent estaria ocorrendo de qualquer forma. Portanto, a idéia que eu tive foi fazer da seguinte forma:

Cada addEvent checaria se existem players na área e adicionaria uma storage pra todos os players da área, por exemplo, o primeiro addEvent (com intervalo de 60 segundos) setaria o storage XXXX com valor 1 para todos os players da área, o segundo (com intervalo de 120 segundos) setaria o mesmo storage, mas com valor 2 para todos os players da área e assim por diante.

Depois, usando uma function onPrepareDeath (creaturescripts) vc checaria primeiro se o jogador estava na área determinada no momento da morte, depois o valor de sua storage e daria os prêmios dependendo da storage. É claro que essa onPrepareDeath deverá também setar o storage XXXX do player para 0, para que da próxima vez que o jogador participar do evento, não ocorram problemas.


Essas são as idéia que eu tive para fazer o código que vc disse... Ele não é fácil de fazer e eu recomendaria que vc começasse com códigos mais simples, mas não custa nada tentar :)

Espero que tenha conseguido entender, abraços.

Edited by Killua
Link to comment
Share on other sites

×
×
  • Create New...