WeaponMasteryManager
extends Node enum MasteryLevel { NONE, TEST, APPRENTICE, ADVANCED, EXPERT, MASTER } # Define requirements per weapon type const WEAPON_MASTERY_REQUIREMENTS = { "sword": { MasteryLevel.TEST: 10, MasteryLevel.APPRENTICE: 100, MasteryLevel.ADVANCED: 300, MasteryLevel.EXPERT: 500, MasteryLevel.MASTER: 1000 }, "axe": { MasteryLevel.TEST: 50, MasteryLevel.APPRENTICE: 500, MasteryLevel.ADVANCED: 1000, MasteryLevel.EXPERT: 2000, MasteryLevel.MASTER: 3000 } # Add more weapons with their own requirements } # Default requirements for weapons not specifically defined const DEFAULT_MASTERY_REQUIREMENTS = { MasteryLevel.TEST: 10, MasteryLevel.APPRENTICE: 100, MasteryLevel.ADVANCED: 300, MasteryLevel.EXPERT: 600, MasteryLevel.MASTER: 1000 } const SAVE_FILE_PATH = "user://weapon_mastery.save" var mastery_data = {} func _ready(): load_mastery_data() print_mastery_stats() func load_mastery_data(): if FileAccess.file_exists(SAVE_FILE_PATH): var file = FileAccess.open(SAVE_FILE_PATH, FileAccess.READ) mastery_data = file.get_var() else: mastery_data = {} save_mastery_data() func save_mastery_data(): var file = FileAccess.open(SAVE_FILE_PATH, FileAccess.WRITE) file.store_var(mastery_data) func get_weapon_kills(weapon_id: String) -> int: if !mastery_data.has(weapon_id): mastery_data[weapon_id] = {"kills": 0} save_mastery_data() return mastery_data[weapon_id]["kills"] func add_weapon_kill(weapon_id: String): if !mastery_data.has(weapon_id): print("Initializing mastery data for weapon: %s" % weapon_id) # Debug mastery_data[weapon_id] = {"kills": 0} mastery_data[weapon_id]["kills"] += 1 save_mastery_data() print("Weapon %s kills: %d" % [weapon_id, mastery_data[weapon_id]["kills"]]) # Print when mastery level changes var new_level = get_mastery_level(weapon_id) if mastery_data[weapon_id]["kills"] == get_requirement_for_level(weapon_id, new_level): print("NEW MASTERY LEVEL for %s: %s" % [weapon_id, get_mastery_level_name(new_level)]) func get_requirement_for_level(weapon_id: String, level: MasteryLevel) -> int: # First check if weapon has specific requirements if WEAPON_MASTERY_REQUIREMENTS.has(weapon_id): if WEAPON_MASTERY_REQUIREMENTS[weapon_id].has(level): return WEAPON_MASTERY_REQUIREMENTS[weapon_id][level] # Fall back to default requirements if specific ones don't exist if DEFAULT_MASTERY_REQUIREMENTS.has(level): return DEFAULT_MASTERY_REQUIREMENTS[level] # If no requirement found, return a very high number to prevent level up return 999999 func get_mastery_level(weapon_id: String) -> MasteryLevel: var kills = get_weapon_kills(weapon_id) # Use either specific requirements or defaults var requirements = WEAPON_MASTERY_REQUIREMENTS[weapon_id] if WEAPON_MASTERY_REQUIREMENTS.has(weapon_id) else DEFAULT_MASTERY_REQUIREMENTS # Check levels from highest to lowest for level in range(MasteryLevel.MASTER, MasteryLevel.NONE, -1): # Only check levels that have requirements defined if requirements.has(level): if kills >= get_requirement_for_level(weapon_id, level): return level return MasteryLevel.NONE func get_mastery_level_name(level: MasteryLevel) -> String: return MasteryLevel.keys()[level] func print_mastery_stats(): print("\n=== WEAPON MASTERY STATS ===") if mastery_data.is_empty(): print("No mastery data found!") # Debug return print("Current mastery data:", mastery_data) # Debug for weapon_id in mastery_data: var kills = mastery_data[weapon_id]["kills"] var level = get_mastery_level(weapon_id) var next_level = level + 1 if level < MasteryLevel.MASTER else level var current_req = get_requirement_for_level(weapon_id, next_level) print("%s - Level: %s (Kills: %d/%d)" % [weapon_id, get_mastery_level_name(level), kills, current_req]) print("===========================\n") func has_mastery_requirement(weapon_id: String, required_level: MasteryLevel) -> bool: return get_mastery_level(weapon_id) >= required_level
Leave a Comment