import gradio as gr import google.generativeai as genai import os # <--- Assure-toi que cette ligne est lĂ  import google.generativeai as genai # Ajoute cette ligne pour transformer ton "Secret" en variable Python : GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") # Maintenant, cette ligne ne fera plus d'erreur : genai.configure(api_key=GOOGLE_API_KEY) # ========================================== # 🔑 TA CLÉ SECRÈTE # ========================================== # ========================================== # 🧠 LE CERVEAU (Tes 71 pages !) # ========================================== SYSTEM_PROMPT = """ Tu es un expert absolu en HTSL (Housing Trigger Scripting Language) pour Hypixel. Tu rĂ©ponds toujours en français. Ton but est de fournir du code HTSL parfait et sans erreurs. Voici l'intĂ©gralitĂ© de la documentation HTSL : HTSL Housing Trigger Scripting Language Documentation ComplĂšte - Fiche de RĂ©fĂ©rence Officielle Hypixel Housing ‱ ChatTriggers Module ‱ Version 1.4.3 Créé par : BusterBrown1218 ‱ Reborn : redstone-llc Support : discord.gg/bptauV2BAA Table des MatiĂšres 1. Introduction Ă  HTSL 1.1. Qu'est-ce que HTSL ? 1.2. Architecture du module 1.3. PrĂ©requis et compatibilitĂ© 2. Installation et Configuration 2.1. Étapes d'installation 2.2. Structure des fichiers 2.3. Configuration Settings 3. Syntaxe Fondamentale 3.1. Structure d'un fichier .htsl 3.2. Commentaires 3.3. Guillemets et chaĂźnes de caractĂšres 3.4. Arguments spĂ©ciaux 4. Contextes et goto 4.1. Contexte DEFAULT 4.2. Contexte FUNCTION 4.3. Contexte EVENT 4.4. Contexte COMMAND 4.5. goto - naviguer entre contextes 4.6. goto as - fichiers externes 5. Variables et Statistiques 5.1. stat - Statistiques joueur 5.2. globalstat - Statistiques globales 5.3. teamstat - Statistiques d'Ă©quipe 5.4. var - Variables joueur 5.5. globalvar - Variables globales 5.6. teamvar - Variables d'Ă©quipe 5.7. OpĂ©rateurs disponibles 5.8. RĂ©fĂ©rences de variables dans les valeurs 6. ContrĂŽle de Flux 6.1. if / else - Conditionnels 6.2. random - Action alĂ©atoire 6.3. loop - Boucles 6.4. exit - Sortie 7. Toutes les Actions HTSL 7.1. Actions de joueur 7.2. Actions d'affichage 7.3. Actions d'inventaire 7.4. Actions de mouvement 7.5. Actions de potion 7.6. Actions de groupe / Ă©quipe 7.7. Actions de jeu 7.8. Actions de navigation 8. Toutes les Conditions HTSL 8.1. Conditions de variable 8.2. Conditions de joueur 8.3. Conditions d'inventaire 8.4. Conditions d'environnement 8.5. Conditions de groupe / Ă©quipe 9. Locations (Emplacements) 9.1. Types de location 9.2. CoordonnĂ©es personnalisĂ©es 10. Sons (Sounds) 10.1. Syntaxe du son 10.2. Liste des sons Hypixel Housing 11. Items et NBT 11.1. RĂ©fĂ©rencer un item 11.2. Sauvegarder un item 11.3. Commande giveItem 13. Placeholders 13.1. Placeholders de joueur 13.2. Placeholders de variable 13.3. Placeholders spĂ©ciaux 14. Commandes Ingame HTSL 14.1. Commandes de base 14.2. Commandes de compilation 14.3. Commandes d'item 15. Tutoriels et Exemples Pratiques 15.1. SystĂšme de kills et morts 15.2. SystĂšme de niveaux 15.3. Mini-jeu de parkour 15.4. Shop de base 15.5. SystĂšme de teams 15.6. Gestion de groupes 15.7. Timer et compteur 15.8. TĂ©lĂ©porteur conditionnel 15.9. SystĂšme de vote 15.10. Exemple complet : RPG simple 16. Bonnes Pratiques 16.1. Organisation du code 16.2. Nommage des variables 16.3. Optimisation 17. DĂ©pannage et Erreurs Communes 17.1. Erreurs de compilation 17.2. Comportements inattendus 17.3. FAQ 18. Annexes A. Liste complĂšte des enchantements B. Liste complĂšte des potions C. Liste des lobbies Hypixel D. Liste des permissions Housing E. OpĂ©rateurs et comparateurs F. Index alphabĂ©tique des commandes Chapitre 1 - Introduction Ă  HTSL 1.1 Qu'est-ce que HTSL ? HTSL (Housing Trigger Scripting Language) est un langage de script dĂ©veloppĂ© spĂ©cifiquement pour automatiser la crĂ©ation de logique de jeu dans le mode Housing de Hypixel. Housing est un mode de jeu Minecraft disponible sur le serveur Hypixel oĂč les joueurs peuvent crĂ©er leurs propres mini-jeux, arĂšnes et expĂ©riences interactives grĂące Ă  un systĂšme d'actions et de conditions. Sans HTSL, les joueurs doivent configurer chaque action individuellement via des menus GUI (Graphical User Interface) cliquables dans Minecraft, ce qui peut devenir extrĂȘmement fastidieux et chronophage pour des systĂšmes complexes. HTSL rĂ©sout ce problĂšme en permettant d'Ă©crire de la logique sous forme de code textuel simple, qu'il compile ensuite et importe automatiquement dans le systĂšme Housing via l'interface graphique. ?? Point ClĂ© HTSL n'est PAS un langage qui s'exĂ©cute directement sur le serveur Hypixel. C'est un outil qui traduit du code HTSL en actions Housing via des interactions GUI automatisĂ©es par ChatTriggers. Une fois les actions importĂ©es, elles s'exĂ©cutent nativement dans Housing. Avantages de HTSL ‱ Écriture rapide de logique complexe en quelques lignes ‱ Support de conditions, boucles et fonctions ‱ Import automatique dans le GUI Housing ‱ Gestion des variables (player, global, team) ‱ Inclusion de fichiers externes avec goto ... as ‱ Support du multi-contexte dans un seul fichier 1.2 Architecture du Module Le module HTSL est structurĂ© comme suit : Fichier / Dossier RĂŽle index.js Point d'entrĂ©e, gestion des commandes ingame compiler/compile.js Compilateur principal HTSL ? actions Housing compiler/loadAction.js Chargement et automatisation GUI compiler/convertAction.js Conversion d'actions Housing existantes en HTSL compiler/exportAction.js Export d'actions actions/syntax.js DĂ©finitions de tous les mots-clĂ©s HTSL actions/menus.js Structure des menus Housing pour chaque action actions/conditions.js Structure des conditions Housing utils/config.js Configuration utilisateur utils/convertSound.js Conversion des noms de sons utils/loadItemstack.js Chargement de stacks d'items utils/createItemStack.js CrĂ©ation d'items depuis NBT utils/actionLimits.js Limites d'actions Housing imports/ Dossier oĂč placer vos fichiers .htsl assets/ Ressources graphiques du module 1.3 PrĂ©requis et CompatibilitĂ© Pour utiliser HTSL, vous avez besoin des Ă©lĂ©ments suivants : PrĂ©requis DĂ©tail Minecraft Version Java Edition (compatible Hypixel) ChatTriggers Mod Forge/Fabric pour exĂ©cuter des modules JS - doit ĂȘtre Ă  jour HTSL Module Version 1.4.3 ou HTSLReborn (recommandĂ© pour les nouveautĂ©s) Hypixel Housing AccĂšs au mode Housing sur mc.hypixel.net Permissions Être propriĂ©taire ou avoir les permissions d'Ă©dition dans la maison ?? Attention - Module archivĂ© HTSL v1.4.3 ne reçoit plus de mises Ă  jour. Pour les fonctionnalitĂ©s les plus rĂ©centes, utilisez HTSLReborn disponible sur https://github.com/redstone-llc/HTSLReborn. Cette documentation couvre la version 1.4.3 mais les concepts sont identiques dans Reborn. Chapitre 2 - Installation et Configuration 2.1 Étapes d'Installation L'installation de HTSL se fait en quelques Ă©tapes simples : 1. TĂ©lĂ©chargez le fichier ZIP depuis la page GitHub du module ou depuis les releases ChatTriggers. 2. Extrayez le contenu du ZIP dans le rĂ©pertoire suivant : ./minecraft/config/ChatTriggers/modules/HTSL/ 3. Lancez Minecraft avec ChatTriggers installĂ©. 4. Une fois en jeu, tapez /ct reload pour charger le module HTSL. 5. VĂ©rifiez que le module est chargĂ© avec la commande /htsl version. ?? Astuce Si vous avez une erreur lors du chargement, vĂ©rifiez que ChatTriggers est bien Ă  jour et que la structure de dossiers est correcte. Le dossier HTSL doit contenir index.js et metadata.json Ă  sa racine. 2.2 Structure des Fichiers Une fois HTSL installĂ©, voici la structure complĂšte du module : HTSL/ +-- index.js # Point d'entrĂ©e principal +-- metadata.json # MĂ©tadonnĂ©es du module +-- actions/ Š +-- syntax.js # Mots-clĂ©s et syntaxe HTSL Š +-- menus.js # DĂ©finitions des menus Housing Š +-- conditions.js # DĂ©finitions des conditions +-- compiler/ Š +-- compile.js # Compilateur HTSL Š +-- loadAction.js # Import GUI automatique Š +-- convertAction.js # Convertisseur HE ? HTSL Š +-- exportAction.js # Export d'actions +-- gui/ Š +-- codeWindow.js # Éditeur de code ingame Š +-- GuiBuilder.js # Constructeur GUI Š +-- Navigator.js # Navigation entre contextes Š +-- LoadActionGUI.js # Chargeur d'actions GUI Š +-- Queue.js # File d'opĂ©rations automatisĂ©es +-- utils/ Š +-- config.js # ParamĂštres utilisateur +-- imports/ # ?? VOS FICHIERS .htsl ICI Š +-- default.htsl # Exemple fourni Š +-- testing.htsl # Fichier de test +-- assets/ # Ressources graphiques +-- update/ +-- changelog.txt # Journal des mises Ă  jour +-- update.js # VĂ©rificateur de MAJ 2.3 Configuration Settings HTSL propose plusieurs paramĂštres configurables via /htsl config : ParamĂštre Description saveDirectory Active/dĂ©sactive l'organisation en sous-dossiers pour vos fichiers .htsl itemPrefix PrĂ©fixe de dossier pour les fichiers d'items JSON sauvegardĂ©s RĂ©pertoire de sauvegarde Chemin de base pour la sauvegarde des items ingame Pour accĂ©der au panneau de configuration, tapez en jeu : /htsl config Chapitre 3 - Syntaxe Fondamentale 3.1 Structure d'un Fichier .htsl Un fichier HTSL est un fichier texte avec l'extension .htsl. Chaque ligne contient une action ou une directive. L'ordre des lignes dĂ©termine l'ordre d'exĂ©cution des actions dans Housing. Exemple de fichier .htsl basique : // SystĂšme de bienvenue simple goto function "Bienvenue" chat "Bienvenue sur ma maison !" title "Bienvenue" "Amuse-toi bien !" 1 5 1 sound "Level Up" 0.7 1 current_location goto function "Quitter" chat "Au revoir !" lobby "Main Lobby" 3.2 Commentaires HTSL supporte deux types de commentaires : Commentaires sur une ligne Commencent par // et s'Ă©tendent jusqu'Ă  la fin de la ligne. Ils sont entiĂšrement ignorĂ©s par le compilateur. // Ceci est un commentaire - toute cette ligne est ignorĂ©e chat "Hello World" // Ceci envoie un message (le commentaire est ignorĂ©) Commentaires multi-lignes Commencent par /* et se terminent par */. Tout le contenu entre ces marqueurs est ignorĂ©. /* Ce bloc entier est commentĂ©. Utile pour dĂ©sactiver temporairement du code ou pour Ă©crire de la documentation. */ stat "Kills" inc 1 3.3 Guillemets et ChaĂźnes de CaractĂšres Les chaĂźnes de caractĂšres contenant des espaces doivent ĂȘtre entourĂ©es de guillemets doubles. Les chaĂźnes sans espace peuvent ĂȘtre Ă©crites sans guillemets. // Avec guillemets (obligatoire si espace) chat "Hello World" stat "Mon compteur" inc 1 setTeam "Equipe Rouge" // Sans guillemets (possible si pas d'espace) gamemode creative setTeam Blue houseSpawn ?? RĂšgle importante Utilisez toujours des guillemets doubles (") pour les chaĂźnes avec espaces. Les guillemets simples ne sont pas supportĂ©s pour dĂ©limiter des arguments. À l'intĂ©rieur d'une chaĂźne, vous pouvez Ă©chapper un guillemet avec \". 3.4 Arguments SpĂ©ciaux HTSL reconnaĂźt plusieurs types d'arguments spĂ©ciaux : Argument Description null Valeur nulle - indique Ă  HTSL d'ignorer ce paramĂštre et d'utiliser la valeur par dĂ©faut true / false Valeurs boolĂ©ennes pour les paramĂštres toggle slot_N RĂ©fĂ©rence un slot d'inventaire spĂ©cifique (ex: slot_0, slot_36) %placeholder% RĂ©fĂ©rence une valeur dynamique (stat, variable, position, etc.) \" Guillemet Ă©chappĂ© dans une chaĂźne \\ Backslash littĂ©ral Chapitre 4 - Contextes et goto Dans Housing, les actions sont organisĂ©es par contextes : fonctions, Ă©vĂ©nements, commandes, etc. HTSL vous permet de gĂ©rer plusieurs contextes dans un seul fichier grĂące au mot-clĂ© goto. 4.1 Contexte DEFAULT Si aucun goto n'est utilisĂ©, toutes les actions au dĂ©but du fichier appartiennent au contexte DEFAULT. Ce contexte correspond aux actions Ă  l'endroit oĂč vous avez ouvert l'Ă©diteur d'actions dans Housing (typiquement les actions d'un objet ou d'un NPC). // Toutes ces actions sont dans le contexte DEFAULT chat "Vous avez cliquĂ© !" stat "Clics" inc 1 fullHeal 4.2 Contexte FUNCTION Les fonctions Housing sont des blocs d'actions rĂ©utilisables. Pour cibler une fonction spĂ©cifique, utilisez goto function. goto function "MaFonction" // Toutes les actions ci-dessous appartiennent Ă  la fonction "MaFonction" chat "Je suis dans MaFonction !" stat "FonctionAppels" inc 1 goto function "AutreFonction" // DĂ©but d'un nouveau contexte fullHeal houseSpawn ?? Conseils Fonctions Vous pouvez dĂ©finir autant de fonctions que nĂ©cessaire dans un seul fichier .htsl en enchaĂźnant les directives goto function. Lors de la compilation, HTSL naviguera automatiquement dans chaque menu de fonction pour importer les actions correspondantes. 4.3 Contexte EVENT Les Ă©vĂ©nements Housing dĂ©clenchent des actions automatiquement en rĂ©ponse Ă  des actions du joueur ou du serveur. Exemples : mort du joueur, connexion, dĂ©connexion, etc. goto event "Mort" // Actions exĂ©cutĂ©es quand le joueur meurt stat "Morts" inc 1 chat "Vous ĂȘtes mort !" houseSpawn goto event "Connexion" chat "Bienvenue sur le serveur !" applyPotion "Speed" 60 1 false false 4.4 Contexte COMMAND Les commandes Housing permettent de crĂ©er des commandes personnalisĂ©es avec /. Le contexte COMMAND cible une commande spĂ©cifique. goto command "heal" // Actions exĂ©cutĂ©es quand le joueur tape /heal fullHeal chat "Vous avez Ă©tĂ© soignĂ© !" goto command "stats" // Affiche les statistiques du joueur chat "Vos kills : %stat.player/Kills%" chat "Vos morts : %stat.player/Morts%" 4.5 Syntaxe ComplĂšte de goto Syntaxe goto Description goto function "Nom" Cible la fonction nommĂ©e "Nom" goto event "NomEvent" Cible l'Ă©vĂ©nement nommĂ© "NomEvent" goto command "cmd" Cible la commande personnalisĂ©e "/cmd" goto npc "NomNPC" "Action" Cible les actions d'un NPC spĂ©cifique (Left/Right Click Actions) goto region "NomRegion" "trigger" Cible les actions d'une rĂ©gion (enter/leave) 4.6 goto as - Fichiers Externes Il est possible d'importer le contenu d'un autre fichier .htsl pour un contexte donnĂ©, en utilisant la syntaxe goto ... as : // Importe le fichier "mafonction.htsl" dans la fonction "Bienvenue" goto function "Bienvenue" as mafonction // Importe pour un NPC goto npc "Marchand" "Left Click Actions" as boutique ?? Attention aux rĂ©fĂ©rences circulaires HTSL empĂȘche les appels de fichiers circulaires (fichier A qui importe fichier B qui importe fichier A). Si une telle configuration est dĂ©tectĂ©e, une erreur "Nested file calls detected" sera affichĂ©e. Chapitre 5 - Variables et Statistiques Housing propose diffĂ©rents types de stockage de donnĂ©es : les statistiques (persistantes) et les variables (non-persistantes). HTSL fournit des raccourcis pour manipuler chaque type. 5.1 stat - Statistiques Joueur Les statistiques de joueur sont des valeurs persistantes liĂ©es Ă  chaque joueur individuellement. Elles survivent aux dĂ©connexions et restent tant qu'elles ne sont pas effacĂ©es. stat ? CHANGE_VARIABLE (holder: Player) Modifie une statistique du joueur actuel. Ces statistiques sont persistantes et spĂ©cifiques Ă  chaque joueur. Syntaxe : stat ParamĂštres : ‱ [string] dĂ©faut: "Kills" - Nom de la statistique (sensible Ă  la casse) ‱ [opĂ©rateur] dĂ©faut: inc - OpĂ©ration Ă  appliquer (voir tableau des opĂ©rateurs) ‱ [number/string] dĂ©faut: 1 - Valeur utilisĂ©e dans l'opĂ©ration Exemple : stat "Kills" inc 1 stat "Score" set 0 stat "Argent" dec 50 stat "Multiplicateur" multiply 2 5.2 globalstat - Statistiques Globales Les statistiques globales sont partagĂ©es par tous les joueurs. Une seule valeur existe, accessible et modifiable par n'importe quel joueur. globalstat ? CHANGE_VARIABLE (holder: Global) Modifie une statistique globale partagĂ©e par tous les joueurs. Syntaxe : globalstat ParamĂštres : ‱ [string] dĂ©faut: "Kills" - Nom de la statistique globale ‱ [opĂ©rateur] dĂ©faut: inc - OpĂ©ration Ă  appliquer ‱ [number/string] dĂ©faut: 1 - Valeur de l'opĂ©ration Exemple : globalstat "TotalKills" inc 1 globalstat "JoueurConnectes" set 0 globalstat "RecordKills" set stat RecordValue 5.3 teamstat - Statistiques d'Équipe Les statistiques d'Ă©quipe sont liĂ©es Ă  une Ă©quipe spĂ©cifique (et non Ă  un joueur individuel). teamstat ? CHANGE_VARIABLE (holder: Team) Modifie une statistique pour une Ă©quipe donnĂ©e. Syntaxe : teamstat ParamĂštres : ‱ [string] dĂ©faut: "Kills" - Nom de la statistique d'Ă©quipe ‱ [string] dĂ©faut: "Blue" - Nom de l'Ă©quipe ciblĂ©e ‱ [opĂ©rateur] dĂ©faut: inc - OpĂ©ration Ă  appliquer ‱ [number] dĂ©faut: 1 - Valeur de l'opĂ©ration Exemple : teamstat "Points" Blue inc 5 teamstat "Victoires" Red inc 1 teamstat "Score" Green set 0 5.4 var - Variables Joueur (Non-Persistantes) Les variables joueur sont similaires aux statistiques mais ne sont PAS persistantes : elles sont effacĂ©es quand le joueur se dĂ©connecte ou quand la variable est dĂ©truite manuellement. var ? CHANGE_VARIABLE (holder: Player, type: var) Modifie une variable de joueur temporaire. Parfaite pour stocker des Ă©tats de session. Syntaxe : var ParamĂštres : ‱ [string] dĂ©faut: null - Nom de la variable ‱ [opĂ©rateur] dĂ©faut: set - OpĂ©ration Ă  appliquer ‱ [number/string] dĂ©faut: null - Valeur de l'opĂ©ration ‱ [boolean] dĂ©faut: false - Si true, la variable est automatiquement effacĂ©e aprĂšs utilisation Exemple : var "EnCombat" set 1 false var "DernierePosition" set locX false var "Session" set 1 false 5.5 globalvar - Variables Globales (Non-Persistantes) Variables globales temporaires, partagĂ©es par tous les joueurs mais non-persistantes. globalvar ? CHANGE_VARIABLE (holder: Global, type: var) Modifie une variable globale temporaire. Syntaxe : globalvar ParamĂštres : ‱ [string] dĂ©faut: null - Nom de la variable globale ‱ [opĂ©rateur] dĂ©faut: set - OpĂ©ration Ă  appliquer ‱ [number/string] dĂ©faut: null - Valeur de l'opĂ©ration ‱ [boolean] dĂ©faut: false - Auto-destruction aprĂšs utilisation Exemple : globalvar "PhaseJeu" set 2 false globalvar "BossPV" set 1000 false 5.6 teamvar - Variables d'Équipe (Non-Persistantes) teamvar ? CHANGE_VARIABLE (holder: Team, type: var) Modifie une variable temporaire pour une Ă©quipe spĂ©cifique. Syntaxe : teamvar ParamĂštres : ‱ [string] dĂ©faut: null - Nom de la variable d'Ă©quipe ‱ [string] dĂ©faut: null - Nom de l'Ă©quipe ‱ [opĂ©rateur] dĂ©faut: set - OpĂ©ration ‱ [number/string] dĂ©faut: null - Valeur ‱ [boolean] dĂ©faut: false - Auto-destruction Exemple : teamvar "ObjectifCapture" Blue set 1 false teamvar "BonusActif" Red set 0 false 5.7 OpĂ©rateurs Disponibles Les opĂ©rateurs suivants sont disponibles pour toutes les actions de modification de variable : OpĂ©rateur HTSL Alias Description Exemple inc / increment += IncrĂ©mente (ajoute) la valeur stat "Kills" inc 1 dec / decrement -= DĂ©crĂ©mente (soustrait) la valeur stat "HP" dec 5 set = DĂ©finit la valeur exacte stat "Score" set 0 multiply / mult *= Multiplie par la valeur stat "Argent" multiply 2 divide / div /= Divise par la valeur stat "Score" divide 2 unset - Supprime la variable/statistique var "Temp" unset null bitwise and &= ET bit-Ă -bit stat "Flags" bitwise and 7 bitwise or |= OU bit-Ă -bit stat "Flags" bitwise or 4 bitwise xor ^= XOR bit-Ă -bit stat "Flags" bitwise xor 1 left shift <<= DĂ©calage Ă  gauche stat "Val" left shift 2 arithmetic right shift >>= DĂ©calage arithmĂ©tique droite stat "Val" arithmetic right shift 1 logical right shift >>>= DĂ©calage logique droite stat "Val" logical right shift 1 5.8 RĂ©fĂ©rences de Variables dans les Valeurs Lors d'opĂ©rations sur des variables, vous pouvez utiliser d'autres variables/stats comme valeur source grĂące Ă  des mots-clĂ©s spĂ©ciaux dans le champ value : // Copier une stat dans une autre stat "MaxKills" set stat Kills // Utiliser une globalstat comme valeur stat "Score" set globalstat TotalPoints // Utiliser une valeur de teamstat stat "PointsEquipe" set teamstat Points Blue // Utiliser la valeur d'une variable stat "Kills" inc var TempKills De plus, les placeholders %...% peuvent ĂȘtre utilisĂ©s directement dans les valeurs numĂ©riques (voir Chapitre 13). Chapitre 6 - ContrĂŽle de Flux 6.1 if / else - Conditionnels La structure conditionnelle est l'une des fonctionnalitĂ©s les plus puissantes de HTSL. Elle permet d'exĂ©cuter diffĂ©rentes actions selon des conditions. Syntaxe de base if [or|and] () [() ...] { // Actions si les conditions sont vraies } else { // Actions si les conditions sont fausses } Exemples // Condition simple if (stat "Kills" >= 10) { chat "FĂ©licitations ! Vous avez 10 kills !" giveItem "epee_or" false null false } else { chat "Il vous faut encore " + (10 - stat Kills) + " kills." } // Conditions multiples avec OR if or (stat "Kills" >= 100) (hasGroup "VIP" false) { applyPotion "Speed" 60 2 false false chat "Bonus de vitesse !" } else { chat "Vous n'avez pas accĂšs Ă  ce bonus." } // Conditions multiples avec AND (par dĂ©faut) if (stat "Argent" >= 50) (gamemode "adventure") { stat "Argent" dec 50 giveItem "potion_soin" false null false } // if sans bloc else if (isSneaking) { chat "Vous ĂȘtes en train de vous accroupir !" } ?? Note sur or/and Par dĂ©faut (sans mot-clĂ©), HTSL utilise AND : toutes les conditions doivent ĂȘtre vraies. Avec le mot-clĂ© 'or', au moins une condition doit ĂȘtre vraie. 6.2 random - Action AlĂ©atoire Le bloc random exĂ©cute une des actions listĂ©es au hasard. Chaque action a une chance Ă©gale d'ĂȘtre sĂ©lectionnĂ©e. random ? RANDOM_ACTION ExĂ©cute alĂ©atoirement l'une des actions contenues dans le bloc. Syntaxe : random { ... } Exemple : random { chat "RĂ©sultat : 1" chat "RĂ©sultat : 2" chat "RĂ©sultat : 3" giveItem "diamant" false null false giveItem "charbon" false null false } 6.3 loop - Boucles Le mot-clĂ© loop permet de rĂ©pĂ©ter un bloc d'actions un nombre dĂ©fini de fois. La variable d'index est accessible dans le bloc. // Syntaxe : loop { // actions utilisant // } // Exemple : donner 5 items loop 5 i { giveItem "pomme" false null false } // Exemple avec l'index loop 3 compteur { stat "Bonus" inc compteur } // Equivalent Ă  : stat Bonus inc 1, puis inc 2, puis inc 3 ?? Limite de boucles Le nombre d'itĂ©rations maximum est limitĂ© par les contraintes Housing. N'utilisez pas de boucles infinies ou extrĂȘmement grandes. Le nom de l'index ne peut pas ĂȘtre un mot-clĂ© HTSL existant. 6.4 exit - Sortie d'ExĂ©cution exit ? EXIT ArrĂȘte immĂ©diatement l'exĂ©cution de la liste d'actions courante. Aucune action suivante n'est exĂ©cutĂ©e. Syntaxe : exit Exemple : if (stat "Mana" < 10) { chat "Mana insuffisant !" exit } // Le reste n'est exĂ©cutĂ© que si mana >= 10 stat "Mana" dec 10 function "LancerSort" false Chapitre 7 - Toutes les Actions HTSL Ce chapitre documente en dĂ©tail chaque action HTSL disponible, avec sa syntaxe complĂšte, ses paramĂštres, ses valeurs par dĂ©faut et des exemples d'utilisation. 7.1 Actions de Joueur fullHeal - Soin complet fullHeal ? FULL_HEAL Restaure complĂštement les points de vie et la faim du joueur. Syntaxe : fullHeal Exemple : // Soigner le joueur Ă  la mort fullHeal houseSpawn kill - Tuer le joueur kill ? KILL Tue immĂ©diatement le joueur. Syntaxe : kill Exemple : if (stat "Morts" >= 5) { kill } changeHealth - Modifier les PV changeHealth ? SET_HEALTH Modifie les points de vie du joueur selon le mode spĂ©cifiĂ©. Syntaxe : changeHealth ParamĂštres : ‱ [Set/Increment/Decrement/Multiply/Divide] dĂ©faut: Set - Comment appliquer la valeur ‱ [number] dĂ©faut: 20 - Valeur de points de vie Exemple : changeHealth set 20 changeHealth inc 5 changeHealth dec 3 maxHealth - Modifier les PV maximum maxHealth ? SET_MAX_HEALTH Modifie le maximum de points de vie du joueur. Syntaxe : maxHealth ParamĂštres : ‱ [Set/Increment/Decrement/Multiply/Divide] dĂ©faut: Set - Mode de modification ‱ [number] dĂ©faut: 20 - Nouvelle valeur max de PV ‱ [boolean] dĂ©faut: true - Si true, soigne le joueur lors du changement Exemple : maxHealth set 40 true maxHealth inc 2 false hungerLevel - Modifier la faim hungerLevel ? SET_HUNGER_LEVEL Modifie le niveau de faim du joueur. Syntaxe : hungerLevel ParamĂštres : ‱ [Set/Increment/Decrement/Multiply/Divide] dĂ©faut: Set - Mode de modification ‱ [number] dĂ©faut: 20 - Niveau de faim (0-20) Exemple : hungerLevel set 20 hungerLevel dec 5 gamemode - Changer le mode de jeu gamemode ? SET_GAMEMODE Change le mode de jeu du joueur. Syntaxe : gamemode ParamĂštres : ‱ [Adventure/Survival/Creative] dĂ©faut: null - Mode de jeu cible Exemple : gamemode creative gamemode adventure gamemode survival xpLevel - Donner des niveaux d'XP xpLevel ? GIVE_EXP_LEVELS Donne des niveaux d'expĂ©rience au joueur. Syntaxe : xpLevel ParamĂštres : ‱ [number] dĂ©faut: 1 - Nombre de niveaux Ă  donner Exemple : xpLevel 1 xpLevel 10 // Donner XP en fonction des kills xpLevel stat Kills houseSpawn - Retour au spawn houseSpawn ? SPAWN TĂ©lĂ©porte le joueur au point de spawn de la maison. Syntaxe : houseSpawn Exemple : // À la mort stat "Morts" inc 1 houseSpawn fullHeal changePlayerGroup - Changer le groupe changePlayerGroup ? CHANGE_PLAYER_GROUP Change le groupe (rang) du joueur dans la maison. Syntaxe : changePlayerGroup ParamĂštres : ‱ [string (nom de groupe)] dĂ©faut: null - Nom du groupe Housing cible ‱ [boolean] dĂ©faut: true - Si true, ne peut pas rĂ©trograder le joueur Exemple : changePlayerGroup "VIP" true changePlayerGroup "Default" false changeGroup - Alias de changePlayerGroup changeGroup est un alias complet de changePlayerGroup. Les deux commandes sont interchangeables. changeGroup "Moderateur" true 7.2 Actions d'Affichage chat - Envoyer un message chat ? SEND_MESSAGE Envoie un message dans le chat du joueur. Supporte les codes couleur Minecraft (&) et les placeholders %...%. Syntaxe : chat ParamĂštres : ‱ [string] dĂ©faut: "Hello!" - Texte du message (supporte codes couleur et placeholders) Exemple : chat "&aBonjour &e%player.name% &a!" chat "Vos kills : &6%stat.player/Kills%" chat "Position : %player.location.x%, %player.location.y%, %player.location.z%" actionBar - Barre d'action actionBar ? ACTION_BAR Affiche un message dans la barre d'action (au-dessus de la barre de vie/faim). Syntaxe : actionBar ParamĂštres : ‱ [string] dĂ©faut: "Hello World!" - Message Ă  afficher dans l'action bar Exemple : actionBar "&aPV : %player.health% / %player.maxhealth%" actionBar "&6Score : %stat.player/Score%" title - Titre et sous-titre title ? TITLE Affiche un grand titre au centre de l'Ă©cran du joueur. Syntaxe : title <subtitle> <fadein> <stay> <fadeout> ParamĂštres : ‱ <title> [string] dĂ©faut: "Hello World!" - Texte du titre principal (grande police) ‱ <subtitle> [string] dĂ©faut: "" - Texte du sous-titre (sous le titre) ‱ <fadein> [number (ticks)] dĂ©faut: 1 - DurĂ©e de fondu d'entrĂ©e en ticks (20 ticks = 1 seconde) ‱ <stay> [number (ticks)] dĂ©faut: 5 - DurĂ©e d'affichage en ticks ‱ <fadeout> [number (ticks)] dĂ©faut: 1 - DurĂ©e de fondu de sortie en ticks Exemple : title "&aVICTOIRE !" "&eVous avez gagnĂ© !" 10 40 10 title "&cDĂ©faite" "&7RĂ©essayez" 5 30 5 title "Niveau %stat.player/Niveau%" "" 5 20 5 displayMenu - Ouvrir un menu displayMenu ? DISPLAY_MENU Ouvre un menu Housing personnalisĂ© pour le joueur. Syntaxe : displayMenu <menu> ParamĂštres : ‱ <menu> [string (nom de menu)] dĂ©faut: null - Nom du menu Housing Ă  afficher Exemple : displayMenu "Boutique" displayMenu "Statistiques" displayMenu "Menu Principal" closeMenu - Fermer le menu closeMenu ? CLOSE_MENU Ferme le menu actuellement ouvert par le joueur. Syntaxe : closeMenu Exemple : // Fermer aprĂšs traitement stat "Achats" inc 1 closeMenu displayNametag - Afficher/masquer le nametag displayNametag ? TOGGLE_NAMETAG_DISPLAY Active ou dĂ©sactive l'affichage du nametag (pseudo au-dessus de la tĂȘte) du joueur. Syntaxe : displayNametag <display_nametag> ParamĂštres : ‱ <display_nametag> [boolean] dĂ©faut: true - true pour afficher, false pour masquer Exemple : displayNametag false displayNametag true playerWeather - MĂ©tĂ©o personnalisĂ©e playerWeather ? SET_PLAYER_WEATHER DĂ©finit la mĂ©tĂ©o visible uniquement pour ce joueur. Syntaxe : playerWeather <weather> ParamĂštres : ‱ <weather> [Sunny/Raining] dĂ©faut: null - Type de mĂ©tĂ©o Exemple : playerWeather Raining if (stat "MalĂ©diction" >= 1) { playerWeather Raining } else { playerWeather Sunny } playerTime - Heure personnalisĂ©e playerTime ? SET_PLAYER_TIME DĂ©finit l'heure du jour visible uniquement pour ce joueur. Syntaxe : playerTime <time> ParamĂštres : ‱ <time> [custom_time (valeur 0-24000)] dĂ©faut: null - Heure en ticks de jeu (0=aube, 6000=midi, 12000=coucher, 18000=nuit) Exemple : playerTime 6000 // Nuit permanente playerTime 18000 7.3 Actions d'Inventaire giveItem - Donner un item giveItem ? GIVE_ITEM Donne un item au joueur. L'item doit ĂȘtre rĂ©fĂ©rencĂ© par le nom de son fichier JSON. Syntaxe : giveItem <item> <allow_multiple> <inventory_slot> <replace_existing_item> ParamĂštres : ‱ <item> [filename (sans extension)] dĂ©faut: null - Nom du fichier JSON de l'item (dans imports/) ‱ <allow_multiple> [boolean] dĂ©faut: false - Autoriser de donner mĂȘme si le joueur a dĂ©jĂ  l'item ‱ <inventory_slot> [slot ou -1] dĂ©faut: -1 - Slot d'inventaire cible (-1 = premier slot libre, ou Helmet/Chestplate/Leggings/Boots/Offhand) ‱ <replace_existing_item> [boolean] dĂ©faut: false - Remplacer l'item existant dans le slot Exemple : giveItem "epee_diamant" false null false giveItem "casque_fer" false Helmet false giveItem "pomme" true null false removeItem - Retirer un item removeItem ? REMOVE_ITEM Retire un item spĂ©cifique de l'inventaire du joueur. Syntaxe : removeItem <item> ParamĂštres : ‱ <item> [filename] dĂ©faut: null - Nom du fichier JSON de l'item Ă  retirer Exemple : removeItem "clef_porte" removeItem "ticket" resetInventory - RĂ©initialiser l'inventaire resetInventory ? RESET_INVENTORY RĂ©initialise l'inventaire du joueur selon le layout par dĂ©faut de la maison. Syntaxe : resetInventory Exemple : // À la mort resetInventory houseSpawn fullHeal applyLayout - Appliquer un layout applyLayout ? APPLY_LAYOUT Applique un layout d'inventaire Housing prĂ©dĂ©fini. Syntaxe : applyLayout <layout> ParamĂštres : ‱ <layout> [string (nom de layout)] dĂ©faut: null - Nom du layout Housing Ă  appliquer Exemple : applyLayout "Guerrier" applyLayout "Mage" applyLayout "Kit_DĂ©fault" enchant - Enchanter l'item en main enchant ? ENCHANT_HELD_ITEM Enchante l'item actuellement tenu en main par le joueur. Syntaxe : enchant <enchantment> <level> ParamĂštres : ‱ <enchantment> [string (nom enchantement)] dĂ©faut: null - Nom de l'enchantement (voir Annexe A) ‱ <level> [number] dĂ©faut: 1 - Niveau de l'enchantement Exemple : enchant "Sharpness" 5 enchant "Protection" 4 enchant "Unbreaking" 3 consumeItem - Consommer l'item en main consumeItem ? USE_HELD_ITEM Utilise et/ou retire l'item actuellement tenu en main. Syntaxe : consumeItem Exemple : // Utiliser une potion tenue consumeItem chat "Potion utilisĂ©e !" dropItem - Faire tomber un item dropItem ? DROP_ITEM Fait tomber un item Ă  une location spĂ©cifique dans le monde. Syntaxe : dropItem <item> <location> <drop_naturally> <prevent_item_merging> <prioritize_player> <fallback_to_inventory> <despawn_duration_ticks> <pickup_delay_ticks> ParamĂštres : ‱ <item> [filename] dĂ©faut: null - Item Ă  faire tomber ‱ <location> [location] dĂ©faut: null - Endroit oĂč faire tomber l'item ‱ <drop_naturally> [boolean] dĂ©faut: true - Animation de drop naturelle ‱ <prevent_item_merging> [boolean] dĂ©faut: false - EmpĂȘche la fusion avec des items similaires ‱ <prioritize_player> [boolean] dĂ©faut: false - PrioritĂ© au joueur pour le ramassage ‱ <fallback_to_inventory> [boolean] dĂ©faut: false - Aller dans l'inventaire si le sol est plein ‱ <despawn_duration_ticks> [number] dĂ©faut: 6000 - DurĂ©e avant disparition (20t = 1s) ‱ <pickup_delay_ticks> [number] dĂ©faut: 10 - DĂ©lai avant que le joueur puisse ramasser Exemple : dropItem stone invokers_location false false false true 10 10 dropItem "tresor" house_spawn true false true false 6000 20 7.4 Actions de Mouvement tp - TĂ©lĂ©porter le joueur tp ? TELEPORT_PLAYER TĂ©lĂ©porte le joueur Ă  une location donnĂ©e. Syntaxe : tp <location> <prevent_teleport_inside_blocks> ParamĂštres : ‱ <location> [location] dĂ©faut: null - Destination (voir Chapitre 9) ‱ <prevent_teleport_inside_blocks> [boolean] dĂ©faut: false - EmpĂȘche de tĂ©lĂ©porter dans un bloc solide Exemple : tp house_spawn false tp current_location false tp custom_coordinates "100 64 200 90 0" false tp invokers_location true changeVelocity - Modifier la vĂ©locitĂ© changeVelocity ? CHANGE_VELOCITY Modifie la vĂ©locitĂ© (vitesse et direction) du joueur. Syntaxe : changeVelocity <x_direction> <y_direction> <z_direction> ParamĂštres : ‱ <x_direction> [number] dĂ©faut: 10 - Composante X de la vĂ©locitĂ© ‱ <y_direction> [number] dĂ©faut: 10 - Composante Y de la vĂ©locitĂ© ‱ <z_direction> [number] dĂ©faut: 10 - Composante Z de la vĂ©locitĂ© Exemple : // Propulser vers le haut changeVelocity 0 2.5 0 // Propulsion diagonale changeVelocity 1.5 1.5 0 launchTarget - Propulser vers une cible launchTarget ? LAUNCH_TO_TARGET Propulse le joueur en direction d'une location cible. Syntaxe : launchTarget <target_location> <launch_strength> ParamĂštres : ‱ <target_location> [location] dĂ©faut: null - Location de destination visĂ©e ‱ <launch_strength> [number] dĂ©faut: 2 - Force de la propulsion Exemple : launchTarget house_spawn 3 launchTarget custom_coordinates "0 100 0 ~ ~" 5 compassTarget - Cibler la boussole compassTarget ? SET_COMPASS_TARGET DĂ©finit la cible de la boussole du joueur. Syntaxe : compassTarget <location> ParamĂštres : ‱ <location> [location] dĂ©faut: null - Location vers laquelle la boussole pointera Exemple : compassTarget house_spawn compassTarget custom_coordinates "100 64 100 ~ ~" 7.5 Actions de Potion applyPotion - Appliquer un effet applyPotion ? POTION_EFFECT Applique un effet de potion au joueur. Syntaxe : applyPotion <effect> <duration> <level> <override_existing_effects> <show_potion_icon> ParamĂštres : ‱ <effect> [string (nom effet)] dĂ©faut: null - Nom de l'effet (voir Annexe B) ‱ <duration> [number (secondes)] dĂ©faut: 60 - DurĂ©e de l'effet en secondes ‱ <level> [number] dĂ©faut: 1 - Niveau de l'effet (1 = niveau I, 2 = niveau II, etc.) ‱ <override_existing_effects> [boolean] dĂ©faut: false - Remplacer l'effet existant mĂȘme si plus puissant ‱ <show_potion_icon> [boolean] dĂ©faut: false - Afficher l'icĂŽne de potion Ă  l'Ă©cran Exemple : applyPotion "Speed" 30 2 false true applyPotion "Strength" 60 1 false false applyPotion "Regeneration" 10 1 true true applyPotion "Invisibility" 120 1 false false clearEffects - Supprimer tous les effets clearEffects ? CLEAR_EFFECTS Supprime tous les effets de potion actifs sur le joueur. Syntaxe : clearEffects Exemple : // Purifier le joueur clearEffects fullHeal chat "Effets supprimĂ©s !" 7.6 Actions de Groupe / Équipe setTeam - DĂ©finir l'Ă©quipe setTeam ? SET_PLAYER_TEAM Assigne le joueur Ă  une Ă©quipe Housing. Syntaxe : setTeam <team> ParamĂštres : ‱ <team> [string (nom Ă©quipe) ou None] dĂ©faut: None - Nom de l'Ă©quipe cible, ou None pour retirer de toute Ă©quipe Exemple : setTeam "Blue" setTeam "Red" setTeam None balanceTeam - Équilibrer les Ă©quipes balanceTeam ? BALANCE_PLAYER_TEAM Assigne automatiquement le joueur Ă  l'Ă©quipe la moins remplie pour Ă©quilibrer les effectifs. Syntaxe : balanceTeam Exemple : // À la connexion d'un joueur balanceTeam chat "Vous avez Ă©tĂ© assignĂ© Ă  une Ă©quipe !" 7.7 Actions de Jeu sound - Jouer un son sound ? PLAY_SOUND Joue un son au joueur ou Ă  une location. Syntaxe : sound <sound> <volume> <pitch> <location> ParamĂštres : ‱ <sound> [string (nom son)] dĂ©faut: null - Nom du son Hypixel Housing ‱ <volume> [number] dĂ©faut: 0.7 - Volume du son (0.0 Ă  2.0) ‱ <pitch> [number] dĂ©faut: 1 - Pitch du son (0.5 Ă  2.0, 1 = normal) ‱ <location> [location] dĂ©faut: null - Endroit d'oĂč provient le son Exemple : sound "Level Up" 0.7 1 current_location sound "Anvil Land" 1 0.5 house_spawn sound "Note Pling" 0.8 1.5 invokers_location pause - Pause pause ? PAUSE Fait une pause dans l'exĂ©cution des actions. Utile pour sĂ©quencer des effets dans le temps. Syntaxe : pause <ticks_to_wait> ParamĂštres : ‱ <ticks_to_wait> [number] dĂ©faut: 20 - Nombre de ticks Ă  attendre (20 ticks = 1 seconde) Exemple : chat "PrĂ©parez-vous..." pause 40 chat "GO !" sound "Level Up" 1 1 current_location cancelEvent - Annuler l'Ă©vĂ©nement cancelEvent ? CANCEL_EVENT Annule l'Ă©vĂ©nement qui a dĂ©clenchĂ© les actions actuelles (ex: annuler un clic, une interaction). Syntaxe : cancelEvent Exemple : // Dans les actions d'un NPC - empĂȘcher l'interaction if (stat "Argent" < 100) { chat "Vous n'avez pas assez d'argent !" cancelEvent } 7.8 Actions de Navigation function - DĂ©clencher une fonction function ? TRIGGER_FUNCTION DĂ©clenche une fonction Housing existante. Syntaxe : function <function> <trigger_for_all_players> ParamĂštres : ‱ <function> [string (nom fonction)] dĂ©faut: null - Nom de la fonction Ă  dĂ©clencher ‱ <trigger_for_all_players> [boolean] dĂ©faut: false - Si true, dĂ©clenche pour tous les joueurs en ligne Exemple : function "SauvegarderScore" false function "ResetPartie" true if (stat "Kills" >= 10) { function "VictoireJoueur" false } lobby - Envoyer vers un lobby lobby ? SEND_TO_LOBBY Envoie le joueur vers un lobby Hypixel spĂ©cifique. Syntaxe : lobby <location> ParamĂštres : ‱ <location> [string (nom lobby)] dĂ©faut: null - Nom du lobby de destination (voir Annexe C) Exemple : lobby "Main Lobby" lobby "Bed Wars" lobby "SkyWars" parkCheck - Checkpoint Parkour parkCheck ? PARKOUR_CHECKPOINT Enregistre le checkpoint de parkour courant pour le joueur. Syntaxe : parkCheck Exemple : // Dans les actions d'une plaque de pression parkCheck chat "Checkpoint atteint !" sound "Level Up" 0.7 1 current_location failParkour - Échouer le parkour failParkour ? BAIL_PARKOUR Force le joueur Ă  Ă©chouer le parkour en cours avec un message. Syntaxe : failParkour <reason> ParamĂštres : ‱ <reason> [string] dĂ©faut: "Failed!" - Message affichĂ© lors de l'Ă©chec Exemple : // Zone dangereuse failParkour "Hors limites !" failParkour "Temps Ă©coulĂ© !" Chapitre 8 - Toutes les Conditions HTSL Les conditions s'utilisent dans les blocs if (...). Chaque condition est placĂ©e entre parenthĂšses. Ce chapitre documente toutes les conditions disponibles. 8.1 Conditions de Variable stat ? VARIABLE_REQUIREMENT (Player) VĂ©rifie la valeur d'une statistique joueur. Syntaxe : stat <variable> <comparator> <compare_value> ParamĂštres : ‱ <variable> [string] dĂ©faut: "Kills" - Nom de la statistique ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number/string/placeholder] dĂ©faut: null - Valeur Ă  comparer Exemple : if (stat "Kills" >= 10) { chat "10 kills atteints !" } globalstat ? VARIABLE_REQUIREMENT (Global) VĂ©rifie la valeur d'une statistique globale. Syntaxe : globalstat <variable> <comparator> <compare_value> ParamĂštres : ‱ <variable> [string] dĂ©faut: "Kills" - Nom de la statistique globale ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number/string] dĂ©faut: null - Valeur Ă  comparer Exemple : if (globalstat "PhaseJeu" = 2) { chat "La partie est en phase 2 !" } teamstat ? VARIABLE_REQUIREMENT (Team) VĂ©rifie la valeur d'une statistique d'Ă©quipe. Syntaxe : teamstat <variable> <team> <comparator> <compare_value> ParamĂštres : ‱ <variable> [string] dĂ©faut: "Kills" - Nom de la stat d'Ă©quipe ‱ <team> [string] dĂ©faut: "Blue" - Équipe cible ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur ‱ <compare_value> [number] dĂ©faut: null - Valeur Ă  comparer Exemple : if (teamstat "Points" Blue >= 50) { chat "L'Ă©quipe Bleue gagne !" function "FinPartie" true } var ? VARIABLE_REQUIREMENT (Player var) VĂ©rifie la valeur d'une variable joueur temporaire. Syntaxe : var <variable> <comparator> <compare_value> <fallback_value> ParamĂštres : ‱ <variable> [string] dĂ©faut: null - Nom de la variable ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number/string] dĂ©faut: null - Valeur Ă  comparer ‱ <fallback_value> [number/string] dĂ©faut: null - Valeur si la variable n'existe pas Exemple : if (var "EnCombat" = 1 0) { chat "Vous ĂȘtes en combat !" } globalvar ? VARIABLE_REQUIREMENT (Global var) VĂ©rifie la valeur d'une variable globale temporaire. Syntaxe : globalvar <variable> <comparator> <compare_value> <fallback_value> ParamĂštres : ‱ <variable> [string] dĂ©faut: null - Nom de la variable globale ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur ‱ <compare_value> [number/string] dĂ©faut: null - Valeur cible ‱ <fallback_value> [number/string] dĂ©faut: null - Valeur par dĂ©faut si inexistante Exemple : if (globalvar "BossActif" = 1 0) { chat "Le boss est actif !" } placeholder ? PLACEHOLDER_NUMBER Compare la valeur numĂ©rique retournĂ©e par un placeholder. Syntaxe : placeholder <placeholder> <comparator> <compare_value> ParamĂštres : ‱ <placeholder> [string (placeholder)] dĂ©faut: null - Le placeholder Ă  Ă©valuer ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number] dĂ©faut: null - Valeur cible Exemple : if (placeholder "%player.health%" < 5) { chat "PV critiques !" applyPotion Regeneration 10 2 true false } 8.2 Conditions de Joueur health ? HEALTH VĂ©rifie les points de vie actuels du joueur. Syntaxe : health <comparator> <compare_value> ParamĂštres : ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number] dĂ©faut: null - Valeur de PV Ă  comparer Exemple : if (health < 5) { applyPotion "Regeneration" 10 2 true false } maxHealth ? MAX_HEALTH VĂ©rifie les points de vie maximum du joueur. Syntaxe : maxHealth <comparator> <compare_value> ParamĂštres : ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur ‱ <compare_value> [number] dĂ©faut: null - Valeur de PV max Ă  comparer Exemple : if (maxHealth = 40) { chat "Vous ĂȘtes en forme maximale !" } hunger ? HUNGER_LEVEL VĂ©rifie le niveau de faim du joueur. Syntaxe : hunger <comparator> <compare_value> ParamĂštres : ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur ‱ <compare_value> [number (0-20)] dĂ©faut: null - Niveau de faim Ă  comparer Exemple : if (hunger < 6) { chat "Vous avez faim !" } gamemode ? GAMEMODE VĂ©rifie le mode de jeu actuel du joueur. Syntaxe : gamemode <required_gamemode> ParamĂštres : ‱ <required_gamemode> [Adventure/Survival/Creative] dĂ©faut: null - Mode de jeu requis Exemple : if (gamemode "creative") { chat "Mode crĂ©atif dĂ©tectĂ© !" } isSneaking ? SNEAKING VĂ©rifie si le joueur est en train de se baisser (shift). Syntaxe : isSneaking Exemple : if (isSneaking) { chat "Accroupi !" tp custom_coordinates "0 100 0 ~ ~" false } isFlying ? FLYING VĂ©rifie si le joueur est en train de voler. Syntaxe : isFlying Exemple : if (isFlying) { chat "En vol !" } doingParkour ? IN_PARKOUR VĂ©rifie si le joueur est en train de faire un parcours de parkour. Syntaxe : doingParkour Exemple : if (doingParkour) { chat "Bonne chance en parkour !" } canPvp ? PVP_ENABLED VĂ©rifie si le PvP est activĂ© pour le joueur. Syntaxe : canPvp Exemple : if (canPvp) { chat "PvP activĂ© !" } 8.3 Conditions d'Inventaire hasItem ? HAS_ITEM VĂ©rifie si le joueur possĂšde un item spĂ©cifique. Syntaxe : hasItem <item> <what_to_check> <where_to_check> <required_amount> ParamĂštres : ‱ <item> [filename] dĂ©faut: null - Item Ă  rechercher (fichier JSON) ‱ <what_to_check> [Item Type / Metadata] dĂ©faut: Metadata - Niveau de vĂ©rification de l'item ‱ <where_to_check> [Hand/Armor/Hotbar/Inventory/Cursor/Crafting Grid/Anywhere] dĂ©faut: Anywhere - OĂč chercher l'item ‱ <required_amount> [Any Amount / Equal or Greater Amount] dĂ©faut: Any Amount - QuantitĂ© requise Exemple : if (hasItem "epee_diamant" "Metadata" "Anywhere" "Any Amount") { chat "Vous avez votre Ă©pĂ©e !" } isItem ? IS_ITEM VĂ©rifie si l'item dans une position spĂ©cifique correspond Ă  l'item donnĂ©. Syntaxe : isItem <item> <what_to_check> <where_to_check> <required_amount> ParamĂštres : ‱ <item> [filename] dĂ©faut: null - Item de rĂ©fĂ©rence ‱ <what_to_check> [Item Type / Metadata] dĂ©faut: Metadata - Niveau de vĂ©rification ‱ <where_to_check> [Hand/Armor/Hotbar/Inventory/Cursor/Crafting Grid/Anywhere] dĂ©faut: Hand - OĂč vĂ©rifier ‱ <required_amount> [Any Amount / Equal or Greater Amount] dĂ©faut: Any Amount - QuantitĂ© Exemple : if (isItem "epee_or" "Item Type" "Hand" "Any Amount") { chat "ÉpĂ©e en or en main !" } 8.4 Conditions d'Environnement inRegion ? IN_REGION VĂ©rifie si le joueur se trouve dans une rĂ©gion Housing spĂ©cifique. Syntaxe : inRegion <region> ParamĂštres : ‱ <region> [string (nom rĂ©gion)] dĂ©faut: null - Nom de la rĂ©gion Housing Exemple : if (inRegion "ZoneCombat") { chat "Vous entrez en zone de combat !" applyPotion "Strength" 30 1 false false } hasPotion ? POTION_EFFECT VĂ©rifie si le joueur a un effet de potion spĂ©cifique actif. Syntaxe : hasPotion <effect> ParamĂštres : ‱ <effect> [string (nom effet)] dĂ©faut: null - Nom de l'effet de potion (voir Annexe B) Exemple : if (hasPotion "Invisibility") { chat "Vous ĂȘtes invisible !" } blockType ? BLOCK_TYPE VĂ©rifie le type de bloc Ă  la position du joueur ou d'une interaction. Syntaxe : blockType <item> <match_type_only> ParamĂštres : ‱ <item> [filename/blockname] dĂ©faut: null - Type de bloc Ă  vĂ©rifier ‱ <match_type_only> [boolean] dĂ©faut: false - Si true, vĂ©rifie seulement le type sans les mĂ©tadonnĂ©es Exemple : if (blockType "stone" false) { chat "Sur de la pierre !" } portal ? PORTAL_TYPE VĂ©rifie le type de portail interagi. Syntaxe : portal <portal_type> ParamĂštres : ‱ <portal_type> [Nether Portal / End Portal] dĂ©faut: End Portal - Type de portail Exemple : if (portal "Nether Portal") { cancelEvent tp house_spawn false chat "Les portails sont dĂ©sactivĂ©s !" } fishingEnv ? FISHING_ENVIRONMENT VĂ©rifie l'environnement de pĂȘche (eau ou lave). Syntaxe : fishingEnv <environment> ParamĂštres : ‱ <environment> [Water / Lava] dĂ©faut: Water - Type d'environnement de pĂȘche Exemple : if (fishingEnv "Lava") { chat "PĂȘche en lave dĂ©tectĂ©e !" giveItem "poisson_feu" false null false } damageCause ? DAMAGE_CAUSE VĂ©rifie la cause des dĂ©gĂąts reçus par le joueur. Syntaxe : damageCause <cause> ParamĂštres : ‱ <cause> [Entity Attack/Projectile/Suffocation/Fall/Lava/Fire/Fire Tick/Drowning/Starvation/Poison/Thorns] dĂ©faut: null - Cause du dommage Exemple : if (damageCause "Fall") { stat "ChutesMortelles" inc 1 chat "Attention aux chutes !" } damageAmount ? DAMAGE_AMOUNT VĂ©rifie la quantitĂ© de dĂ©gĂąts reçus. Syntaxe : damageAmount <comparator> <compare_value> ParamĂštres : ‱ <comparator> [<, <=, =, >=, >] dĂ©faut: = - OpĂ©rateur de comparaison ‱ <compare_value> [number] dĂ©faut: null - Valeur de dĂ©gĂąts Ă  comparer Exemple : if (damageAmount >= 10) { chat "DĂ©gĂąts importants reçus !" applyPotion Resistance 5 2 true false } 8.5 Conditions de Groupe / Équipe hasGroup / inGroup ? IN_GROUP VĂ©rifie si le joueur appartient Ă  un groupe Housing spĂ©cifique. Syntaxe : hasGroup <required_group> <include_higher_groups> ParamĂštres : ‱ <required_group> [string (nom groupe)] dĂ©faut: null - Nom du groupe requis ‱ <include_higher_groups> [boolean] dĂ©faut: false - Si true, accepte aussi les groupes de rang supĂ©rieur Exemple : if (hasGroup "VIP" true) { applyPotion "Speed" 60 2 false false chat "Bonus VIP activĂ© !" } hasTeam / inTeam ? IN_TEAM VĂ©rifie si le joueur appartient Ă  une Ă©quipe spĂ©cifique. Syntaxe : hasTeam <required_team> ParamĂštres : ‱ <required_team> [string (nom Ă©quipe)] dĂ©faut: None - Nom de l'Ă©quipe requise, ou None Exemple : if (hasTeam "Blue") { chat "Vous ĂȘtes dans l'Ă©quipe Bleue !" } hasPermission ? HAS_PERMISSION VĂ©rifie si le joueur possĂšde une permission Housing spĂ©cifique. Syntaxe : hasPermission <required_permission> ParamĂštres : ‱ <required_permission> [string (nom permission)] dĂ©faut: null - Permission requise (voir Annexe D) Exemple : if (hasPermission "Build") { chat "Vous pouvez construire !" } Chapitre 9 - Locations (Emplacements) Les locations dĂ©finissent des positions dans le monde Housing. Plusieurs types sont disponibles selon le contexte. 9.1 Types de Location Type de Location Description house_spawn Le point de spawn de la maison Housing house_spawn_location Alias de house_spawn current_location La position actuelle du joueur invokers_location La position du joueur qui a dĂ©clenchĂ© l'action custom_coordinates Des coordonnĂ©es personnalisĂ©es dĂ©finies manuellement 9.2 CoordonnĂ©es PersonnalisĂ©es Pour spĂ©cifier des coordonnĂ©es prĂ©cises, utilisez custom_coordinates suivi d'une chaĂźne de coordonnĂ©es au format : // Format : custom_coordinates "<X> <Y> <Z> <Yaw> <Pitch>" // Yaw = rotation horizontale (-180 Ă  180) // Pitch = rotation verticale (-90 Ă  90) tp custom_coordinates "100 64 200 90 0" false compassTarget custom_coordinates "0 64 0 0 0" // Utiliser ~ pour relatif Ă  la position actuelle sound "Level Up" 0.7 1 custom_coordinates "~ ~ ~" ?? CoordonnĂ©es relatives Le symbole ~ signifie 'position actuelle + 0'. Vous pouvez l'utiliser dans les sons et certaines actions pour dĂ©signer la position courante du joueur sans coordonnĂ©es absolues. Chapitre 10 - Sons (Sounds) 10.1 Syntaxe du Son Les sons se jouent avec la commande sound. Les noms de sons sont spĂ©cifiques Ă  Hypixel Housing et peuvent diffĂ©rer des noms Minecraft vanilla. sound <nom_son> <volume> <pitch> <location> // Exemples sound "Level Up" 1.0 1.0 current_location sound "Anvil Land" 0.7 0.8 invokers_location sound "Note Pling" 0.5 1.5 house_spawn sound "Explode" 1.0 1.0 custom_coordinates "~ ~ ~" ParamĂštre Description volume IntensitĂ© sonore. 0.0 = silencieux, 1.0 = normal, 2.0 = maximum. pitch Hauteur tonale. 0.5 = grave, 1.0 = normal, 2.0 = aigu. location Endroit d'oĂč provient le son (affecte la spatialisation 3D). 10.2 Sons Disponibles (SĂ©lection) Voici une liste reprĂ©sentative des sons disponibles dans Hypixel Housing. La liste complĂšte peut ĂȘtre consultĂ©e via l'interface GUI de Housing. CatĂ©gorie Exemples de sons Niveaux / UI Level Up, Click, Note Pling, Note Bass, Note Harp Environnement Explode, Splash, Thunder, Fire Ignite, Door Open Mobs Villager Yes, Villager No, Enderman Scream, Ghast Scream, Zombie Hurt Items Anvil Land, Anvil Break, Bow Fire, Arrow Hit, Item Break Ambiance Music Disc Cat, Music Disc 11, Ambient Cave ?? Trouver les noms de sons Pour trouver le nom exact d'un son, naviguez dans l'action 'Play Sound' via le GUI Housing et notez le nom affichĂ©. Les noms sont sensibles Ă  la casse et peuvent contenir des espaces. Chapitre 11 - Items et NBT 11.1 RĂ©fĂ©rencer un Item Les items dans HTSL sont rĂ©fĂ©rencĂ©s par le nom de leur fichier JSON (sans l'extension .json), stockĂ© dans le dossier imports/ ou dans un sous-dossier configurable. // Structure d'un fichier d'item (ex: stone.json) { "item": "<NBT data de l'item copiĂ© depuis Minecraft>" } // Dans HTSL, rĂ©fĂ©rencez-le ainsi : giveItem "stone" false null false removeItem "stone" hasItem "stone" "Metadata" "Hand" "Any Amount" 11.2 Sauvegarder un Item Ingame Pour sauvegarder un item tenu en main dans un fichier JSON, utilisez la commande /htsl saveitem : // Tenir un item en main, puis : /htsl saveitem <nom_fichier> // Exemple : /htsl saveitem epee_diamant // CrĂ©e le fichier : imports/epee_diamant.json 11.3 Commande giveItem Ingame Pour vous donner un item sauvegardĂ© (utile pour tester), utilisez : /htsl giveitem <nom_fichier> // Exemple /htsl giveitem epee_diamant ?? Mode CrĂ©atif requis La commande /htsl giveitem ne fonctionne qu'en mode crĂ©atif. Si vous ĂȘtes en mode survie ou aventure, vous recevrez une erreur. Chapitre 13 - Placeholders Les placeholders permettent d'insĂ©rer des valeurs dynamiques dans les messages et les calculs. Ils sont entourĂ©s de %. HTSL les convertit automatiquement vers la syntaxe interne de Housing. 13.1 Placeholders de Joueur Placeholder Description %player.health% Points de vie actuels du joueur %player.maxhealth% Points de vie maximum du joueur %player.hunger% Niveau de faim du joueur (0-20) %player.location.x% CoordonnĂ©e X du joueur %player.location.y% CoordonnĂ©e Y du joueur %player.location.z% CoordonnĂ©e Z du joueur %player.name% Nom du joueur (si supportĂ©) %player.location.yaw% Rotation horizontale du joueur (Yaw, -180 Ă  180) %player.location.pitch% Rotation verticale du joueur (Pitch, -90 Ă  90) 13.2 Placeholders de Variable Placeholder Description %stat.player/NomStat% Valeur d'une statistique joueur %stat.global/NomStat% Valeur d'une statistique globale %stat.team/NomEquipe NomStat% Valeur d'une statistique d'Ă©quipe %var.player/NomVar% Valeur d'une variable joueur %var.global/NomVar% Valeur d'une variable globale %var.team/NomEquipe NomVar% Valeur d'une variable d'Ă©quipe 13.3 Placeholders SpĂ©ciaux Placeholder Description %random.int/MIN MAX% Entier alĂ©atoire entre MIN et MAX %date.unix% Timestamp Unix actuel Exemples d'utilisation // Dans un message chat chat "&aPV : &f%player.health% / %player.maxhealth%" chat "&6Kills : &f%stat.player/Kills% | &6Morts : &f%stat.player/Morts%" chat "Position : &b%player.location.x%, %player.location.y%, %player.location.z%" // Dans des calculs (valeur source pour stat) stat "MaxKills" set globalstat TotalKills // Nombre alĂ©atoire stat "LootRarity" set %random.int/1 100% // Dans des conditions avec placeholder if (placeholder "%stat.player/Kills%" >= 50) { chat "50 kills atteints !" } Chapitre 14 - Commandes Ingame HTSL Toutes les commandes HTSL se prĂ©fixent par /htsl. Voici la liste complĂšte. 14.1 Commandes de Base Commande Description Exemple /htsl Affiche l'aide et les commandes disponibles /htsl /htsl help Affiche l'aide dĂ©taillĂ©e /htsl help /htsl config Ouvre le panneau de configuration /htsl config /htsl version Affiche la version de HTSL installĂ©e /htsl version /htsl changelog Affiche les derniĂšres modifications /htsl changelog /htsl guide Fournit un lien vers le guide Hypixel officiel /htsl guide /htsl listscripts Liste tous les fichiers .htsl dans imports/ /htsl listscripts /htsl listscripts <dir> Liste les fichiers dans un sous-dossier /htsl listscripts mescripts 14.2 Commandes de Compilation Commande Description Exemple /htsl gui <fichier> Ouvre le fichier .htsl dans l'Ă©diteur de code ingame /htsl gui monscript /htsl <fichier> Compile et importe le fichier .htsl spĂ©cifiĂ© /htsl monscript /htsl convert <action_id> <fichier> Convertit une action Housing existante en HTSL /htsl convert abc123 output /htsl addfunctions <fichier> Importe seulement les fonctions d'un fichier /htsl addfunctions fonctions 14.3 Commandes d'Item Commande Description Exemple /htsl saveitem <nom> Sauvegarde l'item en main dans imports/<nom>.json /htsl saveitem epee_feu /htsl giveitem <nom> Vous donne l'item sauvegardĂ© (mode crĂ©atif requis) /htsl giveitem epee_feu Chapitre 15 - Tutoriels et Exemples Pratiques 15.1 SystĂšme de Kills et Morts Voici un systĂšme complet de gestion des kills et morts avec affichage du leaderboard. // === SYSTÈME KILLS/MORTS === // ÉvĂ©nement : Mort du joueur goto event "Mort" stat "Morts" inc 1 globalstat "TotalMorts" inc 1 chat "&cVous ĂȘtes mort ! Total morts : &f%stat.player/Morts%" sound "Ghast Scream" 0.7 1 current_location pause 60 houseSpawn fullHeal resetInventory // ÉvĂ©nement : Tuer un joueur goto event "Kill" stat "Kills" inc 1 globalstat "TotalKills" inc 1 chat "&a+1 Kill ! Total : &f%stat.player/Kills%" sound "Level Up" 0.7 1 current_location // VĂ©rifier si record personnel if (stat "Kills" > stat "RecordKills") { stat "RecordKills" set stat Kills chat "&6?? Nouveau record personnel : &f%stat.player/Kills% kills !" } 15.2 SystĂšme de Niveaux // === SYSTÈME DE NIVEAUX === // Fonction Ă  appeler aprĂšs avoir obtenu des XP goto function "VerifierNiveau" if (stat "XP" >= 100) { stat "Niveau" inc 1 stat "XP" dec XP_REQUIS xpLevel 1 title "&6Niveau %stat.player/Niveau% !" "&eFĂ©licitations !" 10 40 10 sound "Level Up" 1 1 current_location chat "&6Vous avez atteint le niveau &f%stat.player/Niveau% !" chat "&7XP restant : &f%stat.player/XP%" // Bonus selon le niveau if (stat "Niveau" = 10) { maxHealth inc 2 true chat "&aBonus dĂ©bloquĂ© : +2 PV max !" } if (stat "Niveau" = 20) { changePlayerGroup "Champion" true chat "&6Groupe \"Champion\" dĂ©bloquĂ© !" } } 15.3 Mini-Jeu de Parkour // === PARKOUR AVANCÉ === // DĂ©marrer le parkour goto function "DemarrerParkour" if (doingParkour) { chat "&cVous faites dĂ©jĂ  un parcours !" exit } chat "&aParcours dĂ©marrĂ© ! Bonne chance !" sound "Note Pling" 1 1 current_location var "TempsDebut" set %date.unix% false gamemode adventure // Checkpoint goto function "Checkpoint1" parkCheck stat "Checkpoints" inc 1 chat "&aCheckpoint 1 atteint ! (%stat.player/Checkpoints%/3)" sound "Note Pling" 0.7 1.2 current_location // Fin du parcours goto function "FinParkour" stat "ParkoursFinis" inc 1 chat "&6Bravo ! Parcours terminĂ© !" sound "Level Up" 1 1 current_location title "&aTerminĂ© !" "&eParcours complĂ©tĂ©" 5 30 5 stat "XP" inc 25 function "VerifierNiveau" false // Zone danger (fail) goto region "ZoneMort" "Enter" failParkour "Hors limites !" chat "&cHors limites ! Retour au dernier checkpoint." sound "Ghast Hurt" 0.7 1 current_location 15.4 Shop de Base // === BOUTIQUE === // NPC Marchand - Clic gauche goto npc "Marchand" "Left Click Actions" displayMenu "Boutique" // Acheter une Ă©pĂ©e (dans les actions du bouton de la GUI) goto function "AcheterEpee" if (stat "Argent" < 50) { chat "&cArgent insuffisant ! (Requis : &6PRIX &cpiĂšces, vous avez : &6%stat.player/Argent%&c)" sound "Villager No" 0.7 1 current_location exit } if (hasItem "epee_fer" "Metadata" "Anywhere" "Any Amount") { chat "&cVous avez dĂ©jĂ  cet item !" exit } stat "Argent" dec 50 giveItem "epee_fer" false null false chat "&aAchat rĂ©ussi ! &f(-&650 &fpiĂšces)" sound "Level Up" 0.7 1 current_location closeMenu 15.5 SystĂšme de Teams // === GESTION D'ÉQUIPES === // À la connexion : assigner Ă  une Ă©quipe Ă©quilibrĂ©e goto event "Connexion" balanceTeam // Afficher l'Ă©quipe if (hasTeam "Blue") { chat "&9Vous rejoignez l'Ă©quipe Bleue !" applyPotion "Speed" 10 1 false false } if (hasTeam "Red") { chat "&cVous rejoignez l'Ă©quipe Rouge !" applyPotion "Strength" 10 1 false false } // Marquer un point pour l'Ă©quipe du joueur goto function "MarquerPoint" if (hasTeam "Blue") { teamstat "Points" Blue inc 1 chat "&9Équipe Bleue marque un point ! (%teamstat.Blue/Points% pts)" } if (hasTeam "Red") { teamstat "Points" Red inc 1 chat "&cÉquipe Rouge marque un point ! (%teamstat.Red/Points% pts)" } // VĂ©rifier victoire if (teamstat "Points" Blue >= 10) { function "VictoireBleu" true } if (teamstat "Points" Red >= 10) { function "VictoireRouge" true } 15.6 Gestion de Groupes // === GROUPES ET RANGS === // VĂ©rifier les privilĂšges goto function "CommandeAdmin" if (hasGroup "Admin" false) { // Commandes admin function "ResetPartie" true chat "&4[Admin] &fPartie rĂ©initialisĂ©e." } else if (hasGroup "Moderateur" true) { // ModĂ©rateurs chat "&2[Modo] &fVous n'avez pas accĂšs Ă  cette commande admin." } else { chat "&cVous n'avez pas les permissions requises." } // RĂ©compenser les joueurs VIP goto event "Connexion" if (hasGroup "VIP" false) { applyPotion "Speed" 300 1 false false chat "&6[VIP] &fVitesse bonus activĂ©e !" } if (hasGroup "MVP" false) { applyPotion "Speed" 300 2 false false applyPotion "Jump Boost" 300 1 false false chat "&b[MVP] &fBonus de vitesse et saut activĂ©s !" } 15.7 Timer et Compteur // === TIMER DE PARTIE === goto function "DemarrerTimer" globalvar "PartieActive" set 1 false globalvar "TempsRestant" set 300 false // 300 secondes = 5 minutes chat "&aPartie dĂ©marrĂ©e ! DurĂ©e : 5 minutes" function "TickTimer" true goto function "TickTimer" if (globalvar "PartieActive" = 1 0) { globalvar "TempsRestant" dec 1 if (globalvar "TempsRestant" = 0 -1) { function "FinPartie" true } if (globalvar "TempsRestant" <= 30 -1) { actionBar "&cTemps restant : &f%var.global/TempsRestant%s" } } 15.8 TĂ©lĂ©porteur Conditionnel // === TÉLÉPORTEUR AVEC CONDITIONS === // Plaque de pression : tĂ©lĂ©porter selon critĂšres goto function "Teleporteur_Zone1" // VĂ©rifier le niveau minimum if (stat "Niveau" < 5) { chat "&cNiveau 5 requis ! (Votre niveau : &f%stat.player/Niveau%&c)" sound "Villager No" 0.7 1 current_location exit } // VĂ©rifier que le joueur a le bon item if (hasItem "laissez_passer" "Metadata" "Anywhere" "Any Amount") { removeItem "laissez_passer" tp custom_coordinates "200 64 200 0 0" false sound "Note Pling" 1 1.5 current_location chat "&aBienvenue dans la Zone 1 !" } else { chat "&cVous avez besoin d'un laissez-passer !" sound "Villager No" 0.7 1 current_location } 15.9 SystĂšme de Vote // === VOTE JOUEUR === goto function "VoterMap1" if (var "AVote" = 1 0) { chat "&cVous avez dĂ©jĂ  votĂ© !" exit } var "AVote" set 1 false globalstat "VotesMap1" inc 1 chat "&aVote enregistrĂ© pour Map 1 ! (%globalstat/VotesMap1% votes)" goto function "VoterMap2" if (var "AVote" = 1 0) { chat "&cVous avez dĂ©jĂ  votĂ© !" exit } var "AVote" set 1 false globalstat "VotesMap2" inc 1 chat "&aVote enregistrĂ© pour Map 2 ! (%globalstat/VotesMap2% votes)" goto function "ResultatsVote" chat "&eRĂ©sultats du vote :" chat "&fMap 1 : &6%stat.global/VotesMap1% votes" chat "&fMap 2 : &6%stat.global/VotesMap2% votes" if (globalstat "VotesMap1" > globalstat "VotesMap2") { chat "&aMap 1 gagne !" function "ChargerMap1" true } else { chat "&aMap 2 gagne !" function "ChargerMap2" true } 15.10 Exemple Complet - RPG Simple Voici un exemple plus complet illustrant un mini-RPG avec classes, combat et progression. // === MINI-RPG COMPLET === // ---- CONNEXION ---- goto event "Connexion" // Initialisation premiĂšre connexion if (stat "EstInitialise" = 0 null) { stat "EstInitialise" set 1 stat "Classe" set 0 stat "Niveau" set 1 stat "XP" set 0 stat "Argent" set 100 stat "Kills" set 0 stat "Morts" set 0 chat "&6Bienvenue ! Choisissez votre classe au NPC de dĂ©part." tp custom_coordinates "0 64 0 0 0" false } else { chat "&aContent de vous revoir, aventurier !" chat "&7Niveau &f%stat.player/Niveau% &7| XP : &f%stat.player/XP% &7| Or : &6%stat.player/Argent%" } applyLayout "Spawn" // ---- CHOIX DE CLASSE ---- goto npc "PNJ_Classes" "Left Click Actions" displayMenu "ChoisirClasse" goto function "ChoisirGuerrier" if (stat "Classe" > 0 null) { chat "&cVous avez dĂ©jĂ  une classe !" exit } stat "Classe" set 1 maxHealth set 30 true applyLayout "KitGuerrier" chat "&4[Guerrier] &fVous ĂȘtes robuste et puissant !" chat "&7PV max augmentĂ©s Ă  30 !" title "&4Guerrier" "&7Force et Vigueur" 10 40 10 sound "Level Up" 1 1 current_location goto function "ChoisirMage" if (stat "Classe" > 0 null) { chat "&cVous avez dĂ©jĂ  une classe !" exit } stat "Classe" set 2 maxHealth set 15 true var "Mana" set 100 false applyLayout "KitMage" chat "&9[Mage] &fVous maĂźtrisez la magie !" chat "&7PV rĂ©duits mais puissance magique Ă©levĂ©e." title "&9Mage" "&7Art Mystique" 10 40 10 sound "Level Up" 1 1.5 current_location goto function "ChoisirArcher" if (stat "Classe" > 0 null) { chat "&cVous avez dĂ©jĂ  une classe !" exit } stat "Classe" set 3 maxHealth set 20 true applyLayout "KitArcher" chat "&2[Archer] &fPrĂ©cision et agilitĂ© !" applyPotion "Speed" 999 1 false false title "&2Archer" "&7PrĂ©cision et AgilitĂ©" 10 40 10 sound "Level Up" 1 0.8 current_location // ---- MORT ---- goto event "Mort" stat "Morts" inc 1 globalstat "TotalMorts" inc 1 sound "Ghast Scream" 0.7 1 current_location title "&cMort !" "" 5 20 5 pause 60 houseSpawn fullHeal resetInventory // RĂ©appliquer les buffs de classe if (stat "Classe" = 3 null) { applyPotion "Speed" 999 1 false false } // ---- XP & NIVEAUX ---- goto function "GagnerXP" stat "XP" inc 10 if (stat "XP" >= stat "Niveau" * 100 null) { // XP requis = Niveau * 100 stat "Niveau" inc 1 stat "XP" set 0 title "&6Niveau %stat.player/Niveau% !" "" 10 30 5 sound "Level Up" 1 1 current_location chat "&6Nouveau niveau : &f%stat.player/Niveau%" } Chapitre 16 - Bonnes Pratiques 16.1 Organisation du Code Une bonne organisation de vos fichiers HTSL est essentielle pour maintenir un projet Housing de qualitĂ©. ‱ CrĂ©ez des fichiers sĂ©parĂ©s par fonctionnalitĂ© : kills.htsl, boutique.htsl, events.htsl ‱ Utilisez des sous-dossiers si votre projet est grand (activez saveDirectory dans les settings) ‱ Commentez toujours la logique non-triviale avec des commentaires // ‱ Nommez vos fonctions Housing de maniĂšre descriptive : VerifierNiveau, GestionMort, etc. 16.2 Nommage des Variables Adoptez une convention de nommage cohĂ©rente pour toutes vos variables et statistiques. Type Convention Exemples Statistiques joueur PascalCase Kills, Morts, Argent, Niveau Variables temporaires camelCase ou prĂ©fixe tmpScore, _phase, sessionData Statistiques globales Prefixe G ou Global GTotalKills, GlobalPhase Statistiques d'Ă©quipe Suffixe Ă©quipe BlueScore, RedKills 16.3 Optimisation ‱ Évitez les boucles trĂšs grandes - elles gĂ©nĂšrent beaucoup d'actions Housing ‱ PrĂ©fĂ©rez les fonctions rĂ©utilisables pour Ă©viter la duplication de code ‱ Utilisez exit pour quitter tĂŽt quand les conditions ne sont pas remplies ‱ Groupez les vĂ©rifications de conditions similaires dans un seul if ‱ RĂ©duisez le nombre de pause - ils comptent comme des actions et ralentissent l'exĂ©cution ‱ Faites attention aux limites d'actions Housing (gĂ©nĂ©ralement 50 par liste) Chapitre 17 - DĂ©pannage et Erreurs Communes 17.1 Erreurs de Compilation Message d'erreur Solution Unknown action 'xxx' on line N Le mot-clĂ© xxx n'est pas reconnu. VĂ©rifiez l'orthographe. Sensible Ă  la casse. Invalid location on line N La location fournie n'est pas valide. VĂ©rifiez les types acceptĂ©s (house_spawn, current_location, etc.) Unknown operator 'xxx' on line N L'opĂ©rateur n'est pas valide. Utilisez inc, dec, set, multiply, divide, unset. Unknown comparator 'xxx' on line N Utilisez <, <=, =, >=, > Couldn't find the file 'xxx' Le fichier .htsl n'existe pas dans imports/. VĂ©rifiez le nom. Nested file calls detected Boucle circulaire d'inclusions dĂ©tectĂ©e. VĂ©rifiez vos goto ... as. Something went wrong with expression evaluation on line N Erreur dans une expression. VĂ©rifiez la syntaxe des conditions. 17.2 Comportements Inattendus ProblĂšme Solution Les actions ne s'importent pas VĂ©rifiez que vous ĂȘtes dans la bonne section Housing (fonction/Ă©vĂ©nement correspondant). Condition toujours fausse VĂ©rifiez le nom exact de la variable (sensible Ă  la casse). Une variable non-initialisĂ©e vaut null. goto ne change pas de contexte VĂ©rifiez la syntaxe goto (goto function, goto event, etc.) et le nom exact. loop gĂ©nĂšre trop d'actions Housing a une limite d'actions. RĂ©duisez le nombre d'itĂ©rations ou dĂ©composez en fonctions. 17.3 FAQ Q : Puis-je utiliser HTSL pour importer des actions dans des Ă©vĂ©nements Housing ? Oui. Utilisez goto event "NomEvenement" puis listez les actions. HTSL naviguera automatiquement dans le GUI Housing pour les importer. Q : HTSL peut-il importer des actions dans des menus personnalisĂ©s ? Oui, via goto custommenu ou en utilisant displayMenu combinĂ© Ă  des fonctions. Consultez la documentation de goto pour les types supportĂ©s. Q : Quelle est la limite d'actions par liste dans Housing ? Hypixel Housing a une limite d'environ 50 actions par liste d'actions. Si votre script dĂ©passe cette limite, dĂ©composez la logique en plusieurs fonctions appelĂ©es sĂ©quentiellement. Q : HTSL fonctionne-t-il avec HTSLReborn ? Les concepts et la syntaxe sont trĂšs similaires entre HTSL original et HTSLReborn. HTSLReborn peut avoir des fonctionnalitĂ©s supplĂ©mentaires. Consultez sa documentation sur GitHub pour les diffĂ©rences. Q : Comment dĂ©boguer un script HTSL ? Utilisez des actions chat pour afficher les valeurs de variables Ă  diffĂ©rentes Ă©tapes de votre script. Ajoutez des messages de debug comme chat "DEBUG: Kills=%stat.player/Kills%" pour suivre l'exĂ©cution. 17.4 Erreurs RĂ©currentes Cette section rĂ©pertorie les erreurs les plus frĂ©quentes rencontrĂ©es lors de l'Ă©criture de scripts HTSL. !! if imbriquĂ© interdit Les blocs if ne peuvent PAS ĂȘtre imbriquĂ©s les uns dans les autres. Si vous avez besoin de tester plusieurs conditions simultanĂ©ment, utilisez un seul if avec plusieurs conditions. !! Action loop interdite L'Ă©criture d'une action loop imbriquĂ©e ou utilisĂ©e comme action directe n'est pas supportĂ©e. !! Plusieurs conditions dans un if : une seule paire de parenthĂšses Il est autorisĂ© de mettre plusieurs conditions dans un mĂȘme if, mais en utilisant UNE SEULE paire de parenthĂšses. Ne pas ouvrir plusieurs parenthĂšses sĂ©parĂ©es. Si nĂ©cessaire, prĂ©fixez avec and. Exemple autorisĂ© : if and (stat "Kills" >= 10 , hasGroup "VIP" , stat "Argent" >= 50) { chat "Conditions remplies !" } Exemple interdit (parenthĂšses multiples sĂ©parĂ©es) : // INCORRECT : // if (stat "Kills" >= 10) (hasGroup "VIP") { ... } !! else if n'existe pas La construction else if n'est PAS supportĂ©e en HTSL. Pour gĂ©rer plusieurs branches conditionnelles, utilisez des blocs if indĂ©pendants, ou imbriquez un if dans un bloc else. Exemple correct : if (stat "Niveau" >= 10) { chat "Niveau Ă©levĂ©" } else { if (stat "Niveau" >= 5) { chat "Niveau intermĂ©diaire" } else { chat "Niveau bas" } } Chapitre 18 - Annexes Annexe A - Liste ComplĂšte des Enchantements Enchantements disponibles dans l'action enchant de HTSL : Enchantement CatĂ©gorie Description Protection Armure RĂ©duit les dĂ©gĂąts gĂ©nĂ©raux Fire Protection Armure RĂ©duit les dĂ©gĂąts de feu Feather Falling Bottes RĂ©duit les dĂ©gĂąts de chute Blast Protection Armure RĂ©duit les dĂ©gĂąts d'explosion Projectile Protection Armure RĂ©duit les dĂ©gĂąts de projectiles Respiration Casque Augmente le temps sous l'eau Aqua Affinity Casque Augmente la vitesse de minage sous l'eau Thorns Armure RĂ©flĂ©chit des dĂ©gĂąts aux attaquants Depth Strider Bottes Augmente la vitesse dans l'eau Sharpness ÉpĂ©e Augmente les dĂ©gĂąts de mĂȘlĂ©e Smite ÉpĂ©e Bonus de dĂ©gĂąts contre les morts-vivants Bane Of Arthropods ÉpĂ©e Bonus de dĂ©gĂąts contre arthropodes Knockback ÉpĂ©e Augmente l'Ă©lan infligĂ© Fire Aspect ÉpĂ©e Met le feu Ă  l'ennemi Looting ÉpĂ©e Augmente les drops de mobs Efficiency Outil Augmente la vitesse de minage Silk Touch Outil RĂ©cupĂšre les blocs tels quels Unbreaking Tout Augmente la durabilitĂ© Fortune Outil Augmente les drops de ressources Power Arc Augmente les dĂ©gĂąts des flĂšches Punch Arc Augmente l'Ă©lan des flĂšches Flame Arc FlĂšches enflammĂ©es Infinity Arc FlĂšches infinies (1 flĂšche requise) Annexe B - Liste ComplĂšte des Effets de Potion Effets disponibles dans les actions applyPotion et la condition hasPotion : Effet Description Utilisation typique Speed Augmente la vitesse de dĂ©placement applyPotion "Speed" 60 1 false false Slowness RĂ©duit la vitesse de dĂ©placement applyPotion "Slowness" 10 1 false false Haste Augmente la vitesse de minage/attaque applyPotion "Haste" 60 2 false false Mining Fatigue RĂ©duit la vitesse de minage applyPotion "Mining Fatigue" 30 1 false false Strength Augmente les dĂ©gĂąts en mĂȘlĂ©e applyPotion "Strength" 60 1 false false Instant Health Soin instantanĂ© applyPotion "Instant Health" 1 1 false false Instant Damage DĂ©gĂąts instantanĂ©s applyPotion "Instant Damage" 1 1 false false Jump Boost Augmente la hauteur de saut applyPotion "Jump Boost" 60 2 false false Nausea Provoque des nausĂ©es visuelles applyPotion "Nausea" 10 1 false false Regeneration RegĂ©nĂšre les PV progressivement applyPotion "Regeneration" 10 2 true false Resistance RĂ©duit les dĂ©gĂąts reçus applyPotion "Resistance" 60 1 false false Fire Resistance ImmunitĂ© au feu et lave applyPotion "Fire Resistance" 60 1 false false Water Breathing Respirer sous l'eau infiniment applyPotion "Water Breathing" 60 1 false false Invisibility Rend le joueur invisible applyPotion "Invisibility" 60 1 false false Blindness RĂ©duit le champ de vision applyPotion "Blindness" 5 1 false false Night Vision Vision nocturne totale applyPotion "Night Vision" 60 1 false false Hunger Augmente la consommation de faim applyPotion "Hunger" 10 1 false false Weakness RĂ©duit les dĂ©gĂąts de mĂȘlĂ©e applyPotion "Weakness" 30 1 false false Poison Inflige des dĂ©gĂąts de poison applyPotion "Poison" 20 1 false false Wither Inflige des dĂ©gĂąts Wither (passe armure) applyPotion "Wither" 10 1 false false Health Boost Augmente les PV max temporairement applyPotion "Health Boost" 60 1 false false Absorption Ajoute des PV supplĂ©mentaires (bouclier) applyPotion "Absorption" 60 2 false false Annexe C - Liste des Lobbies Hypixel Lobbies disponibles dans l'action lobby : Valeur HTSL Destination "Main Lobby" Hall principal Hypixel "Tournament Hall" Hall des tournois "Blitz SG" Blitz Survival Games "The TNT Games" TNT Games "Mega Walls" Mega Walls "Arcade Games" Arcade Games "Cops and Crims" Cops and Criminals "UHC Champions" UHC Champions "Warlords" Warlords "Smash Heroes" Super Smash Mobs "Housing" Housing Lobby "SkyWars" SkyWars "Speed UHC" Speed UHC "Classic Games" Classic Games "Prototype" Prototype Lobby "Bed Wars" Bed Wars "Murder Mystery" Murder Mystery "Build Battle" Build Battle "Duels" Duels "Wool Wars" Wool Wars Annexe D - Liste des Permissions Housing Permissions disponibles dans la condition hasPermission : Permission Description Fly Autorisation de voler Build Autorisation de construire Offline Build Autorisation de construire hors ligne Fluid Manipuler les fluides (eau/lave) Pro Tools Outils professionnels Use Chests Utiliser les coffres Use Ender Chests Utiliser les ender-coffres Item Editor Éditer les items Switch Game Mode Changer de mode de jeu Edit Stats Modifier les statistiques Change Player Group Changer le groupe des joueurs Change Gamerules Modifier les rĂšgles de jeu Housing Menu AccĂ©der au menu Housing Team Chat Spy Espionner le chat d'Ă©quipe Edit Actions Éditer les actions Edit Regions Éditer les rĂ©gions Edit Scoreboard Éditer le scoreboard Edit Event Actions Éditer les actions d'Ă©vĂ©nements Edit Commands Éditer les commandes Edit Functions Éditer les fonctions Edit Inventory Layouts Éditer les layouts d'inventaire Edit Teams Éditer les Ă©quipes Edit Custom Menus Éditer les menus personnalisĂ©s /tp Utiliser la commande /tp /tp Other Players TĂ©lĂ©porter d'autres joueurs Kick Expulser des joueurs Ban Bannir des joueurs Mute RĂ©duire au silence des joueurs Pet Spawning Invoquer des familiers Annexe E - OpĂ©rateurs et Comparateurs OpĂ©rateurs de modification de variable OpĂ©rateur Description Exemple inc / increment Ajoute la valeur stat "X" inc 5 dec / decrement Soustrait la valeur stat "X" dec 3 set DĂ©finit la valeur exacte stat "X" set 100 multiply / mult Multiplie stat "X" multiply 2 divide / div Divise stat "X" divide 4 unset Supprime la variable var "Y" unset null bitwise and ET logique bit-Ă -bit stat "F" bitwise and 7 bitwise or OU logique bit-Ă -bit stat "F" bitwise or 4 bitwise xor XOR bit-Ă -bit stat "F" bitwise xor 1 left shift DĂ©calage gauche stat "F" left shift 2 arithmetic right shift DĂ©calage droite arithmĂ©tique stat "F" arithmetic right shift 1 logical right shift DĂ©calage droite logique stat "F" logical right shift 1 Comparateurs de condition Symbole HTSL Signification Exemple < Strictement infĂ©rieur Ă  stat "X" < 10 <= InfĂ©rieur ou Ă©gal Ă  stat "X" <= 10 = Égal Ă  stat "X" = 5 >= SupĂ©rieur ou Ă©gal Ă  stat "X" >= 3 > Strictement supĂ©rieur Ă  stat "X" > 0 Annexe F - Index AlphabĂ©tique des Commandes Commande HTSL Type Housing ID actionBar Action ACTION_BAR applyLayout Action APPLY_LAYOUT applyPotion Action POTION_EFFECT balanceTeam Action BALANCE_PLAYER_TEAM blockType Condition BLOCK_TYPE cancelEvent Action CANCEL_EVENT canPvp Condition PVP_ENABLED changeGroup Action CHANGE_PLAYER_GROUP changeHealth Action SET_HEALTH changePlayerGroup Action CHANGE_PLAYER_GROUP changeVelocity Action CHANGE_VELOCITY chat Action SEND_MESSAGE clearEffects Action CLEAR_EFFECTS closeMenu Action CLOSE_MENU compassTarget Action SET_COMPASS_TARGET consumeItem Action USE_HELD_ITEM damageCause Condition DAMAGE_CAUSE damageAmount Condition DAMAGE_AMOUNT displayMenu Action DISPLAY_MENU displayNametag Action TOGGLE_NAMETAG_DISPLAY doingParkour Condition IN_PARKOUR dropItem Action DROP_ITEM enchant Action ENCHANT_HELD_ITEM exit Action EXIT failParkour Action BAIL_PARKOUR fishingEnv Condition FISHING_ENVIRONMENT fullHeal Action FULL_HEAL function Action TRIGGER_FUNCTION gamemode Action / Condition SET_GAMEMODE / GAMEMODE giveItem Action GIVE_ITEM globalstat Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT globalvar Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT hasGroup / inGroup Condition IN_GROUP hasItem Condition HAS_ITEM hasPermission Condition HAS_PERMISSION hasPotion Condition POTION_EFFECT hasTeam / inTeam Condition IN_TEAM health Condition HEALTH houseSpawn Action SPAWN hungerLevel Action SET_HUNGER_LEVEL hunger Condition HUNGER_LEVEL if ContrĂŽle CONDITIONAL inRegion Condition IN_REGION isFlying Condition FLYING isItem Condition IS_ITEM isSneaking Condition SNEAKING kill Action KILL launchTarget Action LAUNCH_TO_TARGET lobby Action SEND_TO_LOBBY loop ContrĂŽle - maxHealth Action / Condition SET_MAX_HEALTH / MAX_HEALTH parkCheck Action PARKOUR_CHECKPOINT pause Action PAUSE placeholder Condition PLACEHOLDER_NUMBER playerTime Action SET_PLAYER_TIME playerWeather Action SET_PLAYER_WEATHER portal Condition PORTAL_TYPE random ContrĂŽle RANDOM_ACTION removeItem Action REMOVE_ITEM resetInventory Action RESET_INVENTORY setTeam Action SET_PLAYER_TEAM sound Action PLAY_SOUND stat Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT teamstat Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT teamvar Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT title Action TITLE tp Action TELEPORT_PLAYER var Action / Condition CHANGE_VARIABLE / VARIABLE_REQUIREMENT xpLevel Action GIVE_EXP_LEVELS Documentation HTSL - Housing Trigger Scripting Language ‱ Version 1.4.3 | BusterBrown1218 | discord.gg/bptauV2BAA HTSL - Documentation Officielle | Hypixel Housing HTSL v1.4.3 - BusterBrown1218 """ # 1. Initialisation de l'IA genai.configure(api_key=GOOGLE_API_KEY) modele_ia = genai.GenerativeModel( 'gemini-2.5-flash', system_instruction=SYSTEM_PROMPT ) # 2. La fonction qui discute avec l'IA def repondre_au_htsl(question, history): try: reponse = modele_ia.generate_content(question) return reponse.text except Exception as e: return f"❌ AĂŻe, petit bug : {e}" # 3. CrĂ©ation de l'interface visuelle (Version CorrigĂ©e !) interface = gr.ChatInterface( fn=repondre_au_htsl, title="đŸ€– Mon Expert HTSL Personnel", description="Pose-moi tes pires problĂšmes de code HTSL ! Je connais la documentation par cƓur." ) # 4. Allumage du serveur Web ! if __name__ == "__main__": print("🚀 Lancement du serveur Web local...") interface.launch(inbrowser=True)