public static final void QuestAction(final SeekableLittleEndianAccessor slea, final MapleClient c, final MapleCharacter chr) {
	final byte action = slea.readByte();
	final int quest = slea.readShort2();

	switch (action) {
	    case 0: { // Restore lost item
		slea.skip(4);
		final int itemid = slea.readInt();
		MapleQuest.getInstance(quest).RestoreLostItem(chr, itemid);
		break;
	    }
	    case 1: { // Start Quest
		final int npc = slea.readInt();
		slea.skip(4);
		MapleQuest.getInstance(quest).start(chr, npc);
		break;
	    }
	    case 2: { // Complete Quest
		final int npc = slea.readInt();
		slea.skip(4);

		if (slea.available() >= 4) {
		    MapleQuest.getInstance(quest).complete(chr, npc, slea.readInt());
		} else {
		    MapleQuest.getInstance(quest).complete(chr, npc);
		}
		// c.getSession().write(MaplePacketCreator.completeQuest(c.getPlayer(), quest));
		//c.getSession().write(MaplePacketCreator.updateQuestInfo(c.getPlayer(), quest, npc, (byte)14));
		// 6 = start quest
		// 7 = unknown error
		// 8 = equip is full
		// 9 = not enough mesos
		// 11 = due to the equipment currently being worn wtf o.o
		// 12 = you may not posess more than one of this item
		break;
	    }
	    case 3: { // Forefit Quest
		MapleQuest.getInstance(quest).forfeit(chr);
		break;
	    }
	    case 4: { // Scripted Start Quest
		final int npc = slea.readInt();
		slea.skip(4);
		NPCScriptManager.getInstance().startQuest(c, npc, quest);
		break;
	    }
	    case 5: { // Scripted End Quest
		final int npc = slea.readInt();
		slea.skip(4);
		NPCScriptManager.getInstance().endQuest(c, npc, quest, false);
		c.getSession().write(MaplePacketCreator.showSpecialEffect(9)); // Quest completion
		chr.getMap().broadcastMessage(chr, MaplePacketCreator.showSpecialEffect(chr.getId(), 9), false);
		break;
	    }
	}
    }