[PT] Extras Recursivos

Valdir da Costa Júnior edited this page Jan 8, 2019 · 21 revisions

Novo sistema de extras (variações)

Utilidade

Antes de prosseguir não deixe de ler a Introdução.

A atual sistema de variação de peças de veículos do GTA SA é muito limitado. Esta função visa eliminar estes limites.
Funciona em um sistema totalmente novo (sem substituir o atual sistema de extras do jogo), proporcionando muitas vantagens.

Pontos fortes:

  • Quantidade ilimitada de peças extras (originalmente é somente 6);
  • Extras em literalmente qualquer parte do veículo, podendo variar portas, para-choques, rodas etc, incluindo danos funcionais. Isto possibilita a criação de diferentes veículos no mesmo arquivo;
  • Sistema recursivo: Quando um extra ser selecionado, ele selecionará um filho, e assim por diante, criando um "agrupamento" onde um extra só aparecerá caso o outro aparecer;
  • Você pode definir quantos extras de cada agrupamento serão selecionados;
  • Possibilidade de adicionar extras também em trens (originalmente é possível em todos os tipos de veículos, exceto trens);
  • Pode ser usado em conjunto com o sistema de Características para criar variar características de um veículo.

Pontos ruins:

  • Caso o jogador que baixar o seu mod de veículo não ter VehFuncs instalado, todos os extras ficarão visíveis por padrão.
  • Utilizar extras em para-choques ou rodas, ao instalar uma peça tuning no para-choque ou na roda, deletará aqueles extras.

Básicos

A sintaxe básica é a seguinte: A imagem acima é auto-explicativa e já ensina todo o básico de como funciona.
Tenha a nota de que o nome "extra" é só exemplo, pode ser qualquer outra coisa.

Antes de prosseguir quero deixar claro que o sistema é muito flexível e conveniente, você não precisa usar muito a memória, inclusive, os nomes das funções podem ser escritos em qualquer ordem e como você bem entender. De fato, cada node nem precisa ter algum modelo visível dentro dele.

Se você quer fazer variações de roda, você precisa também ler sobre Rodas Variáveis. Veja uma imagem

Gatilho 'f_extras'

f_extras é um "gatilho", ou seja, um node que representa o ponto inicial; ele sempre será visível, no entanto, não precisa existir nenhum modelo dentro dele, pode ser simplesmente um dummy (ou seja, um node vazio).
Todos os filhos do f_extras serão considerado "extras". Tenha a nota de que eles podem ter absolutamente qualquer nome, não precisam se chamar "extras" como na imagem acima.

Sufixo ':'

Leia isso como "selecione X filhos", por exemplo :2 selecionará 2 filhos; :1 selecionará 1 filho (o que é o padrão); :0 pode ser que selecione 1, ou nenhum.
Como dito, se você não usar o : por padrão selecionará 1 filho, mas se o pai tem somente 1 filho? Então terá 50% de chances do filho ser selecionado. Para forçar que o filho único sempre seja selecionado (100% de chance), use o sufixo :1 no pai. Como dito, você pode usar :0 para criar uma chance de selecionar nenhum filho. Por exemplo, há 3 filhos e você quer que selecione um deles, mas também deseja que tenha uma chance de selecionar nenhum deles, basta usar :0 no pai.
Mas provavelmente o que você mais usará é o :0+ ou :1+. Para entender, o + no fim quer dizer literalmente "aleatorize até a quantidade máxima", ou seja, se você usar :0+, selecionará nenhum, ou um, ou alguns, ou todos os filhos! Assim como :1+ selecionará pelo menos um, ou alguns, ou todos. Em resumo, o número após o : quer dizer "selecione no mínimo isto" e o + quer dizer "...aleatoriamente até o máximo possível".

Danos (damage)

É possível usar os extras dentro de peças danificáveis, como bump_front_dummy, basta adicionar normalmente dentro dele e incluir _ok ou _dam no fim do nome da peça extra conforme necessário.
É importante lembrar que ainda é necessário haver as peças de damage originais. Ou seja, neste exemplo, ainda é necessário que o seu carro tenha algum bump_front_ok e bump_front_dam senão o damage será completamente desativado, mas não coloque-os dentro do f_extras pois não funcionará corretamente. Veja aqui um exemplo correto de uso.
Perceba que o VehFuncs trata os nodes _ok e _dam como peças extras normais, não faz nenhuma ligação entre os dois, portanto normalmente você organizará eles como irmãos tendo um pai :2, conforme a imagem acima, e abaixo:

Características

É possível utilizar o sistema de Características junto com extras, assim possibilitando o veículo ter certas características baseadas em quais extras foram selecionados.

No exemplo acima,

  • O mod selecionará aleatoriamente o extra gás ou carga;
  • Caso selecionar o gás, também aplicará um ID personalizado ao motorista (190) configurado no drv=190 ("drv" de "driver") e a paintjob 1 configurado no pj=1 (de "paintjob"), que seria uma pintura de caminhão de gás;
  • E o que é aquele :2? É quantos extras filhos serão selecionados;
  • Neste caso, os filhos do extra gás são botijões e interior, selecionará os 2;
  • botijões tem 2 extras que contém variações de botijões, será selecionado e aparecerá 1 deles;
  • Interior tem 3 extras e está configurado para selecionar 2 extras (:2), portanto selecionará 2 dos 3: revistas e/ou garrafas e/ou pédecabra. Caso selecionar garrafas, também há chance de selecionar copo;
  • E caso não ser selecionado o gás? Será selecionado carga;
  • Selecionando carga, o script aplicará um motorista personalizado de ID 160 ou 161;
  • E temos 2 extras: móveis e entulho, onde caso for selecionado entulho, aplicará entre 7 e 9 níveis de sujeira ("drt", de "dirty" em inglês) (a configuração vai de 0 à 9).

Se você achou confuso, tudo bem, no fim da página há um exemplo mais fácil, mas é também importante que você entenda o básico deste.

Leia mais sobre Características.

Seleção de categoria

Certo, aprendemos a colocar extras em algum lugar do carro, mas como se comunicar entre diferentes partes do carro?
Afinal, por exemplo, queremos que caso uma escada aparecer no teto (chassis) apareça adesivo nas portas.


No exemplo acima temos f_class que selecionará unofirma ou unovelho. Caso unofirma ser selecionado, será definido a categoria [unofirma].
Ao processar os extras da porta, poderá ser aplicado o adesivofirma[unofirma]. Tenha a nota de que no exemplo há uma chance de 50% do adesivo ser aplicado ou não. Se você quer forçar que o adesivo sempre apareça caso a categoria [unofirma] tenha sido selecionada, no f_extras_ok e f_extras_dam, deixe f_extras:1_ok e f_extras:1_dam, assim sempre selecionará, como explicado acima.

É possível criar diferentes versões/modelos do carro dentro do mesmo .dff, como no exemplo:

Você também pode colocar características logo no nome da categoria/class, assim as características serão aplicadas logo caso a tal class ser escolhida.

É também possível fazer seleção de várias categorias em vez de somente uma.

Perceba que você pode usar : e + no f_class.
O _reset faz o que o nome diz: limpa todas as categorias antigas para selecionar somente as novas.

Gostaria de controlar as chances de cada categoria aparecer? Você também pode, basta usar [#] no nome da categoria dentro do f_class.

Neste exemplo, a classe com nome normal será a mais comum, enquanto a construct terá a metade das chances de aparecer ([50]) comparada à normal ([100]).
Perceba que o número vai de 1 à 100, mas utilizar 100 não quer dizer que aparecerá "100% das vezes". É recomendado que você utilize [100] na classe mais comum e a partir disto escolha os outros números para as outras menos comuns.
Se você não informar um valor o mod considerará como 100.

Importante:

  • Só é suportado uma categoria por node: peca[class1][class2] está errado.
  • Os nodes são processados de cima para baixo, portanto a seleção de categoria deve ficar em cima, de preferência no topo da hierarquia do modelo.
  • O mod considerará _ como o final do nome da categoria, ou seja, não use _ para o nome da categoria, use somente uma palavra. Após o _ normalmente você usará características.
  • É necessário que o node tenha algum nome em vez de somente o nome da categoria (aparentemente isto é um bug do ZModeler e não é necessário no 3DS Max). Por exemplo [exemplo] é errado; peca[exemplo] é certo, até mesmo _[exemplo] e 1[exemplo] estão certos.

E o que acontece se termos irmãos de mesma categoria?
Caso exista 2 nodes irmãos marcados com a mesma categoria, o funcionamento de escolha dos extras será exatamente o mesmo entre eles. No entanto, caso você definiu o sufixo ":" como um número maior do que o total de irmãos, primeiramente será selecionado entre os irmãos da mesma categoria, e em seguida selecionará normalmente os nodes que sobrou que não tenham categoria (bem conveniente, não?).

Veja um último exemplo semelhante ao que vimos antes. Dentro do ZModeler:

Exemplos

Trator + Carreta

Utiliza o sistema de extras. Na carreta é um ótimo exemplo de :1+.
Download

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.