Este guia explica como codificar no Ficterra. Apresenta Miniscript, conceitos básicos de codificação, gatilhos e alguns exemplos de coisas comuns que você pode querer fazer.
Iniciando
Vamos começar adicionando um arquivo de código ao seu mod. Para adicionar algum código ao seu mod, clique no painel Código no menu principal do seu Mod e clique em novo arquivo no painel esquerdo. Dê um nome ao seu arquivo de código e clique em salvar.
O Editor de Código tem várias seções
- Superior Direita – Nome do seu mod
- Painel Esquerdo – Lista dos arquivos de código deste mod
- Topo – Nome do arquivo de código selecionado
- Middle – Seu arquivo de código selecionado, com números de linha para referência
- Inferior – Status de compilação – informa se seu código compila bem (“Compilado com sucesso”) ou informa o problema que seu código possui (exceções em tempo de compilação)
A seção do meio com seu código é um editor de texto com realce de sintaxe. O texto que você digita aqui é compilado e incluído no seu mod. Criar um mundo ou carregar um mundo antigo com seu mod faz com que esse código seja executado. Você pode vincular funções que cria a um evento e essas funções serão executadas quando o evento for acionado. O código do seu mod é separado do código de outros mods e do código do jogo (sandboxed).
Se houver um erro de tempo de execução em seu código, isso não deve afetar a forma como o jogo é executado normalmente.
Miniscript
A linguagem de codificação que o Ficterra usa para mods é Miniscript. “MiniScript é moderno, elegante, fácil de aprender” de acordo com seu site. Você pode conferir aqui: Miniscrito.
O site tem um monte de documentação e referências para ajudar a entender os meandros da linguagem.
Este guia abordará algumas ideias básicas de programação, codificação em miniscript e como trabalhar com a API Ficterra. Você pode encontrar o resumo de uma página do idioma aqui: Resumo.
Para acompanhar os dados, você pode atribuir variáveis:
x = 5 nome = "Meu nome"
Miniscript é tipado dinamicamente, então você não precisa declarar o tipo. String/palavras são cercadas por aspas duplas.
Para chamar funções que fazem coisas
wait(5) name.len log(32,2)
Você não precisa de parênteses se sua função não receber valores. Se a função usa um único valor como wait (que espera o número de segundos dado), coloque-o entre parênteses. Se você tiver vários valores como um log, coloque entre parênteses e use vírgulas (,) entre os valores.
Para criar suas próprias funções, você atribui uma variável e usa as palavras-chave de função:
myFunc = function(a, b) //função de coisas vai aqui end function
Em seguida, use myFunc(x,y) para executar a função. Você pode usar @myFunc para se referir à própria função; isso é usado em gatilhos de eventos
Se você quiser fazer coisas, mas apenas sob certas condições, use instruções if.
if x < 4 then name = "Número pequeno" else if x < 20 then name = "Número médio" else name = "Número grande" end if
API Ficterra
A API do Ficterra permite que você interaja com o Ficterra a partir de seus arquivos de código. Para este guia, vamos examinar apenas alguns comandos comuns.
- anunciar(texto) – Mostra o texto na tela
- runCommand(command) – Você pode executar qualquer comando que digitar no prompt do jogo. Isso leva uma string
- getItemId(itemName) – Retorna o id exclusivo de um item com base em seu nome. Muitas das funções na API do Ficterra usam ids para eficiência, então você vai querer converter em um id para elas. Os ids NÃO são os mesmos entre mundos com mods diferentes. Como tal, você nunca deve usar ids como números brutos no código de ids que você observou em seu jogo.
Também existem funções semelhantes para jogador, pesquisa, missões e cubos
Aqui estão algumas funções que afetam diretamente os jogadores:
- getLocalPlayer() – retorna um objeto player para seu player
- player.giveItem(itemId, valor) – dá um item a um jogador da quantidade especificada
- player.respawn() – faz o jogador reaparecer até o ponto de reaparecimento mais próximo. Você pode usar isso para reiniciar o progresso do jogador ou 'forçar a morte'. Com locais de spawn colocados no mundo, você pode controlar onde eles renascem.
- player.setCurrentStat(stat, value) / player.setMaxStat(stat,value) – permite alterar as estatísticas de um jogador. Você pode aumentar sua velocidade de movimento, dar-lhes saúde, deixá-los carregar mais, etc.
- takeDamage(target, damage, damageType) – causa dano do tipo de dano a um alvo. O destino é um playerId ou um objectId
- createPlaceable(itemId, position) – cria um novo objeto placeable de itemId na posição
Eventos
Muitas vezes, queremos reagir aos jogadores quando eles realizam uma determinada ação. Depois que eles pegam um item, entram em um bioma, completam uma missão, entram em uma região, etc. Fazemos isso em código com eventos. A função de ligação (e bindToItem) permite que você chame suas próprias funções após a ocorrência de um desses eventos.
bind(event, func) – chame sua função 'func' após o evento acontecer. A lista de eventos está no guia da API do Ficterra, mas alguns comuns são Event.OnGainedItem, Event.OnCompletedQuest, Event.OnKilledMonster e Event.OnBiomeEntered
Um exemplo de chamada pode parecer
vincular(Event.OnBiomeEntered, @myFunc)
Isso fará com que myFunc seja chamado sempre que seu jogador entrar em um bioma. O símbolo @ permite que você faça referência à função sem chamá-la. As funções de evento recebem um único valor 'args' que contém dados relevantes para o evento. Nesse caso, args.id é o id do bioma que está sendo inserido e args .name é o nome do bioma que está sendo inserido.
bindToItem(itemEvent, func, itemId) – chama sua função 'func' depois que um evento de item acontece para um placeable com itemId. Isso permite vincular a ações específicas realizadas em objetos que podem ser colocados por seu item. ItemEvent.OnTriggerEntered e ItemEvent.OnInteract são alguns exemplos.
Exemplos
Exemplo 1: Conta de 1 a 10 e exibe os resultados na tela. Ele espera 1 segundo antes de mostrar o próximo número. Este exemplo mostra loops, intervalos, anúncio e espera. Como isso não está em uma função, ele será executado apenas quando o jogo iniciar
Exemplo 2: Isso mostra como os eventos funcionam. Criamos nossa função hasDirt para imprimir se o player tem sujeira ou não. Obtemos o inventário do jogador local e usamos uma instrução if com hasItem para determinar qual instrução anunciar. Como isso está em uma função, ele não será executado a menos que seja chamado. As duas linhas inferiores usam 'bind' para fazer com que os eventos OnGainedItem e OnRemovedItem chamem hasDirt quando forem acionados. Usamos @hasDirt para fazer referência à própria função em vez de chamá-la.
Exemplo 3: Aqui alteramos algumas das estatísticas do jogador. Definimos o status máximo primeiro, depois o status atual. Isso é especialmente importante para estatísticas como saúde, onde se você apenas aumentar a estatística máxima, eles terão que curar o resto do caminho. Este exemplo define a velocidade do jogador para 2 e seu limite de transporte para 1000.
Exemplo 4: Este exemplo dá ao jogador uma recompensa aleatória quando ele entra em um bioma. Usamos o evento OnBiomeEntered para acionar nossa função. A função rnd() para gerar um número aleatório entre 0 e 1, que usamos para determinar a recompensa. Em seguida, usamos giveItem para dar ao jogador a recompensa que queremos.
Exemplo 5: Mudamos o múltiplo de velocidade de movimento na grama para 4. Quando um jogador caminha sobre ela, ele se move 4 vezes mais rápido. É assim que funcionam os cubos de caminho no jogo.
Exemplo 6: Aqui nós configuramos para que quando um jogador abra um baú ele toque música. A função bindToItem nos permite vincular nossa função ao item Chest e quando o evento OnInteract acontece. Em nossa função, escolhemos aleatoriamente um arquivo de música e o reproduzimos. Isso substituirá qualquer música que esteja tocando no momento.
Exemplo 7: O último exemplo mostra como manter o estado entre as jogadas. Damos ao jogador um cubo de tijolos sempre que ele entra em um bioma pela primeira vez. Ao contrário do exemplo 4, rastreamos os biomas em que o jogador entrou e não damos uma recompensa se ele já esteve lá antes. Também salvamos essas informações no PlayerStorage. Dessa forma, se eles carregarem o jogo em outro momento, ele ainda terá a lista de biomas que visitaram na sessão de jogo anterior. Este exemplo mostra arrays, salvando, carregando e acessando PlayerStorage.
Isso é tudo o que estamos compartilhando hoje para isso Fiterra guia. Este guia foi originalmente criado e escrito por diversões do norte. Caso não consigamos atualizar este guia, você pode encontrar a atualização mais recente seguindo este link.