Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Various fixes related to quests #594

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Arrowgene.Ddon.GameServer/Characters/QuestManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,17 @@ public static Quest GetQuest(uint questId)
return GetQuest((QuestId)questId);
}

public static bool IsQuestEnabled(uint questId)
{
var quest = GetQuest(questId);
return (quest == null) ? false : quest.Enabled;
}

public static bool IsQuestEnabled(QuestId questId)
{
return IsQuestEnabled((uint)questId);
}

public class LayoutFlag
{
public static CDataQuestLayoutFlagSetInfo Create(uint layoutFlag, StageNo stageNo, uint groupId)
Expand Down
1 change: 1 addition & 0 deletions Arrowgene.Ddon.GameServer/Characters/StageManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public static StageNo ConvertIdToStageNo(StageId stageId)
557, // Heroic Spirit Sleeping Path: Feryana Wilderness
558, // Old Heroic Spirit Shrine
576, // Fort Thines: Great Dining Hall
578, // Bonus Dungeon Lobby
580, // Fortress City Megado: Craft Room
584, // Eli Guard Tower
594, // Northern Bandit Hideout
Expand Down
8 changes: 8 additions & 0 deletions Arrowgene.Ddon.GameServer/Context/ContextManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,14 @@ public static void SetContext(PartyGroup partyGroup, ulong uniqueId, Tuple<CData
}
}

public static void RemoveContext(PartyGroup partyGroup, ulong uniqueId)
{
lock (partyGroup.Contexts)
{
partyGroup.Contexts.Remove(uniqueId);
}
}

public static Tuple<CDataContextSetBase, CDataContextSetAdditional> SetAndGetContext(PartyGroup partyGroup, ulong uniqueId, Tuple<CDataContextSetBase, CDataContextSetAdditional> context)
{
lock (partyGroup.Contexts)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public InstanceEventDropItemManager(AssetRepository assetRepository)

private bool DropEnabled(Character character, EventItem item, Enemy enemy, StageId stageId)
{
if (item.QuestIds.Count > 0 && !item.QuestIds.Any(x => QuestManager.GetQuest(x).Enabled))
if (item.QuestIds.Count > 0 && !item.QuestIds.Any(x => QuestManager.IsQuestEnabled(x)))
{
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ public override void Handle(GameClient client, StructurePacket<C2SInstanceGetEne
foreach (var questId in client.Party.QuestState.StageQuests(stageId))
{
quest = QuestManager.GetQuest(questId);
if (client.Party.QuestState.HasEnemiesInCurrentStageGroup(quest, stageId, subGroupId))
// if (client.Party.QuestState.HasEnemiesInCurrentStageGroup(quest, stageId, subGroupId))
if (quest.HasEnemiesInInCurrentStage(stageId))
{
IsQuestControlled = true;
break;
Expand Down
12 changes: 6 additions & 6 deletions Arrowgene.Ddon.GameServer/Handler/PartyPartyCreateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,17 @@ public override void Handle(GameClient client, StructurePacket<C2SPartyPartyCrea
return;
}

var quests = Server.Database.GetQuestProgressByType(client.Character.CommonId, QuestType.All);
foreach (var quest in quests)
var progress = Server.Database.GetQuestProgressByType(client.Character.CommonId, QuestType.All);
foreach (var questProgress in progress)
{
if (quest.VariantId != 0)
if (questProgress.VariantId != 0)
{
Logger.Debug($"Getting quest progress. Adding {quest.QuestId} with variant {quest.VariantId}");
party.QuestState.AddNewQuest(quest.QuestId, quest.Step, true, (uint)quest.VariantId);
Logger.Debug($"Getting quest progress. Adding {questProgress.QuestId} with variant {questProgress.VariantId}");
party.QuestState.AddNewQuest(questProgress.QuestId, questProgress.Step, true, (uint)questProgress.VariantId);
continue;
}

party.QuestState.AddNewQuest(quest.QuestId, quest.Step, true);
party.QuestState.AddNewQuest(questProgress.QuestId, questProgress.Step, true);
}

// Add quest for debug command
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ public override void Handle(GameClient client, IPacket packet)
var tutorialQuestInProgress = Server.Database.GetQuestProgressByType(client.Character.CommonId, QuestType.Tutorial);
foreach (var questProgress in tutorialQuestInProgress)
{
if (!QuestManager.IsQuestEnabled(questProgress.QuestId))
{
continue;
}

var quest = QuestManager.GetQuest(questProgress.QuestId);
var tutorialQuest = quest.ToCDataTutorialQuestOrderList(questProgress.Step);
ntc.TutorialQuestOrderList.Add(tutorialQuest);
Expand All @@ -74,7 +79,12 @@ public override void Handle(GameClient client, IPacket packet)
var priorityQuests = Server.Database.GetPriorityQuests(client.Party.Leader.Client.Character.CommonId);
foreach (var questId in priorityQuests)
{
var quest = client.Party.QuestState.GetQuest(questId);
if (!QuestManager.IsQuestEnabled(questId))
{
continue;
}

var quest = QuestManager.GetQuest(questId);
ntc.PriorityQuestList.Add(new CDataPriorityQuest()
{
QuestId = (uint)quest.QuestId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Arrowgene.Ddon.Shared.Network;
using Arrowgene.Logging;
using System.IO;
using System.Linq;

namespace Arrowgene.Ddon.GameServer.Handler
{
Expand All @@ -28,7 +29,7 @@ public override S2CQuestGetTutorialQuestListRes Handle(GameClient client, C2SQue

// This handler should return personal quests which have not been started
// yet when the player enters the StageNo
foreach (var quest in QuestManager.GetTutorialQuestsByStageNo(request.StageNo))
foreach (var quest in QuestManager.GetTutorialQuestsByStageNo(request.StageNo).Where(x => x.Enabled).ToList())
{
uint stageNo = (uint) StageManager.ConvertIdToStageNo(quest.StageId);
if (stageNo != request.StageNo)
Expand Down
5 changes: 2 additions & 3 deletions Arrowgene.Ddon.GameServer/Party/PartyQuestState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,9 @@ public void AddNewQuest(QuestId questId, uint step, bool questStarted)
quest = GetQuest(questId);
}

if (quest == null)
if (!QuestManager.IsQuestEnabled(questId))
{
// Might be progress from removed quest (or one in development).
Logger.Error($"Unable to locate quest data for {questId}");
// Quest either not enabled or removed (skip it)
return;
}

Expand Down
4 changes: 2 additions & 2 deletions Arrowgene.Ddon.GameServer/Quests/Quest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ public virtual void ResetEnemiesForBlock(GameClient client, QuestBlock questBloc
foreach (var enemy in enemyGroup.Enemies)
{
var uid = ContextManager.CreateEnemyUID(enemy.Index, enemyGroup.StageId.ToStageLayoutId());
client.Party.Contexts.Remove(uid);
ContextManager.RemoveContext(client.Party, uid);
}

S2CInstanceEnemyGroupResetNtc resetNtc = new S2CInstanceEnemyGroupResetNtc()
Expand All @@ -534,7 +534,7 @@ public virtual void ResetEnemiesForStage(GameClient client, StageId stageId)
foreach (var enemy in group.Enemies)
{
var uid = ContextManager.CreateEnemyUID(enemy.Index, group.StageId.ToStageLayoutId());
client.Party.Contexts.Remove(uid);
ContextManager.RemoveContext(client.Party, uid);
}

S2CInstanceEnemyGroupResetNtc resetNtc = new S2CInstanceEnemyGroupResetNtc()
Expand Down
1 change: 1 addition & 0 deletions Arrowgene.Ddon.Shared/Files/Assets/quests/q00020010.json
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@
"stage_id": {
"id": 335
},
"bgm_stop": true,
"event_id": 15,
"jump_stage_id": {
"id": 3
Expand Down
2 changes: 2 additions & 0 deletions docs/quests/holiday_personal_quests.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ There appears to be a set of holiday/seasonal personal quests. Some which don't

## Halloween

https://moreali523425.com/2018/10/02/post-5695/

- quest\q60301001\quest\60301001\q60301001_st0200.qst.json (mentions pumpkins)
- quest\q60301054\quest\60301054\q60301054_st0200.qst.json (also mentions pumpkins)

Expand Down
Loading