• Scheduled Server Maintenance | Friday 7 November

    Our hardware provider has scheduled RAM maintenance to address the recent server instability. Work is expected by 17:00 Central European time.

    Brief downtime or interruptions may occur while the faulty memory modules are replaced. We apologise for the recent disruption and appreciate your patience.


    Special thanks to our sponsor, HyperFilter!

    We keep our community safe. They keep our servers safe. Running your own game servers? Keep them protected with HyperFilter.

My Source (v16)

sageness did you have a hard time with the math problem for the skills n weapons to link correctly to the old classes ? in these 2 parts

this is what i have in Mover.cpp

Code:
void CMover::InitLevel( int nJob, LONG nLevel, BOOL bGamma )
{
#ifdef __WORLDSERVER
	// ¿î¿µÀÚ ¸í·ÉÀ¸·Î ·¹º§¾÷ Çϴ°÷ÀÓ
	MoverProp* pProp = GetProp();
	if( pProp )
	{
		// ¹æ¶ûÀÚ ½ºÅ³ °ª °¡Áö°í ÀÖ±â.
		int nJobSkillBuf[MAX_JOB_SKILL];
		int nJobSkillLevelBuf[MAX_JOB_SKILL];
		for( int i = 0 ; i < MAX_JOB_SKILL ; ++i )
		{
			nJobSkillBuf[ i ] = m_aJobSkill[ i ].dwSkill;
			nJobSkillLevelBuf[ i ] = m_aJobSkill[ i ].dwLevel;
		}
		ZeroMemory( m_aJobSkill, sizeof( m_aJobSkill ) );

		LPSKILL lpSkill;
		// À⽺ų ÃʱâÈ­ 
		for( i = 0; i < MAX_SKILL_JOB; i++ )
		{
			m_aJobSkill[ i ].dwSkill = NULL_ID;
			m_aJobSkill[ i ].dwLevel = 0;
		}
	
		// 1. ¹æ¶ûÀÚ ½ºÅ³Àº ±×³É Áö±Þ
		m_nJob	= JOB_VAGRANT;
		ItemProp** apSkillProp = prj.m_aJobSkill[ m_nJob ];
		int nJobNum = prj.m_aJobSkillNum[ m_nJob ];
		for( i = 0; i < nJobNum; i++ )
		{
			ItemProp* pSkillProp = apSkillProp[ i ];
			lpSkill = &m_aJobSkill[ i ];
			lpSkill->dwSkill = pSkillProp->dwID;
		}
		// 2. ±âº» ´É·ÂÄ¡ ÃʱâÈ­ 
		m_nLevel	= 1;
		m_nStr	= m_nSta	= m_nDex	= m_nInt	= 15;
		m_nRemainGP = 0;
		m_nSkillLevel = 0;
		m_nSkillPoint = 0;	
			
		// 3. LP, GP, Á÷¾÷
		for( i = 1 ; i < nLevel ; i++ )
		{
			m_nLevel	= i + 1;
			m_nRemainGP += prj.m_aExpCharacter[ m_nLevel ].dwLPPoint;
#if __VER >= 10 // __LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
			if( nJob >= MAX_PROFESSIONAL && i > 59 )
				m_nRemainGP++;

			if( nJob < MAX_PROFESSIONAL )
			{
				if( ( i + 1 ) == MAX_JOB_LEVEL )
				{
					if( nJob < MAX_EXPERT )
					{
						AddChangeJob( nJob );
					}
					else
					{
						if( nJob % 2 != 0 )
						{
							AddChangeJob( ( nJob - 5 ) / 2 );
						}
						else
						{
							AddChangeJob( ( nJob - 4 ) / 2 );
						}
					}
				}
				else
				if( ( i + 1 ) == MAX_JOB_LEVEL + MAX_EXP_LEVEL )
				{
					AddChangeJob( nJob );
				}
			}
			else
			{
				if( ( i + 1 ) == MAX_JOB_LEVEL )
				{
					if( nJob < MAX_MASTER )
					{
						if( nJob % 2 != 0 )
						{
							AddChangeJob( ( nJob - 15 ) / 2 );
						}
						else
						{
							AddChangeJob( ( nJob - 14 ) / 2 );
						}
					}

#ifdef __3RD_LEGEND16
					else if( nJob < MAX_JOB )
					{
						if( nJob % 2 != 0 )
						{
							AddChangeJob( ( nJob - 31 ) / 2 );
						}
						else
						{
							AddChangeJob( ( nJob - 30 ) / 2 );
						}
					}
#endif
#ifdef __AZURE_CLASS
					else if( nJob < MAX_JOB )
					{
						if( nJob % 2 != 0 )
						{
							AddChangeJob( ( nJob - 39 ) / 2 );
						}
						else
						{
							AddChangeJob( ( nJob - 38 ) / 2 );
						}
					}
#endif
					else
					{
						if( nJob % 2 != 0 )
						{
							AddChangeJob( ( nJob - 23 ) / 2 );
						}
						else
						{
							AddChangeJob( ( nJob - 22 ) / 2 );
						}
					}
				}
				else
				if( ( i + 1 ) == MAX_JOB_LEVEL + MAX_EXP_LEVEL )
				{
					if( nJob < MAX_MASTER )
					{
						AddChangeJob( nJob - 10 );
						AddChangeJob( nJob );
					}

#ifdef __3RD_LEGEND16
					else if ( nJob < MAX_JOB)
					{
						AddChangeJob( nJob - 26 );
						AddChangeJob( nJob - 16);
						AddChangeJob( nJob - 8);
						AddChangeJob( nJob );
					}
#endif
#ifdef __AZURE_CLASS
					else if ( nJob < MAX_JOB)
					{
 						AddChangeJob( nJob - 38 );
						AddChangeJob( nJob - 26 );
						AddChangeJob( nJob - 16);
						AddChangeJob( nJob - 8);
						AddChangeJob( nJob );
					}
#endif
					else
					{
						AddChangeJob( nJob - 18 );
						AddChangeJob( nJob - 8);
						AddChangeJob( nJob );
					}
				}
			}
#else //__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
			if( ( i + 1 ) == MAX_JOB_LEVEL )
			{
				if( nJob < MAX_EXPERT )
				{
					AddChangeJob( nJob );
				}
				else
				{
					if( nJob % 2 != 0 )
					{
						AddChangeJob( ( nJob - 5 ) / 2 );
					}
					else
					{
						AddChangeJob( ( nJob - 4 ) / 2 );
					}
				}
			}
			else
			if( ( i + 1 ) == MAX_JOB_LEVEL + MAX_EXP_LEVEL )
			{
				AddChangeJob( nJob );
			}
and this is what i have in MoverParam.cpp
Code:
#if __VER >= 10 // __LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
	if( IsMaster()  )	// ·¹º§ÀÌ ¾ÈµÇ¸é ¸øÂü.				
	{
		if( nJob < MAX_EXPERT )
		{
			if( nJob * 2 + 14 == m_nJob || nJob * 2 + 15 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_PROFESSIONAL )
		{
			if( nJob + 10 == m_nJob )
				return TRUE;
		}
	}
	if( IsHero())	// ·¹º§ÀÌ ¾ÈµÇ¸é ¸øÂü.				
	{
		if( nJob < MAX_EXPERT )
		{
			if( nJob * 2 + 22 == m_nJob || nJob * 2 + 23 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_PROFESSIONAL )
		{
			if( nJob + 18 == m_nJob )
				return TRUE;
		}
#if __VER >= 14 // __NEW_ITEM_LIMIT_LEVEL
		else if( nJob < MAX_MASTER )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 8 == m_nJob )
				return TRUE;
		}
#endif // __NEW_ITEM_LIMIT_LEVEL
	}
#ifdef __3RD_LEGEND16
if( IsLegendHero())	// ·¹º§ÀÌ ¾ÈµÇ¸é ¸øÂü.				
	{
		if( nJob < MAX_EXPERT )
		{
			if( nJob * 2 + 30 == m_nJob || nJob * 2 + 31 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_PROFESSIONAL )
		{
			if( nJob + 26 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_MASTER )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 16 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_HERO )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 8 == m_nJob )
				return TRUE;
		}
	}
#endif
#ifdef __AZURE_CLASS
if( IsAzureLegendHero())	// ·¹º§ÀÌ ¾ÈµÇ¸é ¸øÂü.				
	{
		if( nJob < MAX_EXPERT )
		{
			if( nJob * 2 + 38 == m_nJob || nJob * 2 + 39 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_PROFESSIONAL )
		{
			if( nJob + 38 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_MASTER )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 26 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_HERO )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 16 == m_nJob )
				return TRUE;
		}
		else if( nJob < MAX_AZURE_JOB )	// Hero´Â ¸¶½ºÅÍ ¹«±â¸¦ ÀåÂøÇÒ ¼ö ÀÖ´Ù.
		{
			if( nJob + 8 == m_nJob )
				return TRUE;
		}
	}
#endif
#endif	//__LEGEND	//	10Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
	return FALSE;
}

and this is my definejob.h
Code:
#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

#ifdef __AZURE_CLASS
#define JTYPE_AZURE_JOB			8
#endif //__AZURE_CLASS

#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

#ifdef __AZURE_CLASS
#define MAX_AZURE_JOB_SKILL			6
#endif//__AZURE_CLASS

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


#ifdef __AZURE_CLASS
#define MAX_AZURE_JOB_LEVEL			140
#endif
#if __VER >= 15 // __HERO129_VER15				// 15Â÷ È÷¾î·Î ·¹º§È®Àå

#ifdef __3RD_LEGEND16

#define MAX_3RD_LEGEND_LEVEL		139

#define MAX_LEGEND_LEVEL			130

#else // __3RD_LEGEND16

#define MAX_LEGEND_LEVEL			129	

#endif // __3RD_LEGEND16

#define MAX_MONSTER_LEVEL			160	
#else	// 15Â÷ È÷¾î·Î ·¹º§È®Àå
#define MAX_LEGEND_LEVEL			121
#endif	// 15Â÷ È÷¾î·Î ·¹º§È®Àå

#if __VER >= 7 //__Y_MAX_LEVEL_8
#define MAX_LEVEL				120
#else //__Y_MAX_LEVEL_8
#define MAX_LEVEL				150
#endif //__Y_MAX_LEVEL_8
//-------------------------------------------------------
// Á÷¾÷ ¹øÈ£¸¦ ¸¶À½´ë·Î ¹Ù²Ù¸é ¾ÈµË´Ï´Ù.
// ¹Ù²Ù°í ½ÍÀ¸½Ã¸é seghope »ó´ãÀ».. ¤»¤»
//-------------------------------------------------------
// Job
#define JOB_VAGRANT                 0 
#define MAX_JOBBASE                 1

// Expert
#define JOB_MERCENARY               1 // ±âº» Á÷¾÷µé
#define JOB_ACROBAT                 2
#define JOB_ASSIST                  3
#define JOB_MAGICIAN                4
#define JOB_PUPPETEER               5
#define MAX_EXPERT                  6

// Professional
#define JOB_KNIGHT      		6
#define JOB_BLADE			7
#define JOB_JESTER		        8
#define JOB_RANGER                   9
#define JOB_RINGMASTER               10
#define JOB_BILLPOSTER               11
#define JOB_PSYCHIKEEPER		12
#define JOB_ELEMENTOR			13
#define JOB_GATEKEEPER               14
#define JOB_DOPPLER                  15
#define MAX_PROFESSIONAL             16

// Master
#define JOB_KNIGHT_MASTER      		16
#define JOB_BLADE_MASTER			17
#define JOB_JESTER_MASTER		        18
#define JOB_RANGER_MASTER                   19
#define JOB_RINGMASTER_MASTER               20
#define JOB_BILLPOSTER_MASTER               21
#define JOB_PSYCHIKEEPER_MASTER		22
#define JOB_ELEMENTOR_MASTER		23
#define MAX_MASTER	             24

// Hero
#define JOB_KNIGHT_HERO      		24
#define JOB_BLADE_HERO			25
#define JOB_JESTER_HERO		        26
#define JOB_RANGER_HERO                   27
#define JOB_RINGMASTER_HERO               28
#define JOB_BILLPOSTER_HERO               29
#define JOB_PSYCHIKEEPER_HERO		30
#define JOB_ELEMENTOR_HERO		31
#define MAX_HERO	             32

#ifdef __3RD_LEGEND16

// 3Â÷ Á÷¾÷
#define	JOB_LORDTEMPLER_HERO	32
#define JOB_STORMBLADE_HERO		33
#define JOB_WINDLURKER_HERO		34
#define JOB_CRACKSHOOTER_HERO	35
#define JOB_FLORIST_HERO		36
#define JOB_FORCEMASTER_HERO	37
#define JOB_MENTALIST_HERO		38
#define JOB_ELEMENTORLORD_HERO	39

#define MAX_LEGEND_HERO	             40

#endif // __3RD_LEGEND16


#ifdef __AZURE_CLASS
#define JOB_PALIDIN_HERO		40
#define JOB_SAMURAI_HERO		41
#define JOB_NINJA_HERO			42
#define JOB_TAMER_HERO			43
#define JOB_DANCER_HERO			44
#define JOB_MONK_HERO			45
#define JOB_DEATHKNIGHT_HERO	46
#define JOB_MAGICKNIGHT_HERO	47
#define MAX_AZURE_JOB			48
#endif //__AZURE_CLASS


//

#if __VER >= 16
#ifdef __AZURE_CLASS
#define MAX_JOB						 48
#endif
#elif __VER >= 10    //#ifdef 	__LEGEND	//	9Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
#ifdef __3RD_LEGEND16
#define MAX_JOB                      40
#else // __3RD_LEGEND16
#define MAX_JOB                      32
#endif // __3RD_LEGEND16

#else //__LEGEND	//	9Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans
#define MAX_JOB                      16
#endif	//__LEGEND	//	9Â÷ Àü½Â½Ã½ºÅÛ	Neuz, World, Trans

#define JOB_ALL					MAX_JOB
[/code]
what i am trying to do is add new third 2nd classes so there more option instead of just the 1 class but im have a problem right there everything else works just fine but im haveing a problem with getting them to link to there old classes n use there old skills n weapons
 
Last edited:
Has anybody already fixed the missing npc's? D;

That is not (correct) english.
Besides, aren't the npc's a part of character.inc? You can put them on and off with SetOutput "FALSE"/"TRUE" or something like that. If you are having errors using the shops, edit 2 files in the _Interface section. 1 of em was WndNotify.cpp if i am not mistaken.

Silent
 
Help WorldServer Error

Code:
2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:40


2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:60


2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:40


2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:60


2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:40


2011/ 8/30   20:04:49   LoadPropMoverEx::m_nAttackFirstRange ภฬป๓:60


2011/ 8/30   20:04:49   DiePenalty.ini not found

2011/ 8/30   20:04:49   Out of Skill Level Range -> CMonsterSkill::LoadScript() - 1354, SI_GEN_STONEHAND, 20

2011/ 8/30   20:04:49   CEnvironment::LoadScript - Script Load Failed
 
Missing NPCs can be fixed by modifying the max job size directive on the NPC objects.

Hmm thanks, I kinda understand now.
But I still can't find anything lol.
The only thing I found was in the ReadRespawn function, but changing that maxjob only created some respawn errors, the npc's still didn't spawn :/
 
Back