If you're editing client files to make Teleport level-selectable, then I guess you could edit trunk/src/map/skill.c and change something in this section. I'm not sure exactly what to change to skip the menu.
case AL_TELEPORT:
case ALL_ODINS_RECALL:
if(sd)
{
if (map[bl->m].flag.noteleport && skill_lv <= 2) {
clif_skill_teleportmessage(sd,0);
break;
}
if(!battle_config.duel_allow_teleport && sd->duel_group && skill_lv <= 2) { // duel restriction [LuzZza]
char output[128]; sprintf(output, msg_txt(sd,365), skill_get_name(AL_TELEPORT));
clif_displaymessage(sd->fd, output); //"Duel: Can't use %s in duel."
break;
}
if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1 ) || skill_lv == 3 )
{
if( skill_lv == 1 )
pc_randomwarp(sd,CLR_TELEPORT);
else
pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT);
break;
}
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
if( skill_lv == 1 && skill_id != ALL_ODINS_RECALL )
clif_skill_warppoint(sd,skill_id,skill_lv, (unsigned short)-1,0,0,0);
else
clif_skill_warppoint(sd,skill_id,skill_lv, (unsigned short)-1,sd->status.save_point.map,0,0);
} else
unit_warp(bl,-1,-1,-1,CLR_TELEPORT);
break;