WeaponMasteryManager
unknown
python
a year ago
4.0 kB
7
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