    public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
        byte action = slea.readByte();
        short questid = slea.readShort();
        MapleCharacter player = c.getPlayer();
        MapleQuest quest = MapleQuest.getInstance(questid);
        
        if (action == 0) { // Restore lost item, Credits Darter ( Rajan )
            slea.readInt();
            int itemid = slea.readInt();
            quest.restoreLostItem(player, itemid);
        } else if (action == 1) { //Start Quest
            int npc = slea.readInt();
            if(!isNpcNearby(slea, player, quest, npc)) {
                return;
            }
        if (c.getPlayer().isGM()) {
                     c.getPlayer().dropMessage(5, "開始系統任務/" + questid ); 
                    }           
            if(quest.canStart(player, npc)) {
                quest.start(player, npc);
            }
        } else if (action == 2) { // Complete Quest
            int npc = slea.readInt();
            if(!isNpcNearby(slea, player, quest, npc)) {
                return;
            }
        if (c.getPlayer().isGM()) {
                     c.getPlayer().dropMessage(5, "完成系統任務/" + questid ); 
                    }              
            if(quest.canComplete(player, npc)) {
                if (slea.available() >= 2) {
                    int selection = slea.readShort();
                    quest.complete(player, npc, selection);
                } else {
                    quest.complete(player, npc);
                }
            }
        } else if (action == 3) {// forfeit quest
            quest.forfeit(player);
            if (c.getPlayer().isGM()) {
                     c.getPlayer().dropMessage(5, "放弃任務/" + questid ); 
                    }    
        } else if (action == 4) { // scripted start quest
            int npc = slea.readInt();
            if(!isNpcNearby(slea, player, quest, npc)) {
                return;
            }
            if (c.getPlayer().isGM()) {
                     c.getPlayer().dropMessage(5, "執行腳本任務/" + questid ); 
                    }             
            if(quest.canStart(player, npc)) {
                QuestScriptManager.getInstance().start(c, questid, npc);
            }
        } else if (action == 5) { // scripted end quests
            int npc = slea.readInt();
            if(!isNpcNearby(slea, player, quest, npc)) {
                return;
            }
            if (c.getPlayer().isGM()) {
                     c.getPlayer().dropMessage(5, "完成腳本任務/" + questid ); 
                    }               
            if(quest.canComplete(player, npc)) {
                QuestScriptManager.getInstance().end(c, questid, npc);
            }
        }
    }
}