NotSky commited on
Commit
9f477ec
·
verified ·
1 Parent(s): f6f126d

Upload webai.py

Browse files
Files changed (1) hide show
  1. webai.py +2676 -0
webai.py ADDED
@@ -0,0 +1,2676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import google.generativeai as genai
3
+
4
+ # ==========================================
5
+ # 🔑 TA CLÉ SECRÈTE
6
+ # ==========================================
7
+ GOOGLE_API_KEY = "AIzaSyAPac-HSiQa5YIkRcbWDr6MV-duOdx35Nc"
8
+
9
+ # ==========================================
10
+ # 🧠 LE CERVEAU (Tes 71 pages !)
11
+ # ==========================================
12
+ SYSTEM_PROMPT = """
13
+ Tu es un expert absolu en HTSL (Housing Trigger Scripting Language) pour Hypixel.
14
+ Tu réponds toujours en français. Ton but est de fournir du code HTSL parfait et sans erreurs.
15
+ Voici l'intégralité de la documentation HTSL :
16
+
17
+
18
+
19
+ HTSL
20
+ Housing Trigger Scripting Language
21
+ Documentation Complète - Fiche de Référence Officielle
22
+
23
+ Hypixel Housing • ChatTriggers Module • Version 1.4.3
24
+ Créé par : BusterBrown1218 • Reborn : redstone-llc
25
+ Support : discord.gg/bptauV2BAA
26
+
27
+
28
+ Table des Matières
29
+
30
+ 1. Introduction à HTSL
31
+ 1.1. Qu'est-ce que HTSL ?
32
+ 1.2. Architecture du module
33
+ 1.3. Prérequis et compatibilité
34
+ 2. Installation et Configuration
35
+ 2.1. Étapes d'installation
36
+ 2.2. Structure des fichiers
37
+ 2.3. Configuration Settings
38
+ 3. Syntaxe Fondamentale
39
+ 3.1. Structure d'un fichier .htsl
40
+ 3.2. Commentaires
41
+ 3.3. Guillemets et chaînes de caractères
42
+ 3.4. Arguments spéciaux
43
+ 4. Contextes et goto
44
+ 4.1. Contexte DEFAULT
45
+ 4.2. Contexte FUNCTION
46
+ 4.3. Contexte EVENT
47
+ 4.4. Contexte COMMAND
48
+ 4.5. goto - naviguer entre contextes
49
+ 4.6. goto as - fichiers externes
50
+ 5. Variables et Statistiques
51
+ 5.1. stat - Statistiques joueur
52
+ 5.2. globalstat - Statistiques globales
53
+ 5.3. teamstat - Statistiques d'équipe
54
+ 5.4. var - Variables joueur
55
+ 5.5. globalvar - Variables globales
56
+ 5.6. teamvar - Variables d'équipe
57
+ 5.7. Opérateurs disponibles
58
+ 5.8. Références de variables dans les valeurs
59
+ 6. Contrôle de Flux
60
+ 6.1. if / else - Conditionnels
61
+ 6.2. random - Action aléatoire
62
+ 6.3. loop - Boucles
63
+ 6.4. exit - Sortie
64
+ 7. Toutes les Actions HTSL
65
+ 7.1. Actions de joueur
66
+ 7.2. Actions d'affichage
67
+ 7.3. Actions d'inventaire
68
+ 7.4. Actions de mouvement
69
+ 7.5. Actions de potion
70
+ 7.6. Actions de groupe / équipe
71
+ 7.7. Actions de jeu
72
+ 7.8. Actions de navigation
73
+ 8. Toutes les Conditions HTSL
74
+ 8.1. Conditions de variable
75
+ 8.2. Conditions de joueur
76
+ 8.3. Conditions d'inventaire
77
+ 8.4. Conditions d'environnement
78
+ 8.5. Conditions de groupe / équipe
79
+ 9. Locations (Emplacements)
80
+ 9.1. Types de location
81
+ 9.2. Coordonnées personnalisées
82
+ 10. Sons (Sounds)
83
+ 10.1. Syntaxe du son
84
+ 10.2. Liste des sons Hypixel Housing
85
+ 11. Items et NBT
86
+ 11.1. Référencer un item
87
+ 11.2. Sauvegarder un item
88
+ 11.3. Commande giveItem
89
+ 13. Placeholders
90
+ 13.1. Placeholders de joueur
91
+ 13.2. Placeholders de variable
92
+ 13.3. Placeholders spéciaux
93
+ 14. Commandes Ingame HTSL
94
+ 14.1. Commandes de base
95
+ 14.2. Commandes de compilation
96
+ 14.3. Commandes d'item
97
+ 15. Tutoriels et Exemples Pratiques
98
+ 15.1. Système de kills et morts
99
+ 15.2. Système de niveaux
100
+ 15.3. Mini-jeu de parkour
101
+ 15.4. Shop de base
102
+ 15.5. Système de teams
103
+ 15.6. Gestion de groupes
104
+ 15.7. Timer et compteur
105
+ 15.8. Téléporteur conditionnel
106
+ 15.9. Système de vote
107
+ 15.10. Exemple complet : RPG simple
108
+ 16. Bonnes Pratiques
109
+ 16.1. Organisation du code
110
+ 16.2. Nommage des variables
111
+ 16.3. Optimisation
112
+ 17. Dépannage et Erreurs Communes
113
+ 17.1. Erreurs de compilation
114
+ 17.2. Comportements inattendus
115
+ 17.3. FAQ
116
+ 18. Annexes
117
+ A. Liste complète des enchantements
118
+ B. Liste complète des potions
119
+ C. Liste des lobbies Hypixel
120
+ D. Liste des permissions Housing
121
+ E. Opérateurs et comparateurs
122
+ F. Index alphabétique des commandes
123
+
124
+
125
+ Chapitre 1 - Introduction à HTSL
126
+ 1.1 Qu'est-ce que HTSL ?
127
+ 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.
128
+ 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.
129
+
130
+ ?? Point Clé
131
+ 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.
132
+ Avantages de HTSL
133
+ • Écriture rapide de logique complexe en quelques lignes
134
+ • Support de conditions, boucles et fonctions
135
+ • Import automatique dans le GUI Housing
136
+ • Gestion des variables (player, global, team)
137
+ • Inclusion de fichiers externes avec goto ... as
138
+ • Support du multi-contexte dans un seul fichier
139
+
140
+ 1.2 Architecture du Module
141
+ Le module HTSL est structuré comme suit :
142
+
143
+ Fichier / Dossier
144
+ Rôle
145
+ index.js
146
+ Point d'entrée, gestion des commandes ingame
147
+ compiler/compile.js
148
+ Compilateur principal HTSL ? actions Housing
149
+ compiler/loadAction.js
150
+ Chargement et automatisation GUI
151
+ compiler/convertAction.js
152
+ Conversion d'actions Housing existantes en HTSL
153
+ compiler/exportAction.js
154
+ Export d'actions
155
+ actions/syntax.js
156
+ Définitions de tous les mots-clés HTSL
157
+ actions/menus.js
158
+ Structure des menus Housing pour chaque action
159
+ actions/conditions.js
160
+ Structure des conditions Housing
161
+ utils/config.js
162
+ Configuration utilisateur
163
+ utils/convertSound.js
164
+ Conversion des noms de sons
165
+ utils/loadItemstack.js
166
+ Chargement de stacks d'items
167
+ utils/createItemStack.js
168
+ Création d'items depuis NBT
169
+ utils/actionLimits.js
170
+ Limites d'actions Housing
171
+ imports/
172
+ Dossier où placer vos fichiers .htsl
173
+ assets/
174
+ Ressources graphiques du module
175
+ 1.3 Prérequis et Compatibilité
176
+ Pour utiliser HTSL, vous avez besoin des éléments suivants :
177
+
178
+ Prérequis
179
+ Détail
180
+ Minecraft
181
+ Version Java Edition (compatible Hypixel)
182
+ ChatTriggers
183
+ Mod Forge/Fabric pour exécuter des modules JS - doit être à jour
184
+ HTSL Module
185
+ Version 1.4.3 ou HTSLReborn (recommandé pour les nouveautés)
186
+ Hypixel Housing
187
+ Accès au mode Housing sur mc.hypixel.net
188
+ Permissions
189
+ Être propriétaire ou avoir les permissions d'édition dans la maison
190
+ ?? Attention - Module archivé
191
+ 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.
192
+
193
+ Chapitre 2 - Installation et Configuration
194
+ 2.1 Étapes d'Installation
195
+ L'installation de HTSL se fait en quelques étapes simples :
196
+
197
+ 1. Téléchargez le fichier ZIP depuis la page GitHub du module ou depuis les releases ChatTriggers.
198
+ 2. Extrayez le contenu du ZIP dans le répertoire suivant :
199
+ ./minecraft/config/ChatTriggers/modules/HTSL/
200
+ 3. Lancez Minecraft avec ChatTriggers installé.
201
+ 4. Une fois en jeu, tapez /ct reload pour charger le module HTSL.
202
+ 5. Vérifiez que le module est chargé avec la commande /htsl version.
203
+
204
+ ?? Astuce
205
+ 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.
206
+ 2.2 Structure des Fichiers
207
+ Une fois HTSL installé, voici la structure complète du module :
208
+
209
+ HTSL/
210
+ +-- index.js # Point d'entrée principal
211
+ +-- metadata.json # Métadonnées du module
212
+ +-- actions/
213
+ ¦ +-- syntax.js # Mots-clés et syntaxe HTSL
214
+ ¦ +-- menus.js # Définitions des menus Housing
215
+ ¦ +-- conditions.js # Définitions des conditions
216
+ +-- compiler/
217
+ ¦ +-- compile.js # Compilateur HTSL
218
+ ¦ +-- loadAction.js # Import GUI automatique
219
+ ¦ +-- convertAction.js # Convertisseur HE ? HTSL
220
+ ¦ +-- exportAction.js # Export d'actions
221
+ +-- gui/
222
+ ¦ +-- codeWindow.js # Éditeur de code ingame
223
+ ¦ +-- GuiBuilder.js # Constructeur GUI
224
+ ¦ +-- Navigator.js # Navigation entre contextes
225
+ ¦ +-- LoadActionGUI.js # Chargeur d'actions GUI
226
+ ¦ +-- Queue.js # File d'opérations automatisées
227
+ +-- utils/
228
+ ¦ +-- config.js # Paramètres utilisateur
229
+ +-- imports/ # ?? VOS FICHIERS .htsl ICI
230
+ ¦ +-- default.htsl # Exemple fourni
231
+ ¦ +-- testing.htsl # Fichier de test
232
+ +-- assets/ # Ressources graphiques
233
+ +-- update/
234
+ +-- changelog.txt # Journal des mises à jour
235
+ +-- update.js # Vérificateur de MAJ
236
+
237
+ 2.3 Configuration Settings
238
+ HTSL propose plusieurs paramètres configurables via /htsl config :
239
+
240
+ Paramètre
241
+ Description
242
+ saveDirectory
243
+ Active/désactive l'organisation en sous-dossiers pour vos fichiers .htsl
244
+ itemPrefix
245
+ Préfixe de dossier pour les fichiers d'items JSON sauvegardés
246
+ Répertoire de sauvegarde
247
+ Chemin de base pour la sauvegarde des items ingame
248
+ Pour accéder au panneau de configuration, tapez en jeu :
249
+ /htsl config
250
+
251
+
252
+ Chapitre 3 - Syntaxe Fondamentale
253
+ 3.1 Structure d'un Fichier .htsl
254
+ 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.
255
+
256
+ Exemple de fichier .htsl basique :
257
+ // Système de bienvenue simple
258
+ goto function "Bienvenue"
259
+ chat "Bienvenue sur ma maison !"
260
+ title "Bienvenue" "Amuse-toi bien !" 1 5 1
261
+ sound "Level Up" 0.7 1 current_location
262
+
263
+ goto function "Quitter"
264
+ chat "Au revoir !"
265
+ lobby "Main Lobby"
266
+
267
+ 3.2 Commentaires
268
+ HTSL supporte deux types de commentaires :
269
+
270
+ Commentaires sur une ligne
271
+ Commencent par // et s'étendent jusqu'à la fin de la ligne. Ils sont entièrement ignorés par le compilateur.
272
+ // Ceci est un commentaire - toute cette ligne est ignorée
273
+ chat "Hello World" // Ceci envoie un message (le commentaire est ignoré)
274
+
275
+ Commentaires multi-lignes
276
+ Commencent par /* et se terminent par */. Tout le contenu entre ces marqueurs est ignoré.
277
+ /*
278
+ Ce bloc entier est commenté.
279
+ Utile pour désactiver temporairement du code
280
+ ou pour écrire de la documentation.
281
+ */
282
+ stat "Kills" inc 1
283
+
284
+ 3.3 Guillemets et Chaînes de Caractères
285
+ 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.
286
+
287
+ // Avec guillemets (obligatoire si espace)
288
+ chat "Hello World"
289
+ stat "Mon compteur" inc 1
290
+ setTeam "Equipe Rouge"
291
+
292
+ // Sans guillemets (possible si pas d'espace)
293
+ gamemode creative
294
+ setTeam Blue
295
+ houseSpawn
296
+
297
+ ?? Règle importante
298
+ 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 \".
299
+ 3.4 Arguments Spéciaux
300
+ HTSL reconnaît plusieurs types d'arguments spéciaux :
301
+
302
+ Argument
303
+ Description
304
+ null
305
+ Valeur nulle - indique à HTSL d'ignorer ce paramètre et d'utiliser la valeur par défaut
306
+ true / false
307
+ Valeurs booléennes pour les paramètres toggle
308
+ slot_N
309
+ Référence un slot d'inventaire spécifique (ex: slot_0, slot_36)
310
+ %placeholder%
311
+ Référence une valeur dynamique (stat, variable, position, etc.)
312
+ \"
313
+ Guillemet échappé dans une chaîne
314
+ \\
315
+ Backslash littéral
316
+
317
+ Chapitre 4 - Contextes et goto
318
+ 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.
319
+
320
+ 4.1 Contexte DEFAULT
321
+ 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).
322
+ // Toutes ces actions sont dans le contexte DEFAULT
323
+ chat "Vous avez cliqué !"
324
+ stat "Clics" inc 1
325
+ fullHeal
326
+
327
+ 4.2 Contexte FUNCTION
328
+ Les fonctions Housing sont des blocs d'actions réutilisables. Pour cibler une fonction spécifique, utilisez goto function.
329
+ goto function "MaFonction"
330
+ // Toutes les actions ci-dessous appartiennent à la fonction "MaFonction"
331
+ chat "Je suis dans MaFonction !"
332
+ stat "FonctionAppels" inc 1
333
+
334
+ goto function "AutreFonction"
335
+ // Début d'un nouveau contexte
336
+ fullHeal
337
+ houseSpawn
338
+
339
+ ?? Conseils Fonctions
340
+ 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.
341
+ 4.3 Contexte EVENT
342
+ 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.
343
+ goto event "Mort"
344
+ // Actions exécutées quand le joueur meurt
345
+ stat "Morts" inc 1
346
+ chat "Vous êtes mort !"
347
+ houseSpawn
348
+
349
+ goto event "Connexion"
350
+ chat "Bienvenue sur le serveur !"
351
+ applyPotion "Speed" 60 1 false false
352
+
353
+ 4.4 Contexte COMMAND
354
+ Les commandes Housing permettent de créer des commandes personnalisées avec /. Le contexte COMMAND cible une commande spécifique.
355
+ goto command "heal"
356
+ // Actions exécutées quand le joueur tape /heal
357
+ fullHeal
358
+ chat "Vous avez été soigné !"
359
+
360
+ goto command "stats"
361
+ // Affiche les statistiques du joueur
362
+ chat "Vos kills : %stat.player/Kills%"
363
+ chat "Vos morts : %stat.player/Morts%"
364
+
365
+ 4.5 Syntaxe Complète de goto
366
+
367
+ Syntaxe goto
368
+ Description
369
+ goto function "Nom"
370
+ Cible la fonction nommée "Nom"
371
+ goto event "NomEvent"
372
+ Cible l'événement nommé "NomEvent"
373
+ goto command "cmd"
374
+ Cible la commande personnalisée "/cmd"
375
+ goto npc "NomNPC" "Action"
376
+ Cible les actions d'un NPC spécifique (Left/Right Click Actions)
377
+ goto region "NomRegion" "trigger"
378
+ Cible les actions d'une région (enter/leave)
379
+ 4.6 goto as - Fichiers Externes
380
+ Il est possible d'importer le contenu d'un autre fichier .htsl pour un contexte donné, en utilisant la syntaxe goto ... as :
381
+ // Importe le fichier "mafonction.htsl" dans la fonction "Bienvenue"
382
+ goto function "Bienvenue" as mafonction
383
+
384
+ // Importe pour un NPC
385
+ goto npc "Marchand" "Left Click Actions" as boutique
386
+
387
+ ?? Attention aux références circulaires
388
+ 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.
389
+
390
+ Chapitre 5 - Variables et Statistiques
391
+ 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.
392
+
393
+ 5.1 stat - Statistiques Joueur
394
+ 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.
395
+
396
+ stat ? CHANGE_VARIABLE (holder: Player)
397
+ Modifie une statistique du joueur actuel. Ces statistiques sont persistantes et spécifiques à chaque joueur.
398
+ Syntaxe : stat <variable> <operation> <value>
399
+ Paramètres :
400
+ • <variable> [string] défaut: "Kills" - Nom de la statistique (sensible à la casse)
401
+ • <operation> [opérateur] défaut: inc - Opération à appliquer (voir tableau des opérateurs)
402
+ • <value> [number/string] défaut: 1 - Valeur utilisée dans l'opération
403
+ Exemple :
404
+ stat "Kills" inc 1
405
+ stat "Score" set 0
406
+ stat "Argent" dec 50
407
+ stat "Multiplicateur" multiply 2
408
+
409
+ 5.2 globalstat - Statistiques Globales
410
+ Les statistiques globales sont partagées par tous les joueurs. Une seule valeur existe, accessible et modifiable par n'importe quel joueur.
411
+
412
+ globalstat ? CHANGE_VARIABLE (holder: Global)
413
+ Modifie une statistique globale partagée par tous les joueurs.
414
+ Syntaxe : globalstat <variable> <operation> <value>
415
+ Paramètres :
416
+ • <variable> [string] défaut: "Kills" - Nom de la statistique globale
417
+ • <operation> [opérateur] défaut: inc - Opération à appliquer
418
+ • <value> [number/string] défaut: 1 - Valeur de l'opération
419
+ Exemple :
420
+ globalstat "TotalKills" inc 1
421
+ globalstat "JoueurConnectes" set 0
422
+ globalstat "RecordKills" set stat RecordValue
423
+
424
+ 5.3 teamstat - Statistiques d'Équipe
425
+ Les statistiques d'équipe sont liées à une équipe spécifique (et non à un joueur individuel).
426
+
427
+ teamstat ? CHANGE_VARIABLE (holder: Team)
428
+ Modifie une statistique pour une équipe donnée.
429
+ Syntaxe : teamstat <variable> <team> <operation> <value>
430
+ Paramètres :
431
+ • <variable> [string] défaut: "Kills" - Nom de la statistique d'équipe
432
+ • <team> [string] défaut: "Blue" - Nom de l'équipe ciblée
433
+ • <operation> [opérateur] défaut: inc - Opération à appliquer
434
+ • <value> [number] défaut: 1 - Valeur de l'opération
435
+ Exemple :
436
+ teamstat "Points" Blue inc 5
437
+ teamstat "Victoires" Red inc 1
438
+ teamstat "Score" Green set 0
439
+
440
+ 5.4 var - Variables Joueur (Non-Persistantes)
441
+ 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.
442
+
443
+ var ? CHANGE_VARIABLE (holder: Player, type: var)
444
+ Modifie une variable de joueur temporaire. Parfaite pour stocker des états de session.
445
+ Syntaxe : var <variable> <operation> <value> <automatic_unset>
446
+ Paramètres :
447
+ • <variable> [string] défaut: null - Nom de la variable
448
+ • <operation> [opérateur] défaut: set - Opération à appliquer
449
+ • <value> [number/string] défaut: null - Valeur de l'opération
450
+ • <automatic_unset> [boolean] défaut: false - Si true, la variable est automatiquement effacée après utilisation
451
+ Exemple :
452
+ var "EnCombat" set 1 false
453
+ var "DernierePosition" set locX false
454
+ var "Session" set 1 false
455
+
456
+ 5.5 globalvar - Variables Globales (Non-Persistantes)
457
+ Variables globales temporaires, partagées par tous les joueurs mais non-persistantes.
458
+
459
+ globalvar ? CHANGE_VARIABLE (holder: Global, type: var)
460
+ Modifie une variable globale temporaire.
461
+ Syntaxe : globalvar <variable> <operation> <value> <automatic_unset>
462
+ Paramètres :
463
+ • <variable> [string] défaut: null - Nom de la variable globale
464
+ • <operation> [opérateur] défaut: set - Opération à appliquer
465
+ • <value> [number/string] défaut: null - Valeur de l'opération
466
+ • <automatic_unset> [boolean] défaut: false - Auto-destruction après utilisation
467
+ Exemple :
468
+ globalvar "PhaseJeu" set 2 false
469
+ globalvar "BossPV" set 1000 false
470
+
471
+ 5.6 teamvar - Variables d'Équipe (Non-Persistantes)
472
+ teamvar ? CHANGE_VARIABLE (holder: Team, type: var)
473
+ Modifie une variable temporaire pour une équipe spécifique.
474
+ Syntaxe : teamvar <variable> <team> <operation> <value> <automatic_unset>
475
+ Paramètres :
476
+ • <variable> [string] défaut: null - Nom de la variable d'équipe
477
+ • <team> [string] défaut: null - Nom de l'équipe
478
+ • <operation> [opérateur] défaut: set - Opération
479
+ • <value> [number/string] défaut: null - Valeur
480
+ • <automatic_unset> [boolean] défaut: false - Auto-destruction
481
+ Exemple :
482
+ teamvar "ObjectifCapture" Blue set 1 false
483
+ teamvar "BonusActif" Red set 0 false
484
+
485
+ 5.7 Opérateurs Disponibles
486
+ Les opérateurs suivants sont disponibles pour toutes les actions de modification de variable :
487
+
488
+ Opérateur HTSL
489
+ Alias
490
+ Description
491
+ Exemple
492
+ inc / increment
493
+ +=
494
+ Incrémente (ajoute) la valeur
495
+ stat "Kills" inc 1
496
+ dec / decrement
497
+ -=
498
+ Décrémente (soustrait) la valeur
499
+ stat "HP" dec 5
500
+ set
501
+ =
502
+ Définit la valeur exacte
503
+ stat "Score" set 0
504
+ multiply / mult
505
+ *=
506
+ Multiplie par la valeur
507
+ stat "Argent" multiply 2
508
+ divide / div
509
+ /=
510
+ Divise par la valeur
511
+ stat "Score" divide 2
512
+ unset
513
+ -
514
+ Supprime la variable/statistique
515
+ var "Temp" unset null
516
+ bitwise and
517
+ &=
518
+ ET bit-à-bit
519
+ stat "Flags" bitwise and 7
520
+ bitwise or
521
+ |=
522
+ OU bit-à-bit
523
+ stat "Flags" bitwise or 4
524
+ bitwise xor
525
+ ^=
526
+ XOR bit-à-bit
527
+ stat "Flags" bitwise xor 1
528
+ left shift
529
+ <<=
530
+ Décalage à gauche
531
+ stat "Val" left shift 2
532
+ arithmetic right shift
533
+ >>=
534
+ Décalage arithmétique droite
535
+ stat "Val" arithmetic right shift 1
536
+ logical right shift
537
+ >>>=
538
+ Décalage logique droite
539
+ stat "Val" logical right shift 1
540
+ 5.8 Références de Variables dans les Valeurs
541
+ 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 :
542
+
543
+ // Copier une stat dans une autre
544
+ stat "MaxKills" set stat Kills
545
+
546
+ // Utiliser une globalstat comme valeur
547
+ stat "Score" set globalstat TotalPoints
548
+
549
+ // Utiliser une valeur de teamstat
550
+ stat "PointsEquipe" set teamstat Points Blue
551
+
552
+ // Utiliser la valeur d'une variable
553
+ stat "Kills" inc var TempKills
554
+
555
+ De plus, les placeholders %...% peuvent être utilisés directement dans les valeurs numériques (voir Chapitre 13).
556
+
557
+
558
+ Chapitre 6 - Contrôle de Flux
559
+ 6.1 if / else - Conditionnels
560
+ 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.
561
+
562
+ Syntaxe de base
563
+ if [or|and] (<condition1>) [(<condition2>) ...] {
564
+ // Actions si les conditions sont vraies
565
+ } else {
566
+ // Actions si les conditions sont fausses
567
+ }
568
+
569
+ Exemples
570
+ // Condition simple
571
+ if (stat "Kills" >= 10) {
572
+ chat "Félicitations ! Vous avez 10 kills !"
573
+ giveItem "epee_or" false null false
574
+ } else {
575
+ chat "Il vous faut encore " + (10 - stat Kills) + " kills."
576
+ }
577
+
578
+ // Conditions multiples avec OR
579
+ if or (stat "Kills" >= 100) (hasGroup "VIP" false) {
580
+ applyPotion "Speed" 60 2 false false
581
+ chat "Bonus de vitesse !"
582
+ } else {
583
+ chat "Vous n'avez pas accès à ce bonus."
584
+ }
585
+
586
+ // Conditions multiples avec AND (par défaut)
587
+ if (stat "Argent" >= 50) (gamemode "adventure") {
588
+ stat "Argent" dec 50
589
+ giveItem "potion_soin" false null false
590
+ }
591
+
592
+ // if sans bloc else
593
+ if (isSneaking) {
594
+ chat "Vous êtes en train de vous accroupir !"
595
+ }
596
+
597
+ ?? Note sur or/and
598
+ 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.
599
+ 6.2 random - Action Aléatoire
600
+ Le bloc random exécute une des actions listées au hasard. Chaque action a une chance égale d'être sélectionnée.
601
+
602
+ random ? RANDOM_ACTION
603
+ Exécute aléatoirement l'une des actions contenues dans le bloc.
604
+ Syntaxe : random { <action1> <action2> ... }
605
+ Exemple :
606
+ random {
607
+ chat "Résultat : 1"
608
+ chat "Résultat : 2"
609
+ chat "Résultat : 3"
610
+ giveItem "diamant" false null false
611
+ giveItem "charbon" false null false
612
+ }
613
+
614
+ 6.3 loop - Boucles
615
+ 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.
616
+
617
+ // Syntaxe : loop <nombre_iterations> <nom_index> {
618
+ // actions utilisant <nom_index>
619
+ // }
620
+
621
+ // Exemple : donner 5 items
622
+ loop 5 i {
623
+ giveItem "pomme" false null false
624
+ }
625
+
626
+ // Exemple avec l'index
627
+ loop 3 compteur {
628
+ stat "Bonus" inc compteur
629
+ }
630
+ // Equivalent à : stat Bonus inc 1, puis inc 2, puis inc 3
631
+
632
+ ?? Limite de boucles
633
+ 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.
634
+ 6.4 exit - Sortie d'Exécution
635
+ exit ? EXIT
636
+ Arrête immédiatement l'exécution de la liste d'actions courante. Aucune action suivante n'est exécutée.
637
+ Syntaxe : exit
638
+ Exemple :
639
+ if (stat "Mana" < 10) {
640
+ chat "Mana insuffisant !"
641
+ exit
642
+ }
643
+ // Le reste n'est exécuté que si mana >= 10
644
+ stat "Mana" dec 10
645
+ function "LancerSort" false
646
+
647
+
648
+ Chapitre 7 - Toutes les Actions HTSL
649
+ 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.
650
+
651
+ 7.1 Actions de Joueur
652
+ fullHeal - Soin complet
653
+ fullHeal ? FULL_HEAL
654
+ Restaure complètement les points de vie et la faim du joueur.
655
+ Syntaxe : fullHeal
656
+ Exemple :
657
+ // Soigner le joueur à la mort
658
+ fullHeal
659
+ houseSpawn
660
+
661
+ kill - Tuer le joueur
662
+ kill ? KILL
663
+ Tue immédiatement le joueur.
664
+ Syntaxe : kill
665
+ Exemple :
666
+ if (stat "Morts" >= 5) {
667
+ kill
668
+ }
669
+
670
+ changeHealth - Modifier les PV
671
+ changeHealth ? SET_HEALTH
672
+ Modifie les points de vie du joueur selon le mode spécifié.
673
+ Syntaxe : changeHealth <mode> <health>
674
+ Paramètres :
675
+ • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Comment appliquer la valeur
676
+ • <health> [number] défaut: 20 - Valeur de points de vie
677
+ Exemple :
678
+ changeHealth set 20
679
+ changeHealth inc 5
680
+ changeHealth dec 3
681
+
682
+ maxHealth - Modifier les PV maximum
683
+ maxHealth ? SET_MAX_HEALTH
684
+ Modifie le maximum de points de vie du joueur.
685
+ Syntaxe : maxHealth <mode> <max_health> <heal_on_change>
686
+ Paramètres :
687
+ • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Mode de modification
688
+ • <max_health> [number] défaut: 20 - Nouvelle valeur max de PV
689
+ • <heal_on_change> [boolean] défaut: true - Si true, soigne le joueur lors du changement
690
+ Exemple :
691
+ maxHealth set 40 true
692
+ maxHealth inc 2 false
693
+
694
+ hungerLevel - Modifier la faim
695
+ hungerLevel ? SET_HUNGER_LEVEL
696
+ Modifie le niveau de faim du joueur.
697
+ Syntaxe : hungerLevel <mode> <level>
698
+ Paramètres :
699
+ • <mode> [Set/Increment/Decrement/Multiply/Divide] défaut: Set - Mode de modification
700
+ • <level> [number] défaut: 20 - Niveau de faim (0-20)
701
+ Exemple :
702
+ hungerLevel set 20
703
+ hungerLevel dec 5
704
+
705
+ gamemode - Changer le mode de jeu
706
+ gamemode ? SET_GAMEMODE
707
+ Change le mode de jeu du joueur.
708
+ Syntaxe : gamemode <gamemode>
709
+ Paramètres :
710
+ • <gamemode> [Adventure/Survival/Creative] défaut: null - Mode de jeu cible
711
+ Exemple :
712
+ gamemode creative
713
+ gamemode adventure
714
+ gamemode survival
715
+
716
+ xpLevel - Donner des niveaux d'XP
717
+ xpLevel ? GIVE_EXP_LEVELS
718
+ Donne des niveaux d'expérience au joueur.
719
+ Syntaxe : xpLevel <levels>
720
+ Paramètres :
721
+ • <levels> [number] défaut: 1 - Nombre de niveaux à donner
722
+ Exemple :
723
+ xpLevel 1
724
+ xpLevel 10
725
+ // Donner XP en fonction des kills
726
+ xpLevel stat Kills
727
+
728
+ houseSpawn - Retour au spawn
729
+ houseSpawn ? SPAWN
730
+ Téléporte le joueur au point de spawn de la maison.
731
+ Syntaxe : houseSpawn
732
+ Exemple :
733
+ // À la mort
734
+ stat "Morts" inc 1
735
+ houseSpawn
736
+ fullHeal
737
+
738
+ changePlayerGroup - Changer le groupe
739
+ changePlayerGroup ? CHANGE_PLAYER_GROUP
740
+ Change le groupe (rang) du joueur dans la maison.
741
+ Syntaxe : changePlayerGroup <group> <demotion_protection>
742
+ Paramètres :
743
+ • <group> [string (nom de groupe)] défaut: null - Nom du groupe Housing cible
744
+ • <demotion_protection> [boolean] défaut: true - Si true, ne peut pas rétrograder le joueur
745
+ Exemple :
746
+ changePlayerGroup "VIP" true
747
+ changePlayerGroup "Default" false
748
+
749
+ changeGroup - Alias de changePlayerGroup
750
+ changeGroup est un alias complet de changePlayerGroup. Les deux commandes sont interchangeables.
751
+ changeGroup "Moderateur" true
752
+
753
+ 7.2 Actions d'Affichage
754
+ chat - Envoyer un message
755
+ chat ? SEND_MESSAGE
756
+ Envoie un message dans le chat du joueur. Supporte les codes couleur Minecraft (&) et les placeholders %...%.
757
+ Syntaxe : chat <message>
758
+ Paramètres :
759
+ • <message> [string] défaut: "Hello!" - Texte du message (supporte codes couleur et placeholders)
760
+ Exemple :
761
+ chat "&aBonjour &e%player.name% &a!"
762
+ chat "Vos kills : &6%stat.player/Kills%"
763
+ chat "Position : %player.location.x%, %player.location.y%, %player.location.z%"
764
+
765
+ actionBar - Barre d'action
766
+ actionBar ? ACTION_BAR
767
+ Affiche un message dans la barre d'action (au-dessus de la barre de vie/faim).
768
+ Syntaxe : actionBar <message>
769
+ Paramètres :
770
+ • <message> [string] défaut: "Hello World!" - Message à afficher dans l'action bar
771
+ Exemple :
772
+ actionBar "&aPV : %player.health% / %player.maxhealth%"
773
+ actionBar "&6Score : %stat.player/Score%"
774
+
775
+ title - Titre et sous-titre
776
+ title ? TITLE
777
+ Affiche un grand titre au centre de l'écran du joueur.
778
+ Syntaxe : title <title> <subtitle> <fadein> <stay> <fadeout>
779
+ Paramètres :
780
+ • <title> [string] défaut: "Hello World!" - Texte du titre principal (grande police)
781
+ • <subtitle> [string] défaut: "" - Texte du sous-titre (sous le titre)
782
+ • <fadein> [number (ticks)] défaut: 1 - Durée de fondu d'entrée en ticks (20 ticks = 1 seconde)
783
+ • <stay> [number (ticks)] défaut: 5 - Durée d'affichage en ticks
784
+ • <fadeout> [number (ticks)] défaut: 1 - Durée de fondu de sortie en ticks
785
+ Exemple :
786
+ title "&aVICTOIRE !" "&eVous avez gagné !" 10 40 10
787
+ title "&cDéfaite" "&7Réessayez" 5 30 5
788
+ title "Niveau %stat.player/Niveau%" "" 5 20 5
789
+
790
+ displayMenu - Ouvrir un menu
791
+ displayMenu ? DISPLAY_MENU
792
+ Ouvre un menu Housing personnalisé pour le joueur.
793
+ Syntaxe : displayMenu <menu>
794
+ Paramètres :
795
+ • <menu> [string (nom de menu)] défaut: null - Nom du menu Housing à afficher
796
+ Exemple :
797
+ displayMenu "Boutique"
798
+ displayMenu "Statistiques"
799
+ displayMenu "Menu Principal"
800
+
801
+ closeMenu - Fermer le menu
802
+ closeMenu ? CLOSE_MENU
803
+ Ferme le menu actuellement ouvert par le joueur.
804
+ Syntaxe : closeMenu
805
+ Exemple :
806
+ // Fermer après traitement
807
+ stat "Achats" inc 1
808
+ closeMenu
809
+
810
+ displayNametag - Afficher/masquer le nametag
811
+ displayNametag ? TOGGLE_NAMETAG_DISPLAY
812
+ Active ou désactive l'affichage du nametag (pseudo au-dessus de la tête) du joueur.
813
+ Syntaxe : displayNametag <display_nametag>
814
+ Paramètres :
815
+ • <display_nametag> [boolean] défaut: true - true pour afficher, false pour masquer
816
+ Exemple :
817
+ displayNametag false
818
+ displayNametag true
819
+
820
+ playerWeather - Météo personnalisée
821
+ playerWeather ? SET_PLAYER_WEATHER
822
+ Définit la météo visible uniquement pour ce joueur.
823
+ Syntaxe : playerWeather <weather>
824
+ Paramètres :
825
+ • <weather> [Sunny/Raining] défaut: null - Type de météo
826
+ Exemple :
827
+ playerWeather Raining
828
+ if (stat "Malédiction" >= 1) {
829
+ playerWeather Raining
830
+ } else {
831
+ playerWeather Sunny
832
+ }
833
+
834
+ playerTime - Heure personnalisée
835
+ playerTime ? SET_PLAYER_TIME
836
+ Définit l'heure du jour visible uniquement pour ce joueur.
837
+ Syntaxe : playerTime <time>
838
+ Paramètres :
839
+ • <time> [custom_time (valeur 0-24000)] défaut: null - Heure en ticks de jeu (0=aube, 6000=midi, 12000=coucher, 18000=nuit)
840
+ Exemple :
841
+ playerTime 6000
842
+ // Nuit permanente
843
+ playerTime 18000
844
+
845
+ 7.3 Actions d'Inventaire
846
+ giveItem - Donner un item
847
+ giveItem ? GIVE_ITEM
848
+ Donne un item au joueur. L'item doit être référencé par le nom de son fichier JSON.
849
+ Syntaxe : giveItem <item> <allow_multiple> <inventory_slot> <replace_existing_item>
850
+ Paramètres :
851
+ • <item> [filename (sans extension)] défaut: null - Nom du fichier JSON de l'item (dans imports/)
852
+ • <allow_multiple> [boolean] défaut: false - Autoriser de donner même si le joueur a déjà l'item
853
+ • <inventory_slot> [slot ou -1] défaut: -1 - Slot d'inventaire cible (-1 = premier slot libre, ou Helmet/Chestplate/Leggings/Boots/Offhand)
854
+ • <replace_existing_item> [boolean] défaut: false - Remplacer l'item existant dans le slot
855
+ Exemple :
856
+ giveItem "epee_diamant" false null false
857
+ giveItem "casque_fer" false Helmet false
858
+ giveItem "pomme" true null false
859
+
860
+ removeItem - Retirer un item
861
+ removeItem ? REMOVE_ITEM
862
+ Retire un item spécifique de l'inventaire du joueur.
863
+ Syntaxe : removeItem <item>
864
+ Paramètres :
865
+ • <item> [filename] défaut: null - Nom du fichier JSON de l'item à retirer
866
+ Exemple :
867
+ removeItem "clef_porte"
868
+ removeItem "ticket"
869
+
870
+ resetInventory - Réinitialiser l'inventaire
871
+ resetInventory ? RESET_INVENTORY
872
+ Réinitialise l'inventaire du joueur selon le layout par défaut de la maison.
873
+ Syntaxe : resetInventory
874
+ Exemple :
875
+ // À la mort
876
+ resetInventory
877
+ houseSpawn
878
+ fullHeal
879
+
880
+ applyLayout - Appliquer un layout
881
+ applyLayout ? APPLY_LAYOUT
882
+ Applique un layout d'inventaire Housing prédéfini.
883
+ Syntaxe : applyLayout <layout>
884
+ Paramètres :
885
+ • <layout> [string (nom de layout)] défaut: null - Nom du layout Housing à appliquer
886
+ Exemple :
887
+ applyLayout "Guerrier"
888
+ applyLayout "Mage"
889
+ applyLayout "Kit_Défault"
890
+
891
+ enchant - Enchanter l'item en main
892
+ enchant ? ENCHANT_HELD_ITEM
893
+ Enchante l'item actuellement tenu en main par le joueur.
894
+ Syntaxe : enchant <enchantment> <level>
895
+ Paramètres :
896
+ • <enchantment> [string (nom enchantement)] défaut: null - Nom de l'enchantement (voir Annexe A)
897
+ • <level> [number] défaut: 1 - Niveau de l'enchantement
898
+ Exemple :
899
+ enchant "Sharpness" 5
900
+ enchant "Protection" 4
901
+ enchant "Unbreaking" 3
902
+
903
+ consumeItem - Consommer l'item en main
904
+ consumeItem ? USE_HELD_ITEM
905
+ Utilise et/ou retire l'item actuellement tenu en main.
906
+ Syntaxe : consumeItem
907
+ Exemple :
908
+ // Utiliser une potion tenue
909
+ consumeItem
910
+ chat "Potion utilisée !"
911
+
912
+ dropItem - Faire tomber un item
913
+ dropItem ? DROP_ITEM
914
+ Fait tomber un item à une location spécifique dans le monde.
915
+ Syntaxe : dropItem <item> <location> <drop_naturally> <prevent_item_merging> <prioritize_player> <fallback_to_inventory> <despawn_duration_ticks> <pickup_delay_ticks>
916
+ Paramètres :
917
+ • <item> [filename] défaut: null - Item à faire tomber
918
+ • <location> [location] défaut: null - Endroit où faire tomber l'item
919
+ • <drop_naturally> [boolean] défaut: true - Animation de drop naturelle
920
+ • <prevent_item_merging> [boolean] défaut: false - Empêche la fusion avec des items similaires
921
+ • <prioritize_player> [boolean] défaut: false - Priorité au joueur pour le ramassage
922
+ • <fallback_to_inventory> [boolean] défaut: false - Aller dans l'inventaire si le sol est plein
923
+ • <despawn_duration_ticks> [number] défaut: 6000 - Durée avant disparition (20t = 1s)
924
+ • <pickup_delay_ticks> [number] défaut: 10 - Délai avant que le joueur puisse ramasser
925
+ Exemple :
926
+ dropItem stone invokers_location false false false true 10 10
927
+ dropItem "tresor" house_spawn true false true false 6000 20
928
+
929
+ 7.4 Actions de Mouvement
930
+ tp - Téléporter le joueur
931
+ tp ? TELEPORT_PLAYER
932
+ Téléporte le joueur à une location donnée.
933
+ Syntaxe : tp <location> <prevent_teleport_inside_blocks>
934
+ Paramètres :
935
+ • <location> [location] défaut: null - Destination (voir Chapitre 9)
936
+ • <prevent_teleport_inside_blocks> [boolean] défaut: false - Empêche de téléporter dans un bloc solide
937
+ Exemple :
938
+ tp house_spawn false
939
+ tp current_location false
940
+ tp custom_coordinates "100 64 200 90 0" false
941
+ tp invokers_location true
942
+
943
+ changeVelocity - Modifier la vélocité
944
+ changeVelocity ? CHANGE_VELOCITY
945
+ Modifie la vélocité (vitesse et direction) du joueur.
946
+ Syntaxe : changeVelocity <x_direction> <y_direction> <z_direction>
947
+ Paramètres :
948
+ • <x_direction> [number] défaut: 10 - Composante X de la vélocité
949
+ • <y_direction> [number] défaut: 10 - Composante Y de la vélocité
950
+ • <z_direction> [number] défaut: 10 - Composante Z de la vélocité
951
+ Exemple :
952
+ // Propulser vers le haut
953
+ changeVelocity 0 2.5 0
954
+ // Propulsion diagonale
955
+ changeVelocity 1.5 1.5 0
956
+
957
+ launchTarget - Propulser vers une cible
958
+ launchTarget ? LAUNCH_TO_TARGET
959
+ Propulse le joueur en direction d'une location cible.
960
+ Syntaxe : launchTarget <target_location> <launch_strength>
961
+ Paramètres :
962
+ • <target_location> [location] défaut: null - Location de destination visée
963
+ • <launch_strength> [number] défaut: 2 - Force de la propulsion
964
+ Exemple :
965
+ launchTarget house_spawn 3
966
+ launchTarget custom_coordinates "0 100 0 ~ ~" 5
967
+
968
+ compassTarget - Cibler la boussole
969
+ compassTarget ? SET_COMPASS_TARGET
970
+ Définit la cible de la boussole du joueur.
971
+ Syntaxe : compassTarget <location>
972
+ Paramètres :
973
+ • <location> [location] défaut: null - Location vers laquelle la boussole pointera
974
+ Exemple :
975
+ compassTarget house_spawn
976
+ compassTarget custom_coordinates "100 64 100 ~ ~"
977
+
978
+ 7.5 Actions de Potion
979
+ applyPotion - Appliquer un effet
980
+ applyPotion ? POTION_EFFECT
981
+ Applique un effet de potion au joueur.
982
+ Syntaxe : applyPotion <effect> <duration> <level> <override_existing_effects> <show_potion_icon>
983
+ Paramètres :
984
+ • <effect> [string (nom effet)] défaut: null - Nom de l'effet (voir Annexe B)
985
+ • <duration> [number (secondes)] défaut: 60 - Durée de l'effet en secondes
986
+ • <level> [number] défaut: 1 - Niveau de l'effet (1 = niveau I, 2 = niveau II, etc.)
987
+ • <override_existing_effects> [boolean] défaut: false - Remplacer l'effet existant même si plus puissant
988
+ • <show_potion_icon> [boolean] défaut: false - Afficher l'icône de potion à l'écran
989
+ Exemple :
990
+ applyPotion "Speed" 30 2 false true
991
+ applyPotion "Strength" 60 1 false false
992
+ applyPotion "Regeneration" 10 1 true true
993
+ applyPotion "Invisibility" 120 1 false false
994
+
995
+ clearEffects - Supprimer tous les effets
996
+ clearEffects ? CLEAR_EFFECTS
997
+ Supprime tous les effets de potion actifs sur le joueur.
998
+ Syntaxe : clearEffects
999
+ Exemple :
1000
+ // Purifier le joueur
1001
+ clearEffects
1002
+ fullHeal
1003
+ chat "Effets supprimés !"
1004
+
1005
+ 7.6 Actions de Groupe / Équipe
1006
+ setTeam - Définir l'équipe
1007
+ setTeam ? SET_PLAYER_TEAM
1008
+ Assigne le joueur à une équipe Housing.
1009
+ Syntaxe : setTeam <team>
1010
+ Paramètres :
1011
+ • <team> [string (nom équipe) ou None] défaut: None - Nom de l'équipe cible, ou None pour retirer de toute équipe
1012
+ Exemple :
1013
+ setTeam "Blue"
1014
+ setTeam "Red"
1015
+ setTeam None
1016
+
1017
+ balanceTeam - Équilibrer les équipes
1018
+ balanceTeam ? BALANCE_PLAYER_TEAM
1019
+ Assigne automatiquement le joueur à l'équipe la moins remplie pour équilibrer les effectifs.
1020
+ Syntaxe : balanceTeam
1021
+ Exemple :
1022
+ // À la connexion d'un joueur
1023
+ balanceTeam
1024
+ chat "Vous avez été assigné à une équipe !"
1025
+
1026
+ 7.7 Actions de Jeu
1027
+ sound - Jouer un son
1028
+ sound ? PLAY_SOUND
1029
+ Joue un son au joueur ou à une location.
1030
+ Syntaxe : sound <sound> <volume> <pitch> <location>
1031
+ Paramètres :
1032
+ • <sound> [string (nom son)] défaut: null - Nom du son Hypixel Housing
1033
+ • <volume> [number] défaut: 0.7 - Volume du son (0.0 à 2.0)
1034
+ • <pitch> [number] défaut: 1 - Pitch du son (0.5 à 2.0, 1 = normal)
1035
+ • <location> [location] défaut: null - Endroit d'où provient le son
1036
+ Exemple :
1037
+ sound "Level Up" 0.7 1 current_location
1038
+ sound "Anvil Land" 1 0.5 house_spawn
1039
+ sound "Note Pling" 0.8 1.5 invokers_location
1040
+
1041
+ pause - Pause
1042
+ pause ? PAUSE
1043
+ Fait une pause dans l'exécution des actions. Utile pour séquencer des effets dans le temps.
1044
+ Syntaxe : pause <ticks_to_wait>
1045
+ Paramètres :
1046
+ • <ticks_to_wait> [number] défaut: 20 - Nombre de ticks à attendre (20 ticks = 1 seconde)
1047
+ Exemple :
1048
+ chat "Préparez-vous..."
1049
+ pause 40
1050
+ chat "GO !"
1051
+ sound "Level Up" 1 1 current_location
1052
+
1053
+ cancelEvent - Annuler l'événement
1054
+ cancelEvent ? CANCEL_EVENT
1055
+ Annule l'événement qui a déclenché les actions actuelles (ex: annuler un clic, une interaction).
1056
+ Syntaxe : cancelEvent
1057
+ Exemple :
1058
+ // Dans les actions d'un NPC - empêcher l'interaction
1059
+ if (stat "Argent" < 100) {
1060
+ chat "Vous n'avez pas assez d'argent !"
1061
+ cancelEvent
1062
+ }
1063
+
1064
+ 7.8 Actions de Navigation
1065
+ function - Déclencher une fonction
1066
+ function ? TRIGGER_FUNCTION
1067
+ Déclenche une fonction Housing existante.
1068
+ Syntaxe : function <function> <trigger_for_all_players>
1069
+ Paramètres :
1070
+ • <function> [string (nom fonction)] défaut: null - Nom de la fonction à déclencher
1071
+ • <trigger_for_all_players> [boolean] défaut: false - Si true, déclenche pour tous les joueurs en ligne
1072
+ Exemple :
1073
+ function "SauvegarderScore" false
1074
+ function "ResetPartie" true
1075
+ if (stat "Kills" >= 10) {
1076
+ function "VictoireJoueur" false
1077
+ }
1078
+
1079
+ lobby - Envoyer vers un lobby
1080
+ lobby ? SEND_TO_LOBBY
1081
+ Envoie le joueur vers un lobby Hypixel spécifique.
1082
+ Syntaxe : lobby <location>
1083
+ Paramètres :
1084
+ • <location> [string (nom lobby)] défaut: null - Nom du lobby de destination (voir Annexe C)
1085
+ Exemple :
1086
+ lobby "Main Lobby"
1087
+ lobby "Bed Wars"
1088
+ lobby "SkyWars"
1089
+
1090
+ parkCheck - Checkpoint Parkour
1091
+ parkCheck ? PARKOUR_CHECKPOINT
1092
+ Enregistre le checkpoint de parkour courant pour le joueur.
1093
+ Syntaxe : parkCheck
1094
+ Exemple :
1095
+ // Dans les actions d'une plaque de pression
1096
+ parkCheck
1097
+ chat "Checkpoint atteint !"
1098
+ sound "Level Up" 0.7 1 current_location
1099
+
1100
+ failParkour - Échouer le parkour
1101
+ failParkour ? BAIL_PARKOUR
1102
+ Force le joueur à échouer le parkour en cours avec un message.
1103
+ Syntaxe : failParkour <reason>
1104
+ Paramètres :
1105
+ • <reason> [string] défaut: "Failed!" - Message affiché lors de l'échec
1106
+ Exemple :
1107
+ // Zone dangereuse
1108
+ failParkour "Hors limites !"
1109
+ failParkour "Temps écoulé !"
1110
+
1111
+
1112
+ Chapitre 8 - Toutes les Conditions HTSL
1113
+ Les conditions s'utilisent dans les blocs if (...). Chaque condition est placée entre parenthèses. Ce chapitre documente toutes les conditions disponibles.
1114
+
1115
+ 8.1 Conditions de Variable
1116
+ stat ? VARIABLE_REQUIREMENT (Player)
1117
+ Vérifie la valeur d'une statistique joueur.
1118
+ Syntaxe : stat <variable> <comparator> <compare_value>
1119
+ Paramètres :
1120
+ • <variable> [string] défaut: "Kills" - Nom de la statistique
1121
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1122
+ • <compare_value> [number/string/placeholder] défaut: null - Valeur à comparer
1123
+ Exemple :
1124
+ if (stat "Kills" >= 10) {
1125
+ chat "10 kills atteints !"
1126
+ }
1127
+
1128
+ globalstat ? VARIABLE_REQUIREMENT (Global)
1129
+ Vérifie la valeur d'une statistique globale.
1130
+ Syntaxe : globalstat <variable> <comparator> <compare_value>
1131
+ Paramètres :
1132
+ • <variable> [string] défaut: "Kills" - Nom de la statistique globale
1133
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1134
+ • <compare_value> [number/string] défaut: null - Valeur à comparer
1135
+ Exemple :
1136
+ if (globalstat "PhaseJeu" = 2) {
1137
+ chat "La partie est en phase 2 !"
1138
+ }
1139
+
1140
+ teamstat ? VARIABLE_REQUIREMENT (Team)
1141
+ Vérifie la valeur d'une statistique d'équipe.
1142
+ Syntaxe : teamstat <variable> <team> <comparator> <compare_value>
1143
+ Paramètres :
1144
+ • <variable> [string] défaut: "Kills" - Nom de la stat d'équipe
1145
+ • <team> [string] défaut: "Blue" - Équipe cible
1146
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur
1147
+ • <compare_value> [number] défaut: null - Valeur à comparer
1148
+ Exemple :
1149
+ if (teamstat "Points" Blue >= 50) {
1150
+ chat "L'équipe Bleue gagne !"
1151
+ function "FinPartie" true
1152
+ }
1153
+
1154
+ var ? VARIABLE_REQUIREMENT (Player var)
1155
+ Vérifie la valeur d'une variable joueur temporaire.
1156
+ Syntaxe : var <variable> <comparator> <compare_value> <fallback_value>
1157
+ Paramètres :
1158
+ • <variable> [string] défaut: null - Nom de la variable
1159
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1160
+ • <compare_value> [number/string] défaut: null - Valeur à comparer
1161
+ • <fallback_value> [number/string] défaut: null - Valeur si la variable n'existe pas
1162
+ Exemple :
1163
+ if (var "EnCombat" = 1 0) {
1164
+ chat "Vous êtes en combat !"
1165
+ }
1166
+
1167
+ globalvar ? VARIABLE_REQUIREMENT (Global var)
1168
+ Vérifie la valeur d'une variable globale temporaire.
1169
+ Syntaxe : globalvar <variable> <comparator> <compare_value> <fallback_value>
1170
+ Paramètres :
1171
+ • <variable> [string] défaut: null - Nom de la variable globale
1172
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur
1173
+ • <compare_value> [number/string] défaut: null - Valeur cible
1174
+ • <fallback_value> [number/string] défaut: null - Valeur par défaut si inexistante
1175
+ Exemple :
1176
+ if (globalvar "BossActif" = 1 0) {
1177
+ chat "Le boss est actif !"
1178
+ }
1179
+
1180
+ placeholder ? PLACEHOLDER_NUMBER
1181
+ Compare la valeur numérique retournée par un placeholder.
1182
+ Syntaxe : placeholder <placeholder> <comparator> <compare_value>
1183
+ Paramètres :
1184
+ • <placeholder> [string (placeholder)] défaut: null - Le placeholder à évaluer
1185
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1186
+ • <compare_value> [number] défaut: null - Valeur cible
1187
+ Exemple :
1188
+ if (placeholder "%player.health%" < 5) {
1189
+ chat "PV critiques !"
1190
+ applyPotion Regeneration 10 2 true false
1191
+ }
1192
+
1193
+ 8.2 Conditions de Joueur
1194
+ health ? HEALTH
1195
+ Vérifie les points de vie actuels du joueur.
1196
+ Syntaxe : health <comparator> <compare_value>
1197
+ Paramètres :
1198
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1199
+ • <compare_value> [number] défaut: null - Valeur de PV à comparer
1200
+ Exemple :
1201
+ if (health < 5) {
1202
+ applyPotion "Regeneration" 10 2 true false
1203
+ }
1204
+
1205
+ maxHealth ? MAX_HEALTH
1206
+ Vérifie les points de vie maximum du joueur.
1207
+ Syntaxe : maxHealth <comparator> <compare_value>
1208
+ Paramètres :
1209
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur
1210
+ • <compare_value> [number] défaut: null - Valeur de PV max à comparer
1211
+ Exemple :
1212
+ if (maxHealth = 40) {
1213
+ chat "Vous ��tes en forme maximale !"
1214
+ }
1215
+
1216
+ hunger ? HUNGER_LEVEL
1217
+ Vérifie le niveau de faim du joueur.
1218
+ Syntaxe : hunger <comparator> <compare_value>
1219
+ Paramètres :
1220
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur
1221
+ • <compare_value> [number (0-20)] défaut: null - Niveau de faim à comparer
1222
+ Exemple :
1223
+ if (hunger < 6) {
1224
+ chat "Vous avez faim !"
1225
+ }
1226
+
1227
+ gamemode ? GAMEMODE
1228
+ Vérifie le mode de jeu actuel du joueur.
1229
+ Syntaxe : gamemode <required_gamemode>
1230
+ Paramètres :
1231
+ • <required_gamemode> [Adventure/Survival/Creative] défaut: null - Mode de jeu requis
1232
+ Exemple :
1233
+ if (gamemode "creative") {
1234
+ chat "Mode créatif détecté !"
1235
+ }
1236
+
1237
+ isSneaking ? SNEAKING
1238
+ Vérifie si le joueur est en train de se baisser (shift).
1239
+ Syntaxe : isSneaking
1240
+ Exemple :
1241
+ if (isSneaking) {
1242
+ chat "Accroupi !"
1243
+ tp custom_coordinates "0 100 0 ~ ~" false
1244
+ }
1245
+
1246
+ isFlying ? FLYING
1247
+ Vérifie si le joueur est en train de voler.
1248
+ Syntaxe : isFlying
1249
+ Exemple :
1250
+ if (isFlying) {
1251
+ chat "En vol !"
1252
+ }
1253
+
1254
+ doingParkour ? IN_PARKOUR
1255
+ Vérifie si le joueur est en train de faire un parcours de parkour.
1256
+ Syntaxe : doingParkour
1257
+ Exemple :
1258
+ if (doingParkour) {
1259
+ chat "Bonne chance en parkour !"
1260
+ }
1261
+
1262
+ canPvp ? PVP_ENABLED
1263
+ Vérifie si le PvP est activé pour le joueur.
1264
+ Syntaxe : canPvp
1265
+ Exemple :
1266
+ if (canPvp) {
1267
+ chat "PvP activé !"
1268
+ }
1269
+
1270
+ 8.3 Conditions d'Inventaire
1271
+ hasItem ? HAS_ITEM
1272
+ Vérifie si le joueur possède un item spécifique.
1273
+ Syntaxe : hasItem <item> <what_to_check> <where_to_check> <required_amount>
1274
+ Paramètres :
1275
+ • <item> [filename] défaut: null - Item à rechercher (fichier JSON)
1276
+ • <what_to_check> [Item Type / Metadata] défaut: Metadata - Niveau de vérification de l'item
1277
+ • <where_to_check> [Hand/Armor/Hotbar/Inventory/Cursor/Crafting Grid/Anywhere] défaut: Anywhere - Où chercher l'item
1278
+ • <required_amount> [Any Amount / Equal or Greater Amount] défaut: Any Amount - Quantité requise
1279
+ Exemple :
1280
+ if (hasItem "epee_diamant" "Metadata" "Anywhere" "Any Amount") {
1281
+ chat "Vous avez votre épée !"
1282
+ }
1283
+
1284
+ isItem ? IS_ITEM
1285
+ Vérifie si l'item dans une position spécifique correspond à l'item donné.
1286
+ Syntaxe : isItem <item> <what_to_check> <where_to_check> <required_amount>
1287
+ Paramètres :
1288
+ • <item> [filename] défaut: null - Item de référence
1289
+ • <what_to_check> [Item Type / Metadata] défaut: Metadata - Niveau de vérification
1290
+ • <where_to_check> [Hand/Armor/Hotbar/Inventory/Cursor/Crafting Grid/Anywhere] défaut: Hand - Où vérifier
1291
+ • <required_amount> [Any Amount / Equal or Greater Amount] défaut: Any Amount - Quantité
1292
+ Exemple :
1293
+ if (isItem "epee_or" "Item Type" "Hand" "Any Amount") {
1294
+ chat "Épée en or en main !"
1295
+ }
1296
+
1297
+ 8.4 Conditions d'Environnement
1298
+ inRegion ? IN_REGION
1299
+ Vérifie si le joueur se trouve dans une région Housing spécifique.
1300
+ Syntaxe : inRegion <region>
1301
+ Paramètres :
1302
+ • <region> [string (nom région)] défaut: null - Nom de la région Housing
1303
+ Exemple :
1304
+ if (inRegion "ZoneCombat") {
1305
+ chat "Vous entrez en zone de combat !"
1306
+ applyPotion "Strength" 30 1 false false
1307
+ }
1308
+
1309
+ hasPotion ? POTION_EFFECT
1310
+ Vérifie si le joueur a un effet de potion spécifique actif.
1311
+ Syntaxe : hasPotion <effect>
1312
+ Paramètres :
1313
+ • <effect> [string (nom effet)] défaut: null - Nom de l'effet de potion (voir Annexe B)
1314
+ Exemple :
1315
+ if (hasPotion "Invisibility") {
1316
+ chat "Vous êtes invisible !"
1317
+ }
1318
+
1319
+ blockType ? BLOCK_TYPE
1320
+ Vérifie le type de bloc à la position du joueur ou d'une interaction.
1321
+ Syntaxe : blockType <item> <match_type_only>
1322
+ Paramètres :
1323
+ • <item> [filename/blockname] défaut: null - Type de bloc à vérifier
1324
+ • <match_type_only> [boolean] défaut: false - Si true, vérifie seulement le type sans les métadonnées
1325
+ Exemple :
1326
+ if (blockType "stone" false) {
1327
+ chat "Sur de la pierre !"
1328
+ }
1329
+
1330
+ portal ? PORTAL_TYPE
1331
+ Vérifie le type de portail interagi.
1332
+ Syntaxe : portal <portal_type>
1333
+ Paramètres :
1334
+ • <portal_type> [Nether Portal / End Portal] défaut: End Portal - Type de portail
1335
+ Exemple :
1336
+ if (portal "Nether Portal") {
1337
+ cancelEvent
1338
+ tp house_spawn false
1339
+ chat "Les portails sont désactivés !"
1340
+ }
1341
+
1342
+ fishingEnv ? FISHING_ENVIRONMENT
1343
+ Vérifie l'environnement de pêche (eau ou lave).
1344
+ Syntaxe : fishingEnv <environment>
1345
+ Paramètres :
1346
+ • <environment> [Water / Lava] défaut: Water - Type d'environnement de pêche
1347
+ Exemple :
1348
+ if (fishingEnv "Lava") {
1349
+ chat "Pêche en lave détectée !"
1350
+ giveItem "poisson_feu" false null false
1351
+ }
1352
+
1353
+ damageCause ? DAMAGE_CAUSE
1354
+ Vérifie la cause des dégâts reçus par le joueur.
1355
+ Syntaxe : damageCause <cause>
1356
+ Paramètres :
1357
+ • <cause> [Entity Attack/Projectile/Suffocation/Fall/Lava/Fire/Fire Tick/Drowning/Starvation/Poison/Thorns] défaut: null - Cause du dommage
1358
+ Exemple :
1359
+ if (damageCause "Fall") {
1360
+ stat "ChutesMortelles" inc 1
1361
+ chat "Attention aux chutes !"
1362
+ }
1363
+
1364
+ damageAmount ? DAMAGE_AMOUNT
1365
+ Vérifie la quantité de dégâts reçus.
1366
+ Syntaxe : damageAmount <comparator> <compare_value>
1367
+ Paramètres :
1368
+ • <comparator> [<, <=, =, >=, >] défaut: = - Opérateur de comparaison
1369
+ • <compare_value> [number] défaut: null - Valeur de dégâts à comparer
1370
+ Exemple :
1371
+ if (damageAmount >= 10) {
1372
+ chat "Dégâts importants reçus !"
1373
+ applyPotion Resistance 5 2 true false
1374
+ }
1375
+
1376
+ 8.5 Conditions de Groupe / Équipe
1377
+ hasGroup / inGroup ? IN_GROUP
1378
+ Vérifie si le joueur appartient à un groupe Housing spécifique.
1379
+ Syntaxe : hasGroup <required_group> <include_higher_groups>
1380
+ Paramètres :
1381
+ • <required_group> [string (nom groupe)] défaut: null - Nom du groupe requis
1382
+ • <include_higher_groups> [boolean] défaut: false - Si true, accepte aussi les groupes de rang supérieur
1383
+ Exemple :
1384
+ if (hasGroup "VIP" true) {
1385
+ applyPotion "Speed" 60 2 false false
1386
+ chat "Bonus VIP activé !"
1387
+ }
1388
+
1389
+ hasTeam / inTeam ? IN_TEAM
1390
+ Vérifie si le joueur appartient à une équipe spécifique.
1391
+ Syntaxe : hasTeam <required_team>
1392
+ Paramètres :
1393
+ • <required_team> [string (nom équipe)] défaut: None - Nom de l'équipe requise, ou None
1394
+ Exemple :
1395
+ if (hasTeam "Blue") {
1396
+ chat "Vous êtes dans l'équipe Bleue !"
1397
+ }
1398
+
1399
+ hasPermission ? HAS_PERMISSION
1400
+ Vérifie si le joueur possède une permission Housing spécifique.
1401
+ Syntaxe : hasPermission <required_permission>
1402
+ Paramètres :
1403
+ • <required_permission> [string (nom permission)] défaut: null - Permission requise (voir Annexe D)
1404
+ Exemple :
1405
+ if (hasPermission "Build") {
1406
+ chat "Vous pouvez construire !"
1407
+ }
1408
+
1409
+
1410
+ Chapitre 9 - Locations (Emplacements)
1411
+ Les locations définissent des positions dans le monde Housing. Plusieurs types sont disponibles selon le contexte.
1412
+
1413
+ 9.1 Types de Location
1414
+
1415
+ Type de Location
1416
+ Description
1417
+ house_spawn
1418
+ Le point de spawn de la maison Housing
1419
+ house_spawn_location
1420
+ Alias de house_spawn
1421
+ current_location
1422
+ La position actuelle du joueur
1423
+ invokers_location
1424
+ La position du joueur qui a déclenché l'action
1425
+ custom_coordinates
1426
+ Des coordonnées personnalisées définies manuellement
1427
+ 9.2 Coordonnées Personnalisées
1428
+ Pour spécifier des coordonnées précises, utilisez custom_coordinates suivi d'une chaîne de coordonnées au format :
1429
+
1430
+ // Format : custom_coordinates "<X> <Y> <Z> <Yaw> <Pitch>"
1431
+ // Yaw = rotation horizontale (-180 à 180)
1432
+ // Pitch = rotation verticale (-90 à 90)
1433
+
1434
+ tp custom_coordinates "100 64 200 90 0" false
1435
+ compassTarget custom_coordinates "0 64 0 0 0"
1436
+
1437
+ // Utiliser ~ pour relatif à la position actuelle
1438
+ sound "Level Up" 0.7 1 custom_coordinates "~ ~ ~"
1439
+
1440
+ ?? Coordonnées relatives
1441
+ 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.
1442
+
1443
+ Chapitre 10 - Sons (Sounds)
1444
+ 10.1 Syntaxe du Son
1445
+ 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.
1446
+
1447
+ sound <nom_son> <volume> <pitch> <location>
1448
+
1449
+ // Exemples
1450
+ sound "Level Up" 1.0 1.0 current_location
1451
+ sound "Anvil Land" 0.7 0.8 invokers_location
1452
+ sound "Note Pling" 0.5 1.5 house_spawn
1453
+ sound "Explode" 1.0 1.0 custom_coordinates "~ ~ ~"
1454
+
1455
+ Paramètre
1456
+ Description
1457
+ volume
1458
+ Intensité sonore. 0.0 = silencieux, 1.0 = normal, 2.0 = maximum.
1459
+ pitch
1460
+ Hauteur tonale. 0.5 = grave, 1.0 = normal, 2.0 = aigu.
1461
+ location
1462
+ Endroit d'où provient le son (affecte la spatialisation 3D).
1463
+ 10.2 Sons Disponibles (Sélection)
1464
+ 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.
1465
+
1466
+ Catégorie
1467
+ Exemples de sons
1468
+ Niveaux / UI
1469
+ Level Up, Click, Note Pling, Note Bass, Note Harp
1470
+ Environnement
1471
+ Explode, Splash, Thunder, Fire Ignite, Door Open
1472
+ Mobs
1473
+ Villager Yes, Villager No, Enderman Scream, Ghast Scream, Zombie Hurt
1474
+ Items
1475
+ Anvil Land, Anvil Break, Bow Fire, Arrow Hit, Item Break
1476
+ Ambiance
1477
+ Music Disc Cat, Music Disc 11, Ambient Cave
1478
+ ?? Trouver les noms de sons
1479
+ 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.
1480
+
1481
+ Chapitre 11 - Items et NBT
1482
+ 11.1 Référencer un Item
1483
+ 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.
1484
+
1485
+ // Structure d'un fichier d'item (ex: stone.json)
1486
+ {
1487
+ "item": "<NBT data de l'item copié depuis Minecraft>"
1488
+ }
1489
+
1490
+ // Dans HTSL, référencez-le ainsi :
1491
+ giveItem "stone" false null false
1492
+ removeItem "stone"
1493
+ hasItem "stone" "Metadata" "Hand" "Any Amount"
1494
+
1495
+ 11.2 Sauvegarder un Item Ingame
1496
+ Pour sauvegarder un item tenu en main dans un fichier JSON, utilisez la commande /htsl saveitem :
1497
+
1498
+ // Tenir un item en main, puis :
1499
+ /htsl saveitem <nom_fichier>
1500
+
1501
+ // Exemple :
1502
+ /htsl saveitem epee_diamant
1503
+ // Crée le fichier : imports/epee_diamant.json
1504
+
1505
+ 11.3 Commande giveItem Ingame
1506
+ Pour vous donner un item sauvegardé (utile pour tester), utilisez :
1507
+ /htsl giveitem <nom_fichier>
1508
+
1509
+ // Exemple
1510
+ /htsl giveitem epee_diamant
1511
+
1512
+ ?? Mode Créatif requis
1513
+ La commande /htsl giveitem ne fonctionne qu'en mode créatif. Si vous êtes en mode survie ou aventure, vous recevrez une erreur.
1514
+
1515
+ Chapitre 13 - Placeholders
1516
+ 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.
1517
+
1518
+ 13.1 Placeholders de Joueur
1519
+
1520
+ Placeholder
1521
+ Description
1522
+ %player.health%
1523
+ Points de vie actuels du joueur
1524
+ %player.maxhealth%
1525
+ Points de vie maximum du joueur
1526
+ %player.hunger%
1527
+ Niveau de faim du joueur (0-20)
1528
+ %player.location.x%
1529
+ Coordonnée X du joueur
1530
+ %player.location.y%
1531
+ Coordonnée Y du joueur
1532
+ %player.location.z%
1533
+ Coordonnée Z du joueur
1534
+ %player.name%
1535
+ Nom du joueur (si supporté)
1536
+ %player.location.yaw%
1537
+ Rotation horizontale du joueur (Yaw, -180 à 180)
1538
+ %player.location.pitch%
1539
+ Rotation verticale du joueur (Pitch, -90 à 90)
1540
+ 13.2 Placeholders de Variable
1541
+
1542
+ Placeholder
1543
+ Description
1544
+ %stat.player/NomStat%
1545
+ Valeur d'une statistique joueur
1546
+ %stat.global/NomStat%
1547
+ Valeur d'une statistique globale
1548
+ %stat.team/NomEquipe NomStat%
1549
+ Valeur d'une statistique d'équipe
1550
+ %var.player/NomVar%
1551
+ Valeur d'une variable joueur
1552
+ %var.global/NomVar%
1553
+ Valeur d'une variable globale
1554
+ %var.team/NomEquipe NomVar%
1555
+ Valeur d'une variable d'équipe
1556
+ 13.3 Placeholders Spéciaux
1557
+
1558
+ Placeholder
1559
+ Description
1560
+ %random.int/MIN MAX%
1561
+ Entier aléatoire entre MIN et MAX
1562
+ %date.unix%
1563
+ Timestamp Unix actuel
1564
+ Exemples d'utilisation
1565
+ // Dans un message chat
1566
+ chat "&aPV : &f%player.health% / %player.maxhealth%"
1567
+ chat "&6Kills : &f%stat.player/Kills% | &6Morts : &f%stat.player/Morts%"
1568
+ chat "Position : &b%player.location.x%, %player.location.y%, %player.location.z%"
1569
+
1570
+ // Dans des calculs (valeur source pour stat)
1571
+ stat "MaxKills" set globalstat TotalKills
1572
+
1573
+ // Nombre aléatoire
1574
+ stat "LootRarity" set %random.int/1 100%
1575
+
1576
+ // Dans des conditions avec placeholder
1577
+ if (placeholder "%stat.player/Kills%" >= 50) {
1578
+ chat "50 kills atteints !"
1579
+ }
1580
+
1581
+
1582
+ Chapitre 14 - Commandes Ingame HTSL
1583
+ Toutes les commandes HTSL se préfixent par /htsl. Voici la liste complète.
1584
+
1585
+ 14.1 Commandes de Base
1586
+
1587
+ Commande
1588
+ Description
1589
+ Exemple
1590
+ /htsl
1591
+ Affiche l'aide et les commandes disponibles
1592
+ /htsl
1593
+ /htsl help
1594
+ Affiche l'aide détaillée
1595
+ /htsl help
1596
+ /htsl config
1597
+ Ouvre le panneau de configuration
1598
+ /htsl config
1599
+ /htsl version
1600
+ Affiche la version de HTSL installée
1601
+ /htsl version
1602
+ /htsl changelog
1603
+ Affiche les dernières modifications
1604
+ /htsl changelog
1605
+ /htsl guide
1606
+ Fournit un lien vers le guide Hypixel officiel
1607
+ /htsl guide
1608
+ /htsl listscripts
1609
+ Liste tous les fichiers .htsl dans imports/
1610
+ /htsl listscripts
1611
+ /htsl listscripts <dir>
1612
+ Liste les fichiers dans un sous-dossier
1613
+ /htsl listscripts mescripts
1614
+ 14.2 Commandes de Compilation
1615
+
1616
+ Commande
1617
+ Description
1618
+ Exemple
1619
+ /htsl gui <fichier>
1620
+ Ouvre le fichier .htsl dans l'éditeur de code ingame
1621
+ /htsl gui monscript
1622
+ /htsl <fichier>
1623
+ Compile et importe le fichier .htsl spécifié
1624
+ /htsl monscript
1625
+ /htsl convert <action_id> <fichier>
1626
+ Convertit une action Housing existante en HTSL
1627
+ /htsl convert abc123 output
1628
+ /htsl addfunctions <fichier>
1629
+ Importe seulement les fonctions d'un fichier
1630
+ /htsl addfunctions fonctions
1631
+ 14.3 Commandes d'Item
1632
+
1633
+ Commande
1634
+ Description
1635
+ Exemple
1636
+ /htsl saveitem <nom>
1637
+ Sauvegarde l'item en main dans imports/<nom>.json
1638
+ /htsl saveitem epee_feu
1639
+ /htsl giveitem <nom>
1640
+ Vous donne l'item sauvegardé (mode créatif requis)
1641
+ /htsl giveitem epee_feu
1642
+
1643
+ Chapitre 15 - Tutoriels et Exemples Pratiques
1644
+ 15.1 Système de Kills et Morts
1645
+ Voici un système complet de gestion des kills et morts avec affichage du leaderboard.
1646
+ // === SYSTÈME KILLS/MORTS ===
1647
+
1648
+ // Événement : Mort du joueur
1649
+ goto event "Mort"
1650
+ stat "Morts" inc 1
1651
+ globalstat "TotalMorts" inc 1
1652
+ chat "&cVous êtes mort ! Total morts : &f%stat.player/Morts%"
1653
+ sound "Ghast Scream" 0.7 1 current_location
1654
+ pause 60
1655
+ houseSpawn
1656
+ fullHeal
1657
+ resetInventory
1658
+
1659
+ // Événement : Tuer un joueur
1660
+ goto event "Kill"
1661
+ stat "Kills" inc 1
1662
+ globalstat "TotalKills" inc 1
1663
+ chat "&a+1 Kill ! Total : &f%stat.player/Kills%"
1664
+ sound "Level Up" 0.7 1 current_location
1665
+
1666
+ // Vérifier si record personnel
1667
+ if (stat "Kills" > stat "RecordKills") {
1668
+ stat "RecordKills" set stat Kills
1669
+ chat "&6?? Nouveau record personnel : &f%stat.player/Kills% kills !"
1670
+ }
1671
+
1672
+ 15.2 Système de Niveaux
1673
+ // === SYSTÈME DE NIVEAUX ===
1674
+ // Fonction à appeler après avoir obtenu des XP
1675
+
1676
+ goto function "VerifierNiveau"
1677
+ if (stat "XP" >= 100) {
1678
+ stat "Niveau" inc 1
1679
+ stat "XP" dec XP_REQUIS
1680
+ xpLevel 1
1681
+ title "&6Niveau %stat.player/Niveau% !" "&eFélicitations !" 10 40 10
1682
+ sound "Level Up" 1 1 current_location
1683
+ chat "&6Vous avez atteint le niveau &f%stat.player/Niveau% !"
1684
+ chat "&7XP restant : &f%stat.player/XP%"
1685
+ // Bonus selon le niveau
1686
+ if (stat "Niveau" = 10) {
1687
+ maxHealth inc 2 true
1688
+ chat "&aBonus débloqué : +2 PV max !"
1689
+ }
1690
+ if (stat "Niveau" = 20) {
1691
+ changePlayerGroup "Champion" true
1692
+ chat "&6Groupe \"Champion\" débloqué !"
1693
+ }
1694
+ }
1695
+
1696
+ 15.3 Mini-Jeu de Parkour
1697
+ // === PARKOUR AVANCÉ ===
1698
+
1699
+ // Démarrer le parkour
1700
+ goto function "DemarrerParkour"
1701
+ if (doingParkour) {
1702
+ chat "&cVous faites déjà un parcours !"
1703
+ exit
1704
+ }
1705
+ chat "&aParcours démarré ! Bonne chance !"
1706
+ sound "Note Pling" 1 1 current_location
1707
+ var "TempsDebut" set %date.unix% false
1708
+ gamemode adventure
1709
+
1710
+ // Checkpoint
1711
+ goto function "Checkpoint1"
1712
+ parkCheck
1713
+ stat "Checkpoints" inc 1
1714
+ chat "&aCheckpoint 1 atteint ! (%stat.player/Checkpoints%/3)"
1715
+ sound "Note Pling" 0.7 1.2 current_location
1716
+
1717
+ // Fin du parcours
1718
+ goto function "FinParkour"
1719
+ stat "ParkoursFinis" inc 1
1720
+ chat "&6Bravo ! Parcours terminé !"
1721
+ sound "Level Up" 1 1 current_location
1722
+ title "&aTerminé !" "&eParcours complété" 5 30 5
1723
+ stat "XP" inc 25
1724
+ function "VerifierNiveau" false
1725
+
1726
+ // Zone danger (fail)
1727
+ goto region "ZoneMort" "Enter"
1728
+ failParkour "Hors limites !"
1729
+ chat "&cHors limites ! Retour au dernier checkpoint."
1730
+ sound "Ghast Hurt" 0.7 1 current_location
1731
+
1732
+ 15.4 Shop de Base
1733
+ // === BOUTIQUE ===
1734
+
1735
+ // NPC Marchand - Clic gauche
1736
+ goto npc "Marchand" "Left Click Actions"
1737
+ displayMenu "Boutique"
1738
+
1739
+ // Acheter une épée (dans les actions du bouton de la GUI)
1740
+ goto function "AcheterEpee"
1741
+ if (stat "Argent" < 50) {
1742
+ chat "&cArgent insuffisant ! (Requis : &6PRIX &cpièces, vous avez : &6%stat.player/Argent%&c)"
1743
+ sound "Villager No" 0.7 1 current_location
1744
+ exit
1745
+ }
1746
+
1747
+ if (hasItem "epee_fer" "Metadata" "Anywhere" "Any Amount") {
1748
+ chat "&cVous avez déjà cet item !"
1749
+ exit
1750
+ }
1751
+
1752
+ stat "Argent" dec 50
1753
+ giveItem "epee_fer" false null false
1754
+ chat "&aAchat réussi ! &f(-&650 &fpièces)"
1755
+ sound "Level Up" 0.7 1 current_location
1756
+ closeMenu
1757
+
1758
+ 15.5 Système de Teams
1759
+ // === GESTION D'ÉQUIPES ===
1760
+
1761
+ // À la connexion : assigner à une équipe équilibrée
1762
+ goto event "Connexion"
1763
+ balanceTeam
1764
+
1765
+ // Afficher l'équipe
1766
+ if (hasTeam "Blue") {
1767
+ chat "&9Vous rejoignez l'équipe Bleue !"
1768
+ applyPotion "Speed" 10 1 false false
1769
+ }
1770
+ if (hasTeam "Red") {
1771
+ chat "&cVous rejoignez l'équipe Rouge !"
1772
+ applyPotion "Strength" 10 1 false false
1773
+ }
1774
+
1775
+ // Marquer un point pour l'équipe du joueur
1776
+ goto function "MarquerPoint"
1777
+ if (hasTeam "Blue") {
1778
+ teamstat "Points" Blue inc 1
1779
+ chat "&9Équipe Bleue marque un point ! (%teamstat.Blue/Points% pts)"
1780
+ }
1781
+ if (hasTeam "Red") {
1782
+ teamstat "Points" Red inc 1
1783
+ chat "&cÉquipe Rouge marque un point ! (%teamstat.Red/Points% pts)"
1784
+ }
1785
+
1786
+ // Vérifier victoire
1787
+ if (teamstat "Points" Blue >= 10) {
1788
+ function "VictoireBleu" true
1789
+ }
1790
+ if (teamstat "Points" Red >= 10) {
1791
+ function "VictoireRouge" true
1792
+ }
1793
+
1794
+ 15.6 Gestion de Groupes
1795
+ // === GROUPES ET RANGS ===
1796
+
1797
+ // Vérifier les privilèges
1798
+ goto function "CommandeAdmin"
1799
+ if (hasGroup "Admin" false) {
1800
+ // Commandes admin
1801
+ function "ResetPartie" true
1802
+ chat "&4[Admin] &fPartie réinitialisée."
1803
+ } else if (hasGroup "Moderateur" true) {
1804
+ // Modérateurs
1805
+ chat "&2[Modo] &fVous n'avez pas accès à cette commande admin."
1806
+ } else {
1807
+ chat "&cVous n'avez pas les permissions requises."
1808
+ }
1809
+
1810
+ // Récompenser les joueurs VIP
1811
+ goto event "Connexion"
1812
+ if (hasGroup "VIP" false) {
1813
+ applyPotion "Speed" 300 1 false false
1814
+ chat "&6[VIP] &fVitesse bonus activée !"
1815
+ }
1816
+ if (hasGroup "MVP" false) {
1817
+ applyPotion "Speed" 300 2 false false
1818
+ applyPotion "Jump Boost" 300 1 false false
1819
+ chat "&b[MVP] &fBonus de vitesse et saut activés !"
1820
+ }
1821
+
1822
+ 15.7 Timer et Compteur
1823
+ // === TIMER DE PARTIE ===
1824
+
1825
+ goto function "DemarrerTimer"
1826
+ globalvar "PartieActive" set 1 false
1827
+ globalvar "TempsRestant" set 300 false // 300 secondes = 5 minutes
1828
+ chat "&aPartie démarrée ! Durée : 5 minutes"
1829
+ function "TickTimer" true
1830
+
1831
+ goto function "TickTimer"
1832
+ if (globalvar "PartieActive" = 1 0) {
1833
+ globalvar "TempsRestant" dec 1
1834
+ if (globalvar "TempsRestant" = 0 -1) {
1835
+ function "FinPartie" true
1836
+ }
1837
+ if (globalvar "TempsRestant" <= 30 -1) {
1838
+ actionBar "&cTemps restant : &f%var.global/TempsRestant%s"
1839
+ }
1840
+ }
1841
+
1842
+ 15.8 Téléporteur Conditionnel
1843
+ // === TÉLÉPORTEUR AVEC CONDITIONS ===
1844
+
1845
+ // Plaque de pression : téléporter selon critères
1846
+ goto function "Teleporteur_Zone1"
1847
+
1848
+ // Vérifier le niveau minimum
1849
+ if (stat "Niveau" < 5) {
1850
+ chat "&cNiveau 5 requis ! (Votre niveau : &f%stat.player/Niveau%&c)"
1851
+ sound "Villager No" 0.7 1 current_location
1852
+ exit
1853
+ }
1854
+
1855
+ // Vérifier que le joueur a le bon item
1856
+ if (hasItem "laissez_passer" "Metadata" "Anywhere" "Any Amount") {
1857
+ removeItem "laissez_passer"
1858
+ tp custom_coordinates "200 64 200 0 0" false
1859
+ sound "Note Pling" 1 1.5 current_location
1860
+ chat "&aBienvenue dans la Zone 1 !"
1861
+ } else {
1862
+ chat "&cVous avez besoin d'un laissez-passer !"
1863
+ sound "Villager No" 0.7 1 current_location
1864
+ }
1865
+
1866
+ 15.9 Système de Vote
1867
+ // === VOTE JOUEUR ===
1868
+
1869
+ goto function "VoterMap1"
1870
+ if (var "AVote" = 1 0) {
1871
+ chat "&cVous avez déjà voté !"
1872
+ exit
1873
+ }
1874
+ var "AVote" set 1 false
1875
+ globalstat "VotesMap1" inc 1
1876
+ chat "&aVote enregistré pour Map 1 ! (%globalstat/VotesMap1% votes)"
1877
+
1878
+ goto function "VoterMap2"
1879
+ if (var "AVote" = 1 0) {
1880
+ chat "&cVous avez déjà voté !"
1881
+ exit
1882
+ }
1883
+ var "AVote" set 1 false
1884
+ globalstat "VotesMap2" inc 1
1885
+ chat "&aVote enregistré pour Map 2 ! (%globalstat/VotesMap2% votes)"
1886
+
1887
+ goto function "ResultatsVote"
1888
+ chat "&eRésultats du vote :"
1889
+ chat "&fMap 1 : &6%stat.global/VotesMap1% votes"
1890
+ chat "&fMap 2 : &6%stat.global/VotesMap2% votes"
1891
+ if (globalstat "VotesMap1" > globalstat "VotesMap2") {
1892
+ chat "&aMap 1 gagne !"
1893
+ function "ChargerMap1" true
1894
+ } else {
1895
+ chat "&aMap 2 gagne !"
1896
+ function "ChargerMap2" true
1897
+ }
1898
+
1899
+ 15.10 Exemple Complet - RPG Simple
1900
+ Voici un exemple plus complet illustrant un mini-RPG avec classes, combat et progression.
1901
+ // === MINI-RPG COMPLET ===
1902
+
1903
+ // ---- CONNEXION ----
1904
+ goto event "Connexion"
1905
+ // Initialisation première connexion
1906
+ if (stat "EstInitialise" = 0 null) {
1907
+ stat "EstInitialise" set 1
1908
+ stat "Classe" set 0
1909
+ stat "Niveau" set 1
1910
+ stat "XP" set 0
1911
+ stat "Argent" set 100
1912
+ stat "Kills" set 0
1913
+ stat "Morts" set 0
1914
+ chat "&6Bienvenue ! Choisissez votre classe au NPC de départ."
1915
+ tp custom_coordinates "0 64 0 0 0" false
1916
+ } else {
1917
+ chat "&aContent de vous revoir, aventurier !"
1918
+ chat "&7Niveau &f%stat.player/Niveau% &7| XP : &f%stat.player/XP% &7| Or : &6%stat.player/Argent%"
1919
+ }
1920
+ applyLayout "Spawn"
1921
+
1922
+ // ---- CHOIX DE CLASSE ----
1923
+ goto npc "PNJ_Classes" "Left Click Actions"
1924
+ displayMenu "ChoisirClasse"
1925
+
1926
+ goto function "ChoisirGuerrier"
1927
+ if (stat "Classe" > 0 null) {
1928
+ chat "&cVous avez déjà une classe !"
1929
+ exit
1930
+ }
1931
+ stat "Classe" set 1
1932
+ maxHealth set 30 true
1933
+ applyLayout "KitGuerrier"
1934
+ chat "&4[Guerrier] &fVous êtes robuste et puissant !"
1935
+ chat "&7PV max augmentés à 30 !"
1936
+ title "&4Guerrier" "&7Force et Vigueur" 10 40 10
1937
+ sound "Level Up" 1 1 current_location
1938
+
1939
+ goto function "ChoisirMage"
1940
+ if (stat "Classe" > 0 null) {
1941
+ chat "&cVous avez déjà une classe !"
1942
+ exit
1943
+ }
1944
+ stat "Classe" set 2
1945
+ maxHealth set 15 true
1946
+ var "Mana" set 100 false
1947
+ applyLayout "KitMage"
1948
+ chat "&9[Mage] &fVous maîtrisez la magie !"
1949
+ chat "&7PV réduits mais puissance magique élevée."
1950
+ title "&9Mage" "&7Art Mystique" 10 40 10
1951
+ sound "Level Up" 1 1.5 current_location
1952
+
1953
+ goto function "ChoisirArcher"
1954
+ if (stat "Classe" > 0 null) {
1955
+ chat "&cVous avez déjà une classe !"
1956
+ exit
1957
+ }
1958
+ stat "Classe" set 3
1959
+ maxHealth set 20 true
1960
+ applyLayout "KitArcher"
1961
+ chat "&2[Archer] &fPrécision et agilité !"
1962
+ applyPotion "Speed" 999 1 false false
1963
+ title "&2Archer" "&7Précision et Agilité" 10 40 10
1964
+ sound "Level Up" 1 0.8 current_location
1965
+
1966
+ // ---- MORT ----
1967
+ goto event "Mort"
1968
+ stat "Morts" inc 1
1969
+ globalstat "TotalMorts" inc 1
1970
+ sound "Ghast Scream" 0.7 1 current_location
1971
+ title "&cMort !" "" 5 20 5
1972
+ pause 60
1973
+ houseSpawn
1974
+ fullHeal
1975
+ resetInventory
1976
+ // Réappliquer les buffs de classe
1977
+ if (stat "Classe" = 3 null) {
1978
+ applyPotion "Speed" 999 1 false false
1979
+ }
1980
+
1981
+ // ---- XP & NIVEAUX ----
1982
+ goto function "GagnerXP"
1983
+ stat "XP" inc 10
1984
+ if (stat "XP" >= stat "Niveau" * 100 null) { // XP requis = Niveau * 100
1985
+ stat "Niveau" inc 1
1986
+ stat "XP" set 0
1987
+ title "&6Niveau %stat.player/Niveau% !" "" 10 30 5
1988
+ sound "Level Up" 1 1 current_location
1989
+ chat "&6Nouveau niveau : &f%stat.player/Niveau%"
1990
+ }
1991
+
1992
+
1993
+ Chapitre 16 - Bonnes Pratiques
1994
+ 16.1 Organisation du Code
1995
+ Une bonne organisation de vos fichiers HTSL est essentielle pour maintenir un projet Housing de qualité.
1996
+
1997
+ • Créez des fichiers séparés par fonctionnalité : kills.htsl, boutique.htsl, events.htsl
1998
+ • Utilisez des sous-dossiers si votre projet est grand (activez saveDirectory dans les settings)
1999
+ • Commentez toujours la logique non-triviale avec des commentaires //
2000
+ • Nommez vos fonctions Housing de manière descriptive : VerifierNiveau, GestionMort, etc.
2001
+
2002
+ 16.2 Nommage des Variables
2003
+ Adoptez une convention de nommage cohérente pour toutes vos variables et statistiques.
2004
+
2005
+ Type
2006
+ Convention
2007
+ Exemples
2008
+ Statistiques joueur
2009
+ PascalCase
2010
+ Kills, Morts, Argent, Niveau
2011
+ Variables temporaires
2012
+ camelCase ou préfixe
2013
+ tmpScore, _phase, sessionData
2014
+ Statistiques globales
2015
+ Prefixe G ou Global
2016
+ GTotalKills, GlobalPhase
2017
+ Statistiques d'équipe
2018
+ Suffixe équipe
2019
+ BlueScore, RedKills
2020
+ 16.3 Optimisation
2021
+ • Évitez les boucles très grandes - elles génèrent beaucoup d'actions Housing
2022
+ • Préférez les fonctions réutilisables pour éviter la duplication de code
2023
+ • Utilisez exit pour quitter tôt quand les conditions ne sont pas remplies
2024
+ • Groupez les vérifications de conditions similaires dans un seul if
2025
+ • Réduisez le nombre de pause - ils comptent comme des actions et ralentissent l'exécution
2026
+ • Faites attention aux limites d'actions Housing (généralement 50 par liste)
2027
+
2028
+
2029
+ Chapitre 17 - Dépannage et Erreurs Communes
2030
+ 17.1 Erreurs de Compilation
2031
+
2032
+ Message d'erreur
2033
+ Solution
2034
+ Unknown action 'xxx' on line N
2035
+ Le mot-clé xxx n'est pas reconnu. Vérifiez l'orthographe. Sensible à la casse.
2036
+ Invalid location on line N
2037
+ La location fournie n'est pas valide. Vérifiez les types acceptés (house_spawn, current_location, etc.)
2038
+ Unknown operator 'xxx' on line N
2039
+ L'opérateur n'est pas valide. Utilisez inc, dec, set, multiply, divide, unset.
2040
+ Unknown comparator 'xxx' on line N
2041
+ Utilisez <, <=, =, >=, >
2042
+ Couldn't find the file 'xxx'
2043
+ Le fichier .htsl n'existe pas dans imports/. Vérifiez le nom.
2044
+ Nested file calls detected
2045
+ Boucle circulaire d'inclusions détectée. Vérifiez vos goto ... as.
2046
+ Something went wrong with expression evaluation on line N
2047
+ Erreur dans une expression. Vérifiez la syntaxe des conditions.
2048
+ 17.2 Comportements Inattendus
2049
+ Problème
2050
+ Solution
2051
+ Les actions ne s'importent pas
2052
+ Vérifiez que vous êtes dans la bonne section Housing (fonction/événement correspondant).
2053
+ Condition toujours fausse
2054
+ Vérifiez le nom exact de la variable (sensible à la casse). Une variable non-initialisée vaut null.
2055
+ goto ne change pas de contexte
2056
+ Vérifiez la syntaxe goto (goto function, goto event, etc.) et le nom exact.
2057
+ loop génère trop d'actions
2058
+ Housing a une limite d'actions. Réduisez le nombre d'itérations ou décomposez en fonctions.
2059
+ 17.3 FAQ
2060
+ Q : Puis-je utiliser HTSL pour importer des actions dans des événements Housing ?
2061
+ Oui. Utilisez goto event "NomEvenement" puis listez les actions. HTSL naviguera automatiquement dans le GUI Housing pour les importer.
2062
+
2063
+ Q : HTSL peut-il importer des actions dans des menus personnalisés ?
2064
+ Oui, via goto custommenu ou en utilisant displayMenu combiné à des fonctions. Consultez la documentation de goto pour les types supportés.
2065
+
2066
+ Q : Quelle est la limite d'actions par liste dans Housing ?
2067
+ 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.
2068
+
2069
+ Q : HTSL fonctionne-t-il avec HTSLReborn ?
2070
+ 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.
2071
+
2072
+ Q : Comment déboguer un script HTSL ?
2073
+ 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.
2074
+
2075
+
2076
+ 17.4 Erreurs Récurrentes
2077
+ Cette section répertorie les erreurs les plus fréquentes rencontrées lors de l'écriture de scripts HTSL.
2078
+
2079
+ !! if imbriqué interdit
2080
+ 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.
2081
+
2082
+ !! Action loop interdite
2083
+ L'écriture d'une action loop imbriquée ou utilisée comme action directe n'est pas supportée.
2084
+
2085
+ !! Plusieurs conditions dans un if : une seule paire de parenthèses
2086
+ 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.
2087
+ Exemple autorisé :
2088
+ if and (stat "Kills" >= 10 , hasGroup "VIP" , stat "Argent" >= 50) {
2089
+ chat "Conditions remplies !"
2090
+ }
2091
+
2092
+ Exemple interdit (parenthèses multiples séparées) :
2093
+ // INCORRECT :
2094
+ // if (stat "Kills" >= 10) (hasGroup "VIP") { ... }
2095
+
2096
+ !! else if n'existe pas
2097
+ 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.
2098
+ Exemple correct :
2099
+ if (stat "Niveau" >= 10) {
2100
+ chat "Niveau élevé"
2101
+ } else {
2102
+ if (stat "Niveau" >= 5) {
2103
+ chat "Niveau intermédiaire"
2104
+ } else {
2105
+ chat "Niveau bas"
2106
+ }
2107
+ }
2108
+
2109
+
2110
+
2111
+ Chapitre 18 - Annexes
2112
+ Annexe A - Liste Complète des Enchantements
2113
+ Enchantements disponibles dans l'action enchant de HTSL :
2114
+
2115
+ Enchantement
2116
+ Catégorie
2117
+ Description
2118
+ Protection
2119
+ Armure
2120
+ Réduit les dégâts généraux
2121
+ Fire Protection
2122
+ Armure
2123
+ Réduit les dégâts de feu
2124
+ Feather Falling
2125
+ Bottes
2126
+ Réduit les dégâts de chute
2127
+ Blast Protection
2128
+ Armure
2129
+ Réduit les dégâts d'explosion
2130
+ Projectile Protection
2131
+ Armure
2132
+ Réduit les dégâts de projectiles
2133
+ Respiration
2134
+ Casque
2135
+ Augmente le temps sous l'eau
2136
+ Aqua Affinity
2137
+ Casque
2138
+ Augmente la vitesse de minage sous l'eau
2139
+ Thorns
2140
+ Armure
2141
+ Réfléchit des dégâts aux attaquants
2142
+ Depth Strider
2143
+ Bottes
2144
+ Augmente la vitesse dans l'eau
2145
+ Sharpness
2146
+ Épée
2147
+ Augmente les dégâts de mêlée
2148
+ Smite
2149
+ Épée
2150
+ Bonus de dégâts contre les morts-vivants
2151
+ Bane Of Arthropods
2152
+ Épée
2153
+ Bonus de dégâts contre arthropodes
2154
+ Knockback
2155
+ Épée
2156
+ Augmente l'élan infligé
2157
+ Fire Aspect
2158
+ Épée
2159
+ Met le feu à l'ennemi
2160
+ Looting
2161
+ Épée
2162
+ Augmente les drops de mobs
2163
+ Efficiency
2164
+ Outil
2165
+ Augmente la vitesse de minage
2166
+ Silk Touch
2167
+ Outil
2168
+ Récupère les blocs tels quels
2169
+ Unbreaking
2170
+ Tout
2171
+ Augmente la durabilité
2172
+ Fortune
2173
+ Outil
2174
+ Augmente les drops de ressources
2175
+ Power
2176
+ Arc
2177
+ Augmente les dégâts des flèches
2178
+ Punch
2179
+ Arc
2180
+ Augmente l'élan des flèches
2181
+ Flame
2182
+ Arc
2183
+ Flèches enflammées
2184
+ Infinity
2185
+ Arc
2186
+ Flèches infinies (1 flèche requise)
2187
+ Annexe B - Liste Complète des Effets de Potion
2188
+ Effets disponibles dans les actions applyPotion et la condition hasPotion :
2189
+
2190
+ Effet
2191
+ Description
2192
+ Utilisation typique
2193
+ Speed
2194
+ Augmente la vitesse de déplacement
2195
+ applyPotion "Speed" 60 1 false false
2196
+ Slowness
2197
+ Réduit la vitesse de déplacement
2198
+ applyPotion "Slowness" 10 1 false false
2199
+ Haste
2200
+ Augmente la vitesse de minage/attaque
2201
+ applyPotion "Haste" 60 2 false false
2202
+ Mining Fatigue
2203
+ Réduit la vitesse de minage
2204
+ applyPotion "Mining Fatigue" 30 1 false false
2205
+ Strength
2206
+ Augmente les dégâts en mêlée
2207
+ applyPotion "Strength" 60 1 false false
2208
+ Instant Health
2209
+ Soin instantané
2210
+ applyPotion "Instant Health" 1 1 false false
2211
+ Instant Damage
2212
+ Dégâts instantanés
2213
+ applyPotion "Instant Damage" 1 1 false false
2214
+ Jump Boost
2215
+ Augmente la hauteur de saut
2216
+ applyPotion "Jump Boost" 60 2 false false
2217
+ Nausea
2218
+ Provoque des nausées visuelles
2219
+ applyPotion "Nausea" 10 1 false false
2220
+ Regeneration
2221
+ Regénère les PV progressivement
2222
+ applyPotion "Regeneration" 10 2 true false
2223
+ Resistance
2224
+ Réduit les dégâts reçus
2225
+ applyPotion "Resistance" 60 1 false false
2226
+ Fire Resistance
2227
+ Immunité au feu et lave
2228
+ applyPotion "Fire Resistance" 60 1 false false
2229
+ Water Breathing
2230
+ Respirer sous l'eau infiniment
2231
+ applyPotion "Water Breathing" 60 1 false false
2232
+ Invisibility
2233
+ Rend le joueur invisible
2234
+ applyPotion "Invisibility" 60 1 false false
2235
+ Blindness
2236
+ Réduit le champ de vision
2237
+ applyPotion "Blindness" 5 1 false false
2238
+ Night Vision
2239
+ Vision nocturne totale
2240
+ applyPotion "Night Vision" 60 1 false false
2241
+ Hunger
2242
+ Augmente la consommation de faim
2243
+ applyPotion "Hunger" 10 1 false false
2244
+ Weakness
2245
+ Réduit les dégâts de mêlée
2246
+ applyPotion "Weakness" 30 1 false false
2247
+ Poison
2248
+ Inflige des dégâts de poison
2249
+ applyPotion "Poison" 20 1 false false
2250
+ Wither
2251
+ Inflige des dégâts Wither (passe armure)
2252
+ applyPotion "Wither" 10 1 false false
2253
+ Health Boost
2254
+ Augmente les PV max temporairement
2255
+ applyPotion "Health Boost" 60 1 false false
2256
+ Absorption
2257
+ Ajoute des PV supplémentaires (bouclier)
2258
+ applyPotion "Absorption" 60 2 false false
2259
+ Annexe C - Liste des Lobbies Hypixel
2260
+ Lobbies disponibles dans l'action lobby :
2261
+
2262
+ Valeur HTSL
2263
+ Destination
2264
+ "Main Lobby"
2265
+ Hall principal Hypixel
2266
+ "Tournament Hall"
2267
+ Hall des tournois
2268
+ "Blitz SG"
2269
+ Blitz Survival Games
2270
+ "The TNT Games"
2271
+ TNT Games
2272
+ "Mega Walls"
2273
+ Mega Walls
2274
+ "Arcade Games"
2275
+ Arcade Games
2276
+ "Cops and Crims"
2277
+ Cops and Criminals
2278
+ "UHC Champions"
2279
+ UHC Champions
2280
+ "Warlords"
2281
+ Warlords
2282
+ "Smash Heroes"
2283
+ Super Smash Mobs
2284
+ "Housing"
2285
+ Housing Lobby
2286
+ "SkyWars"
2287
+ SkyWars
2288
+ "Speed UHC"
2289
+ Speed UHC
2290
+ "Classic Games"
2291
+ Classic Games
2292
+ "Prototype"
2293
+ Prototype Lobby
2294
+ "Bed Wars"
2295
+ Bed Wars
2296
+ "Murder Mystery"
2297
+ Murder Mystery
2298
+ "Build Battle"
2299
+ Build Battle
2300
+ "Duels"
2301
+ Duels
2302
+ "Wool Wars"
2303
+ Wool Wars
2304
+ Annexe D - Liste des Permissions Housing
2305
+ Permissions disponibles dans la condition hasPermission :
2306
+
2307
+ Permission
2308
+ Description
2309
+ Fly
2310
+ Autorisation de voler
2311
+ Build
2312
+ Autorisation de construire
2313
+ Offline Build
2314
+ Autorisation de construire hors ligne
2315
+ Fluid
2316
+ Manipuler les fluides (eau/lave)
2317
+ Pro Tools
2318
+ Outils professionnels
2319
+ Use Chests
2320
+ Utiliser les coffres
2321
+ Use Ender Chests
2322
+ Utiliser les ender-coffres
2323
+ Item Editor
2324
+ Éditer les items
2325
+ Switch Game Mode
2326
+ Changer de mode de jeu
2327
+ Edit Stats
2328
+ Modifier les statistiques
2329
+ Change Player Group
2330
+ Changer le groupe des joueurs
2331
+ Change Gamerules
2332
+ Modifier les règles de jeu
2333
+ Housing Menu
2334
+ Accéder au menu Housing
2335
+ Team Chat Spy
2336
+ Espionner le chat d'équipe
2337
+ Edit Actions
2338
+ Éditer les actions
2339
+ Edit Regions
2340
+ Éditer les régions
2341
+ Edit Scoreboard
2342
+ Éditer le scoreboard
2343
+ Edit Event Actions
2344
+ Éditer les actions d'événements
2345
+ Edit Commands
2346
+ Éditer les commandes
2347
+ Edit Functions
2348
+ Éditer les fonctions
2349
+ Edit Inventory Layouts
2350
+ Éditer les layouts d'inventaire
2351
+ Edit Teams
2352
+ Éditer les équipes
2353
+ Edit Custom Menus
2354
+ Éditer les menus personnalisés
2355
+ /tp
2356
+ Utiliser la commande /tp
2357
+ /tp Other Players
2358
+ Téléporter d'autres joueurs
2359
+ Kick
2360
+ Expulser des joueurs
2361
+ Ban
2362
+ Bannir des joueurs
2363
+ Mute
2364
+ Réduire au silence des joueurs
2365
+ Pet Spawning
2366
+ Invoquer des familiers
2367
+ Annexe E - Opérateurs et Comparateurs
2368
+
2369
+ Opérateurs de modification de variable
2370
+ Opérateur
2371
+ Description
2372
+ Exemple
2373
+ inc / increment
2374
+ Ajoute la valeur
2375
+ stat "X" inc 5
2376
+ dec / decrement
2377
+ Soustrait la valeur
2378
+ stat "X" dec 3
2379
+ set
2380
+ Définit la valeur exacte
2381
+ stat "X" set 100
2382
+ multiply / mult
2383
+ Multiplie
2384
+ stat "X" multiply 2
2385
+ divide / div
2386
+ Divise
2387
+ stat "X" divide 4
2388
+ unset
2389
+ Supprime la variable
2390
+ var "Y" unset null
2391
+ bitwise and
2392
+ ET logique bit-à-bit
2393
+ stat "F" bitwise and 7
2394
+ bitwise or
2395
+ OU logique bit-à-bit
2396
+ stat "F" bitwise or 4
2397
+ bitwise xor
2398
+ XOR bit-à-bit
2399
+ stat "F" bitwise xor 1
2400
+ left shift
2401
+ Décalage gauche
2402
+ stat "F" left shift 2
2403
+ arithmetic right shift
2404
+ Décalage droite arithmétique
2405
+ stat "F" arithmetic right shift 1
2406
+ logical right shift
2407
+ Décalage droite logique
2408
+ stat "F" logical right shift 1
2409
+ Comparateurs de condition
2410
+ Symbole HTSL
2411
+ Signification
2412
+ Exemple
2413
+ <
2414
+ Strictement inférieur à
2415
+ stat "X" < 10
2416
+ <=
2417
+ Inférieur ou égal à
2418
+ stat "X" <= 10
2419
+ =
2420
+ Égal à
2421
+ stat "X" = 5
2422
+ >=
2423
+ Supérieur ou égal à
2424
+ stat "X" >= 3
2425
+ >
2426
+ Strictement supérieur à
2427
+ stat "X" > 0
2428
+ Annexe F - Index Alphabétique des Commandes
2429
+
2430
+ Commande HTSL
2431
+ Type
2432
+ Housing ID
2433
+ actionBar
2434
+ Action
2435
+ ACTION_BAR
2436
+ applyLayout
2437
+ Action
2438
+ APPLY_LAYOUT
2439
+ applyPotion
2440
+ Action
2441
+ POTION_EFFECT
2442
+ balanceTeam
2443
+ Action
2444
+ BALANCE_PLAYER_TEAM
2445
+ blockType
2446
+ Condition
2447
+ BLOCK_TYPE
2448
+ cancelEvent
2449
+ Action
2450
+ CANCEL_EVENT
2451
+ canPvp
2452
+ Condition
2453
+ PVP_ENABLED
2454
+ changeGroup
2455
+ Action
2456
+ CHANGE_PLAYER_GROUP
2457
+ changeHealth
2458
+ Action
2459
+ SET_HEALTH
2460
+ changePlayerGroup
2461
+ Action
2462
+ CHANGE_PLAYER_GROUP
2463
+ changeVelocity
2464
+ Action
2465
+ CHANGE_VELOCITY
2466
+ chat
2467
+ Action
2468
+ SEND_MESSAGE
2469
+ clearEffects
2470
+ Action
2471
+ CLEAR_EFFECTS
2472
+ closeMenu
2473
+ Action
2474
+ CLOSE_MENU
2475
+ compassTarget
2476
+ Action
2477
+ SET_COMPASS_TARGET
2478
+ consumeItem
2479
+ Action
2480
+ USE_HELD_ITEM
2481
+ damageCause
2482
+ Condition
2483
+ DAMAGE_CAUSE
2484
+ damageAmount
2485
+ Condition
2486
+ DAMAGE_AMOUNT
2487
+ displayMenu
2488
+ Action
2489
+ DISPLAY_MENU
2490
+ displayNametag
2491
+ Action
2492
+ TOGGLE_NAMETAG_DISPLAY
2493
+ doingParkour
2494
+ Condition
2495
+ IN_PARKOUR
2496
+ dropItem
2497
+ Action
2498
+ DROP_ITEM
2499
+ enchant
2500
+ Action
2501
+ ENCHANT_HELD_ITEM
2502
+ exit
2503
+ Action
2504
+ EXIT
2505
+ failParkour
2506
+ Action
2507
+ BAIL_PARKOUR
2508
+ fishingEnv
2509
+ Condition
2510
+ FISHING_ENVIRONMENT
2511
+ fullHeal
2512
+ Action
2513
+ FULL_HEAL
2514
+ function
2515
+ Action
2516
+ TRIGGER_FUNCTION
2517
+ gamemode
2518
+ Action / Condition
2519
+ SET_GAMEMODE / GAMEMODE
2520
+ giveItem
2521
+ Action
2522
+ GIVE_ITEM
2523
+ globalstat
2524
+ Action / Condition
2525
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2526
+ globalvar
2527
+ Action / Condition
2528
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2529
+ hasGroup / inGroup
2530
+ Condition
2531
+ IN_GROUP
2532
+ hasItem
2533
+ Condition
2534
+ HAS_ITEM
2535
+ hasPermission
2536
+ Condition
2537
+ HAS_PERMISSION
2538
+ hasPotion
2539
+ Condition
2540
+ POTION_EFFECT
2541
+ hasTeam / inTeam
2542
+ Condition
2543
+ IN_TEAM
2544
+ health
2545
+ Condition
2546
+ HEALTH
2547
+ houseSpawn
2548
+ Action
2549
+ SPAWN
2550
+ hungerLevel
2551
+ Action
2552
+ SET_HUNGER_LEVEL
2553
+ hunger
2554
+ Condition
2555
+ HUNGER_LEVEL
2556
+ if
2557
+ Contrôle
2558
+ CONDITIONAL
2559
+ inRegion
2560
+ Condition
2561
+ IN_REGION
2562
+ isFlying
2563
+ Condition
2564
+ FLYING
2565
+ isItem
2566
+ Condition
2567
+ IS_ITEM
2568
+ isSneaking
2569
+ Condition
2570
+ SNEAKING
2571
+ kill
2572
+ Action
2573
+ KILL
2574
+ launchTarget
2575
+ Action
2576
+ LAUNCH_TO_TARGET
2577
+ lobby
2578
+ Action
2579
+ SEND_TO_LOBBY
2580
+ loop
2581
+ Contrôle
2582
+ -
2583
+ maxHealth
2584
+ Action / Condition
2585
+ SET_MAX_HEALTH / MAX_HEALTH
2586
+ parkCheck
2587
+ Action
2588
+ PARKOUR_CHECKPOINT
2589
+ pause
2590
+ Action
2591
+ PAUSE
2592
+ placeholder
2593
+ Condition
2594
+ PLACEHOLDER_NUMBER
2595
+ playerTime
2596
+ Action
2597
+ SET_PLAYER_TIME
2598
+ playerWeather
2599
+ Action
2600
+ SET_PLAYER_WEATHER
2601
+ portal
2602
+ Condition
2603
+ PORTAL_TYPE
2604
+ random
2605
+ Contrôle
2606
+ RANDOM_ACTION
2607
+ removeItem
2608
+ Action
2609
+ REMOVE_ITEM
2610
+ resetInventory
2611
+ Action
2612
+ RESET_INVENTORY
2613
+ setTeam
2614
+ Action
2615
+ SET_PLAYER_TEAM
2616
+ sound
2617
+ Action
2618
+ PLAY_SOUND
2619
+ stat
2620
+ Action / Condition
2621
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2622
+ teamstat
2623
+ Action / Condition
2624
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2625
+ teamvar
2626
+ Action / Condition
2627
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2628
+ title
2629
+ Action
2630
+ TITLE
2631
+ tp
2632
+ Action
2633
+ TELEPORT_PLAYER
2634
+ var
2635
+ Action / Condition
2636
+ CHANGE_VARIABLE / VARIABLE_REQUIREMENT
2637
+ xpLevel
2638
+ Action
2639
+ GIVE_EXP_LEVELS
2640
+
2641
+ Documentation HTSL - Housing Trigger Scripting Language • Version 1.4.3 | BusterBrown1218 | discord.gg/bptauV2BAA
2642
+ HTSL - Documentation Officielle | Hypixel Housing
2643
+
2644
+ HTSL v1.4.3 - BusterBrown1218
2645
+
2646
+
2647
+
2648
+
2649
+ """
2650
+
2651
+ # 1. Initialisation de l'IA
2652
+ genai.configure(api_key=GOOGLE_API_KEY)
2653
+ modele_ia = genai.GenerativeModel(
2654
+ 'gemini-2.5-flash',
2655
+ system_instruction=SYSTEM_PROMPT
2656
+ )
2657
+
2658
+ # 2. La fonction qui discute avec l'IA
2659
+ def repondre_au_htsl(question, history):
2660
+ try:
2661
+ reponse = modele_ia.generate_content(question)
2662
+ return reponse.text
2663
+ except Exception as e:
2664
+ return f"❌ Aïe, petit bug : {e}"
2665
+
2666
+ # 3. Création de l'interface visuelle (Version Corrigée !)
2667
+ interface = gr.ChatInterface(
2668
+ fn=repondre_au_htsl,
2669
+ title="🤖 Mon Expert HTSL Personnel",
2670
+ description="Pose-moi tes pires problèmes de code HTSL ! Je connais la documentation par cœur."
2671
+ )
2672
+
2673
+ # 4. Allumage du serveur Web !
2674
+ if __name__ == "__main__":
2675
+ print("🚀 Lancement du serveur Web local...")
2676
+ interface.launch(inbrowser=True)