1 Criando jogos em BYOND - Capítulo 4 Seg 12 Nov 2012, 18:46
Halt
Administrador
Va. Login() e Logout() (Procs internas)
Quando um programa é ordenado a fazer um procedimento, o procedimento em questão é chamado. Login() é chamado automaticamente quando um player entra no jogo, e Logout() quando o player sai do jogo. Quando queremos modificar essas duas, nós colocamos o código no prototype para mobs. Aqui é código para mobs agora:
mob
+icon = 'pessoa.dmi'
+Login()
++icon_state = gender
++..()
+verb
++Falar(msg as text)
+++world << "[usr] diz:[msg]"
O comando ..() diz para ir chamar a atual proc interna Login(). Isto é muito, muito importante. A proc interna Login() é o que põe você no mapa. É chamada de procs pais.(Você nunca perguntou, “Mãe, como eu fui entregue?”)
O Login que NÓS codificamos é uma criança, e não sabe tudo o que seus pais sabem. “Então dizemos para ele perguntar para o seus pais o que fazer, com essa linha “..()”
Agora, compile e rode! Você será um boneco que pode dizer coisas E mover por pelo mapa através das teclas direcionais. Agora você tem um Bate-papo gráfico. A vida não é bela? Você deve agora salvar tudo ou compilar de novo.
VI. Mas eu não quero uma sala de Bate-papo!! (declarando variáveis)
As características de mobs e turfs que utilizamos como (icon e gender) são chamadas de variáveis internas. Uma variável é um lugar onde um tidbit de dados é guardado. É chamado de variável porque nós podemos modificar-la quando desejarmos, então a informação contida pode variar. A lista de referencias do DM já explica um pouco mais sobre variáveis internas.
Mas hoje nós queremos fazer uma variável guardar uma data sobre a vida do jogador, ou HP, não existem variáveis internas para isso, então temos que criar nossa própria variável. Coloque essas linhas:
+var
++HP = 30 //Declara uma nova variável chamada HP, com o valor 30
...dentro de mob, abaixo da linha “icon”.
Nós declaramos uma variável e assimilamos um valor para ela. Quando nós declaramos uma variável, nós deixamos o programa saber que nós fizemos uma nova que não é uma variável interna. Nós fazemos isso colocando abaixo de “var”. Quando assimilamos um valor, nós dizemos que dados nós desejamos que a variável carregue. Neste caso é o numero 30.
VIa. Matando coisas... (mais procs internas)
Se nós quisermos sair por ai atacando coisas, precisamos de um verb de ataque. Coloque isso abaixo de “verb” e antes de “Falar”:
+Atacar(mob/M as mob in oview(1)) //Atacar um mob a distancia de um tile
++usr<< “Você atacou [M]!” //manda essa mensagem para o usr
++oview()<<”[usr] atacou [M]!” //manda essa mensagem para os outros
++var/dano = rand(1,10) //Assimila um valor aleatório para variável
++world << “[dano] dano!” // diz ao mundo o dano sofrido
++M.HP -= dano //Tira o dano no HP de M
De uma olhada nas comentários e veja se você consegue descobrir algo por você mesmo. Não precisa ficar preocupado, Vou explicar tudo detalhadamente.
+Atacar(mob/M as mob in oview(1)) //Atacar um mob a distancia de um tile
Isto é muito similiar ao verb Falar. O player que esta fazendo o ataque tem que pegar um mob perto dele, que vai ser passado como M. De novo, especificamos que deve ser um mob.
Próximo, oview(1) é a distancia que ele pode atacar coisas. A parte “view(vista)” é auto-explicatoria; o “o” significa outside(fora) ou other(outro), ou possivelmente, Okefenonkee, isso faz com que o usr não mire em si mesmo. O usr só estará capaz de atingir os alvos com um tile de distancia dele.
++usr<< “Você atacou [M]!” //manda essa mensagem para o usr
Na linha de cima, nós fizemos uma mensagem de ataque para o usr.
++oview()<<”[usr] atacou [M]!” //manda essa mensagem para os outros
Nós não colocamos nenhum numero nos parênteses desse oview(), então a mensagem será enviada para todos que o usuário pode ver... exceto, é claro, o próprio usr.
++var/dano = rand(1,10) //Assimila um valor aleatório para variável
Nós declaramos uma nova variável acima, chamada dano.
Nós assimilamos um valor para nossa variável, mas não como fizemos com o HP. Em vez de assimilar um numero, nós chamamos a proc interna, rand(). Os argumentos que passamos dentro de rand() determinam a variação de números que podemos pegar. Neste caso, um inteiro entre 1 e 10 somente.
Toda vez que essa linha é alcançada no seu programa, rand() vai ser chamada, e ela passara o numero que será pego. Isto se chama retorno. Retornando o numero que requisitamos. O numero retornado será assimilado ao valor de dano.
++world << “[dano] dano!” // diz ao mundo o dano sofrido
Aqui mostramos o dano, como uma expressão embutida. Do mesmo jeito que já fizemos com usr, msg e M.
++M.HP -= dano //Tira o dano no HP de M
Aqui é onde realmente o dano é feito. M.HP significa “O HP de M”. O operador -= (o sinal de menos e de igual) significa que a coisa contida à esquerda é igual ela mesma MENOS o valor da outra coisa da direita. Então, o HP de M é igual como antes, menos o dano.
Créditos:
Blake pelo tutorial
-KiRa por postar aqui na ARM
Quando um programa é ordenado a fazer um procedimento, o procedimento em questão é chamado. Login() é chamado automaticamente quando um player entra no jogo, e Logout() quando o player sai do jogo. Quando queremos modificar essas duas, nós colocamos o código no prototype para mobs. Aqui é código para mobs agora:
mob
+icon = 'pessoa.dmi'
+Login()
++icon_state = gender
++..()
+verb
++Falar(msg as text)
+++world << "[usr] diz:[msg]"
O comando ..() diz para ir chamar a atual proc interna Login(). Isto é muito, muito importante. A proc interna Login() é o que põe você no mapa. É chamada de procs pais.(Você nunca perguntou, “Mãe, como eu fui entregue?”)
O Login que NÓS codificamos é uma criança, e não sabe tudo o que seus pais sabem. “Então dizemos para ele perguntar para o seus pais o que fazer, com essa linha “..()”
Agora, compile e rode! Você será um boneco que pode dizer coisas E mover por pelo mapa através das teclas direcionais. Agora você tem um Bate-papo gráfico. A vida não é bela? Você deve agora salvar tudo ou compilar de novo.
VI. Mas eu não quero uma sala de Bate-papo!! (declarando variáveis)
As características de mobs e turfs que utilizamos como (icon e gender) são chamadas de variáveis internas. Uma variável é um lugar onde um tidbit de dados é guardado. É chamado de variável porque nós podemos modificar-la quando desejarmos, então a informação contida pode variar. A lista de referencias do DM já explica um pouco mais sobre variáveis internas.
Mas hoje nós queremos fazer uma variável guardar uma data sobre a vida do jogador, ou HP, não existem variáveis internas para isso, então temos que criar nossa própria variável. Coloque essas linhas:
+var
++HP = 30 //Declara uma nova variável chamada HP, com o valor 30
...dentro de mob, abaixo da linha “icon”.
Nós declaramos uma variável e assimilamos um valor para ela. Quando nós declaramos uma variável, nós deixamos o programa saber que nós fizemos uma nova que não é uma variável interna. Nós fazemos isso colocando abaixo de “var”. Quando assimilamos um valor, nós dizemos que dados nós desejamos que a variável carregue. Neste caso é o numero 30.
VIa. Matando coisas... (mais procs internas)
Se nós quisermos sair por ai atacando coisas, precisamos de um verb de ataque. Coloque isso abaixo de “verb” e antes de “Falar”:
+Atacar(mob/M as mob in oview(1)) //Atacar um mob a distancia de um tile
++usr<< “Você atacou [M]!” //manda essa mensagem para o usr
++oview()<<”[usr] atacou [M]!” //manda essa mensagem para os outros
++var/dano = rand(1,10) //Assimila um valor aleatório para variável
++world << “[dano] dano!” // diz ao mundo o dano sofrido
++M.HP -= dano //Tira o dano no HP de M
De uma olhada nas comentários e veja se você consegue descobrir algo por você mesmo. Não precisa ficar preocupado, Vou explicar tudo detalhadamente.
+Atacar(mob/M as mob in oview(1)) //Atacar um mob a distancia de um tile
Isto é muito similiar ao verb Falar. O player que esta fazendo o ataque tem que pegar um mob perto dele, que vai ser passado como M. De novo, especificamos que deve ser um mob.
Próximo, oview(1) é a distancia que ele pode atacar coisas. A parte “view(vista)” é auto-explicatoria; o “o” significa outside(fora) ou other(outro), ou possivelmente, Okefenonkee, isso faz com que o usr não mire em si mesmo. O usr só estará capaz de atingir os alvos com um tile de distancia dele.
++usr<< “Você atacou [M]!” //manda essa mensagem para o usr
Na linha de cima, nós fizemos uma mensagem de ataque para o usr.
++oview()<<”[usr] atacou [M]!” //manda essa mensagem para os outros
Nós não colocamos nenhum numero nos parênteses desse oview(), então a mensagem será enviada para todos que o usuário pode ver... exceto, é claro, o próprio usr.
++var/dano = rand(1,10) //Assimila um valor aleatório para variável
Nós declaramos uma nova variável acima, chamada dano.
Nós assimilamos um valor para nossa variável, mas não como fizemos com o HP. Em vez de assimilar um numero, nós chamamos a proc interna, rand(). Os argumentos que passamos dentro de rand() determinam a variação de números que podemos pegar. Neste caso, um inteiro entre 1 e 10 somente.
Toda vez que essa linha é alcançada no seu programa, rand() vai ser chamada, e ela passara o numero que será pego. Isto se chama retorno. Retornando o numero que requisitamos. O numero retornado será assimilado ao valor de dano.
++world << “[dano] dano!” // diz ao mundo o dano sofrido
Aqui mostramos o dano, como uma expressão embutida. Do mesmo jeito que já fizemos com usr, msg e M.
++M.HP -= dano //Tira o dano no HP de M
Aqui é onde realmente o dano é feito. M.HP significa “O HP de M”. O operador -= (o sinal de menos e de igual) significa que a coisa contida à esquerda é igual ela mesma MENOS o valor da outra coisa da direita. Então, o HP de M é igual como antes, menos o dano.
Créditos:
Blake pelo tutorial
-KiRa por postar aqui na ARM