Adjusting the subjob level to be different than half the main job level
From DSP Wiki
If you would prefer the subjob to be different from retail, example, same level as main job, or 3/4 level of main, etc, then find the following code in battleentity.cpp:
void CBattleEntity::SetSLevel(uint8 slvl) { m_slvl = (slvl > (m_mlvl >> 1) ? (m_mlvl == 1 ? 1 : (m_mlvl >> 1)) : slvl); <-- Replace this line with if (this->objtype & TYPE_PC) Sql_Query(SqlHandle, "UPDATE char_stats SET slvl = %u WHERE charid = %u LIMIT 1;", m_slvl, this->id); }
Replace the line above (with the handy note by the side "<-- Replace this line with) this code:
if (this->objtype == TYPE_MOB && this->objtype != TYPE_PET) { m_slvl = (slvl > (m_mlvl >> 1) ? (m_mlvl == 1 ? 1 : (m_mlvl >> 1)) : slvl); } else { // REPLACE THIS LINE - example of new math to place here can be found in the original patch text, quoted below }
Then replace what is in the REPLACE THIS LINE with one of the following:
m_slvl = (slvl > (m_mlvl >> 1) ? (m_mlvl == 1 ? 1 : (m_mlvl >> 1)) : slvl); // Sub is 1/2 of main of main, same as retail
m_slvl = (slvl > (m_mlvl / 3) ? (m_mlvl == 1 ? 1 : (m_mlvl / 3)) : slvl); // Sub is 1/3 of main
m_slvl = (slvl > ((m_mlvl * 2) / 3) ? (m_mlvl == 1 ? 1 : ((m_mlvl * 2) / 3)) : slvl); // Sub is 2/3 of main
m_slvl = (slvl > (m_mlvl) ? (m_mlvl == 1 ? 1 : (m_mlvl)) : slvl); // Sub caps to main.
m_slvl = 0; / / No SJ at all...Where is your Altana now?
Example, if you want the subjob to be the same as the main job, your final will look like:
void CBattleEntity::SetSLevel(uint8 slvl) { if (this->objtype == TYPE_MOB && this->objtype != TYPE_PET) { m_slvl = (slvl > (m_mlvl >> 1) ? (m_mlvl == 1 ? 1 : (m_mlvl >> 1)) : slvl); } else { m_slvl = (slvl > (m_mlvl) ? (m_mlvl == 1 ? 1 : (m_mlvl)) : slvl); // Sub caps to main. }
if (this->objtype & TYPE_PC) Sql_Query(SqlHandle, "UPDATE char_stats SET slvl = %u WHERE charid = %u LIMIT 1;", m_slvl, this->id); }