7. Condições

    Compartilhe
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Não quero acreditar, quero saber.
    Mensagens : 21440
    Reputação : 629
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    7. Condições

    Mensagem por Junior_Djjr em Qui 26 Jan 2017, 03:31



    Concluindo esta parte você vai:
    Saber responder o que são e como usar as condições IF e o loop WHILE;
    Em geral, saber controlar um script para direcionar ele onde e quando quiser.

    Já aprendemos a direcionar o código para onde quisermos. Mas, e quando quisermos?

    É agora que você aprenderá a, realmente, criar um script.

    Nesta parte do tutorial você aprenderá a usar condições/conditions. Controlar o fluxo.



    IF


    IF é "se". Pronto.

    Mas vamos ver melhor o que um "se" quer dizer numa programação:

    Digite o código você mesmo. Veja que o momento em que você digita "VK_" aparece uma lista de teclas para você escolher.
    Note que, na linha 8 eu adicionei um espaço, mas não é um espaço comum, é uma tabulação (aperte a tecla TAB). É cosmético mas obrigatório. Ainda explicarei melhor o motivo de usarmos e tentarei introduzir você naturalmente até lá, simplesmente olhe os códigos.
    Assim como estas linhas vazias, são totalmente opcionais e mudam em nada no produto final. Somente cosmético, e opcional. Use-as para melhor leitura.
    Teste o código acima dentro do seu jogo. O resultado é simples: Enquanto estiver segurando a tecla H, aparecerá o texto.

    Note que eu fiz com que o texto apareça somente 1 milissegundo na tela, assim só realmente aparecerá caso estiver segurando. Experiente mudar o tempo para "1000", assim o texto ficará aparecendo na sua tela mesmo depois de 1 segundo após soltar a tecla! (na verdade, até pouquinho mais de 1)

    Se você entende inglês, não há dúvida alguma sobre o código acima. Basta ler:

    "IF IS_KEY_PRESSED"
    Tradução livre: "se a tecla está pressionada".

    Realmente muito simples. O "IF" é um "SE", onde checa SE alguma coisa é verdadeira.

    Outro exemplo:

    Ou seja, se o seu GTA é versão para PC, aparecerá a mensagem "Sim, seu GTA é de PC" — é óbvio que aparecerá!

    E este?

    Só aparecerá a mensagem caso seu GTA é de versão australiana. O que não é! Ou seja, não aparecerá nada na sua tela, pois não deu verdadeiro, deu falso.

    Importante: Os comandos que você pode usar na frente do "IF" são comandos que se iniciam com "IS_", "HAS_" ou "DOES_" (além de alguns outros comandos, que você aprenderá com o decorrer do tempo, geralmente chamados de "if and set").


    Caso o "IF" ser verdadeiro, será feito tudo o que está aqui dentro:

    Até o "ENDIF".
    O "ENDIF" é só um marcador dizendo "acabou o IF!". Não há mistério.

    Veja este exemplo:


    O que você diria?
    Opção 1. Aparecerá uma contagem enquanto estiver segurando a tecla.
    Opção 2. Após apertar a tecla começará uma contagem e ela continuará mesmo com a tecla solta.

    O que você acha que aconteceria?

    Tente lembrar de como os scripts funcionam.

    Onde eles vão sempre indo pra baixo, lendo o que está embaixo.

    Se você respondeu "2". Certa resposta!

    Só depois de terminar a contagem que o script chegará no GOTO main_loop e voltará para cima fazer tudo de novo.
    Enquanto a contagem, o script não sabe que você soltou a tecla, ele só sabe que você esteve com ela apertada, e depois disso ele começou a mostrar coisas na tela. É assim que um script funciona. Nada mais. Por isso o nome "thread", onde a palavra "thread" quer dizer "fio", onde vemos isso no sentido de "caminho", "rastro".
    Um script não lê duas linhas ao mesmo tempo e eu quero deixar isso claro para você entender bem como um script anda.

    E se eu quiser fazer mais do que um IF?

    Oras bolas!...


    Tudo muito simples, né?

    Mas e se eu apertar H e J ao mesmo tempo?

    Ele irá mostrar "Segurando J".

    Por quê?

    Porque o script é lido de cima pra baixo! E um texto sobrescreve o outro.
    O comando PRINT_STRING_NOW faz mostrar um texto, mas se já ter algum texto sendo mostrado, ele sobrescreve.
    Assim, o script acima, ao segurar as duas teclas juntas, irá "mostrar" primeiro o "H", mas quando chegar no "J" o texto "H" deixará de ser mostrado, será mostrado na verdade o "J", pois é assim que o comando PRINT_STRING_NOW funciona, sobrescrevendo.
    Em seguida o script irá para o main_loop e assim processará o jogo. E durante o processamento do jogo será finalmente mostrado a mensagem "Segurando J".


    ELSE / NOT


    E se eu quero fazer outra coisa caso NÃO seja verdadeiro?
    Usamos "ELSE", que quer dizer "senão".


    Olha que legal.

    É tudo muito simples.

    E ainda, nós temos esta opção:


    A diferença é que usei um "NOT" no "IS_KEY_PRESSED", assim dará verdadeiro só quando "não está pressionando"! E caso estiver pressionado, dará falso, e assim será feito o que está dentro do ELSE. Somente inverteu...

    Há até mesmo como fazer "IFNOT" ao invés de "IF". É tudo muito dinâmico (isso era suportado no original GTA3script do GTA III mas nunca foi usado)(nota: Não há como fazer "IFNOT NOT").

    E se?


    Sim, isso funciona!
    Caso você segurar "H" aparecerá a mensagem de que está segurando o "H", e em seguida checará se você está também segurando "J", caso verdadeiro, aparecerá na verdade outra mensagem: "Segurando H e J".

    Como sempre, na programação há vários modos de se fazer a mesma coisa. Você também pode usar ELSE neste exemplo, na qual o código ficará bem diferente, mas com o mesmo resultado:


    E que tal mais um ELSE ali embaixo?


    O script está começando a ficar grande. E eu espero que você tenha entendido cada linha deste código.

    Nota que cada mensagem escrita ali é a descrição literal do que está acontecendo.
    Se você está segurando "J" sem segurar "H", o que aparecerá na tela é "Não está segurando H", pois o script nunca saberá que você está segurando "J" caso não esteja segurando "H", pois ele só ira checar se você está segurando "J" caso você esteja segurando "H".

    Você pode usar quantos IFs você quiser, um dentro do outro, sem problemas. Isso é extremamente comum de se fazer.



    Wow, é melhor pararmos por aqui, né?
    Se você entendeu cada linha deste código acima, você entendeu muito bem como usar IF! Parabéns, é um grande passo, o IF será muito usado enquanto você cria mods.


    AND / OR


    E que tal assim?



    Nós checamos duas teclas, ao mesmo tempo!
    Isso usando o "AND", que é, simplesmente, um "e".
    Ou seja, é um "se apertou uma tecla" "e apertou outra".

    Que tal três?



    Você pode colocar até 8! O limite também vale para o OR:



    "OR" em inglês é "ou". Não há mistério, o funcionamento é exatamente igual ao "AND", mas agora é "ou" ao invés de "e".
    Ou seja, só dará verdadeiro SE você apertou uma tecla, OU outra! — Mas, também dá verdadeiro caso tenha apertado as duas juntas :) (senão seria ruim, né?)

    Mas e se eu quiser misturar AND com OR no mesmo IF? ...Opa, assim não! Isso não funciona.


    WHILE


    Vamos agora fazer as coisas diferentes:



    "WHILE", como o nome diz, é "enquanto".
    Mais outra coisa auto-explicativa, pois, simplesmente é "enquanto você está segurando a tecla".

    Nota que eu adicionei um WAIT 0 dentro do WHILE, pois, literalmente, enquanto você está segurando a tecla, o script ficará rodando ali dentro, se você não colocar um WAIT, o jogo irá parar de processar. Pois o WHILE é um loop!

    As vezes na prática — principalmente no exemplo acima — o WHILE é muito semelhante ao o que vimos anteriormente no IF, mas na real, são coisas muito diferentes, e com o tempo você notará muita diferença.

    Geralmente, você irá querer usar WHILE para coisas do tipo "enquanto o CJ está dentro do carro", "enquanto a tecla está sendo segurada", "enquanto você está num local", "enquanto o CJ está vivo" etc.

    Por outro lado, o WHILE não é uma coisa "obrigatória", você pode fazer mods complexos até mesmo usando somente IF, sem nenhum WHILE! Mas as vezes, você pode acabar preferindo o WHILE, é você quem escolhe.

    Veja só este exemplo que você usará muito em seus mods:


    Teste isso dentro do seu jogo. Segure a tecla H para ver.

    O que acontecerá será isso:

    • Apertou H;
    • Apareceu na tela a mensagem;
    • Enquanto você está segurando H, o script ficará parado ali, somente ficará processando o jogo (rodando no WAIT 0);
    • Quando você soltar, sairá de dentro do WHILE, o script continuará, voltará, e você poderá apertar o H novamente para aparecer a mensagem novamente.


    Teste também mudando os "1000" milissegundos para "10" ou "100", para entender melhor o que está acontecendo — assim a mensagem somente piscará rapidamente na tela!

    Isso é muito interessante, pois o script irá parar enquanto você ainda não tenha soltado a tecla H! Se você remover o WHILE ali, o script ficará igual um script que vemos no início dessa parte do tutorial, um script onde você segura a tecla, e a mensagem continua aparecendo sem parar, mas o nosso WHILE não deixará isso, pois ele está servindo de "enquanto você ainda não soltou a tecla, espere!".

    Então pense, e se na nossa mensagem estaria na verdade, um código onde cria um carro? Sem o uso do WHILE ficaria criando carros sem parar! Se você está rodando o jogo em 60 FPS, irá criar 60 carros por segundo enquanto você segura a tecla!!! Isso é loucura, e para evitar isso, basta adicionar um "enquanto está segurando a tecla, faça nada", para assim, você necessitar soltar a tecla, e assim apertar de novo, e ativar de novo — e assim criar o carro de novo.

    O quê? Você quer testar isso? Então tá:


    Este acima é um bom código (bem usável para até deixar em seu jogo) onde você dará spawn de um carro Elegy, como se fosse um cheat (aparecendo na frente do CJ).
    Nota que funciona perfeitamente como deveria.

    Mas e se removermos aquele WHILE que espera soltar a tecla?

    Teste isso dentro do seu jogo. Irá criar 1 carro por frame/quadro! Mas felizmente, um carro "sobrescreverá" o outro por serem criados no mesmo local, assim você só verá um carro mudando de cor a cada frame do jogo, mas na verdade não é só mudar de cor, e sim são carros novos sendo criados numa velocidade absurda. Uma coisa totalmente errada! E o WHILE com IS_KEY_PRESSED pode ser usado para evitar isso.
    Se estivéssemos criando um carro usando outro método (o método mais usado para a criação de carros) iria virar uma chuva de carros e até crashar o jogo.

    Este é só um dos incontáveis exemplos.

    Outro exemplo útil:

    Nota: Somente mostrei a parte do WHILE ao invés do script inteiro. Ainda temos que aprender mais coisas até lá!
    Quando o CJ sair do carro, o script sairá do WHILE e continuará na linha debaixo do "ENDWHILE".


    WHILE AND / OR


    Assim como o IF, o WHILE também aceita AND e OR!
    (você que já sabe Sanny Builder, olha aí uma novidade)



    Ou seja, eu apertei H junto com J, mostrei a mensagem na tela, e enquanto eu estive segurando H+J, o script ficou rodando dentro do WHILE. Se eu soltar H ou J, dará falso no "AND" e o script continuará rodando, assim podendo apertar as teclas novamente, e assim ativar novamente.

    Se você mudar o WHILE AND para WHILE OR você terá um efeito diferente, pois ele ficará dando verdadeiro no WHILE caso alguma das duas condições sejam verdadeiras (ou seja, dará verdadeiro se você ainda está segurando uma, ou outra tecla!)

    Peço para que teste estas duas maneiras dentro do seu jogo e veja as diferenças :)
    Dica: Adicione também uma mensagem dizendo "Soltou a tecla!" Embaixo do ENDWHILE, para você saber exatamente o momento em que o WHILE deu falso e entender melhor o que está se passando no script.

    Como eu disse, o WHILE é muito opcional e tem muito a ver com a opinião do programador e o que ele quer fazer. Na maioria das vezes você pode preferir o uso do IF — essa coisa de "enquanto está no carro" eu dificilmente uso, mas serve como bom exemplo.

    Nota para programadores do Sanny Builder (e outras programações): Não há nenhum WHILE_TRUE aqui! O loop é feito por lowlevel mesmo, usando GOTO, mas o fato de termos WHILE AND/OR pode ser uma forma de substituir um WHILE_TRUE, né?




    Só isso?
    NÃO!

    Ainda há mais algumas coisas, até mesmo algumas técnicas de uso, mas até o momento você não precisa aprendê-las e não quero te sobrecarregar agora. Quando chegar a hora, você será ensinado.

    Você ainda nem ao menos sabe o que são "variáveis", que é um coisa que anda muito junto com condições, portanto, você aprenderá em seguida e logo logo voltará a se aprofundar mais em condições.




    Mas antes, você terá um pequeno "tutorial" (que é mais um ensinamento opcional) explicando um pouco sobre o funcionamento de um PC (de uma maneira bem legal), e em seguida, você aprenderá o que são as tais "variáveis".


    Próxima parte:
    8. Bits & Bytes


    ____________________
    avatar
    Ayakashii
    Mensagens Nível 2
    Mensagens Nível 2

    Mensagens : 51
    Reputação : 16
    Desde : 01/03/2017
    Idade : 19
    Localização : Uɴᴋɴᴏᴡɴ

    Re: 7. Condições

    Mensagem por Ayakashii em Qui 02 Mar 2017, 17:54

    Isso está certo?
    Spoiler:

    Código:
    SCRIPT_START
    {
    NOP

    photo:
    WAIT 0
    IF IS_KEY_PRESSED VK_INSERT
        TAKE_PHOTO 1
        WHILE IS_KEY_PRESSED VK_INSERT
            WAIT 0
        ENDWHILE
    ENDIF

    GOTO photo

    }
    SCRIPT_END
    avatar
    israel
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Mensagens : 655
    Reputação : 111
    Desde : 22/09/2015
    Idade : 19
    Localização : Salvador - BA

    Re: 7. Condições

    Mensagem por israel em Qui 02 Mar 2017, 22:33

    Está.


    ____________________
    " Everyone gonna remember my name ! "
    avatar
    Ayakashii
    Mensagens Nível 2
    Mensagens Nível 2

    Mensagens : 51
    Reputação : 16
    Desde : 01/03/2017
    Idade : 19
    Localização : Uɴᴋɴᴏᴡɴ

    Re: 7. Condições

    Mensagem por Ayakashii em Sex 03 Mar 2017, 07:33

    @israel escreveu:Está.
    Ok, vlw :)
    avatar
    Thefast
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 11
    Reputação : 0
    Desde : 23/04/2017

    Re: 7. Condições

    Mensagem por Thefast em Qua 26 Abr 2017, 19:49



    está certo ?
    avatar
    israel
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Mensagens : 655
    Reputação : 111
    Desde : 22/09/2015
    Idade : 19
    Localização : Salvador - BA

    Re: 7. Condições

    Mensagem por israel em Qua 26 Abr 2017, 20:27

    Na verdade não, pois vai criar vários carros enquanto a tecla estiver pressionada. Use um loop para aguardar o player soltar a tecla.


    ____________________
    " Everyone gonna remember my name ! "
    avatar
    Thefast
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 11
    Reputação : 0
    Desde : 23/04/2017

    Re: 7. Condições

    Mensagem por Thefast em Qua 26 Abr 2017, 20:47

    @Thefast escreveu:

    está certo ?
    creio que está se referindo ao while né isso , sim não usei porque ainda estou as partes da condições e não tinha chegado no loop while ainda rsrsr , mais acho que agora deu certo

    Code:
    avatar
    vmrgbk
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 5
    Reputação : 0
    Desde : 14/05/2017
    Idade : 16
    Localização : Paracatu

    Re: 7. Condições

    Mensagem por vmrgbk em Dom 14 Maio 2017, 12:27

    Acho que vou ficar aqui na página 7/8, até que eu memorize os códigos e as funções dos mesmos, o que vcs acham ? pokerface
    avatar
    Fabio
    Programador - Avançado
    Programador - Avançado

    Título : CEO da Fabio's Gambiarra Industries
    Mensagens : 18541
    Reputação : 338
    Desde : 04/05/2012
    Idade : 20
    Localização : Reserva, Paraná, Brasil, América Latina, America do Sul, América, Planeta Terra, Sistema Solar, Via láctea, Universo
    Link : gtamodvicio.blogspot.com

    Re: 7. Condições

    Mensagem por Fabio em Dom 14 Maio 2017, 13:18

    @vmrgbk escreveu:Acho que vou ficar aqui na página 7/8, até que eu memorize os códigos e as funções dos mesmos, o que vcs acham ? pokerface

    A melhor forma de memorizar é ir fazendo exercícios e testando no jogo. :)


    ____________________

    Modifico quase qualquer coisa.   :)
    ------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

    Meu PC:
    Spoiler:

    Configurações PC:
    *Processador: Intel Core i7 4790K 4.00GHz LGA1150
    *Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
    *HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
    *HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
    *Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
    *RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
    *Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
    *Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
    *Monitor: LG 23MP55HQ Full HD HDMI 23'

    Conteúdo patrocinado

    Re: 7. Condições

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qua 24 Maio 2017, 04:58