diff --git a/gui/buy_menu/shop.gd b/gui/buy_menu/shop.gd index 562d147..ea41fe6 100644 --- a/gui/buy_menu/shop.gd +++ b/gui/buy_menu/shop.gd @@ -17,11 +17,14 @@ func buy(player_id: int, weapon: WeaponResource) -> void: match weapon.slot: "ability": slot = weapon_system.get_empty_ability_slot() + if not weapon_system.can_add_ability(weapon.get_gid(),slot): + return var anything: slot = anything + if not weapon_system.can_add(slot): + return + - if not weapon_system.can_add(slot): - return var player_data = Session.player_data[player_id] player_data["money"] -= weapon.cost diff --git a/systems/weapon_system/weapon_resource.gd b/systems/weapon_system/weapon_resource.gd index c10ad2c..4385827 100644 --- a/systems/weapon_system/weapon_resource.gd +++ b/systems/weapon_system/weapon_resource.gd @@ -7,3 +7,7 @@ class_name WeaponResource @export var dropped_scene: PackedScene @export var weapon_system_scene: PackedScene @export var slot: StringName + +func get_gid() -> StringName: + var path_split: PackedStringArray = resource_path.split("/") + return path_split[len(path_split)-1].trim_suffix(".tres") diff --git a/systems/weapon_system/weapon_system.gd b/systems/weapon_system/weapon_system.gd index 8ccbd16..47e9ebb 100644 --- a/systems/weapon_system/weapon_system.gd +++ b/systems/weapon_system/weapon_system.gd @@ -79,6 +79,12 @@ func get_empty_ability_slot() -> StringName: return "ability_third" return "ability_first" +func can_add_ability(ability: StringName, slot: StringName) -> bool: + for ability_slot in ["ability_first","ability_second","ability_third"]: + if slots[ability_slot] != null and slots[ability_slot].registry_entry == ability: + return false + return can_add(slot) + func switch(to: StringName, exit: bool = true): if slots.has(to) == false or slots[to] == null or slots[to] == current_state or (multiplayer.get_remote_sender_id() != 1 and is_multiplayer_authority() == false): return