테스트

aion-server 4.8

Gitteol
최고관리자 · 1 · 💬 0 클론/새로받기
 4.8 61f661d · 1 commits 새로받기(Pull)
game-server/src/com/aionemu/gameserver/model/gameobjects/player/QuestStateList.java
package com.aionemu.gameserver.model.gameobjects.player;

import java.util.*;
import java.util.stream.Collectors;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.aionemu.gameserver.dataholders.DataManager;
import com.aionemu.gameserver.model.gameobjects.Persistable.PersistentState;
import com.aionemu.gameserver.model.templates.quest.QuestCategory;
import com.aionemu.gameserver.questEngine.model.QuestState;
import com.aionemu.gameserver.questEngine.model.QuestStatus;

/**
 * @author MrPoke, vlog, Neon
 */
public class QuestStateList {

	private static final Logger log = LoggerFactory.getLogger(QuestStateList.class);
	private SortedMap<Integer, QuestState> quests = new TreeMap<>();
	private Set<Integer> deletedQuests = new HashSet<>();

	/**
	 * Creates an empty quests list
	 */
	public QuestStateList() {
	}

	/**
	 * @param questId
	 * @return True if there is a quest in the list with this id.
	 */
	public boolean hasQuest(int questId) {
		return quests.containsKey(questId);
	}

	public synchronized boolean addQuest(int questId, QuestState questState) {
		if (quests.containsKey(questId)) {
			log.warn("Tried to add duplicate quest to quest list: " + questId);
			return false;
		}
		quests.put(questId, questState);
		return true;
	}

	/**
	 * @param questId
	 * @return The quest that was deleted, null if it didn't exist in the list.
	 */
	public synchronized QuestState deleteQuest(int questId) {
		QuestState qs = quests.remove(questId);
		if (qs != null) {
			deletedQuests.add(qs.getQuestId());
			qs.setPersistentState(PersistentState.DELETED);
		}
		return qs;
	}

	public QuestState getQuestState(int questId) {
		return quests.get(questId);
	}

	/**
	 * @return All quests, including abandoned ones since login.
	 */
	public List<QuestState> getAllQuestState() {
		return new ArrayList<>(quests.values());
	}

	/**
	 * @return All quests, that have been completed at least once.
	 */
	public List<QuestState> getCompletedQuests() {
		return quests.values().stream().filter(qs -> qs.getCompleteCount() > 0).collect(Collectors.toList());
	}

	/**
	 * @return All quests, that are currently active or locked.
	 */
	public List<QuestState> getUncompletedQuests() {
		return quests.values().stream().filter(qs -> qs.getStatus() != QuestStatus.COMPLETE).collect(Collectors.toList());
	}

	/**
	 * @return All normal (light blue) quests, that are currently active.
	 */
	public List<QuestState> getNormalQuests() {
		List<QuestState> questList = new ArrayList<>();
		for (QuestState qs : getAllQuestState()) {
			QuestCategory qc = DataManager.QUEST_DATA.getQuestById(qs.getQuestId()).getCategory();
			QuestStatus s = qs.getStatus();

			if (qc == QuestCategory.QUEST && s != QuestStatus.COMPLETE && s != QuestStatus.LOCKED) {
				questList.add(qs);
			}
		}
		return questList;
	}

	/**
	 * @return IDs of all quests that are specifically marked as deleted (this set will be cleared after each DB update).
	 */
	public Set<Integer> getDeletedQuestIds() {
		return deletedQuests;
	}
}

📎 첨부파일

댓글 작성 권한이 없습니다.
🏆 포인트 랭킹 TOP 10
순위 닉네임 포인트
1 no_profile 타키야겐지쪽지보내기 자기소개 아이디로 검색 전체게시물 102,949
2 no_profile 동가리쪽지보내기 자기소개 아이디로 검색 전체게시물 63,733
3 no_profile 라프텔쪽지보내기 자기소개 아이디로 검색 전체게시물 51,771
4 no_profile 불멸의행복쪽지보내기 자기소개 아이디로 검색 전체게시물 36,923
5 서번트쪽지보내기 자기소개 아이디로 검색 전체게시물 35,011
6 no_profile 닥터스쪽지보내기 자기소개 아이디로 검색 전체게시물 29,470
7 no_profile 검은고양이쪽지보내기 자기소개 아이디로 검색 전체게시물 29,077
8 no_profile Revolution쪽지보내기 자기소개 아이디로 검색 전체게시물 28,199
9 no_profile 보거스쪽지보내기 자기소개 아이디로 검색 전체게시물 26,731
10 no_profile 호롤롤로쪽지보내기 자기소개 아이디로 검색 전체게시물 17,020
알림 0