Skip to content

Commit

Permalink
Merge pull request #4 from prooheckcp/Version-0-1-2
Browse files Browse the repository at this point in the history
Version 0.1.2 [BETA]
  • Loading branch information
prooheckcp committed Jun 28, 2024
2 parents a275ca0 + fcf9c91 commit 93daae1
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 12 deletions.
8 changes: 7 additions & 1 deletion RoQuest/Client/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ function RoQuestClient:Init(lifeCycles: {QuestLifeCycle}?): ()
end)

net:On("OnQuestStarted", function(questId: string, questProgress: QuestProgress?)
self:_OnQuestAvailable(questId)
self:_OnQuestStarted(questId, questProgress)
end)

Expand Down Expand Up @@ -1013,6 +1014,11 @@ function RoQuestClient:_OnQuestObjectiveChanged(questId: string, objectiveId: st
end

local quest: Quest? = self:GetQuest(questId)

if not quest then
return
end

quest:SetObjective(objectiveId, newAmount)
end

Expand Down Expand Up @@ -1244,7 +1250,7 @@ end
@return boolean -- If it managed to give the quest to the player or not
]=]
function RoQuestClient:_GiveQuest(questId: string, questProgress: QuestProgress?): boolean
function RoQuestClient:_GiveQuest(questId: string, questProgress: QuestProgress?): boolean
-- We also check if the quest is available because of repeatable quests
if self:GetQuest(questId) and not self:CanGiveQuest(questId) then
return false
Expand Down
48 changes: 38 additions & 10 deletions RoQuest/Server/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1259,7 +1259,7 @@ function RoQuestServer:GiveQuest(player: Player, questId: string): boolean
if not self:_GiveQuest(player, questId) then
return false
end

self.OnQuestStarted:Fire(player, questId)

return true
Expand Down Expand Up @@ -1460,6 +1460,30 @@ function RoQuestServer:MakeQuestAvailable(player: Player, questId: string): ()
return
end

local function searchQuestStatus(id: string)
if not self._RequiredQuestPointer[id] then
return false
end

for pointerQuestId: string in self._RequiredQuestPointer[id] do
local pointerQuest: Quest? = self:GetQuest(player, pointerQuestId)

if not pointerQuest or pointerQuest:GetCompleteCount() < quest:GetCompleteCount() then
return true
end

if searchQuestStatus(pointerQuestId) then
return true
end
end

return false
end

if searchQuestStatus(questId) then
return
end

quest._CanRepeatQuest = true
self:_NewPlayerAvailableQuest(player, questId)
end
Expand Down Expand Up @@ -1540,24 +1564,26 @@ function RoQuestServer:_QuestDelivered(player: Player, questId: string): ()
if not quest then
return
end

self:_ChangeCompletedQuest(player, questId, nil)
self:_ChangeDeliveredQuest(player, questId, quest:_GetQuestProgress())

if self._RequiredQuestPointer[questId] then
for requiredQuestId: string in self._RequiredQuestPointer[questId] do
self:_NewPlayerAvailableQuest(player, requiredQuestId)
end
end

if quest.QuestRepeatableType == QuestRepeatableType.Infinite then
self:MakeQuestAvailable(player, questId)
elseif quest.QuestRepeatableType ~= QuestRepeatableType.Custom then
local timeForAvailable: number = TimeRequirement[quest.QuestRepeatableType]
self._Troves[player]:Add(task.delay(timeForAvailable - quest:GetTimeSinceCompleted(), self.MakeQuestAvailable, self, player, questId))
end

self:_NewPlayerAvailableQuest(player, questId)
if self._RequiredQuestPointer[questId] then
for requiredQuestId: string in self._RequiredQuestPointer[questId] do
self:_NewPlayerAvailableQuest(player, requiredQuestId)
end
end

for staticQuestId: string in self._StaticAvailableQuests do
self:MakeQuestAvailable(player, staticQuestId)
end
end

--[=[
Expand Down Expand Up @@ -1809,9 +1835,11 @@ function RoQuestServer:_GiveQuest(player: Player, questId: string, questProgress
self:_ChangeAvailableState(player, questId, nil)
self._Quests[player][questId] = questClone
self:_ChangeDeliveredQuest(player, questId, nil)

if STATUS_CHANGED_REFERENCE[questClone:GetQuestStatus()] then
self[STATUS_CHANGED_REFERENCE[questClone:GetQuestStatus()]](self, player, questId, questClone:_GetQuestProgress())
end

self._Troves[player]:Add(questClone)
for _, lifeCycleName: string in questClone.LifeCycles do
self:_CreateLifeCycle(player, questClone, lifeCycleName)
Expand Down Expand Up @@ -1916,7 +1944,7 @@ function RoQuestServer:_NewPlayerAvailableQuest(player: Player, questId: string)
if not quest then
return
end

if not self:CanGiveQuest(player, questId) then
if not self:_GetQuest(player, questId) then
if not self._UnavailableQuests[player][questId] then
Expand Down
2 changes: 1 addition & 1 deletion wally.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "prooheckcp/roquest"
description = "RoQuest is a sophisticated abstract implementation of a Quest System. Although it can self manage nearly everything it also allows for the developer to manually set and manage everything. API: prooheckcp.github.io/RoQuest/"
version = "0.1.1"
version = "0.1.2"
license = "MIT"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
Expand Down

0 comments on commit 93daae1

Please sign in to comment.