You can go into pc.cpp in your source and look for this line:
int pc_checkjoblevelup(map_session_data *sd)
{
t_exp next = pc_nextjobexp(sd);
nullpo_ret(sd);
if(!next || sd->status.job_exp < next || pc_is_maxjoblv(sd))
return 0;
uint32 job_level = sd->status.job_level;
do {
sd->status.job_exp -= next;
//Kyoki pointed out that the max overcarry exp is the exp needed for the previous level -1. [Skotlex]
if( ( !battle_config.multi_level_up || ( battle_config.multi_level_up_job > 0 && sd->status.job_level >= battle_config.multi_level_up_job ) ) && sd->status.job_exp > next-1 )
sd->status.job_exp = next-1;
sd->status.job_level ++;
sd->status.skill_point++;
if( pc_is_maxjoblv(sd) ){
sd->status.job_exp = u64min(sd->status.job_exp,MAX_LEVEL_JOB_EXP);
break;
}
} while ((next=pc_nextjobexp(sd)) > 0 && sd->status.job_exp >= next);
clif_updatestatus(sd,SP_JOBLEVEL);
clif_updatestatus(sd,SP_JOBEXP);
clif_updatestatus(sd,SP_NEXTJOBEXP);
clif_updatestatus(sd,SP_SKILLPOINT);
status_calc_pc(sd,SCO_FORCE);
clif_misceffect(&sd->bl,1);
if (pc_checkskill(sd, SG_DEVIL) && ((sd->class_&MAPID_THIRDMASK) == MAPID_STAR_EMPEROR || pc_is_maxjoblv(sd)) )
clif_status_change(&sd->bl, EFST_DEVIL1, 1, 0, 0, 0, 1); //Permanent blind effect from SG_DEVIL.
npc_script_event(sd, NPCE_JOBLVUP);
for (; job_level <= sd->status.job_level; job_level++)
achievement_update_objective(sd, AG_GOAL_LEVEL, 1, job_level);
pc_show_questinfo(sd);
return 1;
}
where you can find "sd->status.skill_point++;"
which you can change to "sd->status.skill_point += 3; so every job gets 3 skill points for every job level. but you can also use if statements if you want to only enable that for certain jobs.
Example:
do {
sd->status.job_exp -= next;
if( ( !battle_config.multi_level_up || ( battle_config.multi_level_up_job > 0 && sd->status.job_level >= battle_config.multi_level_up_job ) ) && sd->status.job_exp > next-1 )
sd->status.job_exp = next-1;
sd->status.job_level++;
// Check if the character is a Swordsman and apply different skill point logic.
if (sd->class_ == JOB_SWORDMAN) {
sd->status.skill_point += 3; // Swordsman gets 3 skill points
} else {
sd->status.skill_point++; // Others get 1 skill point
}
if( pc_is_maxjoblv(sd) ){
sd->status.job_exp = u64min(sd->status.job_exp, MAX_LEVEL_JOB_EXP);
break;
}
} while ((next=pc_nextjobexp(sd)) > 0 && sd->status.job_exp >= next);
which will only give swordsman 3 skillpoints when leveling up job and everyone else the same 1 skillpoint per level.
If you use this in your source be aware that giving yourselfs joblevel with @jlvl command will only still give you 1 skillpoint regardless of what you input here.
Maybe someone else could give better details on that