Better Shared Quest Completion

This commit is contained in:
Kam committed 2025-02-21 16:40:44 -05:00
1 parent 98605b7276
commit 05487a06a2
2 files changed
+35 -24

No files matched your search

@@ -725,34 +725,35 @@ public class ProfileController implements IProfileController {
public void verifySlotQuests(EntityPlayer player) {
Profile profile = getProfile(player);
if(profile == null)
if (profile == null) {
return;
}
HashMap<Integer, Long> universalFinished = new HashMap<>();
for(ISlot profileSlot : profile.getSlots().values()){
IPlayerData playerData = getSlotPlayerData(player, profileSlot.getId());
if(playerData != null){
PlayerQuestData playerQuestData = (PlayerQuestData) playerData.getQuestData();
for(int id : playerQuestData.finishedQuests.keySet()){
IQuest quest = QuestController.Instance.get(id);
if(quest != null){
Quest quest1 = (Quest) quest;
if(quest1.profileOptions.enableOptions && quest1.profileOptions.completeControl == EnumProfileSync.Shared){
long complete = playerQuestData.finishedQuests.get(id);
if(universalFinished.containsKey(id)){
complete = Math.max(universalFinished.get(id), complete);
}
universalFinished.put(id, complete);
}
}
Map<Integer, Long> universalFinished = new HashMap<>();
for (Integer questId : QuestController.Instance.sharedQuests.keySet()) {
long maxTime = 0;
for (ISlot slot : profile.getSlots().values()) {
IPlayerData data = getSlotPlayerData(player, slot.getId());
if (data == null) {
continue;
}
PlayerQuestData questData = (PlayerQuestData) data.getQuestData();
Long t = questData.finishedQuests.get(questId);
if (t != null && t > maxTime) {
maxTime = t;
}
}
if (maxTime > 0) {
universalFinished.put(questId, maxTime);
}
}
for(ISlot profileSlot : profile.getSlots().values()){
IPlayerData playerData = getSlotPlayerData(player, profileSlot.getId());
if(playerData != null){
PlayerQuestData playerQuestData = (PlayerQuestData) playerData.getQuestData();
playerQuestData.finishedQuests.putAll(universalFinished);
// Push the universal shared completion times into every slot.
for (ISlot slot : profile.getSlots().values()) {
IPlayerData data = getSlotPlayerData(player, slot.getId());
if (data != null) {
PlayerQuestData questData = (PlayerQuestData) data.getQuestData();
questData.finishedQuests.putAll(universalFinished);
}
}
}
@@ -767,7 +768,6 @@ public class ProfileController implements IProfileController {
if (playerData != null) {
PlayerQuestData questData = (PlayerQuestData) playerData.getQuestData();
Long existing = questData.finishedQuests.get(questId);
// Only update if this completion time is newer.
if (existing == null || completeTime > existing) {
questData.finishedQuests.put(questId, completeTime);
}
@@ -11,6 +11,7 @@ import noppes.npcs.NoppesStringUtils;
import noppes.npcs.api.handler.IQuestHandler;
import noppes.npcs.api.handler.data.IQuest;
import noppes.npcs.api.handler.data.IQuestCategory;
import noppes.npcs.constants.EnumProfileSync;
import noppes.npcs.controllers.data.Quest;
import noppes.npcs.controllers.data.QuestCategory;
import noppes.npcs.util.NBTJsonUtil;
@@ -23,6 +24,7 @@ public class QuestController implements IQuestHandler {
public HashMap<Integer,QuestCategory> categoriesSync = new HashMap<Integer, QuestCategory>();
public HashMap<Integer,QuestCategory> categories = new HashMap<Integer, QuestCategory>();
public HashMap<Integer,Quest> quests = new HashMap<Integer, Quest>();
public HashMap<Integer, Quest> sharedQuests = new HashMap<>();
public static QuestController Instance = new QuestController();;
@@ -75,6 +77,9 @@ public class QuestController implements IQuestHandler {
}
else{
quests.put(id, quest);
if(quest.profileOptions.enableOptions && quest.profileOptions.completeControl == EnumProfileSync.Shared){
sharedQuests.put(id, quest);
}
}
}
lastUsedCatID++;
@@ -209,9 +214,15 @@ public class QuestController implements IQuestHandler {
lastUsedQuestID++;
quest.id = lastUsedQuestID;
}
quests.put(quest.id, quest);
category.quests.put(quest.id, quest);
sharedQuests.remove(quest.id);
if(quest.profileOptions.enableOptions && quest.profileOptions.completeControl == EnumProfileSync.Shared){
sharedQuests.put(quest.id, quest);
}
File dir = new File(getDir(), category.title);
if(!dir.exists())
dir.mkdirs();