This commit is contained in:
Marek Le
2026-05-09 23:37:26 +02:00
parent 6d28b04c12
commit 2d4002bd3f
263 changed files with 5250 additions and 4597 deletions

View File

@@ -0,0 +1,57 @@
extends Node
var inventories: Dictionary = {}
var equipment: Dictionary = {}
func _ready() -> void:
EventBus.entity_deregistered.connect(_on_dereg)
func _on_dereg(entity: Node) -> void:
inventories.erase(entity)
equipment.erase(entity)
func add_item(player: Node, item_id: StringName, amount: int) -> void:
if not (multiplayer.is_server() or multiplayer.multiplayer_peer == null):
return
if not player in inventories:
inventories[player] = {}
inventories[player][item_id] = inventories[player].get(item_id, 0) + amount
EventBus.inventory_changed.emit(player)
if not player.is_multiplayer_authority():
_sync_inventory.rpc_id(player.get_multiplayer_authority(), inventories[player])
func remove_item(player: Node, item_id: StringName, amount: int) -> bool:
if not (multiplayer.is_server() or multiplayer.multiplayer_peer == null):
return false
if not player in inventories:
return false
if inventories[player].get(item_id, 0) < amount:
return false
inventories[player][item_id] -= amount
if inventories[player][item_id] <= 0:
inventories[player].erase(item_id)
EventBus.inventory_changed.emit(player)
if not player.is_multiplayer_authority():
_sync_inventory.rpc_id(player.get_multiplayer_authority(), inventories[player])
return true
func get_amount(player: Node, item_id: StringName) -> int:
if not player in inventories:
return 0
return inventories[player].get(item_id, 0)
func get_inventory(player: Node) -> Dictionary:
return inventories.get(player, {})
@rpc("authority", "reliable", "call_local")
func _sync_inventory(data: Dictionary) -> void:
var local: Node = _find_local_player()
if local:
inventories[local] = data
EventBus.inventory_changed.emit(local)
func _find_local_player() -> Node:
for p in get_tree().get_nodes_in_group("player"):
if p.is_multiplayer_authority():
return p
return null