12-05-2021 02:37 AM
(Esta mensagem foi modificada pela última vez a: 12-05-2021 08:55 AM por LuanTavares127.)
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
Existe uma única maneira de detectar se o Seasons está ativo em um jogo salvo. Isso é feito testando a variável global
Para acessar informações do Seasons, encontre dentro deste global. Por exemplo, o número de dias por temporada pode ser encontrado em
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.
É 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:
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
Você pode chamar esta função de
Mensagens no centro de mensagens
A temporada mudou
argumentos: (temporada)
O visual da temporada mudou
argumentos: (visualSeason)
Período alterado
argumentos: (ponto final)
Ano alterado
argumentos: (ano)
A duração das estações mudou
argumentos: (comprimento)
Clima mudou
argumentos: nenhum
Mudança na temperatura de congelamento / não congelamento do ar ou do solo
argumentos: nenhum
Mudança na altura da neve (visualmente)
argumentos: nenhum
Um veículo foi consertado
argumentos: (veículo, atSellingPoint)
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)
MoBo: Asus Z170-a
Processador: Intel I7 6700k 4.0 ghz (4.2 ghz turbo boost)
Memória: 2x 8gb Corsair Vengeance LPX C14 2400mhz
Placa de Vídeo: MSI Ventus 3x RTX 3060 12gb
Fonte: Cougar CMX 850w Plus Bronze
WC: Cooler Master Masterliquid Lite 120
Processador: Intel I7 6700k 4.0 ghz (4.2 ghz turbo boost)
Memória: 2x 8gb Corsair Vengeance LPX C14 2400mhz
Placa de Vídeo: MSI Ventus 3x RTX 3060 12gb
Fonte: Cougar CMX 850w Plus Bronze
WC: Cooler Master Masterliquid Lite 120