Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Source] QuickChange 3rd job on level 130

Experienced Elementalist
Joined
Feb 2, 2012
Messages
241
Reaction score
17
Hi, I'm Charles and this is my first release(i dont know whether a release or a tutorial). hope you like it :D

I've seen that some are having a problem in quickjobchange when their 3rd job is on level 130 with 0% exp.
so i'm making this tutorial for them.

REQUIREMENTS:
•Working 3rd job
•quickjobchange(which is not working in 3rd job)
•Brain?

let's start

go to MoverParam.cpp
SEARCH for this
Code:
BOOL CMover::SetExperience( EXPINTEGER nExp1, int nLevel )
under #ifdef __CLIENT
REPLACE the if statement there into this:
Code:
if( (GetLevel() == 120 && GetExpPercent() == 9999) || (GetLevel()==130 && GetExpPercent() == 0))

go to WndChangeJobEx.cpp
UNDER
Code:
BOOL CWndJobChangeEx::Initialize( CWndBase* pWndParent, DWORD dwType )
you'll see an If statement, REPLACE that with this one.
Code:
if( g_pPlayer->GetLevel() == 15 || g_pPlayer->GetLevel() == 60 || g_pPlayer->GetLevel() == 130 || ( ( g_pPlayer->GetLevel() == 120 && g_pPlayer->GetExpPercent() == 9999 ) ))

go to DPSrvr.cpp
SEARCH for this
Code:
else if( nJob >= MAX_HERO && pUser->m_nLevel != 129 && pUser->GetExpPercent() != 9999 )
replace that with this
Code:
else if( nJob >= MAX_HERO && pUser->m_nLevel != 130 && pUser->GetExpPercent() != 0 )


Credits:
TheClouD = it's obvious :laugh:
Xakzi = i'm using his edits, so credits for him as well
ME = for releasing this small guide :thumbup::thumbup:
 
Last edited:
Elite Diviner
Joined
Oct 10, 2008
Messages
461
Reaction score
82
I dont get any window to ask me to change to 3rd job, I have 3rd jobs in the server working 100% but window does not ask me to change.
 
Flyff Developer
Member
Joined
Oct 14, 2011
Messages
1,275
Reaction score
121
I saw your post in the thread of xakzi. Now here, did you add this in your source or not? Because to work that window poping up for 3rd job, you should add this
 
Elite Diviner
Joined
Oct 10, 2008
Messages
461
Reaction score
82
I am adding this now, I had another problem in my definejob.h file
my 3rd job was set at 150 so i put back to 130 and i am compiling again and ill test ingame and see what happens, thank you.

[Edit] I tried everything on here and compiled with no errors. I then went ingame and tested it out and I am level 130 with 99.99% but no window apears.

Is there somthing wrong with my definejob.h?

#ifndef __DEFINE_JOB
#define __DEFINE_JOB

#define JTYPE_BASE 0
#define JTYPE_EXPERT 1
#define JTYPE_PRO 2
#define JTYPE_TROUPE 3
#define JTYPE_COMMON 4
#define JTYPE_MASTER 5
#define JTYPE_HERO 6

//#ifdef __3RD_LEGEND16

#define JTYPE_LEGEND_HERO 7

//#endif // __3RD_LEGEND16

#define MAX_JOB_SKILL 3
#define MAX_EXPERT_SKILL 20
#define MAX_PRO_SKILL 20
#define MAX_TROUPE_SKILL 9
#define MAX_MASTER_SKILL 1
#define MAX_HERO_SKILL 1

//#ifdef __3RD_LEGEND16

#define MAX_LEGEND_HERO_SKILL 6

//#endif // __3RD_LEGEND16


#define MAX_JOB_LEVEL 15
#define MAX_EXP_LEVEL 45
#define MAX_PRO_LEVEL 30
#define MAX_TROUPE_LEVEL 1

#if __VER >= 15 // __HERO129_VER15 // 15Â÷ È÷¾î·Î ·¹º§È®Àå
#define MAX_LEGEND_LEVEL 130
#define MAX_MONSTER_LEVEL 300
#define MAX_3RD_LEGEND_LEVEL 300
#else // 15Â÷ È÷¾î·Î ·¹º§È®Àå
#define MAX_LEGEND_LEVEL 130
#endif // 15Â÷ È÷¾î·Î ·¹º§È®Àå

#if __VER >= 7 //__Y_MAX_LEVEL_8
#define MAX_LEVEL 120
#else //__Y_MAX_LEVEL_8
#define MAX_LEVEL 200
#endif //__Y_MAX_LEVEL_8
//-------------------------------------------------------

And I get this Error in my Client Logs

2012/ 2/18 03:56:44 GetDlgItem : nID=933 not Found.
 
Last edited:
Flyff Developer
Member
Joined
Oct 14, 2011
Messages
1,275
Reaction score
121
Don't post everywhere because you're messing stuff. You can go in Help Section and ask for it.

My suggestion to fix those easy problem. Just add the one that made by Xakzi and add this one too. (Too easy, no problems at all)
 
Elite Diviner
Joined
Oct 10, 2008
Messages
461
Reaction score
82
I did just that. I added all the things from Xakzi and all things from here too.
I have only 1 problem, 3rd Job window will not open.

I am level 130 with 99.99% and it will now open.
 
Experienced Elementalist
Joined
Feb 2, 2012
Messages
241
Reaction score
17
I did just that. I added all the things from Xakzi and all things from here too.
I have only 1 problem, 3rd Job window will not open.

I am level 130 with 99.99% and it will now open.

Hey king, so your 3rd job is on level 130 with 99.99%? have you read what the full thread? i think not, i said "3rd job is on level 130 with 0% exp."

so if you want to have it working with a 99.99%, try to look at everyline of what i quoted.

you'll see how it works.
clue:
GetLevel()
GetExpPercent()

try to look at this two functions in the if statements.
 
Initiate Mage
Joined
Oct 7, 2009
Messages
93
Reaction score
0
Ive just set:
Code:
	if ((GetLevel() == 120 || GetLevel() == 130) && GetExpPercent() == 9999)
	{
		SAFE_DELETE(g_WndMng.m_pJobChangeEx);
		g_WndMng.m_pJobChangeEx = new CWndJobChangeEx;
		g_WndMng.m_pJobChangeEx->Initialize();
	}

but when i hit 130 99.99% nothing happening.

anyone have an idea ?
 
Inactive
Joined
Jan 20, 2009
Messages
1,015
Reaction score
1,830
Ive just set:
Code:
	if ((GetLevel() == 120 || GetLevel() == 130) && GetExpPercent() == 9999)
	{
		SAFE_DELETE(g_WndMng.m_pJobChangeEx);
		g_WndMng.m_pJobChangeEx = new CWndJobChangeEx;
		g_WndMng.m_pJobChangeEx->Initialize();
	}

but when i hit 130 99.99% nothing happening.

anyone have an idea ?

Try ->

BOOL CMover::SetExperience( EXPINTEGER nExp1, int nLevel ):
Code:
	if( IsInvalidObj(this) )
		return 0;

#ifdef __CLIENT
#ifdef __FAST_JOBCHANGE
	if ((GetLevel() == 120 && GetExpPercent() == 9999) || (GetLevel() == 130 && !IsLegendHero()))
	{
		SAFE_DELETE(g_WndMng.m_pJobChangeEx);
		g_WndMng.m_pJobChangeEx = new CWndJobChangeEx;
		g_WndMng.m_pJobChangeEx->Initialize();
	}
#endif //__FAST_JOBCHANGE
#endif

	if( nLevel > m_nLevel )

Code:
#endif //__CSC_VER9_2
			#if __VER < 12 // __MOD_TUTORIAL				
				if( GetLevel() != 1 )
					pWndWorld->m_pWndGuideSystem->GuideStart(FALSE);
			#endif
#ifdef __FAST_JOBCHANGE
				if (GetLevel() == 15 || GetLevel() == 60 || ((GetLevel() == 120 || GetLevel() == 129) && GetExpPercent() >= 9900))
				{
					SAFE_DELETE(g_WndMng.m_pJobChangeEx);
					g_WndMng.m_pJobChangeEx = new CWndJobChangeEx;
					g_WndMng.m_pJobChangeEx->Initialize();
				}
#endif

BOOL CWndJobChangeEx::Initialize(CWndBase* pWndParent, DWORD dwType):
Code:
BOOL CWndJobChangeEx::Initialize(CWndBase* pWndParent, DWORD dwType)
{
	if (g_pPlayer->GetLevel() == 15 || g_pPlayer->GetLevel() == 60 || g_pPlayer->GetLevel() == 130 || ((g_pPlayer->GetLevel() == 120 && g_pPlayer->GetExpPercent() == 9999)))
	{
		if (g_pPlayer->GetJob() == 0)
		{
			nJobMin = 1;
			nJobMax = 4;
			nNewLv = 15;
		}
		else if (g_pPlayer->GetJob() < MAX_EXPERT)
		{
			nJobMin = (g_pPlayer->GetJob() + 2) * 2;
			nJobMax = nJobMin + 1;
			nNewLv = 60;
		}
		else if (g_pPlayer->GetJob() < MAX_PROFESSIONAL)
		{
			nJobMin = g_pPlayer->GetJob() + 10;
			nJobMax = nJobMin;
			nNewLv = 60;
		}
		else if (g_pPlayer->GetJob() < MAX_HERO)
		{
			nJobMin = g_pPlayer->GetJob() + 8;
			nJobMax = nJobMin;
			(g_pPlayer->GetJob() < MAX_MASTER) ? nNewLv = 121 : nNewLv = 130;
		}
		nCurJob = nJobMin;
	}
	else {
		nCurJob = 0;
	}
	return CWndNeuz::InitDialog(g_Neuz.GetSafeHwnd(), APP_FASTJOBCHANGE, 0, CPoint(0, 0), pWndParent);
}

DPSrvr.cpp
Code:
#ifdef __FAST_JOBCHANGE
void CDPSrvr::OnUpdateJob(CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long)
{
	CUser* pUser = g_UserMng.GetUser(dpidCache, dpidUser);

	if (IsValidObj(pUser) == TRUE)
	{
		int nJob, nLevel;
		ar >> nJob >> nLevel;
		if (pUser->m_nJob >= nJob)
			return;
		if (nJob < MAX_EXPERT && pUser->m_nLevel != 15)
			return;
		else if (nJob >= MAX_EXPERT && nJob < MAX_PROFESSIONAL && pUser->m_nLevel != 60)
			return;
		else if (nJob >= MAX_PROFESSIONAL && nJob < MAX_HERO && pUser->m_nLevel != 120 && pUser->GetExpPercent() != 9999)
			return;
		else if (nJob >= MAX_HERO && pUser->m_nLevel != 130 && pUser->GetExpPercent() != 0)
			return;

		pUser->InitLevelPumbaaa(nJob, nLevel, TRUE);
	}
}
#endif
 
Initiate Mage
Joined
Jan 30, 2022
Messages
26
Reaction score
5
Thanks mate, helped me alot... Got another small question about a thing which confuses me, was able to add alot of other stuff but got a problem with the quickjobchange or even lvling the char by hand in general. Once I hit 121 H , the next mob I kill puts me back to 120 0,0 exp. After this, getting to 120 99,99% again opens the quick change for the third job ? xd.. Guess something in the definejob or in moverparam.c isnt in place or You got any other ideas ?
 
Inactive
Joined
Jan 20, 2009
Messages
1,015
Reaction score
1,830
Thanks mate, helped me alot... Got another small question about a thing which confuses me, was able to add alot of other stuff but got a problem with the quickjobchange or even lvling the char by hand in general. Once I hit 121 H , the next mob I kill puts me back to 120 0,0 exp. After this, getting to 120 99,99% again opens the quick change for the third job ? xd.. Guess something in the definejob or in moverparam.c isnt in place or You got any other ideas ?

If your using my V18 then use this one: https://forum.ragezone.com/f457/__fastjobchange-1193423/
 
Back
Top