Init
This commit is contained in:
195
content/gameplay-systems/shop.fr.md
Normal file
195
content/gameplay-systems/shop.fr.md
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
title: Boutique
|
||||
type: docs
|
||||
weight: 5
|
||||
---
|
||||
|
||||
Le systeme de boutique fournit le commerce via des boutiques NPC et des systemes de troc.
|
||||
|
||||
**Package:** `com.hypixel.hytale.builtin.adventure.shop`
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
ShopPlugin
|
||||
├── Types de Boutique
|
||||
│ ├── ShopAsset - Definitions boutique statiques
|
||||
│ └── BarterShopAsset - Boutiques de troc dynamiques
|
||||
├── Elements
|
||||
│ ├── ShopElement - Entree item boutique
|
||||
│ └── Integration ChoiceElement
|
||||
├── Interactions
|
||||
│ └── GiveItemInteraction
|
||||
├── Pages
|
||||
│ ├── ShopPage - Page UI boutique
|
||||
│ ├── ShopPageSupplier
|
||||
│ └── BarterPage - Page UI troc
|
||||
└── Etat
|
||||
└── BarterShopState - Etat troc persistant
|
||||
```
|
||||
|
||||
## Types de Boutique
|
||||
|
||||
### ShopAsset
|
||||
|
||||
Boutiques statiques avec contenu fixe:
|
||||
|
||||
```java
|
||||
public class ShopAsset implements JsonAssetWithMap<String, DefaultAssetMap<String, ShopAsset>> {
|
||||
protected String id;
|
||||
protected ChoiceElement[] elements; // Items boutique
|
||||
|
||||
public String getId();
|
||||
public ChoiceElement[] getElements();
|
||||
}
|
||||
```
|
||||
|
||||
**Emplacement Asset:** `Shops/`
|
||||
|
||||
### BarterShopAsset
|
||||
|
||||
Boutiques dynamiques avec echanges rotatifs:
|
||||
|
||||
```java
|
||||
public class BarterShopAsset implements JsonAssetWithMap<String, DefaultAssetMap<String, BarterShopAsset>> {
|
||||
// Trading base sur le troc avec mecanique de rafraichissement
|
||||
}
|
||||
```
|
||||
|
||||
**Emplacement Asset:** `BarterShops/`
|
||||
|
||||
## Configuration de Boutique
|
||||
|
||||
### Exemple Boutique Statique
|
||||
|
||||
```yaml
|
||||
# Shops/general_store.json
|
||||
{
|
||||
"Id": "general_store",
|
||||
"Content": [
|
||||
{
|
||||
"Type": "ShopElement",
|
||||
"Item": "bread",
|
||||
"Price": 5,
|
||||
"Currency": "gold_coin"
|
||||
},
|
||||
{
|
||||
"Type": "ShopElement",
|
||||
"Item": "torch",
|
||||
"Price": 2,
|
||||
"Currency": "gold_coin"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Composants Boutique Troc
|
||||
|
||||
```java
|
||||
public class BarterShopState {
|
||||
// Etat persistant pour boutiques de troc
|
||||
public static void initialize(Path dataDirectory);
|
||||
public static void shutdown();
|
||||
}
|
||||
|
||||
public class TradeSlot { /* Slot d'echange de base */ }
|
||||
public class FixedTradeSlot extends TradeSlot { /* Echange fixe */ }
|
||||
public class PoolTradeSlot extends TradeSlot { /* Aleatoire depuis pool */ }
|
||||
public class WeightedTrade { /* Echange aleatoire pondere */ }
|
||||
|
||||
public class BarterItemStack { /* Items pour troc */ }
|
||||
public class BarterTrade { /* Definition complete d'echange */ }
|
||||
public class RefreshInterval { /* Timing de rafraichissement */ }
|
||||
```
|
||||
|
||||
## Elements de Boutique
|
||||
|
||||
### ShopElement
|
||||
|
||||
Enregistre comme type d'element de choix:
|
||||
|
||||
```java
|
||||
getCodecRegistry(ChoiceElement.CODEC).register("ShopElement", ShopElement.class, ShopElement.CODEC);
|
||||
```
|
||||
|
||||
## Interactions
|
||||
|
||||
### GiveItemInteraction
|
||||
|
||||
Interaction de choix qui donne des items au joueur:
|
||||
|
||||
```java
|
||||
getCodecRegistry(ChoiceInteraction.CODEC).register("GiveItem", GiveItemInteraction.class, GiveItemInteraction.CODEC);
|
||||
```
|
||||
|
||||
## Integration UI
|
||||
|
||||
### Page Boutique
|
||||
|
||||
Page UI personnalisee pour boutiques:
|
||||
|
||||
```java
|
||||
getCodecRegistry(OpenCustomUIInteraction.PAGE_CODEC).register(
|
||||
"Shop",
|
||||
ShopPageSupplier.class,
|
||||
ShopPageSupplier.CODEC
|
||||
);
|
||||
```
|
||||
|
||||
### Ouvrir une Boutique
|
||||
|
||||
```yaml
|
||||
# Definition d'interaction
|
||||
{
|
||||
"Type": "OpenCustomUI",
|
||||
"Page": {
|
||||
"Type": "Shop",
|
||||
"ShopId": "general_store"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Utilisation de l'API
|
||||
|
||||
### Obtenir les Assets Boutique
|
||||
|
||||
```java
|
||||
// Obtenir le store d'assets boutique
|
||||
AssetStore<String, ShopAsset, DefaultAssetMap<String, ShopAsset>> store =
|
||||
ShopAsset.getAssetStore();
|
||||
|
||||
// Obtenir boutique specifique
|
||||
ShopAsset shop = ShopAsset.getAssetMap().getAsset("general_store");
|
||||
|
||||
// Obtenir boutique troc
|
||||
BarterShopAsset barterShop = BarterShopAsset.getAssetMap().getAsset("traveling_merchant");
|
||||
```
|
||||
|
||||
### Instance Plugin Boutique
|
||||
|
||||
```java
|
||||
ShopPlugin shop = ShopPlugin.get();
|
||||
```
|
||||
|
||||
## Persistance Etat Troc
|
||||
|
||||
L'etat des boutiques de troc est sauvegarde/charge automatiquement:
|
||||
|
||||
```java
|
||||
// Appele dans start()
|
||||
BarterShopState.initialize(this.getDataDirectory());
|
||||
|
||||
// Appele dans shutdown()
|
||||
BarterShopState.shutdown();
|
||||
```
|
||||
|
||||
## Dependances d'Assets
|
||||
|
||||
Les boutiques chargent apres les items:
|
||||
|
||||
```java
|
||||
HytaleAssetStore.builder(ShopAsset.class, new DefaultAssetMap())
|
||||
.setPath("Shops")
|
||||
.loadsAfter(Item.class) // Assurer que items sont charges d'abord
|
||||
.build();
|
||||
```
|
||||
Reference in New Issue
Block a user