local QuestManager = {} QuestManager.__index = QuestManager -- Initialize a new quest state for a player function QuestManager.new(player) local self = setmetatable({}, QuestManager) self.player = player self.currentQuest = nil self.objectivesTarget = 0 self.objectivesCleared = 0 self.isComplete = false return self end -- Assign a quest to the player function QuestManager:AssignQuest(questName, requiredKills) self.currentQuest = questName self.objectivesTarget = requiredKills self.objectivesCleared = 0 self.isComplete = false print(string.format("Quest '%s' assigned to %s. Target: %d", questName, self.player.Name, requiredKills)) end -- Register progress securely when an objective is met function QuestManager:IncrementProgress(amount) if not self.currentQuest or self.isComplete then return end self.objectivesCleared = self.objectivesCleared + amount print(string.format("%s progress: %d/%d", self.player.Name, self.objectivesCleared, self.objectivesTarget)) if self.objectivesCleared >= self.objectivesTarget then self:CompleteQuest() end end -- Finalize the quest and award currency/experience function QuestManager:CompleteQuest() self.isComplete = true print(string.format("%s successfully finished the quest!", self.player.Name)) -- Reward logic (Server-authoritative) local leaderstats = self.player:FindFirstChild("leaderstats") if leaderstats then local gold = leaderstats:FindFirstChild("Gold") if gold then gold.Value = gold.Value + 500 -- Safely update value on the server end end -- Clear current quest slot self.currentQuest = nil end return QuestManager