Files
dauphincraft/scripts/inventory/CraftingRecipes.gd
Poulpe (Silver Surfer deploy) 7f6811995d feat(progression): succès/achievements + toasts notification
Nouvel autoload AchievementManager avec 12 succès (Premier éclat, Mineur
confirmé, Chasseur de perles, Fouilleur d'épaves, Abysses, Légende des
océans, etc.). Chaque déblocage donne un bonus XP et joue un son.

HUD: toasts dorés avec icône + titre + desc + fade-in/out, empilés en
haut centre. Son bulle au déblocage.

Long-terme: cible des milestones cumulatifs qui donnent un sentiment de
progression durable.

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

70 lines
2.0 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()
var ach: Node = root.get_node_or_null("/root/AchievementManager")
if ach != null:
ach.note_craft()