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
Comments
No comments yet
Be the first to share your thoughts!