Fórum Lost Gamer
Scripts - 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)
+------ Tópico: Scripts (/showthread.php?tid=54)



Scripts - LuanTavares127 - 12-05-2021

Aprenda a tirar proveito do mod Seasons em seus próprios mods e scripts.

Detectando e acessando o Seasons

Quando Seasons estiver ativo, ele criará um novo global denominado g_seasons. Este global contém a instância Seasons. Você pode usá-lo para acessar todo o mod.

Existe uma única maneira de detectar se o Seasons está ativo em um jogo salvo. Isso é feito testando a variável global g_seasons. Não use g_modIsLoaded, pois o nome do mod Seasons pode ser diferente entre os jogadores.

Para acessar informações do Seasons, encontre dentro deste global. Por exemplo, o número de dias por temporada pode ser encontrado em g_seasons.environment.daysPerSeason.

Não estamos documentando todas as funções do mod. Você pode encontrar o código online ou dentro do mod. Se você tiver dúvidas, sinta-se à vontade para entrar em contato com a equipe.

Normalizando ao longo da temporada

No Seasons, tudo o que tem receita ou custo é normalizado ao longo de uma temporada. Isso significa que não importa a duração da temporada o jogador joga, um ano tem o mesmo custo e receita. A duração de uma temporada apenas determina quanto tempo real um jogador pode colocar em seu Seasons.

Se você fizer um mod que tenha uma entrada e / ou saída, deverá normalizar isso também. Se não o fizer, em configurações de baixa temporada o custo pode ser muito alto, enquanto em configurações de temporada mais longa a receita pode ser vista como uma fraude.

Nota: a rendaPerHour de um colocável é automaticamente normalizada pelo Seasons.

Neste guia, tomamos como exemplo um gerador fictício de hidrogênio: há um objeto que tem água e energia como entrada e que despeja combustível em um tanque que pode ser usado para abastecer veículos. (O combustível resultante é mais barato do que o gás no tanque).

A versão não normalizada produz consistentes 50 litros por dia, desde que a água seja fornecida em seu tanque e haja espaço no tanque de hidrogênio. Vamos chamar isso de produtividade de 50l / dia.

No Seasons, se a produtividade não for normalizada, um jogador executando o Seasons de 3 dias gera 600 litros por ano, enquanto um jogador executando Seasons de 12 dias gera 2.400 litros por ano. Isso se torna um problema: há a mesma quantidade de campos em um mapa, a mesma quantidade de colheitas possíveis, a mesma quantidade de veículos que podem ser comprados com o mesmo dinheiro. Além disso, os jogadores em temporadas mais longas pulam noites e dias com mais frequência. Manter a produtividade igual resultará em jogabilidade distorcida.

Razão suficiente para normalizá-lo. As estações usam 6 dias por temporada como o equivalente a baunilha. Isso significa que uma temporada é de 6 dias de baunilha ou 24 dias de baunilha em um ano. Você pode usar o mesmo número ou um diferente.

Abaixo está um exemplo de código simples da primeira etapa do processo. Em algum lugar na criação do objeto, a produtividade é definida como um valor. (Esta é uma prática recomendada, pois pode ser alterada por outro código.) Talvez seja até carregado de um XML de objeto. Se o Seasons estiver ativo, armazenamos a produtividade original e também calculamos a produtividade normalizada e a usamos em seu lugar.

function HydrogenGenerator:onCreate()
    self.productivity = 50 -- litros por dia
    -- ...
    if g_seasons ~= nil then
        self.originalProductivity = self.productivity
        self.productivity = self.originalProductivity * 6 / g_seasons.environment.daysPerSeason
    end
end

É basicamente isso, se não fosse que a duração de uma temporada pudesse mudar: um jogador pode mudar a duração no menu durante o jogo.

Para isso, uma nova mensagem está disponível no centro de mensagens:

function HydrogenGenerator:onCreate()
    self.productivity = 50 -- litros por dia
    -- ...
    if g_seasons ~= nil then
        self.originalProductivity = self.productivity
        self.productivity = self.originalProductivity * 6 / g_seasons.environment.daysInSeason
        g_messageCenter:subscribe(SeasonsMessageType.SEASON_LENGTH_CHANGED, self.onSeasonLengthChanged, self)
    end
end
function HydrogenGenerator:delete()
  g_messageCenter:unsubscribeAll()
end
function HydrogenGenerator:onSeasonLengthChanged()
    -- Aqui usamos a produtividade original!
    self.productivity = self.originalProductivity * 6 / g_seasons.environment.daysPerSeason
end

No código acima, nós assinamos a mensagem de mudança de duração da temporada. Esta mensagem é recebida pelo manipulador. Nós atualizamos a produtividade de acordo.

Se você deseja finalizá-lo e permitir o acesso fácil por outros scripts, você pode adicionar uma função setProductivity ():

function HydrogenGenerator:setProductivity(productivity)
    self.productivity = productivity
    if g_seasons ~= nil then
        if self.originalProductivity == nil then
            self.originalProductivity = self.productivity
        end
        self.productivity = self.originalProductivity * 6 / g_seasons.environment.daysPerSeason
    end
end

Você pode chamar esta função de onCreate para remover o código redundante.

Mensagens no centro de mensagens

A temporada mudou
SeasonsMessageType.SEASON_CHANGED

argumentos: (temporada)

O visual da temporada mudou
SeasonsMessageType.VISUAL_SEASON_CHANGED

argumentos: (visualSeason)

Período alterado
SeasonsMessageType.PERIOD_CHANGED

argumentos: (ponto final)

Ano alterado
SeasonsMessageType.YEAR_CHANGED

argumentos: (ano)

A duração das estações mudou
SeasonsMessageType.SEASON_LENGTH_CHANGED

argumentos: (comprimento)

Clima mudou
SeasonsMessageType.WEATHER_CHANGED

argumentos: nenhum

Mudança na temperatura de congelamento / não congelamento do ar ou do solo
SeasonsMessageType.FREEZING_CHANGED

argumentos: nenhum

Mudança na altura da neve (visualmente)
SeasonsMessageType.SNOW_HEIGHT_CHANGED

argumentos: nenhum

Um veículo foi consertado
SeasonsMessageType.VEHICLE_REPAINTED

argumentos: (veículo, atSellingPoint)