WeaponMasteryManager
unknown
python
10 months ago
4.0 kB
5
Indexable
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
Editor is loading...
Leave a Comment