Fórum Lost Gamer
Objetos de mapa - Versão de Impressão

+- Fórum Lost Gamer (https://forum.lostgamer.com.br)
+-- Fórum: Farming Simulator 19 (https://forum.lostgamer.com.br/forumdisplay.php?fid=3)
+--- Fórum: Ajuda (https://forum.lostgamer.com.br/forumdisplay.php?fid=17)
+---- Fórum: Tutoriais (https://forum.lostgamer.com.br/forumdisplay.php?fid=66)
+----- Fórum: Seasons (https://forum.lostgamer.com.br/forumdisplay.php?fid=72)
+------ Fórum: Criando mods com o Seasons (https://forum.lostgamer.com.br/forumdisplay.php?fid=75)
+------- Fórum: Mapas (https://forum.lostgamer.com.br/forumdisplay.php?fid=77)
+------- Tópico: Objetos de mapa (/showthread.php?tid=50)



Objetos de mapa - LuanTavares127 - 12-05-2021

Um mapa contém muitos objetos, incluindo casas, estradas, árvores, mas também semáforos e outras decorações. O jogo vanilla permite o uso de "admirers" para dar certo comportamento aos objetos. Um bom exemplo é o Nightlight2: ele torna o objeto visível durante a noite e invisível durante o dia. Outro exemplo é o SunAdmirer, que torna um objeto visível apenas quando existe sol. (É invisível com mau tempo ou à noite.)

O Seasons adiciona um pouco mais desses "admirers" ao jogo, para permitir objetos sazonais, como um churrasco no verão ou uma lareira no inverno.

Como os admirers e objetos funcionam

Admirers são classes de objetos com um método onCreate. Você provavelmente já viu o termo onCreate antes. O método é chamado durante o carregamento de um mapa ou colocável se for especificado para um objeto.

O uso genérico de um admirer é o seguinte:
  • Selecione o objeto
  • No editor de atributos, adicione um novo atributo use do tipo script.
  • Nomeie o atributo onCreate
  • Dê ao atributo um valor na forma de modOnCreate.<admirer class>, como modOnCreate.IcePlane
  • Adicione quaisquer atributos que são usados pelo admirer usado.
Observe que adicionar tal script não mudará a aparência de um objeto. Os scripts são executados apenas durante a reprodução do mapa.

Padrões: compatibilidade vanilla

Ao testar seus admirers, você notará que, sem o Seasons em execução, os objetos não mudam de visibilidade. Isso ocorre porque o script para fazer isso não está disponível. Se um jogo encontrar uma chamada de script onCreate que não pode cumprir porque a classe não está disponível, ele será ignorado. Isso significa que não mudará o estado.

Se quiser que um objeto fique visível em um mapa quando o Seasons não estiver ativo, defina-o como visível no Giants Editor. Um bom exemplo é um churrasco. Se você quiser escondê-lo, como um boneco de neve, defina-o como invisível.

Existe mais um problema: as colisões. Definir um objeto invisível não desativa sua colisão. Isso ocorre por design. A solução aqui é simples:
  • Para objetos que você deseja ocultar quando o Seasons não está ativo:
    • Adicionar um novo atributo de usuário denominado collisionMask (inteiro)
    • Coloque o valor da máscara de colisão decimal do objeto (como 255 para 0xff)
    • Em seguida, defina a máscara de colisão real para o objeto nos atributos como 0.
    • Isso faz com que o jogo carregue sem colisão e, em seguida, Seasons ativará a colisão quando estiver visível.
  • Para objetos que você deseja mostrar quando o Seasons não está ativo:
    • Não há necessidade de fazer nada de especial.
Tipos de objeto

A partir das temporadas 1.0, existem três objetos que podem ser usados por mapas. Eles são detalhados a seguir.

Para cada admirer é especificado o nome da classe, a ser utilizado no atributo onCreate. Além disso, quaisquer atributos para esse admirer são fornecidos, com um possível valor padrão. Se você omitir o atributo, o valor padrão será usado.

Se você está faltando alguma coisa ou quer algo especial, faça seus próprios objetos ou peça à equipe que os adicione em uma versão futura.

Visibilidade por temporada

Faça um objeto aparecer em uma ou mais temporadas, enquanto o esconde nas outras temporadas. Por padrão, o objeto é invisível para todas as estações.
  • nome da classe: modOnCreate.SeasonAdmirer
  • atributos:
    • máscara (inteiro, o padrão é 0)
    • collisionMask (inteiro, o padrão são os objetos reais collisionMask)
Os valores da máscara são os seguintes:
  • Primavera: 1
  • Verão: 2
  • Outono: 4
  • Inverno: 8
Adicione o valor para cada estação para a qual deseja que o objeto fique visível e coloque esse valor no atributo. Por exemplo, 10 mostrará o objeto apenas no verão e no inverno.

Visibilidade para neve

Para criar um boneco de neve ou montes de neve visuais, você pode usar o SnowAdmirer. Com ele você pode tornar um objeto visível quando há neve. Você também pode ocultar objetos se houver neve, adicionando o atributo hide e marcando-o. Por último, você pode especificar o nível de neve necessário para que o objeto seja visível. Cada nível tem 6 cm de neve.
  • nome da classe: modOnCreate.SnowAdmirer
  • atributos:
    • hideWhenSnow (booleano, o padrão é falso)
    • minimumLevel (inteiro, o padrão é 1)
    • collisionMask (inteiro, o padrão são os objetos reais collisionMask)
Lagos congelados

Não é possível congelar um lago. No entanto, é possível fazer com que pareça que está congelado, adicionando um plano logo acima da água com uma textura de gelo congelado. Em seguida, use o admirer IcePlane para torná-lo visível apenas quando o solo estiver congelado.

Certifique-se de definir o plano invisível para que ele não apareça quando não estiver usando o Seasons.
  • nome da classe: modOnCreate.IcePlane
  • atributos:
    • collisionMask (inteiro, o padrão são os objetos reais collisionMask)
Para um bom guia sobre como fazer lagos congelados, veja este vídeo de ShyWizard (para o Seasons 17):



Notas

Seasons desativa as máscaras de colisão ao esconder os objetos, ao contrário dos admirers de baunilha. Observe, entretanto, que isso não funciona ao usar um admirer em um grupo de transformação contendo nós com colisões.

Você pode usar vários admirers juntos usando grupos de transformação. Certifique-se de que o mais restritivo esteja no nó real, conforme a nota acima. Um exemplo é um churrasco que só é visível no verão, quando o sol brilha.