protected boolean processConcludeQuest(QuestClient.ConcludeMessage msg) { Long mobOid = msg.getMobOid(); if (!questOid.equals(msg.getQuestOid())) return true; if (Log.loggingDebug) log.debug("processConcludeQuest: player=" + getPlayerOid() + ", mob=" + mobOid); ArrayList<String> templateList = new ArrayList<String>(); for (CollectionGoalStatus goalStatus : goalsStatus) { for (int i = 0; i < goalStatus.getTargetCount(); i++) { templateList.add(goalStatus.getTemplateName()); } } boolean conclude = false; if (templateList.isEmpty()) { conclude = true; } else { List<Long> removeResult = InventoryClient.removeItems(getPlayerOid(), templateList); if (removeResult != null) { conclude = true; for (Long itemOid : removeResult) { ObjectManagerClient.deleteObject(itemOid); } } } if (conclude) { setConcluded(true); deactivate(); updateQuestLog(); sendStateStatusChange(); } return true; }
/** for client display: current state */ public List<String> getObjectiveStatus() { lock.lock(); try { List<String> l = new LinkedList<String>(); Iterator<CollectionGoalStatus> iter = goalsStatus.iterator(); while (iter.hasNext()) { CollectionGoalStatus status = iter.next(); String itemName = status.getTemplateName(); int numNeeded = status.targetCount; int cur = Math.min(status.currentCount, numNeeded); String objective = itemName + ": " + cur + "/" + numNeeded; l.add(objective); } return l; } finally { lock.unlock(); } }
public void updateObjectiveStatus() { for (CollectionGoalStatus goalStatus : goalsStatus) { ArrayList<String> templateList = new ArrayList<String>(); for (int i = 0; i < goalStatus.getTargetCount(); i++) { templateList.add(goalStatus.getTemplateName()); } if (templateList.size() > 0) { List<Long> findResult = InventoryClient.findItems(getPlayerOid(), templateList); goalStatus.currentCount = 0; for (Long itemOid : findResult) { if (itemOid != null) { goalStatus.currentCount++; } } } } updateQuestObjectives(); // update quest completed flag for (CollectionGoalStatus goalStatus : goalsStatus) { if (goalStatus.currentCount < goalStatus.targetCount) { log.debug("updateObjectiveStatus: quest not completed"); boolean wasComplete = getCompleted(); setCompleted(false); if (wasComplete) { // we were complete, but no longer, so update sendStateStatusChange(); } return; } } if (getCompleted()) { // already completed, ignore return; } log.debug("updateObjectiveStatus: quest is completed"); setCompleted(true); sendStateStatusChange(); WorldManagerClient.sendObjChatMsg(playerOid, 0, "You have completed quest " + getName()); }