| import gradio as gr |
| import google.generativeai as genai |
| import os |
| import google.generativeai as genai |
|
|
| |
| GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY") |
|
|
| |
| genai.configure(api_key=GOOGLE_API_KEY) |
|
|
| |
| |
| |
|
|
|
|
| |
| |
| |
| 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 <variable> <operation> <value> |
| Paramètres : |
| • <variable> [string] défaut: "Kills" - Nom de la statistique (sensible à la casse) |
| • <operation> [opérateur] défaut: inc - Opération à appliquer (voir tableau des opérateurs) |
| • <value> [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 <variable> <operation> <value> |
| Paramètres : |
| • <variable> [string] défaut: "Kills" - Nom de la statistique globale |
| • <operation> [opérateur] défaut: inc - Opération à appliquer |
| • <value> [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 <variable> <team> <operation> <value> |
| Paramètres : |
| • <variable> [string] défaut: "Kills" - Nom de la statistique d'équipe |
| • <team> [string] défaut: "Blue" - Nom de l'équipe ciblée |
| • <operation> [opérateur] défaut: inc - Opération à appliquer |
| • <value> [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 <variable> <operation> <value> <automatic_unset> |
| Paramètres : |
| • <variable> [string] défaut: null - Nom de la variable |
| • <operation> [opérateur] défaut: set - Opération à appliquer |
| • <value> [number/string] défaut: null - Valeur de l'opération |
| • <automatic_unset> [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 <variable> <operation> <value> <automatic_unset> |
| Paramètres : |
| • <variable> [string] défaut: null - Nom de la variable globale |
| • <operation> [opérateur] défaut: set - Opération à appliquer |
| • <value> [number/string] défaut: null - Valeur de l'opération |
| • <automatic_unset> [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 <variable> <team> <operation> <value> <automatic_unset> |
| Paramètres : |
| • <variable> [string] défaut: null - Nom de la variable d'équipe |
| • <team> [string] défaut: null - Nom de l'équipe |
| • <operation> [opérateur] défaut: set - Opération |
| • <value> [number/string] défaut: null - Valeur |
| • <automatic_unset> [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] (<condition1>) [(<condition2>) ...] { |
| // 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 { <action1> <action2> ... } |
| 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 <nombre_iterations> <nom_index> { |
| // actions utilisant <nom_index> |
| // } |
| |
| // 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 <mode> <health> |
| Paramètres : |
| • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Comment appliquer la valeur |
| • <health> [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 <mode> <max_health> <heal_on_change> |
| Paramètres : |
| • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Mode de modification |
| • <max_health> [number] défaut: 20 - Nouvelle valeur max de PV |
| • <heal_on_change> [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 <mode> <level> |
| Paramètres : |
| • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Mode de modification |
| • <level> [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 <gamemode> |
| Paramètres : |
| • <gamemode> [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 <levels> |
| Paramètres : |
| • <levels> [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 <group> <demotion_protection> |
| Paramètres : |
| • <group> [string (nom de groupe)] défaut: null - Nom du groupe Housing cible |
| • <demotion_protection> [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 <message> |
| Paramètres : |
| • <message> [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 <message> |
| Paramètres : |
| • <message> [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 <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 |
| |
| |
| |
| |
| """ |
|
|
| |
| genai.configure(api_key=GOOGLE_API_KEY) |
| modele_ia = genai.GenerativeModel( |
| 'gemini-2.5-flash', |
| system_instruction=SYSTEM_PROMPT |
| ) |
|
|
| |
| 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}" |
|
|
| |
| 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." |
| ) |
|
|
| |
| if __name__ == "__main__": |
| print("🚀 Lancement du serveur Web local...") |
| interface.launch(inbrowser=True) |