J'ai actuellement de gros problèmes. Il me sera beaucoup trop difficile d'implémenter toute la logique de certaines choses avec du code visuel, alors j'ai essayé les scripts et j'ai codé un peu pour voir car je ne connais pas du tout JavaScript, ce n'est pas le code qui pose problème mais la façon dont il fonctionne avec C3, je ne comprends rien, c'est la galère !
Voici une ébauche de code qui ne veut pas dire grand chose pour le moment, impossible de voir les variables du code dans le debugger de C3, il faut un Console.log, si seulement c'était ça le problème, mais non !
Certaines parties du code ne fonctionnent pas comme je m'y attendais, par exemple la console rafraîchit les messages et autres choses toutes les secondes alors que dans mon code je demande toutes les 100ms et 333ms de faire des choses.
Et je ne sais pas comment travailler avec C3 avec JS, j'ai essayé de suivre les tutoriels mais tout cela me dépasse !
J'ai traduit les commentaires en anglais juste pour que vous puissiez voir le désordre !
Je dois implémenter une logique très compliquée pour gérer les différentes statistiques du joueur (faim, soif, énergie, etc.).
Parce que certaines s'influencent les unes les autres, je ne sais pas comment travailler avec du code JS avec C3, je veux faire la logique de certaines choses en code parce que ce sera beaucoup plus facile pour moi, mais je suis coincé !
edit : ça avance doucement mais sûrement, je pense avoir compris comment ça marche, je peux maintenant accéder aux propriétés C3 avec le « Runtime », par exemple pour modifier mes variables dans la feuille d'événement directement avec du code JS, mais c'est très restrictif car les variables doivent déjà être déclarées dans la feuille d'événement, je ne peux pas par exemple créer des variables dans mon code JS pour l'intégrer dans la feuille d'événement, ça ne marche que dans un sans, donc les noms de variables doivent être identiques dans les deux sinon ça ne marche pas !
-------------------------------------------------
I am currently having big problems. It will be far too difficult for me to implement all the logic for certain things with visual code, so I tried scripts and I coded a bit to see because I don’t know JavaScript at all, it’s not the code that is the problem but the way it works with C3, I understand nothing, it’s a struggle!
Here is a draft code that doesn’t mean much for the moment, impossible to see the code variable in the C3 debugger, you need a Console.log, if only that was the problem, but no!
Parts of the code do not work as I expected, for example the console refreshes messages and other things every second while in my code I ask every 100ms and 333ms to do things.
And I don’t know how to work with C3 with JS, I tried to follow the tutorials but all this is beyond me!
I translated the comments into English just so you can see the mess!
I have to implement a very complicated logic to manage the various stats of the player (hunger, thirst, energy, etc.)
Because some influence each other, I don’t know how to work with JS code with C3, I want to do the logic of certain things in code because it will be much easier for me, but I am stuck!
edit: this is progressing slowly but surely, I think I've understood how it works, I can now access C3 properties with the “Runtime”, for example to modify my variables in the event sheet directly with JS code, but it's very restrictive because the variables must already be declared in the event sheet, I can't for example create variables in my JS code to integrate it into the event sheet, it only works in one without, so the variable names must be identical in both otherwise it doesn't work!
// Mode Strict.
'use strict';
// Importez ici d'autres fichiers de script, par exemple:
// Import other script files here, for example:
// import * as myModule from "./mymodule.js";
// Initialisation des variables.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Initialization of variables.
let TempsCompteur01 = 100, TempsCompteur02 = 500, TempsCompteur03 = 0, TempsCompteur04 = 0;
let TempsEcouleCompteur01 = 0, TempsEcouleCompteur02 = 0, TempsEcouleCompteur03 = 0, TempsEcouleCompteur04 = 0;
let DernierTempsCompteur01 = Date.now(), DernierTempsCompteur02 = Date.now(), DernierTempsCompteur03 = Date.now(), DernierTempsCompteur04 = Date.now();
// Enregistrez l'heure de début au lancement du programme. | Record the start time at the launch of the program.
let TempsDebut = Date.now();
let TempsEcouleDepuisDébut = 0;
let TempsActuel = Date.now();
// - FONCTIONS
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Génère un nombre à virgule aléatoire. | Generates a random number.
function RandomFloat(min, max) {
return Math.random() * (max - min + Number.EPSILON) + min;
}
// Calcule un taux en fonction du temps en degré indiqué, plus il fera froid et plus le taux sera important.
// À TemperatureMinimum, le taux est de TauxMaximum, à TemperatureMaximum, le taux est de TauxMinimum.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculates a rate based on the indicated temperature in degrees, the colder it is, the higher the rate will be.
// At TemperatureMinimum, the rate is TauxMaximum, at TemperatureMaximum, the rate is TauxMinimum.
function CalculeTauxSuivantTemperature(TemperatureActuelle, TemperatureMinimum, TemperatureMaximum, TauxMinimum, TauxMaximum)
{
let Temps = parseFloat(TemperatureActuelle);
TemperatureMinimum = parseFloat(TemperatureMinimum);
TemperatureMaximum = parseFloat(TemperatureMaximum);
TauxMinimum = parseFloat(TauxMinimum);
TauxMaximum = parseFloat(TauxMaximum);
if (isNaN(Temps) || isNaN(TemperatureMinimum) || isNaN(TemperatureMaximum) || isNaN(TauxMinimum) || isNaN(TauxMaximum)) {
return "Tous les arguments doivent être des nombres.";
}
let Taux = Temps < TemperatureMaximum ? TauxMaximum - ((Temps - TemperatureMinimum) * ((TauxMaximum - TauxMinimum) / (TemperatureMaximum - TemperatureMinimum))) : TauxMinimum;
return Taux;
}
// Calcule la Temperature ressentie du joueur en fonction du temps dehors et des vêtements qu'il porte.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculates the player's perceived temperature based on the outside weather and the clothes they are wearing.
function CalculeTemperatureRessentie(TemperatureDehorsActuelle, IndiceVetementsPortesActuel)
{
TemperatureDehorsActuelle = parseFloat(TemperatureDehorsActuelle);
IndiceVetementsPortesActuel = parseFloat(IndiceVetementsPortesActuel);
return TemperatureDehorsActuelle + IndiceVetementsPortesActuel;
}
// Calcule la consommation d'énergie pour maintenir le corps à 37° en fonction de la Temperature ressentie du joueur.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculates the energy consumption to maintain the body at 37°C based on the player's perceived temperature.
function CalculeConsomationEnergie(TemperatureRessentieActuelle, TemperatureRessentieMinimum)
{
TemperatureRessentieActuelle = parseFloat(TemperatureRessentieActuelle);
// Calcule un taux en fonction de la Temperature ressentie du joueur, plus il fera froid et plus le taux sera important.
// à 40° ce taux vaudra 0, pas de consommation d'énergie pour maintenir le corps à 37°, à -50° ce taux sera de 0.5.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculates a rate based on the player's perceived temperature: the colder it is, the higher the rate.
// For example, at 40° the rate will be 0, so no energy will be consumed to maintain the body at 37°; at -50° the rate will be 0.5.
let TauxSuivantTemperatureRessentie = 0.00
TauxSuivantTemperatureRessentie = parseFloat(CalculeTauxSuivantTemperature(TemperatureRessentieActuelle, TemperatureRessentieMinimum, 40, 0, 0.1125));
return TauxSuivantTemperatureRessentie > 0 ? TauxSuivantTemperatureRessentie : 0;
}
// Vérifie que les valeurs des variables sont correctes sinon les réajuste.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Checks that variable values are correct, otherwise readjusts them.
function VerificationVariables(runtime)
{
if (runtime.globalVars.EauActuelle < runtime.globalVars.EauMinimum) runtime.globalVars.EauActuelle = runtime.globalVars.EauMinimum;
if (runtime.globalVars.EauActuelle > runtime.globalVars.EauMaximum) runtime.globalVars.EauActuelle = runtime.globalVars.EauMaximum;
if (runtime.globalVars.EnduranceActuelle < runtime.globalVars.EnduranceMinimum) runtime.globalVars.EnduranceActuelle = runtime.globalVars.EnduranceMinimum;
if (runtime.globalVars.EnduranceActuelle > runtime.globalVars.EnduranceMaximum) runtime.globalVars.EnduranceActuelle = runtime.globalVars.EnduranceMaximum;
if (runtime.globalVars.EnergieActuelle < runtime.globalVars.EnergieMinimum) runtime.globalVars.EnergieActuelle = runtime.globalVars.EnergieMinimum;
if (runtime.globalVars.EnergieActuelle > runtime.globalVars.EnergieMaximum) runtime.globalVars.EnergieActuelle = runtime.globalVars.EnergieMaximum;
if (runtime.globalVars.FatigueActuelle < runtime.globalVars.FatigueMinimum) runtime.globalVars.FatigueActuelle = runtime.globalVars.FatigueMinimum;
if (runtime.globalVars.FatigueActuelle > runtime.globalVars.FatigueMaximum) runtime.globalVars.FatigueActuelle = runtime.globalVars.FatigueMaximum;
if (runtime.globalVars.MagieActuelle < runtime.globalVars.MagieMinimum) runtime.globalVars.MagieActuelle = runtime.globalVars.MagieMinimum;
if (runtime.globalVars.MagieActuelle > runtime.globalVars.MagieMaximum) runtime.globalVars.MagieActuelle = runtime.globalVars.MagieMaximum;
if (runtime.globalVars.NourritureActuelle < runtime.globalVars.NourritureMinimum) runtime.globalVars.NourritureActuelle = runtime.globalVars.NourritureMinimum;
if (runtime.globalVars.NourritureActuelle > runtime.globalVars.NourritureMaximum) runtime.globalVars.NourritureActuelle = runtime.globalVars.NourritureMaximum;
if (runtime.globalVars.OxygeneActuelle < runtime.globalVars.OxygeneMinimum) runtime.globalVars.OxygeneActuelle = runtime.globalVars.OxygeneMinimum;
if (runtime.globalVars.OxygeneActuelle > runtime.globalVars.OxygeneMaximum) runtime.globalVars.OxygeneActuelle = runtime.globalVars.OxygeneMaximum;
if (runtime.globalVars.RageActuelle < runtime.globalVars.RageMinimum) runtime.globalVars.RageActuelle = runtime.globalVars.RageMinimum;
if (runtime.globalVars.RageActuelle > runtime.globalVars.RageMaximum) runtime.globalVars.RageActuelle = runtime.globalVars.RageMaximum;
if (runtime.globalVars.VieActuelle < runtime.globalVars.VieMinimum) runtime.globalVars.VieActuelle = runtime.globalVars.VieMinimum;
if (runtime.globalVars.VieActuelle > runtime.globalVars.VieMaximum) runtime.globalVars.VieActuelle = runtime.globalVars.VieMaximum;
if (runtime.globalVars.EfficaciteActuelle < runtime.globalVars.EfficaciteMinimum) runtime.globalVars.EfficaciteActuelle = runtime.globalVars.EfficaciteMinimum;
if (runtime.globalVars.EfficaciteActuelle > runtime.globalVars.EfficaciteMaximum) runtime.globalVars.EfficaciteActuelle = runtime.globalVars.EfficaciteMaximum;
if (runtime.globalVars.TemperatureDehorsActuelle < runtime.globalVars.TemperatureDehorsMinimum) runtime.globalVars.TemperatureDehorsActuelle = runtime.globalVars.TemperatureDehorsMinimum;
if (runtime.globalVars.TemperatureDehorsActuelle > runtime.globalVars.TemperatureDehorsMaximum) runtime.globalVars.TemperatureDehorsActuelle = runtime.globalVars.TemperatureDehorsMaximum;
if (runtime.globalVars.TemperatureCorporelleActuelle < runtime.globalVars.TemperatureCorporelleMinimum) runtime.globalVars.TemperatureCorporelleActuelle = runtime.globalVars.TemperatureCorporelleMinimum;
if (runtime.globalVars.TemperatureCorporelleActuelle > runtime.globalVars.TemperatureCorporelleMaximum) runtime.globalVars.TemperatureCorporelleActuelle = runtime.globalVars.TemperatureCorporelleMaximum;
if (runtime.globalVars.TemperatureRessentieActuelle < runtime.globalVars.TemperatureRessentieMinimum) runtime.globalVars.TemperatureRessentieActuelle = runtime.globalVars.TemperatureRessentieMinimum;
if (runtime.globalVars.TemperatureRessentieActuelle > runtime.globalVars.TemperatureRessentieMaximum) runtime.globalVars.TemperatureRessentieActuelle = runtime.globalVars.TemperatureRessentieMaximum;
if (runtime.globalVars.IndiceVetementsPortesActuel < runtime.globalVars.IndiceVetementsPortesMinimum) runtime.globalVars.IndiceVetementsPortesActuel = runtime.globalVars.IndiceVetementsPortesMinimum;
if (runtime.globalVars.IndiceVetementsPortesActuel > runtime.globalVars.IndiceVetementsPortesMaximum) runtime.globalVars.IndiceVetementsPortesActuel = runtime.globalVars.IndiceVetementsPortesMaximum;
}
// Code à exécuter sur l'écran de chargement.
// Notez que les layouts, objets, etc. ne sont pas encore disponibles.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Code to execute on the loading screen.
// Note that layouts, objects, etc. are not yet available.
runOnStartup(async runtime =>
{
runtime.addEventListener("beforeprojectstart", () => OnBeforeProjectStart(runtime));
});
// Code à exécuter juste avant 'Au début du layout' sur
// le premier layout. Le chargement est terminé et les instances
// initiales sont créées et disponibles à utiliser ici.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Code to execute just before 'At the start of layout' on
// the first layout. Loading is complete and initial instances
// are created and available to use here.
async function OnBeforeProjectStart(runtime)
{
runtime.addEventListener("tick", () => Tick(runtime));
}
// Code à exécuter à chaque tick.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Code to execute on every tick.
function Tick(runtime)
{
TempsActuel = Date.now(); // Temps passé actuel. | Current past time.
// Vérifie toutes les 0.1 seconde que les valeurs sont correctes sinon les réajuste.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Checks every 0.1 second that values are correct, otherwise readjusts them.
if (TempsActuel - DernierTempsCompteur01 >= TempsCompteur01)
{
VerificationVariables(runtime);
DernierTempsCompteur01 = TempsActuel; // Mettre à jour le temps de la dernière mise à jour. | Update time from last update.
TempsEcouleCompteur01 = 0; // Réinitialiser le temps écoulé. | Reset elapsed time.
}
else
{
TempsEcouleCompteur01 = TempsActuel - DernierTempsCompteur01; // Calculer le temps écoulé. | Calculate elapsed time.
}
// Affiche dans la console toutes les 0.33 seconde du texte.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Displays text in the console every 0.33 seconds.
if (TempsActuel - DernierTempsCompteur02 >= TempsCompteur02)
{
// TemperatureDehorsActuelle += RandomFloat(-10, 10)
runtime.globalVars.TemperatureRessentieActuelle = CalculeTemperatureRessentie(runtime.globalVars.TemperatureDehorsActuelle, runtime.globalVars.IndiceVetementsPortesActuel);
let ConsommationEnergie = CalculeConsomationEnergie(runtime.globalVars.TemperatureRessentieActuelle, runtime.globalVars.TemperatureRessentieMinimum);
console.clear();
console.log("Temperature Dehors Actuelle: " + runtime.globalVars.TemperatureDehorsActuelle);
console.log("Energie Actuelle: " + runtime.globalVars.EnergieActuelle);
console.log("Temperature Corporel Actuel: " + runtime.globalVars.TemperatureCorporelleActuelle);
console.log("IndiceVetements Portes Actuel: " + runtime.globalVars.IndiceVetementsPortesActuel);
console.log("Temperature Ressentie Actuelle: " + runtime.globalVars.TemperatureRessentieActuelle);
console.log("Consommation d'énergie du corps Actuelle: " + ConsommationEnergie);
runtime.globalVars.EnergieActuelle -= ConsommationEnergie;
// Calculer le temps écoulé.
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Calculate the elapsed time.
TempsEcouleDepuisDébut = TempsActuel - TempsDebut;
console.log(`Le temps écoulé depuis le lancement du programme est de ${TempsEcouleDepuisDébut/1000} secondes.`);
DernierTempsCompteur02 = TempsActuel; // Mettre à jour le temps de la dernière mise à jour. | Update time from last update.
TempsEcouleCompteur02 = 0; // Réinitialiser le temps écoulé. | Reset elapsed time.
}
else
{
TempsEcouleCompteur02 = TempsActuel - DernierTempsCompteur02; // Calculer le temps écoulé. | Calculate elapsed time.
}
}