public void setProgress(String oid, String progress)
	{
		Objective o = q.getObjective(oid);
		if(o == null)
			throw new IllegalArgumentException("Quest \"" + q.getName() + "\" has no such objective: " + oid);
		if(!o.getType().isValid(progress))
			throw new IllegalArgumentException("progress is not valid for type " + o.getType().getName());
		if(o.getType().isComplete(o.getTarget(), progress))
		{
			objprog.remove(oid);
			if(SkyQuest.isOnServer())
			{
				Player p = Bukkit.getServer().getPlayerExact(player);
				if(p != null && o.isVisible())p.sendMessage(ChatColor.GREEN + "Objective completed: " + o.getName());
				for(QuestAction r:o.getRewards())
				{
					r.apply(player);
				}
			}
		}
		else objprog.put(oid, progress);
	}