Skip to content
Draft
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
4 changes: 2 additions & 2 deletions Arrowgene.Ddon.GameServer/Characters/CharacterManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,10 @@ private Dictionary<JobId, List<CDataSkillParam>> CalculateAcquirableSkills(Chara
// The skill level has no unlock requirements
isRelease = true;
}
else if (SkillData.Em4CustomSkills.ContainsKey(jobId) && SkillData.IsEm4Skill(jobId, skill.SkillNo, skillLevel.Lv))
else if (SkillData.IsEm4Skill(jobId, skill.SkillNo, skillLevel.Lv))
{
// The skill has an unlock requirement on EM4
isRelease = character.HasQuestCompleted(QuestId.TheShiningGate);
isRelease = character.LearnedCustomSkills.Where(x => x.Job == jobId && x.SkillId == skill.SkillNo).Any();
}
else if (SkillData.IsUnlockableSkill(skill.Job, skill.SkillNo, skillLevel.Lv))
{
Expand Down
42 changes: 24 additions & 18 deletions Arrowgene.Ddon.GameServer/Characters/RewardManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,33 @@ public PacketQueue UnlockEM4Skills(GameClient client, DbConnection? connectionIn
{
var packets = new PacketQueue();

var unlockedSkills = new S2CSkillAcquirementLearnNtc();
// TODO: Track quest completion on per job instead of unlocking all
foreach (var (jobId, releaseId) in SkillData.Em4CustomSkills)
var jobId = client.Character.Job;
if (!SkillData.Em4CustomSkills.ContainsKey(jobId))
{
Server.CharacterManager.UnlockCustomSkill(client.Character, jobId, releaseId, 1);

// Handle players who had existing skills before they were locked
var existing = client.Character.LearnedCustomSkills.Where(x => x.SkillId == releaseId && x.Job == jobId).FirstOrDefault();
if (existing == null && client.Character.CharacterJobDataList.Any(x => x.Job == jobId))
{
Server.JobManager.UnlockCustomSkill(client, client.Character, jobId, releaseId, 1, connectionIn);
}
return new();
}

unlockedSkills.SkillParamList.Add(new CDataSkillLevelBaseParam()
{
Job = jobId,
SkillNo = releaseId,
SkillLv = existing?.SkillLv ?? 1,
});
var releaseId = SkillData.Em4CustomSkills[jobId];
if (client.Character.LearnedCustomSkills.Where(x => x.Job == jobId && x.SkillId == releaseId).Any())
{
return new();
}
packets.Enqueue(client, unlockedSkills);

Server.CharacterManager.UnlockCustomSkill(client.Character, jobId, releaseId, 1);
Server.JobManager.UnlockCustomSkill(client, client.Character, jobId, releaseId, 1, connectionIn);

var unlockedSkill = new S2CSkillAcquirementLearnNtc()
{
SkillParamList = [
new()
{
Job = jobId,
SkillNo = releaseId,
SkillLv = 1,
}
]
};
packets.Enqueue(client, unlockedSkill);

return packets;
}
Expand Down
Loading