package client; import constants.GameConstants; import java.io.Serializable; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import server.life.MapleLifeFactory; import server.quest.MapleQuest; public 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 MapleQuestStatus(MapleQuest quest, int status) { this.quest = quest; setStatus((byte) status); this.completionTime = System.currentTimeMillis(); if ((status == 1) && (!quest.getRelevantMobs().isEmpty())) { registerMobs(); } } public MapleQuestStatus(MapleQuest quest, byte status, int npc) { this.quest = quest; setStatus(status); setNpc(npc); this.completionTime = System.currentTimeMillis(); if ((status == 1) && (!quest.getRelevantMobs().isEmpty())) { registerMobs(); } } public final void setQuest(int qid) { this.quest = MapleQuest.getInstance(qid); } public final MapleQuest getQuest() { return this.quest; } public final byte getStatus() { return this.status; } public final void setStatus(byte status) { this.status = status; } public final int getNpc() { return this.npc; } public final void setNpc(int npc) { this.npc = npc; } public boolean isCustom() { return GameConstants.isCustomQuest(this.quest.getId()); } private final void registerMobs() { this.killedMobs = new LinkedHashMap(); for (Iterator i$ = this.quest.getRelevantMobs().keySet().iterator(); i$.hasNext();) { int i = ((Integer) i$.next()).intValue(); this.killedMobs.put(Integer.valueOf(i), Integer.valueOf(0)); } } private final int maxMob(int mobid) { for (Map.Entry qs : this.quest.getRelevantMobs().entrySet()) { if (((Integer) qs.getKey()).intValue() == mobid) { return ((Integer) qs.getValue()).intValue(); } } return 0; } public final boolean mobKilled(int id, int skillID) { if ((this.quest != null) && (this.quest.getSkillID() > 0) && (this.quest.getSkillID() != skillID)) { return false; } Integer mob = (Integer) this.killedMobs.get(Integer.valueOf(id)); if (mob != null) { int mo = maxMob(id); if (mob.intValue() >= mo) { return false; } this.killedMobs.put(Integer.valueOf(id), Integer.valueOf(Math.min(mob.intValue() + 1, mo))); return true; } for (Entry<Integer, Integer> mo : this.killedMobs.entrySet()) { if (questCount(((Integer) mo.getKey()).intValue(), id)) { int mobb = maxMob(((Integer) mo.getKey()).intValue()); if (((Integer) mo.getValue()).intValue() >= mobb) { return false; } this.killedMobs.put(mo.getKey(), Integer.valueOf(Math.min(((Integer) mo.getValue()).intValue() + 1, mobb))); return true; } } return false; } private final 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()).intValue(); if (i == id) { return true; } } } return false; } public final void setMobKills(int id, int count) { if (this.killedMobs == null) { registerMobs(); } this.killedMobs.put(Integer.valueOf(id), Integer.valueOf(count)); } public final boolean hasMobKills() { if (this.killedMobs == null) { return false; } return this.killedMobs.size() > 0; } public final int getMobKills(int id) { Integer mob = (Integer) this.killedMobs.get(Integer.valueOf(id)); if (mob == null) { return 0; } return mob.intValue(); } public final Map<Integer, Integer> getMobKills() { return this.killedMobs; } public final long getCompletionTime() { return this.completionTime; } public final void setCompletionTime(long completionTime) { this.completionTime = completionTime; } public final int getForfeited() { return this.forfeited; } public final 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 final void setCustomData(String customData) { this.customData = customData; } public final String getCustomData() { return this.customData; } }