Yoga minigame
Le minijeu de yoga du mode histoire, sorti de sa mission et transformé en activité roleplay que n'importe qui peut lancer. Alignez les deux marqueurs, tenez la posture pendant que le corps s'y installe, puis inspirez et expirez sur les gâchettes. Trois enchaînements, quatorze postures, les vraies animations et les vrais sons de respiration. Et un score auquel vos propres scripts peuvent réagir.
Ce qu'il fait
Quatre choses se passent dans chaque posture, pas une animation
Alignez les deux marqueurs sur leurs cibles, maintenez-les pendant que le corps s'installe dans la posture, inspirez en tenant les deux gâchettes, expirez en relâchant. La fenêtre de visée fait 15 degrés, celle de maintien s'élargit à 55 parce que le corps bouge. C'est cet écart qui donne l'impression de tenir la posture plutôt que de la regarder.
Spécifications
techniques
Tout ce que vous
recevez
-
Quinze fichiers de langue, livrés remplis
Vos joueurs lisent le script dans leur langue dès le premier démarrage, et les fichiers sont hors escrow, donc vous pouvez corriger n'importe quelle ligne en production. Note honnête : ils sont traduits et relus par nous, pas par des natifs des quinze langues. Dites-nous ce qui sonne faux dans la vôtre et c'est corrigé.
-
Les règles du minijeu vous appartiennent
Cycles de respiration ratés avant qu'une posture échoue, postures ratées avant l'arrêt de la séance, durée maximale d'un souffle retenu, sensibilité de la souris, vibration, indications à l'écran, force du timecycle par posture et son plafond. `config/config.lua` est hors escrow, donc un serveur de spa bien-être et une cour de prison peuvent faire tourner la même ressource à deux difficultés différentes.
-
Les spots, entièrement en config
Coordonnées, orientation, quel enchaînement, le tapis, le sprite et la couleur du blip, la distance d'apparition du marqueur et celle à partir de laquelle l'invite devient utilisable. Laissez la liste vide et toute la fonctionnalité s'éteint, thread compris.
-
Quatre exports et un event d'intégration
Lancer une séance et savoir si un joueur en fait une, depuis le serveur comme depuis le client. Puis un seul event à la fin qui porte le résultat, documenté dans le fichier avec la ligne à recopier. C'est le chemin le plus court entre cette activité et votre économie.
Guide d'intégration
Installation
-
Déposer la ressource
Récupérez le script depuis votre compte Tebex, copiez le dossier
avenida_yoga/dans votre dossier resources, et ajoutezensure avenida_yogaà votre configuration serveur. -
Régler la langue et les enchaînements
Config.Localeaccepte n'importe lequel des quinze codes livrés danslocales/.Config.EnabledMovesdécide des enchaînements que les joueurs peuvent lancer, etConfig.DefaultMovecelui utilisé quand aucun n'est précisé. -
Placer vos spots
Les deux coordonnées de
Config.Spotssont des exemples, remplacez-les par les vôtres. Chacune prend une orientation, un enchaînement, et un blip que vous pouvez couper. Une liste vide désactive toute la fonctionnalité et son thread. -
Diriger les notifications vers votre stack
Config.Notifest surautoet détecte ox_lib, okokNotify, QBCore ou ESX dans cet ordre. Forcez une cible si vous en faites tourner plusieurs, ou utilisez la branchecustomdebridges/notif.luapour votre propre système. -
Brancher la récompense, ou pas
L'activité fonctionne telle quelle sans une ligne de votre code. Quand vous voudrez qu'elle rapporte quelque chose, écoutez
avenida_yoga:server:sessionCompletedet lisez le score. C'est le seul point d'intégration.
Démarrage rapide
Transformer une séance en récompense
Un event, déclenché une fois à la fin. Le score est déjà calculé : 1 pour un enchaînement terminé, plafonné à 0,4 pour un abandon, moins 8 pour cent par posture ratée. Ce qu'il rapporte vous appartient.
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)Référence API
Exports publics groupés par domaine. Chaque ligne montre la signature d'appel
Server
StartYoga
exports['avenida_yoga']:StartYoga(src, moveKey?) --> booleanLance une séance pour un joueur depuis votre code serveur, sur l'enchaînement que vous nommez ou sur celui par défaut. Renvoie
falsequand l'enchaînement est inconnu ou que le joueur est déjà en séance, un job ou un prop peut donc réagir au lieu de tirer à l'aveugle.IsDoingYoga
exports['avenida_yoga']:IsDoingYoga(src) --> booleanVrai tant que le joueur tient une séance en cours, expiration comprise. Utile pour bloquer une action de job, un téléport ou une boutique pendant que le minijeu tient ses contrôles.
Client
StartYoga
exports['avenida_yoga']:StartYoga(moveKey?) --> booleanDemande une séance au serveur depuis du code client. La demande passe quand même par le registre serveur, ce n'est donc pas un moyen de contourner le garde-fou de session.
IsDoingYoga
exports['avenida_yoga']:IsDoingYoga() --> booleanVrai tant que le joueur local est en séance. Le jumeau côté client de l'export serveur, pour tout ce qui doit réagir dans la même frame.
Recettes
Exemples copier-coller pour les cas courants. À déposer dans ta ressource, ajuster les valeurs, et c'est en prod.
Un spot demande des coordonnées et une orientation. Tout le reste est optionnel : l'enchaînement qu'il lance, le blip, et même l'apparition du tapis. Mettez `move` sur `random` pour varier, ou sur `menu` pour laisser le joueur choisir.
-- 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 },
},
}Un job bien-être, une cour de prison, une activité de désintoxication : donnez la séance sans passer par la commande. Lisez la valeur de retour, elle vous dit si le joueur était libre de commencer.
local started = exports['avenida_yoga']:StartYoga(src, 'sunsalutation')
if not started then
-- unknown routine, or the player is already in a session
return
endQuatre nombres portent toute la difficulté. Montez les tentatives et les échecs pour un serveur grand public, baissez-les pour quelque chose de plus proche du jeu de base. Le délai de souffle est ce qui empêche un joueur de se garer sur la gâchette.
-- 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 keyboardSeuls les enchaînements listés dans la config peuvent être lancés, par commande, par export ou par spot. Un serveur peut ouvrir avec le Guerrier seul et débloquer les plus longs lors d'un événement, sans toucher à quoi que ce soit d'autre.
-- config/config.lua
Config.EnabledMoves = { 'warrior' }
Config.DefaultMove = 'warrior'Questions fréquentes
- Non. L'activité ne lit jamais l'argent, les items, les jobs ni l'identité, il n'y a donc rien qu'un framework puisse fournir. Le même fichier tourne sur ESX, QBCore, Qbox, vRP, ox_core ou un serveur nu sans un seul bridge à configurer. La seule partie qui connaisse votre framework est la ligne de notification, un fichier ouvert à six branches.
- Non, et ici c'est facile d'être précis : ox_lib sert à exactement une chose, le sélecteur d'enchaînement sur un spot réglé sur `menu`. Sans lui, ce spot lance l'enchaînement par défaut à la place. `Config.UseOxLib` bascule aussi le chargement des assets entre les helpers d'ox_lib et les appels natifs, et il est livré désactivé, la ressource tourne donc sur les natifs par défaut.
- Aucune, et pas de fichier SQL non plus. Le serveur garde les séances en cours en mémoire, une par joueur, avec un délai qui nettoie celles qu'on abandonne. Rien n'est écrit nulle part. Si vous voulez un historique par joueur, c'est à ça que sert l'event de fin : vous stockez ce qui vous intéresse, dans votre propre schéma.
- Non. La séance est ouverte par le serveur et le résultat est borné avant d'atteindre votre event : les postures tenues ne peuvent pas dépasser l'enchaînement, les échecs ne peuvent pas dépasser trente, le drapeau de réussite est une comparaison stricte et le score est recalculé côté serveur à partir de ces valeurs bornées. Le pire qu'un client modifié puisse faire, c'est déclarer une séance qu'il a réellement ouverte.
- Le corps se relève. La ressource lit l'animation exacte que joue le ped et choisit le relevé correspondant parmi les douze que le jeu fournit, dont quatre ont une variante distincte pour une posture lâchée tôt. La posture compte comme ratée, et après cinq postures ratées la séance s'arrête d'elle-même.
- Les deux. La commande marche partout à pied, et les spots sont une couche optionnelle par-dessus, pour les endroits que vous voulez signaler avec un tapis et un blip. Laissez `Config.Spots` vide et il ne reste que la commande et les exports, le thread des spots ne démarrant jamais.
- Oui, et c'est même pour elle que ça a été pensé d'abord, comme dans le jeu de base. Deux sticks visent les marqueurs et les gâchettes portent la respiration, avec la vibration tant que les deux marqueurs sont sur cible. Au clavier souris, la même séance tourne sur WASD et la souris, et les indications à l'écran changent toutes seules selon ce que le joueur vient d'utiliser.
- 0.00ms. La boucle de séance n'existe que pendant une séance, et le thread des spots se met en veille quand aucun joueur n'est à proximité. Sans aucun spot déclaré, ce thread ne démarre même pas.
Ce qu'en disent les acheteurs
5.0 1 avis vérifié
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.
EN AVANT DerassDance minigame
Le minijeu de danse des boîtes de nuit de GTA Online, refait pour FiveM et jouable n'importe où sur votre map. Tapez sur le rythme pour grimper les quatre niveaux d'intensité, maintenez pour les garder, montez ou redescendez à la demande, enchaînez dix styles et lancez 27 mouvements spéciaux sans quitter la piste. Tout le monde autour voit la scène, et votre serveur n'en exécute pas une ligne.
EN AVANT Avenida TeamBarber shop
Un barbier mis en scène, avec une caméra que le joueur pilote vraiment. Le personnage entre, s'assoit, et le barbier travaille pendant qu'une caméra orbitale cadre la tête. Cheveux, barbe, overlays et tous les détails de peau, prévisualisés avant d'avoir dépensé un dollar.
EN AVANT Avenida TeamClothing store
Un magasin de vêtements avec tenues sauvegardées, garde-robes d'entreprise et un éditeur qui tarife le catalogue depuis le jeu. Tous les composants et tous les props, achetés pièce par pièce ou en tenue complète, avec un registre côté serveur qui empêche de porter ce qu'on n'a jamais payé.