Yoga minigame
O minigame de yoga do modo história, tirado da missão e transformado numa atividade de roleplay que qualquer um pode começar. Alinhe os dois marcadores, sustente a postura enquanto o corpo vai entrando nela, e depois inspire e expire nos gatilhos do controle. Três rotinas, quatorze posturas, as animações e os sons de respiração do próprio jogo. E uma pontuação para os seus próprios scripts reagirem.
O que ele faz
Em cada postura acontecem quatro coisas, e não uma animação só
Alinhe os dois marcadores nos alvos, segure eles ali enquanto o corpo vai entrando na postura, inspire segurando os dois gatilhos, expire soltando os dois. A janela de mira é de 15 graus, a de sustentação abre para 55 porque o corpo está se movendo. É essa diferença que faz a postura parecer sustentada por você, e não uma animação que você fica olhando.
Especificações
técnicas
Tudo o que
você recebe
-
Quinze arquivos de idioma, entregues preenchidos
Seus jogadores leem o script no idioma deles desde o primeiro start, e os arquivos ficam fora do escrow, então você corrige qualquer linha em produção. Nota honesta: eles são traduzidos e revisados por nós, não revisados por nativos dos quinze idiomas. Diga o que soa errado no seu e a gente corrige.
-
Todos os números do minigame estão abertos
Ciclos de respiração perdidos antes de uma postura falhar, posturas falhadas antes da sessão parar, quanto tempo o ar pode ficar preso, sensibilidade do mouse, vibração, avisos na tela, a força do timecycle por postura e o teto desse efeito. `config/config.lua` está fora do escrow, então um servidor de spa e um de yoga na cadeia podem rodar o mesmo script em duas dificuldades diferentes.
-
Os spots do mapa, inteiros na config
Coordenadas, direção, qual rotina, o tapete, o sprite e a cor do blip, a que distância o marcador aparece e a partir de que distância o aviso funciona. Deixe a lista vazia e essa parte inteira se desliga, thread incluída.
-
Quatro exports e um event de integração
Começar uma sessão e saber se um jogador está numa, pelo servidor e pelo client. E um único event no fim com o resultado, documentado no arquivo com a linha para copiar. É o caminho mais curto entre essa atividade e a sua economia.
Guia de integração
Instalação
-
Coloque o resource
Baixe o script pela sua conta Tebex, copie a pasta
avenida_yoga/para o seu diretório de resources e adicioneensure avenida_yogana config do servidor. -
Defina o idioma e as rotinas
Config.Localeaceita qualquer um dos quinze códigos que vêm emlocales/.Config.EnabledMovesdecide quais rotinas os jogadores podem começar, eConfig.DefaultMovediz qual entra quando nenhuma é informada. -
Coloque os seus spots
As duas coordenadas de
Config.Spotssão exemplos, troque elas pelas suas. Cada uma leva direção, rotina e um blip que dá para desligar. Uma lista vazia desativa essa parte inteira e a thread dela. -
Aponte as notificações para a sua stack
Config.Notifestá emautoe detecta ox_lib, okokNotify, QBCore ou ESX nessa ordem. Force o alvo se você roda vários, ou use o caminhocustomdebridges/notif.luapara o seu próprio sistema. -
Ligue a recompensa, ou não
A atividade funciona do jeito que está sem uma linha do seu código. Quando quiser que ela pague algo, escute
avenida_yoga:server:sessionCompletede leia a pontuação. É o único ponto de integração.
Início rápido
Transformar uma sessão em recompensa
Um event, disparado uma vez no fim. A pontuação já vem calculada: 1 para uma rotina terminada, no máximo 0,4 se ela for abandonada, menos 8 por cento por postura falhada. O que isso vai pagar é escolha sua.
AddEventHandler('avenida_yoga:server:sessionCompleted', function(src, data)
-- data.move 'warrior' | 'triangle' | 'sunsalutation'
-- data.completed true when the routine went to the end
-- data.posesBest poses held
-- data.poses poses in the routine
-- data.fails poses dropped
-- data.score 0.0 to 1.0
if not data.completed then return end
-- your own reward: stress, stamina, a skill, a payout
local reward = math.floor(250 * data.score)
end)Referência da API
Exports públicos agrupados por domínio. Cada linha mostra a assinatura da chamada e o que ela faz, não como faz.
Server
StartYoga
exports['avenida_yoga']:StartYoga(src, moveKey?) --> booleanComeça uma sessão para um jogador a partir do seu próprio código de servidor, na rotina que você nomear ou na padrão. Retorna
falsequando a rotina é desconhecida ou o jogador já está numa sessão, então um job ou um prop pode reagir em vez de disparar às cegas.IsDoingYoga
exports['avenida_yoga']:IsDoingYoga(src) --> booleanVerdadeiro enquanto o jogador tem uma sessão viva, com a expiração já contada. Útil para bloquear uma ação de job, um teleporte ou uma loja enquanto o minigame está com os controles dele na mão.
Client
StartYoga
exports['avenida_yoga']:StartYoga(moveKey?) --> booleanPede uma sessão ao servidor a partir do código de client. O pedido passa pelo registro do servidor do mesmo jeito, então não é um jeito de escapar do controle de sessão.
IsDoingYoga
exports['avenida_yoga']:IsDoingYoga() --> booleanVerdadeiro enquanto o jogador local está numa sessão. O gêmeo no client do export de servidor, para qualquer coisa que precise reagir no mesmo frame.
Receitas
Exemplos de copiar e colar para os casos mais comuns. Você cola na sua resource, ajusta os valores e já está em produção.
Um spot precisa de coordenadas e direção. O resto é opcional: a rotina que ele começa, o blip, e até se o tapete aparece. Ponha `move` em `random` para variar, ou em `menu` para o jogador escolher.
-- config/config.lua
Config.Spots = {
{
coords = vector3(-1204.02, -1566.28, 3.63),
heading = 125.0,
move = 'menu',
blip = { sprite = 311, colour = 2, scale = 0.7 },
},
}Um job de bem-estar, um pátio de cadeia, uma atividade de reabilitação: libere a sessão para o seu jogador sem precisar de comando. Leia o retorno, ele diz se o jogador estava livre para começar.
local started = exports['avenida_yoga']:StartYoga(src, 'sunsalutation')
if not started then
-- unknown routine, or the player is already in a session
return
endQuatro números carregam a dificuldade inteira. Suba as tentativas e as falhas para um servidor casual, baixe elas para algo mais perto do jogo base. O tempo de respiração presa é o que impede alguém de estacionar no gatilho.
-- config/config.lua
Config.BreathingAttempts = 3 -- missed cycles before a pose fails
Config.MaxFails = 5 -- failed poses before the session stops
Config.HoldBreathFailMs = 15000 -- holding the breath longer fails the pose
Config.MouseGain = 3.0 -- marker sensitivity on mouse and keyboardSó as rotinas listadas na config podem ser iniciadas, por comando, por export ou por spot. Um servidor pode abrir só com o Guerreiro e liberar as mais longas num evento, sem mexer em mais nada.
-- config/config.lua
Config.EnabledMoves = { 'warrior' }
Config.DefaultMove = 'warrior'Perguntas frequentes
- Não. A atividade nunca lê dinheiro, itens, jobs nem identidade, então não existe nada que um framework pudesse entregar. O mesmo arquivo roda em ESX, QBCore, Qbox, vRP, ox_core ou num servidor standalone sem configurar um único bridge. A única parte que sabe do seu framework é a linha de notificação, um arquivo aberto com seis caminhos.
- Não, e aqui dá para ser preciso: o ox_lib serve para exatamente uma coisa, o seletor de rotina num spot definido como `menu`. Sem ele, esse spot começa a rotina padrão. `Config.UseOxLib` também troca o carregamento de assets entre os helpers do ox_lib e as chamadas nativas, e vem desligado, então o script roda nas nativas por padrão.
- Não tem, e nem arquivo SQL. O servidor guarda as sessões vivas em memória, uma por jogador, com um tempo que limpa as abandonadas. Nada é escrito em lugar nenhum. Se você quiser um histórico por jogador, é para isso que serve o event de fim: você guarda o que te interessa, no seu próprio schema.
- Não. A sessão é aberta pelo servidor e o resultado é limitado antes de chegar ao seu event: as posturas sustentadas não podem passar da rotina, as falhas não podem passar de trinta, a flag de concluído é uma comparação estrita e a pontuação é recalculada no servidor a partir desses valores limitados. O pior que um client modificado consegue é reportar uma sessão que ele realmente abriu.
- O corpo levanta de volta. O script lê a animação exata que o ped está tocando e escolhe a recuperação correspondente entre as doze que o jogo traz, e quatro delas têm uma variante própria para uma postura solta cedo demais. A postura conta como falhada, e depois de cinco posturas falhadas a sessão para sozinha.
- Nos dois. O comando funciona em qualquer lugar a pé, e os spots são uma camada opcional em cima, para os lugares que você quiser sinalizar com tapete e blip. Deixe `Config.Spots` vazio e sobram só o comando e os exports, e a thread de spots nem chega a iniciar.
- Sim, e foi pensado primeiro para ele, como no jogo base. Os dois analógicos levam os marcadores e os gatilhos de cima carregam a respiração, com vibração enquanto os dois marcadores estão no alvo. No mouse e teclado a mesma sessão roda no WASD e no mouse, e os avisos na tela mudam sozinhos conforme o que o jogador usou por último.
- 0.00ms. O loop de sessão só existe enquanto tem uma sessão, e a thread dos spots passa a rodar de segundo em segundo quando não tem nenhum jogador por perto. Sem nenhum spot declarado, essa thread nem começa.
O que dizem os compradores
5.0 1 avaliação verificada
Jpmediaaa. Hotstar Production I am very happy that I was given the opportunity to make a script trailer for the yoga minigame, I think the script is very seamless and very easy to use and interactive.
DESTAQUE DerassDance minigame
O minigame de dança de boate do GTA Online, refeito para FiveM e jogável em qualquer canto do seu mapa. Aperte no ritmo para subir os quatro níveis de intensidade, segure para não perder, dê um boost ou derrube o nível na hora que quiser, troque entre dez estilos e solte 27 movimentos especiais sem sair da pista. Todo mundo em volta vê tudo, e o seu servidor não roda uma linha disso.
DESTAQUE Avenida TeamBarber shop
Uma barbearia encenada de ponta a ponta, com uma câmera que o jogador controla de verdade. O personagem entra, senta na cadeira, e o barbeiro começa a trabalhar enquanto uma câmera orbital enquadra a cabeça. Cabelo, barba, overlays e todo o conjunto de detalhes de pele, com preview em tempo real antes de você gastar um dólar.
DESTAQUE Avenida TeamClothing store
Uma loja de roupas com outfits salvos, guarda-roupas de empresa e um editor que define os preços do catálogo de dentro do jogo. Todos os componentes e todos os props, comprados peça por peça ou como look inteiro, com um registro no servidor que impede qualquer um de vestir o que não pagou.