Concluindo esta parte você vai:
Aprender como usar a funcionalidadeREQUIRE
; suas aplicações, limitações etc.
O que diabos é isto?
Rapidamente falando,
REQUIRE
é um comando (mas não um opcode) que adiciona um arquivo de script externo para dentro do seu script.Os arquivos são encontrados dentro de uma pasta com o mesmo nome do .sc do seu script. Ou seja, se você está trabalhando no arquivo
Example.sc
, o REQUIRE
irá procurar por arquivos numa pasta chamada Example
no mesmo lugar onde o seu Example.sc
está.Eu já lhe adianto, não é tão útil quanto poderia ser.
O que mais importa aqui, é entender o que é "adicionar"...
Vamos direto para um exemplo:
Eu tenho o arquivo
Example.sc
do meu script na pasta CLEO
com o seguinte conteúdo:Código: Selecionar tudo
SCRIPT_START
REQUIRE Randomize.sc
{
LVAR_INT i
NOP
main_loop:
WAIT 0
IF IS_KEY_PRESSED VK_KEY_R
IF CLEO_CALL Randomize 0 (50)
PRINT_STRING_NOW "True" 500
ELSE
PRINT_STRING_NOW "False" 500
ENDIF
WHILE IS_KEY_PRESSED VK_KEY_R
WAIT 0
ENDWHILE
ENDIF
GOTO main_loop
}
SCRIPT_END
CLEO\Example
e adicionei o arquivo Randomize.sc
, que tem o seguinte conteúdo:Código: Selecionar tudo
{
/*
Usage:
IF CLEO_CALL Randomize 0 (percent)
Example:
IF CLEO_CALL Randomize 0 (50) // 50% of chances to return true
*/
LVAR_INT iPercent // In
LVAR_INT iRandom
Randomize:
GENERATE_RANDOM_INT_IN_RANGE 1 101 (iRandom)
IS_THING_GREATER_OR_EQUAL_TO_THING iPercent iRandom
CLEO_RETURN 0
}
R
e haverá 50
% de chances de aparecer a mensagem "True"
.Perceba que eu tenho uma função
Randomize
num arquivo separado, e eu o incluí dentro do meu script principal usando a linha REQUIRE Randomize.sc
no topo.Com isto o seu script principal fica menor, pois você pode usar funções separadas num outro arquivo!
Limitações? Não precisa se importar com isto. Você pode usar quantos
REQUIRE
quiser, não se importando com o número de funções dentro de cada arquivo, e ainda por cima, você pode adicionar os arquivos em sub-pastas! O compilador irá encontrar facilmente, desde que o arquivo tenha a extensão .sc
.No entanto, é importante você entender que o
REQUIRE
não copia o conteúdo do arquivo externo para o seu script principal, mas sim compila ele e o adiciona no final do seu script.Se você já trabalhou com o Sanny Builder, o
REQUIRE
é diferente do {$include}
!!!O que há de diferente do
REQUIRE para o
{$Include}` do Sanny Builder?Esta deve ser a minha maior reclamação contra o GTA3script, pois o
REQUIRE
não é tão útil comparado ao {$include}
do Sanny Builder, algo que eu sinto falta e espero que seja adicionado futuramente.{$include}
realmente copia o conteúdo do arquivo para o lugar onde você usou a linha, diferente do REQUIRE
que o código é compilado e adicionado no final do arquivo.Ou seja, as variáveis, constantes etc definidas dentro do arquivo, no
REQUIRE
, não existem no script principal. Infelizmente, pois no Sanny Builder eu gostava de usar vários arquivos include com constantes, algo semelhante à arquivos .h de programações C. Tuning Mod v3 por exemplo foi criado com quase 90 arquivos include (edit: já passou agora).Isto quer dizer que o
REQUIRE
é útil principalmente para funções de CLEO_CALL
, mas também pode ser usado para GOSUB
(com cuidado).Atualização: Eu fui usar vários
REQUIRE
no meu mod Urbanize, e tive problemas graves onde em vez de chamar um CLEO_CALL chamava outro, sinceramente, todo esse sistema é horrível. Eu só pude usar corretamente caso somente 1 REQUIRE
, mais de 1 causava problemas.Lembrando que praticamente tudo do nosso GTA3script foi convertido do GTA3script original da Rockstar North, portanto isto não foi escolha de design, o objetivo do LINK/2012 foi fazer uma "cópia" da programação original, mas nada impede que algo melhor seja adicionado como extensão.
Próxima parte:
(em breve)