Fórum Lost Gamer

Versão completa: Modificando com veículos
Esta é uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Neste tutorial, você aprenderá como adicionar suporte ManureSystem ao seu mod colocável.

O que eu preciso?

Para executar com sucesso as etapas exigidas neste tutorial, você precisará dos seguintes programas:
  • Editor de texto ([Para ver os links, por favor se registre no fórum aqui ou faça seu login aqui], [Para ver os links, por favor se registre no fórum aqui ou faça seu login aqui] ou outro programa equivalente...)
  • [Para ver os links, por favor se registre no fórum aqui ou faça seu login aqui] ou software 3D que suporta o GIANTS Exporter (Maya, blender ...)
  • Conexão com a Internet para baixar fontes do GitHub

Para colocáveis (não colocáveis construídos no mapa), você também precisa de um script extra para verificar se o ManureSystem existe. Você precisará obter uma cópia do arquivo ManureSystemAvailabilityCheck.lua mais recente, que pode ser encontrado no repositório [Para ver os links, por favor se registre no fórum aqui ou faça seu login aqui].

Se o seguinte link de [Para ver os links, por favor se registre no fórum aqui ou faça seu login aqui] não funcionar, você pode seguir as seguintes etapas sobre como baixar o arquivo ManureSystemAvailabilityCheck.lua:

  1. Vá para a pasta docs localizada no diretório raiz.
  2. Clique no arquivo ManureSystemAvailabilityCheck.lua.
  3. Uma janela será aberta com o arquivo de script.
  4. Clique no botão Raw ao lado do botão Blame e o arquivo será aberto no formato RAW.
  5. Clique com o botão direito e clique em salvar como (ou pressione ctrl - s no teclado) e salve o arquivo no local preferido em seu mod.

LEMBRE-SE: Renomeie a extensão do arquivo para .lua e não salve como .txt!

Adicionando a especialização ManureSystemVehicle

Citar:Para iniciar esta etapa, você precisa ter concluído a parte O que eu preciso?.

DICA: quando você não planeja adicionar especializações extras além do ManureSystemVehicle e seu mod usa o tipo de veículo manureBarrel, você não precisa necessariamente adicionar ManureSystemVehicle.lua, pois o ManureSystem insere as especificações por padrão para o tipo de veículo manureBarrel

Passo 1

Abra o arquivo modDesc.xml localizado no diretório mod.

Para carregar a especialização, você precisará adicionar a entrada de especializações ao modDesc.
<specializations>
    <specialization name="manureSystemVehicle" className="ManureSystemVehicle" filename="ManureSystemVehicle.lua"/>
</specializations>

O nome do arquivo deve ser a localização exata do arquivo ManureSystemVehicle.lua que você baixou anteriormente. Nesse caso, ele é carregado do diretório raiz do mod.

Se já existir uma entrada semelhante, você pode simplesmente adicionar a entrada de especialização a ela.
<specialization name="manureSystemVehicle" className="ManureSystemVehicle" filename="ManureSystemVehicle.lua"/>

Passo 2

Agora precisamos adicionar a especificação recém-carregada a um tipo de veículo.

No exemplo abaixo, nós parecemos do tipo de veículo baunilha manureBarrel para nossa conveniência. Isso também pode ser algo diferente dependendo do veículo que você está adaptando.

NOTA: Não copie e cole cegamente o parent neste caso, pois isso não servirá para todos os casos, mas apenas para manureBarrels em nosso exemplo.

Aqui, adicionamos o nome de especificação recém-registrado manureSystemVehicle.
<vehicleTypes>
    <type name="myNewBarrel" parent="manureBarrel" filename="$dataS/scripts/vehicles/Vehicle.lua">
        <specialization name="manureSystemVehicle"/>
    </type>
</vehicleTypes>

Copie o novo nome do tipo de veículo (em nosso caso, myNewBarrel) e feche o arquivo modDesc.

Passo 3

Abra o arquivo XML do seu veículo e procure a entrada type="" que pode ser encontrada na segunda linha do arquivo.

Que se parece com isto:
<vehicle type="manureBarrel">

Vamos renomear o tipo manureBarrel para nosso nome de tipo de veículo recém-adicionado que copiamos anteriormente na etapa 2:
<vehicle type="myNewBarrel">

Nota: se o seu veículo usa VehicleTypeConfigurations, você também precisa alterar os tipos lá!

Passo 4

Incrível, adicionamos a especialização ManureSystemVehicle ao seu mod!

Determine o que adicionar
Para informar ao ManureSystem quais especializações adicionar, você precisa adicionar a seguinte entrada ao XML do seu veículo.
<manureSystem />

Temos 4 opções/atributos que podemos definir aqui:
  • hasConnectors: true/false se o mod tiver conectores ManureSystem (por exemplo, acoplamentos, funis de encaixe)
  • hasPumpMotor: true/false se o mod tiver um motor de bomba ManureSystem
  • hasFillArm: true/false se o mod tiver um braço de preenchimento ManureSystem (por exemplo, braço de preenchimento normal ou braço de encaixe)
  • hasFillArmReceiver: true/false se o mod permitir que os braços de enchimento ManureSystem preencham seu fillVolume (por exemplo, contêineres)

Neste exemplo, vamos adicionar conectores, o motor da bomba e um fillarm. Para dizer isso ao mod ManureSystem, fazemos o seguinte:
<manureSystem hasConnectors="true" hasPumpMotor="true" hasFillArm="true"/>

Se o seu mod também precisar de suporte para o receptor fillarm, basta adicionar o atributo hasFillArmReceiver="true".

Configurando o PumpMotor

Citar:Para realizar esta etapa, você precisa se certificar de que configurou a entrada hasPumpMotor do capítulo Determine o que adicionar.

Para o motor da bomba, temos algumas possibilidades de configuração.
  • litersPerSecond: 250 [OPCIONAL - padrão: 100] os litros por segundo que a bomba pode processar com eficiência máxima.
  • toReachMaxEfficiencyTime: 1000 [OPCIONAL - padrão: 1000] o tempo em ms que a bomba precisa para atingir o rendimento máximo. (Este tempo é usado como ponto de partida e será influenciado com base na espessura do estrume ou comprimento da mangueira)
  • isStandalone: true/false [OPCIONAL - padrão: false] determina se a bomba funciona como uma bomba autônoma (portanto, uma bomba sem capacidade própria)
  • useStandalonePumpText: true/false [OPTIONAL - default: false] determina se o veículo deve usar o texto da bomba autônomo, que é diferente do texto da bomba padrão (esquerda / direita em vez de dentro / fora)

Você também tem a opção de usar um arquivo de som personalizado para a bomba. Um exemplo de entrada para uma bomba autônoma será:
<manureSystemPumpMotor isStandalone="true" litersPerSecond="250" toReachMaxEfficiencyTime="1000">
    <sounds>
        <pump template="SLURRY_02">
            <pitch indoor="0.85" outdoor="0.75"/>
        </pump>
    </sounds>
</manureSystemPumpMotor>

Aqui, dizemos que é uma bomba autônoma com o atributo isStandalone e com uma vazão da bomba de 250 litros por segundo e que leva 1 segundo para alcançar isso com os atributos litersPerSecond e toReachMaxEfficiencyTime. No exemplo acima, você também pode ver a entrada <sounds> onde usamos um modelo diferente para o nosso som de bomba.

Um exemplo de entrada para uma bomba tanque normal será:
<manureSystemPumpMotor litersPerSecond="195" toReachMaxEfficiencyTime="1050"/>

Tão simples como isso!

Configurando um nó

DICA: Por meio de todo o mod, você tem a opção de criar um nó com o atributo createNode ou a opção de se referir a um nó existente com o atributo node.

Essas opções, para a criação de nós, vêm com as seguintes configurações:
  • createNode: true/false [OPCIONAL - padrão: false]
  • Quando createNode é definido como true:
    • linkNode: 0> [OPCIONAL - padrão: 0>] é padronizado para o rootNode de seu objeto, mas permite definir um linkNode personalizado para nosso nó criar.
    • posição: 0 0 0 [OPCIONAL - padrão: 0 0 0] as traduções xyz do nó a ser criado.
    • rotação: 0 0 0 [OPCIONAL - padrão: 0 0 0] as rotações xyz do nó a ser criado.
  • Quando createNode é definido como false:
    • node: 0> [OBRIGATÓRIO] o index do nó que deve ser usado para o braço de preenchimento.

Configurando o FillArm

Citar:Para realizar esta etapa, você precisa se certificar de que configurou a entrada hasFillArm do capítulo Determine o que adicionar.

Para o braço de preenchimento, temos as seguintes possibilidades de configuração:
  • fillYOffset: float, por exemplo -0,5 [OPCIONAL - padrão: 0] o deslocamento para o braço de preenchimento em fontes preenchíveis (para alcançar lugares mais facilmente).
  • fillUnitIndex: int, por exemplo 1 [OPCIONAL - padrão: 1] o fillUnitIndex que deve ser preenchido.
  • needsDockingCollision: true/false [OPCIONAL - padrão: false] se o braço de preenchimento suporta encaixe e precisa da colisão necessária para isso.

Adicionando nó fillarm

Para configurar o nó fillArm, você tem a opção de criar um grupo de transformação manualmente ou deixar que o script cuide disso para você.

Verifique a seção de Configurando um nó para obter mais detalhes.

Um exemplo de entrada para criar um nó por meio do XML seria:
<manureSystemFillArm createNode="true" linkNode="armLinkNode" position="-0.888 0.7 3.065" rotation="0 -90 0" />

No exemplo acima, deixamos o ManureSystem criar um nó de braço de preenchimento e vinculá-lo ao armLinkNode fornecido e dar a ele uma posição e rotação personalizadas com os atributos de position e rotation.

Você não precisa usar esta opção e tem liberdade para escolher se deseja se referir a um nó existente que você mesmo colocou no arquivo i3d.

Citar:Pessoalmente, prefiro usar a configuração createNode, que permite evitar o i3d.

Um exemplo de entrada sem a opção de criar um nó seria:
<manureSystemFillArm node="armNode"/>

Nesse caso, o armNode será o nó a ser usado para preencher o braço, em vez do nó que criamos com a opção createNode acima.

Adicionando colisão de encaixe (necessário apenas para braços de encaixe)

Quando você define needsDockingCollision, o ManureSystem carrega uma colisão de dock em seu fillArm. Isso é necessário para permitir que veículos com funis detectem o braço de enchimento. Essa colisão pode não estar sempre nas posições corretas, pois, por padrão, ocorre nos mesmos locais que o nó do braço de preenchimento que você definiu anteriormente. Se você deseja compensar a posição ou rotação desta colisão de encaixe, você deve adicionar a entrada de colisão.

Será parecido com este:
<manureSystemFillArm node="armNode" needsDockingCollision="true">
    <collision position="0 0.1 0" rotation="90 0 0"/>
</manureSystemFillArm>

Na maioria dos casos, não é necessário definir a posição ou rotação na colisão.

Verificar

Você pode verificar se o braço de preenchimento está configurado corretamente no modo F5 (para física) com o comando msToggleDebug no console do desenvolvedor.
Citar:[Imagem: msToggleDebug.png]

Isso irá destacar as colisões e visualizar a linha de raycast (linha vermelha)
  • Para braços de encaixe, certifique-se de que o cubo de colisão esteja visível no final do fillarm. (Não é necessário para fillarms normais)
  • Para todos os fillarms (incluindo braços de dock), certifique-se de que a linha de raycast esteja apontando para longe de seu nó de fillarm, como mostrado na imagem, para obter os melhores resultados.
[Imagem: armCollisionAndRay.jpg]

Configurando o FillArmReceiver

Citar:Para realizar esta etapa, você precisa se certificar de que configurou a entrada hasFillArmReceiver do capítulo Determine o que adicionar.

Se você deseja configurar seu veículo para permitir a sucção do volume de enchimento, você precisará da opção FillArmReceiver.

Para o receptor de braço de enchimento, temos as seguintes possibilidades de configuração:
  • fillVolumeIndex: int, por exemplo 1 [OBRIGATÓRIO] O index fillVolume de onde os filarmes podem sugar.
  • fillUnitIndex: int, por exemplo 1 [OPCIONAL - padrão: 1] O index fillUnit de onde os filarmes podem sugar.
  • fillArmOffset: float, por exemplo 0.1 [OPCIONAL - padrão: 0] O deslocamento para fillarms estar dentro da faixa (isso pode ser usado para permitir o alcance de locais de difícil acesso).
<manureSystemFillArmReceiver fillVolumeIndex="1"/>

Se você deseja que os fillarms sugem de uma unidade de enchimento diferente, você pode simplesmente definir isso com:
<manureSystemFillArmReceiver fillVolumeIndex="1" fillUnitIndex="2"/>

Configurando os conectores

Citar:Para realizar esta etapa, você precisa se certificar de que configurou a entrada hasConnectors do capítulo Determine o que adicionar.
Citar:Este parágrafo ainda é um trabalho em progresso (T.E.P.).

Tipos de conectores

Os conectores são necessários para informar, por exemplo, mangueiras ou fillarms onde conectar. Simplesmente disse que faz a ponte entre as funções.

Atualmente, o mod suporta 4 tipos de conectores:
  • COUPLING (acoplamento da mangueira de esterco)
  • COUPLINGFERTILIZER (acoplamento da mangueira de fertilizante)
  • DOCK (funil)
  • OPTICAL (como o nome já sugere não funcional, apenas ótico)

Acoplamentos

Em nosso primeiro exemplo, veremos como adicionar um tipo de conector COUPLING ao nosso veículo; este exemplo também funciona para o tipo COUPLINGFERTILIZER.

Adicionando o nó do conector

Abra o XML do veículo e adicione a tag <manureSystemConnectors> como filha da tag vehicle.

Nossa etapa resultará nisso:
<manureSystemConnectors>
..
</manureSystemConnectors>

Substitua os .. (pontos) por uma entrada de conector. Para nossa primeira entrada de conector, usaremos um grupo de transformação de referência existente do arquivo i3d. Para isso abrimos o arquivo i3d e copiamos o index do nó desejado.
[Imagem: indexOfConnector.png]

Agora que encontramos nosso nó e copiamos o index, temos que adicionar uma entrada de conector à tag <manureSystemConnectors>.

O resultado será mais ou menos assim:
<manureSystemConnectors>
    <connector type="COUPLING" node="0>1|1|2|1"/>
</manureSystemConnectors>

Isso informa ao mod ManureSystem que o nó no index 0>1|1|2|1 é um COUPLING para mangueiras de esterco.

Para veículos, você também pode usar o identificador definido na seção i3dMappings, que é altamente recomendado!

Também podemos usar a opção de dizer ao ManureSystem para criar um nó (como mencionado em outros tutoriais).

DICA: Por meio de todo o mod, você tem a opção de criar um nó com o atributo createNode ou a opção de se referir a um nó existente com o atributo node.

Verifique a seção de Configurando um nó para obter mais detalhes.

Será mais ou menos assim:
<manureSystemConnectors>
    <connector type="COUPLING" linkNode="0>0|3" createNode="true" position="3.7 0.5 0.85" rotation="0 90 0" />
</manureSystemConnectors>

Isso criará um nó COUPLING vinculado ao nó no index 0>0|3 com a posição e rotação fornecidas.

DICA: para verificar se o nó está na posição correta, sugiro que você olhe no jogo e use o comando do console msToggleDebug, que irá destacar todos os nós do conector usados.

[Imagem: msToggleDebug.png]

Configurando opções de conector adicionais

Para cada tipo de conector, você terá as seguintes opções disponíveis:
  • inRangeDistance float, por exemplo 1.8 Isso determina a distância até que a mangueira possa ser conectada (útil para aumentar as possibilidades de conexão / desconexão em locais de difícil acesso)
  • isParkPlace: true/false Este sinalizador é usado para determinar se o conector é usado como um lugar de estacionamento (para mangueiras ou apenas conectores que devem se comportar como um lugar de estacionamento).

Configurando vagas na loja

Conforme mencionado acima, com a bandeira isParkPlace, o conector funcionará como um lugar de estacionamento.
  • comprimento (em metros) float, por exemplo 3 [OPCIONAL - padrão: 5] Isso determina para qual mangueira os parâmetros de local devem ter efeito.
  • string de direção, por exemplo left [OPCIONAL - padrão: right] Esta é a direção de colocação da mangueira.
  • string startTransOffset vector 3, por exemplo 1 0 0 [OPCIONAL - padrão: 0 0 0] Isso determina a translação inicial da mangueira na posição de estacionamento.
  • string startRotOffset vector 3, por exemplo 0 50 0 [OPCIONAL - padrão: 0 0 0] Determina a rotação inicial (em graus) da mangueira na posição estacionada.
  • endTransOffset vector 3 string, por exemplo 0 1 0 [OPCIONAL - padrão: 0 0 0] Determina a translação final da mangueira na posição de estacionamento.
  • endRotOffset vector 3 string, por exemplo 20 0 0 [OPCIONAL - padrão: 0 0 0] Determina a rotação final (em graus) da mangueira na posição estacionada.

Com o deformador, você pode compensar a curva da mangueira com um nó de transformação.
[Imagem: parkDeformerNode.png]

O nó deformer pode ser criado como qualquer outro nó com o sinalizador createNode ou referência a um nó existente com o atributo node. Verifique a seção de Configurando um nó para obter mais detalhes.

DICA: Por meio de todo o mod, você tem a opção de criar um nó com o atributo createNode ou a opção de se referir a um nó existente com o atributo node.

Abaixo um exemplo de configuração com suporte para mangueiras de 3 e 5 metros.
<connector type="COUPLING" node="0>15|0" isParkPlace="true">
    <parkPlaces>
        <parkPlace length="3" startTransOffset="0 0 0" startRotOffset="0 0 0" endTransOffset="0.2 -0.45 0" endRotOffset="-25 0 0">
            <deformer linkNode="0>15|0" createNode="true" position="0.005 -0.026 1.633"/>
        </parkPlace>
        <parkPlace length="5" startTransOffset="0 0 0" startRotOffset="0 0 0" endTransOffset="0.5 -1 0" endRotOffset="-15 0 0">
            <deformer linkNode="0>15|0" createNode="true" position="0.012 -0.078 1.856"/>
        </parkPlace>
    </parkPlaces>
</connector>

Sistema de parque antigo (DESCONTINUADO)

Citar:Use o novo sistema descrito acima.
  • parkOffsetThreshold (em metros) float, por exemplo 3 [OPCIONAL - padrão: o comprimento do local do parque] Isso determina quando a deformação deve entrar em vigor (obsoleto)
  • parkPlaceLength (em metros) float, por exemplo 3 [OPCIONAL - padrão: 5] Isso determina para qual mangueira os parâmetros de local devem ter efeito.
  • parkDirection string, por exemplo left [OPCIONAL - padrão: right] Esta é a direção de colocação da mangueira.
  • parkStartTransOffset vector 3 string, por exemplo 1 0 0 [OPCIONAL - padrão: 0 0 0] Isso determina a translação inicial da mangueira na posição de estacionamento.
  • parkStartRotOffset vector 3 string, por ex. 0 50 0 [OPCIONAL - padrão: 0 0 0] Determina a rotação inicial (em graus) da mangueira na posição estacionada.
  • parkEndTransOffset vetor 3 string, por exemplo 0 1 0 [OPCIONAL - padrão: 0 0 0] Determina a translação final da mangueira na posição de estacionamento.
  • parkEndRotOffset vector 3 string, por ex. 20 0 0 [OPCIONAL - padrão: 0 0 0] Determina a rotação final (em graus) da mangueira na posição estacionada.

Abaixo um exemplo com os antigos parâmetros de estacionamento em linha:
<connector type="coupling" node="parkNode" isParkPlace="true" parkPlaceLength="5" parkOffsetThreshold="5" parkEndTransOffset="-0.01 -0.175 0" parkEndRotOffset="-13 0 0" />

Adicionando a animação do conector

NOTA: Ao usar conjuntos compartilhados, a animação já está concluída, portanto, não há necessidade de adicionar entradas para conectores de conjuntos compartilhados!

Os tipos de conectores COUPLING e COUPLINGFERTILIZER possuem suporte de animation para travar a mangueira e abrir o fluxo de dejetos. Isso é feito nas conhecidas animações de veículos.

Por causa do tutorial, presumo que você saiba como adicionar animações de veículos.

Para animações de veículos, o conector oferece suporte a duas entradas:
  • lockAnimationName: string, por exemplo myAnimationName este é o nome da animação da entrada da animation no xml
  • manureFlowAnimationName: string, por exemplo myAnimationName este é o nome da animação da entrada da animation no xml

A animação de bloqueio é uma animação que é acionada quando a mangueira se conecta ao conector. Fluxo de estrume é uma animação que é acionada quando o jogador interage com o conector para abrir o fluxo de estrume.

Para o exemplo de entrada de conector, adicionei uma entrada de animação ao meu veículo para a animação de travamento.

Isso se parece com isto (não copie cegamente):
<animations>
    <animation name="lockCoupling">
        <part node="handleBack" startTime="0" endTime="0.5" startRot="-145 0 0" endRot="-15 0 0"/>
        <part node="lockBack" startTime="0" endTime="0.5" startRot="-31 -90 0" endRot="-15 -90 0"/>
        <part node="lockPartBack" startTime="0" endTime="0.5" startRot="-7.5 0 0" endRot="-15 0 0"/>
    </animation>
</animations>

Acima, vemos uma entrada de animação com o nome lockCoupling, temos que lembrar esse nome porque, para dizer ao ManureSystem para reproduzir essa animação quando o jogador anexa / desconecta a mangueira.

Para fazer isso, vamos definir o atributo lockAnimationName em nosso conector. Isso resultará na seguinte entrada:
<manureSystemConnectors>
    <connector type="COUPLING" node="refBack" lockAnimationName="lockCoupling"/>
</manureSystemConnectors>

No exemplo acima, a animação com o nome lockCoupling será reproduzida para a animação de travamento da mangueira.

O mesmo pode ser feito com o fluxo de estrume, que exigirá que você adicione o atributo manureFlowAnimationName adicional no conector.

Como:
<manureSystemConnectors>
    <connector type="COUPLING" node="refBack" lockAnimationName="lockCoupling" manureFlowAnimationName="flowCoupling"/>
</manureSystemConnectors>

O flowCoupling será outra entrada de animação como o lockCoupling.

NOTA: lockAnimationName funciona com e sem manureFlowAnimationName, mas manureFlowAnimationName requer o lockAnimationName!

Adicionando o conector dock

T.E.P.

Trabalho com conjuntos compartilhados

T.E.P.

Configurando a mangueira de transferência.

A configuração da mangueira de transferência (por exemplo, com o mod Zunhammer FANT) é como qualquer outra entrada de destino da mangueira de conexão. O sistema de adubo apresenta dois novos tipos de mangueira:
  • TRANSFER_HOSE (a mangueira real)
  • TRANSFER_HOSE_CABLE_BUNDLE (conjunto de linhas hidráulicas)

A fim de preparar seu caminhão-tanque para receber a mangueira de transferência, você terá que adicionar as seguintes entradas no final da etiqueta connectionHoses.
<connectionHoses>
    <target attacherJointIndices="1" type="TRANSFER_HOSE" node="INDEX TO NODE" straighteningFactor="2" socket="TRANSFER_HOSE"/>
    <target attacherJointIndices="1" type="TRANSFER_HOSE_CABLE_BUNDLE" node="INDEX TO NODE" straighteningFactor="2" socket="TRANSFER_HOSE_CABLE_BUNDLE"/>
</connectionHoses>

Substitua o 'INDEX TO NODE' por um índice de nó real (nomeado).

Com o ManureSystem também é possível criar um nó nas entradas de destino connectionHose. Verifique a seção de Configurando um nó para obter mais detalhes.

Isso resultará em algo semelhante ao seguinte:
<connectionHoses>
    <target attacherJointIndices="1" type="TRANSFER_HOSE" createNode="true" linknode="0>" position="0 1 1" rotation="0 180 0" straighteningFactor="2" socket="TRANSFER_HOSE"/>
    <target attacherJointIndices="1" type="TRANSFER_HOSE_CABLE_BUNDLE" createNode="true" linknode="0>" position="0 1 1" rotation="0 180 0" straighteningFactor="2" socket="TRANSFER_HOSE_CABLE_BUNDLE"/>
</connectionHoses>