Files
dauphincraft/scripts/inventory/CraftingRecipes.gd
Poulpe (Silver Surfer deploy) 610d766cb2 feat(progression): quêtes rotatives court-terme + panel HUD
Nouvel autoload QuestManager avec 11 templates (casser X sable, récolter
coraux, collecter perles, plonger à -25m, crafter 2 objets, etc.).
3 quêtes actives simultanément; complétion → récompense XP + roll d'une
nouvelle quête.

HUD: panneau "OBJECTIFS" top-right avec progression couleur (gris→vert),
bannière centrale "✓ QUÊTE" + son bulle au complete.

Motivation moyen-terme (5-15 min): le joueur a toujours qqch à faire.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 18:10:01 +00:00

67 lines
1.9 KiB
GDScript

class_name CraftingRecipes
extends RefCounted
static var RECIPES: Array = [
{
"name": "Lampe bioluminescente",
"inputs": [{"item_id": 5, "count": 2}, {"item_id": 6, "count": 1}],
"output": {"item_id": 100, "count": 1}
},
{
"name": "Harpon",
"inputs": [{"item_id": 3, "count": 2}, {"item_id": 7, "count": 2}],
"output": {"item_id": 101, "count": 1}
},
{
"name": "Bulle d'air",
"inputs": [{"item_id": 6, "count": 3}, {"item_id": 8, "count": 1}],
"output": {"item_id": 102, "count": 1}
},
{
"name": "Algue cuisinee",
"inputs": [{"item_id": 6, "count": 2}],
"output": {"item_id": 103, "count": 2}
},
{
"name": "Armure ecailles",
"inputs": [{"item_id": 4, "count": 4}, {"item_id": 7, "count": 2}],
"output": {"item_id": 104, "count": 1}
},
{
"name": "Amulette de soin",
"inputs": [{"item_id": 105, "count": 2}, {"item_id": 4, "count": 1}],
"output": {"item_id": 106, "count": 1}
},
]
static func find_available_recipes(inventory: Inventory) -> Array:
var available: Array = []
for i: int in range(RECIPES.size()):
if inventory.has_items(RECIPES[i]["inputs"]):
available.append(i)
return available
static func craft(inventory: Inventory, recipe_index: int) -> bool:
if recipe_index < 0 or recipe_index >= RECIPES.size():
return false
var recipe: Dictionary = RECIPES[recipe_index]
if not inventory.consume_items(recipe["inputs"]):
return false
var leftover: int = inventory.add_item(recipe["output"]["item_id"], recipe["output"]["count"])
if leftover > 0:
push_warning("CraftingRecipes: craft overflow — %d items lost" % leftover)
_award_craft_xp(recipe)
return true
static func _award_craft_xp(recipe: Dictionary) -> void:
var root: Node = Engine.get_main_loop().root
var pp: Node = root.get_node_or_null("/root/PlayerProgress")
if pp != null:
pp.award(pp.XP_CRAFT, "craft %s" % str(recipe.get("name", "")), Vector3.ZERO)
var qm: Node = root.get_node_or_null("/root/QuestManager")
if qm != null:
qm.note_craft()