205 lines
5.4 KiB
Markdown
205 lines
5.4 KiB
Markdown
---
|
|
title: Objectifs
|
|
type: docs
|
|
weight: 1
|
|
---
|
|
|
|
Le systeme d'objectifs fournit des mecaniques de quetes avec des taches, des completions et un suivi de progression.
|
|
|
|
**Package:** `com.hypixel.hytale.builtin.adventure.objectives`
|
|
|
|
## Concepts Cles
|
|
|
|
### ObjectiveAsset
|
|
|
|
Les objectifs sont definis comme des assets JSON charges depuis `Objectives/`:
|
|
|
|
```java
|
|
public class ObjectiveAsset {
|
|
protected String id; // Identifiant unique
|
|
protected String category; // Categorie de quete
|
|
protected TaskSet[] taskSets; // Groupes de taches sequentiels
|
|
protected ObjectiveCompletionAsset[] completionHandlers; // Recompenses
|
|
protected String objectiveTitleKey; // Cle de localisation du titre
|
|
protected String objectiveDescriptionKey; // Cle de localisation de description
|
|
protected boolean removeOnItemDrop; // Retirer items objectif au drop
|
|
}
|
|
```
|
|
|
|
### TaskSet
|
|
|
|
Chaque objectif contient un ou plusieurs TaskSets a completer sequentiellement:
|
|
|
|
```java
|
|
public class TaskSet {
|
|
protected String descriptionId; // Cle de description optionnelle
|
|
protected ObjectiveTaskAsset[] tasks; // Taches a completer en parallele
|
|
}
|
|
```
|
|
|
|
### Instance d'Objectif
|
|
|
|
Quand demarre, une instance `Objective` suit l'etat:
|
|
|
|
```java
|
|
public class Objective {
|
|
private final UUID uuid; // ID unique de l'instance
|
|
private final String objectiveId; // Reference ID de l'asset
|
|
private final Set<UUID> playerUUIDs; // Joueurs participants
|
|
private ObjectiveTask[] currentTasks; // Taches actives
|
|
private int taskSetIndex; // Index du TaskSet courant
|
|
}
|
|
```
|
|
|
|
## Types de Taches
|
|
|
|
Le systeme fournit des types de taches integres enregistres par `ObjectivePlugin`:
|
|
|
|
| Type | Classe | Description |
|
|
|------|--------|-------------|
|
|
| `Craft` | `CraftObjectiveTask` | Fabriquer des items specifiques |
|
|
| `Gather` | `GatherObjectiveTask` | Collecter des items dans l'inventaire |
|
|
| `UseBlock` | `UseBlockObjectiveTask` | Interagir avec des blocs |
|
|
| `UseEntity` | `UseEntityObjectiveTask` | Interagir avec des entites |
|
|
| `TreasureMap` | `TreasureMapObjectiveTask` | Trouver des emplacements de tresor |
|
|
| `ReachLocation` | `ReachLocationTask` | Atteindre des coordonnees specifiques |
|
|
|
|
### Exemple d'Asset de Tache
|
|
|
|
```yaml
|
|
# Objectives/collect_wood.json
|
|
{
|
|
"Id": "collect_wood",
|
|
"Category": "tutorial",
|
|
"TaskSets": [
|
|
{
|
|
"Tasks": [
|
|
{
|
|
"Type": "Gather",
|
|
"Item": "oak_log",
|
|
"Amount": 10
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"Completions": [
|
|
{
|
|
"Type": "GiveItems",
|
|
"Items": [
|
|
{ "Item": "gold_coin", "Amount": 5 }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Gestionnaires de Completion
|
|
|
|
Quand tous les TaskSets sont completes, les gestionnaires de completion s'executent:
|
|
|
|
| Type | Classe | Description |
|
|
|------|--------|-------------|
|
|
| `GiveItems` | `GiveItemsCompletion` | Donner des items au joueur |
|
|
| `ClearObjectiveItems` | `ClearObjectiveItemsCompletion` | Retirer les items lies a l'objectif |
|
|
|
|
## Utilisation de l'API
|
|
|
|
### Demarrer des Objectifs
|
|
|
|
```java
|
|
ObjectivePlugin plugin = ObjectivePlugin.get();
|
|
|
|
// Demarrer un objectif pour un joueur
|
|
plugin.startObjective(player, "collect_wood");
|
|
|
|
// Avec des donnees personnalisees
|
|
Objective objective = plugin.startObjective(player, "collect_wood", customData);
|
|
```
|
|
|
|
### Suivre la Progression
|
|
|
|
```java
|
|
// Obtenir les objectifs actifs du joueur
|
|
ObjectiveHistoryComponent history = store.getComponent(
|
|
playerRef,
|
|
ObjectiveHistoryComponent.getComponentType()
|
|
);
|
|
|
|
// Verifier le statut de l'objectif
|
|
ObjectiveHistoryData data = history.getObjectiveData("collect_wood");
|
|
if (data != null && data.isCompleted()) {
|
|
// Deja complete
|
|
}
|
|
```
|
|
|
|
### Completer des Objectifs
|
|
|
|
```java
|
|
// Marquer l'objectif comme complete (declenche les completions)
|
|
objective.complete(objectivePlugin);
|
|
|
|
// Annuler l'objectif sans recompenses
|
|
objective.cancel(objectivePlugin);
|
|
```
|
|
|
|
## Conditions de Declenchement
|
|
|
|
Les objectifs peuvent avoir des conditions de declenchement pour l'activation:
|
|
|
|
```java
|
|
// Declencheur base sur la meteo
|
|
public class WeatherTriggerCondition { /* ... */ }
|
|
|
|
// Declencheur base sur la position
|
|
public class ObjectiveLocationTriggerCondition { /* ... */ }
|
|
|
|
// Declencheur base sur l'heure
|
|
public class HourRangeTriggerCondition { /* ... */ }
|
|
```
|
|
|
|
## Marqueurs de Position
|
|
|
|
Utilisez les marqueurs pour creer des objectifs spatiaux:
|
|
|
|
```java
|
|
// Definir une zone de marqueur
|
|
public interface ObjectiveLocationMarkerArea {
|
|
boolean isInArea(Vector3d position);
|
|
}
|
|
|
|
// Types de zones integres
|
|
public class ObjectiveLocationAreaRadius { /* Zone spherique */ }
|
|
public class ObjectiveLocationAreaBox { /* Zone boite */ }
|
|
```
|
|
|
|
## Commandes
|
|
|
|
| Commande | Description |
|
|
|----------|-------------|
|
|
| `/objective start <id> [joueur]` | Demarrer un objectif |
|
|
| `/objective complete <id> [joueur]` | Forcer la completion |
|
|
| `/objective history [joueur]` | Voir l'historique |
|
|
| `/objective panel` | Ouvrir le panneau admin |
|
|
|
|
## Evenements
|
|
|
|
```java
|
|
// Coffre au tresor ouvert pendant l'objectif
|
|
public class TreasureChestOpeningEvent implements IEvent<UUID> {
|
|
public TreasureChestState getChestState();
|
|
public Player getPlayer();
|
|
}
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Les assets sont charges depuis le repertoire `Objectives/` avec support d'heritage:
|
|
|
|
```yaml
|
|
# Objectives/config.yaml
|
|
ObjectiveGameplayConfig:
|
|
DefaultObjectives:
|
|
- tutorial_quest
|
|
- welcome_message
|
|
```
|