mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 09:37:29 +00:00
Better Shared Quest Completion
This commit is contained in:
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();
|
||||
|
||||
Reference in new issue
Block a user