package client; import constants.GameConstants; import java.io.Serializable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import server.life.MapleLifeFactory; import server.quest.MapleQuest; public final class MapleQuestStatus implements Serializable { private static final long serialVersionUID = 91795419934134L; private transient MapleQuest quest; private byte status; private Map<Integer, Integer> killedMobs = null; private int npc; private long completionTime; private int forfeited = 0; private String customData=""; public static final int QUEST_UNSTART = 0; public static final int QUEST_STARTED=1; public static final int QUEST_COMPLETED=2; public MapleQuestStatus(MapleQuest quest, int status) { this.quest = quest; setStatus((byte) status); this.completionTime = System.currentTimeMillis(); } public MapleQuestStatus(MapleQuest quest, byte status, int npc) { this.quest = quest; setStatus(status); setNpc(npc); this.completionTime = System.currentTimeMillis(); } public void setQuest(int qid) { this.quest = MapleQuest.getInstance(qid); } public MapleQuest getQuest() { return this.quest; } public byte getStatus() { return this.status; } /** * 设置任务状态 * @param status */ public void setStatus(byte status) { this.status = status; } public int getNpc() { return this.npc; } public void setNpc(int npc) { this.npc = npc; } private void registerMobs() { this.killedMobs = new LinkedHashMap(); } private int maxMob(int mobid) { return 0; } public boolean mobKilled(int id, int skillID) { if ((this.quest != null) && (this.quest.getSkillID() > 0) && (this.quest.getSkillID() != skillID)) { return false; } Integer mob = this.killedMobs.get(Integer.valueOf(id)); if (mob != null) { int mo = maxMob(id); if (mob >= mo) { return false; } this.killedMobs.put(id,Math.min(mob + 1, mo)); return true; } for (Entry<Integer, Integer> mo : this.killedMobs.entrySet()) { if (questCount((mo.getKey()), id)) { int mobb = maxMob((mo.getKey()).intValue()); if ((mo.getValue()) >= mobb) { return false; } this.killedMobs.put(mo.getKey(), Math.min((mo.getValue()) + 1, mobb)); return true; } } return false; } private boolean questCount(int mo, int id) { Iterator i$; if (MapleLifeFactory.getQuestCount(mo) != null) { for (i$ = MapleLifeFactory.getQuestCount(mo).iterator(); i$.hasNext();) { int i = ((Integer) i$.next()); if (i == id) { return true; } } } return false; } public void setMobKills(int id, int count) { if (this.killedMobs == null) { registerMobs(); } this.killedMobs.put(id, count); } public boolean hasMobKills() { if (this.killedMobs == null) { return false; } return this.killedMobs.size() > 0; } public int getMobKills(int id) { Integer mob = this.killedMobs.get(Integer.valueOf(id)); if (mob == null) { return 0; } return mob; } public Map<Integer, Integer> getMobKills() { return this.killedMobs; } public long getCompletionTime() { return this.completionTime; } public void setCompletionTime(long completionTime) { this.completionTime = completionTime; } public int getForfeited() { return this.forfeited; } public void setForfeited(int forfeited) { if (forfeited >= this.forfeited) { this.forfeited = forfeited; } else { throw new IllegalArgumentException("Can't set forfeits to something lower than before."); } } public void setCustomData(String customData) { this.customData = customData; } public String getCustomData() { return this.customData; } public boolean isDailyQuest() { switch (this.quest.getId()) { case 11463: case 11464: case 11465: case 11468: return true; case 11466: case 11467: } return false; } }